From 0eba84c09fea2d2d0f7ee8595cda95efcea0ba76 Mon Sep 17 00:00:00 2001 From: "kostamarino@hotmail.com" Date: Thu, 24 Oct 2013 23:19:17 +0300 Subject: [PATCH 01/90] Gameini database update. Carmen Sandiego(gc), Ed, Edd n Eddy (gc), Ice Age 2 The Meltdown (gc), The Incredibles(gc), Jedi Knight II: Jedi Outcast(gc), Enter The Matrix (gc), X-Men Next Dimension(gc), Project Zero 4 (wii), Resident Evil Archives: Resident Evil Zero (wii), Shaun White Snowboarding: Road Trip(wii), GoldenEye007 (wii), Namco Museum 50th Anniversary (gc), Future Tactics (gc), The Grim Adventures of Billy & Mandy (gc), NASCAR 2005 (gc), NAMCO MUSEUM (gc), MVP Baseball 2005 (gc), BIONICLE (gc), TY the Tasmanian Tiger 2 (gc), Blast Works Build, Trade, Destroy (wii), The Croods Prehistoric Party (wii) and various Japanese games are added/updated. Fixes issue 6751. Fixes most ini files from issue 6726. Thanks to nash67 for his help. --- Data/Sys/GameSettings/G3DE6L.ini | 1 + Data/Sys/GameSettings/G3DP6L.ini | 19 +++++++++++++++++++ Data/Sys/GameSettings/G3DX6L.ini | 19 +++++++++++++++++++ Data/Sys/GameSettings/G5NEAF.ini | 31 +++++++++++++++++++++++++++++++ Data/Sys/GameSettings/G5NP69.ini | 31 +++++++++++++++++++++++++++++++ Data/Sys/GameSettings/GE9E5D.ini | 3 +++ Data/Sys/GameSettings/GFUP6V.ini | 19 +++++++++++++++++++ Data/Sys/GameSettings/GGNE5D.ini | 26 ++++++++++++++++++++++++++ Data/Sys/GameSettings/GIAE7D.ini | 5 ++++- Data/Sys/GameSettings/GIAP7D.ini | 22 ++++++++++++++++++++++ Data/Sys/GameSettings/GICD78.ini | 22 ++++++++++++++++++++++ Data/Sys/GameSettings/GICE78.ini | 3 +++ Data/Sys/GameSettings/GICF78.ini | 22 ++++++++++++++++++++++ Data/Sys/GameSettings/GICH78.ini | 22 ++++++++++++++++++++++ Data/Sys/GameSettings/GICJG9.ini | 22 ++++++++++++++++++++++ Data/Sys/GameSettings/GICP78.ini | 22 ++++++++++++++++++++++ Data/Sys/GameSettings/GJKD52.ini | 20 ++++++++++++++++++++ Data/Sys/GameSettings/GJKE52.ini | 3 ++- Data/Sys/GameSettings/GJKF52.ini | 20 ++++++++++++++++++++ Data/Sys/GameSettings/GJKP52.ini | 20 ++++++++++++++++++++ Data/Sys/GameSettings/GLMJ01.ini | 21 +++++++++++++++++++++ Data/Sys/GameSettings/GMPJ01.ini | 21 +++++++++++++++++++++ Data/Sys/GameSettings/GMXE70.ini | 9 ++++++++- Data/Sys/GameSettings/GMXJB2.ini | 30 ++++++++++++++++++++++++++++++ Data/Sys/GameSettings/GMXP70.ini | 30 ++++++++++++++++++++++++++++++ Data/Sys/GameSettings/GN4E69.ini | 31 +++++++++++++++++++++++++++++++ Data/Sys/GameSettings/GNMEAF.ini | 30 ++++++++++++++++++++++++++++++ Data/Sys/GameSettings/GPOJ8P.ini | 30 ++++++++++++++++++++++++++++++ Data/Sys/GameSettings/GPXJ01.ini | 18 ++++++++++++++++++ Data/Sys/GameSettings/GRVJA4.ini | 18 ++++++++++++++++++ Data/Sys/GameSettings/GSAJ01.ini | 27 +++++++++++++++++++++++++++ Data/Sys/GameSettings/GSOJ8P.ini | 31 +++++++++++++++++++++++++++++++ Data/Sys/GameSettings/GTOJAF.ini | 32 ++++++++++++++++++++++++++++++++ Data/Sys/GameSettings/GV4E69.ini | 28 ++++++++++++++++++++++++++++ Data/Sys/GameSettings/GVOE69.ini | 31 +++++++++++++++++++++++++++++++ Data/Sys/GameSettings/GVOP69.ini | 31 +++++++++++++++++++++++++++++++ Data/Sys/GameSettings/GXCJ01.ini | 27 +++++++++++++++++++++++++++ Data/Sys/GameSettings/GXME52.ini | 15 +++++++++++++-- Data/Sys/GameSettings/GXMF52.ini | 30 ++++++++++++++++++++++++++++++ Data/Sys/GameSettings/GXMP52.ini | 30 ++++++++++++++++++++++++++++++ Data/Sys/GameSettings/GYQJ01.ini | 18 ++++++++++++++++++ Data/Sys/GameSettings/GYTE69.ini | 30 ++++++++++++++++++++++++++++++ Data/Sys/GameSettings/GYTP69.ini | 30 ++++++++++++++++++++++++++++++ Data/Sys/GameSettings/GZWJ01.ini | 29 +++++++++++++++++++++++++++++ Data/Sys/GameSettings/R4ZJ01.ini | 3 ++- Data/Sys/GameSettings/RBHE08.ini | 1 + Data/Sys/GameSettings/RBHJ08.ini | 1 + Data/Sys/GameSettings/RBHP08.ini | 1 + Data/Sys/GameSettings/RBRE5G.ini | 30 ++++++++++++++++++++++++++++++ Data/Sys/GameSettings/RBRP5G.ini | 30 ++++++++++++++++++++++++++++++ Data/Sys/GameSettings/RBRX5G.ini | 30 ++++++++++++++++++++++++++++++ Data/Sys/GameSettings/RDFE41.ini | 21 +++++++++++++++++++++ Data/Sys/GameSettings/RDFP41.ini | 4 +++- Data/Sys/GameSettings/RDQJGD.ini | 26 ++++++++++++++++++++++++++ Data/Sys/GameSettings/RSPJ01.ini | 22 ++++++++++++++++++++++ Data/Sys/GameSettings/RZPJ01.ini | 22 ++++++++++++++++++++++ Data/Sys/GameSettings/SJBE52.ini | 2 +- Data/Sys/GameSettings/SJBJ01.ini | 31 +++++++++++++++++++++++++++++++ Data/Sys/GameSettings/SJBP52.ini | 2 +- Data/Sys/GameSettings/SVVEG9.ini | 30 ++++++++++++++++++++++++++++++ Data/Sys/GameSettings/SVVPAF.ini | 31 +++++++++++++++++++++++++++++++ 61 files changed, 1257 insertions(+), 9 deletions(-) create mode 100644 Data/Sys/GameSettings/G3DP6L.ini create mode 100644 Data/Sys/GameSettings/G3DX6L.ini create mode 100644 Data/Sys/GameSettings/G5NEAF.ini create mode 100644 Data/Sys/GameSettings/G5NP69.ini create mode 100644 Data/Sys/GameSettings/GFUP6V.ini create mode 100644 Data/Sys/GameSettings/GGNE5D.ini create mode 100644 Data/Sys/GameSettings/GIAP7D.ini create mode 100644 Data/Sys/GameSettings/GICD78.ini create mode 100644 Data/Sys/GameSettings/GICF78.ini create mode 100644 Data/Sys/GameSettings/GICH78.ini create mode 100644 Data/Sys/GameSettings/GICJG9.ini create mode 100644 Data/Sys/GameSettings/GICP78.ini create mode 100644 Data/Sys/GameSettings/GJKD52.ini create mode 100644 Data/Sys/GameSettings/GJKF52.ini create mode 100644 Data/Sys/GameSettings/GJKP52.ini create mode 100644 Data/Sys/GameSettings/GLMJ01.ini create mode 100644 Data/Sys/GameSettings/GMPJ01.ini create mode 100644 Data/Sys/GameSettings/GMXJB2.ini create mode 100644 Data/Sys/GameSettings/GMXP70.ini create mode 100644 Data/Sys/GameSettings/GN4E69.ini create mode 100644 Data/Sys/GameSettings/GNMEAF.ini create mode 100644 Data/Sys/GameSettings/GPOJ8P.ini create mode 100644 Data/Sys/GameSettings/GPXJ01.ini create mode 100644 Data/Sys/GameSettings/GRVJA4.ini create mode 100644 Data/Sys/GameSettings/GSAJ01.ini create mode 100644 Data/Sys/GameSettings/GSOJ8P.ini create mode 100644 Data/Sys/GameSettings/GTOJAF.ini create mode 100644 Data/Sys/GameSettings/GV4E69.ini create mode 100644 Data/Sys/GameSettings/GVOE69.ini create mode 100644 Data/Sys/GameSettings/GVOP69.ini create mode 100644 Data/Sys/GameSettings/GXCJ01.ini create mode 100644 Data/Sys/GameSettings/GXMF52.ini create mode 100644 Data/Sys/GameSettings/GXMP52.ini create mode 100644 Data/Sys/GameSettings/GYQJ01.ini create mode 100644 Data/Sys/GameSettings/GYTE69.ini create mode 100644 Data/Sys/GameSettings/GYTP69.ini create mode 100644 Data/Sys/GameSettings/GZWJ01.ini create mode 100644 Data/Sys/GameSettings/RBRE5G.ini create mode 100644 Data/Sys/GameSettings/RBRP5G.ini create mode 100644 Data/Sys/GameSettings/RBRX5G.ini create mode 100644 Data/Sys/GameSettings/RDFE41.ini create mode 100644 Data/Sys/GameSettings/RDQJGD.ini create mode 100644 Data/Sys/GameSettings/RSPJ01.ini create mode 100644 Data/Sys/GameSettings/RZPJ01.ini create mode 100644 Data/Sys/GameSettings/SJBJ01.ini create mode 100644 Data/Sys/GameSettings/SVVEG9.ini create mode 100644 Data/Sys/GameSettings/SVVPAF.ini 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 + From 005af7bd630fa6d71dae0e668cacc30b9b8e55be Mon Sep 17 00:00:00 2001 From: comex Date: Thu, 24 Oct 2013 16:31:49 -0400 Subject: [PATCH 02/90] Fix build on Mavericks. --- Source/Core/Core/Src/HW/WiimoteReal/IOdarwin.mm | 1 - Source/Core/Core/Src/HW/WiimoteReal/WiimoteRealBase.h | 7 +++++++ 2 files changed, 7 insertions(+), 1 deletion(-) 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/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 From 41f6f6adc9b2013ee301b79d441c05028be35436 Mon Sep 17 00:00:00 2001 From: skidau Date: Sat, 26 Oct 2013 14:32:03 +1100 Subject: [PATCH 03/90] Added memchecks when the MMU is enabled. Thanks to comex for the fix. Fixes issue 6754. --- Source/Core/Core/Src/PowerPC/Jit64/Jit.h | 10 ---------- .../Core/Src/PowerPC/Jit64/Jit_LoadStore.cpp | 4 ++-- .../Core/Src/PowerPC/JitCommon/Jit_Util.cpp | 20 ++++++++++++++++++- .../Core/Src/PowerPC/JitCommon/Jit_Util.h | 11 ++++++++++ 4 files changed, 32 insertions(+), 13 deletions(-) diff --git a/Source/Core/Core/Src/PowerPC/Jit64/Jit.h b/Source/Core/Core/Src/PowerPC/Jit64/Jit.h index a18f3692b8..43747074be 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: diff --git a/Source/Core/Core/Src/PowerPC/Jit64/Jit_LoadStore.cpp b/Source/Core/Core/Src/PowerPC/Jit64/Jit_LoadStore.cpp index e558526f4e..343803db9e 100644 --- a/Source/Core/Core/Src/PowerPC/Jit64/Jit_LoadStore.cpp +++ b/Source/Core/Core/Src/PowerPC/Jit64/Jit_LoadStore.cpp @@ -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 diff --git a/Source/Core/Core/Src/PowerPC/JitCommon/Jit_Util.cpp b/Source/Core/Core/Src/PowerPC/JitCommon/Jit_Util.cpp index 8205c2fea7..ae62bae6ce 100644 --- a/Source/Core/Core/Src/PowerPC/JitCommon/Jit_Util.cpp +++ b/Source/Core/Core/Src/PowerPC/JitCommon/Jit_Util.cpp @@ -119,7 +119,10 @@ u8 *EmuCodeBlock::UnsafeLoadToReg(X64Reg reg_value, Gen::OpArg opAddress, int ac void EmuCodeBlock::SafeLoadToReg(X64Reg reg_value, const Gen::OpArg & opAddress, int accessSize, s32 offset, u32 registersInUse, bool signExtend) { - registersInUse &= ~(1 << RAX | 1 << reg_value); + if (!jit->js.memcheck) + { + registersInUse &= ~(1 << RAX | 1 << reg_value); + } #if defined(_M_X64) #ifdef ENABLE_MEM_CHECK if (!Core::g_CoreStartupParameter.bMMU && !Core::g_CoreStartupParameter.bEnableDebugging && Core::g_CoreStartupParameter.bFastmem) @@ -164,6 +167,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 +179,8 @@ void EmuCodeBlock::SafeLoadToReg(X64Reg reg_value, const Gen::OpArg & opAddress, { MOVZX(32, accessSize, reg_value, R(EAX)); } + + MEMCHECK_END } } else @@ -192,6 +200,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 +213,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 +233,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 +246,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); diff --git a/Source/Core/Core/Src/PowerPC/JitCommon/Jit_Util.h b/Source/Core/Core/Src/PowerPC/JitCommon/Jit_Util.h index 4a51073d5a..86802df822 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 { From f82e1b9dc7ad140dea94cd6637eca007f53fc77a Mon Sep 17 00:00:00 2001 From: Tony Wasserka Date: Sat, 26 Oct 2013 12:34:54 +0200 Subject: [PATCH 04/90] D3D: Use floating points for viewport parameters. OpenGL 4.1 allows for a similar change thanks to ARB_viewport_array, but we don't make use of this, yet. --- Source/Core/VideoBackends/D3D/Src/Render.cpp | 44 +++++++------------- 1 file changed, 16 insertions(+), 28 deletions(-) diff --git a/Source/Core/VideoBackends/D3D/Src/Render.cpp b/Source/Core/VideoBackends/D3D/Src/Render.cpp index d58cc59e98..7f9218de11 100644 --- a/Source/Core/VideoBackends/D3D/Src/Render.cpp +++ b/Source/Core/VideoBackends/D3D/Src/Render.cpp @@ -513,50 +513,38 @@ 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 intendedX = Renderer::EFBToScaledXf(xfregs.viewport.xOrig - xfregs.viewport.wd - scissorXOff); + float intendedY = Renderer::EFBToScaledYf(xfregs.viewport.yOrig + xfregs.viewport.ht - scissorYOff); + float intendedWd = Renderer::EFBToScaledXf(2.0f * xfregs.viewport.wd); + float intendedHt = Renderer::EFBToScaledYf(-2.0f * xfregs.viewport.ht); + if (intendedWd < 0.f) { intendedX += intendedWd; intendedWd = -intendedWd; } - if (intendedHt < 0) + if (intendedHt < 0.f) { intendedY += intendedHt; intendedHt = -intendedHt; } // In D3D, the viewport rectangle must fit within the render target. - int X = intendedX; - if (X < 0) - X = 0; + float X = (intendedX >= 0.f) ? intendedX : 0.f; + float Y = (intendedY >= 0.f) ? intendedY : 0.f; + float Wd = (X + intendedWd <= GetTargetWidth()) ? intendedWd : (GetTargetWidth() - X); + float Ht = (Y + intendedHt <= GetTargetHeight()) ? intendedHt : (GetTargetHeight() - Y); - 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); + intendedX, intendedY, + intendedWd, intendedHt, + X, Y, + Wd, Ht); // 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); From b2c4901b3f31007aeec5d6428ef89f16b6535835 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Sat, 26 Oct 2013 19:05:31 -0500 Subject: [PATCH 05/90] Fixes GCC 4.9 compilation. It now supplies its own _mm_shuffle_epi8 intrinsic. --- Source/Core/Common/Src/CommonFuncs.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Source/Core/Common/Src/CommonFuncs.h b/Source/Core/Common/Src/CommonFuncs.h index daf135373e..0c886c782c 100644 --- a/Source/Core/Common/Src/CommonFuncs.h +++ b/Source/Core/Common/Src/CommonFuncs.h @@ -30,8 +30,8 @@ struct ArraySizeImpl : public std::extent #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 +#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) From 1eba4da21aec5c129f3a8c6a7cd55a4110412959 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Sat, 26 Oct 2013 19:21:00 -0500 Subject: [PATCH 06/90] Revert "Fixes GCC 4.9 compilation. It now supplies its own _mm_shuffle_epi8 intrinsic." This reverts commit b2c4901b3f31007aeec5d6428ef89f16b6535835. Breaks Windows build. GCC 4.9 isn't out yet anyway. --- Source/Core/Common/Src/CommonFuncs.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Source/Core/Common/Src/CommonFuncs.h b/Source/Core/Common/Src/CommonFuncs.h index 0c886c782c..daf135373e 100644 --- a/Source/Core/Common/Src/CommonFuncs.h +++ b/Source/Core/Common/Src/CommonFuncs.h @@ -30,8 +30,8 @@ struct ArraySizeImpl : public std::extent #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__ && !__GNUC_PREREQ(4,9)) \ - && !defined __SSSE3__ && !defined _M_GENERIC + +#if defined __GNUC__ && !defined __SSSE3__ && !defined _M_GENERIC #include static __inline __m128i __attribute__((__always_inline__)) _mm_shuffle_epi8(__m128i a, __m128i mask) From ccd30024b30c71743a2c588ccfd748d017a099da Mon Sep 17 00:00:00 2001 From: Shawn Hoffman Date: Sat, 19 Oct 2013 02:27:57 -0700 Subject: [PATCH 07/90] Update to VS2013 and a slew of build-related updates. Notes: * Currently there is no DEBUGFAST configuration. Defining DEBUGFAST as a preprocessor definition in Base.props (or a global header) enables it for now, pending a better method. This was done to make managing the build harder to screw up. However it may not even be an issue anymore with the new .props usage. * D3DX11SaveTextureToFile usage is dropped and not replaced. * If you have $(DXSDK_DIR) in your global property sheets (Microsoft.Cpp.$(PlatformName).user), you need to remove it. The build will error out with a message if it's configured incorrectly. * If you are on Windows 8 or above, you no longer need the June 2010 DirectX SDK installed to build dolphin. If you are in this situation, it is still required if you want your built binaries to be able to use XAudio2 and XInput on previous Windows versions. * GLew updated to 1.10.0 * compiler switches added: /volatile:iso, /d2Zi+ * LTCG available via msbuild property: DolphinRelease * SDL updated to 2.0.0 * All Externals (excl. OpenAL and SDL) are built from source. * Now uses STL version of std::{mutex,condition_variable,thread} * Now uses Build as root directory for *all* intermediate files * Binary directory is populated as post-build msbuild action * .gitignore is simplified * UnitTests project is no longer compiled --- .gitignore | 48 +- .hgeol | 3 - .hgignore | 25 - Externals/Bochs_disasm/Bochs_disasm.vcxproj | 118 +- Externals/CLRun/clrun/CLRun.vcxproj | 126 +- Externals/GLew/glew.vcxproj | 59 + Externals/GLew/glew.vcxproj.filters | 10 + Externals/GLew/glew32s.lib | Bin 1810836 -> 0 bytes Externals/GLew/glew64s.lib | Bin 1827946 -> 0 bytes Externals/GLew/include/GL/glew.h | 1358 +++- Externals/GLew/include/GL/glxew.h | 66 +- Externals/GLew/include/GL/wglew.h | 24 + Externals/GLew/src/glew.c | 1263 +++- Externals/GLew/src/glewinfo.c | 747 +- Externals/LZO/LZO.vcxproj | 115 +- Externals/LZO/LZO.vcxproj.filters | 30 - Externals/OpenAL/{Win64 => x64}/EFX-Util.lib | Bin Externals/OpenAL/{Win64 => x64}/OpenAL32.dll | Bin Externals/OpenAL/{Win64 => x64}/OpenAL32.lib | Bin Externals/SDL/Include_1.2/SDL.h | 94 - Externals/SDL/Include_1.2/SDL_active.h | 58 - Externals/SDL/Include_1.2/SDL_audio.h | 253 - Externals/SDL/Include_1.2/SDL_byteorder.h | 24 - Externals/SDL/Include_1.2/SDL_cdrom.h | 171 - Externals/SDL/Include_1.2/SDL_config.h | 45 - Externals/SDL/Include_1.2/SDL_config.h.in | 306 - .../SDL/Include_1.2/SDL_config_dreamcast.h | 106 - Externals/SDL/Include_1.2/SDL_config_macos.h | 112 - Externals/SDL/Include_1.2/SDL_config_macosx.h | 135 - .../SDL/Include_1.2/SDL_config_minimal.h | 62 - Externals/SDL/Include_1.2/SDL_config_nds.h | 115 - Externals/SDL/Include_1.2/SDL_config_os2.h | 141 - Externals/SDL/Include_1.2/SDL_config_win32.h | 180 - Externals/SDL/Include_1.2/SDL_copying.h | 22 - Externals/SDL/Include_1.2/SDL_cpuinfo.h | 75 - Externals/SDL/Include_1.2/SDL_endian.h | 194 - Externals/SDL/Include_1.2/SDL_error.h | 61 - Externals/SDL/Include_1.2/SDL_events.h | 337 - Externals/SDL/Include_1.2/SDL_getenv.h | 24 - Externals/SDL/Include_1.2/SDL_joystick.h | 167 - Externals/SDL/Include_1.2/SDL_keyboard.h | 121 - Externals/SDL/Include_1.2/SDL_keysym.h | 311 - Externals/SDL/Include_1.2/SDL_loadso.h | 74 - Externals/SDL/Include_1.2/SDL_main.h | 98 - Externals/SDL/Include_1.2/SDL_mouse.h | 140 - Externals/SDL/Include_1.2/SDL_mutex.h | 162 - Externals/SDL/Include_1.2/SDL_opengl.h | 6551 ----------------- Externals/SDL/Include_1.2/SDL_platform.h | 100 - Externals/SDL/Include_1.2/SDL_quit.h | 50 - Externals/SDL/Include_1.2/SDL_rwops.h | 144 - Externals/SDL/Include_1.2/SDL_stdinc.h | 596 -- Externals/SDL/Include_1.2/SDL_syswm.h | 214 - Externals/SDL/Include_1.2/SDL_thread.h | 119 - Externals/SDL/Include_1.2/SDL_timer.h | 115 - Externals/SDL/Include_1.2/SDL_types.h | 24 - Externals/SDL/Include_1.2/SDL_version.h | 85 - Externals/SDL/Include_1.2/SDL_video.h | 891 --- Externals/SDL/Include_1.2/begin_code.h | 156 - Externals/SDL/Include_1.2/close_code.h | 41 - Externals/SDL/Include_1.3/SDL.h | 151 - Externals/SDL/Include_1.3/SDL_audio.h | 423 -- Externals/SDL/Include_1.3/SDL_cdrom.h | 186 - Externals/SDL/Include_1.3/SDL_compat.h | 290 - Externals/SDL/Include_1.3/SDL_config.h | 45 - .../SDL/Include_1.3/SDL_config.h.default | 45 - Externals/SDL/Include_1.3/SDL_config.h.in | 327 - .../SDL/Include_1.3/SDL_config_dreamcast.h | 107 - .../SDL/Include_1.3/SDL_config_iphoneos.h | 133 - Externals/SDL/Include_1.3/SDL_config_macosx.h | 134 - .../SDL/Include_1.3/SDL_config_minimal.h | 65 - .../SDL/Include_1.3/SDL_config_nintendods.h | 119 - Externals/SDL/Include_1.3/SDL_config_os2.h | 142 - Externals/SDL/Include_1.3/SDL_copying.h | 21 - Externals/SDL/Include_1.3/SDL_cpuinfo.h | 84 - Externals/SDL/Include_1.3/SDL_error.h | 71 - Externals/SDL/Include_1.3/SDL_events.h | 486 -- Externals/SDL/Include_1.3/SDL_haptic.h | 1154 --- Externals/SDL/Include_1.3/SDL_joystick.h | 181 - Externals/SDL/Include_1.3/SDL_keyboard.h | 168 - Externals/SDL/Include_1.3/SDL_loadso.h | 82 - Externals/SDL/Include_1.3/SDL_main.h | 82 - Externals/SDL/Include_1.3/SDL_mouse.h | 274 - Externals/SDL/Include_1.3/SDL_mutex.h | 170 - Externals/SDL/Include_1.3/SDL_name.h | 11 - Externals/SDL/Include_1.3/SDL_opengles.h | 948 --- Externals/SDL/Include_1.3/SDL_platform.h | 122 - Externals/SDL/Include_1.3/SDL_quit.h | 54 - Externals/SDL/Include_1.3/SDL_rect.h | 129 - Externals/SDL/Include_1.3/SDL_revision.h | 1 - Externals/SDL/Include_1.3/SDL_rwops.h | 168 - Externals/SDL/Include_1.3/SDL_stdinc.h | 761 -- Externals/SDL/Include_1.3/SDL_surface.h | 533 -- Externals/SDL/Include_1.3/SDL_syswm.h | 244 - Externals/SDL/Include_1.3/SDL_thread.h | 144 - Externals/SDL/Include_1.3/SDL_timer.h | 128 - Externals/SDL/Include_1.3/SDL_types.h | 24 - Externals/SDL/Include_1.3/SDL_version.h | 151 - Externals/SDL/Include_1.3/SDL_video.h | 1469 ---- Externals/SDL/Include_1.3/close_code.h | 35 - Externals/SDL/Include_1.3/doxyfile | 1229 ---- Externals/SDL/win32/SDL.1.3.dll | Bin 569344 -> 0 bytes Externals/SDL/win32/SDL.1.3.lib | Bin 83260 -> 0 bytes Externals/SDL/win32/SDL.dll | Bin 360448 -> 0 bytes Externals/SDL/win32/SDL.lib | Bin 42702 -> 0 bytes Externals/SDL/x64/SDL.dll | Bin 397824 -> 0 bytes Externals/SDL/x64/SDL.lib | Bin 41688 -> 0 bytes Externals/SDL2-2.0.0/BUGS.txt | 16 + Externals/SDL2-2.0.0/COPYING.txt | 20 + Externals/SDL2-2.0.0/README-SDL.txt | 13 + Externals/SDL2-2.0.0/README.txt | 38 + Externals/SDL2-2.0.0/WhatsNew.txt | 3 + Externals/SDL2-2.0.0/include/SDL.h | 160 + Externals/SDL2-2.0.0/include/SDL_assert.h | 237 + Externals/SDL2-2.0.0/include/SDL_atomic.h | 359 + Externals/SDL2-2.0.0/include/SDL_audio.h | 506 ++ Externals/SDL2-2.0.0/include/SDL_bits.h | 97 + Externals/SDL2-2.0.0/include/SDL_blendmode.h | 63 + Externals/SDL2-2.0.0/include/SDL_clipboard.h | 71 + .../include/SDL_config.h} | 124 +- Externals/SDL2-2.0.0/include/SDL_cpuinfo.h | 146 + .../include}/SDL_endian.h | 159 +- Externals/SDL2-2.0.0/include/SDL_error.h | 76 + Externals/SDL2-2.0.0/include/SDL_events.h | 720 ++ .../SDL2-2.0.0/include/SDL_gamecontroller.h | 298 + Externals/SDL2-2.0.0/include/SDL_gesture.h | 87 + Externals/SDL2-2.0.0/include/SDL_haptic.h | 1225 +++ Externals/SDL2-2.0.0/include/SDL_hints.h | 339 + Externals/SDL2-2.0.0/include/SDL_joystick.h | 253 + Externals/SDL2-2.0.0/include/SDL_keyboard.h | 217 + .../include/SDL_keycode.h} | 138 +- Externals/SDL2-2.0.0/include/SDL_loadso.h | 81 + Externals/SDL2-2.0.0/include/SDL_log.h | 211 + Externals/SDL2-2.0.0/include/SDL_main.h | 125 + Externals/SDL2-2.0.0/include/SDL_messagebox.h | 144 + Externals/SDL2-2.0.0/include/SDL_mouse.h | 224 + Externals/SDL2-2.0.0/include/SDL_mutex.h | 251 + .../include}/SDL_name.h | 2 +- .../include}/SDL_opengl.h | 5861 +++++++++++---- Externals/SDL2-2.0.0/include/SDL_opengles.h | 38 + Externals/SDL2-2.0.0/include/SDL_opengles2.h | 38 + .../include}/SDL_pixels.h | 304 +- Externals/SDL2-2.0.0/include/SDL_platform.h | 151 + Externals/SDL2-2.0.0/include/SDL_power.h | 75 + Externals/SDL2-2.0.0/include/SDL_quit.h | 58 + Externals/SDL2-2.0.0/include/SDL_rect.h | 138 + Externals/SDL2-2.0.0/include/SDL_render.h | 845 +++ Externals/SDL2-2.0.0/include/SDL_revision.h | 2 + Externals/SDL2-2.0.0/include/SDL_rwops.h | 232 + .../include}/SDL_scancode.h | 166 +- Externals/SDL2-2.0.0/include/SDL_shape.h | 143 + Externals/SDL2-2.0.0/include/SDL_stdinc.h | 392 + Externals/SDL2-2.0.0/include/SDL_surface.h | 503 ++ Externals/SDL2-2.0.0/include/SDL_system.h | 105 + Externals/SDL2-2.0.0/include/SDL_syswm.h | 237 + Externals/SDL2-2.0.0/include/SDL_test.h | 68 + .../SDL2-2.0.0/include/SDL_test_assert.h | 105 + .../SDL2-2.0.0/include/SDL_test_common.h | 186 + .../SDL2-2.0.0/include/SDL_test_compare.h | 69 + Externals/SDL2-2.0.0/include/SDL_test_crc32.h | 124 + Externals/SDL2-2.0.0/include/SDL_test_font.h | 62 + .../SDL2-2.0.0/include/SDL_test_fuzzer.h | 384 + .../SDL2-2.0.0/include/SDL_test_harness.h | 123 + .../SDL2-2.0.0/include/SDL_test_images.h | 78 + Externals/SDL2-2.0.0/include/SDL_test_log.h | 67 + Externals/SDL2-2.0.0/include/SDL_test_md5.h | 129 + .../SDL2-2.0.0/include/SDL_test_random.h | 115 + Externals/SDL2-2.0.0/include/SDL_thread.h | 240 + Externals/SDL2-2.0.0/include/SDL_timer.h | 104 + Externals/SDL2-2.0.0/include/SDL_touch.h | 86 + Externals/SDL2-2.0.0/include/SDL_types.h | 29 + Externals/SDL2-2.0.0/include/SDL_version.h | 162 + Externals/SDL2-2.0.0/include/SDL_video.h | 953 +++ .../include}/begin_code.h | 87 +- Externals/SDL2-2.0.0/include/close_code.h | 37 + Externals/SDL2-2.0.0/lib/Win32/SDL2.dll | Bin 0 -> 872448 bytes Externals/SDL2-2.0.0/lib/Win32/SDL2.lib | Bin 0 -> 111002 bytes Externals/SDL2-2.0.0/lib/x64/SDL2.dll | Bin 0 -> 1020416 bytes Externals/SDL2-2.0.0/lib/x64/SDL2.lib | Bin 0 -> 108428 bytes .../SFML/build/vc2010/SFML_Network.vcxproj | 137 +- Externals/SOIL/SOIL.vcxproj | 117 +- Externals/libjpeg/jconfig.h | 45 - Externals/libjpeg/jmorecfg.h | 371 - Externals/libjpeg/jpeglib.h | 1160 --- Externals/libjpeg/libjpeg.lib | Bin 1280922 -> 0 bytes Externals/libjpeg/libjpeg64.lib | Bin 1294318 -> 0 bytes Externals/libpng/png/png.vcxproj | 190 +- Externals/libpng/png/png.vcxproj.filters | 32 - Externals/libusbx/msvc/errno.h | 102 - Externals/libusbx/msvc/inttypes.h | 295 - .../libusbx/msvc/libusb_static_2005.vcproj | 362 - .../libusbx/msvc/libusb_static_2010.vcxproj | 213 - .../libusbx/msvc/libusb_static_2012.vcxproj | 156 - .../msvc/libusb_static_2012.vcxproj.filters | 74 - .../libusbx/msvc/libusb_static_2013.vcxproj | 76 + ...ers => libusb_static_2013.vcxproj.filters} | 0 Externals/libusbx/msvc/stdint.h | 256 - Externals/miniupnpc/miniupnpc.vcxproj | 113 +- Externals/miniupnpc/miniupnpc.vcxproj.filters | 108 - Externals/polarssl/visualc/PolarSSL.vcxproj | 97 + Externals/portaudio/Win32/Debug/portaudio.lib | Bin 1187170 -> 0 bytes Externals/portaudio/Win32/Debug/portaudio.pdb | Bin 192512 -> 0 bytes .../portaudio/Win32/DebugFast/portaudio.lib | Bin 1149188 -> 0 bytes .../portaudio/Win32/DebugFast/portaudio.pdb | Bin 184320 -> 0 bytes .../portaudio/Win32/Release/portaudio.lib | Bin 1149188 -> 0 bytes .../portaudio/Win32/Release/portaudio.pdb | Bin 184320 -> 0 bytes Externals/portaudio/build/dolphin-notes.txt | 6 + Externals/portaudio/build/portaudio.vcxproj | 87 + .../portaudio/build/portaudio.vcxproj.filters | 125 + Externals/portaudio/src/SConscript | 220 + .../portaudio/src/common/pa_allocation.c | 243 + .../portaudio/src/common/pa_allocation.h | 104 + .../portaudio/src/common/pa_converters.c | 1983 +++++ .../portaudio/src/common/pa_converters.h | 263 + Externals/portaudio/src/common/pa_cpuload.c | 105 + Externals/portaudio/src/common/pa_cpuload.h | 72 + .../portaudio/src/common/pa_debugprint.c | 123 + .../portaudio/src/common/pa_debugprint.h | 149 + Externals/portaudio/src/common/pa_dither.c | 218 + Externals/portaudio/src/common/pa_dither.h | 106 + .../portaudio/src/common/pa_endianness.h | 145 + Externals/portaudio/src/common/pa_front.c | 1770 +++++ Externals/portaudio/src/common/pa_hostapi.h | 362 + .../portaudio/src/common/pa_memorybarrier.h | 128 + Externals/portaudio/src/common/pa_process.c | 1827 +++++ Externals/portaudio/src/common/pa_process.h | 754 ++ .../portaudio/src/common/pa_ringbuffer.c | 237 + .../portaudio/src/common/pa_ringbuffer.h | 233 + Externals/portaudio/src/common/pa_stream.c | 150 + Externals/portaudio/src/common/pa_stream.h | 205 + Externals/portaudio/src/common/pa_trace.c | 97 + Externals/portaudio/src/common/pa_trace.h | 101 + Externals/portaudio/src/common/pa_types.h | 107 + Externals/portaudio/src/common/pa_util.h | 159 + .../src/hostapi/alsa/pa_linux_alsa.c | 4552 ++++++++++++ .../src/hostapi/asihpi/pa_linux_asihpi.c | 2893 ++++++++ .../src/hostapi/asio/ASIO-README.txt | 147 + .../src/hostapi/asio/Callback_adaptation_.pdf | Bin 0 -> 50527 bytes .../portaudio/src/hostapi/asio/Pa_ASIO.pdf | Bin 0 -> 50778 bytes .../hostapi/asio/iasiothiscallresolver.cpp | 572 ++ .../src/hostapi/asio/iasiothiscallresolver.h | 197 + .../portaudio/src/hostapi/asio/pa_asio.cpp | 4214 +++++++++++ .../portaudio/src/hostapi/coreaudio/notes.txt | 196 + .../src/hostapi/coreaudio/pa_mac_core.c | 2752 +++++++ .../hostapi/coreaudio/pa_mac_core_blocking.c | 592 ++ .../hostapi/coreaudio/pa_mac_core_blocking.h | 136 + .../hostapi/coreaudio/pa_mac_core_internal.h | 194 + .../src/hostapi/coreaudio/pa_mac_core_old.c | 913 +++ .../hostapi/coreaudio/pa_mac_core_utilities.c | 701 ++ .../hostapi/coreaudio/pa_mac_core_utilities.h | 218 + .../portaudio/src/hostapi/dsound/pa_win_ds.c | 3154 ++++++++ .../src/hostapi/dsound/pa_win_ds_dynlink.c | 224 + .../src/hostapi/dsound/pa_win_ds_dynlink.h | 106 + .../portaudio/src/hostapi/jack/pa_jack.c | 1765 +++++ .../src/hostapi/oss/low_latency_tip.txt | Bin 0 -> 3111 bytes .../portaudio/src/hostapi/oss/pa_unix_oss.c | 2030 +++++ Externals/portaudio/src/hostapi/oss/recplay.c | 114 + .../portaudio/src/hostapi/skeleton/README.txt | 1 + .../hostapi/skeleton/pa_hostapi_skeleton.c | 818 ++ .../wasapi/mingw-include/AudioSessionTypes.h | 94 + .../FunctionDiscoveryKeys_devpkey.h | 186 + .../wasapi/mingw-include/audioclient.h | 1177 +++ .../wasapi/mingw-include/devicetopology.h | 3275 ++++++++ .../wasapi/mingw-include/endpointvolume.h | 620 ++ .../mingw-include/functiondiscoverykeys.h | 255 + .../src/hostapi/wasapi/mingw-include/ks.h | 3666 +++++++++ .../src/hostapi/wasapi/mingw-include/ksguid.h | 28 + .../hostapi/wasapi/mingw-include/ksmedia.h | 4551 ++++++++++++ .../hostapi/wasapi/mingw-include/ksproxy.h | 639 ++ .../hostapi/wasapi/mingw-include/ksuuids.h | 159 + .../wasapi/mingw-include/mmdeviceapi.h | 929 +++ .../hostapi/wasapi/mingw-include/propidl.h | 1275 ++++ .../hostapi/wasapi/mingw-include/propkey.h | 4274 +++++++++++ .../hostapi/wasapi/mingw-include/propkeydef.h | 26 + .../hostapi/wasapi/mingw-include/propsys.h | 3605 +++++++++ .../src/hostapi/wasapi/mingw-include/rpcsal.h | 113 + .../src/hostapi/wasapi/mingw-include/sal.h | 252 + .../hostapi/wasapi/mingw-include/sdkddkver.h | 225 + .../hostapi/wasapi/mingw-include/shtypes.h | 468 ++ .../wasapi/mingw-include/structuredquery.h | 2478 +++++++ .../src/hostapi/wasapi/pa_win_wasapi.c | 5156 +++++++++++++ .../portaudio/src/hostapi/wasapi/readme.txt | 25 + .../src/hostapi/wdmks/pa_win_wdmks.c | 3308 +++++++++ .../portaudio/src/hostapi/wdmks/readme.txt | 82 + .../portaudio/src/hostapi/wmme/pa_win_wmme.c | 4007 ++++++++++ .../portaudio/src/os/unix/pa_unix_hostapis.c | 103 + .../portaudio/src/os/unix/pa_unix_util.c | 710 ++ .../portaudio/src/os/unix/pa_unix_util.h | 224 + .../src/os/win/pa_win_coinitialize.c | 144 + .../src/os/win/pa_win_coinitialize.h | 94 + .../portaudio/src/os/win/pa_win_hostapis.c | 102 + Externals/portaudio/src/os/win/pa_win_util.c | 153 + .../portaudio/src/os/win/pa_win_waveformat.c | 154 + .../portaudio/src/os/win/pa_win_wdmks_utils.c | 297 + .../portaudio/src/os/win/pa_win_wdmks_utils.h | 65 + .../src/os/win/pa_x86_plain_converters.c | 1219 +++ .../src/os/win/pa_x86_plain_converters.h | 60 + Externals/portaudio/x64/Debug/portaudio.lib | Bin 1240980 -> 0 bytes Externals/portaudio/x64/Debug/portaudio.pdb | Bin 184320 -> 0 bytes .../portaudio/x64/DebugFast/portaudio.lib | Bin 1161496 -> 0 bytes .../portaudio/x64/DebugFast/portaudio.pdb | Bin 184320 -> 0 bytes Externals/portaudio/x64/Release/portaudio.lib | Bin 1161496 -> 0 bytes Externals/portaudio/x64/Release/portaudio.pdb | Bin 184320 -> 0 bytes Externals/soundtouch/SoundTouch.vcxproj | 325 +- .../soundtouch/SoundTouch.vcxproj.filters | 60 - .../wxWidgets3/build/msw/wx_base.vcxproj | 521 +- .../build/msw/wx_base.vcxproj.filters | 53 +- Externals/zlib/zlib.vcxproj | 121 +- Externals/zlib/zlib.vcxproj.filters | 96 - Languages/Languages.vcxproj | 132 +- Source/Core/AudioCommon/AudioCommon.vcxproj | 198 +- .../AudioCommon/AudioCommon.vcxproj.filters | 39 +- Source/Core/AudioCommon/Src/AudioCommon.cpp | 47 +- Source/Core/AudioCommon/Src/AudioCommon.h | 2 +- Source/Core/AudioCommon/Src/DSoundStream.cpp | 3 +- Source/Core/AudioCommon/Src/DSoundStream.h | 3 +- Source/Core/AudioCommon/Src/NullSoundStream.h | 2 +- Source/Core/AudioCommon/Src/OpenALStream.h | 8 +- Source/Core/AudioCommon/Src/SoundStream.h | 4 +- Source/Core/AudioCommon/Src/XAudio2Stream.cpp | 88 +- Source/Core/AudioCommon/Src/XAudio2Stream.h | 71 +- .../Core/AudioCommon/Src/XAudio2_7Stream.cpp | 289 + Source/Core/AudioCommon/Src/XAudio2_7Stream.h | 81 + Source/Core/AudioCommon/Src/stdafx.cpp | 5 + Source/Core/AudioCommon/Src/stdafx.h | 17 + Source/Core/Common/Common.vcxproj | 262 +- Source/Core/Common/Common.vcxproj.filters | 138 +- .../{SVNRevGen.vcxproj => SCMRevGen.vcxproj} | 43 +- Source/Core/Common/Src/StdConditionVariable.h | 5 + Source/Core/Common/Src/StdMutex.h | 6 + Source/Core/Common/Src/StdThread.h | 6 + Source/Core/Common/Src/stdafx.h | 6 +- Source/Core/Core/Core.vcxproj | 239 +- Source/Core/Core/Core.vcxproj.filters | 1566 ++-- Source/Core/Core/Src/Core.cpp | 4 +- Source/Core/Core/Src/DSPEmulator.h | 2 +- Source/Core/Core/Src/HW/DSPHLE/DSPHLE.cpp | 5 +- Source/Core/Core/Src/HW/DSPHLE/DSPHLE.h | 2 +- .../Core/Src/HW/DSPHLE/UCodes/UCode_ROM.cpp | 4 + .../Core/Core/Src/HW/DSPHLE/UCodes/UCodes.cpp | 4 + Source/Core/Core/Src/HW/DSPLLE/DSPLLE.cpp | 5 +- Source/Core/Core/Src/HW/DSPLLE/DSPLLE.h | 3 +- .../Core/Core/Src/HW/DSPLLE/DSPLLEGlobals.cpp | 4 + .../Core/Core/Src/HW/DSPLLE/DSPLLETools.cpp | 4 + Source/Core/Core/Src/HW/EXI_DeviceEthernet.h | 4 + .../Core/Src/IPC_HLE/WII_IPC_HLE_Device_hid.h | 2 +- Source/Core/Core/Src/stdafx.h | 2 + Source/Core/DiscIO/DiscIO.vcxproj | 211 +- Source/Core/DiscIO/DiscIO.vcxproj.filters | 172 +- Source/Core/DiscIO/Src/stdafx.h | 2 + Source/Core/DolphinWX/Dolphin.vcxproj | 408 - Source/Core/DolphinWX/Dolphin.vcxproj.user | 29 - Source/Core/DolphinWX/DolphinWX.vcxproj | 243 + ...proj.filters => DolphinWX.vcxproj.filters} | 362 +- Source/Core/DolphinWX/DolphinWX.vcxproj.user | 9 + Source/Core/InputCommon/InputCommon.vcxproj | 159 +- .../InputCommon/InputCommon.vcxproj.filters | 87 +- .../ControllerInterface.cpp | 2 +- .../Src/ControllerInterface/SDL/SDL.cpp | 16 +- .../Src/ControllerInterface/SDL/SDL.h | 10 +- .../Src/ControllerInterface/XInput/XInput.cpp | 72 +- .../Src/ControllerInterface/XInput/XInput.h | 10 + Source/Core/InputCommon/Src/stdafx.cpp | 5 + Source/Core/InputCommon/Src/stdafx.h | 14 + Source/Core/VideoBackends/D3D/D3D.vcxproj | 135 +- .../VideoBackends/D3D/D3D.vcxproj.filters | 124 +- Source/Core/VideoBackends/D3D/Src/D3DBase.cpp | 63 +- Source/Core/VideoBackends/D3D/Src/D3DBase.h | 36 +- .../Core/VideoBackends/D3D/Src/D3DShader.cpp | 16 +- Source/Core/VideoBackends/D3D/Src/Render.cpp | 3 +- .../VideoBackends/D3D/Src/TextureCache.cpp | 3 +- Source/Core/VideoBackends/OGL/OGL.vcxproj | 150 +- .../VideoBackends/OGL/OGL.vcxproj.filters | 60 +- .../VideoBackends/Software/Software.vcxproj | 164 +- .../Software/Software.vcxproj.filters | 67 - Source/Core/VideoCommon/Src/stdafx.cpp | 5 + Source/Core/VideoCommon/Src/stdafx.h | 14 + Source/Core/VideoCommon/VideoCommon.vcxproj | 184 +- .../VideoCommon/VideoCommon.vcxproj.filters | 433 +- Source/DSPTool/DSPTool.vcxproj | 189 +- Source/DSPTool/DSPTool.vcxproj.filters | 5 +- Source/Dolphin_2010.sln | 446 -- Source/VSProps/Base.props | 113 +- Source/VSProps/CodeGen_Debug.props | 16 - Source/VSProps/CodeGen_DebugFast.props | 17 - Source/VSProps/CodeGen_Release.props | 29 - Source/VSProps/Dolphin.Win32.props | 15 - Source/VSProps/Dolphin.x64.props | 16 - Source/VSProps/PrecompiledHeader.props | 3 +- Source/VSProps/WXWOverrides.props | 12 +- Source/dolphin-emu.sln | 320 + 390 files changed, 104570 insertions(+), 35686 deletions(-) delete mode 100644 .hgeol delete mode 100644 .hgignore create mode 100644 Externals/GLew/glew.vcxproj create mode 100644 Externals/GLew/glew.vcxproj.filters delete mode 100755 Externals/GLew/glew32s.lib delete mode 100755 Externals/GLew/glew64s.lib delete mode 100644 Externals/LZO/LZO.vcxproj.filters rename Externals/OpenAL/{Win64 => x64}/EFX-Util.lib (100%) rename Externals/OpenAL/{Win64 => x64}/OpenAL32.dll (100%) rename Externals/OpenAL/{Win64 => x64}/OpenAL32.lib (100%) delete mode 100644 Externals/SDL/Include_1.2/SDL.h delete mode 100644 Externals/SDL/Include_1.2/SDL_active.h delete mode 100644 Externals/SDL/Include_1.2/SDL_audio.h delete mode 100644 Externals/SDL/Include_1.2/SDL_byteorder.h delete mode 100644 Externals/SDL/Include_1.2/SDL_cdrom.h delete mode 100644 Externals/SDL/Include_1.2/SDL_config.h delete mode 100644 Externals/SDL/Include_1.2/SDL_config.h.in delete mode 100644 Externals/SDL/Include_1.2/SDL_config_dreamcast.h delete mode 100644 Externals/SDL/Include_1.2/SDL_config_macos.h delete mode 100644 Externals/SDL/Include_1.2/SDL_config_macosx.h delete mode 100644 Externals/SDL/Include_1.2/SDL_config_minimal.h delete mode 100644 Externals/SDL/Include_1.2/SDL_config_nds.h delete mode 100644 Externals/SDL/Include_1.2/SDL_config_os2.h delete mode 100644 Externals/SDL/Include_1.2/SDL_config_win32.h delete mode 100644 Externals/SDL/Include_1.2/SDL_copying.h delete mode 100644 Externals/SDL/Include_1.2/SDL_cpuinfo.h delete mode 100644 Externals/SDL/Include_1.2/SDL_endian.h delete mode 100644 Externals/SDL/Include_1.2/SDL_error.h delete mode 100644 Externals/SDL/Include_1.2/SDL_events.h delete mode 100644 Externals/SDL/Include_1.2/SDL_getenv.h delete mode 100644 Externals/SDL/Include_1.2/SDL_joystick.h delete mode 100644 Externals/SDL/Include_1.2/SDL_keyboard.h delete mode 100644 Externals/SDL/Include_1.2/SDL_keysym.h delete mode 100644 Externals/SDL/Include_1.2/SDL_loadso.h delete mode 100644 Externals/SDL/Include_1.2/SDL_main.h delete mode 100644 Externals/SDL/Include_1.2/SDL_mouse.h delete mode 100644 Externals/SDL/Include_1.2/SDL_mutex.h delete mode 100644 Externals/SDL/Include_1.2/SDL_opengl.h delete mode 100644 Externals/SDL/Include_1.2/SDL_platform.h delete mode 100644 Externals/SDL/Include_1.2/SDL_quit.h delete mode 100644 Externals/SDL/Include_1.2/SDL_rwops.h delete mode 100644 Externals/SDL/Include_1.2/SDL_stdinc.h delete mode 100644 Externals/SDL/Include_1.2/SDL_syswm.h delete mode 100644 Externals/SDL/Include_1.2/SDL_thread.h delete mode 100644 Externals/SDL/Include_1.2/SDL_timer.h delete mode 100644 Externals/SDL/Include_1.2/SDL_types.h delete mode 100644 Externals/SDL/Include_1.2/SDL_version.h delete mode 100644 Externals/SDL/Include_1.2/SDL_video.h delete mode 100644 Externals/SDL/Include_1.2/begin_code.h delete mode 100644 Externals/SDL/Include_1.2/close_code.h delete mode 100644 Externals/SDL/Include_1.3/SDL.h delete mode 100644 Externals/SDL/Include_1.3/SDL_audio.h delete mode 100644 Externals/SDL/Include_1.3/SDL_cdrom.h delete mode 100644 Externals/SDL/Include_1.3/SDL_compat.h delete mode 100644 Externals/SDL/Include_1.3/SDL_config.h delete mode 100644 Externals/SDL/Include_1.3/SDL_config.h.default delete mode 100644 Externals/SDL/Include_1.3/SDL_config.h.in delete mode 100644 Externals/SDL/Include_1.3/SDL_config_dreamcast.h delete mode 100644 Externals/SDL/Include_1.3/SDL_config_iphoneos.h delete mode 100644 Externals/SDL/Include_1.3/SDL_config_macosx.h delete mode 100644 Externals/SDL/Include_1.3/SDL_config_minimal.h delete mode 100644 Externals/SDL/Include_1.3/SDL_config_nintendods.h delete mode 100644 Externals/SDL/Include_1.3/SDL_config_os2.h delete mode 100644 Externals/SDL/Include_1.3/SDL_copying.h delete mode 100644 Externals/SDL/Include_1.3/SDL_cpuinfo.h delete mode 100644 Externals/SDL/Include_1.3/SDL_error.h delete mode 100644 Externals/SDL/Include_1.3/SDL_events.h delete mode 100644 Externals/SDL/Include_1.3/SDL_haptic.h delete mode 100644 Externals/SDL/Include_1.3/SDL_joystick.h delete mode 100644 Externals/SDL/Include_1.3/SDL_keyboard.h delete mode 100644 Externals/SDL/Include_1.3/SDL_loadso.h delete mode 100644 Externals/SDL/Include_1.3/SDL_main.h delete mode 100644 Externals/SDL/Include_1.3/SDL_mouse.h delete mode 100644 Externals/SDL/Include_1.3/SDL_mutex.h delete mode 100644 Externals/SDL/Include_1.3/SDL_name.h delete mode 100644 Externals/SDL/Include_1.3/SDL_opengles.h delete mode 100644 Externals/SDL/Include_1.3/SDL_platform.h delete mode 100644 Externals/SDL/Include_1.3/SDL_quit.h delete mode 100644 Externals/SDL/Include_1.3/SDL_rect.h delete mode 100644 Externals/SDL/Include_1.3/SDL_revision.h delete mode 100644 Externals/SDL/Include_1.3/SDL_rwops.h delete mode 100644 Externals/SDL/Include_1.3/SDL_stdinc.h delete mode 100644 Externals/SDL/Include_1.3/SDL_surface.h delete mode 100644 Externals/SDL/Include_1.3/SDL_syswm.h delete mode 100644 Externals/SDL/Include_1.3/SDL_thread.h delete mode 100644 Externals/SDL/Include_1.3/SDL_timer.h delete mode 100644 Externals/SDL/Include_1.3/SDL_types.h delete mode 100644 Externals/SDL/Include_1.3/SDL_version.h delete mode 100644 Externals/SDL/Include_1.3/SDL_video.h delete mode 100644 Externals/SDL/Include_1.3/close_code.h delete mode 100644 Externals/SDL/Include_1.3/doxyfile delete mode 100644 Externals/SDL/win32/SDL.1.3.dll delete mode 100644 Externals/SDL/win32/SDL.1.3.lib delete mode 100644 Externals/SDL/win32/SDL.dll delete mode 100644 Externals/SDL/win32/SDL.lib delete mode 100644 Externals/SDL/x64/SDL.dll delete mode 100644 Externals/SDL/x64/SDL.lib create mode 100644 Externals/SDL2-2.0.0/BUGS.txt create mode 100644 Externals/SDL2-2.0.0/COPYING.txt create mode 100644 Externals/SDL2-2.0.0/README-SDL.txt create mode 100644 Externals/SDL2-2.0.0/README.txt create mode 100644 Externals/SDL2-2.0.0/WhatsNew.txt create mode 100644 Externals/SDL2-2.0.0/include/SDL.h create mode 100644 Externals/SDL2-2.0.0/include/SDL_assert.h create mode 100644 Externals/SDL2-2.0.0/include/SDL_atomic.h create mode 100644 Externals/SDL2-2.0.0/include/SDL_audio.h create mode 100644 Externals/SDL2-2.0.0/include/SDL_bits.h create mode 100644 Externals/SDL2-2.0.0/include/SDL_blendmode.h create mode 100644 Externals/SDL2-2.0.0/include/SDL_clipboard.h rename Externals/{SDL/Include_1.3/SDL_config_win32.h => SDL2-2.0.0/include/SDL_config.h} (55%) create mode 100644 Externals/SDL2-2.0.0/include/SDL_cpuinfo.h rename Externals/{SDL/Include_1.3 => SDL2-2.0.0/include}/SDL_endian.h (51%) create mode 100644 Externals/SDL2-2.0.0/include/SDL_error.h create mode 100644 Externals/SDL2-2.0.0/include/SDL_events.h create mode 100644 Externals/SDL2-2.0.0/include/SDL_gamecontroller.h create mode 100644 Externals/SDL2-2.0.0/include/SDL_gesture.h create mode 100644 Externals/SDL2-2.0.0/include/SDL_haptic.h create mode 100644 Externals/SDL2-2.0.0/include/SDL_hints.h create mode 100644 Externals/SDL2-2.0.0/include/SDL_joystick.h create mode 100644 Externals/SDL2-2.0.0/include/SDL_keyboard.h rename Externals/{SDL/Include_1.3/SDL_keysym.h => SDL2-2.0.0/include/SDL_keycode.h} (79%) create mode 100644 Externals/SDL2-2.0.0/include/SDL_loadso.h create mode 100644 Externals/SDL2-2.0.0/include/SDL_log.h create mode 100644 Externals/SDL2-2.0.0/include/SDL_main.h create mode 100644 Externals/SDL2-2.0.0/include/SDL_messagebox.h create mode 100644 Externals/SDL2-2.0.0/include/SDL_mouse.h create mode 100644 Externals/SDL2-2.0.0/include/SDL_mutex.h rename Externals/{SDL/Include_1.2 => SDL2-2.0.0/include}/SDL_name.h (84%) rename Externals/{SDL/Include_1.3 => SDL2-2.0.0/include}/SDL_opengl.h (55%) create mode 100644 Externals/SDL2-2.0.0/include/SDL_opengles.h create mode 100644 Externals/SDL2-2.0.0/include/SDL_opengles2.h rename Externals/{SDL/Include_1.3 => SDL2-2.0.0/include}/SDL_pixels.h (53%) create mode 100644 Externals/SDL2-2.0.0/include/SDL_platform.h create mode 100644 Externals/SDL2-2.0.0/include/SDL_power.h create mode 100644 Externals/SDL2-2.0.0/include/SDL_quit.h create mode 100644 Externals/SDL2-2.0.0/include/SDL_rect.h create mode 100644 Externals/SDL2-2.0.0/include/SDL_render.h create mode 100644 Externals/SDL2-2.0.0/include/SDL_revision.h create mode 100644 Externals/SDL2-2.0.0/include/SDL_rwops.h rename Externals/{SDL/Include_1.3 => SDL2-2.0.0/include}/SDL_scancode.h (56%) create mode 100644 Externals/SDL2-2.0.0/include/SDL_shape.h create mode 100644 Externals/SDL2-2.0.0/include/SDL_stdinc.h create mode 100644 Externals/SDL2-2.0.0/include/SDL_surface.h create mode 100644 Externals/SDL2-2.0.0/include/SDL_system.h create mode 100644 Externals/SDL2-2.0.0/include/SDL_syswm.h create mode 100644 Externals/SDL2-2.0.0/include/SDL_test.h create mode 100644 Externals/SDL2-2.0.0/include/SDL_test_assert.h create mode 100644 Externals/SDL2-2.0.0/include/SDL_test_common.h create mode 100644 Externals/SDL2-2.0.0/include/SDL_test_compare.h create mode 100644 Externals/SDL2-2.0.0/include/SDL_test_crc32.h create mode 100644 Externals/SDL2-2.0.0/include/SDL_test_font.h create mode 100644 Externals/SDL2-2.0.0/include/SDL_test_fuzzer.h create mode 100644 Externals/SDL2-2.0.0/include/SDL_test_harness.h create mode 100644 Externals/SDL2-2.0.0/include/SDL_test_images.h create mode 100644 Externals/SDL2-2.0.0/include/SDL_test_log.h create mode 100644 Externals/SDL2-2.0.0/include/SDL_test_md5.h create mode 100644 Externals/SDL2-2.0.0/include/SDL_test_random.h create mode 100644 Externals/SDL2-2.0.0/include/SDL_thread.h create mode 100644 Externals/SDL2-2.0.0/include/SDL_timer.h create mode 100644 Externals/SDL2-2.0.0/include/SDL_touch.h create mode 100644 Externals/SDL2-2.0.0/include/SDL_types.h create mode 100644 Externals/SDL2-2.0.0/include/SDL_version.h create mode 100644 Externals/SDL2-2.0.0/include/SDL_video.h rename Externals/{SDL/Include_1.3 => SDL2-2.0.0/include}/begin_code.h (56%) create mode 100644 Externals/SDL2-2.0.0/include/close_code.h create mode 100644 Externals/SDL2-2.0.0/lib/Win32/SDL2.dll create mode 100644 Externals/SDL2-2.0.0/lib/Win32/SDL2.lib create mode 100644 Externals/SDL2-2.0.0/lib/x64/SDL2.dll create mode 100644 Externals/SDL2-2.0.0/lib/x64/SDL2.lib delete mode 100644 Externals/libjpeg/jconfig.h delete mode 100644 Externals/libjpeg/jmorecfg.h delete mode 100644 Externals/libjpeg/jpeglib.h delete mode 100644 Externals/libjpeg/libjpeg.lib delete mode 100644 Externals/libjpeg/libjpeg64.lib delete mode 100644 Externals/libpng/png/png.vcxproj.filters delete mode 100644 Externals/libusbx/msvc/errno.h delete mode 100644 Externals/libusbx/msvc/inttypes.h delete mode 100644 Externals/libusbx/msvc/libusb_static_2005.vcproj delete mode 100644 Externals/libusbx/msvc/libusb_static_2010.vcxproj delete mode 100644 Externals/libusbx/msvc/libusb_static_2012.vcxproj delete mode 100644 Externals/libusbx/msvc/libusb_static_2012.vcxproj.filters create mode 100644 Externals/libusbx/msvc/libusb_static_2013.vcxproj rename Externals/libusbx/msvc/{libusb_static_2010.vcxproj.filters => libusb_static_2013.vcxproj.filters} (100%) delete mode 100644 Externals/libusbx/msvc/stdint.h delete mode 100644 Externals/miniupnpc/miniupnpc.vcxproj.filters create mode 100644 Externals/polarssl/visualc/PolarSSL.vcxproj delete mode 100644 Externals/portaudio/Win32/Debug/portaudio.lib delete mode 100644 Externals/portaudio/Win32/Debug/portaudio.pdb delete mode 100644 Externals/portaudio/Win32/DebugFast/portaudio.lib delete mode 100644 Externals/portaudio/Win32/DebugFast/portaudio.pdb delete mode 100644 Externals/portaudio/Win32/Release/portaudio.lib delete mode 100644 Externals/portaudio/Win32/Release/portaudio.pdb create mode 100644 Externals/portaudio/build/dolphin-notes.txt create mode 100644 Externals/portaudio/build/portaudio.vcxproj create mode 100644 Externals/portaudio/build/portaudio.vcxproj.filters create mode 100644 Externals/portaudio/src/SConscript create mode 100644 Externals/portaudio/src/common/pa_allocation.c create mode 100644 Externals/portaudio/src/common/pa_allocation.h create mode 100644 Externals/portaudio/src/common/pa_converters.c create mode 100644 Externals/portaudio/src/common/pa_converters.h create mode 100644 Externals/portaudio/src/common/pa_cpuload.c create mode 100644 Externals/portaudio/src/common/pa_cpuload.h create mode 100644 Externals/portaudio/src/common/pa_debugprint.c create mode 100644 Externals/portaudio/src/common/pa_debugprint.h create mode 100644 Externals/portaudio/src/common/pa_dither.c create mode 100644 Externals/portaudio/src/common/pa_dither.h create mode 100644 Externals/portaudio/src/common/pa_endianness.h create mode 100644 Externals/portaudio/src/common/pa_front.c create mode 100644 Externals/portaudio/src/common/pa_hostapi.h create mode 100644 Externals/portaudio/src/common/pa_memorybarrier.h create mode 100644 Externals/portaudio/src/common/pa_process.c create mode 100644 Externals/portaudio/src/common/pa_process.h create mode 100644 Externals/portaudio/src/common/pa_ringbuffer.c create mode 100644 Externals/portaudio/src/common/pa_ringbuffer.h create mode 100644 Externals/portaudio/src/common/pa_stream.c create mode 100644 Externals/portaudio/src/common/pa_stream.h create mode 100644 Externals/portaudio/src/common/pa_trace.c create mode 100644 Externals/portaudio/src/common/pa_trace.h create mode 100644 Externals/portaudio/src/common/pa_types.h create mode 100644 Externals/portaudio/src/common/pa_util.h create mode 100644 Externals/portaudio/src/hostapi/alsa/pa_linux_alsa.c create mode 100644 Externals/portaudio/src/hostapi/asihpi/pa_linux_asihpi.c create mode 100644 Externals/portaudio/src/hostapi/asio/ASIO-README.txt create mode 100644 Externals/portaudio/src/hostapi/asio/Callback_adaptation_.pdf create mode 100644 Externals/portaudio/src/hostapi/asio/Pa_ASIO.pdf create mode 100644 Externals/portaudio/src/hostapi/asio/iasiothiscallresolver.cpp create mode 100644 Externals/portaudio/src/hostapi/asio/iasiothiscallresolver.h create mode 100644 Externals/portaudio/src/hostapi/asio/pa_asio.cpp create mode 100644 Externals/portaudio/src/hostapi/coreaudio/notes.txt create mode 100644 Externals/portaudio/src/hostapi/coreaudio/pa_mac_core.c create mode 100644 Externals/portaudio/src/hostapi/coreaudio/pa_mac_core_blocking.c create mode 100644 Externals/portaudio/src/hostapi/coreaudio/pa_mac_core_blocking.h create mode 100644 Externals/portaudio/src/hostapi/coreaudio/pa_mac_core_internal.h create mode 100644 Externals/portaudio/src/hostapi/coreaudio/pa_mac_core_old.c create mode 100644 Externals/portaudio/src/hostapi/coreaudio/pa_mac_core_utilities.c create mode 100644 Externals/portaudio/src/hostapi/coreaudio/pa_mac_core_utilities.h create mode 100644 Externals/portaudio/src/hostapi/dsound/pa_win_ds.c create mode 100644 Externals/portaudio/src/hostapi/dsound/pa_win_ds_dynlink.c create mode 100644 Externals/portaudio/src/hostapi/dsound/pa_win_ds_dynlink.h create mode 100644 Externals/portaudio/src/hostapi/jack/pa_jack.c create mode 100644 Externals/portaudio/src/hostapi/oss/low_latency_tip.txt create mode 100644 Externals/portaudio/src/hostapi/oss/pa_unix_oss.c create mode 100644 Externals/portaudio/src/hostapi/oss/recplay.c create mode 100644 Externals/portaudio/src/hostapi/skeleton/README.txt create mode 100644 Externals/portaudio/src/hostapi/skeleton/pa_hostapi_skeleton.c create mode 100644 Externals/portaudio/src/hostapi/wasapi/mingw-include/AudioSessionTypes.h create mode 100644 Externals/portaudio/src/hostapi/wasapi/mingw-include/FunctionDiscoveryKeys_devpkey.h create mode 100644 Externals/portaudio/src/hostapi/wasapi/mingw-include/audioclient.h create mode 100644 Externals/portaudio/src/hostapi/wasapi/mingw-include/devicetopology.h create mode 100644 Externals/portaudio/src/hostapi/wasapi/mingw-include/endpointvolume.h create mode 100644 Externals/portaudio/src/hostapi/wasapi/mingw-include/functiondiscoverykeys.h create mode 100644 Externals/portaudio/src/hostapi/wasapi/mingw-include/ks.h create mode 100644 Externals/portaudio/src/hostapi/wasapi/mingw-include/ksguid.h create mode 100644 Externals/portaudio/src/hostapi/wasapi/mingw-include/ksmedia.h create mode 100644 Externals/portaudio/src/hostapi/wasapi/mingw-include/ksproxy.h create mode 100644 Externals/portaudio/src/hostapi/wasapi/mingw-include/ksuuids.h create mode 100644 Externals/portaudio/src/hostapi/wasapi/mingw-include/mmdeviceapi.h create mode 100644 Externals/portaudio/src/hostapi/wasapi/mingw-include/propidl.h create mode 100644 Externals/portaudio/src/hostapi/wasapi/mingw-include/propkey.h create mode 100644 Externals/portaudio/src/hostapi/wasapi/mingw-include/propkeydef.h create mode 100644 Externals/portaudio/src/hostapi/wasapi/mingw-include/propsys.h create mode 100644 Externals/portaudio/src/hostapi/wasapi/mingw-include/rpcsal.h create mode 100644 Externals/portaudio/src/hostapi/wasapi/mingw-include/sal.h create mode 100644 Externals/portaudio/src/hostapi/wasapi/mingw-include/sdkddkver.h create mode 100644 Externals/portaudio/src/hostapi/wasapi/mingw-include/shtypes.h create mode 100644 Externals/portaudio/src/hostapi/wasapi/mingw-include/structuredquery.h create mode 100644 Externals/portaudio/src/hostapi/wasapi/pa_win_wasapi.c create mode 100644 Externals/portaudio/src/hostapi/wasapi/readme.txt create mode 100644 Externals/portaudio/src/hostapi/wdmks/pa_win_wdmks.c create mode 100644 Externals/portaudio/src/hostapi/wdmks/readme.txt create mode 100644 Externals/portaudio/src/hostapi/wmme/pa_win_wmme.c create mode 100644 Externals/portaudio/src/os/unix/pa_unix_hostapis.c create mode 100644 Externals/portaudio/src/os/unix/pa_unix_util.c create mode 100644 Externals/portaudio/src/os/unix/pa_unix_util.h create mode 100644 Externals/portaudio/src/os/win/pa_win_coinitialize.c create mode 100644 Externals/portaudio/src/os/win/pa_win_coinitialize.h create mode 100644 Externals/portaudio/src/os/win/pa_win_hostapis.c create mode 100644 Externals/portaudio/src/os/win/pa_win_util.c create mode 100644 Externals/portaudio/src/os/win/pa_win_waveformat.c create mode 100644 Externals/portaudio/src/os/win/pa_win_wdmks_utils.c create mode 100644 Externals/portaudio/src/os/win/pa_win_wdmks_utils.h create mode 100644 Externals/portaudio/src/os/win/pa_x86_plain_converters.c create mode 100644 Externals/portaudio/src/os/win/pa_x86_plain_converters.h delete mode 100644 Externals/portaudio/x64/Debug/portaudio.lib delete mode 100644 Externals/portaudio/x64/Debug/portaudio.pdb delete mode 100644 Externals/portaudio/x64/DebugFast/portaudio.lib delete mode 100644 Externals/portaudio/x64/DebugFast/portaudio.pdb delete mode 100644 Externals/portaudio/x64/Release/portaudio.lib delete mode 100644 Externals/portaudio/x64/Release/portaudio.pdb delete mode 100644 Externals/soundtouch/SoundTouch.vcxproj.filters delete mode 100644 Externals/zlib/zlib.vcxproj.filters create mode 100644 Source/Core/AudioCommon/Src/XAudio2_7Stream.cpp create mode 100644 Source/Core/AudioCommon/Src/XAudio2_7Stream.h create mode 100644 Source/Core/AudioCommon/Src/stdafx.cpp create mode 100644 Source/Core/AudioCommon/Src/stdafx.h rename Source/Core/Common/{SVNRevGen.vcxproj => SCMRevGen.vcxproj} (59%) delete mode 100644 Source/Core/DolphinWX/Dolphin.vcxproj delete mode 100644 Source/Core/DolphinWX/Dolphin.vcxproj.user create mode 100644 Source/Core/DolphinWX/DolphinWX.vcxproj rename Source/Core/DolphinWX/{Dolphin.vcxproj.filters => DolphinWX.vcxproj.filters} (93%) create mode 100644 Source/Core/DolphinWX/DolphinWX.vcxproj.user create mode 100644 Source/Core/InputCommon/Src/stdafx.cpp create mode 100644 Source/Core/InputCommon/Src/stdafx.h delete mode 100644 Source/Core/VideoBackends/Software/Software.vcxproj.filters create mode 100644 Source/Core/VideoCommon/Src/stdafx.cpp create mode 100644 Source/Core/VideoCommon/Src/stdafx.h delete mode 100644 Source/Dolphin_2010.sln delete mode 100644 Source/VSProps/CodeGen_Debug.props delete mode 100644 Source/VSProps/CodeGen_DebugFast.props delete mode 100644 Source/VSProps/CodeGen_Release.props delete mode 100644 Source/VSProps/Dolphin.Win32.props delete mode 100644 Source/VSProps/Dolphin.x64.props create mode 100644 Source/dolphin-emu.sln diff --git a/.gitignore b/.gitignore index 506b437ced..a645f56c8c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,41 +1,19 @@ - -#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 +# Ignore files created by posix people *~ -#Ignore transifix configuration directory +# Ignore transifix configuration directory .tx 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/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 589a5bb914e82e76f16a269cf1e0046482612ccc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1810836 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ʆi&0+)-)|h&$$9- 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

2oCZtBRI&rncyJr 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�+qre@L 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�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

`tFzsljjtbRPw5m|0Q2gm%6YmruP76XZPl(Q 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®1HBJ=ER;M0bF)Bf2A$BdD{W z-J#h~ert~D?d4nZ&QMOj+XXrU+7-%g&5wt2^lvvPzcud;{RP?s%5Tk2fbv^&OtCND zn)ib8Tl3yfert~D_~l#kzEFN^-Ve&Jc` zLo=aR5IoApscB}Ok=H$wKJAw ztd}vCF7$l4#$v{X8>=!l*4Q{>lZ;(yY?`qd#%3FPz}S<<<{MjN>n?W$b%n^$?p~_&E!s_lz|%mSL=^F}_(Y{EW3T zmSwD$v3|yKjm3-&H&$hAtg&&%CKT?TPIxsCFiWsdhAExw5 zYvV-#ldzznBW_36F&W2#2ETZi>lyeMBhwvWdi67vVbrogp#&uF$t`U9u@#B;J-95?dtR5{oSo+e=+3 z1J({=u^s#k@nwrdqgrcH8@e6*T3p>91F$ab;8`d3%^8ewV4OiUr>dl=0JBllaSVW8 zm$Km`J#ml0#(QH)b#rJ(2eHtUlvJ?@m6TM+LfQ6x4wP-*b`x7M#tzg1Q$*Isn&9dMhuXjqpXng+pETL5o#YE>$b*$;gnT#Za6?b)ne_m zy*C^!IHnQ&YO7jHgy4F{IeDDABq1)~&|t&E;oQ0e52T817)GxrepAG*IX1a%PyL$+C zxQFnyJp@|%5NJgsGx5um@o^}dXN-?SnR^J~;Y+C>!2gmwfSrH$0~moD@y9W)-vby{ zgk^$9{+{Un4X(YmwC6z=@N-?jKjs4dM+nc28mKjBX{26`TxV?2OJ7mIrGuVdbz6 z7B&hNS7%F$Tmb6;VeE|Ns;N3*+kV1kfHf7y&giDX*cshS*g{x)30nkfUtvpO?IDbn zA1+3y)AsBtjGfW@3uEfEvoLl>Hy4KgB5Zih$6v6qTROb?dC9(>zn_=v?fLt82}dFN zH5OizuNem-rOr!As!NNjxS~QG69B*VN_SWHvxAIhkms)U+!Hoca6 z_anK8JHDpIbrVnNHijGXJtj?8IQBV`B8KHxP;yLsF4gN*&@8yWfwChAlcY;W(09=D z;r<@Vjv!2^E*(KXK-m%WBa|IMKS3E+)#T&dujXHYHYBv5@Y4Y*t4p~o@4A1W0Q^DU~Iavhm3I$hF+In9r7~`lo7IviYsH~ zEjnsikERFD$2dMq4Bm*)2lFYt3#yZO>lM{Ui!65H_?t=Und$B{)$Jtp3od9EvtJS1 zX0pQy5)Sk4(axtHdVlMhOQy^-IwMwT89hrZ<{4b^T0ajuu-0^yxkq^O)783`(SPsf zK?q8;0bv5&q7r@}RKNwe>X^7%Q{dW)S6CoI(kd(-A!*eXP!_MYgtB-=H;Y$vGfioa z5Z5$?mZmARvcG3J8Gn7ZnIm~w*iDwb5bsaG^|;j>wtvbVIT1n(l@ zy2hWnm$FjEz=0C)SZX;*EXKftECwDd7E3Mt#h3B!5MeB}^by8V%b~(pYUwGArIt)# z_%ESUFbXWZ`LTCI*b}y2DyZ=M{Zhe$@b}vicunSHBk`BIR8Tf5r!qFOvZ}nUF?W57 z1s2l>;U0sH_sv{+3us>lw?_=-Z)pr=u8bvFBv;-E%3OJ8D05{j-!g__g{57_R5>?) zKizx-y5m{t8$e6n09yKOrLyI2KmE2+8Q%rn?>A?qN7x*$jNhv0ek>a*+rt=hd1V}^ zsQYmgk}|E~;_G)*X1ff_EsV9ayr67U2nU%N^N$d&$vFhe8N6ME{edZXA;L>j@O-iO z{07t?vNer10jy19eTo$K&LF$(Yw+%3 z@ejW}vDgrX`BLPmTk@SUNv@KJ#3Z>~EJmqT7NuH?#U!~@eECq@)Edp0IEObsn$`7N znyYYfKdI$4`6#>LFI60-^R1{%NOo|7U~|!-zH>7=@Nx6S=35bLyf&ZqrqJMbw8PV*e@7_q zsgrw}qvdIy2trF6@o7aPw-~$4Sy5@a*Zt-hbMt4nm!I(G7Vqj_K-_o+Jjab+Q2k@S z5!x7kH^$$8@;7c9!Z_6HIAI*> zwX?8Au-XY*3aha&>Esr+8f<%E9O~6U7&}L{5ytMkj>7hW)le7*4P^;qcV1K&=N-uw z#sM*#3+o4~ldybPn+fB*Bb|kD-jRC3_&snJVVA-Bbr*&y=N;)PjPs8CPZ;MNIbIlt zy!AI>=N)-n80Q^1Q5fePStN|#<(?#r^NzeMjPs5R5XN~&UJ%B4M@|;T zc}JcT#(75u3gf&Z^M!G?jZ=hi-jSz-ao&+rg>l}ICxr1U+ZSJ+Lk<_P1wBZGx;-jVx+ao&+UVVrm59$}n!BwyGEuoj3!;Qyr7!?U{wh_5!Ps7Ik2jQmB1Py ztcsSf^I%m9y9m}uVN+oZ7d8#nC}H=&DiQV|tkJ?2z&cIXOR!EC_71Ee!j{8gXreC% zR!rDWu+9|LAPuoZ*w(Pl61F?69AQmioh_^ttbxLggf&K3S6C+r>ji79utBi;3oC?m zj<9N2eT1C}i_bGHG7(l!VVA=?PuO%=-G$u_Yn-r$V09Jt1g!DGUWV04*c-6U7xp2n zj>0~Jb%C%ou-XZ$hwiuwg>3`t7-2iYnjowhtRsaT1nVMUN5MK=SO-`Wh4qHjTG&aj zE*3TfRtsUJur3jH7OX>rje~Wmuq$94DC}BTmkFB%Yky(0VNDV?4^}f_&%$DiPm3&u zwYRW$VO=ilb69%{`xe#}!ZvAuK`6qufOVy?onSQ)wg;>!!VZSDqp;Snt`gP})(*ms zhjq2E0kF0emJ5sTTw0_I)>gtsz?v#-JgjtK7sI+%*mbZP2)h~9b;9n2RbSY{u&x*O z9IQ=*{Rh?!!rp`RTN7UGBUm>I`wrI6!u|*ACSg&G-uX$`wy>rN+Y{DmVf(_GF02i# zZ-pHV>tn+hxLH4w_wc`_CBmR!oGy{ps??03EM0kXAzbT>mgxH zV9gem0qbF5hr+r`*kQ2d3d@G|Z(-eGJtAx%tlNa;!Fp6!IjkANM!|Ya*afhr3%e8+ za}EskhjpW{8L*xZc0a7^ggpXlp0I_mt`W8f)|0}P!kQxNV^~iKTMg@SVZXq7TG*Bt z?r@o~?O{D5Y%f?B3)>$S^RBeW;jktMI~LXgVLf1-FRUM|XNBd%I#1YXu$~h(8rE20 zV_`in>@rwq3A+l`LSZvuoi6N7ST6{B6xK*#Ps4gq*sHLrg#8!ROTs>ZRW9r+ST76v z6;`RR`WRjEA7MMdDi*d2tXG6JhgBpj6V@VO$H6KP)(O_D!urF?6Lt!$*Mt?r8YHX& z7IXKs$T_f15q2T0H-udcYk;sDVJ#MR7p#8?djQs(!k&TESJ(@%-V(M1Rxe@8VEtFv z*RXmB`vKMxVQCn%alEjGuvorGi|h)kv#`Bky(6pztSn(izYq_u&VI3;$HCP`C z`vBHK!ajxdk+2_OH5c|9tQEqx+8P7Ogf)Wov9Nt$?IY{}Sf2=M3oAodJ6N9z>j`Uj zVgG`~5?ETK0M;(ThQazw*cq^P5_T@E&xK8f)kxSiu)Yv>8?5bw-3{wYVUNSwTG)J8 zUkQ61)|SHFhV`|um9VxDwhGoNVVsLRP1xqJz7f_K)~3RCgY~Vj17SskwS@JZu=cQi z!T6T6NEcY&3p)|k8euuGRtqbE^@Fe~TEfnQ^_{SbVErg;Dy&t)rosA2*gdem6!svj zHNqCa`b^kMu>L3P9ax_TTMp}IVc)>|NZ3!Xei7CHqXIt=wl%C@h3yXOePK;u{U)px ztapSR35%uVv`AN2{}t8?Ry|>ZU@aC_2x}8z)v#U@b|$P%g-wL@im=OJZ6<6wte1q{ z4y(SfhhQxf_5`dnVK2jaR@fV`SWZuiduzD=U~Mhz3Rrgt zyB5|q!e+s`UD#|`oV_6}G7r{FVb8+aPS|2tHw$|g*7m|ahjo*%Z(;2qY?JL#suH#Z ztVY6if;Cmx9ndTbVeKfaBdjZg9S>_KVFO@I5|#^VXJKWqE)g~YRuf_4 zVO=EbVpzKfyAIX`!fuAOtFU`vjT81TEY_ux&vp49_=Y!sbmdE)zdw-udC%V;$o?`? zGJjSAUK17i$ji`_W9o{^xi(ZqB|pT-&C82bY@G1&h;2F4oLex6lpkt^-9tP#Kg$aH z2QwrF$ItTo=XvhMp8Ippy$K&Bw%~j_dG3QfcSp}Xz;l;*?(v@cI?sKt=YGy}zvsEX z^W1;u2`@P)n6p8L!5G$A;akABEj4cZc09 z&xPGACxqS1f5L92Yhm}Ho;%xf5A@vSp8EpNeS_z|-*YeY+)F+8YR|nTS~|k_yO-xa z+;jKv-1(k+wCBFebIFK zxu5aeOFZ}2o;wX~5aIjX)pNJ-+?_r5sh+#ib5HQxH+k+kp8G}5{ekEH(Q|Kw)`jr> z@8h}KdhVW{yTEgw;khS!?%O=~KcUR9n$a7bF?unjzy61k#bHD7lKlI#dJoh%J z(TDH9ndd&rbNBY#Lp=9cp8E>VJeE)lT?lzvgo97P|uz1xd(dg za?gE%=f1&n-|x8>dhVs3d$s4@5;fiM{qNA5F(?wdUKoRC{S%9HQ3*cTOStk3d0t(5=+9q+NDewEh?$_LOJdI+=+Gz;1n zdNQ;hbU3s>^nB>QpqzH(MCg6clc3K-2S7RP$jQ*}p#!0ucH|Uj2J}=Y=bz7ka{l>2 z&^%}^bQE+jl=IK$K{@|;K9uv%$Do{Dya3Ai=L?~ne|`v*^UoJSIsg1n=&{h#p#7l5 zP|iO;3_2EC0_FVkrBKd4Uj}^|IvmRR=gXm-f4%}*A2patDCeKAf@VUip`D;3pqzhx zB$V^dkAhwZ9S!CD^QS`}fSv(;0eU8M8T2eDS9>`d+7LC4G0?rCW1&Yt&w-u*Jr^2- zo(DZ0Iu6R-!0}M_E}ai$Z^Z>rwtim-WozmLC|l<)g0i(|BJ=?0#n5)pOQ8RPUJ4xs zy$pITbQ1I$=w#^K(95Cop;tiPhF%F>1)T!j93}Oupu0h@hPH%W1MLEx3eACD3$21) z2fYY-J#-rM2Izy(8=)^jZ-Op|PJ{jgoetd^ar0(qQ|K+wBcU^(y`VFph0t4}XF_j- zUJkt-dOLI$^a<#{p>II%fPMzO6Iu@?-n*bXLhpti1ic5^0XiFc67*hZDfB+*IOzS* zYoQN7XG7;epM^dMeHZ!=^jqk|&@E6xoeSLq`Utc&^ik;X(8r*;(8r-8pie+AhR%cD z41E&%F!U+tf1po8KY~63{U3BbbX$}l7eM!gJ_|h>`W&IL& zgZ>x#Jah^4edycJ@1gHN(@_$87n%Wm4|*8%eQ0;+QfMA@8FUo%1L&pD<5224h zKY}iTu7G|F{TTWS^b_dzC@Fmk-5Yv|L^ zRnY%Jzkz-Q{T5muC7AD^yFkB(WcZ2Q(Z3*2O+6CGKngiVhS_Rz|dJ%Lt=rkyn{T=flbPwoD z&^@8cp&8JhpnE~LM$Wo7v?&zJ36D7v+7#Lg+6-C<-4}W$bU*0j(EXveL$OTpm?xkI zK;M8K2>lF-C5^|_L;iO#bVukR(1W0dLOVb+p(jCGKue)mDtXK}Xe;Qo(ALn|&^A!E zB_9EO!MWK!OgExq(}bE^lNomx>T&Pm2N*>DpuJVV`<3MltrDTOT{W{VvGw6 zDQj+wle8&oYb@JXS7ZH+4KP+vW;~$*5B9wV+F>B8ml%o+Sqtw6O2tUHr3cnW3!CSF*euO z0%Hq}EjG5q*a~ASjjcAe##kCkUoQNdh43@h#8@+9&5gA&*49|Iv98AY8yjG(z!+P~ zHBMF=8*Oa7u?fbe7@KNrrm;*mz?Tj7>2%)!0m9vy9C#HrLn! zV+)NfHnzmr3S%pctv0sCSQ<*vF8rK@@H5uLSTkeIjkPh>)>yVNj_uU2?{92?u>xa5 zjd7Hx-V1vV^w{ynCK#JyY^t%D#%39tV{ERm1;!Q{TWoBJu@%Nv8e45_jj=S;7F_r_ z3*l$1i7}24)&1Brp}(z-v9`vtjdeA~z6w2dfUyE&Lyc7%8*Oa7u?fbe7@KNrrmFX z4f_IPLyc7%8*Oa7G4`nFu~UpqH8#`OEMs$w%{8{b*g|8AjV&>@!q`egD z!p~UVr;6hnZ{-rn`3OQu?5B!8e42^iLn*NRvKGv zY>lxrw7$6Ta~8tSSQBH-jB(7c{A9tEa~n7#nJ=+Sq7g6A-GB(H9Tw@E2Ei|^+*b-wajIA`b+SnRn9C_@*&shjRV@-@TGuGS~`w;cm zw#KrJbv4%C*Z^Y%#)cZJHa6PWcw-ZcO))mr*i2)yjLk7N*VqDM3ym!{w#3*9V=IlV zHnzrC8d}d>_&E#VXRL{_X2zNuYh#S#oHbr?bhDn1J(|jb#TjK~2wgKTygHeZkY~Hf z%JQPY>#$3gTK2)rtsOX7bS>U}VtJ)lWv*OTJgH?TUHh*V&+b*ll|^g0N|%!S*vMLr z&n_)Yb%R;?g|Y17+`?Lpmes_^z?1LZrK+~`ckw*pX7_bxkDISI z%)DP24n0ne>DGFb=-4qEyNV$ZmGTQxrnbLTaCo}q$$01f>+GDne^xu zsgG`v^5~SuraH3a$X2P2g?H+sQ{HvUkty#wWq4r?*V+TKMe4hTcj}{4Ub)4{)YncG zUbXz*Ru+BZpFMc8AK5C1)85|6cTRpkt=#eh-YJrYORM~3x6!hey9Q6Xd-A((nSAHu zcil4SUDxtFS|+{g7PZ_pc(S{0k^HV(B;PstUAIVj*R{lj7D?|qvzEICPj=Ut$?rNd z`OeAjIy32AW6j^B7j$*U<-=!Ct3piHrorIEGovrbpzPHVgGF821Py4YGz zvktc$BoVb=$CA-hyM%sFHrM6QQi987yXB4wN(^$2#67Ze^TIJ8afg)W59aZ&<>W!> zrWWrY|M$Ja5j=Ext_q-K1Qe<|=2qs0{8ICpor9vIUo7)^aOXY`ZaLtIw;K2)6wMMn z^!^igkX|Hu)N(*g@hssGE1v~EaRszE=>O!o&4WGl(18f z)`iaG(z$?eX>*q#hEe>Pu#J%zFIRDR(j{R&eMJ8?=vtz z)nu(}^H036yvi1CF0jHs%OR;W$AZ@q_a-TGIE_n4)qa`T1^NOr{pzffo;_{IJHMBmU42|R0!WyyC)a`E_h791AJGY~c*n&b@FH}rIa zeM8wm=nSEBA2jsbl7(G%aVZv552XPD5+Z!Z(kd*i7v4`v!j2tEhn1D%*^__-(b{y}w7|75qIC z??2e1mLCx3UHkdte?oB)G8c`|aV?x3hQ#ttlUFkI_VQ(_axXPj9?TD}$XLvmsBUXl z)qPIilyhqyFY`cRaBQTrSe#pPcZ?&_xi$9?>rk*P@#Wl_dkV{j)m~V4SQ)|w!a7!1 z9<05DmBTtp*eFD&s`mI2Wu}4ag4&>!Ebud zeIMa7;C39wBJ;O(fMQ5>q$BhYXcjaJnhoVQJ)NM#p`D=&!{ebBIXA-qLHwvVwxjkPk?*;qGY zg~eSeG(XFa%U4hiaTN-OYw8v4OG}Gmxh3&j&k=VDmvhB2>2m6xTX9;5uIt;L@~!NT zkkw@l`-sK2avynjGGH~W^)2H28Q%Q2sIJQ#GKOS%ZxOG_nAQe=YkiA~N-#r8NnR|! zj<1n^+$LYQb;fmrjrYPg0R#CWM>*IVF_`z)56U;8KQt41611gr^WN!ZOz(*h*O*RA zV>+#9WSR3#k9_2;sI0}N`|(RR-H&tlDr5Xsh84?@ieweXSZ%4m(s3FLu8;*U>FJI4 zkazqyuAGKR`ERCdeZ@RZyBj$b_mhUZ#J44Q>C>=aAHIr+ixvBT1Y6_4aLQQ0jp^_z z{GEkAf8Lwm7+!s?PZjMlg|VEN`*8`67N-a{JPD?FxK-Jh;?;bo$b2T)czr%e45^L; zzhw}f5dHI@ysrZH#7>qc#`WZA>3VXsqLG=#W;rVwnP==7WBPQofbD+8pPO^1ObyEA zX)}*56^p6CzVfs)VC^Rs!>(9-`3~$ajCpjCFy_(Cg$;yNAdGo5zY0t~*AjE<@aCr^ zBf_4r{rtGX^Y`;(&YOLlmy+5JLN<>RjB3jYNJI*&< za$jYi8)NRP>}O-leU&kFqLnVWuQINGsf@X=GUl|(IM=wc!s1|zM$krJZcWJoXV6$+ z?s#w4`ts+#V|6b{|6e{s$`t5M#1}1(%o2+!5NEp9TEanMF$KC+e3=3rEQ~48Ey9=r z9U^QXtZBlS0&xbVv9)ZeS{F~T?l|B=Et1OJ)AI0OGt!bZayEsQhpA1#cz@%Q-4$6v5~7|{>oVV6kh?smmyrMYESS5nH1w$BXCZgs^BD_e z?s5*4xy!lGEa-Vq<}Tx)!=dA$=R?nja<+yGp!Y#9ggy_Q0Of2A7eN{SCPFz|!^Kd} z)^G`wvo%}_G)`l2!}BCf}>zNn0=I4fg)QQ3aRn2Ran`>OkOG{!olvcASnG{!eqj~!yH z(%492=NY@e*cHaEHg=1#+l<|B>>*>%7<&D(P_Mx#)jD2V9M`K$ey6ErN##zxw zVR1LUwrs)ItXZ4t<&8#fD|%FNi$i@8Xzq&h3bOyuQF6W{hX@b$_s2lCLKI z0NxjRzY1j?_W_SdySW z_IC&UIk=4;e?ZU=V+W-UHA~2dafx6<*75r*;J3R+aEE&Yce_V0*B${aeFU_k5mvjE z-Q}!kU6)t;&5+v^3ika+Oqb4xs?9r{WPSK`Y$L3?4W6MQa=b%GAU2EzJO80!Qbg|SYsLKy1=S;8)WwOknM1lht^Cs-TJ?T!|-5YR_*9W1XO@u+^|$7sfil@xoXqSR{;ff^NcC zCwN&H>jd3}9S-XSVXPDM5XL&ebHZ3BI6+uGtog!NC+I0`GhEFt|Fd=w-u&|a*`B{& z{y*LG_sjoh!oQ1``0$!6UygyUYr0=LcqnGSPDpne)ZDvEcN#hp6sULi+^sx!SI<4j zb60!re^Lb?)P_CJ{R|4jpJjgLag4{@<|3ixGkFZkGXLXHmieE6W}Hd$};~` zP?q_hhO*5643uU5`B0Ym7eHC&e-_F(_Z*aE{^y}A^Dl(5%>M$EW&RhTEc3qvWt@5i z%D6)};|bj?>pz7!tz~^$TGpo(l@@blpSt~`65EyiWUM~UrfdsmMI()j?QE>6F}{6z zjn>AFFqUPki!r{3dX1Be#f%jht1`xVj$UJ&u?vk|Y3v$fGmPDC>;YpB8=G(Jd1G%F z`>(N&jD2d1uc`iy&78$@eUgk+3#MHv!d?OMiamwJDAI@bOFC$$rl^#1ES4KH6F-h7 zd~(-oj?qP-+ejQA;|3uFqZ2~=I-j6lKhY-`FA(wx-++cfM|53O#=_j)gL;IHbzH^) zgs?vZAbcvl1P2C$4j`;sc_wAvyy z6^$%+zUh&VofVCIYwQPOo8nIN*v*|4jj%Oe8C&!9eD-}^&HJnoGZZP^%T)8}L89OK z#M_iHbSsOY=@vu#S`6)1Yiwj(4R3yIY#sK5?Z?JU&)<)Yli=UoD-rRUe7bG$mohe% zRppfFSByDj!5GrIE&~!OC3MF1gN^sZSeOPq%E6V0RlLtHpp1oILiu}FL0dXEe*@i& zeGL%unp@M-*hecGVIHmQ3ui?m%%he4Vr&Q8fwG;P#T+QB-_^;90jM z@z1RsZM+(y!MK0kQqzBj=aw>Q9EDd!HF}u|8QCE7pa=Sh41^C0OndR=%(quuc)i3Q4XoR;*7I z#)|c+!WO~ea<*ErK3N#EuR+3Cu|84QFR*fjv0~j%7%SF;g|TAYTiE`v@`SNseS$Dn ztn-DjV%<$xKUgtgtXOvu#)@@;Fm|?O3uD!)P}pU#ItXJI%Mf9ltnxTvT<*F^*rTwH z7RGTmLxpj<>$bvJJU>ks8{iKU#^tVyg>kv-R>HX4H78n5i*UK?OkrH^nhXA>MViAp zSQwYPE){khtOJB`x$81v{bB7VjLTgQ7slnTn+oG{*IZr(%N@enOBk2Ct`NrMuJ;he z<*qA*ak=YVg>kv-Dq&pidS_u=?z&nSr;ltbjLTh*5SFa5f(u`VH$Q9s-t+gf=2f1* zpEYyR%=TW^%xm&6PGY&Xta-zf5!ZJBC-$1pX1lEXK|ML0KI88Oln*FVHOL zuTVDH{01EkjqI$AHua#_!?_8RjW(M?*=VyFl#Mp^p=`8CgR;?Pb0`~a8bH}-vjvom zHc==WZPKBmpj$#Yt$sr&n>Oj47@KVD24mBW-DT`vV~-nq%Gk@sUN!cfu@8)W zY3v(gzZ&Bk>B7%h2tQ-H8{5kmm(J60X<_UbW9^OgFxK1Hsm2ByD=}7X>?~vF7`w#S zWMelNn{MnbWA_?++}KmbUN-isvG{+GHZ}H0k{YQ;E1aj%prG4bXdZ?wTN~0dYIj{8qPv zO~~ThH8))Y^bBaIjk{x;E5-K+ehIicM|f8>@)U9+27b$1SyWo0CwJ|Y2|oWg(WMovu+mN{1W>| zVNck8iG7*p@0Zv&Lw@29^5!*>U`AHpFI9()jTH2zer7c=IxLny%w_h~!xwF#c(=OfbXJZlk7G#^Gy zV{^1JHb?7z2O2xn7|YGN-*Lve8S80mps_*5ij9>SJI~k!#@IbpfsfsbFgM^xP3Z)5 z4q}_Ku)pVpL{xpP@iLUWdOpFxFFVE(ZaZnRvm|5&|$^Flmc}?aV-SC&{MJ(ok-<(RF zp)?^{G{DhrbMIn9=L}kTcK6)ju{uF6*E2W=l=sCKb#rJ($4^BZ;l1WUnad4^GMCGP zc7hf_*-=V2e-GWvt!5+aHMgRrxfLz_{8-tCZa@9}SlM^Rm`5pNsYH)urnEoRy@jenXXR^O&J&GOB`cdd`c|F#q%vLa=GxD^dubb7%Rh@AMaX+ zJz@JLxlGUBFUd`WzyF~KugPcG27jsIos3M)$>&G(x#i`#qyC5hN;mJFZpN`E5aJrgXlWdyr5`FN`^4?1A1WyO(HKiV z%C>P9>;EzzMEL7pjX#F<%iljN3cVr`hf(Myu^5Fev?w&;FN;FsaUXv3{dz^AS_U_- zU&0k?zQz3nTe9eLHlhWi4`%C@=yNWV(PuoA(T8qEAG#TR79zAY`q0woLra@4m3`p$ z)80|JOm8*j*20#(D!Z z3wk4z;W8bXi4b_Tjd^K^6ch{}(xIXVq@_kdjO+O-(wQ=ctvG_J! zD(^-HtjomW+w_h2@@<+VjBnFd!uU2#7B&#p=fW6AE*Dk~>r-K@R9qo!Gg#l_FIRJOYoQStt%QCE6%CJJQEcKrRBr^;KHl_ z($PH#cf>6y{8p<|+%t?K{F^mA?^O7k?`M45Z=i0pW-L1tpc-w39)`QX1Qp*mZ zW|~^|&?~HKVv+Kt-V~K3Hvm^GzSLLBtCs<5O06#;U+?hdzl3!y$1_s-Ss$;-NXo)Y z%9pUT2w!`b{hP z_L9)jmxPvPWy+Y9DPvZq><42kekt3=Su(7Vzu)4rMaOu`SSYDN(s_H*B{Hx=Tr+Ra zRdJDFANU1Z^xB6B1Nj#%&1uI<(9!!b9PS zUWc+}?oIcQ8XzRJk%*Qy64BB|B4snMzp_W2l^&UA45^I%hMF~BY7hABlLY+LzdPVh z$4&TeQSh+%BU8Rb<)zi7r(wE;oa$IP8e@J>(DSWfks#Q3ZN4>|LW2nOo(uS8F5o|O z0l$p}JS`1)TKc)HvRiQ;Wej*_^Nh&=U;Pc*|HwH1hoqXj%TwA8SK39a9bsJ~PbmY| z)VSxB4-#xlHNx8;oob$slXvinF1+Ttq?#3Zv65KMu-x*~V&w_Xx>`13VuZXYWwDlzxEMwsL!>WvgZzn+7yQx;hI<8f<& zrH@#A^{%y7?>e!VbR~B3QQwTMFxNVa(oV2wM%SwXk1c%@oEc z+CmuXr?(1YdG`=u9CUn}Fb+CCP#6at-!7~Nto?;?(D5u`9CX}F7zZ8yTNv|bzlO!( z$KlOSrt11NuMBkdk||!3Nx>Lss%)tuSp5w%s}+~lHKk&KA>2K%zBMfFKhXtMkP=S! z+z)x~mp%7~o_j;iqD9Sq(QHTZVtT<+5pOK{w<(Pq@z&Aw{$26g>DJupwNa;4hr20%0Z!9LpdmP z8z{fz-5$y>dFf^xp_^I4-iXhdCD76=ftJ=Zm9eI&jG2-$zHiD{(^STqrn2pfv8Jhv zZ=UYQnx-<=G?lTYsjR)RY-7ER^*1)ySb?!}W7WpaF*e@VWMfl|O*b~v*uBQ)7<Y3f{$8~F2JfV_X2p#hjQ473LkAPMX1zWR>cR;;`R>8!KY#bZ zNp}wh8+v=YPiH+^%bmF4d*04Loy*5bZzGt3(A(Lqf8x%ymx{U*@`Z)tb97{|#?`?o!vTXQsdYL^Zr7Q?qXPOP#y0*`PA! zzSGUo`6BAt5$NYKHK}k<+)uFa9+?Vn4(;e*6Qpvy@7qyP@gk zZ=;*3;>mapnkv%LRFPIRveNmcN4|7cG{PK5_xsgY6nCO*D`!O``xx8LSYdI$idY}{ zsyX;x61A+t;tu68gkutqc6pUW)v?gN>l$rSM$l6HI4u?yi^T|fw?)uHnl)>gus-2lB~){YhGCJt94tSQpM#Nx<*`4aa<)zr zQXhoK#QQuH%E*@q535Y8tG_hq@$&gP8lPeGDbROzZ&Cby2?1> zLH9$ybZl5@`Kb2jlP?MuqvNPwSqULDuA%lul@YiJf5_A9xG1p?ZXwtj2ZmEd32rPY zufktl8dWMPVI!A4uDg3g zl?VxK&7!4^DzvmwMcJ*`Ul|)!l+80%SgbE_AN?i4H~8!N5+|<@r+l@?$0N<`gLNn?X?KH*_<)aTJX|ahhuLmTWA_7bQD}XVhf18s zA4?u2DSQ=ErTFgox9pgZ#^b_a2g&LPg4Try$pAcZ-P8NcHPs`WPw&R za-Ff8oE4QSqVC74t?nm}CA6|l?V){TlF**>yF+^vt3e!2_s zvs{Qzwh*VKAxAAiBdR@Ct37rHMFd&2e$-5hxk-uyy$T}E)Y zBsd3Ms9e`GAwD*!xv)!!8#)rS{~-Wm3*2>SU#zJq${X#@%};p|66a=)J{>IJ+`MYdHbxZyJpEsq=z*$Xu83Wi#Q(s zxG>HmIG_U-Tq>6~Eu2}~ZbC@N-}-%j0nbY-#m|Yw_x*8sD>Gm{Ar{~F`Qpp>eV#DB z?@tNi`~IXbzVA;6H7R9G+jT#d+m+RKRy4A$u|~$&+OPXHHI`|twK2Z$x*y+ny#~AV zi%QFjDvL%3tDm~&+AbA%g@ct0IZU&}x#MO?jAv{`h&!rXxt$eX+o675Qpwj|o<-7e zGOtPOkFPpB6ZanMgYXHqpkx%d{g#EX@bKq!3yxXGszXj025VH656&sUc(&Z)gzPK0 zG}L8ZxLet*eL-uAYpY7EM7-f~UqE?pU%Pnpio_#UC1`1hidHmoyRkc+rBiI{e$N?` zG@Vbfhx~-~DOIH`{k$j7ilv{o#bRnWU!GM4tOapTEnHe*x)|R4(n{;FCv3m8lIi*T zrIqpU|GnQER2B`3mFEnvij|K_c+~5cbk&qJI*0C;znvwGH0V)|Z@r7AJljE;@@x;~ zZ)^-@vmo7VoSP}jTL^7US!ij>LQB6lQ1*e_Pro-%#xjNO$3Yv)*dwk?Mq>Bk4?jWX zbgn9D)2e2%#E?h8|LUANc_}_+jQvsKDP!#SVll=(YccjYvG|^TBfflA&kJMz{gp80 z-wTEPKlaW8K8qs#<1bZAL=e%lO9b25AjDpd5+YGb1XQfyB?%-Nl8}O6ML|J9MUOi@ z6-C8*dUBq9-&@y!ox-=5Qo*zg67e#rv&- z<3|39-#jM!yjl25+ouQ5Ul)!jDJdSFEINHP8;3uE!|+ka1h>G=A10yt@E9*VH5Asy zCjESs!xTI}wzf>jzyj@v*2Ht}1j*Kx1<8JX7sx)4ogvxJcYz!Yxhv!($lV}W#(P5E z=)x>FhS@3?;u>qKq^7Nsny!GYY^h79D_|@8&KP@nWt%!pSHM=btuglU%J{?zwTuLN zd1VJ1>tih6*f3*!c13@S{vo)&dG7Kam#iL#Cly^+Pd~qb6zas|aj!@MjiE=NH}iw| zsYoBzKf#Glaaht`$(kS~pB#(b_4;XjR>3B1wR3P!(LprYq!(L}WkGvMG}@$g5=)yj zPZ({|X2NKb<_n`u+Ef^A(#yhVlUfU-O?pKbZBh$iv`McDyB=CX*ey{0B`nTPJ<4>U z&9_qzhvKOEcItjF-nUbW5$`{8$z!t3K7zk=c1jtEf)%sii)OGzQI?vuYwakt~m$A(7Jx?qQjiJ=R2kZ3e_uZgkAg7$CG zXzuoxSem=nh0)w)3!}MvLm187e!^(({v(X$Zf{{UcW(-#x!Y41&D~qVXzq3sb_=w( zh4E3n&cfIb-x0>4&rZVTLwi@)0%$u5qp?~bEY4JN3NF0)rt5BO`0sg%X(3J=H`9`pUK^~++?f^vS0Ti_$Us6h)a3We)$z@|A$!SbPr zZ3j7#09#*}LYCRlkTkLVAZcRzL-v6j07(-&5RxXg0Foy57)YAfL6Cejb1)=_&W1p~ z3wbOgui;Qgx_J!qx-d-ByB+F~nqF#ZdZ}f|8d=Ida_KS>Upp;R9xu{#90=BQe7r~* z2ZEJtXN&{E%6@H(1HsA;F_vfSC}YPNJJHw(W2YG#V~md@YhErgc8Rf>#%37{%r-tM zQe8H@Uy3meFLl>1CwREeqv}|u!0xe0ySv8#Q<7%KCe4mZ+ATI|x74Iu>>}j=VLun% zbV{7=a6|HEH?$6EV}4;en)uGh#xm0~OY6)$0b{N6L63??XXZU|2eP2OFB+Yhha{HH z%tB#wX6_e8XJ(NwIy3hQqcih?Fgi2$2%|Iep)fi#cL}32vsf6NnLC8t0&R&fIy1Kl zqcgKq7@e7$h0&S$NZ0~sGlkKa`B)gcni;~_U49~rBZb!pqeuU#FwQhyC5$5xp9$l; zGt-69kN;d4-<`Qa7~h>)CXC|`mkHy$Gs}gst zu(r@z3flqNAYq-MwGx&MZJ@A&p|uv)7g|4I1EFmq>{Mv^!b+gE5mpN=PuN+|HWhXW zwBEw5fR-UF&T+mCvEj{koNw{seaHDmFWz^Yxm>gVkQ0xI0!rKp*$Bs3zbUYu4TJiF z3{7>JnVydka|>MT_Gla7@NQoCFfTmF3-c~L{QGmg@c;5B1z6rISn03@<(=W`ZV>L| zg%9w;{k-sSFFe)@Ult1U7Kvj}lif98KG+U;gS0R7vmGzQ4GXh59FjLkMUcEfDu(O> zSpvx$q!Ez3K^h6k8>CW5-XN7h@&@TNNZufw4*4!*IpkN6qagY2S_LF$vnwI_?phTj z-(4FGSp-=P$qyRTKwb`63waA<9V9FNUmvyae)M$SIJtQI|p9?83A=4D-gY2W+I?7*f+4Lu$I{p)%g; zDqH5X%)|;~37oa2Yw5I%1Y5E)z80Xr?PRQrv988)jP)>2U8#)^$q8LKrm-q=KA(~M0wHq+QFW3!FjXKaqKxyI%hd)3$i zV~dO}Gq%DQSEO*|=QNa`v5v-Q-85YnV_l8q80%py*I0qEA;yLoD>hbTj6R88x5>t) z8XH-DJRXE830Bv`m_)L=ELl-&?^p)m;BmGf9K1v5!oh2hF6gBWUS)K#Hk_cx@^+On z5Hk3TvNO*tcQa%9BG|yH?mF@j1hZ3v-CVGwmW%vjq`IP}7H4EMzhaCYS4n=2%T=EW zuEypDHS#NJ@C;1v%28F77488Zd04=ub$P6RR>1Lmec&^~^YG?XZG`r!ti;2C74Fku@0 zt(LwPx+}fjfjkm&24ubq^PCu_*Yga@U%eh`>h)05<-3$|j6xab zAC-M$tOatSj4M%UI=<s?O*nhA!RP=0TD=YawyOO`pmHdOQW}BA?PI@}%ijSf^Q~y?W4DmYp9QUhXspj)Ni6%=ErsPl`$8Cdl8(YS68^ccB4}F) ztA_T8Fph+8EsR!@qX)(K3pS34hc~}}zBC*O-5)u;*o*f^4moYz#CkT zma=Wsn-MReVzWPg8It|^E0FBZUxno8&%Yo!`tuqjM}Phe$#VP;B;Sl+m~Tcf%zl0; zuA}zz)U=1N2LAf2>B_dha1|p{<`4=viruGiL}kR zb*I2(ZXp_*^RJ}QWkK7f!RE(?9p3!rw|_Viy5Ib|dGUVpn}&G*^;jO0)$;)SHRKTG z_v&9LU!xdRSzNLXzDV&Ysy_3$43bS~IV8_@1!Q*@X8svw6G?Omng}&*BGfVxOAx8- z6Q^Y)zBTrPvG&b^bRC^$U!>@dG6;W_0)-QNtRjfg$J-du*y^lH?4foL#vbZd!q`LYD2zQ+M`7%tb`mxj+7`mt zFYPRhbG4fby9HV&VR1d#qlgV}ep7ll90}cTO80y5epC7s@&5Y&JSMAYy60@!l*Y)N zl0Ii!SdK5Kt?31wcssH>?*s7nH@O0+znziZZe`EgZnA?m)eJ~B)l5kCcAG)6w`&W@ z-fnZq(U9#RCqcG{uFx)$nb-`^%354yY&&_XLSR*HcVVvQM6fZh9L8t^+0Vhw zXr9dfZjfyDyF;?s?*YkXzb7QiWpBtr7v{M#%x1kur=VF=(`HRgzagcJeYY}B)G1@% zt*j+-q^yn8G7{{&m2v4FO}DqPuExA(I3}MZjZWQbg~n4_nbC0LaImp$BW->E4a!05 z`(dK7zV9lvHw)Ts4c24U{P5=2t(EWN$4=cR+^>`{G{d&w}vL2-MCZ!(N>g&;k zHAQ7LH8G<+tX*zH&0;-m>w>}5{!XEAP*3{?zky_4SWi(v_OfVq)Hlf=BznQ7D zvDIhweZOCJ4{59Wa1^gr_d?NF-FLU@zK3Wu?-7&*R3o@ zY2+g zl|f(v!Y?ocCV1bedf9&Lxan?rJ9>&=5DdRJynvPGODeG&jpRu9FPBvC*tlZdmV-t;G zWsJI-(p=W7BdaUxs$lc<#rT5S>VC=LCFKT!5C&#~xp2fG6iII^^bdAYor{mU8Mv}SNjr@#!>h(y z=~sJ|(f`nN>1ZA_9l!sc3|>XoOE9v0K*<^I<@A7X zT+B!EWQ7OALHDpsn#r+qaq9l$*a5A{f=b*4Cmw8D2a1!d#N3#6IsR64R=9tk!95GB zu?)|dC9X0?hi!Nqx4CNA$_0aJ)VS4bYEcpR!!sbaf;`hzjI%niVhjbLrjujTbXHi| ztu9t)g_X@Q#tX?)&?`{GliHvLDSuf<^?&bZY5Sz-P}S5m|A%PolMa-Im<8=1(by;b zRbtsE9V{#l+S9_=CmkY;ebSS{*e4w-tQy*5!f0I&6GnILVPSO54;Mz)`~hLNKs!Ph zUGu*Pqig;fVRX%B3!4wEhp+|E?iNPpu&1!Eq1`F$M`*o-(XF~o7+=`wEsQVh%o4^S z!CYaqmNyFH3p;&;@r9l1g>fJ-PgpUuYlZQJog;|7~~FYFv8>@jGU3*!qrM+@T%J5z3BzCW<77w`K6TY2%mKky;);V(7CWAbO);a@}kfSBSl@MvD;8HH7qQ8T=D zy#aa$V_dNWHzHHL@J(L$Auk-hapC?JdGY`C!tA@b1;^WvUL)a+nRa{M$~oviUT6AG zJ0SRp11WEsCGURB;iy?Vyb_pbJ&89%|)@&*yZ_O@+ zd>8UENY?GkA^D=jG)PWvUjfM%C9Z_zixR(uLkbF_%8c4ntKv)8z`gA(scV8%Qkj|v0lb#z4W(y8A*S8sRq9nDjA zBu`k_z|T{*=INIkB-qeg(6kQZH>mjPK&}vt4&*>_KeC_|h(-r;xx~_eJVsa^w9kam zfgB`^4&=we=s*q@Mh9|!#yuc9hZ9{>A3s_l8(!LkaS$`hos~303;ok2O;UWJOoL{}_^yxvbj^7#aYc?}t+gE6mD;9yWw2ZNfflCJDSmrlQPuZ;Cq(>2H5l(lx6 zu9B{di{ogzT`V14QDxc2xHyioUdHl_4Kl{XaWvgmt|WA9EY*t2o~zT6BdaalQvc&`zKEiR&&;4 z1xq@|#}25hh$N6F8yom>D9-<>twkO4)BKvy4^s|^(RR#Ia^d5_$x&71CDrD$RdycX%{Qz2ha;i;X0@9a@0(TL z@vX}2H_U2LWkoTT46m$6mSaE>tL8=DacJ5dY%ulJHh2-AYP{S#(_X6gmV zEg)ZnGh51j&YLQTyHHJ$xdw#22&kk_Y`@jg$}u@h9rJ6L7%eQQj@ z1Z6Ntia_d>eCj$bsuX*Se`P2G)xaMdJ~gFQbm4E^wsoL5=?@Oqg0ITglH{sZjnk*p zBi&@^peTQKYpom#hJ|^DN5?1Fm``547LY;y-@;X5{JW4_LB0>ktF#G9KnI1X>7Xz* z{aTW;nJ%4vElC;2Bs3itVXPV_jThgo%1zcLo6vgW9n`dKdK=_U-N3CxW1B9tHa$!< zmPQAOWlc_|T+w2XV537A-u!lcbT|^a-_DQp;{A4h9pe3V&SSD2^}}Bp_o=v~sTY3-afCkMym7Opu3isV1@#+tJUWUk{&QB#=TPaxUuKZT@w@);!0e>r5n z3-g>9X3c7c^4C`lsA>DBrtM!D+rP3EPRo=hs+Do}Nz=7)T1H|AW1M}`bexMtVaY1T z#bOF1+^e##qPRwZeCk9f!;S4*;%n#nK-0F6gR+7avcG6-A;YbO6j=+&mRPosVqtmE z_7lc>P$G;sN_z|AjnW8VyiwXy7;ltD3Y!dVH(|U{Diy{XrOv{5qf{pBK4_hU@kZ%1 zVJ)H2Q4P1u`3Q$Mzh%A@j)d;F%;&s#zh$z%_3$2e;W1g$=ix6+%Pbj_EU)9sg&W$~ zanRF`$N2>t&zUX0Eo5x~chnZ&0+KDhB_vyXD@fjuw1(sj$tIAaA=^OmhGbL78IT!} zydlYieq$7^~Zr)0p`S{_>cO=*mmRR+X0(mDTENP&INx zv=%yZohB&=6$10e#vSg?w?gA%p0|NyEr=d_3MY%jTliUG3CChO=d{H5uLN8tO@(XURgo>xpS`6wKgTQFZbOhWbHFvKc8G4uoSZIbS3JkvA=wW1fMh$|6Ox_muOZpV?ghzCc5g^_vim@?OuItf=)x=~ zhS^S!#x>P;N=@4-wT#5SU2JCJO{Zlf790E6*f++$H?~PL-E(GwBZ<1dUm4rp7{{CS zxO*AnB&o7Pjj=0LHpCd)eNAm1FRHfql29POral6VUINx5R!C5L&AhUTvYOKR#JTba znI%}))*-DOI3p{t1GS>j4%A7@L@+T%H1>z1C6;#J3}JcDDumGvj1@*ZaJn$sfpNlU z2TFy}4xA}0uFcaTgg3v*2Z=* zwwtkRV+R(>488;5e824G#5V)HcJjfnt5ka0HQ3K-!5F7Vg=_#mr+}AKj=CR1t#IsQ{I)q3~hY+b{B<@8jWe+$l zBk{bkdB*r$DMzyPtOn!O8s`!6>w3FWL%nGD0!@m!KxeP=1v(3v^A`haqRqvEo zcHrj;%Y$~CFm~YMg|Xw9C5#>T`NG(N-zbb7_yxiyL%UuWyPXNbc(Zz~FuI--g>mHV zYGIE;yHFTA;@=6I5A7mh3!q&ojLzXCVP8YLT-cA$CJT#m9Qd$8c=H{HExdT&acJws z`;G%UApe<99+Mp_yRI~5b7WOr!ws@ceWsm>Z0ksH53rLL&hf%WdEsGRc#Ibg-!sr8 z-{i$}euZ0b{H8qfS?`owtviwbEGJr!_6P+>KMNLvWp^$los#n)>6DCzq*HP}B%P8A zAnBA$fSd$55t1W)7eaER?;^-&Atyod(Sym59MQcPlGk)9WIITPd7T)h6Eig{aAK&b z6GKg(X;k*UOQ+8?Dx-DObU!&wpJ`OKIgcRwlVi#Lb}~kHM$_$UjP8uGBaHPjHo({* zW2YJ$ZmhyswXt)JU101oV^Tv7#--aSv%0ZEn^W7A&TnH{n41moYd&e6mhE>5 zoR)1wqtkM+bn#ixE)k7R%T^Lgr)7$;JZK$+(P^0~j802CVRTw96-K9JGhuXEE)zzl zWm92vS}qqxr=_(pIxW+L(P?QRj84lH!sxUlgwbiaQrH4$KO(!WWkl<@!sxX8R~Vg^ z>B2UHas5UZyTjiJV~4Op7@yAjy)eF*vs@To%(+S!yMfPy@x`30g%v~lSlH>%{veDm z<}49*KD29uO@sDxC_W_J**} zq1_{7XiZH%1aicJPNoSrgeo5yhVLhO|AdFwqxmg&$r1MW<{F2Tr zVSE7n@51;com+%m0Bx=?eo5z6Vf>QLQ^NQqo!f-{3EC6F_$8g&h0TTbs4#v>=MG`~ zlFmcI_$8e?g~d6W{H9KL^PSDFym;T)T<*pD&gO-P@9Ev6^O*eE*Z8**XS1d>iCfzJ zBR7BlzkE&luI-!YWe9v#dgdVXOX?@*kFl(%bbmn)19u)7j zaH{#s>mljP-vCKxekLTH`5PhW%-;k_XZ~hLI`gw2>CE2(NoW36NILVkLDHGO9g@!c z9gvwg=ADpPkbi{a*#2FR{UPs$EQ0(KY=BG30%a zKSJIQ$uGq`0Ld@KJP64z#XJOgEabzG{8G##ko;22qmWlYJ_gAz#XJtlFU33o$uGq` z3CTA8G~|~q%y!E#Z$9qN3T{5A>CFeVjKte6HZ$>_(=rmD8e49R{fhp!Su@o#5^bH9 znc&T??r%q9EH`EQ80%*2aAQ4?va}7@KeGZDa2l`_$NSV?P>ehU=o`($;AxKVv%@%QCi)G4^8m+ry3ZG}hnP zF~-=RX_+RCjWRac*g3||H+HG9D~!!BcB8Sojs4l!(g6@%h2uVre@1wi7kL<`kgoO8z?eBvi zoS<7|A3{=+`1|MQ67^#RAi~?>r2k#4eZ~_F*SLpIAbDW zGE`rPI3jVmFpfyvCu{+-aYW*DVH}Z| zBa9;wrNTHO@su!*NR$ZUh{V&vI3h7z7)KpLkBN9gm{Sg@X-k>)E z!(%qbL4SfwGXhhZEFV$0HeQ=)>JvgtA56Ce0}eO2LJPvHGugLs0OsH=*5&{V%XbAU z9Jb(k{gU4a=J98_b`l)_5idN?3x602a{!6crMJTt2OHZEM~|`ru53qJ$ez6qem}6a`b2(Bu9_tLvr-!Wk`-5y#mS6qgNq0dh{KLvr-! zb;vBpHy}BB^dHFnkZ(eA^yn=}jvl=Y$CAUS&UE+j{f7C>^O;XO!>9=#9AafF4C zTjB&3L2~ry14xb@eF(|Xqs5RMJz4^JKIBqJjvjpkc{k+8kQ_bw1d^jipF;9G!=FL& zJHwwt@;k%JAo-o)<&gZ&@E4H$&hVFz{Lb(SNPcJdE65ulzlOXY@*BwKAisrt5Ar)m z+P@zlzjtBUG=@1k)oGVtbc&jePEpgBW0Wm$>Gb6oWy_5H;50mSjPlXn(%aB<9JE!o zgRxG=_BPhl7{?j)w>^yYGge^iWMjjOl^d%vcDAwc#-%4-ZHkp*eAx88T-K)I~-SjPRo=p61(y<*2&WCZLF)Y!;JMX*3Vdhv6GDrGe$2* z%bvDQk9)SU@y4ban`Z1fV>6B2Wo)*w$BfM}_Pnuq#@;fvz}P3omKpoO7@t~m<>xe% zpD}t!dTyPJ?QN{9vBQk@FxJmlfw7Z~4Kr45tjgHg#>N|)YHXUZ>x|7bc9*f)#^xIP zhq2(}0QworQXP&9f7!BBMr@Smt5`KTDajn{9tX4IV7C|;x67R9q2mtHJ(?`;u-VaM zaT)0rPL`Uhl>DUTBqa~2M|a1?ViWQ;l3TaYiT;dJ6JIaFgAJI52@r1;3T;fe( zdC(pe#&LOr(b1MM!#CqHA7C7wQ^d9%s(pI${0OwWxE>dW^8|BJ&pA- zcCxWy#_%o1nt{RPJ%(3TnmmU0Q)%$PVkE*np@;9Cr~II-MBnDZ$J$f4?q1*NN{I-5 zAdA4H#PBDpXKT{hgqLxh^pWqEM59euAgweD+IynWCOj{(vvNv_)F7dl<9FcXhe+`bS|?Uw-mq^MkhHrr9F#(qvYzMsJ+4 zz}4IUpX1zk-8Nn~EM@kZICD*`ziE51(>e#e*htaXi!HQXY?1Y1#S+V2>;qwW(2~Mv zqdycz&-PSdMbH)tqi1`PFnYF2gweAdDvX}(Qem8NJ60I|uaAUr#%+)=&bWOnj5BTn zh0TZdiLeFG`UzVM?Nec#amyD*`~8`)&0wMPgmK30b77ou>n)5kZp(ym#;u1i&bTcX z#u>N6g>lC13t^mbJ46^~+`bgX8Mgz4oeyn=uxZe8gmK30D`A{*>n4mdZeI)IIM%+x zIOFz>FwVH`C5$s}-wNZ5+aAI=`3ge7hD`A{*YbJ~{Zmosw0PUw;m;=tZ zZ6b^_Zr=;zj9VLFoN@bB7-!rz6~-C2uY_^NEkhV*+`bUT8MjPfoN@bH7-!rz6UNb@ zPlR#Ct*tQ5xGfdN8Mn=aJrC_eVVrSmCyX<03x#pUt-Y{sp)C-`@%k-d8ilfdzWL8OaB8+JZ5tovj=2a?-Fa> z>1vi`6&w1uHZtcE>xW{Q>TC{9xPxu`M13$vdXQA$iAi1SCfeZy-;DY>Vr0I%H?aa!A_JO31@qnD&uj-l6_`m*5VSn%<#O z(+{{QTjbK|2i%mcFqS}RDQoGpj6{259gTG|#`{-2Mpt7w#(EgbHCAA3h_PYD=o9Jw zs*Ked8*gl)v1!Jp8=Gltma*B!?lU&W*j!`tjJ;}Xfw4u#mKj@Nj9r#1Kc}JmjM1Oc zbL(WRi?Oc8a*XvbmTRoQ*brmGj1?QJGFEGBys?SKrWu=VY^JeU#%3G4&)6JebB)b2 z_NuW3#ugb{W^9GA1Zur2Kc}JmjCC~D$ygU-U5(`!>tQU{Sb?!2#)cUyHdbYfew<#n z@x~?^n`Ugfv6;qZ8JlhFK4Wu?%{4a9*sI1C7+YkFUY?c}ZNBCY-$*Gb8(CUgkgP4$ zanK>v$%-1TG*2W$tb=Q@P*z#_V0?}A^pb`tK4My%#EM$FG>-dGURim$|C4~F{y>(a z>{(t}G1Agg!8{d4Y$YEIV%=w%ebc-e88r&a;)hsmHJrQpAL$A3gVjEhg?a~$7*SKg zRYx$6hGW?9S@2GG3X3KS2HC>NMp&{V%g0r@qUFvdDC-AX3QTT=Pcb)HQ`)n-I;jKD z{EaM1BRNeu1+O4_S9+x&6JWuf^J}Dl^DDf|Xgs(ok}XgiSJes(#a308Cu`-}YawHB zoeA{f*uZ*-g;qd9y1`Y+qTqtKpZbODjNFjdWs&Vc@HFlIX z?bu9R=U{B6S~QN$bd>~za;A1g=;~?n+ zp9#tHJO{G73p4Kw(-*5miR)|uHTA`)=_+f=K6L4Hl{IA?chYnmZBo|WX?#bkfCa#{ z^6Q&Q9_C0(BYch2pz%^~I`F(iV-4EcYS6FNSq-`f`S6$XX>1LuEW;vzHC5GRwb2#N z)>iGAh+4tgGYOKlXEG#f&lE`39)?+a7-sD`6Q!-Shnm(NYP!6QviDs&UEW3+YqF+m zgF2&(^+*|N4^Q5=)gDAQ(b&4Pwq_O5TD7aBCbCXW7mamt8>^GsipF`UtKe2ma!VJSOYa$~=o|u2onzri5QxuT563?h^`D?^oto%tC!-{%(V0 zy}uojeZwCi**7rEyfe&teH}_%>oqm4*VHl+3teoctYxE&wOP}B<23!yfiij)nvV6* z6#%}+#q*ci=0jOReLd(Q)>hB6`uk1WZeGN7(suKlXlyr~tleaZ#=h$x63d#qi!kF&ZfTl#=7&X(>W zjI*VG5jG#%p28MDn=NcHv|kIO*Lt@w&X(>ajDE+R!e}Y?78ci!a^5t&`8Hv9FW&D* zX>-Gy-;W-Kc>hyMJSN*5pSekMw^3a(vaE)WE)`Xd!dEFvHnHAJwT;yD(^1Nn zxODpIIAz}&Yl*!nqX(_O?PzQpV_l5#_?j-q7@q)8mTRo9u_4BW8Y?zdYOL1SSYs27 zO*S^&*ww~n8N1yWpAXP;#1uT7^#K+jQj^|fY)kW?R(kHT^liFY>1M6zz z_tHRu=pGu%MzDj_c=!A0iAXON{KmiYiSqd5Zts!gIxHAqJ?E4?NG6-mU8e0k-VkHT z8=u!iW9PAtnAI$3`!;A`*^PuZ-@vY})5RN|eD6ku$83bt6*aKgt9iSkBRab5Rp_Ld z9~!OJkcT<`9E=9@_#z~Y)=QAxAYX>0N z!{gMmOwG zVH=nmrVAnl&yVAamc^@SB|OQ-7tptaA8`?cTnHdQc_b(Nlo1_Wpu-ot#F!t!BbgF>`l|Paau-#HdEO) z#=02e@%6Vk#tt%;Ypk!aA;yLpD>hbYtk&3AV-t-{Ha6YZ)y8HSyWJSwFg*{tVVY-K ze64<^tI*O{;!~t9o>iYN$|X5J{4HNO(boWQQ;$)j3caiM;`}dnGrECaDfWMmU(?W$ z@@rytgbpv1-nzT`Q$m7#%u|jmsZL?Kt4R7%)SvjTG`AJ&4wD!9^vYo=77z(++uAf$ z=qGWbwOo!r+H(Izw%|8gAui30WUYSEyl{B3y1Fdp!`t|Eu%Q9dJhgJ+;4Tb74x+MG z3N{{_K1~bA;5?e|oEXpeR*=k78%Vau3?$Gmdr;Fadr-?r+~{I6*mv`uHw5I~{7t5{-TQ;d1S>pdBF^OLHfQWgq_=VeI3#7sfumhcNc> z+XyRy)>9b!_^pJoUi1>y5*qDfG5&&$y?uD|y>EKY;msf3SlKke3;40`ee;;?2Uapo z5Y)<1^&di9#~o|PdzV)23Wn#ynjW4m*d8^T=eQFj`?{SW+1GV~WM7vB$-ZtENcMG| zAz7BYL2{UwVU`cWY#|+REw#_0rhOJQ_3o7|b?GwXDl4ORujyJLhsri}T1J8|P%7Kj z7<)`*97@sO@&!s|2OBFe#-2*kSu2#!rgzVkm#y_1mSXi?8;!=wV+Xjoh@{F+yN{Gu ze;+G9ilk_0AOBl7FKKT`jzUFKV|AoxG*-REq+~(M6^+I!S7K?b`Us=3>M4xIDo+@V z)e*vItd0~$V|A!78mqp-ctdiKFgCAzVZ0&PUl?yljuOTjl5AnTAvszYZ%FnNHXm9) zVGE$`Eo?Eg{=!;9^9>?zO~RXR5Wf#cLiY{gH(tCy-n#=Di$C7WW71gsfWLIzG@dDu zhvf=Kl#~g(;~5MxfikT@Sj~`e&DAT3n&CQ z@-vq%i0@g%DbO&)i}aBnN$Or@6~)fE=aX0-3q6EcpRiZ5#-+o=N=5u`{T!^Hy+m4T zUW^*6);uX1t@!}4hgr}DibiXGs>ITo7YL&@KS>y^`7y$1&4&u3H6J95*8EsuwC00_ z(V7nuMr%GqSW9TW^`%`8Z@%@tIUEVyx4t)c@xJwa8}Yt7%45=+%)(!jtnca$2CwOH zo{)Q5g>wluo*yk}CSWpq=O(M?rGH&q$kRAqEi zmC;RA*2h@Bv0=t&7d0Kf)mc+FswBSI7bNRy8i>lTiT??n{u}?S8tO2|o& zRgiQwM?=!ptcIkkSp&&yGzM~^3$xrArU5NO9Z?sPni^1Q`dFYc{!ZEFPRmSuY3yfX zEpRTHj*kWEZ#m1NjE@B><5;;eJ{G8qj|D2@A_2;J8yjeBu(3j8MaC+P)fl5=sr#F1 z49f}T7W6#!*ot7rb#Ptvh-8s^V=ih`vdU34hk_mHSyWU~6T*YslQHsSVPs!Htj>r> zqWi}kD8D9>F26!P9_;cCr`Dx#4>n5vFyr5p?=hw|c~_zusL8urG@87^O~|sK4HK;; zG~cAq_=Pv$r0gG#gzlS^ZeF}^Qg{dG-_i1zY&HkrFP%v#sm3T@A%<*|6-IZZ zR2bcrhlJ5xDHBF_<$huFp`9jd0knICErxcwu&<%rBaGuT<-%Cg?-It&W|T0lLvx2P zdg~R!IErzrFm^GO!nh92&BBg_Rwax+`b=S5hi0@eu0u0J7}uex7B&sqHNv??i? zNf&TBBwfJYLDB{MJ>+P}s~{&qUJXeX@DGr50k46i3wSLgM;ot$WZj$r$;TG1hvfPa zH$ZZIiJ6dGU*bkcx>Pqoj)S}z@^Z*okgSWhLEhoQtX~YX&$*nX8Y!#*@!Tc_za|CH@$jCobIk1?*fsqAoLJ&o~f7@L_m#@H#wlEy|E8*S_y zW9J*Y)YuiqW*EEC*xkndZ0vDkPZ@i`*nDGe8+*^#r^c2W`_Wi4R2D6RwocP;{wdqT z*xr`T`~Ye9{qpcWd{Q5U2rr=BFZAWRD3|erRBRtGi{NPD(C6J!QrCaoEfvS_+rI6V zk~s8fw%wR` z&lA=Xn(uAU2MTY#x3Ps6?|U0;zvMm1$$=?57NcR4Jfn@K0 zA0&JK`ytu;KL9xi@;T(_WmKzE`b`=b`K;r)4IZV;{;kcUq>@2W2}Mqi3#cUt`(Ejxg5C7=3j9A~P|_ z*r~>b8>=u@ZR}iQ7Z|(D*p}gL@*E+Q`iX;3 zgnrl{1mu0gP&oC;z_LR9E=KS@fl$Ie#Uo4d%9A5QNEZ4Cg>~|>XK^uJ_^b&A2R3#$ z8$Ty{Gun8fiHqc}4+A6{^RV%{t?DAr>qFg1>*hYOYvATSDjMC~@!}L_K|5bGy15TY zEZy7-gwf5tUl`ro3Bu^+-Ybl5?nGg9bMFyGH}^tebaU?#MmP5&VRUov5Oxc+Ny6yn z-YSf4?qp$fb8i+#H}_&;3!u#uwiwza!szDC5Joq5iZBlFT_cPR(^O%*K)Xs92ly@( z#sR+R!Z^TpnJ_vJR|w+(-{rzMz;~H24)9GA#sR)5!g#xXg)k2AO%}!hzAJ@sq3H{S z-3{%x!ss4cAnX}v(}leZ?L1*`K>MArCD6_m_BpiQ3;PM$IAL69`YK@^p^Xv7g{H3- z#)YP9gmIziKM3mqtx6adn!ZNZanMEy<3iKd3gbf4rwQXi)7J^(LenFKaiQrM!nn|M zu`n()eZ4R)G@TU2g{E&1#>EX!6~=|8XA0v&(j+jn}oG)fq8Rb zTxj}cVO(f>kT5PZJxf?Nw1L97(DW_BxX^SzVO(hXR$*LdI$szUn!Zg~EwnsgXFw8^(Da?cxX|?B!XAhAM`2uO`Ve7UX!I|SNZ!now@pM@1b+e6s#(C!sB0@|*^ zMnU_Fu(P4>g+j2zvtBw!;1j?LlF$Lfcx{o6sH- z_7Su#g)N8nu&_ic+`0(c1ll9QwuaVL*pAR16}C6D3}M}&JtnLdv`vKNLwj7N9X%z+{fuN>sAG0&TJhQma;&^d_D z?Qa;aq53Q&hl&0P$zh`BAp1Z*56NMo7a%!I^djUW$d@2FOf(OY!$k8TIZX62B!`J! zf#fjJtB{-|`WIvtFdGf5_J%IZ5;eBqxdf1IbCEHz7G8`4%J>A%7c^lN;|q zE{1#;l2aE8Ah`(ndyrg&{C!9+LcS1^i;ypZ>eLcRo&i;ypc ztFatoJ&ffVD=;?1*f3+o#@Hk2achl@ zH#X7OG-K0^%``U4*lc6>8JlBluCaN>UNyGB*dk-gjIA)1Kx=d5=QLgX+?Ag(_IAp; z80%^*$5;J#^xBCYiype zSB)(&w#e8rV=Ig$S_b9P(rG9^V;zlkGRFH7J-4pLa*XvbmTQc6C|dUHll8a5j1?QJ zGFEGBys?SKrWu=VY^JeU#%3G4&)6JebB)b2_NuWZ#y&9?4C@D9j;xSw~6`+2vxpLdJ-xvYs>QXQEN&xtE2 zz-Ypl!{@jMXyutqE#sV+4CUyuQsDxQE8iSlnLnH?uEe`X4;pt3xplgT`IU?C3$`u5P#JLF2A>x9CCRYCtzVDBcGtI=z1qkBg0!Ydoj~pCYcQ z4VKezi*M+WUBDKos0praG{RLmKcb-@xGE7z-q3C|@BOe+j{Aw^9iIWvTXG5UCBaZl z46PO$qON*+Y29Hx>e`H20>p)iu72k(2N8fp^~0YO(0p1+)@Q>n0?SH;i_uHbXKYDP z9X@doI$yVzzYDNnA&f)w&kN(w{IkLqP!qNo+CPPHX#Q`)I5hv9F!Z32p}4jE1j_Dk zvHe$y8v6ta7X7I#EJ{{!<(B{FBXRc1(aN4U*{zcfCF}{wp@d&UawuUh$UcyJLvko# zA4m=*>7di7?s9qjGbp}g0ahu{nps+#`s*V?hmdhD{XJBv*;H}lK6O$`-ph(>QBQd z0*9*M6t2q%AH_Pv(68#dsBlWnPrA7JzAE}VcWAs*AC8lwvo8umJ&;?^B~1!_ibWIf zt@`jjK-YEWm3B_|CscZUbn$!9*l|2BW;P4j3!<^(_*P=sal9yu9miL~*m1lhj2*`p z!q{=l6UL6?b7AZ_<_n86;Os)en?ILwX*d$PKbLZ`7w^xdJcoFHS$ZB5xBh9@Xd2jO zaA6JHqVkeLeA1z)tOhGNtYaf?Mz%C`&O8^6Fl9jUI&eD*Mvv#$ACg9P0OWp<10nlB z7C_R-9s@}uI|!2Hcr4@;7v}m*4AW?Sg6pV8lbRY$YP#&bvc)c4hP>Fb(kV9pg zI4wgy;-KtT#yVR%cD#(uNYGSjI*th|>u0RM*vRsM)wQLSBXH&1%C6;QRR!hAiV}zN zs_SZM>qfbdd<9G%J#(P9m%Mj*NwQi}NdhVKpSQv(B`%zEGex`UbDqJ`6Rme+Q$h_7 zEp_*DN`>#j{nP)U0qpSSR)>Nq`G3y!G`+5 z*^X8&%-IEfY_w5J-BqDt@Rv1^ERiv;qO?Fs=u&sobg4UPy40PrTaaGaV@}IV%rQ2y zybsR+78q?$PN~smG_ASY0=ZCgx4CFEcdy7b%7XT4%GD|c2{szO@aCJR{lk&aee=}K zi}%gbRK%~!`=#z`kHz=+XqgIeXS~|aH3!o{eM5QX`P00#hCIyib8xk3UdBUi0eL{H(0@T#H)5+H<|DJvX@8bCat*472ty%-XXxN?dCXHLX3=^lNU)K6L5y zYi`QEHpbecjI~F9D^(>|N&tQyKL*J%L8Xea#=3E7?a%JWvDTn2qOk`3+iKA3>#PP% zMn3#UP1xpng`^E{4Mn#?_(ErJU4X(P`xQzJ8c{j2a0H5ut6W7on>NAk61?8*Y}z^! zOl9vB3OCmF+<{ubyxj#!+jBQ0ZO?2-+8&0PZ-!ZWvQXMud#Gvcp{7%l$`-kFIyI?` zQi4)v9q!#dPQG}fWFtq#4j z&g#&G$VX4_eZWT7A?N7irXF~ zw$>kNT7RfzB;IzhnThwDrf<4yy5+`bdz7&z>2GD>VtnpfRs_z;b+!kUDGb&~y%{XE zh4rRDG}fDUt==qHXZ2>aY>%rqg(J$!VY+kHMD1xz-T4Z2f_3LxNYgCoMD95oQfM; zgVxsTE@}Pm)1*GKW{wn%HS;~IneU6n;m%@-rA=8VEDu^z7>7F-3F9!^sltk&eITqF z+DXDVe)FNQme9V!UwAx$!*$`!A5U1_;m)V9^TRz0$z!r6aY(PBN5^3lh88Ak##I!p zX8oq4pMwK&3mpBUG-%;rUU*C>tT&QkT}vIN;5p1jtqc!yW@c#%*&LEBq#Y!OIom__ zf!qR;!<-!;M?-E2$zjf|A!!j9W|=U|7Bm#sPg@W*Z9&vB5^uQJOtHhtmKyuiX&H&{ zjQwbAQ{-Cr$9XCJ?Y72tG{#qpG~GVNa*g#h#xF^im-pnQ;zg5j5DE29R-ax{?HCs5 z48a;lxnf&QY52D~Gar*QgyhF^F=B^5tEJkb#)pPK7pF9UE{F@ZtpmkLfB17OxPL<$ z{Dwn~X)EvuevTb$t?|Q=k$N0DFbr$l=qJrGjX<#RxU6(7AcJ$*AC-mi2SGAFhq}sB zDV1j^2sIu0q?VDGX>69$G7=9N;~=P}8(A)2lOH6xUrCvt8B^v3SLXSy%=@`AKf}tLnwB}WjKmE%BV{)`P0L&v%UsjhHyv>ME=9hs zJF&IZIj+C^P1|kXEA^b+_C2Dp+g>X5JPX=KqOrx^C9&+bKNgk;?G9n=wm%WZZu?eY z?6yA@#%}v&VeGa)6E+#zOkwPFJ{NX9v>C!~fwoN8ebBBE#>ZQh3;QRutAx#m_Jyzo z(54Gp4DCx{Uqib>7(0p;!svcoCTvS+UkT%zr&ENnd-z%y-#ncxjE@d{BaCmJUMP%j zo_;H=7}^EG_~z+%!dl{JzDvS)P{W(=lJJ3o@a9i(oaM#)Qydo|-e1Ip$D~Wb=jzj2 z^y=iuQTTRNVNDgDDl1P`7nYZeEUm@lP{i1@sn4Xd?`<6k{E(fz@ap&}>_4V@`@6{t z)5>!Tj{l+tExgDJug!Pc>IdlOxT8|=Is}I)Z~F{~%z`X}kGql*Um%TR(Fk>x@**Q@fc<7(Utw=G+jJK+2+`rrsE?*%62lw zwx?`gW7)=zFxJZ$TcPf6kg-#Z4L4R{tlHSQ#x5{+nXxO4U2p6rV}CMsudyeLJ#Fko zV=o(f$JqPEJ~Q@(u{Nj@dTyIJ&3!*L&$UoIs9RE9mMkwDHh9V&eKqdu}Mg ze&O%R4ikxRhxd7ddm7>WAT>k5Zj{C)jqF&G#_qL$WpPP;0j2C(qvG~2G4Th{DDOwI z)=qFWB(7oK{SoOO&^3g7_y4B!6kQM(Y=KW0gni$=4iWzFT<{xOn3Y-jQ6*r>1@+wTuMqnX((5rhcR{`jMIrzB`|i zI}zDmNr^ulQ{vyRa*5MxS(S%Hn90Jbvaux%&;Mf2!M1v(ez7a{sjk#7ccuQMl{z&o zb!z&sh%$Ox%2?LQ<`~1RFi!zPQMlb*NxA=alx|;7z%r9gwTnMdQ7}k8(w`p#3Bo?+yMXvAj3cZ?ly8*p%M)9PG#c{8OWCQf+c%p?=HKed~KwtWx88;b(Bo zk=4ZCAlVB)>*~M)sROKO)YL9f%Sf;nPg{$X=dVzki10?RR1qz5Q+m$+B$;c_SplEH8#>Vwd3Bs)?nhCYD-;7*=KP zyL5UBt&FaQrlVn1)*N|OM#HMCgRz~A?P6?SW7)=zFxJc1P-7<>lc%lZu4V|YEE=_Y zzMEHDP^#f>Fjnj|VtZFsjq~@{a5%E_`lJ@6doD!*#eWUG)$VN2sg{1zlqS}Nzja$+ zwS%yKpS8+f|FHvxqK#D4)Fv^aR-CL&u01Q?4%LqN?*K_Fzm=Gp zS0>F}7`;zrbDYLe2c5=(+s_AA2jip~{fzkP+wIlgLt4wf3r<@t|IVV(@@Ggz$%2+C z8ZG}05=+a!nXo))+X|!QZ!3(Je`{g1{F@7-<=;{mD^WXPlcBX2M$6w`*!9rb3ggAt zLRd>^U*WG9f5FC~@9^gL1`mfLq5HkT{a(D^8!Se=KQ+Z;(n3ChzXp4QV+Y`Q)yms~oZiSVfhAr55Y*zjjkimHzgi6ZzLm`=` zBV483T`Dc_9H?oZLM=laMrF6VSRK(&Hpdu8G?Mxbs0=B|rCl2%8f&@x$dx+L0q50I zG^=?^#_nTlVeCE*62|W1SHjqR>@SSn$2P(yL(3M% z?qgeFEunpdzhe9a8#|Kl=64l0ha;i;UB$|79A3w7{3l1mlK`KEzjQSiubbgR+IZKq zysTz@`x+Jd2DXls-8kfw2g$CXKP0<`0g&t(212rHD1cu9W#rQ;|KV>1$6 zjpZ2YVJz1eZya=gym8RqvQ=Y_2xD#{TnuVeCJ562|`XUSaG%cNR7o+C9S9e|8ea+poKXu?Nc% z#^*Ec5XKvWU4-#@qg#c|ht^rx0%$i2TMVs>u&<%b6!s&uU4`*^qZz{Jl+{t#hY>Hbt3*m%u5^F6Fs^ietT3*0e}piubU#QKSGxa=Fs^hzP#9Ob?;(sU-S-n#04oQb;n%$ICtkQYuU=^X+j!x9y>PAp1Uz_lC~l3~ndGALp4CLejq<21)-u2}%EcI3)f1B1ro8#gLOA zOCUM)GXj#&<&A{ob9tqZ??RSAvR$7B$>;J;hvaj4<&XzLj)LTKc@>a+F0T@D9Ap*b z<&dKxxe9kRs>Jsy&)aGwv^3gvYHBv;{{0LfLjCqi-+?h7Hg3im~j zv^N(+p5el@Aq?|ACm;4s?{lc>eGWB!{X^N?E?q`~uYV}})Yx~%*vsl~`TB>ZYwNU( z#J0wEG{*i`)9qvIU}J|H%QwbrqQ^MF*eS-!jEyqJtER^|$JoWjE;aTCV>681VeD>W z4;y>j*t5o7F!qMAw~Z||_NlS&jQwbAQ(R$JeojOA8QakqYm_TLV+R{M+*rP`{>Dx) zc8akwW220XGj@)#i;Z1s><`9f7`ww5>#|{(+k7<7zgX!Z zVr!cfW}1^|;D-$y(9c&xXX2-8V0V5^YiM_Vy0p8CRJinejU-RE^ZII-cBl2pbZ35X zxF7pi6Zd;gsJ*VnaWzKdtaj>M4_!!n=r{6M7c@ia#gRE9LI3 z3xDgjV16eE`_CEFBBF=)C{FMj&c8Ht_jP>!fWn$Hl2wJJWfjrU^x$Za@Mn3$(aIs- za0H{>9Ayc%xVfOK;k7aTT1e*QdgsOcO}seH1yR$vAZi(j>x|8GT86yyqUm@Ors+nO zg^Lx@BSsewb+SRKb)!Z3?D5 zC7}s(+c1XjD!(KbWP51OBiJ#qC$x`53vQ>w7bFL<+!)90sm*l)jN#?@I}3jYB-+#a zw~fC+uPc*hTL)Js(Ts~V;SCI14J~pXY&($4&@Pe5N&ZAjT!IQb$u8H0fZKW4t<6xg zXoHQ%=4}cS_H*zSTnOgpc1Y|jaR+2a$U7mKy}Kc|gZv|87UW%!yx8P)!(X%uNKG#w zHGMo;*=;VJPUb0_W9+!&ryPzzqO>_L*uSSNyLVr?EEmqHYg70TvYR;dnRXBK>-uxM z2XebMo3OO&ge6_awwmzmrsp>AK4-#ro1XEX!Mu-29Qs^cCVsR1rM;V-RCww$6TWNN z?sDD$)NMN9+ZOFEeHrTCwCW;?uz9;npGk#n4t=KGrT3?>b`$>?4!5XlbLdm;E}fCe zbZ3{PLfP5)6jpnt<)C?8%R`?zr>Z_&dz#a69yq&J=L|~;w>;;#lyHl4`encT@llg^ z!~qhk|NoL#4tZrV8zz>?d|H)5Ua8H}yfi;&oBCrj+wENN` z4${89xU`&(FO@6sH{nvYDP+Rj_9^Awa^jrY`hB=6kn)S@J{m(N%J)d3CYEosw9=PNT*l+}kf&Z-@5-Bqu~tPj) zt3GQuo9Pb`X9m*$VvV$d^oNMcRP>^!Z}96Vo9Rz%W2QJRA2`NM9VU%dfmI`M-BVhd zo&KW6)zfdE!PL9Po!A;SB#k?0 zz4?zT&BpCxt!F%%jVOsT&1?PS;I_V8>+%K9~08Mu;;tslovzh)78*tgJS_NDa zMzt|Vjyp~ht5fta>6`Wc^J|&@&#aaS(=wT{bp+%M8*Gwuf)V5XW{+HqwU-A7|clN)ejb{b6+cbN3oDY}nUBk2d= z;|emaPObAw7(Mwoe|$a6W;ElgMkdVd8hJDz?dh)SVbU4fI4iem$7#&3;!e4~(X5fG z+n8)LCQbTQ7FTR>tt|b?Mf1_*CJ^04l*IV~^%+}Rr_#85tagQO`pHEzw)RN+nc%nz zAI(dX>qPpB_{&}IxKoMRq9)dWxY9^pnWNcg3`yU=$6dL&VsGNfH6~+gD$Obnimr(k zm;Nfom2UL3jOl430i;A7DDSM+UL-Y7VT$fM~TMex$;HZ9$H_~ z_JVe#Xk4CAkJ|^D9`|Tydfa26>2Z&TrpG-6njV)6d+Bk@py_cdq3Ln!py_eXf~Lpi zf{uFJDbVsH2V5zxk7&0+%N6YbXuU;y(%4^({Ttej`>?Fufu?IDEQ0oTlw|9~GHAM& zZ=roIrQ4!;5W6Wfjokv8=3rZB&G0#uj)^XoZZC`N4o&lXD70ykF3-~Sw^%Mmre}Ey zv|X?)K}W165FEF{V#h$!ayb{;FiCf@rJH84Tmn){awfF1@!EOE#2+o)y%zfjG%fq5 zq5W3UaTzErjaMx8O=xbdIizVG)V<$k{POjxJXu8S;myaAQdp;f7uOznGV!6zn z9^-syLnPf)Xk%s1R~efDt)u*Q7Bt=S9ng-IU)%$23yFQeVjqQeoWwo_ZF7nJhsC}C z?RbfO1zM)W{>Ne$LepF=g*H^ut$;ROa`lt3mT3HKkF;9{B|HT-ShuZcOLLn6y5(`iU9%&NbI6C6+wCv1(Du+ zwZP>jxe1XpQ)r@GMFauGf(;cL78FDUQ4s+}RIJzwuOOfTHUtY6)cMlOXrFG?AZHr^y{54t$ksasve;}W zQ)4GW)v8KsHr3fKhhEm$t00TL4$9Jqo1yjUz0-LgfGp>Sp=?dJ5^AJ5Kksa>K+kFH zTae}aA!M=Jpd5|;3OZF|e{{CrptTyCP$7t|4CQJ>b!d%xk96Le(D~}E3q7UY2F}|A z%2RJEXoY&)Id4ZOU%lO-$JE=;d51%`%_E@#O*aPWrrVt7Y!jem8aoBD{k;?_)QFkT z!|J`-dFMfv^X>JQ{jr|Zx*4Q1+_7(Ji#>!9L zTde$er^S{hZi2>E<^Nobm7ka}+wstS8havSu??Y#{3YmXpYK+$ymZ;T9U;qE`T>(P zo%ESzYR=NSnN8~bof<2p-(saST)%8k(uz8=d!7XsUYef~KqYe&<~Z*?OOVF4c6;LhtE% zUvsv%g*5g*kgazMG)*J6Ll>*}E9cz{Sx(&o#D-v-N^5(Aa^H#hwjW>}Y6)#*T%)(b#d$HW`|ru~Q+7odI305m!Qm z>b=f+=Rq^odpne;-g}*Q5j0D^k3c!U|m-uHF}%_Z4Wadf$YGsP_Zs-3(o)-cO)`>ixobcSF~!cQ4dWy}vqd zLKR-?uih$9Z}rxIY=4i1>{!X@=SEG}2x_axs*SU?hkBeMXQ2yZv3((n9Sq&1v7?|~ z8k^y4IZ)SABz7ERu@^w|G~!~YlX_=3@70jyd;@f|rn?iGr8zHlwxv*qQzYjVkmbA< zve@;|EgJilkj8FuwvVB9r%3GQki~utNxPlkeGj!&?=Q}qaBz@w6==SuI|902bFSlT z^`X`p+XS+lTSB*K#A#3q^>%dLZqV)O?E^Jc?_lRW7qUG{hVIaGSS^rJkj2)8EcRsRZjEgTjnUXMoUIE~TVs1e7CQjC zM5#?F zh8AnYHBcq>-sHT}7kW^=3!nt`KH$8|AY1PWXo;p<2esApO25Kv??B}=_Cv_lyA^s! zBX&UYR{aETm-GGrSqoH3KN^EV&a&7=wY*XkFjXfPYM`OD> zTW{zmjU5D8>~KhWehJ=4Xs>!xoi_`zob#b&n(iVfMRUH~+2%msYV7rp<$N>rs7BlY z?N;x7&bt^|uHL24SL$8iylWv_?|SGlP4^bGK-at3*`$^ETw}k0Y`xz>7W*^wxW*<> zrWR?eytmYBheJCwwkBk;bs*{eCV2IsPt@DQc~6Bb=QE%cnyx3bQF9*RY-dATH8u=c z&gVfEn+rXuu@^vdYeF@Y$YO7VR%(RQ$^WSLZs&avvYeMePieZ<&@Gzt zdS`nLdS7GTfh^~Z&?=4C0==W&9nQNOvYhuqt2JF&_Vr%P`C!OwHJ~>&_Grj*J|2?M zLxOh#v_ZY6IBzrPY4x^&UQzEE&f6Wb_4b9H(R3rA+DvaJY1uPd2DTS9HW#w>PJ}FW z3ba;ZXF?}y>|AG?C+Rfy4#;Bffu7X}DJ##acd7F}4y{w~D(GqTu5;cOq36`Q0a~Tr zcb)em$hPWJAx*a%>ZV(@&)LdyWS`X7N|0^UAOB>DM7j9`!!wystr)^V^V&MH9S_pi4C8&z)^I zbeG2d09nqzKpQlo9I0a)q4wcwR-Pz z-us|;)cYWGrFtKA-WAZh>RkiPQt$K5`!e*Ndf$L%sP}#6-2}a_-jAVa>iyh#zky_K zAi?_)xt&p7Y%(8ub11xi)#Th99-Wc#}f`b5)x11$FV%tI6HKG%Aj(U4K?;yx> z9s%vpbSXlbbGEY;KqEBv0?2Zfm$_T)OlYUZUI%@xv9~+hJ!y=icMpm zhkn)A*PZQMXpqKk5*wrcByT%pv0p-;YwQouksP@suN=R?XSPaEe~qmMS?p1e#U2lR zp|K4hDXU3dD`z_$>Z7rpAdBq{S?oaQON~7jYN@el&Xx)F)YyE;VkbiudkOTF#$EwQ z*-!Frbhi0WH;ug;ve^5fT^jKa)LFfcIqw?Ca()i_TGPD_No`5;{^M+0p))mhCuBMA zfh_h1Xt&0eJCeGpu?ItDs{ysw*rOqftqWP~$`_E1BO?E+bBU&vwyLqBNjDCkViSdy3FY&lSUjU5MB>=ejir$Ikz>{U>T#@_5~ zcR(j-?0t~ME{0?-IKf*A)lu&X=Uol`tlo9d@#=lqd0&V2srOyzSoLml-fhq?>fH$) zrQWZd_eaRK`8ViSO_#{)|D}#3c}bAjj)o4`*xHb7a|6g?n?k>7?CH?$8r#j;`am@_ zb}(eI=Ry{n49VPgf|mt7sIe2A?INg}#!iDQ_DaZN=R##P_BLp>#x8WWCD6edyBxCE z)sV%mgUV{`2Iwn|-RNvvphS(`0a@&qP&tkG2CAUmpPaWGKO$i{SAxoGx+LgF&G~p| zJ3&ZePk}7wR*=P>4jrVi-6S0)KFJ&4Y{Q^38aooQ*kmX{BgR0#HjpEk1@%sX zepc_r&U+bDQN6RFAJluT^WF$mQty1|JN4e}y!S(i>U{{>qu$4ycO@kEF%rCIpk3-+ z@4Rn7w!iN|RW#i;sH*PoSI+h=^o7R$4B7scKQ@R>gbvo&!=O_&wwAM<2<_C^Mv%p} zhHSm2d#ntCsQK2q-`&O05duHGx4 z57j%@d2fOaRqt)k2kO1Yd6z)8&5uGgG~F8L4c+FKob7e!U5$MYvTfc1S?qQwNn`gw zA8G6_&Q^{em3T{I6CsPO0a@%(&|w-|589!zjh(F}^t#5L4q0p$$YOgzau+MX8wyEV zPM_b|(x6v0HVd-YJm?6Gm;k+`-YL#2KR;nPUkM$l>2894(3}@I+x^fB8v8J0IWLEf z(ukGNI`yt~-WQ;w)%z;+jC$X8-VdN-)cX;%TD{wy_iMU&7;)g^dkj-y?pO-=GD zLuRWEt<=~fA=|3jkj0(^)zsMLP-Ts6?`)l+Cp5MfWU+%Gi#-cEPGeJ{!!? z*d36?eg)Om*dL*=#+K(NVa%2YE!NoTki{MiS!^w+j>a~GGBvi9vz-pzud$sVi|q|r z>_ABFq9%CfLX$K$-Py9Bdo{KIve*kDi=7J9)7UGaOEmT-XS)qrpt1Kr7P|zp*hirg zGG(cnbIa}FU%t>o(CCFkAg)H_+=p>D; z3!S5}jh(F}bhE~u4q0p$$YOgz^)+@VByC`l7jm`;bfd;*LKa&HS?mSS$r^hZG+tw` zcD5U!>oj&gWU==`7P}Z~ps|lbk7(>#XIl?lqp=$xi+vxm*v(Kwjr|N-p|RgO+fUFO zjV)60*OL5($H0Cbsp zhdb|R$Z}4DnrOQ7p`SG8$~WCA z)`ePV#L3Wj^)_|hwvgrA0cxq~dO>$+&O@B-Y^XqE!;s~C9%Qln?5)>IWBH+4Z=uHW z)3Uy8HgvwmUJF?)KULvYhKe7JD*un#Q(-UewqQ z&ej!5*4RFf#SVl{*NEXzNWG(+Hw9{^-VEqm_2xQnAtcY3BzPAG+kZj7tOh`v$ceJY3%8c#dd)#winb{V~0W& zxt`I_akez5yT)cg7CR2I*vU{Ajhzlv)7Yz>?FJ!@oex>;T~JqzSO|4g??cY}1Y|j{ zhPr9G7a{3$BzbQ;+eYXNjok`a&YwdTyBq4RvHPI98e8Fnz;-Zny2d6!7F!dt*t(EB zf0W=ghR)I0Q=RP$=v0mE3R!F~sHa8@fLf_{xbu#NEax<+m!>-(%FvuAJKH5tbB(qjZ_n`va zs*j!RGw4K(-3{4ReGm25h<#99^_Dv^@K%8==R=_Znyw}!y|*OqBxh>`)za9OkmcMK z8mJK+pqlFK=DhtO%Xug?NYjmmW@^r3o$Y++XpNl!SRFHIdts1f^)YBLYPl0T`tsvXx)1g$2?FMbo*a6Nq4Ek7O zM?w~x3`I0z475ePInG-ErKxukv`M`eJMU#sx_W0r8`XQQ^WF%JQSW@{J@wx0y!S&H z>U{`$TfL7t?@H)A^*#f=q2Be*`vzqD`yMn_(`|!fEXB7-ob6laHI4llvi&X3vc)Ds znHqZ-v`u4cIopZQ%lsvHjriYUTSFGx4$7(|-tN#Z8avS0hC}Q5OYlbVzs06N*_FhW z0X@fGf|twx=A8&x&QqYAO5&Xf$!IRgyUy8ehSu_z;N8jp7W)8Xu@6JJmBhOeI#Xkx zceYocHT)%bZ}Gpyeh69YHt76H;{6I*tFb>g+po}5{3U1|w^(UMELK{hyh`Fd9(rA4 z8#r52XobeMfh_h+$YQ%e`5HSAdS7FuM`bqYmp!Jj8IZ;1K^8j!D$rQz`ESwKE1d0G zXqm>&gDmzos8A#BhU9o9c#E9(QOI(B5*nxJo`ZI3&N72zHkm_uP-8bimb1)ujn@d7 zQIm7RcfXuhW(FsySLPS*Q*T*jDJ@p!NhhjT=3?(wZ<6!YglwzoLX$L|%;$TI(vrNk z&ej2vQjwtdYb@v9*e=kBfzWO0mAhu<9SKcVZwhpadgTtId2^r()msSNq+YqBYF@c( zYg;AvelOB=*F%+ctK{yu+2juV^%}bvvRHYNV2Vb_^9a|fceV4%lM_+(%F`KFsrPl~ z{Q$D{egs{t={|?*>w3R;wtdhQ8Y@py*?Q$!E{m0?$u7~@nowJft?z7&A*p={UMt9A z&wwnp3p7<@`$Jtc_AF-$LDMx>p53+BvCyR&alVjxFRwRx2$sFT_&^1 zH=-tJtk)=5ZzafLt3sD+tbA{7s>arHwgyn4#x{d&n_ELOHKHAqr{2!a+XI@V-hNPy zdWSmiD9F~E3eDDZIgre8@Z_GeMWIZMoetT0XG2$L#5It#!U^6@&U+_hIo}6esp*zN z`!wfO&h{*nrm-(Umh%Q^jz+u#NlTyLedxTOLYDIv&{djlFI0iKfh4a?;cRW8ks5m@WU*bLYc!%abhdg2Iqz`jTJ?^E8mO_)L;jJ3EcPAf zdX3!z_14%goNW)(Ph)?CEcRFE28}4+gb4LkhRj3D{Lp{`6(|J#XY`v#IH)*;y zP(;_;$=P~9T{X5pWH}Fk=4r&)P$%_%9Mg?p5zrsJ41{I`1CHw(1AyK22Ay8BZMP zRviMFEeSeKV~>Gst7<_DHR43*81*)C-qw)i+zz^5({+c|Yt93mZ8&tK#*Tt4=M?Ax zjmUrwQ*W;GPJ}GyDbONKHxrT>J$kCnb~ALS#@-28&JREq`!KXvV^=~s%swS~&pX>I zP*sh63$oY`A&cDxJ*cr?L6bE02WR^gs-m$6H4kDBfh;x&TB5PXL(??2fwMJ*DrsyR z$kux%WU<|#hctE|By)C2-nq_}3?*o624t~$ki|}b9@f~Ykj(NWc~>~wwNN>Yod;R$ zU692tgdWk@Wzd@%yV}{-L7v9G3|Z{!&{B9AvZPifd zaZNWGN@Qj&$ve;4a-rQCJ07yFnhZUm5tl$R{!8#KcitP?_th+G_*#&wV?Oady?}ug>0K!Lr-hEj?l@v&3&A05cH15o(0)9 zCqouH26{$g^P&D4d!e&Uh2GTInUKX^3t8+<&{~aM0A*fHf7sI&#hjkp%N zOTF`)_crJ)_1+ELuHHq?`!MvjdLM&sRqrb2T?@UV-u2Kt^=@$9x1o2{yAirUy<464 zbIA5+H}syS+XuTG8~S8Hrn$YOgz zA85n?=t}htciwZMjp|K?W~n#Bd9$JasJ8%`q23FeHwt~I-pinA>b=5wuZL`#Z-F*x zx_hC+b(GGGg9y50+&Z7P(ju`?lC@3oM{-UNN3u?wJ18oR{V9)+?rb|qx7PeY$-#PiU3 z>V4ID--NcS_kAc`y&pO6PRQ1~3)-RSeuDbydds&BY>7~+##V=Hy@x|PHR4z(tlqlL zTVF`MjiFKMZRNaYK(^j4(C3=2KQuzud$zNUhR)I0bja4534NgvdC&;;PITUjpfA;X zDKu2Qvz+%T=qvSJ4-Hc9t>zY;B3D_GXKwP?P`a!+xp_c01;Jj}`KdN^l)J(lwo%eIdwrV%@lcw7T zt=6qdI6bgcff{RU4am0YNa$ycI1Xy4-V>a+F=RQng!XB=4r0@sdpX+xsJ_Myhb-rF zpdx7&tq2JVd86K4e;Udz4EYr0jB zINRgUu^PJ?vaNanve;LlG8+3nBzGi}ylu|56FN#`zlJRKJE*Ki{0tqg-m>iiZw08F zdJl$bs5i-ZkAljp_jst9dQWuThR{LkZ3Z2z-cy~oJ(Qr{&QPLydpU1^sDgTj3aR&8 z=M6&@)te5LS8ulSj)N+xcQRB)y;Gfc29&7YE1_Sx_m|*Z=e+Zv%Idux`dPjAI`2b} z9p~jx6;1avv_p^c%g*)&^n=E}57}|v1RbmqA4A`%_jBj{7P6dwf)3Gi2es$SkS@uq z2AS<}XphF$ge>PeP*shn5A9NK6X!h@vYgL=s%g5OklbfZ@&-HGSTU15-5^_UALvL;HynCS*PHBY<*D4?@pmbI!6y@M?5DyZoOukAwhVvg z#rfrJ1!dH0>C)o-dHAUz@}Jk4KiQku&$jBaR7Fj@`F|pRt-PvgRU`k&Hpw=OMF$jl z(laCDJLhBv*ykWq9X3&GO0U zGblq+?^%=v&Rd64Fudo`PAE^tMF*fSqr*^%ACB^zTr>}T9i5K8f!>V1i9Ue7g|0^5 zM&Cl;L3g0c!9~AC-$To@5AUPZ&=1gB=ti_D$}@M-_Nc6)+Md)VqDSvsbzq}sZhW!on zWAq*L6Lcf`DY_N?3@yWn*oD?Xc{(uK1^o_9LwQCpIvxEPU5NgQzJ!*k>qWmn%cF;s zqfJMfqKW8ml&1%y8R+5YMDz&sW|U_Mql?j+=xVeU`Z~&!h0!f&J+v$pu-ZGhH8 z8=~FN#^^A#2|597j?O?^pbOE~=o4rgbR&8i`X$;P{S7@6t$GmU0&RwNK|7<}(V=KB zG=lauUdVC_lu8oqicUp`qL-rM z(CO$5bS8Qu$}^JD73h`di|8Em3-lUvA9^iXlP2bRv+5w%1hS6KmeDrp78hRIc z9l8L0480e99=#9Ufj)rB_t+MpN7GAMf;K=OLi?ag(Q{Fr#Ef2uK8DUgSD<&GPoXlq zy9$;0gr`v%eLagxe|Q}#t@jJ)N$7gC2l_HP0(}LYgl<4*qi>?~(Ra{?(D%_b=m+Rl z^h0zH%8YHaMrB5)XkBzG+711I#poV%HToU;I{E{;4gDGY z4*eBPq*X0bkK=-tMNdZ$LVKeLXck%toq|?D=b#6p52Mx4r_t)@Rx}Cy7CizjPutAX zq|p=6W6)F4!ZnNPc(v_gN{MRq8aEF zXeN3anu9)!=Aloc`RF#3=VhbcpySabE>x4y6VVIN*62m3yy56#RNgpr2`caSnTFni z&OjHTm!q$sv(e4y9CR0Y6K|Gcy&i3a-h_5V=b`E7t>}1kK6)d12YNrc09}dR zi@u89k8VOAK)o8=)j^cA!Px&iHszK*7%Z=vJRchMQ>2k1QXLv#`P5xNT9hHgMVMYp0m z(Y@#wXr;rbU+6LD9<&kq9oioK9u1*CqUWPLH5{Fa{)S$MmOa6X-iscDK7m$5UqUOR z8__E0FKAWtV7f5X(8g#D^i1?{bO3q;nui{ZUVBML7SuUZPZriDzr8F5!x308a)lIPDiOdS{vo5 z=4fZMBRUxEgchPa;~brac0=z$d!oxxo_LPFhxSF~J9Yig#G|;rp+}>G(9_YOXm4~F znuVT)UWlHJ-iD4uA4YjbI=U83LElDsQaZXF%|Q2}=b=X)&DYvY;+vD7@dedg-${@qZgvP(I{Hx80s5Z7rhj1flfn*pfk`kbQU@Ry%L>?UX9*@ z@-%kzLG%W64LT3qfbwj1bPqZoEqg5Y>d|`WooGw+E_5i$^V-pLbRjwsU4+g;m!P+z zJi8rTj4nlALzknQ(Z|p-bZl3k)zK%>=IAQ46Uy`5(Ny#qbR4=4y$pR0y$@ZFu0UT# zUq)X;H=%E!U!iZJRgdHPh8~Z;i*`gmKnJ25(R_3hIu+fFEL9aolp$pI% zD0RS_g;JKi+2{^*4ocbZc#=QLIrgqa8=}{v?a`Z1nd_d1vTYvE`A22;b3S?p%3t(h z^iK2*^ltQH^gi@^^Z~TuNnHQXqfydEPeGTVXQ0f6MhBoP&7DP-dW_`_O~XDh;S_Xk)YzD&NXs9w|B+Js8bJ4?(X+`SwEeE;I>UiXMi(jUI_^ zM~^{&M2|x&H>7@{$Dnmkd8^0?sJy3zZ#P8c%{L8Ed8ZHGafnVunG1?8K%1k>QNHmI zeE~fceGhGm{)Dze6Hnp#hn|A+Er_VRm$M@}677P@TWR@DM05(;1HA+7jV?v|q3h6r z=-cQZbT2v-t^Dd<&b8hSg*H!7mfpy#1)p;_q1 zXf}FKW3G4TVQ3!O1}#K;q7%?_&1f#|jPKAS z^a`{ddL`Noy&4^X&PC5d`G!VxGCB{PjZ(Iwi_!V$Q|N8zX7o;UH+nZ(rYYAuv@W_3 zZG|pEyQ53c;pju?1e9-fL}#GO(EHKH(3R*4^i}jJ^doc)`ZfAAdT2Aob7(#Ed9)?^ z0y-3Z2~9^|MaQGBp*Nv#pbODA(U(xZDH7d?zKiZdndOUCX-<7Z8>5@hGf?VmbTqmZ z%|)4`j9!g?ir#^4N7tgCp>LyKqMx8&p%q$i2MIk2{T6MA?nT?9KcRimpV4geS2T*! zCPc46naz$aK$-K7E<-D#@1T{@9q1wGPiS?tN=xb&dK`KL+88|&9e^H#jz+mx5WN`X zena$Xv=+J)rR|BXMeCuTpeLbw(FSORR(jVYS|8=!O7v8;33@i#96b-E&5F)OTch*Q zw&+7>JMy}M)T1;bR2pq zIuV_V@*SJ#a`Zyxn@KUIgRTTdK~&J+5vqY?T@~Io{zqSUW~qs-i5w~ zK8n79K99bQzK_0#?nK{56HnLYq@u^7n^`^u{Rr)cZbL_-pQ3r_PV`dr3v@2}CAu8_ z8hsAs`LgJC^jq{tlqcDumD^E&(3snSLwEvwP9OD9`^zBPh=hMkk>>hZvoW zRz>HdhoTRnHP8*{;pkTMD0B~cG@8_&{vUcGS_^HB)<%b;TvMYN=t<~Av_5(>+7Mlg zHb$R9o1mM~=IAc81zPP4eVQ*?2W`u8OSB!@1#OSYJpP%e%(=@vbQN~*E&2=SSacw%5l&&){O=l{CyAQ=0#F6Gm4JiU`c7mCGfeBU>ovN!W^aK zjIeF9LS+T zP$YX?kv+^ACZTLx@pa|r=4BKVZI={-objP>R&qwfijD5JnO$~y5z8#b!1hP7DG#}s z;q0R9v=q2QkepFabXmeqr7IPT15zDWn^cCi^^p#qIvm;9!eF`H{>>O0W+_W=d9xq-hzM>{-ha_DE`a@nTk#jbBM)%b;_% z?Ba5w^yKA6vV)Cs_S_uKAZ>`h}9wpLiWhqwj28W1>rGX2j z6=tVMW8$(+jTD44O6F_LL{SB85z22-kRnloy7uc5%1_CQu=PciP7Cp%uH8HK31wP4 zY6~<(k?eeFz0NO;>#Voi#tPWo6{2XnU=e{(bv|@(YuT zc32FtRZo_S)q(z92Z!=m2i06!uMF81*$uI4+nkn@N7EOWQgX6LmY*L<4dv2q6%+t| za}^{>o+xdMYi@MA`VI5j_>^$2w7im5Y~lxl4r%E=ARNQsc|T)2SapR5NgohwW0mNZAjGtmnaHJpYzZd+nJK}c$D zxX_M%j@D&XR6uCH9O6(~B$ApOP8l0yQ_|yS6I>mnfsNz^2d%i(W#V7xENxr{oNlg+ zocTC=T%D1v^s|Xf$PLr*WJ{6AjEmyh!CB`bkR8zmAto#+G*ZmRSuKh2CUc}RtbH^q z^^>BPCasWP7>n$YtmK^hph($X`Ijf^Rajdn68nyDK~7diN+=CaaN6=B=`@3!OMg@I z@`FQF(&O(SmzJ!If{bwysYnIkydW#72Xd9r&P$M1o2Q}+B->&aE$Mw&F$q$Jxd?Fm z;}rTeT+)W+VkDdA7tWmI^Ee8@Cho`Wa!eUZIkw9S`+5S}@$Cz+tTCu~Oo?Gajj8^_uip8(*p|o7S z3SliljM=4(A?ghDQ7XAB@RfMbZ~q($BOQ6MnUXx4_xEInT3?ryr5*;Nz`VA21+lMk)Uv! z&s{)Si&^|*5?k6+a&jkzGO~)!oEj{7K@N3*?ytWI^gmK5atzNdiNLQpBpY zLPkNM)Vweqa~VUql`xje^tV9{T8{y4wXvOC%tdWR0nMJDR?AY+Ma#Fw_Fdx#VciFH z?c24>S$oXgXM@LqwfaKYA#E{U0X3av{m$f!9F#BDG@sXG=xg_`P zMHjjlqkkE9m+x4Y9Gp-x-Qu_v=ur!7rC*CBn}UoiT5H#LQ&Vuw9iK62l3iSjndR!~ zG7i$x-Q|SGHmAj626gX55l!KomWad^Z!30TkIg5S8dR8<9CHDW^%g(S#Y}tYY?<79;52@6Vr?Zatg*`7^@@_NPv;VQOrAv0gy@?i4SfR*+ig2r4Fv zAc#RhO#3Sd{2oGRd|uIh2eyLoISdMl3R_@L$&4@&R1nsdQZun~8lsQ!-J2gz7p?FjZBfglX zM{?p)qZ2PheOa+`?H`vjmJV4=6RGx`%!%n-Hj2jgW|hIH>y^39@aHL9*WRuIZkkC$ zZL}IB33lHiOFiwS4YxEWE`Kx~8dJxVuOOOMMx559 z7TPqBSglVOSH`%)M^>_GNz>GYoiE>H>(tt;_2)aKboI21xwdIPNrN4ZbxU-N-Fl|6 zS7_Z>`k*?{4pQp%-g=Ep;>aA9J7nsT88PXwx-C+x6*n6QNw%pOasko)hECSf({n4( zxvS)y!t7M({aL?2W2FBSSHoyP((YgFi#35( z%cP+T=5uw8Srf;)Yr9U)%6xHF#0_;Mk>AH9lxa72+|61vzgCozDI9uYHi$2>O5tVp z%o?y@lP!}7-Dl}s@5f!NwUXYo?19cq#Pk(nJ1Jonf;DuunfRj1ZOi7(W154GL)^p> zvq_O~mY&QQtKU1aidIy%V^e4+skkd>@~yKP%JIiJ5*4^y>l15?xstb#J&5(icF)`OdDHz8ap+mhBps(J#Jv38To?+IZ-ZIFn}l; zY{Vv&z7?bY`0INqN#ZliOHbxxhnp8>l=PIa#7-o}=B?u*Cg${dQ;H)p&cERo>&vE@ z%*`23Cov~2L{Bt+Z7~L0bz>rUXb+p}&m#5Rdr37HIy^x9a|sB$J`>>q4GF#fP36VnDrqf`9e zqvUE<7fc%I(Q}tEy-+HHOee+VQOuvggj=BveuCVJ`CB$`Dp~9||7J~_#`-A8!5NLI z34UWwcSTxqCe7nQf|^_EAq|3Ul2@kwEpwE3xYM7`QO*r9?_gyu*vXi5;ar)XwUT&%bj2fss|9y#WnIaUG2wCC zhz=5!Hk_2548|pTCoWB94c!cqy5sI56xoUoWYn$$$x=&6(F~sE?rLkCJ=j=nSN)P& z%vN+aQC1i;E|lxB3>92zy*36n28*oHHIkzdUACUW=u2ZNdBIq^;TcREG zeCYxj1@^9kTW~lSeiD9v3q9%V>6I91Yu^Vt5W0TlOp{Pex z(ic+$)mbzs2%e*}41*&dmzSIA97j{?Upq9PJbE_rFoo3>Go>eoitR`2gkjO%*%pOz z3-i(=!DNVSLz+I3RH8Z7%=Og9&K#IExP@sMlpNJ+DrQzV**cf&-)*$y;lc_2?a7!K z$Buow1mjA-`w_GoHVvpdQX&lp!upE-F)EQjo1h@J=p+OWR?u}#QFurN-mN9)&~jY_Kn{U6K8BsM&<{|CRmqSh4o$-S?ax4JJZD4z^P=# z!j+qmolP|^dR#@0CRytRky#j?f8;F;MaL+cCko_|Cr$&;>sa@Wi2Ys0aqXuS6i-p( z=H^#|UC}$Jv27XYY41yGrtnyEU~_9BdO-dLx9HNX=+17?Xvx^1+lV3hOphh710!qJ z<=7FSH-;x)z26R#|EI0FOQh=DHS#(G?*zU}k-(F)e8V$Q=n&{ArSgzGG0T^g+~;sd z2J!|D`AAxM&UO-i-QwPm5yZ&aFAWxWFr8;?#>=}gLc?{Fc}9yKF;Bd5e7FymS>lx$ zga@Cfy)xqp+sey_)Qgkg18Px zqJlR9i%@0nT%QuXJDu$wXOriPE!`St8=syzI8rcJccUwh#{h%5KOJe&rH?mw*sNA0 z^v}dQ)7I!I@lVCt-`-K0wx*!`r5g*%E-hmx?EjRt(xn><4;s~c%{gmFJyhnLwQ|a> z$W(&5YB4$#>ZEi8bhH+u+R!mda$-8Dm+uF7$EvLxB(GLa@cKeE)g}kNt=dwcU;z6ucMpNpR_rl?ga$ItwAkE|M_6}%gLs_fn3Q=+%c*|s~|H_o=# z*~+oyl1pW;f=`KF4QD&T+3GsmNzT^7+1fZ;XJ_l~Y=fO`xU;1=Te`DNcDAUq(HQj& zkBxNn%So#>7GyVOk{5VXsmJZby} zD@o&5SDTsIP(7ul&;a#H<9CAEr19&kw!YAbYAdZ_l4daW6W=g}W1Vn(!!$C^AKx%7 z#NRcpVUl%9MNH;z{|yrZv7p;*PnX5N=jy-PEXBMBORm$wN48ZO5?NUv-`JLlF5BM@ zm4>7}Dh&zW#npzS11iU*6B%qHJ4GFx?LJIvWmaki$;COwJpxJW0RAsVEImO-yn*g@Q1=FyN+JXYgMaacWy zcZ^{}OYaiO50}Ju3FTEl33{!Q9jqs@{->x%XNLb;mrzIf+D>SfkYPrNi(aq|C?{Jk za(}H$*prhkdG$dLL;L%M;2bRkQq+X3ODJSrLbFMi&}`BrG}{_yChv2i{bMS}y<)i$Q z5cW?(s(%tv+({6!lOUAnNf*y-(t??7jk7)LY<8XN8hooHf3WU}RH#3CsW@Qsf4-hB zY5ud7r1?KtPgiZIL9r8;iY55Sg&_75->kQab;9w@db2oxe6xN9{`eCw>y&1(HGc;@ z@mcg8LVV*&`U>{=Zv2V=b4`0p)7^u02OrrUX}S~8cD^x(6EEAykEdzVosY`CjzjrI zws5ZI6Hc?x7NG<`f1$iRNv7h*YJU-S5#~0-MIDdRWmJWS~xE4&-DTQPLe+Mkc zxyklL&A(TC<=XOR225_iGn(xSKC;bH*k!;x#5Z0{A(s8P6qSC;G*tR2m!UG?nU2bU zX9gk$6wCnOhk_1nxQd6x2wV`H8QkAYyuT-Vx`>i5<@y34Qt4QxyCmdfz zy2ttBtH_P`yTnxyS*H{&=@K8fis< zzk*7K91hN@l!2-d898z?q3|~zekafeb|V~48$f>ipFDFG^79u z*+^f=M*3!3=z9~rH7?z=&Sn?s_>sPx+&|iW9k55ZPEVKg2%k}sHtBRdUA3Wh#ZFu* zmf$0;Q|u?c_xC>=>C1`#ACB~Qa^j^e`2v-;13pDHW}%gjY3m$r0+Kf@gw~|QIh$Nc%_bv#ODC67v&l%`Y;q|zn~e0$CYMsP$w=R9R3N_->BjJW^@$zn z7uBfvRK-X7e!5~KeX;$~7QFNdcEGB%U5ma{C3&@|jr2QdC8&+9vyxP$E$Wr3)MdX_ zq%YpsPkdYdKO5JH2k|X_~*v60a|4h+6U?JVZ&f0)zmy)#iU0osVw%-CN#WnU5Um*W(=VJz$$4@=U zI^`tG#e2U~Pf{TD&59}edE)EOO+5t#um|f5KC&G$)s%n+w-=75V9B=CL8SoJMWxem zBHF@VmhF~hDR^ISw5{L?S-}&sf@d}Dht@FEi3J3V1V* zy(sg)SBTiAJ^cM%Ici4vkaE-#m2%Vym2z|{D&EW!b@PB!Vz0{c;E5g4wm(ziwDMh#wDn+<6D%avJsLbVbMP)9h2P$(pvYhNM zOOY$&i!0< zZl+$T&i!3=ZmhPx*aoOgMxhPWCKYO++VY_KYMTfRQk(QRPEgw%Xt3Jk!QVP+lcz$4 zsBIZ^yxN|GhN|sF=vcMA4h>V=N6=AflPSpIYWp5KTy0V?<(JQj9)F6R+L1>-V?Xh| zD|zB8_7i_&Pl|Z#C;rBsJU$wK?_1U>)%H+yzr8DMZX(%yGi>ZX+~7z9G}_;X;NjnK zam%ygmhX&PemrjZ)wpHpV96)Q|0i24K6QPgZxoSZBt5@saIkWICqtXNL8vr$gHdVj zhM>~i4Mk-HJ`6n{9ga>%N1(T&XQ4~cv(feFIjD@Z&qZaXWF#u*b2KWWXjztXB+JrV z)}TCDb17uarI3x>%_jMoO-Al!+vRLBayOfd+%27q+|4HIG@Fdv%_bvvvo&z}coa+bn0B<7^9@?LKFtIoIie?pA2~h9?ZpDa=cW z@LXefqThP=%ZF&rQFHG>Au)U6@v=xV6OC zimf8XUOazu#Aj~1R(#L6pCJ1iWBezsNC#};dr(5Hh3~2)E&N&99@d7=R+0`|C-q7T ze~#Lu!`4A<(!!s+-xl+f~i(rHbk^*;}lR%|RP ztym^1tymU163s=W(SSCO=^nSnmSu>Wz_Gv^r1u7 zSARUguNLl_=-j@;t|#$U|B6z~{IA!M^R%2x9Z6S`IudquB-z!GRP{<7NpW=~tTw45 zssFP&vWT_!_^XouF?FOcU%nXr-<^mrZ9d?S)RF0wb*UpWQK=)dP^lxcQK=(Wpi)P! zLZyz#veXe-mO3(u^I~;G$m)ntqCS9UwjF-DL{F|JX8Xa}Y?@ZTL@>s8Vw1Shah!AJH}M#xfkGkxO?)MeTCd8o7jH>1)9 z+=5CQa4UKaIv+hBy$zKS^6jXMkncd{nDdL1(Z~E{IgYX{>&fAqTN@!{ZG=#wP7|7K zi=Qsh`_iY%`fdSB_lvX1_v_3iV{VI;*%q_abhg^g*2vkKIa_;Y>*#EKoo%4Ajd8Y2 zXQR#OGGb_U@FN-h^(9>WhUtT3*rfwxw*0`zj3i&+(_!skc?DMwemNvF5_si{e)1B8 z;u-blCx5y`#_=OzK|1qy)YoeTHt80`t*mn<&m6nRF&wzkzwb9kD`ExQ`?Mk+0%aAe zlJz9k{~R8GuTmxDBh_~|e}(+TSE(T8FnkB9QZcXjiLX*b1|LeOREdN9W%u;rAA9}7 z5{jZkK7z{jJn9$C*&GFX{ezG_d?u9WNx?ST9X=)M56zivrL$2SI`i8SItm$FnB0Y5 zH{tC3d)JNww)}UoD>jP1T}fL0Y(2@fp&TU{#mjG_CV0~F=c-Lc@$=LsE&usyla~Jm zwMomLr?%2sZ@C7NkSSw#`qM=;6Ewsy`&Rq2{tnAJVE&~F-prEYmSSsne;(xtOCZobc2vY;u|*9!zGY-XTX z+~2Eq2dqjDYtffZ)PqV=mGZR`)P@R_q$)k2Ua3lj`>i5UsbW9zRpfv6v=AMf;=kn- z-yl~k+HAi;KG?SebMyy#;YcvqHJ~UL9t5x|AXlO;zWr^Auv7tls#>eS`>0fb576%D zhp0R)B+GsLWhwIaaqO+g3t5pDvPmwpee9>Rr-jTW!xBp;lU!z#VTsvf2x2yQTF7j{ zz{CGSsQ-P@qLQn>s;4*RixpsbSUkr1uU;rhA9@_H%)g*zS<3u6B`NdcT$vy5%KS6x zl`=m;ZF2cotu{Hk6V)b{kCkeZ%f}?O$-vpO8wf6$|YtGDwmjVQ0ef0i^?(Fi_Y?w<+#YQ)Vt-JL#uZ}R_}zY zgKxGiemd*mn@xI-mQFhOW|I!S*`$MSHtFD-O*;5ylMcSwq=RoZ>EN5KhqLu@HtH@6Zu8I zKT**SSRvo!pjv-!gOXIp$y#k{Ll^G10!h`3{lr(GRHGe=Y9cyXwSLgdQ>5EyqAALIT>(xBp53mWoj36srhjQQ6mn&=#mHxAvE%pufUV zw}LKY1zpI#ieR>#emeUqg4up_wrXsF*<_B(Vkwy2_>t7U`m>u>emZ6{j^qxcv;DoE zP3dia>DB`l!0lS>XkztRhwK9HmOan2p6kOt_T~|CRc<@ z)K*&SFV}|HPkiAWAM1qU3-9j@C>|#!{#K!^QwqlK4JiDl5dEKW{d?tB8uXT|Q$9g& zs+TRg<5N508Z1tQ?1{9V~ z1{9V~TXg*%t9Gh7+i7rY_*`H5_A4Q$GVmbSl0@s%-=KK>aed*Qj?^_R8 zfq&HsCl&Z-C8@wuwd&P|E>)5W{DXR>0#8$$RN(K_CKdQHwMhluqc*9))72(jx?O6M zqBuisrB!O_mc)MIEA`*)(mhY+@v{W7PN@i2@^_#vomFc8UDW?>oi4Rgw}`=MB`NlXE4_u?+=}|5#F9ifAbVOKd7v=Yt&oy~}dx?ZN@;`e76R z>n$FtBz66At&z2%nMzXEtEyM(`Yg3cU9X}xsq3@VCUw1%+N7>up*E@O32KwNex=&} z7j^vw)*gQWpM&jp>$?6%JU_0o-?tA}Bp3ff?UKrQu)i2wpbs?NA?bU?r5_!)96y5l zBXzwAbyW7PIVyF%1 z?80s~xv-l}F6?HLX%n-_h23m&VKKi>d9|Pp0!~+#xb;O<_XwH6x!X@BOyn^Mmc}+5=2xy)bQk!L}Wes@&59W_7JN zVAj*RH1*kv5^xZXr?r+yDSAe!HgpWfI>D>&yfX558E+Dk5}x;&Qc$nzVF^Bcd=Q^} zo<4*Xqq4l4zgzfg<5iO);yw~1X?pN?cyNctE5osjjAzf?m*`7OX1E;a(wFtBdX=kJ z#8kc-Hxzj8N9)Ehewr=hD`o$9e|fpTe4@X+jOC#78ue`=vTf3Nm7`N220mRVqq4o- z{j%Bvl^ZxcQEATxp|alIXic;aD(mfwa=G&Qq0+|nN1LMq(6;D6RE~kfOC2~`>%a(~ z>_(8-61@e^cArm)-ZE#C!GooH*4bWgw*NTWN6r>pGKP=AGM|@izR}h)>p4wwr=%-p znfh$Cs1Cra+tU$abowrQ#R_5anu_!sL| z$)mi#mH!_umcL(^ORGuyi~0wO%Klb$;A6VKr~_``Upb+rHM)N#pVE%ZcpUIHyuuZ$=sNXIhVD@BROg)y*?O;muGe&TK=KyrByW+kJp#?w*e4)c z?<(j9jd&KiS-meg?^}@N`~h^MrrQb03yzb#Z=LNYA&o6lHpn>vx=ACdK-a0ahVvc^ zSnByWgK@=kZQj?gt4+XJ#~9tc_NaOh@@O@n4??D@_%9-5=E7eN*~6}m+u zE{A5T_bTVT39_7TgKpJy4?^+=#3b(tXIl+juCdQSmh(%{e2sV=x=g+AIq!$iZR*_y zO;zt_&bte`UA^ByGVD(9_Bn4EhAMZcw*qvbdJlnYy)~da)q4~)Nxik4_hiWSs0nnJ zraJ?YSJ)+aJ)Er{G+tweLYDI=$YN8W1sePR7&{Yq9jZ5ukL}vCuPM7WvSux1-}fzv z*Ii!R+|6CA(Gba2L_0-9C2J)@ge*x#R9YyNED_0{iu}LNb7qcfxpUo5`u^Veoiopz zGiT16IWzCPDX8}~?-;vmJStW5PC=Qx(^0Q$j^|KA)SYA9g($P;w^0i<-CC5qM60N? z)h_!Km7saQM42^zgIc6H4xk3B`>S%N0BYhHs|qUpAylp4_aMrw z`3TD7J&9VXc`u^m3-d*tTudyOWjCREYTjZfllNAX$y*7vO!L-8$@fExI*skJ=BRF( zw;jsl?T#{eA3`nHys;?xR##Cc#V#9x>a2NPl*u~@W%53aTA_JgL3Pl)Z`x(cWSQn& zg)(_JpiJJ6Q7bj?UX(obU(`8hm;H)rt9gG%nY?FFChxzfcQkLF2=jz+QKu-%EGvy_ zrFqMvOx`M}cQr>U~Z3B1)d1E9xw;%icmY(!48BX3eWmt2M_uRDE?fTlZ6xS@Ry$8cp{T zN*-e>>KwPrPNVM8yysD7%@yBazK{;r=?81V5UdOPL)nr@*bqiR*^+431;)S!;Q*Kb2SFDOhSOmjd=DnV zk6{u#4pZR2Fcr!pOT(Z%rZgP(grndfI0lY{W8q{t4oaCOz)kQ;xCc&x=iyYChXOtg zOT+2#emE0$g0o;6d>&4OFTv;G%Wyq>1%3|a!Jps)cm^(lIjGyWUL_7Ay!`F?)@&CT{zHt6^x&GpuUO9|8)IVsfl~_OZs@# zeq^$)^=ij1G(W#=UNXt=-bWASmwC-EWcw>jpW<@1bk!y6PFLqP&9(0;_E)JDWY!SU zUxoLLYu{__J2BUJ$-4FQM}4o{>gX$ej4TvRksq!f5bHH7+2m_d)Vd-`lkRP3i~P#B z{mJ92nx-U3UpMKhjo0#Dl~*f876;@=Z(UBGuA(LX)fKJFuKD>VsTpyuThU@%zoNyt zs#=m0qta4R6Zqw7yGd82NMEnluE6H0E-}F@z0NPC%7)i&e$CGdo5lRHa{A(P zkC&UZkDt#zCdX<{EnMYI;Qx-?vMmBX*1?<@XZcr&fBv6;!&5x@yZQ#~G?vxBYG5UK zI3Mco%8ZeDJpIe!-+xU`=Kl7L{N`Fg?+$Dl`NNXSxy8v>=qb4;s(<=R%PrEaF5P3X zazoVrlkJg#hHR5xHhy5*mCya4tS|)SB(qjeGBOMjWp0v+%HzloQtBzMv(!_0^w(`o zy1ibGJaRjos;<3*$}aHgM{O!@pORfFN$a{O+?rus%ivA^GOFuwc(t#pYsn+!D9OKT z>-vVO*}u^()vPzVOI};c-ik~G|4G91^()(Ob^S(p^&1Ce+v2_Y-DvAql&N1)<|ee% zO(u>ODY(bfH+dY-XIf8O{L?Opf5u4es&feSP3WOYbhAyfVcy&WAAgR;+$rXtF zNoAkrUswL!eO2Z9c_eAND+K=szOT75AesNi$oz6;J>V~evQDWi24qehZ~3ECj>s`k zmOlpN%495**b|{N&X1`m^Hok!rt(DPab|gLUj6A`vy6t=WlD!!-Fo(#)Zv2G+GKfr zz?sw{*YYgW+BlDo&gB$%;`cUupFP_kF{X{qHLZt9$y7df#>a2OoU*O+hq-XqND^Jm z<6E+enVqrpl+U|N8}si~R%*`4n~zQ<>$D!Zy2?C<$$NR-WKYdASJrnlEXjC`WP>zf zUC(usHI`%@a&^f#MHw$%#wq@3Z9-+7;u}d37-f~Dpi~*JV^*e7k~59cInyY2XBs76 zrcsWy%B(EgB?UVtj2B}=&cFt6pBHF@bS4?Et+*s3 zJl1xe(ytY(7s7zU8 zT!apOP&v6|oUDo;v{+!WOU=EK%FIm0Yx_o$NlAmZZG|M0l2!~{+hjjzaD_zsK}!X$ z?Os16xZsL^Q<7!g+c5*-nIsQ&{BaFQrHg~yz7tiQ0xut(=C!rN*X-ynj^_F?+=Fh zL4!}ko&2D3X`b<}zugZSd^l(Eg9fkd+k3r|2KUPENHQsDa1o|TvdoXuupczI2#vj< z8P`Rb8;f_gkypsz_WhY8lR^g9#Ue>2g$&+$*AFUp*)lFdZ$D`8Nw(IF1{!4Dc-(tdu>;3CxXg9fjypdU222uJICB@ONuHc2umX>ib&C7B#Dw*)rw zR6l6&S*?Q~v|QlYs(3-ykc#O3mh67K;5PI_J+F|#yK|K!lR^d`$xll%X+yy^ zJID_zlf)Spp@|Gbd%!V%(BNLCmmjoDV1?B1 zg9aBNw;wckSaIkcucX0!)>=s>B`q1aZL=g9M@z=LGuexmaf;4c%d@c zMOnRgnY7vO>X`CP`7h%QdtcH>R}kD1r%N(vJHa&?>qXp9EU-qK`ay3FOm_2)1^uhG zDP|@`*d@uNq``Z8p(LZE8CThOKVER}+1HO(Jg|^;y?B|Nbqe@Fiv+IiNG-3B!TaeW zNhZ59xCk#vGC4qk$K5G@(BO`xy&p8V3$5%24KC?_HNBDs@6N9!S>_FQxg?X42KPUc zyr3C3j)8u>;FIA4e!RkgyR(!RFO$acXAQ5A!N=21NhXC1J|ixWWOASck2Oa7L4yZh zJ^i4;yR*6%G~=4h@5c*1lN_$@6|!Jp&2ErnQpn(*N}jsc=2IweZSnxN)@*Pg<*8Q* znsFg-_u~a`Ru(^A@GkoHZm*ERy}>(@OpcM@<5!-Ty@B2!><29!SY?fGENBToXz=lL zs+uWj26t@=jDLxZkupvjlPlxee@oUP2S{*zJ?;g|q_cQfl1a6e4XlWJyr3D*6i&-( z%I0tSwKsVFtm;L|9~gy zl1!RR@a?TpHx{(JA2j%!R?QC@ycZ(;put5rc$-(!;Cfpv$)u#gL1#!ZX-L6qd&CbK z+$A>ig9f*dGJeqDj^b<;ucX1d{xeA?B@GU`NRmlOa|gCJ*AE(8(%yd1;GI>=4;tLT z=JkVC4BWO~Dtjdj?)=wFvdlY&=Oh`2Ovb%Tsvj@-La&1#FSw~y@#1B&11?qa3K_gR zzma58NZTb}w`*G=$)sNhZbOs(pusIN+6$U-l{LAsc%}V#!L95J?Li9}T(h4_GAU&6 z+5UA&CI?FJu|CER8eA8>{Gh={Kn*`=@b1j*2Mr#Y9jf4!H28XOtt69@25;LeNhWP5 zxN*e$L4()U(hnNEwz7WE;Jt9ZyjRlT3fV2mq@=+e%v+L-l4jg+pY-BooMM01 z_d;z5?lekz@iMv8I9<*wUvS-jBFSV=25;MZNhSwMaHsL8A2g>EG}qn34;p+%x!VsK zd_3j!g9Z;Ke&m`G9G`K>_`9XuL_is*cH_&?bNHQsDaD^PJg0N3A0>F3&vB$l(LT&}-A=f`_~%(}A{Emf>Ik2&d_4GFS%n-J!R49e zMaty(86e3ruf+Skpc&43$#zP?rj5y&anJg9DKA*?*{XlL)GHjWmHP8)I|RL~^TjZIl^a zl-`olnS%oyQ;FC~!FH$BWuzxs5>CU&szH+a6wf3bX zlbxTzzNuh#zIl53+HIcYMai&>DaJU_R9?WNtQ}=7(k}#e{I~f<3O;HauSl5;TlUj0 zXwcx1>`F-{{X=ljDUvMn{vpN>3Ip2meSXm3Z7c2v4Zdpq16xa)BQWT8NhT!?-V5_2 z86~~WaptwD$NYG~=gJ5Dc){oKnwiEc;K$?02&mK}44|}p#al|0zi(Er%TuumcAAL4)_x z1Afo~fom&uV?qC9H)=_PgYJ}MQc}($0Yz9K$)u#gee`HQXz&pr?|spr!HuK3A2hft z&*cY&0Y&(UZMuPd`hg^qlG308);3d;1@;C*ZY*9~KVERpSka4@$#DGwZAS|kTo?N! znG`a(sV$Xc(j^49p^1Lb;KQK5A2hh64g8?NJD{*1G`OV4X|OlYaJNV@DJg3W*z0p7 z8AnUT-PI^R9!F`win{ypf(u#AikGQd*2RV+kkikJ$OET#axY`OR!VF0!Z76tn z`iLKtZ46jjGe2nX?kwX64c<>@=~%R+42c4QekRGJq`_-jB*`dg#(RB&ACJuoh}X}H zm%*Sj{a`tt2D^6Pd9xoWc<21ZX;4cRd^+4E$z&hWy98|aLP>W0&MsM_*lEmbH~0}h zM6SRP&Abqq+~O%C$*z9@w$p;x^ZK=0@*|!$3aT)mu<~j-36aq?QIf>T_-aOe5K^NA zx2bMkluW)6UsaM3FN4dgRPO>U;2Pr?`$mg%{mGEj3Z^(2U4$-{?CkmsHlV=xTe6z< zXIvwLWEIlLf_s1_UZhNh;ibLuWOB@&p}A>L8ce{>{#24lzaMixRuF^aJ5o7+5&3pQ9mfVDj=D>x>th+*Tvm_(BQS@ z^n(WXPCs%6xPg+ckz~>X1YZ$8Bgv$CgNF`-{h+}IN^?JG@Ls>g4;s8r|0m}p*{8wP zE3b{zk_L~5-;iXKH0Zgz@m|CXMs}%55+~yu8!fyLne<_|dQmdDHa(Zclq-XCwtvbu z5B*--@2-~Y)LsT^}R znc6slo7zfACWk@ru{TAMQPS)5dvQTga?T~AbG(y=$e@#goo@Q<2 zjZG8sth#h5)UVH!U*)}Tas-&4Mvw!rIlWheQw{ZF9Z~gB-*Gl6>U2i^pv!uQtIGzX zzSU((s9$y2RMgkHY?fU%7u7=7{0?fbx@)bw4b@WJeW=~){$Smss8;HpLw%<1CF|y8 zm$p{76l$ls^72`;E%JNWZPaaq+OBRh>vlr5RkttdV|ByUl^;52r|x5@P3lgx?o3pB zb>&A5HmLiib>BmEP*>hdwoYC70RyvDU!yvz`zvaVx+kprH>#7mIXReDsapVL^4^T< ztnMACchr@iC@}7Qs4nWZLoHXgn{`8|uIeVEmZ&=tW%i{!F#nb=lUKu-_02KS!6S@$#4L+bv7dRpD1);){r zqi!zFqEpo^h%(z;2KBJI)lrkwt!G_%J%3+yd!n9Dx1V(%LG@F2H0p76Cs=m|Dx~fL zl&kLB)|Iz6_E&c&YP7mvT324DAF1x2sFCXaW8DZwMp5dPLJd>5Jj#@)8Y)`d2T-Z% zwzjUkCO<~qfv6$sCR%qCDy;5Ps04MNv+irC0qVYo8mz9opxDISff}gp_ozYY{$kxz zvP|7IbX) zJgT?4uUdC8Do$OQ0qCjjR_n^k=i}A=71d4M6W0A3m7s1ut{*z9TNGussvIg&-P))Q z>Nc`&D^!xY524zs8)e-D)DU&$W$~@lon+l-QOWAQfoiU*7rMVB>y6ufB63$>SpDvY22Go zqtq>rs-o^4*1ZSysJg9D71ix*-G@=UMUgcpqROc|%({=G*i)?_N2Npk(WdBRzjII*Fa5DS7rmVs@u-Gy-<_Yl_|wbwWYkt)*XYIqV5dT z1$AGv?(3+j>aIqaGsH&geu|o=?m^Vwn)f&BoXf<>>NjfUADdZ;<-wngnwx2tvgp;8j!P2K!VJ$#^UF_bA$dDMJ$>!99O_g?F^MlDdc59(cYqph2WdR^Ud zs1@o?w(fH%>0Kk7H&IK~U18nzs7302fm*EYH`e_H^@h6VP-ZN3$+~%&3V2i9TTy1T zSp{WER7;kr+XD55uDOGCd!rVs8;5#b-Bjz!FJHW^uH1KhP2HERy9l*JUAcMts=Ax3 z`x$Dfx^f42wz@~Hdlt1!UAc|?qPp@!!)BYypq8sE_oAOux1M#Ip;o9XH?(J}+t0d> zpjN6Ycg3fxJHfg$Q17U#x7O8t+q$b!@2V^J=O?TCrF9RY-c$DkYNEPlt(%3pkyYvz zMahd9BAhZPQ=;2Z@2lGgHCEkb*6oB^t!@-*jJl6lcPL8E#u3gW)F^dlSa%NU19g|9 zhO4{Ux?50d)%_ZkrtU%O9!ITH_dis!x)DYEZ7z&juWn^jqPo?r+W_^Uy7DkdoVwku z+aI+-U3nrUR^3t7orv0~t~}OaM$)fYcPUE791)H@8#AD`s2$ebhuWmBJYW;8?kVeD zKy6l6p3>>BZV8mx3l&jY)UAt>w_-#%jjh`j^|88rQ4gsbw(bzrR&^gk^-_1Db!Vcs zsVmPbbyxRI>%NEDuC6@v)J5GdtouD`hq`~DI;wlly4kpG|B1Tt_*FY~Z$+6B-HF<% zZbMXSb(>nZBkEIiBT+5XjkRtXYL~k5yU9(}oo?OPsL#}0hPq$f_pQ4b^|`uVq3%`p zfOU_dzEJlfs)4#WxF>A3xe#i%x|LA!(vb+Ks&(t5_NdzqRa@O|)(xS)R5u<~L)|p% zjz#TNR~{6srtWO(zJc1O?poBH>Tb5~=cupLJ%qYV-DB4MAL?s$bMsI}C3Op-Oo?tm z$=Eo;sevl5Zhh-EN9|X)7wT4ZL)IOP`c~aBsGHS&!n)6(zEk&gR7rK0Sa%KTdv!lW z6;pSwb$>+tpzaw|VRiqtZcgTz52#xjCGT{Ja4MioiS9-nRJRE#pSo?V+XE$601?h0 zRBm;XtotbHCv_*IBGi4xy04%Psk;J|P2Dxt{TTJLy5FE2b$_((@2FqYy@a}0OST|q zDSw-bh*Gx->K}FQwr)ezVRbv8&Z*nOx{;{g)J;YGrS7BFeG+v<-Ir0P)tztMWvHX- zZbF?@_Y>=Wg*vA0FR0_{{%+m#vP|8)+z*mh=0rF}P-ZWbMalJ5gi}kFsoT)HEm0@b z?TtF5ZlrbNQ76@PQ3ut1(z>%yf2g|%Wv(xmS$8e!l)5`m-)r98*8Kr>THRBq{py~# zZg!rK_*2~ysISy5i!vp;3w1`_#;7mVZE4-EsK3+=qrOl#-nt`DXVsmG+NJI+>&`{} zPu+J=pQyXmy4z6a)cqE{9VPE8;y6c{Yhw8p z$%neE6UyZ1gOaP^2uHq(vR2)p)*XlXS6%r&%W8G!SoclT1$E_1G4H9n#kyahE~+cv ztXZkf+m!V`HAi~*%dQ;s`tos!zo4Q9)3)MYs-HWK~>K5dCSM${^ zi83Xsgvz0AJ(M}e-*4S^s0elYq2_Ad0oF}Mdg|}2`x`2cy8oc$byX2gR=yu+w)rMhUUkc$%<)#qx;0Sw)NO`(Uh}rIZZA}R zbss^^Qa9PUV^A{765&im%}{q1%Cv|jsHb$Xt>BHQ$9QtZrk}ICWcEw=1fMx?$8~>c(4l1gfaIQ&EqqJIlIr zQN`4K2Q@<7wbtE+Dz5IgsG;f}vhGP#33aoSXGTul+$gin#ZV>Hy&aXLZVl_+iz=mV zCse$;y{sFJk_TfVoS~>k)E#5p$*7yvor4;v?(5cFfhwc!7F3M7pIY}D)Gg{BM@6c8 z#=4hKx2jvX0<+!fmPVNpRY8?iw*jh;x=pOx0aZ@j{-_7l9c0~9l+4scI1^Dl)P35z zFQY1`yA;(`-Bs4zgsQ0SK2#@lf3WURR3&vUpyUN?5l;4s{x%mxRaUnm%FO57W!-wH zD(bdHwb8s?t=kWEo4P|#E!7=i-3h4M)qMfgOx?NGeH$h7kr9sk-oOLuZnN%}s5{j? zjJi+Vlh*wQb(gyND>+U>b&H|QUMP>Ms%{;WnUlHKx~);w)a`>Zb29R-0+Tlpb+@{s zQD#nNf^}!0s;j#IRZru-ZQa$V8tU#u)lv6L>mEeaRQFF&>i%Qhh|0_et6K_nx4Pv~ zW~-{9YODJI>MnI#Temx^j=BR;x2v0I-BBo+?Tv7rLdkpen76g=YpA;FE=N^RceQo5 zpz5jnHL9$-2d#S?RbSozP-WDOsN!#PVN?TkE2GTZNHyy=Ks8jiJ*t%E?QY%vs7C6h zpo*(I%DNL#_p196s))L;S$8SwK6O7r6;yYJb@!nft9t}xW=>97_X6sEbqm}^&#!q) zpv+#Vhzy3#ex5E=HMom3OSW z0o7dHJ*e!O_gm{8Mzv7)Z&Vg_v)t})bAD7yb<3gtt0~)eyLIcJTB+L#W#%_JS+@^L z?hZsav8aDF?-1*bMzv9Q3d+o2%(U*SsJ7~^M4i{XA6R!Qs-3#~QD@ct$+{;{?bUVe zU_`5KE|l2|MNu8py$$t;y49`Q2-Q*Dj;P<&?P=X8R3~-QP)F4rZQV&Ixd#&A%tjqn zcY$@6qq?ZO8TGTeJFWXQs;j!kP(P~sr*;2BbyK&{o&FVlDU>NuWmI={>!W_qyboBn zJ*tPg523zQH_EyRsGjORiZWN_J~xmR`+ISJ}Q zTDLwbO5Jv-P3m^DEpp>sQTIiZxhkJ$U4Ew539HKw?Kbz~v zhe}YlEXrK}-e%p}s6=&JqRe$@N9#U>N>Vo-^_Ip>v+h{b5Ow9J*%zrh+q&|j>dES^ zMJ-TwGs=wRze3H^W#6Gp?f!;J(H#GvUQst|b>F=Sm8x!e)XVD151yO#J%D;am$g8d z^>sm|X^t4wv+BlKcQ|UOx>Hcks5{fTucC&jyAt)Zx*u3~D{8p9`%zQX{Rw5Zx2jnEurQS!dq2Rn`Ygys7KYEg);MI zv#t9EYP7m*QSvL_5zc1oevTTW?jcF1?lF`p$3@ggU6z&qn{wQQdQ5YaM-5Z=4(r~7 za@B2(N>#Tr|2ON4Mh($rgZRH$pQIV9ImV$9)SYbI=TPI+eG@fU-4*=btZxfS*2IiD z|2ON~hk9Id96^QEJ!RbssPXE`SR+c^!YH%8+fe+vC+n+O_`NYoRWV;ZWby3e9a4w+f#rps2KOpf)aiJC)ZiKMPo-fLGxBYnKjo!O;%Ut%iF5k0cEyDW*b`RvM|cz7=oIjIpnTSb9JYp zOpf`eCb~@S>X{sJUvaAD_ypBhT^Z#YSLRu!se2mLNL{%*Zd|#0|CG8VQT5f8XCsU& zPiH)>?)@n9lz=?7VqAG{X1clqQ06%Rd7j9)avx@fy3REN=o%80opqkdb5A~e7^5Xic zn)gBL#-N^8S6+NCM^%I~(z;KeUQqW%)GyRwgfq{&OHePWyAf4I^KQ59UertK9zs=A z_n3A6hk99E`5l0A>J~zo65WEDt*-o-z%A<5w{COP9ChUv2}-LQvhHBiE9%P68klRp zC#?Gn>Q!~+w-HKc-X+#ugPN=EHdIk{Kez68sCnw1L={r^f7Z=fk2}2T7DIiib#)8M zl;{rBe0A?dNskucG`DVN)B<&*QF+xJY~5j~*VUbj%BAiz)_n!FP~8=%9O|yI?#HM_ z>VAVV_osif?(e8K)V+i<*KaxN``cUu^`^S=Lmtu}M>uy|w;}2+b>-JUF41pCI6bTz ziCV0#{G`YQbsx3vlc=}VmER@#TiyBAU4~ksuKc)(xwrj^b-zL_Rabr?<$s#@v~@3{ zmZ>X0vvNk=k|?tmDxsFEE5FrpO5OXd+YYrtUHQS66Y37IZZc}6x-Lr2SP{;X)}4iV zN8LrJ-_%`Z-LN|DYS+^HzwYra>zEL;Xx?@ml)SZFar|yf^eI50Ix~oxp)ZJ*^Pf=^tJ%}o-t^GIa zo(#A>lJP)*8K*xN!{b9t-9tj*1d$wx|{AcC~Il)Tipkp_ZzfYF!t# zOWm2M#p=Fn-9@O+)cpV@V@2+8pv>8RKk9W|b^v8+_ZaGP&2bU+nz}g}`)(oB7wT3* zy{c|i>()o@R<|8W#;6faH|vH_d(@3by{K*)%52MI)N{J*X_VQPmr-A84*8M2nd+{x z?k3b;b>)}(rmOpdb&sODU^v;8TFOssE?Yc?gQ3skNR5O z5Nf=-15svuBT+I=k8mDCne|OUeWN*EL5)#&p>YlRh1=R2A7HGyyo4O@XUO7-F z)UAuUSKY?eZHqdoZeLUbb;H&jg8D<<@u<4$PPOg}s8i}LMww@I-?8on)M<71pyc{F z!ui&^hf#m3`!}kFx>=h0+ngVDM%{9#YURKs7vY|LzUFHe_HoHl#@s5uTV?oEz~WAG9{{v%A#(4RAF@=ux@))R&_(D0_qO5 zZVD=!x=*0C>sa|I>%N4_uI>_)%*#YL?^*XFR1S6bqRjUkzPIiXRD`6>${f?n zQ2*$%cTuMPHlpN-{|M(x)H!v(v+i%GeCqy#`b*uct^K?=q4KL+9(7vXJ5VOty{MDA ztO?3Q>wvmRbM!|YS9cJ~WJo8Y~A-!1=amTmZ`hPx(85& z)IE(lr0(C=&C!PTqHamlL3PWaOx&s{`Tj$Mb3f{Pbz51t8>*&-QCvx0aZfX6R2J4p0#e4wj49+W~V`% z<==Sz`F~|`Wx4#5zmIOxgGoQ<;&Y*^{MQR}#CWN5;}^Kf{{ugZBRS1_@?Yh*DBCM;7oWYWTx2VuyCG-G4Lfg3eJY3;T$*) zGJoy93g^QGkU4JmP51`f3Yjl=cf!T+3%Cp(fy`jKC*Vpb+s$1DHxJvo8Ww=ulW>c| z^{^`B?uT0wZiICq^PaAJ?RhKg2DiZnA$MooB)AL8x2L(6{7Tycb z!6xuLYzdi#b^Af?ox0KR5*!4x)pFbkFapknx!~(CH+&0n_t@PA3&2kyccR_huqZqU zxvTA-fhFL1crz@Ojq@R_3CqE{usm!8xpVJ62$}bF`$F#XyHSwYU-vP{GXw5;SRGD+ zwc$c|4_plE!sU>sCEQ)`UbqMHY=!$ZYy$s+Jg4FQ4V%ONU~70Y4Y4hhR?W<^TN(0{ ziQ5!*fvq6Vq`2*2PZ$fir{E^Q-Y^CBh0|dOJ`4N9mtYKhA2K`bu7fr;=flz*>YV#vZhCjh!@K-1=#rX}s z2#>&5;O|i0sdEx;gnz(~;Td=co`t``|H0qkKQK34v@!3s?@ybHEkg zDOeH8v##8=cJp)cxdRr4JhkqYfOo?>kbCWJ16UI_hWEfeupaCW>%%bQ34M1QYz!wt zp67R`!e&tBNV(VH%B*BdDD!}Aq0CCOhjPu&9S~Qpo*B)$G9K>+WdzJO9b6f6J_v7x zd~3q32>Za>VFk+3a{f}P+17zYQzA&_r~xI ze-GXYSHX(#1NZ=32V21Pur2%u4uqRw9NYqj!0qrU_z9c|cfuFo=kPta8-4(}pWw>d zLB4|DL!L`>e}enrVfX{g#)%il%3p@dP!jrHM{1Xm` zf5Fl4EF1^_hOfeZ;R49h%I=%csl)jna@Wb-3A4d3U`}`h=7uL=9{4BZo3(BM#%~2- zQONgj-BPd^tPA;0uiFT6kIa1lmVtfYtuP9fg##hqId;dx%5W0o8_Moe@J_fGazD*o z4y(cUU`@CO)`nlhI`DhQcd*^RVMF*I%_aueWUm;#r<>2L*n7OsRZ!By~mxEij5yf4K42(E_*;0E|J+z5}rEzn`$yA|eu z+h88J6W#`Q!K&~xSQGAn9pPTs4eo;v!u>D}a+lN{3BQMr!5`slcnHpe+&gs_!r$O# zcoc4j$KWn_5*~x6;2-cb{0p9ig}ClG2aCh=@Md@c)`$PW``{(m6lS}}aYHZ%jDZm_ z7IJsieFEl#Q(%5L9TtL1U=g?y7KQJ_l5j694fn&F;Q?3{{tL@Przqz)m;+XU72xgg zHprb{w<@d#+ra9uBdh_t!8$Mr)`e-X9vlf9!Dk?MiQVU6V>lZ&h3~@Va1Cq$KZI@I zcd#A&5w?fFLhdcQS&K1#ggIe1m=E@Xcfj88Zuk(a4g0|kus`eyBVjKXhN*BM903Qx zF)$9k3=`m7md-2t=0&tL>R4s*d% zkf#XTvoJp_T#9idECCC`GO#FY0E@%Mumo%dZ-)ILPaL>mcq@DaR)7;>B{&sUhBM$D za4EbCz5}bm)sW{D+dx02ablr;bU+#bm2HS9=-~B62n~pC&D-3 z6u1>mgFE3<@C(Ru8tw@=3;qe8h3DXluxJ^c9f76bYX;X{z8JKPXl2xH(| za4dWqJ^^{=!<_ophw&%lcCEW9254_1T!z_#!L>;x~u?l4O|+84|Qhr;Y|6wC!*fO+5? zm>0eV3&0Jq5ZnR_!yT|VJPb?1;|jD?ywGg5O#qN!Je=W>;pq^IE;j&VH6w(2f$b1Ah-a=!Z%?&+zJ!n zPM8G0fT{2V918!0JOkvOgQH;4@*HQd6dVI@h2vl&I37L#C%_hP5{!aV;6OMP#=+@u z6684|_bE6N&V%xPu5#-q@_W}3|>?@@C2L$Pr|3* zpKvk!3oeIe;d}6JxCj0VzlIm!_mEc@x_`s0@IROhW~;>Y8Y~BM!^$uZyc6C8Tfu^` zJuC#fz+x}~mVha+BpeRQ!0GT-_$(|7UxF3k`>--x2YIr~{RrL(55TJMXIKp$fi+={ z%AC(&9#{t!fc0Tj$Wvf$P1p$5h4;g5unBw+Hidm*OE?m?hL6EEa6IJMF?Sy91Q){2 za53x-H^ZKAJM0B_!9MU9>|O<@uY!DJW% zQ(!C{2A_Z<;1oC#PKRUQ66nH}a4dWuPJnyiM7SUFWSe^cPKE!%r=W8i<4BkT&V&`< zv+y?f9IOgof^Fbz*b&Zw-QYZ!1bI5nO@j;INcaYP9=-)m*L%0HNhAZKA zxC;IXSHoj)4g3SHhxu;jyao%wjj%Y}0&Byqus+-d?}IzxLvR-i!Ovg}+yftld*N8P z4?Y3+!&l&Ua6bGVz5#!PAHzfN6ZkXy9R3D>hdkToo`%QZ|KLej1-l1DC;k@LiZ6u7QQ%SFi~D4i<$! zLY^sfFT&C=>z#}vVNO^UR)Xc>9k2qt8&-ks;O($8yaV=t)nGiV4wGRGI1JW-Ps6%! z7UX$F_eIzUu7LN!Rj@H!3!B1kU~~8bYyl6!Ht-VU*+w_}U7X)wZrB-CfnDKUup6ua zd%+H{H|z=@g1sP5M7pW4KO6xg;TRZ(FT;UwE*u13hjDNdOn}>9BK#Dlz@sn?o`gf; z88{LatjhHoECxrz(r_%S2Oo#`!tt;PHjry&A_EEDx8!DsU;h3$BE%;k&Q{d=GYo zYhWVe2~al`u7e}sM)(}u1Yd@m;as>4u7^9|Cin^526=AO{RMsjkHX#XB-{t{-px1? z7KGoxV(@!d3m$;=;6ZpV{2BI!zrud-FpP%BpbLM86W|Fr8J>oV;2HQf{0pvt=iz7Y zUw9Z^gva53@D$A2ka1LX#*eTt%mGV4o@RCH!+fwayb1Pz1>i%l2pk5B!AD_nI2M+M zuRxxGb?3ud;2W?!{1{e*pFp0Bbw7uTJ6Ch99y7IJME4T=@fp5dMP@b0T2tR|J;g_%rl;>}Iz_ai{ zn7<~+7c30>KzSNH1na;^*Z@XB`F_Iy*aybK6gU_ThjDN;OoH4)c6hqi<=(NA0$+v0 z;5s-Gaxd0-6mk#N84VA>vG8B`ICN@pe8C*>Nq7sK0_(wPkb8~JQ;>U%&NHwdd=_%g z&Uqe=fiFPr%{jB-0{ALi2j{_$;A?OzTnK-LZ$R!jId8%fa0$#)oAVgtUXZgK7KQIZ z?$J1_U|sk=Yy{Ur?wvRvLhf}qJfZBS!H?ib_%VDLZin0(a6W-+;ZC>_eh!(lcXq== za1Uf|-uVhKnLBs(L*~q#AK+b(r=Hy!@JDzL`~`M}haq#z4$nfn55wb-xnJi5 zWX{()2_J`l!nyD-_&PibnR|8qhRlsR|H4n<1-KhJjX2(6R(J+xgUn4jIbpGTIIdu6 zmFylp z!q?zf$TgBP0dfuFOoTh&lkhV*6>@FiJOxj|ryJZ zh1KCXNZ;?AhxGZ*1=th*2kDC)p7(eA!)*7`zrq}F9E^YyVIH^u=7aQIPJXx)7J~FG zP7(M8EDHC*l8|HG;X4EFIe0VV*mlaoQjIu|L5@AA0_2!;_(p;I0K6TxfOo*Quo@f) zt3%qRQv(ixb>Jje7t)5DdXTo`G=j_FeegZl7=8eo!mnX-NF6&Z;7_m(qz;^Rkg_}N zVJ_GiR)$^Sov<5Z8=PK{G)`~W1wI6O!hSFX@{I>~IE;j&VHmyy2f|k&--B=$z&Q93 zOn_TqBHRgChkFF3!4q&O{1c9Z1@7Z~28%-0?UsULVO{t*Yy`){2jG*iFPsdc;1oCz z@=Xi(F*pN`htI%C@Hw~;z5o})7vXX^2kwS*;ZgV+JPGH+GjI_s*qHMfEC%0#r6J$m zaO=V4@LsqAHi7TKe(-%54OhcKa2<5v2KW-BZroSlCb$4nNA5>(JKPF)z@2axJOV$5 zC*T+GPq-K6xu0<&tOWPNJK(qQZg>E;gFnK~@F&;<{tA;J`@o$HkHM$maX1V90aw7& za1~_VxNG76;5YC*`~m(A55bG@5_ImPULN3l2Ft>1uoBD(o4`DD`9K+K5P&7!j5o1>;wk91KUoMEE=$0%yZyI1dhm z>){Bv7mkAa;iK>Xm!nffuxCH(ISHOJDnP-HB;JdIm zTn%eOzH{W(hil<|a07e@egs2s6O4gd;aIpGJ^^>YDR38@4?l-*z%SquxEFo`zk;8` zui;+!9Xt(xfd7LB;J@$?EYgB;BP3`d?(9&6y6SBgm=PM;9YP&tPVHAn($*-3w{FY z!rvg@-*SJ44d7{bAH1m*<3?BnJ^)L?=I|ca5;lab;Qf$qeYp?A4lojSgacq#C=c9r zhZA5AI2rbai{Qg>1Eg(e7awhR5LmcnUrO^S9unQapd%{t07#stihV=RFEI1av2q(Z*a3Wj_pM)FXRQLmY3Lb)dL(TmS&V}oEjR`)hL6K#@MX9Xu7>Zz z_3%Bo0j`1H!?o}yxDNgdH$tZ^#}~{2H^ZE8JG=?XbI|e(H|H=nAI(;-<#Rf#J(bs4 z=czo7Je@3VUZ;kq@;E8OB9lUcViQuGl%#NUT3lpuXh7mXCuvY(!oX0@4 zHXTFG&@j(~4|h_NVDH=E$Qcox93ACtTPP_x932kRGm0rKuS2(84#C7l_y80q*4@WcxYl=T54=!g6^W^ z$mkJ{R8V|ml0(%d#F+gNijPf*j~wnqri@64Hv7)ggV@f*fozZYELEOvFQtUz!qKU= zV&W2GtR4^>#}?G_Ki6sQ(3X;u!U=YxlM-okG@^vCEE>pH1Fonihb7@;sr`7fy;9%- zX$jF%8Yd>48W|gB*JYYWGVL-fo7gSnq|{E0=1EaRbaI%em-l9h)3rs%<{>AJR!(aR zC!|RA3`q+ok8r}t$uv9mgw$}?7Ok4J_nW;QA~fjOlxRybs&2RtD=QS%Z!ys<|rAEm`o#P2gPHgq=aKaNwmsTzHed66g5Ixo^6CFPNx=> z%N$rh%k?0{G{Ej}Ed zNG*BUBU7oTC|Yi6cwjg=RJRT-+j?@$(+t@mtUe|wGELJZCtf~`q;Cl)*Y;b8_BCOi zZTF888g*Z&5 z`N}>q4KNgrk4j9DZh<`#7Z<6=O;WN}(mm3C*rPrWWb0YdG4+dEJ#cI8CpgetC2vyEc+zNPC$OT|$UzPfTF5oI#Os z1H2**OiH6YYqf+1B-O3sq+4)L`VTnaM7A<{grB~S>D;_+zHV&W=lLPLMtk*gU6tt_ zy_B`IBaET?Bk6qU3fUii*GxG$Q^lr+(#3SbLnGtT*n7z-bSOzuztUi7?%Lt=-KXfp zq!A%wr6#gRIT1;x8pEDTOyF#0_J`M%rVL4oCNr?19{|XGkl>96cNd0}`E% zJ?TbAL`Ow)k~60~=|Eyf`lpf<_G9#5(#o;sbZF77$>nn+#fu)S%UFk3lhW#F$L+eO z>z&gd2AmI~Lvb<5lrt)Apwq5(*L3TnV@jc5(sJVB!knY!;7xJbbnM=O4$Ssvl$JJc zx>|EaY}2t7>+!n-J>=!Ymg2C9sT>h{VmId^z6!=^G&ae!!}!FQa404@a+r=kJ#zs0r5P6XPqgWa$Kb~c9vTo1$3)4F@OzgO z>6$Ko;%rBcX%8Qps%xvJw5Vvd^Kx32*$+wV@U-Npt2;Vx>-^Qk$Lg8t%7F>z-z zUe|2b?H%`#39%`Osr1FMm-|K?(0GHda17Oa<*L)SB|WwJ8KOgJ#$%qhfk(=|W5w$Z0kvmO&Ol>3sB(gihG&*P{~C z5@MuBrWes3(BHva@Wh485pFtrzy2-{yh7S{r0;Cd@kz09?5`{O2DAI68Jo+N_z{C6 zb+jFlUMfCp&bMaREvXodr+TLjZ~SdM2B!3#jFikr*-at8^?J*~oN9D*a@BIvgyjq* zo1o)1>6D@v!8?)s-)Uy9>F5#b)T-q-z7`L5x4k&sW;ilF#qS2aF`j83*YAT8`RO-kd!N-r(sbZR$@{wf4pMEW*5rknE%16 zcG;0~CE_xwkpkK3$ zL3(UFXIpd8uEifj>h-f9>xxzyVxQE$d~J4xcX>5t4Cap<(p^M(*K#t>vZrqo zN1C^|9B7doi*lu5J}PiSOrZ=+lcpo5ML+o!Ml9p?G#MDMo-2$xwQ5MFYmJ(`W5#Tg ze~Q%R<1M0dmac-1!B6D3-Yd)PC8xvlF73Sqrq^P~VXhd>uvL4bE0)M5Bqysxt{J@L zTtG9k#Msa;CT-QbxQylu#@RdlIL55q2BX{7%MRN{%*7t9U9SwuY38aVmaIQHF)A%3 zH9@XaSj3#$Knk4{VrXcteA6e0Op>c7bIQ410xzxK^)MYMtBnc|iX6%m7nin)Llb4+ z`KMa{(oU}}1~6CRbtUP$VXse4H`Fj=sw?-w{ zX8pX2>~sqv8Gi_ZuwO=dgmS|D+s?lp2_Bz{q<}y1h6Nu&_obv<&*vl8&Ce4-C+9`68p+lJ~D=__{ zghZMfSC@m#=<4e8w*BnKl{ksRE|1#0<(C)4MUJ3u{j=xgPCW#LIN7&Td~BM=xxy z+)dGOADttvkYHr! zk2w4too=GUAB$X`;PVq-IY_jF2EDi7*91$MUb2^9L)lgI56SfYGToWtaGD88{Pc&q z$_xX(fbjm8lF(acZ+g4I+LISPTo82Y5c58C~ zB0e!8R(6oQ*(W4(rZH41V`v>QnTydYk2tepx_%waraPW4U%{B`FEdi7^(Ul+lZR4J zWN!#g1A@V=EgOlj8% z)o^O_xi+6`^SL&k8NBnahEp?i5C7`$uQvZ=DgSqRw&>ceO(*VDwPG5q$CTf@OzDuT zThCsTI$SuyEj4HIE%N_KEpjc-GOdmC_~=|tfhS(f#r@3egT$CNI@h!wCgtN>a*f|u zV0=90lx>|q%z?W`lIUt4-;#a&#?)JRd^uL^B?~tpD+E?bhO;)?1!1Y(_W#1s#32<%p0^@gc7g1Kd zA-}(hbS3igKPLGl%uRlpE4RT*_MjJLL-D|5HNC=YC>5A2j~}#9V6vYhOxZRR3{198 zl1VXx*Y>O=lal5QTw8)4lx;N4;JOvk$`2~Hbg!-aRIlF3`9TW@CX@H^$X?83FUaeB zGH5FuwP?XnX8KV|25wAThEWQP|5uunRATACRowA^-tIrJ%K4A~|Cvoqty(`VO|6<* zOs$`Wm6esH#ndo0Su8CUODn@zth**X8NyzxRWa?4JH#?vmX+vaC*f{%5CU zrp#=_|K1NCG-YOY`R~2zdQYeSy|xQHo&NV;73AskzxS#GzVPpAKVOE0%O{rAq^E$0{R7^|n=o_pxuBTa8lH{9v}@rW^p90y`X0QC|>aBhplaXK7b4z>iKfeFOTn86F zh;m)RuMIl5BAMH5EsbYx1HY8u>;%lYkDEE4IrD3a4z4uj+{ew#WsakoV0rCz&odWm zS#f(^8FP77Z(EsLYpvxI=G<%E!yLy-VJ+s-?q2gj=GIsVAMVHzR^k-q+=)TV@mh_9 z*&E!6(ab$;C8jXPu~=AYb}9GLS(}2 zjyT4-eVKD_-N^Q(G0Z(-ExnSt(N@3Lv@gApxhJiq%b4SsHLT^n_N5Oq_ms8t1?JAS zmTqWYx{TRj^bEkB?_4vXf0jWzSJDc zajmuV1Lpc$OFwO2`Ym(MSxbLqj$;DR+n?=A&2b%{x0ZJ2iPL>w_GQl9uQ|HoI%{bp zbME^xx_zlR#^Vdt(rcI-XRUdD`_jeCy=X1Hk2&{!`B3}PCz)GsE#1JJ`@VdueW^L> zW3jcghB^0rS=YYQ9Q*MlYw2Ii1zG+2@?7V>&fS=M*;+b?IrF=w4z4rXmzv{1zG5w% z%3Kd?>1FLp&CwuBtfeO@%hoXG?(J#jHdu*L=1#GembWjhV(wLI z>9@>vu$Jy=U%H>U*Q}+-ne(-lcHm{Kd(AzVE47xM!JNxldUpHLbD4YHS{ldP-`04L z(7rU8xi_q(i0TmcA##|x!2r}xwoyQ=Gc-gR@VIW;$AwQxp%Ck<_MGS^U|0< zf!s?|m@BuIn&V6!jxg8C{2k?9x{|q#)>3n{$phA!Uu<9c26N_Ug&kbxn3L|u;Aibi zcQLogT566wX?_*g!PU~f)ErQ_!dhyMKN)E)?Z=$E-=WNHww9WsP`+Yat4ZxkFJW$r zwR8@1`>pKt?MrWA&Kx_jgXokM-p5mZ_aDornZFEN<`ocIoPXvSe%wEf zr);hhSJ?F-t=I9CZ=L`D!vU55q+fGvSI=awi#eWhF%V~a4c`wo+v^)z^V(`BEjQcs zEo}&GE$x}K-_c$~TSuEryNC8x+P$>5(e9&NM*B1EQ?#6$Bl}I-{j}y=$4#`GX`5-k zp*=`zuHPZrBeaKU+h~u`25}w#rX59lg7zF**9H8}ht`kwD%uXTb7(u#UPs%RHk-B! z?Q+_#v@2+P(5|QDY#`Ysw7qFxr{$a=*`L$)qy3sTn6{QSg!T~aAlhTJgK1CD4y6s| zd5+)sWDlf0lXeI#zxBz!kT!xgmUblVblS1BH_)C#dowNP8_CX~jiOycJAw8w+6!o( zqP>u|oOUwpX4)yVTWK$*-9yW{NwOPgr_=tA_A*)@p05&U`_o=QJDB!L+A!MLw3BJC zroEVU4(+A1*V5idJC8P(c0TQcw5hZY)27kBMtc)&8STxq8)+BQ?xbBpyPI|?Z9Oe# zMalk~HjDNocBDILJJQ}w8%ldG?J(LL+Tpahw9{x;(8kkp29@l~X;;(ULc50cR@#SY zvuGcqeS)@t_8HnIXrHHjnzoYmS=w#1MYNyLuA}{h_C?wz+V!*tXkVf2%09n=wkPeY zv_Z6-qa}MRZ5i!(v~ST~K)aDPiFOn1T-plS>uD=#@1gyGwvcuktvN38hqUIn$e+-D zKwC{~j*I*m?Ps)K(*8>OHSHg?HMHiq$o!@&yF1Sr-_iD=-A&t%b`NbN?OxjPwEWg9 zdlK!>wAau!(x%YYmSS2GVN(R2Xv$zKjJdpNv+QGDM(}vQT<0FUB*3zCy`#tShwEJjB(4L?jN$bZrHj369 zA9)<@5ZXxEvuMwyji4P*JDv6d+8MObvA(?Dw~=PyOazfBgd9dcVyTlgLL8eDHg7`Y5k?_pdgr zkM6Envejd9+&w{ZU4g$w8MHL3XvGWhbU{Z(@NDo!08!6J?(F)xj!1?OSk;i!Tt`N{kskKyZ`n_XMC%OkI2lb`8ea6 zd5g_wmwX+OUw8a-313UH7uj3K^S;0NT+jW*4_%;F%iW**^CR~)b)|bgADDY1S7FI5 z#53GqX0<+AF<&s{GjKkW;ZxavTpi~_@_#PzTuBYM?>xRvd))%-!yEH)&Mo{N#G$-@t`jGCt?i1wp8H{VgxO7P8J=Rc>(Y6Ed9TFf>oda4$~4^i%qDcEL7tGP zsqOCTn$+97X!tGGC*v0JBtea-G}FOxQ~1-~^Izt6o5|FiSm#NWI zC&bsMr@j33`9qqWRA+PdGMO4pnfD2Oeaza-H017$`A#a*PMI1~*Ycf8dkUcS^;r<= z`ETzw(N38f_ibH-n0wC=^P0`vZb!^}E#|)*F|XeOMLtA&iR?wpyL(Q`obAHwF^=@* zN`#1vMa)%qY7&qzk;O>3h}Sq;K1IxXXpa1XaQAtMFS~!VhBJ+?Mku0QE z#GH+zPUKmnUZfOh5ZQ_}itIv~ME*pYMNVNrZ4nuWw2DL`Z6fAf74vi!K*NKN$-Gka z6S*7l7cpn?2oN#vrUZ(7g7gyk5ix(qI(_|x1dH_YXZ#TfM?ys=BVi)uofPw%U1!ba z^{aXEc4Q4QM&uR5jM`336=MFPcH{>nTI4SzMx-lG2(coAkT{XCNW92YBtawzG0z81 z@99XA$h}Ci$m2+g$jeBo$QC3`#GJ1*UF0VuL&Ti5FHASMa;W_MIxUd>qP31Vv$y)M5H@UI+eHeIYLVBF9U>nfH6q_5wIaumI+1SdT=gQMNP|cu(kL<=X%d-> zG>a@jT0|a2T1ASHHj$4IGw|3A|M3H}ej*6ESB+2^aYeF`rR6Yd(sM5$VATWb^5jQ*#y)B@%-~i(HPF zPr97cJjA@u=13+IC$b8O7g>*(S8`5jE0QR(8%YvrLXt(ynN(6lx^-jx5gCZ2iHt(h zMPiT)k;{=xk@-lLh&k^{w#W)3N8~9aS7ZaSN@NR?C$a;{7ukyxh#W);MLGvE{)h}l z)`^&NwiJs@M@mFekW!J`kus4rNV&**q(Wp1QYlh{REg|Iwu|_5XZ#TfLUxD@M`}bS zBef#4kvfrEkb03^q(S6aq*3H8q)DV2X%^Xsw1^xJQ zFa zY()x1>X0IlBgi_D)A;IWvB(IdL}V&bDw2Yfi7Z9RMIJ;dL|#BDMLtBTL~4=kBKwhQ zk-w20B7vte{)h}hYDLB(bs`rb^&+#729ZTbqsRkDlgL`6S>#=$MdVAQRpft2n}|;k z;}3snJA3$Ph@Z$v#9w485+E`c2^6^<=_T?oV!r<9^z{-FEb=}QBC-oHpISMoKantz zPJJ1FLDpH7)iBuxx zA`M7|NGE=KP$_a2QYCUJvR&jRq*~-*WQWKGq(+9cdO>i?oQmi?oV-g|vy7^X9mCkIdOueFiZ8i1bGMMb1RbyMazB8VMA+66qz9 zftb&ioz&wy=i>woQ z8z~m~3@H(5LP|wW4rTliIUOk%i9#wwW+9a#w<1*{`N(#Wmyv3bPmvuW4M>fM&l!wA zB7KlLkugZU$ZVuRWEs*ZvKDC)*@QHUe2cV*m~-Z|iu4}B_#-j_aq(WZvxi@Y_=((( z_=`M@1cC^aJcLAuynu`m*^HR) zvpBc?Ya~kKI1()q62|x=G8TyynTD88ESxo8kHm|tLJ~w?LJ~#HS#y#^nvi4>|6z=`4m|tQitS;{Ep;{ zbU2goM_X%$(E zw25p+Tphjls2>nN5p!-Hf03SNlMoq&1d3dS^b)xi2@+X`1dBY0gouKq9^f> z@7Ez=Qu8$uE@IB#6Cu)uj1e*C@G+kV2DGnvG-AHV=EzJWT4WItBeDvK6?qAX6WNBC z&l;UIHy{Zj<_k56A_I{mk@Jyckwhd#WGP}k#dP{wg`|nRf~1RVM>0hABAFt`kSvj& z5sW_~=8Qi%A~TU(ku+qLNDh)G@*I*cQh^kRe2Wx{96*Xh0!A|ahzvoBMJ6I8BIZ0m zr6Nm_GLbx_T;vs`LS!3KDN>JAi5x?=i}W7F_#-j`*&%WP@viv@$r0hazOG!6 zl9V;#?9{1F*|_=`j$0V14(&J`%K0O=*d zdEi_@B2Oa0B5xugBA+3lB0nKvBFB+%kv``${)mh~#)w>mM2aLMQ6ijk%M~qR&Uh3f z!g;P-u_BzQ$`vPK&VLjy!daqR2_jvh7=J{DAm&>^&b@O1k}Semkz6Svi;z?i&Pe1+ z6XBdfF7xdoXU&_C43V#qOpzueOXTG7j6Wg+kQ@=tTjR9)m#aeLqzf2-MELcT zt4bsW*)GB_kzCax{D#Q2L!=O?5!s5=itq~>SDnZoNWDmhXvQCr{z#)p6w)Me71At{ zjNfQ}|q>EgJWQe38nIiWgSt9F^Y>^L<9FZm@ zS0pfo@keABk|%N@k}onJDG<32DHM4gDH7R=tP}YGDHb_`l!)}0%=ja6CQ>F6jg*UA zfmDd3B9$VyAypy|A=^csMXE(MAUi}hBQ+x5AhjY*NS%ml3geGRAEZHKG}0(C18EXj zgfxrfAuS?rAgv-bNSnxEgrBH+jX!-ZV*C*qj`)jAL;^(SAb}!xAiYFZBS9k1Bf%o? zAR!`OA)z9_Az>o^v5Y?=Ly-uPDaaU+G$c~wVI)fA1tePJJtRitJ0w=*cO*`v^Hjzk zk+YBlkys>AWFC?vl8q#bJcFc&m~%y?itI$pH*uY3nWIR$NZ`ecKO)1BOp!~GERj2q zY>_9C9FdJku1GDiO5_NVC(>ma>=1bosS(+X)QWtA)QL19^&)=L8Gl6j zA&nxVktUH#k!F$kNQ=llNUKO8(kAi_Vs=aZ?>dQpoV6D56ZswS7xBAeGOM5VIt2X;Ue!K5hB&d7?Hh*`K~$tx7U0Wi4y64 zDdUgG5F|!qG7>8?7l{+eLgGbMBMBnUBZ(p#ktC5XkYtfYBt@iiJmZhZ*+`nmg-E){ z^+<-u14yRGt4Nl}*GRU=??{fw$(J$yhzvzmiCl=}iClx^i`;<}h^$5mMP5USM0OzS zM4FLek?u1Xe?&$jr6N}#Wg?kKxyVyUg~*#orAReWCGs<}UE~B(Ez)-; zMV>$cM9L8BR~hY(#vhSENQlS;Bvd332@_d_go~_1B1G09V??$f zks`H7l*j=jTBP$8j6WhnkXVt4NSsI#5-)N)k|6Rpk|^>zk|gpOk}UEAk|NTKq>A`l z$@nAE6G;~dM>0gFAekc9AXy@}A=x4iBRL`^NUq2>WR=JsBv0f3k}u+y$oM1DA1M?$ z7by~%j;s^87AY24ij;_~L`p@TMao3VkaCgjNQKDvNTtXjq)MdgRg6C(Ly&5b3y>Wm zS0Xhc=}4_eE>b757O59`6KN3n5NQ;tMVdtRBh4azBP}96s z8sKuoPb3xb7r7G&5P1X%6nPoxB~pn5iPR#&A_tHVk&d$&e?7B&*BNC1zicCV1M6N=TMQ%n? zL{=cFA}=FpA|D{>B0nM-BEDBM{)mJiSt8?+Y>`AHM`SUQEAkMsN~8qI6Zsg)7imBW zL{1=uBB#w^{1G`9StoKiQY>-{QX=vIQY!K^QYP{~QZBL^sSr7WREl)HhVe(_3}m~= zg-Er?HOLN;B}k1(9#Sjv3Q{NXAyO~04`~oNjx>sdBs2bqOhTGPW+N>kOORHPhmkgs z*AQ1X??=;4#82dJ#9w5LaREWHQ zREks~RU&(k?IK5zYLS5J8Gl5=ks6U$q*f#usT0XW>P7OA29cMLMv+RSN#qBlS)>hV z5ec5p_#-kNX%o2`F$eB(_OWG%pGXnnFR~R05ZQ|aikzIv_#-k52@;ut1dCjYgotDz zp(2kWVIr?0;UXU)5h6b#V?<6Mks|#TF#d>)MWRJ6MPfv5L}Ep9kT{WNka&?YBthg0 zBvIrLk|fge2F4$ebC48~*+{C$T}Yb9i%7c2XGn%f3z8{v>Wz#)BIhC5B3C0hBKIP> zA}=AUM7}`sM1Di^MLMT3{)mJlg(B0DB9WVrbs{T~Vv%B`L}WWsD$A2 zX%;zzw21V*nej(tEYcGeg zZ#<_Xy2PQHclM`Q$&C~_5&Byt;)Eb=IlBJv)RDpH4}iL@Z;B3&0V{)mi5GDQ-R zED=tB&cRx}@6)G{9Fa{(uE=g=mB?`y_iG+%LhJ=ayf`p57$YlHx8G?)vxe$pInTte;EJLD2 z3XvF*O-QUrEfObk2#FWzaU0{0NH~%xG8IV@xdBNQS%ajAyoIES>_XB+{zlS82Hej0 zBQhDu6iGv}L>@u1MK&QhBKweBkxq9o{)mi1@!p~$yLk%&(gmxGDV7zERiZCTjXaXN8~t?D{|_+j6Wg~NS?@4Bwu7cQXq04QYi8qQY7*o zvQA_-QY_Mnl!)}nVf+ypg_Mb0f|QHgfK-SqM=C{LM5;tSLAHzhj#P_uTh90+5{cA^ z%tC5Ka*#TaVx(T=OQb>MDAFj>?>@#Kk#R_~$fZb&$b6(#BnN2|S&Nv%G&_&n3dB$3 zJH%h)7!n}T=YGZ?kqD%hNDLAraupIRvJeRoxd$=F>T<5(b4Zv-B@!;O2Z<2*8yO=K zoXhwlG8TyvxfF>ONkw8r?m=Qjobdm~%_JKfw4SG8{=3xdcfO zxd}-Xxd%xTDMZpmwjmiJdyq_#V@Q@rzZHx>B9Tar$Q4MgNG7sMO>A9^&*`fWc(2cK^jHIB26OGkYkVuiSNR&uC5-pO3#E9IFm}C3}uqjXCA7{)%;zZs<;zfQy5=0Imi6W=w zG5(00izJIoM^Z%6kW`VCNSesANV-TVk|FXjk}0wW$r3q;WQ%lO!}udI2+0*W7g;4T z6Uh@_w_XPJV>(M`Qp}Epi^RLu3Y0Ba(*HirkIViR2^oBCjD0BA+6SB0nQdA}8fD{)n88 zw1}LGw2CAkZ6fK2tB?0%XC>k%vL5jl`2YzJsYe1u+K^r%eII4~5gCgFi_AbmL~cPs zMOGkTBE?9!$OlM-$PdUEk;6!&NRP)De?-niqD3YlF(R{&Sdp8NIFU6-yvPekf=C6D zC{lwYi5x(ZMY=uC_#-k5Nfn7f(nPLB(nT_n43RZRrpS6EOJoz0EmDi*h%_U)B3%j? ze?-ng@(TM9*@9}3Q;wN$=;xF<55+G87m?P3UuK_+ndWke3K_dQzj6Wi0 zAt54@kx-FjBur!p5-yU5M2NhGj1j3uB1QHiQ6gQRX8aKufy9W+Kw?F1M&d+PAn_vW zkpz({BvIrCBuV5bk}MMV4C9Z;SxBnL1xT96Oe9@oK9V7F8-NC;9OG8QQmnTiyN%tzLV+=Ud26d)xc8<0|wPmwZ_pOJEr zfFi~pkx@vcNCHwNax1c3AjZmM`ScoFLD{uAd-eOisT|q zA|*(($R|jP$j?Zti0e7VACZ2DIVqPjZbTw}A~O+xk(-bJk>yCB$XcYANCgrkvJ(jw zX+}asIy}$#BQgL96B&hsi%do$L}nvnL>3{DBCC)nkr$C@ku6A!$Tvu=$ZtrTNQZTd zKO(0i2_j>WM3FcoNhAeH7P$jS5qShj6?qv+6WNNSi|j%&L=GUCBK|Kh{)mJi*&^p4 zIU<)Lxgysit3;L|c_NP@`63&T0+A}DP^1ni5;=&h6Y2aS|Bwoij;}KQhzv%mM52-HB3C2TB6lD=L>@_M ze?(408buS6kwHkT z$oWW|$mK}9$W2IsNG_5n@+4x;coD#zbQ1qKS3Hs|@)43EvJXiWIgF%JM`Qq! zAuGCGykH`?D zSY!fHB61~CDsnSYCX$PkixeRhA{&uPk*|>|k>8N*A|1;Ze?$f%J47Op8j*OUR%9Vk zC-NXtFH(#&h-^a|MfM?0BCfX>e?(40T0|xwts>VUZ6fy}u72Kocmd)kQjYkGe1Qar z96-$3S)4~or?(k@LgH#5F||` z3P~54iDZb(M>0k3Lb602L9#_&L2^W@kX(^EWR=JvBu}LGM#dkJ;YfkVB&1MeHc}*V z3$jk+KBQRW8Kgv{5-Angg_Mc>jg*T7z03F`G6Ja-i9xDF<|5lgZbPa?9!7SElpr-C zTaj9kok*R?Z%Dn!Nt+mdL_&~8k@Jxzky%KyNCwg(vJz<(c^+vKc@HtCV0RuVb%>ux zE8;KGyMlzsNF-3?3Z$3F9Y~PKS|nKHBgCA;$+Wtw@we9TF|_7ZM|K+7`wik#R_z$SfpY@shMYbSWB72c+kya!}B&d?{MONS(-|NWDlo(jZcUG>SAMO(KCGF#d>)Kw3nmBCR6xkv5V05ZCG6 zkN35RpU7s!Ut|{&AaWQ96zN{Y_#<*Q5+pJe2^P5?2@$y)2^D!72@~0fgp2G%B18@# zV??@aWBd^rhD3=>L83*jLt;ekLSjYokvNeOBwnNnNf6nCB#N{kNg|y-Wc(2cLsCSd zkyMc+Bu(TtBwb`Rk|9!pWQx3xWQpuTvPBLcIU*fCV*C*~16d^!gXD?KLGnd1kOGm1 zkV28ykRp*!kaZ$IA;luD?TkMnJ&{t8Fr-W*1}PVri&Ti*iByU_iByS{BiluGBGn>C zkR2icA2a@lgd(*fX%%aMAKn~(;P`;bPFXOSk6caUb09Y~8vBho73^9kdRNMFR& z-+TNSh4_hFjQEROhXjb+fdq==BfUgQkRXw5NU+HFNQlT`Bvhp9r;I-$Ly>Ti3y=tr zL}ZM}A|z5|B@!i4j6{oUMPfwikXVt!NSsJuHRF%SnMi_23}VhS8Ngj~68~JTIY^R7 zCXy`jFp?rtf~1Okh@^?sBk3Z4AsHflK4bh5i9)hOu0yg#vXC5+r;%KdEyya7JxHF& zF(h9k@N>o=k#mqjkvT|_$Z}+z$WutMNGVbx@*z?xvI{8_Ie?Ulob(0bkH~3ArO0Tc zN@NpM6N)BMV25TB99`WB4tRJ zNDUG$@;eeCa>`eXKO%#XNRbIhl*nu(TI4n)M&vOhR-_Dx6Zr~>7imTkM7n>?_#-k3 zNfNmTNfw!dq=;l9sUrDEn#k)&y2xiphRCl-rpU=Pj6Wi0AlV|5ksOg(NUq3YWR=Kc zNS??>Bwyr9q(J0Xq)?>eH;g|bp~yOsiAb@?9Hd0#4y07%38YNq9i&|38>B+y52R8g za3|xBNI0@xWGYfEG7s4yat~4?@(fZdvI(gZ`39*MX+|1EdVI_HBQh3g5{XBeMbeNK zk^7NWk>`;%ku8WT#C!bt4)GH?xt8%qWF!(Gl7a+^6d=7ss*oU&14yvQ>ASc(A{Qf} zBKIR0kBAXy?uk!+DJ-@9CQiws2W z5jh9BS7aKJBXSM0Tx2nFpUC~l{UT2xxgxJ24~Tq#tPuGYSt+s~StW7;c~GS14=&e3 zB14hYBIhG{A_>SEkp;-ZBCC-{L|#MkMLtI!75N2uOvHbW%k{X(P^3WQBIF5?>yRf! z?nRywc^WAc*^E3b@*VPwh;O~i^{mJlNRdb!vQ}gP@|?&M$nzo_k#!<_kQYS!_qtp! zii9ESMJ6M~B6E?KM3x{gi{v4%h`f%Ji0nW%i0nsR74g~Ua=j+f7bz7v2YFp&Ch~?z zI`XE-!$_IPo5))tyOFm=4kGV}bpMg(T#*sTMv*w=U6JdNO(ORp6(Ua|n?*JuTSUG? z-V!xLn_fj6`;eOh@WOZa}^l$wht;DMa>&Y((lszC-qkv?2RM`Zc;- zKZ-;l4I)<|KZ#@@Ka1oezlf9|jUwBS|B38Heib>6>=)_(KVC74oR9n_l7Rd!l8O8w z@+i_Q@*Z+PWGC{ci0`j1*Flj8q(x*Ja!6!8a#&7Wn3&cm{cjP3IZcQ$iugDn0Pvk1(WRYb^2az>M zN0Ac5U*r?y6p`IXCy~F9&LY9TahpUYAYDYRN4kpKk8~4Rj|7TTBi%&~AU#C7{?0*h zL`EXLM5ZIXMHV7`L>@v;6?p{-64{3I6{$x~6Y=|lFX@PcBEce4k<&$PK>Ca1A_GKT zL_$P1BLhY1kU=7?$Y7C>X8uYNi9*g0xf~fHvJe?6@*ol>vH=+;vJ*K|WTeO!$S9Ftk` zktdOJMK&VmiTsS5FLDBj66t%;D2YDP)pJIdY-Mw@8dg zD>7LmxW(m~A~GJiNaRW+R^(P>s>tKW#UfjfX(GFjIFV*#x=4pZF4rX@ry`e%gdy=F zlab3ru102v+>Oi>S&JlyR3Mj&e1lve(u`aw(&aFJ`;4BJUxoB0nMv zM0&QmTsMe}LT(hf6iE|FLl%mxMs5;WkK8P>8A%uU9$6&Pg4`m~?WoJOSY#NIA#x$I zL}U)KR3r@yni@bqs z5!r#fC-OT|DdIZG$MwF*Fl4L9g~$gY*C16QnaDPgeB?us667P1kC5#mKO!HCoIpMi zIn~$4^{L2Mq*^2a`Ap;nSv-MJ_`Qh}?|)DUydA6nP105%~}~B(fJdEaK zNW4fja+%1_$PAIA$V`!*J$zgVBH_s8B9o9rk?W8ok>yCTNHLNk@)eRQatKKi3GC_P zN*6f?$qv~duE7 zqO?L>>O~eJ4I(R%Mv-+$lgJjNS!5^DBJw-ZD$?mxUNwmfMO=fuU;j)+ z{6ua<{6+3V0z{rc0!2PRdWke5K_WguJPV72A|WE*IBWHXW}vKz?~If7)11omV65gCr;icCRPiOfOrL~cd$MIJ&5L|#G) zMXHe^k)M%uBEG?lKO+5+5|ML}Qjs{MOk^HXE^;4IA@T%LDe@*#CGs`0UE}~#EzOz9%_6@28Gl4Vkyeo@NSnwFh%3~4 z{J9tL6DdUeMczaLM0Oy7B27pyky8dR{)h}ff<+>c5Rn;3sK_EDOyqtfT;yrw3K?nN zL9P_}8i|lpGcr=7a|o}EMTR1yMW!KRL~cRGimXA#iM)oKBl0;CDe?<)u1Fhlo=Bg8 zyfzjYheV0YK*o#Qf=m!8KrRreM50B0K_-g02JzZhWFT^(NHh{7G6$I~awjrHtyqvOkLaO_S(I7b%nTm zUEXUBq|VppEUTW+A`1`A{`Z=@TQ#Ob&zb|<=YF@>9Qdy__pnm2_L`G^`J5Z`&+FXN zs!8!$bC32lx7lm%@vk+Tt>)`+9H z`b|Kn$4bVrr`E9Pq)_`>|XON&O@a?b-q4k-!s#d7Z2a&`L!qC1+Y`5<|Nl} zuham<*T>UOYViljPHMHCGBuhCL41A8K4YeSU5?%Aq~5esAuQ3OPtjI?3Ag|)G+C* zDrx#;C)G2|eeakWO`R!yh0eR4fzWfiCfF%cqbW05I=AcP+>fU?sZ={*PCuIRxZe(m(t zW0-pzni@?-NMASI{Q65yYP_8?HJTbJechSzWUZ5$Z>LO+rbbC$YZnjWMtHX2!*#CC%7dxpncFNRf>Rjn7$ahGx zliFmbOpT__vr?XMcbDO01V3#6}4_kVGl zlX}-qnHo(+TPe>rbZr{@vXlDBPMI1_O|(*;ZFsokkz1Tpw{Z71G&P!?hRL9}&tzl|3HQh>i?ys7DgZ4YAbM2I=(G)KfyzZ|b7uEmj zq*CpasnOJ>l6v=x7aN__<95o_Xe!=HnOFX1nz%gEYa4!Or%a8eE<>DGu$NA_e6!P6 zi=8qxq`Y1Y&ahIw{dncY-1&KdXZ`!t;7qF~=VZQJ%bb~Jw7(h*9^u~3Gh8A6cr}Q&&r0xAi^U zYp=_-Q>I2!bEK~;!%HVReQmH)rbbg{5B2r&++WZA7}3Q^eQl>qji!>VlxN?#;l?J0 zAJ6S-wNs`>Q**79r>})4idQ(P{v+L6-qdL7S}W!0%kRBZ21rj|7uqRPqbc*Ka&Ffj zPd`)cq!!pIQ=_RAE9DuVM+O}1>!cpCQ>I2!^Q=^FF3q&^>LU$KYKxsRHJZ8}asKvP zp3oBQr1sk>Q=_T*R?5@Y*>_Aiz`j!PAPLz2kn%p(bPietLE5yVNR<5X!kZWHJZ9f`WpF6DC4{5c3o_zOpT^)mcIVC z`NzRdYKfgPHJVD7zK-8haj%nFYo|<&rWQ$G_b-?q;-sqWl&R6wEmq324YTT3yzZo0 z?Ubp})M6{;xtGWG{x#G|4Ibm(hNebS8PeCWi+23tq%O5nrbbgsB=vCJ%a1v!+wGL8 z(bQ5a)q_hjUAVo6*Q@sz?3Ag|)UAl~SO05I9e&#B>kB(&YBZH;r96GDsxjvv^XwbP z?3Ag|)NNMEvkgD~d%y)wYVcV1HZ(Pwx?TF(_wi4Coz$gv%G7A;4lBjrZcRh4Yr4uw z-Damuji#~?Umu>rt!YU^I2!_aM&JxTyZ|PEKDrcFNR{@_G%)1D@0dZop9H_Kmxn2dKF<-k$~J zSTzmY+_RW7)4lDlA&c!b-|Gtb$7{&t)H%6}w)|CI|t0SGhI-O%~55MZ+pQdsVU!TrqA=9>;m0qbc?Ubp})B}jK zoiC4j;18#-I6Gx(G_}G?dG>_eOMdZsW=ywJrbbgMt(0fX>^b0PR_xj9p0rb@MpLUK z_0Yv1)jFwdcFNRf>Om{zxrU{Cw_NR{n(dUS(bPj$>QpYx6gp@38YdMT>E80DMpLU1 zXB+zc(DP3xHO)?$8cpR%YT??nXeV`(oia6=;tF})%Ol2}`-PKw*iM-mO+9R-JdeTY z+v~kX+A=$3YBcqTq(a|$c7)Scot-i@n#z~dJIiYqJ1M_&-P_RAXzEcbK7Fiujuo?}^LFR@ykVzI zjoylI2!Yb7=FjXVZpPwIO+Wok6_oR#X%rI~ik>~PFUbv)m_4NZ-vo=2RmG5-2q zJY9JDim+3rMpNsol&7!RBO|=_jahce)M)Aj>1*|APu%VFb+4T=HJW zq@6M~ntEAMZ+EV4bW%xn%G7A;6-fo2edkdpb-$f5HJU1s)Pb$$_w}A__=cS_HJaLB zr96A@qWv$k0X(Vi?Ubp})T>s?vv0&c-{!S%bR6&AhNebSuSs9OuDGb5(^rI@GBuhi zmA;ZDPd(wJX4xrIqp8=Wubep_1UadD?Ubp})Em;*4@2+r8UZ%gDO01VH>Iy$tNLto z`r2uyOpT_>q_4X^p761ga!qh=LsO%vx1_Jtzx~An*K>ajvs0!I2!??_*J&%LY2NoCn7Q=_SJE9KcY{x^MdwUc_$PMI1_vB|u~sAGelX9xG(t}pDA zsnOKC($|n%Ge31wN9~lU(Uf@>b;iTFlP+OL@boq40{50THJYlBzDBM2tj$Tq*(p<_ zsm;zSO>L3BN)P_^xs!UC-tYDs$_|#-bbA0q}9+D@4oO?@D# zAMgB~4d&T~H`*yvqp2z@<+)wQVm|U3=O43ErbbiStW*G(X1c7=d&|FTr%a8eK17_? z;UD=vb(3=qzqeDSMpGYIDNkR|v|KmUN%>54Z$nd~DTZ3FzAnrP^t!)7?Ubp}6oU&X zPhU01%e)>b7uhLOqp44%uVv@Q9dxeY4R*@ZXo^*P_0?}*c$|}Z&`y~eO;t-@L;96O zJE>ATWok6V0PWS+kNHcvI-Y%_#!i_UP4RH@+J^m-nx{FbBX-KvXo{D)UVVk<{yyDF z^_%3rzf6s$c1T~_%lgi6QWNZysnOJz($~9ZdcXR*)=rrkO?@SO9XdGqDyOgIcFNRf z>TBt1$++T6ozzQq%G7A8#!7i!vz>a?mw8UA+D@4oO?_jfJb!WA|H*Cqq2Rf{TJ4mn z(bP^!J$pkxuW@6@h3+kHYBcq&mFmW&nRcEs=X9s91UqGFG*yc@@3(yTQ4uTlT*KS# zl&R6wE-TfUOEb;wbK#Xv>RCHwYBcp7;yfykznp)HlX~AynHo*)wo;xgUvgvDl}@U` zPMI1_)k$hi_>62P6&T~*hNebS-%IL5>&|n7v~={~K_O0GPueL{qp5mHbxm1zmXmtVPMI1_?X^<9xir)48NK>AsRlb`YBaSE zarTYlOBV5T>e)BCPj+uZQ=_RLtyB*#&2)4@2@fVuYMh-iHJWNboM+fMp@+Rjn`Ap> zYBcqemGbQKiiONqujp zOpT`a6Nua8+47OsMDnokq)wUQ-iD?|Q~$G4J-IZ~_y;5Yc2eW)l&R6wuZZ)C=%WdL zc#Vg1?Ubp})P5`F*?Tue`JU?ZwbD+R8cj7>sjgg_X~Y@hx%Aww&34MvXzDk_*QXzs zX6hSz`~oMn&rX>dP5q8IkCb~~UBb(4PhY(+a&JRZqp3e6)xUeUYn;^icFNRfs@X~f za%rZ76+?KL;OT3woia6=I)FIW@RJ8;g*mAQ?3Ag|)Sp($)7Qx#{}Jn?HrOdsqp5?E zy6d~jGn~{ncFNRfs>MnLacQPqP1E0ZQh(biQ=_Rvh_mieJ2*^=8>AQ$xz@eZM1CYBiT#_;<&iKbHObeLr6OaeYeYm|eh{jfDMa?Ubp}TX9TMc2XbNDO01Vza%xI=hSIVs>M#3 z8cp%XmDhHDC~lC~GswWH?(J-9G{vCcl{!+{JKO2&5<6vTG<953m$Ys@-AUbHr%Vkg zuY2c&mD=XVap{-~KBxY!f8RSUuBfk1Ob3oRM~#_IwBI|$_L@)p>)!FPQVcrQRIql_ z70&h9YNt$%-ini~lxGajx$8idlR99hOpT^|B{k@(=!H(|^ov=@WNI|!XQg^tOS$c* z?+$fRQ|*+g(bUOS%5x1rc)RypC$-p4nHo)Xuu`7BB5n>~IP{D^&)O+dqp6OPdTi=u zb{0?S6FX&UH05ulJkQiKCamA=qz>6BQ=_RL;D)wGA`vl&R5F4=d%lT{CtTz2NlqoSiZ?n(Aq#JhyB3ZznVB z**8A7Q>I2!y(G16<8@x+^HDoxYBbf`N_lSA#Bdp!?6W~WSzrus@>ABQasajxMe zJ7sD#b(-|m_Se%dI;lN&%G7A8pY&C7=_dtF%I^{uGMO4p1zRc4HVnUe{9Y#&W~WSz zrcSp~o^3d({;m~HYPy{=HJa*grGl+%!m)6N?cs%kXOCKBr%a8e23RT2ewfqt(^4n( zf}JuonhLQ}o;~V={LP6@YKNUNHJTb|r98K5$G3aEo{5gxDO01VK~}1deY?8ev~8@@ zSN}^{$Yg3XHP}jdUdg&y{rLcAVdx7jIEqp35jRDb&# z7B2go7qFhb*4imkqp2ZQ%5%G78paknshxJp)M#p`mGa!Kix%#?+DZAvvyjQuXe!J~ zdA9sB1*80()JQvJYBV*>N_no~_roXTIH}9+l&R6wnO4fP4d1%q60cWH_u45_qp7p3 zl;^cgNe90RoW5SRQ>I2!;gY)J`Y%T~saB@snK@I)M(0lnaS6uuYG^b=>76U zCv~lzGBuhqU&L`z%l{w7?gGk+V_O683=^CL0t5-}?j9hx2DcF0o!|`a?jGFT-Q9w_ zyE}mpJP=;(-Mh}Np9Ax5uN5vA{;x~By1LH+I`k~BYOE;A80GBw>8mF}f%Q#U;mv7RhdLl1{Hmfsoxcex+jZs4b~M!8SF9o5H2XN zw5dl}^WVDKxy_nsehI$2LLV{(1vW50+NM)w^0hsaoVifo=WQ?IJ2Q#;B@gx0R{SE0GFYFYtU4P({XB7O>UaM2 zDaM&`=Eul%YI79z)u*$ZxoF_$^(oHE?k+|~-IYk|GgcI3uvbg4vRBFMZ!$RZaGNN~ zpeo7Ajz!Bqj+)73=lo4kltD!g9{Sy$<(Ha&Q1xA9^PA?N3@X}c>nhRq&ELPM${~s} zMmehlZ7#hlGV(4)r(PPys8?aD1$vlzw!U|*sq)!WPY?gR>jw2Bjn6g z{Ccb^E4zoR-*;v`t&Lc*x7Pf6lJg#by$@)=IeK>x}0fY zezbS1I=)s!p~jh`PT=RQsK?6O)cN={B>DucPi9e+!B*5~WuGgPJUMJ8j%`I{QItVN zcT!#J0`JW=8%(RZh@uR(y&mQ}y_W@p?pi=qsw zW~}1!IRgUfwjBCa%W5i$GN_ufN+fDXg7y_vO%p{KR5Wvf0&NY8Ei8XY)hSVwLDdq} zh!dHMstQjRu{kJ%>UUQ5UK##Te)9p8oeB9xQ3h2jR`yNT`*_>OscI>TGN@X!iY2`f z<@>i)R80~^8B}dp*_Ex>r>M@e=K)caG0M5aw)Ls6-(lNv#x&Tsvuf*`tFPtEZ391_ ztL=SfriP^M^CY>pA~r31=AaDLr-M&@y*?c|VUXO(?IJ} zN)%fys)mcA461>w>|2rk&l`47wN4aeP|^NP zKc_BvAcxaqS4B|<)nHb(hKZ96T&-mV(PqRPltDFwmA#g4Ea+(-nCw-MRupAW4P|AY zt#bG2vq@D|QItV749iNgbh)a&q9|jOGZTih3VGca!5O-3+jV2OZzimeGY=2^d?t)! zW%s?g+a=$s^*JYsGT4eytn7SV8Ty_1I*IMENVI)32W7AoqgjQ#iyOlkx*yqH+-P4b z^2nJ-`?X>$tJqww+55Z>UaIw}D~dAMigB!HS4GG7GYTY8HAWO=P>pA0_ax1Z=5DHL zmnh0$+b6IJc?AF9OeOQ99l;5{w!e}yPYC>c1Shhxv$tdEW?8g8F=^v$4$5FFCb6=+ zoz=yrIV*o5QIx?}OlDQzoRMny<@an;I78Q_IVB&HeXZysXPzARc`K%}vTIn{3XjcT z+8H%l6lJg#(^%ON+^|ze$~vX9*Lq1wtXI}d8R(J2Y4~-X!*1oG{6%j=lRLfY|=f!@X zW*=1*EQ&HlId`JvtU8-|eEnVJ3eM2gYWIH2ePg;<&b&PE^D$k?%8C*jW;yRSj)|fS zwqg}4dle*4J3Y0w;-x6cpjyq!wtYv*q3Km6rAKgcPzKc+R^RdOntwffi~IM<{3?nv zsMdm7Gp}k}EvuU-${6MJ^Ey@`uN&(*)5QE}@0II({X9#~ye{zbe%`>!G??+WB$$7)X5I1dM1i8*kgaP3V8$%aOSx=vmL=deLWVtvH4AN z{2BQ92p(i*pNX!=S#?Y6^Rp<*V0{j;3i-M?%o%qNdB|6vMsnsue)T!R%8o_obXU!- z)m|3^MNtNO^(ZUbt0$Tin5}A)D9T_fj=XWaUn^wlSwocW|*eNMBotIg2!C!FWylAb-XL^|*zvWg11f22Jr-PjNj9-1uv9kBdpPTgFt^G4j6lHLf&x3l|W4Lp5?-fNE zRJ5bhPv~;B>p4NodMS!Bs4lXy^Ken+-_NK@*3|r_IVgiYc8OKUBY2rJ?g(D;_1Ld+ z=1YD(c7>IFpOCskWz*gEy67m1GFYFhtU?~aYn&NmezYTa)mNVxa^|ak^|{WQgsHMChiZ7ZILq715=tnAfv>e~??RK=xRpgAam>J}^eblmUe z)8eX%iJ}bl*lkuJ_t+iI3^PC49=q-9v95CF+kQQEmzBMD2UPwpgVtw(D9T_f?tyxB z@jxwAS4B|<)qPfpxo6DhZLu3U{T!{i`Au_B2Gs*rX2JE2HXr6_S;a+B27BxwtB~&n zk2q7#{Al+`4}Cq>SzV%pp9a3KPEjntZIsWnW*gtaSe*!-r_gAbEaXuj6Uc2AlYJFn0q%r~mD1)td z&5G7uI?lbV~WsI&W^Uv35o3DvC0w-m@i{+D~G`Xq`nsKT(aqx>-_ zTPIZ+TYG&-8B}3e*%`HSW-Mn#swRpusKP;6Emn1!tY!5VMH!=EQ=Z%M2pOc~}gRO|f%3kmLXP14cDxi(mW0XPl zEi1c*FFe(LfT}E_D1+)dR(1^^_qP2zRgFba274?rtJ0?Z^mOy(?_NgX3^mfe+llP! zu|MR@k^Oq?dscSOw!ZbGwOXI8q9}u{h|0>YtA+a>ajw$`q9}tZ8Y?@;x|cfbloh$H z*Uyx}wnu06hxzSfrtLNUZJ*cw{`CWA&X^zR9!E!XU)z6@Ge`Gpdkj|gs?2*lfwLag z5JeemMNCjt7tU!-3GWyziZZBTv9fJ1|2ojwhp!h!8C0=Z*&62g^JsA`>!v8mp!yNi zjfwMHs`{>-*Uywe6^E6r;e%u6!l=qEiZZC;LRpidkM66gktoWbiU%rT+M>?gVXP?1 zpo-7R)^PZuX4|!_ouVj%Dgi6IiYz*x!0C<0q9}tZA*)C-u5l++?y6-)ZtwLWWl$x8 zvZ6dY@LW}9QItWI7|NQ|>qlpuuOx~xsFFZg9R{^`=0>n6%AiULWi5Ynp{LexiYUsU zN(N<3NwKS%s_mjEgDN?c^`_GF?y7Eyq714Otn6F;IxF9&R28~|*YlJy%DJbcWOdX0 zSjddoj`3mA`L7bGIFt38fPi8$t|@)1L@GIRO21ViH7mP9Ztrltz1F9YD9T_f(y+2` z{zoPmWnS5uU*e;cD9WHp%gXKsV`MpVUe!2JltGn_Rd_l3q6Jr8s@f)sGN{tCvNL?< zZ=(;Zx+01)s4}p!E7JKRi_L(TU*hAFD9WIs?-}a8?#bnM%~hrC=#435P-Oyja_YP~ zs;Y~k464kmY`dc5jA5pd`6WJvh@uRtEUfHq@M@kY6;&-0MHy6CLEY$Ds;a7Mq9}tZ z8!J1*cO>dKOjYDyuQw=zDmyE?-zYO{-y~JpL{SD+4p8mxO&X)BsVK^z%E`*^qb7`O zms!;`QItWIiStE=T3(xP?^spaMNtM-K2~yAJ|!5 zReMpCK~)IK%GrPU0#)-wQ3h3ER`zLYz`fqxRGk$?8B|3;U9bA5b3YC0;`Ih)P!(lm zdn0d>JN31!Orj`*su-w%1{<5Gsw;{zsEV_)dy?$#7Lj2CEGKr!Lsxna4k}h42scImKGT8RAtZ4oOng720iE25{n2nn6lcTb} zwvU%Hm-TCVdEc2040sfr)odxuFY&Qe6lJhJ6@2RJ^{L1iw>}ko^?4*`uHaXnO04Yc zJ<{&>60J|vZr)f>2J2Iqm03FZDf`QRFHIHBY&55^YguJqeG1B%EBn>wSE$e0-@h>r z@8*~IXe^2{ILcL7+1|D1+)ZR(3{hoc&ilReMEI230jyw#UkynzdEc z8&Q-&Rh^Z+gB;J((tIt#{1P82x_kXh8B{e`+573?YL}e-&u^kAW0Z5{)?}5#oSWW! zeECn})Z$DfQ?T9t)%1UD|@}4oe*iSsxzV} zgRQ8`%3S0jeE+8&XQrA~*j-UwUn@fQ@OrhbUn}afviHj5(Grx@`Xm=c8Ei!ZP?s}T zc%Z6+D9WH}2rAa@@qJYF5JeeOjab<^_Hx1xw^S__MHy6$S=l*OWN8lbQp5ZbAD2W? z#wcgDG+`C;Y-!4ws?Ka_;_K%~J-vQz;@8j3SlOND#xsX6Xnit^q71g8IV;pZHefW=WnsZSGd$lbq zyFxZEvU8rQ^z`w*IVgjw9hBASmr`$3RTo7WRPCXx;)g~#d+foYD1)j4l(p>LkIs9f z^`a<)sw0#&spd|zIWoV*#~o3WK^4r(_Tl`hr+!iOeQ&QfD1)jKE8BvL{ltI-6$~xU)-$qrFMNtM-S19XshsVzI*M3oyLDdb)dj5XA^Q`w$ z6lG9#hq99VxowZuFi{_`4=IDH2b7hls8uq7173P}Uzu4mDIYToh$c4S=%xZJ%^m)fQ2dK{XJ{n%Xjy z^DgdzD9WH31ZCZM`r9lmD+Ya}V-Cuo8VqG6E|SYUu9#oqqmU@dpc=x;&W#IazI~;t zjVQ{X8p_Jf!|M&&JFDn)QItV749fbqdd=%v))7&ZK{Xu8if}G*B~|Z4Q3llrC@b}m zZ)>Vb-rws(%AgtvWd#O5a`w*^MNtOTC@8DsjH4;Etlpw1gK9J@yBoYedD(qc%SBNJ z)fiUx9e%N?S68UIE{ZZnIeVM2thSiBKzr6N|GBntoVjDV#?FSZzPoUQ0bY-d^}7p? zXJwzn2MsMWMC+4Q6lJg#6IhugkB^-B0-U`>IZ>2B^#`k%qKY3#R$t5NB#JVqCbF_~ zwe8knW(#9}iH`-MD1&MeD_g@l4^Kx`bygH*P)%lK-&+6v{Jis=@<9}3P)%WF$23!k zwUxE3L<7B^rwpp8tZWS*ue-ZcRVh)FG0K?<(^!SP%bm^{_nBy#Zzi;tGf(rI2{TyP ze$MrJ)MTyCAEGFOt(eKm&bXR&4mx+VeWECXt(e6s`?DoH14RJ%cRrjZQH+^CG{|S;ER(ihL~I`;GHV)Jzm*us%y!?J?Cg z4}xF$2G=sqP=(XU*_Zn2GfvLD)UQ6vS=sqD>gbqF+N-NXQ3iW;1uL@*@eyrGU9&Ko zU*hAED9WH($;z%0m-4=J?r33#cw<2sRI5Nm9y!}tB{GSk464y*NawpWJ48_i)fP~vi(hn}|^QU=vF zR(AG&O!@e+s!XCNgK9e~`)2aT`oV=%)euD)R6AJN_btCa3-_<8k)kMrY9}i@UPX%z z-mGemD9WJP1!bk{5F?VRXQC)$l(RzaW)<=Zxra0E3c1_2A|)B__497O6=|>U%rqiR zvL|}3^(ichGFYE|tn!(Y(tTyorRdB2-_q>o485;N%9;21)#p!E_KF+S zb++nrtm>&K%Ah&~WhL1#_MEC8M|k~A z8B~W^*?mIEy_21LcTrK4L3MySbkom9052tFsD9WHZ4yya4fI^Ge*0Jo7uBtjO ziZVtySNB;~SwaT{bT%W_e9okD{#VmE&KxoC_PWcsp7mW#ALPtu{jR3-tZY9ozFXIM z(o8u1VfD=x6IYwxc`j+&a8U*e;xD9WI^$jYvw6I1t_sH(3h%AmRg>h*sCQ&epb zMHy6=L47QpGoh--q9}vv3aGJ@wkA=PV6@j8ltFcsmF>gmqXs(n%8H^WgX$WnE`@{o zYgzq8Q3lm@R<;i(C9YyFNApX3Y!F2mR5w7qd40;<0Ihl~iZZBff-2HIZ(dai#(2F! z8C17GrCGG;XH^wNQ3lm*R<;k9EiC8MaG)s4pt=KUPq#BpZ)_4p8B}*!**?tkcZAbg z!^fg1gX$ir3du$|_nib|z22Y}fGN>MadK~Y!(y9iEq715stZW}1 zIR0dgsx6`@gX$5e`Ei=eRP|I8Wl%k4W$(g2JRPt>Rf2I|Z%_u+6IS*v9Q^)#A637I zq7161pgt~NRZUf}D9WJvisxFD545|;TY;P=?w{?N4uzz@cNEuWgK_&Y8lJgDZETSlb>OWR?yo!{W z9A3++Es8RzK0#S=*AHl~YKSPxprW@Z`tP+3sSwI}r?*}dWl#mOvc1u^UMS~j^rk4v zpb7dVYWAprSvwsN;3|N#S9tqEGVr zkTR&kLs?UgZfK|~pD4M*gc;oli^u7DX9U-?6e!cKL3+sjOuso9y)=Wl%+CWuJh)d7eCz zstTeggDMIu+pgq)9UQBwuPDl(`ks}oVXoUL^Qc-aiZZC8f~u9c>UmW+L{Y{l=Lsm9 zPnn;5(zk6;w|!mjcYa`%NOBn>y`H7@ z$svj|Sf3cIau`J=eEFMTF*#Gi6l|78K4SRl(?ZT1!>>NESVa-Brd4j|6Q2p9D1*Hk zo0Yw~|2bT-h_+(8D9T_feq`0q{8-kMw=?njPX5o8aX53te3z!8)agfGD;~<3fAnib zTvm2H?DOl9g<78o^tCc`PzGBOkCmNKW4C45qbi3e%Akr5YD?Ea&J$uoQItWI093Xj z8ER=+V?|L0RYFj`%T#@1jeF{XKa zNEuW~psaaqj#p8YM-*jHC55scHqGU{muMi0GN_V4S^s_fxt^9aL=jFpvqoJIMHy5np{(-1<=Lra1x)w)kTR%JL0KhVmvFvUnOqcQP^E^l zlEuq7Sj#FSiZZCuKv^>iC&;F%y(r3{N(*JZ98$-*n@<%*8C2<@tn*K1z0$IFi=qsw z^ibB&R&&ji48>Ql`JS~X%Am>sWreEs#;hP#MVaCCJY`U2gtDr=eK}lJPEnLWm5G)8 zoG59dL(UUoEm4#~m6?@&gID;*s1jP%AW@V-l?BRb*+2IlRjWi%231y28*{YGtm?8T z%Am@|Dwg#1)7^EusR}*Q>qE+*%FfEJy)$Qwch-$;q9}tZ2P^ybAo>QkJR9l-@jcRJ6EL36xb zr406J30C$xo%{XOU$hljL{SD+NmdC=3+PyJqqEuU+qO3pMHy7Tu(B)3t*U#>7SO7x zq9}u^6f65wo2*!0=bh(4QItVdnw70#lxjiywX9d7D1)jDt3+P20^;O2mqJzAxn3Vq z231*BwhucNYJ6N(T~U-V%9)wvSdBDgnOBKl`8T7>b7re4*xpyl`DVgcIdeI`nNWe1 z6*m$!?V|PBE{ZbPii)i4RT(xEvSXTJ z{h!HH#uJ32i+{%x9QXWbN0lrhQ~ovN(nnUd%Z z@#Vj%_&3h%G>x>qR@FB;N9D{_{YIx6E3?7kqkF3T&Q)+n6lJg#)mhmmzXW4?IG+lI zneX*8Wl+^%Wj~pXckXxR>P{w#GN@{@viH+n75h)8gm)AdMHy7JpsWl>%I;FtS`=ka z)n-Lk03B(XU2xvhjuk~2RCQR{8J@rK_3>KP22qqT${EwTtU`XuuE&|GrbBIC*Y%C* z4LNgNzcH=P%HEqo)ri?d>l0>yH#(HTRy1H`=T6>dwWq4eD2g)JiiWI0zN0nbjJZMj z?r05tt*9<%Zs^yF#;oj)DCXVY4r+b+ilPkGrwOZ&d$lQN++JRLKJ1NSDUl4b7S(Bb7mmz?ENH)GT4e1tU|utTXN=v8BRN9Eqtv=xzHQs z7JjYxot60jl8??YQ#f~rGNLGht!Tw6o~UBsXAaU<^cF=KRINeXy7Zxts`a8MgQ^Xv zQVW~xQ}tLBWl*(cW!KeCpTc)im2i>Q8^@5 zy6sQ= zOjWogUO!U?RWDX{^=on^{v=h|MNtM-Z&0<@Uvc(7HAGPcRUc4c!cCs6W%Ut78Ka!} z+?Q4T5a)A0&d^s=s2Ctj{o3rKPMd|2=QRIn%^+pWP!4^VR3RoOzgE zeMYddvv=I}an1;aUgnJjWw2LAva(lY@7XK+YAe!+q7150tn71KukT)_Q}vrD%3#|^ zvkLhRJBBmv9d@*@?E~b@qy5@GmX)1R8^^VDKDA#eiZa-WajfjSi}K|j7t&T-6Ga(R z<5}4r3wk)bfU3yLy?&+)stK&@{o-)Y{fKIb|2pHV-n{Xwt^_ipqkDqzN}o`qLt~aWpxup8B{Y^ z*&1el)Bm=r)uJeaJvNh7$h+lPoT+2FhI*BbnZ6#oCTE`M*JHC;nHLs(G+g|4tk&n- zm0mwn23s+QRU%P2f_FIUMnO@O!B)&=Ro|$ukNZ5%^fLw9JJDQUD>}-V=lZo`J}Y}I zU;U$GJ#ED#QIx?}EC97_?+|mTg_1TM7DX9U3qe&*5qG_+kD@4pY7wYx?XNhiO@>uo zKT`&KY%#0*rcShOCYf2?D9Wa9(6C;I#z`wuWtVU!mZ`X1l@|MYtgf7Sv0slZWo1{S zjCbml&{hlGD2g(u*0Qo|RJ)iduc-PciZZCyv9devOHUs4SCwLo*N2ob%2}V+ zv#M|A*4MAo4V-b;=k>l>S5D5n-fz}zWM#*6`Kc4;WrMxqI*OtUwqg@2+x8`?dY)G` zT@+pRMYED9WJP0%h$e@-l;}SE49`J+_rq$k*vM&bZgR*QU=vtC~L-% zYPnUF5JeeO`=G3W^QxPTwJociD9WJP4`uCd8#kA#>7pou>Q7d7t{#fHGrg(Uko_lDLd-g>W}DTA#z z%*w94g^Fcz?u?~GQ3ll!P$^2B{7=j3B8oDojV0TcZADQA)frInF6M2eYN9C0pgPOSKIc~66~|HAMNtOT zIZz94R5_|;-4;a|ROdl;uMps@b>V2@n}af_E`aLz&w(~tRyt9XL3I&S^C+X8p06N^ zGN>-Gvh$~1pR3)qtYA@;L3Npxy=qJMIqIwlvqe$HC}-APVfE3pnXcZh7lusm-!We0 zOhz;7?DO6g->f?#jk4zU`c5qqgFOD9T_fuCuapHNn{L3aN^-$r~NYpt`}z z&Yx~ues;#RfGEnKy2;9}KgZMGa=zo*NEBsI-C||ex@INwCe#{^6Ga(Rw^`Y}U+V6& z`>EO^iZZC~u(JD~hfxmXRrN{~Wl-H^W#`Yvl`FcainrP8L&~7K2P$&*%)L|<7eyIV z_gUE*E||Z&iK=#@D1+(&s3;9~;7h2GvU_ zE6#xLhpOr>iZZBPL0JRhuQtn!Sqk}BEQ&IyUPD=78Wyjq>YOObpnAi~t}VqY_i^S% z&^E6(D1+)PsCDg+JM%EJD9WIE2dZPgaLzuet|-c&de6$v`NGelnM=|3#wbygLG>@F zIC)b$Z{xR%q714Jpzg(OJXOnjB8oDoK7va2WaevCKW_K>kTR(LV`Z2q9}tZB9ygY?~Y-rhKiyLsz^}QhHy8Xbz_4l z%Aood%Bp;2M^Y{8jws5Y`i_;I^II3Cx~MA3F0T(MgDNsBJLj{F>{&}yUQv`m6@``E z|J*G4#94crilPjv?^(t7F2jKFmrpxycgKmM463NC;)#m*ZIpdl!$YDdgDM)7HN8um z%Bntzq716&P*(F=Cw8dHw%hAN%AopzRa~iI#)7{;Qq@cpWl+UnW%v74?+rFvS9^U; z7eyIVF`=y7x92<0J10d^230I5E9bfrb+oL|d%Sj0232fU_DSK%y2xWxK4j$fbIE5 zq9}tZJ}dh!Zq(dEJyj*x>-8aJP$ghx@8*eW<=LRBgec0OO2{gq%&4~&uB28KEQ&Iy z5`p^XpXiNMtq?^SREb&HtMcK9TMbp+7eyIVNkHAokUFKRc>BEGpbV;{tn3qX*`ev2 zdrC!7ltGn@l^w4mp%*XLvbu?)465X;Y`e}k8~#bvDp8a{m4cOB4~GvAvq{xmQItWI zl9g>&{>H)QRDHkS>kY~n z%3v!pvHDh2{l+gwsmdveGN>{`S$B8-oY*y$L9Y)fgX(8i_8rmSE&n*r-Ni*w z230;*_WoXRL&KL^R%=m|L6slMn$-AoE>#mmQ3h23DC^P4)y}ikc2Sf;RS?QbRb~w* zyo>aXD9WHJ#LBj7PefTbGv_h&fi=qswB2ZS{Vq5m8swRpu zsEV?(yMpksQaSJRdWoV8s$#6{`g}RrQL}W~bz`|G%AhLF%B~x~7if7y)n!qXK~;j4 zT@Qoi9y8r$%L+K`^&w?Ym1JdW_}!0bGO9`{iZZBvVP#jFds+IXP*q+OWl)uZvf}TL z*hf`&QItVd8p^62vC?K$i$zfeRT(I2`LpIbRGkw=8B}GVte;wVe>amidqW-Z`j9fH z%0XE@#vgvGWu+HI8C2z=tTTIRnu%=3tGX!4psK*ij`F*;Rh`*8P!wfQRb&-O?v*cx z)p)99EfGZ-RF$BthfO+}JHD;qF;SF3RT;`Ey>@78RWC$Q#wcfJRfW}kQ$w1IU;dWP zubhc)s$kzrSMlvGemLrlP8Gl1MO9Bp+eg*B<~+4!7eyIt#c!W3VVBLjrz-YwZ*(Ywsu7fRJ1F8B zRRu*+232DyD{10aM^v>CMHy60psehxY8F&AUKC|eHHETXt(#Xy)ecdVLDdY(${S_8 zGglvoq716$P}cZ+4YO)lQBQb%NEuWupsdBIGC5EEKZ&9Ys+LgJ>>lsZX;}?KQ3loT zP}Z;Ex|t=<&W+)sD1)jMl-2w1MdlIIstuwjgQ_)@)n{|+JF0Goq714wtn552*XUh; zRS`~leMlKpZCTklKRC{v#@6Q*s_g%RICDQmhyM<}XkJ^|asNvcWw2Mfu(IzeS1p+BtRz34@y{P*QQ?bV$#{Y=4j@6yfJ_AYYfZhmd=!OFg=m^3K)ZEgD$ zQIx?}^aNGvr`Bdl+8#SBiZZBrv9dkZAk%>Ls{R#48C1PNt?GNCn5y)ry?&+)_E;ZQ z`OI(AJF+kTt=fG#)814(k;%}}$Jb+Z<;;EjdaNHS^HPJ4m3hK8*821nMHy^Ge^&NR z9rwVi0;)EPq7145tnBq(F>`?Pgm^;~Wl#-dWydt{k5%VtSrN{7Jw_Q+gIL-3VL7i(_Y^JJ%q9}uE z7^pDO?%!ASMigaG4QFNhujgIvv zrcyOP6lGA20=2*7TeE=KYjCY7%AgtzDn`bt6;<65MH!=XpN#{jPGiSe9r5!F@9ImI97Jn%?Lg+QR|aM6lJg#<5}5f>QV;|PgYe=6lJg# z6Ig}Zia$70&S}L2Un@q+nJ4(QVj?ShoyL8-#tfz%i{+vygRPhZ>S&kS<5XP`MHy_x zWL6=!VhU&6v6$>@Mc{dFEGGN4Vk#>;76m`lbMDJYMNtM@F^!d-^KITvAEK?OD2g)J zis`JPnW~U1P<7)b|L1}koGETP(tge{-PekKa^~rNt(eKmUbzoq4DF=#SuBb&*os-8 z&iog}Jj&Ye0Jq zG#8(p8*4>T#wcgaT*@ls{pvE#bTW;!`_-ks8Gc31ywq=oFK1=n2E*7b+liUXo3gRNN0%3g8HHvE)Z)hkhy zLA4Ib`eo0UUsNT!?DaEcP_2iuM&xYfyq72=iZZA+Kv~n<>~-G3b`eDxR2!kJ+ADq< zt2LZ2iZZA+L0RKZM0%s@lqkxe+6-mo`|#fB`A?!KgK7(umGercv|3i0D_$Q`2Gv$5 z>xY5)lB=pJiZZCSL0S7gW*ecZpD4bqLBzoM28qEo;9h%Ah(7 zWqp72{uWg)L{SFS5hyEu@;A*@#lPVzoDpgIXqE+*It^vr%&}yqs>-4$gX#>Zj5GgDtg4SF%Ah(6s>Q{G&VGJ{D9WHZ z$I9L-Gt|A^R?E5~iZZCqLs_HWwk)nH+)b}HD1+((lojc(HC0t*6Ga(R7on`eC38DH zUsn`mP+fwuu6DkCNy{28iZZA!Ls?}X|KqHpn?z9t)fFgfTk0gvDBlxB8B|xHtP0^4 zJEI)+me+@rL3Itvig&$!21On1&K)G)ZLgmxgKfX-E6Z$azw$o(9%sx_<$E7~*Vp#4a^|~!ZNJaTeqtCcQQOMe zik6}%gY|jvKh)y9^Gl)?J^^*_|-8E4$_`pZ|JVshrc{Oa?Z zm7S}xX3Ed!^-y0wivlTYJFCV zqKv7J^RGF)WMx~Cq2~1ls&0y+47TDGtB_mqnln|+z}Po|uY9eDbk`fNSAMN{!^*rs z;iJ--H7m6~Sw&F>Tk)2ay>?#r`n!;-TB0a}t$4>Om8lBN@`*EMm>Ev>a-UD%bEc{p z*aTjc0^a#rF+k4z&aV~!va(}w{92VMTA#V1D1)u|z{M2)pF~jx)hAYV%}kadxAUi>+K8eIDw^s+f%Z+szQTLf zXbtCxq714)P|dUdnoZROQItVN|Ab>up#2jEcZw#;tLoePUT;ta75y>Ipg_CUJs1&i zTvY*4ltD!kLCebYGWdw9_M#|*Dm0XpD|R_^BemRip=AZ&1c4=l&j!RmfL&c+R+MR5+?MA9>}>;X)@gpBlTXO$1hUS2=D% zm7!XnI-)3pt%%6VzU`^mwN)=w!$eUATM>y>XHz5EflM5m`knvP{ViuEnvSra$wl(D zVw0RXl3y#nV`Z=I4ioM=SKI|rl)+X+26dvyCTD#P`_LN;%Akq@sz;7=UA67mMNtOT z_pEF`?=FAXxpo?gq7162pjsrU?Odm$MN!5mXSPIR74mF}&KdXflxV(w-X>>`=GV_Z zu(IPG>1G6H_Ffi68Ei!iP+{}$UP=k?2=~bAXUbqJVzLT(PaBIfP0T6mo;Ieh71`v> zG5uN*8|riF@}nYJpGu-AgRS_Hl^wxBT_%Q6)ms#0P{mB+IXCKVlrW+FXQ^!enrk4*RSpIS=o2yea8Iaye$lP?2QFwus#V`9XFd2`g+~F z|2kyxzj70DW}~UJd^IB=fv-NPXV3-y%YV>B=!OA)v}@}gT0!VRT61;+K+?l zs_G|-GN_WUN-C;Pz6Q=GP@6isq9}tZB`bSh&hf*<7pnG(q7153 ztZZ)-4ZM+B)mu@NL6sU*_)%qVtIF`y>kZ1FO2f+5@cN^mYN{HEq716EtmxXI<6*vv z!Kx;Uq715Ztn78#YjzoDybg$>465{?lC_EI%&0e_D1#~ksG&gv{?i&J|I6zQ%Am@~ z%I-I&XS{tL6wP>-N8=j-@m7-0iq~_Dl;qF8@r}ezo=@xD9WIsf89GM(3Vvu z$7$y+`dv|!L6sHCiV`8BbAA2r%XRtSp!$iGS)Td$ z5N_ixRcW4keMlKpxmnrOrcIHB=~Yz`MHy6iSlJa|Lb^zeR1FnH8B}>eO&hj1jjG+E zD1+)}P>GXw-KpxGD9WJ92P)OTHN#b9{M+jd%Am^6%J#;c3-pj|SJB3zD1)j1sAruI z6jn7=6lG8qWM%vCWRFA6v))NjltEPp)TQg8hG<#gUU==I464GQ9{=*=Tvho*Q3h2J zP&Xc(a`p)wMNtM-QC7AOo84RBJbx_{MHy7ZK-DeQs<+ngmMF@gD$dIG;h1KtPN<6c zkJlTNK~)0Oq{E%3sVXCiGN?*|id!j$*#g_S(N7d*Q2hcb=BsN}Rc#SP8C0cM**?7X z^h7gNFGNuWRcTOXOT|i|D#c5$Hzgy-}Au+Rl`J4 z230vw|7h|`w~vna}-Y5--$oD#~}E!Po6 z8B`6StRJpayrE@{6h#?Sjab?7S~7I)GF96|Q3h3GR(3|+FL&aus;8nTgQ^LrN@Lo$ zQx*4}*N2or)s&STuL#Y4ov!K^QItW|49e=AFmWGMokdXwRdXoo^2e~|QOwSb1)?Z} zss)rar1vA|&FxuHltI-J%G$F0PiI&8&3msmD1+*ER;gs&92N0DXS_0tq7155tTKrT z*Kyl&N_az#FDiYUsUYQxITs1?WWInT={MNtM-TUN=vq5{IC zi8Eho82GQ(8Mi^7l~HToh$cbzqfD%BsFR zZ&Ot>MNtM-M^?71__20;tLm&M%Ag7cwd_)yDXJoT@OpzXs5-H-?}$pzJX}K6&!Q-U zsxzqY8~Zd?)lL*;P<3IISb8Hyr$kO~EEGi(Us zQI7i2>kZ1F>JIAi`5w;fEhdUGsCuwUB<(tNb-`3EtD7jwpz6uW?qG)<%fC+5Dp8a{ z)r*zg&zC+{!+9pUCyFwtdV_ipFCdbZ74JW3Ks{ zJ5iKDH3G^SxFWT4ea#g`8B`-##gVJ>eU<;-YguPRQ3lm0R<;il-izz(mcs^mEu;*p z(X8x@+H*4AU@a@BD9WH31FBJ|0tHny6h#?SV?iBgeRi*^F`_7gY8)%G2=Y<7;q5T0 zc8H=3s`0Gsw;B#S3#zZ`ktoWbngC@@JipGlDx-(;`j9fH{(!P#cdB?(%gQH;GN>j( zSz|kP->j;sD9WIk1Z8zjGuF9RjuS;0RFk2stbNOvCEw2ZZK5cHY6_IKDbHNzZO?sC zltDEW%DR~;mh)`>eUMiwWl&9nvYIS;Sw?G^M-*jHO=o52{Mdxyv#V+(iZZBXu(I!a zU+zEEPt`5=|6vqs=cBpgK8G2Tjv_>QuRUp3`!FN4tXQGFKBNq)MWD_s3K*!W zfGEnKS`2FK`<)+EH4{Y{R7+Ud*_*D}-p8uOilPjvrJzdZ`ewAMeWECXY8flr8yWry zG#fFy0=yAL8C1(bm7Te(p{j&oJWm-^D_Gff{a0*H3sogVQ3lmYP}8FanM=*qu&XG_ zpjySs-p%_)-f~XWGEtO4wVIWk^Tqy1TwK*vQItWohLzoKlQ?7~0IaZ!{(wGqmS9qP?eRYBoAPZ?C3SlPWzqddu+XQEu9D1&M<+ofTk)D9WJP%F6cqoWk!SXjx}OQ3lmERtaUbN#C*m4OQX7d%Zy!RNF!Q zyZ5xYKyAeA1MHy5(S=l*X`F`<=s^*HK460qM?DbV>XQ0-=wOnT$?+so$VnQhl6QItWohn0QLRwBzo=j}n(2%e`5s=ci2jH=MFXiqJx zz9`C|+Q%xH)G$tr3S(4F5JeeO`$0w7F!{Qw!=fmI>Q7cFq^$O#<2x(cCsC9^b%2$* z6#2MWW}CCxWR2+c24zqkWR+f2+DhG=vYLvb45~w{Y#(k7GjTR0ykoj3%Ah*T%3dii z(}#Mc>ZB;jpgO|J+0s`H>;PMLmKRR&R%L3IICqErWdQdLtFWl&vYWoPf+ zb@^|r8Y+r1s4lUxyRShtIympKcZ;G7s>`hGc5XFuOn6lGA|fwH=sUuU+8w&z!fq716Ltn9k6wS4TOs&0v*461vq>?m(fT-AB< zjrqM-DrHdJXJuEmz^mo*Ygt7^Q3llmR(9u*HQ%9Ds=A1x4628$?An{FZd~U|SuBb& zs2)LCg{n=zqGjC>MHy6&p{yTQ2Rpm3C{exMpbV-ftn5?3)8OgOzPG3-%Ak76%3dj( zN2WB}0XxdUq9}vvFIK)e|1!LDEiV^E8C1_eB}q|vrj~V66lG972Q|F%F0=KpHH;q3 z`x#|W{msgb@}}3tDyS+ZiZZBPfQs4gwDWY+Q50oR{lm&$%kA%;nWkmU7eyIVFF~Em zKB$VSOQI-)>J_M-h2uJJvA(0fsMQ>lLG_xIog1MZ=e(h16%<7oRBu2nowT%(s&=9% zgX%3Sy8=vH9%ihnxuPh8>K&-O-K$kqbx{;$P`w8=Hu5p&z0G$&c)dXxRR6NF*K)&! zcTQ_rg+x&X)dx^JyKXd-%g)2jq9}vvBdFiQr=6~9g(%9P`j1s&9!>MN|DR9NSk+xo zltJ|g)Prw&IxE1BF}%7`230^9`qqant7yl^&XaFhQItUy$jYu8tG|0=PVbcv5YSH) zWl)6z74zzngQ~WOq714aP@7idE34{-D9WJvhLxT3p)U@~t}0bbudb9q6`GZuz4g{r zo~){xD9WG;!^-Z6PBz#wN!3VElrhTr^D<#sjWnZd9w@)^FX4vc%*sIhmvF;|F+<45 zHaT0)+!aL`?A6$;Y&qSUPjq_q+aJC5PzKeHP}Z+0qYu=wvWTJ#syI+q z+?-XNmA1Ml%Ale*Tl(+xRcROPhL+V!l=t?_oxSl`{bBkrndy-l|F+NTKko54bH+3> zmGoLXUq3ICGspAm=LD>5k5$T8$+-`n6h#?qMM73~&X3P^%vo38h@uRtM4<8yo#^Z{ zQ^)Z}hcc)Vv$E^hvSZsnXphwtMHy5{Ky~W&z%0skJ`Wc~8B|F@HR<*HaaG$yQ3h2q zR`%N2QfmJ#RZm4x232w>Yg^`=KdXux*Q+aKP^Eyfnq8hyM^!0NltGn}m3^1nuzAX) zs=A7z460PD?E2iJN1Vl~7K)+_s?<={%8NbDsyZWzGN{r(St}m?l2TP*Jg+w>gDNd6 z`x#Kfmhj8V=#E)%Pe?+%$cV_vTL?hcuJt3>knUO#8@TP3ovvh$}@ z&WtCtJ|#p^2J4gcf2dD3&b)N$lhs$Bj&kO#e)Y-D%1mND&iCJEwjN&H0|I7>q72q2 z2dmy@6*Vtt1DYmUv(SGP&B>Xa=42`4>^Xe(IV)$*;a8trtn7>$@_m4_6Mip>GC0aV zv9j0K^3o9xYb(+u@Y+KeRJmFC_FAbYK2`OrD9WJ9!z!V)sY;xjnN;-=MHy6iS=sx^ z)kQ7etJ*AzGN^uLW!v>2UIAw}_)HXKP~~G~_jM=YRyLKjV;U!+_cO|%%FoKq%uW^C zK2}vi6lG8qU}e{h(pQ%|d*hCxD1)jXs0ZJ@xT|F?6h#?Sg+LYU)~LR!OQI-)sxT}2 zHmvA{U3XMPO62thWl$AiW#{4JNc{?{Dj)uQI8*MM zfPfM-eCDX=YeiQ%b49;aRAyyYfV&0aId|Aeq9}u{sKUyQ``+qf$7w4Li=qswUqR*S zaxJ^6_o66+swyjcrKD(k+gaICCH4B5GN^uovfdAgT|>+IRTO1VRfDpcj*f6$)c{eH zK~){pxRu46z0F!tltER4mA#fjP5jtV%ep0sGN@`oS-ymjtqYSEAtn7Ft zY!}B_ZSsnu4652t)}m5{ox4K|QItVd2h@)vZfw*VP8LNORCQU|-q^hGZF5xzL{SD+ zJyy0|+uN-&kNdVaUWuX%s`{+#jEYw*%OF)rlY5>rs2YG;-v1Bts@0ZNK@??BHDqPm zm7wd~nW}n;q714=tZch#w*R?@s%4@mgQ_tr+pbC5w%7HRf|MX230#&_D;Pr z`QZ<$E{UQHs`jkxe*Vr%Ao4N%GNN)$NsfdWfMgiR2^B_yWW)i0WDQE z5=9xKoPAU(U3j9LIoR(m+?kcVF4DZ|zEeFm|zE5O++xjSloPKlxn)@LxQke_abaK`y0vHaFmC!vZH*b%E*GMN{XTks^OqAmh0b7ReMpC!M2ZJmBWnr*Pm`ia>o5M zXN0fq)8)(~{MtT>mED2NZhdaH)@QdU%3v!-v$8$bI@2&`4gXsdWv~@vScTk*v79OA zJfn^AwIY5xZ!E_6wPGAAJEJ0gf3b|VB9AD_U@OM6vips?!?R>o)mRi|uoV+nnU@;; z6#3u1WKn!?KV*!Dl`TvAm+6lJi-rm`AoT1CCl_4+fj%QamC ze?RRs&a5@RZ10X!eLdDj&OFtx$ELHg&*uHdcQP+Eyt)Sjj1@&0Y{d*#wx0{eo-|(7 zAyJe;H51Azmm>XpRRI~iQYnLK7L+x1#6feZ*&5~$MHy7HStaIqVBX9=xv@i4OHq_T zH3!s-TI-#wV3sJ#80Fk|=CTU;s+`9ecWs&L8=Z4<=DB{OGoO`xPH9!%``dfHM!ge7 z8EnM@R(5TP_~%?R-E5Dg$msoyGT4fRzOuf4_guso_inY&*NRGV=7oN(Sj@^^DfQ0e z>!tPSAc`_rpC$i8eU|#wXNj*qGv&-n{OYremF=G<1?IQV`s@)!8LZE8Rw0k_3eLD| z?{Z&#p39k+`_*S9tM6p4w)r%5rPe2MCU3kbgQL8Pm0d|*ZeAX&Dyt~UU@KO$3i%U_ zHJsUM3Qi$)TJ38^4LS2_zgDbe6-Pv&v_Eds`t%S*8EnNmR`v;~{ipaRRjm?58C2_8 znT3FlR5^bctLmmG%Anc+WevVov7M?YnZ16d462P#R)h_4HmS-liZZA+L0Ki!k24QB zUI_sKtwd1<)n+Iw&Va+mRLu}Y8B|+96|VGRxT<5KD1&M%E4#Lgi8SPhs((dM2Guqw zYg30E8C0dp;d$b%Anf8%8qi2KObIGH9!<)Q0-)8+f^s}kOr#O ziJ}auT~JozMv0smbz2l=Q0<1Y0*aM1w?sS2QL}nKqYSD&P*#`zoy@ChtMZGY4640Q z*38urMyqNiiZVty_ojWULf-T5=S+LEb1*l5KKA*p_i1wGeSX*bpHQD3Es8JF`ur)1 zGT4d(tn3qi|5ihs{m&~=ltFcnmA!+6I~K<*mbS-|XY+nW8EpF@Rw1w0hdJYZqH)OA z_VRM(Lw;>P0`+6ju%3ys?vI==do#Kr96nWBDpXAxS@jB^OpVO@DD4T!r zYXz0<9fd?u27C1ksDj_sbguW`MNtOTSx`^99lWJwO%g>JZ2LJ@G=g6ri}RehV=`f- z?&o}M-z#T6=hyZNtnA&qaO-`}lhh4Sl)?I3{2%Ibi8JmSkBh$ggv;Ue??u1*TxMn8 z_KXUh*m=8~QWRydK3D#S`dsDAbEki<`07(r&V0qMKG#@9mL4roFzc^6Uj0Q;2J3U3 zRmjgxH#p-yH(mGDXNjEox?g>6va;85?!xz{YkiK2qKv7J^KY!&Vr6%px$e(TqUv8! zltFcym0dIAPVD78qovI0jUZ)E-C<>SR(}`F=)AA{O%!EN-DPF3!CmFoUC|m27DX9U z_gL9CIS)tNeXDA%D9RY++?(#R3VC!MaK;^-`@Ye+CTG6yH#!el*|xu^o%k26&nHoo z!B#wCW#`zO`v@%*sA#=UAbHSDjCs(}|)C*5?JQkniUIaK?T9df}^2RXOtuzxupnW&5XJ#UB=E|8x{Z z8SK?ptn3_XQ})bRRSQH>23zr()jZQhdnKOGM5D@S|6lJg#?^q?0b@k)A%jT8NE*7DX9UA6VIywp}szZ;<;_6lG9-WM!|f)x|d^*0NrTq7174 zSjCmzNF6&*4^;{Cc)dXxqns<{6RRyo(JFAh-EZgo$CNe$L4owoCEE6X@{MUlIrAsK zF%4v8XTgly9p-C&+KQqKwj$L3F?JWwRvgP3fDdj5cL?qh+}$C#b8rjp?(XgZf;$9v zm*5&8xVr>*mp4^YwQK&n6V}^n<-K$7{lDq%nx3AX*$2W(+ZmZ;eKAwBL{SD+2xzOt zi~S2t9Ti0xR3TaE%AdBzJ5LYailPjvP^`3v2m8BE!fx3U<#+2$8C0QJ=^p9*_^QXO zhh;@k22~hV+QT`E$AvZ3SrlbZg#|StUV;{;W{aYXqdYSq9ILO+KxkLp>*C1Y{AWUV z&d|#seOD4L41Fg-pTlzGaA6Yv&!6a_zf&_rFumg5=GZmf`twYb`}b~o_Zxw%^xDa= zGWQ5mi3_-OrVNffA}c*RF*;TA>;cM)q714?(AL~Zv&&jry+lz4Rb*&uMbV0Xnp!4` zGN__JTQR2n^T^bBQItUy71|0nKG5@BWXOVUH7J8B8niWHV6ZFJR%TI@K@}a^T5@~Z zXjAn?Q3h2ER>|GT5U^)b)^Mgqi=qswn5^_pbR=FIXR^Da2?+R86lEOcnX9o_EpZ-X zsyXddpFMqt|6GmD8Tx&_n$o9OzPb8RjvUKxuEt@d`>5dOoB@evk+35`vMHy5-vC?tvUiEpBwY6Fl zWl$vmRb$`z-ent_3R}eOD`ilnWTh+ZnDRwD&x096Q3h2iR(fyhe=kN6 zYpaeZ%AiUOZI!)|p|`1_q9}tZ4J%#MFRiXs_w}zBKm7bN>u=VJfp2`;%MHy5-LtB4G+3ReVbVjukMHy5XSS6Hs*m75v z%BJRsq715xtaN`kI^n`;rp}3?4601fR@;X=tC$K`%P-SMNcl_EDRydnW9alk7 zltGn+m7cFS>6Yd*)jK{txxhm(0q715Rtn_@1_<8p}YwL_C%Am^5N_TNv zZdP_)CF;0>6?cE445}Q^R`Ho#ZkS3ViZZBjveG#}_~b3m{j`QC%Am@{O6SHu`Mv*+ zr@^8qgDN*Geg0~BW}LGH)NySSMHy6iSn2tyJv)|XcluHkWl-g1rIjzesq98;D@h5r zRmz~s$4bW)GhYqQ{i}i~%Am^6N}rA|Ui$p2wKYT(Wl$Ah?K*ztaCPv|M6$ZOL69j)W`XM0VRE7|EZK) z-;#b~|Am#V2^ou28f5(`Ac`{BpVI%2{*>X&3r~Ma`})&Vj$GQWKV?~IeYSL{Sjze{ zMigbRKjr=({VC5GZ+*)7`m;-pT+XjQ6?{jgiUxo3HjVY?wkXPAe=4#X=Lp(w{rhhX zRpN~I{c1&Df1>>2p0A32{i)1KSCX-*8_u`>WEMpkr$3&z-&I)YcM37SUiCcdH4{Y{ zR8^s^`nxkHwzg)9q715P&{mPByQiD_TNGtbRcDpNsTO@Y?p*BItA{D=R)aFAYJggh z_T74GE1xLJILfn<1hM+@`^=i02?}O^-YUpq706r4l8G=`oX)ex}2eZ9kSku>-a|TRgPT8Zxr=d>H6G#W#l*3 zpQL5nb3qv#MSWH}ie}qO{%xv~D9WH}z)J7kbNBc4eA_ip6lG8~WTid)9%fxFYip}0 z%Ajh*O7Gp1$JPoo^-vULP&HMn{hj`GasrmPw}Gr`$p1^oMObvEOS_qRHm`ewo+IdW6Kna~{i^Xkc|P1c_y zq9}u-Xu(Q%1$*niOJ(Z4D9WH}$x6o_FG-Zkrc#x2>r5F`tyt;oPFQwRQ&ZJMQ3fm4 zn$?e2fHs_|>RAC=`zkh2j@;U>Vr^OJbLEO{H$6MO#iA&KqiDxU$G#!__x(1ClcFet zqiE0SfpgAj{Qv%EJvwkEtW!Rn!R>vc_$o(k?>CB$tmvIOebU9F?XY_WoVLolKT!rp z(FxR%Hc^|IDjcY2XN?apOt zttiT%>c&c|(W!Hl52mh(q716;taN5Bnft)`MF6c~=nC#nltI-4RO#o@hMUSNiZZBr zveNlevE_l^O*Ifj8C1Pk=_)!Ycm&V4+havh#!;TtrZ=k|&b)Bq|MB+-_2JAk=i1RX zN4(6jjdft1NZ0xx&Cly5*tm+6>dfpf2owdY9QBD+PP>p1z zZG9Ph;-sl=q9}uE6f143X1r6*dwHEL^F>hx)o5rd=9?k8O&u3S8B}AStX<0Xpqd12T}a+-kEwT}D1&M;v=#WZP*ziktGG3!45}&6 zR`B1FIG2acjWVJrgX%YEE5(x=3r%$qMHy66p{;N^|LJXNt|-c&ng(rsE+2T*)KO8C zK{XxPnjNW}XHW806lGBT4sG=sGvC>gYBds7b$_A^su|E$s8&E*QEwgZ zWvYlM%Ai`wN_RwMSM7Lds*5PfpjyRB@4^YQt@E6(`JyP}D9?4Vn$?e=+SYK!`_#7D zcU_#2Bd_+mF4nTrC#307zkjn)yc9(l9K||T`nKot?Y_>-PMrx!gWR7egQHl_ims;r z-q&s5%v~qr{J@{}zEM<@Bd_-x#YR?oE(-pdqPq2`gDA>ie>SlyCvE-v-@LS$Gv4>= zn|%G5El1wu*Pkt{qR0qVwmavUhkHd)2CKT2Ra8;a9|T>oQ9Kew8C2V#tqY~MR5KO5 zrh6_ZgJa*$>a^1q&Bb~TPUrJqX?Jkujk5sjy1Csq_PlcB?S5n5$x3HkiP!wfQ?PjIt{mI7&TTHDKMHy6kSm~;MWX!aYrY?!145~jt#ff(~ ztf?@y+&WVR)m~QmMkslmS)OWS7eyIV`&j8pd$8NN`qowxQItWoA5`p{Lp-x?x+uz^ zI>0KTGYjYw@n)z3*47D8lyQ`2MLNjp$Jfpw&a`*t4?Qo_=b&%?yp$s!^qW72S?M#{ z{6XcqSbt*IcI!+T9K{h z9(uI&Y3;V*!4;{<{SHLIr1^Tv7cb2Z-mySnlZ`xvr!afa1?*B(lhvSOxPx- zE{mcJs*|jo2TuNM*gyQKsc)hvgX$D3eYX+2f6CRSlF+8i`A`PcX;wO}eJL(__QoYe zQ3loDtaKGE(4x))Ypb;=%Ah*KN>|Za8Qni!$sG%rEQ&IY^33P6tj0Mps^h`p)T2Ir3S*b9$bY?&}JV{Cw6%aYGbka1<9<=?ZYB*J;nU12O8lb*2oei_lh* zOL;xd!lgt}2Gu2KD`@@2J=ViMq9}vvGArHJjh{celc}|$D1+(>s24Bmd1k^xQIv6% z=j>c%_2ZqxHO_o-&YtrFf3Et@PNI5l#jg6Do$IX9iHI;`sAmPJB#JWFpBt=x+@G7A z@xGzD;p@*(Ir0s^{@h}v_uE>7BHpm7E)zu=?9Xjh(Vf+Xc5;P-wm5Gyoc{oCsP1s4 zkW&bqi?@CKxhO}z?bn~XtP)Fox;|Uuc_;Hu6lL%%-(#h7bvKHGN|r@ z>UHnQE>lfJQ3llmRtcqtd)LoCVQQu*%Ak4(YWUbU4NUzliZZDFVWsuUIHXluQ(+sp z8gik3P?acirSD9WIE0%}O)`OenE?N>m+Qc;va^^}#a zHqFu|D`@JPD9WIE2I}Y7zf3e0wV~T8Wl%k5rOyt%+rCH z|M)vLUvkF#cWl1!&G7DW zdIRe9rp60RJrqS5RBu`7eeisVxYJBUZRFOOGN|6M(s4~`RLXfQ)|rr76lGAoXQks> znCY5lN8MNyWl((p^=S8E&kP?eiZZA^veIz{b>CIjdbm*(Wl()$rQYn~{|po+js$F*hE`GKbX7DX9U zfuPrN#T(y_g z^n61%Q50oRMFABvWm3=DyH^xtP(@{><65|8`rp>WSE49`DjKU8vi~W0=aaJ)(s`Jq znfnuEP(^2@&!(-r2Rme{oG8jT%5xWv!Rov7`p#LZ1Hx7wvd({>8Iv=uLj?phls?4> z>--1)beAK?2%GqS{;V1O4swWK+MntL2YXia$)eofQ}+ILUu;&oX69K_V4sa*wwZlWlIDk-$pCgUy7 z)5LsHltGmY+A5y1i03KtFHw|1m7JBcyz-~k($77thaW{z22~1H&gH?MttoqXu9So= z-5OE`RZ3{<_Ox%mT3ba#Q3h2iXlvQ0+Ph6P6Ga(RsiCcsW#)U{5seZ>8B}SYt+;3M z4z#w`h@uRtw5)Vbk}`6M`lil`q715ZtRhPdN4$H|!qgX0ltGmq+L~RkXc1FMTe+2| z462`@t?6lxd*14o7DX9U8KAAaPZEu=w%UuL462OKR+iZZA&L0eO1k8%p* zjwT>rmnh1h$_#CN>=8K6)O}HuL6wD-zNd{;Xsfg2Yg>V>-Jd9fDl02pv6uE=|J_s` zQItWIjg?+sE#iKiVXB!Z%Am^5O0Tc>!PcxdHChy9P~~8yJ)E~{w(}L1j%$r5%Am^0 zN>}WB9m8)kbxjmyQ00QQ;?AD&(NwrLZmX0*l^fbhzskKT+)E&bD9WJ918wancPNXs z)kqX&Q00ZTW)3Tz-PAZyltGmb+KN`N$_7*0MNtM-erT)g*GC;qJrG41R0UY+3J|T} z@>Hgxw{>es8B_&X>5TfbLCis>a*3i0szR)EMpX}Z>TL0JZqyY;8B~Q?>HGN%C(gAu zH9!<)P!)l;o@II%-qb=-ltEP#+A0wB?Os!dMN!64p50(ER*Re|M0Nc4??H-l=D71R zQulVne7nKNa^zxuyTKBy^lEy1b3jJxPhdN@c9g+Ulw_ql{OT>5A2XF(6lGAAVx>F$ z(gm-KHPuoSWl;SB>SMYWhfV!1iZZB5v(nY?{;O!7nQ&ATWl)u26<_XFo!7km$J+WJ ziZZCmveI!qUfYKg?m^PFcWX!)M|sX^IacMInDf%$KmM#)dCqip&Z&N{SI&1%Ysrzz z`JK}Wtn@u?{BRkL+b9N!q706rBCEu1w*x*7+?m$YR#B8eRf$z1QNe~Ut!C<_D9Yg2 zE3+ybG9aL_Ba@~K@y!3}rV3}aI1e<<OA3-M&%=RV`M!icB6;%5zU?Ac``mYO~UH zK1ad;&q^{%6lGA=VWpLywJ3E~O1Pgjq9}u^E-S4@>8Uw9E6HV1ltERGmG9uTkE&XDsJkwD9WJv722AWa9nd!kvh9IqztMithDl<1OF*x zDz_-gplZrW$Mr3Dv^S>ei=qswX3$oK!3|cL8Yzl0sG76VdDtQNgHxu~h@uRt7OeC= z($Lh^=bO4LiZZBLveIfi+P%YB40O(i>*D@I8C0!U>6_#!E7LlKQI$~?Wl*&S_2%fS z)uw_(Q3h2TR(eNU-nV83Qv*a%231>Dx*pcvm(5f8wW274svRr6zg=4AeN%Bm6lGAg zXQlg=GGCv0-u49R>ehuas5-FHYxz#JQ7tIpelm!n462TxvJAQM*ikyH$_nfRaaKp!;wXUJFgM78j-uX zKT!r%H)v~6qz#_4oJSO8P<3ae*H@i0-rq89A&N4nda%;7{Py#fbJoL2q9}u^C$x3o zM)}jG_K2bks$Q&gZdA@QxU8v1q9}u^H!Gdd#86F{jeg0oK+oQItV7 zfR*kyCTzV~!_*^DltDF+mClVcJ?l&~m8geXL&~5U#7gh5OG@uOW~!7Z%Agv|N^4lS zQO|d#dWoWpqda@{A*^ybm8bXX??Mht@4sIi${Fu(1rPDb5bAcsYr`sqVi=qsUVg#!nk76Weynn~$2;V5;_jJ$22)|K`Vx`yV zxoz)jS$}eiq705=G%KBB=7RcIY==hm8S zJsd8IGN_iY(v_seuzB@OtrtZZM|rO9rL2B@buZ(L_ir^>>bowk$&r`(T^E0_()rW* zMOM$+8@!)eG0Na5ma|GAGvVWenw~vC9#NFRQLJF~(#x&H;Q(0lSEMlN3oif-V5UAYSNPu?q`Q6%Ai`qO6PO%M{hTqx+{t@sMfO5 zYv-?9*BY6M(cf*AGN{(E(%)Ll|FFzJQ$pRu;uh@uRtt*ms9bUbI2six+Oq715Stn_?k3A50-&~;pYiK2|7 zJXiO2RK;rz2K<1}YR1#^DN@N1JsU797YLNjs)XP!7eg`xlGe75_pi{Jy@Hn#g+ z7du($8kMi*)UDQ^WTGg8{n^Fp$2+~szP>SaT@+o=FZ^J&sne7J5xN* zgM~#=2GucEiKWh;v#jvE`EM_ZGN_KT(siT9)!gr`hf76K2Gt2x`h0ObYqmb7&WWN7 zs=rw2y0JG+a_91JYY-3+dWicIWl)`Dr9Ir8{mMgASwv9=)hSkbb!V$HwwS59ag=ASo?*4fIbZY?^zYxFp5=`9-^*~u zH&-9XktddD9bE#a@G zI*FnTs*9}j&RFYM`Rb+?h@uRtOQ71^9#zEDSy7Zhb(xi3gHuZE+HETIFt-|%L3IV% zO0oY#3sZSTQN~f8b9$B41Lu6weEs*ond%y6qBsrf^>fvCPTR#X$bJp10w zS>)Wl2Ly~3MHw8$4OY66JRKdy^Cob&D9WI^395VTV82*f&qPrM)h$-KLJq4u<$$RK z!`;482Gwm=x*xj~bY+gIDxxTZ>JBSi6I$*#ao*GjQItV-mzAyw`AbwtZEBM!%AmT( zDw1g`pvpWthCNq)8~F+{pl@=GB}FItn})hl{A~@ znQ@sY%HSxTuv+Qtno>EVxSeBwbE5utr}vaIADr@~b29XK;v2;kIr0;~Q9NU%Yt+@` z;haTRubr?X-Jd9fqj(OgPOWmDdv`8TltJ}^m0oc}6D+)DZ8aA~8B{Mp9iDi@^UOF^ z6lGAoVx@B|U}ovb*49B$ltJ~Hl~!X)&h*Poy%9wjRBu@6xaP!Yc)?WiQEm+>gX%4) z(=+1zX{w4S%Ak73O2;*J{?kgP28yB#s`spPT<4S3*kNk5D9WJvz)HszEXFZsiPgDr zLlk9DeFRlu#+rzxB8_%EWl()$rQ^!8?DzMk@{6Jjs?V%+T+tI<9%8DMD9WJv!b-<= zJ9@Dxre=tu463i7R?IBudCom5iZZCavC?rZS>N%Xwe>+1Wl()*rK?2Xz;2^Vr5xkd zkTR&~ulfuTOz)fv*QR}IDo7M%9OYRdgR%PYpO6jCnTk%sx>pDmj@DE9jF2M-3zztR z{^UXkR{EUxEYkj`)}PIyD1)O2$x6@ZwC9P7nz|{9GN?ka(sTN*!UbpJsB<;SSobH& zpbE`O?|OH7ZoO-&peV|q3d2h4++#-*=kZ$GYAK2`sKT<+YU~M~eY>d{q9}tZ94md- z^zq0W&wG;nq9}tZJS&}bVJf94VQoDTMHy5PSZOtuOc}G!RJ?KS2q}Xq5Y*W^`5Kri zE{Za!BC^tPRqcGXtEu*)D1#~zD?Q7PYKARuYMLm@ILb4_BeNRiOxOX=eC@rgs`G#U z_wE^mGl`v-B+e4TpUA!$en^fS*>8qNWu(2vGl)+I%W2HNXEMay|GZk~Z zTW89kiVkW|qMeyc6%j=lR53u!E!(HGsdl0$gDNJdkvX?`*43G!D1#~%sO}lJ{A_I< z5k(nPu|dV@-MxmXccLhRDh{ZOckg;;Lb3^N4Jm^vE~sl??%ubyDvF{Es(7Gwu1-GF zR3A~4K@}g=fZy65HuZ-n%AooQRHw1+8<@HviZZAYfQo)?jdSbJ6)EII_b1ArO2|rA z+DyqGB{!8>6lG8)g0>2zo6_G@Ls67Lm6(;j-$?Ous>`OvilPjvB%sR0`N^~TZ4*Tq zR7qLsI<~yWwkp=veNmJ_l?>Y29q?09Q&A_mHKYuxwU7B$}fsCs8T>%H>z9> zGSyrZWl*Jrw#LNjJloV{QItWI3fg*`I_^|cyG2n3RcdH!`=Z}(nR+aWGN{r(TVXQA zEods%WVeQtL6sKTiWR)>P*X)jQ3h2yXscP{OT|sK5k(nP>7lJzN2@x&8RGUUAYi&E z%Aoog+N$`ucpX#wL{SD+252k7=ucNoJr_k8R2iYI`FD!HF%@r$+gHk<$^>mKPM6=a zyC^P-GN>{`TYJ|G@%%PRdr_1@l?B@R`A#-xQ=>JUDT*?v=--|fBABiK-$tDFtN@2Z zQ3h2uXzR+mS~IMz*Puc;BDD1)j1 zE8Pw5OcNucsjZ?YgQ_63mA+!&Ezq{3- z463rMbVkh|di9j4oT4a$svIlb5w*xXw2`U$q9}u^JgCc{UcDs!fgQ&4?(QOWmY7jcGL=SqH0 zc2!s&jPpY)&mE#DgQ^ZIJVN$9Yy-}0a9(NXY^d*> z;r->v_5EgeLsrhODe$NEtbLxhSPMi^21n6|m98Xnrd0JjGaeL08B~o~=^gFU$9pFz z;eK9-q715ES?QPt{G92YshG1}PZ?BASn2w+xKpcAIkk{6qHKHhk{b|W6 zr_)v_=bwN7z4um}@qXLY($}9Wa^#kN{b>#TdDyYpH|x)LQIx@|wqd1LW!MT)cAH8& z$2}{Q!BMnj_2W^rRzJQk597=V&wY8QZxqSryJvZ*-zbK&()(BcIg`gz z+wLd7D9Yd{MzGScCp^&TjHxD~D1&MwE8UY^%+++IsR^PegK88j{hh9sALqR>wObTr zP>p64S4MIt_2wg{{t-nPRAX3aTbJYBaBj3(jd%;(pD5!f&wY6;s~_K&$8qMN(;w$c zAO4K>oto0AOSbu&MMH%eR1Xe%p&qU66`!m7UpRsb}34Z;V#7eKh zkGrHia{Xof6aUoX}^ouRrJI$dmp0^BXID zQfS(0tJ8*_uaFDfpD2T8c`B%J@n60-l}i+5P)%c{Gb-|eYiUfi7DX9U(?Q)oGsW|y zIZG5}Q2h?7Z}FRZt*yUAQ3llvR=Un#Z5!Kjcla)fGN@)kTT`azD|*INLKJ0CEnuZ@a!!9debw6PA&N4n z7D8J)$HnoCYq==OpjrfNg)B47^KI#MQItWon3Y~%VY(M;X+4ax#H|Kp9OYRLm$3Tr z`m>ZX-t}jR?|LsLM_%H0y)R>>cdJL)7kHi`8;YU~_UDiPM}L-c#{1m#hp#^)Bm`g2x}ywa~ft6Axl(y-_A(RRMxi=qtn zXAP^y&g^x5_>X^k?^@3EcGg#VGeDm;zWyX%>du5Ue*Ia;N>`*lAG0sA{uB^J8K*y< ze^>Z=R=P(jIq%jvQ*A|22Gs^=Yx0ObRZPtiMHy5Zp{<;~)ztHw4^u@^2Gveb-vcu_ zQ@|Z@K)?x6ltHzNmF`8yZLIG3?X?hpxSleocC*rzWJSr4C9SQDq9}uE4=Y{g?>$_; z#Z(PZltJ|;s7$rK{$gsRD9Sj>vx@Fz_2W6Vk2Bs?Yp?H|?vx|%^*g8gS!u;84j$k% zqIJG5iZa-r1FW3aqx|0QLZ_PN{daK(IdjvQW4Z<%@bxGBa<`2Ge*HPbN_SREs*NaO z{YfK=GFa8apax&Q)ZA1pQItV-1k{wr;S!k|C5kerjRdWoWpqdYV7 zBK%u}54&dig(nXp`re9~_woMxqSr}m0lp{+kBMNtO(^Eay>uYPAZ<6Zs!_VwqB z9Qkj*{+wl{=lyD`^DV4DKdp4n1!b_R=UD0eEAis)9a-P4P0R<$?Ie(A;YIBt{S3?E_RC6-)x#BygZRE&T{Lbk$R=V0e zULVP`ryVMaGB}Fstn}>6pEcK+qMpCqqVnGVe8SWNQItV-58CRvEBYZ*iPpG%r3|Y3(AMG7DcYH;DvC0w9PKQQ-6x0461)vX*K@X_tCRQdMAo9s2;I$Zd&~Ll5s_5 zYb)Jaw;Gf|^%&aPnsCE>Q;kGX2GtX2YkY+|-A(;2iZZC4vPvsGjK1PxI#Z`bQ3lmB zR%t|q3w6MAmP4;|$3+=b&sk*=72-_N5!O~-QItXTf|XM^{-kYotd^GQ3lm3R=Gqqd7j$y#_X~v%Ak79O6Or`9Xj>t10 zsi|V3D1+)Pv=utmq}!%?h@uRtchFYP-|F`_wMrCaP`ziBQL6FV(By4R-4R6@R3BJ5 zzrMqtrX#4*3@63 zD1$0EEB#%Y3`vXsZ7Sp@cZ8Hd6@r!aa8jMo&SQ;MBey8ZpbE)Kcc-Caq)u2i<_MtiBOl#k}f>7a|FX{L*S&kek{Qv%mr!df;=kYTqv;M3RMH%c* zSXRzUUj8kDPtzOB^xs*9<4g?aIWCO!BCM}J*W}1yo&LBrdnx}7MX{~$e4N(KtjQeK zd7E)>|5yLEB5)?XvjuS`5`V(`+6ukdZ6Unh*aKNb6;UE}^UyZ-xS}Y7XD}iweezvY z`&&0tMMO~sRU}q=-d8Mb?YZLGilPjv$gK1m@Wwq?x3{)th@uRtDA3l*LkT={Y>z0) zpo+>$-_m3XamsUVdMb)CsG_mb9b^CgdnQ^B<7{y&PZ?CvSw)k|4-I{~iK$;iQ3h2E zR$BS{Vej`a)kzd(P{m}GSlT)sW3%%Zq1WjgQItUyiDvC0w60_1dpW^Zn=Okz~mW!ecswAxR zd8bjWYimti5k(nPNm)4y8-L=@o8&C%+E$e9?oX6Km5h~sD-6sfHMNtM-3RZfS+kPwG(b}3OiZZBDLR+B<<@Y>k9uh?vRH<0$ie2eWIM1Aa zDvC0wQnS(;z8li+x%DvC4!4GsL6wG;&ckyt{yA={gec0OO3O;;;nIY&oJRybUp+)o z230yx31Xf*XKINk%AiWmN-Ll0V(F=-&WWN7s-Icu+8eIobkAKc1FI6lGB5Wu@Z^oc+$}toE?4 zD9WJ9$4bXlvQjh89^emAltGoBl~#U9{pG!^t;?b)gQ@^4og1%jEiGy);vToJltERH zm0rtj3ZHRqN;x_zY#s^YA41=w2hx6`JA zL{SD+3067}2fhs&XljTk%AhLAO2?JsRg)Q}){CMHs#2^X$SOKzUSiMg>xL-Gp!$WC z&ch-7vv0Pxg6(yyK^at~Sw)n#R+oNSX)7&D1)jjE1esm zo6oIlYJ@1tpen~oYnXD+lP{(=iJ}au@~reqIrCwO^B}FW_m(KipsK)1_Z#U>l=VEP zMA+wg%Al&qN>}XYj}8vCwz7$$45~`d){fm(XPc@ciZZAwv(h=AFzf2&riO^345})u z^j?|k(9h0Lv>F>lQ3h32R(dy&o+-s1Q#VCX230jy+QUr2N{=!XbHCdvWl&XTrDr)) zijw(F6&FPrR5e)XjC%I1`Ug`TL{SD+5G!4Kt5;g(*+;?%iXfJ&WfT8 zs#>hH8Z+vbonR{X0k;~IK~4dpSHiS03R+wBMNtM-T~UMRFZx*&Wl%L>rE}xnxD=19 zt@H=o8d3&TLsr_u6IB9Vm>XInRplZp=*{Jd7T$4KWO$8oy zt3er5tyt;#nwx!NK2t?RQ3h3OR$9Zw-_~9<)m{{3P_<#Dv-d{tU2ROw6-60TZCU9& z463->^E7%~6lGAgW2NV-d(;QltgWx2D1)j!s3?7dtv8kNh+9L-pz6R%d)U3*nboEm zilPjvj;yqX$>Tj-X=g& z^vu)>QItW|gOy%i&Ei+zV(PXi%Ao4WO0Sd!C)aH^74w)|4a%VE#Y%fP;P9Z!rizN9 z465F&w1+*b{xi~44^fms)rXbN!*utq%{R3|6lGBLWu-g4i$&5!G<8iBWl;5FrMt?N z88&%V?9j*EYETAMe^xr99(1@<+uF(`iZZAMu+rK4x?h}6rs|8L461?9*0l8tzndB< ziZZAMvC{87$K}g=+tgN3ltDF^m7e9Rse{s)dM1i8sD`l8ajh#K;*P20C)^rR2Gvkj zx^C7G<8W7 zWl)V|6(}pfkrS&u&kiB~a;rfZRHInwmC`xvAP+SHJX*q`B?4pIt!}XLO?)G zQItV7hLzsUFSa@3nHvK|Q3lmmR(hq}xUhShwY5nUWl)V{rPuNw;SV{T)gImyMHy7% zS?RcPpN+cERFsphrwpnItn^;ldQ8#trgDp-462E&w1=l(A0J?9{(zKVR5X6;YHyHI0>yEBUFglTGy%MHy7nS?L~NTil$U^>C#q%Aook+DcS0 zif8S;D2g(uX0Xz``KzbjJ-f;8$2GvYf$>my(a-mXZO1PhFq9}uE7AxoW!=LBN z3coScLKJ0C&1R+ZFh}EEtxb&*`m*PE*c%zGf|X5 zHIJ2^ud^wNdFDofzgT!AD}Qy57eyIVf3VVO#Cx>0vGwqvD9WH( z&PvZ$%GMKqG4)0iWl*hPrE~uM(r#x>r911^kTR%NveNt4si}S6o2ny$Y*@60xkOP0)fQGd zd*g3TdCOE2QItWom6e{a3QfZoF*Q>ZWl(KnrInBL_=VG1?cqsLltHzfm7e8wa|>iQ z^;r~UQ0-u)`}uQgJLEQ%{({>oWl-&8r7J+sCKc^t8(@7sGc5<7eyIV zyIJY=^=Lug57yRxQItWohn3Ea*JVGAHuXjnWl;UeDyiI;zkmF^!c@|WZZ#-_YA-A8 zVcMTYc)q)-A&N4n_Oa5rvH4<|_SV)gQItWopOubl#l`%^O>GlJ8B_;Y>GgHDbLsS^ z{t-nPR0mnYgadpgIOBpj}(f``!eX-D*$<)p1t32S`<7hBLX` ztn;T)L{SFS30AsBJ#E~fm8p@UD1+)RR{Bg7qSWERrZ$VB462i?B1`3?-7eeG)J;*8 zL3N6iKI@%0ka)eR&{y0MQU=v&R=Tpyy;;~Zdozim4646b>5OWT^lK+;tBxqjpgO}! z*Tcd2-e)j1S`=kaon@u#;kDIwyP4W4iZZCqvC?r}S^V}lQ?Er)2Gx01dQVx@C>JgDA?Ny2DD>sD3B9?lLt`6lGA|Wu9HK<9sNC>H#ZVH*zKm?F8Ly zKtK&qltJ~7mCoK^OXl=7HCz;BQ2oP7YdHQ;v+<@jiJ}auN1(2r8gSCo9Z{4)^_Z3R zu5h;xsGhLWb-wcNmpymb0-`8`>M1Lohq=S2s%mXD7eyIV&sgdGEAQKn zp6@tjh@uRt=dAQBZ`*tCwzaii6lGAoV5RGPxeN^&ntCpZGN@j%(ko^0kxY|KrMTtR zkTR%Vf$F~Z)+GN?YX(s}sy!J#+S)=E*7LG_81UMWv%CibjRH$_nf)n`_EE!Q~v(sN&q zbjKYbWl()#r9DhLqnqcgNFGs?LG_iD*6{SJFvTe0e%gql461LebnP9nvFCPEvqez` z)pu5UeTC1l%~^)Et)rqSgDSvz3u1q-{-R_#514u@iZZBzvCd{tCGD1)jn ztHd&U`^CM|*3>sqltER5mCoK)<1%>OedT!J){ru&in7ujQQ;5cu31|xL{SD+F;=>Y ze%`!!gsHirD1)jvD_yZ?o-LEb)L)_~gQ^58T>&-?|9r>PXHk?vRg#rfzFM(XqfDiH z=~ja>s7kTY8s0znYerM`MNtOTFRXOV|8zKBbyE{XQ3h3MR{HMia;z9LO#LZ}GN{V1 z(rU!&9W0Nj_o66+sw^v=Q7c~Wa+YDY2F~B${mT7`GN{Ud3L9bk8dLQ}Q3h3cR$9X@ zqb@s-N7~j@QItVdft8-G1CQ#zFm+TEWl&XQrEAo%+?8gU`X-7ps4B72J5k?K*?O7E z`r7R)Wl&XSr9I5~>}5Su%|%fLRTWlRjap@Y^?c_$Qxs)TRb{2mutBqrdv*>dMNtM- zHCDQ^Rn6Va^TzCjD9WI!&PuQ4n0XV0qlEiO^2Ys%GN@{>iX^#ZFMjr{hZRIo22~I% zorlNL_q}XwbrwY#R5d{rUNrimsTHCqgQ^y&(RrIqH+5GOWl+^-rDu76sY%~W{q)wY z24zsyVWs!4L3hd@G*wX)Wl+^+rRVE$?3bQ(W1uL?psL48_cjX$HSp|h){CMHs`{*S z&i9BPFQxVHp(x6rYQRcYo6s-L?>Cj;om&mcplZlUXVi_-jdz$TCyFwt8nM!9jDJvJ zxT#*ED1)joE4_b3d7m+usTHCqgX&jSdR6B5)Ro_yx|8{iD9WH}!b(@{+r_(fv$kTr zcdJ1eR83iF4-=-#v%yqZQItW|jFncS-s--dca?)gQ3h3WR(dBY7{2`<*4745ltI;k zm7cHsCr++4bw?CsP_<;GPrfV1Ui19sOw71`vD#cz?vqVt_RVQex z{3p7px}ymQI3o=vl~0=}Oi@$MMNtOTNLIRHH(ywG zy{UxX+`du<)hJe4!{=ScdcK9JCWxhbYRR z8p|q))NtgM4u6|^DT*?v#<5B)YT>IRWlW{~?pA{`sK&F>_3+K^rJnspJyDcFHG!4B z2WatTNOfy#v?$7;n#fAWRU_4j*`~INq714@taKjsXcOR^aCbBT0nbEH2GwL%dM8SI zE|%wf(ckMyAIhMb!b->0FtAirYpbj%%Aopb)q+p!$QA?%5*csoKg^x{z)SDT8V`E3N$X8|OEf zY9NX-s8+DjJM7$Hk(|k;XL-CR%Ai`wO3zp40mTxV+AWGQs8+Gk$|nq;q>rf=q9}uE zH7n;;BY(oI&F#D((H_PRn63pU;~rCW=zlt37-ziZZCSvC(xrnU2nW7%AnfGDyg(}_eP>d*47?TltHzNm985>!CHCVNWT?D8C1Jj zY2_$xb(pxVz$uauSfZ&WvxG@M%v%Ah&`ZMB%1-&y2z zT$Myo2Gv1Uy4vi@Q_-^m3>HNhREJpUYIFZa<$TuGCQ+0@b(od24dTz!*%Lk0cqEE4 zsE)AG9=;qj!YPc7D^_^78k9kGl$D<4d}YVXHC0L!Wl$YsrPp%B6L~!Qs9vHdgX%ad z-4T7Qa%Y*fwOSNqP@Q0<)mUEr;b2o2L{SFSU#x;j4c-5z)d&&6tp;Tr<@xsxoMc7o zJSCQ8oVMBj@7_PfnJ3Qw9>zUvz{v>CuSD`Eo*emP1bRO4ez$&_mCl6a|HK?0AFV26hSHj=E{8L3M#uQn!Nv zo!VBoX)11@dj=_k>LM$>Q%{b1dzz{8q9}vv5-a^qAw%G;L8f|(q716btn|%x`om9O zn_4G|GN`UVTT$L8+h^*5D9WI^%1ZAS6XqmtVk$vIw;GgjlxIF)W7XKHq4Ra(fBaiY zuXARwGk^4Vvak8(Ph~msHNW|DgO$#>IHA`*w*GVyMHw8$O;)-_-LBPZuBrK=D1+)2 zE8W3Hos(#Usk5RegX%V@*XN?%Fcm72TQSOD#qO~B@d|L4Gu{>8j;~@lR zuC!?yt#caD6)8v*Ww1Z@{~!H%z?m1$8P*l)zOO%{fzH0=e^;bOoC$LNYnpZR`N!9v+j8W8{QC2lm7e80TMw47{)CC_ zo-fMaS$@Jw=i%^Ei9K(Ya*3i0j^Zh+9!}4k9|ERLO8e1&6wf#_*%^iI;Gg;WZD&ng6-60TuUP30 zE%&v=?M#J<;?|ims9v+uyYT(@#W$GBCW-?58&7C?s zKk(;`ug(qR$Z!1W{En5bhi4}SPPP8@7eyHy#d}b}64z>KYNII1p!&c{_s`Aie%NQ~ zktoXG*gvxR@z_6crnP76AAMtw7u7u%AN|JunU&759DBlgo^JAqq707W3oE@drf<4q zwT+^cD9WJv%1USEuA^`6n3^t%GC1~ctQtFK^S|#q-#Ihf8N1$hzWK(!Uyl6EZ|nhq z^qY;kk2-t)kIL4c$D$~MqX@>zSsM6r{nqeSrV>SS>r5F`!CC39pyd96p0QUKMHy5f zSZNOv%q@Aw+8Qm2GFY*YtbTmo3B?)jIv+AncbCJUVn%nX8pf|b;aKT9zcJzRi`Jh!q9}t^4bMvF{Pk|- z2AFCkiZVEg2&{g*&IfYFyUs`OjbgeSIfCCPB0_(bXMWq+`m;e4WpEUcSn1W2uGrbb zrtXNM464YWhTpkR+Ek<%Zk;KEDhexI=iBux=d8WD-^eYBGN_`m(sh1K#nfp{H5Ek} zM|sxyXspUPv*o|n`RJVSuJh4+b)G0kj^%Z?ii8<5TbKgni z8$~TSaw5M`Bw?lZf}WRSoU;CO5=9vtMN(FJH3f}LKgrZGQItWI4BBcLFUfOL=R{Ek zRdQ(SQKl~MO+|?9R*W)Ou@tPLJJp~Sxp2^yt^PZ-l$^=uoHV@-Q}`;DLynxnuVSfK zC6V)fBV_m})}KnED1)O&%__F2Nl~VRH8oTeWl*I7HL}~d&89Yrq716Etn`U&Ot2cx zMqg*rC{6p0iU%6lGBT%u46a^6B}V!)p)w zilPjv46Jk=J2S4cwR^=E-7%HSyS zvC@hqe0MOjsq>;JgDO8Oy$?=Kvca?e2@~I~7-diuV5RF%)@f-TSzFmfQ3fkkkkyYX zR){m+iWT%#>{mH*LBEO>W~E~vH>t%t>(6jel)+IHVWrnst^zZigi>C0Xf}vTbp_eb%2wq9}u-D8)+KnLad91yd76Q3lm7taMk9c4z;` zrgn>>464$sbY^zgbAPX?x1uP6sthar{htM2k~_`n*-4hbtutj%m1U(fVQt?pAx)JN zMHy7(Sn1BQ$e~%D9Y_yRltEPrcFd?zyP!*Pp7aoUcsy(=BZgXA_}kFt;emU{$NJ(*4G``QAT4Q%@9SP*rE8=Y8O} z9(S#+iJ~Zjss=0V;p&AIJ?{#3iJ}auAXYk`Lp2KS+;DVUcSKRfQJ(W&lT|sV7XSUs zSc@~>XU3YoI!8_9*14u%oolnw6{$+oEPq;mGK-=Nj-n1Ly*I_1yfu@lMxrQ#sxB*C zH)>T_m|GskF!q)$EH*!Rkj>-mkn0rY3( z*t!R-KQ}~C21n75mClw=yZ`dcmcYbrohgH=5i4D3OD>x8$=b>#iZZAgv(kzk?6c^e zspg_6gX&jSx+1myG|{tvo+64esG2}q&(E&kZ*A=nMHxqVW@b}XIh~6C_q(rVobkT< zYU(>XPvyu>{mxEvR?dSEe@Zk9m)rUiEs0xa%HSwku+pc`h| zN6vV!{SJDq=FXVw6GEm6h&E#*aSy(Num>ltI;vmComXt{?KOQO!hA232=Z&pO^IZf#8x zMHxqV&Q1?jKR!D>IpaM$J$z?pw;Z{L-`VNKO4sINQ>XT^{@f5n85~7#P)+B38E7hO za<|TuLDh$qzQbR&zJEbenMF|sRbN)R(xxmwX^g4Hq9}u^A1ggOZ^HyUH#J@qWl;5J zrPa8Uc*!$UJ48{&QJ%9ifK^%NIt}gobM=?tP63=79{hgGK+e!xN7|3kXMpeQ+>;{@ zaL$fC#q%Agv-O0Vvh`Qv;ybwdp1jn5!2MFnHHV=i<{k*35f8n3^w&GN{I~((^TfjgRPa=8H7J8>JS(kyidRujo5~=HGN>l7(mm4RcF#R)OOPnapqdD6ozGD= zqqQ|i6lG9NVx@cR`3DDi_Pr}bQ3lmyR(eM(aJJ4mYwNlw%AlIUO3(72Pw7ibol%ie zyEUW?s^3`YUMo$FYM#4HUQv`mHIp!%JaR^!y(KO35QA&N4nX0S>sSLK|u)vB6GkjAYcWl+t8 zwz@^wzSUG^QItV7i<&WpxD=VQ|F-HxN+~M|8&jIp?19?m73}TVe8<=^5_%eeZJaeRqGa zd=9_I6lyH>L87Gf4xRbdzk2GC&v)KHjioL!X+6{$f+eri*WpZ|#!??5N_w{KuQ_6! zr{c__AyWW zgDKQl>LWxwi>aFrzEe?$y}t`nXB!^09`ZZej{Gmih!y@_aq-C-2$fbNCQbsIko*WK%>Nv2R^smq9xHvh}jOH>c=N~Ta_sZS9lZT?43`TMaxt;?7~jivt6 zq_xw}4p+0mpE89SOI=Qsw8PzB^SeuZT2FYP^9E`x^=YE^;}&(mDSN}DP@b;=rch(4 z&k!YTf1VVhS~u`YchhXSLJV7u9^@Ql?O2sm~E5XEDErWB#&>xiwo|uDaB}Le#GAKOV9A`eUYj?Oe(fYHXceOVn;mJv2UW zv8TSt6lyH>Rib20^0P`~##4V}3N@Dc8d2h{m)`x@7kKK)FLJF8HI}-LD5<@VKdJ{h z40#4$#1v{Qbv;p%!v~)7&sTVAj49Mu>IS0VANqUE_2n;m>NKWMW2qa7lDYAo<9DeM z-fmS zoaa$vsc#S^K0M{Bb5wop#}sNT^-ZF1^^AY7dBLZY=lhvLjitUtl#DxjpEZ6UD%@X% zDb!f%+eE=X^mp__uZ5+CP;X@lHJ17gQR2hCo3B%z{}fZGvD7U@i4R8)cd}jcZm{j{H(V52cCNDI#*w)vDEj7!d?si?)l>$_j{^` zDb!f%`$Wka?ShNO4))ZEOrge7w-F^{!S?T8xZd}j zokU3vzkBdS-|=acnL>@Fen^yf{+7KDQ*C}bQ>d}jkBE||@?CF!<~=^G4>5%rOZ}KA zX&X-(+4m2gx``>&Sn4N4$(Yi&>xi0b{edaeSn8)l$&C7}m!JJ%pVn^O&hx0T)X#{5 zf9S98RY$+mQ@u=~#!`0?CB10l*9&)hYKAG)SnB6QNe^)H>)-!PPrZRD)L7~lL`j?f z^XsZZp87absIk;9iGoc&`n&Yzm!9gW+nGX*rG7<}w2j*jFBLrX08^;3)ZIkEKlJys znR~Z+YQG-mdDK|y*F;I{J^J)HHOnn9g&Ir!hA8RTuH3df@6$SkDb!f%w}v|CjuYVBfc8(-h!I}@Jz1XHN7)Srlw=j(%?e)GpY^*yFg zW2rwACAIv?_8Z4N^&nHIvD9CPf`91mjM9m(^VBnraGpnvr5+$kTJH@d}j--wbP;IJpxU+B|%8&jyU z)PEBt^|o|+f#pJ3N@Dc z2T{^Cesa=B)R?mOi(P%8#!~+zO2*~a{NXWkKCNSzLXD;V$E5YTslm^B>UgG5W2yfo zO2(8Y-t-sfyu}-@WC}Hw`WI2sHZIt5<*PjPex^`kDZFm6^G?!l41ZyDyQi*X3N@D6 ziKtz;MeY2DPeNuThyTSCYAp5tOj$(#T05R^(dmiN%VKZv1dZ`Qmzx3LXD*!O_c0s_S|#%Cq4CQrch(4 z#}Fks{O1cx`+4fqOrge7k0naHarYIMAMB|gGKCsT?Lw6Fy&oOB^_8CbD^sYk)UHIy z^L61pJHG6xeU5UTM~$T(XQ(Z&KJw3=Dlml_OFf<_*%A8l?AxJ;;`vjULXD+%Gig0- z?7(|Gbv{$5vDEHF$@q2LIn&2`>Z?ql#!`C_^-OLX&$#TEqdj#GQ>d}j6Nr+w@sum~ zgF;EU_CMPB5H*&1B2lvb>iOK`AN15lrch(4J&BT9ZvFZ*svW+DDb!f%NkmC4FJ7{6 zolol$rch(4CmZTT=dJ$GQ{Q3=HI~|oC>dez`P4&dzVQH4sIk;jh?1Sjt*5-W?$g@m z80SOOSZZ&gWVZbDpO0VesbQv2W2vVSCHt9Ae96i=o?2!KHI{lBQR2g=T=AnLJaq|E zsIk;OL`geryy(JxJ@qZ7P-Cg56D74gyw~$y;Hd|hLXD-KL6rFL$fXaz&r|!n#Q6|4 zmU<>pG6#6hrklUusbQv2W2t?KlGc0cuFr;tM%sLvDb!eMKSNzvySDAA3zOE za`>22F1gK9-((6kmU`dXOp9Sn2?x#PfXzp8i`;?f+8eL)2L6K%%6d zf9r0ij(ci=Db!f%Afn_+>D%}Zh+cfS$P{WUg(vVk?wJhBOFfS$ zspXA#eL}6;HZX-6OFf?`n3~YviMKyt!l(6Wrch(47Z4@&^^;xh+2N@RnL>@F4j~Hu zp}&{E;})3AN`2kT6lyH>LPI_CgSV+C+0Db!f1n<)5){@&WsZ?gY|Db!f1$52OK{EL2{*519&hp4gC;Y3O6{roR>g(_6XH?}f`8cV&HDCx1EykRSJJd)O1m_m)EjwDL@-s|6WCPX0A zl}w?=Qb!Rb&)26Oyjs=rub4uOrH&>F{-M9at~&i%pVl6I&WEV6)G z-AtjzQZFG&R*3I@$(@IK>g7zK#!@dOO2*|M{{Hr(JhjRcYAkguQ8LHA;jHIv_S6TM zLXD-?69tt-f7jM7QnRnCm_m)EdWn*L{@nfdex6V3r%a*7Qhh|pI^`GtY`oi3I~Sbi zQDdnBQL;9_^ya5r;i+dcg&Irs6D8$ZdChOW>Zt-#sIgR$C|NIGam-IuFFMZ@YAiKi z(t6{Df2tMz>zP80r3Q(T`a1TOYkPbSKgJYlEHy-w%;)RdUZM66zs3}5EHzA&`0#+A z?5k#9e`5+YmMRe?IlSdV?>W%t@JaoyzEESS5u&8^PQGUEZJs)mDb!eM)KELUqjHU> zHZz49ON|jF^>y}t9;0gc45mhg&Ip8Pn5LYqkpd}j%ZL&m?)o2l z-QuZ>m_m)EUQU$knB8~Yq2Ke=H<&_=rA{JBe7I$0w>v!bJEl-$saFssIed24M+=^M z;-K?9YAjVD3jU$L`)>H0>amYz3N@BGnJ9U_nm;-Da-Y^Km_m)EszizBFZtc=y`FkA zQ>d}jG*L1a{qP@0KjEoQF@+jS%@8Fsq8GRS{TxsIlqu9$YL+PYhyK2N)g#rO!>&Wl zhp4esji|kux_|h8%08__nL>@F=7^H#YukgDsQNmIDb!eMo+z1%e(tuN)f)D7Orge7 zTZxjkaoUonLmODz#4Ps*EDYDal$uafg2YAkgcQL?Ll*xcXM zPQ}qop~g}zqTsNB{{BArakaWRktx(zs!f!vZvJ}S`=IKi@7>N6YAm%(6#PSfPx{Q~ zRk_~F6lyHBLX@=Lh5f5X`?RiM3N@BmB}!JK7tVfP&9Q&Y6lyHBjVO7R|9kURwLABO z5$Ac-SZX^_@DKfMePE~G`y8%k3N@D6L6r1tJN^E(fAZ7}Q>d}j=|ss>`M~Yh_j~G{ zOrge7uOtfop})e1i^}s?Gld#Uy^1L5qpn!L+wDHBpD~3ROTF4q#Vh``!&8qMbv{Im zrOqHq_RK%`y+aQ2)C-tGjip{glz8KhHw~WQsR~o5vD9mck{0!jgMal;PrZpL)L81@ zh?1xB=|7sj*Hf1>g&IqpNfi7;e|sMCuJ?QD2TY;HQm-RQ`uUIi>4K9z^>?OFW2x5@ zC2jtYR~`UUMR_WpJ?1=*8cV%_D5>SmPuWwgq{>X8#!_!2O1$yFciUg{X{|Da8cV&& zP*>h~p7O>8Orge7XAvbie0uYw&-=8lWePQxdNWbdN1gJGxu<#R*G!?tQg0zjW)6M( zUGyGLJ$Bsr5H*&1D^b$-KK4g9pXsR{rch(4ed}j*+fYnwe^mB zq4Snn-o_MaEOic1@KDj;>aYJ&^VCO}LXD-~MwIkXXWoA+JfM=+kC;M@rQS}IJYW5f zyHTyOA2;EAh#E`1gD7de7oUEPNJli&;E1Y zk)Aq(Db!f%T%x4ScYp0}HNt*^Db!f%Jd@UjbN=)OpVlo*p~h10B1*jRjZYld@2P(< zg&Iq}n<)5){*M05IX8Lg;7R9s)L800L`gfmzUwin2PiRx8cUr|6#PSfPdV+nt9)7w zrch(4_Yx&-Cxztl{X9_izx_~Ij;g1);^%75A#T05R^**9xmHpW_kKE#^A2Wp- zOTC{c>1_&+|NX3|b}c&}qQ+7mAWC*Bj;g#v?WG*X6lyGWAyMLuC*JfGwQn=V6lyH> zL82swe|%s2T|S2^Orge77ZC;j(BJ444_xA@3z$NUr9MQIq;<|7JKx}`uP}ugOI=Kq zJYP@V__ptO>Tae`W2sAslHTUk1JwgO^~B?x=TT#+4-+MA<=Xumv>XSrC+h`wk z_6ASw&lGAbbs15zLj2lwd#aiFAXBKZ)TfA&7WLYZgWl)U+QAfREcKs6NsC&1@%hJk z>cdQ-#!{CPC9|)Ko_n`?QhvY`YAp3>qNGJ#+4r26`n3Mvl=C5KEcF?p;2-+yT0QPG zPd%S0)L81XM9He{#0&3J{rm(|sIk=Nh>|holv|&r=1~o%P-Cgj6D76$rvJV413riE zVhS~ux`HTaQUA5?xig;n5>u$L)E9`_pS|&&{kH$YQ+F_h8cSVCl$7hd_x|X|p4xq* z^E_%Sbrn%k%Rk=s_GbAaRbzV%#B)tEw!rLHDQMu%UY|Cq}?^%ka3 zW2r9@CC~EQb$6&*{s>d3vDBA|%IfPMFFVJlbu&|_vD7t0$y0e>@9&QA)O}2$#!_D) zO1$yGw>C)Os_$8woaa$vscVUn91d)|>~5ddAXBKZ)K`g;`dYd7l<#}0!4zsN^);g4 zANsrGhr6p)!1+v}#!}Z2B{PS@#jjfD)A}+~sIk=bL`fgD+h;HTp{MR)3N@CxfhcLc z=N8XX>*c*SJ0GIPQa2JMIlSo3N2~Fxk15nx>L#M3kGgD+lW+AoY%+x!OWjPAoSOaP zYcoIf)O(mhjitU$lz8Ky9k;7~{@YBU#!}xfRBia%hxxSr&J=1a^-ZE=4sgQf1y;fvJz&`m%TWv>HsI#!}xQ3YJgw*Zd}jcZrhTru*&-PV&^# zw>Tf7#!}xSN?Py7|9hVNcXJ2RP@gH(lYWcQAz- zOZ|W-ccYWq8PmM5z8cW?tl=QtndH=$_o?2oGHJ17zQPKk(y6;}<{OdfXP-Ced z5hb4QS{eDePwN_{P-Ced6D2;p<=fx>lBe!r3N@Dc2~qNVjl5&~<(}I6MCU`)Sn8)l z$*#ynA78!8Q|p;Rjir7@lz8Ku-~aJSPc1Tq8cW?pl(eY(-gxO-JoRp-P-Cf|8*1c? zH$2BvH#3DAOZ|c<@!`u~+dk7%e`g9cmii@8QePkX(HWod)WI)vK17YBenph@QNP~h zhqrp_IHpizsk@1ik?3>p|KP_w^#-O;W2s*gB{?krOz$jxmMPR&>NiA*H`+tr{)$iQ zE~ZdpsoxSMbJ3wof2`*7kAJ!I25KzzJEEj#``ovlrACM6FohaR{hla!mQQT#1Cw-F zjULAoYAkgRQIFw1>XG|g56eEGwlReoOWjM9w8J-_aO$|H&SeTUmimLCcE0ueNl)Ft z6lyGWpP{}p(SnXga`+%qsIk-^iIQ5rc*keH?5XFRT)L81jiITqe{D+%HGlBhfTdsIk=l5CvCr z=@F{za6`*-kk8o`XI0XQohNsYk%GyYo)_ zatc%r1AKjG$Qt9jIJ z)6R#evD9uv$$aBmQ_X9AT1PU48cXd?l;rSVhy511eCea+m_m)E_8>~U@txIp=_z)yd-6)yRur@q7#YAp3cqNHbg{a!!%wx@o`6lyHBCsC5avs?fAg{K}l z<9vu3OFfAwX@?KKYu|r*>V-_9#!^ov3OaZCJN$3`-}lrerch(4y@--pe&~OnezvE! zGld#UJ%uPK*N49O$)9-YVx~}Isl5&Ls%u~U4o`iHDb!f%sYFQ*&wtkYuJY7hnL>@F zo<@}HnC|E%*oYAm%6QR4Ym4c0#FsVSyVW2vVTCB5j(;$6$0dL>h+vD7n& z5+826>*P~BbtzM*vD7n7T2tTsV4^d;OgNcHF z=x_glMb(QQ!xU;P^=zW#SsvPbM78;onL>@Fofba@C?<#}sNT^<1K4mU4CP z^M8X1_xCBLP-Cg*5hXb+_4I$lQ@1jO8cRK&D5>S!zW4$4r2K^`)L7~TM9G}3v|;d1 zKCP$CJI|xWQil))|Ipuo|JtkMsR^b~W2qMsB|aP)`u>YN)n*DcmO7LunWY@O@ms^5 zdOuUBvDAx*+J$p?$M)bmM=Os6cMA0zrch(4bwt5G^!MSLzw}*C zJ!z}+A!;nuMU?bWKYid;PzjROkxZe+Qr$$!Sh@Fwhe9(Es>&27l7%Tw1gg&Iq}lqm81PY$?F&GhbN3N@BG zmMEFCeeS8>{=HA@ai=&RqQ+9|iIN_B^(F7$?5XE5g&Irs5+!Z^>uXTp@4IKbUyWZkFohaR6^Vj> z=x@Kz@A@;J!=E#S8cPijB`s>F4R=7*NjrS>sm}ALvD6?@(gW=Bhhxw2)FDiv#!^E> z$v)fl<>SUYwV5f@SZbIkXh!sR*1$okZM2y}jipLN$+JAWU$x@X`WREFvD64r@>G86 znmhmCsXLiMjipA3I*4=FRp`IpQ;%vmAEL%mV?;?i-1Boc!WNEr{%EF9W2teXWTrQN z^{?;s)C^OovD5@nvTFP6ch32%r_N&vHI|wrN<9CXm7gE$sq2_Rjit&&Nx7c6V|2<> z|IHL?EOi`F;`#k<{K2O^^{fTwL)2Jm15xk~{eAt>SAtM{IL;JmEHy=xq}9{<`!_w+ zVhS~u+DMf2hhJQI#(kdp08^;3)Fz@Ntw&z4_ZvKQBU7lc)Mlcjw|U^s2h>jcpP539 zrH&^`R@r;}_9iuRc;=$>A!;nOg(&HxHov>|7N5frrch(46Nr)=UVZWldpxzs6lyGW zB2nUv<9a`Ogs0AD3N@B`8BsC^_`rE54SMPZrch(4mlGxHl=?1b-sq{jm_m)EaHg>H zPBIdmF!!J;*Atu0hi*2Zzvu7@qF@?Cf6WI+e&W-55mTtKX;p}le*V8dv-llPZD0yD zmO7cJM{-)DGhb6Zz#>zqu~gMiyKcBs^#Ervg&Ipu8|v#jJ)rg~Kg1MjEHz`Ovkv>? zO{j2xUt|h3mYOxxpI^4uX`Z@`Db!f1W~k4evinv~-NzJaEH!7SrK1k)_tayTTrH!< zQuBsd_t+y(^wa@Np~g~M4Yk)RF8qh5UcwY=ELAtu#^&pP;i=6`p~h0D80ud=gJ*kc zi7C`r>QqBr^Qe=~_0(IKLXD*whT8GYXZ*-hmoSAIODzy3ZT>Oed*~cbeVHlLSZa|d zY4b;Z=rLdO)SXPB#!^k9Wc_vd-M7EZQ-5I!HI`a3Xbp;aAsV*m&6mkrq`@1q(wCjKyZnELaLlLezJHLPHc`?)@3rwwulD)r zWePR66w8MC>;8AW$WyaSp~g}xM9E%3^KA#hMv^?aXEB8uORW+md}j ztBI1)>c)NhzUHaVGKCsTok5g5gB!;lUG&s@FUPF}3A>VrI9k2J)y-cCTQm-XS zTKWCEeEWYqwNKl59yONwH=<;H@$!p~xyVz8Gld#Uok^7V@Y$t1)V!|36lyH>I-+Ey z@SnRCV1Xi@e;re(vDE8{l9|kPdz`QOmd`VV8cV%_C~3VPz3tFhpVrTrLXD-~NR;I8 z6GNX;BmN_ooexoCsW%Y?&4~Vvm>53Cr*#BVsIk;pM9Hk_lbf%(&Qo=!P-Ce#6SW7Y zRsH09Na6nTy-cCTQg0zj=8*rm=DmOMXA_oJRVo+;E=>TN_xEuV7c z_-j1%Z%m=aQg0_pPXE93&?TSq)MuGOjiuf}l+@Qw7Atw5|_U+M3y9JX$#Fw{3ORxb7)w*H{LzTPZ+tZ%e` zsBdhv_b3}aTpAvm93AWLU1!1%A1M!xmkWJG2=6&+eUFW8vUj3X9_lYm^!ILBJaw_T zZE^kKwN|UyGI8`5dPfKP1_mYuhkA#`wyZxKqUu_Icy)1h{oyN1@c*=G>knUSF0Vhl zy|T2_Y%SMjv;6k=^-hcy%99f#Bft{6t}|+qE);tw1}6%G1<1pAz1^-a&aXcl<5{h> z+V$q55g%Ea7$^^o4iEQEG)*}wmCAghwynRpv}0p!`_#&GX`wn_>n=Wm4aHV<+lK1m zd~KjnTc|BAx5WVJKpN%yW|r%#H83r&v}(fkH|h{o+|*oHYSr59+N>n7F3U@Q&eqkz z=F4C>DPkg8F(+acvyXhJwrt`jr$|A^n$_8jt?FWXsoAcLSC?D$?Xw+hb7C7`X)LF> zh|O?ya9n@0*_vIKC54CzUe(F?@I)+g33)vpOFbda8jj6OJ1*~v=e=t-A&=+1E0OoE zc;34bdGCtny(^LT?s(q26M65B=e;|T_wIP!yAyfuj_18Qk@uc>-g^>x?}_KVCz1D_ zc;0&wdGCqmy~pQ$s=Bb$sP#9Y%Y$A^8f2kSTb%80HkvIHGH}{Tbs0KF6F9iCI5SmS zsItvPdL2b5RzMHA)G|+>!-k5^Da~tM;{8)g88k7##Mql!-Fr zZ=nWx$s!Jdv*>Mj=IF9N`~m%xw}APi5XkQE^S ze47ajnM=d)R0=DpQm;%WkyNf$lG$2G!JYnj6o1TnG&JI%rSxpOkq%GXzeFM*nS6&Vy>!?q<0PxzsM)ysTQ%sn%dO@-^pBEH z7ifj9k^-R%42Ag|7whfnbfdPp2GjTLF6-2JOM=*K2emt}*pUEdyVl2pvP5;# z5)$S`b_>MS8qKqBJVxvv zP!k-@h8o4SxM#vo%xt)CH8$K&v23`X`i0@qBK1tD0W%;HNhETb&6`au@n+?pA0v)C zQmv(oI_h7wk}_g7@wMRz|Eejh)&~<<`yg*mJ+fWf^+W3hLVn1%t43^M>rOH~Nv22V zfF_CkuoSA}3bESQ04qo}Wx**V?Z@D#JXovEPFH76l@S%ElY_AS#F=6^`t>(pg=&_f z{f%0+LGxvzDgh9>sGQ9d`RY14(iH@AS4uZ=R^<^ih6P)2+2go z8|$)+1;GiqkJ;)|@%y=l(W?zO8=iQnjeiFfNIKaVl-Bs%3% zqW>-RBsyR)#49FQkv)m7xfJxxenYCX*j}zK&eXCIN^eT#jOA8+0lLi9+J+int>qGQ zo7?4)gy+Mq5TTb?fTJE{9ku z8x0&j`o@bfv+H{jM({sOPL&ZnqvM8ko-&$ZQq9z6Q)cl|LWXYXU`o@$b|=J9Z^4Fy z%0{M;ozIBIt<)!=^|TcUTPR^rsf{5@Lj!vmHcrQzi}mGZOPP32z}s}(FbKveNK_d# z0(GG*{mm8JJjO|ZN;9g#RrgvNH;S&MN@r)N)m&LxBNEc+D5hY)YbH`Ct68QRY|~c! z+^WiAw$z1%){3r_jd;M_=tuNnbcS6cHm+!%}4HZ3kitq`@IXUV>h ziGc@`e7GE_9AsNi)=h< zbCz@3faQ6vNgXPhGeDAcvmLE-ovd9Q*)Ge{!lqbTTHcy%U(kP%3$h?+4Q?y045LUL zuQ?3DimbXUoxld@v8rv}CFU*T>;TV^&?aEzAV6f|Q-BC$qN8PgeBv3>|4Hba8bf01 zM;>b>c__B5u*f3eyw$y9ab~d9T<9OGt>V3k4Ta3^7n}MVLoFhMV*|3_5Xz4_QUhBy zn)sBNX`_$@ugV5A+NJ99%vP+B6@She1k1ReB?fm=T*nk<5)5?BA_&(rp=_4rong$) z#pPDBq4TJwXgtmGDEME~IL-1#Y(g%dZ53)JUot0l8u3BiGH5kR4<+lYf}pY-zf^{8ow+Yyj?F3s7*#=SyhcQtx_U> z93?%;1qQoaAveX(!W(sbHbZ&;*4oUeDtv0Wy6lgDd6wX@Y-_+-bV8X)#is3&5oPA_ z&|h)N+x-2eyv<*3%G<`OJN&*FPEjIdfMA`$tN;)W_cWGkUHN_c+)Ii z(K_OY0;WekLy|(NttkoBVN);#RToGiCN;;E2vkb!aP^$#jWE%zbrg_mm4c6;d?}R; zoW^E5oOKHH5lIOk7T#s@JI}Hcm977?fb4mbovBcw&Lddj4-B$^FcyE~h$ZT-5r??l z-+b&GzFplgu*CLMTq&Y^dny&!Vb1x;rJoE>#sxdiJ}%n2g@J4%&WojDC@>L{Rii%u z@bb*)H}+tkceUAA!F}z)dIOfEzFWwde6OHPS)AD{ENaXuHfGH>PNGJIF1edXd55qe za0-TYC|<$zy=<;KK#EydJkGq? z#0Yy?3)O7X4x)1b@wft;iO9`zpc%V%CdJN@mjIg}>>R2Rh=xL~Fo@n)q@Hu|)LeCy z(dmz}>(vhLA}TAm1GgSqa3+L@53psSn?hhxTb8B8RX$yIQ$s!d4sF3S)|=HJB7X5k zpgP)NOfq+oJqZ?ojWNE)mqcMr=t@EJLkaC)X|-sahD%W}sMGCc{iC!u7S;AlGuCCdaCXOd8|OmIUY1@$D$1T&T-lq?e*$|s>@nc(0n2_?$}r(z27 z*Edz5TP5-RNfj>FE>#dLI`TT`)y?flqt_8-kRASx{hwPMXH`Aefg$xiWKjuG}1+ zD?5kV!fdEjXI*K`BORQOsvO}~iW_yaty%X#bD-WZ$OkQRQ1*b?TOBzoWL7oc(Cimc z;Q7$#Nw^|P=UZ8ZL#fI{&ZKe>+Oj28&X8p~v}8-EoFPNp%tbcJ&1wOC&s|BmzEo?} z7qiD(-r}D2dwsbV3LaDU~Z27l4cm5=n?eDQYEkOyPe7>d#ai4VE7^Y7oXR1a z^JsU2|?#PsNJ#{uP%~C&3Yd$Ay^}Qz4sT7L0wsm3D)qyTJ%~aFqd4T z>919b<}$3mDG$@NdH+&Va9>_Jbm^2~0F{?onhW(Az5wGk4t%S|0f?q3Fjdhvz{YC} z&DM@WwFR$HWuvS+4d4q4e${E-1yU0W^EyzTqL+o-sF*Xl0WK1ZuLI?Rv!e0{r1F3! zepkm~dQt?&VfZ#cIH}_y(Z=HFY?c$w(E@WgRddC3@9o%lIm@y_h#JGhm@$c{w`5ct ziF9S8*2~K*OfQ2ZP%kO7u!s29tPEwvBgW(Fq^ZrmC9_9?kaXPcPGuzR%m2fx27VUgv4P|0YB%nsWJ(6+P!V_9ZYeoTOpeFLcmp& z$F8CxL@&nfgprTQ{Q)8X9Oh4Be3-vS0AV=RXS}K&Yw9W{P2GVhOE_K-Hm8cBvSVD) zA$gTfUbVSi+a_*=>d?E3>Qu;DR`eZrB6!Xu5n->IdznOx?xD?@vqd=`iR7#T!>(w~ zmXW1)&L&*By3(#Ct+2(nvXD0Wtz7Dm?JEYkNTElo`Iow7XEz|lp&aacqG;)}+fP!Q zsLCar)5gB#qn^QtSr7Zzc&Lc#OF)W_m^F+Spow5&f&a+|ws@ge2=^=~Llze_^jL6q z4_3zl8Dg#bJb}NYVS@d3QxKeuizeLf>jc4Zx!*uBaN}I-FCQc-Hi^s)CH!0P#a(t~mzjZl(rtHGaX|fA4+ukn7EO1}fTJMNoL}N@W>~mz&GD0D3{hPXS#Z%mRXN*TS9Et|;ZhA}Tp($WEC} zwoDGanLj2HL-SdX?|~?Fb}>MOsn39@Q1k%L)K#b}6^H9$#jd&24Sw&b$W8Y^0ndIU zYA8L24lJ%_4l->dE-`J!OK|PbSSubYO2m|#!}~YtZ>I z7M%@iNFw@4GKlGvw52PRF?*-OAgPSm?H7ZjGG?!4XvEyiu!dCe%?6G^Onn(kDr5G3 zg+}lr6p700nJ^EIrIJ+uAD5U;Mrel}8zbyJq`7o*>FlT4g1t9lGLdQvcC*PK>0GBO z!(I$Ak#+D-2lv=PT1S|lUElx)8@uXLOUmic-^$iEDgsN2qI(Zz_40WZkWJoPh&ubp z0x}6LOJNo5K3S-~DUdTH5ID?}d7nk}DWA2dJm(CFR8$!(qTgMgz$=yw?Ghi7#cRLo zr^R_o2E`nt!}3DqmQ1KUk_9Sf=&*c@$_1HFm)aow7^y_k=oiQ0mJP0iip8mqh!cw+qfO$zrJ5+_YcZ5TuA^RFjTdQzqd>&t~ znp|3^A`MJkX;Zf{(T1Kx=njRn6-LaYk;XBx+PnlNotMC*^Wv705@Rkiuz#4e!8*~} z+Nu=gYP&7HwF;K4^(7tV-qJ<-#oV^bDdHz#c6iH)r~e1*MH zYtJb}1=m$De|JH@LYlYw4-hIFHDW#p^et|%RjVa3h7%uLbvtv|j+MzYM4)thA*O91 z2VZ>xM|4UwuP||x+B$kw_KDiIgk{sxEWEXtFy@m}aY8}$NU8i0mN_9aSx;zGdivD_ zr*@m!O5!F|F1UL-Y0y26L1t43Y%=&JV-VeBts#l%=4=q-5M$8~tu^RWoL6W|5w?GH z&a6deKzkBa@V=DRkWa>Wd0jpgF(i>>@}~SIeO-QQNTmW(ig;OY(VwuS%7Tmj1d=KX z-o8j6sj}ccK^%dpM#_*xQf0w8Md_iKNPc3-Cl_sj}dW zlLV3~3$DyP0==Fb;n26frs}8H)QPD#PtMK3I|0gMFcnVED-Hf(pnSzkzOWG5^&lA9 zgjL~`25f!PYo;bVcrjJkU{ml^>e<^WaMNNV794q7RY5tcISyA=KXZ)J-mX7?5R0I` zMg(;mLF9$nb^2T$e@8|o<6g=zrGVPc2~-}eIbM#0#$**V!J85)k-%c|2m3s36T+R1 zC~71A3=VvkAZOqo&*8ftiqHm=NbqwzITyl&Q!avZ;>?wZ{*{J4hS1s2mN{La?n5U7 z_|=&4YU|WmOHt+K5`7RXZ-CE1#VxezF2IM+X7!_hJ7==xgV!!p8uXP6x~T*caQTFW zdq+sC+|LEkHd?VZSB0Z=ZO!iYNFuR{kUKy|6Zkf&u|CeFCDjyEVHlOj)<{ugiA14U zpaVOVPfHSsX-VgVBs+=1aYUl(oSdkF6qk0G8VOPgtU(IiDv>8~5v&Qrx#+bq z7j@vC6r9Xjz?+=$`KX)k;{yXc(Zr%L{9c+LGgEO}RVtax9q=Y#JTN&v2|Rs_KXhz_g9w{+`k`lwZKGkyqN1<}EXp#TtDl@8S1X|+ zk&i5iFbis=@mC40C-RcORZ5WZW?rJ>fE`+D3AxVR8p5&0y<9QaT4^t@ET}xYaJ(H_ znuTe0eR)UJnB5JX?QEWln&VJjiydEwl#Dq}=Tkx`ubpfyZ*AuC3Tujd7%V4pfg74Q zr^zSg!t=>Z!5yrKoPzUeashmPI6`D5L-FvQZxU?KKNqOW!e$%^6TznCdAXh`$!G~ZRK=*JXTzR-L+UGD`mNx85Kdel)A9gN5nNB@7pQEhlHqGw~g_(*-=vj5ITFEcZ z{@*C2=61vT-s^O`3QgKyflarc(9{9bl^S5CWdt_U7;?6BdR^(#!GTlKDP8H(!J$(c zOP3A~p3+!{(%}`RB-ouU9b9-xW9ibtF;p5$mky4i(pZPm;oYkwXnH(b=Wr`DjipOx zJAfd{bm?rL6<{4o7xWDlbaV7hjgS=`YJ?T|p@pP7GR?z?r;}SHo=!e=nzeJ&sg-dY z`1y%7$^;+IU9(K|3Eeg0S-VVYd*)%p@i59nU)5M6zw{~JwKdi^u;Af~8i^wfoGoJ}{K(5RpDoGk+C(O7w%QJEi`$!B1T zc}F_AA<(vy=cOczQ5^`o4H86n>v zWp~4;k?YllDhI63=zi%KzNCr2-_$Ts=B=^FJ*<0(eAH&fV$8`zO;>D?WKz*oU~HtK z#}dkHv9gIVmRx4jAhb7=Pg8=>X!5Fz5_1X`yWy!CaN9}MZ^8cFg|g_*nO9S4sicH> zAplAw=ly|2N25&fAJkBS>;kaFtDg{O)KP1z%8Zt%$d!Tz6f?-=&1Rg*o6S%Idud9c zGX@r&p}?emOhaYWRk}FgVI0xu6tek%X$R(4HB?gehc%QzN10z(tHQD~6`D5&yEi;_ z_c>KC+n~v2=3u9R74|49&~W=SKj^Cx;in3B+b|mZVFhdD)x4cE0i_2xJKqY87M0xr zv%K+vy073+SgEQk`M`)2mVJ3?uomP9U=5X*1`8`w#&udBSaepb$)pmRl2}(VExX(| z5n4Zmres>($+Ya^+eBy`9h#D9!B5R9ryI=d^97bP)J~h=Ey`qC>00U30`T`|Q&HwG z(!pbpeX&_lIyif-!+|UVGll8GAP)Cy5;or8=PbfV1G9-SOHjp_OM*Un9aEAaC#Ojx zURhOfQkV?SD!dOq4!tAae{zT$y8Trc4vxe_W3-=}suVJd{M?ta$@?$uQ*(jvIWPRd z3>8ju#qdfk)X3W5S!ISbVWAg2ryI8fla$SG<8T#Prw4q^mBo2rGrmwpBsW5@@eM?A=n|OwoA5PzE5`V zwadiHcPNpsg{z8(PsqAg;PN2Ou4o4<-*=gBz^d5zW0A}7Be(TNFdc+gWdFuY$yKq)m35RgXl?lvGM#Dowz;gRT^dp+oL6vm1&u##KV z#WoH_k{5V&aEHBRmXheF*kR7wo01tWt~W1lxbheo(hNhg$KNY6?+j_9s1cwkZ>Zyt~*H?>uvlkM1HYW z-7r^i^WAXwGH^=5Ukc2*Yhe3wt2#q>s+)`UDT2~Y?O2#@HuMt*fjXt3y4Oth=y>x^h zv<`msfk;?aB&=J9ZL6PtdP9#1oU#0K z$p*V}cBQa=n+r3OQfAG-&0%Ib$zgV?D1kBBPVtV1VHbX%&n(qkgLdC9j1;QYTCQz( zRz1VklqpFGDzil&gH~Ro+0({aYXN?79ljMlv|(U;pm>6OTf<$+ac`FeCVXrb;Fkxo z;V|og=2nNx5yB^=i;5R^( zDHzTJtDNF+EeBRT;0Go%=m)mwsv*z>lY_wOno>Mdx~!|EiH!qe;w6(OYYLLHMw6N~ z0mq;4!HpM_nm3tX{ZsJrJM)r3V{<<;A2Yc=P%O}rH3vU0uPpAn6JyosS|b-)UT%d3 z_GtD2p$P7RLbeRo5-1n+Zl@&0lik`p?s6~UxSaj!vm3;nG=`C^A6W^;_`Uj;p$gh9?v^`lR(R5v~a(_GO=0O z5`@EJj`P^G#cg)BLP4obLx&5NrL>PZTLh;BwVgr8b==Z8L8SX_6o;x%@v3BJYd zIofiex6)^Qpn6L^45dZA3LJnRafa7^+8&1H0s-zrkZM-4hM=y>>SBQ6EVr5s>aBCp zcZfJM=_nybiTJ>h5pyaNI$XzunZvhG-1TNn_zi!WGSrlppke6)U+)VyLeOuCs4@=L z7whe<6zZk0#tL6tl`BDUJ3) zG?E_WiG)BU6Iaan0wn}03hnFsJqx*#o{P~41C%}o zk?EoZhEyuLs0J}bcI$8*y@aTE?IwX1hZY6J9OT0yLhTk28jnbz&VUb##Hd{$LQ{G- zliISbllFRdR|;q9IOgX3y;Ye_>sOgEIjC_(RT)J`f9B8nwrSMs>B#~ zcoe3y#$-4c){Sw8o(<)UW|{+EFHK~YM{u`WlFfkHaGLCMmC~3b5+Xeh#swGL@=^Y! zStoq$4ZfzbyfwSN?o&4QAQ(1+o2S+~fnMQJS2;+j8UeTGLf~v_c`NneVAZ9-8NV`V zM`fmk1^BsElK?Z#RwTGsZEvOHS)WagX{@$5ul>cr<2Crs$PBGIbBMF$)6VKPQkKjX zDa_PTbp}qGbLl`27k7*^=$P=Nr?u3?FDC?Uh98FkSNgc&zwwe%X;Iol#1yMlT_GNE zpg=YdTviu2dWNfO$WZTi!Za+o5-9;QkFP{p+hW*!o+p zw&2->s~(!PW^aL}G7UfA+bS(Ct*EU737%Y8j)upc31PfVc_C+1Ue4PT2pdY(hA4tu zf)9-)nsQR4J3l3IMP4haKo!K5&vYuj4oV%T6cfG%I1k-3Z*c{K#KRH=bBKJa=p@@%0D7`n`)lC_Oyfw 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

9AqOJUHpRnuHJX9**rw4Z;x$S>W_g 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≀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 z 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

26zwN+O@zE#%+ z^;YO4Ww{^nt(ps+Am1}kuClxs)YqXAQkOylq<$RKFQDO4e}?j;+B|lixf(Q3zKx-2 z+N!M}->Mygx(hT^S@wWDc3)_aVmm;0Dz*#cu|0#@8_HMgK*(c{hw|hbYpSxG7Su`5 zVEHbDUQy=DAq5s!wWqZVlWKFwyJ~Z5n=y<6%Be$zIll2i&?F=+rs?I4e>2c4|gCeQ_n-5c`QRzd9uHC60kkjEYcoub%W=xW6dfjo9pP)~*$ zDRwgCv1da?ioG0qK(W_A9(zkr?}m0$?8A`9J_hX~-$KZa)nwwepuP+3B=r;MG^s0s z`Ykk0zDo2Gp3r)$L%!bHkgHojJ1WZ#kgwNzklV}G92&1I`v$coG(o=3&>PC!1MoUD+ zGO-`zTh%tGouKuU#ro5p`55R-#SVnFRP6DP$DSC}Q=uA)JrnZS^Ps7Uoenip>~)aG z-X7FhP&LIq0(tBc&{>Lo1!}L@w;_-HAgIfsDvJFc^4MRYgnTvVpP#KP8$hmZ3jNyH z%3yow9I5q#x*PP9)V-l|rM3uaTj&R=heGE`Jv^w#K;KHugU**aB&Z{xucV#|Sqq*_ zObqH&Xob{EpbMp58Pu83a;bMh7fGEJ)Y;H9`JRG$*0#(qLS9yH26Zv?v9c_OyfnUo zE>`Ss&``xzr5Ek78$hmZ3N2G?7UZ!zK}+Oo3fY+`nb<3+Euc%~I~ba!%-tZ*d~{Iz zK#P=RFyxsFpvx3n1U;wN(;<&NC#ch)cNBXyan1px2b;3&=Bn54|j(T@75REbBn7ZUDU~bt}lu#>vEXL9GYPkgo|;cOz5x zhJ3xPg4z*!PFW6vJo8b|Rf^4prYd#_E zZs-ZcJ`8#60_YmWE`)AZ>>H5Bz8}<&p#_Tl2J%?z*<7pGYP5oL6uUm;v714z)`1>T zYy-$+cZVL9Z(nGpvK$!HcF=Y5b%)+k=A$6b+&8ELp@)=Z1mu}dg05HWBxt!}&xSnq z;-F54?pN$hkjLHu-JsYxP*onfkxVRrJodSuz5?B=*hP@XE`x4V?AOp{id_kLY~|W1 zwFY#TVmE<2b}Q&6#qI>{sMv;($L<-_7SQdDZL2y$9@_=FS+TvK3l-ZJ^4R>K7C^T& zw%C&)kDUPBDBrn|^(m8yi-LLube+^2p#PQqR#G+Zv*HlW!@C>%-aUF9(0AWG=e;HbLdXRwuU}b>_L#n zb`R=N(4~safjl-JnkL@~&|S(hHmKtu>uVIp|hmE3*9SqNl-tAX36&*wC^Ui1;0SPUOPrzT@RX~ESp2V-a62Iiroe3 zsMyAk$LTb{isZD~qH*~Djw$Niz4+?5m=yCau zf!1fb|74<{`M6R@CI$z!5IR~}PJw)@CPF>sI}dt7S*8W`N~nj_o1iD9-X7FhP&cWM zLQhG3BB;+pU8KGRJuP)nP?tf^$oDn0i?(?sjgchEZITLh3xu1nJ9#g<}aBziT^$G_@GXKS}V&% zkY~OEI#9kFp%;|pwxHevy(r%!P#%BD#FPB*nHL824QPL5SqgdPPoRa0{T@1zzhvT9 z{`c5wJX^ul^`U(fy9MO2+d+HEw=49LvNQ_no=`KXt)Z8tb_i-0sIko9C}OYmqGmj+D2*>zTkRWYIVrVsur}R)UBa+q-F)RKJ>19O`%Iw3;RG` z3$25C5VV=H^ng5bFKA==20-sA%iy3ELK{jgf)+`g5Y#iF^`%}6EtYykP_Kn*O1%TJ zaj0bC-k{DllKLdHMCx-veFaKNT?{Rix-6*6p%3Ky5xP_R`#a?OTYbxvS_`VAEL%ao zzgf^S#qI_@uh?dg$L=50HqdX4Y@5449(y?SvwVG^50xc1sDq)8GsB3-Z{xL46$hPO%Fik9{5bM6n;3kK-trSPpsYw?X|G z`dYEowo1jW2Yss8Euozhn+197&OvPieWBQWAzyDxXt`oLLoF2B1M=8ogPH?`$KDKmuGssb{)(LodF+!xeF6GVv2Q^h`#!W( zzR#f*%JOwke}uk}ujbLLPfiP!EOP zRctTFWBWi~DRwCIf?`KP9(zhqCqi#2_FTwgr$JvU_FCvO#oi2g>^(t!2zp(yk3$~& zEcA_H--I^h6O>FWhCKF@pneIxqS&7ykFCV>a=umU22e}IZVGwqwn422EmUkH$YYyB z-zl~=RE^^@nK%gY*zQ3+3VL3#IgrN=g1%Sm36OoRlZjIxkDV0Mv!Q1cdnx3xGoT+7 zdn+_evG+h8J13|MpeGgk0_3r;LO&{Y2{cc!pFke_bx>DAk100Eqggz5UFcEyHiuR! z%QivX0h%jycjzan&4RiwG+SzW=x3>&g4!K=Kx%L37peV%IuQC*zEO~U{<$86e49@X z>RHe%Ww`|MZJrMOrr2Ac8hkS7w?iH~JE-%ayA}I9B$>DvI#HRYL!SADpxzE$t1J&fo_QXWRP1xm6ve&* zdF;DE{Q$a3v0p$Q`#p4}eD-{(s>-qsiQG!N?jP?6M*P%WvQgW3ZcD>WP1P-_364u(#YIvT1i_2i(Ahc=S$TW- zid`3SbtC9_#nyp5b_Zxv#WsSjQtY0PulK;9wugo&wj1QJM?!<-%Yp3s#bjb&P=`UA z%QqIfU75#2o_T6eFMtLp%XG*yUkByLcNesUvfLNchoL@FpN6)S`a)1&gL+F{0&OMr zqo95cZ7ttV&>U@5rMjuDstLJT8|tMj+d#fmb)jt(yF2u}Vw*$0M+XG89dx8(4~0DT z2*|#7<%$_vq*$Kb8^!Yc-ALt$x{1RT%QJAJ*fXJR6?+L(n{!e!F$41T^0>Q5y#wm5 z*oPor?<3H5ihUlctJqf|k9{ww%b>1`{Sxxn@1ZQkR@s4XWEEQz^4N_bSGR%=QEWZP zV|RtNSL|M<-33v`fTkAgh*IH;~-2SeG4ErdLFY*5ET?G<}A?GKAC6<9i`X~kjEYx)Sl43itP(|Y#y|eVn;#)6gw93 z*oi@%3hkxXiy@D_5^A8>o1xPbdl%%f4+Zs6Xb;6c2YKwv(9Vio49!>UN07&U8Pp%3 zCW@_GFBMxI+C{OOLJJkU4dk))g8Cn5cg5}r`FdMG|B>$?Xjf(F64V~1%GU>4q|AAc zXC5BZ(a_GyG9L2GQ=t0tO@r)yh-BjOpk56%l<#(^4()6*F$?m{bA$Rgw1cuNggo=> z(C&);0BWq*<&ejI8`PhnEX7u`~V zc|O!ku`fcOD)x2AV;2YYBgmc#%J=M$$F77nkgw`a9FxjY6LNJ!sJVP~pdXcaN60hp z7Sv|Yy2^3@hg7i_EeT5f_e;O_r-92gVy8BkxU#9dFB&?dMZ>^Seh-VEwu=ohJ~`9p>O0n6l$R?hX=J6WOoiF6M0Zu zWgZ53=Fvedg1%IiDNs~a(C6}92_2{`*97%OsHJ?fpgzhx2lC912lYAVQ)PJr^33l+ ztrWW)Dp2g#kjMTU)XF5i8k(Wl8zGOqE2s}ZZ!2~I z(G0OeGl^3kAk`adPA`*A&*V$!YHhK>p>lASeDw5tD8d|<=YYZTA6o+ zJae<4?hC!7EbSnVJp_6|z9XT7l;zl<=0ML%Jsz?<(vpdhK^+S{C3P~?N$Ocay#P8y zzN?@r^lOrd8zA4RJA-<^`IKco6qOY;U%uC%&dTz3P~V5T$hQKrUSl%x9pssR3u@I} z8D~(I4WX#4pgHpG0CiQC20?8I9V*|xP(5XC1$pL!gW3&xP+5+FJab>Dn_`DSO%*!| z^4OxFo(|oo*z+Kdy%_4Q*qKmE#ohvW?7cyq4c(*ICm@e~9=cP$x1ht6Wl>N+gl?1i zHPl1u4?+D6x>;(?|Ii1PS_|^bn?W~7tqUC?b*G>X?9SL17^)%>csiz0^Ea(!cmqNXyP7msJ&_z=3f{u}TUr-;0&X@W$ zbga}Dg8C}dTfQYw7uCWikk`W3L0t)*qb$kYQf0L+G*!OMq2rWgo1pFhogsC1C|hc? zpzZ_pkhnQ;6*@`k`%r(W9|rYv=me=Np08yX;W zGsw594m4cq&QPAzhCyux4V14XG)?>40rLGlG^jnHp~})1^2~YAAjOV^cyu}K##qQ> zCkAyYl&{!}A&K_2^1P#=Zz6#E?Hv9Cb=9#Dt0$$bFPPyiDr<;?jO`P&~g0nT@3$wY!7IdV*5Zd z6l+`Vu~q}Fj)somFRA0lW9?WzUa`}ldlY*mpLe4Qb?0;S&$dFEq-Y9l0_m1P*@u{N%BuzWTGHd0w81=Ys+I!LvV#!*sd z1l2}N+e)=D;1i_YAJm7T(el|y{Lk8|mmuG&w}ZL_YNafnLs3~l2gsM;8$7!sJejBp zxw;;-pVTd&lcd%O>W#nVA(?mq^4M3Q zQx&@eYNyywAdmezs4Jme6q{_4imeHqrr6D)BNS`*NPDc^&FyMKXeY(mJ@CHX1EC$| z>jaHc7W>75tM;pi@$&V9ij;W}bQxiYBsE3U1j z-U&^VIxDENq0{Ai3c6J5eG&5Yz8TcT&=$(F9P;&k1x-@yZ_o{jt=cpdy8-0trqHH} z&4N63Cuk%2nnIJ6Wv`$f09h-SOdJfIA+>8z4~M46*BAO(>m3OBHWvi-L})!_nE?5E z&xC5ocQJIPvRo0=YoMv}-2v^!hycH9gFN%RpgsXrQu}4Ec z$(IYAt1S6JEr5QIdJ1%&)bT+*13F*6Y0z<6@0F0R_xhmT27Rk64?w=&xzGiQeHNOi z*q0%XeJ7|(p|2FX0`k~zp$ipTX%CJ`#a4$rwl?JI7SIaC?f`l0E|8r^lZocgMar^o zP+LJCOYICzliEF~M?x3N*B^RN>m3aFdPfFzEM#ZxWMUHJ>pdGQ9hwLDlA|ty&klLa|#w z%M`mEZpckdy1zjcezM#&5u9ojGNMbNs88zmE`LmqohP^Uq+DE4Z|V{d?N zQ|!Hvjk_fivmuXtEU3>yH!AjZ$YbAyZddH5(B6vu3i8;Wf?8>B>Q}MrK_0sibcbTM zgAP(`eaK^X4{CGh8pXDRJhnY_r(zF-#whk^$Yc8jbr3W|u_Gam9SdC{-(=`6WjQOT z7eIH*cNH{MnQwqR^PNGxAM(%de8@9D4PC0tuR-@H%iBR+0!@>;0=ie~H$nXgxbj6;t_|HM-?q?PZB;$Ux2j=K_khk-mII-vte~^x>ki$oEIotT8=4|@5cGi5 zVL=@QO_DkedQj@5pq>RiB;RF_jc+pQ2l-ar9Mrp@3Cc1D@~v6`ohILl&}?OSHK^}E zr%3%6nj`h|pneODk($_-&%V^EkY`>G8ZC7TXs*;cLEQnGCtoAzQ*HB}kZ<#WL2VD& zHE=S~4f4!Ap+^*(18ugmsrit{jtJ@)s6er&LmoR7dQ`EOLd_L>738ru1@%s7m||x` z9{VUXU$HMhy%qZ!9(z$xuYj@@ zdjsULw?oIu_Ym}?vdjzW6VTC8UxuEN`bJO}K{oEe-HXuEQoju950IbPtL)F6AyTVD zQCUGf6uUL_tkkTa)`y;xuPJmJBdpBb0r?)a4(dTrH)ZJodFEbF7x@N2&nwH|pcX=% zq!vLhNSzSWGog-BFNR)}dPPvLffmYl2lTGC>ORP~YF<#EfZ8d`OOS8Xn^0@{mO(Em z%cnv83OZ2guh7dl0KK8u^PuXC?DAW9$YZY#>Wxri#ohyX>_d=^ zu_Y5vKyNC`vq60s+EwZz=q;%q1a&#oKRN0(X)dPnLekgsmij%kMC#8$t#lx* zg?t-8owVLfAz$ydL9GXEs4R^jUvG2h1I4z6>{|)$2!%Yhdr*&p)>mu}71WcVFQlFUt&n(+d)6e*B#nOnU8`zbKjs2gq~EE5l~cC z&|~sVf__n!sX@H}dQ|ER=vS#TgL(@zSL*%HZ&K$3bw2dFd@n*-+N#$f->Sty{Ro<^ zEMG&uRX;+BnpOr?+i+G>?0S&LZVI`&4fKFwcY-{&A!Oe*(T{*CDa!#tZ3o>gwHs7f z>JdRb7P>>~K&Xn;p+Ox9-757o$YvVhYB8v1K{rXg6sjt9dQh)}u9tcjR88uAL46py zR_fE{llnqXUxTiax&*2&^`oG!fb5&MWa1~NhScAKTCFW3KvFk?YD(Q4^0KM}tt;Oy zP+OIAW5~;SpP;scE>@OKkjHk1E|jk~w4So`3+h0~W?)GsMnO5sd@|&jPY>!@(0R&o z3FMh)KxfN$3$%f<+!@sSpjz@RfC`lP8OSrg64bXL`<619_z?2UpF@-7TM2EbEWZUc z*^cl0<*N-{q|94Do_YJAHh?B7OH;@*?*rMlqsc@&Xd`7gIH-q08_RbrbgeSyK%RL> zP)9&T%2EV*=82HaV3SOo4=qsarI5#76V#iav5LJH^4QtXiSj)OZK^EK1@#qZl+?x0 zW>S|0^%rP!`POOA{Uus%L&$weK7wEIcO-v%Bx=>hgjYS5GCd1BqFBkz&l%Nv=#avk z6AC*H$tz53lh|lOt|QBO9at$*IZ@4&uld_>^WtSJ_W+VFs?0hf|Gjk+MYg`#*jm^* z*zK?nW4Fi7#qNZC1WTtN@hFyVWMTo9olHE2?TCFG+YS3PwiotUY;SDKofAdoG^nidj*NASmXX6+P-PU>0-2`>s`cSMTnypmD95=Il;hkDt^i*Fxo4NaDVW0@Br{8@IdfE@DT77un7DDECpMy zL+=T81E+y|f#u*qULn2j2x}g5Q8gf-PIpOMrP`8tf0A2u=cL zgLU93;7Q=ApuCf09w^Vlp8>uBa({MOo)J3-Y|99LF4!GBAKU}H2%G|549)~E1Lca` zm7wguUk%Fs(lwy0+pY&?u6F|{{qN1-_TU0=ICvX)2zWbq6nGbSE_gS1J9sbnD0n~k z7WfeOGx#vL(YmyIup77x90ooH7K2ZKM}kj+7l6-zw}H=s&w$(okbW0@8T=7^4P37c z?F!rhd%fh{Wnd@peQ-1IJ8(;IT{_gx;P&9w;Baso@DOlY@F;M5@LaGvcssZw_yov3@#&Ai zoxwlA-r%O|GhTo@fc?R}!QH^A;2z*{;6U(Fa1eMmm=C@P4h2_&!@#u}SGcP_y(Ksj z+#MVRjt57BHQ-qA1aLffF*pgl59B&~`c-fW_z8G0*kS|PA1H4NDgp<9#o+#63M>bw zfv14w;5A?cxDc!cp95>bFTgsmRR{J#!Oq}Ja8K|^a4dKXSOp#n&I6AJuLe&57lS8( zFM)HwZ@{@=+YOn`fLnoQf&;;`z$xIlUCHM%q zJNPI#8hi|#4n7Xf0iOirN%&{L`@m9u95{o&jzOUI%UlE(Ny)-v+k= ze+IV(*WZ-!4BQdi790k41B=1#pgiB$1H1t23El?w0-phUgYSa7fWL#gf}3nc`vP|c z2Y_S1fnXWPT?6S8!F=!%a4>iuI1GFN91ea7js#n5&iDq(Ge@Jr0pJ*Le{ergp3NBt zo(A&VM*13X61W7M4893Y0e=J!23u~CkUIdfcOcJ> zq}OEvc?Q@8JR95{JP#ZXUI0!9F9zp=mw?xSmxB+3SAcJW^TF@HtHJg2xRM8M4c-V2 z02hGcz}vvXz&pV?;9cOg;6m^r@LupO@P2R=_yE|hGwluR2J*a0dMNlPI0<|VtOp+l z&jz0auLhq19{`^RUj|t_7Y7@|;b2KDZ7@ACzbf(sv}*1-}Q^18K8~cHs8l z2H@`CMj$?#=m_FN37*YK;|qz+LFz2A1-KOCNu4xhk?0Km40Z+A-5>j6z~}EVDL=vQ1BM82z&}G1wQ~& z;Gf_$aO3T1pI~3G0vrxjgQZ{%csy7KUIdc&^g@uQkJ8V9v%t^6qrgAFW5Lb3v&Rbd z2TuU^22TQuL7q@b9|_I_F9c5m?*Y#QmxGjP`Xi7#FVf9>F#drXf)|0k!HdCt!OOs@ z;N{?K@G4ODIp>3mz-z&$!5hF2!JEO~z+1r%J23u%J;1xcA>h5>f#Ch1>_0pN&I1>N zSA$Ez2f)X{H$mz;{Ui7k*m6h4J1`G?0o)UO5j+rl1*`*K11M%(j zFmNMKp7`wq%G1xAf%3HZmY_VL-x+)q+!}lj+y?v>^_pzk+01Lq>;Gy75umqe7mVwuUQ^92*Pot$@ z11rJr!78wQU&cFdd$1N94mN-XfV03F@F?&M@M!R6@HlWO$fig7pWun$&){ruqg`0v zf!)AU!M(uK!Gpmwz$3x4!PCI=z-zz@zz4yL!MDImz@Na&!FIbc-hn%S^T9pAYr%uS z>%b$x8^L+t0`O{(r{vO0z}vxhLHe-tkKo;4hkmp#a2xP`a3J^)I1yY7)`3gFv%qEG zd~i9q7<>X;0X_|W4L%39?az1zb_ZVq2ZJwzh2U%8Oz?H^Jn$`W0r)ofB=|1)KKLHE z8vFq4xEtdg*a!R=+z0#woCbad9tnO4UI=~#-UEIME(gB{-vfUFe*(EzDZSAE#y7Ax zxEdS^HrtN!19{RfT@S7Uo&&Z7Zv(kcDZK<-4}24B4}J@72)5dt`6k#6>;w)4Hv zxko8|1h^G=Hkb$A3i702`f;!;_#xO0`~mC^cG!dV2JQs*1Pj1kU<&LF9s}}JVftcl zS8xHy{Y>d);2z*R;9lVOAY)Iu%|OO4usb*$90865CxfHF!@+&Qx!^ePdT>0r4CJZA z^lRW`@GI~jaP2*5U*MKtF}N$30w;iF;Nc)oE~e*#hk@6DmEe6K&oQQ70PDa{!5Ls; zFXoTnmf(@#?jU1idOUb6SOXppo&e4UuLMs59|Grq&x7;8Prx(47K0eCz^%b^zyaX7 z;QrwGU^#dZcszJ1cm;SF_#k*C_#DVHlj)Da>%e3_>ou@5coWzMWXw+Q1KtjnfOmmM zfeXQN!A0QB;Dg|kAWvDQKL!_rKZ8rbj)Q4WU>|TfxDWUQI1PLnOoPvWmx0fNw}CH# z%fVN{_duS{O#cDC32r)seMWEx@I7#E@SosR@I&wj@MG|7a3y#n_yxEe{1W^Z_zn0w z_$|1}P}&dJ1N;db0{#jf2>t=qfr;(uXTY_^S~{@%fLMF0kAXp2G|w+4D1HB9M1RzZUgoJ`++^diC{0V7VHh4 z3ibi72X_S*fxCe(f_s49fdjz}M=(Bt9YNWD-V9vM{%KzDo9RTNm^r|@2?j=GtrImq ztloz;$9^0Bg?|!ftwb`=*Gja6P1CT>fyu&Vj%3@ocx{mC)mp41?eNb^x5}m4Y3)R( z`edR*={kuPeb?3q;W5_dmy5ZfXPsc~7-AY)3b&5oESn{pC6ajFh*5?6j~r82H?ydw za9Vj)y$`5Kl{8co)fSdjPYuIrrd3x>Ev%bXR9ar8f#WBRDV&k2<@$t}$gld^@}ep( zTNGB5*J)Z3SXWVAk}51JDQTz-?P^m+rG+!fOHr7M?E^HIWcs4FR=l#0uX+&N2(P^zT_!xPJdRyI`BmlqZ{l$E7wW2seCm)dES zR8uO< zuWhL0q;~ekICiSGqNpTuyt3M&%G8n7)y^X&Dj`!PR$*P}`W59@BT%gX9f&fV3lq5&taEvn<7-mWxNQ$H;hJL<^NKx&IhGMN#lsw~RX8U9*T>KZ~} zWqDO)QN}Ne>W-)?aZSk|(S=Q;oT{gi+wAb**ZA;^3hPo8sgf`cnP5CCW?EKWLC*Td z!c(PFv)wF{OwdT9KIp~1Lw!nkPi;-ADm*D4UQ-yA}NUU+g#tbd2E2&L! z_L)YfPCRbdi2PB76|Nt3Kj?^3Rdv#P9o~?t)fx|k+FH6M95`^hvGh$rPa?gurYB*Q z<#i?6Uu(#|qem6iH56wuECJD`C%?1Wz`n!A7uInMnz{5|<#H~P4GGu2xvaXDt}hHK zsjkGVt}aztSVO;6Uk?eotI(wQ2V0{mlV}V&nvbPrb7k?R=@0HhW0M3 zt_f=-7NxftWoMpov<{FR=z6unhN|+ia&l3bs;qVukU2_GJ>_4l1vZtDW!JuRN7;$! z07VO@qs}>(h!RFAtto17rC+UWnFG}mwN8q-uq>4-EiNkIK|^=yaU~Rj!Am;WRBc#j z;h5nZ!5w)0-DtG;(3#EPHdS%iJ1&s`Pq#@N8)rLt)JCIRACoiF`c2AiBl5=r` zmdrk!n}n7{3<8XQRAJD<#kNQWBRRdmIjf5gqZGnZY((}cmQ2Tw-S9#lt4hklI;t)y zVI<1xWjI=-o(o-1?k9dZYDqOMwaCpykaRdKWYj6dA*!o_Q6FJiQAJr+aZjyj2r6Tj z;4CF1Xzzt(HM@qc5()N}scOoi_J|;X&{D_ipm?G=$T>$ph=&Ku>O~@li=^vD{UAbE z=(!06`H;b)6jv%@1``H}pG7816iAs&Z~~dKV)|QNA1(J#no(5IfVb9$p6x18yA?Vp z9V}C!b34rspd7`81Z5KS_LAzFBMQqaGc~6H&b+>wHo){ZI0fb(rFeOD6*Fw-mVw~r z8g+*^6!~tOHeOo6AQ1Ko&hmglDOJ~v(#w@qOYrDn>v zMW*Cp9)!D|KgT#2#{KXev3J!_%(OT+PPp(QVmLGYf8(g!3 zW%LXW7FIc@EfpT^PP5{S8!;FcEul_hF_Ch^vIh2OIyJPQhT7uD03KDd3pzYC=Z%>~ zV>Cu|wHXbU8732^-17Y8$$Fh?WGB%-vszE5t<$mGJ3Si2g*v7oF~ zN%XKK4aKYm+yW~rJkn!?^ZUm1+No}4)0kdS^w)anEVoRJ#?P7s zY5x<%kWCubk;s&d6QQ&7QBu;wvVibwZ$C(BY%lBNx6rw4CUKfbRcR4(hU{1+toR~b zkEFy|^)QD-A;ixRJBjIjl8Xcka zWSN8NLOZn7@!riE*~F1OEMH_Q$&Q#zSp6AksB<^B5Rzm|%Vhx3`G#)RGSl-1(7mhT z>V~RPnf?RGgRHGuMHI zr|c3*F@2WFbt7_CZzZ#9$${=nMCJ<7NlFnv!XpfEJMo#}wr}s=k?tUWg5Nk|Hz`$A zsg)TC4Q5BKp=EqKY9Vu>ps$sqiWGMF!StXySm#6~-}^)ZBO`gA+_a(-^ggB95rk1A zo3h&Thf#x-et0&)CZ)s*D!|4fQn*3@dIcf%TBL3v(%DSc{ph1UnmH z=^hZKq`USm%i{(YX0N{T37Juznpsm_TOT=L33Xd^^+(jC3VRpsyi@RBZAz~cXgp`( z&R)+o6D{a~b3$X|TO=86FFE#shf2c;_DUiVawqpuDc5f^C+568Y*G?O_5o!d&OA9? z0I<%ISwwglNFv1-1`K48KGwEzRbxi)9cH~gdtspo1q%zQC~p>DY(!0EZpG?9cYHTY zauckbT1;gZ^=>GSE3uI1Mq)H=T^F%2r{j$wq-F#c{GwVF-DFMmOeTrdWrfT{bB`7o zWMfi%#g zyUB&;5URO}MZ3vx)sdBIWYtn!<5nGw=($M;&aYF5Ml?4<6yhIz+g%2ONU7OvCn(a~ zD?ctGml7&i8tK@W=~PKm*8XAo;rhdsOr#HxPAB`?qonFWePnE8M$c8osSVN?WIHJ* zjV!&K4Yvlj_z6?X();$_Ns?$Z{hfE(DXQVfVU0#wLeSYWU6G!gP4k>6Vaqj(G>q&v zd3D>sZH^u5wYsBAI8B!sita7udcV7-MW>)!;+f>!C2A>=$SKrT7dO<^SIHhF3Rn84Qpz=j z>^nGL3o{w9E2@$0S?7s=VV4~<94)wFE5|BMO)Hwgh3L@8T24wP!*z*Xi7S&`L%)Nh za?VwROj!0pM#FU>X?jU!2TxP?tu-e+JX!5m15eEg%Un&A14h<`G9JrP!CULt7+x66 zgv!)N?pDZL0MUeW%B0~%tZb@exe~@$c#NFMpd;e(~C-``GsH*H#UcL5wk9T-^n*V4!3> zVo60Iv%5@-cI#kWA~PS5>z;m6s1*@To5M5F33{DO0UZm&hmG$;fmGJS&T`oJ-i9!C z?5JVE^(U6anurDk%bKt`rm`-;~;CKL7>ZW~ZD60@No+*~mz zqnLqqL1ElXC4@It^wHaf*tW`A{gX;qF9G%qlL%*>)m%1l^MWkTC1!B;p`l#93FcuU zMrSgzKR`0!vHT(2?1h!3UVC*lOx9y(30r!#GkSy`U(W&du+ygjtF8W!Tf-Tiq0j>ki!BS|Kx_;Dq}O z9iF+e8(rrNKVX91)8huFVxsm+8;H1R`b6W^&ci!TH z6PInbbRGE9Jam#wh}qWb3fmagskJb3tomNK0-=4*%p>(>T~#VAmj!kIJOw_?v=q4qJe7 zJM*LD#@)^=taT#o!)6DJtnnvlhJRw|ZfAB(ZfAZ%!@^sFXHKmcpQ<0PSsBJXFp%+F zgiiGtIw~<}JO!PXUC^%7qvgFcr~+61DD}zNZ`U`!t66r$|1ZdGX20FgvbQ)`-hoSR zZ|1NSWh$>`PbS*IoTrJ~e5GM|uuatGc%m;*#RE3gFz(4t$P3<+i2|?g3)@W9BG{*@ zPW5UPY;#r9u#Z$d*{i3+wovs7*axa!>(vFYEmeIO_MWQCy!te3D^*v(-cj{KuYLy0 zQ}uV4yr@2zXwFUUF2Ai{omCajm6kP~eXcLqCwy}>Pm-;y`^EiG1F?C)Bvu-1vR51Sn@ii|%w*YHm) zU5j;0TI_2Y)@*Iw`O~}kPPEw3MblIHLHVRghq#vp4QZ(5rk;ArFM-L3RQ-st6Gw83 zPIkc1y3Fq|Ms7+G3zxK{G&BeuszXfd=z%(fs}J?@bIaG8EW<-LX5`L%F!RzNOT*<> zIX4hU`u{uqQKOB%CC?z{HhTFULo$&^rERUvA-mCc(J*QB&DAcu(RWp~2=z}YoUay3 zDmrjUqu)l=uz8geGAyTg%_B_Q`y~D~-n>|Bgi}Lz2bH{MDvv0}U)Z>KHWu~Jh=m+W znwNBb6N2#FaCY9yX(rkX$ut>8RUo;~%Sa&JLY1UbINmCieHBN3%FcjzOhTuFn zS7_q2q@&h-_OxW%tlB+{v;SMu5?xAa6Vz!5bJ_o~X~{@xN4#$oDASUCgW76KZd`2% zbG7Bdq_$ibBx_nCp{}+ZliKQ_VUcNxE90Oi2s;pJtcj&8PZ;M;{<>wAawSI{nbU@3 z@+7&G9R6h+(q)3&Zp-c?s|_BJYV!Nq)-(a+D}Y+kML|iI1|_{2IdUZ}taU=l*M-dq z7}?`b@(})s?n>G*De2A{7Aa}Qiece13U%W(H_|lzZg<;ghq(&}&h0RJYgitqwVhT@ zc84jixysDetqL1WOzCvwS-Zciuu8_vLY}#iG1A?@+2oFIENO>-ay;qyWPLF-2&|@p z0!ZdIZyd59o_ci-BqYCSD`LUD%6ER5^~J&PeNUVIwlp` zOT!`^oy-q%W(BURqo#vFe;l{44juCERP%pymfxrk?Mq&BeQ1=1EVKV5B zRJ#J08&+key@RSU=nhvkd(hoc)iml5RZoVwxTnK)qw^vSgauZ?V8Q1Xd zFTJy-*gb#O1fN_*TGRL!{>d@KBRQGGK|$d0c$ge_HrN3?2^3E}8I+;;6i|lXIpD?M zsi4ew=YjKs-*V3KTRe3Dxp$r_taW0R50kmI3xg!&T*5yIb)M>&c*ip8du(CFC*JLl4!kJW8M! z)s*B(?9h*7FxW}M#6u5OyKE2LS=G?Xq~?d_cv%HuQrl(x`)e=L3rX&>N)r}U;%Nu) zFZ`3^h^I+SjtT_wU zE-W3WWS>7dcK9c{^DM{Ye5Pnv#IwX-B)h}qL8f{)e<+_3ai(0cEEI=KtL83{Xykum zF#Nk-BrihA^`d$W%OkhF4KM2Bz36bY%l4waSzdG)Y2;2YrG%U0MeflNzs=c%E=!jW zYx1OP@d!Eo4PXcGMo>KICQv+S0Vtky3n-o>zr~Z}w|LSta_u}xSnEXEhs_QcMZjOw zlf=?_l4IgYRT>uYB=*O`?nIZdfe!^;*M!upk@ECS5IUF(rqQ7PQ1A11-RcZ7m+MyZ zG%Sy-@1jnU-8t>5VbVFxQM+un>Zhsk~MTINsA>2k;qC9Pe3B9PT+#)~zpqGHAXCo*4X= zb*uaq2Rxb*a1JQUP3K(LoIs^G_=~PvMRyM9m^k1G8WwTDQQSg5)a8GOJkB*iuJ=$V zvUm-~z{X@Z8aAeivzl5H*I1WwrnzgZ-LmSulKlLwHI~%*e{hZU26ZNW$+yjQHT!N* zhv$+bSBJt}9l9{7Ll*|gT4PD5t3$`64lmNMzg}ZW4gTHkq0!mLEgU$vf#0NId7Rb& zt(@!zzWW+0Ox7RLK>l)#B^CA`Tw|@Ig5(^&06TzRg0jZ?8kENR4Jd0Y`7P%uzok)L zMc!S73Ud|e!lXi77$j?rC84fD9g_-`7m=-%h&0Oh8Y^g#xofO{r<&K$&HsCHqdv5p zyyp6lynxMZZ0=$B&_E57L1Ky86~HoUtUXngLE>Rmv)5RAshUQ8K-H6dTv=lcQZ*bx z{`MM6ytC$ic8&EL9wr{S8tef635q8sdbnYu87RXAuU^zORuYsoRtr$pSn~Ut;J0|{ zo#ftmsxY_4a$&N@a$%6HHI{@rPjyT@^*#-Ycxvt%EAZ3k8Y|cC#Syj!JAhq4 z83eZh#UZu@We}9#G6>3Vae#l4XXgOIoCCP9bf7v1ki3O|qB{q0OdQ~24U0Iyc-|y7 zQf~d_-l|Ns=Z5~>-l5TYm2Z0I*6Xhtmd9BRH|ljnR=pmM)##iC-lTdR*@qis%BPms z^9BX?LbIk&0*v zc3Pmu>sWMG$Bs!I|D<8jI!@IOby=PyuW%b1zQ3f7!U(Q3H?IHPs$avvum-tN$C1yy z=Q@tOLe|Y}3Jk{?sbMm1tfzJbu*}S6Z&hVxv#zSyGn;)>4d*UmH898NnzZ~Cr<+<- zSy|MCEjy0UlqK(8IE^^jV6X!?1Qh2Q3d%?_43s7B2vFuQ1)wZ><+m((<+nIpb8_vR zPMDjsxGCRrLy3UsbR5>H^q)sy+W#csda)=?IPi8=cl_ z2b8MfuKeju>4KyKx{`n4pBzIj8?-0jydaSG&T9uW4wMdPJSZK|1W-DliJ){mlfX;C z{Xw}E>i|%0#hMJttyoh)xdrP$upf93I0@uCtolu`La>3~hk{3e@>}vMzoi4)gi>=I zm@wCYxiIO#To@!Fc?ka`)OBEvNe8x-hDACsU0scEg*Liq*7)j%+L9FalN22h^j9P6 zhE>TvUTI(y>Bd|v7p0NlVZ7(05h;2Q>Gp!u^e*Ia+??g3X@%w-B@&i(h)8&L`cBAA z++{60XKXY|ej|bZJAH7YebE%^Ft;z-U&HdK;RCcSWiKixYnV(9Ca7I@Uo=J4BGmm< z&F+g1%xas{up0VzCkO8Ny(aH&G-ZOo_aL-=9tKMLoDNF+tN^8bR)R7?s0O8-)_^iW zkl!*vkl)h23dp%@U&7qV!-b^-m15v8IzbTKwJ*n{eT~tuNc##lHT2TUV7+!eOddrE zC#Au*MMMtV-fdmP!~G475h;`6f0?HqPHE(NYL$lNQC0`3XJvcp!5Su>I$iCuJ@pV( z#Z#xLn(e8Ds)nP;bgXi3?3LP+QABF~FGmqw6Z60rk1PDY8BGo)-SAJ2C8J3za6%9` z6K|8_9|?-L9tDcG9u11O9s`QE9tVoIra|#m`7P%xzr|Y%$-VPdVXYHsA2vH+6a{}# zZxu`Dt&WMe@^(zZBHpT_f!@tJia~U=zAQL!NIwpEIS^bQnj0GQqFKTJW!^c5+~<1d zNg9?%*&M3glvb?S>AaH-X-37Dk$DL4;1e_4HWM@9Te|86BO?}3l#5^-{PI}TfB1yxp&?v%z38^ z6Yq3kkSy<%Q0JYFiFY2YVWxLZ;N3X#+`OM7)T^USl+y5SS*l?lTxEqq@ZbVz|L3oL$7`Yo33iu8dHSi=d{Lkm`O`(Xa+Vq zR`9~pp}gN+b{2U9)0&$h>B+1n&A;$Zjw9nlTLS8Xzzb+ea_oyiX^EGB(h~XFmA1so zKxu)OgR<(l0+dz9m7uITt^$7ouLfoHaSixq@LTdDzon&~PRY2ID$LD#Tv$3#DJK5p z9K%1+T}yRLTI#tP7HO$N513dLzQlN6eM!QYNqQFm;WD7Qu(~jieG+bN*QLjJc|}42 zZ+5Oog{s^HFVC=LC$ulGWFMNE!ABfIJE!OC>kq;(8OCxBHl%{PrhLpM-a)X49Om9Z zP_afI>O$Fwk8R1nzw)8TbJpTR+hK0}Wk2Pxrn|FmqmJd+cY<>KdxAQ@ot(Hj7v}2R zg{84_VUVml2PD+hxnol23pFfq=fDtN@T-&3@eRd8dBrqU@L$=jHrn&OOpbDUz85qs zkNj3@ZD-F1sx(aI1J9~mcF$L>Y7y#Fs%H0mHL9jjm#doH^Bu0L)SujuBr%8N^iMYt zCVj*;{QE24(r47l%F1~n^oXYPP|`n5<6rnE$C3Vt6Y{t1F2`Tg`JD+q+d~%tF zMf#y(RSlIRY8rx$Cj2$Lwz@JuD3YN=Tvriju3rc{CVhk~v~Vl3ta$$+|8CSnKOuj) z9{Mj0%Om%-6jJUjyLB2S9{Rr8WqWA7s-c%jtq;xdvI@earpx&ES6-I=0{S%%gyLmu zy3z7gyhD!t1}I+kCMaI^7I+Z&4k+HX0xS)F%X!Lg@v1k-vGXcn&Z}HlI#8WgNgl&L z(VbU0CSLWfhDE$eS4qM13BltF87I=udFU0WEMJma*dn3-t)1fJ^0jplbH4@kmue zpSNayPZCr7ZYlr%%I9?%rZ019O26u6el?^S{>gEqXI&Q*|CPTl@Lf6f*P!_PH=y|Z zx1jj?Do}dX??CBMzXunAKY}s?{0UqV{Fd{V-_jPopd?&d5a!x~3rhzo#loMQQ}`#k zYYUD^TUe!Gk+#6RE#($pL*(UJt{rFtk*n(? z(?}k}Khd4jI3`ZhPQxNjGn_9Hjn;46xVp`+U{S!9zYqHl4XkVE-PRyC>NmZ}U#{Qm zpkaCB{usk=j@2+3mbX{C0+{Q-*;Trz^RreO$Hxhg#Y0b{ql!;>-JWY<>4wUX~{lEj;gVMci08019=bClmxDhDb zTt`qQj`Ca1TYig&Zb}I_4;ALRH5Zl+REmQ?$#eK8y7N%S#6$BmEaIWTw!MznLtGK~ zC1d#9S7V~AIUCbtnwgm)WThPRhkl}vCH@=T-5R|5KPorcWJXcoxlLxIhUHNmC#Vx= zceN*Km^7K;YM0$)W~(YqW{9fUP39z3)2M?~&2BO$t19z_fvRTD7fw+%Y*3PJ?n+F? zOmXTp%@05)+pt^w4pt^$6khTG3zR(Sn z`NDRf%opUhoWJ~*hSisna1BeCYgjHU9jFuwf6@7Z=&oToCJk$VhD93IcwV;_+`BuW zT3d-50-_C0cM;;j(FVu`V~s2?4sn)YNYu)=r7*?+%5h~4EwIrxR8HCEwxKc&%cJDy zsNZI{p}86+ZKy=;vfI$9s!AI=RMqS@G*8tus(fQSnaFNKr>QD!Xo{-YZRm7W!!|Sx ztK31UNo`2KC@7zlZ2HZNGAOO74fVq3r4984r497~r4983r48)@N*mf0ls424ls2>* zC~ar}C~Zi7OB<5k(uVea`PM$szWq)l(QCelpaVVB?yM+As-rTG{B$?F)U4gSze%yd$k(ZhhB51#^$? znio`V@R~LE(zGBfaFS8;-U!}x*U$kEXlPY%x@0Kv`Ih;Az8rItQS-JCv0&cM1@oRS zm|M}czk18OZwl7>sUS$Pq4nsK-fn0y=$>YuuQjOmm%%xWn)i6Yyw{y?xzlkWbJRUG zyxl@g+=cLNv{thhlg#Wd>oT((C2*U=+%8}jn0skKcbLqL zllnehr}hiNS|nsf=;q5~VGs2dyMtkF=3ExoB@?nU?d*<$xjFRQKy8t@64r%jb~14@ z%+0Isgym`2!>}{-3}kWR)TdyNYuF30GnIV+lehOK6EdlHs?3m``U`9eO)uFjOrIYu^ z6!s4d`xPcHx=SXSH4l&58s^mYuyr++&0+4iU0^LWtQYKjO{K3_2f!}Suu(91<61H? z9_Dg%kXK7!Ei{!Xm`k|<)?CAmhh39lFLswxRJ|T{rK$_OdKc^yRUd&}rRp-TJ_VbvVei1?B`e9qhcK6;FTDC4>|dJ7 zYM9GWk|o^L8n+`%Uha`hYyop|xAp3du=h1?f0&EA7wlaP+Xr@yrZU#6lVI0sn5=8B z(v+)VF6CKXJr4G^rgAFGrF=H*4Gp^tcAcg&->WykuGg^pVe(dhWMT=-rTmmvUxdA? zsk{SoDSrUFLF0Z8ljpvZiQix@Zjv>eQ`d#Pq;WgKT-+^S&uiHBup2d%o?h(>yGg@_ z!{mYDWMVYTr98>22g9DxRHngP%GIzZHS8$Z&6-Nut0%)2XxN1?d5krgxB})!JKFr0v0d|MRy&onw1mhbp7xyWzz6iTl>-W& z1Wc~)B@@rXT--Oj`X20DRX>BdxZl7Y*0{~tkd#Xp$wVudi@O2LshhygQnf40#oZnD zh{oLqCR?}3!~`Ek*QB@cO#ye!*`qAQO7tmULuU6<_b7vVi{xVtx<$DicE;bJ;MMZF zAK8*oA^elHrQeoK?B5w#VUg#;(2fO+77Ak~vN7%Tt}0p)srAvgg%6r2PWfwJpb z3?2xUfc0Q0crsW9UItDBZv&@;%fSlpN3a@Pk6BL*xD!|h7J&8OVc<;g1aKC34R{o| z5Ih!q4m=+G0z3g+kGz}&=7Dp-J;Ax)q2Os?EqEq)7I+qTCwMOS6nGx^1$Y6t8oU_X zoHDxv+!MSU91C6rP6Mw2)8O^sh2Tx#?cgoobKtGuH{cy$OUn9Ause7UxCeM2I0ak; z9t}PSo&i1rE&vyU&w)$9kHKYNOZx2P;HKbHV1Mvwa0>VwSOLBWo(jGME&yKzmw~T= zAA@g#tHHOxJo>*CV1Mvka0>W7SPOmto(FyeE&x9Up95EdAA_HPE$Jt|1UCi00sDjB zf>Xfn!3yvv@Ko?;Z~^!m_%OH{dHro%!b`X7{@qV;&@`OmFUdQe_{gJ;E&4EKT(~XuH-Z>R|*oRYYefH^us?Z?NeOZ zvsxx*k#@)WWTHJ?WD6O7`3sM;A>768ryEGw)exE~}8bRXP}ewZpy>bL~uK6RJ~LbBh-$-Avf_y9Q9Vsdo%VV~dwNTHT} ze`%0lEI)j%gZ-|Pa62Zsln6gVdSa$`i$_G{RS6Nd54WVgWyUiFFEBKu$JNj z-PgI?`=0c(qkOo@eE=?u7PZJkixig}HB#o@CjL6TFi9;SmqMX_G%yt6uS^V;QsV`h zUej+rWuJ9P)@K9?Q+4uP!!o|i?oTgf!6(ThCh{rlzjRG8h?Y&H*m#+0PFy{z1ph^h zsFbmf6tu+8Eocpky&GOiMijH4MX(E6l$>J8e16oQQjSGdp~VvLv4ZNB$A7A;T&VG> z969kmLt`JOa>0CfE1LcLqzl~riFW%wQBblZ*lH}8mt3+`y4htq?Gg)lQsPYh_0O4N zZ9vpNT_2InP2+hOg}zPTcS%%sopfIbK)4 zsvxYj-pJ?dZU|zuPV`xP;xEZ~fyq~f9?L4Q*@X1TDX=gCKi3?%QPHy3Fc5-$5 zQ+_45I^9BvZpbogN)&VdK~g`;BvXXUZ3g2cvQb>(e;e>GGKCMn!`9@f`yk?ne_{6J zT>1uqN0VJS&at4(D2@Z$g2#h$>{CGTnLfTagtgYEd0bdUpi(ych1D#40G4jbfB%AcUr>H|1#?FiXwe1N*xM}}DCxCZNU?F7PrHTN z1W1AE?=W1=<_;Tld$Y23TMgySCC3a(v^#kf_rH!hU2>f$IDO)vg40JA??W`*VJ+2{v~&!RCy(P5z>2jUStHCi#ox(Tv#n47bveH9^dBbIVe?_n76XQL%E! zUnGq^uxvMbOPnrtejPFv^}f8Wv(l0dB6ifHEz35RlwJbNaEN5Gm z=6O!BEW21~?qpe-rL?wXDU+gD-rpH%zeCz$Rz&KB{O+IW{nl0@-%hIgx!z@el=z}avvlr}WS+=su^NSHi z-pzLYsAXxE{DqdKS({asrRl*#ElacHH?=HHU;k#fk$1C{9=9yB#)_xtnVaV8N5<3o zl$uG*UYr?ECdF;?7n$C(gJo&fN^{H7EbBLh8F^`GdC#qurJ3ez%hIgBDVC*~qn#|v zJnKBywk%DLe1~~)tRBttywkE=*E;$f%d)j)d5C3c_62<{OY=NiTbAZ|{&R?tceCUd zT9)Q{o@QB^=UHr7n(el~Woe%0dX}YG@BbQXH0%8^%hJrzptxnMd^V5U@-ZCRQn+0wE!dyIFv{t_FZ z%$3F6mZjs zkvWR}*vB}o*&^gt@7Nh`WYyz*%hL3pS(ar7E6p)+%UG_v$8GW#nPx0`(fKVm*%=Hv`3 zEwda;ElbmT23VF`WzH|Ni@LsL8JRt_o4u^LkrUG+mhEI%nt8t1vNY?Y#D#`AaWtNxsr>^IJ^EY0#M zwJc4a9AH_RHNL)O+0Lr*kGC=MZmyRfv@Ff@Jjb#$y=akMJg3Xw?P5vS?7hNq&vlsf6-ZM5EG~3P#mZe!Q*IAb4c^++9 zn!V6C%W@sdd$+SJ&E9hL)<)jV_V|irY0h?TvMkNLxOChy<`oAu!KQx`Y&MMBG%}<9 ztg}%j=D4}ovNZeB^DRrWO;uQyW^XpwvNXN1lVxeHvcAeQ@@}5zGRx9D`o)%|IgZp= zmS%4@+_E%V_vV(R*}7M;XA}Z|fBwpK^jN){<@thT*)oyY!=DgK$2{U3 zD;+ZzhggeChGp3zQ#$o=&oWD{=mM_QKV8IH9q%@(n(Woef7@6_v>a{Wf!rjgRV)v`4GcD7|{dgBz!(rh(5S(b#w zYiDiC(yYgKX!AMclfTI9(eAV?&7;q;EX|`IVp-CM#dFlxvNT79)|RE|MgOFfV|h2d zXrX0kj;N||M*{`M7q5X-yi!^NWodfmww9%N^xrA9oLuKGVr>xjx0ftSbM}3MWog#V zv6iJ-;}a}Pav49*?v^F9fVic+TqBluGtJkij~vUGZ`>KTX=GI~$Fhvfp&MBZ;K}hk z>|v#4*53w}r8zc#N*|w-+eXIwhb_xUPU_?DGcfm|XISa9wDLR3vNY4&+OmwETYODz z&OhFwjAErh+VQ%$-Lj0XspF+#rZde-$MnlREz8I%Dl`Ay(6Wrq)Z;5zvuAmRGK!T( z^oa3vqGj&a^0TdUBIna?w!B6)?LN(mchpfQKzh({IkREY0&g%(67gbC6|e z)_X_GGRxcK1mX3M$BvZUR`&ogaVnx!d(Gjog88w`FOT zq`WdUr_5u=EsNVUGSA$@vNYS(29_o5B3_1{(qreGVfL=4@5LXsEX@{po@Gf5#E*WM zWoh<(gDguk@A6XmSdPqfw7lj%W@*m69OOS9xRwJgoG zz&F;2i`T^KNIt6&%MoSlEt@#gIo3+Y>;WcNmS!%xTb9vW#AhgGUC2i>{wj~{W^Zd* zm|k_hWoh=F6_%yhdk(fN&34ksvNTKiE2=P-XR~ycS(avdzSy#i`bxuJ9v z#>}Dx=*@b@%%Z)&H(N(v_IKW5-sg8x^7cRfluzc=$oC-g3-b@jKRExO!b1*TDyv)f zrJ63VA#|3>M0eOwWjn)$DccPuZ;(zV@?j&Cjf52_+YdHUStabi-Nh~qlM5V4eO>4Q z8aAJ>k2LHK*hCGJV*XvjUWbj-u+MzhYS_LS)}AVMcH2m0Yglg|HXJrm!^Zotsj%T1 zR`0{+z=mkpKYZAYut6Fo??QLSSOVKybM!21psH_q^&{9ms(uTT$CHzZ)n08S%~REl zVEt6x8s<{o5jI-Y-C%uH9q!frU}IE07`C&jhk3ODwy&!46`7u@p5fJtU}II4Z^!gd zRo=?(j{6X7KUJTEZKvuxFjpU+z_!sa`8te?(SmMuoW^Jm+gjDGFsJr{jaPMd*jB2J z@#SS1JRV%zY6E;QF6JhJ9dcIe$g2@*b zl8IYjNmUnn^=a5as=f|urs`*2{Q-8cs?F%SR}YX>HiWrz-U@bzsy$%8sk*0EN5TqK zoe29`RryAWi(3afRMq2PKd5?+S1*GVsd^)9m8uVVbvdk9)t6ykt1550cPW1hD^c|i z*cYmbp;rmA`^ z?4PRM2Xo%E9JWHk-h#Pv`3NR&y5~zAu(wo|?~*vR9jsi{&0w#qD&HV+>TWPuq9qf< zV6UipfLBXk@kQ;su#hYQ&ry7?^3=OR;lVz*wd=M=GFIMRjPgo zdqUL&zg^sQVb!W`%>N%#wYyh$fz_y*&;K7)Rob76E535Ls&eL!sCukd=fY}Ll`nwE z>kg8M8@zfKtWMQO`2QkRU-Ie-SiPz%`Ts&yfA{J-3``BGc7WZb>b5X-cC@M!VV9^n&8u~=V^lp3cA={BT{M@n zd>Kn>BB@_V`iH6ydUZMMI8|SU$?GMOiI2VdElj@RkWBmmJ5$y5ne@1nH-jCoYB$(v zst)k#FxUyI?gyKzYN=PNVJE736wLL-XL$7@*lbm=g`KQ%@AK+X*h#8B4?9uS54`#% z>||Acfw_LX4YM3~&Ktu{QMC&!t#NntYCdd^s-t1YsCuYZr^CdPlZlzIBUL@stN(zV zs_Ip+nX2CH)kk3SRDBxeMu>O4x)OGpsz1Q$HEv6$jP9H}z)n|nE7;+x_V(&Pn0#R; znHUMHQuQFOPKBMRY8`C4swaE(Y}i?*{UvwrBr>(s~^G6QT1C` zv8qWHPwt%C!Om56GgzUjJ-xacOg6LV|6m8HdVp6;VA4;}|G_4!dV*I^hn=tLMX*V# zF7WETunSaO3LCHLYhHaHcA=_Y!p5qaV6p4Yd0p5=s%{J$t!h`V_JUok>h7?;RUPBi z$*@aQO~FQ}I?Jmk!Y)=Q*k!89Me%%9pYiJJu*+5b5GF5cNhW^uYBQGA zSE$++w!5l%Fqfkquq##V2kWou-d>#uyGqp}*eRI>+-&n=uU-qgQPn$OT{PuoUVR>Rld5mS@>KoGtG~c*R<#9N30tVz z3FgkZ3v7X^yo#xd# z*xjlg2WzhCXJr#ORiBkGRsZSL&tdnf`V;IIRa>(m3Tcqkfu>w}(Bf>K3qnsk)O_cZbQWCz%)lb2I5FUQNLk zt9m%>eT_TYt7pQNsCo(PT~%-Os=Th^QB@yZXw3%u@}+rpNq zx(V!6Rd?`eKiFfc4uQR->R7KH2zy-Bsj%l&t@rA2u;r@GgUO4al8MW`dL!%!Rqug4 zsp=D6eOba(eGm4ys;j*E2ka?TTX9>)QdKvHxg2$aJ*{dV*kVMyVtRBgeQ*Bz>Mg1K|< z0(()_Ua(tL9qiT7FqtJM6O&;#t6JvO!(lJ0dJOCaRnPM3C9qdiy&iV0s`q>KG1#lB zz6g_7a3vG}^6J;H*Hrxtc7>|zZ4#dICa~94-3E54s{Oq>1onoi`@$|#wb-kbus2mb z0(QQtr+M`P*juVz4LeuWgruV5h6vdeiWnH-gD3Bbn$7 zJ5|-bUfm1!uB!XMPEqv`ua?8!Q?&s$Th%#UJs0**Rj+^@uj&G?-V1wQ)upgwRejB? z@54S&^-I`MswOrI&v{+ghpKK2lb4^dtLD{RVEI&GWs;-2UtNOcF*I_GA)^L2e6jr8c9?W@r57=j_ z_JftEy0=#+!ai5E2zIEd^Y%&jk1 zdG!z2*Q&PS(U1K#Zbz6q=gzQiRNWCaLDfNC-3Ruqs{6zCQ}r;fHo#V?dOS>CN|#KW z=hZ7<->G^tY#&u0_Ue>RB+iCcXl;n}*#9b4Pm!_KU`N61JYK0)H0~E({R!4a)wQF>3~Q_Ej<7bW z4uUz4*caAH!-`=pMkQ=Ljd28QZBIJZNs$LCSOVx#5T>@KQ)n{P|Rp0XJN3iy) zehd4fzm!I@OL*LNFu9c^nb-^_FON(ndU|y?nCxb;I)?qE>H%IYfo-U2HSBv;Pw?vL zu#Hr`2==Y23%q(SOun|6Oe}?crRr;5eIK^5s$arBS5>}j=E`baSSM9ChJC7PcdzaO zlP~IW^#=BlsuR3g2-{TE>97w}J=UvpVVkM?57>LE-r&`{V4JJ@2<#nIU-Ie-*cPg; zguSWi?_OPJ8`_Mj9bm7ix-HD*XlK|~st$y`tm;^=9tg`*bt+6=+nG!p>D7~9omD*> z_N=Pcc=a~e)~Y@LdrH;ky!s}ri>e>NmaF=+SJ&E>K0?)YFt?wxHO!s!j<9W1-3_)( z(ygmJE}St=JsUH_v%%! zo~qsgyHk(5*sD*&da3$4>^4D7@i z`C2WjW0<_CHJO;^)jC)oRgZ&Rt?D^my$se@)f-_~s`{W;m&0~Z^<~&)s{YffpTl-l z^(WZHs!*gyAlfC(5VhfntIoZjpyTkTW zbp&jV#+~BT6l^b54~Lzk>TIu`2^*y9B`~+^a;sMt!Q^|s$;4x@6EyA{Ui}a@SknxY3t&I$ zm~xX>?}3d_bqQ>S#(mDKZ^8;x{RrlEFjjf>57j5(Ru z!K?jX`>Q$x=GN?!yjld4FJmVYm9Tv^ZrZE!V3Sq705(e1o4k4tY>KK&U~WbKidWx* z$+fU#;&Yf=(XaMut6uETtGW@)t=YGOInU_>J6P4dU?cUo>=0GUVZ&8D+N-C) zSJ79;Z`Vef8sxNr;ZCH`2pTGvH`m0x4?8FrbRolY`sM;0g&bb$? zMAhA4ZdE?UtCL}+s-|H5H0~^~o(M~+dM2!|s`I^i3#?4lMX;S!ea5S=!{kb1GVvj- zr>Z}Cwb{;Gfl;+B%&p4vVD6lIz{*wa2XpK0y}ddSc9^O~upXLny;u3bXkxmm^I-B~ zZ}!~0dLyht)q7yU>e#C~K|2fo-Mg#V|LQzZSN+hTR8qM_UT3)fmsiHc|BhuYL)uQ}q{E zM^)SO3DesQ)_pCUcDDK zQ`M!gbyR%~=JNIt%*{oAhPiWDt1o*z8lxR7sWG;OIdwgh1IZ+4|uZ-yPM>b*x%5`RKGd*pU@pDiU?*sdb#`UvPSs6ePTdA}qN+Q?R;W4@=F;02Ca<|q zCW>J$MkQ>v#yA4@x~iwaT#O4~uV~m!Fc;$<*hv~=3G78xUxB$8AHtr~upePAMl*h& ztTEcco>n!F|2wq@>=ae|!Q6h%-d>#uo1S9Q%o2N0PjW1HQw^yZKKTTB`Sr)2# zkXL0kak{E9pSerblf5dl)H76-S+u)L;C8Rd`sPekW&P#u19;1;vVJ{FRars1`v8*6 z#@so}zQft7%ASgRuz=OOS7it6993oK?G{xJ@T%-GM>TarPD6 zp<3Woxwh~RRhPo9*SN2F^?lg+s>FvTCYm!T&$|x<8g_qmwHw1k-0=wxi{xRRUh}N+}m`isw-gs zQ1u(H$~|e9sVaBHxwYS>Fn7+fg1KB(xrgx_jXTt;2hXR12Qt97s|RXq-N znyTk`^)lF1s@@25*YY3q>T=k8RbPh9)wmyf^;_80s{R2xS=IIT2+w&l*fpwlgPo}A z0Iv>%U90MTu(YbBUaf{*r|MBKcYXQ{uU-VZUe#-1ZvA$jSC_(WQ1yA(F`DuRUi}hw zqpH8aj#RbH!0?}FL*!=&#>CJy!Lbl3t_XTsdI?Nhz_57;fL zUIjZ`?RX2i7Qgu6+^Y%WldsW>FHeS_nUOgCgpQ`1sv8o>J)l*=LR6Q3qTGi{kdI#)& zRUd*$50p&2;MKQb52*SH%*~a5^=gYj^ysR#hsn5-Omu|>y$b9hRd&tH743x-)D~jXTt<`@)u~dLV3fRja&u1neuld2tI?wmWro>X;5ST9uv{Xe|@d0Z9c|A&u{ONC~N zJ7pH-5-usOk(r^nV5yN?R4N?c2qepiMbWILw4$^kDvj?-6676!bR}l4gveyK&1w?N< z*_(*^IN7^`*$0W(rq!R+fq?>gD{iF!EM{X}kSe}u^NLpbhzabQl{5xwV( z(T%9PlN}Juo=^0?lO0ENnv+ckW>bi&ooo(KS0{UOFncG_2Tt}uqE1fs86tOHwh*;< z+%6(_seMSa+Zp34qP9-<*I@QPqCHObAh)&b6kyyTAS?GL?1b0 z{6zGplWjgOkUfQ{#>t*aWcrF6X9#A`Bl_6MUQG0hlbuQAew&A=-f{Uv?zi1Y^ocXZ zGNK=y>>46>jHieWIqoGQcZ|1)K6S>}L-d`KJwW7+@f*=Mjtd(f7^5T6XU-UB5`E=l z2M4nk5`FGuClZ-gDz&s`1+!_!IoUj-Po34hUw?C;HmSjw5>C$tDD|DMa5m*&HJG znvWJDtc~Zz)8Tj`I<@Yx+8(L(Ukt5xwkWR|T_A5Pk1tpC{Vp zWZwv8-zWOP$$m<-#mOEHX8$Dm(aD}Lk#^O|Mi9B*+k@z^lO0I(yptUh%uXiy$;nV@`HdFguaxHzzxT$gQuEgV`*i-<|A2qDP!@mj|;C5dGm~ zA17MvWH$%1JBS*b?7Kw%G9Ju+OZ2CcJwo)LGj7XE1M}RD=%|zJMzqq&4hUw?C;H3D zjw5nw(S%?&#Y9dvhv*%rZ*g-ldneI9PWC|}_iC?ag4r!Z|2o;%iSBj2cV963714iA z_D7;(Cu>a#%=5`aR%=s7bS1je$@UFqhY^`;@HtmWWL~A#(wZL3CK5Gwvh#@CqmnlS zv$qqqaI*Ik-R6v27RusfLjoah86dyr_UGw$EP>`9Y31MOrx65Zrv zdlR`OXAsdzPWD2g8=P!>Fncvon3GK-y3WZi3TAI1YUO0_Au4pTYl+-#`Z=Nk$Gt}6 ze%rf5t(`GGCdzfPKLoRX5S{E~TTI~ypOfuEWhFjU{rw?NXu)$IT&f z$H*W$#Tlc3Xs(kjB67!gfXF>Ix1PuyV-t~i3`I+82T_VM#@=A|OQLp8_Io1p0zB@W z3uaqg#?d?{+nH##lZ_&Br#ytHy_3C&=qe{WHJF`E)WOMS5MAM97YDPq5p{I3_YzHa zvg?A`=ZVby9xbhxi7t1t)kN;E{FG>l;|>$K^YSNAXJ?G&@$?v-Y-b`j8%fl~$@U?N zbFw3Y*$G5looq`sg(Lhc=HDnIl1}XRO@uB zLwIB`D?w~CtG(5}eG)P(oQA4dwkOMLg`?6@ktZ7E%gJ+$8K{7Nmo>}uW?Rjz6Rn^5 z6n`%N^Z%LoNoR(iJb^s|zrTBsWt({{hTY&jFcPkSN$_5H4ZI&NhY!FFa20$9u7>Z! zhv8oMC^X;uIQ$*1g@3^^cxp5Dbzyh-G&~zV2S>o?;V8HfUJN(Gt6>F9gj-=Md>Jl= zuR)_k)75FZE6TSy`!QIf@KD`$ngdf7g@MCylb9y=O6!;nJ z0BfPSZF@f)1iyyE;dgKfJP2pNL+~ni80NxyxDXzJ=2r6G;7a%hd>A&s$Kc;^8~hjU zfd4^r3ww*fmi-Mp5jJl@F@UWgX9VoF@D$h|wu3`pIE;av;7r&B&W2rKGVBJI!ZYAw zFcLlm&w?9ZFZd2T2kwDUum<*rze8SMXa55S!se7E&OO+Xa2PxX4u}2W2zUt`2``5i z!kKV1%!e1l>)=>u!#KDGUIL$hm%{b%GFSyUpJBfbr^3B(Cj1%l;ywFMcqRN7a<;=h zo${Rsd%z?Z1ykX8I2TTaX>cl>2YoOLE`Zr^G0cUlU_N{l7Ql6IA$$XJ2E~3GE{4_6 zhKC`q477iPOW;w+`4u~Y?eundCcFdogm=L)uozB+_rNLeewYa#fO)V47Q)qVC0qj^ zhL6C<;N$QOxDM`zW$++;3Lb{f!Zs(doxzT<97ezw;c&PaUI@3qF>pIff-l1~_zKK~ zufaRu8}J_ZCR_>s2VaD5!|m`LSP84)7jQTH7Vd$E;72eljO`4zgP*`o@C!H?*244Q zS8x>k7S4j-!4y~r)8P;BR(KfR34eks;4jeJv+)}=cRKtIUxG)WxxV>tXs!zW2b$|} zn+>t-mh^O5z>`gn2ZqBiH~_YW!{Etq1Z)QrV0)MdJHS-f1>OuJ;O+2Kco*yr&9Smb z_#QkPeh7O&v(I-9H2vK^(DV{{HKuL)Wt=IqPp5^6hCSdQ7zKyH@$fu28OFe=a3u7> zQE&mg2rh;f!&Q*8Z1$sYJX{Aafp5S`&^$k2GOUJ|!^3bI{0&ZrM3|I)W;7Z7OJ^NwkgO9;{SPAFDx8MT!4!jN?g4e?% z@CNuhe@^7y&`zy;lHpyJb|tiXL;?`a1e}wL*PI-6b^+ka4H-DuY?!CIq)L5 z7>#UU(JEfQ4`#yb)%?rO*c-gSqf2m<^d2OWxusw{1UEokS6b^?M!1G`%yZ|P^3t=K01ykV|xEPLwOW-(I z1Si6E@KX3JoCG(*cvuam!jB-=K-izbE8tOhC2Yoy&{gn6I0yEGNw6REz-Z`&Q(zjL z0n_1CFcTKSYv2Z(_0AGTWU?sc;z6P&_ufzH9EqEXNAAAVz zf~D|1_zJ9sZ^94YF8Cp=gCD`4U=92geg-?7Mn4js3crMBz^~y*_$|B`9)NN15S$Bt zfLZWImwJPNnNzhEW&4}Jlg4X3?>&EX+;`Xz-Qk_^47dWG4a;FqxCL_cjQtYq13!WN;8(Ce zJOHC%%hNf#1y6=UU^qMvM#1ypKsW*pg`?n97z?k2qv0Gl4lafh;1bA@5xWRZg6kkh zS?p&a*X!6D;WStcXTXo(O!yh(*pGb_&VtRlJ4cG_6QPICXF!fR*}Y&Y>i?_NZK{n3Vs6H!Y^QdSPO^1uV4)P7S4p< z!P&45Cc__~4G+WH;7@Ql`~|Luzrp9>?{G6b3im?J%-Ns9e_$K*%{odnjxNr$UbR+gHL4a1QJO7sCj+1fB|uAZJbOb?{91EaV)ky%F|= zyC7$2?GNBNa3Aake}(75zu*99o$Z`Ow$Fe=`P>U~&e`q@&xe!XNO%q89JqZgya>*R z7sLDDIQS484@)6u|Ls@cB={!eIso$Sf?UmEr@;)E3A5lGFbCcPeQ+hrhcCkUa69D66}u8%2fu(^1!I2; zZ-9s3%`mJd+Zk*JZ-Jd4SNPb2;WBtW#XYgeB91MqC=VlLpo8U0WRdMzRxD6&i zuCTKc;ma@;?tnML*WvB(4R{x+ z@N?J~ehCM`S~whj1E<3S@M`!SOoHFT8{m)d7I+xm0e^;N@K^X8{0+Vc|Af2YU+`o2 zH~a!xG1PysIc#wb+ZzmnTu*EFhOOYakgIR)!LTiihg`{PUjf_0S+Fx)1iQkUU*)+I^CWOFMw0wMbHOF!v$~*TnxE--d+Xc;G>W$BJFi>GJFGaj@W)1#=~kj9oE5_ z@F#c${1tL9gx#SJ?HN23a_5A7226${A$MWe7egEuG8?XrOgm*)(Gqvx7Z^Mo7UAPs#2Va4^;Xb$* zehxo``{Bp%DEt&Q>rX!to(OAUPq-iUgI~jF_#K=A55gJn5WET=hJ~;m-Uzv})m{pJ zgO9;K;8U;xZh(Koci_Kp5Bv|-K<_Y!5Gi z9pUA$6PyXTgXTc}n*>FAV4Xa=jd>{6Kd*Qk82RIP^0=ZAz zZh%8!_yFhLWxFdpkI$#W3*bf#o;4AP7_!+zsehs;!!mfjJ;E4m-UxTMW59|QFFdC-8^I$q02{YkUFdKRx z*9+ToVIEuxd8&iG49J~ z53YmN@LBi)oa&1egT^erhS8)j>oA3Ok~;UPE$ z{s3pdAK_K-2rPuZz#HMOa4BqnkHNoSCHx1z1^_Jyz=90NPTB-k0I!7eZpa&M)52Rt3#1G~eO@GSTu3cF0xXb|s90 z`(Zz54P`rnC&2-*4djVnHpeKfp>Pl!28YA*A;${Mv&d|Y4O$~%5{!i$v$MuPj?q~c z!#g0?SKAyrvnE20m6<22*)Kw_KesuCW$p;JIc8;D4!?jiAjgud1jw-->ng~x9qVey zF&%SlyUj5d%L6&aVxCNAb8N+$3pw^-Wx(Zd9=sQ3LXJULK3ER9vfbVS^B~6t%u^)n zPaxM2+3aImiy`~e=B@y{<#4ty$iA+{9R@c0w$@TO02V>^Ijv=oeM0L_$UdNT7i8bh zJZsTr-^{unZiElOt&rz8+ONRXkbM{H5%@2B6rOM%R}De-A*^*U3YNiv@F_@N-aNf!B-%CL#qwvf8WJnPq{?y=fK>Kv;x zq)xE9Lh1l30c&W7hg%Bp!H zvrSpEhCs@ed498fD~y3_AAHp&46UcL^?FJYJ|AP~ud4BL@ zXr8pp9TIjQ7!S>Jo~J|e%`Rc;hAs|>H-?`7L&*3+XSyZg4G(gk^9PTo1>= zr{N{=IhYQghdFQ~%!ixd3RnRjgj?Yn_%eJ6z6xK5m9Pr3%!twB9I0t?Tz3?-54XlMla6h~oehu$~-@%RWAlwQM!B-&b z%Ki-2!>{2HSO-~m_K6qKUxcT?2G{}q4Wr?|@I3e*90^;Dq#cAOKo2|-&V{YvQrHGA zgQvh^*dA_x9pNU}32uXw5xWMS2ET;dOJjcnDKmESSlThz3Z4zy!rrhyjDka89~cAA zg)`wmI2%U8WH=Nqg2UlW@H}`cya29+7s99EC|C|DoA!HfEc_61_m2Guq^#Nv@KX36 zoCI5rW;=st!>O z8-4(}U&!7E*+%SNVFCOL&WF|*wljDJTnu}`>tSDb6O4mP;AL< z4KN9o!!-Cj%!HfZ9dHZ02Uft9@Fn;nd=>77JK)FgHTVVG3IB#wu*F#Vi!cnn3wuNE zl(Nr-)o?J}3*+HOFdKdh3*aYk5&Qy{z*_hS{0gpx-@?~m9jt}aIrew(d-wzV3AP@` z_66I+pJ5kBU1Sf14e$cUy;*iF{0Gi~)`ir=usK`;TficC5?lvc!#5yza@lXgQ(!f0 z4}XT#ad!B4`iHP9aTm_?H z1sn`tg+t&Q@I1I5o(~Vg5%4giZnfJ?pq~gkLhdZHBOrCHJseJe7s5C=22O%Wa0*O= zm%&Up4c-A~zZsJhmXLS@Nt+ApMclFb&u|<36K;q9LhjSEPrroi3-*Ao!6>*Bj)$~u_GI`!I2FDNuYvEw zYhg8<5BI|R;6C^e{0Nr9PvI-@bND9w0`7wQ;ePlHJP5yqhv7lk=2EsV*b)8!BVauo z4rx>E3*j$t4EzHo!9QUdJPI@6zwi!djiMaEW^g4u0lo-Ng4-c?9om(!4g3POh2O$< z@DSu)L_2H}{YKahc7dJXX>c&4Ew|5y-Qg&B7Mulpz!caMro$+BE9?vJg#F+OI1rY@ zL2wJ?K1cf{I2?WgW8hcte0TtI_oLl%GW|w)GK_`ca4Z}E=|kAV-~>1VUJ4W7WS9u2 zz*IOD-VCS1+u;m&7rYWa182cqkiLlh0ZfGZU<&*d(l@dHf^(rYh3yQU0W)DQ$laHA zUwAEygZXeSoDZ|$0+GD!kHV$!akvbwg~hN8Zh-6ICipbm2A_j9kUp3F zJA4uT1G#t9{twazv%AN$eZijaCDe+CSLue=x2xzj}60P}Ot|c$D z@^dph*<4_rn3<8sNSPTa-b7DIN-D52&d*5o<|O(u3cZse@} zW#%M%G7~+SzI2Z@Z3fdz$;r;k_hjcMrh4)nm5^xh1^ETJ-o%ug%$(fBd{1(wm*I|$ zvpmd1p*3y7#6)XhN^VNBf8G*(x!#n_4FB(O=QrSjlg>-=F!RY7p1h#SD#*;wNK7u6 zJJ*{Vlqoqmx%_xfK68`l$?^pgp48MtZ}xmE-@^hTVW#Gen&->S$oH}wn2tA_<>Jfq zWP2@VVI&5AT5?8yo@JIDbC!|A2n(%@+{6r)MQ%ZsH=C!v%+2Kz{6#rAStd#|E-|=n zGBeWB^UW$@B?Ttw#5r^4=6Un2xtRql@?1||K0k#eJU=J1AU`7~+gU}qo|J`_SwLAH zpT(lhPIcEuVpc|WmZ#A2%I(wHCjvsvVg)>57~)0>hXTrinAslj+| zMkaGGH1K)oSc|fh>+@y@XWExTp`#FGdyPuth5}hm7RH-vmVTByzvc(eEyzwWzs5@S z=6fB}ofc8dTj-5>C)yt$d46t8vJ zWJb?pQj`!=GBeCKxm(HHoLmYqD=3RZUY<8K(MPGw=U$EAZ%SThN?x!K=2@4G<9E56 zSBl4HHj_}Xch=F+V?GZ#=JVjh9G|oFf?I|&+Tddb8DQ6@>x#Fl-zu8nm0Fb_)toAFlV-TiXkh6$*1}}1)yY@M8uuT$2gQspI_BmAi4ewSHrtlEbR?unjr2Od?f6B8xpIo7u9` zJ(+X;KQYZ$KzVi+OX6G~hm0GEVU0hK@#Zj>xeEis4|OXy|2#MO-N8C9@D=_-d#raR z<<^e=AqP7ZVJeH?L*+|V$odFW&HN5ps*L=^M&D_9=X){>SbMp7R46{Pd`*F+xH}a- z_f4hb_!cI*sr($)C=HRRR8v`VIoY&k?)vaorFqvDc-ST>i>aBEpx}l)WoDwYP~5GD z?O<+>HDxB%=)#ob6dF0V$ukv5#-cz|lE->Xna8kZTeBvQn>ISsHuCdQ<~fdO_?M(9 zb(G^vr#Gsd8*c`*2Puh}sk!{lEo!t zg7q1{mNM^FwQh?zamoay6Q~ZHP2MzYc^0#n&lce{>~34cEo3yK89uihX62-M6H{|N z3xeM@W^!nTf^A$*N(#-H*^JpF^R0|5%4T9dD=E*^pJq)2o3~^dYc>Wm;XErYo_g1* z#3{qM^VsB_CY7n=($bj~ZcUgvZt}RXS0-A8g9ar!&7Qjf1%Ax}Z=j)V{PXDi_`f`H zuGgEIY*s{|cF8kUQ|J?|9W`cf^9c?$b;1}*R0{JM8WtD);A4dsHe#yF{_eAr)AeVkh;6wg`oWwjjmqC$|>7}zuFU;v$ zgj&u(Q|eUDISZUl14Ytn$~R4Fuq)+m&Uvhh>{Jg`l>c)I{fe6|G0nT#zL{rdICpF3liP&&Q*OQE|M~8ABioGA7jYZm z0(zZpogG+&R6^duVBO+=qQ^nwLF?&$G@U7b=&Td^{iairXN5X_reb&7J*nhb!v01k z@BggNlQXGoou!xhe+?tv3~z*6qX(-1)9Z6OL6%cpxD_&MhAmynnCK>@%`7 zXd>B1Np!z4*oJ4%H!`^(%h`b$J)I7?e+~FMXE_D=z5;fvoLvjkoCar%`Ykb+v>ImD zbRCCS{xO{Ww>*m}(~d4+F;ab)o1f=rco&#ksr~!1{x8j6=<_BHP8<~N|1Z}&U*{+A z$=^Q-e3TwrP@3Jbzz6?gH!ITYi3Ez7+u?4aqwTC<(@SS<`a5jxD|FFX$o0t4)+;07Ad*xQ?Toy(k*!6IIa-< zoKlc%R+!IU-~!VN=+JPDwzu50|D*X$_BEXdP9@NZboQSE-zB9qk##a8v~MQ4&}7^` zSfJ<7XeY|QFK7B$!RFij9#gzcmJQ9rwrKV=+>Z{(CUOWRt-ur=(<}xCmqZ5r^#ao| zU^ZMVG_f zV|2T%PHiN{>_XC5<*?7-_v}D(WQo3E;Ab*_{+-JdS}cKCg+IDt3f@Q?r z*`u^OdxnhZ9;-6nWu~8-lU$IOpKbP3P#kkh<45}v=^DCwzKsX)_{`pu+vGGgfPdIP z)x+UHGudQsx@SIzxY)JLnV)0UU7)EA?Akf|7IQgP;;%{?SHu1~xlvcc?NjMG2<;*` z+x%eb7~%Gt{41F@#Z-a84x-zdn4^CFo$N-!Ll-35^fKrov74B|z6^cGf@Ei(#+h$+ z0NoywJM)9xJ*8tT(qFd*c6Cf~Fv~x*LmgNujg0eCoxMhX(FpEmyPw(3_L>8T?oK%E z1RdDW&bB*@?rZ0noeZZdqYJRH%Fdy9K z4YZyi@AR(dEU^Vf5FA;_61FYX*z-Kr$9e3 zG1)`==eDBKXY_Xu1I5Gbal7@G8~c})Tg^L11Dvhd?JK%Tr#DE)!rxJLKC<6nj_C#J z7PsK~n?Pp(Hl^eYdb}Ktb&hW9_c%K?x|&il6KTyTjg2~m&e6+M4pTTkFR&ymclX^i za&Bae<2b14n1#M{+_b^Rn9)<6JM%1>nMCvbjW>16-wX5=BDD)rL3G85vj*p)-?${1xpy<*?Vt*>|Oa0qq@Hinq z!M|Ai8K>Mg(Qz8$9PegFB-q;xEEqqB2Ajtm4g|OrZg4gGCmz@#Hpdn?IF#48;x`o- zBL+%dpw6fN=Nz)iv)rDMmMvdKb~dHee{`48oodaTzsSnT&M+&;JQFC<95YR2q0)zT zdQ9%lsBUrYgsJ+S-fW}oDYOUU?ti&GbxMDBo;P;ddy&N9V}~Vu=b4xYtwGCvn~(b(A1FO zO$|A{sUe%3X5XfUY`m_6-)=QEBraHHfW5lzk80anj((`@vO?UtV1yon)BYie5NSx(1It8t+T{!a5W zsN;rga?P3NNgX$2$ELpBJdx_SA)72WKlA&J8?wo=Xr797+>lL9b4^o2Hu;P4n;Npo zvS^;|b=^YNY-p%TA?A$6WNX%vdQJxys06ZT#hwOmG#Dzc5ps7G&N+CWoT(rLo!E! zU({}Cm!^hj9U3C^n`4?9vdL1`wy7bToaQ%8wJ%LBoo&YtS;t&jODjWjxbpa6MsMxZ z)NjdbYRJazT5ws9X==zOry0@IkWJQmhnc10N>7u^=Z&U@Y_ir})zpxUe^D!cYxsTM zabMkdfd>bhblhN#wyGxjC{0e}B&TC_UnPB~TS|Wa@4vWZvwHgCmb?);I&t)z(X&U- zN}MzM_0ySk^N6yRRu7`PoTx9+-A*)!sMv|POT@aziAEExa3ZdtwC;7H%ZcuDqAVhF z%S21dCi=v2cN0Z9?lB_wp`p(bxsS81B>LMKZVwT+3NY>gB6qkWM7tcN4rcEpdces( zNaQY|XM))+L?ur4b)rqqxch?HuZSLWvOf}WGY3=V`Zxcao=jvOR@c(%O2n-nM16zV zVMGr(+0jJLIN9mJY$DNWCp(Xb+g2I(1|oOa-%jLCZ#9v-T%II)*csymqNkkc?F?o= zAX?*OKPNJ`LbbH&iQMV^M`UitX=!!f2e{MgPV|T~Mjs+>a3MP~n4LgW>SU*x$jQzP zX0IhOkLPP?T~EZ#GDO9}>_bG4IoT(P+;zDvn0=GzaVPr$k-ILx31)vHTI*#0B68Pd zTN*8Qo=+uu!pZg`a@S={FnckPd01de>oOvDT_y*!Swv4d*@Z;zx?CR2K0s9FWFIFo zw=%V~On=+`-W^0wIoWrK9&oa?!R+@$>z(W$ME5z_)^r=)aXS+|?PSj)y2r^5C34ry z#YEhs#J9~Pa>wuxJ>!g#MYPPx+QIBHqGz4#14P{L#JKB&*-bF~P$;q~2Uv0iK ztwG9W($Zaoa{|R+?K|;_XV?$5N&m` zW{=g~244wg|3|dV$$m)0EpCik7tER$xNmo|=GEaZICWSDcEH_v?oRZQlkG#)+nKA8 z!R!R0mz``pQI<31lwdZS=oKfsfT)u*?j1z#nz^6o8fT0$BKO-~AbQmqgN@92AoM+O z_%RQJ{+yw@;;W$7?AW@03;sWQA~fIkGyf9Ussevzp3Fm`%Mg?NelHg}oB8|@c7yw1 zB>V^_!5VlC`~)tCpTYHzSMb+z+ea0cbik2VompsPADo`~h}`^>7IM1zrw+ zgEQdo@G5u|nuk9B16RTS;2LOM#KWCnOSl7a%aAkXHiP5%5$v9Cm{j!qedx7zvZ$*)R?EfSK?dcn9nQ?}2^cN;m+%2&3V4 zI0#n4Vekvc4Se>uFa{oi+{kB#(V~ok?I159vOB?x;b1rpo)5>vQScHt3r>P5a57AX zm&04(bhsAIgipgOU^%=Rz6W`sk^Lc@13!Vu@Nejar%@Kt;8`#o_J)~oEX;__1Ba4ozEz6O`T|3Pk0wBLh8@CSGY`~`BuqTK-RhFvI= z_rUIO1w0$Bgt4#$PJjdh z`~?=lKj1p}Cwvwjg&X0&uo_yiJhTBegP*|@;8A!IY(||M22X@-;2E$j>;>DwzOW;V zgPq}JunU|HPlLJebhr?9hd02p;A+?dJ`Q`rG8hGS!oKib*bnZ81ED!wItcy&2gASN zaCjQ^S`0i3o)3G&3*lIJ5xf+}!pU$foCn9lTsQ&d!%N``I0c%AILE^+@N&2n&V-fF z)Q6@{zmm`WS!^C!2lwU>6Sa2gR@Xh_&$fo#bj3J`@eOVi zTh26`^N)!IdFG@{Bf(j|dHxGN{YUpX{ou$nPga(PYrWDk^0@-ne?7c^7AFoF%axzz zju!t+b0UN*FB%*FsU`oJTmPkY?)g2g9Oi}%|Am15n@`+R824V^ zs6eebR_D%NqsXF=}h?cF}F9QMNH^)!H1%7|H<`t~m1+V)wTC1&M$QuAh+e#p6l z2An@2`rP3|XC)V8WTwuVpE4+VmV3$YtXxhoakAEN(F1&`$yTg6-!mX1wcEq%t^fWr zC3rxpS&H+$rd*qEYSC<<3FU8qbDF8=G$U#L80ObDEvzx-pj+^7K(2E#-}y|_#4u(^ z^Y_c}@n5>*nNQ|dnm;p4bF1-KCKDQK+nq}}tR0w!Ii_I#%rH6@)qJC|Hl8$lXK1XU zW)%L+Fgg~MGh>^8JRgL{n&e8$WOXd6QpRGooWDaGHvS$O>l(i`!{}J1W@ypu zEPuXd(QSl*-&O3lW*8mIR5dM{Me=|1_x1#Cln##djw>xQjE-gMsTR#T`t#4H^{x+% zb+TE#{Fz~NEOXSaMYBNV*88Td_l3ra@sDMOVXR~>1NHy4amM=J_`v7JOz@9ohH-zZ zIbLFZWylm^!o@s@F-O=!!#s6ipD zw_=jSJcdaZ^D@RK#vBSR6!Qzl7SomuqDV|nOtF{?FePFx$CQdO{mL>i=BP@!nENpm zVoa~IQp{_ZDlz7@BGqDk!qkX4feo})%;}gqF@rJnVkTl5#3W)&brdQI^D$v!mSfCb zNobhIG3H2K$e7c;kz%SbQDP2YqQ(4!G37oqosLu?v10mS;>5&a;>BEnF46!R9w7V`zBNX##oVlgeL(n`ccU`oYAW6H#g$CQgPM`|j> zq+u$>EWlKWF+J*PF>5e2Vm4!H#k_;56JvVV^8dztKmk=@ElASTU}_Wnxi=3 zVrF8@er0HwY)qt>TQE^#9>zqAc@YyM<{eC|n6EK$V*bL!i|H6f`4Q6}lO$#=#?(`x zd7h2&i804?3dP)ovBj*%6p1mfVJQ~#KBh#>SC~>UzhcV7oJhk`F6LBBg_wSrN-?7_ zRbtGMpK3AY2vCif0!*!#B21l_RhW7)&te+Hyoxbhl+aS$jWPTDA!A-<87{`W%rHXC z2{g8mVot?Gi8&V&EoL;vyc8<*UGbP$F&<2um|RS}m^(2EVxGVxi806AOq&t$;F=?1`F-tHNVjjR$ig_ASCFT`O zwV2(Q8ZqBuYQ;2Q>cn(qQPqp-gJ}>m!7NT%kt(d7V{k@M$A8$STXHRq5O!6!kD8(3~I44@OJ?wLCh3Pl9)`4IUX4rYbnMjW;Lcz z%!?RX%o~^@F?%q@V!p+ch-tu-is?Z2yi81gOu3k`mM2Wco6D?*E z#++3OeR~QfR?H$yoS1ts@nRmsm}A$W=~Q5n#Jr117xOj7T+|a9s{vCerfs;z^B)@z z(*si^=6p=Cm?@YNF{zkRF$*zeV(!M2i&=}Q5VH+aDdv4lm6&fa)nd#Gglfcux2ODw z>4m8ia{;Da%v4N+m<)_XuPC$(ZA_S$2QcR1uFx>gVN8!OWZuF=iun=~CFVDb={1JN zYRx4LF=EUsh+@SI!^DZX6caDTgE5z}g{C|olO$$2CSAiSi?+ z2c}+345mTMM2tm$G_>RsFkxcMYmiJoJ2cEq81u5ikTI`7iWF0hG3Qi6!|cMCqv0X* zDJDkDub5adZ8`cBCng#bFUGteDM8F^Op=%dm~=5k7@wFmm_jj|Ft(TvF-2kyV2Z^w zU`oWa;;dq+m~NOdG5s;+Vn$&q#9W4{6yw2EiCKWD7IPP-M$8kKS}`wU>cs59)QdTU zX%J&x&14Sugx2Y)m@qK|G2vpyVKdNf&bo#wR8fQz*v9*kV>=io`sFDHii4rbNtsOsN?2vZpdJ z9k_V2T+BdBg_yCJN-?uBRbsL+)nabJ)QB;!gsK&@6;mhXLrlGxBbWv;r<_LlVQ(t5 zcKTt$#9WRE7c&nNA?8j@q?iquC@~*kqQxA*#E5CY#EJ>)M)?tQHpc9uhUR$`#=Lwq zWM*QL#N=So#jL>i#B9P8iunX%i#duZ64RZ7=EY(zz?6tFuZSuYQ-~=OQ;aDW^9-g! z%uYbh#8Nm6qACf5@Tbk z#jL>8h*^uN74tf#PRy5>dNDs^8pK4LWtmgLjn+jhCQM8&CS1&Y81vHI&>DOi6DejF zCQ3{#CR)s&m>4l#&!+r{iNVB)F|VnL7n6)h5MyJK#FSvt#XN`ciFp@ODCQ8x7IR_` z%8!_{F~wre!<2}*0#hm`2U8|y8Kzv!BbW*?FJUUh?8j7zY1xzVBc?Z|M$AQ+S}|8) z>cq^))Qee(X%O=Y#uS54N!X7G6VreR7t^j6i5T-LtWq(5 zV9LaFJcsflW(cN2%ydkpm>f)%81oveYB8%YHDWemYQ?;XsT1=dre4eeOoN!;F&4+R zkXCd4u`?D$`4Q6ACEoLDmM$8IKteB@TabjM> z#Ebb9lOX12Op=(B`%r$w^u+kY#9#`=OvKn?yqF>}H(`p!JcKC`vk6lw<^xQbn8TQI zF|GSje#D%EsT5;g(p4p9I;L7oE~Z9IF{W0`T1=go*D>{C_G22v{DZMLJ{Vfd-TP5~ z#9W987ZZ;$FC7n!m5qrMvm6s8W;G^S%oa?HnBACIG2dh2#QcSc7ZcW>@*}1@CP~ad zOuCo}7@wF_Ore-17+Xv!rbx^-OtF}Km=ZBZFr{MJolE%<(+^WF#=HQmLQD##Qp}B* zDlw}u)ncB<)QB;!0;?7CJ*G}fivg4$G2Ji?VuoNWj=Hu1ZvAsP#=H(XfgGe7%{B|Qhvnrz{H6$uL+A6GZT{_CI^!w=5|cFn8z?aF)v{X z#e9gd#r%XR5)&3p`4MwArbNsIm{Kt_FlA!0G38>4Fco4R#Z-#fj;Ru3UNcrL<}jv4 z%t?bNKVr_p)QK5^sTadz1FQxySr~J1PpGuqh6xi>iU}994HF?|4<=H~kC-Si=5=Jz zVj?gxV)|lY#f-wliAli3i{UYNR)Uz@FiB!cFzI5R$N0p&jVToK9mW=O!Vt=jnBJIT zF_SPQVlptLVwPgc#H_-Ui`j;$5VIRoDduNPm6-NJDL-POFg0Q>z|@MFf~gbZ!PJW> zz%+=t6Jxb+Tz=MJ!o<9aG3QG{W$aT-gqQ|Qq?oqDC_iF)VWP#1#Kef<_48J&n0c5u zF*YV%%qmQRm}f9aVs>EC#q7cO#MEO7#k3tx`4Q6>QzT|QrdZ5OOozm12IxREat1Jj#!lvoJMcMq+Bkn3uNIiOIv%i{WL%R)ZK`6U=QR zjmySPOqdv6)oX=|;U&9PgqSullpirYF;QZ8Rjm~*W*R0&jCti-teB;kI57`l;>Emx zNf5IOlO)Ex3@%;FpBSH*_UBW6#PGUMZbfLke9TMXip22BPODhVwU`nyyf)J+6~hZJ ztuirNFy&(2$5e><4pS+{8bSFH(-l)KW+0|U%y>+#m^qj_F$I`Y7p}T#_HI3 z`S3zOD@@F1m~b&iF%e=;yMXc|W&|cm%vG3ZF^e!UVoETvVtApN6(?pNCSJ_%m;^Ch zMpAyn49BF4nU3*^$;A|k;k8!Wiq&}eY{V3a*^Ma{^E0MIOsfkiKVr_ol!@WhMpn5P zUQT3Hh*^NC6muu0O3YeJwHRK~W7UY^wK`U<7+#EH)rn~}it;0-2c|*HMHs77AZ*kU$gio|dimQ^g~b4-btBbZV#En_J^ zVj?i*V)|h!#9V}_6f+f5C1x(BT8xdU5wi+YE9ON^otXD9^AEAw8d>$jhB2c zOqiHUFyUgdFcD&I!94nURe7;uP8~z}5i=AMFJ=-ZLCjoC zl9=l;>0(x3d}5x&6pE?9*kY1&cu|98HTA46Njl3 zGaFMSW+A3p%mbJjF`F>8V)kI_#Qch>7t?txs)Ostqz<0wC3dSK$kT!={!b2TPO%tB1Mm^B!mnAb6dVm`#! zVh&@9#DtBf{D|p>DG_rXrc}&KOqrNmOt~2Ig1`zfWtd7aZ(^#%e2u9V^B1N@O!ol>V&PBFfkut!o~cCi4fBQ@$YQ#*#)QY(VQzvFAre4g$maSQ2F@)6DH;dOt_e4mokzV^Qyu~F?}&nVn$-3#Z1A(h%v7;j1`lMi4$`RCSFVl zCPB>8m?SZ;V$#Lz!T7`+!W4>WHi_~hrZc8U%n(emm?@YNG3Hf>rD7Ig%EXx0BbJMK z3{xS-yehF$%=?%sF-I`fVmeHw{D?URQ!8d7rcTT}Oud-9F%4o~z*wg?El+=hu2^CTut%uYz5ynL}tOqY1dkC*|N3NaHfm0}VxRbmP; z)nbYeg#R&IyzsF?}&bVq!7HVrF1U#LUB#im@?eVpd|x#XOCv5VHeQ zDP|w0N=!YbT1>kuDL-P)!PJTwkEs*m#ng+r3DY3vVT{$i@ea~M-1 z=A=Z*kC-ztWnyA5%79KpnjY2~5(h&dY*FJ=TL zLCiEvl9+jzbTLaYJ~68?g<>{gY%zN z8&fIfAxxE+=P=b`-o(_1*^j9e^B<;8%o!<^A2Fja4Ps_vtjNaY=Xy+-m^GMiF|T4G z#C(p46l0}Qe#G>^M2ooy6C>s-OstqZOq`fyn0PUdV-mz{$0Ui_he;Q61mhFa#!LAT z(+gvZ8HFhlb0wx&%(a*jF?V1}#XN#36SEalF6IkNg_yrEm154AOZgEq8dEJM6;mVT z4ot0>a!j3=eVBSN4VVTor=?juUa)cb8HouK!@Fv&a51-H%$*ydn*V7`q?js9l$dWZ z(PB=N zi8(Wq@*`#}CP9oBlO*OgOuCpSF+MSGVG6|@!q{S3XHkB{^uZL1xf)X<<`zt;m~u>+ zn2#~#Vwz`De#D%GsT4C3QzgcWsTOk+rbbK&rdG`Jm^v{ZV(P{GiD?jXY7XV6N8>d( z0uv_YN=&$zLQI61RhURI+b~gLKEp(d`5O}>rjw8IBW4gLPD~soUQ8+`LCnpVBr&C! zbTOMSJ~6v6g<|S3wwM#IrTmELhA9>kjVTc`4pS;70aGR>6H_i`38q5KDomxAa!i$& zotSDdwU`<)M=`ZxI^28xi5D{qlOSdhCP~bLm~=6lFg`K6F@<6dV{9=e=Tm;f z^uZL18HXtm!^?!NQZd(K%EYY1l#AJjsSvXpQz@naQzfQb0p&-`C`^qQ52jYk&6qkd zPh#rDyo+fN^9#o6)wukeHlOk%CKeMeCJhrI<}OU6n9Z0dF<)S!#hkQ&@*`#-CRR)W zCQi)Fn0PU3FbQHRF-c;6!=#HjyO8oDW+bLi%oP}0%(a*zG0QQQVRKE}j~`2`avrtNiEXE@rii|Qz+&oj4kF%Op%!8izz>1dSOb$#9>OsWMIm~+<_?<^DL%9 zOf{xb%rBTKFcnJV>c!lGX%O=$#yqAuRFiDSgo&xagp2tD6CtL<&6FQ8{V?V}=g^c# zVWP!M#h5#vL&JD6v0@ft;>46-;>B#jB#7CAG51S{rd*Fn7t?kLNHOir4@{ky7)-sGNtgyP9*otu z@fuu&2@`W4CS1%0OoW*KVIsxs$3%(w8xt+2%k7jOF@rF%VlKhNiAlx8i@5=lAm%|# zl9(4T>0;i&_{1E*6pFF#p!|sGhA9#=3{xy79#bM_9;Q^x?U*t#k6_BhRAMT`e1)kL z^DCxGOowHZA2HFG8Zj4RYQ;>$)QOpgsTX5o8pPa-vHCSGKkG4JVk$A=V)kJo#QcPb z6ce_b@*}1PCR)sSm>4lrFtK8iF>zuRV&cU-gh>$dGA2pP*O+uMt?s1!i0OwZ6f*^5 zi}`=}IuGzFina}(5RgcdZWNHv0|*2Z3{n-)fS?r7fPkSI=~5%TDn%ejF(@VUhyepA zML|LjMY<9x5*vh~L_~@L{?GfKnan=q|Jdsy;(eZb=gd2^yR&;j(jR0Jky#+IL=r*b zi0lE0Cvp}ffyfPzBqF({WBw2+4w6iy7Dx(_Rv<@+^a4pG@*YSUk$8}FB42}K5cv+| z7Lg1P-;>_?lWPX%50P>p`H3_H2`173B!tLNkWeDCK*ETu0SPCvAEY6Xiy#q1!GGazw9?t;V<$v+eGhe&yl zBqH@dHW6tDl1yX>ND7e|AV-LN3X)1>4@er3(;(?Y{sPG$67(VF50PRZzAE1N^9)E3 zk(WX86X^*OOyqr#5F#rLtLmLUAA$rC`4l8Skv$;6MAAV* zh-90K`9tIhkT4?8frJz33eu3s2#^ROb3s}XSp^bFWEV&jk)J`LiQEI}Po(%qm_J17 zgNz~431kwHF(9!-=7Yo$*#Htx!FASpyzfgB;y4J4Jw zP>?htQ$W&*d;*d|WIf0&B6~o5)x7iP2aq5lS3vR;`41$RNWpoSKSaudgc5lcB#g+* zAmKzhgES;E3M7Ka9FUeoR)a(m*$xs#w%0+OFdBamPs?Lk6_^alwg@;*oykp&>(M7{uNNMt`q1d*RWS`xVl z5=kUqJmwFPav;$}>Vxzr(g`Gn$Ow=zMCOA`BC-u6mdH7fI3n2>WBw2+50XISMUW&S zZ-Z^=FU+YK|+We1qmf`2_%e2z*5W~BEcXHiBt!PAo3DOOCnuCB8kL+L=pJ_ zB$~)Vkp4v0g2WKn4l;(wF_1|_eg%mol5-j650OeB@kE+|BoOHZl0;-G$R;9*Ajw2d zgQO6-0dj;$k>!{_L~4Sh5orsOPGks329b|IZV}lG;(N+F6Hb8y5xE1BpU4v{Fn@?V z2NFW08%QXTNg!cF7J-Bl*$C2*$T5%zB7cCiB$8_-<`0nyAW=k~2Z<)q38X)fVIVO? zJ^~p-WF5#PB8Na?iChASBa$-#^M^=jkOU(2L6V5H2iZhqC`dAqsURst;z5oO`4S|R z$N`WvBIiKTiChQCAoB31m_I~Hg7}{H&Y!11f`~+b$Tg58B7vV_{tzhwl1!v3ND7e%kRwFi07)g%4_`9q`vNGg%WAZbK8f}|4}1Cl{x8OSXndq8}( zyz}QINDz@5Ao+>p`5g0yNEMI}B27R-iL?U=BhnKjoX7-_hC~*EL=f2k(vrwQkVqoG zfkYAc7bKcU(Im_tB2_?Qh(v&lA<`9O5|Lpbu|z%ui6gQKB%a7lkOU&fK$3`D0og<( zXf5UskrE&&L~4K>A<_gSl}Hpw8j&F&=|m=jWDto5xkY3>i0>Ki{Mio@MC50X{6ubp z1QRK+4)cdd7)U6Q2#_!$Z-9go83@vl$YhWRBJ)975?K!tN#q1b6p#=Uts0!TcO9v}%s#)2dfSpc$$$XbwOB6~nmh@1sELL_h#<`0pI zAZbL}fTR-{43a@)5y&kf+d+J_z4PZJNDz@5Ao+>p-HiD|q&!Fnk@_H^MBV@iBQgji zoJbr55kaQxsw_yGd z2?e=DV}gZV?G3P>!G=Ro3!M1sT<=?9WP zWHLw+kp&=|h^zxiCUO`gg~)l3BSZqWVg3*)0g^_f21q)Qmq9X!bOE_V-%NO_PjBK1MSiL?c2NTd%)1d$0KEs4wri6pWfB#OuZkZ2;mfb=JF2PB3_ z@Gi_BBGo}A5orbzOQb7E9FY+q@kHi;BoJ8xl0;-L$R;9bAjw2-gQO5CxEu3_NM(>z zB8@@Ph;#x;ClUjaL1Y2QEh0NXeD%EZ=QKzVk$*w*6DhU_^M^vI*9=RsnK{0B0INXbK(KSZ7di6!zHNF0%OK;nr^14$r~0Fp#x z7sw_eXF-yQ+yqG>5_}l*hsd)asYG4{Nh8t^B%R1)kPITrKyDHF2E^CUI}?5Y2_h1B z1oMYTRghpJQ6M2iW`Tqf`35A6$R&_)B1Mkk?GSkmB!b9Dkd{Qg0*NGY6(ovCxnr0= zL|TLNCo%>khR9NoF+}!)Od@g#B$i0NM0S9b zC-M_W1tNDrLWuiR3e=@*zlXB5OeU5ZMFLm&iqsenfKogf$Y8svz$WX$&%eNPm!lMCOAGBC-Kw zFp;AmLx}tVGL%SxpRqzC@)XFsL|TIkBQh9dIFS!QMi5B^8A&7sWE7E$Aft&C_yy}j zB2_`g5@`-Hj!18i@kC-lCJ^}oWFnDNkoSmO0(qZE_Fu6&B~l7xGLh;aQ;4(#nM$NT z$OlAbf=nZ_31m8vRFD}&Zi2)TDfXMsHDi6?RgWHFJ)FZg^* zh|~mGN~8nGG9p7kmJ^u)vVzD8kd;JsgCr37735PQdD4BpRYXETJ|of;B#}rDkkv#c zf~+C34CHenyFrqOoCR4+;l;NEwhVMCyWUCGr}`H$>h6*+yhKNHUSdAlr#-2H8R6JCL13{sP%W zq|jxbZ#R)zAbW_s2C|n(Kadn6(?RwTSq-wE$Z?PZM1BW3NF?xz&-X2nV30#ZLO~7_ z2?ses0+Ed%=|oO}TqN@FRiEz?kqRJ}i8KPaLgY=5--(O``GZIt$WdpHAb%5y0J%Y=JIGBUBS3BunGbTC$QL005cwA5Um_Pl?hpz3 z)91TOqzuSCBF#YlBhmxJ_q_M{&lr#ZBJ)AA5!nC|NaPSmb|M!+auCUL4bOjwR0GLL zq%}wok)9wA6Zrrn7m-gvaueANl84Ayki10x0?9|@p}+9_he$Dy{6wAxDL|wxNI@d+ zf)paM0HiRH?I1;n{035#NWgVG{~=NmB$!Ao5cwUkc`%UK@CSE?AdeI24^oWC2O!0X ztOF@QAkQS3&9% zc?YBck?9}}i7Wznj>uk+=ZU0&G$QgZNMj;}ZsYk6k*Xjs5NQJPB9S*iB8UtFX-Z@c zNHZddATJTw2hyC#1&|g*?tr{Z_5Z0`B7Z50T;^y@)&o z(woRjAbp6u1=5$u1dx72mVoppk__?=k+UEJh};DkNTkR;JpUn59b_<(mq3OP=>sy9 z$Oj-XL=r*XC9)r67?JZJ!-@O{GJ?os|Ka%$k*7dL5orlBnn+)eF+|=28B1g-$T%X~ zLB<9UP$a#=yMDhj% z_@)yn3o?U9Ly%Y^Z9!%dc^l+IBBMZN5t$7#n@A$a93p!_<`Ve@2LE?xM$`;_8 zN2D~!$3&h5`GiPYkoiRVf-E311!N(SB_NB4YypWUatdTIksBaOh~xCKzxn7_h^M54)6sL zc@`u;k(WV&iF5@CAujl7bKNPu{@YRL~4Vi6L}RRgUCA|w}?yz@iq3&pCuqcL^gxuCvpTNn8;<2 z5F$DAV*U^b1qmb46eOHTSCEE8hJi#7SqRdS$PSQ5BBwy2h};2*CQ>*b<`0otATdN< z0U1N&Es#k>#)HHXi3f=zvIQib$O(`HB7cD-5h?Tt<`0n?Ajw2pfTR$K2021x8b~UU zbs%X(4uPZ-xeSs)Bwv2aA0ib&d`-Obrx8dHktmS-L`H)I6PXVZLS!RID3QY;VMMNg zgcAuYfcZn@agYciH9%Sti2#Wt(gh@n$OMpRA`3wJ6WI(BL*zKf7$U!eOd|3hNGy>@ z3u68dc?Kk&NK=pmB3(d|h>Qi6(ISE>;VZTasecSNUp+|KSWA{gb{fbB%DY~kcLEhgG3N{ zAEYIbr67?+Hi1MDIRX+*?&k)Y#B#uZl$UGurKt3iC5Aq3-Z$Rb~ISsOa$Ze2?L<$7sUXMsQka!~X zK^7C~2C{_6NRXvOJ^@)qWGl#WB8Nd%5cvgUC6PNI2}FV)!@VAnnjou)yae(YkuD&K zL}EZz6Nv>`LnHy@b0R4qNko1ESxY3~aop<>DF?EiNF9(bh_nOwlE?s%4Me7ZY$UQ2 zWRoF*`pHN#NOC5r+O6}T&dTx05dIq&&=OxCHpKnsEG*eHqkqd?3}-DO)j(1*Tdz8( zd(0qB;u9wPH!z^M`M=S<>bHU6#w=;V#m}Sp})%wKjxm^9KXiEC$tws^egaX_5TsU*jJy-(Y1~_Ywu{7hW8sn@-GcEkZ*Y=&aH#=*xu{1-K4_2#-DA=|yeDde4 zy?6|-1O|k8dJ&x2i$!M7!C89oxLURs8#}IC>8#bp(hT*Ym|8j?@V5cU4;OXTE@NrN zSJhK7nUjG5wypT){4;M#~ zuxWNS4tl zt(L7=$l{4#IO}<1X@+`HCexC)By-GJuNzA<)QhrejghbTvufwbxU9V>ry1PTWgaPI zGkej;?73`~UX=G+X3wW4)@kFcamLaN^`e4WGV^6y@X@y0&RS?J%}_7oEEyOu6Inn}f1d%TBc_Tp=^=g=&@sHB!1ix1|t%IB;T#?lP+qOw|cMlDVF;kvV~ z8%s03ssr3v;z_mS_>%4QW>t6F&)V@BehHKxn`E+)RRtt4K&~3HMJMcxa#lTKNrtVe zAb|mLe92ZU?>|GG)!A5*$)>MQGerJ}_frkT?Pt)Y5xB7V9eiJ*u_Ob_bF~UnYcVc9 zQ}DOH29&_tm;QOr&($>(ik;c<3dx8i+!xk1Cp0;*% zXwk%3_lzYOww|T7%69L8!@~BfVo87HCBs%7YHQV`eOMD&tBtWF!&Y5tYemkMxOiG? zl(8hkRy}I#e2$?zoRwfK$*@(Q+WKEjwO) z`^nD>wfzc}ix0Mj_`}w7AZ~7q>?Z#b%37_BB^kD!SIf4wcwj}GB&;>kSdw9@5w%q) z>50?MT4^lFu+^B_DpR1OXU-opmSot%wDa_9e3t{mTw8aHB^kCbfneEwjr*@tu(K+Z z^4Cx@Y`sWrm1{h#m$O8Makyu_VLRE7aD3%ZJ}})^cM>hOL&=mhbDDtDJSjSdw9@ z6}5FEan=B5{bMZ2u+^H{I=pfgfeP+M^^kG|uqSBxbYwqB*STI~J= zi(K2*Fk?xEt+r~(-HL2)S8TM-S<8$i8Ma;n2@J5-<(CGJan^BTNrtW0$vV(SejBEJ zhXG~%)sPHZkz_S}kSZRn! ziL77VNxS5%HpY?+TUg3?M)|A5E7F}c&RCLRD@v`R_$u3T6JtCzTx+Z-yuwyzkiY;G zPPbR;x83U6I%h1&!1Am-yMP1+B^!x0_ma@^6Y_ZV8A2l;9orT z+3KltXJbi*EB2OJ`Hc1Qz;jz%#ojlTWZ1&#*wa>xm-5_pR-&;a!`9ns*|z3PzJ|is z8Gg)Il3}YSwe?7zme-th(^!&W3m09yL)%vSIX$O3t3(C=cu9t>-qcp-)DwR?>v>~I zhOIu-R_e_To1GPHEXlCdm)iO>mplTr)tF{1$*|Rr+Ish~5}p~p-dK`ht3S2%`jbh| zxwcY`B^kEfp|+O%5|-Cl_lzYOwgymJJ$qeg=BzUEXbqcW*cu4p#;ebN2~(Wa)L4>X zYmi!Y&S&2ijm3_wVP9iOhONQW*3|_IH#uvzu_VLR5Vh>Jpn9Ia9&^@aV@Zasp=uSu zSJ|d^lz-J|-{D1LNrtT$5O)VX@zv`MomI4=zlM@w>s_^MTUCa?@VB#`H2YisxK^y zi-c`!u(2e=)>yS{H7;)brHr%UjU^ej#;Il7x;Ji%XZ>@~Sdw82Ay2>FfBUTv*VavA zNrtTnYT33%q)l1ttTL7THIxin6Vdu|DgQ;}|S zGS{oe&7SA@Lhf6yex#PvIS_y1Zx)^7tSiRS46Rq=)C$5^*<`)ytUOiyqoWyGug*i( zUGax3D09H|y^66U!xj5jEjtsE_O`DE z`z7D*2~$1R9Aim_EgasSF>Tv?@>SQ?Mq^2aElf>VcGjI9e8F=SK5Z3|mXodK6z}E89ta zSF(MF?;A@pY%K+G$3^xZ3te;824hKvtz~5OS=_s!vwkp^WY}7+mL274wQ3)B)?H&s zhOHH9+2g%MN}A`aUQ#}K#U>fHR)VV*%e&X!a@I%2k_=m`KwRZ_zVPNB&idL|l40vJvZghdhQr;C@;PHk2A1bMmZ(;1 zlpfy#<7*dr7RxcIocBDoS~KxD9oh3(V&-`)u)4p_iN28g&SPuTvgfhq;o zl3Kt1qibt}u_VLRda_z=&34RLKN(9hY<;0tL41`h<@iXP>g<^2so}4@WZ3!=Bru?W zDA>OJa{af?s%b3Au(biit&#fveGtnH+g2xINrtVBWVKlr`<}BV8A~#3ZBom=!yno_ z^pCUF8A~#3ZKk&B^(c%5tbK>4jU^ejzM{6?s2=8-8#$ix*HAKSeNAo6czoVi*H%?y zNrtU0YT5Ji-}9=)I4javl3{BrS#7p0eA`(Qj3pViz9DN}%LCn=m1Hc*u(eGsd$np6 ze|3km&KOHFY$cPmA@{*_XXSj_Uqi{TwVkZ|RYu-+Rt;lGhAq4y&r$j3j?llI)zMgz zVQZ&a_DFf>@+!P3J2xg7OEPTjQp?W6h^2Qtb7P&cB*WHjYU|RJ7mK;JP8&-yZ0(`8 zIy7nepR;n*^w&@_Z0)7CCUn{v?5wKBk_=nuhUX0MV};S4GeD%VB*WG|YOC-EMR73M z8jdxVWZ2qIZH?Yn9}#PPW-Q6Db%5HM@%z76N?7ZJu_VLRL29d4wW;@9k_FB!HDsb%NJ#THw!WBU$U8A~#3;S%C$>z^`9amlsTFk?xEts~S{ z`JplBy0w-WOEPR7rM5ah|MFUAeQPYqu!RecXKvJ(`RyHN-87bD*g8&aJu-LyI%kDE zpN;IGj$!a8TkiJ>b4q1!~Hds3|ptvvinF8rzl#0*WOHYQ8%r{5{j8R4t9-GL98qm3mQwtiL1 zwpFY{#!JpxVl2t9^&7SI_oFnCHB4)L4>X>vy#t!B^S7f4EZ#*Vcc=k_=ma zfVgKnd-lfTS%qI%AdxPJ>lHbmaEyj`zTem^n9pde`6LG<})=$Qg3|s%G zRR~{Y>s0oJ=WLU^p1+2YVe4NISHoH>uMTo;)iRc3*uqi)ymb=cY`n3qKzdPwgS~E z=8yRvi@4XowKdIHl3^>mTJ}g8zh-a&XC)g;GHm4_>xlx7yy>j-#*z$M52=;kyu(+g zl;7v9JPq(7Hp#G+Q!V=r_fKmd>a3@YB^kDY)Us{m*mpI;S&_z)3|kMAHTqO?IcJSA zmSotJc6CPD-(?j?-2zW2sMqDhLbtVLBraw-Kb|yTUITL1?JwF<7|4evH zEjtrJZ|&^itVCmJhGxR!YI$dZvkn?dGc*&5sfClNZgGphe$Dm$cVkJ0D^^@Bdu^I9 z`p*&0D*ilP#3mWGN|05$UBf=kiZGUB*m^=OdzC3(;xy`PuQG#-B^kC#Qd>JW6zS}& zg~pN$TOn%Mw!-@5!BW(=wcl8hVXG8bbDM6(W!YMP8%r{5l~zm6BC@rvzjCXyLK@*k zY?5J1zKzvgbBC@-$5Pa`)y!CuVN1So)2$_HOpH3`tii^T3|sOIj;^icL^u}Ow4 z`4%7d4wIix(u9V6EsP}@w&a^yoYk!8_ntLUjIkucmV6tB>sQ+Il{__EYAngHCEvK< z`qldTc${MFD1U1#$*?6KsJnMq_4gc@$kw`TEXlAX9|k*X+2*dEYeCs2coCaq*pd%2 zUB5Qp>HW29>lI^3hAsK%&aKruy z`{SHd%~+CQOCD>www@eY?@E5PjOa^u_VKmJcM%p;=4`7bGT`< zGituEB*T_GKyfo_!kyoSIO~Y9B*T{6{JR;obN1FqXZ>p|$*?82yRKhHPX6S%5|w)q zFJhAnTXKWvo?YbYySt`qtEsUh!?{T!6dxzPZ;zewdVM~T2Fd&z{ir-)GUjfgt z{FJdI!lHt6Z4m+G=Ag$*?6axXM?KdhIP|4K|kihplF6Van>ZJ(v7mLOWjb zj3pViUQ)~6{Z&Zn<2h1x7)vs2H7D!wo7L;Pwk{btn5yfti+Ve4hJ z^6IPjJsL+ZPj%L_#*z$Muc&3$y`P=kwZU1Pj3pViTB`M!X{&XSRnIwVnz1CqRx7e5 z4j$dgS>G5-GO#@N7p>JoXCCnH&D&@u6&ZVf(K_?~;;Pwm>wu8^?lfOj%idqezc+VQ zkPId^&CvZtTeZCR7tRVbmS*Vw;FhKOZ zMsH~52&f&M_L-yekJ)qkfcri?c=>Br?=ji_2Sd!s7cUG$m z`YcaHmLKW=Ue-Ey(M$qfw{`BES?4om&z%GAuX9(mY@NUCetW31{x+6osLtKgvUNUM zd-o&GDk3K*Y?`4ucUQ~Kv98Vbk9QTTWh}{X-+QRF3VW2NRE2}r=FHmnw=|Q6*KOZ> zWcIzA*>jJ8`}-cPmhF4vf2Y-P)<|P%hWh@tTDI@#Vel3}a2T6T{0`RLmguB|+B5x^!Hw)&`LuZ(L>_43@m z*EW`9*y^j6JqiZg{PQK(Ru^MQ2A1cn-cPLu&*%P{@y_RdnPWQ3?73f-F?~lZJEk(9 zoweFnnxQcrpq3p|na|ETWGv0lm=09So;Rv~di5*U_Y7l6hWkE9tp{Jx25aUF#>vj- zL79DjTrSAi1_j(dpNFVr`z}{BXN4O}Gt~E?YT3Tae0EkxV`+x^9;24MHvL_BvFBJG zZ!F31Y!Ypbj*=&(tK zt?_Ev(Rr=KqGir%XDrF^=uA)xr!yZOIQu$*CGiern^&^s@2>9;%Yql1WVm9J z)xy-*ZNZ~Y;{S%{6`PV-vB74~Qv&X<*avFaipdJi zS#yo08LHScwY(K`);Gq|3{`A;W?Rzv|E3h4>-v7dSd!t2%}~pJ?pfx_0UQvvV!7m| z0h?slidD;A2LsM8!(Xjc%~+D*I?q%~);y)K*Teg7ugf|!Kh#Wde6@9+nOWyZv*(!s z_t$xrTDH!AFaQ3UvqlG%T*E%b&+(KcK3|k+mW!vf+@s(#jH!zlD*osrDxbD;E>)dDRE!Wl%V@Zasd1{q1 z)|8Ti+Bj>Ku_VLR$7Yozd%y!l=V@Zasg=z(xYUD3)>osSsFqUN4TBMe}I=uK_!3oa# z&RCLx=CoIqG`wFw?AcP=6NwkGNro$yq}GG)bJuDn9lo6{NtqREWA>aBaQ~6APAyw8 zxzBahAY*BUDz;uNZ^fK7-&mTVihZG0Y3U-iiu2cZbA8`!EXi=izEsPuZMr`{>k^%H+E|*Q zG2Nn;cTAo2udy^kW4cu>d!O6oNSRTt@5S5WMQoDcihZM&T}M^DTp-+8FBnTQY;9A^ zK53tr(S5M9`Wj0zY$dBD&xd4dmhy~ebmkgMGHh*E%f7?X<=)4d&93ye7)vs2?NG~} z57SnT#zP%z{bnr5u(eYy`~0WQxN)1ERp1T0h)ptV?NTeVtul#goK@FYl7Z!!b-UGi z@VR%7W=^10JL`65&bnx`=iLGK&$_*8*;yy&US~}=mS$+yrKshdbtcAwX3{~u~TJ~97_ZveKUElW`OEO%s zBWl^tfC?;n4ht4r=YNeQ8Mcn9W!K?7zpeAOvnqAOi`XQ?bv~xngJ%q^Xe$dRXsJNY(shJgfsuNzsmKt#X%si!*t(ZJ5bXI#~ zX@)9xS}kwIoHfZ$FME`qfyHVe3b= z?A_>%Ge6gMR>3#%A~wmebxtkY*41pm9i7$KSd!tzNtA@vVAt85fr#3mWG&XYC&iO3qxYG*9TaGfuxm5x2i94b1qSl6uUsC3O_$5(q4 zT*$2RbhGCR0r%JWqFT1jC+gR1>8!7fr5UR8CAGYDcGgv6X@=^2SuJ~he&=BH1lRYn zo$(?z$#BK4kQI6Mrf0p;)>x8Z>vys~Ja8eGYipvhB*WGpWPN=qW`VOd7)vs2T~*7@ zgsUGXc-B!Dj3pViGSsriY1yf7dOqDQ-UTmWlMGvbs%8IG!i4{peCyuf%f^xnEYFJQ znpzLOxB5#nGRN%vxt2M9#+p4}3%Gy&TvyA^AGx=3)-q#hhUU-TYI*06vknyW&M`l40wXTDH#HnoX_htXGUB8Mbb# zl~4DHx%{>F=O~UdmSouahphF>BL}#)RvJq(usmb>uUZd2_ukQrca{5Z=9nHdd;T}z z{xQ9)mK{?$_d4scu{1+tdQUCym^!OKH@t{VGc>0EsfFU|c70=ug|6@6#*z$I4F8Mo zeJX3L%^%Hda}Kqcra!xals3(M#Se7DBKnn^&$o^66ME4IPxIVelTa;ar2CeJ*bb;MYj zp^D{J%T`RDc{=M)V`+vemPajn2KXx9=j&a?3ia^USu))BylOpoy_!!mzk2$fH?!|A zm_6ss()UNyvVE8Js{A$_0%X2?xePk@nP~QuvWv^(fde`~E^?jGIB*U|% zpj!5dHoy3V6ldKwmSor}q?TP9Zwwv(yR$04<*&13*ea}6LH|_rjjU8|zq2BZB^e%_ zB5FN&W){`V7oO26k~uo#%$|#68J$PfvZEt2(^)Hwr5PHXV72V%$jo%sQDbR_M&~iL z>@%Ws#n%4p`hM3~lHtBTuGWLkW5qP%z4v@Pv+w1i{bTWXmcAEP%l2K)W6o+~EX`2g zOQ>c0E;G|vy^WiZLF**TV@%305y)NEr(hG$Djwd`y;68+o~SFt_Dk_=ZYM6CzU zmQtEY^vsr!%!*~0J%?neSZTFv#bmZPEAQL>I%|e1Rz@vbF_|sSs%|XJP{qosW$)H! z51q2j_5C$tNrwAgPOS&`y}V|;eJ_{U_i<*=<+Aj>f?D3bJ8Pk_G(&xt-_8>l;O)D! zwi`<`)c1;N*{j~vlSjf`-+wcfWVr8@)Ozqays~DzceRx=`<`Delh`U{>HCvv*}ls; z+*wtPr5Wmb6}4>N8)IpP`d(EnyY8(YJ$8rd`@6=H3?C`g$htmin&-^_sj(!( zR+w7$&aU>r(Rj`eq}vb1k_=nb)w0L(r)~RU0cEXRz5F$l43AC?wH`b(pVEwXX4c3Y zow{bvHL{G((`wn#k)zUC?Tw`w8l9SI+0l`s(pjU8r5PHXT58#6@0A9(&FlKU+*p#~ zzCWYZgJ)*AX1uG5XEOVK$n5!tjWgG z3{|X^S|MhR{cza(lLxjMOEO%s)@qeC*7d|$p6lS>#*z$MZPc>ojWeeX^mKKu)ZbqX z$*}dRTK3HLTcf%kIjfVgB*UZAR;}UqS{Ltf>A=Xutj~mB(~LYyuxFdLnWHn^?73~0 z(Rp1hJ33eAFYn>3b;i;RjZUOm-qCT^Sz~F2MyH)xrA(dA5A1u(_5I;@{1uZ7SFF8S z_B$WGztssR10db%8%r{5y`h%9<}P106nSg)HkM@A>Y$drT8%8)xhQ_{h;(4-NEJLo#f2Cu`+H^D%VRs%b3Au+>8?+pj7!D{ppI zH)BbLt+&*&v$t~2x_6y5*I1HaD_Sjk4*zUTkFCzyWh}|C^|o5}S~+my=~2$gFqUN4 z>Zz6;<-373W1LlLkiUkKVXK!~c19(~2Yb$bFBwZRZ1twLdasT7*tIppSdxL|dHUT) ztp{J5`f4T(^TnS1`edH{7MVTw$#VAVr?-c`%qJ8bAb?+e%Ww#JeSS8SMC_IlBH{6Ww8XRNU#!wCAdgJ|B_aima64)LEBQooJ-0XQomO778 z%hq|~>#t9C)^%fPhUz?8EpMHjReY$w&YGb*k5S8>+3FoGnd0i)#8{Hyij5^JGGS?d zXALlxWY`*~mOV$cx)I>H_grKw$*?t^+N!(v+X&azeq%|7tqEkM#jWV$teeJ?3|kY` zvhOhc(Dx5Ht89$FhLU0HJ!)%S;hE!|^@_11!`Ay`g*^F!=L$Q*Sdw9Dl3Mm1PW!ay zH?FNujU^ejCaZJYMGcGfe}EX^c)&PX3-o{y0HD zwic;nSMO)*=5OPy?~NrHw&KZ38{Rz9Svg1eYbY7E7OQ2CrfsE$eBi8bV@ZasC2H9< z+sli0&vRBMV@ZasrDP2}Kkq|leP}Gnu(eDrJ6>~V46Na-J;ss@Tg%n5pOPnk+!zZH zAl?2pmSoskLDt=~!S$RKI?`W5$*{FjExWRMFKN*XXT4!8$*`56mL27)&))I8!|}$F z3|pU)HFUyPPrJ6hG?rx8TBVjfmcMAQYnHPv7)vs2eWsQ@+uWIV^c832ALXxxWY|hn z%ih_&He$XWcWFWY}6u*15>No@@7$qy06M3|s5evel?p=2u*_fOKnb zEXlC7o-ALtP0`MpVl2t9^@Un?{gb=>5l#5p`pQ_6Ve3n^?3_Q>YrJP&_oJ~S1Iu$2 z-k?@*?EHV2Qa&{cS|THdR$ zvsxKTGjtXHN-aCXPZfCkOIPRN#*z$I>}$2`8EM|!C*E~dqOl~y))s2(vth#yIqRIU zB*S&ys#Y0OjsO4W(tM+tFFbYLnpx-kWBqmBnx)R$)UtJ!&mx^w%UGJBIwz}T>nxu| zI;*R(G(&aXu9iLGE)9M9Mc4P4#*z&8eTP~P?)y&7c>BI1v+vu?o_A#F`!2P-eRtM* zV`+x^zFRGC-oWIVRp}y}?%bo!a4*caa*Y`%ok_`8KuUh*srt*yJ|Nr^VDVn+N z8TY-JeIID{yf;hV_o-$3EN zAl?2jmSp%yIjELh4IV2p8V9Jgo*3`1vt-!%RxNu}Zd&q37iYa>EXlBSNG;gJdciXF`|6OOB8XM%jH=&b6-(hSXn6KZ*9g0tEiOEWYR zzEjJtTMqVnJH}OPg0UpS75iQ-dw%|IZk}DvT5T-J!17$1PO7yE)sWTj|Nrx>QZk8LHSRwY(K`R=J7((a{W5?6g{T%~rlp$!4za zEsP}@uGkr}PS*QGcgz{*tmVd%3|l{{WsjZfbBp}!tfR(~3|r^a zvd2!7#AhlxE8snUH6#PeGp1>3J@_d2Ni!!rW15yZrcaqYr)3$_pVhKsDo25{B8{aP z8q;6Y@{XyqCKyXIG^W3*W$(5&oj8!{`o7j!lHrQ|rk1T(=>r2#IqNrLNro$SUac~y zMj-zD|0{uFL%dVOx_6%t2`d)C7e{>|nvn4|< zd-d$qBzd{B8W>A5Z2d`X#k|z~rn7n*OEPR-qqZXU$9nFUKQ@+R*!qjwT7CO*&-3TK z#*z$M*Qu>}9g}gR1EkyE#*z$Mf2(C{xFYh{OU^1i*n638`_&b(&KhYf$*^^c+B!aX_a@oGHl(Uwo3Kcjay70-J*;o8Mf}KWydSD$KdJCnr1A? zuys!@J6_M#&*Ax8_-kWHhOPgot!-}}t>xNEHuc)8MYp#w$61My8MgAPWk36SasJuQot0rM$-wfg4-2T36UCDC=>Pw7U77go!A#dlUWV`+x2_(jyR zPw*y9Z8XL8eVVZ(!xby4mVJU3-oWQsBds--WY~ICE&DV+BBfkc*VYflk_=nHYT5JH zfGrzLTaT+{Kke$9anf_Y+|gK)VXK&0 zcK%dv`bAsU);MEHhOOdi*>`yP%ij{6wc1#cf#sQXCDeNGUC9%gIf4q=Syv)+)_rI8 zTq4V?E2);9b#hnYteeKt49&U_wY;;=Ss}6h(a{Xex>9P{F|B`X79vOI0xF}^tQ1i!`72($$3|{ za(jY3*RRSS`l}%sSe|32idto0;4lB<{B^kCF zs%1xca!~9NXBC~}uc2hvdQL5S6`oO`o2T;68%r{5J+GEL>y_=He`dVr+UjX6$*|Rk ztm6?sc<%9IjU^ej8k3cJvB0ygtqsPK3|mdqva|PY=;h1KI%6!!u=Rpk_7jcAyAEyS ztekWGHIxinFREpqG4{P0^slp?HI`)9icrgr*9$L9{>oW>jU^ejno?U;1{cMN$Ihsa zjU^dao-=3b`+Y~M>XAD-V?9~etB)c4kE*}lt}-&tQ6OEc8>Hfq^3$)w?v zj<~*`HI`&}w!EsAonu!%%iYRZx#IkFmJC~MsjV;Tp71=EsAVk4u=N_XRc7O??_FD6 zjU^ejURTSm>zeKQ*t^y;mSot9RLjnUo<$c{aczBLEXlCdPAwTP*=oO-^t7|C7)vs2 zwO7lY`5XTD1cuHYagWUN*HAKSy+PK7dfKU7tlMGvLsb#N3ag`>-IqOMdNrtUxvToe-ed4SrV@Zasx5>KOB0R)dvyCMg zwtA8^Yu=VJ&Pp+sWZ3GZmaSpo*!Ml_jXTDY3|qa)8rC>)qHC+_e18ok!&V=)Yz^m? zehr7dt$dWRB*Ru;vToiuhDC(6W*bW~Z1p3n$;f*3oRwlM$*|R*tjeEmuJ5cn#*z$M z@2F*KxH_Sw=N*PE@K-}JYz-i5=ZF)YYIHG{WY`+0maSpkKXV;-?{K!UB*WGqvRap$ z?zzUL7)vs24JK>izOyg8w(b~9GHeYY>vD;9c%)>|t+8s^@ybzsh3AZ2F5X{5$*?s} zEjwO^cKAI1vaGeSB*WHtvKr6ru~!oQZIrPj!`1|~?05|*8|hietTL8l*qTUfy?gZ8 zgRZUbj3pVi-lMj*h9`SIrw&-`uZCpUdY{^QG{-lGU0Y8YOEPRtqP7~ezp>R>k;ak? zTa(qYN**wpd-!ztF*qT9Y4d{~1b4NeL zSdw8Ymf8vmdwPp|hZ~F~8MbDsWyh;~mmZ!P{$wo4u=Sx@cD$P8diYD%R=%bF8cK$( zS!5mV)X%fZeb!i#VQaQpcD#yboXPFl>R~L&ur-I;y7t&p_y!t#EYCESWZ0TZZ5_YT z_ycEcHI`)9`iR<^|Lw-^&Pq3yWY~(MwpvXe;Q6gfqQCn@>v_0V3YG5qM zu=TN8_I_}1wxlFy^)i-Z*!n~*yWVJc_N?c-5k5ASWZ0Uomc5H?kan}JYwM7)B*WGM zwd~zi_Kfn?o%OG=B*WH1wQRr2|FLhDvz}b;uc2hvTBMeJhqZqRt?R5ej3pVi;>qe% zI`X8mCL2pKusnBLi`6QFiwOSmKb{dS(F`t!nRi=@Gw-%GnmsQLy#E=|Qnl>emOLYJ z);VKohVHhOsb%lB4D#_<-;D zU8$K=Pv2K$_I;q)^NK8ePf*MDT|QNG)_h}WhWh@gTDI@)_8cQ;4ZBWa877%{#?KfRp2aF{dwl-2*%ilTt znzQ~imSou4L~UJsySC>!(qo_cYbY7EHd9;o?$+<(+G=1d$*}bmwKe8Y@8_NMma!zm z*4NZlL$CkzBHC(*xE{MHM`Mtm$ObAOEPSILv58S5jNRb zfvfyAlnh(jsI5hfOV)H&MPo^Ztz>HJ`jjZoil~*bB*WHrYU|{c#eciDh8jyUZ0(@7 zruJKgDVfcj3l|wnGHmUnwz74)iBpxeb{k7FZ0(}9+TXf9%~`)2OEPTjR?B`~S+>W1 z&s}z*&-|5_3|o8DvQJzar^PmPZPhcDWZ2qEZS|R0XQ#7z7)vs2rI5AhnLag~6>BWX zu(eOEU{mYgcXS@%tgnnE8MgMTWzW6wi{^OF8<&hF8MY3n^|)!P{O`q%yS5%p^w&@_ zY#k))uQywic2-kkNrtU&)w1Wq=AZA6aMo~RNrtUMYT5JQhN?9eIBTh~B*WHWwQLPv ztz7@Mv-TNFGHe}D%U+4*M8xHC)@@@+hOMJ&*?IWY`u{w4Z53AgYbY7Ej**pZ-Db~o zn^wk>3|q(5viJuCAw z#*z$M->YS-k-JiZ4EGLmuJKnxGO#?W<&$caL2vMv|FK$5)eLTKGuJ;SGuJ=W&7MyN z-oIM@K`p!fk=3%Z-ZYkGX#I0aExZ1a)v~i@8%r~^{yD9dy>AL?xfOr4qqE;wlHtCe zQ7b1(Bjfu2f9K~}&G?Y9Yriv@eZOb+d?riZe^kr%UB2_vS*1SrkA-Ha@8{IAeV5g; zvtBZmW~lFJYT22&vTU;FdBPB5Nrq?3Piooo&$0q%Uvd>&VJyk8^|M+fQ7zd%PkR?P zg0{}7#*z$Mzo=!;kUvN6Y~!p)lKj<>3|qgdWuJJIdvUzyd3ar8NrtW8)Uxj|fBV2a zuB~WeNrtWSYL)VL%UA4~?>(PwEi#s5*t(#Wt>KVHZ+V{boiLVUVErFocL8oy(e(lR z(j5|#BHi679U>(yph!1TB1)HpbSOxOh=c;tf=HJLNH<7#ib#XsthLuVYyRKyz2|wn z&wXG1zddKx%$_}apL@YOV>DByvh7O-uohOT;3|8z8D_z-QB>B$Ung1$^ zGN|sd(yK$E$LptATh~NU2Gu=QI)AdQ*_Fjq@)bc1DTC@hD}BDvBJXVPYF=IxWl;Ua zN@v1=mw&k~>Uq&k6lI+9X2Jtj*WD=7x$)osa@OCRx$Vt_2celTSC0H3Y$iNpr89y4 z9;{#z7fuwsu{xd*}gdUMhM?~~Bv zD}&LY45}xrs9*GY<5*X3)haBCGN_)i(*4htdc$W^B6u|tMHy7jpsjp+Yi}_%P!wfQ zJ!j=UK;l=fjwf6>wXM0LD1+(+D?OXawL3S})J{>9amt%NFIh$YwC5FPj<|QDE6K~y z{JAGbei=4@{$-`}ho1JBO13H(9nQe~p(gC#L7?lGsdAz?1M?>eE8Vw5ZI+_F^}UNI z%3#H!veK2L%)RC_O?@SbGFY)_tTMT3xDNi0-A;7Qtnw-rjsEfher=T_M~nXdcRMjy zX~k%_W9o(|&OpUtveGk-b~~n0tPbkT8K_t+R=P7!apgUCG0{0zMHFSQ@3C1$K3n2& z#-A;*Lw)ZoM~)rV_qeRI?=)LXO%lZ!=zBa?+IN~QrZ$P<4D>xdE8XpM-QB;b_5F@0 z%HV8Cz)H`ruh$=Q3y)ST?V6y@l);M8-xL=u%5^vL|9gE-#F-Z^njR({1yeJP4FP_ZPe+z(0c>(dn3yj{vRQIx@oC1v%7sH$=1 zjI@e95=9wQ$v|B^^`fGwTt5eOrVOg&plU2^zr)mrq9}vvbyj-K?elM(KBlIMq714O zpw8xQu+r2nQItWI5>(F*wiGe-R1{^L^48~6tiEtHq>;W~t=)U!&z4hj=Cb>9_YJ>N zh2~GLwL!&Fh0UKdtaSd+-vex_jwsH+{7K8opFgJhiQ){*pEp?P8TWL2h3(e&MWQH! z6-x(deAk+;?|R0a6h#?SZ?e*#<$L;V5pQ&2uM4U{8C2<6>9yeHFJrP=TX{rL21h3Y ztH}4^89C!_q(h^VAv8LT8b93glHxqJ&X2K3Ra;~tM zK!1-!v?w|g=sY#`KonL#<*JL{SFSTdZim zMz28$ALcRDO%!FY&ShC$cjABV^vZF@-|3YN)p?d2xolXS%d^rt(@xLSR#BXRI#*!j z*V)uvQJjG~S7fDU<=QD-_FCW5Yz*p58LU_(R{D(k-8#3tJzGstltERQm5xrd8)M5` zTLVN<22~YSx|cYe>9Q-Qt~QHBQ3h32P#H%Ya|5O7j3~;Ws>Vw9y$#o1@IGUWzbU8& zWl+5hZM`>Yo>z^sqA25(cLk}=D)KAHJDj=f=9v42U)4kN=Oa0C^|1LPw=Z~q)qBsNdrxvSZ^6qj@>v_oPd`A>zuwu1Y>HT}}mzlh0dZ{)Cb*2oe zI;_%3Tm6#O`qbL0D2g(u-esllu;}CAmrQ*siZVDlby-Dz=Ub06XWaX7-|(w$Xmq}p zBi9WZo%*bFbm-34)L~JafzfHe${!t5v9|;j;|z>WLsss=G{4&X@MN;}{Vh?H!HP9v zl|fXoPd1G-)l(E@uwso_MLwV3`g&q9}vv15gdJrCnoc zkSNNaY7VMMuQT3?y+RaaaCAOoRoQib&YxPZl4c3t6|~??GM91R@ax0S=vRR>o34l{mRa*wI1q9}u^BP*TZ^VfFiY^t{?%Ao4RDy__mH&fI+ZEB$?%Ao4Z zO4s?GDYCo8QqPMsq9}u^3oCu{cIx)c;ih8l2&zFDr@ZTFS5}d)KOb@Cvg?KWhF|=b z#PWCfTxGF;!m_XJCeRXXVduQ-eft24;8VzoDpc)KqjrhK4 zJX2AB3u;IiR70SxojuZ)FqKCXWl#-erRT-(DK_Ud)kqX&obuM6VXSt$wS>m(zdxfN z&Y6eq&)qlt8Wx)2!{o@r!e;pAtaOIcvq4ioisB5+@DZ&18E)#ND9*qPAIVB*c)c!V z&RgGO?+)rr8LZeSR(k!aShaw+lPM;OGN?v_%J%lbSJqY=QItXT1uGq$^m}@_zuG`& z-DFXeK{W>2>RY;1Q&XEoQ3lmmR(j@MEk64bQ+GsB#wl+mjAIq~S~s3E@m)dPH~bnG znh7a?59&NFY$i+yl*>nR|Iu1!s;DT=z)YCP%AX0Qnu_8K%!Em-^a)I+*gt#sXoE#j z1}ioh)So$?#juJk5JeeOQ$W3Ovdl-O_KBhls;R8>`B;N3X*~6}D9WJv64b);4fk1F zDfa}GrwppEK=rRnf0dHXx-z0DgK8S6-hcnr-Be3altDEeRHwufy~>XeMHy6Iv(mZR zbI95L*4AQCltDFvmF~4_4%z3eb;m_f#wl-x&t%ow6)S_Ahx>njx+45;Visr8x{UjV zUo%59JYsK9=b2$Md^Rgx>;C!v*aK5pMR5jZ_&2Ql8E&ecD9*qPpTkP~p5W75Ypr5~ zMNtMT_AM(tFW#J-(0khRgDA?Nn#)S(YQObwdGqIhD9WJvj+L&f`}1D(ez)r%QItV7 zkCm?B9jli~Pl@1_X_2yysk)*lgK9o2-LKwA{974Q!$eUA)dE&J zSJy84=`&M{MNtOTLQsi{793>ixG2h?TEt4<;ez>F+nb8|M^FvQp!xw+;?`TrnaU}O zGERBt#gD8e#)^pe#g+T7LG_l0pBIZcv&;>M`-WdXhR%z+a^xSw&Wk0i^t`w*dTdrx zJw$N^&Wok2{PV)pbWxmv^WrB~`gC`A?Gx**?^{Gs1}nCVmCn_bduvTG^*|J5P%Q^l z>rS+yrqb^ZMu#$}R)8A&#`b2WYKfu@s+FvC=TLmr)~TlYilPjvRjl;sL9zxt&X`&# ziZZBHLt8thjxT2Fh$zaSS_3L^wv*mZqDDCoRD&|8erBcb@M_H-y{xUgq9}uEEwq*9 z^Vi(1v#t_NL{SFSI%we81 zTa*Z1Gel7a)n-sv)3%#wYPTrLpxOc|%k4RjOg$Dw8B|+Y>6x--belS+vK$I(NEuYy zSm``m+~$)lrs|5K465zW*6dUR+}2jBF+db$Q0;)WKIs2R2U9XA)EZHgLA4j!%CK_FbyF8bQ3lmMXlusHTPI8&6sOltFb6+G=oSQ)X*x zizv#VI>buPuU{ACIBDvRD9WHZ%u3I%BI5^sU@G;|poWw|b%d4fwJub-?XA64L{SFS zQC8_>RhoMGu=j~ZcTto45|~*R;LdR zY%-PPSWpehpgPGat-Qnh6}sLuRaF#aP@Q6xMpWagque%GSAf2vD1+)Wv{mZTeD6MP zsVK^zIsd*yI^?-^q$QItV- z4pjaYP5!X9I*OtUs`H>qZJspL)O1mlL3M$Z&Zv?7qPnhV<#&mq462K)^x5fzdA|=d z^+FV7P+elBSMv-Xl>XUN))PSuDTC@VtMoEAp42^)(^P#?ltFa`)Zc$6YiDYVD9WI^ z%1Y158{;mvF|}P3Wl&uMbunMg?53WHq716*tn}`<_7{1)YfAo;K{Y6Y>IN$vue~vT zSZZy(CyFwtZnDyT9q%~yUsK~mQ3lm5R=OUJ9UF6Ju2o>rUv-F2$*!Vt1nd|K9?*$4c+)=%=bo6&1x9 zxU;*@%D=NS)l3v;;Lh$ZR(igFc4&lm2Q*X^Ww2roSn1U&&Y0SrtYRxfQ3loDtlVXT zUxQv8&TZjgXS0Kg!|$N~;miwHQ1=bL9){|i=yXu$hhcSo#7gVD z>O{@*rb>z84Al8CE5FXBx{Bfq)cFZ3cWcD2f6~@kVtt=0iZWQSr>qi)YSr$+1XH_2 zQ3lmBXzR-6u5X&UC5kerobjcvOi)A0pn3sqHMo&5qp8B8D1+)Hw6&@D z^wp*si=qswSFH5x?jCo#_epv`QItXTFDu>c+`FF3Qwv2=23151`k7m8tHrT(&+Q!^ z7DX9UQCMkP4G+9SW^^bP{oC|a@1PMvnM!7 zdy1kAs(8@W`0EJ|QX+WG5JeeO@u97!g_C;EmbZwa45|dsR*S0Zw^>^^L{SD+LRPxl ziIXx%dsB(d1vR7$szj{xT5vkczM7`Wh@uRt#H@5Z>{`Cdc~c!lQ3lm(taLq$Hjf@6 zY7NJWq714etn?iwOr0ygsg-8Z8k)`2c~O)>l?>WSw=>=lQ}NFSHKYux zk?Bir70i-ERvQxs)TrDmn0{B%`gZ}z@^A*dl`P^Do-S95wj9MkNMwN+9S zWl*Jswr;fV)7{kjq9}vv4QQ+8sxP{k8Z3%3PI)`VbgUx(6!=ZfBzB#2iweKe(Zb5F zd2-}*G19wFd;NbSEIljT$197Mp4;iZZBjvC{D>bL!kiQ^Q12#wl-x=VtY<>wsHg zBW|6jG$eelo`*A~y&0Z6G{b+ABj*mA;dxo<46mD@^dM7vL~#aYcs^GC3^#RG6lY+D z=Vzt!Ctb!WZUX99rK<$}E}p5|qBsMqL?u?*_j(6%d(VxNTnk2r zGT8UZtU9}X#c}`r_fw-PoH^q4y>h7UrR2z!!}?y8mG+&U8kuS$iZjsnYOJ*H^t*Vb z28rSf^!;sCdQEx$#Yy-0T+f09q9}v2r8+BpX1;vETyKRuEQ&Iy-eIM8C4D}>;GJg$#2cq1R zRHjCW;tY&VBUb+Cm|8B1GcY=hS-FR6{90BzRy*taDN&TcioM55cX4Td`=`9A*KP)N zrVOektaN>@S1`hRQc+A4Wl%L`rSqpu>c;b|trnsvgQ^)TeI`6E`JaboVguY=?wqolfBcd z?|+J-3|6cYD}9bsBm+3QuTbEsk^<;b1GD%O>iUolgS zMR5iy_7N+;Vy60w;tW)*8!KIZ(%xC=CaKP`??h1sE7l#%+KkOum zGFY)sSn0aa{mJanRb@w>K*jp9@+)R4?Y*GRoPmn)u0Tj!Jt~T{iC_HRZJ9RPz_`FK7th_WilzBGs551-VpCY@O0wkVlBG;l6Ga(RQ=zSQ zwoQ7+R4-AKLG>lHHLiF^cS7j7^Q|b#p!y2hn%#Z7_nFi_QItV74ccn{Q_0EJ)>BcG zK{XxPntCAqV^dik1~sG%s;{A~vM-)_m9Hy`GN@)iTgA`x$!%>75JeeOGoh{IBg$qq z^`j`tpqd43?RZ&aoT=lYD1&M?v{f|rM{XkPct!sws0L+FeFJSJuH9;&sr;fSgK7@6 zb?uw7-aC9>6lG9-3vH#j`(r_CYm_L;pqdM9joAC|LsM%+Q3lm_(AJpaiM$=r1yPhi zH4oZaR=?F9Yb)WSpoWw|^*yxJ{ZWPNrb>#U466Ci*5uQLcA07?iZZAcKwI-FB|B+q zvM9=+S_o}bsL`sjsm-D&gK7~gU88=wa>m<--xfs~R6nrNH7etq-<7qtQaui8NEuW= zLR+uxySCm`Wl@wtwHVq;m-TTcQ{6>T2GtU1>-Oy*+{RhYlv$!EgK8V&W#Jjew<@!p(x6rS_LZqoaY%$9Ti0xRI5RCKAGOTCyM$ss0L+F ztzo78%Gcsj4{Ix*D9WJv8QPloq)RnZO+`@#)mmsP{@s<0O^p;q8C2__txDBPd6i!! ziZZBvfws+|DYgdx!Ko z`*E7O*7pvgD1#N-!AkGH4*dCNOH)%sQ3lmcR{ET_^MXITtJPLfl)*ahVioykcE53E zvFm}>d6(5$j=U?Z&bwJ@o#`_>Q?I=U>dYCa^Y5&*&h(j`sUo5{19jfRDlu0%A|h#q z9u2HwO+--!`@WY|z}wl)=6qWEFYe4{>Id*Y|^=zL%9F9}MgJVOD2K#=DRpfm?&KZBs9}D&UwjB9bSl>^u^80Qo z?yF!dI0Jn@$;$7$seGb11ARZmO4pW@-_i=Jd!z=UD1&`J%_{O|uxB{qKZ89T>iZx$ z^69X?pJk}@&ng|LcUV&zxN zR5wwafr?#bQ3svk*cRYGs3#-@-R$8&jx8AH}sg4QE*2hl`>NR_r#bl>Gi9A{uQhzT4C)QItV-hn0TfJh}e7 zqNXm3q716LpsHMb;9c?4L1 zWt{T%&reuIzG^+?jK9u537v!Kq6PhV5_S$gW2NUHt@EbJiQ){LgU?y{=b)($qBsNR z;0soIhdAZShVBP{w9b=7Q3fmal9k^1zTfwwL8dl|q6}8-6{{cI*wD{#BulwGR`{y* zFJ~^hKacMIqt~lY#cs=yUxihSK2o>8=fBePv87DKjV}G63{)%%E5Bl<@`>UMR4ghh zU9~>`@`|^TG!R7@tXMQq2P&`guBXF9Q3h3XPy>qP>1%afDT*?vVzAON-TLkxZ%w!; ziZZBTg6f>9xwrl#j1kn3GERACK`d60p9Qfw<4*g~n8u3fhM8X_<;byO{{NrMkHgA8 z3rsZ<#TgjWxUBp!HPu%XXJAa@vC{b*|3X}E1(+j>GFY+rpkkHVx|kBdYo92}V8s%! z>g;0w`@TCNXZ+nxf>6bt$&nL;RV)!Jtr*>Rn@SlocxRk}iX~>{SIkryQJjH_y~au_ zcIfoY%GUQ*q9}tEOTtQL=E%>caU!VL1W}Yhm6Vm9agDF^@XokjMNtOpoQzfE_aMnR z<2GucnVBq9=UZ~*WMOrFot4&^?z>GTj1|mmHQJjIkzrjj(L|?T}^&9mwc*Tt!d`B6aE$LX%xYH~5%TaD` ztg5Ui%Ak6aRptOi3@O{XkEvdwD1$0JE8SJ5U)H;+sYRkFgDL~7EYeoymZ`jz_Pi*{ zpvuTft5JW-baxtQzmmrZzM~APOsuqDZ6@__K~>d7Q3h3JR=PhdmVDX+Qv*d&22~bT zT8%1E&gV3>QWRxSWd#*yLhVbYZi=D|s%)(E9iF=xt%<1&af2RG232-e`rPkE*?OOt zY9NX-sB*B<^=HuBTHbgK6-60TIYDLVp2V9`D@0KSRW49pMEm@ey~7KlD1$0DE8X|b z&VT8ksl@SuYETAM9#(oMHDmbjfu_ofq716Mth5?iW;H!&s=Fx4pvnhr)hc$_`?Pe9 zD9WJ94{arm8_zqx4v3-*ssgO^{_B@H>u1?J{8toZP!(jQHC*3uj(1;KAbwCo%AhL5 zO0Q^T3k@A%ZM76d8B~QqeSQ914O8PpQ3h2JP=zPG^Sh~EL{SD+QC3N1wRsVH?G{s4 zMNtM-F;=?Tbg#THuc_A(1l6Dns^YA41^6;g{I;g5h@uRt5};;{*`CW(e^Hb{RT5Oj ztbI3|S|y4ys7is#F=FLdQ@2D>232WRT8+ymXzLc#AR;1T!r(i~peh6E-lxA+GSx^F zWl+7vN^5vio?^-kzjD zqM#a-K~;g3*0AH%1$(Wn_M#|*sv@WsRX-YRYL+O5SlcQqiZZCGf=cnvpN&oR7DX9U)mUi_|Gaacqp2mL zD1+*4P)BQ|%x3DMD9WI!&PuNi`-j)RVk*UJK@TZ|>K#^kbtpIR`p>4SilPjv8le8( zP$Pq>-l8ajswOMFny-8Q^&h6b7eyIVwV$gS zsOmsld6pjXW>kJrltJ|_v=zH-T@2p>)4oy_b3s(#)_g0s(P$+y#6R( z+xrQD4WcN6sy?XxLvLNSwr-1}45|jKbiAVM`R1^xG)aT^N*PoQp{<1lHhAaP+oC9g zsu8qxpxOR+t*t(yD1)jowDsMDkG-?}cS@0cYP&H+xeltI-RRQ*Z4dRkk@MNtM- z8&*1AaXU7eZ7SyLK{Y6Ysx7oNIDN(;rV5Lq461g}*6EkA+^v|-jh3P)gQ`8WHG1$( z?-PUxq9}u^1GKe%>8`fc)+SMuLDi8}4p{*w#Czq9*Bw!mLDh*>0a3AgZ&+$=WlRzD zkTR$`v!c(3=`|+v8gJcbD2g(uy0Fq2_0#^V-u?0zQItW|l~vZDsfd`l(#*Ga_^T+& zp!$fFK699nE?z8Ce~F?Ds&1_G>A}8i->?Ua$Ab;8mlQD9WJv1lo$4s=7Bfrir2qsy@(G?_3w$ZC~)dA|m#Qq714}L7hH6 zz?;2MQwN?hs6J!mHfsDjbauf^Ypa+j%Ao4YN_Vhh{wTNFRA*6?LDi3y?&oX%(agIi z`c@QWQ1u6O{SEqscCE$xwYpaSV%Agv= zN}pog>F|@cBkC)PGN=Z#(siT!rs9vSt)E0u2GtN&`owBZW4ZDlLjKsD^_|JAXk5Q=LUo2G!@R^l49wUz>a9@=Q^bK{bMv zKJ7U78HAMNtOT7p&Zae||k{`0AOpHC_~DP>o@wHB5gst+!j=DvC0w#=qpYpJ zMNtOTI8be)makwceY&6;ltDEf)NkF6ZZ}m^6lG9NVC5D;e${Mqi4(#9`b-pMP)%f| zKgsjky=bkht?xxq2Gt~1+Sat=tG%;wzbML}nhb5F>QnE6we?ICWl&9lwkG%P|BI>2 zZw57_463Qn)~C59d)La^q9}vvOK7X`&|2QTc^^@fLG=~1wXXC$?`h9mQItV74cfX; zAf1wP)&!n+W+{l7A1n$V^Ner^))M<^OMuZDQYT1`oL2L)eKhpy!YYGL&Hqf z6Ga(RGg;}*e8}+m>rD+5MHy7HKwUi6c8jScq9}uEHY=UI%O*WPYwENp%AooN)PXIf z7MO~WA*cprP|abbbAETJjoxPg`9x6$)wiG)wIA@EwbeuvWl+s!l~~4gRn)tGni?*O zGN`^|ML%ysuM0o7_C|S$D9WIk$I4w2_|@}S%yHJ%VNsMp^*yK~i|Cg#bsoMDMHy7{ zL9KeW`K75W83RulR0~+??9J10`z=$oL{SFSLQpkJM4xDCkSNNaTEt4Lk?-#)ZX>4s zS|N%usD1!dd(M_NrcR5Z45}YlX}?}o-PYMu^h`mkltHx^)a+!@+^MGTu&5}?pjyI8 zujWG&tv_a}y(r3{TFOf2eATZqRx>qC6lGBT#7g%Y)d$8nWNMoz%Ai`tN>`hlR|mR{ zv-azuD9WH(&PsQcG0x{XVk&*+z*7d*3RZd#o8axy-W9gKD9WH(32j}eo++!fHChy9 zP_1I6ZKaC(c(JLCq9}uEH7niQv@M;*yC-@miZZCyfLb}O=V@yzTb7_2ltJ|~E4@$I z+9H{^0yGgt8B}XoY30AG^fa!uHC_~DP_1K?URImDy@#JSwM`UdQ2hex`S!!^1l76m zOcZ5Mt!Jfsw%BLmRWVgCYv3t^>Q`1e=NnwBR?k#(QItWoft8+L6&I)FM9|IAq9}uE zBP)GUap}ov_wY>n^@}LVpxVSrpR>JP=!W<7;GQVTpxVqzXH?zZRR&sH>9Pf_QU=u) zR{9Rpyk2*bsdq(D2Gv$jiGTk3oT<-6Q3lmER@r23^oo(rTiJdQMHy7vS!ES|QItWoiGLG?SRWN&5lp3mpX5%iEUsP?eZ zm90obp?UTWn~S0hs=cgqwP~DfWd&1HMNtOTK34h!=FE$W-u>6_q9}vv4^VMxt?FZK zy%I$kRQp-E3Bj)xIkR|Iesf?DrK&q8k9kGl$Flj?W@aOGF3$s zWl$YsrMs_@%|7;?WA_(D8C1tv>3D5!{kc0qb-d<_q714Ntdhtm=g9P|lc^)3D1+)G zD_wivt5x3}K-+pHiZZB9vC?Xc-QD}5sXVy@PZ?CFS*4eEcu3uXbBSt$asOltFcYm987VzME>Fsac{ZgX$tH9p#M~8+&)YheS~Z)g@NC zvPC&tr<}DFkvDj+ltFcwmF^r0m;L=CQ$<8k2Gtc-y7rc6k=8p?+K8eIs;kge#U``Q zSX(nhQ3lmDXe;%KPrTjN9#ND*b)A*o1>E^$wzuz%k}s$RWl-HwFc=@oYSE49`>ItaLeb>6l zrDsavg28u`LG=_=*EqRno9ZZvGN_)h$|zT&n#VJ>Gc`vPWl%i_bv^n(Zv{9iiZZBP zfU45_mUrhHw@}b8%Ak75O4p4Q2_L&)kd25aD~d9xUV%z+_Q&0(dW)hAs((SP`>AYg zQ%giq2315X`n@fk^D$12ENbeqD9WIU!b)dv%he6OHkG_^&_l|gipolNL-%LReN^ zLKzc(Rg+;Sh92?;_o;jtV! zLD)=4#7buZ{l2HE6h(tNa|UKYVpjf4F!h!w&cIA~jg{^S_7~`R&HCO}6lJi^Nm%K5 z`todwI;N(Hq6}6nDJyr|9Lc{{kc=~{yox0aRcyB$IcZqMlC#o^(Qjaxx+{t^P_frp zX~pO_uuP>c7Sx$DP_Y!Obl>}`ZLI6o_o|{OgMClQ>Ic^^`t0Gqf7dk?XU==zCgLiQPM-SF=%Pez(3K6Ga)E zEpM>W&s_R-n&!=xSE49`Djl@dD0{LI)>h`?!RSy1)tjuet+d4(dsoI9q9}tZJu7_* z+OTKR^VU{(QIv7YTLCh#D&yXYyG%v&81>NIZAEe4eDL{XGMm6w&y@HU;YXEwE26lGB5W96nbzXl9Q;}$Tj{2fu0L6slc zT6S{4QB$c(1)egf3P4*w-FPRvsVbrLH3Us0y*t>({fY>Hjq~ zPZVWP6^6E!egCSgsiUGOgQ^I$mFqya{-$D;4yr*JR7F|o`L$#57j5S>{GmSEOR06{(XPxmehWRDzYRNOXlYHC7a7U_~m)N>?Ph!kStmiZiex zm13oHwMOy$2dwYsMNtO(UYb?peJ{hAwO-##hx(p?7IOD09oF}^SowW7Ra6vbpzmc_ z`F%IlRupHT@8wvzlapV^hwpG(U>*0bL{SF&UY-^Gcu*ndzWU|9d$95UuS69%Q^UIw zl@IlOuN=92Sl=tM(!S>}xb&5&`=U4leXqny`%b$HQ)%7``okIMdu3L7R*rrx!n@O~ zDvC0Arc`02Yt+)3@%C87`iPsgQ_;DD*f8FGL@}d z&_l|gs>4d3Hdi^Z<+7>wL{SFSyR38`-ikl0lBsc`D1)jlE8V5ESor(9rZ$P9461sp z^f_dYSNFZ=#&<HdUym~fes1STd8C1-;{e$e$;Cz!|^J?}zFv74uI&>998C0F1 zt!JZCHM6#6ilPjv&d^qeiE+=F+9QfGsJeifvaG7N$9^h`GN`(;()BRvw3ofDt!$Np zx=;qyN6=QIa)aC;XbtO&q715TtaQB6_e|rh*h557232=xYf+6#-W7JaD9WJf0V?&l z^K0!Lo)bkGR6SW~HGWz6#Je|7P$lRgWl;5ErTyC2bNPL1tE4E(p!%4V&Zsx478+@) zgDA?N>J4h?@UPs*L0b8*L{SFSC#+Zj-^UnrZ&= z?k|22MHy86StS-Vb$*?ntgXYMD1&MMv{gSzez&F4@p>+bGN=YZTWO{}?r17=wZKyb z)gWl=_at8*HC00tWl#-E&(ilU5D-d=PRtIF9fxc@5adl^xb!HSJzrT2rIF75TMacxCW2Gw|0)GvC?npJ$EwKYi;Wl&9ErO$*5 zHCpfLtY_|OQItV7k(G|=l>FD+La6GLD9WIk1giXy<=0Hbe<$#iK{c6`zQZ9`&fPQh zmMF@gn!-x=nJ)${cy6k-D9WIk3Mxmzzr1sBnkdSk`jQoWN=&b`#oqRIP5VSq#wl-x zf5j^Dr&!ZCv)CQgZGHLmRcMAkmLq=^Hp8d0(iu)q@JuDG5!9J8FvGuQrF&X>f@i9z zD9*qPpTSB;=T4@DtF6vWL{SF&K9g1CeV@gdWnSNBhWb88jyyB0@3UF?eK$2n6lb9C z->~xgZfch(&OqPiu+mlZ=$TU9uJWEJ%3$BWW!2gB>wn*6&*jV!ukYW6`kuOGFoNHP z_5C|m+IPCkHdR6tXQ1!%SZUvBWi!=W6lb9C-?P#^$-y)4)wXf}Toh&SOqtJ0&y>pz z$5$}5QWRxSEdZ6j&hTNT&WfT8)_EbT$nUZjapr(m=Y^p<$Ep?7d0|+ce_*9`rn_uY zIYn^>>ii=szs{!Wi{cE_c`+;9ozCrcY_9cvpeV{<#g?$r(dkxTjCXxsDvB~#v8Ajc zuh>tV+3QtoX{chS<;Y9JDz=Q3UolfpL~#Zxww#q;F;i)42cyFosMrctdRE4J?PM*h zSb0&D!HTV9mDu%*UMf|vyqjK4*dj|sT-m=1EaHvl|MSBUVAsFGiP9QHnY;_Y{RGa ziD!K;DT*>!u`R50Oe>_CKGjrrQItWo722wkE$=f^3q(-{)i!8r^0?h@xe9s{5%H%e z%AnfLDkDuf_sVwr{3cV$>IR-NsCIyQ@WC4I?5-w?GERAWt(~kQU)gqX=74)IIumw= zWQIx@o z?O~m@D_w0`9w|G>`u?jZ%3$9QvWmR#hdAT+{a~o?*W}0t!}@-h zmEU($aq0(S!5QfL5mtWRO%)Wy8R+{_RyywO%g^s@eQzd;GT8THtRg>Cj&o+OH}1zm zeIF%9J{H#Z6RfoFbf%bEAc`~4_mix&@3cELwO15ppzo(xC3NqQUfutl=>|&Y`~y*x z!87GFD|dSE>)|g;KQWb}LEtHa6+6Q!o%`cL&i(f%@@F|y&3jUDCRDMqa^y2%75kHw zR*XK8H}#-%z1l);K!V5Lu=di|U3psCBE zD1+)EE8WxPDE`i5Q^^_zb*2oeOVHM+KkM~0RZ$dWP+f+$;{KdwovEIpD1+(>v{gOt z6!*|e=g(YGltFbB+Dh~Joy>ia*+&j`|Ms zilPjv8_?Fek2mEr)l3v+P~C*KmJdC3)zlZFD1+)2wAFdnjXzDT6Ga(Rx1p^MlZ|d| z>bfY(pt=KXwQHNfn^CVf4(dV~RCl4Rh^p1yc1dekSrlbZ-GjD18{Vg~sh*-JgX%uC zHD^WKiKga?qKs4CzU41go!wdazn>L6;LLfK(S6Hbp|$0J9Qm)XwdHSCy0*}>0#i># zaR%0whphay#Z->>g4%Hg)|P)*>0BMqx!NM@dlONV!HPX%ir_PvW-qYskq9}tEd&Mg9J<`9N z@%KotLKWL3M}8Gnu?W{~`xl*Pe`xB4D9%8|qOj76(f-g>lBPkOIRh1o%1W<97t+7< z)~M2=D1&{E#wzl&GCF7cCwS3fyC0C?S0_1gwAktC-=*qi|B7M^RytegtTZ)36lb9C zF2&8&rja?|bX>Q&E&b6$jMqe!DMP zTbY{$qeB_2b6i%D&#`!%S?GGMt6$tuoomaHbApsvhwBV5-;c|Y6NUBtHCBG#O+6CD z8R&ZwR_;rv@21keAB-Sppzldp>8CIgVr29_;jJi>8TItRnAwa?ZGq(?a8(EY$Zt za^z%TeSe*m-*;2rh~f=U<4T4E8-0tKF_8 zdP@G^zjc_JGxyz}>zq#&>U+iyg0V;y*7r25wD0uH%2Y*BoPoZlW#zu`i`EuXokVd4 z`c6OD6fKHgQ%Y63Hrx6>MO5(9PyTP`rDLUctR=3^cT*tfO+>_2QIv5N^Zw=8H(BXE zA?>t5-t)10q9}tZJuAI)`Kv;H@AJX*&4X4cgDL|nT{E}5yZVg1!#biUgDN8{{nX>e zxGPUg^%X@Kr@XyiCRUNpgv^}rXF{gXO!!`ooGEN3WMSpc1XDXiaRz2WR#xsyXeOAt zEs8TRI@wrhogXyM_>T2G*@r=$DT5Wu&Pvan@2>4GWU7)V%Am@@Ngt4(s}^{%}sq9}v2r5Gzcce>X;a@15yQIx@o6=!wb z9h_Fu*C(cF750Z{b`oJM_%*p z%|8`I8B}Fi>DB7)>O#G(tsg~E230v$dS&cc)&CpUPl%!ns`9LKjapG{ZANP=M(dy& zltER2Ra&V=&Qzrbm?|KOGERA`O+{9*+_OrWc{Rs8_%eL{RN{<3e=3INPir}H#jyEP znU&6;B~e!_HZ?>PXJGzRVdcK?i{_811)?|u^QS5+U2VR(^znS_`#w>W!HQL5rDHle z!^%pgo`|9hs<)x74)?duGnJ)HFglb$Rh^aY3UW4jq9}vv9aj1dcMe(?)7tt> z6lGA=V5RpUk0;dMV`_mY%Al&rO5fo(^T%@{7>E6$D1)jNs8Olk=wNL<6-61RyjfS9 zRcklv=)GIp zsVMD&YETAMLuhNxY$qegT8O|7`}lBsQ?I0NTJ3s&w6zv#R$bwd1j+1xy_gMHy7>L48%`{AN?nL{SD+2T(I-X7@f_O5ZW4 zJY`UI1T}bI_omiX6;YHy)rpnvQu2*xT*_2uQItW|nNsIwGN?WVb*xHFZ}m&uIjA9JQ1xb|HS9cQrdRoLq9}vv6KLyD;;n8Qs57do zD9WJf!z!K3!;TvZ)-^R-6lG9-%1ZaxW75r=X6lG2%AooT+Uk0JLp@Wmy9Do*GN}5p z(%nVViHqH%4(-=lq9}u^A1fWNl(`m`Hq}iOWl;5pwwmwCBXjYj;CY zltDFwmClVDW&D3vdZ;MMpc=|b?_oP09`8PA(tfQIMHy7XSm}5*o&7o|f@yhQ6lG8i zXQh>|zNW@%Yb*UnL93KO^*Jl;SMt)0yz5sjQItV7f|WkaIC1iMYinzmD9WH3$;zFI z{2EiG=i8=Mi=qswQLNnJ&aX3z`&}`0UKC|ejb^1aoL+4G5>u~r3#vgGR9~>tPXik* z&hV?L@}el?l($10!>Y4;e{L%MkKdXf%b64I&vl13CbUEACPy9P#6_lUV8e=~4CFb*4&-q72q~GONg+f==PgGOx~)Lv`*VN1hy3=c%l;&h!-2)HqR` zfjWQ5%6;J%Jq0zjMighD&R?<8wJu+UcZXWv&xxW8_I(GpoG5PYd-uR*zsT zriJzWYgT^WP2~~A8R+{AR_;rv@1~lF;tceCCMzBHwcYDfv%ZfMMH%e-ELM^CeKu$O zai10H`#L%Dtgya+!^-cwsWYND1AU*v%6$p--Biq;L7h1RegBq~uFp|#|C7V|UO*IO zuzT>PJxD<$Sc#+BzwUGER9{ znZ>N!#we1%gLDaJj<}4@gvFtmknrQ6VvECO!ctZ`6X~Fx9ik|M6iCKf@)9()i11c zJ)APGi7RK2jff~FiZZCyv(kPInpu9SsWzf0gX&jML%)l<&eWHpD1&MPD}9Gwv}yIe zsa>Kdcgc{kfi}8$+}1p&WT**sR;kN@pGYMwqD-eS+F? z24>wBR_+VG=sY!5UKD3w)@@~_eSdKKz#8j&XHk^Fifv=1yY8*cA7wN3wJ6G<+74}{ z&XD+&sozCW2GtH$dLNgr#+tUKo`|9hj?PY2k*}h=ICH=oot>f4$?|DX=bd4r^BXH2 z9a=?ARTIS-7@gg$+?UYknCc;lGcY>8v!WdVy%zs+-n(m?C5kdwu|2GGOjpJIce_<= zrzpx`#rCp_{O@7d#~FVW-5aXdLpk!^u!{Y`N-IWx4}+gwHk=H+5MQWl$YurPb)!tKJh+iTeh1p$w{Htn`dq zFz4EJQzb-E2Gwy;)$b)4X{xO#%Ah*IO6O{wjyt|KHCYs8P@QC@SE9*Lc9qtbTAagPtb;_utojnlqQ(pX-W!Dm26I%aKoo&G0jXff;_5 zmHWakn&GC3h~f;)@IP7Uop_SuGrcDs%|uZKD|U{Rt|SR#w|1LHJugOxq716@&{nC- z58dNWRm(+D2Gs>tI)B>M9J|WY8Bvr$b&-|Mgpc1CxzJSX{z0phampLhOROTlXS~dr zW!{)x3XN$|Ir62jF}=b{$CREGm}(@7GccxCS-CI#qGtuB28!YgjOjI2dUk(uIr_iW z_l2S;gMGiw>aixi9>p`D`lLfM5hU1AV{EO6POGs;ykJI>${`#G!Dq9}vv zF0}Px*uMSN);Lj=L3Iz>dN1_>_Zh9e!*!x4gX%uCmHgrG5~ePRq716Ppsg_rKYwT{ z;lQ9(%Ak4xZI!-~+S@G`7eyIVe?wa%;?(kX%dJFF2Gv7ot4*!>G3_0W6-60T|3F(g zW0Y)ZYON^Bpn3#tT^SpDhpCIAD1+)Tv~@i5C!0+r7!=fyGN_(FTk&6(D`cveD9WIE z3T;LGGK2SIprt6vpn3*vWx0KBp0zbb6lG97hqmGryV1|o&!Q-U>IJm*yjJ|*O&+mtgSVoD1$00w6*^B$L&p>6Ga(R(V(pjrDuEh zJ8_2uJ*13N-W4r6tGRB)b~jZK6`l`i5x%O&;7oRJRgWIWElT_>&;rG8i?Wytm?5?x$^UiR&`VTMR5jJ_1LU*hxT`je=}Rf=8K{XRxA!H-2+q{ zyU+DqXTniYltC4jl|FT>*EpYd{~m2<;3lbFO`Q-$8B~c_>9d`$l0@;Yaq))* z)u0Tj#H_TfdIi55Yi(5&MHy7Du}UrPF!kSWo;CG}D9WHp0&Tr^VQ*hki$qZdRZ>>E ztE{o~*S}1i5k(nP$yn(sk*@FxZ@l6R52`^Kr@V78IjhK@9=y&O|LH+;I|t>+$-~aU z6s+_dq^Ad_8j0czoP#M@`RAai!J;?==U^&U`V4LQYyZBoiY*pJ8LU`pR{G@j)Wre! zO`R1*8LU_uR*~<+({g5^n=R30#-s^VEb-^TSfmN7*c+_0Vzdu8l}i+7pknD*X~k$C zZmOmz&OpW9WTkVgZ0jryt?%7LQ3m^-o>gbpC-=?&_*^&xXZ+8F(}(&#OOBjAtnV3F zY2WE{VN;t$aR&OHiIw)9R%}x@MR5lDo|#o*8JQ&?9re!TT4UAYAcE|Sm$i4vbw7t&CZO^UULs$-T#2UDKtB0=>OI^mMv80 zadPBrVRg>IO6%O_!>-d!EfU2UsB=zMew|J25ycs(b1qi8BE^|n?L+JPT~U<5isc4% zB5KNurc#XzMu#$}^03nReEVs?s-P&! zpeo5q=jx+%72WXa{P|E6Ww6erSY3BDB>CUJ167(cx4k--3e|b69Jy3joy)M&I@9k! znfgu?XQ0k+vGVI|YO^TLK%L97(kIEwv(1=neg9JwWw2u9Sn16CYi#T`rlNfj)Q&Q! z%Cn+=(QDQAk#|gG6Ga(R6HMH#2O^Rx=9-R>>XJ>h@<+(lK+xNT7AJgpL% zKUd|*Rl?>^HC8%*=;tm>#TpZg4rgHgyv@p=Kc@1D;tb56>a6r$ru^vVN33FvMNtMT z_6{puMGyBq=zR)2RupAW)qu7#oGj%%YuX};GN@`oTa8zq*lh3cktoWbs>Mq0WhTs> z-P2Ugu|W+fgQ_;D`+t4F2{(N1)j||yobqNu9afR=VBh7;W_KK2vFn6p!ZbN@ov@iu zmzB;0+QFLIEs8TR6Y8NJ;tcftJy!b6p~=t$=WMoI z7DXBCdlObe-HtJ{>sz}w4`vMCRW{{}|NCf7LVZs$y8;sbxa`rw`Z%znmNEuWuL5&>u@IzA#L{SD+D^|K5 z<{RFrtEn$UQ3h3OXlum4q~6N5SrlbZwSl&hWKUMv+Il34GN{^u8lGsb+X4qQh=|BF zG5C%$sM@j86}w%|Ol3`dD2g(u+JnlI;_XSMrih{pst&C5IY7Uz50;zyO%!FE@>bD~ ztRnySn>umE|M#0ZhR&wva^#L-XH#cZdN$F&-()Jqq@ZG)fwQR#EB|aVRZhCqJ=9yY9iZZCWv(i1%u_~#i znK~tkGN^j6(tb^CSDZzWC464sqX}^+I-&ojGby1W-)t8m_>twMf?sH+S zMlVs6LDdh`S8IpfHZ@BWWl;5JrTyyOA%pkn(oRv7K{bGtKAHTZMu+~^)?HDQK{b$- zJ}W4@U|l6sZ%z$*NEuXvKy}Z)wXUh!q9}uEFe}|lMEmC3L8bWnDLpc)3MeTG<#O~wB*Xq7UkhO^Rsjr}&JceN@diZZA^ zXQlnBRHSD@YpbIu%Agv-O8d2T>9HZEW{9E;s*#``Wmq!B)E-fkK{bk%_N&AX-MyX6 zb5WE*HJX+7YjB)b#jLHIUj;R!45}|!X}_8-de2>ybd;Nlq714rpps|J=&ik9h@uRt zv8=RT^Oj9NWNob%MHy7%SS6FaR@F<-+_p>K;Z0GLK{cM0KAG&?C(15UuTKj+Wt{S^ z_!C%t8zUmZJtmC!yT==D?fw5xWhZhbyE}y5J4^^&@ypARCxl(`C$Z8i{_5Y(6*kpO z6ldUyKbe((#WyuT6ldUyKZTX{yj+|sF)AV3;D1&Mms9!4_dCycGQItV79aNJ1<-9wo{-P*@ z>T6ay>;BxBdzQ8JgDA?Nn!!pdUu4nTBc_gtq715;&{o@VIlT2b%GW_PD1&Miw3X%K zA>L0Kg`216AE9Q)#hLl0|9V>Tw@M~SxzTTOVOB7{L&4acs zPJ7kb+Nv#zGN`_XwiZ2Wy2(^8QItV7AKI$=&Rp+Vx(%2Ni_53IDU*<~wMFqKafWl;UdO52*A zbMI+WjYLrf)naI?)a^G%nd&c!GN_iY(zbF$TYS~j_o66+YAGx2*VNfxxB~<=h=|xD ziZZBvg0`N18vk2Ue~Y3Fs%5P7vx$V|*13g8+e$Sn_>MBDmb20od*Ps!|C*{QiZZBH zu+sCZL#mfEO!X2)8B{A->G{(`pQ3Yz*z6lGAY zgSKXls9wa>Oi`3U^$WC>q-?!arhXGe8C2_`tr{K9M7D4cmEc551pgPSR(8rc%xcYR4JadG284?>tSF6~!6YdG2JTXYQ@@gY#M6 z+litKR%{n5y>n^Uq5U3HQ$$e))o-ly&ZT-^alnm?=M$oss6sGcbP+u=3}RsrYk) z{%{87&%yuW>n^~wIGVKqFYfLTU~zZ%;O_1c+}$05O9&7kKyXQLclY4I-6gmNhkxps zs;#cG-_LtpA15by?&<03o}QlB7l4xY>WLy`KBj#y$ci$yV*fw|di|o$hoL*ttLn;% zGFF{|O6sG45TlmXRP`4t%Gf%eh5G6}Ax`$>tIQ3(1?>MmA)Z5~gx5)_^Vy&}-{K>m z4OZv#P*Ud`=`L+n6|lgs7&4~L7oglat4hrZ8B^zrP_j!Y7|?Hy_Pru2%Giosf|4i1 z$ki@%P}PGKWvsdkCD+cHrpG_4n!}1RR$YOT(P=a#=}lF~Sy9HSt5C8BsMC08VO60Q z`Zc7CRo9^8CoB`{tn|w1X9EJVvZ9Pt*P-NDZ_4;G&V9KBE6P}P14{0dxswDqE95V% zC}Y)4D5?DHMQL;B8E#-j8LMtVNj1t%%k8X?H&{`|s@qUdoJ;R;g;piZWKc zgpxb;vVnCos~W+IGFH8UlJ&6uzMM|wH?pFPRj;8UdG{RpTw3eC?YYZ}GFH8TlKoiu zFVCDeW?`55b)k$^Z=qz}xD#`18%p?}9IPl~)qh51|M|*eRgGCu#;SKva#b#ygMs*S8DW7P+v68#nHx~hAuC}Y(}C^^G1#X~k#75h*BTq$GK zC)3ujsOz0kF2ag3R(*z&>#M;T_jfLIWJMXPzCg(+zx}lNoSxxyR+O>ot7+@NjY_9g z9biQntG+?W+^Cj+cm-9@Sy9HS0Po33|7MMNJ4Y^5mFO=XZ#-SO-{=To)WLKYQmZP< ziZZsXkWf*0zLx%P$8uG@SW(8RP*AcXih8q>^Y(itE6P|E8cM1$r|Q!o+SWc+l(8xd zl-(R!HJBA;JmoxtM1ZR3Ro?r$VnCy;DO&~K8%IROyKMyRjUz<#Hq-bl;3G$f_-}Y%56-SB&T_xbl(7|y3MKb~ z!b^J2(2D)YiZZrh(V)IxvFOMgb1D`ssA8S@$kBpTEC!TYF;(MPA!8~Q6Uu#>P_>2? zGNxj&pk)0yxAk2;?fZFFl(7|y4JFr3rMOWqstUEjuQO$A#o|C6@v1>r!vFq`Yg}ZW zI2DT%RIx04?@E2MAf9qjw4LDi|=G z6=iJ25<6rRvT4YSs`O)LUJf~CaAi@3K=sKQb5VIQ>5hFqT2T;tNc1s##SsPl=nk- ze99%uc2-q>R+O<7O9l1)-;J9Z8TWVNrV6T9dp>fiU=>RPB^9IJjjL)RD`ZT?(n7fv zQ?-Q^GNxkbpi*()n>?-FL;HT06=iJ2(i^p=Z>V>w60G*?Oc|>(Kqce0D!wZJTva7j zl(8zKQL|bk>Y!>EE6P}v2`Z4=N_*zhB~_bQQO2swMtvx;tiGxjtSDnu7AV<2|K9HD z3RP*>_|>3{Rav3r9{1R^^0}JAU!G_5RQ^jI-A7A!V$}1tlwFo00PxtNM`@Wjy7q zTDhUVziQ<{#=E40_DH#duEDl^R$VWZYG&U{J-X@sSG# zt5{(usTi$Vs(P?O##F2blv^=Xb66o`D)u9k+~Wp!ui>oof3u>DtyobgxpybZ+oG>l z>@_ROSXB&4uG5f@-fmKrXuV%&%2-t#O4fuEx2`o)Rh|`PtSSK|-{LOxu>4R}eOXb) zs*+IhcK6OdgPfhrN>-GysuYx*VV{gYIX^MH$BHsmm4=dgWu=NI$LJZx+Td4%GFFu_ zYWDqe-e%3u1_YF3MH#EgLdo5HK#~#8o5^0RC}UMQD7nj=8a?iewzZHIWvnU>CHv=N zd7@8Kb%_;atf~Md?+eudfS{}W|A<*Zs2p;CBPF8vH~(W%ZOfFi zi}rmfE6UiuSA+Wg6GwGq-Z*`)7S#7MeB^4u`d$M{`c6+As@}0e#`L`=l=Pi`PmQYN zoBR<(#`L`wl>B7v#_FlgGg>89l(Dm=Hk9|;1)rWxPL0=!4QE9etLm7xDkb~k6-MUR z7FLw8s;+6PYM8fPVMIM+MH#E=K_%xiym91HKUFC<`<^mZ)i>(>^6MW})nP>$PdQgX z1E}x+ZC?$Mi626*f(Ah|VLTtXL9m(72ufxG{cT^WR=Poccwb;kvg-Yj8#8D1@f4F z%D&wFi6JY>Sk)X#*4{o>^S#qEyugYwR<(eVXX;})at=@xdaGXz%2?GBO4i=J=~8+( zc0U^skc$;%tZD@%XSgfZm4~XDvZ9Ptt)XPq%GqE-2~`tVQO2q^Q1aey;_eOIRBd5J z8LQet$)5I0s+O-*Jz+%|PdV2`J1DO+-}&xJdt|(U47xkC3%V}iZu4u`F4%R^0ZOh5 z`tFLV{H%~M*F{Gt_qtHkf)z66y66NYcgE@WW_p`+8PiFuC}S(u8A|FLGiByRst&NC zj8$ErWQR5;W|HQr-m{{NRb8QECsXferCO@eZuifXGFEjns>AKE#Z=X0MH#EQL&^0% zwbagCs>ZUSj8#2MTdDTHZ=-5AE6RAvnLjz4?A62DQ1l zRts>-oK#?0`MQ0@#@)twbGW`>V~k}=JZG2aXA`y5u3u@xH)C9Br#UqvO>mGYyy<5^H)DPq$PphhmwAZf&WvrS8CH*>| zqV{%Gd0A1$s_9VDuMn}1dbbY0g@Az8tSDpE45KQ~TpdN#G**USvVSN=bLf2Zmo zE6P|k6H59OE9vE*RlQ+F8LMVNNxyE#Dlt`6%6)zhDPz@aqn6Jq;=J3b&WbWt{Q)KY zTC%R|L2YXYE6P|k2TE3?$U}RLRkey0WvrSDB~JJ}@?c*#oX^#Y+kT+Yyp(4WArC-s4Bt=8MBTpgmTw0Roz%2W7e@nQ1bTjS=9Yc zweL$=QN~tmF_g@o>CXd;t2)h!GFB~tlKJyr4&N_Gx+`fjSoJ5AjA@_kEuN^V&x$fu{RJh}*c~$0HdW(TQO2reQ1UMK!;v>*RBd2I8LO5< z$qWxyHB~89*H}@;sufUDjU`jZ?^6}&pkG7EShdoqvkeM1QI(q&Wvp5SCH<<={cKNF zO<7UKs?|_3%8%-XucT@;E6RAvxti8MoeUQcu-n@e3@Z0e?%=zEwaCyTf$R#_1YJ#= z`N(U6T}|tt8h%+qKs9WjM|-aM^;sXSW(8R%|^|wFrb{O<*X=U)fS`1YZhCCT%P1VZR!bv1*%9@%#6#tttmA%2>7Cs4REyIDVY@7~w8 z#Ms=Ie*|~CKAMtBQ8LRdf73m-X3NT~&&|{kl-bszXq6hPwiONUo|9E6P}P*t8Y) z`hc9O`m&;oRYy!)H>zK)qiPW=%2@TcX={Ak?tiE{&5ANs9W`yeO`Bkvs?V$_W7RR! z*0x2z-%^$Ks9!_MSasaA6)tOnBC4vhqKs81Oj~h7HXNa95G%@9b<(ue>ZeO3RsF?^ zGFF{3ZO#6>Mn+ZVSy9HS)26K|pGr1R6>!Y224$@J$Fvn`+{de`GP0tKRcB0F^Y4^= zqpCJ5%2;*Qw6!=xA!jEuloe&HI%nG2yZUG68 zstcyAucJ>pD?sSuzNd^;7foAN{;M}r+sev{GFDwOZAG4Rx~r=CtSDpEWz$yAsR$Vb|wci`V+eAn;*0Q3ERaZ@0UuI0HrRq8>%2;&`N_J=)ZZ6rND#8iBRmxa( z9qI>fpGBYHtG~@vm5mi;thxauJL(p(YkEtg^s5Cc%2;*Ns4%6cc2qT$6=kft1toW) z3Zd2yRCSOQWvsdlB|Fa@>0)P5^&czBSarv=m9a{9Z*wXAN_EozC(2lL*R+-UR$^yI zRFf5Dthxs!;}s$4vC7)kFjkbY>ONFdj8;HE*>jiDt6Ij2GFCl+lD%k(-}5*-qLZvB zW7R{WUPWnjOxyaxiZWLHYt*lemTXj&;gnxP%2@RXO6KAIjL$Qxs>_NpRy~H2-SU)I zr~9ZH&x$fuJ%N%ZyCb8^JG;uQtSDpEQ`6R`%{O~$TX$Gd#;Rvf-j)lW!dZ(t`}ydn z{c2Fgs^>;E`f12*ZL1h7%2@RRN@mpj5m!&C>duNXR=tFh9Z{QXBbuq2#fmaky)x=` z>TS->;SejzSoIo8&M;NP)XvKGiWOz7dIKdZK$g|tZs-{%{Ku~$Wjy6PMZSgl{yUlf zka7Q%)VD!Tk>&WvZ-YHWzJrpdNO~uusx>QQ%v0ohDEBE+)p%COn5W1OP|11zG_Dug z`-+O+TW#b2UW>YKu;*{_K5Ev|{~PQN~s* zB9yF*uKYxs_6AAtoOhF{d?cyAaly;d+eaThrHmAMeJaGj|(Mzr=ReuO2rBp)Ax8# z(s%lnpsLEOkTHFa4<&tn*tOMH?R#HVl(DlV0hFw4;VVbqrD_o?%Gin}g!+EP5+UPO zEMZW^PVUiUi3!?8B?(&Q1Uc!;q#x@weQ7QQN~s* zDU?)f(6cnoTZpc#C}S%Y2=)DnB}3+zGsgmhD)t8-IWSnol0&%_Q?-K?GNxiFpxlb7 zy2A+CEWZbJVV^GE7T=qvWW3Y;4hH@*WDi14UOvSQ5xfN5@gcUNT zVp*Z&>96Oiv(9%R#;~G{tynfFd79W6v6#0-@p}^xu!$9AY{jxeeZOKkka6c&_MnPA z;3H=bR_;f6811oDjbw$4saR1cw_>UmvqHvHtQb^u?+ocPc+QkxwC@L5QN~uRIF!^m z$$@5PR6S!w8LLV_$+OJGye(I#N_fp59m-f$5=y@R-1ft~H>%38qKs9gpc44q3b>PY zlk+6rl@(>IDs9@joZyDHX_oo3fE8str_pI4hepQwHhChPH zn7-G9lD^}2AqBNnixo1a@3o-h%}L94TfB3XIX{*aW$cww+o*|&UcOVcixp+8ssklg zWwZs?(y4mQiZWK!HR}GEsm>e4lsElzrHobej2c+-=3Z^9CM(KVRUboCn$MifBM7et9ph3xBY5R#;WF~tsN8NJN?SeiZWKUFl~h{KQfcH)q)jetZE4* z*H^gSKekmhjTL1)<=j(RL4AK+ZHd0?>784M+(Lo1T1 zW2}%dqca3bMu%1;Rqt3KW9mEZc0@hSs`QkJ_1VmPBT;0udI+UeIE%G%R58*OdXZz ziS~UHE6Ui}G72h*j{?%~Z0UT{@-{2VST)+HZ;`WlQ`@g@KtTKl{y$O1sxeTpxvhyC zYK>J@i4|q68VedwRyCg$Wvm)+RMvW5%BniYiZY&Z z?&cGqzJKjZM8;j!Cj`x(@DKfpO$auBeu0wtL)VU~w5*UZ^Jfy2%pbaTR8?k$jF~^b zLdob<89v0jjATrEv7(Ia`(&ta-ctpwi517a`YrgXJ_VW2-hY>MV{%a67x0lM2kZM( zDCzr(kZYH#+QSMN)A!$?r0;a?sJhPz8PoS^Q1axmq~_>i+V{x+`cPn|1S`WY*CYr)mu=WX!Ca4<)mXt~ga!SRrF(-2y1tN7Y|`%lkp5j853c z{y$O1_I)ALL+@((|KF_^A>-by76$b_2OoK1u)Z&blD^a3N>w#h$e6w_fs(${6{o5< zD`ZUHmqN*WzMAHI8}0iXR+O=`oFVj}CurrUU`pSwjRxN{) zwnC*FQB_suC;sSA#;WB|(y!b9HJGQWAuGyQwZgO&Gk&eqs>ZXTj8!Y4T8;oHu) z7PqsajHjGyXBE@~Zz=BW&7m>dQ+ZR#TfWVEt<}i9_x`o4*sFr(&kH{Cs$lbH4V28E zcH!#{P!;~EUom9N{8boKtSDpEZYb}@kI&~U%d_bjK4C=}tM-_-wj^0UUsZ}1 zeh(>Q)n3!qFO?g3m%UV@J}b&twGS#ipJA-!7c;2(l@(>I+7IQu_QfYcm;=rzA7Vur zs}4YAXBFy9^3mGXXI7N4>L8R?IDFE#I$BRvwwHbnDPz?ksC=x(wEx+eQ7u_f#;U_m zd0Dl1p4RyZ!c10_vFZqv%)`j-emD=Hcl4Lz1fs^UCiRWvn`C+6o(Y z@@-Z5Sy9HSW2UXXzcn7LsuL^9SalpK3s>W}5h**WTF8nrR-J(IzDkZy%D3z8s=CCA zGFF|0l4`_HIxK>!sIUEMP{yiLP~J@xpIw`pIOA2E6=keC4JCK{2ZbAM*S31IqKsAl zK*>9YkbNfnqG|~%%2;*AwDq)j`RS_8v7(GsXH8o#&sFg*8ovhKo%)UcPn5ChoN23W znSzB?WoJbhtInIYYJ`paK~+;$l(Fgpl)O)9Jmb&=RTEiJ#;S`@iFv#-ColPrsspSj zW7Q=nsr=*y#t|GJ4>xJx^ zt_1CxYVwh<1lu)TgOXhnJ#nb&%nBK^Yq|~yXT! z4Xh|*`+gJ3`x-R9WtzGE$*sY6jJJ?E>-7C*P~UI!k#Bl^_m13I-;3UclD;o5bvTKt z*Q}5+eZK=GeWxc5RgwPl`-2Rslal`p{XZcCQdX#x6aU)#h58lNjPhL^IaTR^fb8Dk zlMR^LEqG7wAv4%pCS;WF2K6*Iw{+vDJ~VAr>U4I7s@|-SF>U<|MNbpd)|*?;3#ppK3K`SZBh%KDv(GlF`im7Z zrme?NGJ-UFRqbJgjG4VppycQHrP8(ztF!kKE6UjG{V9~Z*IHEnYcEwH-}$qJGFCl< zk}GBT()P~!oS7A6ta=V5-||E3qKs9qpyc^t@ZjCQ>KR^SMH#DJL&fyw1${<@J>5c8g!g_8DPz?eD5?DY@b~+u z%E5{jH>iodgt2_m03~7 zs!vezW?*s2D`~Z@?yM+d)n_Q#|J)c*e~hZ7tSDpE7bvOWkoi;pR&|~gWvu!NCF8YX z$L|eQMfm7fgECfqgOYv1?rGZ^sLIWXGFH(K97BbWIiKqC5pNJ=l-seQj8!3^=h>TR-el(+t*2N~#;QIiUK8TZ-go{oV(tBR+O}acPJ!3@~ ztD-^CE|)$@doH`LD*hM0E|jqgvnQC@aw@p@IKSy9HS*if?Clsi+RK`K?mMszgxIugHJ==bfyaVPRI3 zvFZmX=~wBht(-kTTUL~@DlwE)eo5nH{j{y$Sy9HSBv3LpUf)_;T-9+_l(8x)lw8Xl zik|UqO46^8*mrwZT`(00CH*S7Wn@Je+g36txu=X98q+&jQ4Ls8#;W8{a;3z{ zRjQq;39Kk%RSGB>uQU~V98k5L6=keS2_^j+eD%VwsvfeUj8&osOk+X%2<^FN_Irom&ALbDt<`6hLo`?Bb3aI zu&w7dR8^K0Wvt2sB{fXF`^jfjJy}u4s?1PwrJQ-c#5*aOz4KU6#;Pn(vfs#Xyn^$b za+DQitjY={D|W0$2S;dIZ&*>rs%)mM?YnCHq3VZFehn#ORdy(u^GR~7TBfQbE6P}v z14{0dc@JgsN+H$g!HP0g<%CMXb0b#PRJ&EpWkngQazV)%W(`qptg3UYC}UM_C>iCf zsY(}86(+P_4a!)R2TEqtv#+(@tIEcTGFIhc4sfTjTL3A`VmUz#=VKD z9%)-oSW(8RqEK>%$E!zvp(=h@zZ#UWsu+}6qKs7~p=55fC~{%7stc?rV^t|AnTJ26%lSrCsBnHYC}UM=D5>G2 zIi;Mrk%JXwtSSQ~Zx0sM9QU)f)q)jetSSp7_pi&52Derz0SI98Ogsxp*}SML}PuBqC=iZWJJF)I4N5bIPuXGIySszS*b_U?3Mm8xVB z{2Efms%lVD!;}dhu25Bt6=kfd4ka}_U+(EjRYO@(#;O`na@U)i_}ws7D_K#-s+v%; z(_7Qyr%tLav7(GswV>pxJbB=}Gs@v3`qiL}Rkfj#^4k0G;cw1Ub}m+wv8oP~%=t;> zlRnckY|n}^R@H@)>#J3wTANkPXGIyS>Osksvf$*}ZK}?(qKsAbq2vsQ93FOARj5dQ zH7H|M11LGezBT@Jp6K(jqKs7yp=2IrxOZ*7w$+{$WvprhB|E)~#WF-uHJcS>tZED; zyUG=rH##f!K~|KpstJ_Ls0Ur{)YrCNu%e7rO`&A=z8)0+qpGBl{Tfons%ECG>FXAL zQ&o-?Wvu!MN`6W{v0#DQs`{{^j8)B{WR$O_t&>63N>-Gyss)tvYi*@acU0YFMH#DF zLdm+ZKSa%Ys-i{lt3es7T0u$WD^71+MpY43l(DKcl$>G8S&gTv>d1;RR<$u|YQ`{8z+7-pR@t&Sgaz zt2#qTzw(`pu~5}1R+O=-3zXa|+mA1PUeyOyl(DKSl$_z|*T;sa$`H-3A!V%U1|>6U zPVE(iRW)Em8LPTO$?P3|W%4{#BUw?#svbsNtlgrgs*S8DV^vQmS?9AJS>U~>lgi&? zMH#DlK}o;5bv|EIRjlZKH7H|MZz$3G zm9$E9XYHNNiZWL9gOa=XtEbRLiG3y`Y?70alc; zYB-e4-pg-G&sWuz6=kgY8A`5{YH63PRW+LxWvm(jCGQ+2JS_J`)lpWIv1%lgoZ+VZ zF{-Hg#)>jlje?T#sy$awDYRb!x}8VMh5`AN@k z1S`r|H5N+7D|P!{%c@$>iZWJ>gOWM_ZfUQxsvfhVj8)^IgIGXC!H<>If^!STzkwD!=>NUT?!9HGI#CGFDB8 zlG&SRQ|eo)QpNRaNExeUK*@MjZW*zdss^kmW7Y3aQu(NlUw9`gXE>1+WvrSBC8NA{ zZsA<2wy~m&RkNUEKYwmbmwc+8u%e7rv!P@K2rQj0ysG5!{Ay6fsz0FQs$8`!hI58h zSW(8RIZ$$aJz6mEy|y)+6=kfN3ng>ob%l@PRIO)48LQ?&CFlF{w-29|tGdmKGFHup zk~2*I!)WJcH}T^8)u4=33!r3fY`R#!v$j>56=kei2qpbmez8zVRef1e#;Qe7a(&(H zUM{1mKUq=6s>M)pEzipT`A1b}SW(8RB~Vh0F%P@FR23$HUk%DwwG=9lE8ly6?i;Fd zv7(Gse;QS&N4~|XI3GStupsur=Lj8)5w3h3niX-L;tQO2s}P_hR|Q);F+ zx#U`olhCgQWvp5OC2Q2vpSrYDRgM*9tXc^r&qSfh93HN!7c0tGwF)X4S3c(L3eNke zxvVH-)oLht);oS6aGkbwkQHUDS_363+uWN)o!R?>6=kei3neqEP4X|@w5=Z!`8A}B zRqLQ+Jse)}U1n7kSW(8R^-!`NUR!mym#P7*C}Y(IDCyUg#czL8wT=~Ktl9`A_mo8~ zo{d*^gB4}0+GNzOwNJOIiu;3K4a!)x*{Ee(KIK(akridE+5#o3P0Tq%HmVxViZWJh zg_3H#e7D*e<#ntmW7Re&xu@KkFnE@>b%PaUtlADGbE8nNY|h)BD2e@QP{yhqrma}v zy5`Wf3bCS$RXa^vYdg75^zB$t#;RRVDfs$&kf59MhI1w>%2>4MU{Z%~yjiC;s?ShWvI)~G?pd+t=#loe&H+7Bgj zW8T1K&OT}!E6P}P07`ZaJ0^@StZi*(MH#COLdjik-m7* z1>Syee#TLs6=keC2_>Vvb??2~+SYJZl(Fg*l&td=GdF3fY85NWSaljou9U?`vQANT zj}>LC`p2l=dv9G-6(^Zr4a!(`21<5cnT~yR)~J%KC}Y)GDDR~_KJSW6ET(PsVnrFN z&OynYsNm8awN))=MH#EkLrFDCN2urAVehb_j8zw)inNs*Qq>NS9p=9kHy`k?mRgG9t z#;O}oa(zY2z13TWrL8fnC}Y)4)7GLCc@C)Bz=|?f-GY)CwQt<&+p2D{qKs9yq2vr> zw(a6|QO+<%O1~PEvFZ+#?92nJb#Znn1zAzXs=H7!H{$GQ<;?jmtSDpEJt%qKyQa!g zXOBIH6=kft4<*%zb0Eb#O8B3BtSDpE11LGe&6&PlRrQ(`WvqG#C3EBb-2i8eN|ws6 zA!V%k*R*wM=Y)ycRz+5nvFZ_&%=z|3BY2&Xe)VHT8LJ*c$r`mUapX3tRSy9HS|Da^W zPFH53vyYm?iZWKcgOa`Ii;flgX&f&N0)gP&9%Zf5qeS(rXf9Z7MNvdYCqKs9ap=8}SQ0R`ck2=PRGFE+o zl6MYOrHTU@#;VXzGB>)$U$9(NepZyRDh!m|D=V%2JG83ytSDnuSSYDs!#qbLsG7%$ zGFF9yk~L~x&AmBQon%EBtHPVM4li%y%#9DMC}ULwC|RRU4mxsH+e(wcuOVfuiU=j6 zd~0vHGpZV}qKs9MprjfR1DD=aHJTM=tcnaJt4+*n<(;c?6D!JC6$MIWRM|$ChHG1o zSy9HSs8BM>qk2Ac)~I+H{c2Fgs%TKMVyE1kz**-ju%e7r(TzIvcT#WR3CVML5G%@9 z6$46EfbMJdja0Rk6=kf72_^k%7x~vYs_w9&j8(CqWIfC^V?s4m@iY0=po~?qp}fTc zpD^)%cSgB1E6P|E2TE!frRyN)*`Yrx%2*ZGs0ziKFVHhw#fmak#eUZ?%kXfWvogFm4a)SJbst$+E!~;l(8z2 zY3oGj4e3HvZ9Ptfl#t;{JZu38*OV0E6P}v3@VT-KPbVKj;eODqKs9^ zp=9>9o0!>o_w^qu%2<^GN_Ip=-%q@zZKccVSA#NErG%1I^wXwIqg6FwMH#D7LCK0e z>umY#swS|aj8&eC%n+gMS?sx(ki`I;r#Id5(sv!aYuX`!Ts_YXGDqHQJ3 z=2wF+6TZ32UjU#)>jlrH7JtUzg*?o~ddGE6P|!-MlFB6(_4mRoqxcJGPbQuMum^`%W73gv-{Pcj8&PTq=r4lUiKc3q^;Vl zC}UL?C>gH5f;R+OqaqFl(DKXl+ ziZWJ}gOVrT6%(#G-<&zkiZWJ}H>zENd`GmcuzCGzP{yhXP_oneW5L(+stT~8j8zq( zQt|qdXWAWS6>Y(aGFDZBk~u%`PVr&d*6*w+V^w7+8Rc)wqbyPNH!I3mRRv1+^S67w zyQwNfKEE22v8pPRoMGlqH{Pns#ELRjRfCc_U!_c{y{a0rqKsA5Od(jWIIEA}s} zC}UL(D4B=Fol>e2cw&fOtVe!qs4v8pzd zR3pI{VK(ZGFH`rk}G9YhYo{O^jg zc}H}C6=kfd4<&b^v;F@`uWdyt;8%k(RyBZ|!cHQfgS9P8hWvprfC97!jo8xn+`pk+lRyBo^ zGmLXLMiW(;3i>sqj8)B`WX{h$+20!ksbND_l(Fh3D4D&hH>`G6wsEW|V^wn~8RcH( zo@dgwHnF0NRV|>TU-=srbH?jmR+O=-rBQclO?Ku+{6c;;C}UMCC^^H}Q(Jq3Ak`?t ziZWKUhDy#Wc7a_brmO19iZWKUfs)FnPa3Ycs#UBgV^v!yS+QF$tgueibyk$IsvVTn z@OjS(&QD?D6!xn@8LQfxw(2Ab2(N9GWJMXPIzUM^;*|OKwyOTDC}UMesAOEjF`K*m zqiPK+%2?G2Dv;H}S4W)d>pm;WSk)Oy*26cumOA^5Bt`scP{yh*Q1Tw2&6}TV=^0jF zMH#EQLP@`Br#b$Isy?hJV^udOnTLHk1b723^Kd0A%2?GMO72AI&&74d>n1D8Sk(hc z`qeaYnHt(werAmR`rLHc{uaw%pR)BvZ9Pt1E6FFJ0M`P)308vC}Y(?C>iBu8*@z4wwAG?j8%i6 zq+fr(PUHM!Ab4YCH-np#;QqBaxLe*d-1EP?5rqb)vr)8%6m!=sI96w zE6P|k8A{HuPm86_RXLp%WvrS4CA;MWV?VvowhpqQj8#*iWRz#bs^vU!JYhu{tA2x$ z8MQX;An&E1R6bEDzlM~tY8sTRY`5cmDxs=8E6P|k9m*S8d^RttxmwjgR+O=729)d^ zKD2n`ovfVUI#!gi>UStP!+mRC_fz$d6=kfN36+7*u>R$inN=k!?N@^`R?UKv8qR*T z!nx~JVMQ6MW{eaS7la|v1&e)+==#&yXrjM3}rJB{9P}^F?iZWI$gpw;|MWGwDRNZDp8LJkVw%SZ94&%G(Cv^Yo8joof8WiZWLH2_QSW(8R8LL)8h2R?c|3|8^j}>J+<@_xbtDsVNaq9V^Q=PqUEz&VE zH*e9bN2`?8={T#A@s_-xzrSEr6z?mM_*~{AuZj}r9l`yZ8rDEX_EL0Y`dcbgePV@- z`E&l)LV1rp_|Tv8uPQ}(e{_&Bf6o6pD4BK3{*5zKD^`IOWo+NqL#6h*OS2*Q#~5RS z_kDwZK3*m?pVRuFz7OUjuMgJujZo6}7ELHB6V z8bSJOU(&d%_Wdm@%GlYm1xofUWt#PN?w;u@_;sd?Ra>ECK8LDbw}iG;ofT!Q+6I-} zKf!=*9V_2d)sGcrtlADGJCG?cZckUWniXZN+5sg$E6E)B)-YAqSy9HSolx?|KI7r1 zuT{ma=vRX>R_!uvMSquKpQ^H~C}Y)bD7g<#niJSU)gV@s@sx9&?t$_qXaLQs|NVDi z??uKdZqQua6Es)X^O5%io2&bvWUkWRg{|r=D`d=E-47+#Da}Jw+wI&XlngI|wD~{Ox-E=Bld3iZWImf|93z7;}<3-xV3oiZWImHtO}c7&o-7 z4Xh|*N9PDs3a|3ihyT5b{*8>giXI6Xo%?*`Bf&=JD3pv2t)i;JRrV`}j2WF{P%=8S zimJ-O3K=sx$D!oTn6BAc@8Xj?NF7#`v3)-Q_5Hq|L}tA+GfxEdeJmgOM6kY}f^z$= zY85MFOy5sKxqVl4nH4go@Bcu_97}v5{0Z%Q*eZUVDP#M72CAahudv?#8f8t{D)=4b zEHY=EzMl!|dtN^BnP7cC2PJ(kcwzclRSj4nWBPs`O8QP$rK*vvkTHF~03}z-oh=7T zY2VkeqKv&#E<(w*JnB@S^M>;-E6Ui4U4rsn*9Op2V(j>9!UeC`Wn^wT6}uEvu~=38 zvA7hhVppJ~VkJI}FQ6(DD`ZT?u0pvLQ&ou-GNxkJprr3#ew+SCE7qA6Wo*T+L&+P4 z0e7}IyZ1S)C}Y(Pqpp|O>P;oND*t9h8LMtW$x}(bYk{3qy=6rit8PKb&h!4elHMgN zZ6&YfSDrGSa_&vHq1t=n<$Z-GV0*@8UOE5o9`X({?p1I*XiO{dk#7eZ)4NbIrf)Ws z7^$iQD`d==-h*<-RMliw$e1y`4<+~Iv%f~3rhVVaiZZrh4~z;CSg)n3=d37W)k7$G zK5gCb{XSJGtNV4PjIHy(P~WffBV;Z**UrB|b*{lj{x?{iA49oyR@H+QGN#T?pxipE zn#~FsQ|G5pa_!{a9o~6UagY^dY{i~I$!;)X%k8VQVsBYd#;WH~a>ecZ`^_CyDQft2 zri`ug3#jk!wO%4~*QxW1pgLFLBfkh%=T}ftXWDD2>dp!oQ|H%EZk<)lV}*>V^BX96 zCOUimuWH)&ldLFXEA|%3Tgvgderr@aRiSG76{Cz*|3S&FyY&8{PM!0!qKsAVpyUh_ z&n!>o`o zqw@($Mu+xVs$R1~#*EHqDA{k6@7$t__C0AWzs{7geg6Vg(d*a$f4}h+8F!`q64dv~ zeB>{|`u+_{`cC@|Roz%2WBMN8JvD|3A$_O)hN?eUA!GU;0!sE98JH|A!O4{_Q^0K0gr=0ypWT^I@ z`2X)Wq9Eg51(Acsv^gI+aKXont|Lf3=B?%rS2) z=QvPOXIgDkjbw$4sdHQ?x6Z0outLVvIUbZ;1q%+PTcH&@%Zf6# zV)3D5ztQ+~A8(S%=zL>E8C$UgP~WduLS)<>T7sa8Wvb_oV1i&3O9bUsOjS)*$e4=# z0OeLp)o@nGn2IHa3iQU5J~>j&$fJE<&x$g(Vo8j8@OP2>s-Cc-jICHwsPFH!0+Dem zmNckh$?N+SOB$?V$)KcSwAWIVpA|BuV#%T0im9s03K>(e6i~AN>3cc$DeZe7R+O<7 zO9>^bU!4gVC#zb;iZWKEGHta@nC!W#E37DERch1LqpUsNsfy9SuOVgZ=%j%f<~_`% z^kzbg&F{6_n${ih5y;vb* zMkfPQGR)?HfE%GBdM~i$TAsm*GPYtFq2!)BIr>zuSy3lgQO2rFMvdt;ag(YqtSDnu zW+-{{HaR%L;b{d2g*Wu5QOH)cf{tFoH5&cr(C%!J9TC}UMND4DCv zX3!TEr5XoWQO2t5P;%cnGqK)ERj*i4#;P1pvOny5p+F&3$s76Apo~>Hp`@+xvyVD& zSE{q3j8(ayq+j!%-)XLG4P`|ct8zohZl^`8d|gznWJMWIIs2A8P~Ttc@*;E9o2zm^ z%@cGrUEw3=33fH*gOaO>);d)mSs`Ptru^-E6Ui>DFXHV z(fJXXo6hJI2^yW)P5g=#2{t-Kq1@3?m75hZW^{@{xuc`1F)L)u=oE*Nm1On38F{s0 zqgheLR;&b+j82mO4rWueofT!QDhVZfq$$bPJA3}8tSDnuDJWT2b4*X?ygNENt^j~ri@jUpyUkK-+wbn zRV7xGv7=KNDx9|mplh|_xL3ag-zQW-=CgC{R1O-QL44%O!A7Sll#I@bkZYH#n#l?o zGdk6v+|g0BlNB;%bgDziYO{55qkY=<+pH*KD^>$a?gcYOM6IkU=1+c|DPvVlDA_Tl z-!b^Hsv@i?V^u9Ex#GI)zQ0#h4_1`1sy38-k9xu9lwPwke-^N!j8%1@WY(=2_}RN5 zi8{`TGFH`vlBca=hh{%l^??;-tg2^Jl*hGmsY==0uOVeT<=ju}L#6O$6ea%mo4^Lh zEO%yI{h(P_nU7pQ*sN;^C9{s+1gdJs3K=u&8bQgdqc?%7Ca^-r%(})o6{U<2tJG}{1m7;|| zg2I@op7##m8>XZRZl3nGnQU7=cBfDnH6QM>IEfdcyPd?d#WO~_G?HP zt9nDp9i;uoU!CXEJgg{VRUgyV^Rw&rYg^4&QN~lw71tN)`|s=eA>&?geS>DgL_Tug zU^AgVl*|Nr!>MW=D`d<}7y#wY1Xb5rA!BC3Kq&8}20o=)MaZXpkJ!eqGi7YW20_V8 z_~m-Kb*i$nqKvKBV5slkcZMM2O{}0bYH(1+8u5__2dmgnD5)6TcT^2vg^a1#FetZT zsur+9##C%Llsv;mE3(#k2Kk#6Wo*TMhLSh-gYL%8s}&2;)~_>VtQr9&cdNvYmse1g zn-yiO8VQx0$8_`SL(VGNmK9~J8fDrVP^+T1-In{#99ER^lyen~hWh?`I0l&~&X|r4 z8q+g;IlEzJ(QKY{jM<)pFkFp{j1PqKs8D zpycQHE7uJ!qAF4czs{7g>USu)Gp4RIdAzDZtSDpEOemQNZ^H#VSJjpkWvrS7CDphT zxa66t-&j$`Q_f774b{-AA$`+eZu#2YuioRm`F#O@AQRgA*RmI#9W)bm@sVeHGr>D@ z=jKhjH}$ypnFA#=A>REICsdtgg^ZaAbD`Xspz0ATWY9+Fj(+9o{|On8vO=Y7-gXin z>Q`9P(|I^@b8pN2#Y@aA-eyVgp3X<6w|7wK>AawxCgir}1?%YoDCy~_%xhz)%D@U4 z)6<1eG|JS6MX55)QB{%^GN!7FOj|d$|JhAdV^+wRwiZJLa$6r~ms+K&4=ZF$TT4t^ zAETBVu4*zXWK3I2p=1Q<=~&e=R>+uZ`A;ahQa-Lu`$}i;epZyRbN(+Vxl%smxbbgQ`Mgp zWvp5WMdL-E;X6-GRJE8DWvp5SB|DHD;X{2@b)6MutXd5vm7hF0T5nY`JNwn3j8$t) zTU)a2ey^$sE6P~47D~ozbj?&zRCQxT8LQSAmFs5Z(W>UKqKsARp``MuUd1@A>L@G9 zShWF4o=O&XdhXmE-m;>MRU1uP=W|!cqHP6s@oPvKt2RN&6ZHIp!*j}>LC+5#n`yyt05@1$h*E@MR*tF}VP6Gyt*HJv@lMOKutY8#aI3qB2> zl<}ICwgS5P)u4=3+o9x5>DvaUoSkqgR+O=72b5fu`FGavPFC8g&x$fu?SztQoZ7p` zyJv|S&x$fu?Se|q{hD*OW(`$aSy9HS-KMQxk+yA7^_&%Dtl9%5m9P8xgYzwmMBV%v zQpT#iP;z~RXguDjVR2TJv1%Wb)G+>)^V9VVJF%jSRr{f2_Ld$x_N}UUtSDpE0n^sU zuBE+~XHxlpSW(8RgHW=v^&XTvo2t;={c2FgszXpxjUxm8byl{#tSDpEVJI2p-~ZUM zOWSJBiZWImfl9%1qj;OWOI1y0MH#F9hDyfjaH>m=I?jqRRvm?scW8@dcd4pvh3w&1 zgECefgOVqp&!1;GyX9Q0C}Y)e)7I(=?H$#e6=keC0VUU0x@*(x=owC9MH#D3Ldl$u z((z^{Rr^^{#;Q|LGRox=?DHO3WJWztm>*N`$+{R1U){z}{r zg|)46tSDpE8PisX8@ZmV>c@&QR-J{Cc^GxjzsppuU_}|L&Oyl=kK}FRdE0ua#%)%V zvFbdO%#8ujk2O}6pqF0_%2;&)O5T2lsIb-9Z3?A{Rk z+2JZOXTASUPg3-`67=j4k{&7WZvyEIo#(G>P}DCv@`bM(Rs}!ubz}~E|6PuJE$GN` z_{i6y{@)|t2s$#2|F`Yw4h28*O=P@9C+KxjpehF|Wav3Ar=OzM|L<7b!Ew4&2?*F7#`_6M z*qHyLVt0{wC7C)iZXUSKZNo&&G>w*SaN}?1*|Az)xS{QFZkSO-2Nw3hgea@ zsz*>>iSa3PFMI}7PgqgLs>e{?Z}!9I&oDW?i$>O;aDDu%fHGD+f%1OA=S|$tjZ~#% zMH#D}LeY59XVCsCTUC{1MH#D}LCJGL%!)UiyJve=l(FhLR3yKtfQ2h+|Ez8O#)>jl zy?~PO3Ork7j;hV9C}Y)2D5?DAWu^D4y2^?&R=tAqe!-{hmI=;yy<o1C&(bMvGeKRNZ7n8LK`* zMdR^${5;wVRgwGom8XnVpP=OVbmqJYsZ?cWMH#C;L&<%x_nA38RMlri8LPfP$!=#) zlYdsI8pVn-R(*w%U0lHs4O6Px!iq9heS?y#vRKmktySG(MH#E;Hy4KrA*)T1$xobp zW~Bap4Jl()2q-zj)2Zg2(6-XDqKs7`p``LB<7IW`d=*xdu__dlcjEZ`HahWRZL2RU z%2*W|%KHVMSmlyDRW*kdWvmJVCHIt~5z9SSb$}IRtO^SyPZOgWj9;Yc9xKXN6%IhR?+tNJKR%MfE8t|iU1`mK$GFKkE&|OiZWJ3gpxV`YFN|K zs)n$lj8&1KWS6q+aG`dpRfTCKF;gvnYD676aIdO;tSDnuY$&->Hgw+TTwjk_ zQO2q`rme^w4_?={A`S8@PZ_J?LdnXuDP1>b-N?a;GFHWdl651+(3(j26>Z3hGFHWh zl4=}@cA}D=;ZRnTu_^(STwin7jQ&&AU#uu&RYEB57krj?8&Of!309P`DiM^7^1!n7 zhN*hPiZWLH041~cK;FpC9X9S@zw(r^DlwGo0XFB_UsT)5&WbWtC4rLXh9p}zIy0&w zE6P}v6iQZrtg+i<(zaT$qKs96P|~joxia5WHHj5vtV#wYXLvB*A@AWsu9Ow5C}UM} zD483D6V6Dj>JTf+Sd{`w=Ek*#i=V4{&WbWtrG%3E@}Q^TTB?dQ#2+upSd|J&+8S29 z)H+pJSW(8R)KGFyiE-$)w|Gl6sE9E3B%2<^FO8Qm0@4$E3)^k>ru__}} z3_inuk}fZzD&kOoyeMN;CMda<>lUV<^ea0n%2<^dO5Ww>e7t(Os+z1QV^tO?Im6GH z%6hN3q^;4cC}UMtD5=K1jjL0sTFZ(uR%L^dwRcH{Q~gvOXGIySvO~%BHRo}k9jacj zqKs8JjH)vr?<-XahxwJKj8!?IIg3sfXAD#WiF;6=kd{2_<`gG&K)zQWZGDuOVfuDg`C8_f*8x-bEvGzC0_+ zSXJ7n%`J9!Q`L(VWvnU#C1)6}?ZUIF7ORb`>1^3RSQY^Ul3E6P|^4oWItG)3Qs zs@}7rj8)~KWSt)yrJb{@Ogz%BA!V$p0OkFHPth8myr9&u6f4SDRS`s%@OS^3XN?%z#W3rc41%M{(ZYFiIkQO34a8!8!B z<4&%^Csf58?bnbpR@H%$xe>ohmyfDSv!aYub)n=8NA*h9Lsc(Ul(DLwQBhCzOQC8W zE6P|^A4+OCwyXQ+J{@I68LJu?m4CtQ;@Z}8R+O=-A(YJC4YwnDTVNUGSY!MeQpT!A zP%;mvducwNnZr~?8td1PGFCN*k|)Gz1utb* zm6H`^tZD%z_vOov&gWBAi4|q6Y6&HK>;t3H)l$`y6=key1?3GAKD%4Yb9P^oSW(8R z)==Ir_)H0mmrmQ-$ci#nwSki7l-r-%Pg8Y;6=key3nkCy%MQogsOl>#%2?G7O8V7f z(1Sgy5{~o7i!xTVhmz;zjRmedt7s8cl(DLVX=_Ba&(0Hl16Gu=sw0$)SK*VpbLtrm zWPzD=)2&iljPSy9HS&QMar<=%nqKs92 zpyUky3{~}@wiR-MUwO({)fdY91)rKxGCO;lRIDgtRX-?M=NlJ%yIb2T&x$fu^@oxf zHRA0Y@5V0cd>>Yn`G1ss37Bk2Q7$}CKt*`yh`0dafT)ObyL$!()Tw>z+PHmZ0mPc> z?&^Ds>F#Q(y6=L5hzKY$h%(5?4g<)hECaHmfCGYTqVNzW+p7-m9awL*EW&8k zFEh)v-Us~688N5)on;Y5vmV2&yV$fwcl^WMkk;*fLK zi!hq?SZ2AA?TY)J8i%w_SQcS4>sOiOeE1!|eZdC<>zri~MzbErEVpC!rR(nd7lHKx z%OZ?s{Tj2J53f49{l^09Pb`Ztn)P^Qxg6eWDXO{E)4WIvLDX_+tMHtQc4Q9Dm^hIA@e_3EX z-m(azSx;h?i-_*G_|0nr>-CmJ7|r@kW;t)X^^La{dk&wmEW&8klbLmA+j_s!`tM;# z>)W4dd`KA0x|Uh^hks}O{RUBA7h4u#H0vqMa`mWzLJ|v80J&jqe9p3w6&v`E)%eG~^?S_1VFUlZ(Ris?-KVdX_N;rZXOEW&8k4a~wn{CoXnxBqBJ>yIppFq-uu z#j3sjTjv7nQ*DL?WvIwJDuVfbf;olYCcPFuuy7$wK z=Lw@(f50r~jjw-r@s5yI-?9j!S%0WlZ@B3?;f;l55k|9K#Vq{8zaN}E>~$fnXIK_t zH0#yOa%0rP-@9{{zp$l<)TZX9U)#EsHRk^;%}RvG=y0c+X=4>$`r} z_>eG~btALftao_RRbu|Sk7W@?vtGw6H%6WM*cUN)yILMt7GX5&^~^%2;@|1deQgq0 zkG3qrXx1Mw%Z*Ww{mO^XL0wv}wJgGD)*G1R`d9TkZxXBQzqc&HXx1B<y76Lqgj8V()zwfyz`AAt(s*KMzh|*EY~*PeeHc- z9$2R=i!hq?PG-3rescfMezxk<){T}$7|r@qX5khQL}_7GX5&z0ATt{JZuJxBAn-`d!N+jAp%$S+0M5 z?}?{;Ah6zQS%lH7KWCO3Z5~x0-y^U-Z&`%VtoJj^wT%yc-{VjTZj8FiGmYm7qgfwd zmh=3JfA^oef%P+%MHtQcAhR$q@o#YZ-`WqXiDeN+vp%F)H@xJFlfZh6Wf4ZRKFlmP zvaSC0E8iSg&$KMUXx3ja%guVnAH4a%zjWR~;B^PaSehU~`PZ&(&#H0z(3g@5>0 zKl94Z2G(7lYdlXF&H6mETzwsV@!=l{teRyJMzg-aEZ4to`0MW$tAIyX7GX5&pPA(% zhsq0o=~zhXI?E!AW_^)aZj8G9YhU%(f%Q(yB8+DJ3$tA7eOm20v0nbNWf4ZRzQin- z!{>ke+r|8Km**KD5=OJW%q%xXz48uMe<2tpLpuqZX%OZ?seVtjZ zZCrkrOT=x=yFcIfkT9C{Z_K)*ZM`r4&_jPGq*b#l!f4jNGYiWn{#Eb&&94O3u4NHM zv;MD2>lqLG*arjad6q>O&H4{!xqZ=p{F8S*GqB!cS%lH7Z!pV^Hmjd~=EDN(YnDYA z&H5&@Ti@GpUNlVuS`v%bYF7jJY{e)It8L4 zFq(A>G^ShK5@P<{`03X?F|h9OLgPciXx1&6<;LDmJ$vtqfz`4s!f4k2VwM{L?t9k@ z#QE2rWf4ZRZpAF;`IV#2pM|uZZdruUtXnh7`S649fB#zo>z$TG7|r@NX5k|z54+*1Lw_%p^#g9eajRQ8AO8Gf7LN_A4_lV`LWsOA_MOaf z_4R^JJo+_(_1~677@gL4G0TlnpS#^(e<-ki{6)rxgwd?qGt13HH$MA$zaLl+vn;}B z)^{_@<#717a%bsDmPHuNx&yPEHx|wJzdfY&2FoIhX5EolE*5RR{F5S{{|Cz=jAs3B zX1S5=#y|fNF*|(AvIwJDcVd?7%MaQ80R-tTBKq+c8y^xzv%ZH}x3O*h)<5trEc+a5 zU|EFGtnX!(Ylpx7V0p`Q*RlwsSr;hQtv+=9Af)wd%OZ?seV<}|pg+gJ<8t@`%OZ?s z-I-agmS1@8HE#{9Z&?;$H0%4B<>s&NzVb~wf%TIwF+L=WX5EEZuD-tWGcOVC@CwT! zjAs1+vs`TRkOyBcVw=ZU7GX5&2btx@jpyv#zY%iyI?E!AX8jPeT-*4qAKnq(_#4Y2 zjAs2Xvs}3j?sS*aA+1~gzVQZOH0!R+ax>8n{_L;b6j=AQEW&8k-I(S2*WJGQx7P>O zFIW~~H0$ona%1oH-~3(#Vy7~Ypgwd=EndRzh{(J9zRY>armPHuNx+k-6HHUxK zfAY511=iJ;MHtPxmtu|9zj&X(y3Vo)qgg-3EElsq_~L)QXJEb8vIwJD_h!~zZ4Uqa z)t?k?{)?7H7|r@|X1O+h>Cr218PdAP%Zv{Rqgg+}ELY24-+BJkfwgW~gwd>@WR{D} z@9?#|KPs?((Xt4mS@&U<%i-(yj-3gt=UNtFH0!6B<=XtY>TfVKnO^W;t*C?GLTKG_dNHMHtOG#w^!* z-~E77j}EMIjwaP3v&cFI=FaJ_V>kXDg7|mK^mK*0E z{GNM>IO?;OMHtPxm{~5~`16g~ABVK=_zL4g!f4hd%yK#W)A>WNrKWABl(X9J1 z%X#AiKlZdY1=cl|MHtPxKeI6L^Y1S!H~f8IJw(O|Km7amr{DFz0_)peX?#c+&H5Q;VQ}Z)#s9bZk-+*X z%OZ?s{VcOwEr0WWe(=eGHMA_kXx7g$%a!W|?|a3k0_ztoi!hpXnPUCYA3y4;fpvpr z5k|90%yK!r{zsnm#=v^NWf4ZR%FJ>*Wp( z#`A>HtSYnID7v-(>BGR z(X2MJ+<5rre|qK118Z(sgwd=Hv)n5C-fw;369elRmPHuNT4$Ck*K_XlL~Q*!Z@ksA z2%}kDX1Q_x-4FT`5jlL>vIwJDJ!ZKa-o3srM$zwimGL2AG^@`n*O!~$-4Sj6{+2}; z%^EPv^_0K5!>dG#dZ=X)Mze;@a#6~gOF!|CgfPFyTNYt7>p{$NIc%?0UmRG!Z&`%V ztmDjbwfvWFdXDHR@3SnzXx0X^T+G%!-uP-r>#LSU7|lAtEa&+j{niETz`EC~jpqrY zS(h`*`LNmi$WI5>x@8eYv#wy4i&E}+;?G-wb!1tD(X1<(bvx_p8=8;C;@)}w`Ibc( z&ALjZ^^(!8;ZDbTyJZnZvmVSW=ZzP==Pe%&tbevF!f4h*nB~T(zxnzvp%PqLcYKZU zAz?J@q0Dk~<(;2TEW&8k)y#4&>hhnfi)i_q zmPHuN8Z*nas4xA=>z@>Ic+b}w&l5(oHksx6*WQcd&eDS{i!hqC#Vpr0?)4+bw?bNH zEQ>IjwaqO2!@v8#@80vkdX{AoMzbc&a-RRxJ>DrIy?0p_VKi%pSuSR~@%!KZg^m;+>h<*BJo_$4N-SS4`L&9j*DQ3Ag|7XAU>0b$~ds-G@G;7K%SIh5vRT3JH0$Baayk5;tG{220Ou@=Fq(A@voLA#@57INwwS-3ZCQlTtX*cgTE5%szTh&Dv*{8v$HtQoW1KHIy7 z59$WieJzVHnsvY|G$Z~!v3{Xw8|#)u7|nVFvs_=^zT0>d(t3<#5k|A-%yPZ*58n3i ze+jHtTNYt7Yr(7wZ4Or|)vpBBr!0#wnsvx5*ADM=<4xGYah|`^>x~ZyqghAHa*^K2 zH-GMnf%QPkB8+C8W|mvEz4imw{##(}Sr%b5>kPA;=YRR=?|v?@o@rTx(X6w~a^?Er zbL$&{^&!h5jAorsOiOVu0sd_pnA_J=?Mfqgjt* zmRqMxZ}-@n0_zQyMHtQcHDj}(qI5Swk*PE)>9Pg*lq9skihz;Wf4ZReoL_~_=V^GXJCEr zn@rmvjAlJmu};h$_nE-DuVoQNvwmB#zO~kPa$vPAi!hq?JBszTZ+qC&0&CN<2%}j~ zQ>=5p^FyBqtY5M$!f4iY%yMo1Hh=L=5jk9ES%lH7r>nH?|AO1RBc%0e%OZ?s{VucI z`s-Dn{peEy>wT6*7|nWyO6$#+UtI~TFIW~~_s6LT7|nVm@xUl-E46z$TQSr%b5>&47+-uRyT{R09_$GXn42%}jqVV0XKZ@O#w z9f9>m%OZ?s{XVnY2ymkN?X|%Am}L=0vtG(97r{R1LmzuwVEwCQ5k|9K#w^#PzH+B{jH|H2%}jqXO>&t{QUDD`24_npk)z8vtGe0=fiuoKPIBeiDeN+vtG$8w@&%P z+gGqWa-RQn%OZ?s{Q$S{s zYuNECo`JF0`S5v`MHtPxky$Q+{m-}k-q!-_Cd(p>X1$JCu9ko0F|QQ;>#LSU7|nV; zvs_Pk;iziqgj8%EY}Vn{jN9ucwnts7GX5&4T|-wy?ehTupVYvgwd=w zGRxKS!ynuG<-mG^Wf4ZR-oz|-_uwtxyy3>cdZT3#Mzh|`ELUHjF1_bIf%Q+8MHtO` z3$ySK{~rFDpAdWIxBp|~L&9j*Tbbq3df4V||1_j^v1JiPv);xmH*VbO{wH1^SP!)< z!f4jp73=E8#(M(mv}F;-d}Z>OjT|UWK;*DJ**rRVA?7Z8lZ5S{b4I_X!p3EnjjE;5 zMaP|S-*#W1yU*~R1i z?aMAcI>7&#PcFN7e|C7;#fzhZgW3FWvhDL*EtmT1mEoY@>43}BW6P;3=}N8CZ}cmT z3i8mKE*8`Mlb2mgc1};`i|K4%f$!h$*N4sZR;$#Xsd9`)^sSoe?BLvq$=Qvg&Gz2- zu-obpb zSWLE^@nbF*)kL*YtnztRELXC;O{dM9by{z^IXP6u*%h{c-Pw5i#C*KJIG8Oaz476E zdUm^5wPRJiqus*-Rz@XRQ+TU7o6Wb6xnzhSq^Cs^L7X?SlLt?;CZ>6?Ya%)ui!690 zo9C77JUE-@m3*F8vUy&~=XoWY=aqb(SF?Fu&F6VFo9ESho>#MZUd`uuHJj(ve4f{` zd0xxsc`cjgwS1n}vUy(1=Xoug=QW?_jq%>W?xZ@y0ER)xHoD60WPiIl+nvp&p#F%X z@gW8|DQg_)BVGVv*4u8EBc1w`XUD zvxOhygv4brh@5YQBn7z=1dz{r5V>3nNn**5VICC5uOLeD6vnLpO7axOs{l&!6vnB_ z+K_uzYqjmrj4O43UtN=q&E)$S)pGte7YrMTswcVZWU!wt;qHi2d_P3_H znHk<{dgH}4QA4$w!9gUqjydLrH~+UQxD&Xc&Ho(%Rw4@_6txT=g!;cD3qCxwfH1&1 zL6nCuxLSY@*8Ja55Y4lut;8DJp@z=pUX#HvlhK|37a}8R_LM8UV(QOUT zclPNeYp!mfY-6kHYf5AqyVh_5)LhS^oCXQWk-SO^8U+UXUOlcp4sJ zFR?eB^2&0Mo{$Ryye|~h*%57`(gYsT%R*>1dmf0H{LTX^%t~`U zJ33fyf+51d26l+HGR0AlL$0y~??dmL4!QGdNi1)UL_M6K1FPL#-aBcGw^U6?U2nE6 zSYm|XU5xT@*sZ&c5}mju0Na-AXeOy~b4#cmAdmDClxaZ?EV$7oMa~-2{psQq%Tux0 z)RJ;Es?G)NHkw*xQMBr_}c%aP`z=>lz{6I2<4P!%RE7 z2a;Qb8-+~7X@n`Mws{a*JEi$MHmS;Aut`<^c1^14j?ei$CJHOk%tI=(=5h`(t`Zzh zdeZ|Ohh=Ni9PQBErfj`Rt0@5COvsBh-(E zS*B-q27o<$38f1vG<>U7bJ7x7uoAp&H*fqVt=ryl3vU0n>rZaCCjx|fK^EZm(f!|% z1%L0w0>X_KE3k(jan`K(Y&aFy__GCu3h>yA&8M(hWT?PCwrKN)utnzg1e;eiJ#j2o@?> zWZ74n3=nLv90t8?oD$S>&0)9Vf)YNU-McwXMrczW`vRicBTd-zYww@7r=}*h6ajIp z((z@`idn#VBj~_crpBxxFR%t46rf67enIUj$Xz($@XZRVNAo$)t+<|pd6@6R26vgi zdDYl9^CWGnHi%NQ2W`Q$NM6={mff>X;PN>N#GXi`Ke zDhtl#3n;5aWx)hnL@6o@&TNY)MP>3;gsntEw zY|h6Ar>0w2|6p=9i_YK(==Vcd6wBjBKVrR)dQ6C*)jm?tV(bsfW=feH$!*wxXJ8$g>2DeeK^}acXGDBaX3A|Wp|xQ6t8F{Mq8eXwbU+5;*wf% zTv{uROKioe5XUFuZBq)_S)&udkQdsaFq5U*%rsrq%EXF1ksMly??38FLZU=2LnDo~ zGIou1o`)NVe8S^$8UsW6i6$f-tK5nvk-OZ+3b&F;((NiIa41IP1H-F#*I@hspPI|#1wvxG`8NX)V4Z*A21fXj7M_k=vZ6;cW#d0 zK9iB$-!(|&dHen{p~i=GdL+;1KHSxc;Q8E#Ya$W6Aot>;h$i?QlvtcEtiO#I!F{ib z4!b196Q`t%xc9}R)Kzb+G6W0&kq+PbNb~aKM(gjd6zdS zvuU5F-sFYLaKRc8)k*&xOLWcJ4b5RLFPfxtrCPU=ne zX7h8E@f=UhxCzp1lH0>~ztmGtf`mvwJq(g?_(>5nr^PxmL8Vf98YGq?k}@Tz92IG!aLSa>Hq7;S$ao++gOs(0SEVZWA=@zz{T2rfL2TQG~m9mAcrPkEC z)xlD0YOQKveh5wqY&5xy8jViWKOzw~;;0jcWNdYsgQCjrZ0j28tlwI#Y)AU{AL6+3$I&?Ds`-L|*^2|`fVBwb?AGWSAfm)gtKBXw%-` z+C9RRD&G>#*ue*^_F9-%Ay+p;F1whyZMPj8%33iyepimCha0%+U`uJ2K0&}YoCE-Q z^0z!)utMGg!@C))lwcrAU`Q7i#OUM#YbAEk7shup^apo&k=(1b^MJvcGx%`BB6$VF zv05-kbu(A*Zdh5WT`kh0QSg*hXxsq`?K^->0-jBC7;+D_ICAw-hgp}&hX&vv&fQ8) z;H~SOZZ)s7hra%_3~(#*hY~^LkHR6Mnc0)WH36+zsTFBfwZ^BJEr8V)6hY)fIiNUc zkw^l%Vmdh!#ss-77tTdcF+y=9Zb`G)hBej-jgZNc23BYKW1@A7UpgH~lsuG*5{8`vpqsH*X@To79xp@0CQ-EZA>NC~#PEDzV=Qh@@G|_NdXiDmc(I7%P^B zw8y1J-RzW#cA=)5(bxp^lO4t!U)>9R;mXPMDzlJb4OYO(4kYiD6l7;s(_X&xdI(qlH4aji)&;?BKqsah_wq7)(rT3$pD zy+sk^P$Ly91zA#85fq^yOKMX?5el-T?i5IZyi%a$1%;NIB8niZM=1)jq^<@?0=)nr zUv+DE2SAag$meVQqs=0YnmKe9u(mH`6(&`f?}B<)R~=OP1@*4>ZWN&~y9M4?ml>3$ zVy6`QL`|;JS`rM<6of5M@nV|bW(=NgXP5w5QNZD2`(b!a*#GUKD8)ChjBJY zpe>48GPXz%LE_|wBBAj77e8_0m_gj84N|{~NB^tMj&RpiEe9LBGh7w*Z;jZ%V`F&2 zTN$)6ZA}YZ+O)MoubNeSC$t9KF?1|;HvGHWiF|vvhOj;(TDstw@E1nN}@A_J`xe!i~5=>NcDY zgvdNwNe(qh<3RbET2OIQwI^OaPmTFxlFt$aCbY6O+NiY(jcjn>NMjL6sv;I%l7r$eNiYRS3+;up z9g5taoXIOLrw^DE6g*8T7(@Z(1Si}Om9+pRGhF})iOIX`25dHZ1Hwc+M!LFLBo`xz zB5W5Buz>gNLlH#N)bb*NXtjzU-JlerOKQ1D!MK9A;joz^@}w0aZRtF$kbU8_JW0a% z^;nXElNS++QkJDwNsCfzc|i&Y0kUPFC3Rj=PzG93=LrR6pc?~uLO~g54W1<+G$@c4 z5emvcF+$!_K^Z7g$P)_6K=DGBfE}O$c@d$Y479|}TPi36-Hyl;3d%rBUr)d&=FTs8 z|94~h$VoU44BElY4la%djUojxcSWACBbj^Ak$b>BQp*`EQaNT2vwds}^Mis?96eYV zRM<(oh6m_HkX^pNn~`Q7HVl+RDbIF=G6Z&6ZcvNo&vW$Ya{5%!Gmk%n6$z1s zxvMYpkGf9uA$_gQmY@J4a|uXvjXtChDP-2LX<`=m=9D0CPSEEs@N{@Ax1Y?g*A)U@ z%4Gu4CpKcgAslp97nZQ(aenn^SMJJ-97x5Es6g``i8{TAqc@&kGnog@aCX2iOiJW< zgHBe#3)~9c2(>NRJMBEV4HUXA5bX0i3HSmHf@1f+0`rWB0GW@2@HSL!vNOi1uu%Ft zCN71H>)kaJ1=0S@LX=;Vgj~hwI*ScC)bivUDxV@+0r_o7$s{75l0+;`#bqU5ENjMr zmZs%EI=O>$sv2}Mky4uvN@uxY&Y^s0ktSs5nE=;9tD~poH_kUDnh+S-z7)jl z4BC1Z<2I%=ziFrlylhFGm#Q!&`{>qOso`h`qa@vLH-gz@h6CsaiDs z?3->R)mYhWuWeobh?~(oK8AOj6Qm@ z6^djcW*x2lO~cLW#VnmK4qFi@JCw^(6+mR+3Lr@t(}aR!3vAFk=gte_7tckgY!I;~ zx)di^fD)Z|2~0G_WvH8F3@^IBIRyahW|}*?nf6p~D=x+Yd%HI$gNvJ+LjVhtj)O1G zmTbWGfs!ag83cF91;3QReg5(Pixj}NrP#gWW1=C&8sVo%B^peuDJF?}j7YL6L@HVP ziK;NImBLctNT$dYD}|-Pu}mSUuv9pjDI^t_imu-j(N+sfg)1C|q{33+pr(*iSSlRW z6q1TdMK^|uXmTjiHH@2yg`~n#sqP)wD=d{7j3QETsdT^BG!s8BX>ArzTn83FPr?^@ z!9&h(Wr;7Hl_j1tkn`qbNsF=;=)C~TOT(XKIv?b`rNMhc&*zi#+Bm<3^OuHSbg;ZM z{ASYgLR4w63bA()@+Sc{_=#5nR-8n_QZAz*DVHITmHVJmg~5qZb^TZ?x^bcs4JFoz zj-04cnw(C9qbw<(3P zh+34O99osRqGV(&;|Q4FxWt)6yegA1r^_VeRf2|w_2{!ci1=(5)5HNYLcp+8^}(BC0bgI)TwiyFw}QArZl{ z0NANP&K9XwP8g|H&KcOO5&)4WC}du=M!d2=WYW~JEBpD+GNgGwmCI^Z@9q!j=-2lL zxwMxoYegZg2LmzH>AeygScg0Ys#T$FdaYjHTYx^R(Gc4b)n_+D3byCab`}|-*SagE zT}G=Q2OK#^sqiS)DWY4G%OyvUiE+RRu~-b539=N3^;ZJaYck8mk|qJ_WsWM@F@cU0 zA`@C8Q;0Q1q?Mv{)FNA1Q@)8cMd_>-rK6U;%9?U*tSL$d--rxuRwTK57AXoTi$V<^ zqbo|Muo{+BH+?v=z+Q6u3k}`Bb~bRN)OXovD)KZBkfRbTm^aufqtVOrBa4w%n)8VT zbFq1TTWKl#AH*EYMK?TA0p}I_nu{tT5IsUx22Ar?f%$lgJ`dngk(~mRv{e8R z@mUcio&lzju$VO&E$)vgC%|xXk!c4bb<^|-b50; zSX1 zptE4J-xI`ehFz!BdFZ3v&sVaIWRZbp{edH3uh%T^ToLiC* zRp~tc1^AF^5kmA-a~*VdLJt}SA~&q0Yv$%-x38Cg+jNOFk(!D~#HgnHH4YOhCU}%y z29aI4`EC_-8&zRq$19~gE{qhSX(-K#m@*ykj*d| zDw4QHaW0+tfCIlroEOg z@fPUp4y@MlMgX3$;YWnCwiO~{U+J@HSnp=7TV2Mk)hx4U8>}did0vHH-5EI?@2fNZ zGu0{j6TT+x-4|*dQdKaa!I$kPb37%UidIt5st}!-KJt;fVr;iLO1hnutEH;Ryc({I zNCu3SDCb)%lEI!8sYuSrGE^0VU5WV;-{g`jCDUfj8{X2QOy-A^vqmX`UdfRKXrtcd z{7&28HV$%5Oy+y|#xY)R+&o_I)oTy7??Ev4Nz5ZiT0^~J53fJ>Q<)!Cc22j3mR<~+ z22hb1Z>0!uUK7*vnGm_)^(&ndgvqpB>B*PeIHge41c4Oi2a30C66W!ZeQm&Ci#34@F zIemV@&!%Fd(8)>K3*M*s)P084OubTXDb$EFV!RF^BMndB9OpEw4O%5Ua$@j{UVWo% z<^J6&E8BVL>8yAsFU^CeS@1Lu&S!3s1+QlFj4&^k;A%F{xO9>QXY-7G+$=boXFO+~ z1FvQCjO!#>a5m4lT9O54^Nh<$S#UPbc&=Q4-GFbt>CnHzHW`S~c`3RqRG3Y|d8BVI zcjg#>C^2LAKkT80$qubxeLji+ zr#+&Wn`i=wR~QICx3LVL;S;Fl%*@-wQnpx0SESkd_J*`)@n!};ZM^Me;^E^+$gAfd ztK-9}cs^v|nP?mM+q@l5#1PB%(@;diM==iPvt1r_W81}6y++tWX7a|M@c5mOz7z{H zlr4IC!Cavg_^=z!Q~V^j22DtwX?hQsQJz0o5Q^5A?oSt|Sm=RR;Y29pf+ZqjIAz5i z+QgF(iEF`$$s&@#ify0fn)8^>(XnyA9lTHk5e3hhSPR83(1$egfE{0w0(~$by_?<@ zaMzq;dnQ!rPWPsVu}Yo;M~fV zsvIFpZ0hQ8$gE9O0T!t}?}WL0M!vRCDOl;wiGU^1$xsAuZ_H=YPPb+c z!Urh}oRj(t6+xu^0*r`FX|03HD8Z*34B~ZJc&o+XDStiMr>fLiiY?RGHIpT@0PsXp z9mENB08hsPoXZ@Z;(-`Sk$Vchg+_SCYxef=l|^aXGG_BsS{pA;@$sY2pEc8+?4J}q zveMoJZ+zI|WnN4$sw7!olW7^eDlNpu!FUUAmWb29fR*)zkqa|)(lI}n(ev%vvH02q zyyxxWPr5+U-gniXYBE(QE5H+sF!H?-D#shq>B*dz(X{WWOr#Y;1Wd0exB@nJ&mEl7 zH9<%ghgu+!_p?|&DY58bQZCjgO041b4YgbvbG)mvDPCY3$>*|yDWBMTz-g0iyk4I8 z(A0UbN%dIXo$a3_iWj@&3ww72h>4;0(}BTK1H_ZXL5awVJ=a0@LjCXynE0L--2#rP zlfHVN5vwa-qLQ>c)Drsc6}SU3Q_;8=rZ^ofI-nk8Ckvdx@^Mn_XuM0k#}|G$56bn) zIkD-1OCnfUPft&K&;ssar=Gvi$c(D{Sklp>dEAw~>k0%MAL9zzjGTT1g=U~LIdSab!%8`Dl=ptV~? zdZfQOm}t^Z8lXM6PUPZ&IG?%(xlc(YyR`Nzqwa_#vsG+V{enH{BDR1eIn(AHeKLnqU#ZNYD2bbAFOQV@@`#(C zszQ2O=3*fZ=+DWyCx4&JlfvaNx=xl6N3&kQ>)||im&{v3FVANV3O}2;t8Q@tfUzRl zHly8tZ#UtZ#Y~uh5`eW75LBK7l#O&GMaN)2+Us(_|8`xHxW#A;P>TG2MFqNz>5L{pGK-unxUNxCrF7E~71=3t^J zNK0=NYSxnaGM~@%c{HG~ljXoMLYtkr zNT~PVA|>WB-kXfX(iclq_8X%fhL+I8653Qopo!eZv;{73`0S-h z!8|^B#1R%pE-19v&=Q2ly+P@iW8sWdi$nTK9?GM|1@Mp&1z+UhEBVaeH7(h^ujDg> z7bNB3`OM%W6j}IcJ~Oxul!xatg9|}7pv4VUpiWdUf{=*jQA zONt!7Si{9(Pccsj&_+#ld_YT{putSR5usIJbjEk*?fTT+yQ1kN1=+=(H-$xr1bI2d zb0TSzf~d)?UX(Yh7o&8f7aEzY&yEzDy!dfeWNHaYWNisbWFuU3+8NY0>|HiIqHr+W z9q&(sj5j(t)Dc4aid!K;fpctr8LWWS=kwXz%(lnt&9b{_3pO5jnC#POj+E1qREW7!a4HNpm^Ol0Bg8%{7Bl-oj^yyz#{7Vv8H=nJ zD%_63T1{Aj&^_j-jB3vnz$L?K1A zRe*0VghDWev)$d;3a_`0k7*q!kjOmsc=%rkvAxQ#pW#T_Jp`1|^Rq+dwKvPPr>X^!HGo=eEfqDppC_iSbD@447$1U1$p#nH!rEQ(v9! zrX6NUo*hJ(3278I^Fm0mnPqhsnM zMJpLm4!4@()>6^Mv1nyXM@yR zc(#5rKaCU4)05Hm)NW5Uk4}zed>ur~0UT}Z;{Eoc#pD3D6b>g!j|0k)$?(GD zKx(;&qiw=qgJn8LyOHXBJRLJSIoU^ccJY{uR2@v_JM>XYgzBTc8BPy%VGgGI`x6v) zvNxNblRRty&(GNmjb@tWwuSIj@x^HCXmheRJ{TbnqeJ6( zh2!V$M_7c?8+JyMv$Un409G@D0X|R$2BK|#8kKtt)rYn0{_7h%>*n^wD5IUpWP20m z1goQ6+~Qe`a9UtKel8O{&4*p1g~{0N_}oO*yjCBgh?8Ah?$aLCpwrXI87dZ4+vKcI zYdGxIN8_Wjru{e*R^XvdnTl$r0C+T}!%|J#p;cKV+MSILM+bC~D^wKQ z*}+xaQ?8cbt2iA~@uP#I`N;`A2CVI}Ma$Nj`N_@E+KL|q%ADAIh8BJfZqwMs0gjb+ z$Mex?v@zjJ=D5nu!*8Es99 z+tsxB!r_&92X0i-B#5WRy-gLYy0jFv}gZHxx+co-vVV&ql?A&*9M$FkiR z13p!*X>*B*WWaZ9*BI#8d@~wCgHd#Mx;4enz;78J?b^FISJFi_FZ&sxJlam>qI>j_-k`6NqcqbNX2wmDnsMX_?T;hGh$P6PGDzROT#3(2@9Pu=-xv4&k<0!)v?=9M$ zZX2iB1OwuDn(GbX{S(E*XcOs za7UY{m_vlPnN-}YygO4Ct#wwI!)S1~4w*gkF&$NgIo5<+iln%HN zm(C{#6CKSua={$p)ca^P2eUJ18VJr0&&+ZeGfU=O`ZBfZ|IUWh>(1wtw4~<+Y0mOo zP4Av^a`V_lqcJXk<~W(4+Y#Mha-K3T%quU(euoFQonIZ_8F&E($_FJ_O+{A@P$yUmA%ynuLX*0d$_nEIX;ne&cA85~PP`}D`Slm%`8^U+?4LGa>fV8jGobNH zmB@im5yP|qI|mCt(DvDMeLES3%*w78xvj|N&73&?iER^ zC!=|sgkyAJ=TiDx_Gtba?U**QMs{FOSl&qC&5u-!8?j~!(p6vz;VqbA_3rE>BGZ`< zY&kn(t2s4@^%X|Yu+>Wp>H3ge6wiPP*(e7@vdLdJ0cV=%qza~uDMot?on~31I zu}zC>$kLYC`$lL^IT-VbN2$f0i=S%PsM$IF-~M8DgRnSEorfM5p+3zr3dTfNAlo}pr6a(9DtMY|iU!~TU^ zoTf`!hcM&Sn#|5AJX^$%4M-vS+~lm8Q$}XrLAltdsrRHL%;@~lu~d_3Xj~h)7PvQE zY}pMlG0{*l*u!QDF`KV4A>n>0rezCyj@c))i;#?74Wg8m<>`HRqu?D6ziq0F(XM@d z*~e5?`#39QdKFqR?dm2YLD9YiTc7bqIuP^jEGDWU7i~)r3s2!tGsTu1wwUO}r5s<7 zWoY%{i4KC%G_{)E&MMJR0NL?hLPFIhbahLVJBD^^E8Ig@A9gIUTF!=X5smQX3O8 z@pSBWOdOu#R_|t}J32(N_LPR>X~U67jxi7$X+CmSG}CS9P?uhmpY!E{28gUeFFe_7 zy1-;{vP6{jWLR1xPa;G|$}H+AMYS-=7(Fw|gal`g9UIX-?r7WCzTezL4CvqPjp)v- z(<3CNeKS37wuTrieT?QduJ%wJzWo4VMm#?WILpw4t!^1(LE$Pmj&1Ocah&KUp&W^M zqNJpAGbsV)eAOJQM~+`zE=WU>9KvFGjzD6UiGrOQg1CyJBXAt*FT$x$yWc!+r#sbO zSk8Oxbb}Q0)YwOL{C;oVz2Du%e5+#tqjXtXU>A20_Se^2$4w~fN<{*Pm7^qFur=D< z_REv?6IZ#Rm>!D``@-~giuegfOugskgBor35{VOm&?Qiqtj)Y|oq8C^w&Ha!722JhuWx#MbLP75VR$|Ry zBB{ffp8cJcn{ddSMcd606=Z>tIlT2!6Xaulr%O2D4hi(>@jeONNopnxgj(IRpuhQ& zg~^u4Ev+B6(KzL)J)zy{YP5-yQTcUDM(1Pij1Egpxq35*-0A~vM_UqS=Yaaffz6*x z$m^o`pJ-v-pcp~y&qFm@orhYLF)s<>AXIqRME!JEE1qm%N7P-em{M)0Z@H+3fiO&} z-A!ngEdy9>PXb*h*E4i6Le@7fTAZ?-MyxW4%W*%AniyNfwH;E4Jvref96!<9l5j+i zXZw`gzVL|Rc6uL@(7D$&z;)*3M}Aa6I;m3T+(z8?JTC60R%<&kowkWo)lrRYf3g)| z|!%r45&s&k2c|=#e6nYB}!@Z^!CB{2onJ! zl(2mTmYRX%W|%6KNpsWAUQ)3!@kni9mSXy{Vt}PXsm+5`h-cbc)2K22~>BM1#lH&@jxEc)ARiiO2bwrV@1PvzI8w_ZD=ZWR!TH|>4 z;MCaO#a1S1A6%T?Fh#D1us3{!y>ox}k^wf*)O#zeF&AOYGDW3BO+s&f89c;k)m|0i zI=>ecFQW{dVuMHGK}(gEUz%v?9K98N2Rr`zVK0Ww(5eUhn?HJ~OIpAn2VSW8RiD-ds^i?!(KHkB1SlKI6SkxoyLi{Y)^Sma4L?Rq7Onspq!lTbqJm zM>2i54WyN;9bFPTmt{75@yN_opqY;Yszo<6q;O|G+5H5C>bW(mFs!E1VH%=pbo@Z8Mk;1u4p>h32=h3|dn zzDkY;THpZY zYs6*j2y9J3rLWr%_+}t@gJ~gv?ri|YruZ>ow%;6H-mVEQX^!StULP*Y3Q$axsahFU z`NAB1q$n}u5{L_5;m2%_^BxB7i#gAj;uI*4W37Q3IR)B{@#!L!@wfA`^> z7Xv%ZG2XGwZA5UD+`qSBArNSQS*DU_nP@h22?Fm=!6OmZ2$SXmhpF63Hh4*N9AmrS zINj`MzBR!>H$GRSq?ZjA>6HA?+03Ws)dfjveUhqHi-g+?`+>*Q0o+`zxHmq#kxkjp z5^Z|=#*F86dQwEzn(06SAu?b)QC?}ghEOK9ZN2jBj2F+QHJj7;QskJXDDh^iA{81pt1e%_QGybZ%h;=3Ro%q|P@9}ati&&-;!ak(ii$em z$1=@p)~wiw#Cutt94pGy2+i44I>VCY(Vs9ybB%A%NuK?lA-(3yTD+Y5Q6>xFEw8cJ z?DzfHoM|BCogKXM=IO7g~`L*O-kGY|NmI((ozYY|UltU|*IL{Gru=57l3#hZZ6Q^*hIjbKn($gF3UV zEHYN!0}|~ z+*&w>UVs!Sy7UmT8CE0hmE-9lVnR)^!i`O9=SseNlX*}j|^fZ6byo-RdmG+drq_mS;QWNhm;fw zhRu8F7GYa4*w_h6wUNEQ5R`j}^l^~QizQ^Aj~;|pJxdnk2d2C#6J{&L+-NIQn1ey3 zHm9I&ogP%UDl1LKOsF*ze};z!OjZ%Y#ZI0qaC7rO z`r-8k!!HKdIpGtazwx!2Awy~Z@7&_NWdjd+v ze&PoeWtQyr8}C*5;{k8?G#!tMbDBuuU+iJzbdAW*xp%O|H9p=eXQAT!6^XIo!}Wn z-u*h9SLGjA>!86{4gGQK78f4SA@hZi@MxcIltfaAS#iW;3Iy@isqu9G!bEJ6xhRiL z#A&8rIg=^0Xi=I~m#IjYA>vSviRjx~r+i&%eymewA|+d+k2l~lta#6lcT=%mTFn`_ z?6Og{G`gr#F7=zu_2FRHFP)^9ux=b}a=@}$yX?YpxpWJQ>z6v^db?7oGz=_ekxT6snQ6QnNc~R{QKnZFHI#t<@{*^-hCa9zheMK+U)h~HME!n zniw4nI_+jVMP__jA9kyiP9-s#__Q&s^&0gwdAxO8rw^Z^q4b8e#8WGYPwRtrzg6wh zprDGslJRM|)2cNF-4v>mua)YJex=rEw-aQ>r>*j^+NmZ@Y9(o>^=6|ns0@-Oh1ay} z^iljqty4!=NzzYzTJN_z!!8e`-}!uj+$dtJ9!{782CM2TWD!bX!S1T6suW(8dAQ z*hZ<|#fVtpXfwt}4yQ;S189}XpFk6{tpPf2mqw8oyP4z{nQc{SgIs<$wc&cHhv1;w z#zH1B9Q&bG>QshTnr*Lt0P zr$aMH1dW;?!npM&>Z0CEo5ZSah^Pnjjefa5q~;o#jk+$(cIvHuzd6X%TGS|Ew%$WU z)HC%E*IBL9t5#bGe=@#}s;pM()*Ai6dYQT)w{Cwd8@m>fT6NeQwuj`}2&z2`qwR8K zyp;tEEPBFsRqauMtw)MB5tD;MDbj8m)NsV%IG`Xqi&3U}5Xxlqq4$^azq} zTK&>`2lMZGgB;bEo#d5dl*JwfsYPqO#a4 z_4_RZa8<5WoZazhjDlQ>it1MD6)J0c!G~8$-^IL3!(^YL0r$OMh3JLBJ66(7D<)@b19RVvjEuP!wG^z`9EzQ7-x=* z?JxB1Zn;kz$G)sz)?WzVhPY;_Gwk>KL!J|_;Kww|eAg>GUerp1^-85)ZBw(C=(Qw1 z!5&L@y^L{)YF9&}rh>LTYz-UjZjUAe4UK1{Y6*+nL5(MSg^a_33MF6bcH2}v8mYTL zwNybL?KODUNCD$)0y${a+X%N~lhH_Dsg!!XO0&`Dh(Otl=6IOw56cZ~S;i)#Q6DCU zgK8OzY#J++$!LCu$xaKa>l!s*1&n=(ZQpho+huK+Ey4JfqsB2_mvRrL7 z2esHu_!^-`QWt4r8?HlRt1_81scL0d?e>x}B3}1V!G~3>v699Yt^E+8)VdW6JSi|! z@OB67t{OM|c&`v90W5bKarMNDH_GMuI`(weDFl=Sj~8$-S*v5sQl~jw0+WqGnCv&( ztxl67H;vRzuVP+YUvE|WaW0b`Jq#l2{eEZ2+g{3KGKf^yt60=@;~t;v=OLHv0row4 zYfPC;YP?s*zI&Hf-MGQRF961|4}Bq6m8XwbzJkL6a?s_txtxJuc*i=qTB)zoAa}WW z2esK1#K$X@H9)InY-nKcjG_46Pz>#~E9ej{a-^~vulq4mH|jk*&ROJIG!FDi_4R(G zU*U1cV^oSTGpJyPy-S_iL84ss5YJ(wuU|IdC%dyil=L;*$(yX4pY5 zs#9a~m?$%~9(H2NqVTbYkQW3N{cf9Dxw8`IrHip*y~>-`77`x;ATxsoTB7uGwEfb@ zDx%dz;4Nw`t_0+!)5Gx9rNPD}73XFhX9C!Zr3J5r#GB{HO|PrW2^0Fl1#XgF zQ-nqn?^o+QJy~?&x@%afHCk9l^r%VUawcA=V6Nt>LJz2C*X!5`0jfLQzb4lcyQN;O z)@`(Tn+#v|WMj%quhi~$2b~&kPxy~qD+v73!pf*T>{C)$2gq?G>Q#g-x3Fj!P&Z|Cwmrm2*Go9AZDG>1Nn2RXA}Xj-A2vI+9(7?PZq^Ce za$_sA+3MAr7}N_z;Znu*02l0hjHevb>3D3 zvl(`+s399z&K514n{Dh^_Q~gT`hz>1IeYC=2eU-K!$nXVMEPN`QR=nU>lluxjnL|N zNrM_tubODP1Q+zkHp1%&(IhrB!s?jj)U2HlGW9W zvpT(Dw^FOo0HHDfY@CC7z0-)E4UIj3yw=+7Uaw3;X#`b92c=f0({A&U){Y)YN9mX9*lWU7 z4hq@=D6-RSbg=~Enb=~IM%2f^Htct>a~}-Ft!ID@D-3=ZSpz1iVcJhc9Ng?vf3&H^ zRXe~LP^&|SU;&f3zmF?|!#WN!sHs{*iQf@0<8)}fQm3ZR_fqKkdBc8v?h3r)6c3Cg z;ZCE5(FG*pOwRg)vUbt}5bl&QTp*H(p;4`3RoQE7A$~O+H+TBjI;?^hTK6T=@er?chmfax<9_u?vTmAXSw_F;O z*ZTuL7J%0(vl*WD-k*-5ai~@5V%gpAbF_(rjl>h$1+CJ06LBr3rm?k-9j_>0p1SM)QCTVl{$JH*hR~E4@JQ0Uj-9H3rRSfV&E~ zUre5^((7^NC2bSKr5>DTbRqbR7!!1mtf>$Oiz7Y+(?|xAbK#a z*)-cdT9sGnHGtwMG6Wph=IWN4NZdrB%d5A8D|wyuLA^>NJs;Pcr{+3Xht#n(z{mJZ zD5$%F*lKwUOP^z18p9I678PSv8)t}RKKVwk$Q(vtAFtb~b^FaS_2VHPCBUm3PfzIe z4R}>tn_ld#+hrRy+o>a};Fcr~(%bgah0(@hv(#!28f^rzupbW7BXof)mS3Nz&(NO7 z6)Vman6TGzSGU{d2p!#&9*W0ndM{Z^I%)@J@|89wVmk~PulX^1ddXVUvvJu5X9U=G zqXvb><%aW@Kceheu-hd3RbqVq#Qn2~*hmdL2U|A^lwh-J@x-RI4?y zRZFJ<9^}@S5tw$+Te$bcw_?~RmT zPsH#GuPX0HUlUg|X({RRRwRG7q9 z$Gf|mcue0jQdeP+vQOE$FE1B5ECVfcTZ(ng!zLiEg=5CZwpkujC)+;5j)jpD>tH+y z&$}b;YEA(fvr(^EZC3E~OHm8u`vC^vp-g`F#fX zqGM9JbyQ}pT^qVn0>R-oEu;)={o^h|rOP*3F?Pia6Z0ntAzEtTDTzjlA{$LB${a37 zU<9KLRSGz>9G_U|g+m-^VWX$Z&tqgsv>Tt~4_D30J%rwTVwt7U8YQ9Oj&T)tfw3{p zS=<-iNL_~`usSZ5ViN#htU3fZG2F%lHO%w;K%L!~4%L~OMtD-A^FV$Afy3gQ@uaCP zIDDWFli3f^7q!zASky=pq-&uVfh)CjIz>V0@rD#0It&``-E!S7&7%DTNai#4g_&JK zDa>{;#}%NC(5r{DsxCEQd(JpG;1^O9XaBT$Rquii2l2Ff`09O8?w2r%GG9z_d2ix* zre3Aj<89RwE*E$!MGxN{@VR&BcBxURprY)Sip?|74SY{)Hurd4S^Q~uj68dIUfRCQ zFk8kPE?cq;(B=>mbRY3ec{rr$+)qOCL0g`X0O*FH0rv+H>f+L^BH6pj9$(kve-lqk z4sdCb!wrkId*@_5LSwtE-*4j~4C>-Eoo2HXk#N$32PE3{0qtOkIXKQz#@*&U`o(Ux z`eOGQfUEdwY0&Jo24#Lc6wTz&T%XMp6q^<03hpS7D+$=ZA^jwS!}U+>lGW>cyo+96 zfE&`qwQjA>JHG8j0Sa3rxDk30SnKi?5l7(C??H=L%o@VJ`Uz)I_$}-?3^_QYuWezZ2(Y0&d z?Q9UPhc8u6?5$aDm>JJu%c6@LXXeqjcy%uDnPSfPjas9Fqxs1Re=@JQkSVmdhzZse zuv6+{FBkjHG^3d6y?o!NF7oOK*!IK2ul4#m1xbc5beYY-5kukyK=lT%`4JOXM!2Fa zI2m^wnjMPsR(OOfc7z7HLgCVTtzM@6KorXEiWF7uu+-@`ySR5?!j(h7{nm@S=&`&| zcB&ckcVkS=WH&e1ihHTKMi&<_XWSJN`{%fT&}?&r(_UO*?p9MaM1~!>g&hbyQ|hkE z3vh0*SjVGtxCxBwu)bHHhk;{NYz1LImwe9e(aL5g(6dEjbjwfPWhGbp#xl(~y^lrnu!i$M>W)0#EJ>-@H3#O>qx`JQ zc|DZl{6EUxbxCdfdLsD+%X);sls=4~_ zaR)#WfFn|CC9AShyZ{^r;^2qZ-yJBUP#CWR(W$$R3x=3>*fo7e)RX_WuSVZdc@29^ z+;Z%v_*)ad8Sw7tM>$B60w3%KI-HvD8kRMh7O+~tl-O2vU#a8r{Jm%oJZGgLRxe@i z_}*zes^R66UwDq6w%vA*1D;-Z982hWv{sG8Qx2b5^Z7SujUGtTa`)v9s_4J$oy10( z(`!Qgr1EgZ8Lm0*WKNyK4PP!M#rVG0;p@{^XgEZ@BU}|nO$EUvs2W(l&yy74* z;cz&{5t=B=O1}=#$@!bD4=;ljEFSp&)1kuy0qdGkNVGdy3A8))zQeg-ZpK}RtpGM` zVB%@Nfifmk@4!nKTRwJ5|L4cUG3b?6s$&X_p~aEQs|^E3)ahp0^^-b$E;if?)64!$ z*58mUyewV}D~lH4f>?N$;$+?q;S}LWxcM&oElmfVay*&DlHkFx>y)VhoBO&%X{8D$ zpBusQ$Fs(iJF!$0dVq3h;@GH_T1N=G+~h|q#hCw@C9piO3*@3acfxnLG85vix`zlv zt_vcL@|Ikd=2omwSDvGN5TWKET85~0`Tp1=*M=ssdW9`!!FM}U0!Q^S zUxU5XE5#phN=NasZRF%$a@MSY9&N(@w86O}EfCCJp^0qfZddlH;$n(H#j#pf z75cs*po@p+u?>18x13(*K3tT@oq@k3SAhPCbRHXIBvP1@eS19Upg% z8bX=0X54HF&hR{F`=)hXosk(WuX+%Fdt4?|9}{8o>g^Hp`bun^edzWyP1S zWAPmh-vD&S1V3ry+`3RIn?1tZaMX}^c~lqF#gUw0Vf1kPIvi@4Dsqn**KB-j>`>{{ zTb!)Iu&IufE9@Ga_2cW}c0z{2t7~Jm9B627W7xf)K?qEa`S0_BK{bME4t_0{@m^0Gd2zm)0Kg085793_<)Y> z;GT!#D;O1ummAwSL}IXz$m;A~*Nw!$iW@kA+xY7#a5Zo-?gXx{nr-jnkk&OW(;v?X zkq|wGa0#}~=F!D|$WnHtmyW{yxhIaORjLS7?aJssXxg|~B=N#;(KIWmAHcOpiK{MG zl=MBwxW9THYp@x@B%5ijD#dGT0 zIfs^qFT;ib#0e7_Bzt|>wG3$9afsBtsr~Eo zf7+ae44bBAh;YR&Cl!YN62I1tI3ep>!+Yn?@oQ;#E%9qO=^nP~GLwKaHU+}_35Ugv zOkPPbIIkC{^L9EZpF#vB)GY^}U=$-HTsD{lYzVQfA*o;s&cJ!SZ2b@>=rl$35*3$& z`|5at%Ow+nsJIl&0ywhEP0Ab;*PK9cuV*(Tq;gel+BP2`v^e+@$qw#o``s(q{H&rf zuZg;sQ_=%cnW&_%aVD+g^q(=&@+Nw}o2GiB{zo2?jxW_5@t}h9^6u9qB%3U^NB581I!oyFekqey1gwe}BAJHL5lHt-$JO5t#Tmm3`Cd3o+ zk>E=rgYKSWU+&MlyL-qQlOuK%evXEq6uALuCLY|I$x9z~M`9#41D6e5K#JOjytonY ze~rXZ;XS4Hn7kgLggD|wpife}28_xmD~NpRMfu0zCE`cTah({67pkhANDtV_z8oR( zjZENhL^W6%On4HYf$tpQy46Mr4(7^Z0SMu*YLpqyG2(6RQ&9wzA4Jmge0LJ$1ri}9 z=stHasPw*vbAecnfq`h)WzlwnV3M-5FZlu4vv1o?ts@(%K^+HuP( z7K=D@T>DVw%0kp8LXyRzR21omz^>F~$}W-$RpChjCt4GHBQ-uo)AYsCU~q27iMV&w zE2Evuq)$E$e2W>?!$5>N@{2w%E0JD7H(VZsXx-`bwM6K0EDWTDnDyXukkK zAvn=DLyv=y23M~{C=Mdlw4v&HXBagL#KK5;&s5a}E~+s3+DV7JV=Fx?WavOZtH`Fw6W1>M$x(I5Y+ce;@Tlya^qEg z%o&tJfc2Zn3#t7~mXQ9^MSQh$`Hv zJG`D)4&7tG@mAxzP@_ov{fL_pVQh}TF~S?*BTnt@5f=x!cP?ORUcJ`h`a2%ihl$J{ z8kaE3Q^fbgt?=cHZ5_%82LcDE~m=6&0Vp+#-hB$yW6SFXeQHWJy5>KAtoT!6)LJ+%UP)v*h`p{%V|(EE5Y`99{z)#(3b9 zL=BBsl8l7_mx({Wz-Etj=OkF;+xlA|;)+Ovdy10b$su3vy=3<{bD9D9B4BV)D z-tEZsS)(sPMx}Q~{mprkUKVKvU6d)Hf>7LYU=$=VN*F74$B?{fmMVa;pl~4XaU;ml z85pf*g&_||jSOrodbFB2+;aVsOS(?lEJ$wpYjF}Ho&oZ-46JF~3&kyYmnmulE@{)?BUM?G9^x$6D@8MwA$chLI>uDwkv|pIE zCVg@x;0y~J#jeJMRbBUDusPJ*0ebtY(|v2*#gEodqg*+5P?e=UgsLeMgcEeE3G`A* zuUHUks84W&ZBYkiRhvT%{WHmSG=wOw+8Sy|2=+MS$lW~x!?S8gO&laDYCUHYbOvS? z>jp*8E}L?wY%(+q8U&ug6e1eExN2*x!3`ZG@)_71>lV)~bS!xvt+C#tE5xNx_MTV{ zbF4QL+5vc7a&*>3KE`UCs-yDHMpZ-YnxQ3s20=ArpRK14i-W`R#Z2(A!bg9a^#^mTC(+}}-69s+9O@DOxT)1FJPA4zL#%`~(I;xYioxbkW5OmSovH&9 zbXN5N4=#wejtBW-ws|(7tU%3Ch;tv5qZEh|0?p9u41Bt|AzlRc)puS&8Lo8hq(DEr zLJBl=802LNd}4rEs;~ke%$u4 z4|N{5K$2!?>Ys(qey%c`xo63Q!!=dRfxJ1(&-ol!n!5}cCWdX0MQH$PHdGZnzui4Q-{&TAE|)d2ZcT{pcjJo&!Fq7>RKd)%3wpH$Ym6L`oxGu2h!?%&I&oBN z3>{9?P|858E~l1^hqLyiox@@>B5kXe0EJyY=Pko5OiIXOqk%mhmA5$woyBRh(_4^7 z88gMCVjm;Fr?=`n&Q_XKI27zXY={`9W%HIAGi7*I1UpoN!fPM4LW(>{3i8(_xnov_ zg-&3>cB_6Zu9;wl$gl&H)ht~XhX=NOxqkkBcZ1v1E9N)#RGG_UAGLdEtM&hq2{VP2 zKJEk;7B~;u{low$jRn*0p70X$L!<8r_j2Vt(8`ChYjuUYEZzbP^6_Hiu>n1lT&)L+;&a07C{(dN`2O@6hi@)wsdXuKJcFev8mZlIo1duw|xoCRK9G?4~_N zu-+fNDLx&G{*&ZifIm^*FD&X5pLY=}$vEIKt&b_IL?RNGP81<+dvss2Uz0D1%h-n0 zPg6BE>UQHUonDj}NO%&u43yeZn|Nw@RN*Xr^~ueG+s(Txyo4{V^g@BKh|y+3^^L>0 zJa7K)tqcCvHQha*@9!St8<%Fqs0oGD1hPw(4K|o>NlGoe{YDJH!WBv7zEXcuJ5}lL z3z>5eh%zw8;vOUuUMLehFqSeqXhjB>7uqh9(NUARj{F0pdX-bCP$q2$w@Tp`+?@0d z?ry$ufAZx^ycB*7>Xu=)lD0u&J|d(0UZ3Dr34@25G6ZJf5+)l)p-kRRvpw>1)C4tl z8Dq>y{VlAmay}Nyr0o!!#0y|NDCdM(CLc3+z@To|v?XSVv<+0;LkAP4vNu^J42E&a zkj@sL8M(j}%H-|Tq~{{zvfR(?G8y|iF&0}^4VkUVWzu$_LaQfIXn5XB^+b%;SvE72 zsP_0rs-4c1ENx?_oT_`hLB|C$T4fF-9%T?@8S(&*4>R@k#3|<}* zDK;Ji^ySChiPX#a2bpnABg2S}j;WJNM_g~pISrQl!(=wsu=E6*oNF?=kbiB6tj+7q zMi=*<>bO%D?xb2{bo+Xb$vt1tdD7T=Lif%2ol9VhF3Ch%64w~mbacCxHzF5<44M&e zGh%EE+`EiDJ0;=*(jP8+OOZbd)X=5K*`GB$h)qBm{G3PY0Z(93L^=V|^4f%DvzyX|o z?-Fmsqk0#fqzT;2qJ!;nyMac--L4;#BJtIhNH)ljT5`b4k?HQhmkW@jm4jclR|>3C zzxZN_TPHR+q6m7IQ&H~DN$v3jwZyA-1U;*6*D2=ZA$flBr5rkc=sGI7>$j(eyBqj3 zeuyX1g(qbJUc7JHcz;vHhJ{c5ZaApvi^qwRyHa61k)w0wxFe9PB)hl?pRewpu5Yhi ziM1+wXLuj|9RH5=S%GlTuF$1n1v@I?@o;{4diiSuJJDUj_|6B>Ry{OHYNwZ(RDBnE zuL9>ZPyb(j0l5L5A4>0ZCE!92G=g#8o?MES_`NeLAOe_lv~X@twR3u(6AF%M6fw{P zPY{eE@_9tpH4^6-XgE@;qh2N=uw@iRZz9*hN>vRJngb-O8mmV`PHCt=7eTmtr8r6Q zMCK8f{KHrJdv4~d*y7>*BlK)lTi)tK;-C$grBo3SYRj#tte_1l2uJA3G-{aEiJ`8xC>=Z5ctdTLY$JJ{i3XB)+YC$F#9D;EGA3SqdU}{)kw!6zOFqP} zva8K7qc%-?Ua7S`z%1EN?hU+m<)oWoMr~tDp07@sQa#MD;7)AO9j*rYLYZMkZJYhE z9(iRhjgs;+#nIE9&@rwvM?tTYdPG6@yxpP+Rk~-l2fL(z8IqXMiPU$a<`G&Y2F!qj zIv!6bpF_G2-<5o!2zNg2$V69r^}a{uok8`qCBg87GXb4u@Ab%F?a5@o@c?IJaRYbw zi#@|*3OeL|7`+1A?GY>8VOBkwmo1rzarSW4Cnbyy5aoL8#?4WKTIhg3(bJmAP6h!G z0UW;K{q^ImVGEG(xC#-%MW5I1Jg22q&#L! z=$*?mSJ*aLJsgK{bIBdV-6{%5bce%f8Xe)p`Z`g-qY32V-%M)Tic-oI3Xo@u^Z=Vt z)xVyv%FVjbzm~`7rdKB?H*`s*rPEuEY&pNZv*?o^CPlxrS9jbM3cYjq*`>nihSsP? zH_@qq#V>9r+vfi1=3jDbqm{pWjlvE21CMND=oB`-OWWUmg;-B7=OsJzI(*?<@WM&unSyT6=sRBIBh4>=t zttU254=U`tB&WkwQ{L>3)xHG9IfJZSIL*kh%)G9uH4Y*CQg`F&#K>ppZ0CUd63qof zKC+Lx{ccrx21kEd%TrjB%SL-r=SF%ikSV%Wjv6^nI&HU$-3q4)sggMBp$$xpm<4W3Y_?jNaW$J z#U!n~Ey^97wI*4##FbN@!QN7nN`!8subJS3`YSp&u()U0V9wm*;@0JM<>J_y*wRp2 z;IOiB9jKACY=;Wi*lxs0EC_#)a>3i%KPog)^$D5p6}+IQ`c6V=fLr4)Ja zl}tm+tyL~PbGKG;8O15M@vZ#oez%fc`u#3MWho<8nB*7Nj*c8KNP@1R3hVqmk-Z&o45+#w#{@){gQAHFz} z8Do7FOEinokAynNzN#rd-a)us@5zR!WF!IpTU~-n8lgS;hgIe2Y}`gpz8Z4{YSG|N zv#RXfP08O~-~Ae9+A5ayd41sesLC}LViXhVa;j6bziQo@t}QNuS4c$zPeJT>-Ps-=HxaN z7m60|x{!o}kB5oici+-H;;RK34L&8N`cUj}$JBw|8$?C< zQ5!#PPCHVfD{rbFfWOmJNt(Nd^UFIlw5!W z@DF;HaJ5#Xdp!TJ5*U)Y4WAkf5{=OdI3IM*@mGmNzWVC3-kt&I_juSxjyO=4R^?1*VA#yGGi2x@nVg0+UtTm3@M2Hb$Ylc{LWAfcy;RCsqKjLQ z&fP6no%6bfO9S5}dEgl(^0+)MuG~XfXURWe1N?h5;{FpJY8{uac42a(Gqzp1cTrU>o4`PIjb9zP3jj`7>e?D zKdS`&Ybz#HzN{IT^LT5HqU&SZ$TGem%%u_;jjwSW+s~($p*n-%-tiefbN9sPD0S z#rmns<~{cK2<1l-I~7~i)TmPJALqMo-(jFNEcYB)?P)iN;2xFRElBoCg#UJ@e!U)* zGo%n8vDrF zREsM#K8jH1ih{*~a=}rG@49Wzn`S}z4K34E!q?o9dU8;Ww4Y^}!5LWk_I~YZ6lPKv z&V2m6^X0`=hc5|@2TZ%%Ufjh9k|1|V&yvmyr9EzmKdoe&nn{9EluXHR#=t zMEi9@UFs5BvO75#s$U^QN~>gF?1cjP@g+Emd}LD0(;b5R(76$`?aNUZTP~ zv?I%bx^WUt?n>k?3(WttLkp*Q#oYU}4DEOLIJtxBa`$jyI(F@5>rQo@QF9o$IM$tb zfy*%^n}@4*9;K`KWbd3Tj_4MEPWb6*Fn-{I3(!D zy1?(o#=}x+QAlB1kjanH`Gx@c$o}K9Zs_l!=@d~_cHM)$9ryj&@kbs=KL)Pf6s12HKIA!BW%9^ zQ88(-x_z%|u^2orurTBJC=d=u+@09RBdjsV1neK#2uG!Xh`=Xnx^eM6pco}IF0K1y z1!M1tQAIyCsTw`0-4F)%94Xh+8y8xP))mCLFo@y6TVCNT7w8;=+z+ z)yDZSL={_$590z}SQ(IvkJE1>_hyxoR`buYr64pJn9u{U9m+Y#HuC>6sece z`TorsiVYmLWFbgbp5+oN@#)ousHF5EKsw6QON6v#RhbWI!l4l@Gu`cnMqs&N}Ox zY94=H?9&kr_G;j+v=T2all5qT&J`0U56h)TQ4ym*&~lQn2(raeGg)u2IsnOHCtOaw|K9pDFgl5s(5^={q}P9=4B2_^RwK+q!MWEXZND_4Z_v8oL#4#N2xBh2yvvlsc@wAm zgpwxyI*iU^yze&$nDOLYw6wQg7yFVpZ?Fw`R98N8MDYcBVv{D zT|hNZSN*|xYPi)fWg*Qc0+jX#aw#sC2LVOepOGU(m=R7gZoZ-{dY65K#9(AESPs1@ zjoKaI3W6<0^(VfbEKZd}WVhj%TiqBZBR=&=_#)H@^4+?c{L?M#poCyyi#(B8*}z8q zhCzxXwPw8qG7%?C)Sc*+A_>w?Q!B|;>H}_ODKzUm)i#GCHv$uz3cKGx^@qMX ztu~KN<^4}Kwe8p}Gw8=F3r>ajz2iPYWHr^|Mxg|*`MMz?2)s{1K9#^?AyH8DgrwGW zR9iNj=-)O62xlfaPv%Cmk%T-C)|{zV=E)hBjUo|PB+1z{N^Q7?rLv*#gAz+sXEQ7t zJX|y(N#x!xH|8}gt_{u51OXE<-oQSeZ=N1+$(N+``tlvb-n(q=Q%!&cd1Op z_9Ya7Qu9gjfZyje^7(D}aNxd(Kv6}s+Kn)PS9^Ihsf*9tpZvSQl^d%ZG2?QV$-rsF zm=-ErKJ$w6z6+JpeuOki7Gqp-Hse^C4&40JMLdRPvo4x|?XZQ4R*vNioC@5uY>tx# zOU2l10Z{Q+?f3n@mkG$gQN`T0Q4m(74gl&VKO0%XO%Aws6WhMVB-M}=44y6>`@$L` zYfsaQu2zO|#<*(oLkUNy=cku9XLc+fLHX00k)DInOvy%ol2B=OIhCS}u}MVrUj=ZWcRYlHXFpINK8XJ+c=1i+TO@gKJuf zVzuptEor`#%C0^?zkUBhyu5usV(BE_9_A1-9?^{jyB0883jgLV^Yrg4oH2^aU=1lP zffXi9=@#u_zvZeRYRP|SGt<+nrRl-J5t5DGWldZmvs)PH{!q}?PKmkzjfchtjmb!k zQB`xUkVcg!F3PMu`TQ23anC16vpepNZ2d9PsPeGK2e?wIqNPgn5wP9w#!fkOS3sji ze9wpr(1^VmXlaUA$#8XZSCv(@LK;;P6~T8js?90PjuF<&_lC-VSAl9#mMZgz=q;+5 zVeB9$jM_Gbl7KQij4@fSrOb6sIFD^A%&E?*H%n;_<$!ZM2B5gga|o z7>~l*&p_ttPf=n0v#N)ho2C+mh)-9rvHY#Gwq>gE37s$P$~meeQ(RdPiai;hCt{A| z`r`9C2LnftD`0VB+!8-Ldp+vL9UE=X5#$#6LTGN@$k%l z?R`i(p1_Jdk8zgIi zIW&9&EG9|#G?4LJ*eC!x$9!+PPPYOK59nxlH0#@=0M7dK{CI^g54XGfbNN7uL8YEV zsL%;6WF*ia*P=WMr_lkNBm zU;-`-28MI;VBtikdJydt1}_3xe#iYHJv#8%KW?g1t!7=IIp*2(^%`rsfi7iJ5r-l(5Y@XJ7t2Us423v*PogJas)3fP!22VhP+}zQD7u<+|H}{z_BF7;(SyMBSa6& zLiQD#Lp%-eFbwK6xE_j+))3s6bxOuq*zHmiZ#FmN3CTLs+9@C^BEV1|>k-x*;s&o;Nr0M4VJ+hg z{72Pk^(k${p&28;)jd+T!S%oTpaa+vc}MCT+`Z)kafTWHF`2VRLYG5Dm}>^k#*J+r z4!Hp;xfE;8o@AjW_FOha&B;TN%P6afDh3+@H+|KeHmbFYu;%26 zdvSwWD(#&$c_b?rQh>$wiy&84D? z7ZLPVUwCtilf{*f-7{Z5Hqg3Dn88CLdjLkrT?GlC4lNfd zj~>5%CG$y!CQO^hAtrk{>K3$j`o8<0^IRhDzkETE#*%}j-1Rl4*y|N2bQq$|wuUKQ zDdqI@Q-#QT(wzVM2SyhmCGro$cO*0Lm!-@L1c~t!!&Rg`sYj68FuX9~&H0}2UwNPY zs^AIsvd}R&2+WIGGDU1PAF>L(ejvXm?86-jkw4!V-T=BRo<{|_pu66UhXd4|EXimf z%QERIlsw>X@6xu_5fW2lNBbWoz9hN(} zh2UzH;*4HB{(QQJ8nM9WLxBdhvejNN6gHKW@$S zC@X=p)V}R_D#&EGMLCaAaS%@M+E0T#;7WyZY91PB;87h&(4d9pRxS;L&})g0zG|th zF}TY*M5ZO|{Ch&L3(XkAhE0X!19)4@ZOLlpYu3yG@?|o72AZt7H^nhSflj|63q+#f*sYFN(~sBhEj+i+gSMBg1>C=I?}xKk zbXe2V^Che-v+W7hwR9KK6jVaZPd=8UYNNxr<6M0qSHkTppTVn5Ng&g9D~>xcvfT9) z8v2hz0Sup_DM3ti@7ZY6bKi3T?_SO~Scpk-c)q&6f%3yva;k_HwkV_l4r1c;#$iG} zsO2@Tmk0NhvL7F~mvYOKFc~qhIpnI4^G@|e7u_!^%@euAIabPrI#+5ggdf#_r5Ekr zqTbM!g5kL!AR#}blZSCODHi*7YT>1=6Rv_a2W7XYN3<>XCN8u@c-p>(<$a}p(L#}{ zVcIK_Xr4BBZYyKfYWzBJx3e2!B#x3paI5!{Rhiw>H+AzZ7Te1zBE)V4)T93Gx-i8Zhh;t+?X1~#_6l!)Aauy#jJTLpO@W=}zRMmJ|hHuwd} zvQextt2J2|8~mqK>FQ;03X-gUr%$K8l634Mf}B=ft)y17`uz189;~bozBZ6)qOz8c z#K+Wlt<5Skq*3g6g0g;ENA;z}Rws8@LU5_W){hNBwkNwaf<}$jHt_riSz)=D(VB*Y z97hrkmx>u}!IfLJb%S?&sgThU{em|E8cX^1tbS>(NUL8Ea(4vzl#7|I;q5|PpuTJD z*6dN-Pgwd7Mq)QN)gS*Pur?Et)3vLJU{T(4vo&)RNv_oFPe)ygMuJXkLs?5iVYCgY zlhvc#YDu$48pYsvJ#?qigi*?D4D(%uwOg)Wc4LHc8;ubR(e zjqFxtF{3R$Xy^j=Z6&X3vyjmeu2}~n@hYXhiwj94K-MA7u>MFQAWaya;SG2{kb1P$ zAcq8Q)D9Qhft29n!_2zyd;a?7gds5CByR)#FLMl&iR)Q-hj8lbjEEalbxJR z861z2rh&{*AA|A0e6%Wu$^#}X4LeKF=BSh94`&OxmZs=T5)Snpp?lc(a==qOIIhTq%*F%oPk*zPI?AFG4x0JKVeRm6zwEo+VXMJNi7eKr-#Wc0M{x`{xBTo~{M9EaOua~Sg_fbBSg;}c6P1*w4Z59xzhIaYK&)oh9| z9~*TyM*`XFK`zMgxO}h%ojlGvJksR8o1o35PR?swvy4OhLpJCr$)J81$T%zA)F;XM zYVT>Y^}V*xwIWDOUQ`z{{flMTG5URT8XaF*sZcgj1S_|vj(emi3bd3T0F0$jNu+qJ zslx_;4Fbp#d>k?V+Wr1xe%nHFcp@-~%0(QW?oY=`Yb}E{+o_nNAa?Uo6zD3lYnM zRY3Q?av?cpmqNI@L2NW0H4x`gq2`}Up;{ty$;hQd@D~d4O)Q1rXFRo}57fBhONG`g z5pD;oTGJ@ykru*9`~jWd*RSUn|5iF)|0Vk5r6q~HW4q}3d2aJUyXzaVsLh2o*f}7J znHpuHDYTR>aq);q>U*ZBu zP*iYf8Ty)uJK!MJ~s&mQ@mG3ehk3fv@grUwm zp2G{nn^8IDL%vw0#|dhy3wrwwBCd)+DSd~gcw=xo%+-ej^gHrcNb&io!lXy&?10C! zjB3EgqnUV4h(+i?PG-43h60OnB|n>p6@tN$KwrB+HbNMX+6E`Ky_~{X1IFRk;gL@W zd#?|jyg=5#k?5EGal-q>YQR*;FiKAMV3sfrdu&DoZjUY?GRRcY$l%0;lXvYx{vxn3 z!Enj-&=WxVwvwf+liAh;yW?860uvx)NQ{RuH>J}QMZ60%8$Y(qEg4UFqr{aOQ$yGz zBn=IhumoyUDr7cIr92g33~1iCj}Z7s45?F&t&v8Z=n#0($uSpz;>(t=QF4c}L@V+Y zB~YWzX*WWUsVr2hO3ls-tvjBGa&=fkvr0)W0yD8V-mZ|2P9iZg2K5vQzlQO`2EHoc zwwG_FQ0WGRZcRT2o3G)J${4mQ5LeSflm8}bP6^)2s!vJ~>JY;bNr zRaiE3Mzt#f%sbKx+v1*JZ@CsMHO`#=dDSSOQ4ZiKR49?RLC*2RW!W-7WUY zySKlxxqBVeqO0HX_4Ddl;6i^>|3b09k$V}tj@G>{ zkX6nlMRIO&y8(+g%gWvqc*U|ZFbzQz-*w8IXO@93AuBa}g82*A8D;8>OZglHc^Sx+ zaaI@gLMGjk*C1<&43O|LqJ5D8qovgDVQj+0RF4xELk*@iiWplgIp+E!hF^6yF^ZUn z`S6JpbM1hx&lb%vut1yElINRTEm4u<`R93Y7Rb9qF&I>duF}iWB41q2=odGF4t~^q z(w-jk*-+#4+8(FVMqk`C;@6Bd{{+PKTc~A~F@J%oCG?yhwLD}=0|N7pdPacPWxu{1 zE*HP$39=`{x{$o915_yFU)lK>F?B4-nrE17%n7{kDCfp~5H|n7529lE7UI|P*I6w3 z0tZtKPetBLT;_HugY)NMQ$x%5ZlP`|gpvv>4Duz)=9zRTZfR8r%F2Ek2ojY2A{1J^ z_b~Hc-+Y&#_Gxa3p~H;^j*dw-_E6~ZV+CV4K45+8L&e>Ux+2BBW@3SfwN80O<7Srm z&o>UXH4c1Yon?EaShxaRF0&i@!?D%-gjL4)SlFOQ4mCh{RcOcD1+bpAn~s1w@6w$~ zXKe!<(k*Y$kS0BpiN9xEaqyHzC*9SDR&**40s5FEC3q_F{5+8KqM zp~l||vN|WtOi`58OQw{Gu-0Ap;vBMAG2Lt+YD8_}DvlD3&i41T6+NItOCS7omttWK z?4<)UN6X8n_rvpee&M3+59{GhI7iZ^(5Y~hqf6=)%c9XDp_M`zHhBVec|*%vY&CO# zoUcnRE709Sn^(1J&0Q5)(Zyt<9ihyqA#GEWxLGDG!skgkEofcUk8*dtC zH@xNZWKJt$>@_Se;vJQ6__PUhaz~7oJg#ML&*091D=X9y5jJ5M(ND=0a$XXoet$dX zuX1+5ErebqK$#m^;r((mTIq=FX(zo9#B``;S2(6fqkzpuPMjQH=*xjnc|5&fJy}Yv zgv&dF`xV^gC+;3*fl_Y>EhySj z6fv}HXz}*Ag{fD_s)T-$MhiS-pdUmrEej^a8`Te=#w~jz88kdTe2o_ri};+ehL5NQ z3S|trIMIoy9tPz)5xLTK4B14TS3%RMw#jvwQs>bx!c&X$joh`f0(lF3!7#;P&D48EYK6 z*26$f2-U+BisfSn8PQe}*%GxbJ-ff-qV6`sf;*e6TJ$S>=l!z%e!lsao;a&ROE&r+ z5>~Vf1=h&1JrQjxHzr{-3d1eyZ{FNt8#-Ig|Ltgu@=ZBFV3&0WhY5z{4Brs3W_VC{+7ue0&PVmLtInuoq?BWD0 zxG)365V6aU&=T2J{Bo~2?L$IF!}IzGB@P&_wtGxbdMq=o>Pu}DuzN(x*Kg-Q%y+?g zUe-&Bz1X(|9K@AK%$<7{^Lo#yTSEU)4v{4Nvr>(e&^Z3qM^uKX3EB-jE8;#6!D zutdV1!+`I+UwHm*;XdEtBmxn@8kWrkWYP^$a9HA2u>6HJeIha7;F#k=oB6~N(84th z$_BX)1Xvp0l#f$j&AXQjaX3Si$16t`$1Q{U@ta@|A@}K^56h#pD38Q!T#ldiu&o>% zVVb%U z;L40zNbtYV1(y1Rmd>%zW%z86F#2vQA)Cq(4C{ zt8ASCUK$$qQyhyny}E+N;7o1;M~OdW`Dbc(L_6qrxDL#vw+co1HFaL(PgH}h04eM$TSHzn_A980e|ec z)jvyReaykXgp`qmjIb1Up_X6N5yb;9e9Cc^VJBo7g=Ec9`fX?oSp)LdBz(ZqMJ|qq z=L=EkUzbX+BK)t&yDs3x=8lZeq+OsxR}KCS_x3k9~D?ek$^=Sxc1l087q5hGfj@v>@nJ12Z_= z5x5SU==1HS5v zUtQkGFCH@VgU2nIjL zTbJIrLkZ$Lh*a*-Ak&$sgrrBEXKsNXaW)}=h1~8ExN$e-B`(JLAy0&j6R=VFX(K7k z8o3H4m4C@)AznlH&-lDExFNaZ;v_o*sbe#=Avnh7j_r&^ouf0kvDQ@ZtKqAYfeo>V zV&60k>|dE6X3Pr*$$=mPQkAEbTOlv_S50+`wNBop(GXe@FZhPqlH3GL)&rzyRCsE8Sh zR!Mv~lpsnkx&X5Yq{2zEh-$7Qk29AX8KTM4wT0l6PAx#A!m;jpECaIcJkw_TeEI%r@y#re z9WvkVUf-U+afvKmELMop0kc5D?oaOaZA&<~+FbrP!%jCSr&uOB&lwo%U<8s2fdcnI zq7;kmXOKK~&TG%CPSoJ|Rw;LLu^zm~;Zns1MO`(SIw#tEDjSo>wHW_p4kvf(PD|v^ zW;iMKnA*bwpwxRJsBv*6Wdxl^kXhtQvQTCufh3+*r9!zl82)+c_s96#ig-^l-9-y;}-{)De`CGWFx)qq!r<&dry!DuR422m<4uOpcxldEZ-+K z!m(F9tx6S?b!Ev^<@hdLQi3YU6~ls9_|$FioNtxLFL*fkp_l~=U`%3t3%k4S10Jjz zF9XST2eq2s&Z_6rW7gj4rlia>$$HNM?4Hnf5ccy_EoUL(f{v8cYgt^!cUs31*j=IO~xaEXIB$qH{x_(0imT%ys zQN-1mR5J@yY&2!TpYc|ws@r!LUk)sFAw!0KkY}`+NEa2<%&N;%R>Vu&6bWm0B#S!* zWwTMr*r)gkn-1atjS6Q+TuRMj5yZkZop2JqbCkA78)1hF082 zGF)-Qk_v-ly1|WHC*-9+2}m8rrP0eH*7ofdDkHh7l!|4;Kw2K?kM<1)=VB>ipt00< z^;Q%r7mB5giTPaAB*90vBqT4eSr7d=Wm~|Md+H+b5;$Ew8}@R_;qw zUFb>uiEsie&pJ_)t1Dq-$|ZYw`uX%P3~28$)}e+;fJNz2WRQ>N&ZBVQ8!do0xE@%FPcH%k*l$ETjy(Q4GFCrz~!W)5fe87 zJ{v0-ut)|C3#YtGQn+!=hP0u90LwimGrUoKv+H|O8OlX6g`4^ma+l&br=iIiKC6C@ zCwLccn zNd8RqQA{c~<`ci77H`Wz8T?ZCEV=PPKBGW}Khfz#y>Y92oegy38NU31+6{yc6^ERW z9Ju$SU8GW#;Xj0&r~OAj#!f?h)0^+uhG|T6aDs zD#F#>!!^z^_k^E8G5PdTCbRWJm*b0LQfMIbk`rsAu1^{hd470$`D?>7<8DP(8=#_} z?Id%XtSQlUs4v~S@0VAXSM2KT-%nSscefY%mH~^MN|8ZC`2_pzL=^8l1tCwFqdqY5 zg);F_XLjNUU0m>B(W+UuWnj5F~Ma~QtrU# zZx^V7gN!roJ?R2445+XXk(;VlPvO6v|D12!X0Q}WbW+QcQb%-)5!yIoQ2?Kgm84|> z%rhmzTUuHaz>rh#;hQ!J7!Bavc_6tDX?wtLaRhzQM=O$NTRx;ARYlt8om|US&;?nX zf?r%E0ruVmB+eY&r_CP4QLm}NrkA^?m%BIeh%i>7JId}kgr(Do4J4@aqmxXqk%}qI z>V|m53d^|9=l58uj+g$C9IANL$s9SOei2KAj8MSi`3_c2iBju?c^pU+i+?h}>SgW> z%4klB$A!|fIOfmLOaFNJa^*PI-`m!%Quupwkl@3p5kPy`_E4;d>#XmbqamKxQ!eq{ z!};avzki%x{wj;P#uQ~+fr3B`h!R41b!cmMf&erM+Oae#)0ARBtX zC$}mP;qz_;9nRI)^ZEA6_07M^y)mH0PUYCpH$r=ewjzi^cf^3(`PNB{`4BI(&ZEaF_BU$Ti!~R2Doii}E zPfW9JpIfkrb|BP@`{EXdT*pwppf}gAdBp=?drjc6e4P3)E(@N`=ub`B7fx9tBP-oV z(x#MVF{&!`gX>S-ZLwj?ozdwTN^fE`?tRm3$Vdm2@9H9>3H5Sq9q@Yv?7qHIy-Zi7C>X)%$y2Hk zh23UiYf;v1t<5KWpO;c``dk9h|NQ;S1=r0mKN0r5$y|d&kN8fi{)F0G-Z^egUGU1W z)H6H{#&H^J>x*e@gSN}|#NbkEY_Ver%KG6D6@qVq66 z!&r28LrpA?^yeSkd(M%CCaeSe4LUq<4w_TMCrq|9Y2-lbh2>YTCjn>N8hO@KsJMu% zlwowqqkrVO5Y8v)b)bS3CA){^S}N{iSfq)A)j4sM~-AV>4% zPZRW`bJ}MojSrd2@$je;3Ll_DPiGDW2dlF`yY#2L0mqfAjg zd`!4P5D4LSvU!S&vJnmgdgDTyk!>zfkc$>b^htQSETT2OC=)vBh6ir#WqNeGt6S9B z-4%XwJi*Brf$xaa|M>Z@hc8d}IZm7_`x<+WjA`@d+spOMg;mG#L~5>Sr`{`EZr3to z>zTmdZBq%sj8y$7iTM1gTgBmLr6%rV+_Eb5stM8lZaG~lMsyVFd$t3aXZN_gC>-v8 zTbM*U3o>kir1gSy`%;g&^OSzxC$%S3>f>(+Kv*a^yK{$w3pi3AbI@0OJ z%rn2v=P&r~=YEP!0VnbeL+9qaGo6_w2)dL?3ytE#OUfIij4u@WYBU9{60BS5EmbO& zG=+ZU*lb~XQ_6BV1I2!2cWi!SP^d-=JHkE3P?QUah>1fA_5~Nj_dq=6yRL8-(AMOY z;b9Js!jjCLRZkrCag(^vwObr@#1kmN@-Rsq^w^1tI5ojsAo|=z6u-G*gS-Cg>K>n5 z+dx`^mU?JZ8@fl>0NGpNIF!@gZJK_&JktCuX@Cp4<$mAv>MEA#Y0LtoVnRuF*lXs4 z*j#+69a3zNz6s8C`Enu^kJ$=NL`R-al}3+r;@x_wa&)HM9v!Y;hmx3gvwAsMYI5-@ z7iOXxG7GfObP_su5b4)yp9mb!{^@VcQC+U??{S#Z6;POb8)?qH2@P|}U1}piG^4)% z^jPMGJyzWuIgOKD#!JvEt5;(t;==F~KZI@wi^0 zqwe(kKS*y$=1)_Pvij8$d-*wt%61E{KjB*P&J^{wal@%!}~_a2VB$I-+@e>oK454Z?OdE)Y=gl$ggIlE$KgC&XN6O1+^;0 zbK-QWH96FRyfrJ`il+@MD^aDlR;630O!l2Rfz6fTh?qk$-=KD{cWP%^L31QyT1{k> zQ1-6{X^$zsrMTL+k)$8*tV#*C+{4=+%|5CAawth@4mch{+`sPr$FDh3%xt(;a+8UW z_Lz=Dh`|vk2j0>tb4*8izh@&_BY(5UR0w`+A_-%tCFyq9L8Pn%m~-=lrshy4Y8>&~ z*LTPYnj^_wLBza}l|;?kV>&_Ne9|zOrA~85n-dn%USs7Jq&=iWWI~Oj#?uva5i~kO zPJh4p!dHLKi5IRq=1s!HSsRT73_A#(vn(s2E+;D+M*5`0mT zQaokx#l;#TSJkZ0=?N|o=fiUP`~3VBB3$B73C@urkV5)szSxeWS~^U`m?#%)QYLC9 z9_@jn3H_yysSEx;mz(OjtP>MS7I4JtUVlNj;Zq|QJx%?|y^Kq)cp15Xs~6W;GHzVa z$c=`lf8Z_mWo$6pB-v{+P~B{?NZz;Szns>p+@}Rm?8^)ZBJJn{ ziSfopwqs#X)p5r8R05fU{HZXv=jXTY;l}zE$7P$(h#ka27KAgPK}dqmVBEq{P*!Ix zjjNN*ZICbEHjrR79T$7)jN&#=KOS#iGaz>07TQi|mZjI?6{zSLmv;F4^ZNdWs9x=h z8y#IE3LRWQg1|Wa?v4|85qYJ-CB3Nkvi(h*e&LR2l*D2U{hC2>p&-Dy)~g6e)|fm~ z^ey(94jIlFFl!R3?=5EQn(wljQL{`?J2c^|U!!w5I>^7F*FI=MHTH=2WFgeNB6<<~ z9i!p!&b8#ius}16sh;c(Uad$QNtsNp6RQcTR~YkXreS6&GmlF)^M5|y-`(83#WZ4u zc|g{Hi7l-L3mn!3@%g(JD~^r?+vJ+!D4)T@ev9*z8i?HfyJ8wm(Y(R7_%*mUpp5at zrnU@JItX9SaDtZh9sgsYo9Ecd^iU*C38aUvoI`3^o-5{Lu(42z?I zfduJ*%OkW&U|=9KAlM`K43olW<9L-(%kOu z@$U7z)g;P_nkIQ&$Q{JfUx{dQh1tLc#>;0%vQ!-73|AWN6d1a2l5dMZZQT_7^~j|{ z3A9d7DJ3((rG?bLY&yz^QYe&`fqkhzz_>Aqz0NLkYcxb=o;_~Ea@ZFNr48XovTM6( za}u=-6KodC`$U*9o|t?Dmx?VC8Z#E?%+^~1QHJQ)Q8itd!FS4)XY_JGKf}BzaDAu< z%#zpIdc$~^qL8g?W+!`g3(@AjvVjG`^D4tyBu)oiIvKKL&-T;iEDy)Khr72h(dp2y z*u~1?EsSDdN|LQXVfZRI${RBK>6YS!Qb(2f@R7W|*#^QTT`u)FsIA@|SvjlN7M`wS zt9f_;SQqtm5sk|xjv!jYp zW*J{7B40DRMb--zFDy-RakEQV@?n)ji?dF_y>7~EiD!!>FxhHOMx!Mul=cb#B`g_- zNnLZzGP!Vs1!E^0>RK)tcA3zOwa#DFeeVA%?I!Xm%#aJKJYd2?klexpZmk-w<=@nF zm@t7LOh7^<)KndroMf9^BXi&ZXR~9sCZqb@sQR})*2uI<^7?d;R&CUWBmk`%c^8ZmN$)g*e+5h{#I2h^`o{5AdK}DJ zri>DORF9e!ZH-K;#110_YfxJ)1OA&;qxiaFS)=tBm{y3MPvVOS)n0ILaG5ef!6V+H z^7VNc6`58^A`J9#xbDai6M$BY!gt2Y=L`+DtVNhnkYSpZ?& zNZ>!Kb%C@2lBrAsY0r%MExEBePh-=lb81q%Dg8veCiz`6S?u+S@Fc@MxO|~;^;#eo zp2+!4qeS2d+!lW5c-6RsMmavMozT0kflhmU0{Nk|mvSe5{Lmt{d4IJ)+5owhReKGY zZ#q}z!iLCvBrTESu8idud|EwOG&aLX?!(nBBCJVsnd53$5eR~(UM7#Z+HsD>qDW+o z==oxKKG@^Gn=p7oWn$t}`N{eTWp{_CHgN8*UUpM-lwoi>us6w@Xu+IaG_dPp9$dpV%W0-YP*S+uQSYVIc>~WdVjm1^! zUh%KL=hg0Dq=Q$DZD^LjgFjkee2*uR2P`sp@NX6vHT4m7!qPVn{*Z$kGSXEod4gq5 z)-oF+6NSo4iid~Hb&O4if^5wswjO&WSXx7k&Y?bn1-hx#Koev0YT>w_NI@rG%NlA7 z12K-ck+prsB>G!6anOciA!*#2Usr1km{^LBI2&Y>{2{Ftw>gro!@nk$7guXOs4(*3 zz(e*O`J4kN={8Oaq{}7FR6b#c$%pZTS{l<$eOfB|m`l`=eUPXf`LP64 zuWHLWiEM{{cf{tnhUNVvCWGwtQ{yqLP~w%9Rx?Ul%B9;Ljzs!@9O?Nnoo+ z!$qE3O)L@nk>&jrQ^Tg|jzlZac8X305v|njcsM{S3f4I)Y7>8NQnSSDiR-* z9%sQuSGa1{!j$9_%=g`(y40>gyo^=MwiqMXWn%1kD!!^>$lcaxU~X0VnmckYO!F%Z9kY zaWC7NB}#=?s0$CBQAtfiG~sP_Jg6mB9nSJO!jeXO3^`?FiaaK(X6kXCLihm5XM{H= zzJ|mT%+)LtksjMmH#g*!#D;YtUK}+{1}hxkDK4DikTh(F6YP~mxqBT$s~QZRbP+o& zsm~#{*~+oV?IT7TIuUM)TezirrHIN3hgsHNC|hKgSjusL2I##05$HRn#t6-9J5kGwP=Yu+MLmZAE_O*dY=s z6&O{+k#J`GqY*-2*pKyIlZ`aD+i^2YE_L~ge0acjB*k(As;Cj}^iZh=m85NR4etg_ zfSQa+Yjoo*zP2fronW^;;CVL7>9A`2by3l25iYpc;ke+c!hx>MpVG3l!*nyO(5}>- z63B=s3pTG-5`3MA_w}8dq1gvY1Qd?Ze4u*uh^qaXR0}I9DQ&qVsV*7;+WWtr^W~0X z6Gq$$Vk+Ob!qlXmRoLyCfkZj-0ZG%Grsn*UhPsB4KD1k3zkb(HhonBdW4Cf=XP@#F zZpCh*<8MqD5yki^Hnk(vq(mgJpZrUwj_ZV@N(`bbmzq7yDBmOy4KMkr^0F1zCeRyR+l+G(x7OKRq zzC1tOLqR9l^gH4DM0mM8pJgp^+6u^hr}+|X#7HD;lCqp5thw$;2h}oJ3-53iuT;YcIvZk)wq%@crdm!Msx#LaN?jhL zq%@U}!d;|H9D6(tzH&DJr{8z^!#REGYt*e+`*UpZ_>$wMYkE~zYyE`}Z9|$_8Y_^rEps*FUatAi2K}Ybq4rrpm#D3PQdEzSh4>Ka5NFR&Fqx&0a0J z3obY6Ksv%*1ga3Z7Y1NH)=*{b>wz3^{%NP}UQ#QwKrqomZYq%$Z`UtH&p!iL9PqTt zFe;EjOSfckF1kkI4Wg-SrW#oXXgbj?QT+U_2oe=OVtvjZ`O2${fnN*@KkS_qE6o-EJq z9zmhd$oS)J-HNP>r6s&5dF(^B?GMF5Avr{rLKQJ3_%~yIa(xPg;_hS%kaLgIdW5gY zkA+<>JFw&;S&?yu6sfeA4`7(;u#⋘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

(|QY6uR!U>cXuXbD{J44Z;U) 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�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 diff --git a/Externals/SDL/win32/SDL.1.3.lib b/Externals/SDL/win32/SDL.1.3.lib deleted file mode 100644 index 0b64b9aea920d920767fd1d8c9479203cfd4bbb2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 83260 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 QPkEce+0--C5bu=#55etKApigX diff --git a/Externals/SDL/win32/SDL.dll b/Externals/SDL/win32/SDL.dll deleted file mode 100644 index ec6d2d845ad33a8e9e09e6377298738352795f43..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 360448 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 z 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[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 diff --git a/Externals/SDL/x64/SDL.dll b/Externals/SDL/x64/SDL.dll deleted file mode 100644 index 0ee6467b6d1e600d1634a0ac2009bfa951d5c416..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 397824 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

c9WGF9JtvU7t13u$GYvX>3|?8?r%h#b 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 diff --git a/Externals/SDL/x64/SDL.lib b/Externals/SDL/x64/SDL.lib deleted file mode 100644 index 628ed345c1568e036e9addb582cfc80f614aae3b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41688 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 C5=R68 diff --git a/Externals/SDL2-2.0.0/BUGS.txt b/Externals/SDL2-2.0.0/BUGS.txt new file mode 100644 index 0000000000..c5ed3af237 --- /dev/null +++ b/Externals/SDL2-2.0.0/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.0/COPYING.txt b/Externals/SDL2-2.0.0/COPYING.txt new file mode 100644 index 0000000000..397e7b45d6 --- /dev/null +++ b/Externals/SDL2-2.0.0/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.0/README-SDL.txt b/Externals/SDL2-2.0.0/README-SDL.txt new file mode 100644 index 0000000000..fade0b9583 --- /dev/null +++ b/Externals/SDL2-2.0.0/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.0/README.txt b/Externals/SDL2-2.0.0/README.txt new file mode 100644 index 0000000000..0dcc6905ae --- /dev/null +++ b/Externals/SDL2-2.0.0/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.0/WhatsNew.txt b/Externals/SDL2-2.0.0/WhatsNew.txt new file mode 100644 index 0000000000..a54ab0abbb --- /dev/null +++ b/Externals/SDL2-2.0.0/WhatsNew.txt @@ -0,0 +1,3 @@ + +This is a list of API changes in SDL's version history. + diff --git a/Externals/SDL2-2.0.0/include/SDL.h b/Externals/SDL2-2.0.0/include/SDL.h new file mode 100644 index 0000000000..f2d760c2ed --- /dev/null +++ b/Externals/SDL2-2.0.0/include/SDL.h @@ -0,0 +1,160 @@ +/* + 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 + * + * 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. + * + * 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 the zlib license, which can be + * found in the file "COPYING". This license allows you to use SDL + * freely for any purpose as long as you retain the copyright notice. + * + * 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_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.0/include/SDL_assert.h b/Externals/SDL2-2.0.0/include/SDL_assert.h new file mode 100644 index 0000000000..5a6afc5e2b --- /dev/null +++ b/Externals/SDL2-2.0.0/include/SDL_assert.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. +*/ + +#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. +*/ + +#define SDL_disabled_assert(condition) \ + do { (void) sizeof ((condition)); } while (0) + +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 (0) + +#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 + + +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.0/include/SDL_atomic.h b/Externals/SDL2-2.0.0/include/SDL_atomic.h new file mode 100644 index 0000000000..7bd669d1ac --- /dev/null +++ b/Externals/SDL2-2.0.0/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.0/include/SDL_audio.h b/Externals/SDL2-2.0.0/include/SDL_audio.h new file mode 100644 index 0000000000..0b6f28af6e --- /dev/null +++ b/Externals/SDL2-2.0.0/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.0/include/SDL_bits.h b/Externals/SDL2-2.0.0/include/SDL_bits.h new file mode 100644 index 0000000000..b1ed20bf72 --- /dev/null +++ b/Externals/SDL2-2.0.0/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.0/include/SDL_blendmode.h b/Externals/SDL2-2.0.0/include/SDL_blendmode.h new file mode 100644 index 0000000000..85aa474595 --- /dev/null +++ b/Externals/SDL2-2.0.0/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.0/include/SDL_clipboard.h b/Externals/SDL2-2.0.0/include/SDL_clipboard.h new file mode 100644 index 0000000000..1f5742d167 --- /dev/null +++ b/Externals/SDL2-2.0.0/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.0/include/SDL_config.h similarity index 55% rename from Externals/SDL/Include_1.3/SDL_config_win32.h rename to Externals/SDL2-2.0.0/include/SDL_config.h index 9d0da4dcd8..0b7621564d 100644 --- a/Externals/SDL/Include_1.3/SDL_config_win32.h +++ b/Externals/SDL2-2.0.0/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 @@ -117,6 +120,8 @@ typedef unsigned int uintptr_t; #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 @@ -130,64 +135,55 @@ typedef unsigned int uintptr_t; #define HAVE_SINF 1 #define HAVE_SQRT 1 #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 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.0/include/SDL_cpuinfo.h b/Externals/SDL2-2.0.0/include/SDL_cpuinfo.h new file mode 100644 index 0000000000..dde3074f03 --- /dev/null +++ b/Externals/SDL2-2.0.0/include/SDL_cpuinfo.h @@ -0,0 +1,146 @@ +/* + 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); + + +/* 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.0/include/SDL_endian.h similarity index 51% rename from Externals/SDL/Include_1.3/SDL_endian.h rename to Externals/SDL2-2.0.0/include/SDL_endian.h index db06dafd8f..c58edcca02 100644 --- a/Externals/SDL/Include_1.3/SDL_endian.h +++ b/Externals/SDL2-2.0.0/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.0/include/SDL_error.h b/Externals/SDL2-2.0.0/include/SDL_error.h new file mode 100644 index 0000000000..229b268027 --- /dev/null +++ b/Externals/SDL2-2.0.0/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.0/include/SDL_events.h b/Externals/SDL2-2.0.0/include/SDL_events.h new file mode 100644 index 0000000000..b997b5ec8b --- /dev/null +++ b/Externals/SDL2-2.0.0/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.0/include/SDL_gamecontroller.h b/Externals/SDL2-2.0.0/include/SDL_gamecontroller.h new file mode 100644 index 0000000000..e55749ce35 --- /dev/null +++ b/Externals/SDL2-2.0.0/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.0/include/SDL_gesture.h b/Externals/SDL2-2.0.0/include/SDL_gesture.h new file mode 100644 index 0000000000..21f10ead73 --- /dev/null +++ b/Externals/SDL2-2.0.0/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.0/include/SDL_haptic.h b/Externals/SDL2-2.0.0/include/SDL_haptic.h new file mode 100644 index 0000000000..da555c9c3c --- /dev/null +++ b/Externals/SDL2-2.0.0/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.0/include/SDL_hints.h b/Externals/SDL2-2.0.0/include/SDL_hints.h new file mode 100644 index 0000000000..74b63ee099 --- /dev/null +++ b/Externals/SDL2-2.0.0/include/SDL_hints.h @@ -0,0 +1,339 @@ +/* + 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 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 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.0/include/SDL_joystick.h b/Externals/SDL2-2.0.0/include/SDL_joystick.h new file mode 100644 index 0000000000..2667403483 --- /dev/null +++ b/Externals/SDL2-2.0.0/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.0/include/SDL_keyboard.h b/Externals/SDL2-2.0.0/include/SDL_keyboard.h new file mode 100644 index 0000000000..e10f9fd15a --- /dev/null +++ b/Externals/SDL2-2.0.0/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.0/include/SDL_keycode.h similarity index 79% rename from Externals/SDL/Include_1.3/SDL_keysym.h rename to Externals/SDL2-2.0.0/include/SDL_keycode.h index 72b2c35fb3..de584e126b 100644 --- a/Externals/SDL/Include_1.3/SDL_keysym.h +++ b/Externals/SDL2-2.0.0/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.0/include/SDL_loadso.h b/Externals/SDL2-2.0.0/include/SDL_loadso.h new file mode 100644 index 0000000000..790d0a724c --- /dev/null +++ b/Externals/SDL2-2.0.0/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.0/include/SDL_log.h b/Externals/SDL2-2.0.0/include/SDL_log.h new file mode 100644 index 0000000000..79ae4cde43 --- /dev/null +++ b/Externals/SDL2-2.0.0/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.0/include/SDL_main.h b/Externals/SDL2-2.0.0/include/SDL_main.h new file mode 100644 index 0000000000..bbb7e859b3 --- /dev/null +++ b/Externals/SDL2-2.0.0/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.0/include/SDL_messagebox.h b/Externals/SDL2-2.0.0/include/SDL_messagebox.h new file mode 100644 index 0000000000..cb1a1ccff0 --- /dev/null +++ b/Externals/SDL2-2.0.0/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.0/include/SDL_mouse.h b/Externals/SDL2-2.0.0/include/SDL_mouse.h new file mode 100644 index 0000000000..36c29e90a7 --- /dev/null +++ b/Externals/SDL2-2.0.0/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.0/include/SDL_mutex.h b/Externals/SDL2-2.0.0/include/SDL_mutex.h new file mode 100644 index 0000000000..3efc4a8901 --- /dev/null +++ b/Externals/SDL2-2.0.0/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_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. + * + * \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_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 \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_cond.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.0/include/SDL_name.h similarity index 84% rename from Externals/SDL/Include_1.2/SDL_name.h rename to Externals/SDL2-2.0.0/include/SDL_name.h index 511619af56..d0469e1f29 100644 --- a/Externals/SDL/Include_1.2/SDL_name.h +++ b/Externals/SDL2-2.0.0/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.0/include/SDL_opengl.h similarity index 55% rename from Externals/SDL/Include_1.3/SDL_opengl.h rename to Externals/SDL2-2.0.0/include/SDL_opengl.h index 2a2ebb47ee..2f120aa95a 100644 --- a/Externals/SDL/Include_1.3/SDL_opengl.h +++ b/Externals/SDL2-2.0.0/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.0/include/SDL_opengles.h b/Externals/SDL2-2.0.0/include/SDL_opengles.h new file mode 100644 index 0000000000..00e60f5c17 --- /dev/null +++ b/Externals/SDL2-2.0.0/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.0/include/SDL_opengles2.h b/Externals/SDL2-2.0.0/include/SDL_opengles2.h new file mode 100644 index 0000000000..7697626f4a --- /dev/null +++ b/Externals/SDL2-2.0.0/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.0/include/SDL_pixels.h similarity index 53% rename from Externals/SDL/Include_1.3/SDL_pixels.h rename to Externals/SDL2-2.0.0/include/SDL_pixels.h index f4523fa8e6..5e17cba53d 100644 --- a/Externals/SDL/Include_1.3/SDL_pixels.h +++ b/Externals/SDL2-2.0.0/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.0/include/SDL_platform.h b/Externals/SDL2-2.0.0/include/SDL_platform.h new file mode 100644 index 0000000000..1e8e0d9f42 --- /dev/null +++ b/Externals/SDL2-2.0.0/include/SDL_platform.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_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 __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.0/include/SDL_power.h b/Externals/SDL2-2.0.0/include/SDL_power.h new file mode 100644 index 0000000000..4f70c5bb16 --- /dev/null +++ b/Externals/SDL2-2.0.0/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.0/include/SDL_quit.h b/Externals/SDL2-2.0.0/include/SDL_quit.h new file mode 100644 index 0000000000..485e42db04 --- /dev/null +++ b/Externals/SDL2-2.0.0/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.0/include/SDL_rect.h b/Externals/SDL2-2.0.0/include/SDL_rect.h new file mode 100644 index 0000000000..c8af7c197a --- /dev/null +++ b/Externals/SDL2-2.0.0/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 +{ + 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.0/include/SDL_render.h b/Externals/SDL2-2.0.0/include/SDL_render.h new file mode 100644 index 0000000000..1e24619f01 --- /dev/null +++ b/Externals/SDL2-2.0.0/include/SDL_render.h @@ -0,0 +1,845 @@ +/* + 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 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.0/include/SDL_revision.h b/Externals/SDL2-2.0.0/include/SDL_revision.h new file mode 100644 index 0000000000..2d57530ee6 --- /dev/null +++ b/Externals/SDL2-2.0.0/include/SDL_revision.h @@ -0,0 +1,2 @@ +#define SDL_REVISION "hg-7633:d6a8fa507a45" +#define SDL_REVISION_NUMBER 7633 diff --git a/Externals/SDL2-2.0.0/include/SDL_rwops.h b/Externals/SDL2-2.0.0/include/SDL_rwops.h new file mode 100644 index 0000000000..0461ff7829 --- /dev/null +++ b/Externals/SDL2-2.0.0/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.0/include/SDL_scancode.h similarity index 56% rename from Externals/SDL/Include_1.3/SDL_scancode.h rename to Externals/SDL2-2.0.0/include/SDL_scancode.h index 8cbfa08b93..d3f8748116 100644 --- a/Externals/SDL/Include_1.3/SDL_scancode.h +++ b/Externals/SDL2-2.0.0/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.0/include/SDL_shape.h b/Externals/SDL2-2.0.0/include/SDL_shape.h new file mode 100644 index 0000000000..63f850c942 --- /dev/null +++ b/Externals/SDL2-2.0.0/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.0/include/SDL_stdinc.h b/Externals/SDL2-2.0.0/include/SDL_stdinc.h new file mode 100644 index 0000000000..7fa9c1049f --- /dev/null +++ b/Externals/SDL2-2.0.0/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.0/include/SDL_surface.h b/Externals/SDL2-2.0.0/include/SDL_surface.h new file mode 100644 index 0000000000..fece797437 --- /dev/null +++ b/Externals/SDL2-2.0.0/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, 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.0/include/SDL_system.h b/Externals/SDL2-2.0.0/include/SDL_system.h new file mode 100644 index 0000000000..26e9eaa0a9 --- /dev/null +++ b/Externals/SDL2-2.0.0/include/SDL_system.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_system.h + * + * Include file for platform specific SDL API functions + */ + +#ifndef _SDL_system_h +#define _SDL_system_h + +#include "SDL_stdinc.h" + +#if defined(__IPHONEOS__) && __IPHONEOS__ +#include "SDL_video.h" +#include "SDL_keyboard.h" +#endif + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/* 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.0/include/SDL_syswm.h b/Externals/SDL2-2.0.0/include/SDL_syswm.h new file mode 100644 index 0000000000..5e4454f86e --- /dev/null +++ b/Externals/SDL2-2.0.0/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.0/include/SDL_test.h b/Externals/SDL2-2.0.0/include/SDL_test.h new file mode 100644 index 0000000000..7e0de08948 --- /dev/null +++ b/Externals/SDL2-2.0.0/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.0/include/SDL_test_assert.h b/Externals/SDL2-2.0.0/include/SDL_test_assert.h new file mode 100644 index 0000000000..beba16f5ed --- /dev/null +++ b/Externals/SDL2-2.0.0/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.0/include/SDL_test_common.h b/Externals/SDL2-2.0.0/include/SDL_test_common.h new file mode 100644 index 0000000000..f07acf7c15 --- /dev/null +++ b/Externals/SDL2-2.0.0/include/SDL_test_common.h @@ -0,0 +1,186 @@ +/* + 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; +} 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.0/include/SDL_test_compare.h b/Externals/SDL2-2.0.0/include/SDL_test_compare.h new file mode 100644 index 0000000000..98ca8ce81e --- /dev/null +++ b/Externals/SDL2-2.0.0/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.0/include/SDL_test_crc32.h b/Externals/SDL2-2.0.0/include/SDL_test_crc32.h new file mode 100644 index 0000000000..f0a84a48c2 --- /dev/null +++ b/Externals/SDL2-2.0.0/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.0/include/SDL_test_font.h b/Externals/SDL2-2.0.0/include/SDL_test_font.h new file mode 100644 index 0000000000..aa9286b4aa --- /dev/null +++ b/Externals/SDL2-2.0.0/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.0/include/SDL_test_fuzzer.h b/Externals/SDL2-2.0.0/include/SDL_test_fuzzer.h new file mode 100644 index 0000000000..a528ddc5e2 --- /dev/null +++ b/Externals/SDL2-2.0.0/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.0/include/SDL_test_harness.h b/Externals/SDL2-2.0.0/include/SDL_test_harness.h new file mode 100644 index 0000000000..d2da04f1ed --- /dev/null +++ b/Externals/SDL2-2.0.0/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.0/include/SDL_test_images.h b/Externals/SDL2-2.0.0/include/SDL_test_images.h new file mode 100644 index 0000000000..21cf39ff7f --- /dev/null +++ b/Externals/SDL2-2.0.0/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.0/include/SDL_test_log.h b/Externals/SDL2-2.0.0/include/SDL_test_log.h new file mode 100644 index 0000000000..a581d2e754 --- /dev/null +++ b/Externals/SDL2-2.0.0/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.0/include/SDL_test_md5.h b/Externals/SDL2-2.0.0/include/SDL_test_md5.h new file mode 100644 index 0000000000..b0d4b7b041 --- /dev/null +++ b/Externals/SDL2-2.0.0/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.0/include/SDL_test_random.h b/Externals/SDL2-2.0.0/include/SDL_test_random.h new file mode 100644 index 0000000000..ce6192c257 --- /dev/null +++ b/Externals/SDL2-2.0.0/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.0/include/SDL_thread.h b/Externals/SDL2-2.0.0/include/SDL_thread.h new file mode 100644 index 0000000000..c878c3ab9c --- /dev/null +++ b/Externals/SDL2-2.0.0/include/SDL_thread.h @@ -0,0 +1,240 @@ +/* + 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.0/include/SDL_timer.h b/Externals/SDL2-2.0.0/include/SDL_timer.h new file mode 100644 index 0000000000..e065cf4f9f --- /dev/null +++ b/Externals/SDL2-2.0.0/include/SDL_timer.h @@ -0,0 +1,104 @@ +/* + 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 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.0/include/SDL_touch.h b/Externals/SDL2-2.0.0/include/SDL_touch.h new file mode 100644 index 0000000000..9e6d7c65fb --- /dev/null +++ b/Externals/SDL2-2.0.0/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.0/include/SDL_types.h b/Externals/SDL2-2.0.0/include/SDL_types.h new file mode 100644 index 0000000000..bb485cdb0e --- /dev/null +++ b/Externals/SDL2-2.0.0/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.0/include/SDL_version.h b/Externals/SDL2-2.0.0/include/SDL_version.h new file mode 100644 index 0000000000..a9ced804d3 --- /dev/null +++ b/Externals/SDL2-2.0.0/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 0 + +/** + * \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.0/include/SDL_video.h b/Externals/SDL2-2.0.0/include/SDL_video.h new file mode 100644 index 0000000000..f3a9619773 --- /dev/null +++ b/Externals/SDL2-2.0.0/include/SDL_video.h @@ -0,0 +1,953 @@ +/* + 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_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_GLattr; + +typedef enum +{ + SDL_GL_CONTEXT_PROFILE_CORE = 0x0001, + SDL_GL_CONTEXT_PROFILE_COMPATIBILITY = 0x0002, + SDL_GL_CONTEXT_PROFILE_ES = 0x0004 +} 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. + * + * \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 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/SDL/Include_1.3/begin_code.h b/Externals/SDL2-2.0.0/include/begin_code.h similarity index 56% rename from Externals/SDL/Include_1.3/begin_code.h rename to Externals/SDL2-2.0.0/include/begin_code.h index 33e8e53484..dd1f0616d0 100644 --- a/Externals/SDL/Include_1.3/begin_code.h +++ b/Externals/SDL2-2.0.0/include/begin_code.h @@ -1,29 +1,31 @@ /* - 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 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 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 - Library 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 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 + 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 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. :) -*/ +/** + * \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 @@ -33,35 +35,25 @@ /* Some compilers use a special export keyword */ #ifndef DECLSPEC -# if defined(__BEOS__) +# if defined(__BEOS__) || defined(__HAIKU__) # if defined(__GNUC__) -# define DECLSPEC __declspec(dllexport) +# define DECLSPEC __declspec(dllexport) # else -# define DECLSPEC __declspec(export) +# define DECLSPEC __declspec(export) # endif # elif defined(__WIN32__) # ifdef __BORLANDC__ # ifdef BUILD_SDL # define DECLSPEC # else -# define DECLSPEC __declspec(dllimport) +# 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 +# define DECLSPEC __declspec(dllexport) # endif # else # if defined(__GNUC__) && __GNUC__ >= 4 -# define DECLSPEC __attribute__ ((visibility("default"))) +# define DECLSPEC __attribute__ ((visibility("default"))) # else # define DECLSPEC # endif @@ -73,14 +65,8 @@ #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 */ @@ -101,7 +87,12 @@ #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 */ /* Set up compiler-specific options for inlining functions */ @@ -115,7 +106,7 @@ defined(__WATCOMC__) || defined(__LCC__) || \ defined(__DECC) #ifndef __inline__ -#define __inline__ __inline +#define __inline__ __inline #endif #define SDL_INLINE_OKAY #else @@ -137,6 +128,16 @@ #define __inline__ #endif +#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 __inline__ +#endif +#endif + /* Apparently this is needed by several Windows compilers */ #if !defined(__MACH__) #ifndef NULL diff --git a/Externals/SDL2-2.0.0/include/close_code.h b/Externals/SDL2-2.0.0/include/close_code.h new file mode 100644 index 0000000000..4901482d5c --- /dev/null +++ b/Externals/SDL2-2.0.0/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.0/lib/Win32/SDL2.dll b/Externals/SDL2-2.0.0/lib/Win32/SDL2.dll new file mode 100644 index 0000000000000000000000000000000000000000..c67dabdbacbc5f4164da021e0cdeed189c98dcd7 GIT binary patch literal 872448 zcmeEv3w%`7o&QWS2?Gq=0S1j4CDo~dMoU<1iC~QoAR^WvsFX)bD`vIQ8ev8dvBb^{ zHZpZu`b}zH_&);G4G>EcSn=;Lh(9l-@YA;M;dEy#0zn zg9dn2)8&(Gw(0f(wuf(Y-emT+$2Rz)f%dGkZ8ZatIml*fve`y^kn6^OPaw_aTO{7I zu`Ou2VzDf^=tHD$L4FsWYkQO{x#F8kmat}5BmOkG_}b%N72CUA zwkKc&SlO;Zv1d}tm)J&^Tydu?CtwIz+VWBE-5%wdu9$SwEOu1LKYLIPxU<>tO!|lR zny&CI65}giI$$fxWo0P0c*)}1P(YPfsN>1ERzA4s$u0Qf8`L6bIj}yjsA+C99&5;SbDL{! z*5A7YZMcn_U7@Z1Wwo}ZszsqD?cqz1ABftG^LM<0HkjJ!4*M>)p|2>Kif;?-bF`Ft zooK~|r-RKQuMM3=pT;->`&^+We{1ayBm}y%wBX-lff0B_8^Z%_VgTXWyXSsw{yLW} zaLg_e{QDQyk{yjJ*{?C%(dj8}(}L%rd9&y3Nj>ZHybiP1F;=gy7j>w9?OJd!s){en zD!2tpEg@a-S#TjqZ4>+_qV7o&;rqHq zJO3OwZr4J`<#%*^k?h^9a+mBGs95L!o+x=A`br<)WHr9DVShPua?6Q$yl5-w0ka8> zQSF&M_D@t&N&4h>qd!I+w4s)(^KHtD`OOprs=eCvz#f=p5;CMHvTXr6hc5*CuC4U=7J*xl zeHMvfFmk{L@!^Y*8QAC4*MSB4gB;mLeCwt|%@wl!n#8}B9NQBs1pznLuv^F~M=g_# zd0t2uEw~xP9sME}kZ9{K27u$V>fbTN`-NPa-d6Qm*5Q@{ZE_o5OO7-b06h3Q+*0B@ zTdT{t0?Zsl8?R%cfhPOE^80YJUE~$0yf;-IzYjMTh`i6IhORo*sLkKcz| zvP9k}mG`#F<2S}9@-A0-TT~vui<+uFaQlX1q=h2aH-w|)dr?zhy<;xm6@6)EmYDS) zQBM`@Y>)m&P^SJ8snIn}SV#7gA(MtdvLTaU~!>PsckO49QHjrqGzWZ)}6j`
Vp#B<@lC_ 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

Ki61Z_~7C$B-eV6ZDqZYNkU$zvUpv~PtS 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

DYNozJ!kvEI95f7^ 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ƅ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%0D;{AbD!t<$p-?e@w=x|x~ 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

&#tRPHn%IoKX? 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\Xbr<}$;JOQ83-Anm697=p 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 literal 0 HcmV?d00001 diff --git a/Externals/SDL2-2.0.0/lib/Win32/SDL2.lib b/Externals/SDL2-2.0.0/lib/Win32/SDL2.lib new file mode 100644 index 0000000000000000000000000000000000000000..0a4ffb10f45279a045e3859b47c56fa2385d34d2 GIT binary patch literal 111002 zcmeHwdz@TFm46i=A|fInA|gaY1VkQr@ena@5}1TAGf5DU(3$BZ4U_4iyC(^#h=>>w z5fKp)5fKp)5nYyLS=VJ<)^%BzWl>o~L_kDDL_|bH#NYSS^HkNn#q`{n{pYv&d`_nC zdDOSww{F#`sy7^7YYnVDV(SB@g#QkjcJQ==4?OgcnKMHEf#z}Q!3R#As(zoewGdlK zA%1YR5I?$2h`XN^a^p8Oy7-qSB>LnDnpWN{B+;IRUf(aIqHp6b=ruQK z8aYfzMc3djsPl-Xm#h{NB<}r=rl0I91W4|1xTY-;21wj@kEWl_5&|T*-e1%9w+l)1 zl6y40>ntHb;%7()NWSYaOZk8pH?bIU4#zr@o+R6yXzX^?;^B&lZwst8FyB^isqF^tMYh9l8tT zptnucbO`dF=x|{O`E)qZ_cgs8dWsOn+d&()(6sFyLW0Eo=V*FziV%v<#$VvS8+Js8 zKCS7n6NChbr;zW8F2di7ggo(dL)+so=t4uExK>D_6Cc*JVFIC?wKbP{d!9w zh<=B%1IhY*io}yoAReIKEmtIG0ShEvxK)vqR|`erdLfB6+f$Kvz9op{<|rGY&92h4 z#g;-ULiue$^pqm;LJz|0K^TW95`X!jAd;H{k4U2afW%*qFmwz4f}Vd&(_fG$AXy*L zbm}IQE2y7hz|atrkT$oo}d}XKcZ=mYMOqWkcz&Czo3l>muLg&xe(UH?N&D(@$qGvSCy+%l)Bd^r7@ND3Kjy_-0+?kMr=A&#CAx-l^3vM;E z5Pw12Aq=8d?QCch{(?^1P17sCFC@`!`)k^Ldm)K-yF$};N5CHR$`dv9_X|n1><~@8 zhY3m4hx{U1y04}_aXTv#KSsYs^!v4j?!sTt zk5Rus^0a3SQCWai^ceak{(^Qs&k%5T2JZbkDv~=-!87Q}mZrmyH$?A1JtO+)w-t%s z-YAIVEa(#LXy|o&3kedBp}!@11bqugHkWJKbt@r3;+OALBzFalq6hF7v=Z?IiAM)D z{RVA_=+QeB$@imth|ai2)BBN6MCV_xX^;JcBznU_L$}~B=zO#bqGN8=)I|9cz2|$H zUUw|ARR;}?`r5={3Swp60Oo?Q%wabJg+SJnYg=>W*y5fFK zUzmqy&=ngsU9(n5qHj#sbi*A&Dgy5Yk|A88uV1X`%LrQ$;`3$DwTK(h*YKO@8rTzE z4Ia_8sH=)l@2&-X<#J7zpN)8fK99OabUm<$zK-%Ey8Ka1*MA>;&?S3m`YP~=KK&g{ zUj-)7b+A>0xL!wuI1pV8Ohp2JL0>^SiN18HrmLVsgx4gI_{C9*tILdf9E7-nR?*pec82dN1NgwEI(7@Cg1pa;<= z6+!30t%Y1XPgBo57)OE5Lq3DV!w+bB{Cb3QJ;vfsX!>X``d`q;5I2x`&B+&(kE72zC5*>lMMf8a|nm%x*kVJcdNA&WYG`)H~!U4VFMort?EhNzn z$V;MEEYP&gD)2#DU#aP3OHqG7dkt&)z~cxXwAVwL_JuA;{0i?skUVFJBJsp(q3BO1 z3jvbHJ+EmK@`UJvC}*OxPSSMT`H-KFcO?2VqUSeLB#$^9=>zSvou)V6CZwX}_zT)^ z4^1Du0pWo@guEl#7il9p6XiklA;g#HEl4NP*%xTq=Lv)hI(t`5`w$jr)q$E$1)u0G z-_-Q+U4&G09{z$pu&t)E?m{|1Z$h|4drviV75-j@Jh(@ZoQ=8&62C=TAbR31P0ymf z5SzK!j_ttBJry+pGx{;Lye9~Mr z-01X;uIf9j-KnqRs*%9z#wr@`*wKz(EGR=d$0 z=5o$8TD|r4jRG~#j`Ws{u3J@aMS)svD>ODshiaYG%~p_Ch=OO6UT=M*+3L)0x9hD= z6x~Fm_1kr?u2pz+dh11UvP4Ncn1!|B!J#l6g<_KuXP4q3L5Y;CW_OzF8Uu4@_wmRv zW}vgQ6J)7VQ+yK#WbW+I!A5gltFazM%Y#K65~+>3H;F7*V7g{1MqJ+*Q^lBqi>sZ| z3F_Y5(N?QI+zB9j(?WEM6ykKEW)9R#(`ltaIu&zCZC$-EtxQT*$Bfj6RSdZ@W0KC? zp=P_TlcB7+YAOptotGH6u&pSKdtay48I9A-@U5I%T3(RB%En4adueU7G$pAlwBV`s zy1Lf%GzU&$5#*|gh(dMDLQNg!vf-ifPz!_-g*6fb9vy1iQyTI*+ZSi^7=reAK{8p>k;$e6m zg@HmzG(3+q<_^_stwe`&Nh?t>3?*BS7X@`xLGjLKT+&)vua78R&^K}}X(0=h5>Jum zag87ts{$tJEEpPXuT8??+)yhB%d45tmX59~iaFy_XiJ+zLkT2flFo`+qoZ{C8|&)L z(V+RHvcQ68h*Q<6U0Re_#-wnlR#1T~Xbg3dK~o?hZK@%~+OdSRXAcf4?G?4oz*-*9 zNI<&t>N=AW-AF*XI<6|{uz*w=ET1%c>uVYq(zh(nH_2FH!X4_Z4+OanEW_g(F|1NC zwPI2GNQ_eOuIRK-@?oB)G72@+M^4V(*k~_kHP`iZT8-f~Jm+3iwJbyXSCC44v#T@sd8bM4p-}sEsj<<4G|S=acyKIn|WL(4Z)Zr&yHNSXkK}IV!hIk zUNi{ZX2Sxe@h+mUXn3%`u{?lKD~$mSPRp&eG__hbG8pyTVce`dwKO%j9MUNi+S+3E zjWq;@wN)v!pWW%u*kLe_@08LolCO-QJ!@%dg=ihs!~{ZP;FK(~S1Jr+PGfj*EG;$A z%Y|g~Dwmxa(`u%nsWEhUs*E_bQ~ho-0tkzf>re>jft#(tBkS$XXe$^vL;}*Kaq;Y- zp?TB%?2g3D8&9mW z&;qYZm|XxOB;xQQ>}MQzRJ=#jvON$B({QwrR|M}mpT&bHqom{gV` zS)Fn)ui>qe7O3OLTApUiL%V4;Pn*Abbu^GE6#MW|m$Xe#!?Y2X6KT>bS?0@IthKFBQ)_?RH+gLZ@Z+vp)A*!$m{F(UztfL z^;W&3!(}E+Qe)L;)Jcex@oa`wB8{x#%E?T8 z{bWo+$=GoD3+5Yav*D2EGNskD4R~*=BDov zLO#=M4mDe)>Rjk;v;$L_Q79!V#5PrCOrtZezPdI#RID1w$YKHNa~dq?l2+f^=7v;@ za}D~^#>V=PuEPcIfkaAHj5&XJbX|XQajktyFhVWUAZw-E-;7jvpHikl)_AWp2ht`N zut|^dBUR&EtF^Q?RPTg~sHEoD4%Kmd?NYFgPnxLPEM-pQO-dB3t&YrGs(?X`l36Gt z3#^ay9yuq>JI(P@xa)azZD2h3s5OPwmP6M1cVO*UB*!Q4z$ncKW5Rh|t+%!=_-Zeb znoyTEH`KA{628%!&_Uz$7a?0RE5=6nt$r5>jPt4vr)~8yf&TEm_*l}(_R;OaJ z(|x7x<`EIC6wXYSs(AZyGcO@+{e*hGyiwmkGm1P@3WPz*!dOwgRJlZKACtc3>duB* ztL|mKA?Spp8WBoq-q{))>FeQ3fzOSN16LqhH6cq*M$vLi$oFX~P}NCs0@5|})Q;!V z9ZQmsX_((P+FD&32x@5n66jC}C`E%cX9xvR@WM~Uq227Ek+n70@k-!B_0rHv^^>Jm zUP@N_3%wvqA_3{5LK#ILhR?$yX=vr+TV&;>p;cktc`znc=~2FZMd=9zq}v0pzyi&H zO?tYP_Saf#@L^gs&tIZIwkRzwjS4apkvN zxJf#jK<+IOyFlV2r!8Z7U|HUy!ORQ24dPDTfbm<$MbZns4TAFQg6Mf+U{jKN2+c@H z+m+?KR&9f70)@rNq-2FKbc`9_N32MiV6i&xErZxFjRcd)ymf%fG{{;PIpa_Z9TAMwW&>CgYM8eei^y)0RV0 z^_3Hf9gATs4Vr~U0MBbI4tM|bDiy`_I`HgkcM27~L}{b^u$i8H+EA$x$4YzVA2c(T zYo67ZQ=p-FR-lX6a|$#xk2F?ba;_dG)v=sB zPOQ@Ksa210av76_6DHV%LrkX=C)tD(=){RO;n-9glQ3f#ld#MPeQj-|KA28D6-miz zQM<3iB9@Rg-Yhz3WyDJtDEgETn zmQR{BtcP(8{cI&cWHo>ux7}D1gz0%&Bj{2Gn&vHmAFFvx^fOtk zuB{48^s|x-HNzRx)tW)FA)1o+uNw78{E={uQauvCjZxsLAl{avq@h1mn;s26h&2Rw zR+3Z0Pu8}2CP|bW^+^0id$6%4+<53%THYRsKD!!i!y1!7&dG*L&JYbXFy860yJ@_2A93veF-^GwBj*+fwt`A-|5NnpT4rhwUnm8nd zKLNfUc>*klq#Fj>k<@amG>RCBUCh)&I8pCd7CW*haA!Z-S$&9O_<9$xT{t0*G9#9e z4~_LrT(UG8lVXHV6c|$B6B94&`tc|6LV{ub4P9F2tfQm{+ zag6n_Dny?zkZBgl8=Yp2+v;bM3`G+COcHF-4UG&#$zn6ipOdl*F_sN^*{J#LqiH#0 zS?e?#JeK;IBuETe5|>$yu?zYL*x5dU?1DKBWoP^@)$h?XSYmn9R8GzpPL2d5@lrga zkroSYZ38t-p@!`dv2t7!#;{}fjDwnID?N0l)HgB}!%@=V5x5X_Lb>CS#`?B<^g%Et z>FBpUCap_nsJM(Q@E$k1?9iaQ%fUx zp1;NNF!sGY^SOynuM*f;({e-PngC7p;jh@FhvAK9_|ygL5W8sZ%tydWP3R^|JU;+Q zq#>4{Q}b3H%S%Hn&-Yd|jMMXN!K<_<%7A_fH+{JIsMic1?SO5N2m3H?4xKE> z%yO;PoEEk~pu-IYV5GzYyQxY|*qbxM@MV6?Ae47$y>PuPI zWEP^1a9@30ZDegT++UN3Sb7Q#Oq!UCEbthVtdC4AG1^EB8SqkvrsJ|OBNc6B?FzmFJ=~&(vte2lv6H1L0V@4Q(gtQeS-p0Y0qyzu3mRkQ@Gz>339%3vZZ8%)? z4PZn&jFF=9=rs$6+^$^5#VI};N5#pXjf1MDXX@r*nu-S<2`D_2Rk3a)FuHJ)YGGnO z$f}_A6e$>6)Cq0ZXpf+aD5!Xm*x1d}`UMRzkc8TEaQ4Sw3}N)G%*V?JXqGazL99b* zh*L1J$<$qYzzgaW?9~ZGLB16!7$lRW<+eo%)|NJ{v^yEw0tI7h>V?jIv$ZjZbCCks z`f8?a<2)*s7ooFRHE!Zjk7A|oMfGbTv` zjsz<9dZ^gbSkgkG57pMh{f;mIo*$mJTeC2WeSM)jfyF zJfvcc$t5K4@Sq$Wj3=h9Yl0AE7zHwnrWiHe2BX8uMTenE$k7W(YL zu1LYyqS&#Qvej6H$rqk3ScM`VzcPKqj){!Ee&u1J33EGf8AURWV2ZTZ3NW!eu}s^% z&OKvj#l{W^?b}crQJ&cA!x=iA4WZPdg?!(BHCQOMSOBu{fdOe-fzib*0}d`J&V@*( zEbKdd#o_|LWgWH^k^Z7KxgDvGyxH)h4_9pqgk(cI@SPQ}FOfj$;yc;`XzwzgU}SkD z(=pNw#(hd+L>DXv+eR8GC^YDrt!Q(afe#ps3%SH<_u&Y^p*oka_`xQXlO+vZSIk~s zaMGmZk`^uI;F;%;WsTz|r)l;kr_FGl_SHWS;_b2EPRI)4<8}Lt|v)x z!Y8G;c_nC1Df(Y8#kWB>y+(?|Mx?j~^higF)i06aJNF8)?@xp{d0Jc)dK=rY)W zHiCLSC&f-E*C&C$2g>U9IS6}^6gM6v#a;M22Y+{&C&lz5kv9B&26W9_qz%t!!{&V0 z%*6BR`M?6*x&ZYMbj^0C7q5a1Xt&c)rmsYv?S}H%U5YF4_Xx;O1h2mz@m_{{*(=3E zeJIbRh!_4|4c;^OeGT~AEr;&0$TvK13)y$^`!?8Ze+B9z^7q_Jq`3P^#P^+2T(%zN z1F@tgVT{G_}zI}h)aKt`)7VB#JMkr9_R(soo}6kI`SIWqF(KM9O~MS zg;@K0A?^Y_iQms6{+mEOD^O2C=j{wz(2i6m@wWx++fWy8MEm>pNAdT!;Lnm`%8pX( z{W|=84DIO=)VZbZFXrqIV0^>JA+=;(Oy&rAv3@N^azt^9Sdb0=e z^9@qm0-A&8TaQ8d5zhDCgZ6>2A00-zKzE;lwmyWqg5Rt0`zZWg4xO8J0S?kX3x981 zEybN{k@pR>pEXjf!td+xd)JeZhoEOcyMez6bkRD*9kdJL)%t@F7yem@6Khf&{xs@3 z`iy5zLLBhC34gany}xS!@mYm(9F$@+{Js)@PsZP=7fbQnMX2ka1m34mzW9AR{$7Z` zTO%JHpN;r`2<>clw14zH7o#s4!r$j$cjBi}FE2qI`3&*{wA-cVi$ITndOnYOfqXyw zi^$WffCZZQCG;trtj(L-}k%pYR1K?!N-%jK3T4ckMN()8CNdjvMeB zv>Bc+{yOx(jBr3FUyHx6y#xG{uSUM&`A*Q~UqQV`*w+JpEyAA)n@92def-`FalP!T zNGsw!6MxrUhj2l6fbK*X=xD@r*k6ix-hucE;2!l0^po#Joq8YY=qU0H`Fjg^&*OP2 z>hf(bLmA-r-BS=I^qxXK4dVCutw75WuM1GWLHFbLa@38xKZf)_B*b2*=RNqlHR}Al z$A!28cMVJjwH^cyG;cBLSr6iT9_j~lu7}POOQh)iD8fS+m!ZCHLfLQZpzgHM*6{aQ z{Jpm&#bf89%-)E;ekY^@^Z@#mn?8a(2mfr)!e0q-IqL0J(Aob?lo{IKZfHkGq5fUC zqZIdnzs0MO_C1kz_`AoO5H8Yi-zMbO5vb>%Kz;ZCe(#08>E%c#bZ&eF(zXrqeFrHP z;P)#0zH)0RmLh+Kq4zlSAHv^N`$8A^OU^+%cmnUDKOrxVLtGH{ybnro(pl)U@O&}a zIc{jqk9Pxh$zZbkkiVM!hy92tr;_vDBdm!rj zuBW0;fNYnKqYOdYA|7`E;{v2<>fU&dfbKyYHqHh<`h~j?r%kxq;nrt_SnwRmtO|ImoMzpgx^}cp;pr-BTtt*i+`54$UDVGC{D$0G{Ed86{=NJc`LFUv@`v(Q@-g`X`GCA%epmij z-Y0)9@0QQW^wq3 zQ+!aIA*PF|Vt+A9%oY!eY2qL;L(CKhW3+LoxJlk6w-hfCzYvd#W5o;daXD4~Szau@ zC_XPfD?TSK7gvcdi7$(*#bx3O(Ggz|7l}`c&xlLKCE`=!O0ln4D?TAFkaDv(iao@q ztc!cntX-aNxnvICtoGEm9LcB%N^v7^40RCatpbYe2ILm+*xiZHvMJZecgZ2SLN1s6a;ZFC4$Bke3Gz7k zZn;*jmM6=GJVm}!9wisanjDm?OS$9XN{W{SZUJ&lU&3oAhQ@w6(eAhC!ltQFUf1b4=!b|wJ5W_< z_#KqIomkZi*3pJqvcPn_E_pYVZn#C0=-Jhh!X=Jw79FB%hjT&AwzNhp0P6=)!t6g!>rdj>LP zWJG}QhlGaF@GhY#A7;jvD$OB(ByVV^*T+qQQI_@|Lwix63JH954PSHt9hJT3({Xlm zglJ%)?)nRPkzVmFSO_}3PRkw5VIXMZ2D=^1aZ|rED{>obETiC_zfcsow}qm>Q_+ju zs}pG`I5$plQ;$7kZ{Q*~!lFnR9;*-TvMUpoYS;R$;7WjAnC=0qchn?;APf&XP0ZP< zCNS`0J$`Pi*V4YH`aUefg{vJEI@Yxv11BSz;}tn8)Pj2?t6silIljF}(gacFP6@t# z!Mnq|ya97C4gd;$h!Ie+8>tgSG3we6-b9Q!5(b%$liJONq*l?N;bu4(IJ#`cZ=4%v z1sE8)qbIfVW052*0-JBO4e4$wFH>8^7?3|GO|O4D91`eLjUsJwKM%CVaITlrw->-h z3>3;L7Ot()RO3;Z9UkWgnQa9jGdXy`pqi1;81|}#27a5J;hO-ha@u?D=m&jF~5< z)8y_X3)LMuY_z8t=3B*Hvq3>>fw@NmXBwF6M7#*$hqr8a5i2GgjIUSbx$bTn@m6S) z@ogqxX$;f<8f(X;+bPtg2R;-(meI=eOobi}-$I!>JXe>57m%B%4>q{~B)O&K#c$Z~ zp_xlO)GZnbwLiR{lP>LPZF`x5-+&FL=OW))%G-fL#PIA z$G3|XjJ~kHL=8G@6!eoT*yylO6E44#w0EAm`P4{oou~^5zo+ttY5XC*Gt`DKfREI4 zM~sp(|7?2pQ(yFp-IK0`=9E+IKb5e8^FoX7Kg_sHSyAW`sX(G*bTp58{J>p|*tYVs zhHqK%2cG4ldE+ycecEw>`>12gIW=3oIFo&NF*d(EfyWP^{@aG>7u`<~iS@UYE_fzN zuEr?4V8UN!#Utc9E*mCs!fz=j;r$n5QpT8S&bcaQQhs_RiSN;@IsY!BX$N~Pxx1_1Oc(xVOaHz(zisK%6#ZfO*rsSUkEp|0BVY87_aICqK`D=#NV|)v-zYCbe z>EXS8L4$rpoxDB>4|9{|=i!sue9Fd0=kW~@${M?^!;|d7GwJ;4a=q$A zJ31-P+J)!a>4V&?%%86p+#;#P;bp*@$2Rb427QT{^EMfyl!hP*)0&Uf29qBK}upoq>QJkvu53N|_le+sRS7$mAa@{qwRIwCeWWm1Pr zWyjZ(G#A}OQ6#`Fi3B7`B)}_*L~=5)P6`d+-2|RZOB?-L(WG9%=9?G0MwGvU$}SEK z&Ktl(e8NF^T7h4_gR0t@Zm$NX6e0C4>I-YbgX*4XBM9>rngzpA;s!H*#9(V%cx3M% zdg9l98z4Vp1_gQu@47Qui*XSs)dMrH0M&5P3k_UVWQ~y%|4*vmTzGM#LB- z5s6PpFy*5^y-W80#j_N^)%t#x!n5Mt!A=ryNp*r~>cR8f4l2jeJ1T=XCzB6OIhlNL zl5mQ_vCZk4LGXUs!KtwchWMhAv2Wo}AlSU2Gt$&Te(<4Eh)y`rykKVwu}V(yFe1cT z2k#HvP!fI4CtK`|E|1X5X?$?3-67b3g)#VuMYDsDhvGr8)(M8idPrZu(s>k&skLq( zp!Q<=4R?T)PPlvIgGx0i=Ra!IqaXfIU&}t#-J?6jh_X<1$ZR3MRDLRzak9y2;w078I9t%#ebs^i4k2}mWIY^aM{mFm$g|h^Shw(NF$^2I5sw%EK zM^!(W42};)B_TWWbTwubbVzH=jn<@~?&8#JeJ$sJzSh&p%uS*G8He||sjcE8NR@7U zrXn$i>^GJ_RgvGe#ZU93-*i$anc;VE2x!|j9(O(~yWRyZEk4iM$Ur)`l|q4)y5(E_ z4v%P6EO&ySdU6M{wh@LqwlzK8kRNi%4@cyOat;l!^E>^apvXvdB&ou~Z+6&bbUGqG z4ii?v$(sCpPsmJK&DoJAXm$Ri{~aCy$t?KUkE3)}DA@$Zz;^60vLp!()$~Qm&eKc| zIE~I^3=UCEPFz)|xh`6~^qAiMmGkEJ&Fx*ZwEvi1iWFwmRxVlAg9)%$$~VnLo^5`E zUgF;th>}Bt@TpyTZ=nNUopY+~{NZAC-E{{B-ZzdZ z6I1u7o*DVcc|no49Fq>!Yb`Stjkq-AM6blT)?coeYu{ANBJ`yT1=gc3^Sw)jg$D&Dcm8QdB=ZiB1M%K>K^`b{FQX-g z0=e_gi$i4&Wr=8Q_IULdzd$MQ+lxbYLyi&wC8Ve{RC@KODov*y*u`OLe&E$ttP*Em zE6CT#Baj7`J&2&dJJ6d(K7vfp zYK6zL^ND`1X6HzF8CqV@vw+Dw2w4EkkFbav27tI zIP|vglPkZ-Bl12BtRf%8KsNuy4tBs~5p(zpY#~B+v~V(p^Li|ir!5MJfqCGe7~6(^ zih(rnRtzM8&tf3K$5dHDAj*JoFUBCm$d@sa4e3=F-uWyp3umkFDBUPiLi|1wl?bFv}3z!$SfA#esNQV86UVuk4HXEf)? zM>8-Q0%BrMeF43Q&N|s%R`N@)-?6X9^hq6rZ5%7ZnN$)q9bK;d)=vfUlOOV-6OmLsq(0 zQ7$hkXj>M+l13DSUGy*u8--FFpHy_Iu@2s@eiT@S2Oy(vX^Tu?^%lQGHVV@Eq!zMK zZIx$gAhhk0UdzfqwNzSAq}I4d#6B&x+iw_fe8)nOlr6s$iTxr>AT^&yeod!HS{Af1 zE(_ZEwuWIc57$sobf!7?b`7;jVo!t)B+m0Sxt;~iUoNwuux7*V!dRbZ(7WeWr)p#{rV1!ln_R)L(Yj~3>wU+O9_j!)in zIa}~8>15?+pjt0mkEESsl5Y>qHgf^isWP_G{KBIGwLM~FbdoWkR!Ay_X2+d?;ntl$ zZX6SOjcyE2r#3du3zz48EOQ>Zak%lQSsN0Us$bEEMW|tXc8h`y4|vsP#(y_fH(tCk zoBQ$>%P3uGy18F(v0bJ}nU8O5OJCm1)3-pZ{e2UG_4+Lml+``w0UR6YPnjY!>kZ5; zyiahzja)GTnHtQ7x$3-x14VTTByPou4-JNovGN!WlzZnXzu|zVyoX~Bt#;tJ!If$` zhK|GUn?EgOkw0;)Ha#&d_AO?1%){7o^-^j0%pB3UAn-XZ5jf9dCU1w|=R7Ue)z}W~ zX+gj6WXI4KnFk*3E9Vk=X9s@CUT7P8(p6eP@dS;PqAT>C%4w)1jwWT8rS@7bv`Qx- zn4Mlo(ay?+)-NI|o?u}BWUuE#co8uL<=LDn9M&YAY2m)nKAb`i=}_$bq(i=S2no5?XPR@J=X3!x zU4)}W$YlM2m<3}IViznfz;TclDjvOeHIIY!u?~32%mU2OZel0rzy@;f>KsVogKZI* z^S}-iy&rbKPQ0-LDZLB1Pj)QKMjFN?k#=6%L3r9%o3ot9b^#M#TG4^k)_dD4J0EV& zYM;{XZ?e%W`8M;?jQzQpZRFL>CDyk)<)y1FYB=ThKzI{0Q{80*%@kbQ>;gWuP2(fw zgK*5W;(M=eo?Oo@uwWkH9wN%S{-*Md55n}`;mnNrh;wdxZ88)I{l&drW z+M~6|%J}ZZBD)G3)C%Q4U?l}e=#;(la~vXs=!(6Mdx2c_U@0Ojy{ma_=Dglx0o8=m z!$apJI^yz(LYR#xq&%XDXFQK^uFRJi@GLQLC!}`sK+;9gM zFA(?~U|J*azX8j6(z9UP?SBC;cHV)pa^ji<4|j)7y>Rr(oPCB1AK?Es3m=mPOWxOClS4 z{|5zVCS$V~1m$mXiDzn&m|&(ho``jFzBiyCPK8sh&N!ZOb%N6Smr5pGongtOtCJT^ zsydvfQA(sj`xB~5| z@XvN<1>>mw73|sVvf#X6Y^!%%c=75emS*<_Q&4*_{PP;KC&6>fevF8*((KBJ*-d=b z@>J<99B>;|J2aSfd$6%4bdGMc+at9B>bYMZ?ujFaScoA!Y)g$C{PV9#z(2;-@pA?z7A zkrmq|!t}sh+X_MlXWdA|QTs*$E4_OpVue|V0#`dpLM7Ty5^(&kl8Bweq9CejpGjZ` z)Ci!{#Mv}~j@o$=bFlv;VvQEDVxHQO;tk!t6wbmKHK9|4*`wlhu*W5;=4QVNQ|YWe zgtAm^K=N$1cf~W^4wi@&77%HnrM{oGuIP;`{R@{ZIeO*1+5NKxG4~%F8aiN#{&&!{ zgQp#Q;Gu`ioM9N|&w=Le^h2haUngzdBR3cO?DgQWTjFYvt%Uj~_aCgU8eOwzpMDg$ zbwS{!hw$GlvE7{g8+aks_MB=ZJL1RfAY4(S{%wx`XNd!EHF`4*TWpOVxCX=N5r3AL za_eUJ`%0YfPye>EiF&ixVY`=tL4naf62ENY_KO<>t!5iTohf_w?lYxl(UPN;H2QBF zJd+^>AaII5{n`%yzeN4A5I`Sjt{Xu#U$*g+;;*<}NrRC-{iAqoCTwbF;UW#V`_;{RBSnr``2Q}3`3=I_Mi?O5`27obi|{hNM>seV&VLPtTZu}4x5 zwW~_kR(elixHHcdSJyq^4BI6}Si1oW_xCs~ns1qlZK11b*i$!dwCU4|Q}!C5ZN|{_ z{y_)Rb#0tJvlxfUXmf|d_9Qwe`(v#2-gOmG{=E)JTLegUCdDF%?o(x(ScJ6`uwD{i zVHb^qu|LL~qUptXw=+<-bSQS?Wd$7D$wsN6oO@}4LmND8O2(0MZX6J{sMi8(s}PIU zV5=Zy+V0CjB)bvSCCmO8b4g`#aO)6Df6`Y;SEg3H++mT+w)!TwNpXl{PE!VFn*c|B z=8qpIQ%Gj@#+PAI6LgzX#ilch#ep1i@cHdKE>ia7lqThTxIY`?D zNc0A2yZSJ(ZTM9l$!(Gzf0||-RNMpZj`G?*MKTN7xjtwO!XjbL_)aqMiLOP2jH=KRa_xvybpervo%7)K6f z`ly{FEVCHv!0eAPr|Zz-I!|8-uZ^(m46nuLK4mjXYT+A!wo5UZ@oTAoSu%Q>0?gMr zOw59XCk;42`(w;GT9QT@bL<-9;qU?*e)qYV8-u<+Leh(|6|gcR>)k>uz2M-W?2obL zU#=J4Jw)k~THPBWOnbhB&ByNRNv@~dBSiDZA2>MsW6b4O z(*M(_=Zz8CT6PSE#TiHXO8VwE0dda=F+N(O0%|6mZ;DX)aUJ7F%#9cJ3K8vEoddH! z#$1XeHT2EM(>E7lDfee{g1trSzASTn+TIbaUaFfMtbIZ(v+_57tQjTm^u3Uu`xasG z6IC3n{W0cJ%#3K?QiNKyUn@x^&0y_k@xp^&Y?54WI_9)xX0YDMuqJ2*s|1bacK2s! z*g`b!6y;{G4)7RQUoj`%j323_$D}!!10$s9b>8(iY3}WFP=sYS;f_BKbEAi;5n92^ zuItq0-sICFyrfg^9xcC7R;K?r#9^rep2m-n`SLi_VUV|_-jVNsy03>Nb%Va~ z53@+tr`hFI_cdaAW>)ZRF%Fw#vMC#L>16uD!x@f0F3Tc}BTbo7db`8&M{rd@%6zjO zks?*ezf79m;gI}EVHMJpL7K&pD$g6_-o~>zQnJ8fQ#aMODx^J_Y z+Ax=+B-1=yr>CSJr}e6N90|MZeCN2Pg`D$ zt51P&koL!z`?%<0ULw_dU(bl5e)Xk;BIoR|1UF_(5pKYSq4eBz6sPDpuYTGq-^e0w~BtK9C#nA2S{2Bfk+ zsT8*_IPKQv^*H*Il39iWfL?oX^y+o3q>a-Ue^oKQJ(brb+Wr`Gj%Ql-Ko%1p@an)F zi`adB=lrh*i?P*#Ipas1SuzIL2RU3XM?_Nf*>2-U&ZTvAF|s;zrvhS0TcYo&HN}YL zIG+lbCAEpZHr6`KbZ`IUAT~InKee`E9m@G5oLr1(4uBqiDsx{srzDvAAnM6M8;a2? zr!DslzK)?K2WGnj+8<->^KvtX!x3V0beK88O(as2BiUoUEkM_A&fNUhNQC513U_c_ zkIH6b-c_dtc**JG4%Ggbh;nOjOncyk1?WCEGpTEHr1XsRNx|%-nCvKRmpu1ltT~!1 z#nBX#9h2>#+>fzh=GKhXhnRFY{P^>;&L$5`_+ z*XmE>n8C657Nz?UTkbt{dWxsc-K<4;p=EPZB*hBGSk4GZH(oL(}PCZFLCgoqVuVXj4= z6(X^lAjY4v9Nq^D@G5&Il)PDK2jJNZ4_!wDWz#s;zA@)L@}U69U4mgDTtk=$taD8OGsB+ zFi4x)vDTSfIes)m3~oNLINiU!bBN~^AllnhDj;TZ^Yq5gRmDH(PAWhfU;Ib2R7I{z;DHZsoBE-M7Q(C0{1wPjnH(qMLpypkzjVp9)d@ zK`jn%tofFk4ZE15B!@AMKV`YE)=!sVR(*P~pPpjGOlGwJ$V0g^hxecb8F zwTa6M(AZsBv!TbN$x1k#e5rR}>&&>`OO#jUO-5?!LhA?58EIxzZ(J4zT+X zZ>HT{S%Mh8TrKuQw7V}BAXY@nr0*(@#!MiZ}ten(Ilw z$`S4HwJtmDkFnO6+^ooT2~xE-pPNzr8pl$%0os&wUng_3kJob?cEjN0pnW|?Gq)C2 zK+DWL-oVi8O^6kcO1${UU;i5%iQTR^ezaU)`AvqVy-eASjSkZOn24JHHwmITTHHdo z_xf0|a-*>uQ!IY3bU&L!TiSrlii-=a_X1=_>$inS;eEU|Nv<`FHEp?f?Z1YI@fE+5g8AJL6FUxqTZ6}q znd`CtEyRqRRW0OLb2PWw{k;$={6OfwpU$*`e~*yr_P%7BoUUt1uJ^huMBI)bFEr3hi zSdnt=?gt?fyK&sXb)APfydM_fsawn^2k%Ekczw8!+~wjp#wjHwN2}X+7vkZbie{_B zE2d5Dn9DHpR`{P7bJ$#tZb4jH$BdR~bHWlFV$tPa`aK8&~zzl_1g?KKFaX z_Oy9Rnj2htx^LmRclgg3&g`L1V|jg`0#dGiJiw5`%Pd`W?7n_va_~Whr!OI^fK$?g z(8>G{#W-w`XA#F-2Q&TR&l%1laxQAu2P%H+XS`G%W@w8SA6KDH~% zX6_)n&dc2U@OKWgjirV9+~zP&6&)JlPA%QzWybPPdAz=`0pJqYVV9lm$3*1o?_*55 zzPqIlkgW7wThb0_CG%;9$y`lby1E}f<>ui3;L*q-V$tx(XlFLw%j+wQL~||h8H;D< zKB~^YTDr@3TCRevf%taOe`ZVmIf0<<}}+sju@+t-Y_ z^_7eirl9=(T!dEf+>+c}{PP8P`ihqD7>Taam?^)%6kt|E%bhv&LJ8VLoXC>P*}sT^-XUwd+^`$C#K=xk4ewz#mywh(szcFOcMGDcf8-0omkU!5;ZcaK=|O+Y(@H%k!P zdVS1iXV-YSJqDY{cvV+cGUJ&oim)c)jFU`Dd`W^inJX+?7NAj2%09lkF1_6Dsh1Yv zslK!lVkSSgDnLa0V{qN}qq*AovKX!6YEG_a**eCmd@4&kU(cx%9sOuJx%g1dw)-kJ2#_Us-p0cF(qHpF` zawMEkT&=`%r%`O@kp@mtdue@=x@}##ao?*FocQXxZqah7+Mc6Dmq&DsQ}RVgekD6_ zoa$#*XOMQ}NXaD*-KJ?;$*jZnNYkr5(wgzth1|O9P7Gmg3+`G2wF=|^-0bRW7}7kt zR^2D4`<|g>>_%%9J2RZBXJ_Pm317=_Fc{SvoF<~z%giS15@IfGHJT{1D*J$PbGxr& zXw`O$<$Cg68Oq{%yIotuCM&wH8JTwb`V^_cdGopP*=`J}x8AOIOi4BPtGDa4(OkXUgP~!!!z!FBR;9-(nHiyTao)&~ zR@7P*Wza}IQg~B>gI$Y5Rs1t@``7ofXgHa4^7gO4IYg6G+*P)RU{Dh!o z#sY8gXd9ye^@Qf(elZSaH`Y~}oyyI+zty2N;bXEWnJDVEHRpQ4{Vf)@IO_>1_VL(# z9+uR8@-{qxA=yd3N>~{$i32Sb%_~F|quboeeQ6z(;8gz7%6zF#wP?zFGD=q0WtCek zoR%WR3F{g!R|}^*yn1~^t@~7|88b?1A@#vC9Fjj&hC1K==HePU z*SEioV@!lkL*~tYxW(#SK}$wh^KW++*DH-PGVkKIhiD6yR%uI_Uhs$rr!iD%+@5K* z?+B5Ctn0efX1-fzIh0G?DYJDW>zVq49=VoXId3MtK6K^+z@Bx z^hrw3JdV>ddHFU!#F?~wTM*(@%eRtMPda_lT#hQx|!xHI4R!+z*=R8IJO3>zeE9{f%|pVXNzOWsr{cNOa)X+@X4{!g)uz zF-lK_)EucaznK|3EKZT;Z>&-WGxcIgh&8WO+fdb;FEa;oOfec8zIIzTa$h-1Q#5rw zvd_w{(MtLZ@{~BX1dS!G`w>~DAyzNOziRrGRn7^`%M(I8EZIzM z?Rm!~}CPYv;-Yt$OXuc|o2O;^~7z&GwBds~x!>wB|9X+0AaZ>#b_Lu5vxv zDvyRGOb6Cm51V|~?IPFa2N-6j*{b}to15z!v{Wo2ecMj7JbT4R`o$CYMfGOc($$EtiQPj1Y=fgvr0i%O@1 zeUC#;e#uJrJz`19==_q69M3N=8fgDY?zZG|W4O~8X75DaiBM8oXbtuB0P}zAeuDQD zqE^12AT!JM-UPAgZ2>u-!uK&WXlDPraJnESr@ zK#JGfGrvOH&x}&eVpwiFa5w?heg9T6TBh%f4@P)cWSQg|dUlF9$u;ytDdHs8&~rGV zI*+~jyFS+&(Ykw>AVDSvd^dfSc+KfeCo{l@%ahX zqJd@wFYVlT?c)j7bOy-2kX9$ zWP0Y$dbH+90a(}VtYn-*C+l5ivHE-Z=CTHBQN>oqVD`$8fM{?LoTFxeUtX z333q~oXnlXcx?ue+BW+HozPz7 zs~&e`GIwKMm*7<1jhX2izh=?Y?b_kdk6qWv49@id&atC>0eB*DzHV`7QMTePmfT9j z4GB*5wb|Ur^BWwmU%i_vi~w@8N#FEHtr2xs!J^@KsM~dkmAqeQFZJJey!PbPzZ)G2 zj$f#U8zs6; z0S@0N(QU5fPMi4$i&9&~UVB|5lzh|EsleZI2sllzLXR`OWL0iQVEiM;U>l1jG9BOc z7|qoc(vjP3_)iR@Q2`@&dcv(118&Mg%_?W@=Th>|4yE2;hYNK-p2~b_e#c>8zeu~W zrb_L~wUK}EIFr;yZes|ORk!}tVyq6DdiN!gX@}o+7(>lwg}p+#n)PoE181mDQXBc6 z#aL7C)Q8tsLCNISzgv_BmKGRDx4l+w7V!1}W97h5aHLJwNF}RYbY|Xvgh)-CvQQ=8 zGP5M#50ToPR%5u*$zqwe@P9h2_F!X8rEiW5${il1JyIKB)whzr!V`wM<={g-HGa+?TFKoEg|@!>D%@?^=hE^&3KIm)D^ALhYC{G0_qg7BcGjG3-P#DaF*0QG=&ge*`T9(PPKUkCwb^_s?Twj?dvSgm|D7f#h z5=v&&|3{00^-=zj-*rkd?d4gA5q;!$U-p@l{K=zKOG)Mp^PI!ztUd(Y*w8?w_i|=c q@6Q%#eLER4cU?A_y8OJw*)Y(ays^w*0+dR5mZ@hiaFk#y^Zx*G40fpi literal 0 HcmV?d00001 diff --git a/Externals/SDL2-2.0.0/lib/x64/SDL2.dll b/Externals/SDL2-2.0.0/lib/x64/SDL2.dll new file mode 100644 index 0000000000000000000000000000000000000000..0f3ef1286b330d586b705cc5a69f10cab31ae3ea GIT binary patch literal 1020416 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

j`- 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 z z;Y43Y)t0Sq96WBc#wbMN;31=BBhB16co@kmm#moSZevVXJ%W*GN_LL)Wd-8*D2C^t z2-CWz$Y_VU6xvZBX``Z{9jYhL9NkW)zTIUu8xk@^@L&XxqM9g#QM z8c#y`EAnpd8z)1^$L&r%k-pFRb9zkgp@22mz`3~RiY}ciUXs6t5AE;rNAt)(QN3mB z^>aj?)p$|wut&Pl@-F zagnWUAFABrba&(6&`82^q%#RinoojwBmh<no=< z4)%>yb`z;kS*o1&q%d=&&#J zaRaATWhM?5qG`2>=JTNMs1=2(EeuukQ&V5p|fI?r4B&i7Ln;rlpC(FN+wem(xbB5#~&I z1k-SZ+$z0ZQpbc{7~(i>QC*HCE)n-6D#LxTM6SG&=hNYUlrDT(GBLhyXcOYow0e;5 zB1yk)xxZ{9#6t}`%r0&8Cly)J>i>owzig|tY|&jRk%Lr4I>Vej(w?kGu*5bq*ytCs zJ}^tVmew%aoONH(k`-5BBzPjNk*v9OW%xyuS#{Cu5=pj% zLpx&dy6*|Gas;h?&PGk)1;2oxe%PSR$WB{B7xMju;~_b4s&98LWwO}1GEA{#Qwh9Aue=a`rqtgguZEYtORF!uFq-?7b@ z?qt_PAoA8wP27LM6CA*Cxydn%4~RTq&YIom%|QgnRUI-HduM&ADJPFiQ33UN=B$Fn zP^`!{t;)%!wIEN1x5MZ^T-zM7g@*KqvH_3D#?iwF#Ox38EOm~~Gf1r;H| zsw}1r!sRAhP|C-JL2Cipr(w?nqG`nt9&E&hM)3wnmg0%nyb65Yi=P?X};zj zqd8MjMa+p8oV*&cNL!8H%6wlQt!p^#*o_HhEp57%MToi7ayWc;(E1=`owjosxG7Fx z{xp$}icOBCEL0f_GkeUg%wCdWkPeqJ-pAfFvC%|FL9l^OnN6RV!e8_tNd2gG{K##f zzDOTC*xPsPBM8r7LLz-`7V%wex_U%>Bdv`HJ1?>~eaAjmJ0RMAz$n=ouPKNxI^$e( zM*?wzgDb(s9ews83Z3i^_M;XnVW>$O0|qTPaa9i1JwSH~enuS&=*{qWvp4YX(%u0%4|7YPJ@MH9Mu3_aEhX5aHjNfvZIe0EI&w>KQ*rI43G zdFcy!GjmDDXnj(q_%4;UI;exqO&p?>d8k|><&O0lVGoOe=&*;~MSniJSr?3WY zg4F&U$xwtsia-W!4bAo!2$3Tyhj+A1&3sU3+7(T~&v}-WqC$*>jq+R~m|FfPVcvL6 zo>_AESbJ8(B3a99R8?k9b8QXA%AZo~&77SXkk71w>*Xi1#bt6V4;-4FZ9)%{k?_lk zHnRc>qq!JC)b>iTQ0hvCeIEfM)5RxpF4 z%&v{JG`zOMXpv*TX@O}H?8QIpQUR-2!DaGZ0wQNlkf%tu6!H^heUhGa`X@H~w^#DDLn4bZ<8_WdkYGyG`ZXyURf}c* zRDw!4*6zdlhpA*+T2fIqaL-#yR1~cl!C|A`=j%-Oi2d<<_zU;q8e` zU?)B!TQGwFe1_UMt0=P9&0E|((Q5Ct1#J>OSGRt4@x*I9Hx2W5-2d6^P~6=f5ZNKN z9I4_khsQ8Co3qLvyF&UmU@gxJT65^%+*6cKpd?VTGXU-wEo?ZYp1b4(Jg3XK{aSHz zGm`1N?D>{EBU~xX{dcKbFm~R}q>1763^L8#V)gEL+t+;5Xufa~?3nXX(AsL1PlY06 zEhW$EY1M^!A&ccwEAtHb&^qq|e(Yb$FzCuWS(d_+Y=Y%Kdks;7?~&OuESZNpCP-^% z-pkvu%p(3W)z>0V0F8_!(|g`+GQ3*W%2XQfuh3>uzP z1^EKGU}Qbm+vhlaFh?6TjKN+Tc8MbgJ} z24mCylh7bnxID0hng!$MP7X38BY))uIL5DRIRZ|P(X`1U0VXW;>?&CPS|$pRu=$t> zH|ES>Jaew36A#qPo8|5{n!Y|!$UQZZrT6(26U|w33XP^xgHUU+6itMitt(1FokG)E z!F1jh_5{4$3ULZS9EmAbp+Rr^D#0NpoCT$U$lw&CwUkx~xY#nf-HdDn9TsHQq`=5% z{wiQfJ?-`UD*YsO*>5k;kv+LhEd+`8!c<1j|6;Il)zZg}Hhc;ve9UN5BadzP^I{LS z%Pbw_z*3Vj6nSGPP_n20Q!4*JOwe*K%&;ry-E|k8^^D?y_F&9cD1H4J4^r6%j#w!_ zi?RmrM`+!JOcIP=I+=;vXnB?wS{jM-COV|uXey+I1+zom&Q%O!Vk{rh=9}SL37r{; zFRuxB-A9ZjzoN@*o6f-VZdySHqJl6H5F9`eqc66E%V}c~G?yc2egQ%ASlAQvc8Z{R zC%rRYVxSupS}dXH-SmY=m|7IT-J|+qvYr@>=Dld!ww%f?!|!Tm__Zu&o-NzrQ&Sc) zS7{zxadfy~`E(^j>XRsycDj~Dvb$GVLyocgg$<(Pl>Z0pZJ8<^A$wmA}HzN@C0RsCR6M zZQO8nAw>sUrhr2lPVB$HJs`nv=%BKLbQc#jU~)lUwX|S{fL79OzpL19YqB+%CbP3$ z_6wM0lKRQ$s>^_&>J67URbM7wqnH~_H>z}wni&PxsL~e9R;4SL?v%FRG9I{w^4O&m zFz&gWH;}?;ng}umV>lID3k>5-AftCs&36F??3RW%P&xm=H$>dU#FhCUJadP9FzzlT znFN(HW0RC5ut;er`YW!9@H|VLlJ8@#5Db&U{jk~caE=+%L~jRU?rGB2!3_7bY<>fA zv%PG4D8A(PNKEKkoCd4=FdirjGJxYt@`CYYPXGl0qq3KFIku6bv%i95a!+wMC&=WZ z3>gYDlQ!DUBSRJz>5;&a1V!u0 zlxLaw;Fm0Bj||3_8DH+wN{2D0lj8!e;i|CDB4C@w97KrIjB2rNW|N zjvqUb9(I~>=I zYl2KnToEN5sCw@|!4ETbJqkf3vH*u%)XIlkB1miGZZW;j7|l-+62dmYv|L3$Eumxw zOxL@7f!|W!X^c2ZFjhQ)9cnAAa$*YN9`n?UD~;Anpg}PPvT3hB=Ed+ysKW^S? zG`~s-{5e~#g7+>GcIXI^!-&9GHQ8>(aQCFr+&cVIw_63zKxZ!{P}{Qtc-xL>@?5N( z9asmLrlqa=qA&iqDD>6V&h~fnB5!BQ&A@%Wc;jf5-gQ`oMMt!G-lflbumc#rl5Stz zEI^yDiU-rq)ylt8?2*7BjCp*N240vM=<+Ee2fu}kB8(geMxPSNGVVD?Y8Go!GK1Fh zN9*^(ZDaKNXOw>5kAA<=%{9F{l~|WeQn*SX+#_A|4Pm8fcroPVQl5&uRp){3D-a3H z$sr4&O+*9BH<^+sg`Sc2=!G=dzru7PuQF{kKf-`f+OTEs=$py~U9WK5y-W+9uR?l! z_tcKa0hiUQwUZqOxTjL-CTJmuOT70I;%Fwmcs^l{X5!lFC?-1+uC1<)vbIp{!Cn!S z>>@Qp{j^79_M;3E06Oze@|(sPV_lhlP>+RaU75e*39LwKC?NP=UY77*S7wX?Z{pGJQ-)sTMU+?MMa7p3U|ta)Q@mMg<)3M^iW41mzIz&2 zBG{$-mwrW07GAxHh-x~r`5IckI;R`#!%9^{C>#oxE@eE-qrn$Ww!fCFAM*kUix4CY zoz4TxjrL9aYJLrI$&{RF(`IM0Xn;H+>bSSZG%7pn{ZRSgPnecs?JL3^X_PUlj}>+? zMjgnD>~qV$l#U&J@llKm-vR}@VcU{!m^OY#8fK^i0HEo5F%)aEr5}_alg?-oK0GzW zXugc~5WAQr3$fxuvp4=-lpf4W3?pEeVRVx({yQlVx2FWHmy;uj(TfR;;&4h8=CZvU zC$+`rI`Uz|7@HbWX0h-Y=c<8k?l^>hRb(&adfwuTm}lq$8ANw6h^m}HR8>eR(gYta zq0}_Si;(0XXLZ(C1$0;P+6_IZcu!ru9W>09zYNyaR=RAWa$oaRYe`Z(*)t(tFn|+dfvn zF-u;;(uZhAZgncR@~h-W_ziUhp|sQyRx+PgrO3RRXgg12PVArO3u#-8FQ*&kIwEhe z@?-o2tz2aZ4N(C8$-pkP_s}Wx;_jURtT(Mw8Pc^@?oK|~%m9{2Q`TtS`a<4kjn+KiAkZbvlV-blR+p^rI^OG_ z+G}}g$O>;^`%h|DJJu6zA`$^kM0If&3uV_@H=dUkt`>s;xkYMBw_rF zckHch?lqbp?Y!4i@MVYivA-$3+`N6Bl@G*j zr&36A&r5`yx(^CSm?;J^*Q{UC*R2Zfwu%oa4!eoEb9w8SeaNFQ*JNDGv ztuk<%q7+fLlhWn_-mRjqWiBIanhV8>y{Pv{ej--fDG#85ph6N6;AI8B_97zX6LXfQ zSiUwYx7vSWhC*$Z6@+}kL>{)ctD^@N7uwIrs8VfIw%tyrvfS^w)%1D}6f(27W|G`| z>)frv@JZ&k5Az8MBi7Z`s!Q|iw`mu>US}Ogt`MEmjNhsB&V!$uS*+t8@}t%TWsQ}tOaWnUsRM&(O(4TvHNW}*Fk70Xrg zaZ{`lM)S9k!t6H1Do6h!*aAyrJ0|#5_5S#`1zSw(IM?ohBl|GB_X@TsySsyaU`soW z<{!nD_7t`#lY0tQ!0yaPr#Ny39Wryrz7Io-zZvVNGWj8`fR0;)PmHFEgq^IdidW3u z1L&OAadXFh@T$KkDQ|FHG4^-OFY{vg-BQh_1u$^{)=HX!ye}#H`&E>JFc7}oX#JZU z{2(iDf8;@A9FcYCN2Y5et0cdCk4Q(}nL20{^nHppKMHS%h-Sv_DOK8biVu`hT z<%R0QE0>ZWeBNV!k_7!Z9jGBddAfwg^Knr=mw%(6{99ZyJ}*w=dJB%8Cw$*XK&^Fd zH*Gb-_qP)W-^0zT1-*>seBrh?Xf3&$M+~exI;XyCmH&VwY_Bk3M)|`$gD5}eM?rS^ z1M&n`(-TT&wF@NGjPezlFro;{Z&6gwLv>fS{a!+5Q2TXqqtR+DH!#*kjy@$+`F6DV zr)FNn2X+s0{OG`m68IE>^d2~eL?FPvCA@;LkhXUXI=_<(fAzj?lxM_ zATP5EC5`bqj%RwW(4H+1F*6uGB|z)_aRpGfG3ERQTUDa+$_#lSLVu7jno!}7R*J{T2><&jX@Dv~bs z#ISO#1C{LqDk!yY9^xVB^?a2qap{$s#?D(Jg+fSSX%E$iPs`iH;M4=%!_$a zE#^hm(eqgMLEHk&WFcy7-isRh*o2&#z9fOktT!7LNCX-g%>6UTH127ICg`XpA}S0{5smDC77==b+zO*Hzi`?50A?(~`vb@a9q42E zy$bKkrBg>t^MJC#`#B^m6T7&4w2D8k!h1ml@evT!jG`gjn5?%}X!+m=M5c6$cPE1n z9}tp~N2}xC*GjAu%h%q|B>4uDF4F?&aXvb{j=@i!UB1s6xv* zSIZWor0}gu7E|uW)ECBtSFi@qTt5*kU_Dzpb0I~e7dhGzu=}nUh-P`}2{Rt}GcXuL zNX0yqr&n}j#$!Q&)e!tTNyCiaC=B5-pl9`o#Tq30J4hoW3vv&MImEh-@2|_V*YV=Z z*#hytvmuUj;27Z9Bafgg1|VkS3K#_AiMUCOW)M9;W8yd+ir}m1^J{ z5x+y0d1rejE1#BQXXDed*yM7`LhMu2K^}`)FXRzFi3;&+VZ2iw@s*fqv>xGc#9v~U z@^9h#LLoo_ohfT);xMrn9!ok*9AHgt_+>QshVR*bfNpNHMo0s`dc$ za-TbT^y5Uxe>|>t9{aaB@{BAlS-p|HViC$Pnq6XvW{i`~ZIFJQN$aQ+Y3wqBx zQXp;hx~S56&I5AaBFvU`5})k08Ws+2_fPfwR)Q~*DuC-|e2L2K4ExvA-NCcqf0JLp zi#Pu_L^X5f*EKvR<*|bKlKyLi;2iO78LO{S1ZspbvOD}wAau15+&L=nMgmJE@GeQy zLcX6bvGQ;uA%F#Q`%*0{AEPSvaiLSr5leLF0_tZEpw6XA@oYZn`A8-e@}z{!kuPU? zI(Rl7IG<=W+k6oguov(rz*w6?Lr#%w8Gubu0@vGj^LLa#q~70Dwg*{&Nj_Y_0+%>F z=3t?CY`6IfHuw!UTmn}o7QRkyvazU>DV1B6#ep&Lwa>t0sjW*QZn zIj=d5fm7#?2s>6a;CdpPhlaDvSk+-M8Ab+N<~eN`?*?Sa32!)YU%->ndpuwb1dX|! ziFVa^yArpF$ZaM1=WBnT6QPp!fLLo=8fXz*CDKs{(}OuQebqovycN2!i2Gz&G)I== z+EE0+-7g6-6Mkmm9F^Wqz>@uBoIAwveq6uh*gM3Y??l**uS&)z%nZ-UGZ^|J1Wj?W zq%n~6lDP^~;2*(!h8*De0>rGoRPtkQhlR)Zv*`N@3IUgFqva>6M@~$E6K*15<-D@8 z2r-kAA`*O$=%+y4G}E=m^zK?U09~UL07nt*9g*eg^TD&8E`(;)tymOhO-?-Xiqx|W z<0#f^2w=qc^26rw_XKFJ#XvfMy$9aJ;AAxam=DYL92*CBJj^4)dzc!uCypTw%jPbi za96^X7fx@cT?%P1cAMRUzsdfA{)ZSpfw+G%jkKG!EpuuQewR!{9SZs}eh*@DSTJB3 za}lR@iD9?oh_cp}bR#J@+(P7Gq{;9N81khbO^elyGv$O|ifAvPrq~1H^)y!B5F-%v ztL1uCeYpSJ&zO;Ie9>X%Yy(^A@ii27A=ZgthV=TzJau*y_QZwRV)Kh^O*eBoMku5q z6dRIlPIthnfDMBa`I0iksqbBqZ_1Zk)Q`faf-|l)_gbS>tae^+4?Y0kNpsf%xYR3qIiW zH4rK}oY;#4o!VM587j_S4_ea$_{oNAOxe1~1yBq>y7MwvCV&G8b}S{|cDQP+VDs4zyA)KJc|=?uTTwf(3xT6eIbkhZ@8G%c z0V_@Vz6;uWbmt4=!q5l#0XKTehJ6YM%=nB?EL$Ip<%Qxk;Pl=B{6EeL8FQWiFRA4= z(|fpKZ>;>1NuZ7EL=Y$7V&Snu3wS+kWu8fR;_o|QlDAn8CtTme)cgafPlqvpVN4$^V1`qrFp_1OCA0Y$mZf7 zx9Ts|_{5~3$EnBbgcLCGd zr^!b)WlOa;Fd|47NLF6f;(FTEF#^e#nmFN`Vj{~&bXJg@nlA*JH?9DhJ2W)!HoY&g zpsEr)?LhNaG&Gk|iX=44Hl8uiy!b=V{BLxR1I_=;V+xvY5VK7Zn&-=lhGy|X+$eat zhAsh|A9Uo||84lZkS6{JKGzXwmi%M*TmtR?YkZcAq!d0!X5TsyX&zC&L4Ni6*$VY2 z>u1Y(O0A#G;zh5Y9r5U3XZ>tzj$S{*>)#YUKz#osw5B!tTz-sJIXXe)nyQVSDji(g9Jp-lYw{<*8u)}ZHXF2@Feh_%=F=APa`yD^_ zTkuX|+zy)9;WIew+i=()8d2YcxhC;4Vjs0{e^w;Slzt4b<&aDYPkDEZes`>!_-kiL zp500ycu`6g^QFlwDhoi!?r}y>KG?{Wz(1!GRp)EM^;kcsvsFN4;NM-7Ctl zMTasfv->Yd;y>;)9D$&gIR+<$Ct)fWlEqK7q)c%r>I-oYBnH)nU%p3|AV0`_HVgl> zfwDI2r{OD@@O^5Y6(LuoVicrn4=agv&=oqTO%${M3R1A7jRY!iT2dF3r}|szr%Qm9 znCCVsVBUOGa=0dPlA{rRNFzl~B3_EBR@N3dd5R+%l!-{dt4Z20O*?E^<=4o^Iu4hF z0^S5t&zD~fsZ-RWu=sgArC29ird4?D@PUOZYSST$gavmb4F@S5Yj-maV7EB4AlB zGQ*a1a~Mj<+8j831l=63NGiB!xJHUuDq8nAj2WnH8DhxTU=EgGTd2sb40#ttdsXoCo zrbKR$-*rKZXhfHgI!P8G!`!c~Tu&C7EsMyIDlTA{!}cUvUid9l$$hJTL|&>0Do@i0 zyxjkd^{FC@K(DHxs$*Cc>iwXS#Ddm-b%l}Wi`F~N)km8D#`NF1ccN}-$Bp8Y#ro+2 zF{9(%g;;xQ$a+3;=s8R^7(L?d8>A)M`%nO}8~BTsh|+;BgF>>=#9hgYy22%?`0?W{ z4fzi^vW4w(LE3=jmOey9f6+~1rCgvk&yfoHk}wPB+;oes45#$IOKR_#vp8DCj9+@S z(efp@TQxhoV*=K$5F3%C&E8F{R?@*{;?#95UB&1Cb$o1Lv}JbdD=(M7eiuAt3M?lfSW{-eqiY7gk~Hx3%8u4%MHlnM zLj1Y*(eKoY1JUN=%rcY%O%60U(c0{&oSLV#i(~4X+-U8D=whfBz8}7x z_*~+1iT4oiA>I?M&5bUGdf|KFPZRGU-b1`W{6yj>Mr%FM#ZWIi+VBbDClWuAID_5OrSWw) zYS?DidsW8Qb8~rLo14w^S~n$ZXXWPA6`Vz^zU?+kaJbB!f-j~rn0`aGe0H_5fdmFQ z@h;mJ%{H1&s$kPaxQXFqFx?+DT|WL9O?^5lU82&7;@n&_ohS^Jn{`x%M9E5_o2U$; z*tqpe9p#oN4o4WwB+5+`#|C{CQ;*v$|Ne&XbS77aS}C-s4Sw!5jDAKHJbjcqdXGjA!;H~9-=&YR_Ey9 ziEQ{cVUFA>QFEd%x?p0EO;07SX~E5V+-Q+&;4tjq6L?r~`4ZVnUovR21!4&Y=L;@+ zxsTXrxrN8b9YsNxoOu~k?)O6iH*yPj>_K-UB?-oU?baSZvU}ayW2usEB zJuDQ0mwUj=J?fyR4Tv_z27{7Rv*r0D2w3lm!UZ90n$^6`12a#nF0YkiovJD8Ng%L3 zJvtX|4!NM>bsng>Q&Y(aL)F0MNkFhZBRUtx4slRYHLvr)O*v1-*ib9yAXNjLCxO9w zcXTd19?F1<*LfhPoc{uqTd07}lK^3TW^^v>9&$s)>pZY?nWoAVD!}t3P*^`MIv36l zWkSX4JkYa3Q;icU;PWJ4Sf3T0%OD7igNoOA;O8eam2^op0D2NQtj~_lm6qUamug<; zfuM3ID&@)+Dj@VEfLNasoy*V&VLYqmbsiWh_J62ygbENn2_)8!kIrS3gmR$bbsi}C zsHPe(RKVy-fU$l;bS?uXG#)Bm=Y3!_J)o&32o+#@5_qi7jm~B4geE}6>%8~FH<4Se zPykjZ0myn!bS^_ElnVu~^WF=81`3Z*0H`Mc)cT3hxs0Tc2MSPg-qD70p^(ueuk}WB zE~6=g?XVi+d0^@*p^{e+U^tY_9k5OWz*Nx^OxYw`sx*u3LDy>`SO0s0q%?DfYndQv z2JdTg$MMWvg(ATRyn`$Dp!ft`-NBMA;#b(zNYitwpd2d>)|>!A!IU(k=~f+H=^{cP z^aK!ELu>^QDh^8oSIS3%p(nu58saO!&{8KZL*irs6A-N-z5)=H)gSrJEpede2~f0# z_zF;TfTor>IU8MI^aL7YlyGN2``uM@e&S>o&ZN{h^rVMULxTWBpeVu z0f^QRS1}=6A>p|a4uYNlL2HPs$PLR8?Uf!02R=^#pEbl)c*2~$UNe#43W6#p0-Z9q zl_JH7SQfu#vVE1T4xzX#52BW0C-lqx!<^+1bnVA1`_(Ox+-iCo)x zVks=ZR#{G`33zvcT>9iZajQYhlcSSl6-}hPv!cS<4r*yhZ@vpj0ni!%rI7L#yAbrC zaWG3udh?O=>Vd2QFbXMeF~XogoP$_e(wmQ@R}TjdfKW(zixCC|;2gZtlHPnbG{DsW z_=J?V7-3N0%|RCMlC2Cy0cosjYtBMb_-IasA7z4=Ib^^Bnbun8$|F~Xogn}bwZ z(wmQ@R}WBOr4uP{F~Xn#n}btY(wmQ@R}V}LfJ;buixCC|)*O`5lHPnIy?Q`u08~QC zTZ}L$pyptdmh|Q$>D2>K17H$T-eQD7fi#6sBI(UX(yIrY20$aEyu}ED0%jVUko4vw z>D2>G@Qp}$ixC6`#xyb^>CH#ds|T0{=sl#o#R!4|Vj7o_^ybsa@`jYR7$Hyrl%SGn zy)Mfh)+w|7AgFX8(7q2;+8(av0@PpzY7LSdhaV|OLLJzsAt_ry(nJMGG>#JPRsl&p zLD%+RNiP7Ef+QK9G5|%W^GAUe2a+lTl4=}CGKsAmfust7q#6g3xGN!AIRZ%)0!cLv zB*}FNl_QW;A&^w#KoS=*M=M7lsX`#B#(^a6ZirTnKvIQ3QjG&iCXiG)0!bADNi_~6 znLtwI2qaYqBylEzf+UmbRgOSXg+Nk`14$;3RH-4ULLjNefg}@1s??BFA&^w#K#~b0 zRcc785J;+VAjt%hDm5fk2qe`wkYoZ$l?swffuu?xsbXTZ21vR?gU$jp(0uD8{RJ{oe?9yVRCncmak>1d*aqh%)U!7&WqfKP!X*d78b z1g<7TX{rKMiR&d^Wzg{N&~v(|DB+`*?(F?9fr;Lpm20BN$$RP^!?JH4ubLwB_%$b0r6kNCTr~#LbS3 z_*E*=gj3g-`2BbZv66klhy`+(U7aH$hFsCQG+z{nFfvRZ2#z78$Y5kr6}gXdN;lB4fM`Osz`E zh}9w^);Tg_C^K4zjEKk>uLD)9QZiz-$cS~0j2IdhtwTmcWQ^B=t5qo(v07xrI!8tf zWku_d5fK^Vbs%e1N=B>}8L`fh5kuM0I%Gsd#&{jrT9uL!t3^hvb7aI&PP7gg5s@)o z2f9|JWW;Kb5$hZoF*H6}hm45G7_S3gt5PyzwaAEdj*J+Z5UoQ-L}ZNDfwEO88L?Vq z#5zYt4CO}akP#6X<8@$dm68#wMMkW1WWPQog*WLCPwR! z5fK^Vbzp9lk`b##MwHi(5v@Z;tVTwx1GlTR-pvjxE~dvZ63u&2(P{^gLsoA%G(TSS zsbIz}oB`(Q*Ak=X+HSfoB`YE&=DJ5@#o#QGSg|YU+9CpDNq3OjKPpn-EEo(F4FJC& z)Cf5HlHfc5_y)#;vo8tG1AuQ}EI9j;;5-2M2F8N3FA2^AfNx+dIQx>|JOKCx#)7ji z3C;t6Z(uAq`;y>10Qd&Rg0n9P&I42}FczGBNpKzjfCD4o>`Q|4000~q0cT$loCg5l zzz8_|lHfc500&0E*_Q<80gyP50%uZl#5^GcN&H1_^il{NNv|nMh^!}y=>QnAs0c9e7iFTF zLgwLo~AN)3@vwABH?Wl<3* z!x53_s}O0a(65M)3q@faFoX!O@fUeeSs?;{P+6xaB7{Q$p+!Z85KKgCgVBes_@EUuNA+7yFBBbJvj+^vY?5vfU+7vTGBNmr2oUE0Z+7ur{Bleb2Of1Sw zZHj$~7fZ`%-bIr*qVrLo6wkR{TDW)Y}tSqBB7GWv!q(Lla2*z|by!vmEb;F50Z?%%AtjZaxu@u(@%h&s$hRMrP1EGEy_>7kK=5LETG?u^}XA zowViFxe(GZ*dm>U{x z%&p6eBDjMnRMwd^wJ|p|+L&864j~8g0z2%SK3t>LbS7 z&}d_BT@FGzR7|hQiBcPLL!*tkb>k7zq56n1H#FLqTQ>nA9jcEQb3>zzxplb+=}?U^ z=7vTabL%_^=}?R@=7vTabL%D|q(d>rm>WtObL$L*bYlNIV=fm!$PQFA=L~GRBSQK= zV$iiO=F_CEYj02&pyTT7Xs1(U>xH#bv%CF*?9>)579}0<0e~=;$O$wZY+X6bNF0vV z$QsCyc=c(s57ksQ;}hqV&Snh)QSiDS!2X2i$lFouWWhBxeC z3eVS~O>=0N+=FGtgXf{hv(TUTuRq-+pGqP5^1sh$0=p{y;iUgXZN_XuszLy(A9Vuc zx_55HG!e8q1J?7n1_Z2^#WlcWk7(kB-$+fmSnFS@{Q__tU=tFTAvk^ko$RX}C#Mnd z#R3j=M_hz>1IIGs7%)S!A~|(+QPM%60&574)FrrV;1h6+6Rt4Fbc#bj1v{!T*;?cx z5#^)7o~eMvUV8Q)*qq9mSoSLXWE~7x$YA?8f`}EZ>asTzhdg8|24dwSarXrLA?!a% z&Lzjx)mGZ?guNjg?RvzBh#w0!V-B(&u`l~#dA=AXy*9+~PHbigx6d+%eAeQjhBpJa z*SkLO{gqMyl+TmQ%5QN6YWRF^vl3sHl7v}uKo$UJ8Z9Eyi#3NwS-xTcaE4j{oS_x~ zACR1}>;z+XxNi!^?sMPjoY|Vz@C&k_y#4>duYI|4^4LeMwNH!q%NWr=k)XU|T{0dz z7qvw)=T=kkfAYupALUgpZ0X>i&2Dyc$Zu6rep)UNzoT55!`=ih23cZRB0Oe_(#4WB z9w8yu`(lO<8kKuP-nYX+h8`#329Cd)@)zIdG;hGDeJA942dahx0q?uvsaU^gh?rbr z$l~B;GM7Repa9iFl%e4*$;HH<{cSP{xQ>Oq?}xue`XoNm{$ysBe9%wVY5oklSWoAq z3)KK?rTuC4@a6Qm?$N}_2{dIqSWb_?2KWsn5(5M&rVvg@?3Oo`Tf@&}<#XL8Ve&Ed zw=Z*ksMz1Uy2n~&lMgsD!@Rje^^!#gapJN2CQhzzbA_zqu>K5tHm0(Gb zME=V!R6&%hmGRInO8F0!ZFDxP$%aO;FXi_`c(R11#y7~cURDS4IdIaMX#R!dgCEj> zMicRWi2E}+ElNOzffN}iHCjYD6(*e-vffFeh>SIMMp*O=JDz9%l#vvOU-KQKrAx+? z41U~)^znai1mlI0C9Y!2K#XCs-^wUEsFuu6D375WTb9ZKkwX}j_;Qy7u4WJV@LgYy zW%*)fvxE)~9CE8wf2$rGz!%3myz;Ls{1<|K@Sqf?WRUV+ZnTzDUYrSdx{0STV?KPF z9`Cof7f>Vj5_^VP!B1=WT{4gUU&)jGd9^?<16>NEncRqq+l0LPV(ud2A=$C!i=E}O z@{4@dxEPYheMRn2e9e%3u6!*cS_U&GHQrweOv-@P>uRSsqD|wYUOzj;B@pg__f&%& z@E#0Lj3Ls+>e9IL#%ER2^0$D*u6N`n*pT;~@MnF*lcc!YSsDG46yC(Lpp=CY5*lgP zwd`X#819UrC#Y|sX<)+G#o!Z;7&G_|JWY`qd^1(cwKUTqV@4B=h05YyphgpHr$*B; zHTH&VxnF(^wX`qPOPsMcq^P@P>`~)bmhn&z1BteyeXX-;Jeosd*36QYjS-SxWM$dE zf{3i_Z%XoKi-Va8r#F(xSUMS%Ml4HhZBgw(C0r|MX`x)VSB2dsXBX%h(OU5JGUpMYMP7CuEIZ9}x$Pv77QgoCxUbN8r_n|B&?gU>UA}C154T*O;|A@+ zwcs(^D&CKe6i7c8Qa^e7v+oqixVGyBdH&YoXQI?Ha1L1ybBky zr|=WT-&y+Ghz)0g@z@9P@VK7D3o54JZMj`x9CyW?ZCx#bGGIkdC&wTAS*n{3hTlB? znss%5pXOgSBu*9(i7!l-C3gSr{(|^|ryB<|R~1DPSFdk>n>l@>%hf5_e_drl=HXW& ziPHWzqggD}ls$4vO1L5)Tf}X^2h9!I4-#%&@7awb!HGP>;Kg_^59==ny+D%?&Oh2x? znvL&w82*l?wg&G}V^RY!wNtJeEo1|YQ7kKCk>oWbBmUZ|yh_5eS4w%So8Am}$nBXA zU!TRPUG;}mO8tLKj$dhvzhhud>z}6DkH%nFJ|Ca4K{eAc+C@sqSp9rEMLaCcHd7b> z1?7JIq4CT3n91RAMa2o(+DgX$qGHN96W(nkm$Z-Nk0f`rLjZRS=9xDi2!Bbkk~=nO z!zm7fAYgw$FoiPznL9EPzg5umvO0vGfFRz;a4}0$dUR8DG z|7V92NHDmgMu;|QQi9D;nK@6p%=dp%yZHglqWSBrHT}q*(fx#%^?{5 znJ4LOA)42^QA`10z4}LAc1hj(P+;MSK=lZH*(8mZ;KCEP7|-8A+p9lAP%=Ri3mX@n z7-2jw=Z@-2(dbXiU*q`zVfwP=rc(IFbAr5MyLP~tuXvt#`!4QDMO>^EHp)kYyh=!H zuNvP3{bsOoaC<6^awxY&En5>EL_r-x%&g& z6X@S?K7AoH7zGK_N(*s#LRZxactSKGkc#p6LagGGLs#*CKe6EG)IwfJI>T9onimn& zgf6wAExN>51nQlLQTD6Ws#p{y+v^El3bQnjOK* zdqCTS<8*YtxOaw@fp1<4tr?3hL6zEhpDemKK$w%z!&&PFi3$#QA-FS_2( z39Xx7xIyfb$3Y?|p=|RVH%RnsfE_2HV^iY>iFyqf4BaBHq9p_1H|e6#XXI6sV?g&NrH8WQbr7$E zcpVfHz;QCT-K2|U1~!*6J&=MkQJAV}Ayj!c2DRmQ(^Bi*7zCXIwXutWsnB+mzvHK? zV=A4qUSd4X{Q%KBxxFsXNoUsHu8?>|eUpUw1hS73i-ZO@Cz|q6Ty1 zs!(?9S|`6T`YWbJF^$?d{gw1&;;Pee3|GAy4olVp)4Qt2{md-%MM}74yd3ST$869 zx8XViR}15?=l0wdsRwu@Ys>taa22dsj;jmqFTK;XNY5c7af@xe9+@ZEaU-?W9Ql$w z7R3Orp1{C6!ovB0QX1MAc|z8;uqT_m#2W&3{i?ljelu#1_+i*HCOya1<|#^ppLDm5o^|vmwUPUv#D2{4o@gqcznd%&$#@D z(t84rIUf1Cr~_FWTRa0e^E#d@;0J1#FI;%ywz+79P81 z&WP}YoQ22rIiIgxp0V(RXYShy7wDo7IoNx#@ot0l+!*^N{CRWCegTXtDfX_6{|l_a zNwH0d@jhFBN8qpA{@x;wJ^K3^x4(ZzqtDXcasMG$L;Y0JhUYQ*$0Hk_<5>{5X7)Fw z=*4yvd4N2e9+n|fORUKL3};Imxn6vpkYzoc*?s>%B$Wj z!ta>9F?~OmG-WcCKJL!#OiS#||6DpwxrZ`2YP7q%v zv_Ek4AVi&cnVWyL%3mtFPe?$mK{@xS`4Mmb)_8wk1QmDdZ$+;oeKOUsOMDeC(4pZ> zqrBmg+cwcus`?+F$?T-Gn z%Lm4mb}Ntl2diZ((cZ50MAZQw8*iA_%20(-dn`k*6MsH_>tx}Fa*~;a7^&O&l%V+G z`yLg;;oEx>?Tyd?zs3c@*?D3^*==!ONM=cqQEq+bJimW~^M@ZuF8nYy z#63;j!fA^2wa5AU0FqtISvgB>j-S6H;=e+A?_~Az*k7ua#E)0AAZw0SOJc9QEFGil zfMh*ASAXYA$2}|RC|&(6z@j>g(&2IXihT9h8U4MHYMraUd-pG={?L6+=l-60sm?8} z+%ElliE3Tq?21|O`vfP>u7~$YLpi&8Ps*uZI@xdCPY&ICc}b)LkK;lQDA%%%k5+kB z-|BYm)%1_THdu=2U6Ts*KCjxU80q6T)Opo-UiIG{^r!S+B&On}zn8{-)z#ls@&5j8 z&-v~2H;bD($6a+0RqS$X2cot!<%`V7{9L!n=+dRBzBozPxWPQf+u>pCOgjJ(35YGFt*-ZzvBE^q5?2#)Zz27IZplLI1Ny-DpKoKVrAq> zRf(0=Or=C6go~phhE(LQq^Z6*z9+(=Q=a5txH+^$KF^c2oZ5k?toKUY9QKp-fn=1p zJocJfzaH|K+P!{%_y)~402f*N{NcL1pD<$@zJu(duHUoJ;UnY0cH*2yU z$#d~AY}DZ6im%h_vJeOO!*^(fTqgZ)@eQo{oS@V>`{Kfm$i*rL!8aMI7A>6l1MG6b zQ-J{AkE*=iW8w_7HXhvwPKTerh5t}leMwaEj;~LN%CtKP4j8X+rsfRWzczAR@$KBj zuHG6k&a6jGKXRI-XDpmqtEzESIPF4A8$0_Me-U&zaR}5SvsH$ns|@`W4$@AO4Sng` z;i>)BMecG++sR1YKx!?Nu7CYDs>O41^<}b<7U1(JRpem>emlv^GB}^gdg2d%0m2-o zMZ<6?jHlYhq)?hXZ%{x$YbF1+@%;aYuAj>Pk3I88l8J0L$;ya*pYxF0 z7+J*h`kQE;3>97dGki=lr*q@YVYz)Yg^k9-+ip<3&K2Xv!r}o1di_(9hJ)|`E%Fz#E?i%GY#zdfaOMV~iRk@msGRjr zEJ8N&O#n+U@lRo%DC~$`*_FR^r$7|XDH79~Ree9B>MK284IZjCq`7QJu??IjAs(Z4 zD=szZRp>$VTR5y9kNlDDQ3RmZi+GD|!?ijuh<6Hdoz-e=5XTFh9nmjA(-G48986h! zen=Pmm&}N0l+dpIYcOqsUx=0og)F>nm|lO0q*^u>6idyGC2MqP_^E5O=PRj--#QZgmdgANR8Gex zJN0{8LJ||l&8rG}b8c3pAQR5sur?dqTiU(d`qNd=8v_FDgNM6vF$fG4z2zDNPLMd9 zr8#DRzM>`{j_%<7^twgFz|~#@cOo+;XiF|;;5d*+-(7ZCV{wp-1 z!2<G6ZHySDwv%hi>y)tzFEBX-)CfMJN_7IH{TRE6s z8S4KP9-=`7ce4OU<|#yj@s@+?m0~mxJq-VFXaopJLjYrw;0*a1`wAR27&pWNtFqEXf^2iq${i?Je=XwbpO+~_o-QPD03;VT2}sYoLl zd@$%n4~e6vG7JMM1`>@u$qjDwMMQ%~mxK0|VINR&5z+5+y__4JPBhBc&XaR8^fL=`SLQn9V z0>`vc=*Vi&rP=K&a#V^S9?<2e&+|MG^KUVeyPoHZ zF!C1DxNCS$$CO*l;o#1UK^Sd|2^@TzGOj2KKQ%;S?^9EfS(Xp;E{maF_a9VTmX++C zz1FVy`D2`W{@4i^-Kx0@*Ozz5LMscGBh7h-qgocX=b;a=oN^|xW{dxUMl|B8_eSTl zmc-8^J1JS6M}B+8oR;OGisd27C#KaAEoLbK7NU01LLQ}-b11jR3XAZ~S%2N-^ZG7+ zzV~ALB64rH&g+Gv-x9CVP)=eZf%$e`i@=3r3Kf;kkEd}ytj6DWN62Ha9iow<=R1`{(yQmk>z5y|U%pd6 z)G(wW4$SCsZ7#nkdL#Lf_qLxtjlxZZa0&cQW#CwQotnljE50G*M*w~&F=8!Gu_98T zTHjDj!T4J%zCLvMg13r?R)3a{{PIz3lj7HTHP!1Hhd<`MM7_W0yobxzm0D{To=DT5 zHsEK9Z`A7^; zD;u&W1itu0Fgzz!uOCSQzkPA!HO_KmbEj}SJ8);DtUx?}s z0o>oA$W(YE+<&+<@L{Q#BNfHsBRuzJ##a9>CxDKCb|AV#wp1trKfM%a3r~!6V1Oi2 z8cOkGes3)9Zymk>_nzZYk$v2FQ1SC$!HRbi4X85p8&UM!qCc~W4mO!}X3+Y`C$6V| zNWkHsKKw)Huq(~9_M6mpKea`tPPt|}5t+tjPgCUD!lIRP)5PoUz7qYrEk5fAoiO!q zK)-esVe*%t>B1-gSAG*bi4+npfq{aj}1v(bwxfq#`ovicnYo8J~FxDYKq7K$B$6pNl$wnDeM!D|y34&3B8OxOO z0OxFsjwt;F`3!jiJCxwY{-U*u?mk_;J*rS@MHAzMDq98&i|*yq_`K)VJ){B}Ut*8*5+wtia{YQe}*clZ4yN!m{5*;qtn#q*vD>$xeX?t_FaJm|8bn# zum&_2#4f>2`5aN~A2Fn4Q6c)ZoD=u(cLK$7Ae|IQn!!QIH#7vdqXXpYeZEE6tlv&> zb(Eq+)kWN!sOmyH|H4FykHKnTbDc5B*~O#K&YuZW6}w_}?K=l+n;;yZBJNxNp?oZ3 zP@U*EXAH99HTR~5pXfAN z#%nh+vdPh#m~)(u;%jMisPnE48-Tn)Yjxx&baOnOjaEdeKG|XFf6UGwV59K6JD5ah z@CL=~LK~nK`e!QLBl2O4|P5@U*GKT@<`6dYRbKQp!~LN%yE5B#NEyo8kUe&m;2QwC}_vKjqDC10^GzaJl^NN?`uCwwo5*o~3)hmW(9h2HHFo-CB| z)c1%N>yES35PuE4-={`p%^d=NsDK6A%tG>xm;s316wRjii&Nk3`eTUM)&{H%r~x@D z3X#t`nfk33z3yieW@i;`nRBmrPp}S!zvl7d1qH@FE7I^o8X!UjzO(qQ=%h9BiECAP zhP4T#PrNtA6y5~6e1$0EG!kj)Y9BK@Iv^~C9Fy(k}{V~;lk!43^p&tF= zGWHTgx)bp38sj-~@%x0^m%qicT<36645)6h+;0&YSafCe5w0#yjU{tcf<5Rj^7(D@ zd3=D}@eU6POVqoS#~I_%-{Cna#EEp!TnX(YH1@5?=Z~nt!&z%Jp@=ZTgDNC?8_@vF zOS|FoN?w34=Cw$&)Y%?1mJd-Rc$h5k<9h>dOqtM?Mp0IEdh{6?j4MO8I#&Zq#j6i0 zr|yx=uc#plmC(Fnerk(OI?{W%%!X7k5 zvda@zLD|MUM;jn6ZVl$a9yCfmr1aM1GQ^Q$zI!2+-7YfbNtXzlfkgQfmVjWKj3Su7 zdm}5WIXLo5z3fd-|(uezm52i+C2+q(~v_Y->s_ukz1Iso^R1M|;qd{L+HL z^^pa95qn7lLJ4_BmpsgG&&u%IUXhg8Ptx~`bEK80AhDobnGxytfein|EW`5TMXH2= z@K(Elt4kwKN{pI~p-DDX4c#D0d+vD{_kc2MwZr&~mYs%e)1HuOoL*=5XPy>qoV&Gf zb>uC{0R@$WbTWF^5?TFNKf1!4^`u*Ut+g){P(@C($UI7|zeavH*Bud-g(zJhmsdGo zG(}d3i<|n6)^Qm!j3KCRQ)J0j_xq=%sZN>~a!44dis!`G%4JFrn#ClT2f@zFh#WiU zHh64S=z$;ys+l-`P{s#`BH8o|HXQlVRgu$&_)s2hkq1hg|12f;5D>ckEN(ngA`htO zL+Bpg#ZzpB!duliIPteR@sZD~-%XLv^2>bv9bK4tmrUKNC9$9JGJuyJ8TWS+b}p6# z(WmGFKHGjLpRpW9oKO)NE|G#RvbBVKHF^;Z>P9ar-f!1PkMR-nvZsD}G6kWo<{|UpR zw6_mM4t_zJ{ja~1kk)79NB&6*`#(SoJ5`n6{+Cq}W>1u>vO;5*nD*FgbJUpZC-vAZ zvVWVSO0wsrix!aFSji@_pQ`z-dl~()`Jrp$>1C3rEYRmbI47U{tIC+KsyExuG*SqY zwl2WTjO448Q^gxr3!<;WeTn%&t?>F3nrPpVZQvwMIjFYp$l;Ef{Cbv>XCza-?rEuW z{XV~L#yI1Ka0zyQe(P9)dSGL=&}LP(%BuR$k>@{5NqR}h-1HvwHZue5XMf3;k%Rk% z3J*nA-7mety<@$*ii>LG00WsHJx#V&yXid=NukQrmisen zCy*yM0gva0ITf^iA#Dp+mdYAgtw*k6CE@-zUZrn@cocbd zt#{7%bAG4R)Vf3JqtXAt_avK2sQe2JW0M)hOJu(Em_6tj;#ocmWC7 zS0td4rM&2TTFr0|>aU(xhpv+RWqbSJw|to6<&WWj9)~GwjRdmu>DAehdY2MJn%g_|51%241mK(V0R5_Mluo zimcd^lH`QmOK9X~D93r7$ZNOt$ysj@#oL3TzaiaUNJl?!;92@Pr>LO%ve>*XdMLVy z{T3F=u7F$Vs6I%#-}5a?@D5U{r5bjyOTUNvrs!|3__YUF&UY`W62_)-haJ?N-dduj zrIPZ>l5bnk_(69WLx0cj@FOOPV=s2o*DSD8wiBl8P~eE6=4_{<#q=uHA z(vTA2>Hr4qL64E2)h|*URsDaL6k-p$TYjvu^x#!vd5p}L*zllMdH$TLf6A-!NqEqo z)R)xWy7>i(HC61Of0yS7J#M4%yrRHWRJBtiT$rStG%HdOiIeJk|C!3_DQ@_oU_%O1 zRQLd2JC2s2;{U@pP;upF6czuFlUYwH9>>RuifcrZN2Q-j5@adDpV*hrR_O;l#*a(N z&v7u2{);Ltzwn?4QIT3Y^@ReN4QVsnd|LGSuTfvBb~ndI_GPaSJPY(a&#?PP=&x%f z*|7cqdoSeA1`Zy1x~ zv!BfL*|V~I_H>r+(eE$9ya-SNy$?J4>l{I6dx{cXa5IrG}2>H!7+ILDCZ~K0}L+fHhp#%?W-!DJj_V*<6IwS1}zq78bGB28% zcd?UYJf~}&jIJY}w2msDm2Har#wcpkpM8WDj}3cdNzdvbHxO>N+x(B8FN5|}xitXg zgslSdJojLGWP+Xk zmZ&X?Hp#?1qEe0aJ@TBNd(dd#AqlQfUmcJngY{(|_2sbkhVF2kzykHA7oXdhgV zzF3slV80Xmy*=XlQqO#!J%!<(lx5@|F>((xVtCG#f#WAJZnTcqVa|`&ZQ*skw006^ zGhP)rl62^-9OsK`ouBL653iRGk$%_gyyh4*Rumi;Unb89j$IttP8^*mjDldFLATT<%E5x59Cxsqq!X_V*q#*- zZdNaveHofX8L8-){_L2ZL#wU|Jj?jXR87#YoTLjs>>7XD^9N~|SJ5ssY~(J_ZFbus zlqyw?lWM+GvpnY~-&u`Va5fwElx$KBHFDg#J3q3{koWa`;WXkiT@9A`m)Rg_HLBwJ zv(-JD(!~!r=TT`wd3*|r#}B`K!@t$a^1}Q(V|97ZU0s43#Ln-6%S&(nME!IIM zWO`G?9fs};j2bIhdna;iF;_|^1w99=+cdnhX9FGc5B4`S4P?j?>xtgb>wTG_VI9!4 zJylyyfyqtVGc;_E6W?=`?72So^!FmSqKiCR4r?OMZsb?Vv)4Hf-^knUJbXuqya6YS z50jGNc}3JXjl^tOkLvYuC52%_B(prGjjLfq#S$5`A4?6|_c1c7xd}1HUs;mHVBB>{ z!2W8MUMF|@7zn$OH| zo``Of2rjLB7uVtDDC$wY-asA`Dj|8S)m@*JJrdHF)?`y_VzkGfhD=bvp~Ugwyb=PP z4DdShX!RSCzWT2W*&6Cu`Gmf7t*I|P=&xK|TGPSSMP@RZQs7ycihPa)ePmdJ^` z@Sq1?P~i0(0cY}c>m3em>OdU5nXl=EF_#q6TxC?8S7+ZCCN@(d$o88avM8 z_7|a@hx6u{_7~H&m2wx+a{=!PVHgJJ4Rf))IpYqqTq_Pd`)b54r8;P_ATw>oUC&Nw!oBcCxQw8csUc^jD)xri>1Dz)!UJ0|YA zORC0Lo<{<;D>Sp{VS4e|w}ratPt7?Nm{zN`j*jf-^tJTlH0u9ok<-!K*T(ls^M-E6 zAAH`t+Fz@2WG=UH{^&N=N;ztYVb6xhCOAY^!JA8D)6PO<+qmh)Au_#QT!=b^7P{Oa zve2M7fz>w%-&k`>h9338VhF(64Z+c=j~h(~P)%k{G@-tND*XV^+Lw7^@bc~1so~5| zDWwz4$B!m42dnfM!;W7uAW7RA@V;3nubq6EQ>8!gR*pK)ad!=#EHPpzOV*ala$lao z?1o76#VOQ+zIoiRR*9@$U%cQ-s^x8z1$}V@xn4M%B05BqB}ZFlcv06|?$gWY-qNt= z3WSvCwqWshi@x|JKK6$nzb3gfJoOeV!nXv&Q?I$SME~~6V9`cQ!kf+1EofW}C3|it z(w|<+6DHv(0qB7?3}of5n*qL}cAq|evuSNXeNZlk{x783KD{Bw)En|k!xhOvYbpXp zYp2n)GsBm*(`W59n%>P&{Q33)zBI17do~R za$#_lX|ZJ%`&1FraIV?#D7CM^Z_xz{@$|KjWD2QZU2cZ&pdr(6P2KP)E(a?5_o0;j zeJ!P*l)~aT!7T+x)(wyLrxak03$`V-ucdgT6f~XM#yV}m8(_nuI7_G)*oRUE_O+B0 zDTVF7!Yu_y*$s~lq?GhNl#<@pQU*vV1NHiCW1P0&Uc2E@?B*LUW}UwHJQUWq0wniN z<0WPn^ZE_L+Glw8n%2W8A~x;qHzquM7ZFK9;7`C)l!YI^0k6i~ns9PL_^BH^3lSG` ze87=iUP®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­o_!D240fOTif6 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

|zed)A+9+l4mbvT$xPcIm~RHoh?%R zDT8(OG5|lF=XjT(;Vid;6ctL|pva~67ZI8PN1IRX+CB4+9ywj{^9S>ge@0u!4zqYe zhFC4r+9x!k7AxuCAww>eF+|Nf6LVZSiqn3&_70$un7{as;?FiR9!i|n_H^Or7HF@+UK1O(pjdm7)r04p@+Ki*+vS@zWae^vhfR}}( z#nx>?>tV-w3(34n;F_8rSh=G0CjVO%?H*LNfo@k-=YH zys${dvEY|1`-Mibmhsv#qc|;)!J_3{5_=%?WBCesz16&Ric23WSFN#9F2PjjB#ZrI z_bP}@Rm%Tvz?>e7na8#0BJ&rlinyz^*i_n2!6h6+X7W4ke4hWv^_~3s(`)|1(o)8+ z&Ex015j=bKjlX30B@?ITjvhIB;sn+CfgkjF_gnhh=7n}#pSWq4;J4Y+8{it-_q7?D z$Nvrw-e)cU8JoX>)6i*l_+Wio8F$8c=d#wsl{Yr6=H9lvu{bA(+Vea}+U59ZuseF} zo*(poki@Nll5ZO9Bk^@VXqoq8FgCxd@RCmAV{tJr@oXD8VJtN_6hFAX`rr@rw{6M$ z&=2}J)V4L7FDl3>oAJO+Z(Q`(t@*2a-SWak-z~k{cUt)o zTX~{3dw8vIy3Ou3yV+C$mGBp_^C>l*O9Oi-(bzNo>9Y=rYRjC8mEZZVX^U#dImdKxP0KE9JTe5S@WKII7eM@TmJ6J@8@{e ztXp#OW5?(EzG(W#?h`N0y?w{HwAZ46T;^;3ZMgZJJD+%?X6S$i*6uiC|LCj>9@v-r z{jvA;|MQ(|UQ2)K*FAH}8j5Y^*`Bj zVASI4rw)C#{JQtXAAi^vbf!~*{+XV}-VvFZ7a>7n}T5{^F+$Na*MNZ!^Ug~Q2OVKwS>p8k6)O_fU#+_~Azb^n#BkVAUxE7*>o0U)V%V6KIRC1C)_EYd zJwg+$`;1sPe`R8NpQC(RS0zplJHjDH*yosEC_iy|fh(=?Ct}NAa&_YTy^iul9PLLr z+E?gTiRZKYt%>y!$V!|Z%}ETqUvZ@GojAR!Z(=yVS7O-bm>xJYae98A#BjtB_B-;| zI_4jKB(Z$HZi({?IKt6kiPQbLiQ(X*iSzSZm^j^gQDQjX5e|$DBRx)BT?(P7gSiA92ht;8@>$$M&rqk~n|Q(8REDfg|il?{=(@?~}yxML$gp zhhBDs*CmF%{Suc~dv0Pl?3f;Kw0B=c;{FuPObi>V6OT8Cgr_D>=bg@kjTPDq?zm3>_tJO1RaPOQJ$ z2NJ`Pj(d7edE&J$&%T&DTwWF5?Fhf`2!H4ZcWJH~KIG(Zmzz&j52=g$^|;|i-_(is zJT?AL*Z;9cFgfk9L7%3++dKKqbN}J{YNl&R(U`}x_O9(T{HPwG@1D6<^?#!a zT`1SSH2azkMW38EuIC4@c6s(W(!ZaakUWXMZcR;8hs_Qdi%%` zPv3Ip`8m-86~&JE&vb-0Im$cBF}=hQzU-t0qwbjXMwiFes=$l=D(=}j=he|SmJ$BY z3Qzj?l+EeyzTPF+k@ZVIb^mNf{(vKVsh+p~lzSU4{_ATWzxL6zyEo0Qd;Rh8TbAZj zzWdBa@BF4>Vphl3w*UHXo)OP33Vi!i@#K|{&7J)9L+jR!{!MA>>|SGM++C4&(S<{| zP9FaBnRglQe|F!N=57yN^+?(2BOY0N`_q5EcJ|0G%a+{SwdP!J&0l`8aOib83q!64 zYP;O0hdor9wln#T%gZ|XM(p_P?ES;5uiy9h(wfZ02kxK#;hL@~;~su^M(2vhhYz{` zvCo@dpLt*Q&3~FX`HBT6{B6l^JI%TO>CNLG=y=M2?H&JdZI_plZ+P+kUyis_AQs6ylKUGTsX$MmI+@YRm+^Vf9s zop%UjUf+G5y!U*! z#I5ggNBV0V;gw4Q^G>_wwJw3~*74$6$MpQa96YahGt)1#j*ssxzvrs6uK8mhO7&(pTT@d28u{F}KWHH};(ITL-zH-Fcs<_>C@Ar!xKTm;R@hyXR4miSKu^(R%_T7GZk(n?1-;Fw>fBOLnn{g2*Q)pk8l z;3%JR)K{{jzLFf_R7Y68$B@5}`L7z`a!ikXm=>F!;#i*d<+C#9=f2vda*%A_^_R+b z9r714|5YP8JLcEX5mslPHR+XMZTZi&^0nrd?>^)&Wd5s0c!rdB?tb>GT^{+6<>fBE zK)xxFzmWMa%d^-TPIi>nwzQJ14ph0j$98M zxgI!jJ#gfD;K=pBk?VmY*8@kc2aa419JwAiay@Y5df>?Qz>({LpMO1Ioi+Xk|H}`g z-cnzw@2VjYz)LOhBUU<4v>m>~w)q`&V@IF|C zc1jxfIogen!VzckL4c%zzedgYe7F%E#E0Pcv#8rINduSB(P0KY06#~)@KN~0+0-pQ z1iwJJ5)ZF9hjQTa;e%)*J_tMZp^orw_#(>3hhb7*>PO%tzydVAvt;E;D zSI`=K7=DMU@qFN;&OtSJ54;4`<9*PN8t}sFP!J!0ucAhL81~}F_|13^%tmkFeQ+sy z2Ooepp$NVT-iCJLYhfMw7$1a>qtEdn_#BGj!|+YC4*eu)m^r9(*kKFiLcncqcXW*;gC&+`3!qEe0H+Ua>7kTj!*m)q^1@DGK(OA3} z-j00uTKFlNhL6IB>8!E{AB0b$QhW$DBR^g`sZ2*p@NReu@3}3q)n zf=M+>-Gz6txc=}&BKHxp@3DkfO!MwYvBYZym3N_+YEoDdR z@jkd2ZNP`&usZ5i;^7Nuv&6%kdz9KL@$e0_4IhD*-^=j_pAWx6Z{g)b@Y~Tl_*%H` z0gg-f5bXUh`wrd%uSfgvRq!L!jE};+2KEtrK71RgeJl$WKEk%c`(e_fv_-rd-h(>h zgYf1j*kABf@X2*-M|=o&eUfd5H{kWCkEDSgArC$Z3;)LP4ey7$(O`*(3)i#%-~+Jh z-`T(L2D}~R;%i~or`Xpd9xg^>B|U6HK717BJx$xd=ffs6S>oY>4eW!G9(LVGJHs3B z2~>m+!T!&14#0ci6R1?;;pxxPmhc{U6RN;h!LQH~yb2MAmg56(KMF|vbCe&g#Mi?9 zo7e~NUbu7%$6HAcCvBx2;`3qfWi~Bd_~bU)5OE$z3>UNRpR0CuhLHN2D~1H z@m26E^cG&dCjA!DPVfQv71}BBVd7Cl;^9|lx5U3rJo;GT;aBK$iGPD~q9{HeZbJL; zVL0GT+7;dli{7SP;r-Bfm-h1wWrL}^I1b?5@OKf8Q}|lg^L^R_-UIJPgYiMwwTbqC zH{kWii?4zoqFj6w-t+T0-LwI`2W~-=@nKl}A=?`7haL8?eerI1AM)dau-8Xy zN4y6VNqX3b*5E^M_$O>Hybq>+%Jz~pa2*Ot8u;L6?Cy!mss5xxp; z{15dnY2bT%sZV?aW=GlY_A^h|_$B)kJ_L)tqJHpx_zm*n)z>Twjg>U8cpvL4Y2cJ^ z$b-*^S^H_1crTpyE$vX!z~3}eetZ@D@&Ly%ylNreceF7{1G^ohoOlD?k3Pl+Ve$8D zcS!?}|3NABEoop!&G7;6hM%DB_$WM?7Xtf88aR%Z3B7n9e3BOpC*ni!OkOH1#e3je zXeB-ZXQsJS72Xefc5ta0NdtGFwUP$DlGz&3T4LE!hfFXQk@U5Ua;e7F4Z0HhIgM%`SG=|Zx8Aj?}0teq@KmYGkQ_a;^9`b z5+8<>dQ;E%e3*VV^^AAJb!aU<1Rp$ydd3Ig&3&k6d=-48FZC?(aAQB}S<=JPJd_#l zfwyN;&n=V<4)0Gn@jmz=8jO#^bpxnpdN+X<&zI*#{*JJo!4>Fy4SKqJ#J_>{7{g|ABazc|H3T-V4)KQg3)SJnaVdHM|GD zeVOs_rocFqMZ1AxDPGIs~Xnj z&(tm61AjoZ68{(0<8I1~uY%KSDKkDFep$!%l{ELTF88v1@m~1&eQaNKtO~&|?`Qks z)dMc|^;)*C_y=9;j)&O3_*&TX2xY@Z;SGFjaY5P}-hj8GRgxa&KF+>__rVuX z4L%GPKjGpM`B)Wz-Tq3M@doVJNE^VrVLb}tgYflr>__+reDq1`LgHcedfJeS`NLEH z?&3VgeBk3xQRny&{PJn`7rfd)`e&$LNe?TZr9SahaK&?M8}YE`^R!RA2j1`kWs`V# z=2q%c;^AM>Tlf$h_7Y{o``|ZdH(tH$QrDv>z6y?fg*ulsLX@6Fnr$w10Cf|;onr~= zfe%90YcA!%yWz=U+6mr(t~c10q=uvARj&gZ`?!Mz*oVp zA5ph>1HO$)B@JBlG4(8I;LV>977qu1%5e$rg|~gi_Qu!3M?U9xjSs@Qy_8uz-1r4$ z#)n|tm+W^E4|{%19j34@@cnPt@9dXqQ@p_rpo9 zBvp^khi{?{_z28PN>ZC89;PHGscm>ST#4SnSHWNLok0Zeg)gBfJ`5jDO;QK(L70`6 zq&laP2431BNoC;k;W_C^Tw76oxUOT8%EgD^>P|^&8ommi);US}B@Mjv=p?lYpAVlq zHc8du!|+RYl3I^fU6RySU6WK;{BcRDvRjh+7+(e7|3wlVkx@VJs$WtDd;lh&NEz^M zcsm-5uZ6iMB~f0sJA4C;#Yf~0k6(aQh!6c@gcb80_t4S!w)WGyQfnIc-F8a)eG-|D|3?6 zWPBC8XawcNd*RSglubN5W*p1HyJ6??Nvc^qye}_Fb?->o;KWI67kob4^6MnE93O@i zSF$en030+uN$tdY;WubEo(8Q>EJ#wH;|=&BYQ{%lrx~=9PAm%^U&ONU20Use^)K=8 z_*vAy#KZjANopWoc=lY@3-5vN&QDUM_y}C*Pf|7b5d5w@Nd@s7z|`}L*mv+@_~kP8 zv7?AzPW-jZ6CZ|OUe7!weg)g%M%q6<1Yh_K+ep&D-`qx>ZeUkFw zJ@A>o(l+oR_y(%LM_}*9B(+4+!18spTYLasw4P<*z0mb^lB&YH;Ts#1)Lr-ptPimd z;)8I(^Ry*=0Or2HI^un>>r0dqZ@{Kkl2iyEg^jPWeeofvUZefvg%i*__g2sEaD~X3CXd>PZ??=<{L3jY=I}si$6_LqwoP}e8&3Xg`a%E`r@N-d6adL zH1MBj6+Qwd9b~=m`EVr)sW8&MB@2tJ2A_%Qqc4a7%bGa8KNq^8o*P`n#njJ$XsT#QEH z1MoF879WP*)MPagFMOm!vMRy{;qLTgRf3Pg#!ktq0w03ij!IT5@dg};R^ffH@3G0M z3h#jzpnAL)jzViC4V;V`@cHm!cd`mfJbVys#s}e@$0e(6_*$5He6re!cf)_8C_VyR zCnWP=lz2ECrQm&VGfKyY;n^9K74Lz+LOt+a*z1=_;$hy2)FD0}2GLl&@RF0L6TAEysu8b0~lh!+)Wb_z3&}t-?p) zw`dJsot&(4P!-+>UqE-^!?4>a$*LA_zGzv4)uwzf`34RB@O%=8j26W zJNqQ7T#1MK&_ulIo2;%y`S<{Qryuo(k3iqK)D>QMoQL|s8}KHy244jqK-Ksl`~=nD zqwvv8>Otb+{Qj&b-VYa|4fp`OY*4Za;q&3c=p9K9x1b0<3|r90cy(T~>Vu+q4=g~< zct5N`sw?XSUq$KoF#G|z@#3aOHmCzA8thT_z*n#0@|3QfmfqOd;q?OHsB+0#D%msybrFti2WL01#kDVU*l_` zC!2c43qvT17iJHmp7B2Tr<`PUP|`zRF6((5@$kIi)HB`-!>Bu6IAtX56Q2)%hdlUN z*liSbi#Onn$cwLnd(kL-6iyh;GVu9u{ut^O?}udX-l+o)F3z@e8=pLj3490esk{CYg~iRb1_Et{0Aw&DZu-{>8D1Wvt- zW3;4)e?(DyE$n;+^@exDE2mRG-ADs3%%@K9URaC<;{9+~0p-B^;C3_$ABIy3*-!EL zu)2i(6kiJ`&S8Be9u}hj-VgtYR^lVDWG?%u#KRS+8eawPMR(zY@Oe~&55wW5)Ct}P zzeNprH7{9JqV@PHsOHl?Bp%L2Tk(GQDS8VZg=@;#e0#|s>Kree zbTwgoKFnN38^e3y1J}?l@j*E4TJ}vz0~exq@Bz3F?Zm6=I3}Qv@dg}uJ@twA!6hq5 zC+T5_8>zz+C=cv-Gj%8)&bpmC#QR~>9qfbnDC~Y0b%HnG6Mvu{@FAFdAMFkAhFj2G z_%Q6hmNtX;!t2pmd=;GeAnS$q!#|<*_*(d%hu9wYD7>tJb;Rexv5&BhcptnUMesrR z?4z_9d|&(j|85qR&5v@=Nq-$c759v<~FZ9vk)4AhJ_ z;1%c~J|8Z7g?%c6_5hQ%(FX8t*lj!YhBx3ns5?Fg_ag(ZUQJeievLZB*TV5{P;Yo2 z{0QaZqj1ohY(Kmg{vP=xJ?!xo^@jJr5|oek!-ph{55lw^)F<8z`=BL~9?tp~^(pD$ z)2Id?g2Vq!ec^rZ#0d3+H(&^Dl{9eJ`y78H4SchSwuFzsRl8|R_$ui7i2A|1Vd=-z z$uC(JdN2jO*}P!IS3oc{&olQb~;C2a;Tyx}X>7heTW{hIZ~8*mBA#|NNmKkJKk z!}pq5FMI@!`i}O1_ra#`+3xr#+~7)4Tk#=ydrFFm;A>%OT8e7MyW!tDr0_h6H1L9s zDXJIV3qR|W!h2-Q2lhWYg?Gq^hhH6&!nTA(Z{E#Rd_c%4K?CDuqY!%t;hRe z3kpm6U#2J*dP~y73worecko_#KZ@dma4TxYhv8Q}Q`AAcIx|JhKp2(cZWx?MneoE6FH2F&@e%j~T7y@Yr>L7y6}}2~o1CJm z@dnJDlEO1T<_Qa@Qck=d_Prv7dlc#lcDR!5f_K9OXeT}ZkDs2RKE@mHH>eq31wWiY znNOzta8?mz#{1zXv#4{4hf7OR)KGi?{&_Ct$Jav7@)R`U97t7FcsI;Kcj3M8dsK^8 zEvf2Q)F^47f!5=NL(m3E4^RJ&&eZT8=ub{lTk*oxDQW5;z6vf*OH=8mv#sH2>1iqh z?}76=rm0?dKP);nO$`(e_jXNFCHN?ue?ppCBJuF9j5M_hUkl$lF-=wDBT%DSygDgO zJ$ibYT8j_Dr+cTVo%j&^q)(dKhmXSNJ!z`*8MJNKBQs6)!F%ANXfQqqf73rrjlx&K zs|Td1iTD64zaUMOiidwhEAh4P_KVWg8u2iB1m(fI;j$~!)Otw|ZsAs(J z*LSC>ka&0}dIw(%??XHBLAVY@@FDm*+KrFE57Ec?DEtO}j#ss5sym9}4cHSk<2`T? zI*9ke;Yjsl9pNODg3pJ=C>`&I3sGl$0M;Nkz82nxGVnpT0d>cR;5KC7!|+4Y10RLo zqh5Gbm!^(JeeiBL0D16UcqbZ&uZ7p$LtDZJ;BEJ^EhHZP9Tnk2@bP-;Sv)-dzBCoU zd*Sx`X;=6#+<~g`5xD3f_5pkVZbtQz2JS^`@lkl}!)dAk?}k^RAUPzWD{-=Q#G zHKeH*Q3M}`-5;U;@dliR4&w9S{V4rR^1=_08y|&dJW3wC2VRDH;q&2NP#=6P{N-cR z1Kxl=kyp~gn^7*l3f_*!N_u!!khUsm;LT{Vq=9#!d`SaSAEyrSZukr2#~ZNo6KSeK z;^9KH5+8sI{z|(Q4VXfzX4D6-UQSbAqJiRHp&g=8_#nJ?8|#h_z!lrs2KXv? z{;RAn-V5)3jdjG=!gXjRJ_O%HtMC!{AzFiv!e511cf1#ldxL!d?}H0a5Fdc6-sBjC zuY!}_Vtw)X@R%JO&+%@U_cq5|iHDcI!~QECj{Ya@1n+~V{flkTi#ma>ciF%2Zs^)c zJ&1=dqJj7@eE2=u13m~Fkq;k&o6$r`1NWfG_$d4uO~b2QX=?en4k{lXfJ?9Lpw@_o zov!Ji8u4!U$}Jt#HhdUfzNUlPjn9V<-`YVP#0TNpst&4KZ#*1-TL)#}eX#rO9k_<3 zUBT^WC_W57_+1Az3Lk|JS9eg8@jAAl?W*g-A9SHZjQ?x3phweZGTmM8JB zPhAJjOVkydbx#Mi8SjT%@9m(%_%O`6zk`b4z3}M=I&l3?{lJkAcTg#3Q%?A91Lem@ z;Af9@P(AQbIPdWeY9QVZzYld#xp?(l2X+0<4r&^{3Z}f*K~>=0aMg#DS>oaE_flqj zE&Sno%8XY(Fn?D%@9Qytcus1%3gbQSmz~m81aH98JEyB=iHH4bwc*svhr! zxtFD@M!XLePDxi=@qT#mv~;yo;^A3^>1sFL13Q#ZPP`lba&Efn+=ueO-t*H{cf1EK z^QWsm_yF8_L%JG@kHF?t>1rZg-JGueT$8Ty@wM>9+H|!9ABM}_&k;c2_6L%at*^<}#H7$1V8bvnNlP-gfiS4WkBuZ5o_cT~ObQFwk@M>QDl zg^~1*Y7}1hS;vlQnxui3{;&4V2C&Mq?*G?42J8(zA|fj4L{n7KBfd>V9b>>yz~jbS zMsc=rVAHX4+zX6STZA>uYMK_AaO{h$8N^LP5?`@Membzd*P>*c=A{hFJtYS3Z0X-qcP94HT*bxgL}fDXWW z#%J?f4*9~@AD68TpkwgYCT8=D4tDsp6Db3F5We>0Y&8WPhS!{utqRf2aQ~UvY6*G( z{@B^ssukS|UwTfq>OdF5pExg@`!}(}ZBy9?-32ecfPB$m_{$fO@43_$KJH5LMd!l@ z3$xV%w3?o+o|-|u(0y=dcD7oN7QUqsiXs!d^TItzJS0;0L#7tBL26 z7ktgmY;^%T1h40X=yTDn@E5<5t(K$X@Z%3=s|Iu*{J>YU)g9;_cAv=jJ8Af!HqAHKDrq` za(}kkiw?lWzsgq6p+j)<%cLc7;F}K6b{C@IQ+`X^p@Z;-KW3{SIu6hNQ?{x?hu|0g z!v5$1__V(fPvXNLdyBS1x59hgrtQ!@aGR5(2GCvbUE^|iUW+v0+s5apf{Ta`FFP(r z@v?2sdF7~ACg!Lr^dNlFNjc1y^d)#=evZ0ZH2lp;IjR%g2TwRVM?Effc;A#9^_JM- zW#{IoaTk*&eD~BGH3c1qA2>fp6{CCLy%*-F1)|~df*e(Yj==}6%u(yngYZ4miHDBE z=N9Lv=g>iT`Rp9^s>FvMD9KTo1*8MNbQNVn55mvR%i&rdzJk|=b5ses8IDxsaLtc> z;d3K7Dvl1q4_D==ZgdYkSe?UjX`}bQ~^tD@QFAJG>PvM|Z)0Q@JXJ zR!**(0pjQo{8P}59)Q1_k*oHg``~9r;Dg{Lv>KJG zt^=>4!|=@9T=fPz1U~`tE+Pq|uUobycO+XjIPlD6XeekK* z;x}{K_CbJaS~i*AJ<1^p5q{w5ee_rcwp z@tfG;o3_wq=w|pKkU0Z8{4J1&?t`BJ0rUVI-HPAPF}M*-L^s2K0r_avfv><6bRqn4 zZ~?j%z7I@8$KjuWLi7MUYa4R{Is`8RbJ1b=+3omQ;=sQIVe}xJwS&Hm4#0as6}kt0 z9yCaN_!V%I#D|~SiJ#GZ@Qz*h6Ws-WZ8v2?_rQMv9ca~+t5$pk-=bsi4$v*};cq-h zei9%4+C%tRG#vRhewO&~Ip3i@&_VczPf*rk$^$Rz#c${^y!R>mhVFsKd>8+q1MosH zP2#}UgJN_HE_|B4hZe2_3((DQ^YuAJzR%Nt#11cbk@*cBhEMnva~e7y{yrEt z6F@$xA^2CXFs9IhaP(E`h>pRVK?vOif9nnMK=;A#{S);<2jTT^ z)4u3d_yN$0?t%aCcj|@a31ZbXB2RUog-i1CR5v;Vk2o@qd+6{p{FAYH>Lv65Trw_C zy(MwrCNORm{)E*rd1?Y$_=IAAH0B$!#@KD&;#%-XXdFvi4T`ep>DH@4-bHGXyN(q%~KQ6A$SEi4IP7T z1(VUO@B?59x(6;eCr<^@h42$#8oCeOa4tSY$Khjx)E%7BBog z4Y~_{7Bry;;A1bqC+K{5^o95Y9f0>-OdjYSxc-tn)roF~kH3_*miX|!pcfs7Pn(vf zozO~hv5%_)6mWELxuPU z-2?v=6rcy-rXqYIao|@$2t5cdodM8c_!Uqkc6dcG`=Dd+BcK`G1OH+sb(c8s>REZ} zZgeyJ7`RX3z%PJy^Z-0{HvJ!62wzcxe?-GKfj#JE_+GFV9f#ipJ!my2Prc_V{Duy~ zOTi21Fnk9XK)1pdUCY=(7s6}6Tj*wZ5M<7wobVsZ@F7|)$WxzRNFPJT;a@JohY|-q zaxwh}9e_U%E|56zpFlBMEy+`}KnNXz2i}*bmY{{-e_fthjt;|TETjLRgYbD^J-QH{ z4qDJ5_*!s>#D~j4D>??>2<}EV!yg43(5>)&0(2bS4C3f6xH*iUB|iKYum`Qm=>y<# zbPxP9(2pK~b1Lv5IslKWqz>qOc>8ktA-W5`yc!>(3*oE4xT`2L90e25F}Mj#L^s2? zf_!u<{1P|~JqRzjo_>f9!#i$ZoT9tnAJot%(S5?T_!eCVuL2=-4E{D)AaUSRqxcye zgdYb>#SXte#+XHi;YJWcH^UR_^Hc*mAO7QN{Et>^s28{oT?j`(936w3o9Lft;ZZj; zU!w!?u3PAP=q~t&pdUQ|tB>MCwD3vbRdhaF33b3%{we4{55Tj(L?1(k;Ps$K z;=>JJrfty8@a^01mDu5lyXjZxeE2fJ!!W84zPgLCi4MV=!8mjm{5>!M-3PaPh5ga3 z@HZZyFQI$j1rOpMbQpdOl%NOUBfrWvbO3&{oAHQNU(ZvIf(CRC{Qie2H#!V&c!c_* zKn}W;AwOZtRBM;Vuw!$ z1LztzZx>+yf4xh0pF`|9QlRSAaZp41NxbLl3|&fr;or_)U0mF8C{8DY^%K3WOy-JpNnw6P*uV1!~YC_&1;d zJqTa&IQIWQi(E<4KXYe_?5Wea;ju+?V$Kqhs(-Kqq!_xuNc5TVu#-ZQ_$)ctaZT!=m2~(C_p#Ee+MNJXFu%-mZ0PC#lOT?5(oY`s6w~G zp93`#2mTR=p$A~+CFVDD0DciPiyglBSNIcM2w(Fu;|(2xkN7qIl=$#=um{}*FMb6d zqQh|Y@9-5m1}}Y$F)McX#y{W(bTd5rb=o*Yn(*Jj1ho1iYb0(aF|Z!p17{sSM%{r9z_U*nqc)&J@Y55=s7`breC3H_ zR5!X1EP5%kJ}@A0V0H2sHHa220SD0`xCUfiOMLjZ`Q(QlglkS2qw>WLKMkg! z`{3IrjZqh%Tj6IxA$kDrKb3Sv!?R8sqZXh;u=AcVYAHGZUj%BdBbF{%L_gI_vh zjA}s-!hf4g9ntE{F{&7JqC@a)XN}=pCi%iQo;^nGMK{Cir;JgLiyhtr`p`Y_58gXQ zJ%{dtk2;4u(E0FL-~c)ZuLQ56WANX>8|Zic{^xtZ8JVF*PIZD#-e}IPWd%ovN5w{l zGJ7(3ADojjO65!)6&xAPjEx9oa4SCVL0X5MYA5#dYl%~&dZwm`NDtji1LhI3-sp{$-!eVGFpgX}Y!`@>7U zl-+bqS^Ra8a!K5&I<7x&fBaEAr%{v+v+U8NLu!G2^&B7%OmwS^*vmcbOrvh z`NI;&w5!?Yo!G=TEdH%X;a{`e&nA7_55@;3uD@Ki|5NQJ@ol@w!)7~;F{9NOXPip5 z4Ev|D$^Q0!{CeiNyEK8bpKe4r4Hd}LlzCB|*{xJ9V`A4vm$|hrdl0PQpNoTjqW^21_ zw)U6HA5K-KRJL^GNoTjqW^21_w)U6HA5K-KRJL^GNoTjqW^21_w)U6HA5K-KRJL^G zNoTjqkWTx@iob0BaH?{pvZX6iI(xeE+4lce%4)Z{t?jbf+V4YuIF6t>;}?RlI+)LZ_F? zHj(R;8#2}S7Sr`=S-Q9tDbh`s-=Tb)s(ccEU5fP0Z@+ii{;p3`_wWB{K20^( zOWPNv=o{(cR-}lVE)B6CZv3`1>8DF)-C@N4cl6_Qek@8+?sRd})jd@j@A{l`Z~ub% zI9tpv z-hSeo%>C)9wzaWs)_67RV79vaK$g0of3!M>v?i0*B;w2avc{8VfIM?4-)QHUL#K7s zcy$%enoQ?et%Ck6b#Cuyb!Ious&|Z3C-QscSbnb@#qX6oe&39Cj{V2VK5x95caZxL z59FxJ`m@#4UY--}9!;8~NOL4Zl+v)qyMP~E^Vp0sH5rU{+Z65kEAb2pOWh# zrJSP?9{Vp~Nq3)4_W`bJ%C(*S<|+tw|Ftsv`jTvWHhJ|ZaScz>EMi|fuFR>%ZdmFd z*HTT`j$^hNmTdwlpMA~K&coIc*B|!p>krF5lAriN_T8t?{VbWNmM~9U!#p*MdFpcJ zsSB8=&Ssu^5A)Q?EhE)&%v0l-r;eokhFoLdJpo5d9r}yZt%n>-i~KE3{>B$>Uzjtz zFBpGFJZZNZPEt1=_Px)prS`S)ms~4+Kwl@e_ZMyQvvsO=5dWKVb^d`s>ZJ?o&H>?r1}f%5TY5$2Mg#PqA)yCM4%6e;TRof3V9Xc|2gv4R*OCE&JXC z+gG-hH14v}F!d6y(DgJd^Np#mJ??ESWstULOVJi)-$UhL@_Hwhve@bTBVm6z-)VnS zUfW;qw2yzgzfBL7miR8!cDvjr{ZuxyEgjqYn7Wy`CTzzMZRQ8tF6H!xQ}tD;yFIS$ zy4l*4!JUtf89skX+UtDtkEFfdnlmH~=`(h^qRo9bc3o1~w8y z;u@B1W{&pjRCyUcNIoVFV|yny@eP~!{;;tdHrws?G~2|s-?}zrw13`_x;?9Xmuj0` zSGyfd-cny_&kCzOWm~CUw@hODX#sT_>wuG5Myd&{1CC}LaKy8|W2x<9NpF&sp8cER zeaCYge=o=JDICYo<~V*9$MG{cj!)(|eg?acRV0b^2a{B!wWfOl%-xHRw#F?c1 z=H|=$jMrK5Y#-QK%0E^6QFN)+a?C9C)zx1X37dAaS;}SnEc0?jnt54#ZQ|Mc7o|zp zwo4t>>H4NRzKhM@R;JC1tTqx`s(MNKMLK=Eo=5WDI)3Zs@LShiPue~+b+P0BBlQx0 z9nW(c^s{mFvm@zeLyobM#yaApTW?5N_vy0Q?P<5Ot)-u~Sw3*@LmZo26UcZv)O~&F z=Eikan#LD~jUUn-r~j4q{VDp}q0*m}CVtVs$eybIOLQUZ30(QT*wZyagkelw!!_&3*vE#e< zAC4V*|C&8^q)+a%`j6~u`m}$&Xy=hC-Bfdzq)}?EIVH|rzWFUxzxIy>?ma)fMc#*y z!+nd{+-EsqXr1OCtLFC}sb+Q`p{8|=QRi>q{(a(~Lj2>1f0UCy{5q!8y~3)yX*;`~ zww7{Mq*$BS{dOc;CDFICVAq6|vtX>=$GloxwOdg>iHO<7hnN=qTE2 zXsgq&ZC^=QZ9g6YLe;+>7xV6iZ?t0av6#kPm z57(ZmJtdvCH0h^{zduEMcaBIgZ>6id*w>{?C&e7*rhn}4ez0ibKiG#-oRgbAK~3j8 zPyy$G&gDGNnXLa#ZQ*=8$K?qemyhP0zQ2U-GXwj5?d_H=MO^z{2m4+k+iq*|Ns&Lt zL#zeT^_NubbEtN1OOxlM6m}W^ZSOEg$ed=^*UWK#HpeBiUN9_k)6}6OH}Ts@(vbb+ z{NC(i)okW~E0_Z=WDc0Z9B?Xgz=_NO$1(?uWh@Vyvk!F~^3Mkn*Zj5!O<+AAU_E~% z>-i&C&-2Vv3(p=magThJobx?(cwg}!PyAtfKDM>^LDq>S6I96o-U-*AtuE@#Qt#~^ zti(jpGsr@Xt)v=EEL5`yz z9!WnO@;k!x;Z*xbdNLNqT5B}1rJFPSZ7BOrwf6OIx7*ks*WPC4AG^QUTFPXHO?O2?aDPvsO*U}cYT>xm#JkC>My8&Jr9S&ow5vNu zq*-^RnrkGTRCasp+1l@iLv8cN^@k4X5+F zYfrHjlrkTxo`>U?cPgvoQ<1`N@3h}LZBJLXboFxMr&!C&Tr$ZzW)I*S8Nc@Nz#o=* zVXSYRkjiG}q*QI5%I5DY{;=OC>FR3t$8>ST-jr1K1nyzmD z?m8T5{7y>KmZ|Eu^dz;EdjQK0@P1eB0X+1%-xTMI)A>j26=}+`E`>c^n;cGE{@rcz zUmf57?((NQE+0-CEILUoI+*hhu9;F?yLh)hCEsC`YMwouw)l7Vr~m4B_JXto!^Ax`?{O1qTm2=s6t}D;un&4cnD__lZ<*T@^ zJcsMbC9E4}b8qY{t_{uPe04F;qkL)jxmEM5mz2|-x3{%@?$xe~IqzWD-gdap5y`nC z|9J5CFaLJ)EVg0eTT>qKS6hl>k=cG?-tgyjp4Hbp?7G``6eI;*!@sY6H$7b97+D=!tNju27 zYSFUIToaJ~e3x~;TF#02uVYDh&9x>|21&>D$2G&(ye5vMZJ!I5YXtUv4(aM^`%3aj z*M_pq=hkH$Q?C@)%{`QbE2<-kLVUx$9w7pHr_YtRx~b+;n3D|KZz8#i2`^Sr^lPR+u_V)=B$Gz7u+mVqsBz=E; z+sEm&Nz-m8e>$fg!L_y=y@p7!-j?{bPb96^_3=aMzaKxyoR_NK%l0<5+x2$qcZS#R zWqSqN{dveeWzLyHpC_~HU~6f2|Gf})TS#2fza^h_R{P2}GuQh2g}u$4lg=7GC%N}l zW;)5?v)SU z-!1$0q4#FGad!@n>)O{0w@V%TKDFyB+wD4=_BQ>&)Is7D>0^!S>*I&}+U#T4UvIb1 z95b}fxaCgaJ9k{)n!NwV&OcrHsn!~%KBgXKyb0TV)K1^-SCW@m8`*JeZOUU<`srQC z9_OT*_au*J^%#}-Q?2-R+NstM{{G_+n>rqjUCQ`?Z>?*W!`6~+h1Gvey^W9E`Qun` z{;;>L!{?@K#%@^bMoU><_m#!$=k}Kyhxc>S&L$0EX*conUE0t7a!Z!@F^)d_kC(^3C&a$SYipCQVSic0 zF1CG^|6ISEnYtXtpQer6xMvTK>mLu2k2@b6m7EVunS>?&1J?Kvo4og+X*~Bz9>cSu z=OoweC(3>A7qbq$hGborT_(xGei9Zo``bP;{x@vm`q?hGiEG&S!R%w~_CB`u*VF88_A_kKGi>aB zw)>T>C0&UtJ~L?uS7@KuEOFiTEl#$tKWxe=EcG$#npE@qQQ0GpdSJ{5J=6A#>>DxQ zzN_7o!}f=pH+`Yb>I*p|N3u>I;m)ohs~-OTYNwMfZNCrfdf5K5)3UW4$N1jfF70X0 z^Cphuk$Ns{mo!Yb?rqZ6`bN{;6pSIa|%;=G0re=@O-tBSQLE2|( ziuRGXrM|d+pWFTrKkUIvyLI@*4z?rofXfti`~xBHtEjq*zu&CMZ~pjCOzAC#^!G~W0$&3_0`QE zH&q-dr$3*u^cmYGas1~;?Y`$LKbzF^*JPCnpHv)h=l#Dk`3oioc@DTBz&C*dDlm|t zLT4zx%`?jVX1IJGyel|DHJ_vSZlF@3bCn8$W>B~c+Xt}S1?O_z`ZVm5mFmIPbBS`l zXC&V@lJ6JE_ly+r^Jy_5$-plx(*PB@5aiv zY~|aw^6l@Kl<^lC?l;!u+v;)lk3UcNrx~jCgc0ty&gI+Zv8f~6?^E|Yi2d~u?)Pft z+p+R(TltQye5Y2vTPxqgm2b_;H*)2Bwer1N`3|job2k5vBfM|qet@)AjZlNN)Zqqj zJ$0JLHgu?lG7=sj+(oztE}Rd-#94-aBu+Wy;@O-q@q#Dg!;A5G0Y1JEz`;EkYCy_) z8F}*Uc=@)pd>dR{q}*>#%eSv%)U6rF_o(F?*7A*N`L1;=U#Wo?GgKHKc8%uQicInz zNxpAqsJ;=D8HA3ce8;d&(j!m#)^*@(Y@0}WC$XJ$%e&G{v37rA^Wj^;3?`0_lf>Gbz`4G*^e^xfo34zN|*1J%Qwp9yXLXS$gc-q ze1mj;FiQ0R`Sz7M5&uz^d`W|{$Tynh+tu=IZTWV#d=Fc`k1gM8R_g&;zAG)?oR;rt z%Xh2gyVUaiXZc39d>c4aMERyuhs()p2Ko}p2|`y;Hf-T(*g)S*!j}@B%{I2j;e6RX zhx%RxuBIL(*bDJ3aYM!UmvE4@^WoMj$>Y%sRoG2C(0(!Li$K0-A9y4~H9tiE?18_< z*!)h0%6~FL4SpBRcZcPh)~(}}ij7n5H}B<}_I>mh`S!4U+gZL@FW)mBXuv-=lP4Ui zgX@U{ns1?RegxY($^!SWEk>L|>eB@e#MpKtbp!#nwZdJEZ2vIvzQuc2eoI;Tewchu zEZCl*VvPGjAm4P8Z@_oaR((^LbeKB|-^(}!A$0g`%8U-818nai+;bK-!h>*tZE+yq zotJOS4>;5-1O0~__gmlcjqkn)W8qHxL0J`k@1v}(m$J__q)Qq47#o5ApnR|8sMeq3 z!=DkCzTVnR+~Y_ezjd9*J~F>emA*zB#pnwc!9ZOM;27u=Tu8ltgWvblHqVVxUC-g4 z{p|k|aej*LK;TFC7KC2Jp99!H=ojek0s8ykv*h(%;vXRHuffx7$JWL6Fx$JH04L%r z#<_f>yodY-zMG?(U&(O4T_@kTlkeHd_wD4{cZzuV_^7LoF?TV1JY}3j-Kb}XF+Iq9 z7p8A0#!?S+dEr|*s&71Hr0j)^!vXSZWn2XqUwzCO0~gV6NJqYP-NzW~dyMUm5|42v z-*cDmn#;H1<=gb~-E{fpxqQ=Hz9lc;Y?tr3%lF`ej9dBUyL@}TnR!CKe=Xm=mhZQR z&cn|5l5cCbKFJsc>M59S>V@eyg<~lX-=OQF4V!^{2QXZOZ6D?M7G?hs`>rMZX_WU$ z(x0)orQ-KfFVNb>@$M_|3d%uv01N^} zoO}=j%^!r%gU<(-6L%{6!#!;4lX$xcgF0UN+p@Kx{~ z@C^6`_#IGlC?_}z6oVz;MsORrAAA)&30?q$VDwc1bsRVc%m87~1nvP3g71MpfU#Ex z)P>+$um;=%y1~!DU%-U9ynhkQ2N7@!xCeBCZ-ajDTQFi?KphQE1qGlKRDhen=Rg%q<791`-27d=fEvEg!G;l4r0jvj~2Rp%I;6K1?AY%!>15>~( za2;p@cY)1dFL(y*2Y&-czK`Dr;4*Lx2!ndC4%`cNfQP}8;K$&%;IAP2I{FJZ1)K-2 z09S+MU=8>fxC^v_uY(_e1K@8U=lzrsoCXTO3~&v&9^4FC!IwZ6*aw~g`@tZ{TuR>q zlflKH6of$(+zdVqJ`c8mz2HgE4_*d;1|vSe?;vm@I15}1iorFY95jIS;BK%9>;X@J z=fUqm<_81nSa3GD0+fO(@KJC#*berBXTYz4T1I)nnP3K33}Rp%_!8&@-vU1XKL@`B ze*rmR`VE*0W`o5b0_wo6;7+g&JPe)!FM_{2vUQi5{fGGF`_%hf7z5|{IuY;Tl z+7Da|=79)U16n}`cnmxPehJB%G1z!d`!K0uL><5G3Z(!7Nd;m@Z zQ^5>S2CBhY@Ja9`up2x9UIMR!Q4x*_U=j#|nP3699;^oI!CfE@c7eU%DexcQ=it}i z58zEOVg=(D91BhZQ^1Ab3Qz*B1xvvSuo~P7J_p*sF7P$*P4Fam7W@nx0DlC32RSS8 zJ(vh4gY&@^U>3LrECmq|10MmmgL^<6bb@a1E%1HtbMOlIGjOUn#(`tOBybM66wC&t z;Dg|L&;ULHZUbKcTfu|iF~Hdbm7#d2mKv!>snIG+Wvd*OtMb$sb%f$urRpd(RvoRz zsbkc5b*!48j#J006Vya?qB@C1Xudi{O;V?-)6{#^>FNwMS)HlQQfI3v>b)%e&s9Nn zo|>x8R~M)Y`B{3gDo~fGOVwp+nz~$Fp{`VgYPu>?GgPsfsb;C!szl9ESE;KNceJVb z>KYYN*Q!!grWUA$YLQy3mZ(u+zQuP7#LA6YURk^BAm1?<)s1<6Zs#4YJdUb=U zQL9v~imI5pQPrt>)u0;HYPCi+skQ1u>ci?Lb+fufeMB{@kE(U*V`{y+RefB2Lba&d z)a~k%>JIfO^=b7P)vE5~^u=e@-Rd6oIrVw9L485ptG=l2Q(sbFR`;v8+Nj#pCe^Ms zt1W7)>QLL%cC|xws-0?=+O4|OSJVUQLA6Icq`s=Yrn=SF)x+u$wO2i=zM&pdJ?fik zpZb=1Tzy-8M?Il>)syNe^aXfe^*8mF`cL(?`a8|b|Q&Q#}o=K|+K=OX7~r@*tE?96m#IkTM-XO44~ zbG0+qndi)Ru5m)nwN9y1<}7d)I*Xje&JyQ+&UMcFou$qPoDVw7xY?rIsc@C^QC?Dfqf_V9I}J{wv)WnXG&yUX4>=!pZgOsRZgD>1G&>)4 z);S+@);qU4A9p_Cv^cjpw>zJ7?r=WkeA@Yp)9T#m+~s`Mx!bwN`JD54XM^(v=U(TF z&VA08oG&}~J8@^D)8=e)+MUhL7H6x|;cRoZJ3E|CXQ#8v+3j>WUvVCA9(49N4>@0T zzUFj0Uw0mM9&z?Mk2>FQ9&>t}Z#w&&Z#j=U-*&#^JmK^@PdZOI-*ujLzUO@3`GM2t zJmWm;{Lp#M`H}M<&X1jb=O@ljo#&kwoS!*AcV2V`oL@NmonJaHIlppVc7E*~aDL;w z;{4Wm)%l(Cn)7>S(D{S&y7Ncp4d+kJpPj!r2c5qajqjPGjb>0%X zwo!+Q8mnuTPZ!gSMGM>vsYPXDO?g9PcKNDR<)!7TVxGAsQeHQ+t}g18Vul2z()D_4 zv_9e{;|mr?R##Vgb(|5cU0zfdEni+)Uhfq}EM?UzYs)>yN^o(xE|>|36QhlZ_^Tsz z4OTwUS}}yGn<6#3AfBbHv2I0qGGB?LO;#(+sEbg|8PS?(-HgV%dQ&rPtzGU_#S8kk z&ueUmG+7Z!XBQ30)7>j+oK+WHWyg-xE|1jd&fyiKEV8ORRu!$&zH;|3t16F0mM^ZZ zT^?Oy?OhgK(XghxE>fBzm9_N^kyXQLvmnyc&^RP%ZIN;fFZY5fvbU>0tO%ZAdhPNQ zW$?BoYFr$t@eLO&!-fmC^0jUqizD?7b2+Ka@cJmB zhDe#N+bw`(G(H&ZmLNoNtXda(rUsYJqhCJ|}3u7np)U*u*od+xF#I+pDm zOlC;bHqc{CJlZBA<79|&W>Z6?w!S)ATh`24(hK9Q83WkVD0vk1` zW7hN~liXmniI+&IE?UW4TNkPK+~8Tu)|AKQP?EaUde*=^mq}%Abwyoyo!5mh%`3k_ zd?q=XGL)q#7q(Ohifw3l7S>h__m<4DzMRWfxsIxf*3?AmDE++hSgg8srB{X_8)ryQ zN@4f)BW7VMMbEe8l~u;w!?re6Yj366;tqG3CS`$0TY3atYkJy5bcCYDhK6Wuio#18 z@3`%qN^w<`S*%(gyoS}k%q{;ROPPq0wk+wJMQNq59Gk|>PIH*pz2m~r zf?pGhr1ICo*m5&rNYmEWbD&~Ol}2PpdAVSg!?SlFO=dpCEYnV-Zg;bxuG-9HlCmT* zG}esJ!Wq($=2q86%Bnx4>%=(49&I$khHy=FEHROhl!Pmy<#q1VVT$N>=K2OE(-`yk zyy)^|a&maRI-&<=VjA%3G^C7rxTZ?O8_0{Qmq((-{(a1Go1zs*R+Kl^$V@ZDSbsx9 zG?pS+Z7QO+%M;E^AJ6uEa@r?bcf@*=y77k`-;Ad6(&O#jwW+MKytdNv6=q*7*U_`0 zmC42>j%!RFX(#~>_k|nlIYwB!&5L3g5@&wnDyw59>Yp&Xezwh)XKb@~9QK;Uwl9b_ zR#thvc9?kQ=~Fy0(&;k)Em#+4#ZQ!m;kg#z<{tqT{)X zL`EoUaNEftmb#LfX{}InO@vXrB5DjQ;w(8mp;@prFvMKP+8w^s-Y~@D##7~MifUN8 z4c$o=gvE8`Yux2%G84}%LwQJ<+?C&g^179gL^tzNPx``yhwm4uyQZ-r*4SW=`cl^E zax_oo?1kwL70EPBhn4LUbv+Y}BA7ZoCw6+KII%RrItg0M)B57|SKg?k|y6Y_~ zx?axsQ_<#Osc8GKRNVEinf)UT-g?-s#R3jbiEe83bW?2C}$H3C& zy7G#lMey%9ue_;xRpTnVXL-BMtFBGG!5WrBlMY4etL0cY)H*z6dx4uM>4NHpn#3W< zE5YJq|6?|huw30==o|C+|*k_kl zdp$*4$Y#1eUz4;9OK@Rr%vV2eK{g~}{rSc7_3!VJ^7`pD4b_VxmAVe~!&gJZN&b{G z0n>u@?oXF`I+*F%#F#g4iAk=sctP0=6DTX2Y00UUKHt(8oM#7;vD_cDiPeJVVJ{}j zC~ru(!9?4MC~K@Jb59}YP54;~n^^xPiZ2#^{>$Rgi&{T)y{nDh&+0@es-kPWR+>|9 z{owX~YkN~Z8>)OKJ?7NQG(D%5Bi3~Mw%W_kbn4_NHWuFxC}U=@^0PGg)5*4*-#eDA zh?9A4C2U*rr;TOx);Nh@3)Yr&Hs22*-yYtt7k}O*`qZI`Jg2t4K~_L|22Pmkz3x6_ z_r&aDVu@kMkCns*YZ9_-;ta0~+eX(L!^{+Ps4X!onSHGvJ@U)FXkKWUK4BrjVtzW8 z*DZ*w;+I5&o)5)7tFbmYYQ%6&#r0;QmLMlKlF3xw;I3_5FUW~eYo(j8CC?~H4Er!5 zVZAiavArMgbE7L~)NxR%)TbT@7e^`@6C0Di3fMw_^Ojk@g3E?bU3HX%yy=m+i6aww z9!LK2m0l-L2ECIugi9m!iT$e+?pY~QV@-`eU973gzy^O@)+ZI_j0E{CF0b>3>Ree6 z7uD#~vWXCDyBd9@;3uo z&a3tU-U{Ar7Wd#a$L{bPL%r_r^+1BA&v^#vipeAsA?qZyd%R0VNe1mWkx0y)WV}Ru z6Oi$#0(rqi%<}4b+wrBG>Mfdi-bLP?Zs2_HDB^9o=z_$SxpuU}s9QO-4){^M;!2^vr2pD>-AbqcPxzoJ8>w#L6&}xg@cs zO>A%nmz64U7ga~rBu)x>5ks6BHRm@yi?o>A9qsHH>nXCwnmT(n__N29B75)W=g@Vr zcj78>9!poDp2;c2sV%0m1}=D5lYpFmXBta&2#`(IkwSt)qq%u;0f65P-fv=uW9rqRs!}0(e{NVDx4^ANqOyZ&gJUlhq{t@!xw;Jv`>0TIC(~jQ1UP#0lAcD zojk&nIC-S?;_8N~A+t61d8~J(wY^~>2Ky8cVSP!!Es56~#3&caycyKKWWbgoXDt%H z%iRs;%*4=N&qFr3xfl<5UC}x@LDW>g?vv(WDX02%pN#G+x{h2rccv*pV!fCc!|bf* z)*+_`lICGW(9wsS8j$GjsR4g$cwM-N>5i*<-a?kR+B)?2e8QgiJ)gArezhky%xYx$ z<*w&V4ZWm?{!C9qpKX4oCoFR+_3!9}#s5P+xxx2CJ+WcP@9~7yU9Ar-Rbo0zL`wb| zFXI=0Js1e;^-fXLo6sdjSv8BlNQw>iRKZ11R>~1`4W2V?b#5EGKNP$Y@gp$N6{HVgaH61Z$T@eXH{fXrM{Izq+U-UW&PzA5nZpxKun+SxRL89-l(XH zB$KMgOBJ3w*um7WUY~%0JYl+&}X4t>2(E9TDozF zP6QfbUMdZ&1Nimirq~eW9E{ei=yl^UvnORjHLNHgs~XcvtB1I9O=W$;4X)O15RDt& z{rhJ;@Ip-P@$~)*TDjM>DWIOdF=<lT8BTb`EJcyH1E;etGQqE zpysTPdHIdkJX!Nany=Cv*4&`^cFpaY_h^1xbHCFs zn(xqjpXP4O1DfB^oOi32{zT2EYo4aLRCA5y7R`5S?$G=V&ChCnRkQlIm;UjZ&(b_i zb4c@Y&FeJZuKCNFw`=a!{2k2$n%~l#_X(Y!<|&$|X)e`VrMXG-dd;SvwCeDeHFs*> ztNAI-&uJded_eQ-n%~l#+2WNePxE-qCuu%ib5QdYnoBg7YF?_jN^_m&n>4p*zDx6c znoYg7=ip!uNYyia=hou&Cw%|)6QX|B*5 z)4X2ur#0WFxkK~AnxE4AbIpUA)g4~G6EvTtxkU2<%@vwsn%8N*OLLp%uWIhq{IX{C zDKDQq%_nI-M{|+p`IBCH{D5XtzITtmotSXNwp3n5c#EEggC-*v;E${; zPg8LTS@8^}_k@Pz{~4|IIce2Om`exM6+`O$bH(EuaxR&>0~V|69ZrK6&!J-V>IPT4 z4{gmTkJYQ1WH@=XK|Lf^*`H*%eC1w0J%8$A^{BDWi*N$7vVO7pvm+%huU*Nt=p!=9 zc#@>D!IW)0;fA6c+^bEeh}L(~B%V7{Q^jgGmYOCO$=SQ)q~>MFvl>N>+_cC2#1qt< zRjasi7p<&zpX~CUSUFFu6nF+#@~Y*2`?*|&UM#PF(stTb-)vaso_A$iL1LSi#!MZa zGjApr>mqUk&2+^xwWKgV+EBe>EgKY1)e`1XT7=V@=0TTwu~BI0LH=BhRo*R0aw$KG zhZZXLb|&wVBhTu(y{?Y?w&jrx^1Ivg6N<2yXJx&9!o^JQ(J{*Xu(s((xOfg$KfR;x zTQME+pqeQ+(V5#>j9IFW$746wJKn`YeJO_YYaMxr$UJQGJ!x;Q=hR6j z(EEIUxNXjI^^9dTWqWp*jfm zd6>|)o(>Bb<9{&aKI?dw;mx z*3B*X>h`2vu7OOim(qz+n`MjKCG0&*p}s0%eGBl+rs?WC8MAAm73DQt?dE#JGdd(U z9x2tYL*7LorT&^B7fY(kYpAxr!QM>2job6ec=pIEKw!k2`r@J)Wpm{QkF^crK6Uj7 zLaT=*sjeL%_fzRM#$Rhk%xkPEu3oLwheS10O9Bg`i@A?*Mpb#8`tk_xCL{M=sKf|* zWQ2Q5i*-xBxmkbjur0}(^?x)%u4;=LmHI8(9ZHD~&STh_r42PaS7mOhS|D9RWr&se zO71i<<1SllbEDB48e=9hU7nj)d50TY7FE|ZG?v#atX)&hgND3QjUk${*Oj_kt#8R=e| z(-YoeHOULR4L*Nlja>DJ)Y9kXt7Xf0;5u3xVLIZy2FsRJM=O@C;2uCF?=x7os$yAX zW8Jb<<@ow$wXA$q{mNx-RNe@%EK*lj8&ztqvy6+`JYvn$9ba{p;k_GFBx9LQ^WqW9 z8og(vvop&pZ@z&W>N0Nwa;hPM;g57>I<22DUtgJ)#gkpD;K=f4pEeu%ZF;0X!kPC zS46p2tbUzoF71rth~Uln=Jrp;8zE-64|jX>gW|moGoo||TB~VoQB8U64P4W!!^V~C z#4MtC69o79y6s)&U25d55Ll$ewc#Yitx+qdS4uCH=Bei`7GmM4hH6=Loa%<$E+Cs} zvkWzT`Spz)S{YH%HFDgSkuXusD6gsUY|^1=b5>!j2qOA{A`06;$Ely$L>h%00jrty z7eu`qgca|-kXvl@O#|`{47qZexa&somJ96>nnG@i>&jOx=Is_zCwVVG@`(9O z@zWYvvMlEP6*E`G8rE8+@8vkW+)GaV5Z$;+d&OG|v4ZNit;Sb)>UWAsz`G$@m+KAJ zQopvgk{hnQCy#i81+iw-l-F~?eMNM!8sQ#uT^CCOsgXMDJ<{jilOo@3k$v=Ier4Ws zR1t2blqZ4sa)oSlZ)oC{5N1;ev-BM6a>RYuP8UcWFE;NvG&NatqF`t0kozp#-14J*T<4!X{x!A+LaAe#9Keqj-|tylf3KSTOLhcU0z+|9*9^0&#AvI z8ePR*K2Ry8o_28x7G595Jpc)}tK5uGByvNtA5F?I zw@5i6DhuTQxjD*GOK~^KNweKvKJXCoOIY z_awva@3alcus5{SrVP1t$n?DJ8QyaY?!aWuu5Y zhFfKsJDs--5z(Dy-D5m!+Iv(3OUxq5QOoM8n%fjU=USLabodKym=xW$=$F(QmU(mN zTXKK*{W`=}iYq_z7V};nF9tS-IcCQ77HyMWsd!6|#9*E0CBhqfbl6UYclac&?xI|` z&4ZTRWbk!kb2E6vgt)0S#=9*_SOv;#^G##tQJtY%_L(j2g2Fx5F4yq?n=!k1&iUS} zVU!w2-iN}RdGiu+ClmKwBzwQU0K)QzS~EI$kPVD$P)!x z&Njg{b7xLpxFBIxP1p>|N@mVARk#EDyGZYYg=I5KjThti%3#sV(y}?%%y%1P5B7f+ zi|5RrH_vNUa~bZR<3Iyz_2GZ9=bK%7q2}Q+-nIO%@<7*mx4pxfUp>_e2jd?9ud3_+ zr0GGI2A?4>cxWj)lh_gz?IFDV+`yS`RtJvH81|4NFJssM^OHb^Qi}9(1JnwkrIfwJ}HT&u~O`aPP?pT+F&(A&yM%alIZBNXo-rL*#; z&^lt&(n2+`-JaQ*T@vB{ufM`E>T!p&8S(shVOvRCsBKAGxUH%!*4EV4+}6_8+P0xB z-qz99)z;nC)7IP8*Vf-Q&~~70ucio6xy_8Q+QL= zrr4&YP0gEHHnncruqnQ&V^i0r?oBfbc5>A;aHEU~N>x8ZOTPJS~ZY|ha zxHZ1DV{6ye?yWsrd$;y&?cX}E^}yD_tp|CPYgR{~V?sxM$K;M+M?ptnM@dJhV@XH2 zqpBm;(bUo0(bCb{v7sa0(b3V>(cRJ0(c972(cdx9aiC+c;~+1B&Dxf~ZSuC@wt{Vi z+e)^Dwk_En;>2Z?>#bcQ;s zI-5H;bar+2b`EqN>WZ$??MYl6WlM67Pxk#{1&^ z@qze(_+b1Xui_orQ@wsFUTgLB(xE-n>!0G)(6HVar(dS>wTg{Vg_NgfWBnCGqkg6XY8aA#oGcOl8v#AEgRz-yEpc2Jiu#?C$t5bLBh-& zt;`rb%oKxdSFx>&A|ahuen~b83*@8fFe{W$x@@&KzvdVxBBuhOA;{+`x?3 z%S?E1bAZ{eaLbY{u`MlI;#<16^f3=A=D*<9lC9ybP0W4W%zORJ1_!rhF&|83rYm8V zt71-QVRq|aX6t2MIKYgSwQU0PSpjp|5@v^{Z7s|X9oxE@A^PdL2e)NypTI0p!0fh! znXQSLVgoZ;H?vtkv&F&fSxjKbiqf?X|)w+*}F%wTsG z%-Cw(xPkFyj(7RAUNf_}+7jFn-qO0Ihn7;oBX}1(*N3yoHU>84(^Cs6Z(W zqM3Oi&g|F2Dq?`SL9u$sXXQ}H{19dqY-S#gGe`6=6ArLKP^=E}>B)u6yJ6;vW_NDv tqCfYs1{mb{7NAcDHy3Vp%j*4hp}Ylg!d-l;0m|oipe=;n{quX^{{WSlcJu%M literal 0 HcmV?d00001 diff --git a/Externals/SDL2-2.0.0/lib/x64/SDL2.lib b/Externals/SDL2-2.0.0/lib/x64/SDL2.lib new file mode 100644 index 0000000000000000000000000000000000000000..091b8112df633291eb68ba1b01d9944ea59c8305 GIT binary patch literal 108428 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 xH3zG`g%jW6{%nvob~01q@->ra$ - - 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 a75d080166d6b302b7b4a59a3a53a735ad24f765..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1280922 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%0D87V$i_ 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

|fK54RY`J4guqjuJEq81M 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 ^{ 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 K1NVpC_xOJiv@%Zs 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/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 058b3c404c3c41ff32bb849f014b2698eca7a5c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1187170 zcmeEv3!G#}S?}3AHp^_tZbCwML^Ff{K}fPYvrh<^p6;HV&Q4Evx_fpuapTFE?lUuO zdipf|*xd=QAVCQ$S00KF#EUOPMNoV}1O&kgUX`m}uZG7JK>fYt zq2S`}zwI*EmVrkl1A8ucNig>BnFoSBTlu^FEy14u;J>|BF9-i={~q{suvh+l?!jO$ z{x03|?CifMzdyM2QT|h{bAf6 z1YlZfcNt$k(VRAZvD;R02uiqAC?Btfw~pfe#%#NTxXRJl_WEc&zZP}7aVMXQxlt5VT#BnbO!+sofZk}E_xbM)^fmUm3Wq)*ZrK#~N`^;Yu_M*9DFwFJZI!<0& z^}FIuJWRSqwaQq`80a|&bMvKR3*kcXWFxFrmZpMmu2!rs&Nsr@TBRH=l@_LfE0^>2 zdKfi_?b9e5`QC~ROw=E&MVPN$*?+aY*$EQ)r)pi#WO>&XSO)c(3qi%BzU%4K2TjN*??Ln^-Z7f9VaV;JsqkfYl zAv4BOGwG)JI&BCf%7$W*p+~KDQtY;RRLWs)Fi4th#^a@7s`Ldyy38-rPDWh}E62Q|T2)VwY~n>^}tYEgGJuJ_{TF5ZEpBRRIHYsm_J zOVqrpK3Z;U^!y)NUE3I-KssY%uaA1Yq(2;lMXJj}zYP$QEZHBlijE*G#HZU$(KmR= zm13FqIVLT1x-j*9A%vpWj|T(PmldGcZ6+-U)J%H_(X;Xqdg3n)PDK4SRRjXm+yGS+ z?1`u|vZLXhT#A{a>*(994DrV3%2X)OqxEG&K89|(YurpacBqTxqfRiJnqVf?d;iJ{QpG!yCrTBI)2Q4gxE zpr1y+8s;$cK=~R(OabBFCMf7wFzh+S@6Z|;{d;SPZh|7(nRb7;){1l%dAOO;0L^tU zaGHe-WK;8o%w%wobfhxwBvOUqQbF-IMsKHe>eqBd#MV`xTmH`24(0LNoGfS$@r=nw3^MFfCS z;bA{U<+XH6j_E&;PO7Ua^+CfnW-yj8foZlaYB`%_KH_qa#gQyG z+Cw(MGyBK+XgQWs0$J%YCMO$cKTuOv{ohw^w_2UpBXH$p8KRq2Tnp{yU7kR^r*pL& z(Y7kXwUkQYA$jD_49VuFsb1IQ7$<=)pH~D;CZ7!2bdL~H@0r=zRWaU?uIH=OYQMdX zu~1Z%rz9K(Z)3E1#+62z(_0=ko3BJ%4qut@Pcu7MM@~f~St5tI+=?~bkYZo&C8L2) zgdM$yx7<)@hCR(JlnVkcaNh%<%wnD;zGbVZYq_@#;udb=# z8FqwW92)v|p;it_xrBLY!&WX$3X;LRPn01e#DiwP&1Mn?wlqM&4dW)XFat|bORE%h zE0i4cU7B+!HiqH~zYIwzxG6$sGr4G-h8f1jv9B_@O6xRHwU{tZZLhR7N`HWwGV?iW zz7q`wG!^YbABy|X4BJih>14JLL%%mthhYUF37UWW`MCO ziwH^UdCV?mDahH1Cv8cp7wSGLMx*Y~wuPAyFZO!=0uf&v+T$M&s%V`v(Z+ygmK>jh z5W#S3HX0@%ieKBIa{a!VXxNd?M1z>@18Bk!*|^(`OR7CsvE|XMj5(s|vhq{MiH#by`@zc)=*{Y?NA*<_a^t zWdwjJufNgD&J-znopOW$K~2H!swxdo@=+@qMs=)1G}ksQiiLQ1Ch6Zb_A?d|bORU# zVB>~Z!lWolGUFq_zJw^jO5Ic3??|(No7HMWwylg<>KJ?C*4TV;gFTZu(RY}tlARi< z>X<={>th&8Jyx?~Hv%%ua~zUcWlIK-4 zG;2EllvGh`hGLg2@>#(%yF?uU%A49KTaZ8l?PDy}R#%>U26L*4Q+%6qRH136xJUzF zOK(_GNmhnu(4eUj(TzAC>QxoOnNp?htD%s_d9O((MJ=jT4*97pr}N2b zGLN-gTeB0P$Li>s$6PkGB2Ot>B8<0b6u*mqMuw~xyQB3O3j~R|dLUBsPnW{XuE(Na zfvVqL#suNmUBR-#m+_j7WEA&u^q3@!3BX$I@4o5r=-YgX6*gx~m-#df6zXF2F`t3zhUhP(}5+;j1*EMjMWt@Py6~U!IR< zj4Y8B%6b$hG#>>QYx6EXLB|O15jVSVAsWTT3btqrSd>jpM;%|sXOV<@U?*mARM3<4 z;S%9x$@tD%Y+G*FhoV2`ZXQ*bg5y4#Ys^efj-c6GSi^Ma^=Jj7F#9^WXl!TA!{Gl0 zX+Cg*i`CJ(V^j!zCY-R2@e0!G=Fu~#H2P5&tJM8rMwu;^e8axP(wJcRLWp|KG-3>( zWxzL}zcJrlvFlDzFqt3FFb`J`>CD4p^>P^Nxsprj#u=6d*x!VmBGY)_vUtq~+>S@N zOm~%_WhhbusrojOq%&;8iOiVq6HyN5!UAer7(5KNZ2=5pYy|^raB-5BhKO`8JJ3D6 zmzXiBN3b!|d7@^{yNQ@Rg=W<8vteTK%!3J?IRj=yp-_uKFfD@f%#n;&6Y71;e05+A zG)`fc+hn1prDnU0A`tpgbKz7j3F66dvlOAH=7CnJeG8UIErg2=zZ5dW6z0@zu%!&(KClct&w4gpN zHp)8HE7q^K$Tr{Z!dt-6VF%&3srn$SB@rBy+#b#|N;sL|;_I)rdV3WMa^w)!U3IMO z1Ne#2l)~*#IM(e%L>bULtf~D+WUZ#!}UkG@)O^ zZE|K~h#4yPL1tD`Nl?>5KeYqP=TI-js8HymnR=~!x8t$@sZA1kS59z$kVLdzU);myfyx&AtHL|y+vkqzW2Z2TmxmLDsnTIl*xZ#G@ zYDf7_yXQ>|?Z_V`Es}UcKr@Y2`%!PrPes3i8eyG?tv<+1)i4fHf!WH3q`E4S!eClJ3j~B^rjHUVY)t5j-In=wwwKT-G+!?j zWE+I(m2f4EnJt7TP#4S|BWH8W8;JYeqmm3gpApd%VS{Yf*DO3hjj0e>YVrvz%QAp`H#%?P;eDdP#1ST!)Ai9{VUop~ z4$~qqVHQyxtJcFD8ru+_@g7tm?j{%#3^#W(09pb!F?d4O;uRB%ev2m2wCzF{CB;>! zR1H47`I7{}mzp6tEHW4zXRsQg2Qdem5xEZLO+=IJuY$k~q1(ch(kf3Aot>Zzn3bZW zr<0sV89MbvNlJ8fl9D4UNlEu4nRHjZX-fQDpCHVB-NLUq&Z2*GBDGSxQs+3*_(fHFe!a+OTAj!wTAwwY*CK>KL**u!Ac#oFRL$(lFG!Ki}AL5x0DKW&}IG zRw?R$n@dV5cLxXr=NMc<|VYW_}jc5tLGDWiC3zh8_4{s|gdUPZ)5ZD45e5iRQb7;ub;; zFtw?+&#KBC$C7S1ozKvJG=~G%@lC$x29)tz^g|X^iyT=Z+BO_d&;Lw0jnY>j&^8 zZ?{N~%6A58?U=1nV0vs;{{RgLZXd>~pE6l3BweOl(tOTw1Xes5G}DK$G;p0yN(0g{ zS5+6T-lhAYY#)OXcA#;OM1_($5!>aANND>bnRDp#nAkR;qpENBS!X8S#Um`UQL-qQj2}r z-QR*8rI0~x9&W0HCAvr(ag6wm#~W}XQtQsgF`p6NPLD<^^Vq&Q(!t}CrvDi@7PDU+=v zIjBHTb^@Jjl*UQcdd7KJJTrO3AO#JLJ53Qn{n1#B~|>a7GP@K|+%PV5rwjjEhm z#4saG5C#_YSC5Be!jaX;iL-sQd(-g1(dB%hWPO*A#%l?{sr$kwQ-Yz;gnAlG5^ zPP(obfIzP5prqtR#$Ln3Qkj2MbWBsN4>#0489^CgJ#T<*Csv+l)3vdshO+{xOiZ*0 zMb#`j4bH(;CbFJzEef9NcD%HWe<6W@!--n0#fz{Y!NBBx?-Dj{I+5H4(}2n?GtP&4 zuoW58)#Wl!kL^-tnoZmHS(uMQ5R73!V)Gf?c`q|NJY&ENCWiR(Y$3O3)`Dnkew8Va zfMct4Y-}emNf=k9LL|{@a(ZXwHbUYp{A1780!a$$cr<+SkDfN$xc4@!ZK!7LuS?YDfh;oM4jeIHqSl zGf+}fU8tT^XL_i?%)v@yuwtZWP{ z;d&Dr4J^T7D{nEDTQS*`a~jT?HdRSHd9--4QRjQl?B*blDS>6H-mZ+LxE6bIQxQx1 zB&Djdzc^Drk%tYo*vJ)fjhrkI2OXX$*6O8-Tym-k@gtF_8(X}*Ycoca06 zQnBE~l42_qXLC53X>+!PQYx}~zEYL_qRdC*HjU!m{qSg6f=33;=6TzdX$dkNpG5Oo z+oeuy4G1+=DUBK74a=t+*yw~YNI=_xt;f`EZ6r()*f*?FG5H4-exi#xK#3{d4CcE` zYgBF)f?x^-x9=IVLFRfuYMG&i3wH#=zXLnghe??0!A@m#p%yZ2y|V+k_Bu|TVf$n0 zs1EtLEK-fmidJ*@BhEuT?nh=1WhEfUhMAe?hvU)4T&uDmW4h2suV}|5kY**buOO|r zf#af7RdOuGOVt1ENg}t$@VE;apY_oOi~p;OCrh(Vm&?**M@CthW~IOb56@z8dxKp)Us#n-zsg)>deUK?cjF{?s=jo^f>;upT z3i6sN(}{cJU}Ytsu$Yt#)RaqxIO`p&a8{?pXO)D(;x7r9!Z12uCE8H(S=%!SsWQSW ziAH^64TlhY7+Rj9_ zVPlC+e1%QROvGmMr-MxrwB(Rm#h&q1V`|If308nEHnq2KrW%%6VKK1Ecxesx#2LO# zE|XxE8;lTicAVrDuNFr_AFUXY9^W32Yn`S-kQP!%g(T1!mnn95Y{LkqESs90t5#`# zXiu1*d-2*VsG~_+e>9CG5odftmrq3p_lz`-_J}EW9vux^ludCn^R6G8SwzB|mkvdi zp%j*zQc`FpcbQ4Rtcvw7=|0Z+7Bu~|Vhm7%3Bn0J~qm0jtF^o5~fPYOI231?#{3S)yqOcMesGs>}t&i1lsb!&&CY4kV6Va!IfT zoJNbwh)+;WyQa$Ntt0Gy@+6k^Whdb}NFJ@&WMLQrq?ZOnRGD(DnIL~Lnx(E^c|a@r z60KdDWE@)nj|=h127%@wVm$$xuW^E}1uL#Xsu~V_7KNbQ(^Nn;jWJJXuQ4Yog!yuCx6V^=hlpQilrqd7%MrG*LSixPd7pmkc zE8QK8#>GgmbkGJeBLfWW8q#EJ?92{Yu}$hDoB*v(UE{5qFUHfRcdV$$nTSC`k0HfQ zV2iX&uOwU|$#)r@0ktXecu|HkK|h8?>exJvR^aE_LvxK%V5QW#M-C`5bsRYQ3d0L> zE{88cMxbjhJ<5Fu`Haq-{vrNruHioVntgaXqi^JsI9mz|18lOvgf1-{ch@0`oLwnb#(F*91nlj2nV^f*a;1?+$4$CS_Ez>zrYs` zO*v#p?Cmnz0-?~^(_WUTEtv9=|}X z{uX3}#Lq}#8f7WII$)i*U)9eM1+~o%Bg@0%K`K}#-ZqjG#ahW@2(kL6XDx)K4^%>g zcWVWWIr+%*J^9@$xGSYH8sd<2%hf7ciUv`yjm_rfsPJb1*AAsNqseXR_9 z?BLmbTLl~-p>EVFFyk?sD6)%{s8^*+xxmzj`)r$M?BVHg9uEZ$2Xx&Nyc6Hk@6YpASL{g*&e18XC7y2~U)2jYZsjb$hPC z{4)ymLh(eY0R4sELnc4S!DC%(gRXO+xU2x|lmS%?KB5^Ejvv)}u|etSvX%}Pv!z;b ziC0h!`pJByEv6e3etaN~Hlu%MebxQ(yorJli+->Db zL2)x=p;WKV=WYvY#akDV9jF;R2}Z0n^5IhMxE-S2$So9RZVLe$#k$2`zpdUVmQ!(6 zk;39aelDC@Y&6J6h9^N2Yqq2SA!nGGT>kj6T4iwo8bz*tJY1+WO0%WBs5rsWXcTKW zu)73#&ee_;*+*9vLbT%X3^>7JJj2vx4AYqmv-7!Q^)XrC^z0mPdUgglJv;sR;)&w? znDjY4JAF>iPM_1=^s7aP-a;dXN~jg7?UojfIYm@ooS_P>3Ut1*P_N7vsrH!AF%goq zTB(7$7QI#2sO1*wz$kH{Mwl;#r2@iNEAyrNZ6cr`FsT<5H2OlZ63*19H&`gv>zlF` zN@YL$0>o`LhlJ7Q=5h%gPh zv%aj6BX6_x7iVXD36)>0EaZ`YT_|`A;d58jom!!?Bzq5HL{4kC|KCQZk)=ZstF42NN1s*pFN3gIENb$b4BPM{0j{1f)XT#ET{Q^a+pM) z=td~e1~bxTU2CpZ2=jB5+M-U(B0-|?p>B9U}4c$*|#v3gJ4qn=~nzSX1=5_QKMwsG4ZU)V|zEo;pl$focU%}jS zZn0rh_*`kGSX;o56VB%9jrsw*6VOz_O{j4L8D^Q8hGa%tF9-Hd|`S=XyWu%Va_ zur&N>g2+4T(NKLXT=3%AH=ReO4Ncc|AyIhCH=jh{|yg!`$pFhLXl@;T#iXjP=EQt(b#ugnn3eNLvl< zb_<(@TPo6^v1u+9RRay{*vz2@(<}Kz!^KY6D5@pJm z6yc1LAj#eWTLqm%xY#I3wf*aph0IvC`1z^uUvIctYnS@g5)u4x^5|do$GG_TK zBFzHQ*kWN}XDSs8{}~0xI8;O05>s~J*^yBRc(W|U)K65cXu~_wuLurCF4ly#H8Mvj! zNsgk&)GW+kZB;=kYW6HyU`4Lni1>UrU%`9?BbW7|*m7Y^XY6r&5qeCch-og*o}G_H z=;3OX;42M2xlx)iG(I+&O3ij0KFBal*Fq^dLP%XMvK1L>mmn`JRBp>bKX=NEQ}c^8 z%p4kFS*Rx&IiWe0{i!@SQzJY&I;ZL)$Ki6QWNk(XLKib#kT&r&g`A+swJjYACM%ac zD;kdX1W*PcHzq;IiqIlw$2)s67sE9!Bl6jk3rQRI1>-JkTDDE|&7RET#7A0Wc4GiV zEcVjsV46zao;Xtl%hWzRkA3@d)ZRDkX?KUZ3iCJSr?E7qy0(9|*rv4+UDhm~^+m`>M1nEhxz z3m>LJf#!H&4kPFZ*hKv7n5kOau)97LA(d6By*9xlQxugF`a(!VrUOsYgzx+?y|EE`)3I{6Mt>kZc@dx(pSIbJ~ zdc=W!Q|8K*TBkU$4+~#L2pRu@eevPLe!PE4Yu}2)U**fQ1$et{U~wql8_mP1kd`18 zhwTn-g6DWFbheCTJcr8Gdo#!s(vFUCE0ivNxiAHXc5y`n&x6YW=STE;5azIOR=yF+dQ*4dVWnuqP_-2sImS+ORUpBl_VDzQn8|N;C76{M@<}oD@`irGZ1?(G}qoj$uN`7IrYD@~DUyJEppjAuQVK z?asU^4U+Bmz#5mNLg29;j=iU592mJp;wd(sLy?xt2d8hg8zvp26QRv$#p!TvPV;}9 z`8j5k44)Nb^TIGb&&ruq5_GL6D#T27A>r&cZY!m=#iFuuW2V9ho-bB?mLr2I@a=Km z%{5<2WZh9CA@`PCuWjH|P&5=l&FBgtSLAj|Ow3hGxK4A)6$j(tdZ|8~3)#XnccBS$ z%g_!vn$p4*S@3x`-jS|YXcfsbE{$dNBG*F^UQ>86xgl5p zMaot%fiuH-KcD$XMC7U|&KYDe@((nIN5;kq$BdD)r8<7iEPR=bIMY2macjpc#wuRb zH;Ruj>K!NFup2?tI28&W^3*EfxIXp$-19mzTo70d;T$05U}YW{2&Mu5q#VwuVi);p z6#3}Daghba-j%MXbwd;gYrImi7_X2&{>Ht3_$3#70Ulxje?&{nC^aLnYB?-nw#7lJ&#vjw}o|`wzkIvwN{KUD;TU@i9B+BN}1CAS! zbg<-U7UJa*uIFsC1E17jp|QrXvYg7sU?G3vbYO89C8uM69Ycjg8M4d1N9WWIhdG=% z>ZOQMvt2%V^vKHo)^yxDICVs6s?#fR)A(uCuMVfD=8$z3=(6~kIykaj`SghqkukAT zv@j5;obbTZ84^-d@VyiOlIy#EM$zH{P=APBx#*b!X!svW`3 zkM9UhA3rbn=$p?AX1;u0FnhuI!CU9f4?c8!BA9sI#lb^wxj0zau_t)RC3}Jc&)gHd z<@PYog3Iu?H+Zc2N3=_T zyD+#E|A^~xpzmTKdFU%ZrLe?D;Vun!;QbQDd3iwpD3tl{GWE7sJ#qSD5jTbOmBH=+ zI$rP?_3ymkyx;=y?|g*&djDOhLdsMrjonTjF2ehTz(0=BcC%d2|GR)8Je4nfE9o}7 z7?s{Qo-kBqyfiLn&oV8-?!B{9j)+*&IY}-FOIZ5ZcD>(ry%)Z3+phPtZ($~v z;k=K=LMwyW4AYqm+%+Ea=!^(BJ=^u2)3YDlRTyWWcpCvv5fdu^m#K(f8`w_Wey z`Mm9V4`=jk*L(DV1~PE9cD<)vW@4b*cD=`b0L$M}d!}0c@yY|(^$gvV z-{)6rMJ*jEx0DaXyv2NI{!R0-?Ru{_kEC4ow_WcGbo#v5iL>o`Z|)p5%7wNf=qBgv zB+TUVHBItSWNywGdnC49?`iY6?FYW?daw5F|L1hQrv`!hD8gB65ek<|3)7e|GneOW zcYLD+gfsuPJN`GRJAS#GhtECET^1*j@b^}1VE743+_}g)C#ftb-cyqPqy7BpD8F3u z1tYpc6W+w?5HK7ZM#o^%;pLsMc(&OY;aX3eYgu1Q&Xl?fG5#Ci77lq*zQyj3gzmJ( zwf5L0QjdGsp`ouRvjWo@!tl|i%VxQ=Fw3Et8#+6EgbTn>sO$QWH!Bj!B2I0iW7pt{ zYaWg7Wv3fx(tPr&O5^ah939;aJlM=W(O7u)($W%;$}@YQ}4(YQapd)l}pz12_=#A;*fAZr==Sgg@NE7IQGo1Qm z97JbFFRzLk8@uoY9E3%xOLjzIH#82&7g54HJQk+|Du*s3M~qx4meVwOl(TfyRDnDP zQnIw@ph27r>z+NyX`c8?gA+L6l_~f`soilpT6@YrF2CZr`!;Y$Nt)P!<%`AgXL)ExEUIY=J(RA4HIbMC6b zSJ-jX5#0e#=MKv&w$%B3nT+&RQtUJnzj?{M-Z4!#%0v-yd}13}Fb_92Xz0FhcK4>) zq@yBDMsGG{`%mQ`gdVnAz-8Gu^jBqq`bF~5&85O=igC^`#{a0P4iv5lrJdpMg!$KKk-Y-LQ7%@W1t#HdSKFT|I? zi=STz?x4`&;KYC0j7M&Z>>_i;!LCvWa~OKyW;xKucvBCK9+!H0j9<9V+mun4)_})q zZ!OVHP%zB2`@^+Xq_fE5#1({Su7iPnft^gzq2>*lkyoKkXfM)kER3kqCIwVm8-bk^$i+?>xPxM5u%t?ZJs3LOo!L%!kJ z^nNC3t=(y1OQ-YQ5LFViGEPO$3RxfpXJ|EH{;@?|6WZ}tv`NC0Nl0-z*z_2h?sSE0 zut+_!N{0&P23`Vu-FC)pA6cRcNz@KNlv+BYzf|#^hA5YjTW}K$p)ef+mws25q`W2&wnX?Cfyl zG49NaI_5d>vIeo;gs!xZZ7n?nISk&iuzALnMw-)G9yXh=L|hJEneb0DJ71@{h)A+T z4s*E`>->9JX!Tw)8u&!m(R+9g-)P*{C={|1A-sQdT#A?7K@rMCiYI9j0<^Pv~dHjNt#d2#C<3ie1}r1ATqMQ zkO(^s`%+K#X;UsMyKDv+tFnlYw4TT8V&+@URy=7-QoT_3Q85~IailrRork`NosQlD z5nn71^tXa4TIWo(F`)S)&ub1sgj=!AM#BU|@ec+`lV8u2>-W_}g9nyOGtnR>`v96S zM3xRLQ5Q1UjLw|YPh{J_AT$H1WsGA>$&<{JOo~N>UI3;IX;}2f#~JI;A8@Qn-&=Sp z&dgLr)Vg`Y_0JGlnYk33)Xwd!@i)2s5*9S$QX_}6J!mGFUvBU#HN1&#T065;cdZUn z^t>@-ezp+SQWxz4_a>^FqwP%M$}-#!0@)_JgV7h#7HU~CxIt>HJd(wiot(|1_Gc43 z6z5{M{en^4*(kLr%@t;P%Lo8dUVo#Pohf!FM;UkCXe*feZSr~xeudPgMImne8v7YI zAc!3>02?>N5++4aN*Nyk_NAnM7g(u#!a)wwEZ}C9u0qc&e||C5*nDw=Ju=gjb%h~X z&D8DGNa?3bV8-+@jHMo{S+N@d8Rj_-$*i&^1IThG>9bwAdW4ZOG|x==Mu-abgY&KX zEF0e9^IVK;=R?+SK3awlNRvYb&syBPYcP`6V)>a;2u z>*vLZ4^Ux_joM1tVim1I3Ed-A)S98#C5wDk@XRhzM}YE%;@f8n5@?`wr2*f}tOYZJ zIaS3ezRfwR&@@wAqyey{x2Pj8dlOe0IUnj(6~dX4dsz|}h>*s4G-Y;qU*8$xL)h*t zW19>!!Xg3ADT8#$*@H>pnz9f$cgUwWNykjpFV-1)Xoekpq_R(mSjVZ((5o%;n+!rS zWXV^CSUHzC$>3zX8@3@uC3TmTBGKhnroCDd{H0i!tKwd#Wqye;U0?%yxSch`umH;` z^|)&8C1M3gspO&sq|~X93#=12Zo`QCnbQgp#<<{5Cd|TRrGZ09QVmc<1rn6uRM(TD z;*u?2PUn-=WFBj~wq_?nkJZsNk9n<@^*JeJON8-tUSW~$X@-nv$a=Ahd)Kf)ko41y z)jwUrJyaRmm_@+?RlmKAWeG=s**PNZCa+|np1F;GF6y_=ME$hbj#uY!SPPq)q{n-jl2yRv zXh_=NDi;~IGh{=!oqL9I`4$qP8i`wQjJZMxbqvv)(0mkJtl>%=E7pF3j&a>s>k-+-Wv(N6 zs*zEXbf?|vsN?JSERs+U?8GdN3VO0WuFUhYWPB%1r?M_gEXb2pDFOu=y<%{69= z*p8stTv)?&==Ep?4kPUAIQb2~JD#u%p%;qe58sm~g^6#w$p#n@7)} z!tR=+V#z48#gcE>mslDTEMEvw{h3CL0kjPG2J|=Rs$}a66$O*|0S)u;<&X=-JXSA< zv7Rfrq;8yHX&6Ag7{;s6;xdf~E{oS}049;kbXN&lh9WgUqHKoSNRrM_-J~w_&LI_R zzs}P?|gM&4Kz++m)m5arln@PjUo`beskee zN(RTLCx(Mi6jW+>P?VI`s3(q(LJ_Ao}M+p?W+GD$c?t?#yPla6ap z&xoF2Oe~=;rg2=zt+=mr6E1eW8ZD@gNg>V(?5?U?jimtbDTUjgaID*jh%#_|j&w}Cgs?hh zI>TgGzsE|qbb{gN#a%kFR4z)tIBUxVQ`Q9z_7q5ym(0GZ4T?%IMT2K703Hc zWL2}={8ZKDz=s@+=e$-p@Q_-)W zMwn7>s}HhZaNs&CFkAVMR98h(_{`#J#8}!hjF>V6yMwz(=9KQLxpFD#&TLSkVTi>& zxLClKh1ow{y=yg`>BGAiF`1ThPATAaWGwu&jFH_ADyxr`33VtoIUS=l2jPkE8>_Lv zTW@P~?I<=T^l(5n-_G`MplXZVnkm~LhBCro|AoZN7I1U>pv~+t(pbT~fz+vi;`CB# zk&NI@S_x^E7QLqng0Svw+k~5~;aWB}>7X}bl%rSkHhX%v>kG$y()Y@#5Ls&S2`tMp zKKX8R-o(TEM1zSVOfIMEqrt)?!=_CWR;EQ@!YraXR>h(FXlz4x#(PkOxSOy`SXBni z0B8x^#NY{un*>ZOmaJ(KO?O!9K8NDMHfMtmZ~i1f@TF!*4vP%y7Bew?p4A}cU^61u z!MurRvi(&Mm?3mqxKdi>X`-_elmW9+l=O6xIPBZ4FG^CPvy+q@SxHK|C&{F{>P=JP z$0RCQGEqfWtP@gxyjoWBNOefN7jY`KVAzC1I6onNchqj+H&Xv$$oz5CN)tiE&@!A?hX(Msi!c1kw2 zh3!$4j7GNy7`iuyV6s;x&!H4%Hqo6j4rw-NcM>Sn-zDp#`~&9`mCL zU=H01X$))%2ip!BB+7MJsco9J2FXx`A_r?tHf=q8iJaXsK!db=l_e7zX{Tsn9w@#~ zlEax!f}3>Mu&i+CMX9Ddv0>U>h9R0dm{cz0JjvrxCqsaR*P#*`Md4lm9z3?9nHixv zf>KJY%teRTumk^VHDO})2?Guk1#@~M(d%?42vj758enQuZJ$*O6ysRZ4QCv;+m>uz z-5sa!h8DtU1?cu&ntMnQ;pn-f-@cn{RGk{^pPiARDYy)VddErZe_iBMw9JaiV?m9` zHq6=4#K2OX!;?pYYFABZajl77B3P;1A`hK1>|S^Wbv zAh>-Pe)q~`g_{_da!KQgY2Z4a;PiXwn5(J_SMSpOP^D7B4m9qO zs8BK|=F$1ANe^iIBbjsP^O)E+prfjAbRfQZ;XW+b^tEAZ)q!CQ?m>;D0n4lMe~{KP z85B;UeA20e2^h9WZ`hb9QbSjyS8N}G*FR-V^btmcoJNMlEzlOCem^;5gf?pv3Hg&C zEEYNR<{`=xdIN}M8#^D81;B(>O=rlec2qZBg8&BINVutXQh zCESSbc)W22Q%zag$1$G~-%gK4D)V%cfF6eCqm5)VM5bZ3?Xtws^`2B(bXOHD7=IXo=P}5*7!SOitqX^>#jNV+Zf%)3NvyyI)nY&j#7nj$cFZJO8E7A}z_dVWZR8;E?JlRh>& z%MHw;P(`2=*;bx7SK&m#iI${*ZKhRSp5O!?t4=Z8PNY-|g1u3dBSj1|(ga~(QGdAM zgG@NG8adIr28Vh{jxOg5CF{eK?-wr>sccw0K(OuoW58)#Wl! zkL^-tnoWDxjW8dFAQ;1d#O5=&^Im3lO~!y3Obqem*+Op7tOXI<*W~_3nGy*&wo1pw zb^?=xaaAfr5^eTM3I}2Ge;+L|c|LG1GSnBhu%K0(X;u1I@>YJLG9dw3kL1)4gfm%5 zIk(Dyq#(FEpKO{Zm*z^4WNsw>55>(wiLYn~Z%aC_7_RNeZ-78U%F>pvGPb)mVR%~} zt>-Z0s~M(&*Hx~0tpqtb9U2BOHVY`XyYSMHIbqzS&cT$b8i7D|(T$*!by!(DWj%b_ zFv{~Olq1g)-l?-`bulL#=(=5mX%ws1{Q;87EX*o$$x4{skFIC{r zrDU07F-3J4>l^Us?I+##-Eqqkv9uNFIqgD@uDoWw3~Tq;=pHkpv_zsa<@2!=!cc)0 z^nx8`PZ7--&$ibw-wX>0*8JqATx{*@V1-273q($avXBJDQbQ`(;nar0=9r%O%s@#^ zb)kAvo#~+lGY2b;!Kyd5=ol&}VJSk4CRYx*p8_T%);7`P~5v8rnMz_WYBD$w_O=Rkm>j&n%CMcbz*BksHsY6%m{B- zKHb1ZCyYS?+74_zrgm#1VT!=MVU>!>KdA5%U(5kYOz~zg-(^~(a>{9vm(JR_v1k$Wz_7$Y{HgH^&s!EQ)2g_`?8qo9(`*$Rbve_H?4mabS@|$|GBQGorA$N6QWYcV=77e_No1P{o8^so{8^g?TI+87vjr|IQbEp$ z5BoEu^+v=-m|{2Xud30ARw@R|rg5igxm2&P#Zs$(L9Gumg@_STeeZmGb!~`!0PuygqAJsgd*oo{$6``4 zP*W~mx8>-pcdRn-StVhx_)7w&FpLgZi8hpc*7i(7s*Es8qEX*iL*h9#@ToA>IKg2H zY`$lGISaWS!))1P3Nu#QJTYf-rPJX(XzGJR?@9Pn80HHfx7e-?n)z87#G1TqpXA@F z(W&T2dF`dN0EPANkH~PJ7Q6bICS+By$>XnMSO{r56WNB1B{uODHZ3y|o6VmNHc8Nu zLv9s&##fE0Et4l$0lL^=+`^e^SZ0OAz$)XVHLMxT@NIIL1hd>=grMCKl2^Q190`52 zVn}*?dqA#rnhHUhIv^F2KnHTB*x|7aBbc&mYId%2rTL*fVSet#YqOw^CT;!EG?GM| z@d;f%6&>6&(zqBSsB-7g(Xd6?6gM;4`mvcsB+Pl~P-GcOVYw+Kg=TV>nFP$LSpS0l zej*j{M7tH66+}}RTIzy%r%6-U^`2Sml1ldQtc5TtqYOT44NUQ|l_|;{+0wPCT+yk< za1D5$^^E>3(KLiRhbl!?=7M6x`nK`mEOTTB5=Sq&Bv=DZqs3*!C#a@fQ|0v55q3X$ z63hCslW-j*k5+85Fbo0GO9LXROgYv}kiQtsQrE9MpcQ?I)-Fvl&NP6>h4^HHK=Tkb zGwcqb`C^B*ho{(U575^bb44Qp99+?;=S39h_+d5eFgMwVZOFmksO}W^F&7#q#zZw& z7(;}y9_D1M%|@-Jo`zXDt>>f%r-2ssqa2QB?C`@}(i!8eFY2h+so2tN5D1!Yq`M&_ zIsS-pFeVrVnar55W}>I;kXbUFhF~x%L$AgP?s~mYC0AML?qD=7MuMe-Hjo(^U})En zCS$`=RCA41Y?Jy3CqS!H*LbVui}A1t_pzcPXCej(J%$u1fi2Q9y^?T=Jd3^sodLBe z@_12lDCozqNFAHU(F*)rduTdG3#^nn_s9W7rj7$gUtxGb&gJkWsMvkk-@q&a$BDJP zU+iI6Y7f_D#nG2`xfwg9Mf~QPjzGcq*uZk3UK~r|DFJ9(YWI*?dE}vlgVFT}j-@7v zF?tJT1*9cNt5adv7DX@f4SfsZNphz4(AUXbF05cZfL7CJ1W?RG&=P3-1Jv8(fMX|z zbqyI->=r|oR1F9eJNRrKt=LC{h|nsK*#g+afb4WK>LHd}j5cb23|GG-E3_xbF!R1p zg357xFif{*Qn=Ju$o-c?7|q|e@_-1 z{lRHW9aI?-BVQ{s#EEgTj^YapeSJq>Hc0 zl?4V_nnoz1`SYPD>3nEXp;FG3(7N25Hs*@8a&A6fS*SN^;Aj|03Yxr@)(#uh?}As` z5GU^oKMdYaM~lOD2O`4k4K?a$ahyF=8F=POy(xo*6}-d4H{Zo&Eb=mSmIs|dGwkws zA?9LN3F^e4=6j=gOfbY&6ydSS>2#uNsf$zaRS3dVMnfBgZI5|e3xTn;vyl_|XkkA9 z&P3Az$yYEIRJ31aY*Exgygb4wc5UVt#nXn4f*Vg{e4Y@ripSXql{!U%r_wg3Zz6F)Wd)rpqDCaKmP4na>7w)3F52PjN^M9Nk z2#gJPs$k5IH4|ibe}owyW)*?KW98doqNzLeN=)4r<|magI$hcv6H)#P36IOnr(J$o zUt@DwIWi;Lgy1QTM%-uH$z!JxsaO>QZ}S-~T5P7mk%WCrNUL;znIYP|D^%Kyikn)1 zE|H~Z5cS$PeaIZP1QIl5S`&LoH!TagoNeucnzjRTckC%7JE}yUC<=%|Y8% z5lPhjmk|-Vn3TRH(rB!qRABSt>rXQY@?iwDsW{XE9ULRKy9FFKgq?Em#1ZP@l7lO- zxML!Jn#(2_Cnjh_tiFx}@4&i-*@_b{r<%iUd>S)K@Y+ zm`&S#Hl_5mRI@1UyaI(Lnn7kb! z6RwC1Ut-rLi;;hzq28G?sB^;E(57rnTr*2GN@LPW8PW7KmnAP=)i;WdkwpR1H1-j& z~V;jj|e z6@qMt0%46;Di-4vBMX1SQ6{tjh#eV5w^Okg>zz2J^}&d&mX^R#x<)jr!(hy;G!>Q4 z6Pd)R9+cy_tVyKUs+b#VA&%HaTgQ<@Av1B(MGHuAlVMgl`3J;P5X2p8+c znw&;gaS?D)&9hZPJf~Jvn&!O{l}^^}KtR|>@i9W_aX~1l{PWUeksjGrMkrlz!6L5! z^;$utB}7FJ+qrq4^ON}L_;A!ZyfSq(T5d)w2aYKG%E5hyrVg}PQ!D$Uqbpb}=kZLh zEFaz%O}FHK2L9;LBP;t`({bzI)RBD_{;2xlpc@rWynN)~e)*rqHx&+4Bi*Ko1P?|$ zE$hp4Jgtm)S{d=g8S%tTHSk$hE)9fTgX5Ccp;_n{M$6%FF%lGoq0S3;Yu6V(dj-l48mUS zG*`UJ>s%efXl-A=LmWeX+8gJnz~!V5omN<_7`;F?y*Qh`6t#zyZWbN=__*W^vQ#CJ z@d(y>H6`vvYH*U;5$$d0k)Bf+coe~2#Al&{;Kmy#t>6CX>8bq(rw$xCWT7YbiPxhC z<>vhmg$f5`m1*A4YWGjEY1^q@6rMeDDD2VXJ#4D1-jFPRS1>-<85TgRd0Px} zrnP?8AjDA>oxxT^Kqp*bBlZ>pP~=-=U4yERNzGQWB3Q$LFbr=og)?l{v{h!T|89}B zH3(Z9bmi||TMn=VMy&ocw~~Vao0M!JLTZ7_%tpQi<{npBw!pc9t%<`e@WI;%meZ{; zk~O=B+-@b-W^V-3YikS9KB^Wa=BF@gvY2m_4Oq13tQL<^^APm{`wt&Fc!crZIWfQE zqTqGARx2NQZV)^#;J+JMeVD|c+lt>lz-RA}Zvsy24Q^;rSzKF}l=)`|!71>)^?Hu! z0^A(zow=dkqGS2g?t!l-+aR`#(p3DJ8)4D?3)UL)=`e5d`t$_J8$R@ zo7XnVw@c0o@K8Yh=kP~A%IeK~_ub6+N;Y2&JSSW}{v8b#82_!|?@qxZar7N1vKz$~ zuldrpZumB3YOc=elmd5%H(ym zXHL@n-RteU(eNh8cL45-{h)E-^DYgVXIhUcqd~Jn{LJ?vTAw6$g~8-?7%rZ9N~egU zK}Jz$vX1i*+sWkqeK+hobs~QX_wSs_&)*QAjf3WTE4aQnd3|ZqG8*)or;@=b6cV_v z*)(PD0C94%UN}B^-7TYTJUImo@|mY_;!X#LGhVZmB-@;KE3A~eCLDAU%H5{lV$}EK z^|!YtukYe0s?}uj`lV_7oxFbX`brCb%lq)(2HpxwrG@D!zz`3G%2J&k3&okmV|b|M zfTUSg$c-0;;)zne7?u`hD;Bj-sulB%I+kS%vy1cdg~jT8@npVM#PTjhm#;O#dNIFP zD~1b|a4ARISt+xy3@M66VXfZ49 zl&=&hX7zMz9iLKbyJLJG?kq^Ka!PF* zUq&v<_?UH?yL_X>c5~VHw>lxsB>7)&6w$D=zS2DPsA56`98eLqa30aA(}!=^m-_~W zKN+CmZQgC^z9UnmZ3d{&&0{iJF6+iJWrOHjqR%7G8I4u6!5#x3(gC6(#sd|*ArL*GLO6Q+!FX- zxgfZQ^6;yGj|KcSz$*cN9q=iD?*e=l;JX120^Se!?SStAECIe3kQ9dZ0n&H;7NA=; ztH4t^JOO|7dkf0ulHg)hHiz+kDA;3_4TZS`e<$$wt?E;Eu$AxWsj!j2xHp`h3aB6` zZuz@dJ_Nf^5LX8m%2?fyVJCqF=&E4%rMnR1e8ka$69Z0*pv7xpH6toTNJ@-Bg^39+ zNWqn$QqCwWzl1~tBf{k(7$=AjdqJQ=7~!wU4xoM#FjwL2Dn!IpR0_`-w${-;BNw61Na`mYXRQ}_zb}J1AZIe2LMSW{2<^BfFA;cS{M8d;1R$N z13n+{_W^GP`~$!l!2bbQ0Q^(HS-=MX=Kwzecnjbs0p|h#9B={fQ-D>#zW}@y@H2oU zYySuE1mIr+y0Ug3@TiYWS$hp+?YWMuQ5Y(pv-le$Ygh-seva`1ckLK~qu^ZXp0*iR zvjg*d@bt~t26RtD>ziJPNrvZ8FY-tALBFTt?2BpH4jAj$9*fF#3L0+I|r0gz<)Nq{87PX;6zz6y|J_*(%T9*`y;Hvp21-UxUSa0-wnIMaaCPaXga0S^Jv#0-7l zJ=Avbz4v?<;PU}HfZq<-1WaT@j48$P)_8dgv~c-qYiiTMfWkiH4ZA;hGH8#0b{XOo0~M~~5M$C4L44Q> z$ab3HGJ6*8OCsDFT*Z6vGKNz$_enE!j3baA`6IcZANBLk7WgV;auV-%0bU2#0o)G= z9qFFu0GMZgyV()jRVz~g`~0i-tfQb1~RF9W3U;N^hS*6szo4e)ya zsjYo4;CBMP60imMDnM#m{{@iR7RCbBmR<`;ZRhoXcLTlw@I`<>1o#rb9|61v@Mi&E z4)|8UR|5VV;5opb2YfZ)+W=n=_=|vV0DL>(8v)+|_~U@T1o&pacLKfz@K*qT4)9k2 z-v;<=fbRhOb-;H5z6Q_Dk=#Jl1 zzPs=zJCc_}hORXFsxrd4x*~-kot65<%<+5b02{g~Zuzr2s7zgP>cBU@u6Vi81z?v= zk1Nkc8=geD${&>{{horq%LV>(s4FVtJ?91YJPGhpKsL?-UW50?0X_}z3c%|C9}h_L zhARPSoP8qTKENjf9t6A!@Ce|y0Fr6$YQUQSCjoB;dE*?0?B z!#nzzdlmt&2RsRQBjD|T`v7U2od%2m4*^mifWGRU6~Lo_YkAasWF1u#P(9I)bj4Ewe+y)Q>aGV!ZJ-ZGZD0U+4d4)v+Q4Z*Y6E8g zsSTV3q&9FjAhm%P0a6=yF(9>pmjF^5xCfBhz{>z{287nc+Q7Yl)COJ&NNwO%fTUxd z10-30HQ*`0*8tLZ_gcU^0bdWe4EO_pG2jmZlFYvWkYxTx07>S56p&>7jesuzd=uaq zz@Grz0Q^b77XkhZ;5~qE1*AUW=K)^<_zQsF3;2tGq`SWzkjBMd0{lL}Uk3ayfbRq( zx&Ku_w=F^cg>dP9|BL6L?Hm0*%08u|QkbVA%+mqKwI!`yvLS$yk-v-O12Y$7>ZoW0 zI+9IvRGXK#u1tm2X8zCL#=fakRBG^_75b|?=zS3te-bh!e7-uehVPA%WnmI4dB&)q_0i_{vhBrfTXWJ6_E7RYXN@>@M(Z=0em{(TLG^F zd^_MX0e>0r+W>zR@L7Pr0r+gd`vGqNBt7*;!1n|01N?2k{eZs%I0g6-z-hqW13Uou zQNV+Me*}04@Xr8`0)7neIe?!8d@kUp0B-{P3&3v&{6By<1O63Y4)8(1JmBX6j{!am zI0s02>T$p?11xY@H+rWKRN~Y zEr53bQeX6)fNuXr^>+dOq+a_L@NH%Tr7)M^k7OjXf7^eEb!rs1{Mnsare3@M&^Nzc z%QRSO%K^$${#aYV%eUa~O9HuqI-#1(t)OWlMko4VO1SI)*2cRo+uLgdc z%=v7g6o$&_Mfe*db6P*m7Q9UT6oR(}{Zw-C5j4{lD%rjX>^oaA=#wnNUZQ?fAM_*H zD+v5=psuNo{sfR@`A-2!mj4WpWcdL=lI4#Bk}Q7$kYxFjfF#R*4oLBR8jxi9F91oF zKLbdz{8>Pf<-Y_ZS^g_PlH~^hNtPc1Bw7AEAj$6E1Cp$M0gz<%OMoP+{|LAQ_+`M` z03QKl;~n4~c>gM32>5>imjVA3umuRAy{8SZ1CZMCg@9eaU4T8n#{l*LcLUNmcroB< zz)Jwn0PX?Y0K~!&(_1eCblb+YC`;;#Wq*A6c^C%`ee>(Ki9#N=s>r%#nFLbXs!i02 zWD|YU=H0|5YBPTmw3%-zh10O7z;2*^By04eHgiDWp9Gnl#QPz@>i`b}?gu;q_#D6) zKx%UZz!|_IAcda=oCBN#q_$TATmZZUunIU2NNsQdkj94!Aho$FAnBMjKx%V!z$Rb= zklNY_K$-*I4)_AVQ-IW#?f`r-U8A)d>J6=nBNWf8-Vu$ zl8*Tb!1n@v58!VBelOr}1HKaQcL47L{0QKy0Dlkg9NM8+|(ckB<-z|g{&Q;or4cWf7v2XI)c)2(E zJb-p@lHLzYK5Ozj83K4h@RtF9IRfhQCco~0lh;lmMMQdJ@_H6A5Yr5?A8v>ebAV$G z3CzDewW(BctTH_Q?oHxc|gp1uX~?GEl2PZPn9?c&tk z!JEYsaF2oAho$?Vc-kF2B%UUMXH38f#A11tc$x^xczO!M-720Yf+3zJ8Sbojnh5UP z&11%Qh^L9*moDZO+KYm(iYJgB%W)Gy4o^>Ku@uGAM6iyhr!m|M#M4CZqj;iu%kJRE z#nVJ^)gB(p?qE_pO$4Vd<@2PAg13sN-ND<$(?swYJYC0P`77}>5qug|@C=6gtazFT zc3lq37H}5@4e_))I4Pbcg4g4T=1jYT9}-U!!MpMFEQWipctXs0`ZgZ3c$x@4dj*eq zckrNing|+KV(p5h_Ga<4JNRkwG!gtIp7ya={zg1a1mr<>Bg0)Go+g6lh8fupC1pfky1-W~MB z(?swg2;X5);r$NLq^I4%<>F}~Si}?Q%e#Zy#M4CZGCUn+xL1g$iQw&cI>K=86i*Yu zJ_r?$?|^tht{{+)V|@3Dr-|T=ctQh08vj*1q0aGyW&_-N#S=;#PiPLnJs_SYf-mC< zGLOH15l<7rWe_PcT_x01XVm;!f*}oG!YE&1c3+N8Sykh_D}J9 zKdjxK%0X)uFaRRNJ0TbZ;!`&h^F0K21VRPUr3)xzYkwX8KmEbFNE&H zejmONvL&7%AL40JJyGML--j=x2136(KKT2H|JM46r4JXs`uq5u8|{SyDYWq7<$K=o z+vmzp*z=B$od3~tFWzSH_4fB1pl{lwMh|I2f~ zF#6*Ee*ee5{Kijw=40z$4Zrg{UjCsAp8L>)#Cq;8k&gWR+tNGt_?LYKMfcK|{WD7F z+g~~%)BoE&=N|uo&s}}~!!P@7BHwrAt8cm*Ir_uRbAHHHkG8CwynhGJJ5ss- z;Jv@H`&{v%FMsCM_uSQd;vpm=P!CGfxy6S*@VU#7yAM2g*{d(udv5XJFMs^im+!rA z5xIQ$T=9`l6utfY=pQ+vOKgh5}JQ45C;JCt7@HEYEiwbueo=C&l z8TTfCPg*zp6geM;Mg?J*(YG?3iJn`>%_C=Bp1opcU|AQ=k zWM$hKAS1zYaK#lj{cCdFn_l#};xGU8)bca__~t*w2XAh;aCaDC!y|T|vE8bMO@KBl zec@&pIC?jrwn@lp370*A4P>hE?lP3ZH$sA%YLU1QglxO-{ zw0~fJoMEIymQtZk0`rHAM}|s(A-@*-A}+_T!`pQh2ENC%hr-~2cW-bf!^n8Ph_?a? zLdOFy&VW|PG$xO?|8B+eUBJL24LmX)>M1_SFfurwHP35ua5nnc(gs== zemE^Hona$Fk*UK+gBuSXoHT!%otiSWZ~Dj~7JyDo*~v~#IXcgEcj`b*?TX${kvBr{X>4X8Syq?ekQ&&r>lD zLi+#XJe5@c`5$qX3ij|b8^SIc4Dc&Hi7W^gu-ViX@ID9nP0m>=6o#w}1kb0Tl>Km) z3QlnmM^o!b26M|KD~0@FiX?y7boE#`AIVq1@vo1^CKJl&>kuEE6o{)$*hNFv08eJD z9mou9IVy2>z6h>27 zu#R5(H1N^y?_i#ycWK!<4ATs~{~#v^&&2vRy}wtypSYZ?A3NC@F|QFg0#tr;m|v1j z>|TMN34(j5Y>R+T0feQI?O&?`7VwUIGT-$@K+1Cj_(H&C!0!ia0{$f63gFKHwgKM> zco*Pr0`>v_5O4(e$AHkZQvSMRA);E6GVvP71f5{;|JeHyz^1C~{TG(Dq#!M#f(w>K z#Zi9!W*Jgfn9#~~26ReYoD0gQF91CpbRp<)&_+PyU6KwmN_+v12u^bW(mKuOi=hF5sbcLl5bIIVZa0YX-Ao> zv;-&m)I@YLOR4B)ZtNASo}JB}u99+x+XYitP9upKW`8v^#SWL-S%e+@%-r=zgiR@T z_<}TFa>QUyLR3`anS~{t`LNW0L z2slv=^H0yt+5=(B3&rPi7CU{;l0qlmN~kH$F{ilL?HCti4uWN+!P0^g5f@$@s1aqD zBQo-nr9Hb8#t4v~90)T%S=|WDC%kOoR6^=(cQzPx72G`5g$dWygA1s^f zb&8UirR*fnVxME2Je{@jUl8c1O!By?Vg?HukyD3E$^a$>SbC+tB1wo8Km$IxAs1lh zGPwm z!ibv7U*Z?Sbae%z>Wh^tl~{r~&;EXf={&(;AhdEZ`3oqdh?mRjV}ML(5~!q)-R55MnQ3 z%SDN?FQI=&v%k-&!aq{r5KW+yS)c#~N@&RvcPaW|82d94lVKKfmJ}rjv3l@fnP#Dc zxQr_0$J-lKILj>Tg7G~J6G)gz@^DSEi&@h2Y?G+2GrL(dz`9%LC>-xBDlGL*#(72c z$=PNhSRzmrdr|;a4)G>7Gxsx5e!%Buk+Woc4j7L#G}g@=T(6^!a`g9(0=E-q`P8TE zWfqfE=(V<4_E1f>yIEEg=bv1HG;2*uhB7Kx?`Ne-AmNEpx)O3Nu>s{%FHrU`jB0PQ z5TY`P=<)P4i=Z8pl@^w|3*8R%2}RP%8P7guAq)zo)Fxg-t54b2?5lP%&LXSM^g6Mh zSzLXRS~1+EYTsl$wwGD52;HzeR@Y~5voEubH1VmJX26)GPnz*cBpzSIz^<|WiU7wo z)l~0q4vt1uhQ5#uxYX}rPlo{&l}ZLbYT&>GX*ZOE)-4qp!zE`4dQ&^dEa(c9OejH1 zYpx7>lkQ^{QyVNtQ=>^AZ1(p#ChF=m>UW-50OdAmauMcCYQMlq6%*apEW;7V%UV9p z={FwJ&n%%%K+x-Bc-C8c|3m?g*HKueoA|)M=yY)i)blqd@r4GuQT zOZ#R`@s+xb7>6WCSgMiU9pD^?n)#t-c_~#)&@gJaN-z$4WXhvg@L^_AZ=k^K^23a2 zb6wIK)Nr$$HU@DFY?kCyothtEmh}7Gfk~J)loz1kO+fkREn{SY6lXa;W0-D^QFsrkuHnF7?z^9W@UDJLaSo&o(?eX`VhzON@yhXVr|dv*u}d zut%jwrsg4?AjS9t8GMY8m;?65>c6X2YQ0$nr#OmN2si%~%(UAiw0`bt)j zR@IYYvczE6Y|WQ7M|wCiyJ}3Ck*XaZ+1+$D21k#>h+;3D?LxQ3RSIRhYfROEuA$l- zjcs(z?7t|Vt4Bf{X{uHWsK?hs^VhP@rNOHRW>dWWfKl#jWnY48S1>O7CR3Z*9Knf+ za+z3wm|zNYFa)T&pbQd> zK=<#M=d0(7Da(*z*|&MwIP@ohqa7IMFa+PHG8w1 zb28vQMnJuOpbvMAQ`ct#`tFzEo3i^_WZlkjj>5^Z{Nu39-4VSs_cMfxOR@amE{!jU z$|5@&0l%#37-=s<4vS}&gi)J%8$No{%A9W6WY^2o$o>9?WHDBU&6WQEgD;~J`U7u3 zf@2i-OI`FqNBN51LBr{@qLtEvk*8#V=Y=((YMAz^L$PM&E|ngq5T`USd31{;Sy**r z-RUnxwL!~~NDa2eV>d<~R^JeH=%U={AsZ`hRFyK!0kP0$fs%=(c44sCTkP0rn3yuGmxZgPq8q+7?TBqhbw-OmIxCm^mhRG$ar|K&la;#z zk;OwZVVJ%uQX#v^vfsQvy#5O>udB%8cWEUU#1>S*De++cSKj>U*SJRJSJ6HydXXXB+rkhKDZV3wSN0nEEK|^@Cko&jFgZ_lY zk9fIpgDi9B2783+jt@n-1qVL%;6yYBtp0dtz|dDuaJcsdq2|pujCEPL+zJR{l2hak zy13{Ei2o22Y?cg9LCDJhRqB-uGe*pP2e8#m40K*uxqa~{&8PuZ3t73}VDsK<-WgR_ z3x!V6Mqd=G8&w+GXVSSEMReNS2n+Ho*}Q-i*D4s|i4{ic##h#r)K|ljRRzor!m4FV z9?A_VIp@>#r(Bca}q+L5y)IP+qc#(@*FGD!~$ z3u)K(q%gryE23JO2jMOQ3NvTUSyJxup=U22h6z@d>isO=7xe*5!ha3$#BOdsbq$t6=mhJ&7;LT;;=p#s+$>(W5~!eI`bA2o6hqH=o+rK+-#eW4Ydw-gh7=KVAzaU!;SeVBh`K`l58-J>4~cAgh!Z^&Ckra z`Go$qt*s}i92{M=f-j5$v7TDwssQ>>n*(T?hBpn=J2dZ9gw+% zW~5~vqYzqWOVMBhMeS{*;Y$a1FgVnkD6$#q~yJ_T> z-8L3|%-tW3HKPK~90aSE^1u+4~yXW17nXT}1$9}n^>eN4-JYh$4#T^TeJWk%dKz@4Y{?*++S<*4|W8JC+-~9P9 z!OsVO!JG3R&+akk$ItU_`E=HaSKuWXaUybT-9NZ6a#QuXOO(g5*ZuRf^682)S@{0Q zKbOosA^76KLwlcmRHWfzU{VNw8c||Fny8*2<;B?Q=(+_Lf4NO7P!3{KQlHU;Sdw%g;UR z@>l-p*p5?0!q44!&B`x#Y*Ro;SZYm z&<88BSLL3abK;KU2aTPNMK0Q0j_vv1zuxeweeIp+-}U;aF{6K+jCWkZf8?p$58vGQ z<6Rg3VbkCfUc4UsmxX`KchCLvw$=T|)-TH*{I9WRKLUMrW<15YcXaN0=yU52KjHS; zD?aF&9UFZJOC+aSD?%dyQ`y8k<6xAxC}te@BCUVl>vbx!z?L~3lK z$DDR=zvsKZbLga5g}{Fn{`&h5dG6B63r{`n=KGg^@p|^Xz)KSTIo+-u<63;xb(25q zcJ<2K7nb8JGmZe~*xnm>!($gbc%kp6X}2yrVETv#)GOgXa{E4i+vM!t@ckKEhW7Yw z)nb&F@U1uy8F+D+V=MXcfb(zfILB46|I2~f8jl(d+&tl*b%SH)fBM z`yQAn!k_ON_@_lT5BdF-6V9w1_|)C?z@ZZU$wwaiV5hBFJL-d{z1CsJfv@3REZRnn zZPPQqk8Z!vv+tMHSve1G-@gdsw(z?z9@2Ejv~veNJ@}<(7vAs(=>Iz5Z(re<+9US% zf-f(-Y~ub4uEfj9&xAkczB|r%;=EB;_x|{mr#HRv>Vr7pj!#r_Y}fzr(glNWn(@K& zId6UPZ2jb`6(uVCeS0ssCEVEM-peAshh3R_9f?!n!oT9u$nt*U4zGUj$ImV~_1nk3 zz*%hJ&#N9juKG`dXMO(X?UQD{@ytrRXU=B)8|JK-Iwf?-{nz%}uTS+)_q_^i8sQ(? z`NrRGIlZRt;qMPV=(gH-ke*e-SKeRspGRMc{OiC!e4*$16x1Izw^?e@Beh^6Hho% zpN0S6q$_XyZ2KA8iXOP?tI1#g;Rs;T2|x7IrxPyx)G_R##sAzE_u(bKivSl)`1`+IlKr~@Z*AYdbk!H}6W+ZL zxQ^W!|I!nCZn-$C?BcioQNQre?+Vbq77G8rU%ol}v5XCG&b{W;Q@i*11m*Rj@W0>p z%^R=$G{3_~ukJs*;=#2WvEV}=lwx`EudAXPkZIb!V^4 zy>8jlUtWL3KTiY>uJB*#Fll?Aj&)_xk8L{^pA&xp^-cKs10Ffy@ON%`{-cRM&Ixt+ z`fz;bk21@#J=K3=moLjk9O>EX+CLV}efgh?a+>f@E8qW)rDO7X)qJ50dElw5@N#~M z@Xz?xf7J=^W?gmW$7cN}>`{Nh?W$4xa1!j`)i(b#Wz1v`Ql&KOugrgV}H0E0xO3kgzIlgi zyEZYLBAq$tJ92D`Cr|%o;Sl}OR(Co zUKp#KBj*1MLt-J_kl2*d`#Ta6hbAx*>J#)f!HQ}l~k+bRe z7A+pDOfh#jlN*Uv#8a(A?2NE)nrgWtnow+hO+|{Cg4yxZ+XXZetFEX^Rl)JO(fU-I zIg(Nro|&Rj>cXKIY(fjN+-`Tzk?L@;q8j@jsrK{KZnR>Knw+-r0b2sPOJx#(uZ#9b z?O>`?RHrsfjZQHdDzi2k)f#cz+H5vJOyEK>a-Uk2sI805YF7oXjL>rUygba$@&?Xs zwzRC5FB(5a{}fd*y`pY@ZM%}w#x$|IIyOHBBM&L2B~sn480M~C zO6*Ukm=aWwJutA(8)k;5n3VdOIW<5@XophTE}jam!rK!~8(lQiQX8&Ib*+L}W>)Tj5&|ei zd-Bt^TIPn(siiuv(u#U$dy><(dTYY*)3y28Zci6auStC_UlmR@Gd0tP4OaD$QfE++ z($*8!BwVqzr(D{uCYTW5L;Ci_({}k{ft_L`bK=!|Vm}S@@lbs{+MdL;t(mGwbtIl@ z1H#NAdXxQ0*QV65HF^wUHR;mwWiBmr`tQs%;TV z{ka$g=cbqzWVW($PCI+vwmZAx`@lZ`oG%hC-_e4dg2+4-t?%GK(tQ+hRw0{-bUpHldS6f|i76Y%^alCVq=E_#4 zXfB}b!_@`8K;YM0cI95U?819ca{+lBE*uiT?-|VngnOLMV9Y?c*Iafb-{2J)Jg>nk zGkDVsUZugSHF$A@cag!n#Ng%Op$Fi(nM#%B0vfyKvMWCrysZYWFS5uG*~%fB%dQMD zcq0s++u(T(p5V>qlxyhNW?by9tCW{F;qc1l*~$*Q$c5R*&Fe@2n!VtxZOU0S=bp7K z!)9xUhvC4-(hc>QOSi1uv19$&3^H3;^c2 zY6@ieB<2MxyEbhmH$iOaCPsR={ViN$IDs+Lm0M}T!)L07O zQsqvD>p<}h8N7PK1rNFK<{RPli|?CThiOINUja<(Ts^S{wZgO#Ml8?pr^5^&hLdmr zdnAO|-f*q!KItb)sFz-)IwE`rWq`Y6B>7p8l~Cl2B4-)hg%TNYZ`C->`J&<1Jp5Fx(z`$I^a}v6CYUwW#+INsS;z6k!o-#!X@bE> zb!{*>E*vjRL;}eNG@$C|j#h-KitEDR{Nap7U~T;2xH}Y!j|cLMlPeEb&5WonUmUHg z4&h^xSS&O%JTZSLAuQz~g;4{JhH>RL16%szn5vhD>SFm;yvqcHO{0i*4|vn8gaiy0 zBZX!zRB-f=!75l^o_g&R-EZ_UqmB{LW^})e5uB0KN-P=OkDVPmqlBvkbid(~V6zT# z4^CDk87{vCbiao&o(86(E1IFoO$5nn1>LU->8iz#7n9H$y5AX)IXhX-RP7j^&F>;j zhWEUfKByuEbiX+8(4!mHW#YK{Dni? z0XNzV>M_n64fGwJS6Um#=EE7-PRzsCFSR(ARHu}t(f!iseucg=d=ihZT%CY43QlzR z@Y(;kG`e3J-S0Pv?q}{k_dK}Y_vnHL;HO`=U`jX~H(44ZjCCVE`jS~5)+b5;{@x@Q zH-^~{ex$E)VIY?Z?H8O_U*Mn_nEM!g(f7XkMhczPfN0b|J!5h0*$&IA*dv za`;sJ(w~m|U4{E2WE+F?lQ#MIuP8h>QW5rs;)`P^bXONXtsZAI zDvLt#(2T0+=|ys2BNDB_S}Hqt3#9rnG5E%-8CsB#|5t;Hix2)-i>gwK0^eC>=Y9_6 z8pO}{yY)5Nccuxk@Z%#I7r@mW0kB5iu@V6yID?TO_YDN5sB%3aw+3>bK#ouIg=%Jo z6NC?ia2ARgS8oWv1mQ2t!jAgNNEFM8jD#Oy@!S#!-<&|4_pC^~>Uwe+!U?%R9dhNV zU#w4e!-wk}oO+h)Lww!Dy7nn(A5g3e8U}%W0XhuypP*wv*MUv}{R(tCDAu-OMj7!m z%)|Y^K&j(@gWdzW5p)^okD%1rPoT$xZUd!uwu6SLC7aT40cZv&6@gV-!(N~;3DIx} z=z*X|fgTKc3}_zc@u2-cPXs*#v=sC((CMHs_RtUpJsdQ-EnbP|X}sx!Am zPIHe{x^wYvTnt0~kiH3d^|DQ@tj5B{8>#W)XhOIyKHmd)%ZRkQd|e1Mg?86A2q)W= z-YU`X*-F^(xS!AuKegepvNNy3(b6f^3{^yV4w;z~lVsOcgK z?6YVkJUEmEGzaI65<$)aqsjp{%a#!a}&=Wz=0`-EP4LT7NiD)<#v;qGs zK^K7D33@*0{h$|tJ_Fha`aEb8=*ys&f@b3RmxJyNio`eU5Bf(?)JgUymiqO3gkuSy z|B~zA1J!Lp-m|ZN48LQN>KDTx{|f19y<#dhRIUkrwSPw?Ywpw;eGAvFcIxbE_3D$* z)v{jcov7AVtDOnUX1wXiOfSm@|IudD>rc=L^Kv8T2+*5A*?0UIlrlGi9uImeXmZ9m{J13DF%0Vh>C1euT-LVf#~uJ0$Q~RNlN#slw?;NvW|?E&+)!0L zKUvPE!Bc6p!jYENQq$zHrI(ep_0_4`Xl`BVcu=dcNvJoLA@?oWHh7(avY}3=f*u1J z1U&(C8fY$V#H8=gAy-m6(K}--Z%uOR=JdZ)t2!4HP-$cA*jfMd2=vA5 z{RNbIMSm=MeH@f}T?(2H`Xp$wUfF-MS?c{0>+C_e*ZX!FqnePUSB9Ys>4(jFHFfNI zg>_W|1Sc{hg6~OOH5FC$fG%LILkt+g#q8Q9S<-_Q3z`!-UFjac-)&7D=V z59a)wA+z=yGh}v=oWrw$Xw6|Cu((oK4b?OUmU+CsT!_fTfNka?lOCu~_FH>_o~iNw ziZY|FmxB%f{Tt{JpwEGh1AQKJ0_bYcGSI(+o(77sz5(Nt@+v6W9Sw>#+zt9VDB7L! zCMd`4w?Ll&eH)a|KdTS=Ex_WmiDxuG>6UvKl%`%2{DdL}@DMQY1kxqw2o$+Wl{CsU zK=O#GCHQS=lxg%aX_RT8y`)j5G2*0Arqd|X7<+$tl<7m0#xB7FDh9GQ3=_Bjm>0*c z0}d)-ouUG-?j{2be6lm1uX#YQfx$d7-njS!?2RundNqknKWwnfjePB`)06g@n5nzYne}$AyY}55x zaWg>zaqo4N1Pckf=U4JH{|=}Q3H~w_bC*sOXh>%I7s1+QV_|YTwv-$VxLQYi-YFip z9$Dw)$c%R6H(Je3FuOUEWx8NqJ5fzqJ&|}QkeMt1@On>xc*O!W$Ks$e)7alMkpg=M zI^cL3`};SI{Y}tg?nrRdVeg~&E&zAMu9fO1U69$2Mn-lMG<@HLzIa>!19Ay1vJk_Y z8&24ZkaQ%pPQ2WQ=?`5*PimqF#^4Eti1bqIOU-ROSWpVEZl;?^fIz!Wqn1+Z=;|~;w=_GHVM{Md4AanP@&5zvqgIrFhGgu6BA2jOF>IRaYtcig0 zR`-;glMI~eUko~32i8u*r0+SH^fU@O-uPw;`tkn?1)a}Nwg{kuo&Q3}=mcf%hk;xm ze(~`@mh2?E05$%zfutuvniGEbRJ@X|;wkKK1m~<_ak{R)f@VAuz|IL`?8O+U9wMZv z48v9*0quVYBy^%1^VkBWJwZ&sa2TR}$moQEJ_UKKjn4x1P-XS>3g#1U7F1AiKxP}D z;{EWd$L&>NymuK;ouJxrlqM|15v4y%W{Zh)MM-lipzFJfvQ8-X2`D}{mh+ma6I1z7 z6=n=}*2{~aF?V4Qb&;j}Ga<4Q>-+*dNG+M>N~qOA=JrLk#I<$5RLj0>GXC+Zi9Wz* ziv*|RvbxsZxa>Kwcjo`I#Air3mLcImHO+uHrw;p~`gpaJ>1}(DV8ZLIRx_cnTM+R- z8zemS^9=M8ECtZM+u_CL8zxa%vPfxRiIR*B&vdb}0gqg*Z+nCB1mbghO%d)X1bIfT zRw);a^T3iMY^)I#ewCE42e9cbqQAqc5bZX>(t_}f?G|I(Qd&5-OOQp=rj*nJb1&6O zN5FJ6S1NUK*QVA4C|(}dQcdR@$RO8<(pvw|LFBXRWELa`yNQ?IV#)r>K=fG|CZn!v zLlHU;8H!q~f9U5n<2S7f7vVV5n14g>QxF|48_cSYZ15<5RC3n-!*imhi1G{r3ys3e*3C@U1ZY$7V79_ve-R=N}&! z=~&SB+~Y6lbTSTJ2;U0R|D5oxF#XwR8#y*BOutX~R+xSjcE9S+7YtuE?)nFoZrgmo z*6Ut;7m&^(Z-wdaV`uzUnEqM9x5D(_ugaId?Od||$eX9eyH`B%*#_(;d?$P>eE*ni z#&3o1KU4Tt`2Ll`x5D>#!7;5I+t*L@IB?->Pvm}b(xmmb=WoP8*b{|sh4oiq_pPx0 zZ-~4V*1vZ*#&3o7pDKJSeE+S&pEl@&M^25*-}GMB3%0-WYUAH=9#QyKSpUH|=+hFc z|6Ji)Vf~*Hz7^KrhR?inY*tu*m+-Cd{eKX?6~6y<;alPRd!zSm3BG@-@U8IucL?7K z-@jh?R`~wGxs2Zm-(N3$D}4Xc!neZrcfx3zV>`RN_R24|%=~wU3FlvT|E>NGn5_uk z3hRG`@U5`^{}8?v*1s1%(ay11Vf{}L{xwG)R{hneZO<+YzV^~9;dj^JY`5^Ou>PM4 z-wNyhJ1kaOg7uFI-wNx`{n;Fw71n>7@U5`^MQD>P!TMh$d@HQ~E5f(J`tP$Z;WJ$*jUIXUly;e^NW=Qa zqBG(Iif+x2M;g|@ZT$c`%>?V;HteO2zg-)xi--74WQuK_u(x~M7C_rs*yEt)X$t}^ zSkL(tTM($-U5h}~)u~%n_^lfh*lp#`Nfom1H)va6POLgy840D>$Nr`*6zsgOPlRkY zqfWE~oV<-`Ma6H|#KCSi;_CLADQFwoGj_VzOqg+0q^2sR#U7>?DK;Lc;x}#bV7H4p zZLpwa8!Tyq1zZ;74H|2WuQ9Wt$2kbxR0FC?-k8u zSFXhg8^)Zi+@QJa%7+H;Q-hZQAyv+9c}Q64BmKyw;8S@5MQQ}kCQQUWh+IR z%dVUY*O9_IUvt@&%itO$ysI>qUHLOyM+xsX&1F|UhD(j_bIoN}2IF+h(U8kj&eUAl zN`vOID=Xj{BC$NDx$MdsxCRUFP0eLjK7wng@IKRAb~$%5OnBddN0(h`#2FesEn8Wn zx$MgA2JdczcOcHf42N8%GD~x1D^;4yt~>$P2#Mus&1F|s!!=TPFKI5j@-|$fg!i82 zvMU2|3WhOfD@STByD|^1(con&D>YZPpyrWh7ZlZFBt%b~e4)#(91PbO;q}*CcI7Cz z#tLt!=CUgda50u_WufMR{@^0+R;F?wPP)(q(mB`s4qB)00HoB z(_D7tQ@DO7ynkvgyHbN@f?|SPo#wJDe?>Dvroj7~=7OHlOrT8gj?`Rsr5r9K47`&y zmt7IVCBw@nE;{R_Cs0ikv0(Duy{nuXaH9-czTm8`O7}l5U$ETP=v=n|eL;QZu;pJJ zfpbNwd6L;3X{2O!$0kqKNeOmDRQo17M0^|0veJCXI>rgx9gWV-tDGBov%X7{bE8DQ zvB|S>tY>rgMNf$EMqiV2n^y~v)#&^j-Y{`u!~xdFP0o+UI@fhS|2%|PaMtIxxE+5x zc0a!k_q3FPYj)?Pa6QjoUf*}NP4{$e6x%7(4Quxf? zt0}N%!L$8*v!Ga_vQkZ5&tD#&H9JR=+T>ibV0oUd5BikoKAtrTR^**z3Nu{yVU#(# z(h;UUU-wClt^Uv^&zeThOHF~7&OIZ4#|}k_^=xv!)HFVStY^d7NcKxj1^JE64Uj@Y zJLWb9)_gS>AYaIao~BM;4c!jLW}2c&s0dBY4HjE6L0E7Z-l8#?wTKnpRLCVDye14trqX#9Ks5$OyL>A9fjqOBH z#CpMWY6|ph?11zw7>y>RTKFkdAG8wndJC$1&!()CX1Dpccvh2Vr7%3m6sZMHn|-&qRmK)A$5_)%l6=lR9>+1ur(Cgrt1Bu5xZB7xi8x z+el`2TIAf~oo$ zT+`G|s)OgvrhTM71lHan)xr6GlP9OqV^jwiK?)>P2c*2o(+efl(}yy0uJNi>BDvQ? z!^}cyjt%sRcTvlw<$NVKfXmqKd71NNE*D+p1LPt*=3AmF{|@)(x<` z-XPue22{`{&jxhYXB{&;hjjp*+MMORI%4=}?s)4DfXtj1dSN(dDzfK{b@r<7f=5$> z>pQG}G@&zauCw%s3s&|rRrQwiF8yH%qQl8ie5@Y8-(L9jRBG^-6U&|i<<$UpAAxJM z@ZQ5;PB${dbk(uKV{fVQ2#2ildc(yjNCx4yHJ%5qz7m2pfs=;}<&SV-&I8%o;Nrw1 zLwV5PJq;H-<_zTpgZDOEoCIYkpBcPOaB(7&q5Rk26`~ceu_O)h3CEvmzvTq47ts4abc4oIHLo^)fL@R ze{uDKtDm^efa_?udMa1Jb(HX~gG-I?4!G2mE`e*1_%4U*NO7%$OU?Nv!?o3Lb?B`7 z7QvUGL*q^jSyEATx!@0;Nnz1LurCb4SNk-YS`Q1;^aR=md;!dWGLIf>kC&; zr2xxcwRT3~Qp@8UxHwtQP!__a#&;Q9YJ6Nob9$el+zl5e|A0Pc_ER; zrE)5adp*>d7S4?coM3ghx}v&P@hmZ9bTfzqN;YDacy2a0jAtIxV~$61aUa^W5lV7# zvza4h%FRVprah(r|BUCTrU2V#!bZ1?R~3zgRXZ^G%|-xe6VMZ`j@Hdrzid{~uYw7< zJp$UJA}l9*=*T%HoSl{hi1^d8PXg!;L|TMX1mE~HJPB!0&m2yx#=|i45Ef&F{{ypx zt=KWqjV(H=h+z;nbZwYyqzOhbznE_rYgFw5xuS*9ns{BbDu38eDlZWwlGYwg@aL*s zi=ZVDn!$!7X|HC&BoW=e6(Iwr9%(S_Xy`Gt0Jm;GdI(+|n691LTO2ZK^k|W%y~RxB zimaKXtG()MiR~)c-r`j7jx_aGlu=r+w>aLVC>KNS^%F%xW@-7fw@3p*Dog(6;P1t5 z69dkCW$<$I_)OoGXm@{t+|*K4c0Z8T>@pT1{p0cD#iX`om(d5A@?^Od>@rT%WF$hy zm$F^P_L^V(7Cmg`&t!fvG&ej$42`C2eX%5MeKBo)F>QTO`=n>e^!i9uxYz2}CSU{dTX}=iN3T&p!eII^QE%u1is^Yn4k-3P z8klD6(OJybJPtm0D0<(r8jMzV7^!;25my^7JQ!t!|9qa2oyT4Yi!DuwI*dHCrU^~JK{ zZe*3lL^>Ms;4T0?6tobOOVT1x?lTpGV#24411$p`56U>fYq$s$lfZ^6K_`IT42p@I zm{;_GCfD_oZ0bI)uK&(>Wt^vU!audHUjzRWlggN3^59Q82>Dd6Hp@63u8BpaYxdMe z>p?*I9PPTW19n))h&9iBp{^uzX>H&B&ngM4VIDHTnot3wim;~Y3B~3}5g#g3bi}26Pr^ zHqsLTO|Ekb;m>mCj~DwD?!5D!{p*kT9iLR^7=|*WMLqFHF0IZLg=d6dW>T|eEBdD; zEIoc*TBGPwk}A_)N@u;x#tz6Ryf`r5k4(BBk#s*i>3&$!{m`WQA<}oTON--Y?z>EV zM6D^&%rncC`LERY)zB;N@ouK!cc74O7y?=c%Jzk*rF`dtqQ79D(}4D`oC{h8iZ~li z0mWD*rY`>kO5JCmEYh~6(zc~aih^aO!BWBJ#%qtXZKGAos;c*yY3qmm(-OkKCdLM3U1?nQf@umKS-ft?!Hzq~D~6m3kk({$ATC#ImLx6`vM- z_Eid8B}JMQ8({Ym47bSR@;Lcg#ZeA>jgA7h6XzaO@%_x=g>Hu*uRaji?RJ-Hrh)Xw z_A*NrISWgRXx)o;1b#6qOzpO?q*t7sSWik@J>nr2Q+-KWJ#tPe!>HjZ`Au6r+D+p{ zY1=`bpw|H-O0+1EwjJbiYHO4KtG0t^{3|u1K)My3wAmh)U#1nD@KL2XO0g4m^iW0o zj$&t!Lrhtzwvz3y$>bU`fs#VVl{<@yVNJSlyt8luP6?_J^)Q6SIm?0ppF3Do>IqVg zEio7k+3t^gs>mf?+ zZ%7t9ok%eEk;p&5;1^(KHv#tTya5UB@s`on%m3DF&o6AE=VvvttuJ3~K!) zOz2om=FlPmli>}S-+G~rWaSRQy8>?rZx@^2{-8m?A_kTYFxH{Y1$}HTyKE|lwi-qv z`h+u9Ox*v%Hcqnjo1f9%4ehw}g|uS723JbsVv?=FpT<$wy*o)(qRc`Bc49)-uf7tsq0~arQ@xs|B zR&~0uL+%Qgt`Pp9nGb!iB70Tt**PcfIDXLB`S?x)4Kl~}{O@0Hc-6l4&hzhjebkuI zKTgKCs=|NdsoW3W-1y^N7yn_?;1gcF9{iVuf6RB!{qwff{m0fX%O3o%v1dPm?}%{l zA;(sndq?N4hd#Id@DpyYz2dVk(czpde5*;6TZC^liLy@kR?{bg@GdULW;J~h7rxc> z$x`84O`rT%_*T;={Kh25W;K1%Bz&vslh=fAH336_h8&yK^vML_TTP!_E_|!$leNOP znm#$W3**1?xgQVh_Ton`R?WO|NX89|Vt98fe5>h`n}u&Ree$*Nt)@?owljXKiIcg) zx0*OvDtxPn6TUcwNrLL(nk=ajzSU&Oqr$hECfO={t7($sFx2JPtfol_ z^U#uMlD`Rm+Dnmx``zO`C;ar@Mfc2m{aKs?!z3ifW;IRX628?m2_YVGY}Iq^9oAmF zN-Y@|N(erb!Ok zm+@OolS~)B)ilXH!k@SKgnggi>)uNM0U6~5Ip$u+{ankM;J_*T;-hxBIrR?{Ts3%_O4Bwn2JN(rqtZJH!) znnXK3+%D4}CX*|{SbgmtwBSMm!;y-3im-BN(B+O`c3b6W!`eyOl158b4LD7%nVI4=Ic-TJZAl}++GE?MD}HfH8g29n7^BlBFcPLI zX$u%h(EVu(7_C6}r!8Q#una_plD2@+3>DC9q&aN?qm^ca8pC>&;v5XIq%B~iEntLM z$zm0ux=Pfi-8E9N+W`$*7R`n-Xp#c2$N_y%lN5BRCMoCwgulUiNpk^wA14>^@(>}W zXs&E!n&z@AahyA#Z?-Z|bJ>;6aN#u@LgeGr09`Pjptp5Q8F;s9F1vC+TzC-% z-ou*9t}KI#FTk>u<(kW`EXU~qHNKUa%dX5q()&OzQ(2<9vX!Np%dTvN>oAFByXLYh zo$(I;P~mmaTmb2Z>k#4f)?9Yw5V!^i?{Lj!S4P0qUwFr8F1zA{i$}$>6_@4$s6Jdg zKbNiWgaKW4B@9=d@FJQEhCJY6>S4%3bJ-Oh0D}s_`(AU|<$M#~ASw-tvRD~?{b>Z* zJ}b)x9B~}fQPy`}Y6Cg-ZvudAfM6e}fg*nnVDltgWS}1do}XCA>kv>y#3IIbsyBRe*5~h3f7|5w z9D2YDAl7G>-2IQ0x_-b|j>BO#f(L zysv%&CmD2%_gk3OVb3w;Og|8r&FRM@nf}dc(PigsxcK;Ij^C>Dfr+@vH?afExXNV=gQj zG&%qk|9Rs{c=ozR2au{?_AZjBq^KsH90b7ru$Q%R8*S1az};C5coB&LM=0bHGzvqr zssr`sq*YD+a(ZvAN)N4zYK-Q6sqr? za8Yp?$^(Y$al^ITaBYH%Jw}G|16&8e)l=!%LB+@EsdR%&ea3-sv9|%rHC*hAGL#u` zv7g9LZikD#1F(SMVxN$q+y@tX0^kk9#rB_}EP<<^xR%1zS6s{BI#^uG;mQ*i{>X&` zGYF+$IM#tXs`l55BTQt&#LJ2!OjN@o6NJoohU}X<+Vpz3YRMhvG>bCtyhKJZqZ`tv zqmB56?CY<-<(hLTr(P^0UY(%b4vHCF7Y6}bMaA_>7!5gB+%q)}OG%4IL)T>)wT99= zR|_RF;$D;x4{vV3FAqO8g>WcO@{e467O$7&FaPKq9L-Wb#!n3egcCL}j=HFt$up8)jVEO!#zEt+_CmaZN*> zf;-0#(4cG0A40SY{}l}S%J3PIc3Ru0d5LVCzNZvHw1`e1Qmj{rY#lGR6|5~JiQuPd zlKeRCt_3fg6|R`$jMcUs+<WA}z_afYW+fvRukItys=f zS07asncgq&=psPy1l(nSZXMIFz4)#FL^nP4=fQ8Sk4LIfMs6LSMs95p@KHOJ0D#JN zVMA6#tE;0m?U6QNgXRr7Ig&T1CR!Dp8O<9saTtD+2IUPZt;BCSOg)y)$6e7xSIID# zW-JQAQG`!7=`3;<1jfPPb$}TR_?;RQd6Bc+g%2uSCB>x)zC|vdv#?CQ*(?sY-9-U> zXfvtMhfh+Sj4qAbnnrGI##=3q#Ogy;d4AJN#orWitMr?{1ZFEIdYr%U$Lp_HgmuLo z?>FIhC4OU*Fa;TgYh}*+jfI2)Ou+zp`(P4`eKMe+{vd<}pdbMnImqI~zI;Ro4909h zvgFs8ngOxBlw)$aoyBVa1O@HyTinQmSlFu78e;u1dVTFvpePMYXCdeSP)tf1m}V@G zEZB^y*~Ta@v8ZHO{gqju3|d@>utv59V~IG zfA~D+kbF)zH5%ahZ=qms&#VJOcP?&I9>kPCSW`m4g> zT1)!%xFMEQm8&tymr`UA@Y;@D6Qkam^T%f<=dTj^VccO*rey|ba@k!2zPV0ag0kzS zG}qUq@IN*we+<(LKhkH6zrc#u|y;fdR;Y}s6o_mF({*iQ}4zMm1Y5Xeagn5aA9u0aL=rN#mpv9nAWi+6@ zD_F5K_(11@ChPDH@EM1Gy$v1qQJQu57(9k2>5yTVUea-fdUPFPg;*8=nlW`}jyVP0 zv4?Ed9pYx^FbGfQMUC-Z-`6YGG^q9!W*tgilXQ3{bi%w~14#PCKY)(G{iUEz(91!` zfnEg~0lf~C{laa?S{my#jdhyFI>qL-itC9T{FM}0P z32^HU3Ny4wML95MXZ|1^@T4PInQzv_GIx%inu@T@ zhQf70=&Nh4Lzhu7H^9ipF|Z6{VK5DUiXDRzcd4U@I80J2{RY%!8vfKNkW>UQ>25}S zEI`97@lOVjmRD{1=tN(Ch?l8%D$>|+)Z^e^@~Y4}sZww9E+u*HR!nrgYE;ZHRjTpiam;1zH- z44gWYY#RPl#|jpV;57Ux!T8=oHv_zJpZjDCA(*xV$4_v3aBM+E{j@1whYwrOz+WmY zaRI&wU~gFGtDYS+&tjhoeVlu;5vrr+;dd4Wi0(x!L&LL^=IJXfEh{Q540te|GNSCP zc^V#^(Gh+$Q}a+E5Q8p1;Sl|W4zCl36jYHcJuLB>u~F_1Y66^gF^(>pfS@TB`+%*; zbm_i!&6l`~;+cj&<aTOQSUk7vSWcaJ^NHDebm-#ST$F$#Xz)p5R9qKC!O9BohKaY0BP*5VL#=%Q)()7*bUD?nECPxcGyA)!kDrLus9 zi~hm)K>_ zaZVpjA7Z`**Siw0ReDD%Oua%Yi5rm)wXGy>#NV6Z{ z9x5ybnzAT{GRI+C*;}XrY!U*MGaHWZ+QbG2DAhD1CV^V+hn%CY(>9avjxHVZcOfSNmCC?%+=j%KQZ+~TE3R_>R%nx`4RRO+yl zrHW50O^mfJKA@uyB>lcuE?F z^wev%#^+|NK&O(%Azgf_uMxI4@gD5gheNvQncqjZU+CHQ%j&G02efNBCBp)4jSdek(p{K=@W1((8n8#UcGn_*NX!fq47f5)Nrp_*NX! zhlOv&A^lPKRvgmf@%2!S&5A>Mp75E#Z)cg>S_ny-)a79MbQEZ^a=Ui6N^c9Mbv1zv!(lJs$t& z`pb@d`HN>?ynG%G2Q3r+U&a-Eb?vsn;kQpbb;5*OS8h<0AB1nkAw3quR*ubzL%LA- zRvgk7gx{h2W$$)-bwK_HM~~`%!i)Z!5Xat(r}snWod3*U3q78qNgFB`Jw6!|L*ZL- zNN*Cp6^Haw;ahP?2VyX635PT)d@By=65(5MNdF^zD-P+gm^b9utT?3S3EzrC`hxJS zIHWoIG9D`qX+Zc^9MT(vZ^a?~O!!tD(!=*-{8k*&sPL^gq)UWv#UcGk_*NX!LY#xh zu~~6QFBZNPhx85MTX9Hx;mlo2IHdE0-!cwqKb}vj7&B$JF_h9cq{#?Mfas~L2=76F z%@jXZkAc{u%>Ao(#kopR-g|m>mmRV5p|_l zf|Zrw6k~{0&JFIl^vns@!Rq^-$k}v!))kNObN-Zi#54|RD|L`~3Dp&Xmyn8r<8!0+ zslp8-DRtqL!Pvr~ShOa^>Vk8g!HR0^ZtMwI5}c1#lhZbGW~{DaiuxJPl-f{GJ`zZ+ z&i`tGNZZ!Kp2lNk1+R@pt5U2IX#mpJMzIJ!P;5s{Z5tFX7O#YztoFpyHkw^!ct(nm zqyb3N0Ho2K;l8t@uB>WTecf5TPXmxz@NVmC=G2_tt}(oAXG1daeE?ZTPS}r z=+QLv=#+LDj!8q0rlCjYjZVOvZmV0WsGDD#>f#*xgQ2R(%ytbwZKNeOD_m6-s@(%a zAvcCn?61-DrlCjkVkV%4xfN6N^>=t)Mf)mE+mnrox;WNk?b=6aJ0fhEx2L$#n>!6DLXQGLbXXp7OGoDo%A1;ZTwW?z zq-spVQ;jM0Bn$Ih{?zh*~&75w*@Y|3PmhMh?cHwWxVFHD>oRt zn+@KZaN*@9Lge9$1zp+70L^7rDh%FCgLkIEYcP0A;KHj%#Dc7dD_iNLx$H_2TzJvQ zv}i87;)e?#!-F?bbJ>;YaPg&MwlYI=*_DgnV$9jfC7R2w+-&e}H+Wm%IuvrqInH3v zg{NsQyV3yHVZvLex$MfNa19jRm6{7EwQwCSyjwMwU3n5NHNIywmtFb0!K39_`r4Jx z4cx^4zz}7b0(XkM=9u!@w1dHU z5vl-{R<0zd2SXvm$=%RPPhT<$?tae9N< zSf@(0l~2G=2Q^;GtUOHI{4xY$@Tl;Lo( zDQ76PaH;W~0~gbsp!o;T(){xABB+_iTFIGu?XvK{0;4K&x}rjF|pffmR7~NWhHd z%M5Txh?PI@%xIR=0YN${dHC3X7t2?_RL)@iR%FbOhz#8t9O?;LD3K9& zxiuaQR+SCEwRpl>D3K92;6k)ZPjeIQ^YLrW1x_~^mzs-5a9@jGv&>rDH6(C8#hres zp*G?6A^g-(06!f;|IyH;XqDinBgr|^%o#<_0E2Us3G|UQvl;Z3a?Mv4gkYB?GJvmb zhJeI?iBNiX*6`B1xAM~v^An9#Tql0ZI?R`t}j4PZqOSQQFN zi$iWq!ILqR2==?_T}(b>y8?rgSNAQ$i)mLS_KDOFJG~(@9=?198b|crP*HepqypdARfgvQ1i}!G zW2RAEh|lh(z z2~U&6{mYyeR}G@&N0BXa`$JBeX5TJa?A@=mLa=({obhRU6Ei(H-@^O*m>`PNGJ`e_~EznVA zGa2<_=Q7Ob^~v#=YK~M8wI$g03kiB-0f)I_^B;Vm zVD@SK1}=c2xNyv|{p03G2T%3gw*AtBzq@8|_9>WCaoLw+8}-cU#Y2XkH~E$FQ3oqs zZ^eGYUxaV{s_Z-Pzs8Sead-6<_bh!PBd@vJ4s8M{pAxN=y?LC+49(GA__Q53@gSx4 z*!H}Z*WY~9Mzui#fq;gLH6N#n*-DP)(k7SGgX!WjOSLe=Wn+f1?EJM`of&M(gX(Ny zGX!-7U0u?}Z3y+s(|ox>mB`@+R5QmsUstzKQ2AxquS==4K)a<3ti_ltEy&hK3)V-t zRfi?q#83>AWw8em!Rtzz@(_a>MKLSSgG0W}ZH=}|j5ZdDtD(_>U=4K4F4^4}GHUqn zk+NRm8YoNFK%TLHEzt7R(i*6Y4cC0Num;Ni9mX5Ttvo^%ohKF47w)6tL%j#lNkHJc~)IT9CDtk)|Ncfw$wgLX3F6$8p(Yeld4_Exk@luhY`&wC1j& z{5NM2L+drC=)ES-L0Wp!J-=%E9=-7Z{Pb&M2X(yU7$+A7F}@PySjP2TJ_fO53mFVU znNLAEcULc<#QU`oz&xo)28-9lLB*^bwLU>%8@0Br;<2E|L*hBDAapwmDv1)T|c8E6$KUd=Wz*H?iy zfc_B_VU(*uuLZ@g;dapLKpz6V9&{P#ji7%6{WIvxptpj419}_ikDzyea*=f>XlKxS zLHmN<2YMLj1E5ENJ_tGt6fejcP6Ay5dMYT^RSh#h9|MhoJ`Oq`^jXjapm=t}BGBhR z{|Nd#C?*feD$qMXSA*UU`gc&i%6$p+c~GRa;T_OdKtBY14fJc!*FkBU^9|4r(EB@} z9?%a#uLb=W^hVInKyL&60`x)9FF{v;t^<7obUo-tp#K78y@yUL78g!|emZGC5V_&H zi9EKY1^6AUbT?`cZWV^1j0eBlP#e|DRu-y}7V* zZ)>Fj8&*2JrudkK<@jadSA-w0Z;?Ny3+vqmCU`3->*qF5PObk7>HtMuXkglHpviqp zC+MA7>Pb0X$j5#v5q%s3|4~W$U>M4#|_JAv&O{XiU#Vl zD=7JUfgTFl9hBv`Hz@m;o}euI-k@$!yZ~Q09G_=05;D{kj9~lS{gR8siw$yM0mlK&0MHf&bv7ddD#P z!vAW}hnwqNX>GVh+Z$tr(-w*nFJsd#RJiU+D+8IiWpZ$04a~#?VlvR^b*`oQ$ST)r zee4BK2Y#md$abFxRzLh^aQlxS`~~$hW?)IhfsiVqUrhG;)Qw2muA!P9WQr1ZIroOw zk?H@Lh+Dcz>0NV8*%d>N88Vgnq82KO)H@`vng=2ZM~s<-fBbXgRpu-F*3#B zSj!k2(#LH#B#z8{bPElM69_iahY!%Ruk;0Ltrj7(Q!2edLVl=dw$7Gj2rZ5GtXs>G zfKm9ZM4jaYJEIM(Z)btBU7iiv9~1|g8nDfwG=L5Uy#RD1=tZF1!)yc{4~kl&q8-)->U0Mv z?QLVi)v!0H4RjySE}&yTvq6KPT|sAo_5_WC?hAS*C~O)xoC|sY=!KxL*xhg?Xdh7a z2?v8Fk8hLlxGemPo&b)X+C9g6%++A5ByqfF7|Kk*Z#5d7df8xo=|3mpyn z5c;xN##(BRtkbNWraEmJFD98{Wm=Zw$LQSn@oGRmnLg;E0gZxl^oG8mji9WL7lR%P z+5|ct6xNs#)JbIUP&{CUeMF)=QmG=wjs$UP92f6{YwYJ+8{&FSd_j)js z`*CyIJ)pU4ec@20sSDecobu_M1WZ?F_#E~*pXi65I#D(z2g$WPSsyL6?Jb%ChDxI9S(QAEXKVO&ZEeU^GZ*jaD-$+&X!3`lYz^NxOK`<5hO|_lAK+tN zmX<_KyJIx`qKa*i2x90YA{7xF&GCe*qjmEoT|PV^U-3JFo^X6tlxMLrbIDV(z%w?- z@H#y+mq)kor2`U+gF)e{Xl*s3!mdJAZXfulC$0*kHTWtYXO85=(BV*wey&K4H1Qab zg~{VT?6!2t;z&&dA4pf~C%d5Iou46UkIX@c=W0`u^auFDvHGfbYsb)-<|B*@o*b@= zB6mDBRS#_-*O8j|u%Vcr>t~VlQ&YeEVKttI;+*sJidmt$U|fLeSvS?9NvxC}d;;9w zb5(?=KgEbgtE5HYSVdi=HjZ;wJM-_0@Xs3>REN5xV`A+P;nBW+Ml5A@kx_DkI&56c=Z#<-13)Bm*i~3ds5-Q z)M3*0J{{}Iq95CKEIudx0^SD-|A%3pE$V(s_QI|I$=dqJ)iW?L@7;m%|846{!_6^o2iOReklf2QGf|9(nJkEaU{T zUFS@jQ8T$^jq`u)IqaEuN;D?B|GOTp9>;%oJyb<)eHE5>?Frb@nbciWN~H`F?Ri+D zP6(dXE=Y{FAveruV>>^%tCir+4uRfG_;iS>0}g#qs=Tg`5RfpW8N^ zd)rDx{lp=`)Z_U-hQ>l9lmX%CwE#jH5RTLeGRpA0BLquC_!J;a%7Ac8^&Ji0(@+Wn&!$@Dm9l~`7>PI;hU}8rn&6O$v8^D5ZTI9%>^_KgLjF+ zo7P1|u*g*I(_GogLz>I3^ujUoLnW32HJ4qfh3ha$%QDTCtt{7EcI9I{l)l-5h(VYA z|FQQzaDA0^|Noh&%waNPhQ)N~R;Z}#kGd(^*cijfHs;vGVug$`hHU$+!9*h)Nrr|+ z-c++zVNp@7yH!+JRI~67?|XJr_o`Xbu&}VOreWb7Cco$Fe9i|xd^SGU+q?RH@89q7 zyB<5d&biL>Tz}rzpL3n-T%R-V874|JgPiDH@v6vIHX9jySyzAN1JDEi9gTY>s_du{m9Ip$XC5~W^IM}-`97nK69KqfU?;?ilI-BHO z8thRw*n6XY#n*zpB=4bMZ-$pXJA9UJ)&zSqyj$4QTUzRKut$9k_DB^kdUcjm1$#5b zSD2;q>*Vbfda4fpb|(B4k>DdIu^$oPYb^xhZTkR!p3xrPX1O=-xyC!6^Y)y{$rpKn z{kvjDH2%rvHP7AquKS>xH$K<+E$u{63!wPsics)(wlQCLnp6!&GhE8dzVia zt@G1+mubS0FnnefFBr!H=3IY2%rMwxtybO(lEyn<@RHxJm%_~(U-;gyPg&ob_gwQm zivPwS(SD3G?p-$954G|3*-;65K-aB#;d{S2{YKK=e3!0U7rE}4$xGamYjTGO}58)qA@d3n!_hhC7+7v#f*ekEQ$yZOv} znm4|bedC$$obk|~bpE~J^NqKk>(wSc4NlXf#&0aok6INB|yr0M!zD<6|0u2oN z^!i(;2UU!ypBS1IeC((3Fe~in3NP|%&udR^n))pK78pq>R6G^BF>Zg8ir2f0lhhSr-ZATH0FUoiBN{rwnZ;MUCHE7fBRZ`B87)PcT2e8iNE&-_7?klne1KV@6BiL zN`LQ4_7?ejT9~GXiqpN7?C~@~jBDA`An|msh&>HIPxo$SPlMCby|=J;t-rUKJq=Dy z_bS;7r(ipK;S{`$y>JR{V=tV7diKI8V3Ajlg1gxZr{I3}!YTL`d%7pg@*ZQ4ry}+q zXYWjZj~C_s0^?a8uLc9|686H}RqTbiT=p2{a_tL@tFrvP+gUvn-uo(h;c|P1J-v{h z<(iF?5W&mdC#&Jj_q&kg=4!q(eoDiXY<%w;P2hY zUYILmFU);}y(|2)pP%rf+GP8FpJgx1aX86cz!8xJj(Y(|8aV#%{nnexcd|S2=gm17 z^rlHr^p9#OO1^}3Zg76~-M>&1!ObhmUwHM^s$HD-x9Bg#$tnrc^dsBr*!#(U{!)!H za5^VrS=5oz7u@Dbb`;rC-@vW!RPr& zKGEMGqY6iTgDi}ZDBo#pASWj5r!N|YT_mR~PVmuE*vX83BolGraP)JTuv0kEKSq`% zruy<73x$2>GydM^PYfscf*uWH%5XHylJgmVuWwQ~^7&c1^nKmJ^se@p*U>b1y#6P4f9LKIycRiP$^v$(iKSh0iUMe13pW!z7=_ z@d>*~nuqZD@+4*iAN>d76LFo2$)B6#GaH|owBRrk{TTu<>c+N6G~;?DSFm{CWIqMO z`-HF61zx;SuH7BFBlZnz^c9?&I9=n-^M5ZmkN#)k`*th#?AUP!OJ*XA$0C_e z^;vm++CaTPn2LCNr4v6)D?RZyS*1}wmkG*e(SrF`PUN*B_}RwzE9mgAD^`E72j(y1;G1mkU`=a|qB3w;k76U}EB0h6aUhA*eXU#xlO;-5#XBos#<4wv(A^q@fgx=GG`D$M9u4vsH}O#Z@%9yE^qDu$am|D@b;BbV@N zTX?BPF4M>@HF8BpuF}ZW8@U!E*KXvxjND-(*Kg#8ja(v2x1(M7i!>+JzceG4W#n>= zT(Oa>HgbE7T&t1mFml~SuFuE~7`YK6m&DTjXg5_om}BG?8M%BTS7PKsMy}Dw?K5%* zjNBn3cf`mI8o5y;m;4)BJ(z3c78|(&BUftVYK&Zyk=t+N4jQ>0BX`uu4H>yHBbV}9 zTRq4ya@j_%(8!e=xjG})Y~GV0Q8V^YZmRo!nvu&ga=AvX*vM5IxxGfN)yQ=ixo#uZXXFNq z+=!7&;-`(#ZmN1P$H*-*a`{HC#K?t=T%(cOXXFkTxkE;sKa-&8r`S-SZFxSW} zHgW|L)GIC=^E`^^sN4u%|gA5~=ZR84#T)B~}Gjh#F zuFc4G8o6F0cg)BgH*yL5bUoTlRlcc4F4M>@HF8BpuF}ZW8@U!E*KXvxjND-(*Kg#8 zja=d%Z1o_`$YmM1Tq9R(-@OZq&#nAGg(mxkhfWkt;BArADsC$Tb@HF8BpuF}ZW8@U!E*KXvxjND-(*Kg#8ja=fNZ1o_`$YmM1Tq9R(p_Be%%N=U;ldjQjs^|SVMsAUj z%Qtc*MlNLJ8jajOBX_{a9Wru9jNG7+8#Qvte9|}CO;r!(8o9+ruE5BZ8o3%H*JR}O z8@YoWg5AqMy|-nRT{Z^BiCZ&+KpV7kvnYU`i|phm712BR6Q| zMvYwZ%eHzj*T^k4as@`N)X3Esxh5mG-^d*_ay>@wsF52oa$`m=MPE9Ia#KAAWEi<@ zBUfnT%8gu|k!v<`ZAPxs$n_ezV@B?{kxK|Zxe+PismeFi$YmP2rADsE$WYij+Q{uSa;-+L!^m|TxjrK| zVB|)OToV6*(Z+>ntQGjb`X+Uh}uk;^u6g+{L2$kiFS zW+T^T1 zC7y1p2Wdtw%gE&#xnd(%ZRGYExmF|BVdT1vT%VB}FmfYCE-BGg59S!TMMf^)$dwqm zkdbRNa{G+j0V8+F$Q?0qgGO%D$R$s=)q}Z4Zn2RoFmk0vuExkU8M*yN?x2zDF>*(Z z+>ntQGjb{Xm$uPvs^@?VBbROD3XNR3k*hOu%|@=x$aNaIUL$wR$Q?Iw3H(>Z(Qc~p zO*L|vMsBH*D>8DGMy}q-wHUc}BiCi*4jZ|CBR6d15|eE8AkD~S8M#~|S8U{}joe-% z*J|WCj9j;o>oal#MsCE&B~5(C+V2*o>JR1^xkW}U-^i61xsZ`-G;;fl+yNtZ$jBWr za)U;0)W{{j%GMvuHFArMT!E1*HF7mZuF1&lH*yD!T#u1EYUGBD+?bI|Im=cLGK^fd zkt;NEWg5AqMy|-nRT{Z^BiCZ&+KpV7 zkvnYU`i8o5>@*J0$kja;9R8!&PsMlR`WTRoU# z@wsF52oa$`m=CB;?`GK^fdkt;NEYvhWJ zT(yzgYvfvuT!)eCHgbJNZotTm7`dd^*y_O?Be%%Nrg=My}b&wHdiiBiC!>jv2Y*MlRvCw(?Cia+yYMsgWx(a+OA|-pI8W zxppJhW#kSUxqc%zY~&JOXR8NkMlQ?9-@OZq&#n&$iWrxkhfWkt;BArADsC z$Tb+3G=>k;^i2xkj$o$W=Try{#V1 zF>;HHT)vSjF>)az*J$MS8My;S?vRl?V&n#m+^CUDeuJ$Z%r$b0ja-3|D>ZU8My|=o z?Kg4;sK za-&8rIn!1T=AMk(TvHRZWXwyCJ_z<3y!j7bUR!Z{ZPd93KH_maMds!4o>yH8)n$S&4){TIl)`ZCO4H`#1+8Q z8@LvjLk>>qI|7q57C&Bbb6|=coa|f;)8^n*zMU|~9h~A#@J{uz+2p3Oi^3~}X*O_e zFvlF+^@MjEX7RN6@veX?fN61XN?$unzk^e}!!X&WxZ^E^X?1XZyM#IB;FP}OFqsMQ z;}y3QrryD++*)9I9h~a(F_@%N*lb!oul1`5wuedodB@RyUhG5zqob22MbKJoxyo5yB2bxY>$J$}3^;1nTjejQHtOc-b%^1J?-C<=}D%?=VbKQv7)RdJ0qG;AFoLOoxM0yxlOP1}^!` zQ@uhqxp?)o9A>|PI|wuA;AH1fn55_7tEl8Q~E|>7QNb?zI>Q^2dDJ4z#MXL z8s8s*8FO$-UrNfUUICljROPmUbEPot2CfTc)WNA=OP)o%Y;se@E3On~zk^fx9)uZi zaI)VBOvX9!<5hUsFd+vg`!&LJ8@N80#MijvO@k>kaOE)j9Gud30A|3zjlg83y3>~n zQ|I7vh_@N$u!B?j`e9PfjUTVLOqg;9r{{n=m_rUu;T?fVdaXO&IWWZzPW7}Jro+Lh z{&m9)Ik+6SF_@*Vi=RGmMKG-ft^;P!!O1S8FpJXS$E*D2!!$ZLg|`o;&%vp^4Zx(% zjvuezkHeHYIKLle4aaf1u%OZoYL0{)8pV|zoRh8=f{s%++3Iv z2d8|5U=BDqwWC8YiF4w|tNTnEOum6DfoXDZD&PGueGX3P8-U47kDor-c_~cD!6_e& zFb5r+?AHS`=HL`>$_0#v*yN_Vzlke`X>xEX-~BL09GvVj2$OZ8JKkKF8V8p{cug?9 z4o-GC29r8Be!Su`VJaP*@=*`d>i(wiaobs^`rq{tK-eWK+7rEojfGIL?l`yRiPVsiY^c%Qgn9Pga>01g@?ch|O z_ri2KIN7fkX2iky<#q|>#wHiH++Z3VoYJ=s=CFfP`ubs#GvmiAZZ1rbgHwB}glTth z3a<-h(7=ttWL_FSeai1rm>L7u1k>%{R33dWiI>HXSNTnYDRyv5Uo}jdf$M}Bba1lY zC`{(%@zXaCZYfN;gH!tIU=A3#LomYzE-{Pu25fRu)o10S5N5A~Q-9S8bI8Fdydy9P z^WE{L!sI(R*`)-g#lW@095rx5Fmo2fPoLsl1XJnYl;3)o0}f8%9fBEla0)MRA>(m2 zxv9!c;T6E_HE^vky$0?WO!6XkymMiS9h~w}4YS|DshuB$8FX+8Zxkl;3U~UJ!qhl8 zh1UerW#A6Oj5;{wBl$||Gn?F0<)(N`V45AA`n5KgV-8N?9fz57Rs4AU`V3R);1q8? zOqYQ>43oIn9d8;;p@A!h+2`P7=L0YU4o>+UfyrFrPTx|P8V9F%n_vzZxFax0SI3W6 z;mv_5c5uo^HB6g>Q$6T}88C1oFd5gxPoKiehN*UNsxNzCx*eRt>w_6Ha4Ff0!`S4e zYDcn5F-)_8YlAuB;FP{WnAB_I$D0F}2~%z0_QD);aI)VKnB?o?$E*4>7pBC)DZCKO z0SBl29)daU;1piM8+p!SlbfnMl)fUEW(TKoYlAsr;09sRmd1});bp;;8@M`{0}f94 zI0Q4|;AEGi9Qu1Uxp;OdfoU~x9Web4E{C{=VHPcmAFtAv57TJi_Q4!+aEf;jCS!U0 zcvT+RFd+vgJ2%2~8@N80#N7DtDt&1%B@S){TnMJq!O4ETFbON-$E)yCVM-jF#?K*` z{SHp{I|wu2;FP`*m_>Q<(*L3(em4`Q#K9@v5KM=IQ+VAlLk>>q z8-vMS6+eCA3SpWJTpP?W19u!I^9FakOJV9AoL?R=y$;SV517<~`0=V9WWtm>xE#0| zm`(?$czazN5`ACH+bZ`o<9Hz~|XU{xBtAkT`9WVn1ZUkmgkvraem=*_@L%i)U0}f947=c;3A%48;;EG_{9o%ZTE|`Rk z@xxmImkLwj;1pg6rrW{g!1ci--xNPyadTnH4O|^emxEJ24#OlD$B$R_U@lClgH!ry zU^)$4FHGXi@#9r^X)q-YPW2!J)8*ilkHavDZ;BtU+GQF{k%N={Dq#*7xI-`rZ;l_Y z(w7QTxLOMaLFa~S8Q@q-QRLJR}Rze;8Y%6Fk=o*_Dk8sd=8u3RPm}E zRl{^SIKO;h65kR(JaK6-#STvOpcm5 z!}L2ig*Ob7Q5rv9kcq0ua-@ui?G&wkpoA$#Tc5sTf zA10|Re)<&N9GF4}=ikp^_B%L*cMzuE!6|*iFmpD?PoKC&Fr^Mog5Ma#Pi3*`)xc(ZMMn`(Sz;obquLCTUCjc>QvNDRgj(w;ZO$!703Um?H*m5GJ)E ze)?pWOqg;9mjhP^(`Dce!z68uAFslj15@hY{Q3gZ;oxMyZkRy>Hwu$c89#jrFB_)P z!6|+9Fb5snMQ}YZLk>>ijlnG17C(Ke2l+5{4o=}U!yIyO3hxL^LRI{Dm5)@Ir4CN< z7Qr+bxcxAF25tZ*_15_5Q@oilr3S7Bro+LheRRVN8@R-3?7}8DRX?QrWf4q^gHt}* zVU9XDg*OC~vE3bSHcXv^Q$1*g>2`2RUmr}uj`;B^yi}Nc2dD5#U|JlU+GRUTpMz7m z4Zx)BjGsQ)FAJvH!0m4zOk#~Y-ZYp32d8*TVVWJBU$0>L9Gt=%fJv@(r*AGyk%Los zl`yRiPU-7_IqKjP-VjXcp7`lgeaVC=b#Mx=2ByuyDSe$V0|sscCgZmF=~H;wFx3uD z`Pd87>EIMzFU*L8Q+P>r)O$9$sp`GBBA6xzr+D|n9CmQ(pZj6bZgUn2d8}W!=%359d9N~iGd5jv^hA%+X*vd z;KpDU*SphK08{VaWak!`9s_q2Cg~mV<5fQ9z!W<;wexD2eGX3H9e^2daHwy_|aI$maJ9*#8CO1`m7FP(UiCnBxvk`AB#d<7YOxsmddVb0skQ9h}PT zAk2V+Q$9vuvhIo>ufofPsdI1&uNkJt!O6}?VNx37$D0F}0aIz<>S4MaoYL0^llboV z@rp}>DROYiM~(OeSFJF; z4o>yp7)(;LJKi}kB@RyUhG5zaTo=rcgY(-Z%;Njvr%zk~OrwF@2h-=^l#c2Po=k8YSD12+bf^?rBya$)KmoZ@YU>2`3+Zy!uTOZ<3M9;q;e4o>yH z9Hz~|<-m2q3>&z_572M0$xYRMmA(>~RtKl_b-)ZbIE6O?lXbs4-dvb^2PZqX!1Opc zmD^F6#D9q&Zw_1wOle#Z{yy7xpDjl5iTMyG|;Cf-k9Gv1!d4T?kO>U}sn!~wr zn05o#1vBE{WWS`35HFkDRPic(;Qn9NVaPoM0!6eeWg8euveoZ{_;88&c< zZM^?rlbgzZ3NIg~#=tefbQ-u`m|+L!*S`lTUp80z3SjCCTr*6UfjbN{;^0)Tl0J$3 z*y5#6Ts}<5!KwW=!gM(}+2t_IsDo3vC4Y+fH8#1a%2(kP!t6D0tuQ?fPWe3wGiKmY z+DRXq+*IjPJ_=##4O|OMw}Vsq`d~&JoZ?OTH1&^7ZmRUjeg!b~4o=~IylvX4wxejPT>v0 zq<%hr`V?L!OtFK@fvbi&;NXP}w##fay1I!!Vg&il099FH2$S9h}nF0@LN-{C*N<)W9Vl zq+YSfO;xWHUJ*>Af!hbu>)>R+V=yUSjvue`n*mek;8YLFVOkuV!fS^)Y~cD~62B5Z zee(z}4Q8o>Q@lkm^#-m5rpv+k{RYgKgHyaIUuB%bCO1|2Dj$U~H4aYkHoV06DIdi!dmWtOZH4J^aLUI~n53`8k5}z-4or!IQ+Oemb_b_=+66OU z;6`BPem#Erl;6cLl@3nv*28o-IN7-yX28KIyb+kW--w?+g|`@{)WInqH8AZCPT_UI z^gB4EZy07ySN!yeTLe?;;QaK#v^zM3*99|R;6`BPJ`_KFe)+;w8n}9x0}f90^bpLj zgHt{dzsd6@o7`0GavtaMVX7UR!rKdTz`z}X88UEVFqz+qpFY)>r7)ESt{$e{!TIG2 zGvMGGLJ*(K>=#xHDgQ?+w(MKDbc&VR0eIpW|{zJoAxzZXAVaf@MU9Gv29 zf;r^il#e4YiQkVOufj`%DKc=CFl`2|6K2T3jlnGLai^~UrqRL4e*0jKI5@T6L71#Z z-0|kZ)H^uYxdo=jz#WB2`nUM;D!e%`MFy@CX1{||`5uHBba0Ay6ejBj?)2rt)ET&D zm_r8c2uxyc{CIOnUm8q_feXPLG;lpI36I8)cLnjL!jw2Tr7r|?(7~zx^}rwY;XineVw0PypHz5-Fnb-G^3e*@=in6Y08HB9`0azILzE1#*bIrVwh?J zw-=_tER9rm~B;5||bP*A8>kzzxC7>2t@s2&U4&)x#V#a6K?1 z4o>wx=||XwO)jooU|I}ZJIqlBr+PmGllJ5I@hW{;Fx3uD<+c~5)4=t@j5;{gtK|Q} zE^KmB*+uCqf!XKa6y5=t0SBjijKE|bi65`Hr7$%Ht_h~w!6_eoFiAg&AFs-74osng zQ~Jtb_8GVXF#QH@7$)PV?(}8DR2#UxFb54>56rNG^PkUu#`8Iw+*I{N^&lT+uYqfY zIqcw69{n)MN8`t<@|X)#?BMiVTMg6d;1q8M%uxrYdNl--@p%07$u8M2H4aYsXoBf> za7tev%$S2y`ci&QeP)xJs@%kt!?Za#rLPla(7`EvqcEAjaL2n8rryA{z#MjPN?$)r z%CY$Iipzj0ad5Ir2)z-Vf8`;1ussn4~A& z@y>xMG;rlGtqxB1>wp1%@Na&WTWVVDsIr|^<~#dw@eZmRmMaw~*s zbZ`o9A55=vhRZyHRYfh&jE=in6Y0hpr(ZU`oIAb$E3UM5VjgOmNLVcHB_ zC(NLOQ@o=v8BfPgpUNW}rrN;mg*j;8dSHefocfK#-_TF8$xT(S^c-Id(`Mj0VMZOC z?40~t;$@SYDqgkAVwe^OC;PR-9C2{U?;ya7y0*Ov>-$$E$Xf z0aN7Q6ka9FJ_C0E=9q(1yvJeEhT^AB_RE4PcW^4-I+%k7t_Nn+!70DV&oa-?CKs>1 z6u~qZxcxAF4o>+PfJys9{CLG>!Bjdp*{>evpo3F*JussV&bP}Su?w5rRCZB#MKH|{ zE(fj+rr*ISAHy&i$K%Hm`(?$dfE#!?BEn$;&Z%*V3UhymjakZ2dD7% z!Sp&frSBL_;`8z2&4EjUDRFR$Hw4q>;AH1cm_Y+K3X}Dx_~}!4xiEDGt{LW#gHt|^ zz$6UEk5~7tRG1Fa_Bl9(cK~M4!70C^Fj+6ePoLt=g{g6Hss~Llod&KKX4t{` zV_G1aK2qe zunU{qRCZDNieZ`^oYL0@(`VoYU{YRm$D09D;@}i-2&T=!$u6BRLk>>)9fMi)-|qC~ z!_+%C#oGeYYv7K-r2N$#Zw5?>gY)eI)8^om-%gl812+njHR?`ZE=-++Q~H`=x*eR- z*9VjEQv7%oUMft!fh&P&c5v#4+F%YlIHj*2CgpGL^ku*l8@Oti{SGdNcn`uHcW_Ey z!pq#x+2p2b=gMyZOr3-C%MGU6!TIF|lQ8CvHx(w=z!k$ZIyj|oA55=<^T!)7iQZ{4 z%anFe`%Qx>a&XFTCCq*Yr+5#-9CL8W$8nfB)8eO3+#;BA2dDnN4yMz=DZjliV-8O7 zrkrw`m&+zMRlQQY#W1Y~t^;Pk!6|(sFj)!l<5hX&!qho9h1U$z~3^Su65ZF59?z!|GMbueor~o~kXEZ?D>Xp~;&|a@TBF5d#;lUa@xB zn!KV5)72+G&-N!0cZ)aeY{i^=&8Cet6}xLT6>Tf4+qr2)MNM^WXxFA)q20A*d$v@C zHf`QhwSCKFbyYhTEu8Qzt*I@mtt!8KOVw^J*}SK6)2^~on9{nknzCJ0mxngr>Rsbq zd$yO(bEP+vc+x&TZCuw>mG2JKgtpeEU$p+>^uk@WRXeKQUbV9_JvX#tSJn24-QN1s zt~=W+uiNs9lIN9g7r$%PVfL@XB{=@h&S*zigG$GBvx)H-&08k!|P;oiVSd+Femzdvkix zih}fuZrHQ4B7Ncf1@kZ7v}$Mh_B~rFF0@2h6=p4{Qdb_@u_L6^Ir9=#%ITNAxhnm# zouTca%24`c#f#W(zAXK+!Yyo@=kw>a~KfxxfZbYZx1V%rs^8`rMNEnK0H$M^Dgkd^ftau=juwq^tQQ|McFU9*dVs;a5L z5arj@m2WHCU0Un!Zw>7(Di7`A#LCbsv1q(@Ls(m0QCO;~#eQoH8eXKOUcPI~X0kvw zHsq#XR<^Tj`yFquAb%CRcZYWGu2736XS6V7X2*j0^C`=JOtp2_{gb!4pf;=K|4)M` ztKGh1Yx$;E6cP=vMkd@6s;k*_+v3aTFZ%~xf3ru!b9Y;6o!dh6qPwa#h5O8y9<8(PM4oiNZfd@pwyvz$zw4E*+F4awRkpqA z?G=9h6@0`+qT!hQzsfr^+Nl2@I863Vi{!}fZ@gCrMf?%$q>8?5SCyBF-IVyz=w{5p~4#YDY=DdcY$=kVQU8rhjZH-@%o(if? zmG?TJ7dU#5IJZ>XR#jfHYUkF_vfaDO?(kAL_af(3DuAHC2sI&+YVS!R%ALj^&kyHu z*qdRuRBSCHJ?kq-=x#lp`$N*g3Ho1 zA`Qp%@Z^|s%XZc7iH)fq_Fdsi6w}v?F`bX~>QtjW#$HKhf04^BWM6}~3g4uk!)LO! zCZ+UzG8eqDRkROI5p8tl8cF32HDJ%1#U&r)lK0BwjLLRZ?5@3IQus%qdcv>@_&(rW zBsW}kYs+?2_{qKMBP;mU6;Q0RF_@&_Zkm z_#O<7vx4KX;P{?^ub2_G-3oU4*uxSD&=rQ!I=wHxM^bG3v zEvP!%3N!=Vif%+J(Gs)@-GOdL_o5+GJ?-1jd(hqJXVE?AL+EYjf1z}%4ZlHeM_)qk zL@%MeG@#d_ccHhSccZ(}CbSj32kk`fMUSG*=pg!j^eoy}3rg8~_oM0Pzo4&2_o4ad z11PrgK8j)!Z$FAHyicH{!Fv#WH~LBR1L&vFkD%=+``+i!Bj^ECUHd^)FZI8SUQYY$ zM03!uq1(`}qxEPPdJz34dI;@Chtcn#3AEGip(W@esQUjOqF+IOgsO}G8TvEyDEbom z3-m1N_A&Ha^a*q!`Xssp?MIiQPoXQ&U!ymmEShR4MW05?Q1Z}FkFt2D;oayUs@uUI z(SJpcqeoC)rZ)Tr9Y(LB-Sd*JL3e^tv=n7Bzu|6_$>D~5D3dr1-$0Yl$I!D--3Vr( ze?`whb7}vtL06&YqK)WlQQZL2(eI#h(IonTH=yUCm!NM$FGCyAg=i;w1^P|&YV;>) zHhK)b7JUj`hW;L1j=q5Aq8BsxU4fRP`Di10J=%$`LI=>*=ribAbUK5tLUakb4&8

QLqNj7RhIRO}Da74k{kiNo}$G48z8YZqSa#ds`<^;jJ1aaF9x zm9ZXVV`3z&SQf>4ER6M75bH5N#$!QjN*BbYbU|!N7sRG?L2ODF#HMsXY)TizrgTAU zN*B!MHa`B`KyI&&IbITTyg26gDvrZXk}5==9LRb25u=p4vUShSa^FMs#`j=G(DzWq z(6h$&s-0mEJ${O)t++irrt|N`>$s0Zoa&M8#Tj_42>g>y@fsA=nP?jNDpdExWV9Qd ziT0vrqesvbv>%;?4x#6uBj{_;1j1xI*N}{!i>9HkMKjRXp^MNobSXL;EkMshi_!DZ za&!(FLb=~H)T0-mP3VQF?xAzhkD&8V-AiAO>K^(A^lK>h#|Di#FG7ESUX1pkm!OZM zndq<3%h2DWm!rdI7OJu7Li9B3bR~*Syd@}U^R7loi+2qg+qTal|8kL5sJ6}RaJ+5b z%088GQrp%wV(5OnTPND~&a#~$rnNSNiYm%OJGa#MtsCTIj@BKiIw_prU9r_4%7^D2 z=0{zjxK!?nZ(iVk2l>$Pov70A&XeTpGuT7@Q^b9k`Gqs_iS$`LoXCpFm#$HGAC@f{ zBZl3yqKeu*yO!Owe!~f~Dp3*m8M^vxWk&A&bHYR9<>5o`^}+G(nBz~y9RE1xcp6EO zi(G$s)Uk%Feml86%=mwm2iZ&c*dF-5CLwI6RP^=uor_+Mz81X_O+&Y!v(XQt=b?|F zJdZRCqjS)7!c9llpc$xabP*a`pO(T$ndO8ztxcS#`sGEUT~*}UZr%FA+`OV9UZ#iV_;h~j&fp5>1j;LFYG{d9pRM{JcS-PU6q)0T zRJ^x_PkZx&^O3rx03&w4C1517f$Yu@%-bLj+!fea_PGX4N0*_i(Ogu|NGs5r(3Pm3 ziSp5RqN~t%p*Nth^-cZmY|cg8b#v%%qsmG3mAmVt`lf3xkRw*}Wk&yCC>f~+v{8VctoZdQKbBmdKte>({aWMBx8s%1RNw1(gX( z(W}r~(Cg4LbOpK@EkG;LI&>R)Ct8KR8?8oL(VgfQ&=9J=iD$ZoAEGtrFVQ{di|C!` zU(vnjS)}VO^gOf?RdL*nsuO(=Iv>3Uy$*dZs(br==vwpxsOrc4Xl$KZj=%cXNI&;c z>fG$8d&|!_7kh8fHL6M)N3@Uk0@F5B?A}qeQ`3Q(u~(oG7YUqWdWXn#?gLyJnaBS zSJe8?8tN@|ZH+F{r1R4OzzaxTedtcA{&&)QiKu?=K`xCr*(tWJGZ)h!8~z)rviSk3 zGVMjLMIS|1qKDCq=woOJ`a|><^hc=ry&t3M_x=mL3;ikj0rY3+KJ;<)tLV?sC(vVP zKl%h3TNf0LOrx@wQ(aK?jnoCTYMuor-4k_<80p)z-CX(CyRc8Bmr|d%O9@c1sQs*qN`ca=GU1=MBJgLPtU+1mL^ZDY zI;yty4OC_F5SoL23(ZBl(O4V)4FB0|(KbvEj@6z9*{+RgPr4?ZO}ai_ds-jjL0INg z3@34~)SOc^qj*h2=2p`XGtm;%Hco5_viYv4WGa8MxyI020{^G5VLJQ2L3O|XEqWz7 zh|1=_M|F1@LN(-g7JVyv9NmsSht{C1jcT|LWp49?GFgqk%HvEnIn`^WL4GQeF1FY{ zPS=RJo^8X)%VZ_1l`3l1RqR$pU%qGSR$ep4e}6uypDL=|T~W5fe}}4sF;VU9T(xu8 zp4#y)%J(YVQ!BsmSFKdgn(&q5_l0d-9&t*yY&-+q6nKtc6XoSaRE_t)QPuOmqUWP8 zq4Utcp$pM5bO}nc@%x}tP}za`;uCE9*Heg(bF;+bveGrzGVwnC!<>&DN9&plSn1cs zdxmMNYJzTh&n_)`sR%!|De#C>(+^zJDP-{)zvaJ%1|CzB|DMB0Aw>_F^oCl6)In;i zR7UH{RQR=w-Tg--WkTmdeqlwO)ay~1W*J*e*^XV?E7oh!rdFi)-)cqSPD_Jr4Xq}> zb<|x(t!+}(mQiMF=~uD7fwvn$>>K6k9(40$Ej-Rg|ZIIcGlEU zjkUDni+IW4yv0}IKF#6vs(h@gs#p`+63)ce@STHiUD<8i6jdXmBhjRoUJBt9$@UW? z(W~jGNVc6clG+m@(Gcl3ez=UpUlSg4-V~0=TS;V#^m$b8+5UpwgN~s0qyLS5 z3jHhkMf7jzDEcxwO%|9=_~V4XDls4uiq4%O^qOte7^G^4? zcMx{uZuI{2$!-6~2`A10>KfTo`awz}?DP!n507hVqXvr#JL3M2H2uG)+lYUy8nUvW z=Dp*NU`>HK2lXn;*rGZIbwIQ5QioEyOC3#(-vZCYZ*mJ%s51WR2$j}e>^DNSv~)bx zoWorJi=V=S)kP^m``r>4dretw`8L08Muxvp9f10nplvG5M>zZ|NeWUF-OjJ1pgvD@ zxJXx#@oJ*lvw3T2B}<|G0ro>&uY_u<{#?TQHpdrm#pbG7-9(H0-tmMkgt;GYAY2d5 zW!~gp#;eToikjLDA?EmMYPqo|o&7O_Qk1M6`_c6mAhSB zu8u5xW>OfMOC2B_oYMW=%V9f&ODsB!b0c9)WF@voe33xL$P!LdG7m(;+O>5@Z6qk& z93JL`pB$a=jiQj$tu^@RaTFGgeSLXDx`|Z$6J|T=yqb0w1AQI(b~N_BaUbOb>Tk#i zKct;3C~I9BHlQ77ti8F`pW~t9^Ihy5&wEsFW9+SK-T*CanXvbovg!)mX2SMf$+C2R zup547H!lc3M(#Rccs|*d|C6`J(PeREjP2cJr5;ws*6k=fa@8&1Onh|D9lybaCyJKg z9d&osO(Cms8m&e5ptqrS zqqn2Y=pCr~+P9^Uqj#cDqI=Po(FRmw(?(SDfp?=XyyVnI(oywO8mDW{ zpY<4ed>(hYCY_^yK_@-OhM&2@E#oE@mWQ8YBg5qJ>%%)VkN*>ooYCVoO|*P79J?MS zRXv~85uJ~+CamE`^lnu1o=s>4+Kg(x=RWjK^aH5s^!;cH`a$$_=!ej+qQvK~>0oVH z!y_Dj9QEG~pwDpJjvhxpi>gk10Zkxn2hdlc2T_eDzKqUBJ5ddHzlLf&(S_!r-$eEP z=iBHu^t)&X{XSZQ{u`=#@&h!s?%hDo^AK@g#3uKLbe@l*=1?BwzRlvGNp(-xP({7P z=vN{gyEmNbx`AK!uJx1pvGTbub9+Fo@^3C zO-JX#^}(=qURGJ-zv7gc z4iZn;KeufA_RVGG)&7k9rJT}BfIa*)az$Bfng3{`>a8b(;1>#-9)1k3@t0Vd>`+~n zftc(_=kQSuCnZZ$eB&{Rcp@P5Qf-xHgrdhG*gkrel(V_vTS6|Y5%eM?{5C-`gxj3| zzz{t7>S0ZDLpmEYt?1J-rXI!CQXMw?laBsmjIPoHn=%@{YEqQCzv-@3JAT)qW%HPU z*C?jkx@Y_L6?>SSy4||~@5k|0^vYbJKczJ(cY5s9z3zlrsh{9^vW`T(#gBq>L6-a} zO#jXq-NQUZq`Jf4l%a>XMmMgQ+Ch?h8-Dxbr&sOtd!OiV^>&Yym~whR{c`k${#zkE zjD0Qe4O=xlyX%Lf$E*R}2ynR=P{$XaF>xH}>mCfp;Ga11(3NN4KJ^mGicttcmlg&^&ZI zT8QpMZ$?9C8M+I-6=mIQ!@JPk=$FtvXg7Kr`WSi#%5T2Bdi1yGUUUS#3q6CrkM*_< ztUdCY(Cg59P}X*M_o6qU??rD$o6)zT_o2N1_uhx@K;MtP6Kz48(GQ^SL+?kmw)rZxnqCI)*Y{&;wz^`_XCWe)JTS`@5Hba$omO zMY(T#r=ed(Pe*&uMD$1Kbo9T_GtkG;8K~BpzY2XGJqu-i)JsNZpl74!p|3`>&{=3U zdJdY8z6O00nu=DS=c09J8u}h|HhLd=KKdne4%&&%MSqHBpua^~AKvh1^b&L${mkX) zm1q{4jV?fMLKmX9ql?fx(W}tC=o0ij=+$T|x(sbYbI}9nD)cB?fc`hS8hsgEkDkhl zqYdcUXfb*z`X=;pv;@sY--_OZZbo;a??7n_-n&rhx_1})1+)>RPJ8c0wO0OalsfF) zgZ>)57o|>k&FG)ekD)m{^nM&&iMF9-=!581^t0$U(F5q2^siq+&q2S8o`-$~y%7C6 zdJ*~!^a}JLRO2MBJz?y{!o_R=+C8k+wy1KbZ{DD=V&KzN}KLGH0SYkAv_y3D7`r- z#q2FZ&q8xiVU_vZ>?e*{uiS%7QW9KX8de%&b<_IG=_3|A4jq?%9>evpWm?mx(IRMzUYE)35s~tuD%U^1R2R zKoKWUdwa4On4otXP>3$_2_bRGr9uZiRPiVqxq=b#a)kn5WNBYF1i~1 zH)wAH6(OD?Jm-5&7Z$dBR_${c$SDR6-Co4x| z+tZsE&sDQ$eq7W8g@TWIpwRQ2o*dK+V@B-$bC@0(qMpMdpAS$d zJa*~TiXLEe^^UUJ!_R^K*j!6g^|-Z+GvTp$>2|Wev-}Q!B>oM&<$jm)pXl5#h4 z9PT9554`C6h5yK&s#~);d^Yg^*csuv#cxIZH4&dg=W^~-sHRIkgRVh8ix#1uLzUFe zqpD-vSN%D)FQE@`{0;Q`Xczh@`b|`I>09V&q_7*EfgVC%gZ7}BLwf{Wjs5_wM0?SD z(MQo{^oOYC(teEgpg%$Xh;lz~_$zu0eHraXr;*R6(Ac`DHX^G>>Z1CwS;4XTu?Dv5 zV(Ox<5pxUMzfaUfew9_c?54bxh3nVwA(xvsFDdwGt~ajWb}G81-${Ch2DZLL1S&98{8K;r+!`T^A}8> zd(m&JWAAgiM*WYpXTlb_tmm23Dt#*`@Q91D$luu>V_Iuem%AmzZ=)iUIclA|g887x zPpm%d`|a86w@GDNZ8H2+?$4pfqFP_am!ZN+6_#lk>s!klzlb z`IqpGn7enlDf??))bA_0aKM^@h&1e|c_GcttFQQ^66#M8L}o9dX6H2rq0UC3ZQdR# zujV^c{*;F1AmkY}rJ?DENY^snF|7`|kmzZGuW;RR8Vybs{5C;p5E5dIKC?`IZxW4b zMTy4sIHfQ$e-Mtsr_~?*mk%)N_A8_`bmW>oXLJcl(rjh3Ke=q6Ni&bOdT(9P%@(Q;J%F3)TJyzN$W2gkRf zccEC*|BYQO`Y^}0p}$6Xu4~Z3f_I^b)PuWGz2|L0RfTxY^WQmq0DTX~_oMnP;)l>* zqYt3NXd60)K8Pk^t9JBk^wX%;K70=4cP`!+(Df+KjSc+f!Q;8HVHf&!^g*->eF*&~ zs`tL%LVu5b2YnVjgwCc_e-FI^?LqmCzV`^a75y)?20e44G z%|u^9FGZ)(0$qSvB&CVwN^iY`OHf-Xm~skZ{fHeMczZM*`Mym)KTH_&nlQNr|Y zMDx-0=xUVb^M(fWW>nAOZ$jUXmY`ooH=$ogZ$bY9twLWyZ$+om0=J`=pgYhkbT?Xn z)}zehc<(@&xAESIGN0n{+~4pldKb!kir0wh_vUw_%wKq{u?nB>;K7hvFD|L^RBm2IKeOA5|-`L-L>Kdva9VB&?9xm+oZKVHG&kdpA$DjVK zGIBOXxm8Afd}SF7-Q#Z(a~cGtY54Zb6j>)?S>Dubc7LjW9Z2N-EXcf3ABE z%CDq#`MA?HVs2pj#6-UItjiN_@XQ+ju`Y6x)-ZBs_-^UH-=O#OE|lNor`(CYc0MN~ zPU(ov^M}ZzlEnHFfBduWBzacftNcahnPMN$a}E2kziZJoVlvs%^kC+@;2UDgi&yxC zs6bERC`7$YQgq7iZT@gTIn@!bNGrpW_WpcEbp8})Z2lf0KT5~Hp-RgSPLjXX_$#vL z{ApwpDbst|kIkR15pzA;3He(YQ|B33oK_99xeuVxRoyQh&&v37bSI2+K`RtfF zu4`0}q@SCp+z^^QF*Fvor~XNf&U*9 z!hObZbP0ZcLbsqVpnCS=eTP4%@)z_jjz`e@&==7Uqkl!UzWHxxFUlgvhW|uqa1B32 zcu(TbsholiaGZet9%U_B!?WmgRPU^2py#7W=c6tQO?J%3DY&Q(JnTpjrbIaZh!wQBQ1_K zl02e~q~pLyu{KgZVr}&Elh{c4e5E$hHL}rmHm8jihJW1u&$7{ySR2VB+D1B_!bZwR ztc`y0f5S$L!XG95e~XQd{SR#P@7Owa?)MedqeTn1{!<&<)v*;x9?=y^$B`Z>{7x#J zJVo5e>e3S@vC~#Ah}Ygu)^Fj1|vDC+oL$ zjclYioHqJj+;1x%u{L_@BsQvmd!;tgHL_6|o6|=Bi~DWmBi2U0I*Er*l$ss ztRCqay))5}#c89H^xGPL1@7-2B>g@2HsvGMM!!CZjWiaFwo&Xj@?`zCu2DTwIT&p8 zzq;R6USjPua1uMc8Sa(ZN!Q3uH?cYGw4`+PKlT3hibmWg-rtm$SUdgpBz7u=i)W|* z;CxQZGq|piol4l8c3N=NKiN>PWYm44os^eYI}M)1PH%yGrFPOaveTQ`oOW7x#Xs3j zucUW6(N4-steu|uzhS3E3;$ndC)Q`4@T}{qPlvJhvY2-Fis}>N?|-tPUeO3V_IdYY z^@(>wC)nxh*dd2a^FngdFVy;*Q^)5`p208ncX_&o!N2!qZ4+~Z>&iCPR&Ccz;rMId zn6G5ya6!aP9vJ9F@^nsVm~pZf$$Fiu?qL~Q&7R6ieh6H#W#V=2Nk6!t)g_Uk%Z92Q z6}xY!s%7$WO^rV_6PcBbdUGoq=CDPa@~Jj?8hSiF)Hc@vh<)PDGsYAse27ZU{Wj z#YW28>(B*g8hRZ%8@&O&5LKW422{^48K~Y(WTFk|WoWF8#mgyIajh+pOyRZol&W#QRWrd@tKE42o6 ze10z{DjKCTwjM6T21@&4RIyxxE=1pmDnConSR1_;e>F12D_2BYKZjaK0{wdUB6>|s zpQvljVXJ5R*o2M3DUSI8kLLaqe#9xJf6Y4<+2S|o9F*T``|o0&MRPg+19}5`9NmaMhw9otp_-%R-M>Gd{%2J7d=dRK zI*%>lTx$k5GRYg;SJ>AK`oCK8ht>c8l0nUu<0h62`gK5UAmUE8X7Fj=k*gUzgPxE6 z4xNks9@TrxKcH*SKcZUG@*Juv{5<-0bQo<$|AIb%vIgH@GdPAm%JDRQ=P-btf@;lR z0;)BGiKx~LCZSrpawe)ZgJ+>yGnkBO&EQN_YX;9jwPx_OsMZY5Mzv;e4yrYSb5X4s z%s{nf@FFy}F5ZW~+H<5G$MzRzaDD8z;dIS8T*LR4y+4yEn-VTu3v8qUa?g0U~LpP;84` z*M_~j*j6m;+QqW0>$;ZJwX(LgyXxwyi)|GP{@P}$J3zpEIk9>0zL~q3O)z^1AGD0UZt17_261Co&3BE4gy~R z_W@r6qu}dc3HSy$7km?}1K$FV1>XTxr|*KPa&igzQXdq^N$R}PAMndgx&KaaRQ}WX zn+(hSC#|fmw!D$+rfN!B=KA8ocP7mTq;&08>f%!HLL$?_1ZN1Wk>ei~H78glE|Rzf zxz$`9lT}_>?0>jQorXFH<7a8A+qlinA!IC6w+k#;p!}1q=4!#HW0e=KB>6Y~-KLfxaAZL-xz5m;TI$yaHxDebK)HP^>z!Sk;z{|m5pz32d zm|DjNlfIsS>#6t7F2^r7rH&Ox;m7kAcU6~GTvbz5-c;q9Q&lAmDz&DG;-2805ISs1 zs;nV4hSX+YH;s0w$Tsoosw+6$(m9v4OzH0qDxZ6_Q}$bJ*dQONWxo>tR2`x?3crHC z12$In%`bR6BCb-a73&E)7mZ5vsB`fZgzU#DhUWjLyh&zzfCpOoD9eY@;GxjQfX9QJ zS2JgQCx9#XJrPWm4UIKb)_^~$-zaz(zi5hVD30{e5jHh&WuHh2ZG-0N^67JOzs zLsTBCrW1@N?UwQO)o({CHsEN!<)HW%*00KYs(#%czNkD0f*OM#0`3nU3LXkZ!7MNv zoD5C@)%N3{<{>$sZO#l$15^2{yFNC?-$#jma0-7FNBNN+2-i4B4_J z&E<{FAzN0-22YSYziBVqCaaY1I5sxhmNFzsuB)#LPBQ2_-7ZL5D_EO?nn~7L!6_%H zIxvdW)9EP~;LF2m|EK%?YRd1fU3|jbHvGZ%cMzX4nJ4)Dvi&{V8r>75_IZNeYwd3t z%}M#g=^pV|@~8Qquc-q)$5Vge`-!0R#IL|H;K^VVJO!Kvo(3Kco(W1LpAB9Jo(o<9 zo(EnFUI_jUyad$#v`fLy!OK9&(G{T1`tj{7BTv_YBl&$DsIz_7gW8AoTTnLlO7ME{ zHc+)_kv%74}yF*$om60804E==H9qJfx27oF>pNiI5-D< z5}Xe{1=fJifJ?wm@$X{I9%8uBAt7EWIb?*6aBO+p>OOI=C;`2b9g4 z0mi`opyF%;D$N1lZ@}%r+rXW``@un=%03uO4-?Xv@!R zEXul;hX0MBJCm%QVDwzz|8&2XrTo4t<@Y~Rerqa3k5eqNA7&bo|DVbt{`cZ%o}~|k zPb%MVa3VMYRDZQADEo3G_zbukxB=W96fgDwQ~5g(e?0+zQ|FuK;+J}Vlj6`E5W1B9 zq&_&WrvWaW?L7!<>rNplcauWl^$wL=`P$3UN0EQMcQn`+90Mv3WB-S8RVaSS9B~Kb ziq7Rm?@&KU%=Vu43#R(qRJkVFa!s=3+Rv72|8~l?t$lSz^)(-VzMChuxJPlsH`zd; z{y*O27pkPWzM-M2vQ2|<@r{OQr_xlm@R&*OQJv{s!)@$?ZP^Y1_5MTKDbvrz4>dWOy-=q|GfbMwD+`MU1shpTqeCIwM;p-OfgXJ&uynnD!pVw z{RJp}n0hWpaTG>lf*o89>V9dzqO|yDYAHyRaN(y-k<=?_UMMuhsMeM$lX`DzTboLm zl$U9svQh*pUx&3*R_$HT6J#q@he$W2o~=?G)n9-9+AC{zLrY$L`7amBRGHL!QtPjb zGU(mYLA`%QJ7ub1z^k#S>Q~SBVdzz~u*#_V<6B8>^rGU7#80?Wvi^#z$}2J1J4r{BruJRNm9r9RIzWFrB+roRX36~C0LV8P~SdH z&p6cv;y}NDFKakATCE!?(bwUq^o&ZvIz}f#I|#yYvI)$Wp7rRKj5#)rS%OR?d8(T( zW?Mf$B@T}ynz$>*Se6>aUtkhR8c*C?W1e7?rhCiuY}nQx<#qAj>V08HWqc>uJYU=2 zhjjOU2gZ}y{xX}UeAEur_O*`HZ0SeP*2nOBHYl6*C{S~K2`~qo15N|W!D4VOI18K) zR)Gt^daxQ4H;)ES18YHz(T)M{1Y5v0;9^kgOG`j~Qer8%BX}G*5j-B83N8aBCntl8 z!Bar3fAKwI^KFDPK;0{ICaC-E&IYw~b1wJ_xE%Zhya?QivR(=f11|&j0%jO=tzk#~P?pg49@Oe;Uvlqb!z_s8r;NQWQz}GC4JK}q+2!Mnh3!8PD| z@LljHFatUJ8Qe?qwl!mEunRa2>1=bhVvIZE36~vOH%vCoA6IPL!men z)4Pnn89VTwdD2Q3s9nb^YpP15omy(phvr+Yo3P%3TcfvkdQBHtC_`%h%*E8#v^4AU zk5UU#$s*TQS2Xh3H~+)7zL{=phdKBK&k7uBW8r-<++S?^SMF0>mWe;>&t_lD;ow|; zbC>+GM(`-`STF&e0?q+d-f}RNhuP4n4)X_?eKBEsYALkT{auQqFo*DWeez?U6L zOn0N9i(b^ugMHPOk0HKH3B}R7#TQhNn>VkdT*?o3Zc3&08dt_C%4v=CHYnImaa z{xhJf2!X{Q8RDPe#~0vr{H1h+CZitVQWUVhxCk|VB#j2R|;&8A;^WE zZZrdhf7kx*X@3tvHuQvTjg|hp4PCM$IUdWet1W$N`hwl~-4`4M_6Ns<1Hc2oZNV&X zAXotI1kMC^1}niqU>%qVs+|l6uLO4ke+%vbz5(tDz6b6FehQ8PwYIwtmnA53AjI410D#T0UiXN14cpdH5+^ojDatKxuEuB#KAYgsoEoX%w+l8{DTIvQ8&_3N2xco^O&;rb}0~I;{(Um zBSrNeQbBE1jd~TUYC4$OF!sr^P?l5{@vjfqZ0V=LFO~CjFcUlr90{HSjswpH_Xp1d zbHVdLjUg@s=Ybc4CxMrMXM$INE5NJ38^Eifg+nHEk8fIq$E*pZ?rT9xbq}L zpjmMK()OTnyyQGVCtQazF?ZWZ_=iGl=F=>Ej%SInMb%Ea@}>o)`d~|V*q%dB8IwHf z95sU?`LAecWYAt+k8QIQ(DdsPGNB%QUT2c87e}2p#cotd7$*Sk;3Y(aU4tSssaQNb>DI(?lSIpnk z1xaNaQIo`LrdkY>fHUjYJL72AoN8+;ni8fZ1oG2hb10a@pZKQySMsMP4qxl=MW>jmvR?Fw55V=d)ZeCh!nXw#Zcxs;y;pvLgkAQk2<1a}5& zLFKg$OfA3G(ih+t$k~^}q-&CMP~RJtWO1y&!mk z7xDX-s??1eAY0Hkbf=TQ?I{>NOZx^NZI|_;me7po9PQtrBV$n7TxGOFspt9Gh|o4< z*Vi%b=HeZle^Ni7wDhrewXxOwUZPNZwWir@9$o>Zg%C$OMk)^)n7PzS>rKepp`EC> z;(1P0Q-w)U_l@ce{x`BU>8mkbjl%gKoiD9#sIRG?ztr?gm*dy!YbsK8?-N~5a53lB zbgO!nlZgB^Ew1M=`}%g;4JVOuo7GWo(^6Io(J9t-VNRaJ_N1=UjuIe-vw_6KL&pft^@A| z2f(;{z)9e}pvH0cfy==ALG9;x0Q@8PAgJ-$Ltv`zn1JM~tZD^%4jbNjeeDI}rS1b& z9O*FO^mh6vt2-pejnxfi)=7gDy(V}<8sv=sFD$tIGHpUBkM);(=W%Pj{J?WH4T1Jx(dIBx; zsQn#inGaKbYjc{OK+9+nLXXoj{(1Q`?Q7*FS(cs|h5L9*-=?2G{@E53eS2^MxC5wu zdq*%E90*PYcLHUD?+n&}gF)$&UBENIOz;A57C%R(8PSqxQJha`L^okVr}W-^akcz$ZcVzfXbcfBy&i~z5q6YFM-PFS}?W$dIb8$Dfk|E1o$C17yJmU2LA;%fFFa4!B0Tx+<$|o zfuDiWy`O`rvQq?oW3uxM{;9H~I4Xy5pAKZFuCub!S{wZGujRC^CuPUg(@gRmJSv0g zNmZI>iC@AemG3K1ZTlNgZTr8V+V*##+V+p2+V%!eec{jGFXitG#7ouTVgByhE`N*I z1*(CVugCw_=Gj>mhZSgp&5>a;W%`o8P4T%aeV+K-4HTbyfZ{W=G=|T;K=FAiP<&1Y z#pm8&DxcRvAHbjLQO_O2u|<$<$+r5+uIRwjvu=vB6Mw?Pci=zsq$P^#Yih9HLn|mv z9nWm*1@`%+^8ijn8OSx6lTBtI+?(WDNH)2&sUdT)3eiwrS*dSy$Z*yyl?u!lU1@1F z-oj72c}iAena!F$TH(f)3oKEfvP=FopEp|so(lLYzEpuD!Fix;zXjmF;6iXdSOcC4 z)`RDQjo>9<6L>k;45rpoGjy>msHfC3cfZ3gbv{sW#FQ%j+NmdV0fSlSN~xw$)tGk@ zT@Tf?*_=<|vREpK)ZT7?_@BQ zXKC1v1MpLPJ*l!?hivbcGPk8Tszc%Aqz)^>zQJR!DiL5V(yOxSh! zdS6`o@xm7VthlDIS|d7*`7+5)r9MF%UQoD&XgB)#)#y?KNTpQEZR&Qh-QTGwkyoAN z_+hFx8vcLcv+7)oyxr1Ir!G|o zXM#h)vq9N<=Yn&=>%oQK4WMki--41IKF?#mvvwP(QvMEH1M;zEbC%)`@LPW04Gt$~ z_ksD~YOoM|5L^VV0ktpSkD%_W_!Iaz_$ZhvV;7SDy+|`?mp=?|J%752c#~3OOmSeK zC!E$s#!RyeiI`Fkp5QI~{-q+8G7d@kxsit5S^(RTHcd4;X;VTHzmR}xf>V=^L&zW)xq z2mBtq5Bw2)14N}S>rMI6K#kwKfuq14;25wcm@4x+kEo}c4_@k;+=I|l&&Mf_!Vd!5 zp64p8(*YKvQEi$Af*0_k{mw@^Xrhe~obyy~peOi!ssGdc{!7a53|pH1=+&f-T46&8 zly}vCcubNGUzEK*pcFEvbWJa^uC!5eQgzef=%~x)N^+_!`Hk7kx#~6Z| zzg$6OHC1uS*<@ddZGl-?{lqq2FIKqN%^fqx_T1SqQWn;zXS3AG{yfoCe8E&{*T+=!NR{j+NI~; z+xqG0kgT3S-$oD=Jq0#@qwVh?etzh8NS_ATQdG&B+LOlU!Jhs-kY~x^D9JZC8r%~c z1C9m9g8P97fSUg~5IhPz1Y7_{!DGNIa0wU#&j52l+1OLS3qkg2ExQ#g1YZS9z_-Ct z@B^?6%!I|$LCurS0vCg`!BfDaz#G5>cq>>AN}pDMFN2k!_SMY;zX7X3buqPIgsNx& z`+<#MF4zo~gDoI?ioIh&^*6_ZtH2Y$yTFsdN5Rv;C&4qo4d7Yej#SyNL47Ood@u@L z0BU~pLa-dX6x288F9%nGSAeU)-+&K-*Mr)dzY_c&ydBi{+E#%>z&pSwcn_Eh-V06x z9|UKB4}r76KY$v9{SjOaJ_23>{u#Usd=k6?dVWb{2TZ__$>GV_!9UD_$sLH zy!`|0g510X_5$Aqw+G(?hl3x02Z0}fQSejnaPU9iY;YZzsxKdgf6~Q)+Pi;5>wU)T z_F(5j-Ki`G2=|rMm|8B5B3yx`vi! zYfXyY8+w2K4Ba36q5u7bCWZGu#AzeQL(EYG-^0d`mc*ntZ_p0o91S#N8cOwAO{z6# ztyd2voIg~tyg^+mzSJeH)NAHMr1{FGM(a}2EktNQ>uaYZXtAw-Ydm+rBEHd>8{DJYZ6sHx$EWrFu$&hHhlC-@n-H3;{;eqax90N4xM z7Tg-#0UQYq1ZAfV0<*wfz|?lVun+I242ZLNw%fJ!y7X=6gVeLgiX(ms+qHurPs&Xd> zbP~#wt+fKGTHf4tZ7r!WEk_R}gnv$;wn^ELQc9%rj1coE?K9h^otpksLSL_WHQk8mpF&k`I!Ip~>+^nSG4)WJelSO5IK9LYtAkS- z%E@eqnd(InX6i{b)!@Q4xU;(oy1)jl_Jd0K=Rs06kfc%GieB0(#l!;bSq!t{WLUf& z9m%8MlkD5-L#JB9!9OS5Lci6@5+84aw>tqAj;A3PpGeiCc%wHKPrMKQ)GtI$w4_C^ z;|_WP3%tteso?h=_IJ=v{Kx(dEb!HS%{YtvX21Au281iA%@a)8t+&5}Be$7;IlSOl z%(wP;;6GS%+B|{(Li^jzsMz1ZjLJV#{I^MO9e<_$9i-n|HV98Jf*5Om2j%6;FZ1ZP z_-N*1cJsyEct}U9U%Z}QJ6rnK*mu(3--3ICKY`=HwEq6y&LHL=NJcoXYqSm@O*FwP%{WSgKNM+;G5tO@O^M7_zAcx_+M~$us_1GH>i8SMuFMj zK41(S11S>EfxO7I3y--EshJQ=(hyarqe zUJu>|N~PWj-VNRbt_JS~HD0|R{1jXbegQrV{sgW8(~;3fz)|3%U>y82SO7i&7J*NJ z)4`{~Ch%|IdEm34zB~PQ@N)2F@EY({Pzt+v8^&v32`H6Z2L2PA4tAjp%m90XGr{e^ zBfy=(Bf&kva&R(O0qVQem7u;`Js;F}tB(dB0BgWU!CLSMupWF5Yydw3n?dQ>#b9?7 z%CTTJcml|`(Y+JFBfyhDDcDoMv%%BA72p}*3*ea`-}3g(2D_km&IS2Kws$_rH?F4(8GHwP1$+;D735A{?=_G+c)fQ(?vM4}2fLvFKLok=)%ytC5&Q()75oh3 zu1W7dU^e(QI2-&H&9g?!Hqc{q)4SxqPJ?1~jees;VtKs7Td@duu zsg`3s%1apxd%8>{}elA2!M@ApTW-1z_LeW_*Z zGQcleS5W!r2C9Cr9gw%48Lyjy**zajvC3}}e*^LRz40rnTUb}WxGs?l6ZoZhMGKZT zRWr$uh}ZG8mb&s96JI^r)8CH3=~7ne6yCE|q)IQ%zvOHyCw`7p_Z&n*i3M+O}C2+ zn;*}QC8k6Ra`Kd{(##Eo>)JY8NkKd}SK(A1<*%FbpAj#}DV&igj+K-a$Fud`64Ft6 zIsENv!*@@Hk7X5RCyEM-%8K%%1<}c|{8&M$sRO0k!-dO=O^Hs2O(iC+fR_r>(}l^2 zmqfGjVu^gQw6L@=yD;G8ZlQPga^dp|se*jN$ykCP)5v*&Nk2~bK{l^jx$q^i>@w9; z7Hs0^fnW59^A5_Kh*Iw9v6=CLl2WReq)eLOJoIiGDL0-M)BE!Zqd6x0FyaldFX`jL zM{{xt3lbq#nXqMq9csgF?ZO63NS19M8>X)dGo=(sEGvl>7eo<&qG(CUjKboagk@!r zcj=oT{eCWPNi;W>$fCka3w^OPc^N_2VfH;4E^JvrcA_LYJ(i<#W>1M_PYcqPd<6OG z@4`=xl_tuH^Ab6Q`3XfSik41EloiAZvI}!!IbNoH!8R^JX*4Sm>}P!vAhD<7gWEE6XwN07biCsqg+Ze+@^MN{#j}liFiR#nMp9es5EHLflL%+ z5ScYPeU{6pyX5D%N?1W_mA1mB*|1rBn!K{AG9|QMKJ{f8@Om}MKF!O{PGslAvS~@m zr>5q&wSHaXmtT^N+|rbN|2^?n|Dd?W-+Bgdx|%rAR&h`x^zD9}Zt^cF&5?SBY~C60 zPHA?Re{NB3w4~GoQJ%u_dzkpMlpz;i<5u+?`zi5VEq##$lEHx;J|K44QCq4A8 zUzWn+#PnFPgbNKYRlmlz4)+M*7(t@PC&#AIFePC5vHYx9u^(e2S*UW+kF6mDTmJy2^(7>bmAcZhd2IF2{?lov}Z0CT%JXW=C^leN9n$ zT^0Y$uVRs8QFSE~q5gX%6MJqdjc8L-eMPl@M~{s+6CAy%c!7CS(oj{tP#-lJzNr|K z%i?~&GoSP&m5;+OrgBiXG=IZ=Z|_Ydl2hHJd;St7OPg|+80+O@Qt9oflaN7BFqy8t z1oNe^a9TX(^Woai`_laPA&kZh7_+JO<+jw+6qnb{uX5$wZ&Oi9S{k%7w<%$E3FI_Z zvyC8;Utd{e%r_Ofi=T;TDH+ZxL*o2=iXGA`3ewdNQW~3CYGi1$>QYBd_&$ctn2?l- zr}dhSWp93UT~)$A(<%8YZ)S$le}6as{n<2#Xacju*mr6;%3OEL#DY@Ul*O^!STWsZ zj75;18LEzc;p)iEi%vFuc%rn>8kYp@s5O`z6~^*yc1#(zqYTn*dUcQRt8E!&F9-6} z%jUZ<-_)1d}!PFb<9p`YCSH*r6pN=Xwy8bhY)YYTES1V9Kv4MOoYF@q2 z&lbvsTj3-~%5zW$@+4pR>^))4v$DF}`Uf_J{COu^TxwhD82;$YQWbi9LEo%!X`X9%CLd(ov=RAr@$!)0JhtihW2>N#lwVhG3b)lX zEU2%m((6s!uzxqtOg@+Zfqzghir?MDXBUu-8}{qrO)0OdO!@_OisJS3?3gg8dVY0t zIcmA7iOop$E%O(cJoF>It*IM@?d6pe<-~IhJ)Fi?o{emJ2sB%m^So(d!7Ut!25H{e6!qWRIT@5#~3k!1d7$utY#*yY2`)>Mv!ju-5(O2;9 zcy2t~x5H&$GpdDI`EjgljewOGU;p~~#vUMUY$jZc<>jLPCX;7O4C%;3DZ|{tvQna$ zc#}ZcILa4x8S%;r%%}!s7|kjyE@cGa`(mFd*I3J>m{nNl=XnD0#}Q(0gtv^~IVbV;PDe9(k zGQP^(Du*KO?-~Rx@1o`cr^e^OC zI&(tC1Xa`?A+P2IY=-f*hMz`Yn=4??lz>qtlfx&XJ`W zKX^{u&CvvHOL4YJ#+g~uh!Hujs;LRRO+HQfn#&FN8cBvNo;qfX%$i!fO}KD=)05%o z3+7hWSqoG7Ra;Vjz6&i8z{NwP%-BmQQx|>+?yv~bm0pmcAb%>v_s^T`@DTj5NhVk6^d5Kg@O`YM zS@laym_QdOjHx$;2{jC*GloBvOJPhcDojb0HrO^-8BWQ^)Si3_CG>iu;s!ckn4gE> zz@4mG;~(^q^5^}5zj82N$ybK@$e>LqEcpn+QmYG+;iGkxCUN`zK*uN!ISk^o(lHwQ z?@sytWYTRYpHW@s-;h*{G1SP}K+QJT&1wwgTIE}Dx-mE5;*>R2W&7fO0w4_$vVf7{pKw)TAZNga1rim~Gp;3i{w6D}g*uXTkaNtyJ7I2OR z7Y>$GWI?`YZQ%f64W=ph?Z}s{9KTUgHAd>?VXMXWFj`H#l#i_s-^bT%YAW)wb>Vv% zl@>&@6=0JyYAwiutpMLk`ba>#C-ey3%VE*VRr^Wr@`TldlbQg>q-sAmnFX8Tcjjj@45VafP!l55l#t zqf~ziZ1WNX4wQllqI=a~gTL`DxL>V+5s+!J@+C*Dea#5NOxVdAxoPcesYtg?P_et8|!PmN||#_b?H4dn&(F>}sBmV;<%%htUrYIFGPL#Ffm63=+uqVk&R zN~;t7JHS-Ge)O-BA^gSOVs$Az(wjlwNhxIezo+=%8nMDHbf7PEB5su5)?Q8cKDmS#^e?|^8eNWR16 zTO7+~cw_v0d#88C$o>Q}PeXYk9?wa{jgV&7s9K;auT%Nkg-MgPVVM}RbFLW8?FaDN zXRNNJwhFsK-MC59@B34tWapJA2l@GJBPk!j+)&$mm^}M)KQ`wI@7paY?+BIApAT|H zHTgP}c*EK)ik~NUUE7ZB1~T`?>D@|4cCe|#W$ZZ;_gT1OO%0vaUY@2kN#TVr+)_IJ z+EGgQX(gIUWKk+V$~;6_mYH`d%FZXe;_PMOZBCqMj$$d!82d($s`VPFYc2 zY^LuYtf|$KZV%6IJuHZ3Pm7h7Bp5H-MKFKj(54yawGRfUU6sx%DT=Wk#TK<&xZ!dG8GlH zYdC0ejL8!lww)L2aA09w`vp|_nCdY7kJ9ZHPB)7gByDOiOY>?bX3AdI?fMVJ;v*mV zwSLlckBux8!M`RZ6Po-yhk4f{oOY~$_54uEq^P`{&Y$cL<)vphe5<^;$*>Xz?Wv4r z-nFsAOlj>{Y4-}JO-G{r3a~nqu%DkI@}qH;;%pU;6Uu)m(lBzfTL=6JEFV)&jgv@BxTYJ`qcLc&RkY;p4kS&+*@&! zRdGK|U~4GJKH(&Twi}(!5~4Pf_~Dhf_6aEb*5U9bi$P;fM$$ePh3y*-YwE6K7CRWw zCdu`NV18HOgQXeMt|(pW(0*RRvXs##eH0oSNQ{(PeoO&1a#H%+gu|15D0EN_1HwUq zEd<$lYz(owD6oH&-nQYuW^abyP$k2&_}kmQce`*ne?m9LOo^{2lWYsba{F*_|J}Z9 zYR8Um8Tq^j=Vga*B(@6_N;WJHH0K@E$&TT0Viv)a6&8_m@>nQWAMqGvW5;zRAM#ny z(u@gR=f7_h)V*w(28Pp-CC03@jHSX7W4y6^i1-p-ya?ty#Iv1S#gl!)M6qdmEZAv* z+r|mY=%8?%cv-=;0+dFQZ{{6LZJLQoy<>1Vyss6t1nczXE@A)T=!~E$f_DdVIZ7)t z92S9?IV*>)0=`OC*@Ag4g&h(Ot7U~EwYte}uRvh4E9}s4Sbss78GF-RoAQ*BcAx`? zwGNw4x6F2wLe>tnz?mIm^&`hA@8PWjYo!^JrpWBeA(--9%%A3Dm5*K93(k%OcITJ^ zxPT)&3|Jh~raaP2t?S)7i~=LsOG6YBXEZp<=4Vtm4w|Aw%NHzoSQfeBrt*GtIG)i< z63Sw?2QK`MF|ES3k=;O{nY;yaYU0({a6BV4tbnuT5iejl2GdajuYCD-wa?#i;W$NQ zS$Xl2Dd<0^U==>Fz4VUp;qZ1zMK(?{hX0PR-kcDQW43p(z%!MS`^YMgRf);adPiWV{eyC_qu=j)Sb<_~EjL=0=juDK2^G%u zQ3^L@T3%pt`!->p&=^TuG!g~DI$rRu`%D@|(c%&o)S?B21+10j#SeFS#J351W+)tc zT1~jz;yBtrPb%8fS2(S%HcYVFQQPo>a1(K8#z1Lxv*C(a409{gn*5SyckAgq{PzUw z8Vb_W2JyG_CE_L8-p8UDEBhu-fv!;4UO{qF>+DA#0ArQ2{4chfnD*xM4#_^a6DHyB^YyHDVa0h5nn*1Lms z4*72#_{Wp_J{-TV^=J1ZZOe}zuE&1XKea#H*ObxEcSi6IyK7ZjDV3P|H|3$f^$$3y zJj!O%n#ObZvq!q5EF`${4{WQY%8Zx8CReMPOz-FCGw2UKB8`ZLX;wT-6=to=7^}>s z#S%QF7s$g=q{n)5VZ0#D90)R6stp{aQ;K6z?e;WbNzTkY6!-HO3ztL_`Blve>ML9E zUVdIL{1`R!WezPJ8vk49Ow+xd8TYDDdGR_D>XmT|rD-moUz!)s(q12owO$$Pc}or) z(dIdbF>8UGqxp&ogL`G%mO^BZnF0A` zpRB%^o)K2}%D4eiUXhDUK;=Ul1+{??6+Yb%lv$TkWkX2?=_tkz#L%eI^{{ z)(}QOIE)xgocQ zSw(ko^+Jg`@|kN!`g-9`gy4lHB?ZtNhQFZ_!&y8V3rIf?{V4N9-JtBEs@jPT_vbQ z*Nd909Mg(ZY0AiG!s)F>j7tm)H6y}_31m=P;UWa$T%}i1kY#E?Ij0Jg?P&326XDu$ z4%(rpm5(Bfwu_i5&C(Weqai}68U7X$OmaOFdpKT@TWDVS5-Ja(Z4`#XL%K;7SXI-T z^d)0ud4&vPlwnO$GS|qWcdv|l(bU0d9Df?oT(q$fFV(50&Xk-FVwi`^8D}J@CuN}E)pgo#P6Khv z6=ny6y)8tdwpjrsqB?|?S2VrQw$j}*^aB6Gl7^?sN*ki2Y+=A5Gs$e&&=`<%vho;g z^~$(ZQbcLB5m*Z+^Q#K#o2%z7HG)1)iBORVY|os$goWznd5PNEO0(ro-@YErVzeK5dz0Ph0g~_e1t8U_}wAr?;F#zk8 zalfmQDgGixaa9A~n`Nfn-x0DoVWi}Bf;_)^Nj}$2me!Y0u~qfCMvTt(Wgix0m(FAz zs8@zAh481!T74*Yqkiec>q|=6(XuQfGABvA%Kf!{`w>t{Qaj|GAQvHE+9qpG?(^rn68wkC4YW%WDk?=~6DRV~=MCWXZaW22zktHz}w$SQAJ>_ADdJ z-x4Nnmjg}Z?@XXW2o#h;{7>#o*toBxPiBbphqXioLFz+t@ivqG=55j@%?NrCTi5bT zW7IZN;%lENy_CPBRvAAA2|@+2k-pgIDfOd-qY;|2={;LvMfqAhyg*{!qsDTUWL`{T z(a{jqsYwSW6`@RtrWrFIcqt=0pa+Z~% zeL}IKiY5Mnyx&x%&!vVnaUWdaqQj&KU3k*V?EI!4lRNQESC!67m@A9x*dZU{HG4V& ziPYkecIhQQjj%aE#6CXhz`0g)$zSc<3h5~GGHXlE2rTKx$u1ILP98|~hMG#u(E&7* zL{L~@>0`r~kThW^N75YsE; zIi#&ULuBKgsULgw+a>z(jJ4I~-W?;gU zPDPb2$ji3Y!3%!YoY7}`kUr{+d_%<;z8bf1DpjGg2ZPS}t#oCc*d(S!Pxxls{>TH{0}ZPE~7>5#IQ#ndVhnS;@$Y z7nxzA)OQ-R>?l8DraPI?IyWXU)vb)U#TBfHk!wY(4(c}B7$`ar=(9uY(Lao`n(~UOrtJF0DV2={ z+W1gikyAB~^A$}-ocE$QaUDe{Z?0HiGAR~JBWhkzdv=eS#^>ZWQP%o}q7Q-Y_bu8_ zmF!#2mXxy444$Lg0g(0d$v zI>?U3O<-AmFxwb^l5)*#@Y_vpOoXN`vaKEMThUxVT(1w}IV)QB^q8?m0QYmYOzRP; z6JT{(McHMh)6&cTgFL|0VAN;&{x>E3{w|kRJ3wSJbmS*iH|XVl|K@gqbVOHU@|o#x zMN(cgeXQ9{t#C4X%uxh*NB-I}qQe2j7-QIKVCW8tnL`r3V)GgAx;wQ8iD_%037R?e zX(mI|KBP2heD>Uksbal@;oZdXrix{FP>0wartjurc+WQ&lH(dXtWl>c1(Y3VAGL~} z5Zdd%vxC9SW(88SJi=)pyRj{3w`?rhl)o${t_!ys%pZrO44^h6h-$nm<%#*b^_r%0 zUX%U(hD}nRWhGN|5=Bz3`OCJIyD=#rV|cGIu0O<;dE5gFDy$h}1=Hij9FCdJ)!ukZ zvzz8-l)J1YU0D&15L{Sc3XB!^& zc3g`3_sCHH{^lFyPmRe~#b$Oz@n@S%lxQ);j4lsODjdN4a08~u35^?%#=*K@uiHt z?5MN!l$4}g_s-_l)Gszw`VnC;bou~5m*cmZX52V9(fdUVmwNvZUw%nlK(vT+D zn`_5zn-N5rc6H!aGwo?nd7=iJ+WgjJUNDoV?3^sc-ex3jM5_ZYjcjzfDrICd)^zWD z3LxBxGMthoZl9_p5Eek9&CQLa<&E<>BB>r#3c%msz`o618QQ$mx-L_#h(rI=T!bkOw$bVicH6;EVQWF=>Qn*%B+@VGb25{ zN#~qobEFJ6RZ1~F5ToSyBNJ-YENoBJ&2Nc~2(i4X2wJ<6$W_HWFjk5TwJgg5MRL#p-31|7C2jJ&G?^T}x-)OJXb((#DL z8dza9#ZAVKmrQCXnDR^J@D*X(u4S&BQR~=8eUS#7zpO9P*Y0{{JWZy8>7lj+u^3)? zexE1V_{gy$Jlka2QU_itx@JPm?2sDP!;bsKOpf?9V02Ww9xAprWUEHpT!OJ|lpW1e zCE89@Dc^_kPJbJ#s$89BqTOCoUFu)Ng?1)}%>+b;o)Wn~5i_WIzd?wrYH@T+$>yfT zgd*Q;RqHcTX1@6)_Go&NJtF>4Ki8-iGojwll2>0|nO{}j#JToH)1F4CQA{t^^)LQ4 zRi>$^>DU&o)*~*LyNU`aXHA0ZF7TiU2R%V)a5wlS11P&uIBTpC6~$jBF?vN+^%?nN z{@%YAh0ARG9!R}pOcHNpIrX=UF71?eV-vI3r0-F*PuIvZ=qj5#-bxxMIy>>Ent2dT z1@jU{-dhnQDfcNvd)=F{4LbH!>KZsv5B}Im_Nt7#R$>>j?ld6NWCanz^8vEIbb{G# zwn6CIJ-=*3a~GnA^&RW~C2>tzZbXfXr|r#Hir&#^vxB}zZ|T4|6DK>iqvSixsR3Uo zoV9BB+;JluU_B77b5t^cMGw#jSO)XM`+A2m=e?Hq>o~8F` zIW1PKi!oH@8%fPgi?l;gd(aIcq{HTz0+Kcpr>ZbrfgEUAb+B$}CQx8TQ)r(kk%LX5 zCbqJn-p9AjH!gQl7b}7y=NT=k={m!ba0^v9>A<3L=}q5$Lcg1(S!p)D59t+I`%VnI zMg{k4&zKBinD*?Du_@tywu*hppRQkUs^S8*2+F=FWbhV)ta=*sLk3YTL_IY zR#k^LiN~#{n@s(xo-{8@MAJxShwHi>iUt5WZWy!=e>K;Q1~=g?`I5de3wUNktBh*e z)y%m{d>J|?H)|vkX7@vt$)GO#QKDT1*4Pw$^Hg(_-VyH$UTTEHi@3KjR%-7CWn*or8SKq5ta2;8+U#crMB4gkheWCbZMsv^ zX4jpWt>Dw_!MYu@8fM*2D)OmTZPSR1+LI&P1d=G~vz*+cW<|I`mOWtdF_|B_wqTnrrlM1 z=*St9damo6c{6uboA4#oAKtU*ki^rwjNS3@QPs(fJ+A#|Lie4AeEy}k{QD=5Ku2^@`YTsn zab?=^eeZehtcm+fS~mG|?mjp4ac|V^cI(4WpKc2_#*>@ffN%Zhi|VPgO8R~T$#0e`A*+n`pJSX&fRmb6|1=e-O&I1{h1RAivE7mdE4Fj+b0t{ z!_TV?{l5p@o_YGs>32Q(`Hp`+sJ&J_y1&{ir{i@I9`^Rs+_=;KY z_qp`3jHe!<9u0lY-f!M@WcAW7{?YsN4X-_S)?fMNmZ6_;b@YIH8?Nbj|Eh8S%6tD` z-*E12E2XnEzT1`Ot{8LNMbnON*zKW}C?DOg-Y@OyQx2aq@bigBOgXD|+5Nj+OMRVV z=-0$XZ+ps$7owN#zu(_q&n&6tZgWG=dUiytr2pf;J%8*QKb-%-12NhKZLeQiuj{|r z(|fk(pV#!bYL|27p8sDafen4nb!*})_nmRxElYZAH#9bYvoY5g`aZXfyFN0z&k1+z zuy5}{J06UTtT*)4QwMza>t3b5e&z2ir|$Yy)<5{>LAugE_RErs4|%=U#mC=2zI@f< zp|^6!yrJj3n0e0PLDx^%{x9FGKVV|Z$+TZXKlq%Zu8SV^>mM?jy5;Y6P0Je2SM^pp zC;okpl_$NqYR0zz_I?;qeFy2!F!VQ;6qYPKxNKtdlp!Y_d``E+xoh6gFFe2ck)e}! zul@b{_s==<%lkgyZgxXoQagTf?Ukb!{PQ;(X3l?U&10Nn=%e&s-({QAU#vRpqO;yE zd2E|5f4#{6mQcU6f9!VkeW(BajN)tOT>tP+b0;k0?s*gb#OVzeeem7<|8$vl+7+v= zFQHBUVCYvy*0+3k@7kj$9B}f~0ataon>psKmHxhKp1gI;*pp{HJAGdcMQcOjsfPZK zx9|AX#of34^uw=y^Vg!k3_8~Ho-y9dR z|EHTy-RmH}{bcB;tX+D4djGxG|1D;EyB$xtuIj9YV!yJz6U6-PDqt$5)5PwCC}!l3Dwws66eBCoXjt>=u}_S?Jf{_b1)5<~C%<{8!3 z*8b}p@4obZeR$0Dx#rt+gde{2-Y@pq<7%tr-`C^QwTmu0^2ok} z-$fptH1z*`(|6XpM;{tLbI_`q>^Z-pTz$7u_#ck#ci5fPhgDy->)eatbG{;csi9x= z*^@a9f32Hz!N|d*macmIJM(P=!spF9@uDkEd@SRNhyU==RTq9Z)zdctpg+@P=7zyt z8%yioN&ETMUo}64ywO$nOB?^2tDf&QwD^-dW0eE8s@Vg1t~d0PR{g5$zgHf0O7CvN zx}CcJ6A$yvFhk$)r|41rn_fBPqvgwI3_Rtc0`vns?U#1w@VgG#{k7{Je|yIIh2>p7 z*&Y30=noB>vDHVV6ZXpA`tnP17X9r*zP(}S8S5^4?4zH*yX(lyzHeUCgKr~ye>e1F zrVqSn_5PVV)P3NM`Q1YoAIV)n@S!y}Q2kaQ|ulddc&yGxRQfm%rZUx#5StxzE1C4tcudTJ)r$FWs@>u-|Qe)Gd84 zI(^BtuZ%3=EELvdzqGQ?KR)L12`#7Iv+lF|b}ZPPdTcTDqxSru*Rvl!{m18zy5*$< z|9j&R$b+HpbHstOHe{WgxNgZ#d(ZCu{59M&Z|INqNE_Yl<*%l_l(Bl%=u;kh!v9Wf zzqB4N^dI$yoev**@Do4ooA$@)=OYh0=)EtjJMrv4%-dt1mv4Ju(0(^g{}}ya=N5kjn*Pnlf9RWW>-oiJaSQ~V-Y;$1kZXTEa%|7TUc9gR!av^J_piulOr^!<9=aNeO$=l$Ee?1SZL z^Lm}e88vi4zqBvb99O^LjQs6Bs_oV9_ZtT0@C^_{zv{owoId*6d2c@6@8x$NZJBi` z_KBgNy!Oe3Z~k_>{>4j1e1H1h|Ah95p|AYwJ7v8e9yI9VHN`*Oe9x+RoWIyf=|B7Q z`fb0Ouwd@D18cupchN@|pf?Qt&dggMy#1J?UK@Pcwa=|P{DJ@Sy=_D9e#hNK7iN$7 z{L-5qd%kY&$V2%?g`v+c`tGbJF1_vFk(!Jj?tEj&<>+}X)aaL1K6TKg$Bel=GwZzS z{ukHYc`)C2G4xw!%pJ1wkQ28qIQO}p-Cp_TQ@%xK=y~J+HRb4IXE%L+T*1)?9o6)2 z&J_+)I!B!UYWCi1$8LD%jnh88b)t0DJVSqA&CjO}UVQ5Mi)$~veCJ!&-om##41K_Z zBj;Xw*ZR6Ujy!Aanp3|i^}MgJ16y|Gzl!~5>+6P1vzr!_FRq(iS=F?VT>`Tk>KmKO zb@A`)rpAid6#S-s=W$I~Q|4|pGcCrLHe-G^OoiN==oE z5?d~{Dtm{^B6GT=W5xe&Zc6NOodsi?__>j8f#Ee zolK;$p`w#1p!1p**+e$3Sp$8DS|w6qad{J`96I@S@?Tj|G`LfzY4aNAqUxrW@|w)1W?3JZV@8h}J$q4wvmKfiH_+!d&l^=;SJOEo zq`FSR)yZPnPJfc0%%-Ka-q=Jkq}1Xo_@Y8}b2a_nv76OoTgyB1uXa~zXA8lW@aoFW z)^O8;En(JadpcXwJ8xIaYpJWyrS6s0O%?T+21`k`DS>iQ@||Q@3!l?k+}WOnrMa=4 z%t!s)qtyv-PAZ#dRn3(()pI+aPEB=fb#rIcZ*A>ns;o_xiCtftQ>Kj#RT#i@+Qcni z)Yw@)&RS=pqLzi1&0_8*8B<-~Nxm4Xt;xTBJJjqqtpJlF$px$>Z>GJo@$%@}%KFY) zZM4Snmgdf~MOJm^3Y$|f|C;+HnuyHY?dX=es?4#Y$Bf?HjU?bSGk=?t(ngx2Z3LY)9^XhJKT~JY**4VZSpY6|F1fv=|k5SRt;TcAIC;73kxi(~+{Lk~%WTcUyS0^(= z9g|LdXUil}sj)3`(>0Vdx9EMU%57h~aZYSpBM>(^J+twIHr8$!<~1$ttYT@XZ_t!` zCo6_g)MhrDjdO-CXmLqKXEVc1CY?4}kdZAjF03`*@b-)JON6b3;~kx3L~Skd(Ok7z z61x#WgB4s_`aiUniiVaN4ghRU+1)&Dux8fDqSI8l#fD=CmB+L&aY093$t=<4b>|yl z1zwev3pZ1%Zd}x>mQ*x!R?^#@pxGSGZ9Hogjm=xYWI?fQ?mW@Pv$L5d#>Nw=VBpV} zD{A;qJL|OdEsYiYtgH8LCi)*_8*$>;DZCzDIy!TB)!c^6gMjLWO#L38xo754h5%gz z|3{PmV-mgxW&Y0*Gl!2IXA&JdZfxe>CTU3HEoq`9bw2q?TP&rqqubZBZ8AS` z3+8>_ww#}|B{=W5-YuEaEyvNZTaJHQvSm7%35iiqJDnG!F|Oq&lXq%t3nV`}U}`e? zF0#~M?-Dq7A@AtTNF|@m_E8?xeHQ3M|wXTTwH(Y}Z?FH+KcyHj^+0fpxu88+< zTss-sf2=FweUEFPp>43Ph_@B{*LO6uKGqfScEGiRq3vv45pN`}?G0^D>xy_2acyU4 z`&(DUi{Tn-XmRU`c%`_88QM(iig*cJ!ws#%x+30?t$a?Vdn2rixQ;f{(av_X^BrxC zqdn?q-#FTON1G4{-m#x`MZ5)$R^w=wINBAC_L`%;>1aLJ_paJc_afF6@%DAJ0~~F> zqb+o_<&Ji-qpfhX8y)QqN4v+-9&xnC9PN2WTkB}=INCoQZJnci?P#3RvgPPzT@kOJ zqYZF0$*o^r)t+1tZ?vP0ceFztEyvM{9Ie#R<~UlVqcu2Mv!g9@v{M~zxuad|Xe%7; zMn}8D(e81yM;z@jM|Kp9qo2UyMw*m>-jCLW*swod zw1_te*AckVy#uX_Z{XoN+|VXl7cCjrEJK@VU3}{j*GxmJwyub`2$xQWqpxHMCXM74aU#RbpsstSjO@jjPzup0h5rD6Yc{O?&_4 zig=&lDl)V$tSjPez*T5yUD(?%SH$a!tH98;lnrdh>tSjPG;))yE0_%!+Ex4u_+EVL^c&Fou84OTu3SUA%DN)n z&A4KQcAIrYy!&zG7}`VD74e?Hm2GHGTUW#z*|e!4fwx+2~=oD`T1t*7^@b)|c6 zSXac`i+%p`P4`Ay7bU_q$Hch9y3)OStSjQZ?`XP2MByUdSC00rqjhEHzkK<6fOSQ@ zZ5(ZTM;qp7BOPs=qwVWx*^V~Z(Plf^97lTtSB1&_Zk!E}E8W}6x*}eUqv_nSd?TI? zyH}bR>#Qr?``Wr9-Uvxy`{ zJK7zN_OPQp;%Lt}+VhU46A6BL|8lfEP7oZ;J9>JTTUWYwwRJ_jS8$c17Sg?cSXadR z#)Vt&!d=4o0i}}eU141j?z+-Royv5$|M2 zJKfQ)ceLL++Fg!zpQAnFXwN%ZGoNU0FmHRry3)PJtPAOMv~L})ccveMTv->I5Lcr~ zWrcO6dpBAaItN!XzUkf<))n!7#MNYIT<~jL5icEAi=p+ku821f*CIn3Y+Vs=H7>m^ z-Fw)&BHo;#p0@;APw#f?O84%tu88*muB9f%$JQ0`zQ%Q|p?zmv5wGho&pXc0dRkY+ z%fqFV`6i2XA@{gWfY#GnXI;p>bs^)!J?~d0#w6=P#&Ml!Xp^lg;uYgsW@yu`E8>;o zI?2$gtSjO@f=h3sW~_@oYJ}&V46Ubks&%D%XIfXp8@{XWo9^vqT@mkMT&I{A?^sv5 z_fPAJczcfI3xMVw`&d`R+aK3yhIX)ZMZ7q!Qw=TOx+308TxS^CZ0m}6^KqSNXbY{2 zaJ%_ANcU!2SH$~+qy5Rzw%a`jH_*Bw-mZ?ehoen&wEZ0|*U_dr+8jr#bhPDrc;4CM zuc!Bhb)|dnSQl^GlXJo*_j_1Z#G8QYB17BHx*}c{Cmn~Q6? zq0O_dh<6OG^9`-Vx+2~(T<00usn!+o&c}7Gp?tP2YO*Mf9O-8R-0@eXm}vR$}S9PJE8d(P2b za($UHtt=7?wakLX0?IcIL+|jOf zv?oV<-sSMGr#E1X?@IS}ur5Y?xPD`}TVY)huMXF>hSq3Z5pOB3YYgoK>xy`1;kw$; z&b6+HcLgq;7EbrBu`cXCTvr;}D(i}Pui{d!utuy4eK6MZRzO1^SQq-hx+30Raou8K zJZoJM@9(%)8ro~tg`UK9v!Q)#UG#alerss!tt;YnALn^D8QNCX74f#kb)%u}XkAzU zxNb1C-K~pugzI`k+t0cfW8=Ec(BjsGe#WH|rF-95SHzn=!Sil~*3(;QUFqKK))n!} zCi=eV-Yo0FhI6##j`oP7J?3by?(2ECnUsf5@?Gdo>q2wky4~buwsl3k&-V|)eQ8}0 zFZY0eHr2W!-l>jurlVc#XqP+M?T&Vbqw(EW?|zf371l++YF%jgEZ>)$S{GItuGJ>S zYU`qxw62JEXtwX0?&Vk)ItSNZOpIr&E8TnEy11n!$MgPXO5WSLBHs46o-wqYtP72a z>m@_m!@8(xTrV2he%3_}aJ^t?Io8GZx^O*jXl2%g#>DlUq0O_dh}VScSwmZFT@mjT zTu&R?8P*l?F2eO!L%YnnBHj(So-(wXtt;Z)jq6E6yWhGZ-lw?4jdX9Fb)iLLoJxk) z)9aP%yVAYh))nyzalK+=7R}JkL>xy{C<9f}|mRT1gLtL*L z+S%3>@di&0-aFK~BHk!R8|!FO94#+No5C4a((CD6Y+dQz<<^BA=4f8r4~I2}>kSiQ zg>@ly))n#I#`U(z-}}}@Tfp^}p?zsx5$`8lZyH+KRNocxdgFS>(E3?d#M=qiyN0%l zbs}On`nHZN_7o#leLd!eacaFAKiRXQ8Vl1()bnkfUqJ=uzI!8OO)bsvhVw`DR>E1ck z#oP$4_4uZH&skT*dmYzzhW3_qMZAx3d3_Y_GwX_Y-{Jb%g!|FDB3{ojIA+47TUW%} z4p$FD8)#k3{^IIxXd|pE;*G`C&Cn)V7h?llT@7urb=qw6m>?xg}gb8rs#?g>8ZB2SZzBUCb@v`rgpiSQpj;)AS6??;uj*7kO*hR$| z5L8sgHmKj;=bjwG@y;{PyS{nX_pWaZt`-0J-Bb7J``#pkU7-r>2kHZ1kExOiFG2l5 z*lVi5Lk|jlipIh>s^o&aAABmFuqsr^1s71*g2sXeRdS(ef4F-A^)-U8yA_qOFpVl$ z{RU`RQ>vh^fvQAeETang8dZ?TK=CT%L6uwx1tljjj#6bTWK#vJ=^*i{u@FiXoTES) zlNh;F!8wX5xsWtiylO0@PzC2zP$ndX;Sf>5_jXYQR~b9XST3l_Bu2}hMFn0as=%+u zST19RL*W~ANDLpU;GPXta`-YK@v5<4NEKKYlqrd!qzbG{6O!1=bxdUIpt?1=a;sjl?)g6|-YAh(Jf_@6BI*E}-m9dad6@;KfplXm99fL##UO%ejLOx?fjG2vw`$8nf5UPxYVN`)v ze2jS2STLsw_T!*xkr=U5!G4@7xEd^81rIY-;K2Z8L1JW51s)8lV5cxvylN~&Q6(2n zgR&$s%*KfdNC$pym+;#KIKR6(1As!w7pqY7+K6_hzd zylO0rqDn4IV{8^<#h@Bg#*y4}qNt1oTdKgP1?nfbYAnp93hpw3vLY;%D!9uCsv%+N zRKZl%NOBKvvpsWcyP8IAiCu#EypbC5~j0G_^i?OIO7Agofke-onjw)l}5>?;< zpDbQA7CKQS7wi~QFxHo`0LF$h7R1pVazZ>Oa*!! zRj|f`YDrS=Iz?14QmBHmFt&=ZU5xExEFV-Wl1j&^qJnWwm0VcB*doT(Ft(ntEXIy9 zCYuJ|7bMo4DyTVCaE=Gn2Cl+6o+`PJ%fjWcaGw|}Wh{8QAhaVX@1x3C$f8Ovd;ry+ zr2K^{xMw{>jA1NvrwY!YjJYv3jImLSxy%%V4kWh}s^Dxum0UOvsw2tmGF4CyP@M_O zqY84HC8lC5xKSk+`Y|?$vC)i;V{8gzGZ>r8*nGy8Ft&oRO^j`2>;Pkj89U3^1;%n2 z%VR8mHhfDHu|~%^qJsWHm0Xz3SPWwe7+b{H8phT$mc`gn#=1rcLNAhAELE^VP$d_x zGIo=(CyYI3>SH^lWwhUBnQqnxCU`?h9?v=-g zSB-^^RKdy)st<{Alqy*FsREyZO1uiEXsTfM0LqrcNTCXPB2{uBkFk8lEMwt2;z^8P zs*HsRRKc!_v7?L?gR&$e8T{K^RdPVzEF@6{ zwqmS=G24Z3r&WwW6~v$lo@z=GuNn)MRKb%!pn^z@eN@5vL6uzi3~C%)H5R^71*0)p z5XKT_LKS%UKm`+4mn!hdfEq(sbE?3@2Wm87-Kc_lBA~_-=0X+R69F}Wu>Mp*9|sje z*a)g%Ke2ffK}8bQo+{XFg2I$x zw@DS8Y#2Mo*e%BHGM2|!K4T?}ePYaTg*FcvRWNTbX2qBiR5X;uNXVuN?zvJ0-piHZ zRXAT#1?ObOnld&4R18Taiz@KJQw3|lD)3mtq5x|ERd8Pe6vlv4B~^0a7AO@-#cH*v zzz;_i+*M#Kp0Qh?@L4D$!D@}DAO=-(VI-&olE)aTJ=N-nGg6;Id(s^r2BQ1b}eLlxZN1vQtjlT^utOQ7NiyG9k97eFNv_Jk_%D1ll) z*lVibeiW#Mgngz;E___8t?!>yftM~#%Z#ald5y8Uj5T4b1!G+p>%o{aWA2RgXKXNI zV;CFH*i^=5GB%Gf4P#3gTglii#`ZC0wjS;$gAI&?Ayh%np-L|72DOY>Xg^ip4FI*2 zu+vn*9uw3O!fsL}7aoI3CF~hh@cafSe4Y-T-=GTa8-Q9&n6N=q@cag-MTD7B1*gUG> zZW^d`!j@76chf*^AZ#;La5oLqdcqD;B^Q1HwT`eHs^r2=P-%qyN)6lTMfsRdD_Qg%*PI2UT+68mO(nj0DRqqB0h&sFDlgKxL5_6RCpd z4nZ9xY&uo&+##p~gw3Z4o;w7!pRkow$%PD1`v}XVN-i7%wU@ACRKa-~)E>evQzaMf zf!a;jBdXv&1gKqvy`l>#W%RdS&=sO^N+qYB0ws7%6IQ6(3; zf!an`FRI|_MNnupVL_7nsFDlUK^-CNHdS)rDX7DQy`Tz8kSUe`R$Z#VFAwSjgfkMdsDc%iDzM9TK{!oP zsZ15znF93-VHQ-u+70RyVNI!mXSYC|B&;h{u%iW)O_&Q+azP0SO91{;s$j(ibp{x$ zzdJ+)>n~MuVLYg_B*rAF&{qj#{3x@ zz?k`7c$xspVk8Ws3QiqV!Co2EbyCuFs$j1S>Kb8tse(_mfVxW9DXQQTEud}?cAYA? zX9MacVYyVnth`Swfw2%om0U<UJI2^a#x65#HMHTqDKs_aFAywe#0+mPD8mhq01?mN1+o^&l0*-6*y-Jl_ z_|BNY3Gpg?MvN+Bp#@`I80*29Gh^7FDq8164>^4pnmD2B<#>yF(SM_Mkox_JS(7^8@N5 zVZ~H|$M6(9zd@LcDpjHNQRoUt6nE;9B9W1ksI zJFU$lohmp-F?N$NqchrY##F)6vy3?~=FONNV}Xo~WNZ>+;f&2;OvTtj#uhWSmaz?t z?PP2(V<#B;u9D+2W=iP814sK6&k z6?{^Fu?)r@g8Et+^JscSRB%^;DtI1~u~^2;eih*7331y$zci=gvNv!QUxarP)!KyN)>qRK{X|80#&eMd;|Bz3CpDl z(kq6$;bMAJL0nL+#JE(!%nGVCVK1nH+2<|Xl_t!ADma6IYD?H{s^F>icW^(Mu#r^3 z3HLL2k4&(QGN}UJL!b}*iXZ$MAhf3<(ABFS{EE4wov$;z6|}!qtqAn;_J?b({;qI! zkixOtH9HSqg`MNTzr5bx*W1fEP~qiBG72O=hpn5oqoSXyLs{1TBzZ1xKYwo@A1+_} z04FDfZ=k=occ2FpSfQJycYuGOw^N|EuOn8htR4YgegQr{-oB7Ypp&<+r=5TKdeZvC z?~D#AmmVu)V1S=OCp}sQZy$xP9sXc^pbym3)eEdwmZv}b%%hznF`=)*8GdO|;R`h> zyRI1E;1S^G+D{Sa>Fp?*+RnqnyFYISW7)U5b_`(Eg!#=%VCSJ5PQm5nr$A$u z<>Tt*;O*-R*#}Z95~G)0*P($5Ute!uowyD@0Ret?&Wb=Vox{1MR?{a%ScOD{E3HPtS2bHXOmb!4df&8})d>9Ai6ASV;ep3KKy)0u2|&3rb;< z5DM=@;r}prH(ZDiMhRo#-4M7QCX9stgW+8`xfTjnhCm9#;r(!kgYQB?1p*rj>Ei!o z*IGktxJL+AMnX!MMi8h;5N;G`EBN4GFL-TBO8bAOykW#LlY|Li2_=*r%d1<~|0{NF z3O2bhKPy7uZ@Qd9|>RKJ2qT7c4WAnn0^p^?cQGn zDIcHxcrZK%0e0vQmY6DZ7CH((q_>SE)(OXIK|jYaFcDrSz%To@C(Ie%DTRLIN;qxj zzY5!5{BA_6{&s$LKCbW-z;O8T@+mf>FuX(eApzuP!TiY2f;me5EZE77!Vdpi>56^Y4u2=bf&75d zKUCg-)5YH<7%BW~hkxx*_PbpFd;P%A}y@{=e9F{%gN~?Wg@JcJlMZ ze{)XxzusT`l*7Z6qGRMASug(S^n8PckD|r5tD$G`uL z^uakZGHh%pG0Q)ZexT2!2@{~~;vvKde&anTysTCJxq4{xA)8f+Y@jXir)I=r*pnX& z`$z2ekF~@9Qu%1TiCJj1|B-tCZ>B3cKNVAgXixtq`XQG0-*iXfoc6CBz#ms;2b`e( zxq0Z{bVWbkzjpZ74!Zu%fBVD#FZzQOJQr03X3L6#HK@u&H3bDv&H!r(3ZAP0)fN;y z%mb<;s7ge21tlZO;O@qHi*7ygN@$du{r&YEOi&M{1rz-RE&h)(DaoFjCd`0LhLoAEO_CuCm9<=w^J?+#V z!J7^C#4pXQn-Z+Hjhnlo`Gm%U&fFN)Z;SboPTrfH9w#2?TAdzI zS6;ifFfX^&jthfZd2e<4x%#KCd$;ueSV`g3s*BTt5mzD)IsP#d?Fe66Bt*d{UxcnJ zC!-B@-(#6|-(z^RAJ*B{om3N^zG_F3NiuXCrSZ64RTC-`I`6JyfVScpwmQ!+J)U7X zUbl()tyaPa&zPPIR+S#BH)IsBYcHnT)T|n7du+u@?^*kv3`NGr#kS-bwk6N7-|-CV zHE2W6W?L)W@Z25M;F%(9zAxtCn*932v*(*#Ge%?&j5i-rge-B@;C5T0K6~w`xj-4R zv0f-Li&jlOT)MK`cF(wORVUBbd<@y39fNN#>N>-2lk3^cL0ez$MP{_bzEZ0Ja~xuS zdAxZ29*>^L>|;EXe|Sz%Y+Iw}^=Hyg&yjr|wrOk7vIUBLv3f`6JYU)yS^D78u+P?2 zZP)hMeq+X$yB5fPxwF|gvEM+uZOPN>B>y@21v2CJ-S_(b5vy1{;o{;Km)EaF)^+|L zg8La;kGV^hHX0c9@+q?91_>6nJ=@!@IdgYckFbpO$ZjopKX}j3NlwQK+U$MTx!y!% zSNq@h%N}uB5&d|I+0i$@{(;P6K<@MSgM-|TSj`#acs}zH+BDNP%6{s)`5sG$efT)M z;hYs1Zg$5_s=P_I-iKG6p6hFSy#!gT_b=z|8tOS7Fgj-SDq_bRWXX2MMaJ7kdn6q= zJ95_JBioQ2NUuHDb8R!n1k*!HE)0C$30e1`nNi7W-Z(5=TJ?(IYpXNJ&W6=FUT?)g zr=7p=+?nvkbvd%Bj>=74P7QWWi|~K%xU5-oWS!h=t^96#qw4zELbmrWvdP#_9~{2D zV)K9nVTLqLtC$V{ECKRS`^r%1>%bLg40a2K-oAKoN4X??+d zaqn5n*B)mwOyBAdHJB?m#=$}rM;*zuD<+Nk0S{;-tIcz>?pEduKS(H zb)DlKH)c>wz4>SCk-ZFgxUkuw7Iue|y3Mdr27Nv7KWy~fr_`MBYC z3^&qeN!N3)g6(6I4~Df1yV?xdzAm1l_CDS2zH9mHS%yo-T|n05{oUAl%l0}hsgW}< zx7=gw?2Cu?C15fwd2goQVe}meQZws zTy^LZw^iSgD_^VMo6HCPs?W=249{|k8#cJ^s1ps;7?#VbS352h{2eL5Y~BN=&4zX-M4aQ4ZfU|gKV5t zX7=nDAE(qEQ=c7CmYzq(rw7lG{=gbZFgFQ?^TC(l(LO!e-F8r|JDGVkctlIgqfxWq zi8JSzcyH)(^+L1J^G+ZOj;OhChrFS~f_uXP4(@us4B5$kXH!o!cd=V@bIn=(=LboD zv3uEAv#`PkhaHz}I|W-7OvP|_rtX~_`XbPNU1-$W9pNv?d{C+JlJ9p8E_a>VD%GO0 z?~0cgPS30Doj*P)yfrnhS#N4KMzRknAY5_E%X81SjCI}OzG}o4KkHnKyLx)B7kx}8 zI_>$c9O>5cU^+6JTSqLu7QJygP;I8$u#T_NkmbA|`uM4nm&@|yBhIu{rJO|eEu_}l zu9Iz@G#)#;{G1~XL1s1h)X3vY7P`!f&t7Fa<8C!%yzTLUM4r_K7O*ooEYEVHcY1>Z zd2h_}wqV=?GV9f2+O@Ec+4YC&;O47j{PJ<(c`>1`7>;L#!1%QS`?LP-%ePmxu4}ei#>h z_T00$hI0S7B>l&etWs zyRO=|c9>brZ9l0zus!(n@I1lW3Qrb(k#9^!eYswBJv7dz2CrUY8}*dG&HK&uXWN+g z^*wIA-a0`l5BvZ~?x3r7gFaStIW})#&OPe|hcH}6Zhv4Xkq0uqEP#Z^DNn|1Hkssk za8ZTsy}b>tVtUTMzf?3|u){Xt#0B4Nn`)4`nD3`pkJexPAFj5T?6Or)cIuBAZe;!C z`yci-+x*`3TO6I>9Mh%wO$9d%g6K_WREa&?KM+RKaP#kHXzP|F}^ft(3^UTtpRGR9rx-?|@vXDVzkTnWES^Da* zwfD;QY0G}9_3;Zb*T0O@=azJLkZZpL?x5;&@<(&3*5Y^T*(L;~DmsbAk7VyzcPcJ1J$y%)4_FJTb1< z(-%paQH@>pY|Y#`y-KI*cy#pUDr(LIIgwAL!CbS;DQCArc!0Wvj$%lY+t^(%wokiXXKc2#O<3OR*q!;0I%Bw+Td&=6S)OjUHSXS=&!fgJM#kF(*J<7c zXj7g^&54E(F3EDNYpvOJ%(lR9BDQFKc?+Ih_<0=r3qRhlzofo#FOEC2)NcL3Cr)3_ zzb0!VKR;VSxKM{rU+Wk=a$A#Jd1|2L=n7a5pXVcuFRi*(_2>g3D)7=3L(D_!??AlM zmbHDkJ@ZFa0)?3CEW_toU)?w^r)rX70Hrt=1my~g_fyJrrLMaJ71 z95_F)`VtK7%+G6R1Lf5QtCqGpY`1U6#nzpNZ^}caDbU;-pOtER!gqC}J-M67S-j!r z&D~}>KX%ca+Y@W|+@9knI$is3Rp-29|;xoCfU;5LPO+sWgQ`4{J03+rR!9M`1UivF|qjFqY{?rHe(b`BVy zFV5|JxR&5CNwDekIQ8sNk3%tCcWt-6at+6pmuzjC-S)LEQB$@KelBZq0rTa@45r7g zzvzM4_#|O;-5HG>cDTQ2(ye>FXpDPq;#Zey^PhO6_4YcmvFfYG$kv%-PJ)n4UIizq zevf^e9}881?XDT(xIHn{WwVQI>-1jJ5->eJ9PU+khB@;61@{Mh-^H>FdhcR9@pvuo z-Ljsx;nzp6!2QPK(X(RjWPNtq_RA#iMdP!(VcgKkr+5Bgp5VH$?XK%9^IXs3IDZp6 zQ{Kd+k5lZMif4=jz2i8)3_qCjI%U#syOgy#&B7{Q?}_%C(%`ad<9@Z=)AKF%ZLQOg z%jJFejoAtF`!sRc zyKTps20Kb8p#9c|n#RWr%XFT;N-!s2Ka|<($2P)wgAb<<;do{MjJN4Bh|9M*t}{Htb%tk#z)ajjE4Iy# z_DG(VoL4X?Dh=(|VovsH>$uTgJGyUb6lm6?5bfvk#(eZQFKfp&_jA_TdOhilOy0Pl zMKvpX=Zyg+bw_F}i$Uw47o)&#d1YZ$6gTb(a*w zeEG6qINr{F609pQzRhtQ@%6=avz>Bp=Z3jv_6KG)U1hiRcmU?X+jOZ!TnxwOp$Bsq z&-8)u`AUsnJR9)gaE{;^+J$GhHu7sXwk1D@;W=v8%#bD>2k-LU>Rw~P_2w3paQ+)w zwd4D`_bVw@_Ntm{_;AJ%sW}nL%%_KApJ!N)--ZhHo1De9ib<6j&(nNdTvPIDXYSacmMIP$JTiC2@n^5F%sfL|@eJ$1Gwjbi!#?EwV0KLS z;LVQedSAb9d)bMs=NDUboHpRO!fwZk@!z~m*Y?G>JXn8wtB~lMwrhSlKeflRtz?~E zJtEWTWke0d+&Lkq+glEB#BjYkv|c(p^R4UrCz~r9Z8=K(lqmFKFbEejrYshZC^L&*$*H{rZ>5r3Vx?dcP?98ls ztGf-cRLtGGXhAEBOU}p^HSE&;!ko>n%Wvn++;i)9QnwEWN{Tk!?&)x3k?oWq({o7} z?vPc+mEl+7T-G%eeomTqauKrOBepnuTr_f-f7ABRy$5H>+4;rTpY6B12(F1y6Axrv z%bbhhV)Sh`g#3BiWrg~|g)0%4NPRceZ)ssUOJ%#wJ#)fZuj@@QoXzW!tv!zY>UrX{ z^T(OHOvU~EpPx*+SiH60v~;uHjP+{bD>##KJngX0OqXMwD*7Lfk0$%hn&WFadv{KA zTifp0wq7N!%>;C zJN{PldyAQ_$L2fOZSVG)l<)f1`;q4^?XWxOv*%(|yB+H>uCM+o{kem4oHEmzjQxJ@ z`7LC79-KbCc>j2(BloZMYH~ZTJF*G2CLZsoXz7{xqTS>BCx?wkrv9)?-+YV0E2dt( z`-;{#P9tma?qP@9O+B2VI@K?DbHjHUvfu8nZ~5?5r0wyyQ@h!3`$G2FKfkJx_Hye0 z&-rtE4j60o(ip=HUvq1qY3vraE#00~S~+Lra%2%NW;@w5=&#uBm9<|}c~uQ$BV<3{ zpE9wo*WqKK`gL#kryv{Ds#@gG9i1HF?S8F4>-RRqkJRhR`ONC4>|Hf3Au_9XmZaUz zmwYVp_7Cw~y=?xkEAE$&a3#t9)fPtYaZ28QyGumpT6-`(hvnH*I?Q_Rx@Pv}!}D5x zxsS|b(e-m5^s;R;=eFtYcFl;)#U+iKg>G_u>ab(7V#MT{>K+*G+iwp#{o*J%ZryPs zXZdNPd}QgKp$+$(UGBD^-`kK+=WR&c7IOYNoWuCNyj~iN%SrB?w{>ama=gV3{STEL z$as6|7~f#KwM?=4t6$^v8du2K-eq!~8!c~IJE?^xVP+p!nPR?tdIqqDPWnyO$Fa>J z_f0XGoo@7NM9$}YS#a&)8P0z^!}+hm@%v_5+c)z#QD@|{8&(76V7{9g?61A3!4S7? zE|JCC?kLH8#mB`tmS={*TAthdSY2f6HJ zZU5c&c1}C5+F;%0H90Zls*BA2P?gt1f40|8!TmkY@SM!YMH`e%iJZ~)z_0G9-@9Du zyCvd0t^s^FDTZq(e@3(dcHs7_N_u3c_adE%KGd#oc49|Hy`$>W|mS9aJSW^jxevlbE3RgHT ziFDc0GAJVMRYV=MOY1Hh`mMThqw3l!!my=h=YEjNqme{<%_LYu35NZd&jb7YtP>9H zGNSxl;-jAB>8X#Ab(;6DVZY}Y_Gg}9Tk_0Mf?>YLq82`^zf)}=cc52kUDs}8?dDmK zL|nWt$>)Ll#NXGn${2H@n!}Qz4aZ-}@F9C2J{*o2p5d6`{Y^M7=Y$QWQf-!DswT#@0D_@Z^SCY!vHG2HLxo*GBj zp5nB_{Ohj^D{Lb7vAZuchivjp?qBI<9wT=4S0s>@yt+yVVm>er1~Vb2OrK_ zg5lWmYgX;+;x8Y)7X4y)-f7Rrb5do&^AVpO_VJ6iT~DX4spJxqzjO7#$9Jwv#l`u6 zkBeiKXE>MeW4{5gaXlK2Z(VbX+upSm?o2BUA@^(fxJD4}%Y`YN zHRgNM6bXOc@jq1Se1TNHrm!~hWigXrRe^08Jgs@7#8;j%zYW{qb8eg&ruVMk(Lg`n zm$oZ3&TE#OwO%2Whd~nf1wIY_WV7Xz`>xXqI`3aLW(|g`vU9NV@wWq4Ud*d5l^*`6YjT48$X zHdPmEPPK8JzuNs-#g?zz^618>GUmh=DH=iz^7IxjonZfb~xUSJYnC6~jGqoNd!CsgXlw*SIsj^Xj&iidzZl z#zUlz z&T(=5cN@Hj{f2pTI->ek$Mcze^7xAHpYEJY+UP^DX1uZ0OXozJyA@3PcOdr>`FvMH zJ(gHEFX+*5q+|N?wl9xtULA$$%@1E%xAbcpr`3yV_s`W7m`K$_4)v&Uc5vHu4>vll zy=9htc)A^_ZzZSS(>$|Wy|acnwYaym!7_~7WBmB3z3Q8|uc)%{@VgAx=E#;NW?%hy zHr7%7sPK(Lzi*`9|M9*d-WmCKJa5j~_!EZPX?F49vwiXIshOBv)xs_gY%vPo@5?6WA|dctz(A!+}ROVvxA#n z#`M(AZNKCQQJzU|^*t|z1#Lz4)pM?W`s%6P$6mQ@pJ_9u6S7%X7c9s+nB}#pPnF+m zoS#H&x~J=i?9ay2?Kd~Fi5pYn;%W@X+q4Pvp^q0H{dT6A+yVxL^@Hr)^HRs1^#^S{SEp5PWVfuR<}?^~#%ZPcOrOO^3&~uU{M6{=!1ObYD}FoV zyWKsBoTKi&m^sL4)8I2(r#J3S>dS|#26IWz+Ap_MJu}}mZTx^|Q$sG1 zGxo%lZSy^3`&@UICS@43J3z+5+al(D6*s!-P* zOZT2>H%?ZJ%(+idU!OUp=r(gu2($oM;!<9eui7cv^qqM+|3g z`?6-qoeSS~~jHo{$Y+hz%^4l+17Z#|ww8(GRA? z)UK6?aesbWE$i;76YhsEPggoPRVDWaBaSRsFx}0&SH_a*zwtl-d)I;IlSxswfUWWY%^je=$T$$;f>)U_Ka0WqzGOa^S&?6+E<^P z8&BTY{Jb>E)_q~ewlAyJeMshrwl&*cTC}^N$KJ5D9w8kT7-8J|-6y|)o>bLq>x-`^ zr^FpPj%=QM?DGuM=58z2mgdKV24o`p*mBOvl$yO z#v%2|kelnKJ|(`iK_~W@{Jv(cTTH{^`bJ;3@5J=Fw%_}EY*47(#_UX+H}~%MLuOU! z`0>e8{5>`lx_*6fGWj(!{tSzIIG*8th-bL3;~DO4d4_&go}sUlXZjM%5Lkms*Iir7 z`nc}tbEED2Eu+bOKRzz*pLvGoeV*YtfM`3kgw>e=g~PdfQ| z#*BMEuJ@a>WX$mQm~k)9KOcd4IPEu>>HWpmZT&Zc+wJNP2*N!0=NYgc@No@+IdIQC z;MtUC=(pg@j5gpIrpM=j;r1>Xo3=CISFerEdj>vle!djT$LE1I;2E|#e}5Xo@%N|E z2GLe2cY56J<+$B>Xoc0QZp^@Zd7lx+<%NbTdkhnevkI! z8Rp9~Opj+c&Uq%42ilJhhxJJEt{*$_dreQZbAH_uU-pLJ_~31TW3ad1?U^-pK5)!B zcWkuv(`)Uq-w!d4@h|o}o{gXXumW8Q%Zp8Tw;+ zhJGKOSxK;;Bv?ZU)<}X`OE4P=))?5CO|}kS7FTp$+H&ToDA~r%*iU(e{gh|ePkDyx z2hXtY@(kxV4?Bl{@*QoG>LoQqIUFkZz_L+%T51wH?_-9iDI5$c? z2eqmG-KcP-iF-`VHz(_~^w3~>Jj3*OhIZi@+GTc%vA?b6s3K$iIAgWPvGtJc4-E6* z!(kpg!#t#(Z+aAzmC>tpitYBLFBWe$iMWI5@eI@B8K%cGEHlrrEqR7*$un$Ao?%<^ z4BL`t*p@uQ`HE*aU-1m*E1uze#WS3nc!qNm&v0&%diIECXw$w&!mpm_zTPn|cSWz9 zbw9O7+w)8+9NL}_hqmV#+MZ`->fM;j}o}mqRhBn|C+JI+h1D;|3;~Dlp zo?-vv8TLP(VgECz)ob#z^?$f7GVkZy`u+VOShtCNC+eGLx!b8O$AwIK@-ZOcoX8cf@G8)6t&$Q+tQT4a0o-JUU3QjuNbs1nVrp zx=66D60Dm9vy))<63jt@IZ7}m3Fa)pTqKyQ1ap&M9umw`f_X_WZwclj!TL%tUkT@e=SV~Sm%)8lvTmf?JAIlIRnxl?@{69P9+$oZN(0QXWn!{=@JHj-lcU>81| zfdn%ImORR5QR;VV=d?kCqvHq7S_EG$@dMM7VEPiwK!O=cunH2aq68DHB+3G|;>(Qf zadUpw+f`;aybt&B8#E;_rbN#No+;Y@tog;)z14Ba3aE21Bf&{B5!Svexm>%}YAM%i3dZ9mt)0bcsB;uM$u!<7Q zNP@{ESS1N2*#1~PJqe~S!Ei3&ZGe53XE>Me4CfM_2|hnE?BhR#8}=j9lVJM5W*eRH zo_pZ9A1CPVUA7<^%NNZtEME-AuzV_x zVfkV?hUJUn7?y7y$FMB%9K-cP%`x1M^9=XnJj4As&+t4rpGyzVgBp(EdGKBDokK6= zE>oPSIQdn*)%W~xUgH_ojb~UEo?)4JhIQi^&WS%TiEucd^5M{?Ji|8U8MYA>65FVTkwJAVqj1xuCKp2?@>Y|@xYe*{VDbrNVv6o?2!t1geJM3wY1_=WO0xgCy zhsu4YVJwIa_>>c~3`4*lmJzk4#3vZvkJB3mKhFh!-_eUH^e7=^R4a;Ak;OtJR__~D z&lz&dQQXBKnvz7%yL~YpR6s)#_JQ(hl1Z}q8W*$g*UKlPY#f{fW0a%}w(F)SR#q#Y zd_HvF!dW?rOEiOkOTHS#T}bw>rmDu?{QI@?36_;>CqxYX4i?gQUg`_wi9VGEN%+#N zOf)4L#U-C|RRaXY*96?vKv89^s5y#kZQj|wP&qv?lqMdlgvpB4)W|e_&A#6#UzWeG zoH15zW{zSX%|NjaDwYk&W@8b|SrL9P`VAPsV&ww%fjvG|NCPYS=+w<~Uthj%0of2T z8%ruc4j(V&+pa>r() zgsTS87?GKv@C+oTI*h>u)46-$63g`DQ+=`F65yIP0*osdMrwOYGCWk%EpNsz+*?3F%->AYlVViCU4N@yy84!%0yS zkfBkSsO_O_xuT_@6bAFLo@j1GE)*mm&5oVrhoMzA5;l^2(nvlfi2-TQN@aG_B$MlBNsQGuB;}Gc zi%g=f8gn_egT-GD+Iq11!GH@$@h#tV|BEIt`|Dwt1MBQKvvERV;xw4jwPOjaotTQi zH<+}$A_Xdv@;9wH3zEX#X9qQhcEwIe`hB^9qE;lRA`^7Fx)a1wMMeqATC^ubfprpC zvlrIEo=QqVuP0~=X-0Z@g4*5?N-Gw>Tyv9Zr4GYdTuhB2=d$(Gc#VNt^(0B$_udrK%N}<;Q~jSmHz%OhTu` zsR;fj4e=hk-jBmE)d$j1r^sAL&rFQNWXpGMRb+~wtd9#BGmP#+mV#EyiR%gRP+=cI ztu5OBWLD7Ud*rNfKbAN#K_(+*?W++p(vZA=Tq2H%k2PD{EWh|qzg6G7w zEvrHz>b~P(zd}0MkF$`*ysE^^pfNQ2u^i=gHX(4LkenGTNS!2R2B@zYT!Y$TnS3>* zn3#+8UoVJ8kc;XVsgGEHlu&>CkFP%o1r3K=BxRG}ZqTtwoyCfK7Hd15nRauwl?>sG z9D5Ve-inMITe>0qVXjY*Swqp)iB^zrPMkHoVw5M_@jZ;wM}xZlXbVlOKDMtq&JqHt z$mUsq4IB}Arm^!OfdV741>>_bJ(wVCh-M7PP`kmL{zKPG&^ITROwmV+YKI+c;WHi$ zX!~PN)1=5OF`On=hOMKstYX=W8iN~3A z8FtrvaaJnZA(m}Ha}*?ShwMUI77q5Lu(jcOzZee6tSzu1o}VJhtXk@;x$Kij4l5+d z0fPdEMxV}uqVy;d3j~Kh&37^s0OmuVg;pYeaFAj8l8(;S(ff3CnvPD<(YWH00S2iK z)6qCnYdKDA+I(?9Yqc^Yl>UHd(8N)plg7etI7}HnAtI>UYbbmjcqsge?Q|hDe1>Dt zl(8d&Tt}7Dqk={ckC>oz5Pz;EOzN61WDpbvKgJTOm^jJ@a|##A4#aRCRu#!|6rT`5 zm!lxgfv82Rv~zhD%loLsOK z-r>P`PGfvkdO$-)pZxZH%2YM#q`tf!cazMzITuHqX5 z@tWTj=ra(FYD-& zI(om3-lC&d>*!=19apCD>`N+D7_JrLv|_kc4A2U1t#HzcURu#nD_UqpL#?Q-6}WCd z)&iNTP=F@|Mxv}Qb6c2zsa2yr@KL-c$UelBW zBQCc`+kiyX3twUO02j`1XmJ{F9m4Wksvm;4FAJ_AnU+6k{}3L(r-df3A(NBue=g1q zD8m1sIGCR{`M)cUA39Jv5F4v8Qf_q1& z*I?t&KWs1BTx6Dx%T`t=LY1qhluC+AiOg4K{rVG+9rzpIEDnX{z%dfT8E6!6?EGQbQJpr^sjLRwP~@*f zXTBfd8s2}>)Xp7sre0zZQXflJpFFi9U#%$8tr)elXxiHuZl| z^&(YdkvJT#LNc0??*T>3n^g+afDP^kO%I-nev11-(*xJl;QK1WCktdcS4yH`Wfp{} za5!X_p3FDXMpkV*x( zA*MR7rzV}du)a8kR2THsqyraLUI#e|s&j^9;1!x`BN&Pi$kjmTeU>^6qV0NR_BMeT zqXgfUU-!fXkN9&d6jTIjbN<}j$9C+%)v@q3cXsT#H$4k zYVc~6Qm>W+V9uQdU0D-QqUtUvtsygbgN}z1IPR8r;wegUutY-PCQ=Oayl8h~hT!&6 zW#IuH)4)Qa*1f8UN5b}0P~zxQIH&uvIUhFNpR{{lLo#l_oF;!|PMm-HX=j2OniA3g zkDww60;CicB>6+IA??dNF_S zs${AnGX0PqsEW)WHpnQz%{{h=X)M{=$Dzrw7#f8cxNFs(;(}8HMm*f^z&(dN zhlHV)@GQ~wEtyHw7+vRPnyOmgcaiA(rv6|P9e;3|Dl$z_HVhVIe&x@Z>-6=7|`?Finm{e)F12!n|PJ#4129U)Ix4Ah=k z;;us-kiHHs3V4^MGL}Q_nW?FP4h40S5$(o-f2bHTwAA);@GoVl zPFlcCrhs&f9o#0)fL^N($kf=ujJK<>+PG@s!epuK4CIDMF}HGxMSP?%xp!<4n9lTI z9R61se@03jmjLqKc6@z840~@oUeqL_ku?F9J=_eH@+>rJ!6Il((}Rk0U>MVbef4{s zQrf5@&*??ffC8HybkSFR){m$JN275Nu27!!4&w|3t%2LG`A}VO#T$-RD~>`MM`0%{ z&-#ENdP0bTj_`tMna1H6pu_pm>cmj!869q@Q^VkYb?OxII)l8<#@B!tb--M8z~dmZTv3dnzEq(O$)$I zqQDahl%rUM=72q&=PGdDso^zpm4T@WA1dr{W3)Qe0t((CTOC&iYZ_Odyf!4Sjmc|s z^4glbwkNNh$!m9b9j%V*4gZPO*pH@2JXQ>C`F%oYkqHfasV71NbB+V!r>$ zEadusXBHatzcou|sCvOGD8*md<|7oF*d`kSp>0mV|LVB2op^*(uh zOkSVCE7;~Y_^+&|EQ5FD4U+~$$1oTG41<~eC&Q5Ie`^>R-!v&0SlS`+A4Y6pg@O-| zaqyJ#iy+*;rNaq);Gh0xLdH2$XF`TM%;c{aS{f%M{5uWWiYWMwJ8XFe+Kk_ z?SBSzy;2qZ?RiA&Y=FHIZYsz_GD>q;1IVVrPze)6F+3xphT|Isk!jlud-bA%*f!> z$xjBRJI}$D(P|gS7_Rh%gUct=og_JRUpP9LsAd@I&uKxER8}%Q2o3XD7E!yy4HD1C z>=0B!%tT($1auZIi&z@9-eLR%Bn?LPqO#~`*vhIedJ!$4(yD9=@emIWI@KV{Eo3Y% zw=O`)a_eJK*zCU!3IRt$|AFej@dvh!Rq!qg_!{iZ3-Ihq%3!Dtc&Jf4ROQ3dCJ$AS z4~?e6{mh5ot;r+{;dAWqR*+CQ6cWp^HHSq`D1?0lJZ)u;57-qtiDB@=C57F^Fg;Mi z0S3dE!cB5;W{`ADVGby)DTe8TTrP%z;6jJ&^2fnMSET>(@9)lEc;bVuRRK@RBcLVV z=x{Ic12o+S+HH#Og%m%DgwFGU?1ShQp$h~Rj}CYnPwceOPvIw*1lUB7iP{%XXMa6g>1~h z(i#^_jd?QJ@f-GVGn;KhwlszPU}LSC0VQd!Jq+LwQ+3CZfZt>qDG7Ldrb9`LNJ$DC z!I8NE+9kpiOA-MN$~=4y4qXCyPyi@Fp7x|iw!3(Kj4sN8E4bgq$@frectiKQ)F%W* z1YZx^>)yhIaunCZ|1RNwq}q_Bxqv>=OfWQYuV&&kjc2CXGn*`R7I-QQFo%t&8ElE! zECZ)Pa%@#v1v|n6Siu;Jynw;AtCv}U8hWxuVQmAG>UU)mDB2%Tv0&Ho5j;z^Q%qd1BQ<|xo? zV%1@+>721j43f~xr4G3CNMUg=ax3)at+Y3%-wR2961nPL$X3`S!LI+3CI&~Yk7ho( zHBU z+zXkji9^xh#-UMA`Hye$QC5hD2iPW15$LioqQEC04gobBTj@de7G7cp^0KO^B5#p7 z?-ndYYI3eDgd;8<*U-ASE~Vldb@C`Oe4#~#U~|A9iD{$pyakW+sh;U6;ZYviUNCK8 z%$#TpDmETu(oz$EnW%Ejls`c%e2i|k1u)eNOQSia5Sb)psZPQs$G7nq9oF@a_v)U< z$))sr^hx{`RaiIG^M}DTn5I=(cn?`nnv(nw;vYKXn!+H2kU237b|58&V%{Py4H-l# zcfGnQGFwnqCe_eJLIVU`QYQyvcJO>zWN~y(C}^^^gi|J3&sr04i(E)5y8ww)z_$=z z9WCCwEY>Kj)G@n62#x$`c^2pnH?XLtDW@QYIw@Pc3eR||lTV{YtCVPxv6AYfb0X0m z8lj!Z)5K&n;*=J=sr-P_9gX{8T>&o!^v&W5=8z6cL@Qv9fu#+q(^%W2`pUW_e`sI} zby7>(DxNLX@oiBD6i1&b#uAli9}$8klL3HnRji3Yg|6tXI#0KV#kCJURKA>L-dMcH z_!et&xO@oRniN9!f*e$b(O7Vj#QU~b&M5S+!N9=YhXX@fF)-6U2yc2Y#tH(!aeAC3 z9p{GXINbYU8>gaBC+9;5)iKmU1e>PLl`jk2^`!C53IZXsah9+fgCs~~?R*J)qFtst z;gMZ!R-_{oVNtQ@D0FhT{?|Et1$Q_}9iu?&;X}Z?LW*1>j=89m@x|4{FCgK{o5MOoyY!Q7D-$MfG`B5lvKCn{9XNVAIkrntm zCa^Okvq&~XQAcNqSK)zfb<9!JXqFO944Fluvqhp^sDGSA>f^$V79cO>HUX2!B#;Yz z5K3kO39(eP9TB?AU1Flf+D64`gtm*hI@%gjz_%^c$xTUW#TD|gMD&9Ncr94~fHRdQ z9u+?7(^bbKr=3OGl`m)6vp;MWXFM#gUVGRYqMuY7o_7(Ju;U5?VYTgtq zT!N2ZLCb5W6tlvnq^n^_91j{#yxbH*m#DIbV3TMY!%SzlSFAeKRhxndsTACH1;bu~ z?A64940lCwzP<%%s)=t~^ed}9&*dmiW0A=2684q2API$?Ng{0_j_U9^NJKBf8WL1x zkUqCJZCfl54DjgMay%I>`uRrzFLRTu!5bK-{JG5~*1 zw&VMU5f%^0)5TDeM+2;=DKSYGsO_WGJ}gO8KO~8Jd(l%VCW-G!k|Z=H*%ZqM19~9X z7M71Gnh{Aot>D|`Ba9BI&PV|ox=-Z-G)iO{`}C@2Hd*!7^`5ij%#z(=5-!n<*1 z;$%b|0NT061iZ@@aF78XL^ahHD>!Ik4=p$VFNMSYGKLe$wr>^UZ7EUZ!;FQW&#(Z$ zk!OkN0esX7{6?wxA5Nq~;n*zLSqp_DL@&}{(Qo8m=t*)bbcdRPm!t}Le4$wN65RIa z-@)X-=YJp`)1jUMF}XToa@ED;OvL0WKx^v3AxZbi5RCc5AN4+=V+#M6bLy{r0b(%X z$SN0J>@MQ{*`9Ftj68h^KS#(;o@8Ex0rE3AK4coQ;HW+Cl3Rc987El_)0t_tK znbDlFw&K#nf22SxL!aQY<#W(kZnR~{DIcQjW}R7KI3^#EuTI8W!ccKl)-@31RxxBt z?h^;xg7YG-QMX9gTk2$-#j(^1cr=AL1fGOkBE>X=3+jN=If`>=%_kwJAAc5`@{!`< zqh&Z_{ng!ld>p2y&b(6g%s~lESvV5#FJDK844-BnF?w`RnBUkLLGbKBI6PsheQt@2 zf9`ovsGR845eL6^pz9a5|I0C}UszLn%~J+9%Ct>qQvPv6djAmp9_UZ;he94|0dHup zCVr}6YB*4VW9n2e3{)iX84!Z(c1<3|?D~J0dl&dD%leQ10Rg8{OkH6f=NX0a0OkQx z1{*SEFxUoY+I-j^*mS3M;9#J@pm>}!R4^=mg@s9mrbUT{g-U{nhDwS>ibl#B6(!kJ z%Kzu{{odF2x}R}fyvGcEaI(5M8D{Lq-0b|82#$g^koDQM~Is{ z`Zgs{h_>9ph5u}EH^1GNHZ*S>=w8{+0bVvRxo{_ajM#XBAUz^|^Q`DM&yzP}kg&K< zBL-+N+B{7CMMhAL|4u3f=yBNkg=*nipPyybkyo7Kw#BhjLQk)y=Of^9Cj(@62yG|YT_ zgpTXLWX?2c++ge)U3aWAL1D#yu$#9&RbPQf*dH|{g$Zs9RiYC$uz5~#9}Jr0?Xg}o zWGZNw7RDBdXpS)aV@>mD4F=0gZcFAZZ7H~|1w&amxg%vz?Uw82p~F|+PXXunCdk_C&CB@0^e7Pk~EXerDc zc?Wk{$h(6}qekAr4HtMfG6NGQ|4J5)YDx0R-+^CVVTyYkr1qR;7 z;7yJm)$$1#6H8wC->?Q%2VXizUMfFRUn-aWw_h3rLDOLI{-~r3pdjvpF~qFRGPFX^ zg+>$iOOkJXY9Ka2aa0kTpg7hN4tfnuUvRN^u!ZADDFq?wj8CHc9JHhXXPq&O4wXls>kY1X9C+^3MN*3nIyEFCO zxszH7M_GhhLXgcT11)i4Ekm%_$m|SnUfDwbbFuK2LSMck33AIBN_lo{!+WS*`TmL2 zRzj#_+ja|52~th-O~|Q()ho%?a{9e6Hz_+7(Wza+3mWtl0ktsbwIFuOhF0*YuxCYX z8j3UI!D7V87T^}Pb;8S(I@%Us$`|4PX;ct{mK?zll`^1ZspRP^N3|@FJUu$s0>>-) z#jimfdhnIs(A2;QSANskx0I5JfkSVMN=h%T<;vV-tMvI0IIdf_S$cCCLsDNzg{d1z zTUz;)289+!A~#J_YBAF!1E@;`B3wQr;W8a9EWdSMmaSO|2{&I|l;=kK>NZII-vs5P z=$8)0OaJ%U5nqgc(ZftY|99<(s^~ZC`Yl$#h)x@*m1arKC{{_Gvl*L{lFc|Az--0~ zn$38{Qj*JNyoiF1PaS+V_wZEjp6-k-xv)fM%9$J$6P$)}q78(`qmgJFK zB96INNz$@Jyq}HBV?spJb+<)dAqKm6+m(5lmKJ5?M#|={WnQ=IRTgey%RHrT5sZ4J z^e46;z*rgb-?|Xbz`~M5LoD7@URfJ#hSN)hiTd&J#zaloT%PyxhrA3OrjUkK@HRIL z5;-1$c18!r&-u-E>w`fGCg1cX4a z0B9de5H0}X$P4u_-IKZiNc2urr-SuZrv5rif2Caq1lN7~_wC=m{~`F_-9MLH`I^*! z|3~gZ>8*J$7Njptzu42v0V?Yp!ONY*CeZw%UX+?uiU za8UEpNC5m>_M&vOZw?Zeq_5t*FB5KC2Np_ayJKX@{>BS9BFF_tN6tv%CN{bB)lmR0 zHfrgMr9WaxUydDezi?k9!1iZcx;|+C>id`Z_n)Wl#}Zq8JLWw&0Eu_C^bOvPIWK)T z*82orK1l!mfB(MM`@D`xb;KY1AcL?49i1*AN;&7FQQB+&9dPOA0MifVEKn$5CILUk z^*Q9Fmp(-3F3k+3B^QG)rp92e-^WOD>E{5`4;FuQ4EiO8$nbM?-$S;%^Z~p%BYAiz zDPhApqOha=1^>>2e4oajyzdOW4^4C&s&i#Oyesbj7MwAwSR%ndZ%6yf{#BAh^?hmf zi&=(L4~AZNF<%(Fr)5jaKbR;-_q*qiEl2;O<*AleAMGPG4qlIh>f;s>iSdSx_Ftyi zarNK#KUO_;ypE<>$BvwSI>kzmC-t$hn$#5ZqjM*dC7JUcWCjJ)NjIu~T{E($MdG zAop6oOZv%%<=vG(F463emmH*iDEdxR{Z8eJ3nS-+|KIC(Ei5FBrPx0T(*+wJ&qPHR z46I_y!Oj9K9Q+Uio*xDSp8H>~-v8!&ObelC*n4qa2A4b`x$J2_%{~1No_;5I8tYPb zy*Yo!>(%ezh&Aj!LftN7YzMF)F-Uy{$IH;GEPs2mdfOY%y*~d%D7+XbYaFJfwd`| zvB4hT1>%KnS5ZyJ>PM7Q%z94=-WT)zY0=9^>;x$Arr7YTGb-*gOa zM9(*I(*6I<`KC_k-Dhj2R-cCYVH6&VA2M8@TBRS<=$~laQeOD!4xYjkcm$u z0zZ5P$;~n!3I~W0*vy3DZRTHUvm~IDqq4+id7N%(v*ZHVvre1&m)cC~#%6h(ZfUd3 z*os^Fl7Ata!e$Z^ZYP`Nak|BL1m4wwr&5o|2sX|ipis(L7*KVYzn_HYPFUwkK+GQF zo!jBaB2)DD&@WP?VF9wZ;ySuiSG&5n+D)rMu0o4Wu=>L9cTX`X??5*tp4Ru>w+Dk{ zX?=Ta9mqh)NX_z828x0T`HK}xr(+7G>w=vF((RN|@K_E7HKDnRdT&2xi7`-sgWmSD z@0ZsR-9Qxkj+r9$I0m^poh8xL!UY`&J~4|`+&+Yp{J|n96A+oh!1(3ZduDQ?n7A%sUaoA!?p(P z1%F--H`hp#hY~tsL1o!jk9+JK+!FhJ+c8ddpdAYkt>J)Dz!&(qiM$bU_DtvZ`)b6e zF^2NOfkA?U^5#V@h9xQX3!<9_Yc}ANbyODU-*y*+38|e)7%2+Qg6c<#f(S3hnIP6P z7-Nlef>rX2l0Eoaw_Rv^p>O*|@@g6=$Dtzbq~yl1u>7+0w|c_5FdN>u@Gt>4R^?sxQTNNXsM)yR1K6!Xf*9fE>#WP z46o+DDq&c0{h!5~*h@oWQc~#`IJnH+^XlM!{MGg?y7JAPizJkBbat26+%4AcPAvxAjw$*7!-O?DXu}d^|B^Mnp8oNRoJT6Y`P>rIX<-xzS2}5ENW=QCm293ZoD}FaH zWerYh+gsumfueD%(MNg4F8|V&8HugQA)&R+PX3)#`Op%67nCiOXY2;;(&VjDbO%?M zv6Ht-fgD_+XOg$Fl6J26{^YH!sc~iVqJ9V<+=b2i+eg7z3Nt--YMzCXGad=GqRa3EQFJvwp&^NS4~a$2s$a^Kp_LCE zrKUY8bW@$MSI2~)B`ckzR?{e&y7v)Fb_Njth3hD*PnkKmcSfq@JNQ=@<;@G^Av`CR zX}Licw5n^?!9$y+6yiI@`%=2dJ5b+u8#l009-<3Y3iP43s$2hVULX(A1uH3rj=He0 zO3Bb-l{`cjj1)$Jx}a4OA*n7HcJdIO3x{1$zlOtn_{L5H7zp29+;3URxEa22$#a92 zZ*)_Al;`*d+_x;?ecr&|Zu|$=Q69Tmvb)4;?wdDWWXU4cK2pO zc|X^vx3+Tr8q?T3WTQn+uht-wBQ~;IMs%psM21%ZbwY8;bU`y8B$*hI#JEXkXg96B!1IfHi&GR>5QxbO@Z_ZoE(A=Cy zyRoKd4$M*V+l)5JLa+rR^D<|l|B#t1SkQ{yn60uAsj#(R<)q-$^On2?TEO#luCb5W za&fclvWzvBwB)Vi6U|Q*I%_x+fUv@$JAAX&mZ9behMQO772Ki_Zna=mc|F$B56xSj z#NOlJl${c+itF?ohSWM*##JGh=^Hr$9;5q(F4i*XqE!wO3ttxXg3O@>>yz03TC!NH zm2enlaBbh9#YvX&C}%e46U^|b<*QWFSZaSg9&9by#K+vbkxAt91vsSXF)Uk?27>%R z@6rWM=6b2|u7GQau_aF;Y9s|;ixBS9IG^4t$Q-$J8vblJ0$Wj&E0|fZ^@OzyuO?f0 zp+znyWoeS!ItI58Dza2b)7>T*v;n(lpW1`@!wt>zH}su_Axds@!n-$M(`ReJYG)T3 zTpQZYX~l_Afm>eSQ`o?T3T{JceG%lmwk=rTq%FVJg6#GHxy1J;UUNVZPou~(9(Z*bSLCJ|5E}5pL09f57Uxy@P5Jj;Vt zkyTJCgjVXfDI-*`dxFibZ&vSl;{ypMbUrazf$tY(p2<=QCxg4v4jrGqw#d8d;0r7g zd+NAfX4&J%Bh7TJ>GM|MGFx9V!UO|g)=pk>D;~R4>~A9;U;>7n0o)oO75i3R)vUtC zQ>TiZ0|cztA92OB_CJ^LMNK!cu3EGh7*y?fD^WeE-xJGQ3s#}_S&6SeXrjqmo{i6B z=&mKcU8?X2czf{SCRX7)qzd1`j9ao}$I#eb{yO*;!m6tG+*iLBnW z-RbI^r}1E`tS_^%U4+|C9I+BZ@p&n}c2+?j$q#M>REx2LC<%w$mf2LwB8yc^AuPrb zoLuFy3}5eHy~0b$f@Liw%aZ(B4z6V43Ov8Y3E^d1VCGAE@S8QqBQDvaqS(@Q4l+1) zu_CviJ;C`h92eIrhf;21nz5lT1U93NBjw>$%IXbN2RjE~O=wg9wl`7SS6q|osl1&o z1~c2%!K*yr7LTrD&47jfsm%#wBD|HMj~lzYYbIo(zS>9QLiGtMhfN5gq1b+jW&#%i zmqgkhF45Kg6DqzOX)zA2IzlQ-iRP}!6ldmiSE4tql6XXMo>uG-WOFH?nTa0=6=P{zCKKtf2hai!ufk9m@|HYR1ptR2Hrb zd0boThe~U`y%GgW^AoHnu?JR<1D%2s2azG{h!mC(vV!xJish+6?EBc-vcdo+Ubr+| zG50%!w(P^k5?@sYq1wDDE7Y6u=Szpf(^o$!#jTca{~iA#LBhYx2Ik+(qW$|&5B|l@ z)&CuTY5n2GBazKh;?PaKV1<4MVkRTCQOw}opW2n(pW0&N09#K_?CH)c7#;~%FFuYs zLTR`$-f&}SW%(SpmyR(7|4fk$zJ1$|W(k{-YEb9yb-2GP&JLB9diy1)Ix}#3F`HWL z*r+w{LKEj2>0hh(EA`yqmCf^4vg+cw!EJ2Tw4k#GlhIP% z70WQhFO}mF!SEd*2O*1hrtlk$L-? z(D&Kb7rPEQ*o`+yuO9ZV*GUm-^)PHb4I2>} zk#rAVz`BnuhqbV3ZRfhqJ%tV(S|Y2GT+$4mpgKcM&Tmf1F8-aVlgUAJ%kc_)Mj8U! zXn>!_3ih?KTdCi!avlmzEZaE+>w|Z#hl%Suze`e)95*cQS_{vv?ffoDVinv8T|w*R z2iiEURgl^3xwy@nDpJbZ3_8WXa9$4Ym)#l4swKM0&I-e8nY60Zug?rh+ z;CR+Ny!i2x@kckU+`aT+&_WExdV+6Z2HRdX=dIC4sD`mQY!JlP;gWgFl6lLqEi;*S zZ>t|bz?lntS+l&-a`N-cj4OBp@tJ|)mEA5PkeRi!jm*5i?R)kd4vHAL=w7_9KFH5Y zH9zyqqn4jbb_Y3Ex8upj2=y~y?v!@jx)*%>u*;d%GS-E>#w}(nE4E56-98Q){@9{> z^c;OuzOuO$32!SCUUn##?G5MZz0B2n`%13f%Urz=K4SJ;=avL)M1X8W0zWcTFt~R; zqYvk;(INn!B$e$)>o}7!A~ciXo|idC6a*YT8VK9gAdj!%!(Bbnm(3asbzwjW4N7eG zOiseQ+-tC5gS_I>q5LH#EZe~zw#f;k^ikC1m#Dl|F83%N6h{rTD`#;80f7}T+dc<`?&SU zo3Zws_2}K=SWGv4_BjysnMsa(I=|W zgVpHF^#frSyuf|HZro#8gsEvScNgA=%*L+oPi9(81_LZ>wf%B6r{&BV(%W{;P$ArpFX{BPHTvcku^PQ~B z_AKh=UdeuGV_W8D*O#tXZSsQM#1yQop^bcSVDMl&S5zU5jAP_w%5zbQ zc#qR$IBEiw5JdtFx9c@TkE{4)YM6x*XfINu?;nQig7SD{JS8!@^e~M5tL=}oe6;@6 z0sMjXngmGD?v|k-W~}J>px-0HgLK5Be?q-G3|^?$n48*uhUa(?3P!Hh0Nw1#PK-wF zmrj^uWsZhuNRgP8!@J*A?h>Ro&Yp11h}hgV70*`ejtsuGOK@M)9aHUY{DpM)Ab!Hy zL60ps1sB5U4#PLwWfXe*$UAo79?~7cpkRA)DgVN8ZfYSHm%4@tS~MBSMZCiF!NkL3 z$&fgCNfQ=d8%|0=Lh8q6CqyOaT9%3^Q!YM`>(ghutQtV7?Z;DKV77Zhr{|!F7PGvV z;ioT_knGf0(~vx&qR)}3tr35kZ+k}De>fG>O+m=>e}<*BLs&oaUpVbW^=EW4LsDk2 zT{m1>>G%c0J6MI)bUk9C`Egk}+ITAb*L{&W%v!B@p!o^b12K8r)e0IYQa_-#Jj@!! zav--`8cltvP!M(+#~C1|!eLgSh&j4s#F@jtG^j~zVs0Z%bB0=ef%?!3Gy@4FidV8uGDc7X|5s* z_U*c$ilfW(k6t)`_kccq7GSZROxy17$J5sI5;`915Gp7|cbY%kXV?0-O~aGu$u~ct zF?I>hL|?DbfuqcKHa~tX-10*qe5M$|g~Pfx=dGe3H`lDfZv@0DOo|8HdN@kr0AW5p zOo9<-TI_6DO6J#7mYqu|d4%Kn+maY{KsGIS1Va#5aDW3=IY7s^o)$R8A?=IE$-LDq zw+<1FHE>$8jbByC+s?156s(q2#cQNBfHz%=r;vJfE_|91&ggZCAh+@tK74pv7xoi1cHoFpt2O zd=QCpC+1clgro$okeHgogE#v5qU?&s)RMq=q%+%o52-+v3SN~-J-qVGY0XR3!aRgj zDm>Ti>(sI|fzxEgZj9W}ZdyyvshgKaSaD1kAp+MbsnjaTXNRxg)ia9l?RB*RB0S-tL`wYk71Y=eM;^2)~_I^zD-0QBH-sapAY$wmEMZ zefMVdZSwX^xWwA5&3Q}p>SDfqb@29axQV~y?W++oY`<~zUV_FJZ=nw8Xuhc`HVd1Y z*=I;u*v0l)Mt5_mSkJwfuY@c4XhL{SH3P2D^`P7Edaul2(20YBonFI9Shv*2Ruf`< z*49{4U(UyD?b{@6gKp=`+dso}%&6;)xR}1=Iju<~7h&rv8W9-slf`9g@Prnh5`K-xQ}qtIle%o2rL({h zK3>v1e|3zTg4c{JS&ap6d25nOjz{S5Q(&u;t;CiU{E2V8@faTrE$TzZ_=kus@`*4! z#CeNBOL#)A6le6C)}Foe+a%ja(Z$BRH6!zAW5JqaYnHygWOZ@{v1JK=qTyvW@}W%s z5V2(me@g3Y?If&8DOu+l1n9yA5xxzE({ky1q3Y1a-U$-^(%4%vgi5zcd#`mEUvL!L zZ7bw5nr=&Yt)-QJ@~F-g{8Ji%Xf~gQlY`=^Xt=MfL zi(T0XHZwx*n^N6}yxe|V#k|y;1-o1jV`U2Dv^l8RQ7Vc~jZhb?&8adW8{5|MOBb$v zfFO1412zFt+XoU@jJ#N5W+)<-JSP!>PR24u^)j`FC2y*8X@(72ayOo4_Qd)je~cK` z4=oE8d@;{&k!5gOaCBDRL9N$|{FdYjmY2;^YGT{9LZ8OswvoIaZmgY+3$4LX=q^FJ z=)!1RYEXoNyX`)VqPOj35cu|5|F+-bLTkxVmR&9}x>bdv-LH)kD+Vn&GNi=d)^it=vgbfj+DW6qWHu&;8 z=w#@w3^@pI1~lGIJts}Oza2-Gf!ZFPypXA>@=7ur>7>DoXh7C z(gGtFA!42H86>=$l%Y<2KobdvB3-$T;ZKZZ@QQ{x!1sTO=_Qy0bgwL|R;A<}LiV zWRD+kg?F1DmpE=b2TntYR?>tW*~oVwLO4X{rU)cSgdC*vv@4>ItJsj@d#>wuQQsnk z!q8Uco1`!%A>8O0Mhh#RiFC?O?6@KdzR+*oG8xG7d|woFp32t(;Dm~oQk6qhXgjv5 zh%$O6{o59Ngpzc_hms_n-I&+6mIHd|tGel-m+bUA=3pKpj6L+!PI%Bmr_o&pO1kZ# z`@YS>P3(90?hU%@Eg!pm0DBOg-SyYkg|4pzqimCZOG7*-#7sQy8D>kzEPEZZXmng# z8Vq|^mg-P=ZK(`~SGr%p?bKhgK((m~3;%l>Igt6j9@oQ9l=0z%T@QZ)5B@{>6>R;% zh-VLr;dQ=AyVSN}z@7P{+wfp7Y_Vh$#MX7sG$7Qk9~g^e#g>9D6nX^od7)=P7YH4V zJYJ3--GCV99#0aw4wNla1{#6q24HPZEOv>wc+_YU=yJK%7r9vPo&y>#*DeE{FK+Yf z?zKj@8{G#|l{f9$5lG0Yax6$yP6p{a*l|!QGrGs<8Ibz-lSnk@i7l6d&J~((G!U&3 zRhemYA4uQJhK|1XF}u49bdLDwUAuM~nrwP)C`k2|8~xdcpB+_OvOyh>LwD*p?_HJ<}w1EH^XYe7TB?Lv^cU21n% zg4FE~Ko~)U+h5q-KIlKGiwuzJoo>VvmH8#B0Wp3sK<{oa`jgQSC^Alv=lJnUeeOY{ zKN+!TnIX^h!_S#QpTN&iV*NXyYlS|IpGr3xeaq-=5U&r2{S`ldDD)wIHVb`>pJxm8 z!^)7egbo7@5&9(POrfJex%fXIb_{-w7CHexbA(R8&rw2W;^*Z;!|?Mmq4V%_xX|bE z^K>C9oB`#m*p;AJa&01h)(aKmXF}*|{2VLvCHy>HY$*e&1r;E*pcT2;Br4DfCs) zr9yXtz995%&}Bjof-V>O8EBNy)1Vxo7eS+ieh1=bTL;Ac2+9@O3(6DvCupqDe?V6V z9g0jjPAC(UFZ3DEl|rY0_zAQDv7w;xLL)#0LSFz)5E=`bC^QjNC^QW;NoXc$G(s{f zHXEezy8v{JgzjR{)j~@_(}ZpVO%+-Onj*9uR3gM#oMNGSK}ABVK$C@5gC+^B0Tl|Z z1?31m0-7ka4m3e%J*Yrv18BU^M$lD4n?P3zZ2{#AZ3T@J+6KBpXgg@E&<;?Z&`waU z&@PZ#u-j;l(O#o{M*EFAKx0HD13l+bp_4$*)O_yuKKpMK|friT63ysEsu9j;B zc8!BuadG=akh;AdG)$hGVKf_bja-`#Qsu=Ub=v|`x644EmFMm@;_${7<=R6ab-NCv zZhsC^w;Ms9ljoi_dJS}~T-ym!w|@kw+dqTU?cYG>$aDWR8i3~Ub#iSWNZlR{Qn$x~ z)a^;2bLF|yjfR81B-btmsoPN?b$bO!-Hr$GD~1DNlZ{G28h#ZZ4UI2@)NeO|)Y4{< zzV|kesyqZz<*lG{#7tJ~x1bw@{$+Ph%|bem_nr;9Ug%s~4#NG(`t^lziVgJZE;_$VuO0jNgk z3Q)Ds7eQ4*Gwr!rP@P=638cz*gEYOYGI{{?Wjr?^_OLy-&hBosYsXc#OF_2?jRV~*^dcxJlyO`v_8=%L zb{$CDaNh)}%0r+VB^~@2R3-Ftkha(MfLg@u5m*MTE@pyMWwl*<3{)*{H-Kt{eg#sM ze}YuyxD%Yp<)EcvUoJ@fHW_rQysgxps{(yZo|^;us?cK45}{?F#X>KF)W1iZ7>ljK zwXE2spulF(H{`imqd7(kjqU?!I(XUWEs*vh_JCCH%b0{-Devf??cR1VNbeSdRHY20 zZf~%=AA%|*gpNPixh({#+Z#dZ_9l?JU1)cYKE=7c0HnUG1gYD_Aa#2eNZo$Z?*155 zDerv@bc4`FkjBwA(A^S3zXfT0{1K$_u@9v0H~?B9&t;q%i!B$*0^KE)4Z2fk80Ze6 zi$KeSazS4gDg@mwbSO}lWVI$tA&05(v;YPrh_zGZUkw#JOnyfo_i6b z;qn&fM{?~Q&?7>B18KM%a(*oKs9ehc{aENokiKIv=qGY530fy~r``P(uZg99GdgrQ zT*$RoK|dDS3;L{c+U=I8p(32gD|U zejzj!^mC!-L7E3&18oekgA+{F+NBv{ul<*QvMQCUdLE=MPQ4VP5Ry*Eg5DJug&-~KDnV^>?dzaFiGP=a z-jQotKp;d8N^J zjecnKE0Ef}4Wt(Q0i-G)f@X=zCoXq1*eKiR5|FCofmCHONL99hG`2>Ka?f1_(&wgu z^tm}8eeQN%llMMg*PZ~)mTSKR%@NuH()hS4$GKf$^h1!UY_e;wf#!k4<-y%{cQt62+b>3GS%L3?m5E7otUv*2RTUU_a3Nb7(pAbsw7doKTqSnN>PHy~CB8X!~x z$`C3Aag29BtP*s%Py^@)q4}VJLTf=Wp`U<0miMj)eL}AN62$T00kLO6gM?lHWeRNv z9VK)C^ntiNWE^&=3uS;fqC6lr2$UuCY0#&HP5^yc=rqt^p>sifghqh+3S9&`MCeiw z$FB#(MuGYZ<%0epZ>s=(C{zXdNT?2UK&TP)Z=pG${|Lrk4 z3wmGZ5zxPc)`9j3Z5fXl1lW=l+Y8c^IIh6O+p`lf(kqreTZj>1d2Sa-)9!m9buoOB zqeVuqfVAe^2f9O2>_0(w3jGJ9byU`5S94wkQoS#M?vm%qK+A=yK$;g8fL6%0C7`>7 zZU?E}Z$PT@Hs~92_g&CRp?x4#=~slFgIqfd^i83oK&tW$(5d3{dqJ909t5fKdJyLm z2E;ajP8Qk*$`%@2tRwzeu`@v&=g*2=3sSc$jkX(Qmbkm)jg}fc02(6758Jhkc5Sm= z+XniAyzOn!zlHW24VdCaVvaF7+vrlGt3aF~$%;({ogq|acN;%DCFyz1-+4 zM&AH&rY9@*1EY0z_Z^V>V=w4j@yC01ci=V7s$)Q^au!H!`8MctqWm04{q`G>s=R8? z9kAz4|DyBTP>?=%K1lVh0u2?tsi4maRoLC{gL35BGrT7B8&DAEpo?*BK&*{-k-M{E zXJ6~Cod?ouSK75ncI|5*&VXgb{sQ`~sJsulNUoiCT`cxzxpoOiuQh=#lxy=qs{9B@ zEqKhX?YC_=T`F#$v1@;~YaMp&wCmk-LqYnE5uoj&HwvV&FwO4X z4ANY?#I8MJ*B-NLZ`-vtyOtGqZjS@$+s4|p0=qWHuH9nSmK&`B@tfLNv2}KBi(T7p z*G`#^nGkty7)alC6(~=xmDshLK}o4K-UD5Wy8~h$+TFv;FlH_;E(CEVG%HpDDi!)E z=!-(9m1EXJXbgyRr&+P-plL#LK~sh9v%4GZ?rV1U1JD$C?)ZdDiKl|p`b$C2$=%7I zpG$g~3fdraJxEj73!pN2t^+h(=&%`%P6n0W+JM*)kSfnKY6d+idP_mS5V`}T$`6Co zZ@&hq-`)bL-!7Snxi)!QIY^afgMKM0^FSMgmVi|6K9HvIH6V5I3(#b-?>W$QqW1@o zj^XVEO_IAEphBU36_}?J$^=aiIv!LYGz2tWXawjgp;4eKg~o&Og{FbV36+Dc5PB0d zS!~`7DiUe~#c?+)b^uf?*ZNc918KZ{rpl$T^Ff-zW`R`Y8=z;z#l4_SLidBz?G{j-yyIO^tfmeq$%enkiK^rsOl56c_m0w&JRGEa@K=xl)IZiHwbM5 zRSN9{RS4|?%@o=Xnjv&|jmvp!L7T;vM?qVJo&c#;uYj~XXahBg+rNUerS&05EzPJ! z-(K!!ff|Iq3evE@7xbJc-v|1&(1Rd-$5WuW;^JA5D!&X; zkUlpCv_S4&Y1fKCx5%|?>{Jp?g8M3atSph1P+V3T*^^O=v6V zt3o?KON1sgxw7OwkcQ+-pxF{GgJ!vqoB&c=<{Ew1Xe~%X@+FXlVy1+5oa3wliG5zxvohXandcLK{Ip7TN@QRA>w65uvT1 z9|>&(JuI{x^pMaF&|0CLpdSkT8}tjI?606TB6J#PgU}Gr&xMA8o)9VkZ4#;jJtNcz zdRk}>=qaIjpp8Pm18J=O1+-04#6LhU34H|8v~l7*l=9-@RFI~Pb3y9%QqX3(I}Y@$ z&`P`eL(t2j_Xy|}p~pe0yw#pNYrfOF2DDwCD+T>lr~;%eHiJIGJF-yxIu~adO*Z<9 z(e0pDMddEgYeM&eRBtWl1+n>2koxTxAobf;&{ny-1N6Mmuv=W4VK_*iD*`ax>Lg7NYEdIjs}|O_5cEf(Pl5Ekqd@xJ zBG7KRI}P+Fp}0M_6r?S;uY=UZTF@I320yWDzXn|>*Iu$~r+*FQxY#lh^o}Tx0=+Ag z4^ms^fYj#OL3`xxU7$9hd+oU&fwqg@&q1FR+6vk!?|lWN_Wc8-Hh*B(1}$~hJ`K|6 zP67Q++@1;2lz4&N%>}(KcMCx~gsug>CR71>RcJj(TlIeewc#2@FhFC3PEESE-DecL z6~2_a$AhjG8V;H!G#R8V?n;ohxSK)m%H4ZF?+9%GsV|=asgGW>Yj4=KJ)l3q#empf zK3#eUaIY?8}PLQ_DPyM<} zR~Li!%5#^2{vvb*NL`fKb8|s|mAf~C{wDM_d+u(~KDqWS(BFkt+udJ-)V@D}{vmhY z2E8ZLZqFUH%*EShKYdT1LF3_pnnVf9Hdqayvw=$Ea*RS_k7UDLL))?+@1E^$;(~M^d*qKcZt#0 zL9u~MCCfp5guV^ZvGtQyIJeh=)NQj-E2yuyxD#}U(7hma`-(kxNr7djWTPv}z6--O12{wh=q`is!@puIv>pmw3d?r~!+*&v<8yAY&fEu)RbgVeuO zpaXE56`N((mV*8x*Y31yNF(wuQ^M8#l_h^+hm<>klqad*g0rWvFZe(^PR7kx_!f5{ zFMJL$CqH8gk_G&#JwJNW4>JG6|I?fteqV(Dyw3mp_n#9mkBHy=`|tRF1O8tW%RCal z>>u6mnGyK^l~23Nea21BD=HaZTsn60#DdbP`4fhpA3HvFRHjpQ&*|^%MSYP8jyN&{ zf1ZN>b7FlFw}>75&&GfEkMHU@RL@7s3ND^}oh~X}HS1;t{cH13Emm)~-Eb z*T(&5!#Dr&+D(_?Lg?SF%jJ)y&y14aqrR@cWBc^_4IT3Lwxh~&4*cNnFBeQN|7>qG zCp1+j>Qzx<3sI_mW#oFjlc0A(l-}5?cteGT)gk7d__X z4$14Bi+i8zg-$rAsCSs@k-XmLaBo;I^g_WT_6;;WlGhswy|dEl6~t?rX2i=Hk=784 zv~7@Sk-XMvxOYl=t=jTLm1rDg8YHiADl|?`tDz~Kc6`b-NM7S)+&d{!10ge=K2g6M zV;Ur{F%0+5?m?q-oE>LcB(HTgw1)Jc)j7USG%b?XN}n$Av9GG}iJF;>NZsnclTC-@ zb<(FxuhZF&+`FmyjpX&xrz5YIUo*C{s#s3_fpqB(K-YFbL^&4TFnKo8+~783rNk)G)ZzbV*(}ZQi*eURi@LR5aGt zRv{RrjJn)(NM0vx-U;c1eayHSZF(fHmo~kJ^t>Et1ztTR(`FR57A4$uvk_ zBW*euUpcd)v8cAGzAOQ6iB7TUki1S>TMFVgCh8~DHbRAQKh-oyUL$Q>na0E!GjNcj zv*#MqB6+Q}{wj#i$*D`!vl@3g*O?B<>!eNJA)U_Y`+CzOdA+phJEYe+eV3UY$?Kf~ z4@9q;L&bZbrYEzZz zki1UX^bpbs=iOS#7nH;?;=;cuT^m-gHP_XE^Sk7gYvGZ=^cWSYKI| zUxT2pt4}zeGQ65hljJoo#Jvj+TGO}v=9n(Y>!$a!_LYL9A%6af>5#lm+IR^1T+|82 z!_B5e@>*%r+2ll3yfIOZ5~rpdO(U0P7n&ByYo%>t7sZjiHJLH&7n=sjYYf4?Gor%Y zYlzpV^EJ~Ud7ZT7Ur|N8zODu*&1%}Z)ig+6<4owE9%+ly@bTViIwY@i26Q6JgrbV3 zMkLK}UA4?~NM0vx-!`lhF8uIrhSOc9N%ER$+g@SKPytB2yG@Ve_0p!zqNeFLB+43d zD;pZ)HNFnJ$FxXZYXshNeq{KkYK6T_`|dSOlGi*R_s;F5X2{DDhTkzwlGjX|hl=Af zr&K0p=ggd0pO}fD72Iu{ZVv}uj$ki1S>|Alpe0*6{ZG%b?XIwQiS`r5iH>T8?oN^{C*(InSy zd)RbHUMDJld!458%32MdM@@s|HO}bCmND@v9O)Zphn#*|XF4RW6IJe+En`rV)yGBS zG1DMFSD`5eWpwDx>55M&fdH^FqhGYB1sNy5A1x;^hjPWsz2)VShP(<-&R__ zL4Yzm-#0yy*GrSmBs|A9RaNDp7gJf)Ao22n>5#lmn*1X=L1Gb&1ExXp8a>%Ep|++l zQQuHogCduH`q*?xUZ!oA4B(IgGUJ`!=TE&%((p?d){-#Cp zT4~BV(VEm$S#~3G6uc%n8Ky((y-w$}bcE@UyiQNyG_5cQqC$)aqn2Zsf6}x_UMpgb zz?V{`V=Ce`kU=AtQx4QR(zHlk>kQoMrX3m9sz*)L$j&--vP_5Mbt3vNA)Q<_kU7wa z5(9IHmG!>=KiD)$UNfR?8q&`gV%$QMGRhcplc8+P1yygg`qi*`8A-lA360b6UGGU9I=bI+UYxZns zFtF22yPM~ZYFSD0nmwmyH5o}yX4aW^FETBX*NPY?4f(l9ht|+%sw%3SiD@eF??}@l zdA**~U7#1rx0jg~$!kTFPud_T&1q_^Eo!Q+j@NTSoPNwP9g^3HsP6(D<^jyZBAAbE|5xs5<04|73t^K%3LTxl94uMyGKaT-BO2kDAq z@0Gr+EigTj*Ndnx1HCKajTMRdV2Or=Poe3MyiWS?8CTh;A88kjBGVvwjfk`z*y768 zTvQ=tSm7~Ow5FIA$!kTFr>4a=*IXC<<(h`BHZ79ZipVE{)}*FH{anoIHlf^4O_SG} z9?9!P)FaV)Q!5)Q#s(iC3ercZX_LHmL_Z?Xo*b{aQT;mI+>^ZfZ0MiZwe26cFG9F$ znU^s4B=0_bdMc@}Dz42(TYL^)Bk{*mm9?BBd7X=K|H4Q+ybgl~osh~Im1R=Shtukf zrcLtN5n~0RQdqK~*jHm3B(IST`??7ynUX-;SxPvTCto)AB=0_=UL9Xqb7N_7ynbe) zv1sfSITNvRXl6qZCOc|oYTuyI^hjPWqHGE2A$jYai zOoQY#qViouqN=L2tCz%{`KCqkT9?AsOS-0koVvP_hD1HPo>f?uR#w%7J}A1iMHRKP z^J^v~@B?GfRoZ`9VA>?F9Z_DTXw$O{uV&LAd5sac*G-!tRigpPs*zofqC{O>7m`u) ztENfvnh|67DVppLp|&Zktf@h|P#cq`NAh|R=`2N$Q$kHOWffy;QKQzBi=S^ZJ(Ab! zO`JGA%n8(0#pg2paG8fpantW#H*J#Fju?07*4F&8+8PsuCUx&LU6R+0=wBAq&S;z+ zuTPY+AvYckSEMS`1gf>dv`Ahnsy*SfQ1g~Il{H%aUuilduM<%QaRLBiHPzMHnowK5 zWf~-}5mjHRhK~1y3N;C%Z<`j$Yem&@VXd*1^+?KCZxjp=GtBQZJ(AapNXLQy)V3lF zuho=$LF%nGJ(AZ;=htyawD@ksnA)l;v<$GE3K^GL511CoYekfmVq2hP<=lg&LGl`> zLBE@|hhYs%0}q)7>7X=<=hkU``-o|fyhc>oX1oP{p~m?5bdD})disfJk-Sz^+ksm7 z7|3_!;m^!H$-7UNrs-Y+B(ULe(;#_`sQQC8NN)+l)fk{EL;kR__zk8-@>(b2UB`E= zKO~OW6LDh)zclwG?>=34(0x)j@`0n*Eh& zk-Sz!Jc|~}3oNZ*!gp3_JZ~{AlGlm|7txwH8@-_*j-EI7B=0_=jVGhrEWEHJqoF}o zHL4vinhwe9MC3!&an1a|mX}O}`-erGx)uM^QW3GATGWbqBt%O6aG zTHd{58l>K8G}b5LTFlU2ZKgr;8WCd)>Mu05so@rFQ)jQ~kb0?8T#KOb36DB|GaZuG zi6|%3o{04U|1d3**NPY)P^~E(6TtH0lo-=I@lVqudA+DKjfKnAiPF#{FZ@S8c9;&y z>qNAhrl?LnmSon|CCYQ_D`#o^e`Go&uM<(nn9k(d+D4cmw*1F5NM3_GRX*LdUYL+m zkSFf?WVk*l$-9dPi(Jffl%W+Vzu4Y#@9$?iB(D>Z{sNtG@%nN$OY_U!*!!WTL-IO9 z@S<+kRRuaMh><5T^h_nj&Ecj)@;VXaaG+C^sHgwno*JJp4U*T$#=UOJPG<`?z^DzG z=APu;N0bd=_g6GkYTx8&(;#_`h_n%CNZPV}7@sx`lGjKdHyALQQ8`mOn-hU@XBL+Y*0ST6J|uaYj7#t*+*rQ<22-s-qExXzB!o>NSRxiW7u9tFR3%cbVyz&qMi)GxFp{d;?x*w8YHig-j)&+ zO7$q@u$V7s>wV62NWIk=Upu>#&UvOo@;d3$-{__Ww&o=#Xnc<_9g^1>0zXHW4dbzF zt!!?fCi(h8(;<1C^!XABp}EFOOoQY#BHCy{JmuB69d_aV!52)6G7XZ~NFT;dqbRos8q^tMIwY@?J}3z7E5GwUSXQ)ki1Srn>g@W zicW4~M!cyCzGE8tqUn*mUc~rZcX|_NCF<+3l1TKvWO^j8m%cm;Mn;3qFYSt(4$12b zNgH0Sz9_`}kk;$vrbF^N>C@)uc!R7BkU6;ga=eo^%``2N*BX-6CIs083<(EaVCvjp zIwY@?KL2Bs0d1!0G0+O^sWu&w*NGUD3gRx0%c9W>mIe3tt>IK>S|qO((FaIP2VP3T zsll{JUMqchEBPg)q+veGv`AhneR@LqA5vnN&ov#A*Gbc;}+8(^;V+@&1IQt5sgKrLGl{u%Qxw;)z#KFhC)VdT4H)6ub19mSX}`z zj!e^E{4S`r??_%FefVm959gxMVj3i`k-mQ;Wd~MqOEwjq+f9e$b<*cAH|bh$`TY*l zA$gtjb&<^fn8tF`AbE|5H5fs@3b&tg8Zpf_y{Xa9nSaAHNxjt!x9z)Xe$zBbUNe2Y zf*GHN1i~Ks`%q=7@fw%^WqKs97f}YFwHD_%>YU1IG?PkmYpYT8x^%J1v`Ahny=}SU z3QH#^rt7YQ(x3{J^zl8@BYC~_^|_eHl3X;tZyF@8k-pxPa!Ip|29|WonSb~VUClov zua~|o59-bQ8aD(jwyiZSlGjR~kF*~ui-&^z_#@LHd7UA+AKhkA9SrHnP%HiRW78pd zonF}!8n^hV>5#n6kY3n>9wZwD5S&rOTuwIb%Ng8bcC z3oC(xF#m<=k-T1d+X~{1WfiC(RGx(o!~H4KB6+QdJeXn|64WfT>1R{C;G z{RyqQLd=SE*4%8GB(Isi9#hRRSgz5)*>vdvtABrOdZga!O%A4j3$XwfYl^V00YN9> z_k!t>yxwr!?`9up5Pqq8=qV*+%_USBC)-Subzn)B(IacU8`X?zIJBq zcuduE;*B=FYFZ?(l|G$Js6~xggS;SHHX$QgubURhYo$*ovYDo`%w-FWST?&wbEj#N zyyoX|e?-^u(jXqtC&X9{7mT|J^~s4ZH(}9(?e}`qbV*(}ecmmK&%m+)>6cLutG;L` z!|`p?BYC~_c6Os@Ju21xlj)MYZZ_W8-PmURtil^-mP$KB?Al}QN#6YsxbLnUSNBse zf>&EVH8H&ioA*Sg-E>G^Cn~&DN7s>K3>_u8-^9i6`m5=Yyk1nD7wBP08}D`jAhTK_gJlGhp%kp@C`xq&AM=h$JcokH?DY3nETpVKMg02XaJ#I#6W zD=N%GHX)DeAQp87m=4M7oP~Scod2QagWBW=vhXam4l^y1*Gk*gRIM%pTGSh8dL*xx zwymjpwoYS^X^_0eSv~ttl)~eeN0}DMYxTk&N#yj?r%Z$7HKNLaP`rsfR&zs(ddHX^ z$?K(UOKTW)X2A2`k-T2oveE11)o?!!8WYs| zylIiVR@yY;wZzZCbd2a-Y5r;}$oB(D?UpP;>o z_4ZAEoya)TAbE`l{{$MrAaUTIt4xFBHPVki1*To@1afo7N%$!nz@do?X-j*Cr|rbF^NXZ0qXxWT6& zPOD6dnKsF5_sZ7%22Q3`6~sBPq-FFR(<6Dkv}J*_71=Caj@i&qS@0Fp zBYC}uwftH}Iz24S3KVq@P^U4_n@yYKwa-VmbaN(8sjrWe~DIJWLZ4&AS#Q)61#2Wo0NNa)pU$b|R z{5vkk{VyE!JGiw48>g$V^9rMc44+#~pXBw^j(@oL5{xI z5178RC%f~p(S_^8N@^-G`cpMGzntaijLOj7=Vhi(^7_3>D>)4fwPm`OH>bWn&c+DC z;x5x9dCd{H*UjFX)btnp{XoQHy}+<#fE02XZFMr z^;ORQ_nI!r>-Mtj;i+jHGLjX34A1YF9?9$VvK|dKUI&6f9DUa`Ne8VNG>20)?>9}- zL26pLgN0@_{+!D-rb+Ue5&JcR)T4z9rod#3vVpZUqA9N`F)LWsFY*6F(Zluss46aXo5DBl@`J4O;tEui)m?{>5{x| zuhM*~ZebM;8g%36kC`sX>!uw$a^;`t`mw|(OpoOCdR2xvJw55n<{6(fP165J)5e1~ znkLC>_9|}{)>m@7yfYWkBXRVMX_5|7v!tdDsU0PLu;DV$eAYBcUb9#Ax64PS>T?p) z)N`gy^4bySd#0vU{mb=>adM&G553iNNnZC0c<0ET>b{(++3~s3M$|XtH2B765GKDd zeUjJjRsK&I0nvDS+4M*UsTW?N5ZL!y(<6DkUbWq23PeXg8Am%zi{!O>)o)TQxBWuW z==H4YYa98nE>6tZ|+In zefqI08?ceE_`ozsUL(Q=v;ugxP=0=HFvoqs+>^Zfh_SE0z3k$Lf|es6n+C~iM6@H^ zSmKm;RV8|vwe@4F8Y(%c!!YT4xSO*gd98?Xw5dh8ZltMXa(G10V5;9oMxS zrUoad%s(0Cp5)y}r3<((DnpB!0`$WX=APu;N6eM+{jN1>36wgYG#!%HiO9zi7Ik$+ zi7&el4)!n~X*wjYlg1wGmxoS~?!k0>cC$=}-P~!E{JoCt^J%b%IF~zt1JxG)P_}8}I05+_tb} zbkUSCMWw}87v_l#r6E<5Mfnpah}JOEB6+P5u(z8&wX?6e-epp{ z&oTET?>?gZlJ|Em2&t26IwY@i9PWLlYk4j@uFSf^+>*T8h_-^b<%*%kgrC5m4Of~D z$?HVaOR9r?q!?hvapl$_u71X%g%4J)%)$8YHiA zJoJx^2-A|fGI2Y_+>*T8bp8mY?PNH^`QvKSA@xoN=Z92tXRE6y86MY~4$138)CCeZ zD8wsq#8OHhq11FpUMF3?)n=*h5!0UOrbF^N>C&7mxJd+OZ$g7Q3DY5YowIPSoB22K zm+aWZIzODW#}6wc@Th22m=?)vMV0MLGpT-)!5PuI(X>cjD`LD*?FxpAbcly1#Oi1a z{aIsrB(Ik?Jyp!bS<%>r9!xV*=gX!;@;VWHMzJdxY_vx8cy165!mQEsNdG;(@Vx$P z(<6DkbY)0>o%5l_<4vYP@*3&VXwYCWA%@j_(;<1CbhfyLk87(hFb$H|=po;6oY+-U zlAfAPhvap#VP|*kryy!wHYdJ*kaN#nXh!;h`pX&NN2kv8r*$R8|DWBOTP8YHg~ zk!OpFatljys_f(^X*^SBrRk8oPDHy^bWkphubh#Po;WqWWf~-}5fT5Q(K+8kM&j$+ zrbY5v5%x&<2E#)#OGSI`GYyj0NEb&w4XGWgO@rh$BEnb8SUasjvlnf7z;sAnCtV&5 z{F9O|9yA@2*GZRVbmg@_xA-B`AbE{+e#$SzJ{-5b8_OW*r$_?MFPVFi zcb~?FVEvM}VY_LNyha)uILBZ%yk_o6-hD(_!El6o9A<(}8_sfyMaPWf~-}ktRIVFM0L#{PHt3{%9JcgU|>Jp~gF= zLGl_AWgf#+o85)+h6bEJUXGO&)M+yvlGlmKC(sEGcZJwQBhO!*obqC!!p6hZ;!$p`j&y`lo4-yhcQO&1>kC zyKSz8w?wbQ^hjPWB8V_GDybvEvG^Nr?C zT2|DFU44#lJbvLH*Y11Nk zt%!cVg-;O=TejSx=T3aav`AhnqD=K#p>r;eHw}{4h!`8m;n&*SCrN_i-zAJ#m*^gB zlGlky$AM1Qb0rxsszdTR5n-)5sCm0P6O!eYYLUEFHva0SEu>n(@iolnEMwF?$-5tl zzqq4<9|n+5T?y-R4xsnJ&reMy&gc)MYu#hAPAE zD$^u+&4{*x*Q}ozufZXs^){lWdJ{~K8^UAzS$(xB6+Qda>=yNKdVIerF?Ir z*tAGqtEV_|Tc)GpWUA?sylzi%(pfhgC)b!J$!kXB(~!UQaCjHD*O?B<>qL~LVVydh zv*eC|l5}#tX_35EM4QmGxZt0IR5>t;>8;FkNM5HWo4k(yhTja+B6+Q-w2R~5n`(mZ zTa@OMmEqIPdcZtf)3!>}BYC}ub%E@{dp$OLxuOZHL$JMsQ6QRCrb+Ue!|_))^R=m( zV{sCD?d+yHHW-7iebCNY(vUZ5CR(nOyk1nfo?=^36FyosNBsB|(;<1CUWFG=^JZTb zhm_N%n@x-4wIb$yQvK+)Y~9;J(<6Dk=rF6p(Mt8`|KXFGNOI+4>l2A0epN){V6o|u zyk1m3)i39k=HL?;=({z@hoI=subB?X>qM2kP6r2;H(>ZbC12fYS|qO(v1Suv5d4}i z$1_x`I8l|TtEiOQ(o?Xt>Gzl>$!kV@E5yPq)xU+ch}^2+ zNIwb3drg<*btBfir_r5={92Y6U8{NaJElwWx{>*;+c4EZD8|uuO^@XDBFpv&J><4V z2#DYBH%*e)jI4iBHOI#1q|UvsF+Gyki!7&7^~Tj!CwOd;*!DxyB6+P|+7`}oqW7@r zk$SC%c0kqiIKC7b%EF@esOgcsUS!#>ejS6+Gm~Pxt}`8y*Xf}wutN^1@tA3lyhaac z4P|>>yk>3zPJT zNVLM^PFqcflgXA@OXjiC4XguZjrbF^Nr{b@Zqiq>iJAJx*g^{+rVHzZ_ z(St24A5-e>w@ioRb$Vz6gmiqJz1y@%UaN;TPFRcG5v#A?H9eBo>!H31>2vLb+aDT<&jRBsrB?5;r%5AAE{$tt201F4r` zdL*ycL%3a8J6%7WPK_f>gXA?%#=VoG%dwR2hkepCNM54{JDjH^tdBGelGo^=4n?Dd z2Q>QxML%Vk7RhV%Q1=y7mgBQ=p}KFd>5#lm59Mk>Esn=YgmMdQI@YvEUaN;Nnt;PG zt^PZ~G)P{fhcMEDE;P7Hd$LW7i>V>W8V@gyE3-O)@)|6lx1w$w~{c%%wWRIm>FwCC0RqMlzk}? zp$J7ugpw_x6iTHeBx$ez=XK8ee%|MGIWv8K|ND4+zkPh>^?aYtS?{^$-g|B?&*NNA zo`f*I2DTnrS}&Jv53l1quXNmbjkUGV(ptGZpP8Te%ff9%-Gi6RXCqq+Ev=Qye9E_< zWlMHXf1LGjm#v4E*30F5C8%CtD|F|#nXQSI){HXqki+>3*Ys?OSRe7WCR$oE2J6cI zxP5I+&z6X~t!-Vjv~Di@AlH>G5%un|_0ZCKxjcsk*K@W+)azjDp{4cy+xWaMx!iTr z+15i#>*aF%lJV(59%JifYoVpJa(Uh{9}pQ}e;^Tc?zMH$`p<;Zw&04h7Rx*FT&i8)sLt06=IE(2HvlgxY zVC4=Wu-Vq4rM9B^+jYLfh4&7ei$Sm>twrm?XsHb~b+7Z83|!a3dkpsc zX`JO+mc&T_;%g63UDbBL19Y)`iy zt^erdj@?*>Gp$GKzxhmaJG2op{im!)OMMkn`#S3YScYwf$`7|-8O*aDt^efBN7KyLNMso-v>q+>KKo$&@D$8~JN6~k zqLr&{nU<_}xwUAi^?8nSt|yu|f8E2L^C=*A3@dCMw6u=TzUb8P{vZpM;VN4LEv@0R zAD~9yV`t93yvBO8)cYL2;jg(r$2waBEv-@I`r9IEcs_yaE{oS~4Yag|&$>j7R$V)~ z_6=*%QtR^^0BetjTdYM(Z4S#X@N>}4^4n@XTIzlFAxztTfEDZS9qZ9j?>ly9Lv(-F zZHKjJsr4KCki>!J_u!qUPG{`9tVc_I6`%DM@b0HJ+-1MV)<8>Z+-7QA=Xb{Oi2(aV zfcgK>dbHI0?E}`!AW&n!t$~)-@LLY%L|Wcucjw`d^=PU0TLV2NO=nm6Z zK1HoZOTF*(ar7Uk=by!`M@zlm{+J~`a3X7l;4IUUwhmfaC)E7?y6d^E`MkS(F6{W5 ztw&3}-|@w{J2CDe-)(q?_jd@(*g9xw9iP|tZL>P3nj0r4cTdM&<2)mEH&0FOJe9Y# z(9&8yuZi*T=R|W_?#xdmYtd5cxBq6jcQM9Y$?RtdE87}qX^pC88rONB+1w4*gmS-8fa+^pXXKFQ5tt%b>^XlwP>mJ+cwS1Q}?=nd4-8-*Rmch^;OK@ zuJ_z(yz@f?-tTkOu{F@r8h+z9HJld-n0|e0(NgQTpBrmFA!^>E$F?9(&ZdkrFX6Tp zTK_{W-0wQ5R+O!Ume%sQc8Kl49haw8$3*j;!jbOSVr)IMv|bL&$Ua9jv=%M3KCeA6 z7Fs%3&P{9$w6sQ5^SA45r&7b*z6GBsb?2d}t$~)-@Y`QZ4fAwo-Xl#l*JZNZ&yu#V zHPF%;In0Y^iMr!xWow|NHFDTyJT(Gq#jVxW)_t<8GHS8eb}P*Fg_!(NbH^)Gc%EHKlguiv`a9 z)zdn()cH-*I6JQoSc_J!wtb?x7jWQneSNJ(ORdj!gbwDlqoKIf1b!jh`58!O{E4;> zT3W|v{2khwJDlO`|5)D1)}p1>XPI?0uYDXh&^ol#`8;QucUbT(pJpS>d)4L!(?jg% zV;{72(9$|S$7!i!UqU)#8ER{wr8Ru^-%jR2V5)f!jjjV^*cxbQ4WDJ`p5K|51XzYy z)}p1hs`=Y>jzR7ZJ0}h?-zmelmE8Sxgsp*=*6?{9$2H7zzj;^C8Ovx}2Q97RbA0DI zS)JT(0?EdOc^hl%p{4bFwoy|LF9VvJUBtO$YkymGysd+l*712hmpaZ5?>7(d=I7Zm z11kdau-eu@OKbS-LpYl^#{xc9ueCMM(i%R;6X$E&37yOjbK@sJ?oCZGr=8CHyk_g5 zrFBBh->V5V@yYevYoz|kI*5?>v?j^6s zklogzrPgQM-3OUF8K#+&1v6P^zCW-YE%iRn@z%F67j*DzE*Squwgy^S!)G6`HQcXF zyW==$YoMhy%A5LSuRX`4&*^+@Em~@Q_Mh(Q=KDD~Ns+gVoOw8EYoMhye72wNndTdU z<~I%o2j08=)Oxhk`&@Hz@7;ncv*tbA%pP6a2iC{uwhmfar=bbNUb`IJI`*!Ffr9Rj zF2|cMStgnLW}COToq0TEYon#LeLi27V{P{g!maz2t&5h{^*J~4sjKHC-`IL+X}w4@ zAJ_Rls87Al>6!8kJ8Yxh*_vo+O`r2>w`NvC^F;GK^UTq>jhs8LKiE2GX`LMB)z&dL zv&_Oz%9`_JbApO-U9k1g(t0`0>viktbK+07CR$q4=d+1{c@5m0)V=kl{dE<0oL6j3 zw6vzrXW@ctdVaCQt@o>~hnCj!c`qZlo;ya*y+Qx5_0ZCKKCkg@Jy{tz9-B4nj_q$- z3oWgc%eK9kjHL&*vip^Cnl#yQilQ z$xh9Xc`ImZp{2EQS&wc_&pXt(R*!isV(X#xf3Jsa6ZLMe_0ZCKKG%BfyaxaBBWjhf zwb0U9KCk@(wdfa6Q0FFF2Q96W%eED`6%t-7;c3E|ztXlAT3RcYb!m_Afnpd}Ia>=Y zt(D8NvhSz3GwhD5qOFD2|4>VAkm;>;o2`YG*2--j1=9;&h zA<9iEalpkgt8VL|rS;;>-(vipU$e}YB+L)o4su6kjuit__?PnBWmwbJMoVkwI^TFR z%l;~(TdTIMg_hRJW!t6ORbhVX**a)xom`G(9a8a$EPON7Y`LftX6vA(b#gqv$#QQe z?mbtCv~|$ZI=PL<+{4%2g&X6Ewsp|bIzI2qx@#^gLAF-BIpiJ{Q7g{YLQ8AqGA5~| z=PiwG9kl+}I_?z_jOT7!2d)31&PaK;S=L!|TL&$zlgl>by``|T?pxYAXlb2X&QZK| z656MalyfO}dun5AqV<2PsT-+Vvz@Jp*8i<$$CQ!sD#$oA2%8JI7}AI?J?+t&5h{jWU0~&gb^+_UoXL z+i0wwn(b55%y-hwl}2on_u1NLX>FhHkX&!PC~eQNdf9qtX}w&J>t?jUzfOtq^|AHP z(t19xV*}$e?-jehbc`DPYz?%uMlR2%^6{F$>9f0jlWZ-tv{p4Uo$GvuH!z;A>51mP zOat8-18fbnv_>wkHM%7ZNO5neJS1=jCAVIxt%sJ@%jG=AefKzUz%=8>vKnG*p{2EQ zd9HJQZ(s;s_@@oD*U-{!Ewr>&wVaogdkw{$h+;gMwgy`NV-0iii5kOg4YagIF6&=* z8T%1^iU$HgN(i(ox-?qkZb1`CQN^)vqiy^5Q?#_lWy=v>BrS)=~H*-2b^S0jBLF>QQ z!MC@($B_-T4q93#x8sO;gEetrW@5%5&v9gvt%a7>@_QZ+EGzGCA<6Auo$cvOTMsR* zm)qF7nxEdr{t~#O5|;ZmTMI3%mD|1-xD}l#;f!g!t%H`<$!#0=?kyP4d$tZ*S|_*h zbWbsFM0u{^y>IKFrFC-Khn+VES|*$KDbohZPk1`>x7XG~OY7yf&jh}dfO*?zYoMhy za@)qu`L21_U!UU+*g9xw9lvGWwL=09xt)h3j<$DR#CQ(dI%sJfzwvnLm~*d8^9e0? z-G5^1prv)HnZIA}To-lB4|r#$I`?vQYaF*V(E3j`%(;7}+563tws|7K{G6~g(9#+{ z?*qk~abTGQ7Ohj`q^*IL)(AEAuk-$A>(1t<2h9;Jdw8<@xt}ksM@zlWzUlSxDQW5E zdw#Cwia4i%jbOETg&X?DVc61x7Jx(3oWfx?fUD;TdQlz0Jp|DTLUev;j`U2 zHO%+g=z~>QPe0l^XlWgv&ugHL^HwYDC2P@ATg`ty%(j-@JjHp>+?|h~Z4I=vhR-!{ zXZl)$R+F>MT($Mk(t1AU`a$({Rbl>qx3$pHT0Z+^P%URwIb-_E)>KLjnU=W|RBuBQvi)Iz-iwjNqqFNf_B+d^O- z?RH(*)3nme$B+Sp{lbv#f5k_0ZCKxh$(dy=#_L zDO(RMt(VKP3e>a9>K0oEEv@78{A`z1dfGsDVad8HYwMt;b$reruc_l*VAvKa*m`Jb zyxy?yz;x(mK_1n2%1Kb*W-m)U`Fx`cF05 z4jt%ziUFU>MU6Xc4YagI4*Qw62F)1iMc8_1X}uiwGjBbeK~oF$8rXVhX}uiwGjBb+ zpT*ibXlb2LGYy~fkifp`jH8kDXsOTPJS5<+Sw?r+T4-sl9L_@mwXRt{&1@~Sv{p4U zU)MQT#I_u$WtUC7t$~)-@Hx+OY6SLkGZ|<3w6-2VEY(kJzDC0KI`TzkHAevu#FD39xe4bEKl=!xun5{I?FT7dbHH% zusj_fygY~5I%sK~9G0h3CwO^g+d61zog9{@Qzx)IM_P}T`W%i&a#^5ld|;W3u{F@r z8a~^(^WESC^GiPFhRF7PlySBOT3VyJnaFjH9c~Th&IRt*_OWg!*cxbQ4WIL}K#idp z=Jy=TCkD)jvdsGool{4pxaTg9*?MScy+&qQao3((=Ty(T`kn1)lC6!F*7o@7*7iBi<=XC7h@3jpZ5_0rtyMjz^&4-lwwlk~ zo8KyN#`Bb|ftJ?rIZt-S)5d&XVhrvqZQfAKN*^-Z^Bt*YY(2EJp3lA~d#$V13S|ij<<2vV7P7U+DdVBAKH>^iX zeRbonbBuO8E`HsMJH(k&5^PgjYz?&jV-3#*SJc>QYoMhye7?KmjKh7y-Ca-bSdW%^ zpMA~o?w8p07DX7x4qFE;t>bg-a2dw~q6z zd--UJIYeSvAF_4O(mFoN+Ed58+moJ_Y<~F0IoP7s5nBr_t>yFjQfissYBJaB&6APy zd2kd%tz)(pT3Rc|1Q^uE{rg{_5_*2;1HJ73Lo z-}%RUowha5(i%CB2X}%?&-C2T(OE`kY%R33md|HEWZtf+6?i+!srjv~iI&#%c|LG! z;$YStzM@xN<>s^*dbMr+TjNuns11+tQ<9-(St zs&1xpo#zX8ep+Rkn_akXYhgTp+8StS4WHM0ZjBBt;@cVv|Bv-(srR{GkNA}A#N@>6 zMA;_-H$*b!oSJzG1l|ikOKax1u1%5T;YsEb2yTu1wgy^SBggH|)EH_$M46uE9HyPI z6tZ>D(mFXFUrimn_h<^)@BA0Fb+Rcgr3< zB*k4mC2bwFv`&uOa_8awhookiJF&YpZnibh(i%S3TivmkZz$TgcLT@7WVc=!TMsR* zm*aXj^#Wh`!}2L_YoMhyd|t!2V{&gchOhm(_vkWry9{hcm25q|jdLGSP->pO7#s$=V+rS*Kz6N2mEa_8h8-t%a7>@_9eR&X>2A z`AH<)0?3)arnVkhTF-aia>wSL9k{oOaO$+Mb%zc#$DP;o2T5dm?rUqIrL}T72D!C7`)s1EgO=9G zWm}~0P$b(LXlacaW~@0JgSw~NEzw;*18p6&{)am8>9lV=XzQT$Kh+65y*ulEsI7yR z*2(3V=-%&7)>DS9ftJ>&;j?VaZ+Iq|PjdAiKD3#+j+d2fV$N8yY#p?;j^BFHI?f^0 zsWHOVKuc@*?dw{@T`btwN81``X^l|xx9go3xHa5afgfubF#ESYZ3bIdp}mPc(3w6uob^RLuMGw1&HvvH5x8fa+^zt<#z z8n|P=bMb*bf#{BFvaN}h*7Q5JJ2mA#fPt+B^Eb`bK}+lSy#{sam|p?Jx1->nv>q+> zIc_iVi)H4X(|^HwwAAOgt(Z%L*_{TMSJG~c1-1rSS|i7KFz;feno(d3 zi>*gXz29{lXCAtZHeVRdOixQ4lalON9?NVkw6s-3(t0^AFCCL-4&CMTwylSj*7Mo6-SM?BugNkKulcU|yS5fu zTC0W`_jR^ys)g@&o0zlAcG@~Zd9LsCBt%a7>^4ZR1O!(rJ`SOj7 z=L1^}!7HKeiGx$p++}mn)<8>Z)G%Z9UB>a|#*F68 z+g|DELru(C#vj`{XlWgv_xWWkTF1L#VmTkR_0ZCKKGzMdsps7=QSVb*4=t_d^Bn5d zYdHch^_=UbBptix|?O|-OTj>i`7*gOjz%ltcA4=t_dbI!nHZ0o-2N1Y#R9kjGg zg!x<8wV(O8P92_E)VyG8qNO!+++G9o>Woci7WICz_0ZCKKCcORjLyr;M7u9tv9-{0 zYxNH)UApl<>9rP&J=b#m*@*r%4>vuU$4ob=VejGQOgO7|)}X|ZX}yzEvIb|TXY|JH z&J%|xr>6JrKRk6va=nqMX^|1V`=_S$c3a6Q{f7_KRQ-(P{vkg##ogBHrzTfiuqx!= ze{s8^rUT3wd;PF5Ov&x3pNxBejYu&aA?VGQr!SiHsP9y--VL33&HwV{$>@Y6*8?o^M07({-Jue*0E7x;c+*ZoBcVN5b23EKR3obF;~h4^+cZ! z?rHFOa8J~c;GW2Rwx@ok4l%zo!p)dr^O*lu(s{Rq|Ht3(z<)8fI3BqBy7rh4Plw=@ zk@jSmf8jm~+VhP07joM3s`*zk^&B++!lf|H;Fpo7Q%`j>%Ei=!UtQclJxQi#kL~f! zsoCJn`ob2C$Ni0x+6Cq+BxJnIKQehkyb7yU)x+WQ467SRHST@tXH~UDA;YRTsR!F{eMMC>QOK~mkyME~AvdeSy|wW`hE)mE zqf7puva5Hf8YT)ERwYTT`RFIJcS|^AiZqa6Rf^QN@7FD@YKbUhSlvXbhrFn+Ni3EgPeIF!>Www z(P?$xUd_BLlSzc&UOadp!^#}WJZf5vi+8C?5QPjYb7=Lbn@XR5PZjPLfd?|I%9|b? z;gUPM)ls!v6f&%EH&a!WmLBM?3g3&x0~uEMo{Fk`Lr?8h^_3`OSmE1%s=n&d(R{ot zune68s`)!Itne9RRZA{D+e=ji9EQyU8CH1Jtm;tcppR9>ib94J&P7!{fA7vuRP_{v z469I5&wcy*9#vySA;YQ)ska{4W_F9f(pV}A8CF$Ey|M0|eX8CSg$%1|r2gqM{9RS2 zL?OefI;pnP7QCk_51xX|0~uB|Oph+Z9xX1_RaHq8GOTd+t?JS8q?jY4V_TU0lxRQkjGOX~H54^^hoJSmAY;PAl)l z0@MZdG-U zC}dbQCG~l+&&?_gtgrr}kYUw~)R&h-7OQ$l6f&%ulUjX4Y`?&3(VI$qL5+LlGLg)zrLjEQ&GsUYDMbp@=MKWLSR}KMIpngHK~jd zr^>1-QpEhxJdk14#`Ng6vH8%A=Fk$DR!vdJuxd-H&m;fdr>c!8WLVupYUwA(m#P{f z3K>@INZnto$6i%Wi$aD~dr~3Wf9S00HBrd0>OiV}iFTfIfWxAYVbzh;=_xn-pwqe_ z3K>?NNG+b&@1UxpMa>`00~uCkHazPqcH5Zgs;Y`YhE*3*i{kp8Q57c&8CG3M{n7WU z2UPVHg$%21q*@GU@V=@?L?OefJE<#WDtV6c%S0i=st2jZiu8M0r}d^NWLVuxYF}Ev z&8qf`LWY&u#63%XRL0|;XY+4FA;YRCsnvIE@N7|ei@VLKHHr5=iwNxp{G(qL5*gNUG}b zJZ7&Cs4_R0Kbi+JtooZCUCU$lPV<}*MTP;A;T(-RK%F0`Bm)_g$%27Qj7WyKCJ4bC}db=kecw; zv{9;l7KIF}VWg@Qzxftb#cwo!G!JB0WttvcU!5*xm?x0H)>}suGOV&l?GLRUqpF!G zWLRaBI@9AG&-&^i3K>?zNiFUZYgTDsgo8yP!)gSnjEv8=sTw5;8CD}nHJUQNfvP7& zA;Ze79?vqY^Gx{rs-6{v46D(kzU^{#x2ol$kYP23)T+0Ro>ldlC}dbYMC!Ah51CaO zScbbqA;W4csrs{LlvDMYC}dcTBh~I|_+nKTL?OfKVNydcKlGuhkP_yP=79{W@uo+& z-hMMa^{nNRqL5)Vfz;eHGtG%iU};nng$%1lNY(3H%`>fNQOK}*l+>q7I+&A-z_i+m zLWY$&ZSu_5$`6)pRMkfmGOQ+&dV9)yQ&pvlLWb4jr1q_;Y>qI25k4vk8CH`>{kGA2 zmhy}!WLP~x>cH|^8uriCxv*bgs zoP0smDN)Fgfn;ib96fOj0wm9&D*9S`;#@W|3NcX}*aBwy0L3kYP2O)ZBK3531@Z z3K>>Ukvettqq?dFib95!c?slMhF^B+yIs{tQOK~GL+Z@IH@;RiO%yV$o*{L$$GQHh z=8Hmx)w85ZmmN?*)p}9LuzHSE-zifYt9n-yGOXs3YS!%45~>c0LWb4zq>kO*Y`Lma zqL5)_b|=r0pZ-%)K~+DCLWb2mQtdw-l%eXzQs$55fefqprbqXbkY`qVmPTz+$go;K zD(%XYKXqCiL?Od!A*nY?WDQU?P!uw(7Loclexy0c4eTl7MIpm#F{zj4j{RQMbE1%8 zwS?5%g9Xf?B`~emMIpm#DXA|nLWb3gq@oHXnyn}>trF%qj0ZBTUNSwpZEQR<;gG7TqL5*=f>i3(AFilsB?=i< zFOzz9*m}>iUVl-@uv$rKe!IozbXu9BkYTloR7}T9o-JykC}dc@LMpuNfNykKb3`G- zYBj0yH@tGIs@0;9VYPUB~BN)|G^ zU|^fSTNE;^Hjvu7?xl;Wx`;xCl{xkF%-8g36DF%l5rqt^H%MjQw70dYY*EOt+C=J! zuwv6x%@TzStIec(e6_uds@0;9VYP)+*$JPTr?|i}+%F0lR&SD;*KpjUs=g3~46C>#O@VMXIVS3K>>!lNy<{wX~`R zqL5+r4yot&6)B{uizsARZ720|ho${h^%I2*E3@l*=Bwwc@#(6vL?Od!2dP~RCmvDt zh$v)Oy+>-u=to@YMv-$SnVS9+{#{$t6C)r8CLI;x~@j!;vho(oTb!Y4|HB?m)g$%2Gq#kJBz^u~1e1(fbhSf);-aWkSAyrL9 zA;Zd?%6LYYr*?^ss(Oe*hSdR5EqXoCNL7X?WLO;}RrZ%^HB~(&3K>@B1jsYO@1kC8 zsp=I`$gnz0Dr)fleyX;KLWb4Hq;AR|VxI5=Oa6c;WLO;`wffHWo+I`dQOL0RgwzLX zFBj2i{UQn(R!2$YoiJpos{H2p1rKCc9Wy<;9j3g{@3N}0qL5*AoYal8^W3GXhA3oM zeM;)vhM9?~8j3=O)n}w0k9ohos@9^AVReF3pSVHoRP_{v46DycojP&GbAI@sC}dcD zL25>~@_*~JCWu0Y)k#vN>VDow)ofA7urdc|&-yy@!RmWeEfs|ftJ9>~&dOIn)n-x1 zu=>kld2Nh+H9(Uy)s`} z^GEYQhSfKwN4NQLZ|8ePRT)vpu=Kv&G(IMt3F0c&yi$aFg52R8nG*4DFS`;#@&XXFO zw_96PGesf8>PJ$qG(HxlYMv-$SY04By4KZks@94^hLw4N;n_C6dn5E;Rog`&!|D>L zw4KvE$Ef3?kYQz3s%KgY&-_tUr&XYw`J;It!^#|>J*rGd;X117i9&|e&!onWuJ){| zPNI-ub%j(|%ZBY$4HtzBE3;#GMp$;uFZZgNDGC`@S4m}l(AKP+z;?J^6f&%SB{g!? zH=Z+xW1^5@^&6>{lN*)PY5gS%8CK@R&NE;8n?{(IO@R^KTHgH8Jdk1ahw0IyO^>RR z%mNFjrlOEx^(U!)VWmCGu(v2=Sp7w6S)LkZfd!^DLKHHr%+r-;gg?Ak)oif=HA@sS zto|W&^W2_oRIL$(3@fucd8YMu%#XcP?H7d%D}0SjmtoaKi{n*Y6om|{Jfs%Q9$ipX z@d{=l=79{Wyrk+?-&9ytEm6p@%15eAi(>0k#fw6QRen;d7SH@dRiY?lSQQ`@U!vh| zRpUh=!>S;uDuX7CSG7PCGOP-b+I1qnm#Q~KA;YRLsi=(Sx~lp@6f&%ekZSPjvyZDP zQqf&s$gnC(>S9EKsUO&SZx@9Ot74=E^tk^PRn0^p!|Dc7$$#AIS<4TILWWgwQh64f z^K4OBqL5*ABdI5MEL^K2oFNJsRwYRNxS;dfs#c3ahE+*YZ_S7_Co+L$_`WD)Sd}7` zFXEfks!oeShSg1^*3W)_pQ=AZA;aosQe}1@s;#PYC3o9EhSe>k{ycG8J5`NDA;YRP zse?@ zxjH6WRe@XGWrz%`3Z&+C?(&tY8lsS4Rgu&Sp(Aco)kYLDtSXUOG5DR~suDyY!|GO2 zC(q67t7@DmWLVuss^Exx&#HP_6f&$TlRAF*Z*y`H*i$x&LWWf+sZ&FroTBQGC}dbw zAvJr_*k!6Nh(d-{RZ`>c*t=d;{@dKOj0~%4q|R69lB%kLC}ddSd(8U0JZ0REhg8Li zLWWfhQUee7^jyWdPZTn&ZYT9-(TH%J);Lkfu&POF@*n3t=Kym>A;YQ`sk29a^_(BB z6NL<`J4g*$(BgF+;a*Y5u&Pa}>zdVxs?Lf+hE*L>r_ViUE~*8#!+%8~!>TT+PQ$0K zR8^s}yKNxDsvfDU9Uh2M)j$+7tm>1heN$K|Rh>m4!|F~_6O%W5sw!0!GOTd(1Kkdr zj?2?j)gz*iVHHlQ;f)JCN49yQkYN=;s@zu>Zr5qOB?=iVha_ST!JZWJ#?{stSa=nNsW8F>q1p8h(d-{BT|zht}aovSrjs?8j~tA zy1CgU1AFB`QOK}rLaO8C84s&ECkh!>caeI!_SxyG@>U6P9>}n|o7Cm~-!@TIRTMI; znvz=bS=?Ky;zS|Csu`(rcO_I+)m0QSteTU$I{RFhsv)9~Vby|E?fs9GR`s|jWLU+M z>a?yGpniUA_^H+9Y{4wxMh{9fufLM)sfVM>SsEunk)(#R-H(_aJ1c5s#b_XhE-=$ zwa@l@PSti%$gt`{s@>+Wld6u1LWWgWQh$&6+4CykcTvc&>P9MmLQC^zS6+9M2q|yY z0v^b)>P~9-^2MHKy+~2Wu@SlIk6I$a5udh$v)O-AAfrixS`I zw5E$fhE-2e@rS#bMG;sUFNs2i)%~Q-rp)ym=ie5E469zGzW(*Mr8=!IMIpoL0aC>Z zeOW|R-sj6>7uf$gt{9YT}`kyH&j+3K>>O zq{{3cJxA4tqL5*gOsePC_%wB3eSISe8CEHz?rK}oT@Eq?$)}8>1uqSrjs?GDy{kuH(6;SJ=Eh!UGvr!$|!)vCLGRRyk3~u*xKr zy>Q%NRgt2QVUj@v%8d2e#e}QOK|w zL2AzZt=g!XAPN~)BS}4za`atQ^F$%TY80s^&$suSA8rtZ46D(kc3u4>MyIt~6f&&F zkm_@~;W1SwL?OfKAyUUKdd~qai9&|eSW+_^Jk?dFRmhwV;DHRQais2SzQuEHQ(F`= ztR5!SY(wm3omNj#$gmnus#wVs&uiF;qL5)VfmENXQ}^h!=8Hmx)gz?hLZ0x9aI+|6 zSUpPWXsyU`I;{hukYV*0siGr$_EdFA6f&$Pk}7EHBrd0nn~*Mh@*Guv>J*+hSe-mm0otA@7M6f&%yA@$J> z-N&l>NE9-xo+Y(@O-aw^H@+2x46ElzCFFhaFP&B%^Bx}_$grAAs#4KoQ&in13K>?< zlNvpAu;(3w#-fm6^#Z9;=N|l4r`1CgGOXs2dTz%_&pAN0C}dd8Cw2M7{_}KNQ$-=e zY5}Qs3pN&1wNex^tQL~`@XFIasX8DE8CHu(J<}oLQB`L}A;W4hsT)`4*{LeTe0~WJ zWLPaB)i9-eysFZokYTlyRDlk)BURNDg$%1@r25rX| zA;aoLQa@KsYOiXTC}dc@MC#d=r>>}aR1`9-R*<@LT;WtzFNs2i)yt$}wq41u>Mc>o zuv$s#$;YdCo{5f#LWb2UQa^mPsESVOq9|loy+Uf+<-bO&Dq7dsphA#gwVKrS9$Qzd zsxAr{R%=KlT%Gias)nMFVf8Ahw@GNF9Hs>AR|) z5`_$_^`t(%saY9SYeXT#>NQgLRM>Dx)lN~!uzH=;;EJ;|RUH$B466;K=Dq*s+p4}3 zg$%2Wq^|B+u~$`*dhWJ?468Rt9bA#>+2(7CLWb2QQX98_;(3N`Dhe4^n@Qd9Tiz-< z!h1y_!)gnu)J1Q5_OCQi$gp~oRNEFS?$K#ICJGr=Z;`57z2aq6i$x*BYAdOy*H#>+ zYP%?8SZyO!`?-DRRh-MIpoLeNr2H@4rFSPEp9P+D)qX_N08XyW8R{KfaIJVvgs>X;yhSdR5hpV-^sA{$-WLO;} zHRXprzp7d;3K>?1NZmT)XkS(Dh(dD^LWb3+q)v`qHA>aPqL5+r8L1u{mK|0#Qxr0+PLO&r0=M}OoSDBU3K>?P zlluH++*u`{Hj6@r)fc2re?0fNDtuQ34`f)KB(=2jXwQh?l9tq}7} zfd?|IPLtX_Y`SM(E-eZfR$r3pUGjs!by~GWA;an`QZ?7SdPLPdqL5*AhE(luADp0S zkSJtWea-4{8P6Hfcu~l(`i4|U$H*w1))G<3u=uX=%t?FG-$gny~YRq?g52!jV z3K>@4k*Yj%_()a1i9&|e_oP~un*Y73vJuXv5rPb>bEGmB<@Frd>WV^!)eofh?bt9( zr`1vvGOW&%I{a7d0jeGlg$%17NjLelONBuUiAhjlH6fVf7QKiuKQ4RQ07OWLRA$^;L`fp0)gkC}dduOse6i z;-2}s&0HbD0~uCVNZobugE$>wQ&GsU`i0cA$8Ij5s+TBaSY0LcN!w8CHLhdjIN-TU9j?g$%2|NquqR;?t@+i9&|eKcxDuiaV`ppeSTm z{YxtQ;55(G)TyG7VP*d5`F!ugH8&*av|bT~468h(j#f_lOx0dd$gs*wDz(jr9aNnb zg$%2Fq*_*+V%DtbavoPjA;T&^sjJ_gds0==2ChbiRRK~>k|uesRNNs78CC^J)w(~{ zbI#UE6f&#|k&1t4R$(1sUs1@gDopCH-~TnQxlEVyctjL3tcs8tGrjE_suqbthE-8g zrNf>-qH4P+WLOm=RkPk2&+D(RL?OfK22v+~j-8;>DiQ6@A2O_pld7HnpA=OMMIpoL zMpDo2#Am%sm-FZ?3K>=e-j4h(d-{Nm8?iZ}4or8$=<)suZd9XCm|I2=|FX zhSg1^I?gUVPSr(G$gsk1vgs%M)0!UtT2;vycc~!5>K0N%3m>aNG%WT zxkyJiQ4}()s*-Ac>^0BT@A;yTVO5P(#?}PS>&hLXkYQDw)Uv-@J*6W&FA5n}HAr>5 zlE0U#{N@Z34`f)~PHM~I8J_n>Lq#FOswSzHW-6f$5ky7g$%2@q`I{^;kh2Q zSrjs?>X90-;Dus3tT^1S>Il0sp=n5$gsMT)UWdsJy&ikG<4S+GOWT#m3ims zkvgqrqL5(~PU_66%bwQ`14JRiDuPu1)0p?M468^|ZLYZ6j zuIRMh6om|{2BfO({(GRRW1^5@6-}yQ<5o*lT@r;1s~A!vvOA}$D%i+fU&yeECAFc} z_%o_1i$aD~9I3mjP4S$IMvFp*RYOwcFD>-E;^-&}8CH!*l}cOLOGh|B6f&$DlbVtd z>siZ>ib94}6H;G4GQEaQYk??aSlvbH`*oGRQ?*ePGOX?<^~m(GiK_OBLWWgSQu9Br z?AbO>i9&`|Gg2)&{km4C^@}KEST!g0!{Wo{dY9>P9yd33|BDQ(7Ni=jNg1T7jwobU z#gi(M=dop~nu$V&RZCKH|Gm-k4nj{+$gpZf>aqHhQgm7)L?OefHL1{~Pq(X@EeaV{ zZAe{MS!lGX6{3(~)s|H0+m?A=6KxTN46A!c?QOOvNvCy86f&&Zk*axNoag%CzoL*~ z)t=PCqpLjc6xVFxZX3w3>Od-EbY;(TN^4Qbusv>u}%Muw@JxDcMkTO+O6;a5rx|h_vi3Lxpx?2=7tnMQy-02QVb9H~Hj6@r)dQqn$XCd7 z-g`_GGOT)&IzBzybKaZZyzavT8CHErMOS-wi;l3WC}ddmCG~IeTkBQbEeaV{38YGW zc%$ct-Cq9j_RLWWf$sV}w{F;~}3m-AR43K>@YN$tBixr?fuqL5*g zL@FzFm*<@AJ5k86N+wmZeTi(HR-vZuNReTcLh8(_ygOCZ5`_$_0i<3Vc4e}vmZFeh zHIP*G3DvHu>MIHvR)a`AS#^l#%we=BWLTw=I$i21&w12LQOK}*kkkW7Cp<^d<)V;b zHJH?61@;_3!hP%%g$%19q#hqpe}SscMIpm#D5)2hf8km3mqj7NDvi|78{R&s(<;@> z9Vs%b(n%dF)5g3LZMvMtouZIol|d@4{-QOiI*USv)i6?xJN|B_V!E8iI8n&3$|Ut; z)b6UPW{N_FRTinj`6^sgwNw-`tg=Zp%HCB%)tjP_VKto8&5z|7qv~5x$gmng>fPr; z&GjzR5`_$_he*ZtD7#M8C{f6;8cXV%8RJaSbUBX|ri}+Otj3uhy#iCL>YmQ3 zwuwT9)x)IvM7&a1)z_ksVKtsq?~SWYsVdmQ9U(HTCXkwN?%h9B-60AYR*#U1J6y)| zoYGSiGOQjYHDbinu{x~@qL5+r7^!;_?(iJh=8Hmx)kIQT(qiw^X>AgP46DaUJ@QDa zbX6aULWb2OQbpT#+NJ88C}dbYK`Ooe&*M}Ti+9%-GOQ+(y7=$|p5sP6QOK~GLTYOH zvzv5U?L{HOYAUHdC+pp#Dp3?NtfrBgw(#42sz!-IhShXZ7k=;Mx#~Dm6f&%4klOrx z+ytH0E25BL^(3j-EweAH+9nDaRx?R8|8&0RI=~@O$grA4>XyC#dY<(zib96fY*Hcj zUi?5u7}C<+HjrWU6sh+*Kj1mXzDX1^tez(I^}J6P>$Ji|A;W48sUNTYR7O>MQOK}* zhSZMZX`id=BMKQ-&yrfcG0%IdhKoXm)pMlUmK-=j)l^Z)u$oIMv{uahs$LR>46El! z{j_#{V^v#3A;angQey^gepb~XQOK~GN2<+p1D2>dD+(D_^GW?RvbX2hiz~)>Aj4__ zsk$Ri?AK|9nrk?CAj4`Qsd|?_E3Ya>6f&$9ky`Q2;bc`EMIpm#F{$TEp5CcypeSTm zEg|*F>AO5?*NbPM?JXF=&qL5*=oK$4wS0Ac6Dhe4^ zFOvG>?!((v{Uiz*Rxgp_-|;EX8tXVD1Q}K!Lbi{&R~0sLWb2Vq&g2NmrtiPOcXM#R+D=By)~s&O%#O; zt2LxfEHAZE)jUziuzHnL|M~Ansah)v8CGja75a0`bX9vqA;W4NsqecVSg7hNQOK}b zPilH(*6phP5`_$_*GRR@F5>xYPnkCEc8CnC*GYxmywP(Mts@E2e-7v~~ZB46ALV;(sn|E(8Qr4N=IjdYjbWAD;3&6Ezft46AoY&0U@3Ik)K|3K>@0 zNsY*N)bk9RCJGr=?~=MX`9aUQ&10gFVYP$Q*VC(>M8bV66NL<`_eeeR!@>co-V}ul ztDU6MbWjj!MtX{0~uDkNgW;g*Y`TY zC{f6;+CwV#LdyoR(nb9_~*|wRYOD}!|DT4E1qwCRMiurkYV*9soR#!YNu+k zC}ddeBlXbxbvWb&%A1qyN~Vs-`GpSREo&?`Wr2R5cNW46DPW+N{T~8JaHV(M=RGtUe}n zanG=xsdXsu%%?9*m-AR43K>>MN%3!gY!rnIt7D`F zv|F@Ir?p=cGOUi1%2&5q0aa&2A;aoZQg7aJWv;41?cMo9hSg`JPGz+TRaHk6GOSLJ z8e3w4=iH`)C}dcDPU@+}wLIr+siKf!^#!S4ch8xwBb+7*8CEArb^N!5=UjBDC}dcj zBE`SQu}c&(tWJ{}TX~7+>fG0&kYV*Dsq&+4t$~F5_)8QrtiB?(xakL*Rh2cLrN;vq zR%b}O`g$%2&N!6MB-c73R5rqt^Z%B2#IDVC?L86dh^)0D#|5ox`kD4M1 z8CGXWjhl;OyXkTsD?}l~>N`?T$CUOQZQc`w46E-+UG2Q`v`*`+C}dcjBh_ip!=5Xg zg*v(;MTXT6q-vMgu}h~_Qxr0+&Xd}?c;qov9Yi6+>PJ#bc7N!(-kTx{8CDla6+c_t zbEW-JQOK~mNa{?R%^&Fq7m7lL)g@As?#w@2)ecd}u=c`$^XRA6S3K>@UNKJ0^z#Xc-6NL<`{Ge5%c;84`f&sAeHauu8*mz zD+(D_1xfWd6MjNf2T{ndDnu%5;*2C!X`+x}RhZPtIpG9MqL5*A6RCYIHhPxfd!mqGbu+1Ld$!!7(>fsv8CJKDI=;5RYE_p-A;YRPspyb( zZ>uV3u7lx$468Dvx(&RcpsI?ZkYQDpRR5ukN2#hW3K>?o+O5aKc`HVKs;ZMH_lkJ^ z%;d!EM0d>PN%5~J4i<$BPpbl{*1uKyOQ$tc6f&$Tl3ID+$_uL2ib94}B~tvWmmiBl zhSja4__xM>7KIF}+erP}`hz!ggeA=}1P^3bRVFq4K(lhH?hu6xt58z?`&}ujs--Ao zSXCias8E~NR3(W*hE-KkZ{NM>PF0gcA;YQ~DgN!n4Wf`?Rh?AlS+$$!w2p~FhE)wx z1t+vkQT3ZBWLVu!D(UPmU#P0t!(CsVb)t}ARh!gjr>Zv9X?-OM8CG>jy|a1YZ>oyj>n;ssSk)yp;@__?scI|=8CLa3 z@h`n5ib94}eNy~OuaiX~!|F~_{A+`2MIpl~j1>R2>2XoWunH%|zoYu6C}dbgkmBEL zt$d%m8??&qp`@rtVp-8xo7NU@06-Da#W1SnQ8Yl`GRt-q~weGy<*?f*DWLQO$ zx~cO0i*#BWMIpl~h7|w)@?lZPu!<$czoh)PC}dd0k$R=(lg{e|cNyN^)BP_ptQwNy z-+FE%3K>?7NQGW};$aa8(hv-wNDf>tU8jK^!Ia*syZnO z8CIQ09r$9}MpeIvLWWgmQmfvKDXyxJ`8*6B$gt`{>gGpJ&r(%U6f&&3lIj(I!W?e{ zOFmWf+^LWWg$QirA={##WaQOL0BL2APfX)RTyi9&|ey`+kNyydv6 z$)b>9bswog8w&JOwM-N;ta_4~RB>IVs%@f>VRb*L50NKI*&#KOg zLWb1?q?X)y#q*wT{@%_86@m<_-lX!S*Sf0Hsvrs(R((i)vGCbvRMiuO46DARmSh&V zTU9er$goNv75hzX&ugNdqL5+LkJPw&X%%!@BSj&@Dv{LFkDe&3YN04(SoJ4$^_zj~ zRP7Xn467tk`{-@ zRaHwAGOPxYs@3$~^{N_*LWb2KQXOiZE2650C}dcrl3F%7p`xlJQOK}*kktDZ&n#0l zRunR<29uiFx!)hq0FLpdqPp7qA6f&&RNJS2f^6Xy+ zL?Oc}ozx#!cX_UTofCx&s|-@N+@ImO&Q_qWyB#9KY8a_K1uITL!hPH-3K>?Jq#8by zuwPY-C}db=kvekZ+~=w~i$aD~HmNm661AQdK0uU2n*+8bj*9 z?~}W#x=j=^tR5n@YGIV;3QVjhWLS+Q6(9b{Z#u0GqL5)Vj?{xUzxslz6j8{qdYIJ2 ztraJ$8YK!DR^v&1d16JFsyU*NVKsqN&odcoRN-ETcp$^-5mN8;dbOjfBchOD^(d*R zr&fHe>YONKSUpDS&Ubb_sOn!)$grA7>Yn4H538!s&zY?dWLP~;YWc{0+f{{&LWb2O zQqf&+jaSt{6f&%yAa(rjmp%J(vM6L&O(wPNgiEHn@2dJo6f&%4l1lt8)|@*9j=iPjeGp_=%_5b5=0wjnf4eATSj{GNE;RhAPOFh9 zWLP~#YG&&hp1rb*C}dbYP3qJ8E|k$}C5u9a)f`e&8gBAj#Tq3F8CK7bs`6^eDV^3- zQOK}*mei9IGxn%jED9M`&ygDT#CFf|@O4qhu$oKiiB_?xI<38;kYV*asXGs!yG_;S zqL5+r0;yRa{~4v~iYR1Q%_DVW=kZIb3iJ}noPik!EqED!*APN~)3rLlZdE;(X zVWN;>wUE@}5{XMywGxF4t3{-C4f?|KN-9wlGOQMp`f}>KD|A}JMIpm#38@`ND~wS! zQxr0+mXeyexuoYc(F#$>uv$jy<>}o^>$Kh$g$%3Zq~`rO?H5%iMIpoLMN9k3MrH1HjrVpf>i#D@}5_1k)n`c^)jjKkMH*EmF+|!!)hg| z#Ii4XURNfFLWb2UQmv|eSqKUDku3@tR>w zNDc3P*IAv`7E#EsdX?0+Hv2uVd_NI|46C)I&YfC)mrm=7C}i9vR5Upx#JrFR$#4E= zI?bc9={axyt38pX=P&B%WO{DMZxLSrrVzS{jKk2_Mjl#ppIIS+GC%^Q#%V(JBDNH@H zP0tO~v)=TSq@IJO=N9U@YWPVn z4ep8U8PpRSH7cklE^KaaPxLzOi3^L^7u*y3bx==uRDQFZv8Bie<08Va-l-=#DySzi zqGxbV?5LogsHnw3Jq^Nk2KPkcw>Z4hijF93RuuKb)(Yy0iRv8G6C0Kh+!H-3s3$IB zb#PDY9_on*3yV4()Ds?--wZ~_6A>03T|KBLBBF6{Pi()Sp2+YC!99`tf_kFEP6zjd z4>Fst=`{bt78MZ|9XTtwC#qb5piFdZa8Jy3?g@_#FIWPc&9^4a? z%{^uT%?a*lupy`?B79$PPsDlKV`ev`=m2y4G5>Y~NQSWLQ|(Vw=HuOi%dNK|L{%zXkV1 zH8zJE9dl$@TzKc;o`^Zz6CT~*<=~#^^Fci^Q6c6UsHbvxOoRBKp4iBq!97v)Z4c(O zhndrt?VO@#hUr;ndz?9qhzMI}mGp#P3F?V#P`D_KCn7SseNazSbid%9nB_q|4H|3? z?uq^@s3$tIWHFvrbX51Co|uS1!99_ygL`7O2lvG0H-~J`QjLg>C>Pul**mBwE;b{$ zCvF4xM21Bj4DM-gOL3Z3WLR`qa8FEjP)~T+tl*yTBf&ipmx6mDqi*DBMMQTF?unTb z)Ds!8F1RQ1N^nn9$r4;SvO)LYp4g1wp12J`JyBr?gL}enF;ByubrBgG9TwaZlO5C( z7d9cdCwymcPt3vKp4eMT(X^r>BSM3FB9nuA;xdAIqQW)=_k?c`?up2M6HhBDu4GV8 zgRt(wJyHFFdm1bc?ul6!+!K2xs3$fu!2RWK^cI=CnDx8R32lq6X6VwwC@p5oaxF>cs_e6(9ZV&E>%3m!|xqf!asO%8;vEFP7`SQ$tJ|v`_d5v<% z)Y0AK59U9=m?IJ%>+^*=S4Faus(0_u3q7wn3g_o}@K5KFSN>aYpxbaVPV-jj2??=v z+PZaK&!J9TQBKCG(}L=ttE=g0YX0kvuzLHBF=6Ikd(1hKGhZR5Cpymb9HyRF({qA) zVocAM)Dvxb&QebU)AJ+sM46snsVCC()a~! zlT-Q+A6VVl|28_Aedh0Gr*s}0@&#Izr1FM*foX-Ap3ctJ5^9d@W}C;x64IlTcS~qW z&( z(Noj(xR1b|((Ia^e%JIobWP8bre{`JZ{_E0Ca`>7H9ZF?v2N z2iw?j>cKX4(Dq>T2kf*0bMY&B$_K_1Sk9xI9`AA<;_Y#kbF%G0<@|&3|9Au{*DyU3 zq_Q&?j%sht!|hx+$BnMuo>)|f^7h1`r>^b6znYlJ{hXe_wECK!b<*P=wNQGFIbXHY z3daWY0`)|hp2gIIA!bky1~ka_n16%}vvV3)UlVOlU_6U39!FtsGD|fQYiCF`&v+uS zPDfJ@_R8_zo(RnR4C=vn=1>pDyp(z{?<=VX^Zq*ZVBX*K_C#W9385ZjeybW7Gyc5Z z&S_xYx0;@Vj*>Zb_S34>T~*LNgH-hPU}1#Z;_Y!JUfkP*iH8*Q_Bh*oE$MNVs~lr zn~chrCvXgRRp1!@uqb5QzGtZp(wnd8`RtmWJVV{OdIY%bnw}P>=aMrQfjRABdPi-d^QNjfqL5+r7O4sQ zK3l44wJ2oVrMlDfOt5o`XMF7ME6sN0u2a(!j*YAr^*~F|H}0CxFe(sP@vM%djWr!l{h;N=O)xoj%0bV2lea=Lb!uWUIh( z_8uj+(bT_r;_nfGDVb*~nHDnc)MuNX3|j{yn{Rp+Q_l+1bIJB#o5#|q-Ns$2?z01y z*k`RhJrNl3BySHEb4WF>a%QTMx5wEFN_%^pz2HV~kF&`a^7fdEnP$w=<7}(W^YUhI zkJ&2BdZ+PV&)r8o7~(GK!4Ti39t?4lx5s(T9ps%>Bq~qv_Jm{49qU!$*bOqN2SXg> z?QxDReW?c{?C$Mx&Pl?&({j!?{vUhq9Un(|w*QU+(@e4H9oZN#0UI}rO_i)-3#%c? z1u(2v(n?-f?TX!%3)Qp$p#}&gkU&B&36Ri2fEWS<5?bh?B!rNJP(ttRT=zZm%-%EC zt_|mX&-tA{&VCS=_kO{T11i#j`EnE=bX5lag!ZLRJq+nVl)w5HF0`sGsBay-vz z=_L3wyv_L|sks!E%OaLLVDa|1%ww>e9a_-7w5~qgA&lqGJhjh!)mpUAyendnx^YWr zkaW!F;!_@)*s|r#vhAfSt#ijHRSeDK4Q{kswejm_%e9Kj^ zRL!-_eXu++&stuCW%vQsvMTDq@`$AhmNgC(#?6|h1$9Nj^TSHRQmu?j#R;%99AvM$ z5S9V8xU^phOFChhJ794i-{(KVBF{6FLjMmjs~6lgF7!=8i;Lmd(Bhc=U^!cTc9sJ| z#$B}-mIVtWbjO?wi=5UiwXbtwSst-m2FoiE%gwNOUG}PbVHqB=JRyvJTv)HbQXOI5 zCuV37F$@{h-pLc-$HIkvj%jbKI~9Z0GD)iV5fO`2@na(v=`&A_STOnU&W%`PFt{jU zk+Ih;iqFWv~G^xVMWx2CON@joudCWjVRg0-Q= zF}-97H{ZiHcnLALljV7`d=Xk)=<5&0V>pH^dyu6KmM1iSTuV8Om_b+uunSYFhv&f} zdqBQLd-a|)W*_o#X}<DOol`I>&41?yB*yR0kGq1rkAT zGmKARoFx(7I@Y57{A!^^+-Hio(S+tE8hM{zzdILkqrmJ0KOy&~J**ejS?x%XsxCC<{&3=%prfP1jBli==B(#3JdM z7O_aWY9ba%*DPz%bR872NV<~NqUpMSiH(n>>#op(FJ2o`aVP#t={gwS2GpORu1a*g z7XzPlr65uEp0*ZAmiMT&Ocu+7*0P&eerGLH#BztVNCdr`twoaMU1u%R#B#Z{=sfC@ zh(#j(qliT!{lkbw0((8Mpjh!a9%-*SLUO~V{ikY?a+lgG+y&O6X+PUqH0`Hai>Cc} zYtghHX)T)eqP1w+`>kb~gx+f{n)XD*B59u&u}Gx%k60wq`$a4g*bRZj&y6dP8?UIv z=EjCcy4vD$V;yVJ+!$&tnj1r`MN?4~Sp2XaL|Eh1V#DgTS82}Aw-ya+wzX(j`&)~K zH4s?*u--&i%hY0f(WayPbZP&rNj98>fHAO5^%5|XyU%dSh z*4b)tsaOEZ^5Z3}pe%GYm^sCSuCu{K)}ph)ldVPPV>2TbNojRxk&5B^Aw*E#QcSr4TyO`8C&if67!-mwythO z%uD3Y#>Bi#{%k_bUzM?G-;|iYkw2Re^9sdhb7KBZVQoRotIF8=yd^RJAZ9CKUZb$K zCgz{Y*s|D$n17K!+Y<9{@~4WJ*U6ue#QaB@YSS)85%Y#Jw(V?3%$pR}Xky+{#-@FH zV%{cZ2V(xKjIFCX67vqlXACj#l0Q2U^B(#0J!0M`W@lnPP{!u-F2sDOjID=biTOww zn}_3w`Iy4mm6%V68Bffo6xIY{J|ku#F`p}A+xsM9z94@l6Z0kcvl}sADP!x#6k@(6 ze|9J48}er=G2Uu2N3!XfM$8am_8?{zWo()5NzAI`&tAl=M$F#C3{}SF&pyPgPRzc< ztU*jQF>5Mg(^W&vTFTfwoKDQz6jm)U!-%OPW*v%8Ju&N2d>V*ZkHVTk%=*gM`RYt! zhEseRi5a0xo#~(VBW43)W)ZWYGPZANB4#6Enu*z18Cza0#B8FBtz)gkY)byL5wn>x zw*Kr-%;vs~6@@jMn5~JKL(Dc5)?8w?RmP4N^N6XUunr(*BryjP zGfEjde?Ewq?Z}_`#Ed59U}Cmc#@53_h}l6ITYnP7?5K>*p9RE>Atp)8PQ-K(^F3v3 zJ?tiCXJu@9vvxhRaObf*9N%1KX zvzIcqOb3bCo8q&Gn0=J7`LmdqeJQLZ#8eZrl$aW2Y?&TG%yeaJSsY1BEroRyF?Gt= zKH+F$>Xor+KZckFVvZ$dhB7wJ%ZQn&Or06Kk0Yj08Jj=H6SJQ(w*H(z%q(SW-8hk$ zCJO5$Vw#n)`SX2ZT8KHBm{tnw6k^(xv2i|?nEi?Q0Ws~woJLFs#piTlI+d~Q{S0De zQ&?vbGl#-Di6xMmf%vZ+N!ygfIurjtx&nM;( ziq8eaBq%-?60?Bfa}hB~iqDUU=_2N0V!D;F?cx$*ddQ!j5R)S2r^NIsWAph^V)}@= zj2L~tPh`LMXT+q{ADgb96LTnqbvZGI5pxAG8D(tUxRRKDWk#Dm^D1Jp6xP+mpl7Op%yh5HqNZtsB22W)U$r60?|?n}}IL%+16s zRmSGeuZTH<{P{I8N0L9c5OWmyb1N}N6LT9e#}IQnF~<^f2QkZ(v1$JeF~=!m$M-vl zIiCFaEiorheC{IVMDpiuVooCF9%8<)jE(c}h&h@3Sx(F;%Gkc;USduqf9@mZ2g=ww z|9fIiqpp^19B<2sqoTZG-!-t4DoBVm0m>&}JM`F&Qu>M5Mxx_p| z%z4B-O3aTaK93P|zB0C5JWk97#5_UFg~a@sn2VILb?ixEeoX#6Ma;#-JWb3c%Gi4N z3^6|;=2>EXN?|=m%%#fMwaoLxTt>`ai20c^Hh*3q=I6@Ty80q9my5hEHNJuGme;#m8mmv-j$e7l(BVVJTaeA zSQCi(jF^eUd``?HV!lwu*2Brfe5s6$^KQg^rHpNZQ;7LmnL3j{yA$&bF;j{0aNsw3 zMtT}Ca&UOnA-3H2AVww^QD#qK#1LinB4#yW_9kYiGB%(0A!c=DZ2s&^%o@trwo^^a zn#$Pnsv%}AVx|+bwlcO%Yl#^~{?rk(jxx3^>WNub8QVWM5VIbIHG`P-$)B0T3|Gdc ztC5%y#Oz1R1{BsTVm4I9j>}ENY(z{mF&ism=PfP7Y(oCD60<4!(?*Q`_CVzR#s0)> zPX4qLvjxScgP1Le=_F<=Wo+G;P0ZHB%pqnQV&)RFtunT5%p;~s8C#|Y5Hpg(I*^!A z%GfeJh?wmttog)@CVvhlW_w}|A!Y|| z5YwQH&F5o@nL*4lVrD91^XE8X8i_fcnEjNo{m%)+$os8V9b&^ek(efBY}!vErkVWt zJ~1uCoJ>rsGB(bq5YtA?sl@D0Vf}!ZcJk*mVmg$ub>nnmI*B=hnAsGcGl`i){+vb3 zT=M5^V&)O^Lt+k~u+AaoK=S8YVh$pI&Ld_%`ST-U4kmxjC*~0H=K^99cq^>bnl zRmS#*mlJasg>?ln8D(t$b0snT#9T#8mcqK4n4B`UKfH#R0b;Ht=5UJ7b;RV!pX-S! z5OV`DMGET|#0(PiOJWvLST_>0SQ%Rnhst(F!tQe|wJu0hNZ%GkblO=6BD zf7T-AC}nJ!u1(C*#0(?m7-H5T=2&9ZC1#m2HV@Y$<~U;3C+2u!h7)rFF(ZgMk(dpL zIY}A2x3eKJ-&e-2tu`X&WMyohurV>GC}Zo!Cd8ad%%;TrKp7k7&4@Wo85`%#i8);v zTV7iba|Xp{OJdF>f3_m#Eb?b-V$N2^=HWKP{7@O2u5F1qhnOm2&ZYQ_B<4I~MiKKP zWo(?cBj$W%Y(9@B<^l?9dtxr6uy!EkB4TzV=EoGDF~nR<@!5%(ODL@G5%UveY#+5V zF+ZiSb|L0c3TrGemnmcG#yDbrri^VnyAtzrV#X75ImKrJF;`H0CK7Wc`7?=_tCX?* z#$;lyCVzG#<{DzA5Ob|Ewyy3@%yr7xGM!4y^%T}LVs4p@tIG|oMixi(U zF)tBwC^0V+a~LsyRmSFFhM2!8W9xiBF|QDlCFbwS*uEu4%&X+j05Shi#>V+@VqT-L z^2Gd;m;y2XBBn^pzm>7~N(PB}otQ<${D+vu#JoYw5@OyYW+^dmDP#8mjv(f3Wo&sJ zNz8wVIf|HfD6FH2d6$@DhNX#e1 zoJ7p0%Gf&gePTW%=44_%SH`yGQ;7LO8JqS~iTP3)TYr8)%va>kX~cX@%<05@ql``a z8N|p7kXIdInKOwQqKu96S;VYD%-O`ON@4wwnAOOibBGzLjLqkBiCLZeIggk%$e$k( zvnKg-J~3-4WApF=V%8?+LSlwdd@dqp9c64i{4p`>Dr5Wki-}oJ89Q&egqZayte+4w zoS2^yGlG~)iP=CI8|TZ2*^ro@5wnppwr>2Kn2nXO_4#sQHX(nmAZAnY=SpHWQ^wAJ zt|Df0Wo+87CT0r?>l$LVB<5OTwj$;_VzySs*0Jk}*@pbNftYQ{pI;DDrHoDcFNqnc zjBQ^x5;IB}TkbazvmG%v6Em8^`V}$TD`V@=uZh`#!n%c+9Vx6^i5a7e&7a$d*@>9j ziTR!~w!Pm$%+3^_-w?BlGB%&@BxWozza?fIF?SKOD=~KyGhP{+KlczbK^a?ren-qi zWo(%)CuS1)b1yNIiMfxM-IN*amENiQdt#=LKlc-}J24LsGgTSemLDW$8u{}FV)jtR z#`z&)_N1^LCT1^XZ2kEoF?$p9Ct~(d#+K|KV@v3pC@J( z`STZInkYUm5YtS|i^Q~0d|o1^mHc^`m^NbmO3eNg*58O}C*~DmI+U?>_3y-VQhZ(| zX0|f6E&qduX{TC*~Vs@)VXg1ltFZvor-|Y`TUJQzU;@A!d-6Rf$CiTOS;8xeCdF&h(eiZZs(+=Q4@ z$)8P$`GGRF{%l6fY0B7oxH&PW6SD;|XDDOGxGjk}QyE+CTM=^>`Li`KXH$H(A?Ak^ z*0#i)LrfJh=Tdw|5_29gqloztg|!_q=MyuUmBM)E>y<0_Z^72h?pIT`7tqL zh`Cr9Tc$e^a|!wLJz{=B%+AF8l$c$Jxs;f(#9T(qIAVTA%&x@zoS5;%T&|35UlWMA zg8Z3C%$3AUBIYV(Y#W?R%+(a1-H5q{!kR+NwZ!aB%yr7xx-pfQ>nT3dh`E9M*@Kv0 zP<-|z=9k3mMa+%F>`lx~%Gfg9hnSm{v1PF@F~6d)s)_kEF*U^8Ld3ag2j z-zj73Ml&(Xm9c4WA?99XY@Az(xsT%0M$GRiKKm1MKQZmZJV5d3Am%}ePbV>dps;2W z^AIs}h?`yk11pOg!#lgu8ggR2NUxIg>?uq zf2Ob!#5_sN0%D$0#@6Q~F;5fIMa(nG*!tW}%(Keaexrw&=ajK+Cq>Nj#PkyL7iDZ& z^bzv{F$;-#k-|z7^Aa(K67w>Jbr>;!RmSE|hM2#RKmEkKqKqwzEHQs4e{#gUO7R&W z<{uQ+;l#W~OrDs3Qdk9I{zXiYn12&9NX+XLpGCy{hnU60yg^|tA?8hGY&~2`%v;19 zLCo9497)W7m9cI4C}Q4G#;zHUCgxpYjv?kfWo#WgmYDaIv2A%7F&`*n^XE8XK2*l0 z>v&>5qWGLZ%*PbgiNt(D{+vY2r^?uLeV>@m$e)vm`JCc&3Nc@hKc^D&r82fme?ZJv z#GFRV*A$=AiTOqu+ee*2jJHPond>u&8A8li#H^x>4eM-TR#nEAH=Wos_XXE`yGl(A{Qmzc>E)_uh6M$GStnL=URPt5MbJV4A;3hO~) zrYU3V&mV}{gZz1jm_3Pkn3%nY`6DrVQ+)nJ%s%ALBgE`W{ya)dH8GD7Q=^RS6CNjK zI>qM+VrnU@KNC|&%#*~_D`Ur$r-*5w_&iO_3}tM(o*`x?#phXK8Y!&jh}n3^kW82r?h-oM06=FJ+vHj}b ziRo0vrt4K=W>Z-IAZ8AQ^%^mAiTNin^C&+5BIW>PY(D>+m;=e5*NHhu8Jo}lA!a^> z^#(BqlRs|~a|rqK7BLBBYffIU#cyiTa@lem4|Bzgn5mRVc*rFHxWE&h@0Tebdv$e6kpchn8P7>_lT> zPBNdCyut3$xJHS zlguaT1`+jA!a{pvp*5R9RtC9e?Cq)U!F(RcjypBwy32aiIv@cgGd0B`!c3)VdU_-` zQ?8zce#b#c2t)b4WEKg}2j0YE(dyhyHiRLxr~1=~LcTK{W|46_d@!9)^{h0S?WrhO zHk$3JLT)hM&GCoBKrUNIbrh4uK}uc6!rWqsT+IqxI#Wwr{Y1^|AIzfdN)9J#y1S+B z+Jr~k>rm$!i>dzlB?Cxk7(#?;$YnCQ#e)Nl-MMTdvdXpSXh<_tN#vsV<+4BGNn0+H z?q1rN468`QwL>aUy1293Y9(8os*W@ z(~wW0GfH-c)f?R@I@?4|Hj8d2Ur6Sch6xK?(EJOFD9 zg+0l*pVJ2mXkmpytR}mQqOP^bu~?j9*K5Z`5syJ_Iiv!8T-dG3NFqru!?mImx>M70 zrIIL%N^!(9GUi(cI;K>q(nh^$NG@rK^i8oC&CK}Rfe z8tDmqdqX;d&ZVqFz7Xv?f(tNsm%(R9SMH`8E`xld9mSl>%v@Jjnj$GBTRu;WOPPvq zU8TpPN^gLQ6+XsPs_X_USJ5NRWh%M2SE}IRR;eO2HkZ$s#%#KnPG(B|re8|?)#xk* zwNuKfP5Pi>x;s{305zn8Qm%|NCH;C(iO6+zri+<)Yivq(r82SboKG<`+7D(HedW{F zobKt#q{>vd=3E!5Zl&yMNp~Ms<|4mP;}eshe`zf)q*+86r!w`=URl1^wM4}l7>6oV zLCck^gHiV~l~8)mik)2>#ygpwl`GY@e7YZFVNg_Mav}zlZH!T-Vs0>2DLE3k7G?Xz-kAvPP*$cH};@>OZCcqO-#?^ zx`McbHtZh^WRf~=#hn@p%_+yl-GbIxrv17r5^hr@Y!RW$>}>k*!BiQ0A(b~7?0Dx< zVnuFk>F(lS-c^^ze%X~tqA;?3_A0G)$!xgt@T;L1Z1xqf2u*e`G_9|(P?zdW4rYoi zxvZ9XM{-drHn4?E1vlF$8VlIH$S)lzwSdNglyqNM{lo9BJ-HGnG-BVwZ(^az#U$9o zF`l%gv8mG2nUhS=8q%GM~>aHdos+ zM?mF+5NlgLRa)yxoKR^nbxUKVQM9Qk9}#1vD8!O3Uu_*jP_y%H$~G&tba5`<;{u$8 zej`YX{L@_4gnhih(qgO`T@JoAW_xw7t<>{0H#XOs2(+Mo2t357E*ncVi!cpLVoq1; zCIXj8@6(E5A&uFI^lc_j{U#7LVB{G(oFsM`i=~aJs1Y>{)0`j9V4Bs9I7&z9sC+sn`yjEeCbQA+9GdEOgQDw& zq>_XwkEGcDVmv_8kx9X#QYgk^xrP}vtz|WOxn|Lk4)!ujMPvrfj$ChXF^UmkxT@EoJ7|*JAd3)AzG#|oG~B^1 zlUbb$v89kj6$>s6zt^H)#h?;5%ML}-g=43}ojKGiseLA{oq243VPbrk%PxPv83PWs z?o;{M?M;FAzP(Y5z1VGXfNpN*>#zwY8~m;UtPnQ!tpc}lq74%sq6&%WNo>sKmo}w) zUBB#y5W2Kw1`F66&!Zu_9laG0rdm0wHkemp1Fq1W=zuqanWWo1h(j~-xxoP?Bbiu8 zM14V|@<~^^p&vmkrDDVr(^x=5&LYRd`W0R!t3Gr|`LJ3zmtf58%;hr0^gt{=K4j)` z6IKSe-JQ_;bfG(k{l=xuDNM>;opi1Z`7}npjGY;UPJ`KQnd?iR6Rm@VL|EI(I=X3u z?^7(ojfIv}5#zvN6D+4_rTi`+@F8(A(S-){FGolB4xGI=Ri z{DE_s1{JuN&cEd4;$WH>k6ufzh_#2moQNgYIwhKNi-Y#MBC3=PE23Ibi<_~;Dvjo0 zG)-g@pyuST4=fv)EAp)aU6~YWX@D#1oxz&YS?tb+H#5rNLdT0AwKP|pi&}~*hB0v< zmCr=GP^ms`Nx7F3i*K-Ia2-j^wLO=_-Jy7`?MU{faN8)i2(yde#!u`zzg3j4BpvBK zOkQMg$@Ya~sY|Foe8qbW-x}{Kf^3T|*h@b7c^_MqRdNpIBC&KxQ3UlNUOTA*osF;7X3$OzcdivK^UpPx%zfZf9h3CG->Zy!<8T$k1ZKKFmeB8OuD} z1MEpBYcuJAvKfdLP~J<~6DoTJW~s@(d~#r6c~{&Ilo_-PDv?{`VItabOIGw7y1@~e(H~%1OXg0_Ye2QJcb3GK=Vj_xFn47XDUSli&W4RS_XN1_HLR~!s)u31xEDw{+9k}MtR zu&&6~RK9{+d#X2xqF#ZCDzCT1#mtQLYpPJ3jwN-ePm5X0#|T;AE-M!);~b5bIAEoW zd!*s!h6~S`D+lO^N+CLT4zdY#HkRWO6KAd*q$4T?>DgOrx-QexIz-akvM%;RV}T&9{>J5%|f zoNKvYoLejimxDG8XR8p1b1oZ-bBqSloE$)V8+1!X$+%{0FUjygoc z3Hs-7{M3!m1Wr8R)_6Dr@{PLnYcLe7%vIXbOTv4LD?&K(E287+iL#|8 zL3T4`_1)?)SnH;}8%ccgOziF)Axle491FS3pp30Se#Zf`x8OVJ|6_Sr@&()1Zd1s| zk?GhotQe4UHo@$Ny%o$%an~3T><-63XReo<>Sh7clw6t{EMi588C_N{LSH0%J5t#( zVVI8H&w`t%uMGD0d4sHwML?n^->36Qmw{@;zO&f?SCfozbL2i(*g||WjoNCCRC%@d zo5=B-EXIlV@{D6ge3z_Q=4d#$DRLM+hhQZ&a8tVQT`~(_(hmwV4hM_x`P;$R&WtH2dzFr zNnz;`$*{2etHs`qyPnC?PG8^<(w`zE3drW6_+;#;XAwWa0=H)0)C- z^vrH#M>XoyQCu3HvTRyKF$?L# z(lG8P5`z0?<>TnPm5HU@%W*O2%$4_~Ggp@@mo;LK)?>e5{QHY84LCX3jip%EV1Et9 z#X^|pC3~r4OSXu=zL~Gaf=cHk&FL&|@J9la`=mLvikLBr-lDYTYgUhgTCW{BRx7cC z06v2rTkeaONdb=8g_~kN8=MNmUA#!(vgO@BfZJ?l>fv9|gyR<7VX11Insea}w9jBH zEVlNdKaKc_`B*vzb}YrdZayccvU|#S>}HRp)912#fk{N^AVSGtCRaFsR?H=8u)k;S zt4EDIHATKyQr9m9+=Cy1q<0LCE8qCKGpiXMkI3e z^BNnXGXg&}Y{cYbg)}{#jAp%cs1y&&RES96eWU4_qXDbS$^uYm#UW_77~U?7h7q_? z!MOOFO|9sK;;^!~2~$35=q(H3{by}CYN^LWG^i!%v5ctk3f zmw8>pb?!ne?xrWv!-ZS?elA-Fn{T)~>mTQ+=~*Nfx!Z6kW#=GIy}Cd`D{kOpg%K_r zOSnH(VjevZcCpIZOKYx@H$3Mqx#?M-rG?U|qmmOQ-k9Ho9bFh*Y|~QEx-myqU3Zta zR?MPct;AQ!w4JPI+&HI0W-X_RLExEA+&{xfhdFfN9Nh181tgmQo#}yC2{&PdC0l|x z*4HgtCjA4pAe^i0GF93zlpLu+L;L5r3_oKaL~T5e3ayzLLK_B zba+xEygEpx$qJ1ePTpeiqt8mjop6YA5!zG*{{mOLz6`_Ke-KZuAW!2yR!Z5twjdCF z^gFn!RDA9sW;FfMoXR@mPy{yB`8ruP1gla^RL$d|=HmK+bOBw1S=t-N#zIYJM{VE* z`;Vn)28&}H&Cw(87|VhKpkX&2@vE+L&I-JmS+@d5Y;<6ajt%K#Pj_k66!E>I#@#kE z=HS#$4IX;TL>`tmjNiDDnb3F1Hcl)`R|YrkWsFz;Kame+Jz$(=?;4wi=m;}%hJ?ci z085n`+-KlOTFO3P9oT24i*^Gxu)1myKMNT;OEbk?c0cBB_y}D0AH>l)%*qE*uga#l z3?N5Z8-gc8quGNu6u8@Af&X^HDllQYvlDxvrRSo_E&*Wn5+3F<#cS$An5#OO!i^YH zj%DvS;0Te~)iy|J16C((@=$YaQ%C5(e;T)R=OXG4Huz;9S7uw8ME#QP42~|y9-};l z-k8P7ui!9WkW&#n3?gd90Ylt<$B@t=kHVT04G~PbL{vC=H~`5i=e20d8 z?f5o-G&CjdDw}oIr!n256XgK^UQjt=Ch{aBr>opep|ChKQh{?>V>|%?Ywk~2FT`vg z?o_u%djvhS#68w-5W8#`HRb3#?uOYkN(V-U@EI|AkRNxA^&F{;$MPl*^oM~5>MDDi zc%%i^$c;XAvyVmT3`U9xYZm(w58v*3p1^0{=x!!O-|XSLHK2mk)<$r>y)-jr9$*Vl zx$T78J1&{VIyc=D-VOK7rQ5|dg#j!Ca9ubv_6d6HM_|^Y>n8IfW;+q^9rT1%xs+9! z{QH+-Lr?E9mxZuh6~Y%vbW+lliW-;Srak^=*&9zFH$^36H5=W=eg*izG6A2|C5 z7jYU(UgIK-C~BXX%=gH%0*&DVE5QX)$jCOlVuhTry(*qXJ+gN`oEP%c(2T*fYyK`O z@;(~3weL{OdDDH^)e7%61`cKRAOe?)XS#8)*FXGgrnA8{ZFQ}ta9!AVa#J6kDGk7Z z%k0L;h8Umtix~d=%I(8LML{T<8g^Ka0biX6GCVJ;7FuL56N*6r{=|`(gatpIQ z_ef=MS#UzwfAL8)4iTr|fr1qft*B;sthu5{Fb>;3GYHw$8$Rui2RjNnr!V(xgS4#{ z4EvF;Gw>4qHd;`>c}Ym%P%j%4=x=o+1{$kL;W26dhEvQ{bFRXbs5KQ_a1#ncM>I2P zqp#-(BG-XtZ>C6rRr@q~(zk;DSS>^z1NKYVui(*8wFt0>5#Cr2LU5DQ_|qf$?y5|j zwjBWO*+!oe4t%uTM+@BPGO4@)zrT*h%ee-QYI@)(s%}IX`(KNllyMq3__@z z*_LQeb@@9viE_18J&_6$%>*qdKgWEpxN{DwD&0GFL2E~9)=d$6^sZ6Fi9_-qqe6!% zbw3)<&phOd{eG3XU`@Djx9M3gSr*vSyGV0{-o?tRUcirp!Yu$-*oo>oHD|)>w9-@}%*fN#3z*!gVMRanJ zm|bb$^_?q@zP_^?1znKFW9JkfApHxG%`{5-F6D_D&utk04}BAdWg%%FXQ)^!6|1cqzAz!og1qu1*eMZ^@wHCQH4J_jYAC^ye@ zZqSNPU^<3hmEcFT$6+E!%V&o22RxBua-G_hv(%)69FolTwSGzFP zeOMtpi62dHSl=e3kBXvZ)MrwQ z>>g7TUTH~{eW=t$**WU-W#u1$FOQaa%AG(OU*klDC+f>%6@6RL!?Vt-+1UX+cZ+!K8zFIT;C19}}{PE*q`(c5BRuXR+~%O>xGZqI(g}wXrZ4{foSW z$Irz`!V}XQTRWnojvn|C63)#EYNrl!`p^>r)5>grn> zzYWz;GrOtNdDhZ4FEIn}0ZU?ULa&f6$z%nI;6x%-1q61{p)Du)2qsz z0+wv>+mIVaY}9ofn8L~pbF}biid>?b;aJJbD+uffYW7ZtCF`dP#~-ic;DdeJil4mT zrSWAlGq{r;PSBf5yXksq+}$ir)V*<_jHkgOtFlYDOXKoU#sI2L$j5AHS4&YdWwP_z zh#R^o8Pe=TP2FW4jV-uxcYD>{-+VJegj)5D5ysfjQP(Dqj=Q~F)Be>7k(Rgfm`+yB z@qDx;7z{45Ftlcu)^Hi3@hROlq5KN`p^WkOdSkvfwqbwJZS{vi%tiO&H{&2CYLJlZ z_h3|vn`fKXljwDlNA_;H8vS-{a#XF+g`}Ed8*+1NTN2SmD3)N$%0>lNS>(k`xJ@Xp z(2H4RslX=ODMB}exBP_TfP~aLy>xF|g4Xh}nJq?mh^y=IhB>#{ShB`hzn^GJ77Fq{ zx3Epf1vGNQ=I@lnABYsXJ=KT#M?RT1Npbhxv^PR~2+FTy4jx%?``Y9l-}^0HsV=e7 ziMd7#Ds*&H!+2n3<`c5^P+n*(GtDcxNk1R=+0?TTEYok7+~kdDw2@zO4)#C>k_pU( z5{>#pAb9f!21hU9jLpsU!B2x&n_t?l#Yy!5uhXYQV{>y^*HRGea*hYnsc1lc=s2Z? z=QQGOzK5N;0X(`R4;8q`$&*5*Z?g*W;~bHxDZp7BGB0UpZEvnYZ!mkhOlT5qwat26 zS;v~X6*@Q8*ViW+np$fxvshTyn8oX8>zbP2UCpBQqCW}kT!;r%@$4Iti3znXg97(D zJb#MkWGcGPO{R;j*-GwsCaSsLccdLt2_9!#@+%~a2Uu3+^euq<;v#v$O7*@I_T6_z zsyH`|P3*;mpw?GcPph8h?K>U27@ax1?4(ev-gh_U^juv*?gHV6M1VEd%u7t4-Oy0q zo~WNw-_n_=o84a1iHTqJzSC=}_ubde9#hfyy0+G)rf+*$e}8u&k;PdDjeA>iZnBUZ zNGJRpatWNC!%q+R;b4B*IHM)eQa`UV(bhT_+X{*H&f0{Wkw%iU~N2 zdDcz#Pn2p5DQ8Awb>Rn3#mTRvjK)pXTz>S_iBrb!CdBMwI)mRn>F-~PoUR=hY{F^5 z&|bO@r={>#z;GfH5_)C3|L#)bm#&4P5WE-89(FVrNHNO;v&K1rwVm zYlM9DWTd{39Y8%U;$<+4y9>o!e;0-lAJ3qt?(QF$TRk-lU2A)d|BB*NGv>W=9MGq0 zb8*|U4^#A(T{?qu&|gpBJ4 z2WsZDqcia{2}OfKa8C|v8 zg;Fz+_W9uOq$D@6hY=~6a97^HiQqQmT$2uiZO`e%*4XtBmYg*cZ>QrIWaQQ?9)8w- z(Y%)!?I`#GnnZUlcUU@w+GtF&nH)F-r4s32QBL?FtVGLf8EV>+{*f#{jLux}z7pT) zCFB{Rxp?`Q?<||b7$}qSYIN*`YR}?-*R2gNfdlJV-yC*VlO|0=l@H1ZY4?*ARHt0N zb+Cw053j+&4)Rhz{VSk#h>XF0a~L1{gr1bzbS&gDM9_-{FTp|H2hlG1;U|vERx4-; zYsXma$}jMv1H*MUdP1BaM^*CQ9E=yEYtf=jNte);3_1kKbw4j8$7jkRm7vl0rXuNd z_Q~VBCrzDNaw^%U_D(LDrSbZmM{lpOj)z?exii<6bP=k-nFH)4r_2EB7nLbkxen2u zTQjHLpA=y*tZ(UPoZf_e9vYv$(LMM{kI_>nO_;K~i^t^gy;G+oOHqNnx0uUJOyCum z(xGXO*NLBY&_2+wj>rzQ5Pg8#Pt4>AQzlKA*c1BV1!ME{x!C>jhv^3Sr?l7RTsDWU z6i3KXxn{hR2W6aqT61DTXY0g-^yFn7CQPa1G7+6i`D?V(FYDW+i5Lp$qKTcY6UxRw z9m>W)UCPElUCPEFaH$-F1UiWFk()53vfISTmE9&yT#;L^IF`DKvfZJpz`Ko~GI4TG z&&1vd$!WdVwZdu-tLpASdA`nXde}SHm+9fHyMetXgN-Dd`wyy*ehmY0?X^tJ*KWsD z{E4U?+LD95&c!(#>{i%KgcNm1!Q4jr2!B-7(K(CfAPNg{9A&V}_ZOQ2ZSo6?dg>;) zCWp!$PV#E9Jvb{SZ>RAusGfi>cy{QI_S+Fp0y;$GVT7)g5E19*6-04#5dTDBuqzQv zVkb?Rh#Ph;?!na>e}BduCZ#bLPc#WG6iPrCMCkn_G*isW^7z>f^mzT==z@GH1;5)g z7d)m-`uIQcdUQ6I?aJi3<+ZGd*af?X@s))Yx=DElG#=5?CmwZf)rIYbY*E)^@|$x( z;t)FCAtX-<%&nG|8&q!`fTFPw*Z8r;Z(iU9InE3J1+0ERC|LST-$L2`A8U`IticRDhu)PO%J(-Aayx~~L^ufcRH@JW7W#cz+!ZxoB~{&m zt>n@KQ5j4$w6(j3c*0~x!;@_z|6phZARN72329-vN>pxPFj1>-BB_gy!~hPbrV^+O zKI%_sXQnc^k*-|O1n_V~2VV3pbL_l7xkq@5u`Py`IVRRx(HbLAOKM3`vs8=J@7eUb zUyfP`u`-%gDkI6+V2m%HwZ3Dyy!BnmXD+*i^+`(CWM*iOFDRRvYdbm;csf?6Brey1 zyM?))0Frv-S1Y*q+2hj8E5`Ro&#<6!%7*6L8axBoh&dbXlo@D7D(Cj#D-zk2 z5b~CNcqs>F5SaBw4%%jrE>oxlQ-aP}8=+tSjB7CI_pf!sZD7rBj-WfydR7pdZ&)72_!!zk@CKU2CwLP@2)# zFOfbT#aR$*3;|6!jiTRGV1qNdh6vvN7rI7OJ zTAx`y#Jg;W|EtsE@UxcPMLZ@Ed=^3Huj;-9y7q8yTu-WNuy1sSa~bos=RFDT^C7-R z%kl4OZ}{|adEApvI?D4l!9S1KF$gR$S9{~D$3-#kiPb&tY~reyk1L`VE_vs@bGYX% z7&pXg4HB>u!maY!7KB@b0lOOXKffE|y^TNl$p5Q{BV5@^lug3mBituoz923d!8O4R zT^>uv@M`$S+`8YA+xS~@TYpP#`)|pO{g&Kr-;&$=TXOZ^l575!-0W}39sDi1R5{MC z_xh9VQf1@^+xz1j>OGp=u66Z#uA!-M`W~YOaf^FgCfzmaTbUQ9v;F;LaClYQ+*ud% zq_wF|9*yf5RVB6eJ^Z~j)bkGUhK#^Jz1ltIV+%50n2(#vi?j1F79NIvf4)4Uk(769 z%Xe=4mqNs`cw@V( z#x|}rUkdr|`MJV;BpURnm4@s;CpxdHqi$B!nEeK`sj7+NCyd`|K7I^Mo|+!@ZGueu z?6*NBcHMZgI47}NXt9j&ul z>Kd>eS~t6`seWEvHado1o=h#$Ex>c4xj?380*Rbv}+-z7&^)N0^Y&v)`ms_I;A zi$SwPPJWm-7nwj zg4!%K|NpKR$zrCzw|o9~@(B&FAXz9kN9Qlvecbq(|HbR)d1!bm@3y3MF2qb0cRA-v zj~VGbyFC=;%Kb2HRy(kYwZij0LJvF|f9}(Tf5=!MvlRKWISkZRY4lM1=)p}cb8w?j8+{gU;_*J}hyqh z&#MyyK2LbwGV%Or=$6oDpd+ErLYtt^LB)^fp^}~#pz%D~40idrRD6Lvl8LT-moYSn zzp=4Al52!nAAb`z!2k54d4#veX$CoCOp!tB1sNncQYhww7Yx2@;jd#W)4JaOOJCRbhPrUIAM`c|GWjB;Mj9Y)D|(v-RZ(hQVDopq zwuHmGL6uDF`4GJ;>2E2FfTOFgxYvlE-0`-D>Ggo`PvY^}L2MP{jS)EI=HI*YuN3S; zV51No#v0sb#7mWYphJ)H_-_Ol3G9jhTa3*$tlV)V)Y52=!$y4SBIs>_Z?ECo9JH05 z;QncE&VPzyE4V!Zw;F`m@EV)N6Ekh`f9siSXpJB>292@csDU`+W0VJ4ERZ z@9-n27fM@|{y}Q<4T1gQRlQ}>jxT{qpK%p*GW2Tb9?)x{HPGvz4bWdeJE6aXE`Z(y z?StM7%|LH~ivPDlmqBlXO5?vBdLi^4=oQf4L2rUChu#If7y2;tJ}CNP?~l-zp?`wD z27Ls&3KIAjbS>!P(BaT0pjgDq4#KkCpie_*Kv6KunxW4^4}?As%|QPG%|l;+9t(XL zdMfl4=ylM)LvMxt19}(qHR!$2|3F`cz5)FQ^eyNc(6^!QK;MIoK&5*hx;6Ae=xFFi z(4C;4LZ?ALht@*BgeIY1K~I8y4Lu+F4fGNyI^ShiLWe+q30)O>2Xr;)@1R4W4?|an zJ^@`5`WNV0&{v^rL*IlBgMJ8I54t|ee0}J~Pz=Y*wt#K`9Sz+Ox+`>JXbp5zXd`rU z=mF5JpaamYq2GsY3q{@Ws-UO~-YBSy6Wc@YhVBS`5jqBnGKv&0dxc=C0)=>posgjt)P9-G0-%059p!LCTKr&9u#w+Wd}i#MjEGoqSYcg z?-&-?WZrQO{$_aVhaDlldUB00XW{P$=qUWpkg%IZm#Dw}?K;1LK46$#L{m0*DHNl& z8!Tm5aD$~C_WW+s%**DP>m^Ro56MKJDX{-}h__7Q`3zL%WzR$Fpf5n1p?`%Q4E;Ow z`%tvOWs;_ULO+6z#-ICKkAFxXhGNyvxtPz4H1in`?RC#sKFKvB@h7@xDW9rYl>@Nm&xAO6VTAY((Di$7G-9iJ=Tjl7jSxd%E1 z`T$hQ{!)z7=JvN#j&`^L&bu90v>PcD^3sm|(6 ziJ->HD>`L)A%VEh|5AC-6j3Ha;x|u*B>&fei%vA`Y(k>94ICx?gZT5O8a4qvTA&-j zt%!0j$czcU9w6mjDo`zBSp{5zaz6}NvKX&t-4Nep4l3UE_Xib0<}Ok>qz?IwP^*!c z&x1KOrIDIZi_7J+5Z;#7QB#rk?jz+Obz?LPy9D;@SMlq{4N$2YH$lfie+AtgdJ9z6 zPq#u3fZh&W0L2)l^MyO1{rG+_vm^bzRI(8r+nLLY}d z3H>wlY3S3?&!EphzkxmnT^(_K9y$#A0(490OVH8Kze4MwZ$Mk27%P{}fxZQu2Ynmb z1^q8H4gCOmJoIDeY0%H0S3|#m-UR&``fKPn(2o$lgD{lJ_#$W_`|Qh`KBr6fH&%;v~5UxndW=q%>X3duL!=+ z3cf!Te2?x+EDWq7Ql`?L*2cf*2liD^Z=}43LUYhHp^KnvLyv~813eMC9`rQmaHu3_ zW9UcFO`xAcHw(Vo`gb1e8{yCO!Lnbm1-`F_Kbbd7M|}2<)jzpL7#VAeNSXf`f_L2D zCSNcf`iD{VC4|xgOAuu~m@P=YN>P^W9c3XVU1t%0v4z-ZI7y@rMg(kW`!8P&ULb-S zgTqEh*x~`!*5Nsb=n`0ZK$LmB2eb>i26(U!{_qi6`qmo!yO5NZL25E(gm#P2fuz50 zAbn=3-yG1({r{Z@k#Zge?FsBfl#k@=AhZg)1Ud$K1hg7@6jbIrM?(wHW1vf+%b>?Y zkAq4*H~}hUb0SpA-Sx}i*w?Q9-wnHC<&V|Z&dH{57Xcu%Wv5rt1h)w#VXYhAOtbWQh!blrE06E})hWK5OpQUmJFP)u>9z9ZKojJT} z3(vWf223fJ_>Q#m5sD5=MhJ-=m73HKsf?BChs+SAm*I-w7n#nx7n;B%UGcHt1I(i( ztsg=+fPM^>KI0SUcEUql#78TtjZ7Wx%b^66`6JnvUUnMl2Nc|UBVhxut~ ze_!@W>SB2>*Pw_z(f6g1>BpaoNUk~HVJ>b3V{AK>^dg@?mEWWsPlRu%5*9GYhm%70LyDY(6L*FE12ZtRH z{waR^<$i?Q%=Pa_Na0Ewof0I_ZP_h0-%D-w?7%7_c`D_ zw-#>OqM#)M2Jz>Q29XqerCkG=^W&9G~!|UBk8~0N6Jp>qg4030{afD`eVqB&@r&@43#lt zJXF?t6QLc@NzenJyFnK~r$GClQ=zif+ZQUym<~Mx+5naMIRh$dJ?uB?T5mt7to53p z_d=VYPeNOvPea?GpFumIveugom9c3KRMvX)pt9CG5GrfE`A}KwErhm0(@@JoIzu#NfNFe=8gB<)%@6 ztRG+5c#k^x|L}k>_bX*A&`u9C421aq@e$wMlyf7#e3vd(%710!{c7kpWV~MkD&zgy z&>7HSP#N#nh01up9&`Z|_i>i>KsSV*0>%9t9q%`RN`JZ;^lIqlP#N#HhRS%qEmX$) zDrmf)dRgqK3zF;dxpic8kLp9%rp4-sTqE^X^hBiB{|v#Nd9Xp?-`$nh$jf9DCi6DEkzwv#%ROhA8yZ)8&solyy!Q1s->kEN=j95E(%PW+2x7Pv zjIR6!0-K1WRod?`sFZM7mTBgTxOybl(Gilac%D~O{ z&p1kpkc}(pIrTz2MMQxQ8}SNUky*a0T|es?jh6yf-{Xk0%!VI<^B^uRI~$h8@e>h1 zcdEmlduO=IDHMsD@4tJ-!$%@fmB#B9a6TMymd!och>^&owMgy{e0KYCm8+^`?(?9} z*x2QQK8vWwLcRw#x3<&#TR{}1Af68V3G%Dtk!cU}P#4`t>Y%iTnJ_d3_MfAEOTD}t zDtmUfKxO`Y8&ulE?a-;vJD^fe?t)77yc;?Px*U2W^gihE(BDHZhduzk4f+S@W6(cB z{|fyR^mXWC(4j-H=LeN}^Apewp-(|~h2lQ>vLm3+L6 z>^FHILc5_KLo?7%px8h4K80d`)cX>83iK-|*2dUGNBGcHp!Yymh5ikS`}@n@hpqv| z80)PKl`{~-prfJdLFMej`cSM%yx~x+IlK*_SR;6wKyQO?3cU-u8T3Ku=FmSuw}d_g z-3p3xB_7TZEPEAN1^oaz5{mO4-geOSP!D#1j)d+A-4Qwlit`ZO&QKY%#zBvV?g~8x zIv#o!bYH0SVb#!hzu1c8%f}6{@w16Pgj++bUzBSQE!|tY2yMdu4AIx2xvm92ONN&N z**lv(I(#@frly;W9}$plQhI9Kr}YlM+_oL|a^#)5WZw)-i)^JB&Ph;B<;HhKN@ zYA0il6?XeO(iKk*ntnw34EK?^O8%@4m4D0U1k`_t|A|mcUp&+qU8ny5x*NWq0hP3! z3H`45bses&{kHkls-xWh(F~J$_sa4MZAkO$9H`{i`B2%{xDYD&bum=(>k?=@zwSUa zmVJ{kaFO}k_kfXwvPKyDUrztZ2Xt27Cdc~-?q*k*97!C!0=Rs|D^76;Ms4l;SciT^C9 z?mLeT+;AituQKp&5XmO9)QKA?*gY)(FfsGRsK&sZ3lh;a|j8; zpH#V<7uxCgp2|d{CxCQP63mzMEc{qF?hD5O_<)B@bH!ptejG+lk>JTG|M}e3to*=9 zM&3jwv$#tFzhqXg!T51j95^y^9V%ri8F5E&bx@L}DYw*9k z=uZ5>S;iWS8R19zcNv?{hUN6Y{=u65T;(HZ6YL*DWzYN*sO;^03Qa;+TMKhd=uqe& zbam*l&^4f^Lf3@K9>H4BpFr1!UIASfDtkTaLvM!;hc1VXfXcb*4WUm#H-Wwc-2%GW z5X@Pj8$h>)E`V+WEkLWF7eYruWlp~x^!L!wP@L8Dc7(nP-3cml`JJJ-AL)&S;y$Fe zD^%_!jE7=>)0+U@209VC2Xr^+UeMj4xCiY`h3*HP29>%09?&_^J)s9f_l4r#vR4Bg zfKG=lh1Nnb+4Sn6r$c8#e*|rU-VJSr;tZMB3dMey*9P4M+78_x+5t^KXG4#I&Vl{_ zdH__;Hy;GO0(vm?SI`6$XWYFc^Z{rW^ciS3^f_n`ROb49(2t;L=$Ft#q0;dm23;GP zfsTOoLpOmgfsTYOh2m_qcMP-!x(tf5$KEN>OQEMiuY;Zry%Tx{bUE}aDAsx2+0aLz z=R)Ot^LbFLqrCH>SRZ*8K(X%eE`nm+;#~^ugkANqq0eU6$Sm@QzlcCo_uY+C> zy%YKi=v~kop?`zk41EXsE9iUBTcDpnZ-cIdN$MTY^`Un{w}svf-5Gihba&_j(2JlC zLa%^61ic>mDD)-h6VOf2rv41w7Wx#l9r_pOUC1lZ-tJA-VcSJ%l-)65&A52C+MrtU7-Jjj)i`N=#R#q`z*yjP!+fJC&1}c6m>e4l}sIcL>H|c~B~)VaSwD9+}Gwgh#2rMAt5( zVKA|g{#<7K@@aub@_m2*t2YPVOa1$Tz$zknA^kgw+3OSoJ_lnBDhW6Qx*-&OsqW=; zL96k-8#)u3g38*q7upBK{l;aIr-wr0<#Z+N;-|~Kdq&BbuF@Xo3vk;fw#JZaw!)w2 z)KWRMCFP+!ylqL|Wa|Htt{!^?yTNb?!+l&>_>PkLPHTaUf?`E1Jv|zyzw+r0X3Bx& z%s_KN-oF?*E3rFbDfuot#q!w+OR-YESF6qcpQK6heJFHtV6Q>GNqT2NYoR!Uv}`sM z&;Bf12yKDJ^Hus&8Jp|yC!e*pi{>ltQ`0?JxkkbfeYTXZn9JE$+aZJHm!SOn9TJ55 z;41g|uGtzZ16mi!d`w!?D1;$XHvb(lSgF|gn9Ta6m>p!?{28vyj--h>AoRtb9GNLT znng%iN8cZrKS{eQ;x8=^Mn-0wGQpEvlqw=|)o4U!mqJv*wFZ9$H=9??O#x*BIR>tm zq7*cQj?xTJCcL}AO+t^%0R70x>~=hyT=0JMBjF1obt@9S&$$T59CR-r5&=ID69d`t zsdm?w4vxy!xHNwWS=N4G_68X%U1F?nvWJhp#AQ3;51&yW-G+ZZVk;tM?n`saW=p^5;_jL42tuY-bqlLxAabjo&-Gu zdK&ahD9(;~KZbq|y%;JRzL!9ULVpUyJ!S72DDDw^*FkaC$GZVK0eUkOXJ@=$Lvd!t zyA@i5-U(d}T@JkudLLBw!G90MbC}*ApfV?Z2paE$_e6Q1O6d3oq5GMi!PXfY+vFPA z-;}-IOH3b(H&+Z6Q?dj#)fsF12E0hN$2Upa@Y|e@coK4%54vV)|Js|vIqZLemLGT! z_N73i1yTso&a^KDP^O(p7b$Ih6rBBeh>3PE^wINKl6Gl7_%9r{W?=tc@}n8LHMAYN z0~GUl-N&2_mA(wmE9!pvJZQWec0qmH2#oZ~@`*nifU_lDd#oJfnk~Re8@j4g4*r{z zOT|#ibDYdAncXmxaE4(l@x;9i!3e}c0;d%%KpgJ z(8HnELJQFAp)xPO8G0P_7U(6=+n`rL{{X!c`Y?1k^ik+b(8r&4174yn*O9mM4;tI%$0BE=spn>NBr zIxY?yK7Kg@TjL3I<)ud!(~(((Ov!run944`t8_hS`IYk?z0g�h)qHW0F%%_(%w{ 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ϖP%I zXGqtu5wi881uM0MjYVi3m}(xK@6!-Bw{cso+cufps(Mf-N+4M`RlSjdihUKLF^v>T zB#o4&<~@mB_ia)Q37PV{0JR|r@5&KxM$-IId!D_v_QrR9n|8-XZ~iRuD&8>)|BAD} zbl3Sg14>^1UhTa<{6;$X_Y42EpL}@AyW?sWd~kaGyIr4u`yTurTlnw1cyr@NcLq*< zyFNAJnU78{1QQ8lB;8O`RIEymdvf*IQ$G04cY3f1v`F}0Ty*aJHTR9Z`juf_SCu{A zeS>^A0RDe4?xpW9%IJFFxk-cKy*Og=6!T#a&u|p-lPLh-WqxZ@e6I1zG?>fEsO%#I|CYH;pZ{aeqW|r8#qD4C z=2zyx?_^X+M$(g4E;xJrXKp!h=9-@kNcr`9ow8>Y{A)h9Yuczcaz5I-`}WQ!$NvtC z1=!08{*Wj4f8olEyEa{NO61biXJ393r|1a(xfc(tJafs)5AUmg;Gv;UzVQSs1DbqB z(o2o!-hbwrS%dzt=;0^tudX>2`GH8^<-&92p1_#u>j z(b1<~-B4A_ZA2|CM<14-R`?jfYB0#DXsSK-GUH5-#^xK3J)Xrdd<#EDL9EYJLURv& zL{)r+w}{O<_H4I=s%jgLJ(|kqP^|dJq=FSjkB>$ep=NAc`2-5lSXC{bdTps~DQjtL zZLY*)L!=H&WDNzBI{)h8Fz7=G|ra)o^6NxlZZ--Z;X}EV;A4V zPoR7zQ+D}O_i_3?>;SH`%Ntp*Dm0V_p9{2jD{UTD%v1?F%K<6{8{SBHRjQ#ps>tTe zuz78uW=n`2hVrVNhVsZcJ#_V|Dy-*_@~HKof)b+JP+rwzD37}Qc4x&C z^Fh@KZ-k*dY9go`gg4bt9yJ}*^}-7n%A>9ZRV%#f4CPTbfT|H*qoF+NW>AZScdMa1 zDhg_$@IGfKk9rsscfokomks4nPl2iu-ZO^ss2_l;6y6UFjI0bK) z;BSDORY%IJ9x*(R8jA71=J^ceQICMSO+xH9lvi~c3axgKcJ->2hVrP?!Sdx%q)}=p zubO8lkIFbryLwfopJAC9(@?NThC=-g)vjJO)leSw7^piXM5m!(OAG~zd4_g{#WWPkcBbCD zJ3y5g%B$uZ%A+>gyiGPQ?JT_AlQiZT%B#u@i zye^wJ<81tjMoFC;3UzKMkNOp;)o}Hy-x$iH{s?M~@Y)T976s~V;q@2_R$!Qp*{hli zg*<~=E2#}WM^mtbhJrTPyvJu|U;G1afEqbcQ(l#ADCn-u zTV?ZlL48F+6phl9SIsb#M} zrcfe7L33>0V>WL$sHc$H05v>EQ(iUFP#$$XsBcPM8VrRR1ogD=mKzE!8PvCgx7tu1 z^&qHcg!izaFy6?u(#SFtTKqWqQZ{l>W+=3HLwVF@o43{G4IYo*m?7o?s>)DaRbwcR z+GX>0+r0fYuhZuB*t}kwmoY)d49jXL*f3DfN@|^kf(bnv%w?>lksuV+c)U`IR!sgZ6ywBRaRW@(6&Fca6J&C#SVoiBfk)b^5D>m=z zHt$)R_dT1p!{+U@c~dWu@1#Sfs|*DTXDE;Qv(5X9%}e==4uRQ(p**S-)F#Q_V}|mo zb%ye&q&)5FRmT|${h-bB*}OVX&nfEPCPR7E3x@Kj+UX#t+0qRAGW$-jjpfymxJ0YLO1%RcVGo4nVymv1~MyS8XyBW>nL)D`r%N z!tB%L&9HgvLA@-obQ=nDNke&5&gFWY-K)kM%A@i@y@C*4Yk)XBu?RR(IC z@a7u|dI0Lj!fP^=M=b;OBjNEgK%_kC1yIZtY=oga>Q4cDPeOQqHk3z=n@K;sCmG74 z=7LHS-qnWks3o9I5Z=v(@~F>&I#GC^H zeM5QF3A4E0g8l{?3iCW{y3cRLDxh!fm`S6msux$+`G)hrrI0UB(d-*DiAQVY__D`N z&KWZ~d)x&Gj#KV=&b_{-;n%Nan6I~B%-@W^Woiy)4i%VbHGnPzw*|A15N0+_cy0nV z(NA^e8E3E@X!PjfB& zF9dfqVyp(mxa;6!I`~bXLz0Wd@K*_UA55_Cu(4Rary<@}#1pcLtNwM%J4?#?NtW2w zjmbW))BE`HvBg)>TM2>8;iKX~)WJuZn|E-T>p@B|) z#3TUM$C2g#pK{dtm`I8a8FFtK-ZuL}*yZ7?XsGfvX)%Lq2@Gr?N(> z;9o{Bb+605v`#Ez2vogL6=;jxZrN;lK#N~3{90JO2K-~YZh@~VSkeY{zF5(ExP@R_ zomO)=Y~^s_(FXgl_wNE&(+2Tbi#6D4HA`Z<04J$tW8FMvLos2-HK(;wP9(PFE`5-_ zSq*y;@z$WB0)nrs#ZJHKDj(kw`>J_7I>VcdqP~XK`UTa^zQ%>VO8xDNmYAFVc!jT- z9~iX!V?>0#ZZSU#xla_A-XP}FUu2TJwAkNVoL*N~y{MuNJ*2%IlnGA1XqHb$Cuznu zg!=SbXr=ca`a+G3z6IC?>U?gIt)EDDW}~mte6G#c+=v(d4d|Ek*F!}HR=)KcVqcT_ zRD!y)qBbNNTIEA1mIq%@z%Eccem9tu3P{qu$Ml^kW-I755zZm?VQQlZJqLuH&`aNV8YnmHe)TnCm#Halg18zm9&-DN zlbw;2Gtby|>eD|8iPe`?k5Vbnq^fG)aBOvMt@bTK;ZS$J5cJn~Q+0ErjLG}@=URhI zJ^HI)v~$x91MoWPDI!xN>DDy( z?b&tUK>Jh3+P34EDlbiO&gS6xyTr-gL+Cg@8t7pL13l4T&y-+y`kG=y@i^Ud?zg3^ zkcaN*Da6?hr!|=?W=H)!(X`v?a^UAIT(?sKq2t<5M{GKz1Po7ItI}7}kB(hCMN{rV z*`tBZXs|PypE;!FR$pEgXo z@N7@U{A5Txc7y47J3;c4uiGB>v1c%lXp!ONJ?hr;_&0Pe8qJC=8Rz3|7+TNro}uY? z&Pk%l>^YEiKUKE95RWFe?K2&8frB3Jpf7aL{KT&n7T+hc>HZG-Z%D-Q^A`vG2M7Ht z2mPvp=DMa8maFX+{dEWZMF)MigT5_Bcidn(|LlwUb&&q9mHDJvcI1ON?oC)-+sHzFHYY)epg2>c zFIavCwB>Q;KAN^RT9P^?nA(~OV+y<9(XZoYc4I!G^yVBvdKbCVOKUwHij52z8=Q7m z1pTO*NBtQXD~w2m@-OvboPcc8WV86)EI#ZdY-&$rpoz{dOuRia?KCE~ zRFMZH;0S>9E&JEUzt8f|-gX&np_c73>d8miKDbTdLE>XYbd037As&C~6zM{xMB;K1 zOQidZl)J*4Q(}2MNPMCO#fjqU554FZA6}lOmSs9)g+$q<*+M)y8r1Tjehf?wrbU8I zxmY&-Q0X5;o_+LJY%7XHF)l|2dN^X}IEl5O$1RyFq6L}MUZ}Ba0E6^DUVMWO5npDa z;m{g?PcZ~mV)_-B~bd`MFoF zS>E=X50nV=-KVzsyYT>P&#&CWH1T8jW?+J$Dl%_+)b@7xTI1hcye6=}WKFPp_Vw5| zbiG0?@9}5s8JZRKr#b6kxKSMB#oychO@w8ULpjml{zz~mElg2LB(MqE94$bdy@2BG z$Wg}vQuBl3`)Tee0LSRDzp zF?bt;N4sM=4Ypx?x)QnVE{O)aqXokc>}18;V^rk0k7kr#w_+=nzYl(S@st9eP+FJpn;t#Cb^OkSI%a)Wy)RpP*SaU_XnBoishCD4YLBQ} zkdzKQm_9fyRd_UrIRoKB4Thi{V?J?$qXL7sus@T8AguSRu+ZyKyZ z1yZGhqa`V`O-rOTgy}dC8X_Sv+&vHtWZCMRxi&Je!=qEGLn0PEpQ&;`1R@MiRLf34 zO3{H+q?Il+{`s>NL`r>&4z$vP8fa7H*+e7XK1e)e#o82mGRba=y4ADkuk`aSOF~_= z?MKS(n_E4b-k0*z(G>3tQ@mhSv|n_3%9NtikY|&E&2HzO6lsj7XNITknZN^)B-`|=a z%7}YD?xq2o-lex0(csV(f8blj@E^Jm_B}EuMEyg^vQz2xY*VgnF-*C(#W3aC7Q>WNBNCbN3<<7H zd4^@mGb~e{VVQDp5}NX8a5ywOVb0r-^OY!0Dm-+9?v9pZ9e6#wb$HCYqt;X_%voxz zWuzRT$zS{LV)J3|SwLylk)jmHLoYj6%XHEolwmBe?zuszP%{=_o4Lg=_B-O=6<)sU z0Bqp_s7|}IbbngJzdIVpj0E;ZgS#xdo3bZw_?~O`Z_^7%Yy7(+{`Ks3*CSpiV1~M- zz{I#AynMp}G*iadQ5_9rL;@S5!OTc-Q`En~HZObfviDrOd7FPb!>O#x^;ZC zD*k$y9bbtk>|iQva2=|9J*wNbby-l_gq0fJTIT4((MQOI9NB#`KP&AseA5pfY5#0@ zxRkG6Z$Nov)PJ_L#Q~ex5<9Sll)7S~fBgA_VU>gf8(`Iq89$@P zOpcW{h3gNkAyl)pp=0n8*8yfcK}J8Tj_N^ex9BGs%V0suW&}*0-Y3#Y>Ig+2!aWbcm zJrSGb@9B8aVKgD{5=bk7nDm-!zEuDUC|Z=^T){Httrbev+YenjvXa!AL0LlK3o=Z$ zp-d=e{HhWwMPG+YzvKwg=NymecVtNp&O{I~V;r7fTtzDut4AvLKR7?W_za}FGSG2? zWRp@$LazVm`APdn=7++U7L-_D4qaHN#NqV86@R8nACDw{*oQ-z2hsbG-O#brof_UU zm<#%SXX}#RaAz7?P&f7Y@bM0K^Dld@?e1_DW3aOraNpzahK^dVh#bvT+lOOLZ|Kpa zcS!rNgdLSEIng?G)X3Jm`gdfFeGP4EI9ccu#9Z>dm=@t2!M`^yjXG~Dk|y`5m5niCn#zlIY1zR z2nnDDPeLvb2}w*&0550|tU#cm;{66{>%CI7-Y;0GVyjjy{VEDATC5<{#!4$zTK~`U z&g`Du%}F3azklU(erM0~>^qm8dFQ&byEBtj8G0Fdvw9$44Cjkzo;fEMCNrvFyC8S{bL(!L&O*LODTf&jsrzjN71{ zD6GPEHxq0UWXY-lY>Kcez;t>S+3W@|t(RB8O2yr~VCM^aAB=4r2B!0)7EFiIY_m(jE|B;wv}M?`$%OX^m@XyQM#-=jY_=AxO#HqM zrc?Q6FdY|c(jqTf$EknWEEYGDKNBClz_h!5V0;lAc@EYh>~gUF!mwn!)ay7d%8r+( z=giY2&dI|(dXSO{#WFf25RSHo$05g5LJ0lNfj zn6L$4ykm;v0-3TfbsU$(#PXk%-3gW>>^`vJ!m#k88X@c%uv}s5!19D)i9&uM0lyo; zt`N2v>~djSz~%|V5`^-hah%!#cB#nPz%CKC6YOGPyTIlO+YL5H7`{J|kA>sp!}(^B z@x%GBumrFsVToXT=PXVogIy%7H&}zPK4A620$_E*`hm?7HUO+v*g&wE!cxF46qW&2 zBP<(ihOl8^(}m@LRSU}ls}jb~`74DLfK>>q2Gb>b1(>dbcY^8q@jte0cXTbLhJtC^ z6K!?}m=5Kqw!1fN*&o1k9c;60kNJV+BO6SITmYs+o@LuEvTg6SZC|w6Uu<{(2Gh0s zM4$e6Hd*C>>F_3j=~~uo+b*|le`4GI7Hm26lC0Wn+XQr*KN4Lffn6iE$AIbZ27)aU z+ib9udA}yIDd$6->uqm~A^6 z>?W}-2D?#M8Q2ZNYQa_rn+tZmu!UgP37d+@%?C?X^S~fRIeiRFYw}Gnt&P9hwud4k zSBa0y!L;AIz_j1>VA}6r!L(m4)~9W`>X`Ps3~Z%b?GCUzgms5Uo!)oAAVysJA7W|a z?_k=NAHP2c+hlbl*aPD3Sg>nEb{d#=#}D1_7u(Tb_X#To`-!kJupbMn1-n<+T(EnD zZ3V*x5rdsJJ0@9w>YS{CV6CuCR`p;@gsre;AAsF0vd_RCl~BF_)A3{HTP(H-U_TYx z-e8Xi>j(C*uqrUEgJ;23i;vgA9uxKjm=5Ixbm5xi+N{`Smx1YY+-b89!E|`>M_7J` z*{mE)+b*(Y&)Mt^n|*G(>)qQ9#b%{8n-8YLyWf_*VY3}JOTu7MyUPaCDayCmMYiqD zw(J3$ZLn>-A7%MX1=Hb$Y*~ZNR@t_{v1OZW7K5Ry_B#?x$EDF`*V*i6w!44Wvc4GX zY9AwPb|IJ!?^av(kj>t=ZGFdBevh_UCD^Z|M9c(xUD&-~zZ7;q*sH=G2767|YOr;} zo&Z}b41Zz@@Q*Icn4-wph4I5hm~%~zvE&<{SajjA!-oC4e!v}mq~JcsWR53Z>^`i=+jjFB6^yc!rt!_zrx-4nr@RgpaR%2x2 zlnhaCcqBvBR<|T0RdvUx#o;R>UG?@zGSvW&WQgL3$?0pTDt1dUQ)LMyhnviFwbbJ# zQ{C>7plo;~L)F`ENmi=b>XD?YT^>oMO2+8ParG?Zg-3!oyCp+X)eMg$UA1^5nQDbc zGDO|)kqlMOyCvDF>TQoCUG4NpGF5N11dcdo4^cTD$xv14mY`lN^hh$)%^pdXT4zfJ zhq1ad>M0EhFxsE@&_?sM&$FI=jg{P(>kal$0kma<8^aa-iVM%9kga!Y461{)T9oM4 zj(9i!V8o5EXXKxMb~yPu92Dse!(s11BW{HKQU3YIaA-cmk%&XbkdhdrB4A6nTytGT z!^O0T_~MJK+F0QXf}{+hNI1jVx#8CK+E~6gyR#ApeKF5)kA<^4L8(=yA9s6@SVqU0 z^E%pC;XDk<8u4X?^D5myy^)YNwDYwCl9k4d4*8#uw7GmGz#@RiMACI4Bq_F}U%@zb z4C+ZlR>v6<>2w}(O0wwYUZ;fJ1viR__{yf_I;UhPCD?Q$;wF{-Ws6Ia3dtOoBn^@} zmn0pMDwl+jE_F#5>4`20BaN+H99L(g&u~c?X>6zCaKlKS;FP2>&PTW;j59Veiug)n zoWBvRGT))YG{*T0mxOWt#3f;zKX6GH=ij&_jPoll3FG{fOTsu~Ax4i&x=B)4mpZccoUkB+QGaToUHjubmR9JAZIW zQdxcqToRU_JX?YjwZe|GGA$%qqc(BFI1g@&3_Xz@XnXljv+L(0mRf$WU9Jg-wru$$ zzK|UbU+YIteKz82z41ji$V`|WkZ@xz=9ji)r?JvVw8of<%MNvFj455=l2EH$u+6Pi zF47i}P^<5{B+TXrW$SnNCoqhxijD}%NHb)J2_5C zDzBdCk}%)nZ3#|PCPFR~2}7otNNuJXNTW567B1HNQ#cIV#sjrfn>8w z@)#ryxUY@WlwUx?hb0lo|3Fgal5B%yjZ5-1B#F2u)xMl10aeUV5*Q0B*D=#V1;fyd zj`N9-wAkU$?sQ1nT#|f9R^lEu5<_fNtBP=E8j*w{S>uxMm8cYqU$h(M7el{ZBvxxo z$r7g|os#)Z2@9Q?>y%_tQty;VF7v(@mqdBC%Er^S#N7QA(s+-V|&9hD25dydFD z_}Y8!jH-&6!KMcB&ai5*rOqW)w%3RVTaZ`G#6{=m)y-8XVl`U7!rY|#$rr2rGE!5A zs8IA>Q>-`*ujN(`;VQEsPDqq(0*Zu;ZB|0XRgJT_u}+nJ87qvDja9aPDAsnU^nU4) ztw<1xR(upSXp11f6}OZYGFK|b!YBEa#r1ZyDy!z&nn5-ixo5izD|U_#2J9dlGAl|Z z5J|r!%X4kjVoB|2V1Emy$DBLDEUtH)Sl+ZKTKMw)wYH8pt}bt`4ZB`DH@dTe#?^DA z+)CNO4$>7fCzUrg0{5F0gm_JpU4j(0E@TgRT;`rO_>ny1dKka_Oi*4HUB zTiQ}&?}(=>w^Jg!co@YwbSBiwcb!aYr%nbq0iV%FbmH0p(RDq#i)qVoF+%5UF0lL8Tj{J9dIk z8#g?sVLG6*)AE8NhnEx-7vzsPy)XW93ybsmx~1a_^2QA>3{LDD;PpPo@e#VvQWZmW zsNB;_OPbJel}?;dKBulUuc~P#R(Oa^@0L0zfg7;2SUHy#!^8kO$cn+0HI48xt$BKB zLwTsOCOo66ad7>#3-OqESQ1o&$%jN-?*Q1P9s}O?2T(j4hIIER}&aiS6^E{y*@B#aypJFg93xbSK^qKg1?J#mNz+n99R3# z3xVW~pFEK?FF2xP6iCr<2ty?kgQ3ZJg<~f|J}Eyp7|I_va=gnnFMmQXw|L_Cl5u$> zO9~3|N{R}CQ*tK+hZhGKT<(P8(8OSF$%J5N-1yMs;SGnyR3Piqp*&T*9#|%*2X%ESWZFWc?mXheM;0n$*6|AgszRg~f+3ljU)Y zsdQF-9E^uBNCJ{koEsPqx>r828 z$^W)Nl!t3)Roi?0>|IExfK5~(M&?bWvxf{$8D83@m~`rYibBQPbF&qxosL$sLh(7; z{wob^+y9QEABi!24YD7gxgQ5_lC6H>O7H^DZnN}5Hvt@r*_eyL?#VKqij3)t8?j^1 z^yb>~#ysf;FoMLIOWZ@%^5a2l-OHWjIYrV3ZrGtz;bs@}XR-@#j>EYXZ{9Y_eJ1d9 zrCJ!TGl1;ghXHYy&sUII0zkYf*>1PkX2^LxXZn-PIs3&2aE$S!pML1(A{-~#X|d8j zs;aJvi%X?uji?EGRUoP7^`e-lsXr9@*oBW*!tgMoX8MdG+?3(TzdwoJc~V%>j0GC& z!bVN)b}MFFX?V>7Ve*1i3*$c$`WOft1vG`eR&aochD-ge{E!G$3a^Du82w z7Xl&UOI|HF_}W(s^C$gqOFVSe?5E#pgwtc~!2hX7>o zVHnn3w`Ch`SvCseVd7(Gz=8wMC0K(^2@Oe4mqYl|Kc(D z{E{CzwUgruEXcdR{M8})bBdRD9TK~a-+*x;k=>^zEym|za8bA$A9mxD0ljpV>-ty$ zEBY5L|DkAn5Zv{i+zD=&x^qKtC!@qQe5g-koiVsIb(|e4XKWL{+b`PiZaK-MP=oV6 znSHH(WKFvV-d%IDcEf+GKM*&{dDl#v*cje7vwbg z@lnQ?xDn15zO}K#G56Tav5vxFn@uBbgt67uhT+g$k0S+#jv*z_;8^XFL>{Vhs@^$) zjVg?*&%nRiY{O}&<4yqcDSI`va!)7Q>T`=d)5-P(MEhB0xn}3X87pR%tLU9}WG)c% zKts};NEBZW87Tlcfbr)qGD9^Z&02$ss z%meZBfwKR=JP;>@^frn6Iu|tN`?;W~lXBnB1${pk^!;2Awzx=58JtpzN!$ZuE-2D+ z{%_0&$v_u) z_->`~6{PVbjOVR19tZm&o;1?WNeGWPyImS136z8}aLYL8)!lFlc)HBo9F8;{ged^a z6|nQuB%_fKuC13N$4y?W?SDK1Fsh;M+P?hen+7DOyg}xQcHy)U9-G3AmCdsnM4wLI zIq*Fn2Mm4hi1?=F4^~5ysSY52|xVzhTkmym6FfQ6JxHsre;mwQ76xO^s7HDo%**YKh__pCC2=s{=^%O zT{ixRkEY-D;0;wXFcJHXg!4wXDgQn;wz0T=bIdmnUJ-sB&vbEt#F+VU=f7XpYeejy z-+1`VbB|c}5#}95e)*(^>p$K#{jc4|UUkbOcTYrJyDm4F zf8U|h$09%fn)h-Ctxx;+=8aeFcrfb^7~h`)KZ!BVy!g$+W9KaVYQ?M@Z|?Kp`Umv9 zR6jNzm?+w({mkdc$hLZLOMC}_t;_f?tJlq7*vqbBZ)~mkmH2A#ORQtM zY#D{;d_#?30|skJsMjO}%C_e$!?M6P@WQQE@!zp7+L|0Iw1n5hjvlu1Z$ZSWdz95r zG0B?#rZ}9xmPvE0p|%`NsTjsfRDv^W_yDDg2#a=r;muJD64_ai^Af#T2r>MVmEdEwCnFqu*t@XMXLxbBnt;A?&!< z3C*t7BOe68;c2KEw|C&Po9ZI+rYbz5t_fd^`R)3dHC1?}G!zl>rDS7~lhNVZrjeIW z`2w@=wCvREuFN544avxe%pv>bUBc(k)DEI@VWQ0;zk!nBGSS{8L<6%M?h4Fp7+bR( zzDpSSwnKu*fSZx+=4f-;%^@ERcbA}oulm2FKgvQue*Ji z{?C$ z<^VayL4Ylc{|KO0CmdtYPzN+#om>LhaF0&thu7hJKw&$bOsHzA3hxJXMBe*M!F4Rd zYct)vzLmE@q>JYxfgR2H9|3!sj?y^~c6pw3(htMM4Of(Oj;NYmQ|C_SEWU`@`IC*P zIp4wa4PM`y)-finV}XoU0nnSLcR(J%!4gKpJUszumGd@m?=u|wp_^-Pj8DX$7^|EI z>nb})X~4Mj0N%xnn$n|88Se}C)s5w|s+#b52Dg00cVfrDj<341{F_Qah2q-sUDI)} zZZp=nfvB&m>gDqaK69`P(@Wh_N6?{|BIuGj zm3yv!w!fE)dTsIMdNWeL>bP4_FRqIx24su=74+qMukCKfqDc zE)VeCm&t=~Tg0e?6dab}^_Jt{HLbcd9cke?#@u{qkP8vYGnQrGU3i@0eFhT!DMcSV zg&2v1>SrkK62>O9Gh4)GCyvPTiLuAux#Xm@p69&#WX*Li-Pa3KN%^o(jA{Rz;5w1F ze@^gwk+*+NFeHZIeE#C4_5Z%Q@bFJ&#V0=c@1yciNJakEufIC%i_96*zC3Ey7j4&n zaxIo?5&0X3PndDbZ-<^>0cZ&P`l;qn!sj(uk@9#RZ57O^Clj(Pz$$V-prtGwg3%F_-mro6d zk12-vRjFY<^}H=xW6O4e9WOp|&{UK8Ri0r!S*}aV9=2th!A=k#1JQty`BjQxKGof4 z$>I(3sY*IpY;f*6h}Q= zg<;=}>(t<^6!wj{UMY@xTx}Nq>9YZDLXbs^S2cVvW(>OsydLiKe(_ZZH4;NSLD}%x z#;FP15~|0g$rqkA1FDp{9rLhaZNi4F8=J93Nc^TF@oqSFBRDV7v5%{MA_M7^L~A?c ztqcK=X*Nx<_9}7gw*vPIb_C=J&EnwZ#lbC$gIhh@E^|kK+0_!trm0xxJweS$zHn0e zcwzS=?2q$Wa0{>Z$644ZCw`-E(^TvcjE(YkZ7hr5*xZKgau{=t$JNGsYsag?t$%nK zu91=jYXgqwD|)$m`p-dX4uPL|9C7lf3uP6Ik5wp7mNl0-6ik-&CpmIThQjq@v1D0O zR?8lQ45b!+AH_dA_c-+g{&gsyfSoL|HvIP&)+5FW1*b4=XKRf7^Fa=3uQ7b&5~o@w z{N=Zw-~7zkZ^~QwJI>}1=R5wIJ0@~Dc^fg#DO?VRVq-XoOLOzTZXB)|)?G}^7^-i+ z#0}SGgd|g5fQd*lv0l;5@ZyxD%L_AF;(V2ux{QtCL@;l32LGX$<1S-pM`JyRiA=h( z&_&iAYI)=RyA=k#+AybS=tj$|+hF}L!Z~TooQ{M;UzQ*JK@iXBMu$_zQ)9H`LhDoo z;KqL304Z8=gv=BeHG)|&ycnED+z8{KR2w@S^ZGt(Nk`$_W&DU6;q4#0{1WmU99oBT z^bw9Cm!z8=MP8kT`xP|UZk!rpU5#k$_iqQ^jHHXJZ_>~WwGqiL*3yWtvA>;=6Y(|L z_@Wzq^)g8KaMR?wV{)8zJlcbyCb+g940Sw3VHS!=uda5j6@lkB_R24M4GxzzPT;~` z+r#~6#{FQ)E&y&ZymK)eMr;qu+{gzAQRfq^)OBKrMtWL(%pl5>F%*;?i|erbu|OWvtD=m z@NDfr^!*5?duCTPhOsEgK0jXj{`-;Wi@JRO{mA#dmua|h7l)~oeU4)_j(pE^7W$!^6*x}gz(kDo>|tV6E!Ihrwb-zK`t0(W+VW|& zReHHOnF(jmQ4AhI9E~Rej7VP`t3gp?RTGxSQ`WPCry;To z<4co_<6&WPd(^@-j8%Hg5k8k;Fynxy0Qn3d1;}RyS-?^tZ^SMD^7%s<5N>fJty)Te zRlxIs(}Cqc+*-BN0BeDKCRYc%5?Bvh3~U6p0-J!>0%rrM&pANv^PwrYhvW1@0uCDH zQ2=P=(Fl-Xo;;!-x*?`^lt)%klWgG?q8MaL=U=*f7i|+&k0g^;S;2HD#@B91Ry#>1 zzRGaA8Jg`Cqm|b* z(+qFKGQ5FiqSx7$UUH_$Y1)YH6IN%IDp>h*#}QQcQb z^`e}+@P10)WHJjMxS%z%~4X3^O3Bx@o+NS{c4&b9`cm5Kk zy}BIsY-@YtpkaH(_rXB(| z#!*q5JBHssQB9NgtVA#po z&(SOJv73HC?sx}*_k@yTcBY!98& z0h8sUpbgH}z&Nv97bAH)!+Kdli`th1=84$E9 zjia;jkXu{RAfPC^L+{OiTZ5?GQXDs z(}33i#{zExo(sGgxC(d+@TWk0x7qS65KF(dyb8P%$UM3W=*{*YHAC6qN z@*Qo58t%z=`Z*j2=HNTccij%yxzEd3hQS+iAm#q`NE5pN7-#Nxp)HuJeak=fOp}14 zRv5NnL>^N2_XF8}KLF%-;2|LUgr5V)0G|T#zUFD*J-}yxtAWo0p9j7GTnBs+$b5VW z=q(#}L(Xzxl?{#uj={NAHYVZRJ074Px>Le;b=Uzn9>quAi@5GeY<6- zbDD#3TqaDZZOBjN!>2%&lkLFMfS&>LfPVwxolLb8SPA?G5c3}DDj< zq+2)Dawjkr_#m)5ka>(RcH5Pk?T`<^VU?RrC@0Q-=6sxc#~1X&wr(Si&dQD5!|(!@ zVSzN}fG#y`7#v+rM-7U%d{DPE&hl{(@{RgF7}y8c3)mN!3}oMO1d#U|y@8zjIudw0 zun+J);4#3*fyV-00-gxuxT8Oi?|hyFWL^#cdfSzML7sxcDj#s;Dj%~^KD^@)`eA%O z!_is!@Qg!v8O!`%DJ4%J!BI-d-nT8wEsX)GcN)CSBWnwjryx(67pXv&oirfJP9~6L zXDE>4k~4rDmka~m13U}JG3#*PGr$o*zC4l(dbdt}`F$gaa#T-c4JsRm7s?*3J z2eUf|r;cWUGguK(=W`d-F^wNbr7+A@ApfZM24Dbq5s>$^O+dB_vw>_E<^tI+%mdZ{ zTY$~L`M~)=XuXAbw*crZ56?r+vfwNa$Kc#54}8_jJGP)7x?$VXS$VL>7FOVJ?=%Ne zX_$qC4bzFUD*qukbya@Web!6MP>(duJa0uFQMXHhtn7VmvXwDAJ{Fg|bN=q%4Yycc;8 z$X4kQ;AG&VK=w7Ofq3Ssegnx>D?`L6DZA-f5iUh90rHY{UUsHhKa% zZtwx~fC)hM7Y73?fxUqBz(n9(z$75&s<0iqj31JL9K#+4Wd0rw^p=?wkoUpiEHeR| zqlfHpUV(n-W;u@NWu^o#M(BY9!;WIUqdiF=+Q4Bv(s#B_BS(`QI0SI&9yoB^=o~jt zhcwP{!?DPp0A$Ajc^?@74g{V691c7Y$bO(d@M7Qq;8nnrfjmf`3mpAX!DLxxc$abX# zSOB~dI0d)>SP5JRq<*ggdh=`nqr@NU>WL##@Vht1D#V>&jMLT zo&&Ouya;3+Spysc`~{HXnpc3+fNO!&?=OMgI>8<{5r?x*9D#GIPMn5z&08nvhi=%1 zc9>_*I>8G>G5_Ut!n#9YGR>1u>z#jZALY(XjytUUW3s6)8Xt~QVVJi@UQmZ`0Xatf z4e$iuyTEMV?|`F#{{uV^_#Tjb(*|H8@O>a7_5skFr_Afl>R~eS6koTv`YQTi*($@) zL7wVKi36(|+S6C8hRipn-!jw*jk6B^3HqjVFP1?MmZ4r~ob~V^=$yJb7|43q3&?tS2$1zK8OX`S!-3}mj{veh_XbkGM*_Wh zHW~8H@~jW)p|>xjAI5`o%hBqg7`0_Hzmj%TPBo@i+>EVFf|xo%-qvWWJpM zWWMzWGT%-Cjs~6zJO?-sNZk$sdh=^J`}AIZ1k!ic)(KGK`p zbkcEdvyE=SVHxU=#yOvT3-X3Ky%iV$-UjRsybE{+@E#z?wD$rh1Ah#h4txa2=UqPq zUJYCgydL;7;9bDSfXt`If!@6590S`DXWp}qxAH#P{U-g;%>_6*$om7~e$$!3e7W9r zm%{uk!(kcfgvL3}eGdAjo}LFD4}1a0@zTpcj+b5oGC$t}a-8%VU@7ozAa(l=(3@Wm zLEc$iJv*lT{U-geT-|}Aqx|~6T~%FK+wPqe>W{`*S2rMUsMGg>0pJHf*3~}(Sy%rA zWZrH8vaWs%oDTd8kahJlAp6)h;B~;yfwuww24p^c0rcj54dk8G)oAyn^usd9J|SA( zA1L>w-pa~z$1tkh{1Ej*lZ^7&+}M@9mV{YtJb=YOhPfU?jzZSei-XF=!G)!9I{eK|n3eYrr6 zRq}yjfMbD^fCWH~c?yBl?>L}0&n|TMcMqNp zjN{F@j^t8LG%UHb!tl-$@_@RV4CKAy6yOQKslaSt2si>b4aj-A3Lxj{DuEnt&IDcv ztOc@u&jRwAbwF?4vcK!BK1RE5pdXg8avUAx?SXLL;B9nWgG=UP84k-(Cp6BwI2-z= zp5_2q7v}<57cT{}F3tn8E?xm-U2Fk{fb)UW?Ug`pesK)iS$=Wb1n+Yy`e8iU&yVYV z676TUa~Q(#qnPhtjcj+jCv7PEEXz*@nQ>i0pQH_!G|$GY|mO4qRi>={(2S;w|j?xduxb-;Pbu9b9 zx^-Z$wZ~hB3}|7Gw+>PtXTYUps6!g(y~C@>AL{irU;wxd$a{xh1J3}y31oeI3&=9^ zHn1G{4saImT_E%1w?J<`@87YC)_30*R8|ej8#5>zF8kP0$CriiI>#J%|O=2 zkANJjYyq+!ehlPT<-(aOE$N5xU|S!hULwB^h}U(!`Q_^Rm|qPz zEJK~p_;K(ajpnb=H}%v8WPW`PWc#@j$o$#`IMp&0*bP_%j0IBH z-GScxtA@O*`A0vD7w;*f=idSGDycXB*dN-{l-~MAozOVPEeX&!^>h%B`FAjo`IiJ_ z{v8S&3p@cg+t8dh;Wuo271)y){*YQB+S6?9W z>qH>)>m* z<~ShhW)YBM&I!PCffIqOzsvxh53C0=j0PaDaS@REZUlPs zuom*J<{|wsUTiNq$io9-0OQR=*8m1-_trb=g~nO$E`iRet4o2*!^?oo!z+Ny!}&no zyDtEq2V4l`Sm-Js_4`AhH_!It7{=LF9tiW%-Ynyoro%C3v@y(&pl{~aH9+Rqav<~T zdLZ-b1|Y{UHv!q#-3;Uy<`!T%@K&HVzt|UcR>uyB!E-{-cP{k9c(6=3>R4`l!^I)F zD?bo(%hO1D>lbxG3vn`zX+x zU#x$fK;F~+0$2uo1xVel1$y)AGRV7{U-ZLx%*ElYU;0hm17Z%v+a9`Vn0E|9 zozOVPAa6k5)YF?l=GR+5=GVJG=GS^4>(}pq6M+8%WIcTkcp-2DkYk(ofza> zJ_a)XwgH)c+kwo#zW|wkp8=VFe+8BS+koEux)*Z9Lk@tvL(MWn+2=UE!hxObk^r`$ zAG#r?Ct70n-i_x~HP*{^S%)Mts3-=x*7>%7?w!x}eWx>bc-#govQs4U!M(wm;~Qz` zy)@HI+=55 zqdPNr`QO%E`#M{OxLJnrrE&I8H$fLn!_7eI?p7dmcRMf>cn6UE)SW=;a3yd&a21g0 zz8m;=U_Ts|;WN0d>XLpK5B7x~U7CT!|F$k&U46T9$oSGY%i;ad1=H{Vkh**bNL@Yx z%mzLRWLvo!$aMY;$o^n(H_Xwio=KT#_hVZA@m@puMC_Mf?VUWXK0L9xp`pGpTve%# zR0kzx+ucJ$d9JmUZxePhIVkB2hn4Qlo76EXA?ajWUQu7y6b_|^Dr;tkQq!_S>bMTA z)6<4z!9hPb=pWU8T586SjO_HR47fU4#Y@DB%1gpEwRW_Mxd${}NROAOX-gfkJ=q)% zKO9(k0>oxm@kxE5v?7<1uuo!q63dPA64+oQKB-yUmej~DqMgRFKSQ>IC~mANubbXn zTi&RbSBq@uxwq~PMtDhbbxf+FF->OpI_BZVs`6PQWee6rAZ5lEl?NLe>l<_HE2|{l z94sO+h&Q}4sIV0j>I0sk;#iIYLkpD{^QXra9DnV$BY*s_M+Zz-5B2NMJ+vrKe)gnk zcRu!2-Rh}}*T1;%@5TC=Ok&J)nZI~ydScs+&kSAl^X^L%+w|UAi822;^Wne`@AE&l z?z1Cbxq91mUt_%r3Fp@7C*Ck)Mf!QK_ia13^x2&=QQvXl#F)2!{ncS#WX_oO0=sb7I{uGFvIGR&to zfN?zFSDOs;sjXnV$MLHjhWXT&V4Sb>tFI07scslR@cl!-iZjfolEKitK-SwZpXv|B z_i+5`6vKQf8;ti;el^T6pUMY2M`VSD`P6w}MIyVvFrS(U#<7QA)f?thmx1v+DZgql z%%_%t@!rj^t~Jc3?gV3>?N@gj=2MS?<%{fb!+dHD*l3ZhHO!~p0UIT<-x=mpAAyY& z*`E#bsV~4dzVxdv4fCn)KD|<*Wi0l-@d};{T*&;i`FrOL? z#`^%jDlp8a&IMz8?^ja|^QjBLIBxT+I>UVGQm~;SyTUM^S_;OoiC--@3}p?B<7SjK z!+h$eV7yQEtH%uUsh7YwM)a#!4D+eC!7@a)-Y}o~5G-9}9~zBd}<2VDIzO1%%^I= zP7>KH!+h#uu>K;OXP8ed20Kw?%MA0WTfjK>^{YD!^Qi~GP7v86hWXSpVC?+;>IK7m zst+az*!uWYz%ZXG20IV3o@%9Ges!;5K6TGQ+Sae`GYlHHW$SHO&cXW2hn{MwVaQ*@ zeCozt+SadbHO!~pvt=7?Sy7^1W2mRP-7vpeX_!yli>9_(Vt>D3h>I;-Z_7p>f|&qG z(F()->Sn`y>h43etzZ4bFtpURY^yD+Ovbk%63S}B{OSqAd}{4s+Saeu8Rk=Mwrr;@ zn|ru^o3^J~YZ!bO=2L$>LfiV)pA7S8|)$pr4J?u$xsdq^QklXShBMXLtAIdT5MVJG5T44PgQ1^UsW3BQx(T* zTfdra7;3yNTW-sCgUyz>j6O~?v@eFCe+yW$Nrw5<3R`xwEla?d^%BLhJH;@+DmBcf z%251ii})GlQ;TfbQd`EVbE$+JIF!_Y6FveDMBE-(!JpeM*;g<(E*6PhF1`qgcQp%=1cYi(Kfsdy?ap)54auNE2RQ`ZjEwtjVkVW>y8Y^yD+ z9i-R2>8YMJ%&(p|45Np^+SadLG7O>EvaPnP_%x-imbk1m46T%5KJ{RVw)Lx@8s<~G zZ5f9}^o#Ngwn#!*XP95TVHnzyG;Qlw>kad%UAAnuEo(@}%#VcfykUN|#xRV1&>7Jd zV;{rN?q*uDfMICOz?MiTZH8eaXc*d(ENu&!VdzQFMYf8Mdkyoe`wc^Q+1eH|!*E@6 zzDvc&48u^G4D+di)3q&1yJ64}*fR04&M;`mFrQj?hPH*wFrP{phV@v)$7P0LWMmj> zErtoSMGI^gMkr_LJIS7^$S}VuHVm=C0A#uNC^F2ao&dX6uAy=?^Q-QL`BZNVZD{LP zeGEfA2fI#utT)WB-ZRXn){oG(kQwGv!*cP=UwkYw%&(RjhBhou+oD%9%%^sMtq>pC zLCrA6Gz{aWk(R8$Fz65L2Jw+RN;8aJ4fCmfqb=D0!;q_BH;Ruo!%!j&^T_~{w$R2H z?ars>g54xO)*6N$$1ucsthV*5Hp6@>T!7g)@v+7*zglaUPd#6#ZBfPzLrllv{Ri>U zV3=Qp4fCm+$7@@^y4^7JYDJjo6CbsP`Bj5qK2>{;wuQ_v*pgjs7+PRkw%V5UDbZ_*^i(qpL!B|qr)EsjwvZWy zb_48Axo)4ynxS7c%%=uUv1BQR;ksaViH}`|`PFX2d}`;p+Sadj8Rk=^=V2yPeB5uC zUp;IX!aHBv;=arldMKGz@*CVQ5RHYFo$*LmvQkw_GFP0?qs?(J-G%3|X>d z!*G8Ic8~aY-Y}FB!+h$+GHvTuzc37Ue70TzsYU6?0Tw2 zhM{#d%%>JMXj_aA3`0u;_J~{~`y$QIIvR$$+GxqL4fCnn!G0<}wi}TR5 zey(PIm0%cV62P8?tzQ)yhPnmzjL1q2!?+miX^~Ag%%_^bo)Xy{!_Z2BJt?xQ4fCn% z!G12Xn+(H!8Q2pdyU#G6dK~O=kv(M?asiC7M|*D=%FxC5k`S_<>VCt}mKcURhfB1r zU*#Ew79H$)@v+4)KMa(>U1!lxI4=*p2;*wHVMpG8vgJ8pNFK!sqXkklMY6`q8SBC zz&{!tutfZ$sR2vIKbjS=-uOoo0@errXgI(E_(y{P)(`)vwqOJBkD>@R5dSE4U@7=V z!2-*`e~U0?$U_)Q}Dl3SSkLO z2`j_@kAzj?f4Q(3_`g+f0HoA{AOW{+bzO) z^;?DUO1BAPShowK>pO(;{7zvj@qd@Fd-2b+IO(xg340j-?EmAWg=D`TCv6Pf#!2h- zV`0zZ|0lxM;GcbDoLYti-QTRh4J%06kZtLT9R-=Nqlqpf_Vus;bY-wad3BQ;qG^~EiT;MTC$sVaSP_{ zR?VMo?}?BQs*=;e5vLzUoc>@woZ`7y^Czvr-6sU&o9X8t?|t*l_PEx<1iC}$A5VRS z5u!o-7VPNrH0k2tmc_xXi-S8B2iq10cPSFa~oXyBfuRIQ?JxAm8x5*K_F z6ArWn6Blgm7EWL>P}>qkRT#c$V0TX zvZs`iLTy_{KAg799%f!8C8ufI8RRF>)(W|nk|b^0K;8o!N%%L5P^5&lwU)F=32R$0 zuMJ6H``8+6^OUeK16T{6tLBnDOSYM8HAAx^bQvXgLW0D!kY7hzD?$q?Y0&4E;^Ja) z&~(>e|M%$FBW%9+Yby$5pLE3zg+}_9WYfQRdX_}#>Eag`qO0h=xCHg1w-m(Qs2?hv ziT-9o%*KP5W1FV7Z3?z+B}K2YxLa#58Me!k=Pxcn4~6b@m+)QNpIopu`HUUfq4aWl z?%zDI*y4!A78M@VTG;0t32(vL?uZ6@ybaxSq&5cIHcj2SDY#W%u5j1lnAVbH^smbj zmP?16fbLHCuI=|OSlh=HFRdM;pMFL^8y5#RchC!aV(HdZuZ1ntj9XuleH*8?{c-a@ z)(&s>W4Q>JO;fjQKS@(#)#DP|YUB1eXnE7rjhliS;c!!M%iijJ+jMj)3)c2)pG49B zz{$(zt>-g9B?UHu=|n@Z?D*+FHAaZ&l$*t}NTJDX2>>`sCJI!YvC#>PmcCvhgAu7cuLRaNa+zPN9lQwr3VRoZ&UES zO;a~-3U1ysbw6d=wvoDc4e%yd(wlC+T%(QLlxZdf8((nfkNEqk;D#8W1ao z2HvIy&?>yWDfqUf2euRYA-lI_Xbq&eH6ZCvH08C;aa-c4S#6Fo+NQ$Uj+!NrtCmW& zs~QEe8vRFMGD_{T?n|T^a{aw7A8yTt$LwtpW;qD%T2i=Ukw-hb zVoMU(C#~wJPwHCyJmq(qS4$|rxSMT}!iy~aX8X}Ny+TSZ3T{UwcS&$(M_OI%jrYEn z*YLb9XcZ%2NzE23H9I6Vn@wt>mC}xLVOw4M0xIe0bpEIFhIYIo3pULAtk+Y)&+v^L z<|>0*H_Y1l!PG4qW_{M{$&xMef6;;rSXA<*l#?$zDkrx)=cZVKyH-9t&GYL}I#d2NUzFb=gl=74CT5u-? zuLXB$F!QmVqK(n2Jv!g1!lxj2J}@_+XnQvt)!|*|%aKyM57*1Z^;(l6!+tqQvFot@?840;w*T-+e zoHbX5Zo6B%y|XKpw-dckMLQcXJsQ0y)C$>$^!GFAmrU>^-|B^5bEchF{Fdp*_%%|W zJn288lO`(q`1RYDf0oDIy6tAs>mb$pr~D&b&Jty*biGTZ-%_8&$h%%oCcXSo{9?|0 zgO84R`NKqi;Z7O6;(SE6mpAwJ^RdUy4}v@O3=b5&;YbYkcdqFsM(kV0XIxj} zgJ^KXorLyB?v8gm?pkmMvupbu5fy#Q_+XlAcXh8P&xxsqetNxx8+YpKoNiE9ua|!1 zf4SZ5le9Uz9n)NLuX1lBBD%Wm!~7pR$Gy%ncXh!m-OhLZ8C%l!@;`gojaBp*qjPjk z7>fSBU47{*`LuhBer)zMXzf zHf74)oJ6_qFC1z@ezfnu_U?Y%GuRr!%fFO_Te%N{JKmFNWey30yEfo%9CK>A?ZGSn z9(3v%0jXP0I3i=U=ie^<>^~8Kmp@_$8tFgVU2%W(pE|AtC z3@f*pl8ekCqVnQdb3$Ye@gXbK`%oWFH0ibHF`XK=TK8A23pv}1Z>L|o|Iiw>t`MdF z_;%r+YNy9tf@LPjeNA~zB`Mkm{q22vzEyq5U~*pUxIXNTElhT_@5?#9e9Dts`!t@E z^6?_-0|!*B57Dl;AIrySXrEt=;RB>svEDqci7PHiT2zD?=-siwWL@#4Ig+vT^ODwm z$iMzt!RSJ9Eg3L-5-45fFWoBLhwB-Ax(cU#MXL*ns?Tp#eokldo=lqmX$$VzI&4+# z2sj>w{mhZ%eMqm=M=JuIm!kbrAG18=2dR&rzm2I!ky-AiQn)b2uW>J;rmdQcx3esya%-aSU? z@6m?u+P?qlBko}%=@B*}X3=n5S@UjuhUXe4I{M#7_bUJ5rOir2%PbGjJ@XfGzgn`Z zwVO#To^dQe3T1R-o_%bOcE1{VUoHBpUwn-NWuGsESg(DpN(A42qK0GTb*$}2$QxSQ z6XoTt?LSyW=hiD6t(@oS*zDmw3^P=S^sn*Wi5;h666F=4M7)Hi!nlRn{ioFR(q{s`}Iyy1d@8=nTDy~K+I9GGqYogaQ1w= zUmej6Jzs)-8@b(kOVYLQardzMHOWU;sgfZVXZOy<5vR7}e~K`!T{%e@cfl$V769XD zJWic%vynDC&t}y&p9@9XRy=dYJ|ZnLpA zn`*Nfn_X(Nt8Ml)Sen)!SgNqKwk>vZHdp(d%{JQXPd5A1X32QueX@jdG}r)P0Wcls zlWc~4G>r^9Wg0fjX1O*i2AeFQU_WhGJ0OHgPuv0{az5mql z!j^*-3tIs;QP|C36NKFkc8;)>U`4|21sg96yJe|>us6WQ3d4>)vf2aQa0bg4*?VB4 zg<<~~S{MYlgY^;iJlILX)`0aFwifI}Ve7#933~(V1YvK3^%aKoMP;4OI5natc6St6 zAy^q$vYHJR680)sm9XD~Rf5H-k8O7c$6M|i!E`8>g4K$WWz%CYd$AM{g`CvMfAA{*o z9<*(fds()#z;q~=gXvI~g6UBHVY@pUqogb38hK#awgF6E;}tL+%6hN`;_f5c-N8wg zyDBgp%7tJ$lvi!rBM-4cIR#9Ik`1Qa-2|quwiQf=vfxn5#|kj*gX>agAHN0DK2A)w ze4GNNZI^&)+rNP6*#8?$hmvrZ<*pt~yL$x;g$MQH%p~8wNn!oKelBbP*b~AAf;}!Q1?(|l z_!9&5AQqNE((SX&XpH$5z#oBY4AR}^m-)Zun?L3dTMXjUS2@S}@HyQfpQa8wY}mi+ z2i$Slr@^0nk~Zz6cXR$H2J$^FR5q=-rnYj>oSM4yw9;ucb)}kBR!wW3?pT?tp>mq~ zJO>M!H4Lt)Jo=6Y)i>X8SM{9gs`BvQloVb`O9odqR#k*&v#2OaV`EZCU1qR^-ftp> z7!JYB#)V*{wi(=5SspIer?G(87*rK8KRxKfDb{cUb>~Q>38j+lWGnNf485{{% zyNlTkyR&h)O|Cg*SUPIwfNjO0C4<9NbHm0>4`6J}KL_9r2yAqG?>u7xC^fW)3Lu=p zjp2%Z#fAJ(O>#aqhM`eY+E_}MZ_Zg(7;pVWmXJs|`8u4Q5O);LecB7YzqG>P7fjkP zJ~VIQScyZ&uwTKrG@NjsYDgGMNKz?kLsV@^8YRn}l63a@Um>!#n@qYHuv0$y@$k!1=cH}R8hRlz)7>?A7Ec$A5mgg*%gm+yMhQp7vBEFc47oC#SG!!Y0@EtLPqpeO!7B%)G zr>`MQJHNZKL(b;azeaOnONKIrKX*x(ih8FcH3d;T*)74_;dv*+kabN-g|CNQ zk`zSouduhTp30)hyC{b*M6tn^z_I$6e`uiC{=}k%j5N^FYRB-O=F=;Gi~#_WE9Ogs zwAC_xPh}Y`;kQ=WSZ&>ac9IN8TB2T^V~kk)>UZX+J#JkIEtUy~ZuGUP+J)Q-NdVDn zpDvD&A|d}R_rm9`Q1Df(35RajUqrNl;k3iouVRjQEaHowz0uH(jt}QVI84%4r`=y6 z+3b?Uz$sV8i?}%ok|G2Wk)%SBgOPVcGL90Av9-h*LpXE9@Szb8JZ;4W?E!qz(2b^Z z0c)a$1EC|F8;^S71j`S;Z#Lo3jiwI($}qf(#BdEH0gTHdl1+4qAw>H)b6gn7i?KHr zy>Eq!{R;F2WbCME9BO|{)NpV)M>wrV|LVa=ILE>l4c+K)vLFd0S@EG=0VG^uE)wS% zkgPn!DY*oaoI{mk|fk~~OX$xb(~LDF)VQ?daPt{@k=);791+$m9Lt(UtbvTwo> zPB$mPjWz+3u0r~9xhbWa-cDcams(tsDR7iTEmmWQ|Kw z4@t^#PB&LUvfL%XZuW?x(+ykMGMD59NH)79>^+K(clyGP!fK66@+l-KeVuNwJFQyj zlK9ap22OCgIU17XF3G8oB=&QuwztTOE|_CdM}LYoD%eT*sH`TVF#=J z?3BpZkN1SUx*0KoW!RFC+0~*cJxyr!1xppUF?oK+rHq0ofl+|a}s&Ed-WId%5!j$3S8<=54ON0c{Ji7VdBXjhh4 zc`j%zqOC$BYwOFydLtgJJ`N>?LRfRWHYX#sD#d9audWSarS3`-bnc9*ikZQt23myc zYtuqaO;zoK3+YACBcWDSYm+U3+wn51rdLUHyi2M_2{yO3hF3OGwF0d$foge0yCirM zYhtGZb6cVSd31x_rmVzxora=^&`Izpu~zI;7<(OaM&El`Y)WQb)+ARvX#I8IAzF0o zaH3geM`Dxdh)es}WVeeJ6G8gM9HTeJ(^>0Vn(u?{)5 z6AsxD5azS{+)klW%=~hn+s;f?wn}hn)`*&L`x5N*3~jqk?VxO_(S!Tk=}d2ZX4E0U zX^Hr7pPQ)L_I5#VJJXS}T}3h)L279vQjT+Hr1buI&PZuVBvSUdQM-MvuO2yVA8h36 z+Lbe-B_*=kqVwV+h+Nw`HJ7$dje6wNTtf%#EHSpk1m`?wc+PVM=sZW#oV!8l6P*S+ z6+5j^h9sx<#%S(lTlXHyciPaD%z(qBrl+T+W~OCiWjTbPsVOO0lx1aSW^0==UqMV9 zR*RoLeho&J7|e-r&NNcMxr^>GVio!GB`W7^BP~{->*PJ(I*hex_(Us5C5~{;=TXjQ zr#mtFz8zy=8uqvWRa9noX(H9Lfx{5592_)^LQY~zj@_w=RJ$7kH{-nS^lYf~>U7FJ zeTs2oyh{9_i_`LgBZrq16c^-=IK40aatn*|`nsj#3-ZPdFAPrX8^ADE_T%E1uS~^A zYI9F7Es!S2gWyqYi8A4Qd2iQkc-*mnp$khHm1j! zNvdK_rRqxbR7EY_7d6&TZ!Dh`7>SUY0t4n|XPsOcx#Fanrsne6z{D{32Z=6Q98`&Gzj$955Il_2$&iL#Kb=u^z)sW_x5$WP>THHG_T*^&YRm2%>2gJAPSSyp(TT+%s@VsURgK14ntMdCs0Iu`11JTiq!nHp(~TA>G5P8C&nc^ zY#kwuX5X5$?>CgSuv2B}jm#|bZpL*y-@(ja-pC*VV$2v_GN_`qqIzXR0{Iehvy)1w z?;;sJOv2PKree#>(`-9#`}upFYt3r;ms&(cy1J$^KDSdP(E;nFLheTD=PtWv@Q~8W zn18l$SKFaQv%OQ!fI=f@JfatC9p(?Wt_!vZT`&IP;I=ymo1kLBFMM@E^LR*)cg*#n z87#~3r>Q(j^SDqKJ`;R@nxnaaNheB!3&8kPGE>Lb7`=+a_4v6!yg2rBeiykQM^cIU zOm&(IL}5>PA&nAMT~)iZp4)rwUeAzWLnyO&8N#9GbgNxF*GNzNRe_oh)PQ$@wV)mb z)PZ`V_ZT=9tOp+e)8H&H1IEE+AbI7d*Gqy8;3^QgJ<0wAn5)n2#7oX14uxEOzD?X+ zIX)bfNBnN&xEgV7=;BnEm~5oKumYtmRm+UTxw7m-jF^!AYIzq~#szsP)fDzr4SwwO zx{6dHP`_fG`iq?U(FuCA&PAnrbP)vcJ%mHmRJ&O8Xmmdvubv*M%mzn- zb3p0(5ikMH16B5X5Ir*|iFoTl?BGc+3&C7n&m~?$tF0>J>iT8kM(4C$<&mys?|#yR z34YsU%9BndS9Y%P`np%+U1S=&+=%*ZSGvb6)~~1(9M3QU*QP@{UEsJ7h(GC6Zw}C% z3601up4WjqQq=CC-axPkyd6Y8-f)n<>Wu<7fo0%kP;zbob9Hx&c-c+*Q;_b|SES3+ z9Pe{5?{%|aeh`#LX+GlU-%fX?pZjfgN}?v2T4{Q{YRMDm_4yU2^lHZSRSmXfo@Es1 z24AjahLx*tx|4iq_AVftD&mJzjUk8Uv%-$pc~2b9C#B*n>IRq0i0yhc~e2! zl1JOro~7Pma0i$McYGLfx z*G80W>=U+8AL4u)y$OA9j*XN@X`bg8kl#k*Qi(*!K7Q$B2#37((Ks#p$Q+MmDl3_u z=WE)%L+zgl)Uv8%#tq+Q{C+1?kNA~M#4|cFf%B%lzYD6pqc1%?){d**Z6Iyaj4AuT zJNbP890?u-M}z3on*x3eJ_sHL9|k`K7lNOGN$_(}W6n{q0XznJ;BjyR_yxET{1TKt zzXEe@q;%3?ltbZXjlgAmRTA%s z6-2fManA;Ee?#>%ImQ%Ns?d0%Qyjb62XUtyh4%p7kn0gm_sB^{;XS}n1rd({RA=!B z;wW~AzskG>CC4U5;oZei_<^G%_BT2DJE|a(Z>5IYA9_iIzv7c*h%_E7V$F|P{4z0! zin4Ag|tM3RcuY=Q5JeN?qkQk)}~VSa%w$P28(>QrsaE6U5TV=Z9Euj zvrn2^3EF<;%>Ey`1^N7H=a|}BO>J6j-K1>l9xXj!qVa$>ji$a4V`FOu+T~J*#vG1{ z4`Rvt)QtUFQz<6<>~Hy`c_zOor?_eI5%T5XO{;tI>5JX1n&1M;$3$`ssO z9-WpIS36<1e8aBY!B(K>kw5>+H@2U#%*Ps6#3GrA6x3WEn`Ub-7yDg(9bqlY46C=WMC7EIMLr zQD&rRfZC_ks<=x_q2WpDE+xA4P^mSqwsXZKv8DoF-dKy49hxO>#yG7luY`qdZ->tD zODDM1^66VZ3eK`)T4HN6o7A?p95qthC{>1;gx@0BVrI;BmbN@;PN^}dk6G!!5CN6u zKZ6R?I{q^-K)ud?d$xqGVB_LYHr?`oS{Ix>0%c3?)z!~C7s}@S2g>Fx>gLBygR*fu zf;g%*;Trxkth&(K{E|`r-(L>vY5w)TPzJ-#@lgVA$@L^(W8m8R|GXue)HFz)kNDrN z$dWerF?ahBL7K^JV#4nNRNnc%!ky!CnKXt@wJ*ng&3nZK%6Zb|GHDFWq{IcE=iU6? z$|1QVzx`5OpJ-<#W&Ru4+9pObvN~E+Hcb!Cmr#I>34eQ_R+R7C19{E%-~Hr&M&zFj v-JtkUZt~~fx7aTMLa*yD<5vZKRraxq&%k+}4EU$>-TbyWmq(^N6a9Yy-{(;3 diff --git a/Externals/portaudio/Win32/Debug/portaudio.pdb b/Externals/portaudio/Win32/Debug/portaudio.pdb deleted file mode 100644 index c9269f2c5d30077f5b1159b2791984cea595cbe0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 192512 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 DE5&jf diff --git a/Externals/portaudio/Win32/DebugFast/portaudio.lib b/Externals/portaudio/Win32/DebugFast/portaudio.lib deleted file mode 100644 index 30874d6f055bbef21f49302ccff9e5b8d69f2609..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1149188 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%0A3-t>AFE47Px;t{F8SDmt}O2cprr0* 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 ZgMdN6AYc$M2p9wm0tNwtz<&n<{{j^le*^#k diff --git a/Externals/portaudio/Win32/Release/portaudio.lib b/Externals/portaudio/Win32/Release/portaudio.lib deleted file mode 100644 index 30874d6f055bbef21f49302ccff9e5b8d69f2609..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1149188 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%0A3-t>AFE47Px;t{F8SDmt}O2cprr0* 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 ZgMdN6AYc$M2p9wm0tNwtz<&n<{{j^le*^#k 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 doesn’t 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 0000000000000000000000000000000000000000..76bf67863524626aa079d74629c9dd9f720b0b54 GIT binary patch literal 50527 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 + + 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 0000000000000000000000000000000000000000..2d982b79baa6d943c1fae0c7122d190ebf46c6f4 GIT binary patch literal 3111 zcmb_e+in}l5zX^_MZtMka>JV_VPg}vVpflr&clN4ctL+YE&U7Sw$Nrvj#V9W!?cY$ zC`VjAku{{~Rhz%cu2sOcwF=P{YCodiN5gbJ8_|3=JEPZ&vp2N-oMqY46z(6RY;Pke z$K-9jli>L7sC9Nzb3>tG>YT;nPVE#zLoZ2p=y`+zuucjt4j znzm*?BwZ#ng2H1zTe6N`Z2Ruw#V&fWO%hDt8*A(&%LaudV*{1eZ3Uktl?S~8iB!hA z4iV=)QKv(NT|$s>@^F8*`uOqY?g59#vK(duiF%}_blL|h_!Ov5SQ!vkvB4hHI>iZ2 zZ@277mB=AIxn5q8_F3z=)O8I;2cDTWT-$Cq%(8oM2{3g{TfO6yivs4LYSN~S3BQd& zKGjIU5>{Id9SD$XKA8uE-U#Q32C}f&fTs)xe=|im9A&2K=wb4PVT7OkZGbtoAj*?b3 z)&=B4jfFNtg;*&23oUg{2ObQGF6fD#vlGlxpq}xv04oqiA>>-9I+1$hd6NAJRRvpk z09K`fJ+qKO;cSaH9tlIqH4n~)^h-u!y#lAcIIx8CX?cBxmn}P}sCj^`ACfMx5>^mA z&l|Ari2eB?2|Sb@FaMThtMVjLMJW7{eR^bPxF!)&tM;S8r^KAiAH}7*pz{}%)#9(Vj-Ggjm=Su)t=X{?UG_?nC7T#B#1!kJEZ|m7JR8qb zB&W=lX?eR`eLn-j=A5*XT1g-+ikZoEJmA5EC6 zRslDV-6O`az2ZDbyKe=hHX!}DzTlP(*gDAP6jnrvo;Q*zkZOD0q~9Kz3t5N|ZbF`Z zkH*;GM0gMlc9f;zgzr@d?P5CZx^7Zy6Q2@A1@9*4fJB1tlf`gB-}pgZ(=xT|Yj9oL zwt+e@Jmlw#kts96Y>^q0#>=R8k+T><*(G6x44v`pyYc)D&CeF+ujw~4JQ~rzO-h+D z{SIuxw)J{?>(KV#S0tO-OFwR;%D)z5GATU$E-g=g?!n_X9uukAhiZaH_+3#2I!Kh` zC$tz3`^S=DiQX(qNc3x)hkCI7@%rlihllI+PY>&x``f$a$ImxE-Ve#gJjcwFwi_x$ z*r_@KlS&1~fwQNx*=+V(8ery2YaM?`=!B@D7)F$Fsw-OiB`hipywcl>a8ro*2Yqdr z@|u-{As|nkv*=}X=+8c4On9hG@FIeiT))Lk{ZQHf-KH%aI6sh~q5O)B3ir8h8i1`NFBGL+-OowG}5Ic&Q9Z3qTP8RN+1(124i>TSCJz5w|)W&`}Qe zslm +#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 a0926243708cafbc831c7bb061bef41d173edfad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1240980 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

@RG)c;%yWjy>T| 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%0A|4l;Z*n`%!aKn7w&*F;lUhO&xb?c1#mbl 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

ARb*u`IrKfCqhC7T0x_HR6k3 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 F7(e%jmJ$E} diff --git a/Externals/portaudio/x64/Debug/portaudio.pdb b/Externals/portaudio/x64/Debug/portaudio.pdb deleted file mode 100644 index fd5cd214b46b59b151c0b30ea60b3fdc7c708bf6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 184320 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�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

gj#DIA1c!SnE8W8 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 diff --git a/Externals/portaudio/x64/DebugFast/portaudio.pdb b/Externals/portaudio/x64/DebugFast/portaudio.pdb deleted file mode 100644 index 3642ec683a190c8bca4d42f0648e36107ea72a40..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 184320 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�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
gj#DIA1c!SnE8W8 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 diff --git a/Externals/portaudio/x64/Release/portaudio.pdb b/Externals/portaudio/x64/Release/portaudio.pdb deleted file mode 100644 index 3642ec683a190c8bca4d42f0648e36107ea72a40..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 184320 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 - + 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/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/AudioCommon.cpp b/Source/Core/AudioCommon/Src/AudioCommon.cpp index 8b343aa493..3c40661a77 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) { // 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()) - 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_NULLSOUND && NullSound::isValid()) + soundStream = new NullSound(mixer); + else if (backend == BACKEND_DIRECTSOUND && DSound::isValid()) + soundStream = new DSound(mixer); + 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,11 +75,12 @@ 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() @@ -79,7 +94,7 @@ namespace AudioCommon soundStream->GetMixer()->StopLogAudio(); //soundStream->StopLogAudio(); delete soundStream; - soundStream = NULL; + soundStream = nullptr; } INFO_LOG(DSPHLE, "Done shutting down sound stream"); @@ -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); diff --git a/Source/Core/AudioCommon/Src/AudioCommon.h b/Source/Core/AudioCommon/Src/AudioCommon.h index cd1896396e..b5ab16cae3 100644 --- a/Source/Core/AudioCommon/Src/AudioCommon.h +++ b/Source/Core/AudioCommon/Src/AudioCommon.h @@ -40,7 +40,7 @@ union UDSPControl namespace AudioCommon { - SoundStream *InitSoundStream(CMixer *mixer, void *hWnd); + SoundStream *InitSoundStream(CMixer *mixer); void ShutdownSoundStream(); std::vector GetSoundBackends(); bool UseJIT(); 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..c244c91008 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 @@ -70,7 +71,7 @@ public: #else public: - DSound(CMixer *mixer, void *hWnd = NULL) + DSound(CMixer *mixer) : SoundStream(mixer) {} #endif 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/SoundStream.h b/Source/Core/AudioCommon/Src/SoundStream.h index 855a0cc4f0..fa4499d1a2 100644 --- a/Source/Core/AudioCommon/Src/SoundStream.h +++ b/Source/Core/AudioCommon/Src/SoundStream.h @@ -22,8 +22,8 @@ protected: bool m_muted; public: - SoundStream(CMixer *mixer) : m_mixer(mixer), threadData(0), m_logAudio(false), m_muted(false) {} - virtual ~SoundStream() { delete m_mixer;} + SoundStream(CMixer *mixer) : m_mixer(mixer), threadData(0), m_logAudio(false), m_muted(false) {} + virtual ~SoundStream() { delete m_mixer; } static bool isValid() { return false; } virtual CMixer *GetMixer() const { return m_mixer; } 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..6221304865 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,20 +44,14 @@ 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; - virtual ~XAudio2() - { - Stop(); - if (m_cleanup_com) - CoUninitialize(); - } + static bool InitLibrary(); + +public: + XAudio2(CMixer *mixer); + virtual ~XAudio2(); 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/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/Common.vcxproj b/Source/Core/Common/Common.vcxproj index 20cf92dfc3..d78acbc476 100644 --- a/Source/Core/Common/Common.vcxproj +++ b/Source/Core/Common/Common.vcxproj @@ -1,14 +1,6 @@  - + - - DebugFast - Win32 - - - DebugFast - x64 - Debug Win32 @@ -27,154 +19,78 @@ - {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 +115,7 @@ - Create - Create - Create - Create - Create - Create + Create @@ -219,58 +130,17 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + + {bdb6578b-0691-4e80-a46c-df21639fd3b8} + + + {41279555-f94f-4ebc-99de-af863c10c5c4} + - + \ No newline at end of file diff --git a/Source/Core/Common/Common.vcxproj.filters b/Source/Core/Common/Common.vcxproj.filters index 05b9edcb14..e515eb260b 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,25 +37,18 @@ - - + + + + - - Logging - - - Logging - - - Logging - Crypto @@ -104,20 +58,66 @@ Crypto - - - - + + Logging + + + Logging + + + Logging + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Crypto + + + Crypto + + + Crypto + + + Crypto + + + Logging + + + Logging + + - - {21b7df68-af69-45f4-9741-590a6a7f1ed1} - - - {f078f36e-a0ff-4cd0-95f8-476100d68e68} - + - + \ No newline at end of file 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/StdConditionVariable.h b/Source/Core/Common/Src/StdConditionVariable.h index 048a7e8975..8f7d6e65b2 100644 --- a/Source/Core/Common/Src/StdConditionVariable.h +++ b/Source/Core/Common/Src/StdConditionVariable.h @@ -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..c1cdb04799 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 diff --git a/Source/Core/Common/Src/StdThread.h b/Source/Core/Common/Src/StdThread.h index e43d283443..7db2851eaf 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 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/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..ae766cd165 100644 --- a/Source/Core/Core/Core.vcxproj.filters +++ b/Source/Core/Core/Core.vcxproj.filters @@ -1,18 +1,155 @@  + + {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} + + + + - + + + + - - + ActionReplay @@ -46,71 +183,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 +270,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 +354,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 +372,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 +429,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 +438,9 @@ HW %28Flipper/Hollywood%29\SI - Serial Interface + + HW %28Flipper/Hollywood%29\SI - Serial Interface + HW %28Flipper/Hollywood%29\SI - Serial Interface @@ -289,180 +450,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,102 +483,252 @@ 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\JitILCommon + + PowerPC - - PowerPC\JitILCommon + + PowerPC - - PowerPC\JitILCommon + + PowerPC - - PowerPC\JitILCommon + + PowerPC - - PowerPC\JitILCommon + + PowerPC + + PowerPC + + + PowerPC + + + PowerPC + + + PowerPC\JitCommon + + + PowerPC\JitCommon + + + PowerPC\JitCommon + + + PowerPC\JitCommon + + + PowerPC\JitCommon + + + PowerPC\JitIL + + + PowerPC\JitIL + + + PowerPC\JitIL + + + PowerPC\JitIL + + + PowerPC\JitIL + + + PowerPC\JitIL + + + PowerPC\JitIL + + + PowerPC\JitIL + + + PowerPC\JitIL + + + 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 + + + + + + + + - - - + ActionReplay - + ActionReplay @@ -600,12 +740,15 @@ Boot - + Boot Boot + + Boot + Debugger @@ -618,65 +761,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 +815,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 +869,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 +881,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 +899,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 +956,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 +965,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 +1013,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,161 +1109,108 @@ 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 - - PowerPC\JitILCommon + + IPC HLE %28IOS/Starlet%29\SDIO - SD Card - - PowerPC\JitILCommon + + 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\JitIL + + + PowerPC\Jit64 + + + PowerPC\Jit64 + + - - - 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/Core.cpp b/Source/Core/Core/Src/Core.cpp index 09375b9736..88c0376cb2 100644 --- a/Source/Core/Core/Src/Core.cpp +++ b/Source/Core/Core/Src/Core.cpp @@ -388,8 +388,8 @@ void EmuThread() OSD::AddMessage("Dolphin " + g_video_backend->GetName() + " Video Backend.", 5000); - if (!DSP::GetDSPEmulator()->Initialize(g_pWindowHandle, - _CoreParameter.bWii, _CoreParameter.bDSPThread)) + if (!DSP::GetDSPEmulator()->Initialize(_CoreParameter.bWii, + _CoreParameter.bDSPThread)) { HW::Shutdown(); g_video_backend->Shutdown(); diff --git a/Source/Core/Core/Src/DSPEmulator.h b/Source/Core/Core/Src/DSPEmulator.h index 6df274d757..207818cbca 100644 --- a/Source/Core/Core/Src/DSPEmulator.h +++ b/Source/Core/Core/Src/DSPEmulator.h @@ -15,7 +15,7 @@ public: virtual bool IsLLE() = 0; - virtual bool Initialize(void *hWnd, bool bWii, bool bDSPThread) = 0; + virtual bool Initialize(bool bWii, bool bDSPThread) = 0; virtual void Shutdown() = 0; virtual void DoState(PointerWrap &p) = 0; diff --git a/Source/Core/Core/Src/HW/DSPHLE/DSPHLE.cpp b/Source/Core/Core/Src/HW/DSPHLE/DSPHLE.cpp index 71c43a0302..763ab787a7 100644 --- a/Source/Core/Core/Src/HW/DSPHLE/DSPHLE.cpp +++ b/Source/Core/Core/Src/HW/DSPHLE/DSPHLE.cpp @@ -42,9 +42,8 @@ struct DSPState } }; -bool DSPHLE::Initialize(void *hWnd, bool bWii, bool bDSPThread) +bool DSPHLE::Initialize(bool bWii, bool bDSPThread) { - m_hWnd = hWnd; m_bWii = bWii; m_pUCode = NULL; m_lastUCode = NULL; @@ -266,7 +265,7 @@ void DSPHLE::InitMixer() unsigned int AISampleRate, DACSampleRate; AudioInterface::Callback_GetSampleRate(AISampleRate, DACSampleRate); delete soundStream; - soundStream = AudioCommon::InitSoundStream(new HLEMixer(this, AISampleRate, DACSampleRate, 48000), m_hWnd); + soundStream = AudioCommon::InitSoundStream(new HLEMixer(this, AISampleRate, DACSampleRate, 48000)); if(!soundStream) PanicAlert("Error starting up sound stream"); // Mixer is initialized m_InitMixer = true; diff --git a/Source/Core/Core/Src/HW/DSPHLE/DSPHLE.h b/Source/Core/Core/Src/HW/DSPHLE/DSPHLE.h index f53d4f7d1b..b6f2d5d874 100644 --- a/Source/Core/Core/Src/HW/DSPHLE/DSPHLE.h +++ b/Source/Core/Core/Src/HW/DSPHLE/DSPHLE.h @@ -16,7 +16,7 @@ class DSPHLE : public DSPEmulator { public: DSPHLE(); - virtual bool Initialize(void *hWnd, bool bWii, bool bDSPThread); + virtual bool Initialize(bool bWii, bool bDSPThread); virtual void Shutdown(); virtual bool IsLLE() { return false; } 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/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/DSPLLE/DSPLLE.cpp b/Source/Core/Core/Src/HW/DSPLLE/DSPLLE.cpp index d16af5f601..c718fd9e1c 100644 --- a/Source/Core/Core/Src/HW/DSPLLE/DSPLLE.cpp +++ b/Source/Core/Core/Src/HW/DSPLLE/DSPLLE.cpp @@ -130,9 +130,8 @@ void DSPLLE::dsp_thread(DSPLLE *dsp_lle) } } -bool DSPLLE::Initialize(void *hWnd, bool bWii, bool bDSPThread) +bool DSPLLE::Initialize(bool bWii, bool bDSPThread) { - m_hWnd = hWnd; m_bWii = bWii; m_bDSPThread = bDSPThread; m_InitMixer = false; @@ -185,7 +184,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)); if(!soundStream) PanicAlert("Error starting up sound stream"); // Mixer is initialized m_InitMixer = true; diff --git a/Source/Core/Core/Src/HW/DSPLLE/DSPLLE.h b/Source/Core/Core/Src/HW/DSPLLE/DSPLLE.h index 05321aee06..5ae0fd6a74 100644 --- a/Source/Core/Core/Src/HW/DSPLLE/DSPLLE.h +++ b/Source/Core/Core/Src/HW/DSPLLE/DSPLLE.h @@ -14,7 +14,7 @@ class DSPLLE : public DSPEmulator { public: DSPLLE(); - virtual bool Initialize(void *hWnd, bool bWii, bool bDSPThread); + virtual bool Initialize(bool bWii, bool bDSPThread); virtual void Shutdown(); virtual bool IsLLE() { return true; } @@ -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..4013ec77c9 100644 --- a/Source/Core/Core/Src/HW/DSPLLE/DSPLLEGlobals.cpp +++ b/Source/Core/Core/Src/HW/DSPLLE/DSPLLEGlobals.cpp @@ -48,4 +48,8 @@ void ProfilerDump(u64 count) } } +#elif defined(_MSC_VER) + +namespace { char SilenceLNK4221; }; + #endif diff --git a/Source/Core/Core/Src/HW/DSPLLE/DSPLLETools.cpp b/Source/Core/Core/Src/HW/DSPLLE/DSPLLETools.cpp index 3bc919a17b..c2ee99f5ee 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 diff --git a/Source/Core/Core/Src/HW/EXI_DeviceEthernet.h b/Source/Core/Core/Src/HW/EXI_DeviceEthernet.h index 7fb9a5775e..3f0f371f43 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 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/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/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/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..13c0c69e31 --- /dev/null +++ b/Source/Core/DolphinWX/DolphinWX.vcxproj @@ -0,0 +1,243 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + {47411FDB-1BF2-48D0-AB4E-C7C41160F898} + + + + Application + v120 + Unicode + + + true + + + false + + + + + + + + + + + + + 0x00400000 + false + true + ..\..\..\Externals\SDL2-2.0.0\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/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/ControllerInterface/ControllerInterface.cpp b/Source/Core/InputCommon/Src/ControllerInterface/ControllerInterface.cpp index bc1e115c17..4e38e480ff 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 diff --git a/Source/Core/InputCommon/Src/ControllerInterface/SDL/SDL.cpp b/Source/Core/InputCommon/Src/ControllerInterface/SDL/SDL.cpp index 40c822c577..45be64e91b 100644 --- a/Source/Core/InputCommon/Src/ControllerInterface/SDL/SDL.cpp +++ b/Source/Core/InputCommon/Src/ControllerInterface/SDL/SDL.cpp @@ -7,11 +7,7 @@ #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 @@ -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) { diff --git a/Source/Core/InputCommon/Src/ControllerInterface/SDL/SDL.h b/Source/Core/InputCommon/Src/ControllerInterface/SDL/SDL.h index 9b9794c481..8b802540b1 100644 --- a/Source/Core/InputCommon/Src/ControllerInterface/SDL/SDL.h +++ b/Source/Core/InputCommon/Src/ControllerInterface/SDL/SDL.h @@ -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,7 +123,7 @@ 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; }; diff --git a/Source/Core/InputCommon/Src/ControllerInterface/XInput/XInput.cpp b/Source/Core/InputCommon/Src/ControllerInterface/XInput/XInput.cpp index c687bef856..2bc924bf41 100644 --- a/Source/Core/InputCommon/Src/ControllerInterface/XInput/XInput.cpp +++ b/Source/Core/InputCommon/Src/ControllerInterface/XInput/XInput.cpp @@ -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) { @@ -112,20 +158,16 @@ void Device::ClearInputState() 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/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..899621d6c6 100644 --- a/Source/Core/VideoBackends/D3D/Src/D3DBase.h +++ b/Source/Core/VideoBackends/D3D/Src/D3DBase.h @@ -4,8 +4,9 @@ #pragma once -#include -#include +#include +#include +#include #include "Common.h" #include @@ -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..3ce33898cb 100644 --- a/Source/Core/VideoBackends/D3D/Src/D3DShader.cpp +++ b/Source/Core/VideoBackends/D3D/Src/D3DShader.cpp @@ -37,8 +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) { @@ -95,9 +95,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 +155,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", diff --git a/Source/Core/VideoBackends/D3D/Src/Render.cpp b/Source/Core/VideoBackends/D3D/Src/Render.cpp index d58cc59e98..04685235b9 100644 --- a/Source/Core/VideoBackends/D3D/Src/Render.cpp +++ b/Source/Core/VideoBackends/D3D/Src/Render.cpp @@ -745,7 +745,8 @@ bool Renderer::SaveScreenshot(const std::string &filename, const TargetRectangle 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 = PD3DX11SaveTextureToFileA(D3D::context, s_screenshot_texture, D3DX11_IFF_PNG, filename.c_str()); + HRESULT hr = 0; if (SUCCEEDED(hr)) { OSD::AddMessage(StringFromFormat("Saved %i x %i %s", rc.GetWidth(), diff --git a/Source/Core/VideoBackends/D3D/Src/TextureCache.cpp b/Source/Core/VideoBackends/D3D/Src/TextureCache.cpp index e803f4a8f2..01fe239cda 100644 --- a/Source/Core/VideoBackends/D3D/Src/TextureCache.cpp +++ b/Source/Core/VideoBackends/D3D/Src/TextureCache.cpp @@ -42,7 +42,8 @@ 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)); + //return SUCCEEDED(PD3DX11SaveTextureToFileA(D3D::context, texture->GetTex(), D3DX11_IFF_PNG, filename)); + return true; } void TextureCache::TCacheEntry::Load(unsigned int width, unsigned int height, 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/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/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/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/DSPTool/DSPTool.vcxproj b/Source/DSPTool/DSPTool.vcxproj index e72c055233..d494a5e565 100644 --- a/Source/DSPTool/DSPTool.vcxproj +++ b/Source/DSPTool/DSPTool.vcxproj @@ -1,14 +1,6 @@  - + - - DebugFast - Win32 - - - DebugFast - x64 - Debug Win32 @@ -28,159 +20,41 @@ {1970D175-3DE8-4738-942A-4D98D1CDBF64} - DSPTool - Win32Proj - - Application - Unicode - false - - - Application - Unicode - Application - Unicode - false - - - Application - Unicode - false - - - Application + true + v120 Unicode Application + true + v120 + Unicode + + + Application + false + v120 + Unicode + + + Application + false + v120 Unicode - 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) @@ -200,25 +74,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/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/VSProps/Base.props b/Source/VSProps/Base.props index e1201912fd..d1803eb5ae 100644 --- a/Source/VSProps/Base.props +++ b/Source/VSProps/Base.props @@ -1,28 +1,121 @@  - + - + + 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.0\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 + + + _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 From 8dcd13cca7b3a6ded6ad43f77adec0852504489f Mon Sep 17 00:00:00 2001 From: Shawn Hoffman Date: Sat, 26 Oct 2013 18:04:00 -0700 Subject: [PATCH 08/90] [vc12] std::min/max requires header. It should be in pch, but just add it for the single file that needs it, for now. --- Source/Core/Core/Src/PowerPC/PPCAnalyst.h | 1 + 1 file changed, 1 insertion(+) diff --git a/Source/Core/Core/Src/PowerPC/PPCAnalyst.h b/Source/Core/Core/Src/PowerPC/PPCAnalyst.h index 2497e00494..d7495924fe 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 From 0791a9ef80889ffb70c67fbd6491635b0014747b Mon Sep 17 00:00:00 2001 From: Shawn Hoffman Date: Sun, 27 Oct 2013 00:48:53 -0700 Subject: [PATCH 09/90] Add dxsdk_dir to vc++ paths via base.props. This means you no longer need the paths in a global property sheet. In fact if you have them in such a file, you should remove them as it will cause conflicts with the vs2013 build. --- Source/VSProps/Base.props | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Source/VSProps/Base.props b/Source/VSProps/Base.props index e1201912fd..a09f84f7d7 100644 --- a/Source/VSProps/Base.props +++ b/Source/VSProps/Base.props @@ -6,6 +6,16 @@ $(Platform)\$(Configuration)\ $(SolutionDir)$(Platform)\$(Configuration)\ + + $(DXSDK_DIR)Include;$(IncludePath) + $(DXSDK_DIR)Lib\x86;$(LibraryPath) + $(DXSDK_DIR)Utilities\Bin\x86;$(ExecutablePath) + + + $(DXSDK_DIR)Include;$(IncludePath) + $(DXSDK_DIR)Lib\x64;$(LibraryPath) + $(DXSDK_DIR)Utilities\Bin\x64;$(ExecutablePath) + _CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;USE_UPNP;%(PreprocessorDefinitions) From 8e73e8ae5fad7f1f893832fcaf14b04e5e052795 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Sun, 27 Oct 2013 18:27:07 +0000 Subject: [PATCH 10/90] Wipe all traces of OpenSSL's AES implementation. Use polarssl instead. --- Source/Core/Common/CMakeLists.txt | 2 - Source/Core/Common/Common.vcxproj | 4 - Source/Core/Common/Common.vcxproj.filters | 12 - Source/Core/Common/Src/Crypto/aes.h | 143 -- Source/Core/Common/Src/Crypto/aes_cbc.cpp | 131 -- Source/Core/Common/Src/Crypto/aes_core.cpp | 1159 ----------------- Source/Core/Common/Src/Crypto/aes_locl.h | 88 -- .../Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp | 14 +- Source/Core/DiscIO/Src/NANDContentLoader.cpp | 8 +- Source/Core/DiscIO/Src/VolumeCreator.cpp | 8 +- Source/Core/DiscIO/Src/VolumeWiiCrypted.cpp | 10 +- Source/Core/DiscIO/Src/VolumeWiiCrypted.h | 4 +- .../Src/MemoryCards/WiiSaveCrypted.cpp | 12 +- .../Src/MemoryCards/WiiSaveCrypted.h | 5 +- 14 files changed, 32 insertions(+), 1568 deletions(-) delete mode 100644 Source/Core/Common/Src/Crypto/aes.h delete mode 100644 Source/Core/Common/Src/Crypto/aes_cbc.cpp delete mode 100644 Source/Core/Common/Src/Crypto/aes_core.cpp delete mode 100644 Source/Core/Common/Src/Crypto/aes_locl.h 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..aa91ad981c 100644 --- a/Source/Core/Common/Common.vcxproj +++ b/Source/Core/Common/Common.vcxproj @@ -180,8 +180,6 @@ - - @@ -232,8 +230,6 @@ - - diff --git a/Source/Core/Common/Common.vcxproj.filters b/Source/Core/Common/Common.vcxproj.filters index 05b9edcb14..fabd8f1361 100644 --- a/Source/Core/Common/Common.vcxproj.filters +++ b/Source/Core/Common/Common.vcxproj.filters @@ -31,12 +31,6 @@ Logging - - Crypto - - - Crypto - Crypto @@ -95,12 +89,6 @@ Logging - - Crypto - - - Crypto - Crypto 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/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..8c214a3986 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 @@ -38,7 +38,7 @@ #include "../PowerPC/PowerPC.h" #include "../VolumeHandler.h" #include "FileUtil.h" -#include "Crypto/aes.h" +#include #include "ConfigManager.h" #include "../Boot/Boot_DOL.h" @@ -860,10 +860,10 @@ bool CWII_IPC_HLE_Device_es::IOCtlV(u32 _CommandAddress) u8* newIV = Memory::GetPointer(Buffer.PayloadBuffer[0].m_Address); u8* destination = Memory::GetPointer(Buffer.PayloadBuffer[1].m_Address); - AES_KEY AESKey; - AES_set_encrypt_key(keyTable[keyIndex], 128, &AESKey); + aes_context AES_ctx; + aes_setkey_enc(&AES_ctx, keyTable[keyIndex], 128); memcpy(newIV, IV, 16); - AES_cbc_encrypt(source, destination, size, &AESKey, newIV, AES_ENCRYPT); + aes_crypt_cbc(&AES_ctx, AES_ENCRYPT, size, newIV, source, destination); _dbg_assert_msg_(WII_IPC_ES, keyIndex == 6, "IOCTL_ES_ENCRYPT: Key type is not SD, data will be crap"); } @@ -878,10 +878,10 @@ bool CWII_IPC_HLE_Device_es::IOCtlV(u32 _CommandAddress) u8* newIV = Memory::GetPointer(Buffer.PayloadBuffer[0].m_Address); u8* destination = Memory::GetPointer(Buffer.PayloadBuffer[1].m_Address); - AES_KEY AESKey; - AES_set_decrypt_key(keyTable[keyIndex], 128, &AESKey); + aes_context AES_ctx; + aes_setkey_dec(&AES_ctx, keyTable[keyIndex], 128); memcpy(newIV, IV, 16); - AES_cbc_encrypt(source, destination, size, &AESKey, newIV, AES_DECRYPT); + aes_crypt_cbc(&AES_ctx, AES_DECRYPT, size, newIV, source, destination); _dbg_assert_msg_(WII_IPC_ES, keyIndex == 6, "IOCTL_ES_DECRYPT: Key type is not SD, data will be crap"); } diff --git a/Source/Core/DiscIO/Src/NANDContentLoader.cpp b/Source/Core/DiscIO/Src/NANDContentLoader.cpp index 974f8a9945..4e722d1397 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" @@ -286,10 +286,10 @@ bool CNANDContentLoader::Initialize(const std::string& _rName) } void CNANDContentLoader::AESDecode(u8* _pKey, u8* _IV, u8* _pSrc, u32 _Size, u8* _pDest) { - AES_KEY AESKey; + aes_context AES_ctx; - AES_set_decrypt_key(_pKey, 128, &AESKey); - AES_cbc_encrypt(_pSrc, _pDest, _Size, &AESKey, _IV, AES_DECRYPT); + aes_setkey_dec(&AES_ctx, _pKey, 128); + aes_crypt_cbc(&AES_ctx, AES_DECRYPT, _Size, _IV, _pSrc, _pDest); } void CNANDContentLoader::GetKeyFromTicket(u8* pTicket, u8* pTicketKey) diff --git a/Source/Core/DiscIO/Src/VolumeCreator.cpp b/Source/Core/DiscIO/Src/VolumeCreator.cpp index 6cf5ea836e..20cf86830d 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" @@ -183,11 +183,11 @@ 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); + aes_context AES_ctx; + aes_setkey_dec(&AES_ctx, (Korean ? 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/VolumeWiiCrypted.cpp b/Source/Core/DiscIO/Src/VolumeWiiCrypted.cpp index 51ee3d575a..c20ccf4b7f 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; } @@ -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/DolphinWX/Src/MemoryCards/WiiSaveCrypted.cpp b/Source/Core/DolphinWX/Src/MemoryCards/WiiSaveCrypted.cpp index 091804e786..99cea98b18 100644 --- a/Source/Core/DolphinWX/Src/MemoryCards/WiiSaveCrypted.cpp +++ b/Source/Core/DolphinWX/Src/MemoryCards/WiiSaveCrypted.cpp @@ -78,7 +78,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,7 +95,7 @@ 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)) { @@ -133,7 +133,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)) @@ -197,7 +197,7 @@ 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)) @@ -332,7 +332,7 @@ void CWiiSaveCrypted::ImportWiiSaveFiles() 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())) { @@ -421,7 +421,7 @@ 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)) diff --git a/Source/Core/DolphinWX/Src/MemoryCards/WiiSaveCrypted.h b/Source/Core/DolphinWX/Src/MemoryCards/WiiSaveCrypted.h index 29a3e1f530..6ec4194f88 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; From cfa709a1c544df831a73dcaeec5c49072e9bf6e9 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Sun, 27 Oct 2013 17:45:53 -0500 Subject: [PATCH 11/90] This introduces a FXAA post processing shader for our OpenGL backend. I would like to acredit mudlord for making this possible. He provided the code necessary for making this PP shader possible. Without it, this shader would have still not been done. So a major hats off for doing all the hard work mudlord. --- Data/Sys/Shaders/FXAA.glsl | 75 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 Data/Sys/Shaders/FXAA.glsl diff --git a/Data/Sys/Shaders/FXAA.glsl b/Data/Sys/Shaders/FXAA.glsl new file mode 100644 index 0000000000..8cd0d6fba1 --- /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 * ( + texture2D(tex, fragCoord * inverseVP + dir * (1.0 / 3.0 - 0.5)).xyz + + texture2D(tex, fragCoord * inverseVP + dir * (2.0 / 3.0 - 0.5)).xyz); + vec3 rgbB = rgbA * 0.5 + 0.25 * ( + texture2D(tex, fragCoord * inverseVP + dir * -0.5).xyz + + texture2D(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); +} From b97e2faa15fc031580a87af2e09f833c0e91eb83 Mon Sep 17 00:00:00 2001 From: comex Date: Sun, 27 Oct 2013 01:39:46 -0400 Subject: [PATCH 12/90] Fix Linux build issue. --- Source/pch.h | 1 + 1 file changed, 1 insertion(+) 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 From 2e983071c50e737f3a6a61e36e436a9712d6bfa0 Mon Sep 17 00:00:00 2001 From: comex Date: Sun, 27 Oct 2013 19:51:30 -0400 Subject: [PATCH 13/90] Add git.bat to the options in make_scmrev.h.js because depot_tools uses it and I'm silly. --- Source/Core/Common/make_scmrev.h.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 { From 58d42f43e3e56e44d23acace33b5d5da27b82cb2 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Mon, 28 Oct 2013 19:59:03 -0500 Subject: [PATCH 14/90] [Android] Fix PCH build. Clean up DolphinWX cmake file a little bit. Modify our android cmake toolchain file to make the default build location not be source root, because that is stupid. --- Source/Android/android.toolchain.cmake | 6 +++--- Source/CMakeLists.txt | 6 +++++- Source/Core/DolphinWX/CMakeLists.txt | 16 ++-------------- 3 files changed, 10 insertions(+), 18 deletions(-) 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/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/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/ From c8d7db9767f540dc166eb820c32617c273238960 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Tue, 29 Oct 2013 07:21:55 +0000 Subject: [PATCH 15/90] Fix FXAA shader for OpenGL ES 3. --- Data/Sys/Shaders/FXAA.glsl | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Data/Sys/Shaders/FXAA.glsl b/Data/Sys/Shaders/FXAA.glsl index 8cd0d6fba1..99caff7d03 100644 --- a/Data/Sys/Shaders/FXAA.glsl +++ b/Data/Sys/Shaders/FXAA.glsl @@ -55,11 +55,11 @@ vec4 applyFXAA(vec2 fragCoord, sampler2D tex) dir * rcpDirMin)) * inverseVP; vec3 rgbA = 0.5 * ( - texture2D(tex, fragCoord * inverseVP + dir * (1.0 / 3.0 - 0.5)).xyz + - texture2D(tex, fragCoord * inverseVP + dir * (2.0 / 3.0 - 0.5)).xyz); + 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 * ( - texture2D(tex, fragCoord * inverseVP + dir * -0.5).xyz + - texture2D(tex, fragCoord * inverseVP + dir * 0.5).xyz); + 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)) From edf0511d4ed13bdbff03cc95acfdda12747ef347 Mon Sep 17 00:00:00 2001 From: degasus Date: Tue, 29 Oct 2013 15:29:06 +0100 Subject: [PATCH 16/90] OGL: Use floating points for viewport parameters. As told by neobain, ARB_viewport_array introduced float viewports. They must be supported on OGL4.1+, but it's usually also implemented on 3.3 GPUs. --- Source/Core/VideoBackends/OGL/Src/Render.cpp | 23 ++++++++++++++------ Source/Core/VideoBackends/OGL/Src/Render.h | 1 + 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/Source/Core/VideoBackends/OGL/Src/Render.cpp b/Source/Core/VideoBackends/OGL/Src/Render.cpp index 4dca112031..e507fc45cd 100644 --- a/Source/Core/VideoBackends/OGL/Src/Render.cpp +++ b/Source/Core/VideoBackends/OGL/Src/Render.cpp @@ -386,6 +386,7 @@ Renderer::Renderer() g_ogl_config.bSupportCoverageMSAA = false; // XXX: GLES3 spec has MSAA 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 @@ -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")) { @@ -1105,12 +1107,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; @@ -1126,7 +1128,14 @@ void Renderer::UpdateViewport(Matrix44& vpCorrection) 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(round(X), round(Y), round(Width), round(Height)); + } glDepthRangef(GLNear, GLFar); } diff --git a/Source/Core/VideoBackends/OGL/Src/Render.h b/Source/Core/VideoBackends/OGL/Src/Render.h index 8c6a8ca8f8..efafb8708d 100644 --- a/Source/Core/VideoBackends/OGL/Src/Render.h +++ b/Source/Core/VideoBackends/OGL/Src/Render.h @@ -27,6 +27,7 @@ extern struct VideoConfig { bool bSupportSampleShading; GLSL_VERSION eSupportedGLSLVersion; bool bSupportOGL31; + bool bSupportViewportFloat; const char *gl_vendor; const char *gl_renderer; From f18c461fd6ec3bf37f3f4adf331794e07678b42f Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Tue, 29 Oct 2013 17:10:02 +0000 Subject: [PATCH 17/90] [viewport-float] Fix OpenGL ES 3 build. --- Source/Core/VideoBackends/OGL/Src/GLUtil.h | 1 + 1 file changed, 1 insertion(+) diff --git a/Source/Core/VideoBackends/OGL/Src/GLUtil.h b/Source/Core/VideoBackends/OGL/Src/GLUtil.h index 54a2ac5735..4dbbd06e05 100644 --- a/Source/Core/VideoBackends/OGL/Src/GLUtil.h +++ b/Source/Core/VideoBackends/OGL/Src/GLUtil.h @@ -33,6 +33,7 @@ #define glDrawElementsBaseVertex(...) #define glDrawRangeElementsBaseVertex(...) #define glRenderbufferStorageMultisampleCoverageNV(...) +#define glViewportIndexedf(...) #endif #else #define TEX2D GL_TEXTURE_RECTANGLE_ARB From b253d60f047544dcabe1df4f32f29fce28c4e145 Mon Sep 17 00:00:00 2001 From: degasus Date: Tue, 29 Oct 2013 18:20:07 +0100 Subject: [PATCH 18/90] VideoCommon: Drop D3D9 SSAA implementation This isn't needed for both OGL+D3D11 as they support sample shading directly. So we could use the common MSAA util shaders instead of writing custom ones. --- Source/Core/VideoCommon/Src/RenderBase.cpp | 17 ++++++----------- Source/Core/VideoCommon/Src/RenderBase.h | 3 +-- 2 files changed, 7 insertions(+), 13 deletions(-) diff --git a/Source/Core/VideoCommon/Src/RenderBase.cpp b/Source/Core/VideoCommon/Src/RenderBase.cpp index e06b00cdea..3ab9bd6f47 100644 --- a/Source/Core/VideoCommon/Src/RenderBase.cpp +++ b/Source/Core/VideoCommon/Src/RenderBase.cpp @@ -67,7 +67,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 +89,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 +129,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 +141,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 +163,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,10 +227,6 @@ 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; diff --git a/Source/Core/VideoCommon/Src/RenderBase.h b/Source/Core/VideoCommon/Src/RenderBase.h index 4e093700a9..06dbd7124e 100644 --- a/Source/Core/VideoCommon/Src/RenderBase.h +++ b/Source/Core/VideoCommon/Src/RenderBase.h @@ -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,7 +159,6 @@ 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; From 3151d8709cc23d36e1b847f24adeeb18b85af2a0 Mon Sep 17 00:00:00 2001 From: degasus Date: Mon, 14 Oct 2013 15:16:42 +0200 Subject: [PATCH 19/90] VideoCommon: move ViewportCorrection into VideoCommon D3D doesn't allow bigger viewports than rendertargets. But flipper does, so the viewport will be clipped and the transformation matrix will be changed. This was done in the D3D backend itself. This is now moved into VideoCommon. This don't reduce code, but in this way, VideoCommon doesn't depend on the backends. --- Source/Core/VideoBackends/D3D/Src/Render.cpp | 59 ++++---------- Source/Core/VideoBackends/D3D/Src/Render.h | 2 +- Source/Core/VideoBackends/D3D/Src/main.cpp | 1 + Source/Core/VideoBackends/OGL/Src/Render.cpp | 5 +- Source/Core/VideoBackends/OGL/Src/Render.h | 2 +- Source/Core/VideoBackends/OGL/Src/main.cpp | 1 + Source/Core/VideoCommon/Src/RenderBase.cpp | 4 +- Source/Core/VideoCommon/Src/RenderBase.h | 4 +- .../VideoCommon/Src/VertexShaderManager.cpp | 76 ++++++++++++++++--- Source/Core/VideoCommon/Src/VideoConfig.h | 1 + 10 files changed, 92 insertions(+), 63 deletions(-) diff --git a/Source/Core/VideoBackends/D3D/Src/Render.cpp b/Source/Core/VideoBackends/D3D/Src/Render.cpp index 7f9218de11..b1a5a0850c 100644 --- a/Source/Core/VideoBackends/D3D/Src/Render.cpp +++ b/Source/Core/VideoBackends/D3D/Src/Render.cpp @@ -477,30 +477,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,34 +492,26 @@ void Renderer::UpdateViewport(Matrix44& vpCorrection) int scissorXOff = bpmem.scissorOffset.x * 2; int scissorYOff = bpmem.scissorOffset.y * 2; - float intendedX = Renderer::EFBToScaledXf(xfregs.viewport.xOrig - xfregs.viewport.wd - scissorXOff); - float intendedY = Renderer::EFBToScaledYf(xfregs.viewport.yOrig + xfregs.viewport.ht - scissorYOff); - float intendedWd = Renderer::EFBToScaledXf(2.0f * xfregs.viewport.wd); - float intendedHt = Renderer::EFBToScaledYf(-2.0f * xfregs.viewport.ht); - if (intendedWd < 0.f) + 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.f) + if (Ht < 0.0f) { - intendedY += intendedHt; - intendedHt = -intendedHt; + Y += Ht; + Ht = -Ht; } // In D3D, the viewport rectangle must fit within the render target. - float X = (intendedX >= 0.f) ? intendedX : 0.f; - float Y = (intendedY >= 0.f) ? intendedY : 0.f; - float Wd = (X + intendedWd <= GetTargetWidth()) ? intendedWd : (GetTargetWidth() - X); - float Ht = (Y + intendedHt <= GetTargetHeight()) ? intendedHt : (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, - intendedX, intendedY, - intendedWd, intendedHt, - X, Y, - Wd, 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(X, Y, 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/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/OGL/Src/Render.cpp b/Source/Core/VideoBackends/OGL/Src/Render.cpp index e507fc45cd..aae7c5164f 100644 --- a/Source/Core/VideoBackends/OGL/Src/Render.cpp +++ b/Source/Core/VideoBackends/OGL/Src/Render.cpp @@ -1093,7 +1093,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 @@ -1124,9 +1124,6 @@ void Renderer::UpdateViewport(Matrix44& vpCorrection) Height *= -1; } - // OpenGL does not require any viewport correct - Matrix44::LoadIdentity(vpCorrection); - // Update the view port if(g_ogl_config.bSupportViewportFloat) { diff --git a/Source/Core/VideoBackends/OGL/Src/Render.h b/Source/Core/VideoBackends/OGL/Src/Render.h index efafb8708d..e30380d627 100644 --- a/Source/Core/VideoBackends/OGL/Src/Render.h +++ b/Source/Core/VideoBackends/OGL/Src/Render.h @@ -78,7 +78,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/OGL/Src/main.cpp b/Source/Core/VideoBackends/OGL/Src/main.cpp index b109fcdd8b..07c1fcfc0b 100644 --- a/Source/Core/VideoBackends/OGL/Src/main.cpp +++ b/Source/Core/VideoBackends/OGL/Src/main.cpp @@ -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"}; diff --git a/Source/Core/VideoCommon/Src/RenderBase.cpp b/Source/Core/VideoCommon/Src/RenderBase.cpp index 3ab9bd6f47..3fc9cb7f99 100644 --- a/Source/Core/VideoCommon/Src/RenderBase.cpp +++ b/Source/Core/VideoCommon/Src/RenderBase.cpp @@ -520,8 +520,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 06dbd7124e..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; @@ -163,6 +163,6 @@ private: extern Renderer *g_renderer; -void UpdateViewport(Matrix44& vpCorrection); +void UpdateViewport(); #endif // _COMMON_RENDERBASE_H_ diff --git a/Source/Core/VideoCommon/Src/VertexShaderManager.cpp b/Source/Core/VideoCommon/Src/VertexShaderManager.cpp index e603e6e6c4..8e674903cd 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,65 @@ 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 UpdateViewportWithCorrection() +{ + // TODO: get rid of this function + ViewportCorrectionMatrix(s_viewportCorrection); + UpdateViewport(); +} + void VertexShaderManager::Init() { Dirty(); @@ -330,8 +382,14 @@ void VertexShaderManager::SetConstants() 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) diff --git a/Source/Core/VideoCommon/Src/VideoConfig.h b/Source/Core/VideoCommon/Src/VideoConfig.h index 890b9b9eda..e717cc463b 100644 --- a/Source/Core/VideoCommon/Src/VideoConfig.h +++ b/Source/Core/VideoCommon/Src/VideoConfig.h @@ -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; From acc0b3b21c92e999e116d18d3d892a55be1ee55b Mon Sep 17 00:00:00 2001 From: degasus Date: Mon, 14 Oct 2013 15:28:47 +0200 Subject: [PATCH 20/90] ogl: don't call SetViewportChanged from backend as it's not needed any more --- Source/Core/VideoBackends/OGL/Src/GLUtil.cpp | 1 - Source/Core/VideoBackends/OGL/Src/Render.cpp | 2 +- Source/Core/VideoBackends/OGL/Src/TextureCache.cpp | 2 -- Source/Core/VideoBackends/OGL/Src/TextureConverter.cpp | 4 ---- 4 files changed, 1 insertion(+), 8 deletions(-) diff --git a/Source/Core/VideoBackends/OGL/Src/GLUtil.cpp b/Source/Core/VideoBackends/OGL/Src/GLUtil.cpp index 256b30ace8..eb05e8cddc 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" diff --git a/Source/Core/VideoBackends/OGL/Src/Render.cpp b/Source/Core/VideoBackends/OGL/Src/Render.cpp index aae7c5164f..ac36f3aa08 100644 --- a/Source/Core/VideoBackends/OGL/Src/Render.cpp +++ b/Source/Core/VideoBackends/OGL/Src/Render.cpp @@ -1661,7 +1661,7 @@ 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); diff --git a/Source/Core/VideoBackends/OGL/Src/TextureCache.cpp b/Source/Core/VideoBackends/OGL/Src/TextureCache.cpp index c3349f5f2c..65dcdce41d 100644 --- a/Source/Core/VideoBackends/OGL/Src/TextureCache.cpp +++ b/Source/Core/VideoBackends/OGL/Src/TextureCache.cpp @@ -37,7 +37,6 @@ #include "TextureCache.h" #include "TextureConverter.h" #include "TextureDecoder.h" -#include "VertexShaderManager.h" #include "VideoConfig.h" namespace OGL @@ -391,7 +390,6 @@ void TextureCache::TCacheEntry::FromRenderTarget(u32 dstAddr, unsigned int dstFo } FramebufferManager::SetFramebuffer(0); - VertexShaderManager::SetViewportChanged(); GL_REPORT_ERRORD(); diff --git a/Source/Core/VideoBackends/OGL/Src/TextureConverter.cpp b/Source/Core/VideoBackends/OGL/Src/TextureConverter.cpp index d4ce2eb5bb..05742ddc95 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" @@ -350,7 +349,6 @@ void EncodeToRamYUYV(GLuint srcTexture, const TargetRectangle& sourceRc, u8* des EncodeToRamUsingShader(srcTexture, sourceRc, destAddr, dstWidth / 2, dstHeight, 0, false, false); FramebufferManager::SetFramebuffer(0); - VertexShaderManager::SetViewportChanged(); TextureCache::DisableStage(0); g_renderer->RestoreAPIState(); GL_REPORT_ERRORD(); @@ -426,8 +424,6 @@ void DecodeToTexture(u32 xfbAddr, int srcWidth, int srcHeight, GLuint destTextur GL_REPORT_ERRORD(); - VertexShaderManager::SetViewportChanged(); - FramebufferManager::SetFramebuffer(0); g_renderer->RestoreAPIState(); From 8e0f91f70ebe38fa344f4c0006f358d2d9773077 Mon Sep 17 00:00:00 2001 From: degasus Date: Tue, 15 Oct 2013 00:05:49 +0200 Subject: [PATCH 21/90] d3d: use backend based UpdateViewport instead of VideoCommon one --- Source/Core/VideoBackends/D3D/Src/Render.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Source/Core/VideoBackends/D3D/Src/Render.cpp b/Source/Core/VideoBackends/D3D/Src/Render.cpp index b1a5a0850c..3cdd703fba 100644 --- a/Source/Core/VideoBackends/D3D/Src/Render.cpp +++ b/Source/Core/VideoBackends/D3D/Src/Render.cpp @@ -1026,10 +1026,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; @@ -1049,7 +1049,7 @@ void Renderer::RestoreAPIState() D3D::stateman->PopBlendState(); D3D::stateman->PopDepthState(); D3D::stateman->PopRasterizerState(); - VertexShaderManager::SetViewportChanged(); + UpdateViewport(); BPFunctions::SetScissor(); } From f4a9deefa8896917d8a8917dec36eeabedb8d013 Mon Sep 17 00:00:00 2001 From: degasus Date: Tue, 15 Oct 2013 13:14:37 +0200 Subject: [PATCH 22/90] ogl: remove some unneeded includes --- Source/Core/VideoBackends/OGL/Src/Render.cpp | 1 - Source/Core/VideoBackends/OGL/Src/TextureCache.cpp | 1 - Source/Core/VideoCommon/Src/TextureConversionShader.cpp | 1 - 3 files changed, 3 deletions(-) diff --git a/Source/Core/VideoBackends/OGL/Src/Render.cpp b/Source/Core/VideoBackends/OGL/Src/Render.cpp index ac36f3aa08..de420b29e6 100644 --- a/Source/Core/VideoBackends/OGL/Src/Render.cpp +++ b/Source/Core/VideoBackends/OGL/Src/Render.cpp @@ -33,7 +33,6 @@ #include "RasterFont.h" #include "VertexShaderGen.h" #include "DLCache.h" -#include "PixelShaderManager.h" #include "ProgramShaderCache.h" #include "VertexShaderManager.h" #include "VertexLoaderManager.h" diff --git a/Source/Core/VideoBackends/OGL/Src/TextureCache.cpp b/Source/Core/VideoBackends/OGL/Src/TextureCache.cpp index 65dcdce41d..7810ff00eb 100644 --- a/Source/Core/VideoBackends/OGL/Src/TextureCache.cpp +++ b/Source/Core/VideoBackends/OGL/Src/TextureCache.cpp @@ -30,7 +30,6 @@ #include "ImageWrite.h" #include "MemoryUtil.h" #include "ProgramShaderCache.h" -#include "PixelShaderManager.h" #include "Render.h" #include "Statistics.h" #include "StringUtil.h" diff --git a/Source/Core/VideoCommon/Src/TextureConversionShader.cpp b/Source/Core/VideoCommon/Src/TextureConversionShader.cpp index 9b6c8762ff..9e8467fe44 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" From 2118c1d3c3949b998d03acf52b591e4e2b9cadaf Mon Sep 17 00:00:00 2001 From: degasus Date: Tue, 15 Oct 2013 14:13:29 +0200 Subject: [PATCH 23/90] VideoCommon: remove constants.depthparams[2+3] as they aren't used in the shader at all --- Source/Core/VideoCommon/Src/RenderBase.cpp | 2 -- Source/Core/VideoCommon/Src/VertexShaderGen.h | 2 +- Source/Core/VideoCommon/Src/VertexShaderManager.cpp | 2 -- 3 files changed, 1 insertion(+), 5 deletions(-) diff --git a/Source/Core/VideoCommon/Src/RenderBase.cpp b/Source/Core/VideoCommon/Src/RenderBase.cpp index 3fc9cb7f99..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 @@ -231,7 +230,6 @@ bool Renderer::CalculateTargetSize(unsigned int framebuffer_width, unsigned int { s_target_width = newEFBWidth; s_target_height = newEFBHeight; - VertexShaderManager::SetViewportChanged(); return true; } return false; 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 8e674903cd..d3bb07dd3a 100644 --- a/Source/Core/VideoCommon/Src/VertexShaderManager.cpp +++ b/Source/Core/VideoCommon/Src/VertexShaderManager.cpp @@ -378,8 +378,6 @@ 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(); From 92fdac412bd740cf0b6128e897232bb4c893d77d Mon Sep 17 00:00:00 2001 From: degasus Date: Thu, 24 Oct 2013 14:06:48 +0200 Subject: [PATCH 24/90] VideoCommon: drop UpdateViewportWithCorrection It's only used once in BPFunction which itself is also only used once. So the setter is moved to BPStructs like all other ones. --- Source/Core/VideoCommon/Src/BPFunctions.cpp | 2 -- Source/Core/VideoCommon/Src/BPStructs.cpp | 1 + Source/Core/VideoCommon/Src/VertexShaderManager.cpp | 7 ------- Source/Core/VideoCommon/Src/VertexShaderManager.h | 2 -- 4 files changed, 1 insertion(+), 11 deletions(-) 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/BPStructs.cpp b/Source/Core/VideoCommon/Src/BPStructs.cpp index ab5789a078..e3ada3c0bf 100644 --- a/Source/Core/VideoCommon/Src/BPStructs.cpp +++ b/Source/Core/VideoCommon/Src/BPStructs.cpp @@ -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(); diff --git a/Source/Core/VideoCommon/Src/VertexShaderManager.cpp b/Source/Core/VideoCommon/Src/VertexShaderManager.cpp index d3bb07dd3a..6fa22c4b9c 100644 --- a/Source/Core/VideoCommon/Src/VertexShaderManager.cpp +++ b/Source/Core/VideoCommon/Src/VertexShaderManager.cpp @@ -175,13 +175,6 @@ static void ViewportCorrectionMatrix(Matrix44& result) void UpdateViewport(); -void UpdateViewportWithCorrection() -{ - // TODO: get rid of this function - ViewportCorrectionMatrix(s_viewportCorrection); - UpdateViewport(); -} - void VertexShaderManager::Init() { Dirty(); diff --git a/Source/Core/VideoCommon/Src/VertexShaderManager.h b/Source/Core/VideoCommon/Src/VertexShaderManager.h index 60e23902f1..8b5875a8ac 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 { From ab355031959ba2550f5e6184b23d31a756833bc9 Mon Sep 17 00:00:00 2001 From: degasus Date: Tue, 29 Oct 2013 19:19:56 +0100 Subject: [PATCH 25/90] ogl: don't force depth+stencil for default framebuffer --- Source/Core/DolphinWX/Src/GLInterface/EGL.cpp | 3 +-- Source/Core/DolphinWX/Src/GLInterface/GLX.cpp | 7 ++----- Source/Core/DolphinWX/Src/GLInterface/WGL.cpp | 4 ++-- 3 files changed, 5 insertions(+), 9 deletions(-) diff --git a/Source/Core/DolphinWX/Src/GLInterface/EGL.cpp b/Source/Core/DolphinWX/Src/GLInterface/EGL.cpp index b8276ae546..d6f3631cfb 100644 --- a/Source/Core/DolphinWX/Src/GLInterface/EGL.cpp +++ b/Source/Core/DolphinWX/Src/GLInterface/EGL.cpp @@ -45,12 +45,11 @@ 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, 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/WGL.cpp b/Source/Core/DolphinWX/Src/GLInterface/WGL.cpp index 7ba315a5b4..5a4276b9c5 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 From 35824aa4d58f433b3682a53c1bd762e9cdf3d098 Mon Sep 17 00:00:00 2001 From: degasus Date: Tue, 29 Oct 2013 21:42:40 +0100 Subject: [PATCH 26/90] ogl: ceil viewport, rounding isn't supported on vs and this is more like the old behavior --- Source/Core/VideoBackends/OGL/Src/Render.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Core/VideoBackends/OGL/Src/Render.cpp b/Source/Core/VideoBackends/OGL/Src/Render.cpp index e507fc45cd..9234a8a6e2 100644 --- a/Source/Core/VideoBackends/OGL/Src/Render.cpp +++ b/Source/Core/VideoBackends/OGL/Src/Render.cpp @@ -1134,7 +1134,7 @@ void Renderer::UpdateViewport(Matrix44& vpCorrection) } else { - glViewport(round(X), round(Y), round(Width), round(Height)); + glViewport(ceil(X), ceil(Y), ceil(Width), ceil(Height)); } glDepthRangef(GLNear, GLFar); } From 0f061e4e7c4c950b220987cbf65819dc8e6c8862 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Thu, 31 Oct 2013 07:30:18 -0500 Subject: [PATCH 27/90] [Android] Do /not/ give users the benefit of the doubt that the device supports OpenGL ES 3 when we can't grab an OpenGL context. The only devices that fail to do so is PowerVR5 and we can't run with them anyway. --- .../dolphinemu/settings/VideoSettingsFragment.java | 8 -------- 1 file changed, 8 deletions(-) diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/settings/VideoSettingsFragment.java b/Source/Android/src/org/dolphinemu/dolphinemu/settings/VideoSettingsFragment.java index fffea888a7..8cf7cf0cf4 100644 --- a/Source/Android/src/org/dolphinemu/dolphinemu/settings/VideoSettingsFragment.java +++ b/Source/Android/src/org/dolphinemu/dolphinemu/settings/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; } From 4c7bbd96e435a7516b05d3e8c791ab41505e2e0f Mon Sep 17 00:00:00 2001 From: comex Date: Sun, 25 Aug 2013 20:06:58 -0400 Subject: [PATCH 28/90] Improve ChunkFile.h: - Add support for std::set and std:pair. - Switch from std::is_pod to std::is_trivially_copyable, to allow for types that have constructors but trivial copy constructors. Easy, except there are three different nonstandard versions of it required on different platforms, in addition to the standard one. --- Source/Core/Common/Src/ChunkFile.h | 58 +++++++++++++++++-- .../Core/Src/IPC_HLE/WII_IPC_HLE_Device_usb.h | 7 --- 2 files changed, 54 insertions(+), 11 deletions(-) diff --git a/Source/Core/Common/Src/ChunkFile.h b/Source/Core/Common/Src/ChunkFile.h index 6fed73a7ed..ae5d9522e7 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 { @@ -83,6 +99,34 @@ public: } } + 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); + } + break; + } + } + template void DoContainer(T& x) { @@ -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,11 @@ 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) { diff --git a/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_usb.h b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_usb.h index 253f2d08de..f6abbc67fe 100644 --- a/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_usb.h +++ b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_usb.h @@ -39,13 +39,6 @@ struct SQueuedEvent } }; -// Hacks for ChunkFile to accept SQueuedEvent as POD -namespace std -{ -template <> -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 From 65404e7475d351665286db6a14de7080fc355655 Mon Sep 17 00:00:00 2001 From: skidau Date: Fri, 1 Nov 2013 12:33:29 +1100 Subject: [PATCH 29/90] Removed duplicate definition of ibuild within JitIL.h. Fixes JitIL from hanging on x64/x86. --- Source/Core/Core/Src/PowerPC/Jit64IL/JitIL.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/Source/Core/Core/Src/PowerPC/Jit64IL/JitIL.h b/Source/Core/Core/Src/PowerPC/Jit64IL/JitIL.h index b7ee6f4651..199f4144e6 100644 --- a/Source/Core/Core/Src/PowerPC/Jit64IL/JitIL.h +++ b/Source/Core/Core/Src/PowerPC/Jit64IL/JitIL.h @@ -68,8 +68,6 @@ public: JitIL() : code_buffer(32000) {} ~JitIL() {} - IREmitter::IRBuilder ibuild; - // Initialization, etc void Init(); From e22ff4927ae53a116edd72664f7fdc2a8cd9b958 Mon Sep 17 00:00:00 2001 From: Matthew Parlane Date: Sat, 2 Nov 2013 09:24:56 +1300 Subject: [PATCH 30/90] Revert "Add dxsdk_dir to vc++ paths via base.props. This means you no longer need the paths in a global property sheet. In fact if you have them in such a file, you should remove them as it will cause conflicts with the vs2013 build." This reverts commit 0791a9ef80889ffb70c67fbd6491635b0014747b. --- Source/VSProps/Base.props | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/Source/VSProps/Base.props b/Source/VSProps/Base.props index 91e8fbda9e..d1803eb5ae 100644 --- a/Source/VSProps/Base.props +++ b/Source/VSProps/Base.props @@ -22,16 +22,6 @@ $(IntDir)bin\ $(ProjectName)$(TargetSuffix) - - $(DXSDK_DIR)Include;$(IncludePath) - $(DXSDK_DIR)Lib\x86;$(LibraryPath) - $(DXSDK_DIR)Utilities\Bin\x86;$(ExecutablePath) - - - $(DXSDK_DIR)Include;$(IncludePath) - $(DXSDK_DIR)Lib\x64;$(LibraryPath) - $(DXSDK_DIR)Utilities\Bin\x64;$(ExecutablePath) - From dab9af43a408747d8c5d699e88d0a6199dd6f33b Mon Sep 17 00:00:00 2001 From: Matthew Parlane Date: Sun, 3 Nov 2013 11:54:45 +1300 Subject: [PATCH 31/90] [Windows] Add missing dlls and enable OpenMP support. --- .gitignore | 3 +++ Externals/msvcrt/Win32/msvcp120.dll | Bin 0 -> 455328 bytes Externals/msvcrt/Win32/msvcr120.dll | Bin 0 -> 970912 bytes Externals/msvcrt/Win32/vcomp100.dll | Bin 51024 -> 0 bytes Externals/msvcrt/Win32/vcomp120.dll | Bin 0 -> 119456 bytes Externals/msvcrt/x64/msvcp120.dll | Bin 0 -> 660128 bytes Externals/msvcrt/x64/msvcr120.dll | Bin 0 -> 963232 bytes Externals/msvcrt/x64/vcomp100.dll | Bin 57168 -> 0 bytes Externals/msvcrt/x64/vcomp120.dll | Bin 0 -> 137376 bytes Source/Core/DolphinWX/DolphinWX.vcxproj | 2 +- Source/VSProps/Base.props | 1 + 11 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 Externals/msvcrt/Win32/msvcp120.dll create mode 100644 Externals/msvcrt/Win32/msvcr120.dll delete mode 100644 Externals/msvcrt/Win32/vcomp100.dll create mode 100644 Externals/msvcrt/Win32/vcomp120.dll create mode 100644 Externals/msvcrt/x64/msvcp120.dll create mode 100644 Externals/msvcrt/x64/msvcr120.dll delete mode 100644 Externals/msvcrt/x64/vcomp100.dll create mode 100644 Externals/msvcrt/x64/vcomp120.dll diff --git a/.gitignore b/.gitignore index a645f56c8c..4c961a6db9 100644 --- a/.gitignore +++ b/.gitignore @@ -13,7 +13,10 @@ Source/Core/Common/Src/scmrev.h *.sdf *.suo *.vcxproj.user +*.obj # Ignore files created by posix people *~ # Ignore transifix configuration directory .tx +# Ignore tlog files +*.tlog \ 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 0000000000000000000000000000000000000000..a237d2d77812d406c54d1c7f573045e1b2a4742f GIT binary patch literal 455328 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ƪ$?6F?yn&&=DDqRDeh0-N# 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 literal 0 HcmV?d00001 diff --git a/Externals/msvcrt/Win32/msvcr120.dll b/Externals/msvcrt/Win32/msvcr120.dll new file mode 100644 index 0000000000000000000000000000000000000000..8c36149a65c4f5d633107a2bc613d33d23e89edb GIT binary patch literal 970912 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 Jnh*-T58a%`vPZR3sBBBHi`HQKd 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%0AuhwH>TX}7<_xEDI?CJe0sjEjF{ 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

6E9Z;R^)#u@ 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%0DTabTo%ssd1DCPg|KUkiW3D?Chh%`qA)7*Mptt1_ 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

!SA zKzW2xGZN!~LZbwsM53glV>*@&_iC{#51i_#3G z6G|79S5PLREJxXbQh;&}%l$^8Gx{QqBNzJ;S}QVh00h9)NvY=e441;thT zZh7^KPDqO@C$?izcyy0T55dpNbR{?tb`3bXW+tQ)1Onj!HG*92olLec21h5w0x_Vd z;ZL6Hnu)U?khA2mfY@00)L_XprUFvqx`DD2kdlxV&?l@1^{uCk2Xq;q9v7ZGFd;TB z5IZxe!`@{d!;{OeQw0vx7nnSHG@17<%gvd1gsSCp%zbAPMvbz*Hhw9#8mBy>qQ+=SQ zn5Un_2#xmakybjc$*J8CK4+xHg<`1S^ilcbiLmro_aIZ$kKO~(eS7q%ct^K{q}ag3 zen}ON~w)Z_j5Nm6P_GCA*?jg4I!J4 z$VqAl+E0vgUw?crl0@XagA&q45jQU^B{~K}Jdm6VAwW%ZVo++r*f_}2Z(bO6TS6g> zaWIcmm$BF)=hcJ-%$F$hlJKC>?i*2W#I+q%u7nL0d+8T$=q3 zcS#HO0G6M}xb=9lUYz^9bhLsJQXyLKaB=RCXK#dp?kO2a&BKU|#`lVMG$%FLuM>{n zTN+4JFO@p-%s}df{eDSf6H=3t2;MUwIyE7B7&=K^AXiG?qP#xLx<`e#t9bt6Ki!WW zdj8Y>IRERvv^tCxX~$OK5_R?6~E)&=8m9@6o4xb+EN*=R^k21 zx^;q_dn|4NX{2&n9`D=rK{5v?C&l%^Z(pU3wnKmDKXT=<;8J<$IRvrn$?)W|Pt@OJ zEs>^g!>+jylq(+myiq{Hl7+o zLCq(Pum|4VA2J20RPj^&bf3>8GtehvbaZgShXlU z-r>-y|75`GlNSH6FN?iPxBJ?4dV7*711<$Tf~dCl%dVF8>cg_{s4E>BjG}r$nqVw# zILDT_U@Syx7REX;4!h>U;zmcO5RiwWW;`Jy5F2V$#kGyK`M|SpMtVv{y1hXz3`#a> z1kQd~Q6E5fhzcot=U6hz6}=3s_~OU2K?V&rU~{RwbR}Yp8uyVq-1WOvDwPTg3pq@P zwRID)O=>yu83F=96`V%y?%TCD`MkmQBtnT~P-}@q^iLWGvr2KEc<~f_5UI}gXZMgT zBhQwOJh_9SMEh#LIQMng{uTx>49rCPv%Ov`NuFk(w|fVr1^SHr9S#nRUOJ`Q-v&k} zLb3|&_p%MD-NU72^JP~`Q6{-=D;O9OYKMI{aP9Pr6mt7ODzbvDt)#mssqD!LJ?k>Q z%;)g*3XO{!MT}=`XaZ{9T{_;Rse#mQZtp88EjcmHZG(H;`WgTdIfeN+SK$sa$`8x* zW2rMrWMz)SR%@inE*ZlCs$*V{m$qX!O8FBhuiyzyC4F`;|Gr4s*^Tu`f_T|tkVZM| zURS&jKm}FonSFBrb&T|;^fq_@yFYc;Ko3c3HRw>JP3nL_Ws-gNnGHIOkLVdDnlv99&^lKH;=t{e-0? z;CCR9!K8+IhsULkPDp}SmC7i7Ux|!bctQ-INpcHyp>&MPmonyScZCrNOixX8%Rwsj zqTAYp#--Y35m}E?WR!ZI)Y|p2m*QT0X{hT1dv*WQrMl#qAoLB&8a5X9-gEbD^y4#g zDSI6dm0YSV-t!Cz>>Zs_{ym&LV+*rwtx-#Q*;;p>r5=(y`eWBXkUK3F64(Pd{O*Va zGDf>y0QZfgxA&jcP|!I4_xImM0PK3);`f-(Q2Kzw=10)~aK4%sh?=-7Dh2qF=hO91 z_2hAK0DiY+DE{9SzvB`{^`QDveek^p{@)Fs$=`Ob-ygYI7&XyWt$t)j897?^Rrl}G zc$9uFJ6ysE2kJ}5ZVe?y1ZkbrnS?eI zD~!Zwv@+Iy8`1))Jr>t(7!72XPIxv1&yBF3BBPmt`pImJpyE*@MXg3#|NB^W!rcLO z{r(kdNyFJxwBp|PGZvp>(K3aZBz^B&dMA+p()Y4?Am7}x`Jdk56{_35F|^g_EYsgIeY&;ci8KLIvi+^ zNJ810J(h0#n~W3|AQg_QM26GQpNf)+-!}5fBRBl}9~L}W^KIzPv_cj}5eU&ZFp@0k zl2Zzjf~62CR0@|Oq(~`Bik0G}L@7l|molY^QkFDTnl83bZ3yp>|xmq+QiYw1*m{`{@39YrUP`QP*{+9;%1y5qhK^t54Lk^&EYkzFc3W zZ_&5ud-ZdAv3^&tXEZVbjiJV5W3h3;_}#c;c$+oM@2n#0l6BR(X(2eF<~i_NRJ0%6 zg!ZRf)9vVvG)?ogOzX6h4x)R}p>#MMLBB?SMsK0F(fRaVx_~}H7t+V+Q}j8yh`vNK z%rGW_d51Z}Y~b>_y<7ozge&BZbEmj-ToHGPyUG=Fx49DTA=i@czz6a@`A|NbkKo7i zx%{{MDgGQ^#9!jC@;CTm{x)w4K|-()B7_R-gmc1ALM^eCcuc$|`bw>(_EMlUTUv_I zd?3L*2`$Y1A{C7_E(t25;y_kP%{p8<9q=k!YkF6OF0H zOk*C#W4W=`*l27s_8Lcw}c|)ZU&hlX1Ez?#+r#{ zx;fFDYR)w0nTyTk=2~;3xy{^b9x;!b=gdpy4fD47(DbruTJ@|Z_^rK;7H{cRkQHKu zTai|*m1w0~6RoM%OlzLC*jjF_wKiJYti9F|>$r6eGjhYaZ9RmlhyB5vc+oZKdYF~g zm=PYc5k!YzCL-xrI+0GNC(={tne;q*F}<8#OK-%??8U4c$BbN}Z_u~thqM<{lc~ov zVOldC8J^LZASQ$fXCj$cCXq>JCNfi*nan(9F|(Xm%WPz}F?*RK%yH%%bBVdZ+-4p! zUTjUa9@~U%&30sYR%e6Q5H_5RWMkPxHl3ZwPGx7Z^Vr4ga&|4dk=@4bWsk7O*>mhA z_6B>KeaL!oHMx3R6RtJak>fd?3*th!a4wRI!ezR^_cdZB3BVzb47*lcZpsUc;>DqK1x&hsYZbrAH+tTgnPBcr4v`U+F z7rGnWlkP+JqX*D~=~w7s^jPM1<_;6a?qgf=xA-Id& z59Md@(;&AImRMC;u(%-bD<9VGh^7TY)|eLE{9vh zt>QLtJGlKE#nyPyIMibH> zr-RDEVLoR2D*Zd%j=2Z*S&ePOc47Olne1k^5c815E#nKZqG+LyFiIFB{3!e>R1u#O zgT*Xyhsa6;qzUp2IY-{6tW!ro|18ngYNxc0`W-zAD<#+X%J|;+$*5wsHG7yJoBPbO zn4Ms2DQQ2{K~2ZO7vmoc?J$yFNgtqFFuj>5<_)GXYq5ja8Eg^j&DG)hVa9VY$A`ES zelvfTj~Ca7dqhQwk&a59a$R|_JW1u)MtG%Fg(fVqGwdvX>%|}=DZhAjx zxkY-uUdMRJh&Kw2D@I>)xcQa2(4wN;^HQ6xPy4XXvF%xn{grLT$y_S5&SmkmbX}>X zJ*(B%p3|CYEwnbM{W-ms(aZ=is1yhMAmIG;Q96{li@toNsOoZcyV^->uM4^XU0T&x zYOFHO8<&k0W&nBbEbL6gp*mJ&4@g=PeVpwJeUM|OSyYY#b`E|&D?qM4=1xNQT@fQ} zYw?_{$bQNxrAWD?ya+kV)mB1QO0>VVL_I~HYEC!tV6IzEex|R}pD`PleauhHpNs=* zE`pW09^Bi)Y~fwuec=OPsqnF|TKH60FKiON6b=a?Vxlxjnh5>X#oTQkGK-*z{xqjr zi!3V7-QStC%&=TDslSvhzisB5znVW6K+ z%HCn`vwyJ;&YP>o)#9GznsYDkDnEqxm)gswJW`&he_@Oz&lEYRy*RX@pQk&(j&ig_ zYqSN)_<>GlHZ#+qFLIzU7C>j@LTjwT3d)1#*aF>=5A9I^{ZR;+xx`+D1}SDsSYOT` z+M^vubHQAMtvMz_XXIdX7eH_1LUXKwT;)M~{FBYO0joptUc3+Qk9ErPGVg@ViRTmf zxA~>Kf)#N^7^(fFXBa)8*C(0ZnHjK$4tOrWU1d=oAScP=Iq} zE}GB$$|!6c`ysoBJ&(}|<%0Q_pbPfGnu$WX@EYbNLYyuBAhwY{m*V9}B}Pe9zEaL9 z5$b%kL@n0p=&khjdLO;N93uq44&A8UhEU=_kDoPu3&+v*!uF|0!g zu@Be*E|ad%UbGKv#1C{Gthx7@)9jDzP1b|!$_?XEpzF2?zY9CWs>%eljaG#yFMkgz z3Wt;YYUwwHQ~RoZ+KXBkypGqjx3oFhB6uCEwe{K;T8utZuVOTY?R3I=1{)Euo{2_^ zZ9V51ndW}jx;thqtC7{*>I4gS$T~^ppZ1^%aqy;FKnsti&(hDq^29Rnus12p3MPeJ z#GYmc+Fk*fo7?aQ>Ot?(n3o{_1O6+%notk3(nRFMC~=JF5|@i#iO0o`(tLPRe@G4G zmU4ugAy1Px$`|G9n3cQoL-~0nN*SpnD{rfd)LeCo`mK6G{RLX{p;|>d1n=n=?WV@+ zFX;#M^SW+yGX@$Nu>bRoPmDaHwfUks#eB=$Y#uPrn^(;0Ry)|~Vb)}81$iH*2jvAj zJe8gfOPd2*y8zZU7xs1)EN&ibZbg5HctWk2c6ehN)>ekSb;9BX!{&y<>PEosMwO36 zI+F?en*|Fzk6FO1g8j{7wlIaTzBgcZDb@#;*B7?e57yTo_O~4@Fbx|l!wNfLhl62> zLv6hf$wt8*$3x>!WV5ic9BpY%Hv{El+ zzH&$jR9{h7Ykl-#`egmIepBCUeq&v*kT#`qFckIaWcVCGLWHnYXd!i$MoN>V*QL4A z`;hKJsaSd>Rgrz==j7%xEj#7a@>lX9xlleYUy&o!N$Q)hu}jnq>Q-o0OY5a2!_Upp zzS7QWKWo>uV(p&hrB~NG=|TDc%#)8%2fo`NBgz6@V$4(Z4AQ~HnkZ?MV_^p-{kL&K`5+{8u-Br?E^1#koC3o9T~?I58$Wp zH0cv`ZN{Hj!*0P^>BD$w#Uw)ss3(gOm*Ano?hDsVR8( z9$Kh2R2!+i3MnA*%_;4iR#YD4)YN_TdU_N1U@~Hy2t8iUM0_*Tj&Bz08xh~+V??g% zCGhoY8osu#&)a$`6y8B5Jp7qP4n|}FJeV!Ee}4{^u^7I63A}sC^o4itXZoA684S-p z6ux}~y!$Bl_wn%XQ(y~-JzfA0Ki6CZTe%m${SC9&EP-!NSzeZpi1)8Pg>_KD$B$EeOyn(RQu_<%!kYZ_Di+_;-NE$f#UdVAyyoT(Rx$zk?YC+ zaz|N~gXB;-QjV9?L-q>hi zJP*D64Sck7#zo_SQPr$vHaFXtw5gcg%zkDJVwGu#Pebf4h%zust zm5W0R9SzXt!KwwoUX7^!fySfxbrHr0>&Jm}i)V&|$AIUotzPp-wY(*`aI# zo6Nq(zRk{s9bXNb9m%cZ&U4Qrw(BgsEaVH-#1SHe*$+Xyyjt2M^_GXqW8mezE7wt4 zE20vt42C_Nq~s{el#R-Mct+Qid5FlqFihLmq;fr|+vwi__&~RqcDB}wWM5_HptbGn z_bkO#=UQ+k7sd_Y(zw^THE4eW_XW3=+sQr4NAmCTi(%sn?0B+-f5_JqdB@qJ-Geb)PO|3KNAaVJbAhOd&^@2Mw?aIv`KjC~Sc(-3vWHWZy^h6Pt+s zVr#LTNQ<%<3R^W>JRo{Vb)@Iv(;k;ZIZ&RCIqR&%DN7VuO;)Eu11?jKsW;VH&~!e! zAEetKQM^OOZWl0_P#bre^)=L=Nf+-Ns#R$&=F_N zMpj#^gEiaw0J;`~p6@~VKsR{X2*4@22J+H=?0OSuP)(brHPm0$ z)AdQvmK&iDe#1C=8qYu%v_sTSBkq^Wy_ay?e~Ci;KN{LH6MAxkaScdFfZ5v|3hh|U zYK6BKu|86)1@OGKT1Txv$v70kU&1(CrYADFu+V#%0z}A#Oc5gFt9FcB6ZSa>qw(0Q zy~Nh%8bc~GITyE@JI3AOeE7QXZV2Kr5H=`|AH}CZzfR((@o(|7`SBNbrmBwKUNwb`$%E zVd5Y$S{yDWis|BbakBV^I8&S>E)+k6ANHyEIrMzKxL=$HnO>*tQ1&TTU38W*fpQhmqnTHk+3?SfGgp`@h_E}s4>QrzzU&3| zI^q=5#xo{xS==;ep{vk8J^56u(=YgK{58y9Euo>%74ceM$bVBwlx`Tcxfp+9t5oG=OVe^j_EOad}FOL|ZGQraoqmP&w{QL-0SSxtML`N{2I zeO4)3lt^`!dQY7O`_fGx2@iRq;WDNhH;ubSKQq}ZB1j?P2T$7<^kkob9`@jxa&L3j zA>sAmZ86Zd$NAs+iu$w6k0Sb07bi;D(pKQ0(_~q}583E_VcBE!Bs~rO<|_R=y!8eB zS;I1VBE}zR3^De@_j|_dY<4#b%&TTY*xL{*)5?aHT3~$&+zkDp-Q!`>(X=0XUhb!k z0D_RCE>IUE64(e|?3C?+-B2mbM{A1kv84!SDc1}KyY+-Vr>X&OC+ zo`Gm#IlUT~=~ken-_vL4U+6pZBf23Fpe*KXW$uI_S?&>c1pc_EE$`2AZGfnCfuCe z{S~78np`uk12>BMh5L(Zg<4xk5r!N)lR4^Dz-@FtMg73Kz5%t2Oy^{O=u zYc}6HW>G1gwk|P&0ro>|w%zt#>LD8Yj`@Z8n|X$9j5ul$yOLdp@pa>o!9XKlliRrLLSZQeaN1(MOz$8-z_sQ&n5 z%zE_tYiQwbwbR-K?V453jTHCl^8zGE+P8@IFudUK#4 zqxB{FpSppl=3C=5JlSCQuIe63;tovlG7rDpT0n|5+p2BpyMqOYtLe^nQf2TwV(_2{w$PqP(a`9PZOm%mZc|+lp(9 z%!m$8Asjx!4ruaYKy3{n0jTXf!6DWWUqXGaiEoSVi_66NQVZz?X`!@I+93TdHIv)Q zo#YsKjBTwrcnfVC9@8@S3g;o5SYxW3Rb zlek&H)bfDB7a&fl$v5U(@h>2H?gpgnzOXx`jf@FAMk21=4=NN~_^;k#Q?ZR04*%zZ_>T0UEh8c@&RF>Kv*pF|k8(|Al(I(oT|}M>xAUc1%A|N?GMdUZ>&qu4K<9O z<`6Rzy5W8EBSd-Efrsy~E?U3Zw%VIIhi7WhO@YF8hlLzNzeO)XT(OltO#h5bgvgk{ zrG_)f%w%{s3z-hA%64O)1`2_d}01<{%zI<4yRhdu)ZnKwC`CfVevOuUqaLGx2_th7NirvmXw zh91j;r}3`32AEbp5TA4E1vOjSsaH4J7%|Y16W~3~L7cJOIBJ|S?jxr-&UC?(X=inY z-NnQ>z3qI`4)p96Fux1zFYHfTFId;AkiPEH3TX`V#1)yx>Y{-yUDjskyYw_X`77I0doaAL5@tZw;dNvb^m) zdmpYpHrfQx-ow-2E2nu$XRxRKjn#7I}MUh!iS23#We9V@e3eYcf>}pbi1TM z@^Hiy3*}AnIrvxIlwrzjTi^T&4cJC~5%Ey48mlI#AF7+wqpylfcsdh8!#WFvOIru_B)nzQBluiv6UqSaX|z#U95To&%b6 z3G;XZ*!g|AnbKbAtHeWhf1;d6HZ&MA5~XISOVzbNEUO{TehC;|5%Oh>J_J755&bND z^s7M817KPE7=M{Q$N-?DMc%faZ3)ynmYD>JtjoT@MR5~gQ8q#E{>pg+jb(U^PXMM! zBBHv2is*GTVxs**cQF$(@|L(#{6_py{8bE%Afr^D zQ#cDg-yq~8M`Ha?w! zU(X6hJAqhh_ux}jMI02)j$l7V?FWEKwcrG3&C{ID%ZS2!ff0ovo=y=biHDE}@`mSe zT=G=kQ(J2twHQQJghxR6R>5!df@?xM7+;2A+5lVEO1UOcqbF02F`$P=x${39|pbKyBI~7vV$>A_6m$f}F#2WE^slZ`cC8 zQwVSGDl+{PvJHOlj%j2Ug7HRCh`}?F-OoXuZWZ!#`N+$iLRPLAIei~w^!*W;$cVK= z@wV}to5#`-UL9Y`W(k5#41rf0ZleL{WM~ze8!nhv5ZID(!b=K9CNC24PApJ;f>vkoQ~BvYq!yQA)@u>5Y~;68 zK*`G3B?Jwm1TSQo{NRhYF~N>N1s~@Ep2P&*XyAehXkdYGL@2a#1CQ}=AF-zBE7k)# z*iP&SWRM3o7>xKR6#hhn7!On>1)4omoDNhaN1P`vfL>fH=D|vCseqhc1wK{`A z$hj|2GC!#u@N-(?!9)r!=OD$GvyY~i^Nv=PGmai}jjl>J;FpugzjDk^17DNnVEE~w zayYVT@p2-p+)U`Tc|e~R!*^dUuY$Ll2kc}Ekm!8afCBjl^a#-)O%#9F?RH8>g;sb) zR&>P)Uocn+fd>|)#6qVeDk)03lBrBovXrUHbY&)x-V!jF+}J+BKRfEQjqvM0L4&Zq zL*TbZ0o$IcPcOy#7XTMn3vIa(h<^dJ&qJLuyuj^gU5@SrBLk9xtmIT!Tf*sC3$#BU z{D9-IxkW(xeZb`L1=df4#}i^>{PAWMa`p4T+}TzE*}sjruBPP+)=s-}T;B=*BMSaU zI#36~*;#DmT3e8nJ%YUKRhy|pWmO@mSgIyCIvqU}uRQ3huSg1gjv( zmj6gGR-A}j(NtUdmqYg5S))@Tk@$zm6_8w!FJxT?-!25$T?E*5MDNYB8FkCSqC0|2 zV-c8hS0T|Qk}pu=*0NqI!9;#1B6l*~mRusYTS{g1A$;~Sd8Hwv5lUpabY{W!Emm@s zRX_y`mE%C=t|}$UL&ZyNqIOhu#Ot zWYj|Jp_;u+DzA$D?+Evx!;s&}0vfdgwjrH)4H*7ha0S+YUqbj^-!VTkf57{xiwLnS zmz>C^fZsI(QQ|{Hx&&v6MFjW`zk%<7i1a7e$45e#xLW!OIp6kjFL@vAwXA#tAL5D< zr@pGbg?#8C^^AH^-3c%Aq;>$l5CqlvGe&=?3gBr-H+(CF5;AzAm7u0;B4j&!;inu)#0B<%-SCjYc?#w zdZ6h)!iTFRv=uZUR|$ekn2-2mpYVh52PCwGsEU1|nO{S+vIddLX+$YiC4Whf`XG-p z5y;hQsh-Tr5;Aj%h~H*Gwl>OJ;Es9g4G^Cx z&}flBbhCioL39=x67u z>dS}a@1VDD$UlMWc1HI#sG=%1cKHMF$46lL4Fra~mD`1J{FeJ2Bk6-&dTYKeGG^_C zv%)oum#^4C7UUpgyrYoKZVObXuc3n9mIqAg8?fZAn;upj_=7E=L;G2y!J&BD`Ur8` zCLpK#kaNcRD6T?n!#jF_sW+Pbn%=>D%e)A_Rv>g)1h_mC`MZLbSX+DnmNNw2eQkLH z)^hKH2l>Fpj$1mI=dtOPDDoNC@|hz;K)_c>Vd;I7#?e?Ho@kzEYJ=k zyL=t|kNSECSebtMU_B0a^Bc$+K16>9?f!^vfGp`ytgu$_q(~<8RiHKA-~@jn znXs@oWy-gz9s3+aoLYlmSN>J)IBqv^B|o+mdl250AE&`L{SdsS%Ruxi@)-t6A1a?J z{oyhFW^-GHgQ3_E%-%ML!+Iblu1ak|m3li;JTM+T@+yab(1 zNio3m-qW@M$NNJY4DPMd7+_=}hr0^v`y|$OXXK%sW>51~Fl^>xbytUd?QA*0LRbP! zeG8)b;}+$_uj`}V^S~ZFg>kt~-v!z>0TRJ+W4K=M>sVm~a$1AM81XQ$<;!Aw$p9Z{ zHFzf*kT*Vx%<&J3L#?7($P)I0Y>rT=(5iNBTcJK^z=6Kvzk|N$F7!ffEe!F=%fe702Ca_*?`|W!Jx%O^ad=al543xo zxLZt?-;~z@dHn{l)jio;c}8i8jBf_At(`Ojl6Vp9zPex@?bE*pJJ~Yc#hPzvrkPY! zRhvWj6=Y^5F!%Y0l78VHKzm^zQrvPD#$||mly8-@N|O3I{N#=5VX&G!5ZiK^0G`+y z<1BQ2Lz4wNIRX-}-24n44Pg^w(ck7p$MCKIJ_S!rz)Yx zQ~l{7^gBRZPS6{9RTzRSWOgZYW{q%I_#2t>ddMsWW6To789;%0O8ekJwo(ScM@&^- zg$6waO!yhKsT!#ERwH3&=c}KndFq!yQ|7vf)9TK zyrJ8rtay@Bf9zTMmontb{L3kbU6%o0+@{wBt7w|B6}hF`u$2wXc96~)<}%3U7T6wd zFgli6r!6YCs;#G*f(x&LbKM{Q+$7)|3xJtF0MoW3V(=(t1e3~4KqS5uxcLDf=O@8b zxW?QC!c-eP)V9bHidccY*^%r7)&*-ik6jAnwE!6371jb1dMemhlaK>m%&)*oya@LD zBk)speI+bN2!)$N@T%$z|st3SR@H>sRg$WULV|0=I{k10U}Ka?Dj3dzL(rTD1Nstwhbff2aW&%m{-1vagy#el_h1HQcn zX5l%#1-yC{+BOtiu1FyJ8Tt$`cXIU=@Z~px&2%2#z(eqAYZ^_#V@j~uI{$Cj_&t#W zT8bGvU>-%L?jmx7e*rIa+a1DjdDVJ{aB%Y7a~KLAEQ%hE87u@gkj=gW#>x`*D0IOi zwhAY5L*YS;0}eHdTZS>(2_ESo@DtC&Oa22^@Ncdf@PYc6qvgn|Ed)YbQ)~?T)CqoV z7qPq84>J=3=}xor<?ge?{U&(;>vBOqR0ZR0ruq>qe~2~=YjQHY zowLZ)je?%|6?;miz=GCCR&kZLKEgnvrUh zm^t9l`q;MTCgTBL>LWIn_XdjHNf6*8?iczXgEJ1;jXzjDdB_CtvL+8fCg7^vRoRDJ zc>_(*4r&C`n~t3)!w`3FGgn!ZzYjGL{c&I~jfuS)lRqM|gZ0}#3@z?cJ-XfUH@*&K%u=>20D^*>cVc$2w$it&~)4_vhB z;GoIiboH?|WB%%-#gE(#;Q4j< z_P|jR;4N?A--lG4!_0qzDC<}08Tn&mCoU+Dlur?NUjrAoAy|iV?1*QKIUY#%8|Ff+ z!gwngT$#((J=k#{Y98MEGhnLCp&L_}EcPw7H5U#3(jp-3ySesYoyLQ!QX*8tejXEC zlQj58Yk+-R22ZdBm_RF#UHV2kAw|feU|ClHakwb|Ek6f@p^uWF+)(R*nOvj|LUwPp zzDNH-{|cZ?tjbx#b*YmNlu5Q5OWF`Ro-x-L~NWArf%~^|prpX8HC<1Hzou3Fk zS!W>2A4svX4|HV=kc+d%IE*Nj;$!Q88rbR54_S_(^jYYF6y&LY6`KKtz9Eg2t12&| zcjJIQ6E^BhFwAzVY4AFpg%4|Ad+OIjq?0IT{CV&aF$!!zJgMItBnCNP$bMh)m(D#ypp8?2-Q zf%(to!gv=r0bhXOLRf#DknJqSJFS#yB?P){5i%H~wI=!y;3?}NuNbFX_qq+Bw=vz> z_t=);-f7!+38rw_-=b!E#ncLtC%-*g1zg@VMJC67wdr6o}>l zSl~-cP54v0U}1k_mvLWlm-vxHIZ)N?9NReT*>PikK3L~&G~uai{z9HjBKLM zVDD8wpwU0F;n)!}l>3Cs;@?2_{ZnL?+X@}PdbuKuLpG*BxdDBDPnnJ!-FBc64{Z*R zFTAH$;fd_h4}(ix4g6UX*}4tL(fw*>Svl4L?6p86#b^t>zb14bu#+@;0{A@B5$!F3 z^&|+M5BAmh0>|?MzHTrB!HK*Eo7xl}-w^gqAUZ3M5BL(O`8C+NRq!boa0K=MMY{mb z{W75=@@roq&yg<80q=1yw5=yltVrx<@IgK%8%WgO;7L3WZ}@fan7&80t}ga1bpWE? z6aLe8`ep3vtY!FtqtXvMMl!LBVWZ7*&c{B+0^llc^z$4rhD*lPO1x)+wGcd%u%DZN z|J)k>Z$}#&m9fjwiAW;&U-;0OU=nB9tmv6Gdg|szF9$n%E#m);@SfdhY61A9h2{LI zOVATHV5`ayofojTBF;($hid_LKIXf5==j$Mk7LMdVkci0Ac?<7H>JAZ5e%@A?hW$yz|n#bn@k3OU>_nc9T7>E`h|K{ z<*;WV9*o9Kz!RDx)Bify`7&g*5cqNz^HcL{^Ct4TA=byxZPzU5THoq6hfo2J_fvWg zcEw5Hj9y{-v8m8>Ut^C>KkWZ|gPRKt@GD~6XnrUEJ)bE|M&`Uae9Jh*n5WU_rr>yt z1O|Exh^Gpiz691#1O72i@r4(@3b;ojL_#InDD-EGenS5RI|Nd|nW}0&i@6L1-o3>9 z1bbVmV3&?=^#^AT%zyvtHcsG&{c9Z%zm0%3I1jGWi--@0B2Rvp`5syFo7i<$9}?Y) zeF1x%#sR5ZgfXVD1FSAL82CXJc45uM4z~?Jj1F-fu=jZ`_T+9x%y3#72rub4IDS3A z4H*V$KCGO;UdubcRQ*(cXc-y#(bs_yegOTt8{SPjtrK)TY5IVjNX9g<^*#6_mMTLij~+1RyGGaX^NTg*ag#)djXnZ z7Iy%4mT)l(fQb>$V-<3uCBQDpzN|yyPhf0M2RCw)^cUoyDY76#kw=~)zXg=7R4c^DDk9{b$PpEYN5$_EBi|SQ#y;l; z(uP?#T32oY?oUVXV0z21pzm+UZzFrN z1QNXy`+Axq${wd|hBn-*97GIq68Lt2&81EOitVMDT9B53sQOK9JJ?uc>4X;AjL|J%RSU47~4kL>lv~h1k`+ zj$nPE)u}|}Myk`T=nOE~lbHx`WwYRErxMB`QDi=8}k}1ds%2){Ry9nNWG1eKS_+Y<< zAF^ESfH}&LgJ5K~B7j@O1N+THJTe{mtOa)FAP?->eAt^pdw1tmSe+6(*7LRHy&XI= z8F_?YWD-cU7jI`0vPyZXxmd+{h@t6oLsy`r+z}99V zX35bPAf8wSbb1T;^9A4?pVEsk^TpU#Lm58USL0{+1F@#Tq<4bx5egQ46!zDoz~*Ej z-$x70%YVa zl64kU-Nw#?5bKjj|6|0tTfn%z1T@hb$jmW#hUdVvy$mL3F;l`svR|+vz`3gDC-k@K*V@{HF4ihCRnA)omZ2g4XN? zt?2?QJO>uPEpY3XL<#7#4_K2c^#d5k8ioK=bShY^dtjTJ0{xq3_D8npbJFju>Ncia zlYRkx-eY6PjhR5`vWrY>Shq#6Y3GsW7=V2#`Ql`0J>>TuqNB_3q=PYkONeiqQ{CQk zxfkzx5)3DTKlvh?PqPyE>CtRFas-*siPO=;1@KK)VaM$j_$DXeAwLKH_6BY^znSj@ zK1MFs7+%O=4*<%0TU;*nLKgTnc;oAVLEZww8Uc-6L#wL|fDg4E{-vKj5K-7M*qkcB za{M4EoeTrJu)>YOwwxr{yG03$JO`d!E>Pk17=yF$MXy6f9sn~4hCGbN?vtO)duBdz z1oj@%-0F7RGY$UMhsb|4!oHKv80CJ>vIw5Z2)eF`U>0KWSod9#_j2~TJ@4T8Ef01Ch%zpxNk*C*Tu@K-j0FL(kzK@B@bc@}aw(#}84 z#Xi@3;PEV@GCeW&Z^5=MhyOzMvF$=VI(+Z$$dkNm?ZhuNP;?DDMseUbL!9(`@RPS< zKh#NBSW2oQHO8-}ypCL&170pV=B#03F25iTT7#(z7Gf8~$VrGr$?l?s*d=_1Av;gr z1sZi8zxh!ev80L&a8|`aSu2^T~mYy9BlqS)x8N^jr;mGzE<-*NJ&cbM8mUc zHP55cs8S-D6Pl$NwU9!D5DhAoP%0ThB*_?MCPRq`O&ZMUf2~E>wtdci-}iU^`*+Ug zvk%WoYd!0EzTf-4?(4p;`w26Sfzxm!?nS9_n=z@C`)eHv-uW1KzU%OMbHkY{4t_ff z3}33&R(O=~IUU@Ly_ATKT+TNIa2x8IK}@;eKqO)8w*hX3zFr5a_Pd7Zh$SC^Lh!q& z#_3w%^_X|!N;yW!LqxcS9#4y zV`rj|M@PWb(2vr6fp5`w5i*#9jIRK_lOYra_UIt_F&x5)25aD@x?pe>vqdHws$w#Q z1=PlLemwyGnL@)FWbg~7ihsQ4n%rOn@Wr_9y9aTLe@N|)SYxK52A-zIh*q{j&J{P(%D(DAz;#}hm&5Zh> zw3!a|o&!`92_~C>7)b;VBj#(Ozrqfsi#>cWVc54h$Wms$z7O%f>44T_a) z=v1C-z130z3pqpkBkBMR^!wwXHE98+7KDF26jM=70SyjNsQdW}p)|h91pI^ky321AGRK(iZA;b-43(VFgNIPkW&n zh=)S?GMIy1dR=M&xP+M z4R@`;WIwV8CIo=v;$i4N?TJ2u8Ez7NsLI7PrbAI;jqmq$UQj%8N54iWe31qCj&C#_ zwWGi^ZU@s^0p`0{=K{PVhNv7vbcYb%>~VJ&;ED&Lk6#4UI~VeB4Eji4pgJ~!x7i80 zcX6o0Lxc$oMx6R3!C0vzB>blte2T-gMD_eb=)dk|yY;iEXDRfig@6#QwU z&J~@T@G(5aejP$=BW~Ks)OewX>ve;sibL&nJ7N!V<&^t zF96SU8IF{PP!04!3;acMH##b3QEA?xKE^8QL)FBE`+F96u~DOdsos}T{@WSa1Qn53up!fQ57q}%j2Z$p-aP#$b#m1GOmaXG*d^QeG$<&XQ;~C zFyY`6rW?qkqO?ZDibSvW5NgUs0}Eu7Xn1kj4Q;{bZGxw&1Z%XxNEbZQJglZQ#+%`? zKgQ5qyhVMk^C}NDMUcskmmx&;hxtlc_&u zIBdLd=Q^@J4E zqx$gVI>KFR3T65VtnB^B6-hc7@DcO@vuo&@<0@8RX38kK%)D^oNx+4t3MYUOBNEPr z$`CH6Rv!B3FOn!~W)rM{Y*Yp3G1Kb?kk|m6THF)`^qw^+j__?1qNC6O^{xOAjt>xV z6*y56R)sTThqYmrgE*>bRp|Qsq3K&o-HIMt8P53@WA?{8#BXk>8m=Mt(cQp8(0Eut zriXRr-ZVn|r=2AEs37aE%TxVK$ko;Zwz z;S8Yb!kvwlK;_g9##ajbqA8Gg1W;N5s=QWu-vCt|fojeVdv^okR26g}U2v=n(XW38 z4@0-XOz;wuFhk}lA%y!q3%&N`K!#5Ep20w$m*I{S)|Amq21|EU?>1CtU3$IXmqzti z^?CJ$p(cobK&2r2atb_Nioe{-80d?>Lbx5M7 zFx1_xdk`9b4zO_kddI*3X+R-U4s8X8!6bt~OdY8QcX$x1o0rj}H9@?5r}>zAL2IkF zq)s^2K%R~(`pZ{!hjbg@teA}7z6g$DGPvj^_-z}*t3YbHxMJ&|YpDg-{MpDI7?3_C z><+Xd@1fA2hi)*#Co90q(5h33Ow`~WSgW2u#I;bYvA`QIPt`#cJ{ukOvxrrjG12NI zH28FHI(`1nRVa;=p!f-dis~G`pC~j5d!V*q1~0Q4p0f_z`!9Oj;LFv~N$=2~gfrWS z9=JLpu&>c(csQS89Zth^r#$0Ia0_F`f^hq5GgzyQ40T$)$t9EP$kI=~a&}U@4D7HJ z)n^IOMDT!JOn{^40?u4c!wky!Q>e+M5K$TtZPma~B}2n;5RQvMsy*uT9GrbKqHG@~ zAL+4zg&|^D= z+C~(!iDm;)A4YYIy+QCY_|KEj_qSu-n>0f=T#2}MlVXCpeh~RQ4E21sR-kr+b`zX+ zSK++64IcRsylh>lq5t*N@dL?9V)v0uc^SCwI%0D%n1^!Q`NP2Jb>JTcFjb68 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�kL> zC%X|R21jglBL>E+6Pj)aF1Sfk9CpDaQZLvAmq&w$6KTjC9$K36@wZxK1$w^tdzZNI8+&gh>M1?!yF^i7eB5n(m+DPd#)zI9t49Xt2@Ja> zpInM-Zen{v;&F6SS>qJ0I`D#YECOof`L; zG=;{WY@^eSPpA|fp`Fx155-cSSrnttPh?T-P97)T*VmKI6{(jMMrRX*!KFKnk|)Fc z4j@U{JPP%?EYDM@^FvJJA(6_)a?5hDd{*27MO7d!075|xEVFx3^!6ox6lN@Sd=Vx% zmfh(_6E|YfK2Q-mB-o1F>{&OdWeRSbWoikGO+O?fqVrS3_GA%1SIXU*z4N>5KyC3>f?8rkPl?AA;=p3P>4P}r=Yj)~F0^eHf-sXS99ah&32kudIH zS#Qk@r4q@sjFHR7AH&PW;WDLvAiqpzd3=G)_P=*H>;Y+=2nPCZzH=LXRVI)bRRv;bNuaL+Ndlp^L8^a;b6SJpk0@kiydbF@QKq+@%g zYqV{FafHdXrP2x5pTtF=rp%`Y{qZ)wjQROVinLu^4KJ>1-~z-^-%VlX3m|7v4nBex{Kh!t9rQbg5U zh*ZR>fg)CJk4h=k6E9LZ?M^OeQ&SVyL;}{qdzwpujtjUe1JmZ^0kPfDF6|fzVpY%w@!+u3q;%{d0)%~Cj2s4%(O}3 zPh%rkB%X+43|Y#Lb{m{1J^17(<_AjT^Tp}uONf4Cg>{>D$1#*)Lr?T3%lWWrL#)22 zD+xZl%Z!}%_(iP17eo+I-J2{!#L9d}1Sx}hlVNf${U0c9uZ-1N-d-82x4_vq0(2DLCwt|8W6joiuD-gCa3kZ}qsIr$M zac^Iy3p1a5Fed^wUon|a!qIjD6V#Z}a2k-5-}6>rJrR7GYNH7nhiM>RAS5mfKZ~TR zz+56or#6~s(p6?35d;jf5|xOUiyWEHku&*dEibp-ubYOlZDHl>O!T&5qQUV9DZhl3 z7O`4Fb@56hoT`>^1d3TLWKa=H#Kg=*L6d#mne-BQUvNHu=hpgue9mG~Sl==o?+@!* z4)mn5IrMo|pT}TR&$Jz|r;9J&vzu|@e+nLmt-Z|i-y_TD_{tR;jXae^CM_B(cWXd_ zVLm$;EO$D-1m6@vy(qqBQstkR3#AU+p27X5l7q^~qH|DNKq(J=U9tRJu=N-*fJnl$E3D z3A-B(x@bF0-88x!I{m-0Mny-id|X(>pSBFL^@~8I@JV#qcF|!ghk`%z>#_tw6c(67 zI$&9p`?u++gG-ARp@e?vcVxqq&XX%-o{K9 z#_|8uD58Wj3lb%ykUYX*i8X>^qVV&|Q?kUuQiS0ZK6NWvYN1Pqz+F>`N>Ert38nC^ znna82F2SShf`sSOVx8Rf!&r~NLP*pkD(F5&O`@{?UzAiTT-%76L zn7{Y4E41${hV8pMz4)c)%5?uLyJryHW(oVr^rB|Iiom777fIyt*v>?EPalh%C?_%$ zu{dYbFP_9oZk(U&-^<9D^Y|=@@c0-prsI8fymaeg)Q_yNCX8keyB)Ae5zYQW^oHnT z1G<^?c}LMX5@~hE2jbl+>;j`BTIYk5(Ne?UkX@F5d^ybel5yyzY)&n7bA}L?ZWb*P zG1Ctj`Ix&r3E3C}Tgj;!D1U7EX1b`Sy1;XBIs?N|gYc$)r3+>I6G*b{c3$;F`tql{ z+s@T&2EtyK8uPw`bCw`l9TFS{wY?X6*ABJC3h-CgZuh zJ(S8X!UoygVBhcxHA0&GnI%bli9EN+XN^(SL+!<%hk?w1o$9eM#LUsnj%Al2EF3#b zOSleSKz^BCq3Y4RVy3Bku}`*W71^mK@S$R>wrgoLzu6`J{n$~N(lZ=N_X-N)!v zUs>E7Lo2Gsd~2SY3fn8`O(Rmdm%6ju5cZ^%&4>8|zK7axLnZ7YXPwTTdfF^eZS#w0 zy-hCdP7dT#8QE5MdS)l!n_QFJ7Cr*UXu^V}V?yEr9hG75RF|q$NV;Fum9m|+Tv;4Lv1xa_crP}(TG%Gc?uD}>M72Ak#kFTpzN{ES zxU!gHqj!58{bV$K?p+w{$R08?-=4Q9o3ODWYU3meXPZhdF3yZ+^F9vKNnbnL_S@O| zYS4Kgx3bf1Nu{TP1Owiq=70FUqwFE4(=)Cc6m-029Zbjb$-n+bC6yd<>R?}b!72?E zk?wyls9n$%1a!Y4SU9^>X7m!~g%v*u9SboRh6M3treT*eQtuqf!fvS+e)&YM|- zea;()h);lnYHqT>_#G#UFP0wbD%kO?fEdEd&?tQw`5{2Q`+_RQH>cW2D;Dp|Kw<6{ zMal{NS2Z*L%xnOcp%LJ*v{D}VrFJ6Om&5^QbkUOW1Up-dgVOx$pfd`Xg=k1=acHD; za!3{j)&^bjaSG)%m=5JOJ2~W>`Ex?h&|?s+#`+7*^|XlM~HRhJ)fTSe5jCn$=#Jv(IPMnv38WritV2B z^jXCkTCg_`p$+uKA+#Z$xIjHexr`s!ka#u%s5t~?AQFd=Z1{Loy5>Abu>v2G3pP~d z8v#@tLUX}*h>ZYq@>#nZ2cWolHB#s341~grsy@b!=rRr|aY)a{AZ#S%Wzd)Dtx$vv z1{ti5_+%&}6GI_-P?d})8(}QeMdM=a;xM#3oh$5rVWGa*bmJ&)g`~Ti=B9h? zcvmLtjtbcX6noW??Cr-Qg^knx$)$Ft$2Wx?Wg2&8VdUA7%m?hSXX}eR%`CPv*5g)E zakR;Mj^wA=Vc%GE{EE#!VWb^v+GA2Hy>_J|KxAs9vLhj?){d1G_gJ)zp@UrNmdfN( zk;u%JWiqRq*Yc!R^C?U2q5}>;nQ?fJU(g$Vq;^px>`!JE!x8qUHHct|8w;L7G*i8m zoxzS!>s0-_Xx1y2_$M<6>RjA4HMwh(OZ?MXMTpqt&$M<#CGkwOQko?_n3VJ1SB2Bi zIqWk@qTTGt;J_H4)8(yO85E)q*MYU;ut_IqV?JhsQ!4&2;Wyc64=O}DytEW^UT@?I9KB4O!yGQYaT>8XpUckymuAmFXj*`X=8i42%Ap)H> zcc#h8UJFyw2X^iXt6@rdbq9&5punM%_L9|C9q{Qz7Afe|nkQO0$HlO@GN58FZ10Wt z_s5+&Ig5Q}%r5$MHv4v1@vpnH4}#eXyD(B`CvqJod~%)rPWNxpy(%^q9SW;ftlBJ0 zrE!y73bfhYK{|eM$?4P!GmV9~Xs#Dq$9UCdN@X_@I4U08Vau3{Mw`*?&U(6Z;Zx9*u8(eb?e?wu)Ae||*w4;y ziU{H^&BBpdrp*qlf=z0pCd9WxI(`BEC&GHnG`?mv98&fX!BWCNFTz%0lxc>OD$)$` zJi)0(A@-!}_v@TBt({yGvbSCpOWq6K?gE5sJmG5x)Oc|HC_j}awvR z=_PDJiz6DF2>MksD%F=PuDkS7p6=+CJT||RXJk&yQ%^*Dfi0(vE37OkzyB)(*;B?ZGwD} z<>gqxWDeyXVmcXHo@xcwQ$ebg8BnBzlWCMfD&32|t|*R}ucX<57np@4p1+JsBFanG ziAF~)e7|Ug;}@PwI3?MjMqY@2Fzi^!G{t6M}i zHmYtB*+8wjMP#GK>K2hM3DZtubxX-NlvlZo{{z*U4_8X`SaB~y(G03a8N+A>t4c(9 zGgwt3%A3Ke5>Z}Xs!Bw8Ggwt3%A3Ke5>eg^R+Wg#X0WQHR5XLtCFB1*a?sS6@!pUT-8<~mALv%gZhX688=ZZY*iaXv9Q%| z3q#4|Vr&xppD_oCyj5)x5_zlND3;L+7XMe8jbdS|+8m07t!`VuR?EVs5c-v4wilA_ zx4^+0dj4!uEB#~^4bdNMZDh|aPFLSY?cY)&p`I$JoxK-6>Y|M%5^}p!(DVJ<7-^(( zRCuVZ^fu95lE<`Xx4E(uSULOj1ut|D|K4&!j$ z@?*}(O9_EOooWJ=23?B&I4+7|JD)vr`IDjBUm=V%W)c6=sKJ|oioRGbjyq5#x4J_| zbsTPhlUnPT8H!RZite!i@ey=nMIFbrlK__9;%$WjE)_JJcXC5 z65*=3LMXf(8=uPDoO&BYR7a=gAa!+ir`*?7lZ5gDt|kfPey^G&lzYEwl2GXbt4T8*Ol4AT;yJIMU4fV|y~@$-FX- zH1q!0Q8KTl@ML~4om-UZ37b!B5fk_BWPK@_Y#uQJnRNcJgl;I6NV3HRX8AJfRL0=N zgUMdH2D=HdP44$}aZ|dmoq;NVZyAFe1=fjU(C)r1poLeO# z-Zn$8s-{YylkF-7s_6vQOBW2-9WN>d>TbH11;1!I*-P(^tRxo-2GMh&U{F>r*ay^_ z$J%?wv+0wy_695t{6w-q#Q!k9Lgbr<~%%ly9WE|wa5G>n8>c$v3nJHU^dvj zZ%oB1@{l}u7<6ZFkCZEa*xgB@98mr@xe9qm%339X zx~x?c#SV^|X{l|gs2gGxXAq?{RbAGqgp0-IT!t?UYs+Ni6zUYbr7h8%nqFO2YMSC~ z%S%g5-w@-Yg^F`J5^PXr=n1gt^vdKBj4G1JV*u&Fes<+f1;-X>TfsJvjO<-NTuoIe zAL}Vsv3wpgt4jT`N$4upA3NAt#qzNgr7D(>ttVBneDI-c-%u5c=xr*hvJUf2tktYR zNiCtPGqP4Hu;*2{r&rm^sp!M6H}EU4s^pWja#batq?M~G`6R7eRmmr5<*G`)YOlYN zR<5e_CvWAdN<>*JS6u>DdnM+(CH$=jTius6bLz1&8*4{s=+qp_ZR)B|NJ)EFeL_ka zz3LNEQfaDBNJ;ZoeL_mw!0HoH(hydkkn+~B`s9=~iB%}&|3nq{HjZqE9&IP9XQmS- z>Df!j+wdwDlkUN3qMLt;B(0tfTcAR#PfRFus!X9(R^0=&TBWi=wRWeY+mdUKs?P<8 zYE>d>^%<>7(ke9sM_lQ(LDg#qQgN%-7^LD>xkaRtL;la$@7Xd3-?3k~7u$1_%-ggn z#-5!jZjl}1E|#=<4W(GpDz_2IO+wY{GbF-RuOUc;t#Vr^zDB5e4WU@l>a~JmNvqog z@OfL>APjFGBYM$=ZGI!b$=T{BWu;n=EZ$NDp$hxaMu3yECr!#qJ$Eb-%d=T(WSF@d zrf`bDEyRdBiNy{lasGgRx)g(8Ij0cav%ON$IE5-q$*XjGK9;WiiS}i>;(bM5X5~jJ zJRi^O&1BTyq*WaIP+b|s3fX&nMnNB_Kkw-o1$~It1P8vgK9zteIA7p%FI#I^Q0M9j zA0qWda!+UlMJk-flE>=n!}mFzQ!YVK#Hp&FD6ng$S!o>aNiTJTpi~%#pfviExg5Sa zjFTQ}Iovn_DYCs{RdDh3c6pqE zo~5o$M?5`EZ}|{~ETdKxm^&2}NUbh|Qu@L@=ALUU=w1p6_Y!l@edwNOxWJsv^LgHi z?i%$7bpHT_jEN_jbE&$AiPN7GT%7x{QHj`%>WY}|b?T{{-94DiCev6Xi{}>Gz1hs* zfQ@ULx|5i!>y1s$r1|^qWwF?v;<}YoZa9UA^*ETTj5M?a)ua)Mj}s4NvZeE1><}#P zq?BCV?#?0kJvKiqQxaRzHYj4Nngbr)b3=TMaFxaJLh?=pnhoKl+Q9mWx-5yFuzPs zk88XU9f)AsJho>5eYj~cjJ#)X2amjuAkXRSOj;n%C>kwS&a!z%kTY5_l`H8mxcX$J z#aCt z`QTq|?CeA3Wk9^yK$)+WfMJR<{ql60`QsLs??dJ3RJK; zA<&ztoV3)N@vpP_RaPB>NxWHg2v)U4De-32p)t8Ps}9*@-mFR_tJ)gC*NOd3qp~eg zfeuaGX_UG&@fEh}6;D#G)ucU%f2$_(BwntX#FP8FYLZaq@v2I`Dz6`2@8|9at&X87 zjL&mJ3ip6jDk4N}Z7dA&T`8-h?G039b%_X3r^*yrO;tKjoz*BP1Qz$9pc47Mdlh-P zu4pbz%0x9(b61Rt=F_B1)ZL?EHeyaqy-N!dq5R87*@SnZH`0fR=p?E$Ul_hD#O8vX zJ>F%f#=a?5R%&!owltYg{mV0@A`8isicA!fDpM*ley+AOQxWVzo-H+DNXFEJAz4!s zI+@Gm>Cw;PUFhO-P1$6e9!Rb9fVq^7O6$dS3aS)~5K=bk97-5Ds}Gb@F2in9DKl^O z49FvvSd?5sv&Oi1awU}|Le3bULZ*7*JCj-Ld+qCEj;y#;u|0y`DAU=LT!O8#F{~E} z_lLzowqBS`=8}0(@o#uB1@4Ji{rUI~UPpgCof^QhVm)74%+Vbp!(YEql85S!ZM9I6 zM^GAPQ1ne#&o)9dO|A61tF7#tuEig8^=uJDoT-Hmv=&D!+1uy&@+*t${gP{N^4^%i z>3d@a3V>|}y~D2AXc*jm2DFDsHy8|`n>b%3XA)`-!h)lT6qQ?`ND)k|ETN+F^N2N! zJtB0k99yAt%g)&&qTV19sIcKM49RRT%fc7;ob}Ss9YFylF??>GawugIs4}`&qb!l4 zatjnGMCoM<6`h|~tnzoZlv;zk2ZNgIFm|8}i(^Q319|3c<+X17ayRZj^LA-BGt{;h z%6pkAI(}dR4ZI|+P%~4crJ@T;D@2{t8WpLjDc$tg=GowmOH#2bMx{5#jTSOhw{MRP zbm<+%6$WK0wMbZrUZ9edI?objPFE1zO201bZ24BcWL-eKEi~nY90e-JIULxETP|34 zK*}OeDGrONfh=l0HN)nIL(O*WNofPij5)ZVl*6gjDTk;yH0>z# z{?sLdOvjPP=N2S-m+){B8R9pF6b(bYMURWmDj0_}Rs&js6~8pI+>PWX&E9qk2wBADRK~iInsaa=%tbU7Az2A#!h0K)C z)yE>(xzs@=u^Q}|xVkBy?CUGc7)35s|4IZ)NXjTsS+tm6gQ3 zn3*e;Xn2`R6)q}>)GB-Do5OVB+tH9OFD3s*jqsG1^%Nx$s#;lQR78Q9Q4z5zE4uHx zyp&{_iBP<RA=%w~`d| z@O0(*Z z8k$vgbT_NnWp+MeV*rQf`NS~Oos5j!kc<8u z&xeddU=C<&8Ok9f2PHfdD_nf%a4|Osx7Vc5R1ATTIWk?WY;`} z(MYd%@)HfkasQ`eR;2^ooT8Zy?!vJi$!5waq1}_o+SvOgXRy$oiR|Eiv4&Z~&d&!I z<452F9hLCGZ}v>itUH;_3a{X9CUu%~m08rsT1fLy5T)821T8MDWmUM*P1LdGkVMsl zp=tJIdW#c{n9~5t&{XODVMSSum}&rJSgNT+vM>)Bq2oyJ45YPasDw~e9Bw~@Ul>?Q zs20&B71sqiv?b#kzf2{sc{9u}MD2bKepeNZvblEe&N;*!=6PKRK2YI=m4Mo92u!zsmW9l&l%zH@X& zQzACKGn_}wCdCeLS+pEJJrM8X5$R#D1nn~LKL^u+lpFL=mY(_6@OZStm2mhPG{iG=VX@sHB^YeACawTgT2Wmv|yP6 z+PPZW9ksS|wYEFzYTGA~Z0FpVI@`HA+qpX1=Vba|n(acX?Odzv zT&wL|tLDt+QwrB9Al=`+_VdtzD@PlB3jmHx)H%AUAZ*(1|xJJ)JE z#-ny_Q9PSW*tpry&JEy80(6i{>{(sed}gQ{5Ba5bcV9A|wKGF$s$uqnxJMj6LAmr7 zw>Hv0kb`bi;%vTKyydlzz7pK=#EwyTnX>v;c#i>c;g7+z`<$Q!0#+_h_l*;YmB;SP ziSR<W+MNX%BT6^A=?jcDxJgy5hMTZY&RDXD`IF*+TXLpXP0uNjjypF(( zx#Qsv&>kLm1;GQaA9!%82OfFtpbxBa@CQ!Es|J4IHG@9zib0=Py;#T&04GvCJ#@OJ zKh@Wlf(6TdZE${uF!<(l_hQ83l?r)bnX>y9lckIwRmk&=qlxq1ZqrAT+C41tL_^^> za~7WGSWc9Z@X2-__f`>}FT&$QxI~2eh;W(+8$`IF2$vJ#moquP*G2e*2=5Z%O(MKh zglC9wi3s--;WQCW5aC!6t}VjlMEKnJ39~BHUku2Z%5)!Y)zHCy2k#5aER)yjp}eiSQv2zA3`m7B0`$BAg(?vx*zD5q`WAm;Xf(-YvrOMYvRi z^F%m7gxia7tO(Z?;VL4m72)R-Isdms_@W4(7U5$eyi0_)i12z5UM<3-M3@(0mk1Y% z@DNc?9RGV;O@FeVHtb}8G&eWkJ29As!K^8!u1FTYG~yR}FooV5c$#LTlaQZ|p;s#2 zhqdv^m`O=tjMI_qrYi&(*pV}9FtbN4rT_L2a*@S5Ki7aVmFcp3@L^CwX4Lf1t&LN0GV$d|Y=6h7k>o*R_jl26+}QN9Dx7vsO;0wNB;?wfel|fs$jvkd z-2=-AS#cCbkodd{A%CR5(XXVC?U0AMqBRUURYdp5ZLNBT50GJ2oKAp|Z9?MEUEkXV z#92_srd7xRh*MuA$9y5j@pxx1@F<#WKsk0{z)Oe6d`gE2O(&nIRKJFP>DUsz@+Hux z#s^Kypuw5!86Ta>FT!8#?5}(}j_>*sGEc*>d@3DY(U|kaUryWw;%_JR`U)B7*V%Zc zdT5^fQaV{8F|B!MQ9K_j$ueCTp41BMPtokjOP8YCni-nntT7SNg;K}QZCQvs4OY>Y z%r+9TNlj08UnYlgZ>;I*=^MnLoHW(+pd;2zc4Q%r#gWdM9#}GcI$5{zm|UD1*F^TN z>0vW#{z8)JO2RyHS}ZROJ$^vg?5{i!LAGdVNBKF!1;KrOVAk>!hH%}wU1 zk_0Cf=|s}p!luW3J3qa3_bk%fhKl0frdkk%yic0#j_yUt#9&`?9=;wGvnTU0pz~uk zMh7IRzMP*$2R}{EJpw)WM0TQff}T4(Lc)fAvT?Rr=#$KAyqnYb-NJLA>&{$dMaJ%p)SraycxV~eT)Rm8GnMPeX4N+FKw8pdAf{6gq&b%*u+J)B!Jidh5 z2Nzwm@=M6>x{XDxbcT>Wuo^+7TLsqNol6W3kR0{YeciMo!6(_&+X!!+6>sQR5aV9E zdw{<<6u%=MlQaDTn5=*r@V&AYat8mkee$gMfb-jdE{8;N0BeMt-Z1P`uD=VLxZ(*y zUarX|nX@OaNM%VJPyLJO z(}9#nKYhy3C&BqHoy~`UXl32zB;;F^4kIBOpkx>cIi2TbdTtIr^8(2eEd$WnQ6lGT ztlhD!zbn(1>TXY^7k3hJB7X-D-3D)jxhPCJvdT1R8Fz(fV9(-lI+St9Xh>BsjZw5# z*r*T*G}W23y(FGZvCVJN+U-=leP~@Nn`#$PgUTXg+m1`Bcq3hl*p2g}E4*+|Wn{sg zO&2sIOz8scmRd6|j7aq?!@P8|JifGglPz3&Xn7d)=ZX?!(>6rc?Ji7Uqq&AfV5$}M z5_K(&^(*J^O|)iIti`dC?38#pDqfS;On0J0q+okF$hZOx({*@C_H3%ji5m6@L`;dw z)`)bH+5S|TUcN)yMf`RQ*G5}ku7!Fxa;*C|ZN3OO&ixzJVnMub5WgMo{)TEGe!Jh| zMvop4wRpE3!dwn!{cXDNTcR)82fU6nJ1rh-21{B&A604VH;$&}w0`*P;$nP@F$$8yx0!4jczY^IUKhjd?~m7bT4cPDMOJ))>Bh6X#ETIgw%oIQnJZZi)P z>FjjqUa-@RXgaiarW6PXko^&>9z6jlEWxeDo|^L91OJJd(s(O=27xEgeO-!ED+Iu zgk8+1yPx`&q2=Us(o*7;jC@LadsqyhljvCaX3w3pvojWF#-)U`CE(uSJkpG+H+!(Z zE1BKBXF)2P$JF$kY^EC~oXNr@i~Eg5HD)^Gy^=If&xwe%noUN3fOq^Rdp}povRy>Z zgoyJ}Mh?Oaa&=ys;c;80Os2=EuOiLuncfDu8uo0N$;ZNb^Kk-s&>10+hv9_=*wPg5 zlML0Qa(p)ZB<`P}HAssd5pBuo*f@t6eCGX39>deq=_E_=HaCE}P8vsv-I?U~thco& zOUMs3bZ#4?bi_)eda;Ok44#(qN79Gqcpt9KCx>&+zMfSlnbomi^4$7{y6qDfSd)Da zXEGLt@ZqYSRJXl|53?{@$M1-MW|6Kq=q7C->C?V6{=mS(?g82{feR;}Yj(Up*UQ&q z$!j`h?o)Z{+sW&NXFEwQ;L>0@p=+?W7q@gR%48Ok^ZBpy(>&#bJ8UB7@i+6FRzjE= zIfVZ{IX;lb^uU~Ka!D#Pn1iKIiy`Zw?$9+vNYRtA6M1Y1LxY;kV&&KF$KWZGh`Fz0 zF>2Yg4*i_+LPv?-L)WdA$|Ay*jf$@r4u`42*Bv{troQcSQJ_|T1a zbFh8`e&j!-6=V0p-%lH}2K(}X=h<^xDw|^+$SF(Fr#zbdHXCZ<@i*3CmaVDWV%ofRP;;ZvCemMNgqA$| z;$4GSC1upRIloIfql6qvSh~D#N*2(#?U=8alFepdu~!f}yydArAY`5v&n9?hcRkXQ zO|ldRQn{Ad9n;CCTI=8dI>YE32#&W|)JL^tvRK^f?Mv?7bpU(@dfiAz_!7rHR`dLZ z83i^fSiR)8>FDP-(O;*)swYGJBI--@w~l4FMy`JzdJ8Q%Di?hskFhswctYD&=<@($ zdahMiGwd*jrjiWcH`gJyVS$g^D0^3D?lG9mE}MhRva~l3|2rAYJ+*;VJn{)@2)LGp z!l4~>E?ax5D;v))n~bhzj?A1gclMO_#s*%Cof*9UZ-jMy)?u0_tIK(w=_9qZYziBe z$86cX)tLH;6C1W`sHcQR(>=`P$>ZMb`&%Q$?+ND7y#F0G(fb#kTj<}V>Cj(`<*htFRHZbn z!LuoULK-f8WxI2>A>^<7j(M`@X|8bkd$Byn?a%FCjtJKl;j2&k?PGhKka9lKO6M*x zgk;;UC{OyIEI#cl(^+OVP^QBP4~Z;3_75eO7BQE^n@@)zcHxdDW%}-Zy|BZ=3i%y+ z%r)V-F1@5FaO)V8!}&)dx4Vxx(iTaFkqCqM^}xMGl}^s5WD~ozJRN<6?SJ$dhAh3F zLF&={1uctb&%wp9f|>Mvn}-o5Y4XY5Om>+=;a8xH-p$W23M7PIEM#L}pnePX7RIHJ z$3S^F!%&$D+~oDy(U+sH=+XuA!=6-rnmq!;zf2X4#sWH5+NLH|*?h2&3UFFLni zevZ0Eil3|hG8oGBM?W;yi^&@Lodw|~;FxUe563D7nv6jI>8rTG{MlvnvIIgbsE~x3 zKbBIN{6fnkEbfMS&+-mdKM#MzybV6#J~dhQ~4{dAOZYG#DD|%Q~4`4paA|OVnA~K z{0cUwKNe{1g{s7!qVNlGZc08_2Usk6TYMRWoob;|qA_W`=aJ|JWOh4}id2~%Jrv2- zCt-$8rIzGxzL>PndHeFxc$ha^=8c4uCGp^M9FCrZnUu=-jPpoT7==8H|43Ar0RG(L z+nr%Dd1^DERVa8g$bN9C-mL;=AQjsY3|jKN1ch zfInCHRA2FglutoDQTTd_N5R)AAGceei09UyLd1ymr_vr@Kt5TEU%{8VSPlaCiyl)s z#oB`rEf?OXftFNym9QrJT` zPN|5aEC&uI2b1*E@C7#;!%~hf1-!y657uaCUq3i1um65>nt6pjx!)*B&{da$PBdU$ zv<0MU!kLGBYUH&C&g^&=wf^u+tR#ss#SvDRlS6 zbGewfpkA0viE#^&aqmr(s#K^70rq2aL*X^R9hE~YRmG^#uu9C#l~S&MM-_o(=_^@> zp`2eNqZ$UkV#lZQTWYUR%E8GA59Rp@_5a0el?5QA=%SCvA$_yLp;$_mu#GvXq?cHOpdQ_8mFRn>a*N_vFSTP zKO>suhBI<1UBsA*@>1DfRPP#Wf5G~4`%4juGn&?lYHLaDadZ|bULkAjDaamSIpdpp zn&S0MO$|Nqx_CU^GZF1!L*0(`6UNn#3$Ujg+i0U6aFk@Bq^8K^g5EoD9qsPepF#Kj z(%sxM<=gEFnN;v;NoUf_`my&bDl<8s(os)w&I*$7Cpn);?OTNE{nOc#BwzFG7CI=N z6wf8qr6i$4w>-xuVBPU+W%dMyfgMtO|0CrPTzUeErhF~vgQdh$e`R(25Ejl=5kPsV?qRT5d%j9&%E6U>z zpq0@@Y=0v(Uq79{bQCVjU)1@hVjr?6u8!m#duRNQ7(r7y)^RzcXHmFkn~Ie|{9HU@IX- zU0hN8PJh^COYicll7fK4nS4aJBihERr{@MDCY(BOm1vXj0dC`9r{EEie!zxOa zh@5}<%eIcha(;aL%<>;~;z%%*^K;}Y)}CBnPCph)(SvMo=h3l@KV~uL86jVfN*b>{ z(~UW~7zWWe{pX)Am&MPOvXz#v|Ed+P2pK=;yEcVg8S?y#UG%=4N(z1$Ky)vm+w@we zh3ChAXRlgLd%D=O$~7w85wDPkZb9&Env%uq!SyBBxL9KLNz1OXkvUn_lua?X8k850d z@u?}Vxd`v{{|6(jfw8OL{wiQ$cMS_K!ShM`*N_(xelLEf;kG~HacH;{pm8onc(?eS zhM$UO8t%F(kFyBjaRB8{!&}8O4XxF9oYfIF0W?lK!anhQIl}wIGY!8K&ota{bs-PJ zcJWNZgT*rquN2QuApBH3({RihoR)^u#d99v8RD6S_laj3ek`81T$7M#0F{%5OT{w{ zFBQ*^A^cE0({TN@czha85zhk%e<_}6c(-__;rrtGTZC(`&1q>kO+3>uE1vTR&k)aF zBHU~pLZ08RhBP6(7hX@Z_4`E@_^o;ODU;xiF+F#p0UG}fgs0Jyw!Jmv41`U);yy||)9`Cx0-o2$$=kgET1JZyehm!Z_iqvY zrkV4(4&f&Njq@qOb8&L^Y{WSq;rvO6zo>>RM7a87+?R!C8a@HMi)R|n`hVn|30zLw z{{MING^ivpgpfHDPXjWCB!mz`ju1jfLdcN}C*uhr^V9q^XU?2s${eRd<`8mBAxGx_ zdp-Mcj(hJp_uk+C^}nzC`n~>MuaEcVS=L^A?X|vZ*n2<4RX)}eE@I4^@W`f1M#J8HcP9H;gE@JFqWggHo*BY01nUIZ)mm(vB?A<;+e zVSqMWaI@CO!;?tl$%QYpz64qikjoMD)Ox`%tryJFdci`i7c}>hj}>&$dci=g7gTAz zV4l_snhj!3qpi$gJEW;Uv>nX+Lb?;2kEBVAN7%`mbKqTI;~|VyybbJ!#Ias51{IJV z50?$4UnUz!%i$g5fiHxP!&sB>PVmfd`U!syt{=g?I)yO~J$#AtK-NBZ8j14H!D}OF z3({{ww^591kq1sdV*CccjiZUrsf-c0(NCU#Hp7i$v>rC%H-;`Jj}7!iqJIS|jH69R zH-}qLDP9Hp`ZKo&v0lJ36owa!8qb`97aTN!a`4{JWg=_UG};PQ4xny$D;R*A>j%3l~kH4e=2$8;SZ07HhrWia^#F@w4C_pj*9B|X9f>-)Lw?Dn#`AwXNGc@GC3s4ko(o@SeF?M< zmh%XT-y>r)ojD(#m`*$3b774c)D>?9r_3adXE3f|0aD=wYll#0yfr+7Y-SPz@cb;s z7(NgFIGZ}-BjF1q#&`*=97_HWt`Vw`nD=(UYe>Y&O;~NNTu)2*6LKd1ak$`n+7`bM z79mllVC8voe!*5qw2w3N*QN`mqa2RS5@|@BS5OL*y)|^#dci=g7mU_=!5pm@EY^BK z^Z9Z)g88U~a|tdAr=GKj2RLj2^~d|b<4COag6$SEc1Ujz@1leFBDi-E;|`w-3l~#w zykP$y#uJf=T#Ehr3s5YC7c@nj%{K$BH+epBd;M4R}-Whj_D%i$g*t}z?F zLZPI8gwMOa3(YSnEH+Y0>mA>A~<264#gm zcW;m+#ayl(mLQQXczYvz3DOH;h0V;lcyqWNh2eKWpDpwgJ`mnQqCSOi@K)lGbZ;1g zM49n$!#3uB(r-d*6@BzQdoVaShCK}48?Hj4FQVYASgx1!g>b9zq^salB-%}|a-5uB z&;yBdA9w(XJ>EIkEME3X*c*vFo^XoRhrtF3a{XOlK8ohNf~^we`a46nB*rJ{?r;$j zlXCk+!c(W@V{_q?T-iT`-A>Er za)+uj>{S-9E}WI5xO1FuA@O`(l4f3DkF|)g07EXy`2{QI$>$ZkgG65x!}XUK3yaxX z!p)btAH&DPIzKaa{J=T|ha%C}KJWE7& zb{YE<*!@?o3-1nxKB1lQK5#7(b4WD2^_04iUI=5KQ3rfHeEx#A#h1XW5;+D0e|yaw zM|v5&UMjB_W$@w~{BrIc-qKEGvfuoUdGQ0WLAu}zzz|%;xM#E7SI-2q22Ty3db7dWA2omS=fhJXSq-^SA z3I|rxk<2O68#cC-&)Xi_R3|^_f_61@Bo*ErZb6#9gSBhQ`EB8xTC@XsLg98K^6Y{p zwdFjfa2i_9d4pk-Iy%z9UWSq_e1J6b6&!D^Bl*&9u61>!&h_MUSJ=6}>_cEC(#+fN zJrd_qHqen4p=^$gfR!5RND=tTFbN%OVJKz8X^nJvPHHFx!{2L#Qpy80##3jf2z*Ww~JU$AZZbRSW&q1AbTqEaIz&7paYkYe+wFB3M z4~EGdb$Cu{D5b%>orrJJi(vK6#1H9Kup<&}?Izk_W8qN(|tw;nZ&QQ8msB-Q0*DygS^`T}M(^rA^>ucj6Nt2nY0_O@3xBg||`R zWdo@Y4(h2R8IkS{JM|*{3w48MkU#z$?Cqf=MdCf-NtBJxg_*tS$H$Bj*tU<3R2knM z9zw489N4Naa}M4a*6^hL)y%hWJxaqz!|(f1{}b%B;762moNI?O`!i^fMERafZa&GnKV04ofU)6L;`$dY4& z;ZMkRHFG0uG?aKyab0jJTDXBS;d2zcj{WK|9jQO^i)a0Ud(f^eti`Z`5A`J8%wbnl zTAkQ~F(?}!4?m!?dWOhr(M@UuMP%4HszoVV;R&W+7sAVXH!c$1Z zRW5WJL0ef74=@MiH8j-F#8=K^3YQ{3(w9TUNZP6{u?_noQI03PfJ{k0H=1+$$?1YV zS}(Xv>zBhbT7M22kI|kB_SAY0I7{n8VY1ez!E0Jy1ii+}^QYiMBFG z*~H~F_A0P?sE!nPov{Fy%*8VXm&5AwIM;2`VSX6LN`@MC4kulQ_<`>iPzPON2994u znRq1}37{t0UVd>GAq{*<*6 z4&2CG^o(%|Pi!K#pA)OF3+4xyu$6LNa^C@~s3_+Z&;Q|~7|MCgngZX%QcfxR zC^#mbvBRhB^&L)2p-q$NYj`tNM~Y7&HlRy7<1UqX z55{LOccrnHgGO1zeLByGV8C|b4KH|O2Qiw(vCwrFYsq%jN|?5rF^(6!ghbrt!_d9V zlRJqScrTlIeh2q-u;+f}iVXG@aK{1WmQ2=bSmO{eNEW?pEh^xcw|KWw3^vx0W^RVr0VlRh2f(C`e z?NRy#2Hs`OB3-cH9u+Avj-Z7Tg9}0%PC*IiGSbfluMt`Bs>xm8cK~Gn*NnoD< z*BI$aPFuM@g@elJN~NoqXJ8FuUCC9&ID)r@XYDS8u_n4wd#*hmjy2VlY{l9Qo0iv= zLb-NZ_!(JJj%21QT}D1!Z$3<{fTvB=aGJTUWX1X(3_DfSl{T|pyFimloQpNu6e=uq zr3S3gf*(;dYp!5vWnIaWwN}fXTm{E$sb4k;rA`MuFdR=;IA&a(!#a$9cb_#&P!ixh8KtHN?G(p9@O*Im7M7d1yqmWSk5JwG*MT|kHy2J zsk&0pCOoVXtSbeR-x3~}A^UuoJd<;UF`vNsA+ncd=}IG!nCtxD8Lju6O?~HZENv*b zX0EQ3O&dnR;CXo3P%sOX(1wCfk!yX{8fX)yE8V0G1&1S1zAs#>_0iB^p{^89JQ%@W zexOX^p#UZnIBkWT9t_WF{W<8kQcib*!;$8^u+NXQ8!_n# z>qW}G0j#u2_Lbp7tuKZ_t93Q=NidwaMsBMB=o%%LFZfvNpThfVv;K=o| z4}~#E)F&RE)%tu`H=4MmUmCz*trtA5^@7hg5P$4xOQ6Lj;$aQ158%k)tP4M59+p(~lEBkZKQ5+z%E@W67K~k?ADde;R9g!9*$uwEQC|`%I6A%p4qY& zRPK|#pv!(;DUJMsgAXvb;Jx9LgS0I^5T+d_)|r0wQfM+hy zM|Ie5!?struA1Cq!XCGEr835a2ORQ{>nD#7%tD%H6j1R<_JZD8FX-`DSMsAA!9GtI zBb4I_`#mmTxJgR`7C?E4@i{%5vF~S^9%Y&dYXC)j?vYVBE|d^V5MqMUvZK18Cwis95sdQ$vd=2B=_Sx?Hx8$lI{FJ#{cb*hpd zuYet^=}Com=nEK#L^*=*k%t*;6O6B}Cxzk#JJisV+{+tEE^uE>((wmjwOV>om?>)n zj762pn3teO9X-hvFBpnM`GQrf^(6DR%nxu?UGm_g;EQ^c{~PlX>{VY+il%)$V3O9W zp(dEy)QhV^#@_KhH@TDI8Ez=;R6)Hy>>Bt(}X(X%V59edQur}?gi5wXfMv2 z1x*~~a!lbkt@nq=wEj4(<0R*?hS{k29x(vNx6+fW?lXr#{no@)1@4bvt~33J7aZ9} zPx5}pS_vDp)039t1$!a!Y}o^j*ZKe$-=2C>rr@Ivd^YD=V6#qoQowuWZJ3F|*qdcR zM;Bs`=SWU)FEYYs!+S_Pr!9g}o#`8%y$HH?;WK#zCv>HrtRn$%y({UgchT@zH`(8W zjopYFj^YG9?0VlZy_b+7s4j)ay)oL-yXEf0|N~g^yJzr8A=Ob zQZGHJ{YS0^cJUxq*{{07E2xBf`2skhH^<`x;0h$#EfW5O#B<=|@Kzt%Y8U5)AN$fK zdCUXQvLDy@6LAPVg~%@$q4k2twO&x_FXs_#tM%>S46P4=JG6cme5&<=jRwfa+Q3m- z?+0VGJ{}foy`YtsoL_K|)_cQsS|1JbwO+94K>Cquw}sCJGl#IIl)yDZXmj?NQSd1e zc?5qPrYGgGuZx7Ie2CA7tdCIf9c^yG{t&v1;PWTu2RI&y{YC)n>r1;7(N@rLBr#CY zP;!FRM(Ih;A81cle>C~&(+04GAL;a|61E#dJJP4^VUMwTl2jT(@XpidUnJ(P5V&9K55i8tv;%Xp3p}Ouxv;@> zd0YrC)Ox{XGpIi?yd1{Ql)YfT5IxD7YxjaWv-G5Mm1%#t9Yt}CyP)rE;)6VbrgIqY zw25Fga{9u!h9g2r=h}Ut;aojw7uRb9Gf@=Rm<7)xF-G!Wx$osZHHB^FalMb|7dS19 zey0w>Fm*olAqLW*ML2VWn!O^NgM1mwp>Xm7j@`}L0Y@!l{=CGT1_v!-zCFhN2UcH9 zO!9ug3KnX;`Ulo8q-paAVgU&+XuE{9famst21|)syb-*N#2!8$Hd`jIgSOBkl6WSM zpyMjm;HJbRbVs60!I?;f*30Lr4DTY%+70!i<#LSRn2mZ;7IpK7LpG7Vg1Cj_H`8wT0N81Z zoZkhm*v4E(eruJU;C%7H?HaC=x z!vVXAe>>K0I1`ETL*Q>HkMhglj6JMJmaq*H@!uW}M4EPht5E^@qu>E;`aw7> zPcAb6zDE-8Qa?hAOY*UmVKc3_h0~Fy4)8V-u~!J4FU#qI!;mZG_`vUxs81M-)%tjN z4~g$@6v28w%f118gv6X&3~-LEo_P)~Olg2b_c7mz4351uceU&)gP&tIc|g@?nh%jE~a%}5+8cv|bv zLC;(A{#LNT9l8GQa19de76mUOQO|t%TI)-pvQVyr;20#z_lI%XbeFq&(h($%&4F+4 z5hv8G3=Y08$Cx)%6|t_6E|`x@mAvugx=fRu?OSE3F{zEyBEj)ulIQATL zeT49WnMkx%7W@T?dKSP+#jFwJsSLkIB2O6Hfkd5m!Lvx@KL<;Z*h>gDek`Zkz;#IE zkB0BH-t<@YjZfM4P`)=@{hYSNZ-!S&WM2UHzNDQ=&w*=Rv&R#8;E$zpdNdsQ8}+nj zPYC#fJ%!}Kc_ZKhJ7y_W2BHm$?p%hlv7BX$)ke57%QYS(hFdDQ-ySnbaNPlMEeKBgIX`B zC@-fAj@5d9ILAyOedO3s_+tfyl;=o0!2agcpX>F4RV#8{uGbP?N0#k*KM1#0qTH6$ z2ad8(NM*ExA8b^aYor})pivctRKhh179&5rU~W}~WX^d7)zuWzLatY^TVwu>^4;Ns zR$K$+7sDiH+JyF0!*OjDl0<%g*q}St~Tz2SZ&;_V<*gll6AHbr7A+rmx@ zXcy|>0(BQEq?>pJJc(SXPcB@#NFjw$pXD%Mu|kUAyn-G-5TDdd@XlKLl>CKo+j`o9 zbQKKS#`Q851na736Ve;N7HaZzr)}YBr1@?YG)tEI-5mDRdJot+g?^!YR~VJ5kh1ZD zcai8*Wtu{oi-eDax3sZS zcE}-Cd(r+d8;P}5@Fo&{BzWj2>Q9~=c=#A&bt!8N?0j5qH&^%?6^k^9ojQrm4 zJQ8IVK$~3oT9h#5tX#J=So55m#|n-;FW1K(UPYQ?;YTFuBY5wkLh_;fBKROru1_&E zx+LcjtbUnv@>sz+Kg;zAg|Cn((==bfzCzCL1s`5v9wUD-98f@e;=SO=8*;iI?0l1P zN4hHNy0JM6-I1%a45s7s+04~w` z&dnBABQ3e(#wR&@S%jPJf~PNO%iL zUmA;Y=Nm{%;VqOMZXoIC=u2Kmy?`>|P86`vKso{|>FP_$MFvuBI2D!R=fb1t<6;91 zKjBS(Fp$dW=}QgJLA(;KM@CBwq(kr_YR|Y3tfr8?U?)^Sy5Jd<$9HrM^f@OIb@qg_ zwSK9f*5|{|T5o2cFF7NT-y4Q&{c3nn>jfWby`Z_FoL{i5)(iS+eIaaRq%T?X-K3!~ z3rSblf5N8a^rb?49~h5vuJRlY);89cR0Rf77Z{Dgt}(a6N+y(Z(?Dtkmm}#G`#@-5 zN;&wZFbw6~=AI6|N50o-^YZ#qFmky;|H9|O=hHrB`chq#$9n|9V6Bga&ryz!p;W1Y zzT}Tod{1dPyobW{3?&0|eaQ#;Dwy-(7389CD7}ZC6{)8I&!FHLlw)KlJ%_H9D5o5I z26z~S85>IXptA+#m~j6BcOc2oP`UzbD|20VPnamYWGEem*HECTp@z0qWbX+RQ3T&v zIs>h%QtzkSr@)QK{h5Ju7*?*PFWK;&C1*)d8AyrnBl3UE zy>NAXX$EpHHIO#K5@f^okt)~FmnNXx5(8-^EJEs+JiDu@FMWs9zZyt0;40+&n}LQ! zTK^IDx6+rQQVgUCFbDbZ{iOofyq3P?lx85g!OcjK&K@2b*VdQv@%3N`isySrk?4GD*eipol7Vb2V9>ETEiGxf7X&_8Ru2}}s zF<8BxzH~g$qaC1^4gE?z1K>|6E89T24wX%ay?s1agj8}oQ+EG zt6?$9IcUHSZRtyckn)IuG#MU8QVwf3bg*R{;XA_lXczA$1g~oS3)sz0Us4@4kcPvZ zDDsejbQacaPW&G>klMf>QQ=+#DGC0Dym-$g=-7hTzzc?>K;G#H9zkLF)=JtRiMeZl zy}q;p6|OSS@Hk$n;u#(MAp8ac4ILb~_L_#0;CK{Y-%vvpzCG`PjhytQ`l#TZfrc}* zekHt%qIgI74tli27xLT~&O>1p3^ly0^}oUnttivXP#Or;$ho|slml-d_jd*wHg7F^ zH@E>Qc>lOv(3y7TJ);ergNpAPNNeCj6lHEGeTMzoFdy+AZ9F`Pb`>$l!p3cBTi$VW zf~%1Y?>P3ra_y++L*_jgjBI&tvK-z)r5_EXC$M9C>cg|~o^T6_yksCH!;i@S7;{1g zeQ6qUe`FvngSSyB<@^SFbfg}i45X287YcpAeK)Mri8}B;r8QiNN~q6mXz#*W!aIT< za5Fksndf`Zurp)xvw>6x1|f-e1mD9;$enitx1h2MamzabU$_{F7`OoMp?ID}7qp{a?dEZ4+V1Hx2l`Iv=@mo1#fA+pq`tY-U|k6 zz2FwD7d)x;f-kh*u)Dt06BTpsP}QAyL85#?f2|ix)_TF?S}*um>jm|C$j6#PrPfQm zSfi2H^91+N=lkufqrL`wzn%3CiS+->AMt%#ewJU7!v3~=zE4Pk@=wysaeM8~zxlct zOAC2S`1gMn>N$}#NE#rG;O}lye_Ri#uhfUnJ^0%VFa8`-yx=E{#92)FyL|tz?4MD8i1k0fP0ZZf$?Nwp~J z>$zPiVVdUH@#Os@7e7Dy4`pU(O0}j{rc;v0E6#6C?Z#88I7<-q5`VlUt8dORh+ILO zu*Y#MrsgenWm}X4F2}x%o05*>fTqIQ$&EM``3ODpXA>BXV>tZREIJ=DPszy zPUlL4zq$Iq>a#&y;WToK^I2;ma5_he-Vi`Qd`8Q{d|L{*|XF)J}U zF()xMF)y(ou`sbXu_Uo9QA#pOGEcHhvQDx|QYJYkxg@zKc_w)$`6l@%1tx_gg(XEK zMJ7cjsgl%5SxMPRIZ3%mc}WFHg-OLpB}rvTlG;dZuC`QLt8LUuwX@nq?XLDz`>O-h zMrr10mTA^$HfhQ<=QNiz_cYHm?=;^u|FpogkhHM0h_uMG=rmQDIxQN;gV3Pq$3BPPa){raPy*q`RkkrhBLRru(M{riY}5rAMSkrbnl%($(o%>DlQy z>AC57=>_S9>BZ?K>1F9shEaxjhGm9zhE0Yt!#Tqx!#%?@!#l$_!#^W1BP1g%BO)U* zBRWHsq0Y$4$j->g$j!*hD99+xD9$L!D9eyCjWW$MEi&B5t)&h(V41Db!Jv(c4kgyZf0I)L1tlQab`(oSti}#%bt&RmsCb7bCspa zT4keBs+?6WDtDEq%3I~D@>d0_LR4X@2vwviTBTB{RavTRRgNlGm8U9D6{?C=C8{!& z6k`-)9`mo-+FR|bY40#~ggR0ktyZbk>MV7(I!B$W&Qlkt3)RKy5_OqcN;XP1Pqs|9 zPPR!_COap)B)cbjCWj?QB&(9u$yv$S$vMfn$$7~I$%VqU5yH3j(>lm9DWsGx- zON@JrXN-4@Z;XFTU`$9%SWHArWK497Dn=cX6_Xv46O$X07gG>Z7*iZm5>pl<#Tvz$ z$6Cf($J)dyW1VANV%=jsW4&X2WBp?TV?$!YVk2TBW20kLvFg~Y*zDMx*xcB>*n-%? z*y7ld*s@qD&M3}2&N9wA&L&P7=N#t}=N{)7=N;!8=N}gs7ZMj17ZDd37agaHQ^#e+ zWyj^j<;La36~qj942+t2-k#gb^Ce=*(th7BDKyGK?6HHjG7g#-TrBFoN-? zX6)rM?uz9xm&N@NA!o#Rvtg{cGtT@OV-bumHDfE6aaGKiGK#Sz%AAQXZ=x%N$ciSa zvWchyqNyy#h&Zw#hTMrCe_|(sxKR@`xx`B`v0_A=*bpN`$iJAA{?%Obw{wb=!~H39 zhP!5l2-M6De~eP^WZz`}GeSRJ&c}@r0-Sqeir?oLj>dz1BFDvKbsAF|8m~X zP0J%j3jbpEm-4uGVh&ON*GIk>uVS?R>pAuR-`;Zh-?vs5a^EWMZT_FE)&GC5Vdk1u z%to`0xoB20Z_Qd3m=K~_&mt3|HEUW{LiT@rU32+=vXAxF?yW-9VgFaVtN-mY0pp@X zpSx4Gw12Y~lXq5<#Je@I=BDzOXE`YZFpji)F;DhgYW7*??4z>SC0Vl@ie&#&67NDZ zQFJ6^k&N&N{!q^*I zv;S4G%XMLQo6Gr>tZFW4p4?TGq+4^Jki)$|o;XKfIqo8PMxrujU#e!$>CClxvnRA+ zkEde)7MPI5_4smUWz9WPR#GHoyR%jYrsSlUvu0Z-y!E+A>1u8xkqiL#u5els&Y-5NZi@-Q%NW}u_c z32&{dqfm8JwpUjBCZ&S1oSu%PQpDEdP7Obo8mhOihjS1}Y3J zbO#Qww@_9z;DeEc@!*lu{P~aNf~QQjH&>d8L_-V1{$u29yuw{+OunCW$kL^?H!bD zlui!z_709tL;2`P!q<<=`8)q3H7l<)5j8WhQ1tHW+26jgvZ4I3_T;YP1O3MYS-TGC zX5DQ-pSE3&-Tpbow$&)#z&5_4 z%s!m7be@v6`ie{Wu*C8q%UVrbytGj@%P(0^dhb8b#Nwfk`^rGKR*gP8wM=!o`}TT) z&#xQi+VAaMXYiBID{IS-HLY#tP_3iwFJUnkp1h4-rF-+}h)>R8Wo_mS_dChYz78;ZO(ogDh+fSW)p2Q$m8zI{pG5!oA2IKnfun!I^faxV>|PY z^|`35-8w(Ie|~cPZaXr3I``tQm)vB+sR8|eET;HkeT7S1d<7X}(W_;M$EbCayofVW`;`lm> z-pXFe9;)uDZi~D62L}hXZP8+MP(brZUn8^m=qZz01Wp_;Qd{t!S<9XzeY@7*Zk zQWKU$WplD9y$y^QmHPUIIywpuWlyF1*Uw7b#qG5xm^pLipPgV#&_5|TSZN{Z+fZSu zH2zwop3%4A!hj@P_?;@}vgSN!arn`o-500bNa=s6YMYb0&cDC_(Fee>k#mCj+MMsA_arfoMn(mCbqsg$Vr)+K&z?wO0dewiO-QhA;T^tk%xM7goiuYB+UYYEahJ%%Y3Zs3n2P z**!g%KW|abFG2mV_r$ffRlY19Uo(*dI^hHpTv1zIFbG_`$dO06`Rm?PAme+3EEgs!Rxs$r}T|3WbEvxo<(R=m{iy0AFwk1P+lAqkY+GKiB%|(qjy)Luc z+PPIT6PFK%+wI@yGks0f{=LpPo@kx*`pNg|H=V2a7>%h_w{?l_{(2_n+s(JkthZ=k zXy1J`BeUMbeO^{-y0MSy&1vJh_fqcbwCet;MfimIdT)|j-i#W&qsS`bOiyJTe`TLVyP1Z{K+xw20dgANE*kJC ztM2pIXk14*NSw2dqOX!EP{kCuxZD3|0wk7+WahmQN@qJqdpifEy;3s;4*fbmF$MNf zG6{bD%oN!1-6@CsM0p{M*4-Frvvu4vF$duK}D}d z%JSvEbpKV)@Ileo;kI+O)JisgZdv(I7ZYlv^%}MHWoS<2 zdG6Hqx4u2FQ(Q)*i@o!7o9`6KZj&CqnLW$pP@VI|-G0fqH@xGU>8Bo!9qoJW zmyHX5SkXZF_Jvd4=vv#mjO%IE>quL(7kk#WO>!=3xY{T&Vl3M>{e#SR@$!6UJkqgI z4b5)N{_h$~IYP5RGcLEf(ULW^!VBf~kfyvB4`_Vys{BO>)|7vTs zBWQ?Eb*0~tS{r?>t-EZPF(9C0%_~#RoqhT1#Lw%init+_8@!;#-WDo{r(bUW)TK}T zUxK6?Ee9JfIg?@CqqM|7t#_{#35RC&n!2gG;q^}q?`)YKaWQ3@>%6P;Z@fPAs#W}H zpKdoZ(>oN}_^+>#ln^v+(93F3MW0$m1*xvg7*Ts>w*`xwtL9A`rccPMNZ2vH#r5hY zpH~Mrxi_PQ*R9IRA!V0WjQVu;^awY5&wY(8id>WzgPNGz)H~I>PY0Dlhsg6W&IXHo z`V0!UX{ztAx7XFaqaR(i8}+hVhev5f(r<1tTQ3b;-e^Ga?3A9b+%C3m@4R)_OrL~m zTUVT|_~W4VN7KrU(EIu84E7x}*idB!F*8``=zLM=EA_xPv)7-_Bw|-wtAawojl*JP zC4+L>`x3rQudgYX?eFhtx?;!n>5_e)pBpV*dpFv*o!Wj%V*7&ycFO9%XR55LFs*IO z+q~(#CG9G8{+qeXEG^vEWl-bw4;os0YR^^Or8af2d8zd5zpM zpGW)N#yRTc>^eOUT)I1`I4@+KrO)Y>RY%-f zQ>({HyTj>Du2#>@tJIK&-)cFm?uF=6<(@AxTi$n)nMI!tp-tR32VHs{aOUXKz_`Jy z2hWXKp{nVwH}vhrxN*k839X*lwWyZ+FsOB<(ka{9j|+d-f5!^Ps$*)KExl!a+pl!W z1-Ja4t394|T(Rrt54LyeEZv%B{K2BJOM20}yUFw14jB4&ALHxNC#%cTKF@Z}m{nlx zRBn=0n0=jlW?r`*#C&+r-8|hd`ip1P=AlRQ>(0KnwsYh0$JYF~_VkK^O?5NM`)n?W z%~Vq?rz^=+YGW&3Co-G`e!EgEHK}koo(?*ZI4uzxbX8zlZj}F@GytE1i@~ z;4K}MVl(PsuleYx6d(V4xBLHU_TCl~u>H;r_ti~9CpNEs_t3rjCpPq}@0ot#mSvv? z6`o&8y5x}_thBE9#PAodwN-jV)$Fo5BicvV=(;qqc+R1xOAIT#HB&^FEIC)_tYd>8 zw!A7GXJz|w&ZCH0zdq^{7jv}!fHN!Jce_|F@4L*rtS*Y!cZmUO#$C0!={6v1aoz(P zx8{x07WW<4-?T{2_QQn8Naf@oUJp@jdH?;D^*f8}uK&L5vc+qoy#pro-_$}u z8e6e(ld1Tlj2X$Y-66wLFa$N#;toXM1ngcRO(0&TCs{ z?U2s)GtX_h({90Yn9*r@$IG^Iv48o^7`^l|JYB~CSPaoRA%p_e>Qvn>5cH; z%--g|Pr}UJ%;%DFezcfd>nr9*D(9~VtNdrvZ_McUk^k}SMY#E_^r|sERSD@H)4WR! zEt-${Uo-3fTet4CwfXv`$9(i$TitrRD}CmT3$yz5*4f@Xc$n@T5b+?wz;bIa-zynV zzGkO--B(X4V*WxAC(AKbY!tM|CvZC$>E&8i!=wTg0VahFQp)yUmi zuWnw~$ITueD0M$)n_u7%=FzCBdxH@}e;xE9@%Dx-XWC9VG{14MLB;1Y>K@q?ezdXI zp6wGlEQy&ha@XV-i^L---AgJ>`Lxs_V8`b>{c@MrKRx!)mRdhl^3&~LmpSCe?4r64 zc4wU#y(`2^KfiNx&$Otlgpkyos&&(ATwDEv#q@eD9MndWRl}AyJfeEB@J!t+Pipr) zz43XE!nZnOrYtd;n>#-D;pAVF)?cu1^2O}LFrR|nHDe0ix7gaL`M|0ZPg}%&vJbae zuMD?Y!?Ru`!|lKKTta^O`}dDc{&@JTnjbH=Yubm@<@D@Lzj^em;Q8(!kETuR&6MB% zYZb8>{Cc3mp3UI67am4OjT<}cFn@4sRJ~fgN36;J#CGeCB24XDDVq2|?%NfVr>Tl?9ci6s+adM?S0QH_?C8(py8nv{GCz-_b8> z_Q=PB)~tPV?xdbyUeb$(H61HG==J4_TSw<5gQmS}urq!4>Fx0@ro;9f?UcLlaNCtP z2M;(J)^LkscKsgZ+du5J=uBdxP4!;ac^7>py_(sD(#-eCv5K+HQ?K1Q5V53IJ@aKo z`*$_(?Rs!x4Ud=k%lg$#nO=BoPr}VH8ISse4o!VDs`u+X>Zc*yG?H8QOCk?w&l2f8O<3GB} z1uLK4ZS#_owzM+dz2Mx9`g*nIb{cTpa`N2OIb*gt>9*+lA>Je=ypfYKT(`j=ePCc8 zuFFF+-HMv1TlrsG<^TMR!#6QETxt17t@Z3pe*a*oL&W_aQ~LH5G_M1c%9hGjPHmK} zhW98_#LD?R@1{ z6_pFxuj}<|WNqw}{B*|H%=M%6E%T;B=As!jyZ`i)TY^LD0{v;Prp?(AH>6cZwVlbZH9O;Wr0EM8Orbm zMt=-Lg^qoA{W4{E{nFptTD+aA|A3^s#EyLh(S*K>-F3$3DRdcbN}oRt<_(p26!e#G zs5B2NzByK5ZF~7Ui-O;-_dhuBM8zw+I|a9mHt(8MyuG{5m%cY1FCDo_6<&TdTW52& z&Sl>`>a8*JK=4k(OI5Qqd*~Y9_Nob0`u;!iIMqhkh&>W-tm^#noaFBx^;+|M%wF?| zguS$blYMI^dnbF%^Ijg8eEs;pK3>AFKx7; z%GBghjSX8T@Xm5nfJxjZgYwlX8$2vbKeu+BvGvf{b$1H~E87nrwdut0C8l{!cdiw@ zZ~3BP{bf1tp7bnjbG^k>^CuN|+P01hEM8o#duP_1AlvZ zuFdI@V`7>-KU}eO&ApSm3_N|V<)!{R^#V6XJ8f;!D!E$q5hh2z?ziW$-<~5soMsqUp{K57Qb98uCAQ_S?$Ip_zkoE9Iz` z4rA;_JMq}psil*j-Kf#_W9%FqMz+dWBr zX1ea$zkd1kr|+hw1Wwbu|0247e=;k=d4%}OPTAT{>8yEXGV*H!@XTbOasXGReHq3x zldlh#|M~=9-+%p+Qv|b>`1)u{moL_T^FErd54W&pAVb0>gTeX#a%sq8>?GsLTT8_UIv#YMVJn|G~eo3>5hsgB3pQE zTH$Nhpzi!hPG?tdS()Nu(Iw5gQ{ivsV{(R_2~%HR`C{?V_3>{i_FBAX%Ba+(%~gGE z%2#@K;{2-addA0FogRJl*4st1y*~~6;py0;(H~bl_nsZQ^-`@lOM0xV{h{Nr9ZR1d zALpJhefy^i0f{?Rg_Q?KObK;=>At-0>e{IR4g5^^Z_kK$JbXoqPA2_yeI}%(RrkpE zm_1@&&E0)kW=!0Eq+qB`y8D?b1G1OxvR(e`@py}(_0{_|dTCwf`}kw`GfvG}@@{m@ z9<_l_ms@3iGhZ0kC)9adam3kpRTcj&mM?AQ%(ln~a9~y8rsaq+u?H8ohX9S*?xL$J4j2Jw5z$yuM#p_SFNkch@~>RDaI=9h;Z8 z_xWIQZ@|5ykM~y?;i(KaoXsQgQC}aYm__pcE%8V1?}9}+KjJ^K7VyYhUJIK1u@?OG zGxI-I1$!R7I6Ej?wvivaw9OyTH(6?_{9WW@x=sPzL>z6OD%aHWNy_w zyY|m}%`>ttXzWRA5r#{L==5tlT!g z=v21v^7E4Nv;2PeKFYU2K<3sSn;-jsclpky0XvLsk7Zs6>mqB)W6Ow$dku>(?)p{>OI@?$ki9G`vt2{G6&*bmG`le9QG+{2+%}we z@sriy8w*xE?cGC}l)CcH(_z~(KiL^%=lzmmbRlOGX`1fB6 zFnk%eJh|ru*YAtn2&Ll)2M5h!_ubdUjm56N(o@;z>t`0bF8|&Of`3weuyX!3QF&{{ z{PoKDQOfzNet$66T#s#{veVbo>FQK<{AZ^Vi?`pD(bM?$%J@kmgJz8moYvewc#_iP z_X2d4PPHAZYkl+cVht^8@k8`lg$n`M>vXzE;(= zQ`3pwJx13lH-7Ta=ygR4N^^dE?bht}$98##TE3XvFyldH<7audUYliZuvs77+pL4h zE2AY>>Kt>hyjOC?`FKt|Q+qSLs z_~;!&miSMelC(GYn2WwaqE1trj^UjwdXF{9+1dNe-5=*!O{p@sThfdNE=|Y89UI<% z)Z$~cMz>nO_|Em$Wv{BnY;1h@e8T#?=fg*LzCX-x^A8;jW*S^F*gm~Z<-;RK?k>4` zvZmtjozADsY@Xj9)8gs+-(q~$6-ZZN+zt(Sy*{B_FL(0|VRiDPCMULUO6b&WX6=?I zFUQ7in?1YUd-t_=&Jlw|DxWJ{LdyXiUVW z!BYqIaqpJX<@BZ*!;Hh+Cw`i>?dYLNlO~+*Kh2{2Y|r!d;Z=T7hF7_yd6uyDzrAqD zj}-pomhhW9P1XEkd~MPA>l3N!3VWV<>-^t8-D>gs-EldEeLaPBk3+wV+V`n;z~G@r zqw-o-`o7%d^#QM%Zz=tG=G3*;M|alyk3H$S_I<_=iz?JMH53aeyXX;HgvEp9DtG)&!pP1G=ti4W=*jkfx@=>C%bQ{9z^L$&_#VeCSd z$i9S-<;-Ztz6>Hs$d;^=?0eZtVTQyc6v>ttvPZIH8J84gPbngVYbpGaEz8L7P)Xgb z=ehSj_ul``dCzm+InSB*oX_(8d}mm?xDGaU*?VUI8Vw;j_`@c8K@Jt8sOWB7n3 z+2W0x_V2y%b&cqUSqh{SM>SL;ZlB%F4C0G4?2BO~CkX)ij{}t82LzLn%%@>0Gco1= zc%)Sm0S99~GBPp}vM3qk4@O$ku=H)9N#g}(^31*va%zm&CLt&N4nO`qgdF&sWRU@b zc`#`t0UC_d`)e73ckJ)I> z9@7eghw^x%9j;hojEXyA4`03iFw3$N&Fn7H$gvz2Ts?>;YTn<=E$F~>ii00lq;oPt z|3tCnnjf#yjHypS4Ngs0)u59hg+kdOXu-Y?8m|%f?upKt`)E>gan9^nF&fxR?-7bC z<>6F_34g9TZxY)S$E7r?vgco&tjQ#~&qp2W-$o?VHECE{v8Ira>j~(7v1i7>J2m{f zbo9Bcyaf&xGp8PKPLs1i+VS`WH{;*Sq5L=j|O)B~qB<_A=ZjgqiZPL(u7(Xq3ZgEQYY=~(LS!;Kfpuvzu}=9zcBGbJd|=Q+<FN{KNqwfO zZ{D{j+Q&q$JD&*ZZ#YDIMR-_liv5t6?Tr9_w+AU1c*T{V^YP9x{#kBMhfoV6+FGReQsA25kct z5^++TkNAts$_ig;C|=k1>P~;!U_9b9V0yoE0H|AQ9n)Q*xXRaBU_KaC*VYK>fDLfavuj=ddk&tf)=&5&a&0 z{@GXhMnemjvVqHNGJ(y8mi+*7Yxlp2{(lHm6Dp%6G}f>blStIs^(i)vVw2&eS&8}G zjO{V4+19rvD=HimgvUCY*xQ0=`W_YRDZ|HjL`Xa`rwyKi8Bf^ub(BgB*0}Xo^pCF? zj$FETd{4~U0DT!=p&D^!Kx^K7(u<$W(IhobmL#})so=e-h$N3gq#F)QeLn zkE~STI_O{#WMv+b8b8Dl_au#*>h+REj)EFL7~$hX6uyu@Ng=>sxn2-T*WsoAbTM~| zJK0lH>%KVpPKRY07ySN&(PKLqL?)`Z-Rlcbae{Y>ZCjZ@DgztZ4?oEizCdo^t9J>f zWaUWqji>*sxb-LV+#u5cJ6SgJ+@H_|boF6>6}tS!+~3>zf0UEi^!Q1@zrajoxGOd` zUAX_Qk4H=$VPB44Sh-Vy41d>4s_+%f5N*Ow@2VZoyR)OnDn8yzjI_bTTglOdo=M6b zy~|~Vow|DJsJ3$8oZGPKa=e0{D=|Y%Ij6N?E^hiVV`xhrx0x~Tg;h6trA2N=hxGZY z#vz5#zN|F+tTo|td4xr0nTyGGVa3K&2Wcsn%o5w_BeO0fND7WpDU!#j%4K=dsqjux zSE7+k9v=zo(mPX7p|b?r#lA3u(ud`W-rd>kCHt153$D>C2juP&mORgtF<|cfaK{bl zygH$n`CWZiDD*qPh z{awSwFFX5=7#VJM_Nf7I83}cyrmO@^Lsk~H4-oxC*#*9(?0kkEKBsK$_;k^yy}`af zbyp8tm+goHCJac)AMTl?m4%<>bYeNLUpj5q zyCRu`pOe09mwVM+n%(V{wjjAoxUY-z0Rs_k|3;uno-Sb8>PVddcHpsnNRP3lP$l5m zbr_PfCvw0LI^~}-Hph-YnL|)@L7qukJ4T#($g3!YF}fLu-t}?v=B2w{Hq7kS)Ide; zc&y|L`n>u_EVbjOoAbr4-=<)9iik63xg91K$5+6Hye=CV;!odBCX-?#{!h@a zQ-wPzQ9Qpb&8Q@ZbDrlAW6XewzYkYzpvCH$}E6S-uulbFZQ3+fuG#1U!gVI-7PE$9N^fpJHVtC-8Y5?@V#9nt6wm)-y;+m z5%Q`llCfoS>J|jTn3_b8Dt#%%QlwQ1V1~C%K)M5lc?w`U08A@@DJEn2wPzO$kOG+C z%)o!+%>vVB-MK@$rL`YcCZDekMlWX>lR8)+x37EutqTZshpqEdZ!3_Zbp{7w}8q$V+^evRL)!J2=*G`>rlCqqkFrz4J6G`!lg zeV4)WbTOZ(4F8`5%a+oo@7+H7()w`J?nP(!7Z;};Jl~L8MfQh@-9U6dp=}kOd?9A5 z-p9~R%*T0(k6DK0SGqqC>Y=bjhlrHJ_|K`aJ2n-))uzSK9wEyFsBpjd& q*6G4ePDze-a&)Jt6;AGkyjH5(dj^hsdyzlCY2;_~#48sdkpBasBKVL1 literal 0 HcmV?d00001 diff --git a/Externals/msvcrt/x64/msvcr120.dll b/Externals/msvcrt/x64/msvcr120.dll new file mode 100644 index 0000000000000000000000000000000000000000..d711c922325816c0c6f845b37545f4b3c1f0243c GIT binary patch literal 963232 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 z zE)n}x4ske)np)OI&jkC#x_$ob5)69}-OUs?%^#9?kD54I*lo#HCz)@z@oOypVi2Fl zhYG@N1L4xG_MOs%+EMXp;^WezUmO&UWa1Q&JZ@BE+6d7bO;s$ZN%*RQe%tPwb;~FKj*Pbj85eBY3SJ zSA3jCr%b=MWioqroVYjf&QB6u*9rgHmMLzXN4Rngp%{Y$GQGQj*`7?{;*q#+e8oO^ zmMnzAh1|*E=a8xwGsQJPOhPKk@|uQW>J%2}B(K<5)%dZ@YKl~loaf+Ckd4MtNjfBY z!-%UxOpZIn?wZwMLC^@`F5g*CKl&^E-`Dg49FLANQW>e(YVCWMTKIZR|z_?vUquIMEpP+Zo&yWf0Q(9{o zQH}zf;57<2m5(SM2*fH8m%Mh_H$8c&D^AYZn0LPGd0I}+lfeO&>IY_0BaWPkQ{P0# z$>jNFbYIbQX&j4BQKt51pM}0*XUIz?6NM#sSiq0ml$bE z!H0*CNY5ll7=LBaPo4>-Egx=Y|gm8@G4{RCEr?yC*$3 zqF#;Qg<~bB!IX=WnMCV7UdrpyJ@6pipk`jyTC{R0*OR+zo28cSTJrV6h$L^E{d9r<63{mT z@7YCy@oQ*#vNfZ=`8hAe&}{D8ovX1~*VsdWCJ6atW>S;2Yi`4HlV2hr{W+QlB1DJwpQDq11QXnj6v*u8uIIX!19*rnETsLe`A30eFF=9QE{x z$cOk=4p?&v8}9@53xproyE;Eco15*0(r@{=fAMB{2}Ihyttk1OM>G_%6z0&eiV476 z;egKFCuE)@=+3iwq4Kf6AVs=Vq%G{PGe%?WadEJY5@FQ1x zy?t>77pb|G5*I@JV_L7pFlJbiJ-VJsCU_I4!T!wfQaFl3{AAu5>L}e94#M$PP7=IP zbs0okv}BEur$?Q3>XNs9`q6qKLKQSx&ps&)@n>Z^$tx7~{f1+l1MZgHkr^v25M4YP zI;?#ka@M5t=FUJ5il;i@tRbR1Dr_mWOX+|iSkICH%zPYmg(DlM@a|7(7w;EV9%I5#0PEFx;Okg7lxJ23OUV{Erlupzmx7 zfqH-ZC@V0h2v2176X~unT|1-$le6ZYjes^AhZ&v-WW$A6g4X+;n2luPUi==F)9G87 z)0b6Ypcu#e6?^Ced3WLt07qGY+12rrbJ-c$m$KOzXSYe<64=^SZ<;O;eCV!GQWu|t zvZ>1+v@f9Y#Pv@jIX67c;q}M9h2aj8rK`ajPkl>-n|F7^h;_pXRqulDp)Qb&;zFjeJeO?#ZHUW7>+2ga$v(Ny?x9Ahz!J*~T{hZWSxBA4sI$?)Sy%Jd-oG{G5? z;itHxE8z~vL8h@y+%$xlX9665F#ILW_IV}b>#QxQ8f>(8$DwH`^#XO?_z+!+nU?k+ za@xO1HSAKC^$?Jl^PP!qHP}>GDuLZ(#trYG3;gUblMQdtEsk>=Hkef})7u{786ch) zKJ9fn8ckkin^heYC0*xwn{nE9{!Ly6V7J+w6*B*bP!3@DT+qPpBz~C( zDrC{%%Qj58#qW8slSnKQ|3<5$v|niW9Kv(3vAry3ymyr{D%1>nL!#W(PloaYiBu_V zIsekOgTe0=Fc-d*ME{S@$R?0Z$UI^BGQR`^r3ot9vA?aDWKs>V-xfwD`_hA1uTgaH zDzS&}GCh)Bbw-zUT2DmK=|XsaRMx-bl?Gz4XW>bXag^hHz&++U_wZW0sc@{DFVYq^ zgxaTK7h2OC8|iC5j}BM!GF}l$eBoPAP?L;3RmlklC;E}>2lb4l{{s&n^i>}B=Q?ow zVI3H(7c8uKhdFeYxRLGi-69X3-3vdP1|#@SV%NgNlHQucTF`mhXjgKtixuNT!2BkC3P`iSAe0R=Z zsOo#pBuK&Fx{&W)Sm7);thpM8;;U8Z^Z-6uVzee!HHl(P4YC$@`hlMPivo=WbvVL4 zr5h3`Tgg9&)+DO#7OG8RG9;FekOKCJg~ZG$uKJKqpRLd3BPhOE?tjI-W1OE8sIziC zUYJ>)yfGr~$?)?ZGRZk_=*5~#XH$rz?kd8nB2#S6VjoFayGT-QotUvsI}kr9HL=nj zd5O%b#2N7|(M&3_ct0OXZwFg?$4lPK#xNbAEtMMo#9y9H(eB=p-&}5`CJ=W3#j7xY z7S=@A7dKiGs%=7}Dtvbs;b6y2<_ntl(7Y<#&ZA86fg7DI?ewVdR;Ofnt1M>~8icm)to%g6R>D zT$l+z>O#jP%v8?^#SsAXVpi3jxxK|oJt4TMCS0n7z+66S0c`TPrr_nx^Gho(Z?(QMQ4*cFCsSV@FBa!xMBt07wXDY$fBCsmt~>p>v+nwJ zT2|^-OwTULi@S-~dp!BY zd_wjS?rgvc7oKiF8%i%F$e7ljS>E5~V>e+RJVV-ntU~O~6`M7~yUi|N=;(8^^`Q>b zMB@;8@v@Z~PuC9G6Hk zzVZe@5{h6N22bga21$1dTb&-PCSp%x`Bf)5COSi9uFm+e4GKA__`NgH)TOLS`}uJ~ z9lMyicn7R_k$ndX{2q`1L~z1xRHBUSoyF6v4wN}beWwFpSt=%w|F}+6zPO41oX+%dw)GiB9S;a*6(YZUANi;;efiiQq_$K+P)>P(dkq}zFI?q zi;0ynx3bf3i)vppc*fmP8Sz+4^;?ukve@I@rAm})J@!rWC?68nT+2gdnZ!`TU( z%Q$wBeOP^*e$@(g#m;16m=ChN$aEYRB~ep~j3}w%D@TjH(rWumhCwh5GR?de-)28xn0)G zL_idu93mzh&ne3wXKxD$kpSvW0GTY2$jV6$ePgf7Wm=%{m6Kt{&%ycZARBK)EFM!g z<>Ql4H2)GtQT1ZripJY9GsfDjIxl`=%6$%ewvk-+AUJ}MJ)1-)4ZbHXBt{PD6e1Yu z1g~gZa6)>k>my^u`xp$&_v|tAZ=S7INlKV0MIo`t5H?l2!D4A4=|+lNbI~u%^XA3l zR2TI=}#%?j2vF94Bym}b`4h#opNi{vuiXn+P!;pC;9<>yJf$V|yTBYTA3{_|c? zg90(IV~RJ@y&9-vcEkbab|{1FLLsp!or08nBWqQQNXFIdMFR7j4r*Ww4#&=z;LS%} zm)nG6wYaNqvDAq|YtOONU0Z;Vy=j6B=dK-cy-HtCD6*e%E=ugj^~EN8gbW&y`%gl% zGsREL_}7)*I-t^T=PJD}SLu{&rO%JgRjQ`@)89B!?g1=~)-wJLe#Z=1pf;b6JG!|vIfy4{sc1d~G?9r@B zF0VFEo|Gp8&N;V_6DanbbM~Ew)*e>wH;0zX?zuUgn?70h%Lejt@aWhrsg~SHs6Gbm z{JTf2?)UA=#e(@eNUR82(UDk%CTkDJr3lm|c>ll}ATJc;VYyq`kRk#HYKn9P8u@}B zRJ|y5bnY5tKmLnBbQu-#Z>T0pk_3)f``J!WmkU$k_&@gZHn>CEx9i2jnTKXtX3Je4 zf2wtd*>ME402tgJ`xXrI(NOzb@G&=(*okV1Ca}l;Dm5@G41rB}WK?yCh&us;m=Qy; zCv_XiA{m5*I@+#yok2V&gIKKxkwzGjvi7@{45GE@$V15XZ+=-(RYyb}z%#`ZE7X_K zgDv>B2ye|e%s)i0FwWa{&LaR&P*?C&NQ?E>B(*wobqJlA&PFrPG^~e*hb*4g|7*%2b0h<)^Mv}F=uqJnN zkEvG(u-5M2nQa#x-`__6TnZD~w8FFV9|geWfcoe{cguX`>EV{Vw=IOd{2iBU4zZcY z3+(ZyVw(32d-8wFluRkor?JG~*}r>e9(*|Gon!B%eAQY#u4+Qk>$J~s#)I$R zwK&S1Dc*4WXpn?Vg_9&>H zgTJTZzwV`xRg}>=MhE79pt16{w3m~%KH6n3eTP~SGiJ+ja(pPAclHTr_%%Db!`_6NEGO*y`zX4O z!QOO;6bm9AuuCujIcFznP*xn^J74=RSo?r+<3Z3CK({$3N1i`%y6dHqi}#dwcp z2g9_VO@EO+WAc1Ymn4*EV(j@+WgG!y4SbCeypu`XnmADrG|0C7L(%*vzfV#{7vS%iQi`aW^>&ZbkQb- z9^0&uksoHAan{cU;ZiZ7#Qyp>cne$|qm$Vfoiu5qlP)W3bRzaA+TcW2wofmX9$q%F z(NE49ob0&*BB2dV-r-8sHg4S?D^&HD8m`S-_s0(;>lww$Y6uNKArU&0D=p_ID%2br zhy3~Fxgmed)scp5rS9IsutYym{K0btd3MW6Ntlsbx!)POSP%gSH$PTtnU^2LT*uIA zHuhH!`}O;W%ba56&W{A^<)cb|{*Vu8w2}{0bFB?>-pm1ElC0C@vJfw#GnUEwetV;H ze~Q%;Ux``Ap2JbcjkdBpj7%=vkoA4)#u{B$@Ecku&2_wbV`UVNFr{%*;mktvQj zH;z*Oo6e12zqv|olF#pFnTS$xqkZ;8*k#ofp-7goZ?sS0erB?+Z|9 z;rIjg23oe!{_Gp5iPv}T<{YJUsQnDDU}16Pbl$$o+vKu8(l7g4aZL2<{Pr>Y0{$MS z%Uk$yTzb$*%f^@T{EkS<$UT|j>Pxlmy)sjL`=lc!$FS_bpQFj-^S^M&q-DSTJY>>7 z>n_RG=9>R4uuDj8s_@(Uunzs{lN!C_o`~v7V;j(6tk`Zagg?JPgUMw(q(>ZVw11cJ zW{QU%vCU@tHmA+{Y@5yYEz%|cm+xgL*zwIOE0=$=1KN)%w^)i!zC@4byiD=`Hhy_L zPDnKSM5p@q9+DwtpZRFv9(3B0PDTh|zbC#G>x#s-msB5lyd#zI!%CP}; zod!2k!~{B8?}gXq>Wp(G8?A9jO&ykUVrD-_%6dz2&h|U!qS}7Uxqwmb59~cgC?tWv z{Q}U67dZH##sme`L_hY(;H_hQa<|YCZ5fN^+_ULJhxN(jF@28vfvnH}J}0Z7kM()} zjXu`r`?_TOZ<)fc?;)<6ULSA}leiJM-O}ZeOBjY)`QbkViqY~CZDQ5hO!0#aP#WZh z0_28Er5A+MMr0@~qKtk1`3yNR$|awszbf^eB6}tA&XY^>@}7l==OMf_+O?~laSoR9 zslxXtpDF&?L~3sDfP0Rw>Gs%Chi+c-3nGm)i6GZ3?28tb`}j>X|0VXt7YM9#va-pY z`i{_Ti@0fo6v82RON7L-r277mvF}zhI%5@XI-Q1E?%24+-Y}B7d<3pqh|$c*%Fhzoxz`l{lZbnaF}) z{@h63BOT50@^HVQr?dQ*$QW7vtJfZJA)`ro{_=q{@ojzF;%c7gjB{T_{HvtMZ;`48 z%>C+J4!igh$|0b=t32oay&%uEI_Wu+Up&3r?+`Et#!ldtv(egT^76o*yhZKjj#;!qM#hgxH*JH;i+6FMkV-{N5A7yV$^WC*|T`mvGNsc8W<@_ zh&AoK>=F(ua=}wmv&wd3X1GJ3+a3NuPpUZGy=5kUjy{F$<(g9dOnc)py@|>KH?ZO% zrFp04*CZFtbR?He=AqrOTy|U2eqlBZc8Im-0i|^pTN0s)^d1R@Vob)c^2Y4Z?@10y%!QFjqbHU%vy3NW5?{oW0mfcd1}u?!G7)z7GrH z&Rrh9xm&s!O)hv|q5^dGdQhQy5nMJWcAu=HOK*FlcF2h3$@nsi1f({Jtg(ylextj4 zC#VyZnA!2Wqw4yH3Bdrjun{YTWcX%m<`!bBd9#(eTW{dADk+;{uAOIkho8(dwdwyb z_a^XBR%icrLJ|m=I8lj4#deffqtF_St%-4&ArrU*6Nm~L7c@35)U60J0+l6k*e16l zwA!jqTcx$O`gBoiYr!ripd=85psj-TX>qCE>C`rA9~P_3`~96WGYO!5+W+%^-_OhE zLuTe)&T^gWT-&)8`m!;~!53dMR!Og5(#WEvIy`J}rw=ciII`$=0+XWiGVK$l;?ci4 zjXprfkA~fw2*h5rWSv&ad#e(V$i%_yK&-3f^r6!${)kIDeno9ub*Ys!)(HFgeZGDp zz{O)aMh?Y)DZ&_!iHK5HH0>h$NBK>v#HhQ<^yIxDOsy-CNn~9gEqT|g?{vpyWW=MG z!aclU(DTqHL2FNvoXDJ_-B#GR?9E7>yJ&^TVuPEHDegIe4yGti4t4{P`wjA5KJ8R? zH=Ydk5oW(rv**}t(RG?RfU3qZ{b?soRy%hR0Sjki?KaEBvlhAB#vgcFs$^e%6VC`> zwLbBGhbJ&<~e@N=r=dyMt(Rqy57on|6q3D z8wVie<@ChfS;K44InWSo-uw#3%X1s@o>!)Gj%ZfcO@L9r?zdS8;>3jHs2HKyAgK$H zrdHg`rU<)6Z@_*E#nf~`(%)uyTy(TJ*zP4E!~1l%s3-Y){2uWw%mo#BIiF@luQoP+ zf-*M+*NQHBKlyq@dLbSW3W|=DiIU<`m#)_x4!~jCXyu zih75BMy^l3ZB4aJ-eIT{`W!dMSCZp9EYDZsP|IUV3F*yEs`fg+ z`fT$4ii(3x>6_-Q9`6C-@{qCaFh6lH_S0mqx9PLmi09nO)$W2{F(myHh1%-+7{zg}4!iGFy^|_k2MUESHdnfN!K(G^SX7_c&11Wa0h^REp{hPNPx>17x$17I z%45%0V#7h6V)MIoGR&XBZx97zmxu334vw2g(W>9XlyFEQr-kLnQ6y(_i;rUvsnYZ4 z*}@QEbhd=i`2pqMzR?J!O%h78b4hC`)Iyk%6$h-3H>Ul05%nS z{nKvIO5cOq=1v#wz%#_1Q9ao$stHy-L!S&hRJ9XAQ5dQ^334n?^7^qm)6V2vllwW> zJ7MXMc}Lp8ESt+>r6(@EOZipih88Y|$yAe|={6KOow3)^R}qKon6vK~GN5n@&-+cIndCBjsR##9QvBN6LJNO=I?r-|fxrjVpBo?`V5nNHQmupQ zWKHkBZ8^VBd>c9XJr7tC6C$iyibFqSpE}6QB zL8|I9Cqxz>*9X@X@EH22UuQ+!#K1Cky}{C8)o`ICPBa!J$qQ+4k_%~^{3$#GoE$5h z6rC}6iA4o{W+VhCsUyClGyazQR%C` z|2xBY=WKj7+xPsQxz8=;g<-+=PC3FRC#|D0JDqmTJ<3GIraRi^@xVCRN`8jdq+rZF zV*mRg%65(ln&%4rIy&qe5_@6oB1H?Wi3l=h3^&e~UL4qNV)Y$@;RAwsAkCD%4pU0P z9q!pqpFz=&B^+`}v0W0h`#bGyJ7{}hcN%)=?(yb+R}{B*Tui3A+U~iBjN8LDy@^(m z1>T`dQv@R8t(&&r=%|*X@vBKRpNaLb;RkNJvGlon+1_`q1j1x4IXy-Afp;%I40Gz2 z2obwx4aa%xf>5HNDBein+4>&sfIbADH6r%Q{$Y@1YHZP(VUgqcTNpW(zd6cw(fDwq zi#$AtHOXTe64V4ttg?o~U_i5Od>EQ1>n)*6tA3G_)3G5*`H>-y9m8X%oadJX>nI+@^07e?PxnI z^qq8DU++{rQs$k=y!xf7=p6NP>HrIT&0~m|#8jy?j9dRE-#aDoK4v3FcntdE{TNP3 zBWJI8zyf!xH-a$|MYwhiHi6!8D>~_FTu<$WV_z7%jWI<=t^GUDCIRe(KK1k+o|a{< zjk!QV{E&}|Mz@u{nu#frkCbDqatGFc^9MTQQ?S(31I$gWevCHQ!~om1!2Z>_06XJ{ z-RX?&@|hgY;^kMNlyNZM89CZJl#!+}Y~$P!Rh|7kv_qYNfmBSpmlRUbBCr1e30DRW zX?}p~)Quk6yxhEndQHk63&-tEt=636?+xu~TIc77ckGG6=N_?cOlR{YXm9cryE?wW z2i1JUbL9YPE=7|JVK!X}P~T#Oo$eI~lja|mzkAIc&TC&*jkP2S8@=NP87YiiN51Xr zs(BAV-S`D7QZI&2WcnP}9^o2~4At={#;G&iTB@mRAmwV_#v9g7b#RyA1-s-NykN6? zEfa%)&$GJxP5@?vdd#eKwu-@k9n~dRl;DIPPu`{&9(kdAk)q z_b8X$cAX=L4180+ihuNb5%eu*gDqnH4{|Z>DDPXQG$n+CRr{9Rp=a+}$eRi@X>-?) zeYW=5$jO;g!yl4EO-qfU6UHy_S6h%`&C~Y5sON6BG!b$?wgG`Xzji=iC^utK=+1v%t z(p|2R1yj!)Bnw)3(WU~pPar~%DexwYVxAe1Qa%}o@%UKG^}9DrrxT9PO275rNCzxB>cb4q>zNLb$ z4OZWEyf#Vt!NmQJHb>k6H+tDj-Wgw%q-^rruvqvT$Ip|)dGcgre1}Mi^sV?L@Wejl z!t@tpf1y0bf1`uK4AtodZRPAeCEwbt()OxU>BMSLk8pYO{*}eOCyzD|UvYf}cMJgcCN|m0k?!_<9YEdna|6CHTvFJy81V4*MqeB@f@M*Dan0gs{cOy<+5F z00W)3QhrmlL!vqVPucCg-XfX|xo$JCwZ}^+8JG1R`(GNCP;cfjW`Iv7Y&U+d$n-E2 zCti=60p)G@1e{w`FI|ufS!y;k8HEi^qIriV@s%3k!ye6I ziiz$uNA&mxSQs9W9wK$t9|8!O$ls9=?E&xpi8}dliw`v|1!#%&F7O__R7pja>s&As zMdEi7cjmB+snX46&71)fdGo3>c1LvFIvGH`?|fSHJH$R>C`W{(NEjE4qfZh#ZI{I( zc}PIve7)XH6Y|@r&)`m1z@(gV~z)w^%_A8v7 zh|V7GxUkpab7+$8Q>8a%THSgHt;Sj%u;Wop1kp8BdMI~&zv!X(ac$2cA_#iDm3SgR z_zSfo5ZDh*m0te^;2V2TS9llmf?oWuGoh|W=rjQD(7ZHtC2F){AhpVZ&8YfKoQv#= z9Mxv>+mU`8Gw;At+6>;kb(*9kD`tpL6R}Qnh8~O7ve1KZFd6eJG}lQyA|6baaFw=O40dQsHYk+ zj4#F$$BKnWk&hHxCx5@vp2*hzJEyh&#@hN>i`W}IBr9o=r+@Au9Q`jM(*gZ)f>!Xr zccHN0xS`OFsA{#B+{otR0Xh0p($PBlYZgm0&c6@@!mTo%{s){cYu~80Dzb^6subg$ z#C_T;Cdx15Uf6_73!5f1?ss_dg~nbmo_bI>`VxQU5tbB};5t0|LgVU)9-A`jK##t0 z&nv(=?a|lZ9;T40K-w`lfSMu4;Cvi|Lkj!|>koX#p%UV<4%(;4g>er)AL>CmlzXbg z_AY8cbgQk4EdC-9N8H$&DqXG{`V!?!`fekGbKKREWY*Hunz4PgeUWNz^p@M#qDkJtIVGx1hP5)4SU6{dAjRY`uPL}^B@%gUHyjyW%4OoXE- zUVjYlRBh5Kmq|p69*zmEQa>5+%7>vJNeG=Q)3!reL#56ZGb5oqTH~I@Ikr|>n{(eYpa!33)lG=aovtl-Bzk^B&VHt~syzs6C zI7->bP{LIIjCFmQia%AILF`4!K2k>b!srQP2F5PbG-2$RHWIt3T!H8Pd`v;kGU5>l zJwe5jj11)-NVQ9*+>o^qBJ=l&?3p^;|G~_>&);a(dUl4pom<}3-vxvK^)CHt;PkF) zllS2a@dmetE2+}tsUwk`Ts0gm6o;BTTrJ8C(eMc?CDatxZ4<}a5uLGCjH)WNqM#kf zvQVl*KIZ|)_dBI10v{Jjl@rAmv)&7lN@pEdp?HVNsOWxvu zmAGYeM?l|-Ip}j~+Q%A{BSbfH ze008Bd<`Q?m9D7NHnAF@4jK>}P;z<=RQhk`{ErlJ(NZ_o2GF>7hylq8^V5xKBPl$f z)A!W7pUSiytmPP4(S)B~%wo7LJR{oyPCl=yF9Yt(UdiHcCO#D-U*L3PkbY}|oXi3k z^JBeyE=GtUEmb~b;^rBv&b1dWa;HR0;ObqH$rsHeZrnsGGh}}MEAHZM-E8A3?zCpZ z;wd=>&K~B(7C1T4GViP|u!z|oYWr0X{Gx*7^1zei<|pmv_vpyRjN6cXvCM-)_FMj! z0qvhOw);D?V=DnN>9MsjHV!;BAJk7>XZu+pUtn z7dexBOo5V))w5}Q=?l?A^viWx2%W|9kwZ*p^p8^b$I(8PmC@F6vzA3CIgoGKc6URv zz~GD}C!&_d#wr?efb3~#*w*KTmG6F5RQ(CrMHF~l`W^GTDI22xK_mcb-AgYJEvV(k z+5u9fx9c^%f0cRP$-cig+UXWwZMs@+p82Ncn*{R}l1X!wCVcJH=wI!y4-zc1G%%30 z>MU^EwI6&>?flf-D!Vt#_pGCCHR}5is?qQ?D!17}dTh?0`Fq@)N_$XbH|fuU26Dt2 zcE#41xsp4)Gtj||vDXO8lflzFljoUgGu?Wu-9DBZ%In4p%{=06MPxMX zS0$R`lh;C82~w^gO(=DkJ#hsM za=i1OXWehWb=jCc7;fNvk(yPqS}-F*@OR<7A@lN>E=7)vR(cJrWq z4I4CWD4Zx&`T~%$-zqEgje4{tfFky^X(Q?mvBstM=}<|@tVbplhOq$c(5dWP&NFg- zw||#WC?)hoL0rP!GjXp_CWewQiFVM%IL*pBaha4x=88e?6~?!VB_r#3Cnruky2+b; znz(V@7>9!^C$%N|V~xjHzLY3b;cFNDQr47oCI`Rhz* zEBLy#)6D#Z?%rK)xSC{p*=h8{TVh`i+1E?cuXCSsOmE}eveOtCm~^q^f5_%FGc46u z#FQ7LoCUEknaVd{;#>NGfFm*T)8HT50MCd9_hlG;yuR8Qk}@w`THUa2FlF9)hol$2 zM@eq*0V(sG);k?AgiW~{4SRVL-;Ila&6hW!Ffu-qFOT5#M8OWu&G3}*I2q(X{k z@zg%Cl=oAmUo@+4b~NOf*l|o9og4&qdDXx@ZKD2FsCsP<6NsD~cH3lPV8rAt5K}~X zP;$5~1$VDC7kr^@6y?>1EAY0j;R)8QA+^P~Y$QZYxoo8E49R695uY)Bb)D8?2FgL> zV~o@BKD^beVArE&1-~{=D`;*#=GEV2*YDduH}9j{FfHbk~6gS8J=_*cXJ+oB52Wcxw-=7CV_APyuYeBcI)7*NF zD|aeL9e+kiDpWpGblqysuSrX_g1-%|Yb7EAEX}(1<%LI$qrB?$J((0s7wnf}iCTtk z+ZrA;LQ_L)mx-?%h7%=eKVFDXaNu^`#Y{ZzYa+kF`0eJyz1_%3J;8AuKeCt2NA8iq zT;I5Dxic~&HVMOfe0Mam5|Usx6mk&kyF=%=ZcLu>LH9$qZ`@sSi;u_jm&ic@Qwe?L7jwFR`WGrm%S{8Rf~Wb7zwd|7i0S`itSG*WYtc#T z{3vSP9izksx7z_ixjzT{D`8WHn^`!KOgt9H^L@~f`1|+d=WL9X@UqDf99a2Fea{+1 z_tTTw)|uxJJ0c^<0$pXtGTV&hbjD&@y_TH+M>51qxC{|8$_$drF&eA&WPbW$)@W@D zJ$eh})sj)AY8gB-_Tc%1k#eX_+v@S^<7J?1L!!<@>VnNtNdo^O?})F0m^L6LIRQE0 zFj6hLE5`F^ZO@#V+TMAeC#+g54ca!LtRXHTDVpC%uppUa%52sp9I%{tiNiYM&SxHY z(k;GzJw8E#3UFS20_InegG|8pN!mLu)`F$utLGK-9wl`OQ>b!sfWhVAw_kr`Qo&8=r@OnnV?Y$%4WzFCML%{yT{U_ zG_~3QwL)xAOgf}8atcJT(rl~S1=k<~Zf#GOjK~N|d6L634>zBB&b>N1>51I* zq1qk3J5+p2)M;a3uyzjQ$tG;a!B&7_Jre=+!07! zsTY!0HdtJ6;)jLfWW`0~DQ5Q@5zgH#Nxp(%=53}%jCNfr^5^(8_5kTAO^&Tt33pAJ zEmz;%;DZ5qm(IIYug04_uVg0v(IY|$2glz2 zf<#?@19h- zRv-g}OqD-<${rzzy~Jm|dlBJ-)61Q~jIFN8FYJ&~co1evE=(?W3$U!PWb+FfNLi5y zzN-AfWNpm?Or*yEY_d`eVLpIyvxhAv+EDtQiv=iH4fIF&C>b|%wqtzhz?kt zMubb;xRq-eTl?O=5fnhUA+~lqzjC8r>~7N+nu55mmiU2Wu}2?JXk@#)%=h>O%-3Fq zW+y+3J(yWfV9nAOCuHv%c*x|PzSC6b&IqK|FMDC}aT-xL(HM~C>Gzgk4gzx}QCtCi z(B{tGYqh2#-!kS)X02bWVR*{oFmd+(UuX09)1N$>uXE4LQ?qg0XtSoWypuWgf1f{Q zZK?tJ;M%nC%dCyQq}RqOt^e28rpc_$r_uvr37SO8KloL4I?$x_;+Q)-xnm~7ej!rf znTFW2I6#7rcg+1rv!gymHy9=*a~iqI*mtDM%T`oAh`(@LW04!h3q7yb`%w^M`I53> z(Hi!33E9|ikqCfJ@;iWm7*?~~AZ6_y67AIn3Qg)fJa&01ZtldC+!&TteZW4nn@}{s zcSox_r*oxtisY(7AwS2%R&!w6X8(Hz#smjXGMKRkCX2I5^81V?5jx zDGIx}hI0q;$(G^d4LCJsjaSS5)yI`^>8K$s!U1fH=?33)T$_8zvALH{G)}SvA6OsR zp^pz{nEFE|4^wTPh}#zLfs_PQlVNHt=+N@9)9)|lX-nsa+PH#_{3i}LQX5C*VLzs0 zhCU5ooTv2~Iu@nBdsB5LR$MWENN0wcXU;8HBXQsz-Z?C&b)Mp!#>meXmNdre${OQS z{3ec8YWMkK_vrc9a5mKNaBI^Z zhcjg-KHP2EL%Fz-x1PQhKPAN1zL0NHA4;G_A9nC&%wz-euw^zfTxKhTB3 zSUwbNv$qxtI5v<2-#&WC+X3%N`}Xu3?b`uw^X>Vh9U6U?lj`nofuN-AiM?J8gwNgc zl%ai4g;V%R<=xu7k+HR1kx$p|nR~3dZ}#H0#S_vkHhc4FQFP=PUR|B>pf1CM8f)Qg zXcljrM?i%mTV<6)v@1+Z`Y5(%_`LHd|Bit6I17bG&KGsqvBi_CJbO4kejUGXUOkn& zS?`{fjJuD~ZikF)k8jc*5bqB^FeBUJ?bvNbcK`L6k=@Fr>6@G1VZQG&RnJ~4S;u(s>gFXMM{xW1f(a)o0hHPibdcv!BV1200Z zCaIL08*eHUB>S({CUQ#~)Th)@FJ?QPpY8OoON?1f_ujDg7H03gVD7o4!?Lf3>?1YV zM;_H9Y5tVPpIl|b-5W3S-fn_PZc3qiz+0Tc=-3)3KYBPns5hD)AD!pK{!zGaAbD&} zQ$AII^BHr}r$`9MdBP5xzK-uYgrl&!XnoNYkMM7V|#~18e@C&B4@?+ z7AzhY+dDimBKECWw<*heY<`pGhtoJ?Hx$K2{Uwv1wL&}obZ-MlN-{I9D zOu(d$daBUCx!0?(7fxo#Z@#q(%)wvdF#K;Bd=y3 zIo~|Oe2)=j_KSRPxO(Vg=jn*ih}BZ6WY6AYo%5)o{Kyl{}LRU z$gNmc0M_7^e*Y`P8J|2?nE~QA&x-#y&zK9tb>R(j zp~qZ+{BQMM-~u8gnfF&NmnFLWH@d0ijF#aC;uHJtNtIr97@jG=>51Q|yE^A!Bcw{= z%Vih!E}bgJ^!WXM;fH%?Cx1ikH#E*57?4M(>F)Pyd*&V*U#?s6`yb*BH9?rW1c;G#{aO`xyJnZ$B#dh(A)v-;M2O@HZD9xAz?1DH|Z~?S;B|UkQJc zto8Fwd@4CUrT};rh1H_boBbyAm&`v0L|N_eC zphI%Xeqf?&dAEqCJTs`Tnv5KQp0pVQ(ZucpbF$n|4Vp5dJ`n5(|8NplR2uhH`5^tM zh%_9eI>HGd6*-dOd;fv7K!^oIK*~hDFZ7YSOzU5>Okj`ZhjMQo&Ho}!WA4@LP)0{N z@tbJ!rfQ>p@~yryb600Q=?7hhJ73EFB#Am(O-+Pyf3lj7`i`yja#F=_Xp1)+#~i|3 z!@khKe%&Jhn){IiyJK+Ron%n7HSKC`F&3OJ~+WsnSgKe|%b1BBPlYkEP=N9kg>FB?9 zab}5e&X!&?AL=xyR*COpR{-C#J}Q=?EdX`jCB-nJZ6$tSbdWL;x~x9%xd_0hGOmm+ zQ>&eLkk1tc*0lphud2-IRopdq!tOfqlWod?H z?A+e{^CS=$*^YkvgZ*fDSfOGqv)NO*AcxbCYQeHz@b_;V+{NE7HC?Q`%XHDPe;2i; ziwr&u`Uffw`CWIVc4(?}AB&OJA(zB<=HYz}2Z^5O#NOCPauvo^7eEZr^drOD=FiTF zULvlV^Zve6@*E!e2**e99v~y#(7i0c8~FEZK=JI1jM5vCd{i=?>Gd{~8PsR_Wk89*a&%l|sS z!BhE$LNsg?xNGr?cJPmO2-c7@G~d}hH?W{AF5xxuf1VVI*WoZ6&WyG&UgwBZ|Cgqb z$29Z+6}FA{GpYBGKKpNF;e1yj)P=Je@JG^y^tEblHZ`r zcceOGOB=iGBH9FH{+t$$W^&Geo z-lfDea2Qlc+r+Taeg*AZvCNBO4xlx%T;} z>a14}nNjj79`{Fn6|A|uuX^6km8CzQ$9^>A5q^H1ZIW54cr29A0=&KrX7kRsJww@Gbo{e>J*jt?BghA>Ji92a4}jAmVK(kfXw+ z>dA?scX%>~d=}mLJz9?-#m4P|BuUZCOO_U0^cPulj45y?L}WVHWj&I*vm&3Q+7jp(p(wEy$^s^e1Gg3NQIN}rtYE#~ zKa2rJp-IsO`M8H`=J`RGM8RM06ID%{s}gsYw*d^mZ8mkcxH&(dG~f7ntDdAIuAB_W)nsOJJgnmjZhq_;6}3vxsg z>AUhFAXBTSAd!@5e2A16H1oeHc@pMhzD;Ph_u>

=)PJ>iOv(@uub}@#$SBqr1FjYcvfL|s(~(lXf~4}EvtY9<_%i#_(AKj(9H(-}7UgKz1#4JZnJ zwn|L7i2NS8jd9LY69r$nQ%DdjsYjs{76dD<9t& z)MQ>G12uw=%<8go8)j>9WO~{qS}b=z)c`Y*aREX-zJ%3FGp+}6SUI-Xf<||D$o*4; zdv1n}h7*%YkY%Xkj!5cvCruA0iU85{QChLhcEuXwfoA@vSB!0;72C|V2xyUbh!sQo zwm-t$o)+gSE4H~rN8k;q=b{N(XZdp3-RxGRx?HP^yS*Q~}yVK^? zO>+%%D>*FHo0?FbY8Ts4{}il$Gfn>Dm-n2J`@l}U3PU=i9wQ4x7K>IY_K)1?2uBIQ zl76@M6FBinNr`L&$bu(?T~ZYNBkcN28>nnsgQ@c&i^Cf!Y2A?88hw+T2$nT@O*)-Y zZ9#`ZGldeI-eM05bWK|EX2GvThsCq9+STQPLm*8B!ERo*ny+_nx|6@bn$WH@qQg@LG_bN=XPn%=Q`cix?>ZwV*tT#NOH<%A zitB9*?Fv8yv|&ubK&Z@3AAw8Y!7d?-a??Pn_!4TU<&w&`&T2*!Mu|uF#iCW-wg92~ zQyYV`NhCxP9?%Xf$+Z?fX&g;P?tYd6Akkl?(TAC9KEisa7Z{XFpOQ&49+~M%lih(f z3xZ~lzTom{I2TpH>Zv+e-?0ZYP>5oB?0!QbAODcCSM5qnq-tx);xWXWl^8vFYSyXY z;(jf|9^@+0zf}@Bw*M^0Ikoj>l8z?1iKGck@`XrI+gF$*uDGLjQ^in4>o-Mz*TBXm zGnnl^y{8FPge(=dAUxRzE!RzJHVszljL*l zeH6?6DcrCBVfMb|P3gTK&YS2bOuxiwwPdZ)ZK|$Ig*US@lfk_SO=#dveCPiJNI}q& zHTkq1!5L?BRu^xYB6`-gm~b?cPuZ@9RPv4S_c zp_1x>I$u|)ry|uU<+j{bD`k|Fqpw-9XQ^mhmx@bZ@k|uukt$Twn%6vihw0@Zk$(gix%&kYUlvtD4iziom z;XmaoJZSNlIpF5=-Z}ilMpNOPVZVT91RNBu=D3;FHoR{?jTZ7Xd5;*jNN9;Dwdzb} zn3rFaa!1W015E1Hh3tio#&GR;p^){Ae)*sFHj$CEh-`O(qqhqeEm=qV7=b;=(!K!Rq=$^*v`P zbDHHnw^NhDHelE|8{tNni?CO26Gr-Ifwx<@4iU66`2m>T>@r)U1TqwkH(&?qD)A<) z+?QItPT9ueQ~j}P%PFxey*7wotW@*!c9UikI@#mxV28*!9B!THXA|T}hVSt_@fzI9nfa#BrTAT|1k%jfpn){qO096Z^ijqnvJIte0y?w>h&AGwfd8 z$zT2JHir^ADC%C`V=v{b(|Jey&NckB!^{lv3mPJI;#-&N-ryiV#UO*YDR{^Ikq2Oi zMVSnaA=QqEFV{fuR$HsL%)~P-zWKT)Z4Ml$rePk7BW+J@N|o*aaroAfD&5LA*9>Rd z-pJw9g{GNQ=eE7k58~!KQY2yoEOxltUZJ5Q*;z|1izrzlEkb5um4?`7Gckma1-E#` zJw;fh_i(lkecY|yzuY7XzdMjBy->fI*{7Vuy`;azR{m<_aLPrI*3B@vUdcPjQpfdW zu8^)r^Tnnm{&%!;4{S6Qi5aL(aKI@7qa8?1f?WFCyF?p68OJ+9M`SJqr&d19s+n(X z-{TvxuhEI-XJ8D6r;E=r7P#lV7twEN;itLYeVa_)rdp*vV6R+MDcjv7{>w|wy0DNX zp*o3DjqUDv?>^o%W~$y`qAAxKc8eOiF(blS3t1qu2aIiueT?S0u)HKKa!L;P0Lr)Q z)y20$pR_bXg9R2{(%5>hU3L>FprR{f!ErB6b*FFtw?YLRH{TrajC5+&uB4O5DC6_r zyRgH$-Y`c7mGQUP&;Cw=ydZLcYXVF$QteQ^$}0RtO^sqL>SscDNr#qgiCCEh@wLah z`O7kEp5BQ`W&{cE9;8qF*ZFJXHF2|6Sb+Z8umHX-`m#a-_=3ybV|@IJAptzOe@FoC zO3amn-XXWa46E3PQor+F!Ax$)l_l{>`EXyu!Q+z(yGMX;%p>FUfZM-IwXQD3y>aM_-Rp64Ki6H^%#$^f z^P>gGOC=jJAtY5V$UXZGK_P<`ra+SkAz5^FI&OrJ62WWX*x)$xrJ;4Deuv%5v$bO{ z%XntvI}vurVAE<_!y{?eY+KO>nvJ)rWKrTD3Ttlf;{g;bx2=;erhrqQ?~VvVCpn#} z+!z^hP@Bl6c!5;G9_3)&;1~P!p1lg!75Bn?H?MZRFHyyAby};OR;=b@v9Q;b?8@iF zc4?emoUXU?oxI!1h=06Gp$M(-TY7;k;|$1qjEv!DHo8Yvb=Fh9D2UfAsqAoVeO2*f zQ?P&#GD|Td#O4WZ{=E~%=HG|cczx~mId5`*T!Y)LLr-_5Xheuol)Njd&%VZamp5+r zJ=o)meN6*toxC(jnd3ZCnrBaEBxuo)# zA~<#Rzi7x~Dl*bsMOA>9q5O0+0j5xV{MQ7Zy7zz&=!MXb<+MiQ8EUUN&}Z(YclFYC zZP`yd3D?kJm5fAp9dw)HxZ~9*=YR5=d+6VIL4I>k>7lJ6Ql?$!Orx)7Jm)4^&$;sb zJ?DlzJ?J?1$Bg6Lu-}V!Zt>mDc^I{Ps_(VfZqb z`9IVvwfqhKVTonzDt}Jws_F3MtD5QKe5X4&%ZO6J8->o@!P)%f!;}+(a&!mh>w=M> zjMXGQrOD}j7SfZFvYkG4{_74wrEV~{3qqB*v$I577{^D{5+8i-X`K1@t?AW0MeAM4l7Axl@`Dnu^@I>1m0njwCEbL4y(w zYDt4O(gXM07yr87o|D}r?W+0-d+xM<ksOlKZXkAh$Q3s zhzz^)UIxk~VnQnFt6ngvPRG3%KOZw!gFoE*O2gRR@Cp-b8XZCEan5JPgqFS-nc3Lt z_#0xc?`s^}+klOvG0&-Nz(D6J2cy_x{&Gy6kCKR zUjH~eF}N8}k&5XRo;GLW07&I$tR8GY6RV+%9g*{6H6_uj5jaYS>B)_Lj@=ArB^x!G zK#O<$(o|~KcIVhl&R7mpBWG_69*_1grKCGApZO-oSH0l9F4qajg+F~weienDzg;Q{ zhlkyHMvx;n`K~-f8&VJ8VP@7V?R&c`R}xR8*t-fEh1;+KD{Er4!y=<%wfWI;tf)F3o+KD8}!Ospn9I+Y^mG;w|* zXMPQwPBr8JqZ$&)a(xHyaH&U3MU+8@}83QBbrubi$ z>Wz%X81nN&)b^wbzP?uka1ZB8baeLGt!3tG7#N%BW3H#{1j6+Kan6p4WD z(XYCQE$kid6iS~kL*G(D^awKF82LPzu*=-d<5pHPm)PE`Zyn*pSL-{Ws%20X_xyY} zx3+I_p*M*FB^*mCf66Hwinf?|kz?_f>7=P_2b((50VC1x@OE-}gX;ujFc+l4;*vO` zgG@3=S3H*ME8&*!un~B+$u>RI1}`JD$?x$=Hp{SkNud%pZK`)KBnE~~4hSDV%41g}8VC~Sc3Mk&=Ie2%PRhRCn z9=hvAwn4c10s3hiAU@3VmDKOdECmzzB1M0$nR6U}m&|QC02vPV&U&Bi0}1Kz{(_&c zMT^MEX0dJ4;ZJHhRW~}hCe}JS$Eu4>k~`)65+IYg_5DRFXwWg^D{{1AiT)2^lGzQw zLV);!(0|23OPDSYTrFwBMZ{p?5TFl%!nlUmd?zPz!r*EY8n|WN@*OsewU}Izd@(Z} zi?!LkIb>bh7F9Aa=m2Ze8#yi5vCXSOEz}gxWI;qzhb+iUvmk7d^zKNOde_XePmkp3 z5}r=>WjY-K!!$k&wLw&}v08#1{Wh(e3aXh-q~@g0QD8gQ_Cq5WHaNd+qE zCO2@5A#=tL7(Dxrc+N61t@)OkEP1I-k!wr{?{e<$9!AqX6h~sE+Pk)M#e48WlU(ES zMhbUv!Ujd9jxoAy7rLy?*wzGTIu=E?x&ebK2{-arr#6hu|7x&y$DBU_BsO8}I)d6HYbm>|ESYay<}mA>9&)#s2VcZ*A+&NKU{)q9 zXcCKt)ciZ|CEUCDNhjY_>WAc}EEZ&sF9E&m#>Qs0KmE*_zmYW31HZa_J~2h$hmzsp z=lGtPz)PW(E!)GS$*Z-!A8A(~GU^>YHssbQJpKMNjyzPSSy~=b$1R@+=##+268WO)*!)_ox z(~l7~K7Xxu-ZH2H^b+Jh2K+fvw^Rb)1?f_L&u?$LGyPIQ*lY=2Hw*^>vr}&c6Bp*z zzO;Bu$epCHT!x|dJcK`U2%tws+eSCqThDXL^tg$7L^J)#$Aj*j8eXCx$hBR zCFjDhn8)N>4X5MnNFDRE?4y1lJ$b`N6O(f9bK;hC51Ba=%`ewVM>a;?y2uVsw*S$LvA-1($vDK2`r!=NUu9ho z9D(1*77F>l3Co__4X{25mXFxmLttr5w!H%96f}ows!Uh}j5II{alZ^2O+w4CF#K3N z+7Fs79**GYhCT_V$1#>qfa$QzEYdK&%)(UMwVwh0%P_V6aOr)VrA>aY5SgF+kX|um zR@27(cWE5kTcLL{m0)3)Ev$B6*R#2ihU5vV)AN?3HSPyG2B>+njPezb0FhGf3|=5w zqQU*Gz|I*8Hdu&RV7~X#-&3jd^OEdoZdBylurWGBz7TRh3U2!w5f3!OyN0(v1f|M$ z61^zh!HWbs*oqg?KH3-^sZY0YPS-nP|3eyh3<@~dKxw*xuMKG+iGBAauahe#d80|e zk`)fp5=;7cGrQ0K860;I!{9y3MALAzHV>4-*X{t0#%pI!VAsackvcntNNvd77wr1m zu>EJg+su3l;PnLFO&RdM?EQ{*(zAb#hDJpuaLB8J-?P-vfe>sp%am=WeXyOx{_W&O zCYlP4DdqXn0(kkz%u;8~5Tetp)a6~oYbp}S(&9Uc{!ZQ+Br;Za&wGNQXUa4EQ!oN> zxtG7>O{T3RuJvi2Ih!0e4ul%(N~!jfIl(KsvQHa0i9>sJzu zKy^MZkJ4R0e3UWB_b-Hyb4al+_`i079d#`n?|+g!3(v0lTB#04MC$J4krUdZnH?2F2KlXVlz#$vYF( zh@W%a83SQE;naEoB$BV025W!2cuc(|`2%)Vix*k)WTq{W54(TH-fHERfd{#~C2U&~ zAArQeCPm_jVm3JyW^TaQ`wevi%ndVk>jzSu_wC+md2e#3d#8XscvUNq+?>hpgyZCe z_!Cbl9P03IvyxE!4`84?pt*FVab!LaYH4(z1xG571nT3rt@Z9QV94N!aaT_?HrM0x zaHRW$#e$f{f+qxju;2-c1u=^SbN%j1cGfp79D)VZ0|X?^oI$ci21%yc+h9Sn!2;2N z-!L1*qi6uof(cU(#)K^gV8TlWV!|02Ob`}~aqDL@$N5@ng9Z<=1w}68q1#bEpYoSX z-yp#jg9N2^)kh03m{c4@crR+V!yI=;b2wopomvk(ga~u@Lj*ik#o(j29e@bUSwy&$ zTNy+sHHaVwwKfKWf-)EbhQtJ|O}=5F?h4#)eY3@byR-)2fot&~bM*i`P>zC6#Dzep zlYk=3WGFZ8n-g2a99=3m*IS(L0Ms{?4R^&QW#QA0+hdF`)e z5oRP$3E>lSVmQ&(#}f!vLD!*RFFEQKlPtQ&o4He0`=A3jmO@LC4`IR$#22AN%y?UJ z{@d7T{)oNoWkk{X90~S~C83VpxOoRwuKf=Kr$fW;SKIg&j?Z|sUMaUr(HETfqQ7<5 z@0R9JeV@(@q9tDC1twp{2)A3op2OS?;ntm@jz0!gE?O0iU-Lji?89NcRWCBh32x}2 zztP-1@%p>qz`tM&KOlXjZ|V2Bi4svlNW;NoZ|ebM@8tu@-r0uiAvC-wx_2Dgd36?G zkFk=Wj+v{3@=C-}uZ+rq-Em=exUreytg^*hkhHtva1DgV>)p3QW8aQcb=0p8Q%IJL zau1uJ+O5A!>rlx~s!*K>?HXB;E;0g!Z`oD=65Q22DsmQM$i7Hih}(D(UP_Y!=0e{|%`kA0uoeV@=kE|MIZ^8$jVs1E!a@GgqOo{J{IVlnJUO3kOU3zXWcnIY9*E2=jb6 z?`^HA@L}m#A?MOvkp&INEjUY|jR#BI_2b$lXHmaUhWM}QJ0-cw(k3hFsvPPX7yWqs z)0|Q4WX5#ZZ6ogD^%zOoJzYzvx^Mkf@5}xBQobi&W&P^^$h(cT>pNZ~Os&%!J`GqY zrFvt^sd~=4;ZzPJ+Mm%DA0!}`nc9+pp%Ov51o#^D;TBwTe1;SpRo}4}Lhv+%fSrRK zey_^@9Zmh;w5+~NbfDmL(E&MxK?f%N6FTtwpK1e6gAPQO$ftW8MQxj9>8^iUGl9zN7M0n}68;S;^S1A>;TV~xmIQx><#j};W6{$a z+eBsfg-tL+W?qJV_?G>F7Gl>NlG9y3LTz=|`$TO*)!#AXrqt_dG~}iTufXUCp_hrC z-B{n58*cR)Vjn?lzQNV7J2N%Go&IBzJZ{Ej(;be_+-iu;m$(T4V>?Gf0>SfuOq2vA zZVVy9R1&{e0aQ5`EzfOq@nlsrpaJi<)0_MR-UsWt>0qnrz`*+SgId|fdCozNG#L@o zx9qN|%F;x9vlI0<5G^pEUDXFNV0 zv>Sb^_u!jmqt9?R-^u)0cdK|I4F7*2tw;;ZuM3#w$HFF zMF*gIe>C&dvi0|ZgoJGju5{xkt~B)GWxdmodR7a&w8hYiHzT#|pfc!%Y~W-R1)PRh zgyZIWxJDWJsI=qyw9j`>kk;VCN8KAeMLYf(V1JZ${DN_2$FBjBgF9Xu-k!lYYk5!q z*nc}nMm_J$-39M`o`cDpoHnda#jo5bH>wYx(=oq+N1=CR+75{;EWAW#Qv~31a#Zk> z3-I$+xQTI)Nr#`n1e&}xWAJ%M6nwNzo&=>|7-K{I{8r-rMYZ+WN60+a;wOje3FN3 zFtu%WuZQuc7LQ7Gx$9rtv#fK;u2{b<1@Yp}R8L;t?!K{oFMhy5Jt4z+^5aXNZ6qcX za?UKt;V#~HTDQmkk&2v7-kJQH6cbsOE1$QY&c+i}EdxU)mWxH-hH zDqf*SX7K4(yjDAa7B)ZV5k9FKD3&X7=WO?g#YEJeo>*oe#5}@X|XT0Zn{THf>np+ALc4X23zNd(#YFnA{^2hArLpN|p^E2Yvq!2P? zOaY=8XVG@yg1*K_Z%<9))JQRC;D$D_sp|AG=YM{;#t7#%3-T9U+`b?`2V?8P!i~X_ zTxxM#6zeWrYt9~9x5~GxyNeNKgR<6Bx<1^B6ns%3NDRB|!C2{yA2ke^O)ZR{>pj8) zc*-#EsSIXfq0-4rz}DhwWeGen#B)cOI(u3~oX4pAB3$Y9~|b%nmCZYZP}L2CtS zOe=XC88|KD%Xz%<0K{m2aQhsR}x7}OBcw18Y# z#~j7-CJJ7iCMuCPgbWy8BD0ou*y%CPNRRoau&V>d{L@nh$NV4HYRtddm>Kg4L&lsP zu#VFEch1R-^{pS8v8FO?!u$H^jMb1LxknUUc#%1iZU2iz9YtwYz%to-h@(5Qfcxx_ zL6n+7oS7ZOx5c`JMebbA<9=2yk_JwslF>(PqI+kI?C;= z_{7;HB#KWt$e`u+k|mi%#;rh2~iNP>c}46uUHbZAnhj zBt@+B{%#?5&S<;3m0s&<`KXGw`H^URcbfE%w6HOP$0}IIU_?MomshyoFkRlMShBor zxW5eP@-*A!SsLMtU}|eaY+r8VN2w|Pw%@GeabUK54V%pqBXU6OQYX6&|-99*%P!n_5b zhI_XKCZqxqDeV5)WxAY)(Sg;uts*Cai%hTg0mDg8&q5RzzQt$oKuL}c{nKy_-zK<5 zOg&Y{`%k---#^@r((#UFl+USbLr!waLCbScW2vtUHa6dzX&d`~y0Q7*bEm2?L^&y8 z!d_AHD=y3Cr@W*@P8;dWI=$w!9TfVdK_O7AXdu;4C{u+Aso1^2P$?f3cMGF9OtNc< zx^6VS;-ds!SKz&n7JEGt_o#NsfdhvI4|;!1)~{F zU6~!uvKQtf?DcqGnw$nkZQH+4RO>-XOMN&99zM zwKYw4@!u>`iyhLw&h$PuwpKCdJK7rx#gmYT;GH0IlI@Jy@lL5p>SEjs?S&;&YLM9-uLSa5L3~A7l^s5hXAp{G&fnz z4FzKG=6?r>HV@>-=MboR)s!aR8%oU04RpNk)Wo%VNKNg+l;F~hkp}OZWk#0%e9e{q zfbW5gPR-MLCh8~Upl~aBcuh0kO{`|X_vEgiZ`v*i`27^Ej2vpJhi~;Z_;Sbrh(0B< zF{ohRP~fDU%T0xcA?r;wpKOpFg57MokWWTtgrn>TAI^<@0l$!CLcV8+)Cq608FxcVYVGAJA1cP9*Fcc#M>URgrnN1r%DgJ#6XOp+I@PAg=k_JZz2tB}(Qs@qc-0NvspOCB0qrIF@_FFF*X#d{~CcDfg|X*$v>zKa7hd0K(!!mkyk;VM|SXO7Djv@gpHJ!8DXsL zD}D?PI9U_iLWWLEdnTp5a*g~_=-H(timUp3=0wPRfOUkJ1)i#d_&C8EE z6N5S1;S|R2bl3Z(-g58+>yFNM;=gV)%@%AOp;MV>IXnm$rTkr_4jmJo%UWYIbH64` zmg(_5#Yih-fs-hHAuI*IvCuhwMhXARLW$YAjjj7|-X$AHo|7Pog?#9jVTAjrM6b8+ z&B@QnnRgm@eB7Bg%2~_Nxc*^i-8taBvW$nu?R0QR^ouT5bmu+CmQ5bvjlW+Dwq5IT zXm`$kVaivMP{NdC3XGnG5V!bjjisKVWQ>i$&ES7yg*SINFD455e#zd8*ApmHS}OPts>67y}whgfF|!bT9~bTRR|Qwr-zk?15Qagi)=$ z?HVMmF*)?8zbIKPUH54y6T)6#J$_Ab5zLy{eX!dmoSk0oH)%UjdQ4G<%0G5IRNfnI z@fJ;17NLbmwR|meT3u04N^8Yq`T{v;3l5v}WsuBrq*QbqrMA4hZwcsfFp3-=LmzA5 zr{X&|1~3*NhC6ZlJQ$q=$#IK6m@Yau=I4dh_0a5{Bfp41+NVu-uQ~9Io|ZD*Cr{Q+ z=wXCz@p|*#n?D=+-XE}E#h3oF(+n`JowX?J!>}tc>olB9#KsU_ZNY^7W(a&K=S4!b=B3CN1Y%J$+~#N0T+Oxy6^8h8CNKZYaZN(5-8Z z?HL*UEWx-LUHk0g!3QW{Wo++A3SJwPVr9Kl3OyS6YqA%^eC>Zn8(=vXHb+Tsl%LkJ zx1_b~Z=hXPz0f|zvay6~h;hx)k;yhi^252&1)^6G$341#7CT>+KXOcK8q1dc>$x^a z&!a^;2-xbCb5-BW<`XCQy}N!z-E?X)j{~!p`;p|Q6Nt{po#ZGDyV~0pVmYzj6h_d5 zdcBK`%z^f}#qXc5WiI`xmU+NHv%#jT)_3Z~to&AaKm^nn2`SjtnrrA<)=(JC zdnSoX2cm#LW37eQrsIoS!fsL=14jsQ5F#(0sf|l5p4zFit?Hl&|Df?+)9^?@|!% z%(Xq7?bSRWs^q&<=k-Io@h#h?9uKr?9y!>}mg`J6%O2r5r`05&mAU6uEKDmz*-}ov z)5?D!?T%iVUc5O!ZibiqQbX-CzNN}L zSbe{ylQCZo59PL$Cr5;G*L;twu)<*KV$SWZEU~#=y-~sza*?X}etBYP?iw6*G!4+7 z-Dlxpu6f6b#F)XW|MRMwOYkdR`8|U`q{=lXknEmmEMcHA&5sbEYk6mM|IwuI=YXtB^zHR_M{UZx-b8X%+Sqtq&0LuFzEaHD``Jy2$_o?N_ z?=~%e@S$zlTsuxJvt$@+MMVbB&rR&H>Ll1>QL+3UE2JsN$L2mGqzd~@U#w+2=x}Mk zaotYZkV(h;-LcB|^2E>h?fz1KQ(J8+pV~bOuSk3u4~^Y$d|^|AQmn)@7{|4_XIPub zB@MM(qbH@H`QFWVO4R-}nxEQ|Jo4aoVi@{UTT{tjETQNImnNRx2}!tdyke>7`CFMNdY! zcgJ+{VR^XpgvQIk1Ee3e?zzS;cxv0PMJ#dzfrMtAGNwCsnfY$cJe=4UOBi*pw-e{! z*e^wya+a*b=_~pvnah`yWu`MK!%-3bAI5hi)BIXBY zZ%il3YKa!HCwX`5LDQ)ca^=UaCDkx}AChkFn^299GonbHQSCU%t{=BP?gHu-%B(pj z-`%Rw61bUPyCqum)JW!+9Ql;Q0M1}8#+EA4!X+s=V|fuXC;=RgAPJ?S6&TRNoU&2a z0geU@lU4r$D0VDW5XA=*k*e4GDH0`V9`rQ@6r|ASt(e>V&&GVP%mj_x!(hE<=)=IC!!8o&WqOU{RSA6 zoaN4KMx8LTi5$01Q-%}MOmpqV=o?1gB*y^FC(ku!1vlud06fw>ufLLc?qi;goFJ)f z07%RU{EE8f`V8T zj=Zg!$2RXrcqW4@AvkH+Z9d41Pi#l8*T>3W#{b@aX8f(*HK>4GPNdCvk*QYNLw65- z?5O~LZ{}2>-8AQ0c0LO+*kp-daky#Hx9khtI=$1*+s+nz{A63!c3h9ciCZeEGy>$gW_+ee2ZA8`IXN}AR_V8R*ZU7yO& zS*KrgRMB5lEQPvY(%Q?e806T?{g?G_D1-XpZ{5vqN}Vq7ayM z<8}SEz7n>cqp>GdnrB6eaQtM;{XeXo34D~r`S>@-LIMdJkkyEwD+G!CGpu1!v z8%ZRJRy?Y)XhiWq*abWZZYV6TYiYF})mp9g@Tf;?1YBTH`GqqZkUr0p?ck-g^SpdBs|LJy~n7FO%~}Etstv4Z|Yv8doL*UZuKAf5Mj+ z!#ANHf;Jo{iaY%HW3;XQOm6YITr54VGjX?6NDVrjQ%j6IQ8v9}?c( zd7um!6P~E^sxtXiVYH2j_B3@97`7L*SAg~!hWy6v(d5rXf@a^O>d&D@F;d2=*=7KA1%@zyHd z;J3%~PxR$ELjBY~FjR!BpFl|HEE@f|`x{EHrnt0Y{LTo&UMnt*{5(b>=cdPa=UrDq zhriU2&S>?WC^Rv0U77S=2(R{ZgKI{4bmEV>NEl6#ijnHRr6{JxL*K`Gc|*j2P#!KplR@I#o7HBh8AVfq2yY&zXu3M;HBGOm z8q_9cV&~B=b-&iBb-bIk;juH^QV@v0DqdB{vsSOmw9{oKgZDI8T3ym44b;UAw65-L zl(}vb>Q^g!G8~b9d*W@i3Z|0HQg}3*GepGVIvMTbVHvGHSEvAw`koB(K-bPFh;T6{ zdToL4C6SDfd*beSvfje46z~+(^`Db>!bv)B>zG;@e#@A%?SlwjfuRHQ{~)WC;qJp* zcg6u**Mc&(QlywKv3xcayE(Gejp2%gx&8?L(5HpK^sFw z;CJ|y?C=lSH@zx{P<_DxpKMRyAcRYwRdKtH*F{7BMS?%)CGj?9hVrO?h4ZPHe{JC|kR?JIiyZr+m;)#8#uP{VI^ zS6lLhJLlF_4wIrznxpIEu_pbZW7O#vI7Z~Mg4~5nWL%|Y>W0|>I+79A1eWY8S~Bnq_4#Aet>jX``N35;LsV)+gKzwsq^1Jrr(`) zQ|bJR`&!o)aH4t-o0!pOtEKYrDp1aYE1&P_p3$fvqco;n-`Fvr;t##ExmDbRSVtV6=yZ?5tp1O0y=?kjV3%E}=8EwZjjuf^a zu0@?EA11SPHm4&@nb$r|g)U7|#qF96nWG7``z2*&)vF~5b*hu8rTDHx_gB0fn_M!S zW{S`1Sll7SWqw6ov*+iL6B6^&jUj<+#YwwN#GylR*(|U_cp00cYSAL$>+E9=4Fjl7 zs<^5n4CKcz5DsH?EvwA-@i-wVso=bFS`RgQ_z&^+dvyz!7L_<4q-DG%I8ypLLiYgK zW0!MC2IS1aH6~2w4=58I=ShO~`X0f3Fu)oL03N`9{Y+wMA`$X0 zsbQ1)9Z;j_;AConPQA>ezGqSoOQr%F%8oIqO(yl=WU5D}9%WMhEUD6)amAe|Oegxn z(-`6Q?BFpdD|;+Dml3x2gH!~T2X=s_5&jbbeBo_+^# zDBr-%NoJ6PjGlZ9rblkGt~;GMN`fC!kVvUaqS-N$$o; zPiHd6tA8gw-7P&G)u3y`q9m56?KFy)Hc6ML7>F4ov3_z7qi_h9_p1uw_6&pc(zVkhzy(4zd2wBdx{QP@CaB{#J@B%-@8s=i@ zNp;ace{}RI>f(1Y7~us4i@bD(>%I>0FgFz?FM%9oteas%y!+{Od-p;{RD>RaW(#%kPNG4 zF{7HUA{#Rti)IqnTDe8~>?&~97xr+}<0*oB_1Dh(>cC@=brfmQ*~x=Q9DdJa8d1!KuGOm4(pz8&nFy}XG& zUwi?!JM3S(oImVktF||bPq=&*cjw63;>jd=gA5j&hDGo$hKKN)@8EiJtX@rWd~ld4 zfw;U1Y_~nGM*XqLh2d#`VZ_GY%G!oN&yo zNMQzZmPR4?e1{S%W9P_~qeV-hI1zXjw&0KV>!ia3hvg(Mlm!!X@0$Ixf z@*u?IrW3d*96FeqkD+E|K|+}qX)*5pr>tG;Hr*)!_TJAmu%*|s_JkLd{Yzkk>tuZo zL7%6LNC9Uu3o8vcFANk0p{LF@9N-vrPOSh*P+j=C()DwBlg0I-uyCt^(Ih=?=aZY0 zFsda+NXsDUUNryCeCjN33ziBT;F!d2A?`lncFky=JW7Jtj4~q8w~9t&GD(4mGmqPN zGCHYFM%UkrPTGU1z9=e{@5@xL5!36a`%fRRp-QrP<=ZU#?i~`Izi1LD1TqxMp{y+b zxceii$;cy~#dHR1o2B_-ZnVXhiu>+7br1-&J?^aD%?Py~AWi@55m(95ZD6b}`X<|v z(EF&31lUy76?9uYi}r;n98RrT#H9Z+NX>O6=gDLA2&o!ZsXV)qBB|tBU5Weap;F0u z!?n-&LRt|{oVx70peg>JYmf8a!Q1FL%rYaGzpJOC`iiyNH=st@q-Ue@kfv%lIv~Ho zKL|N&jrzmai3%~7Nht~R+$YX1Vc0SE#s)8C`U94g!qpYgf~@QsOIhz@{3GmOHvKj8 zjpc}_m*X#Hpi>ZYnNZd6S!Ka%c}rKD9AnejpxwS&b;U96ysSpK)?(#2uo4mfe7tB5 z?Oki_mY@391|6A$_)sR#AD6HtT~sU#7G@G_{8k(HP>O}GS2@RI@W_v~0ZuGHzx+iU zR5#aHuLg#ws%YM66j06@b_`)P;!X9w;UiBA?c`$3pujzgdoUnks!#g?L-kQ;;2qPt z`679z#k%okFtPge3FAC$vX^}Uy{-1Msa=T4{vhixIVW}Vod+G8$L6-j`cmlqTxz$R z4x;{^9lV+CY}+w1y_`Hz{X8|4u1M@_ z>m0uuo?>v6iM;=A#Dy1Hjgvg_R z=M%XCS@=;oq>MbOdmedokx7;LrN}*e{PUjqgG5>-`jMYKY#;iy(N&STt95)9c0ksf zyt)|CPm(kDQvzvs?yLJwsapIm+K~3Evfko6vC8!n7Up}i<<9->0YCxT?ZUhLuQl17 zxKd1EV!0?ew3T@uZQ{&w5dxHJjn1QmnXznHQ075%&V9F2y?VISn6<7_e>oZpp)4Lp zVmo8*(UiO@$7K~ckz>SSIJ;`dTcPciZDBSZo3j=kL*fM_c@OFJ&79GCN9ShWig`t) z)iV5=zQJxjeRWQK@FyXuV`c^{I9s`+Y3U0BGErqBq_)l#3=vIPWbS|X8?cBBL|zt5 z2}FLgnUAGS)p*5iruDkIZmw*7zkZPTrCSgI@-|dqe}PPOyF^u4Eppm-3_8QKCedd> zWh@PRS&gayb!5U{EORuuOlScv1oU1>ue#7dau0lvUPJ*aB2z8u~$ZZ>09B8`Exf^E1XhC`UWnGu^S3~XDGHVL_p znkyn@jPn)f+1s2Oc$hmIw9+Te6YL1m0I`snS^>laU?3b;XI?;-8S1i?YP{S!)3w@g zjHGTy?F{P|JA(P~xsT9D!^0BfEwdB}GrTemn5znapodEUE`fwRX3)mrfQUHiOk(WE z@rLsfg(ti>GuSu0H%APo7|kk;Yoe`}g~Wp_!uGU;GiXX!bV zq290<){4rxrx%EK`rkLj4y&Bg7Ie$os!O-~T+f_dz)}k4U@jEe#(D44860`+!tcC* ze0x0d2mqGQ_IRMg7xjH-Or8#`vQ8&M@9pvVf7cmKCqvbVm64t`k?}cCXH-T`?`zgx z(r&>ZjJ^j8X>MZFm9$hC-ixLaIvDDO9%-iVbGho!34#iG(znNFOAjOjzLZ4ABs!2v zmk!wJC(gYQ#P1A$kbyk_Otwgze~-?7hrte6aV+SWdU>sr1#v-pQB-g|`F0U_f)?tx zW?QMEo?O-IO6lL2nbzH6kS2sso|^QB1y#n(EZqsL%DiO@h1iQ-lqOt&hXW(|Szyh5 zkYZNb5Ph91qVENP+4G;EXO>1KNqd4kk-73$(w-)bD(@kPmz_>+&s1%{R&H04q8=;r=Jz2%c`vPgPMJ%zCx%e z^wZ~&MUEpZUw^(Q5>YG>UiF^>8TneZ{O&{pp-1ciVh(IzTBx^$N!&p*;dOC&?uL;^ z7Mciq-&n$s(1)j!@hbdEQ!YV{^VH^xWiA#wEo!+RDdY<%%kut)i}c{G^-u4;ep69{hs!OumAMtD+&VhIYle+YhN!ffn#_ zQ>rGSaAM<@{pLjcgbB0ClH-r;=H+d!Ik!_Y&-B65SGt}FFenszcijqG7rom+sl%TMf+ZCeOseM6!<{d)mWM z!>C*Cctt8as`L`<+;VlxMY{I;iyEi~%&nEnUN+C0t4a+mf6DPz#Y`c#=Jq!j;-i}MCpyWFMdb%W`vHgARy8b^Rvp27)4Wk7z&ZM6 zYMHLu%CYnl^Ke(;&49vcUHXF6Ch472&~B0%yiT7!2MMDF{`;!DNcN z@3>h|*9Qfx|AZH^dncqx$7_yGS4$5_ez|U)M2}1qbb=U zO;R%ATul+92y*^|pJ=J1tEd*TbS;dt(|O%A@o^M&`(LxcpstKDO6*2%lKvt^cgkO3 z^7pm#d({Y&|6x0SU8np9nEW5vP^?ouB)`!w267NSM45x3Q1aR}^g_RFTDna{scgiu z%`!-C8*3RX$M>=bVLs?&?G-SL7Wzvbh_E&D2cdDASO<(VzLHdmYc#B}GqzlFL^ea)$KlYZC(d+XU^vW_YMg2^uJ z;jo~h>`yXC?iEG#6?U%Bs~ZtCek{tJR>&Q%I_&%bssC(L^RVgVS9rmyjf(wEnbsnxHT-sl{`D>8U3UAh94UIDEA`u+woiFUW_Dv$JG0UGB zmb~)M${(m}@KZxew~QDEdcAc-sg3|F!s8p6y3BC>x_9W!69}zjGs8|o3og2II|9*r zH&eN7JfU2lVdtT{u|^%DN#pKTk?m;xkwc{aEjI#Y(+G{Fnd>HOf-LPDSS(ed)`JvO z3pm*1Nf|8&RPZF-AzT|S4k4ckx2r`J>_OOncArMygd-DOPV~$=xP77Syr3kTZTl4m zW6_qzx7+=OSp#Adur5xb?)&}n=x?s@1Qn2f-Ab5vVn=^`XyoU0WfIo&g`~~ zU_b2t8M3zG7+a`bV?biYbeGO8!>Fhb63R~DHm^vU4h2nW>Wv?f#tIDrxePX z`Q1!Int0H`15~Xz5E;ZYf z`e%BnHxClfxJ;?-=vg%rJVf(n~GWr8Wk257#G3>9AeuI#cSj^inHysfSIe z7ZRm(*e-RgDOHeOYLG5D4J(6B( zm@b8hkU;**L@6D%Oa0Q6x+c9;`+)+(Rnv5->O?6Wwo6@LN|mLTdR&+Ky(u*`QA&sH zQs9AdDoGG=Mj7ezha!U`7GNr!kZO^g}+oi^sQg@}7+Neu? zHC2!6KZ#O0Y?nIKl&VWFb)zozqA9f|QA&sHQo~HCqti?MQkR-*N-av1(qX&Qai-MQ zWK53hVqNM?Q|b?iQaWsxI@XkWDZNy#E_H}06-<=UVd2h)N|92hB}I53Lu-a3&aHiu z{Bx9_@XxYfe+dJ<>^cF^z6|jR<23`F)dILBSsk@mGtj@&`D;4!&siq>8?Q+A8n62H zeVzMKle?i4_xz@~Z-~18YH~NIS55Adb?#^rbi7l6M@)f`E}%20drg^4(?V0H0@F+Z zziFXKO*XmTm?EQ%HtgHNXj9+-(}HAB!%Ue6b(xyZUFvNLe7IbX*r9Sw?y05)(c^UL z(q{3=5OqJJ3q&P@dh!5LY}Vu5tPVE0Z#B6+opOIws|UN>et%(79O~;_hO8>nv=4{~=Yi$_;gMifuBqZ!^AuNPd*8+J2*Sg}MU11KuaBFNImo({PSsY<)N|pYB$_!x46?gUcxn zb?(Y+2ZyS$Jj>}JS0ulmIMUGtBl#mZEjH!mteEM+Rl_a$;XPTrY~(DavDo31;Y%3_ z9iYln)jCYIx+2^DMxS+vbes?-IC(RtAm$BY;|zM-FOWQqZS^6VEsc!HiHt!7?mS6$ z{7Coe$P6(VMKZwsGRLq3w8zhbY^k7tP+kbVmyr=@;ud^KpDg^0*GL@*JEF`l(eBbj zb{D%KIV(>b9@0bMZ$#Y5;Rw<0T(JP_fpZg`3yq{ltG>>qNB$y@ABN8y(?T^%)XOhv ztxSK}lu5>}#a;W7Ad@7%^-h+f)hm1$pFH_c(`=npk1Y_nxbSC>Z3-i*O`T&U>~<4F z^3T(nFtPvL8_BRnXB)HM@FfMj)SYdOE-YQIHGUf-K71gJc7b6B`pVZ$<7&JAZ4YC3 z%@bc%erDm+&-}xEh12?>7xoXSpcMM-Y&>Lh%P4P^y6xEv$Lv!lPP=-uYmQh`hG!LK zyR1tYy3lEMF08Dl|a}U%c&vm6epgR7npce4(9Idfr&MJ<&}}{>e;h#VdPXF zE%O-2mlKy`Sf=efI@BlqIIb7TLx`U`$?nN#;54zrk%= z<~8-s9xjkamJCh9BWiZ&YO5*@=s5=Hp>qLON!)a+p9BmBY;TmS}plUgU5C2Mflo<#Q)N95Q<8F^%T$55lu25A&2Uz|3 zc9itCNZ-oEUn$;XM4GU&;%4o0j>7SmIdQi24PIIAw(X79Xy_KLK6FDm!?N_4?x-l1 z+TwX%nk^1Ule&F;^APGThkdkrdQRwPwQJ9N)Hz7Da543=-xyeXreI}q^3!z`&Q`X; zNT*7uM635{q2)Y}tY7lm!|7^?Tw1P^#lrVeO@N7=1PWiu zqt3+5lr8)vkMoX$BTvuN8$oS@>@>Z7I~@gL`Un~I?#4R0MEu}r-B0w+qC#qt?b&@! zz07i30C!3{j;~fnQG;iZP`;g6Il)|F8)yc%w;Z{+0iGQ|u41F#($P`aZ5b(7uETIpy&yjFS45)U8Agy29*lMJ!yMing-Kuqj`tzMo7 zF)*IXf~ig$5-SL--$ZJsI9T6KzcNLxgd<}p<0h9 zHp50Ai}iPsAz)|T6Run2P!kF%5?-{OB5YAR_^T?3LaQ$Qam{&OVoD{GHBU0l9$qu9 zVzaAJ)K=<{^!T$XBwlRg^_;6SYJ@0kkRi^L=`K`Txh$;Dofk+=;F#(M)RM5}phyF= zMBO2$qUnIcYx8coekec_b8$^W#ma^d$lE>U6eKAFj575ajA?Y0YzBOqr_zuk3LQJO zwc>0)(NeNFu~aCBps80H>$I6#a$no1&HyijY=q?q{mp8*bt89Xm_b^wkI`xiNanUo z;@&3-a^Sxa`@&?=KSlU&!#F`;ExqztuA?ea zkz*6ND7SZ_V>hTJ&q{Tp4iXlHQ{xh}Y9N2$Sy?|Eu*)=##RbX&ooHCYPo;>F1t!sR z@$J@?-c(!Me8x3Kt$M{92M5*Gf5k9p^`jW*T_wnH3&pV16By}9@}2|L6#Nxeo1n)Z zH3g0QTVq}1#oZeDob}HFE^)Lur%6Zb5dzkD4aHmq-CYHE^o`bdmNe)z|3L-OslRdc z&Ttis@wj?d6_8%y>h1Fo_7W~3TuazXxQ=kGt03&;T=jh^xx z4v8wue6#l&4pVgT*sZ`}KE^NnQg*>%-luy}Q;QvZot%_c1^}6>@f(SjA6xkmo+(V` zhdSrE@IHaO@W|dUnd>AbQduk9P+($p0et1k>WNi-PmgBzs_Me`=X=MKf5>K`ULJ7( z$_yj&y{_&89i`(k0Nj=a{N*iv*BBlSt1Pq5;oY8peqG2{qp=H3*P8 zNLyqGGxpOmS=i=3So68b_UyZH-sJ5zyP;w=MfNzUmWOf%(K)We32#VGge_woy`8vY zT=HKv&UFIDp4*-$BZK$k2|~aJ#}t7NwRpx2{t4g5nX>lT(1vG-hYNuhFp9hDFXATI z;ENyVDd^$!e#mO*K&!%|Ds&o*_y7d>!^jYK52uh2b4Z+_e1Z68sumh3eM#7D7bGNN zbCN7VE*IB#u);!x>fJMV_E}{1NTGUY39p4TxBpGB1*UY1`g&=$!>2D0u*2tZUxNnc zH2GZqI9yFJT@=7wDwbv3Bf;LUbUl|q+@JlDZcS7a=^c0fg8*dk2%6!*VjMPtfvgqk z@c@X3j6&zNzgWAhT*#Cy%7dR9%2C51+zT)@d{jfPte%|92>~ADh&|0ambL_rnMWrv z9KL)%lrorMN z0>GjlO#+Jv+Fp_uj%+||O|LVpk~E;)Lj?vXzc5v;tu{c}QfUL_Z#GbBg&Na>e#t%I z9oEoe{r;P^QEai`sNFYR$_+NIZS>c5%Zq2Sm7DmuyBD!COWC3#vN0>MKO%BI#l|Jv z>Dmj-{digLQTGmg`!|0HA0=<|5cRoU+P8vNjc#AbfLj(B!OyQGT&9)X!$nShx=Ub_R7N)fQ7wQU9O7(gg>7zUC%$@ zbLxyZUm%BcJ71k<>e{ay~`Bs?)W=7qXSm{ zg%6H#^3-<~f-M6!O1$26?M>G39x@+&*tAxu{s(9`ql@EUvM*Yjp+03Jh1O_uA~DEZ z*8Zl%l&&Wb9i7qMYSM)ksXGR1ee2g3Gn#1ri+t4CB!hQ{6FzDf;s3BunACesmeG>s zHJZ}2M;I(Pc4@X&ybDqpc8*HyC#mTbJ^l_Az@37_Od#(NL{+RGcydSWFc%h%|l{moY zl276mfRUhwY_z@s8@mUVBC(dQ47kR;D~N}|1|oe^Fq8Enz7Se-0_9&#g|XV-`L)J> zhHY$9%U4c22v8%JXr#}Kza|(TD1U!ydxt4sy*LN(wSSKAz1sf0zI$>_>2qH{l(ewJ zU7bq28^7bX+AC?{Y5~z<6Hpx2oX<^z;W?oTswa9!R%bQ&W|!4gV(2;6=UV739MzLa z40=ZOWX0khvME;V3omMbyq+{PNE`X%0Vm!f=j=Gob$sJ%u2geXh*ncG(u#h+(fD zHK}Lo)RT4UZoO$#Tc60dF~inj?y-Ks4vcHpK=}_-r^|31l6!b}{IYJ5xL@(IXWaeO zFQkDDlD=7fM!L&A#{BPkNb7HzM8Y5Ga0}t;@+~1J?p=e6tF0|U!iob}4e>2WwrqOf ziQQd^^}Ndrz7#DG!O#({&P(4hV>Su>NDw&v3XX(t+&!B{*uT@RUso0^@vD=I3FoceW*um>p{=I_Q^F0 zB4>q1jk%j11*fYwNQhmF$$RJ`E5DRTwQ?a{W`O4}5q%A|531o*Ariu@OW>mgE}l| zTP91{igJNVYnS%=#c+IwKjMCqjRGrrz|#usV%#C-gccKKpxEDX9<%|49I7m5AAX2l z(Q+2*Ux?e9_K4jD0;|1ez|nvFww&!mogdiW!^w^wk3C>52!f8G3BU)+^B1!*1rM|u z+GHM_gB}OkIqDwHVuZRzwRNm)>hPRV=O695UbVl8HdcH_-R-eS8G?6-FZn}uKKB=< zFYo@*d|$ag(U*!2eL1#6U+#WP_a!gc7dZh*_T?zM?xX%HZO^jXw!gG}rk%d$Ez@SM z4$FGbYf5NGq1I)3ME}5S?B+dgW`i4!%*L3liP>oOaUF}ZTraHh|4&ZkPBo{ii1 zCH_gmqkhXTaR>J2)j%%dY$m8qI9L|J^-eWd55akj&duD(Qbh~tHG+GI%$j|+B>giy z(?n#ZQ6qmx{aKp=;gRn#Uzq1(gNKA~%*l|;TO5mwm4X)U1D4Z$&G|QLFHdh!=w%9_wTE9r;Sw&- z2z86Q50U&lM-hmx4Q;VeP&5Q-+5x*CHx(7wU}i+&QF}lYN9bVnAuDR}q4Y}epoT*; zGwN2k0hG0=I(m|yCac0D-*Y66EiYPJEO~233SQEarjSd;eZq3UstLnAO5f>J;(u-d zjGHbTIskgQ4*~@fw zfO`Q^=P#%g!HN56ZOq}KS~G`*(zbS?QvxO|19!|lYcaKYyT$n|_)P!*Ai1pp7to79 zWK>`Iz^6DH${is{!~3EOMU#qJS8pv)G`*Xuu;9Z)QROTaYRkXF0_8iVorl^2aVxwh zKJAP^wC|2U`D;@v<*w4(0L?yQJ*hgHy**Vgok`YuEVZ(jy!7PC*MTlX{35C@1uNaw zP(F~mNKJFLd7m37Pg}*CEfpK)i{m(m{bqjFyzYT`tLwQ^Nm!#^{v?A{6ztO}okY28 zaLAl(p{KkJKX`)O_?sJgSn9}a854KF3C35I?gX^1#`ow$L%Bx)of~peG`2&>w-7J4 zpu1N^PL;m-;@L$uV;+-i@udyr7Y3h#)+<%+SEsQg_r#O z7+?N;`rE9BPB|M0u^yy!Bc3Q3f4sTKTiGm9#bT;au#X@P+`KI{uP0|J+8X{8S zE6eC|`KW9D%vQ=H%FYl!v|E|*sSdF$SgU%XY*}Dx$e}I~NAh%MFSNO~G(S&P{+!!; zI#`3jfx^=CQhlC6b&)@XNMU8yt3wG(4Lo;XTQM8CNU`5Y79o%95d~`L4r$6hE!6Z_ z?=5ln*JDvugzA-yLGnk zBl2re1%K)zv*p;0&y`x`;Jo85Iuy~jNdw`BrohfQ7Rv;yC34PTUl-jTw64p*&V>(3UEwB*bCXj(YTZl8={k?H9mZh8`Z{2%Ho%Jlp^K26b5RYdl7D17 zBF>iEm_8o&9HT+0{ZFU^fr|lhumt;datJ)nCO_p5m7|JP>OJN&?*9AfNqA~&7J$lL zY2`p}v9?5Xqk&aD>AE8SVerV%Nvw$|^nbu7!V-txULke2HG z!w(M~FlW8hBHKrJX(k8Iu7%5Ehxy`Ja%9rewJ-zE5bz{Tnf#O-^+fkaa9Lg--pyXY z-`vn5otKPLeu!Z()1GPl;CuN(sekzKuEsU;BRpJZ9-hlH#MBb|TqlX`OO0%4HL|5G z%ZX?CG}>5i#dNm#GI}^X__glm2w&rCp~Ij(I63rX66KMtqb-&l0ro{mH4XjFd^o84LaWOol@AP`TBu`(7k{4<0JQM}a9|kCXz^$Mz}AZz7?@uBrVf z9l1W3RTVjbeC*YQ!qa+Wt-wU1LiVAj1y{AtfA!f$1SMXHJ;($%5rj$&2#?AEH#0(g z7k>u`l$Sq-7d)9?OfYf>E)G8)hZ=J|XZ*hMoM4~$GWt*un79nrVFyj!TH4eszq6XE zEdSCR_8{4E(tHqVc4GEcZQ*J;-?OspiJp9(tJBENB^Swo8N<-Q1RoZGECPnOoJK3-J$_b6PI ztU$J%BX`c>Z>0*e9P1+|ow*)n*Ln*-Rj1{k(VO)tfH{~7TB*R;G=wNGrDaFO;z31t zq7I)XjDO_x;Sw=ZBBC`fP->|(8_o0iG@t|4(yAdXf!B5ih9KX(t;TvyO<&V(GT%>T z{YVe*c3>wZZOE{=5o*T{vtu{Pbf7mTzi&~2ht|+(T*S5)o4ojI02p^4Pv>P>M+1Sn5@8<>+$ClptJ?HhPA6^=C`{;3;No&rmn%EQ=^)(Gm{ZI~uyxw`w7L_s^>WSas zP>C2gUP`iYihFipgX8Xvl~Vt0de+2s&wLy5f&?m?QOAs)jscmZOP(vRh&XcJ^$mGjZcO}2!FoQ7AtJEBdH;Nrq2IEn9j1!>!1*XPNAG@!QdU7?W?#iBhmtjSmWB3~V~eG3T@GbdY1J z5n0%X)>p{%4!DClA^Fwv`ETTyxf*Eu$T4*(IfmOOMvkc#ImTrJ7YL2qzZ}E4Y(kFt zbBo!0?&7Q1tsT2I9MZKo^P{qi&_^T7Y)FVQd(!u#K%}3D3o_=M`S@9F_RVv|yYbd+ z!>I#92b4CUTlD_h$TqEhYkTY@k!?01+jO5NT)ykM<6zyvfGrzku7kZhCX*(Q!t@sn z<&)lq@3n06eQxN_Qb%q}g^_L6B1oMIG5eI!H=HW6&8b?pX+^e?__f5_vdv)$*(SXc z@os67PAihmsUqpn{}Z*OvrQzOF$qa$w=L;xlif-o>F_#^RMxE}3rVM03p(58cSq2v zLLd`C$A_RZiaqjp5p=%Yzyc!s!3;KUzKC}k4#+tMAhBE$5V%_7-9*Z1ZRc*gEJmqc zRvtnQ?goCAkkg5$dZ-JY>i3$bI?Sh0dEIi2%Do!mIdb2_6m-(tCDB(JwbzOqB>KdmtXH}*-tLQZuHggp@DkYOI z%h8Nb8q?&<81mD+R>qLd#r|hrOXTzY@LJ6pjZ?hVzOB+(zx8T@_sV)Ro%ixKzWG1# zUKvAvChwIoMDt$LG?oe%=ZhHLD`SW)pBvtbe9#t7DQ;rdglfZuU4^N|#Uhp`?Un{? zS_&412WNq_Lfs?IFX2D}!?Sp!OPDvj54yLa2~&UTp9vY}bgD^Q6s%LtY|=5Ox*wRa zg<$HzaaEYz109s}DXJ*l6zj?M#v@@o`@x1rrf*PZEH<0jI(1mFAZDA?w;?j%OzDL+ zV7jy&agNcU*JW{VB9XL}i7aWw9Nb^l1 zSzeHO!@<1va+Gd$o%F^jy*n--Z@8j;{C2JEaFIfJYS_7p09O1tc4()q@3KCWBP>fX zqeB50JbHfC$P0r-BaaJuMve#`juMO$%jtdau+D_7Rh|q%nGJ#R*3erGT)AJ$(K(|vx>>}lgJnS-c%j2->$_a=HX(etyU0hhj0ooK`rHqO=7R8Ra~ zoiQ)NQ4^h!QJuAY&NkP)LSR#cV;xtxmn^dKU9MZ5{Lq`2Fx3+W%Ng5d-Kni~utwO? zR{iE$n|h2RQ(>3ktsFH&c8!hZ9f_R_iRvEw5=u%pQmU-gst(0~gde2}KTCB|3Lr5Q zYiran%}$Fz>}qV(fM`=g>_S1pzBr~|GBK9>Y!T3{{7R9C-S3Z(na5(mI%%ZDhg*&b z_G_1S6v;ABXL*7w;6h&lay%KVl_w{=RarL+(p#gpt)>`)?6tFPkH`Rntv z9j8lp$p{8W7YJh#`cHtz!J;#A0@k4td=*6J_gXbeE41uqW~T@>nklH7eC-h_(8hDE zMBt?Cvb*H`y>sk1iA|H`JH29c;29(V*xMRZ1hO|sTk9}i~`?O!2s zhHGIKqHbt&I(r=*WVXtP^ZgfO^i9FVRD1vxL*`3^Iywe#Y?0SsyuWc$P_v0ae~zmE@XFRup!?QG}Po7mV7_i zRP1nFq>SI~eL&0pMN{$T1qlY9x{ArxG=3<*gvOs52xny)B7Xo% zIrUsAAW9?hEnsTQss6+u8Agi8w?TY9Tlv#OegtDn5&5g68`gklC_CSvfo%iX6yP)%>6r*)R=a17pvFUt29dIAgMZKNre0RyJ>HOJ9 z^y&?!g8}VWVPX?>exnX+I)4i0GfY4WF^s|4%6ETseu!j^IPaIj2|9nb4y4ifUrU6Q zKZ8%)ok0mYBXquAN31(pw>E*m|BcQcYt#8dK=})UZvGw@bn$lt3Z`%@Gf=)U^sxkm zvik@^*}nl}SX?PeRv%W!u?ml!(HCD-nz} zsC#}Dqksth!cfgdQ9lqp!;U`Hj@|}t%4)WoacS=wc2lnK!+LpY8h_2P9cX-i)=g4J zIjg#SyDOZVAodO+_Oh~t*iSz!MeIMNw;hPRTQBf*Vt^BYRNbE1L>GmU3(Iv5$ zaT@KXs}UzykZSBF?LyZQP9yenMF_U?XYz@=Gfzqq`)eiM5PLc9B+EHE%gZNfgcw7h zD`M}FVjYP6MH8}qHnG3qXA}FG3%VlqzmnK4&;P`~WeHCuTS_~%)TXR%)rS*o`~KxLoi4n;2+1g5eB{U{~JVbvt6 zlO?{0!;si|#w<1%W9i}oj4-6-_yQ6A6jmRcHMObxH%O9JecJrH^63HT!x&iM06a39 ze@@}Qpy@6x2>XDzJ64jI*_-<%XZ9C|>kSlPs#b)l3BuA$ zO0YEM+*;;vE)eKAhd{NLJ&SL>m6*lUxf{yn85;b0Ca(!E!ethAcfYjUPa}rIcKZX- z{PtIK(RC-DBq^1yM%~{L38jd;FQC7|vmB*E`4Wmar&GGsIf=iFnSA+|@iXq;bzF`E zJ4NQ|p)DW+M{;kHKQUJ+TcjOo)Q1{T9{Zh~-I-++I!+x)ERPQ|sDF?Eys)Qxo;sx; zmedq?e@8H2{SfIEI|l!&24U6&Z0|z%N8OvnL z`NXoGj+dnKwBiK_AFWOY!cZAz)cq-udf2~^Rw+oEbR|bZ5$7dT5jklhe*wVRe0T?A zD4ks+x8GfNHb?#>&FS~%1Y^_x)z`ZYYou{3^=f@**2t|Jj4P{$G}X99FTJeV${Q?e zvxdX01M7XWH#@f1L?e#v&}tYbVnf?~=lSHdn#8|UeXR9@>PX+BYB~3;!3hs)Z7Nb;Tb_#rK(tv#9v>&~{u470EFcD}H$aEu?S>9;k}jNtMWraKeS^OKfQp zrtZ(p*QV~jq0^$1+2XU7VHE10cYx0|t_dalJ%RFdGxF5SQiR3mh^-1lZ_H@PDv?WC z{rqLUgE_93dh--m%(Imh6lg- z0fqGOA#4hK*)b%Ewd#W#WTS&!S;hNu8EW8l9Dy_mtxOySm#)V;xkvk%$a~zET4@KT zN-!-%(fsDv;75mT9P4uN>^uo$X%a|TL$^UO+WZv zQ=C5d=KC^y^K)yWRhjcL=bg^|`?E5u;%%W%HMP}4tuJ5cx-|?Y)`$0unAXj;aOsd` z%}WZfwU(6d1*9yg!=zK^lMq9w=UDTtCEF9Rm8saKCG{NL>b!6eiM)?RYp3hDLsD^f zCE~iL;%-gEeZ?G@c3ijO9yXqc-;@@AmM}B*m?-F)m!_qZrIio^vP4auwD{kq#pg&( zwa_tYntEd*_m^-QrroKRC*tJ1I$C?0ivgiKlXPJBZ_qK)nPT|a1l9U$yL6Yr#P;l-Y5TQpX z7mT?++ZXlj!m3iOWW-6+h~%DWa`qr&x5{W>S4J*B^_pr)kZN_UY*4$t>NFUslCgY5Ek9DD z=6~=>>kIEmO^I)pY|QEg8B}W{&4u>$)uR1d4~hK^<~0ctJARHPu}@N3 zbk6CKZ^|F3z@fe>LtW!;RQuN{9={Y;B=OfcoI<56t9n)O zoNWGLV_3BhskqdgS~A76 z^^$p!S=6MWK63PaNX1YowJ)ha@n~p8?`TC&NJS>3LguPVa?ug`nqn}WNs{rJUOSXN zS~c}$?Oe#(AyixyR)Pl^{Fjp^9>KHEAJ%z*dI)iWTck%5@e)r zgNDfqKMj+9QmP9wvOl17MM}DcNrIfbo&w1~xLT*}VgD~60pDh#{ktxNBqD}JNT=c9 zj!?Jo_1TW#1!CC33yZ$fO>klHpN0;Cng`-&_nJ@2XJiAcZsOuRLcQczkRG2#s<{cJ(;`icyz_dZACU7 zHgIHMjme8tN5*)lx}tmUW$=UvrUqA|P@l>uLFf?O56r-y*$ z+c+;JNutOp@4{(<3Yg`fcu&1db}Oq^`=pS@XD^pNuvyCb*L||B$!?pL?2}lNC42J* zjk1lQ^*K-)@<>B+lmj8u2a=hlFJ%0%p=-yh+ zc~g@x&@Ud~#&pLuyLeO?^&t<$`G-*H}a)qv`=S!P}q7*I(c(&t5Ivz%XFm+X@O zGdV9$W9iU&UgYet)4b?1G+P z-=Ounop9vRDarZJGt?1BhQ7QX966rpO0M1iblV3FaX=}Opzrm4p*CzYa z0Y|bqt?rB?_v{}>&a)fqh$H)3yM<;>Mw$_KH7A8;PR{D3=j1puC!3x7qq&JyY*y`4 z`^?8)t~#1MI-QojaZSgucbtz0Ufj=o8aF%>8U66mN?S)GTG9_bx-MfWJwMgII4}i%MU?G ziFGVnLTF6f9qcD(0+~}?Jm)?A$nb8gn!~&M1P7=g$(Cagb*K)=wUhSifvoDK!!(MA zdcthd*vVEGoj9t2D3`w_lBH&e@jr1R*_zc7=Xic!19Y+tv&QLca?o*O`tG#>EEG<&!%A zDGkp?B}bq#Dc>2-eqinXOgwwNumhgu5$qDrnpspf>>}zp9Z2EXUv>CL@od*_8-j2Q zIjY?b`GucQn+UN@Rr3UaFcgJ?Zh@?}6vhR3iWly(SpCruIgNH%T>y1d5TI(FD-Gug zuj~NM6wZCYZeioxvpk>I3Fn@Xh5X|<_rO63oO|QIG`OYXoRw??oV!H_Y@EAJ2lkJ1 zuOwEchS6h7Yr$c8ffe z*$HenuzG(c4vqtOX|!&hI}MiUwC>bo%h0+LbRdO;19kXEad28<6>ErImRQCbqUV}* zTtqjLi{yu1SlQ+PK6#}_sPM^dm80Ef%M{&BoJ0tgve zcVXW&Sf%6L0m(MNyKXvQT03xHhy4 z2tCY|yZzzXjQS3MO2f4p-B)o9qxw)mXI$&Wa{rmQw&j2hxYnOwm-Oy+EO?Ui4ij(! zDO|&gpAEwO?yE;~+?U)j`q=@!W8@P^tX+F=?M&D(03b?XA8wbyEp?nCd2 zFY5r#6yC*|bQ|xMU$YP1EtSRm<9PREp9J20)H@As>3An^fZA~Tle%38Y`mMT1N_;~ z9{bJbX%JI(KtpU3f&U6(x8U$Wh~3~Wpf!*Y+qx$sBU^iozWN{~{*Y|AJaIKHh0c{e zULD@kZ^lPrWxJMRM|_8zPu-hB*`+IDg$>Q9U{Gz;bI?#V;=*|s76o`%c`Ud%F1tD^ zp2TtQE52qp{{~PjRV)XdDd2EZrHCM<&YjwWuFOXIT5#>s0oV zWZ8eEmHndD9$!I+vei-d2c*cI#by5J={a(5@woW1nyjVf+TyWOw?%#1!n=FV=(Z@I zVKvWQ>IccS*R1fKUOv}pOXX6d&+;$J1_kUh1$=-Fv)k^zNH4=f)DdZ&xhT<@z7c#i z*~3Vc{T5Y>j5%5MGdn^i>WDQfM) zd}V?&MnfBS|Erf?FMaWQgz(6@>t1Z#@Hezru(gRh@_5!l^`-@*>G|pyh3&pBJCKIjF9-hAcc8eEpHo9X3}+^hsokps%`yC4ty4E(a9~gn z%OI~<1_cDrqJxSLew8sM&XqPLSE{|D0#Bx7RvhsO7SqCq?B$6yy7wEsMh*IPX&aaD zje#?&z17wSrJK}H_EEas3ppt-#}OUNdrmIDIGQbHd%d*C;|RZsAtDC|%kkfcAG@Q; z6_~hP$m+8UJ1wKm)oOBOlZ$I+lIwPIMf32Lze0RFt_2{*K*+uh5j|##h`D%DwwvGr zvUV{NcfZ_I<~}%#82#{|wMxv`k%+mU5_dmjQV$MTTvA-CdTBVUg;IU}wLl?OEU}8; zarbFt1rJ`v1(emoMKSkDCgMqn;Qm0momQP(gh?7}$t4)GjP)>V37Cq6`d~oqU zIUiT*o+Q?hluyuMQ7Cq*?uxYPw6AxjSFB&uooO>%XlhKO!X4>*7xnhuU%gETj|t3a z`l>T^|H*n6Kb{(XhyFf|=|`g8Nk6~dOZHc~=ztvB^n!eWZM9tTN#L6F^~m(TiVqy=Zhy6a`VKEtdvvv$ zr+(>D%>~B%$zJ+RFIh5~rk6L8JGP1QM~}BLe!VmN;SZb}t>hlhDmh5PuahniT$|Rb znb^(A8k0rU!M}8&{Z@#F8yOupg)bQyHy}T8CZXMLGk~Vpo{lT?6kU1YmZB zWt8i%D=Y%&@()iEyV)M{lVgp&wgh&Ieyvs6tf}Po5Thbn4fK@R9yaP24W9=lvOU~m zZx4ag_Ape#rsMW-&33kjKkBl2d$@>RB)13It7U0dk*R%{4%pkn<=B`Au)Jb8S}UYO zKd~ZwonXyshD$9uare}2_?_bELkMIZv~3IWDuQE&^DoNy7Re~%?)#JFMszIqc-Q5q zKUpHDV~OiKmk?Y_vwNuz-;g=N^&GZK%eXKdg84c`L%R&_r=6GmJH=j{jPQOgO)B9o7DQA80WUt_uQZ+V#{Xs z4{owY-S?y0lP&&@qr?(DIGm_^b<|q5)I=RY)LnMelP2l_qVBMx?$c2rj2l(~a;#ch z3!CegDlQ6aE~7mYqTidl*Z0)iZ^HV}&`0r+lDrESeWIvDtlMXAU8gqz=ac8!L}E@8 zw5hW6BO%Y$j!Nr0LFvO)FT`hm#G|J3wKoo)9UEt*#H>k~t!DsB2-bdU*TpES~!8;G1f5V}^rcU*!vLtBd8R-W-Pe zEhWplPHULCIpL46*H`n0)%zxA7lH69yftqRlsCKPXe+3w`xdPfWE1{cJ&%DMy>K;t zP5bIaTK8KX^>4nsTlF+kFXK1lE2P6}#gE3~7bvF3i=b8~Hn}qHo9g|M%WjiskGc@^Nv0<< zrhjBiVPuS_JsUVDEBpf$suf?QpkKr9NLl+BGVP*92h$!rfA-Cdu$K>p&V+i`6;xWw z7dbri9gfoLTkNG#M(TG}HqkY&Y4!9x&4WDx9rxnO_kMA-@!9w6MTB8!E+)DC9f9re zON)Y`eEG}_b@N9q?;o3_&x54$VBGzSETImr#)rr&bIcJu2fbn#aH5?umlPLP0B3^~ zXBVBtUtII>*I#soHWbiy0s^y?Z9rAG3=i8flUV>g$Wv#KEu2 zvs=e-qQR1NMaC82hC5amcR%IOdsi`KXe#bLRoa2bM1@+&etwD&15_{`;Q(hZ7pjuH z6nW7vMXnRt`{Oj|=<)l|pm%st#BeN8bWgJ6zTs;Vpd}ZAY*|9TI81pD;uAupsFus> zW5E@wm1KQh6Q4qL2EQYP?QhcE`tU46e_RRrb9r`fy{c>IK!1Mg0xBKp&)RhQa}E%Z zYrLFtx#si(VQ4>t_SvSZAU>ys_M`qSp2q$goLzb7_L!TtI8y`2LB`+d^~WAe4X&O8WyrzlT#WMXmb%H;Bg^8DwA?wayoNZn}-F0oVoKuXdq>Bq^BKVgXWTQd@i!vIC!7dN7^auT0gt>7Y^60dkp!}RCm%otwVn{ ze{aTqA8mA`KQGxSv;T+IPm$I|6t3Vfb1)Sd3iP&$!hiAmrq&8^XNya_if+&#eO8v$ z=8IMextW+9$>Jo9O*JyMP{Mh!lc6u)QA?Xzw3P*bvw9&pt0k&Ac5vK1&?MeRqE7iI zVSN&jq()Ce8Gei!CG}nEXqW?5i_>+h_yJjQ@w9rlTL$>_bO8@N%PZA}>_uF}^k_z4lz2m&>rpsqk_~ zxFDyYowBTjm%EYd30^MFd-gxV%k{mn11+s&Kj}nEJMeP3-*)f7%ME43wEs_3Sxm6- za$oQ$4ZUzRLRKAW2dxV)*Uq;qUas=XG+u7GWY)ag5`JlN`kYkq1fg_Zu0R(`@p7(4 znRnsfx*_8wDC%0(gdPoeOw#;Zd~f$Oe(vlf`*p~cpUuzh9-#R-E{;J@#Y}BXaeFQ_ zHCbothp==z+f$Qp1HWPEs>zfjvHt^0HzRXjmTrp}Mj66-8_DhB-l8*Mz1$PKB1zgH ztl>R|xcrs89f`{&cFJv}{7mNNLtJDENIKKiF`iflrmmaa#8LY+{?TsJEesldZsV7k z#%-=HMOHgB4q1)ZO*{d@bR7BRcFONa`I#eET$y6m7Cb<1*p;BFZ>eE0VL!sxy}=dW z|C+CRd#9$ewUp5u!sXIVI$u{WgyH|l*PT_h4?Rlpb^qqRuMndFbipP@AD#uq?XrbR z;p_g`146WwQy;_EeMyl7UpJlK@O3Np&)3bH-hmb^hC%H_i#qUiHv^F*UxzWU5Tc`K z-{$M;O)qS|Zjy8!zOIgMSA5+I+tT>Da>=auy5sqk;_C(x(uBz7>*i7@$=3yM7M`wg zTZ#g$QKz6%g91&|Gba5_@pR*oJl(y#Mg4Pmy4*c*{S`%UbTD@9na~x@&{>+>TBA;* z%Jy6SuMAzz52F8Y%{eKZp)0l-x|*+?;M(gvkzVLv;?Y zTM(~59jVTaugtg`{)e`mB0eBZRzP*mqn-pWw-j#cf8*t*eW_{8)(=y>oI@(syxcEL z;#v|lFZT)Ij=bDQP=g<%K%#GqyKm7$7HwlTHKb`9L(*)zwy}K`!jvtK8sDk*i>S5C zAu8xc{5G}1Ybr6N+c@tDMCAxetD>FMcX+Y7hL26IO3#2?Jp-t@pKSwvJ|Wo}OBN%W z6Te$VxqFo8nrU8;)_GfKOq${u-K zD0f6f1}FJDW5YPM_l$Bq*Hb-=zD2Yu9wef9{-VR>Xn)`cTAfO9G_dGmw{O=|aK#4@ zj%_0Ity0&&gVLrYVBMxiDI)xhyqqg0DFTO-mr?V=bKZj z)aRQ89>~lNHJ(oTGvpzlLwka`jT&)Jv&xb7h1>cO}K;4%aNUci&uh1l16cvhP;Rvxzs zSg)0?XlH9n*dG-bKi3`~x&ko*LEbn@$tJ}#AE~Z#z=w-7Fj~{M~LQ;~h$etML-S zAFsU0^Jd)r0=9_kMpLEUgUesJ8UM_!v1zJCS3Z!+rQ%D)sT;Vi`02Fy+(DXk`7X{;2^q`E*=DG{sKj5$6>lC!YOcN2Smfu@KxlA{}$H=nn>1 zt~;93aP?$}K?+y*@0sEd()oQgqS|9aMpB2OhfhY+egojEH6?{}@ zT^~?w0MYFKduHyvyLo`pzn_m}@7$TWGiS~@bLPB8Rd2Tu-B)D<1{Q3xpf+9uSL;?3 zjMW&uUmHO75B7JfD&oA`*%R6qJ%7b;K2;^r%kJgfRM+d{Tt^B|1U+(x>7kvdhvw(n z&beRe_1XJA5{^+eZBVXvZ934T3mqiGB{btPbYNXApOD_T9W4}35Mzd9&naes|8u^x zz>?w5BTgIdh4yOVXx67Sh@*lrSPbfU{Zp^`94`R!tf+4UN=AZ&0V`ZwQU({wEjJ>(z3P+wZMxRDGK41%pUhcFOQIkp%QlO(dr#eyKLJ zJ(hK$`BJB%`kVj4zVn5K|BbXTR?d9kr+u_!NdVfzAR08V1IAFFVaU&9pQ?7s)vj!RDlECdEC7+e-|Xl{R8{Y z;VhA|UkbF&b+X`ApE194=V~4YHFEp{?Z?gD) zgv+g5^`-Uv>xw>Sx;Vibn*U8%=y=k@q*m}nnAXJ4MTR-%J=yt8@=dP5Q#xNAz`vNBx%L{YpQ~? zI2Di3EBy-N36-uYs}v6&Z%Wo$0v&*mx01;8I+agqG-l>aIapD6hVR_al)8!#%HM5L zH*b4cN*{H-^?Daj=KhNfLA6N_4d;jcB*-tb7TP20Rt@lszR!-Ta@sqZwxQAK| zKcgY3o}L#~neJHCZ#Pp}&Kp5hLD8P&a+9}wS3Ry@`=>A{$?fr#?9W`yJOXRn;=!be zmVZMTEfQfs!_I2@X2HJ-l1iN(aSA6;7+M>7>IXTZ#-l(Gsni{#@JfvrmW!*Cnj?kY z{=@;r->54(s#(!dVL?ZQ13K!nhZMe5t_4ZlIWi|sXvM#Fz`ynYmmwU__lC!GDhV%4 z3C_Q|WXU&y14*-cEa>SeYFv<7)Zp*x`4_CJ^s(rfD(_uUr>SN9u_XITMzT8`CA$&{ zbqWgn`#lA7lYFV5t7g(;;g>n<5@8s}= zn7490NlOABo#0))zq9w+b(6|Moob5Ps(oj;l|@p z83jn=isGm)Jhqc2EZh!Ks!|%Nf)xkc%h#!=8d)>yBWp-hEY4IETz+iCEm2=)i^mUCJ{1shqgKj>7J^0udFSBbm)VCkaRg5I$0;>CsD zKzfYy9i$veBW05RtNPNbg)gi1Z_6QX;$vXh4Z#9$xb#ktL>%Za{+2Em6$rnJ`Nl%= zKrWD{{7~uD{29c~n#1&vdp`I#TUt{rtM8{m2oFgG25g&<8^8{Lw zeK$%D`2JM7Gq9dp8~#X3d4PZ29?J^LQ|0{Iqv)bAWMi>aF_fzO|J1vE0-s$EK^Q3thf{i*<81ey6^j-f)eM^^?=S4u{LJtn`2= zM-3*Wf*liCE1L{l58&+A-_>G2d5onYH-2&iY*e$~5{hS0?=VAQ!xZ{u!<4a3mAkhO zJ&*ZAJD$hHZ4UVyYtO@XMDw^B&ku>p&tU>(fm(*jRM>MVsR$M0K6_ zEv`C-XOGq-h)i)K3RVBS@c3c8RafBrBC2M}tK|7!@}+uk5e`pE0XbBohLdcJ1eS#2sve;cgn*vI*U#^Uk^`@ z9ulpKY-tf)x1BS5!DcfMQ9MXbuhY0ZoZCeWZ6x7r-ghOTL1p1i=WsvJX(xiH5cdo% zGHsSL;vTDUh{h7evPpfiQLDV=+PY8svxx=1P9wps+-5psetoo`+Qsn8Lp8b8w9sS6 zzBowD<4JIk4wlq|bVWb9YkmPFWkB;Nh=_AzTu{-TW$Hz)e{3b!z;4t7QfM<*TMkme zj;i{k(9xGw2=hXbqa9g$t8*ErC0zVaXi?upS%ZJe{d_rE=ONs^xJ*)`bt^(|mWAFH-SHq5KwwlCP#7pkb}ve&rKS#9iR=Cf;t8sK2XckSBZT6!Vwdfv zthnF|UwZX|q+#xwErQ(K?~7(oj?>dX)Ur$Ud94TMHTRelcx$?~e`zq34Y;mY^J^ugvh zPxZni7q<=-eK6}3ns74kEbdYkTU*A>kxNqf*OchrYlnQrA?!I6&tG{KpHUXRELL8$ zZ%zv5C@#S)5AE|0wgAwmQeOc8MNPi*nOQGprX$k@C7U-0&G=4=oWN+R$xMAbHTI%q za%#M-Yq%F_yA&;^4-z8gR_rDuIsGM)jO2@edWqS@kxkzv$8?r``q?G$sBFPr+dP z8@ZBZ3Cuypk@AK?(`n|+@m-xfioZ23#51gP`XnGoWVo#^w~{kPuX9@wsHlT;RLeOX z6h=BKd|L|n4=ncgD!TKSZIbK8z?%%cPqWMHZ!NqH2anRMo#luO$vu=4qhCTH%xXU5t zb2+IUbUvsWEm*dm&)Mso`5ZXgn$Pc!cs?U>DG{E??%KyN!@>!t4y~ z3B??vwyt$XefL>r)Iy4NvIrknKr|neg=7nIWX5&!I#FiiR!uO8|I^yZjqH?rD@4Qm zMM;QF@O$~>X=-ZxlezXM@tUZH-O_g(>G4!wql{v`HHtMQY@x4N>~y12I3^|vkWD-@ z*w&)s$#)CmkBg2|aX$?IiY&iIbX=z4)k<`{KjMgvAFnmC*~NN4v_;3cZ<rz@{0{Ue4XN5n_m$r^FQ18XiW7}ka)iwg>T zo0XgTp==;9S9RiNMd+>m1sqFQ6b}cbOOP(TA!U58*Mnth*BVRIe3hs0#C#DdQg3vbTNch}72XMz+tMnl68ljztqj65q+ z^v}(zb^_Kb9XR5yIiE6pf8d$=WuvO^#~8v>WBMY>$^Jo(aFvYcDnj7746FwOb40wo zt5JOSx23;t(Na0D-sP1D&P7(|*GT6^`kN|06Q#dr!DUDKyWeVsXa;g< z4yA5XX&ApOfcodDKTtzN!C$Iu{VU6d%4~{=Z_jdPsfdJ`8pMt2LG$b{Z6y#c(WQw3 z;apSV?`wl?yZBY!hG&NbxkYQCemQHaEd5EBKb3pL#kEV+)>>QDz$LF5^hR`iSwFs6 zj(MNM(xv$r&-pvci}Bn!tJit^lgS`{z*9}9bwq}1IxKxkN^Lq6g=8jIoqY*CPD6{g zP!6p_I8c?c6C7X-FBBzVxMK5=ov@tXl+EfP48d|nsaeNLph(2#Q_;j^{Cya|yJo3o zPO94~ee7OV7hM2zI!ZbT&R2A>hpu5VXV?Gab)o3#>T+LTtZxEKL$&(lECyh`%$ka&%-c`u1uP5c-nnlyVZ>Q}HQ zmUYx-Ef{l(zXC7n)6+YYi>{*!9IPP7UFSFms0Q6sdNKJ|#EXZ>Irx+gWA8BTT&&7DT%=tF zgORH|*zGrSxoy$Gnfc{K@A%y-Go?H9GlPLv^eCkF_bXd4(+jj*5B#eDaS^=Sg3RC zqf{5xSj8W0jSZIW!$|v;lpa<3Ikwq@m|`nJ5s_Ge6}y5HUl6AJad6@@to^Fs#O0iA zFxeXGWj`c-*kJY5YdLCPos28%t#QT*ySuFN4Xm)_ zsg=9N{qOPU3H?Bv-ZNE!^F|K$kEkm2jZF3ptqR;cvePjC>GHRW7-Pq1V{Ewl1?myg z>Pab>-3>w6mt?guitH*2onYBv=fa3k6T&bsuh!{{w>PVQtp;lAWSepUKQXb^ufc9p zs|WRGxvef*BJH%HvaT#IRa(oP-Q=5an$F^r()13R>V}mKD{>eG&Bs=e7lr%ocny2> zzZe|b!X1C&CGW05$$^pfnX<~afEK1%81+dPvgqNXy-*_zM{Knnr@)CQ)6(7QyjDB_-&N~8|mAnz$77m|avwcy&_Fv%*pEp&Ewx7!G*R!l>zRRD6 zi^$2qB3b_pWmHrMHjCl*ndfC=tXNeZ99ZBK-b*2d+u1Pp`2MF8`>1UL;o0#*qxF0} zu~6$G)su-uToe<$5{7?QM}@a^RCrxtq3Q7wDLNvXZAs{x;>Gi?7Nf0uK`$}dreU;A zUt4;$vDyw(e&Xh_+J49%OCf8-?dKruHU@h z#(w*Gre(j~dXu)_j=B5@?YDmca}({iA)XIyzy0z#md>`{PNVAK?YA#alT&?cfCAyXu@p}pTh(b?h5@SG2y;M-#=x-?Q)$s2)DI; zCMxWzIdmo{xFqeHrQrXS?q8d6k2}#inq5iS0LzS9Re07wCLCAOJqMk&){V5W<0j7KMNY&W&t=KK9GV)}-B`MwA0OXVAEau zyaSt%{UJGL(qAjB9AD}0+ae$4P@q5j21Pl(*Y$~A-Te$Ifds4W?L2#4197!L)yk^7 z`=5dWan)SI%T$e9bq_o#urk_&>tk}H>pc2hOFn2&b5PGNWnR^4Cg;l;IbjV*#1wpF*u8pv*$I4Afo z8E$#_w9#tnb25{G4|eKCVm>kEmNEFewMbIsd3!2CopQObuna}R-Bt%dIxxDqiF$}y zH+KQ8%K~3w+1)*VL$tq2r&H0!*@j*AZ81x4O4Q3e{|~?^dbx4HQik*p1(A_Fw3Tq) zKfVL8r(O!%>E)j5sOo)E$bZJKyp3IV>az}-M>wJWe4 zgTj)5WstfFnNnR(skZIjN@Gi_wMl*Yq$UXWqU$IPPZHZM;_xQB^jGFXXZX7595C)0 zxjzm9_{BB|0HvkacTd3;#L>(RdHX`*=XozkTq6Y4j|O)Y<=x!;{FvK`IaB zo9aiYC~f-bA%s2KstVn{&Q*n}{^P3($0d`GsBlcOKeMW|aIi1^72!mYvn-5%=23$p z)68+;LH+o%ZK_5;z3P}Y#37pOCps$plN2V{l3>Dd=eFtY*8A;OtxbQ0PdkX$l5J7R zHC2VDTBb}S@#~I^Y-}n%I)tR!mi2p zPW5e)A)u}jvB%jQZAGoXo6 zoFzV`Zgj+_0>m{P|K{*d_r3hSRSXjmZ6S&Tx6)>Hy=zl zGSuAGGE}N1LS1CFkDE7p>S1aT>SP+11-?Oq+ON%<^^a*0s-1b0iM*?3>k*(O+oZ02 z5L6T~s@&RCeoaASL>nR_j+mcn*o)HNMdov5oG+P0a+h%H6Vdp#}MJe+NF z%b{$W%V4Qma+19v^nj3>*fwv`zy1f?CLwx>cFpqO+y+kw&wC-uX^%RC9%v0ZvL76Q z0EV?E%L3mfbp|ag1LpvK8iSlMZ%S^bamZMXg>wNtsUIJ)1g;r8Sr$(J!Lmsl@}1ItOUUzV$_R1jHepqiwAW%-V)3XGT> z9yQoVRHsS?Fo|#!k*c*xazmjr)kS^4emN?#@M<9)m7qyXRepXYSS8Q8-$E=Sd=1c# zKVg+jJegphR3kH6k(3;8bJXb_6=qA}p=^@T&eo=9+a%M`v$e8GZp44=r)`pT@O*%6 z*(Bc)C0je2!C zBy~?RAMK!`sV7Q7Q8W57(4(m7IH%&mmtuG3%vZ+KiSMVY(l%ANQ#vBEw(<_+*4T|B z8Dr~r%fUYeT&_92Z#lS-zq8VAshbM+N4wlocbQOu{f&0*XHC@YGjFMTh<;7$naMGU zh_>M>@{0k{u!kHF#mE!M5W9pt*@4}eT7-$$>lv@NJ+WSnQ!iGQHWw2wP~+CmT5m8Z znyPNb!;xTSF`~*<0!B|Hb_bJ$AJ7evAXtp=f2u|3$W~82=nQ8DpTTAsktjb^*Tdyn z+B_<|*uAKlXEF6&*%@|JS?dXVlgq;yXOYiFEE4^28Z8SoNFY_<;}g8su8~-(b>48s zM=mnur}LwU9|V0h7Z)t_=W-o)vY5lOXd~w$!oVaNOd`Qjy032b6jb|qsowEH?d-;& z8e_N&^o@+Ki$SCk2mwa_(@ZIXZ2jKZW6hQ9Ofb?yp z#fQSPFb8f>xA8#>c*4V_=ww9vIPm^E<|lyn_gK0C-e34}B*5#VcKp>D_FuXE601FK z8#$s_{$*?vy5{M=(Q!x;n+E1skQ~t!_%(nm)8tOC9u-CV{Kr|%qrE+gd*Jn5P6vak z52X8&qtAQRcF|KiTZ6YA@M>kE_K6ixIO(FBJ=w+DL1gHUqd|r6(6ue;F889p3!b@C zFqGqKe5Oc&$@-y%6#G2rV82-!VDtE(WZHfP=S~+ zrQ6G791Iw>PNVvTerWNXC=VsA2Rzgs@E!(y_J_@*)2iJyf1?-1@Cx0!IvT{QB)rvw zcGrx7=P(ej`=xd2x7{>{8GeYV-e$M*_jJEb69ja1>#vz|is_?F`vr)eo*+X>T2Wc2 zK4xmn12=l=sK4JQNOLNqiion48$)%IqPm+2Pj?4uTgaS>ZQq-+!5ef(wJXv@;3c#s z&T%H`b;tZB&Taar;rcV$FqE9eO)au6(c{&xAmOD#C2x|bz`a}(^M{nVmnTwl1bVb{ z)?}Oeu51#<(T=3>OcHA5=PZa<;TbM-_ACd&k^3_CIdq8;{0OwOD*15N|cb)ZGiGTVNV)2 z)(EL;)JXJXGO;~CWCj44o8t|R&(zs5a*P*Nt8MSadmNa|lW()_Z3QM$$H2|^e)Gue zVov3u_3B#IB@U88lI$E7BoJP^s8$Mm_ zPe+m+dXxt^*_?e4uLAom&VHQK3pt#EFWFtwMfcsPK1UdKdV5bl zSiNoJA)&X|HE{l^|Z9rTA^g3J8 zb~Q1KHd^eh9GB(|tZoU8OIx&V?n(4h6+APV<*gh;v1ZVV zYK3xAtAea$Dk)djM!9cxJHu09FhZYa#To6-a<8sAK3u15fI0_?x$7G0A!yrXCGO=1 z;uPWUqZZudP|c`hn|%Ye^=cX74Y;?>z1-vmwV3!ZfW>0s8o#s;b>xq2`MCM0&CIpK z;Q{Wxs&nL2vM9$t-H>E|dWuxB==B42<^2}bY*LW4Yw0Rs)9~Q37%?$$W_t7W7psR@ zKgtn`#*6-^C)ih2RL?ct8@P=j+9+go1~u>5znf}5irQ9=z2Wa*DcVH6ZB+9KISpdki^e_ zbf+?h?xieZG}RmO5WWcdG^%YJGD|{Zkd`jaWY2nPCFxejq=mgnuqXFzOX&d7^CsR;7!|E9Z^c+zrjJ?~b3 zXZOk*vNLX3m@5u${@#2j&6l}vOtuTq`BUr1}2Sy`njM&zmPDXhDCu=7xQdqyN`UbV`&+@-i*Kt9<7D@3 zn6wgLJc_ywjL*>z7K~5f0T{y-4;IB?+)Jt?uquJ^liwaWjPb1P>wf7dw#zrGR)3sU z)on9S_l7-5-XPhE)pD$W?%Pr1Qd3=EkYAe|UUas4+Nv74=jPs_?GTde=ETrb~1H6MdeS z-eC6>21OQ!OA*~0eO>WY97e_HXRsZpFU~WxtTcv$M)mO126D#5_=IRi+I}pQk^SVXU8dE<-v~52;~Jo_pnud?{~z!npQD+6^l5+&FMbfEOD$ zTX!g*&Ty}sneFELkw3`mFdvN#yx97lrYmU5#H<9pwoZVQEbpn?@Z<@N&E~4G=GC{t z>;JG+$O{;|0%NmtL_j(V>S$hF?8{KI^}7>!7yWohta){k@0j3Cl03!Q8$+Wq10S_; zt|XgzXjC@u0=vHnG$eC3t6^q?)unJtwk`5-H2Hd{3iC9LCx15>@NZX1dQ@|7+dVLt zeWS9|_`16$#5Y5*tqGZV*Jk2j4~nOd6ExPqt;CDIT5wEB=uMjcp5~$b(TRa|IgCJS z@WZ3E+JTF&FjKF^+&;4a@x;zUvxVLL=vrZNS*PwvcQubp%klN$X0%OQ9ht29GzfNa zR;t-6;|z_>T!I9&I4Nq9BWnLAs)pWFS^C465Ej)_)BO_F1dn05*NFhe!Pe$+Ms~k0 zen=)ok02c@@x!;Q#00$(Yi>oao_1&AN@!Azkh#j$yhhgIi{Hyzy%xJ!i#66-tYIyd z2wBQne5}`E!lBlpQDh!xEmoT+XDvP=#>-v{yoTdzA>Ajg1-wPpBA{63gvCfA#7!^8 z`kdf|?8td+{_Pgy-{gboXff{py4_+dk#Kgs7+>qf7?sIUD?fU?@k5d$u3icXfwrn) z@S**(AhpzH^Cx#w<&=hhljM=`jQ7x8`P0f$KBz9r@$IiJy4*Lo zx@e|vKy}d^v{>u!aJI=i_rtAgBSRR#swBjhX!jv8Pq+U@(^hq5T?3nv=>sRNB`G!7 z6-7niS>YzBA&Me zZu_I>mLhYVS{mBuUfJ9udWt+9&y%Oyp6Kybz3z<09qr*>`FZzQorY|UcH+4^)7Nuf zlun1GsP<}JVsOzE8?@|NpFTsPX+mCvu(qjx5_usOnY#rO19d6!s?|lqQJhj7Z=3a$ zZYu``QFUB@t+YjpKab zYs8$&T&Q*c|5s-6kH&Tj*NG{!kLf#<>l=7qgZeFE76YrflWD4a#3YM7X_bC2)z6e@ z7IlL*VX#4HDfx0ltZ9-+pmIN%#acuf$up$crAA^uOc57C>ib&Q3sbZqMCbcX<1i(( z8%(jNmK!@{KDUg`PCm-z(%+Gs%0@EbG_3_z9jf$JL{K8G|I#{{xYAvpqAZnrmMRFw zuN(Y9-wzqRMoqxsd1>J4Y|bBz>U*rVjv)D!ey{||-D1x*B02*5KhI>Q)L$=E+6e1c zM9{Im?qTQsaj{1$?C#(bX7ubwiSb{y9!Z~B@`uF2Z7CepoXdY;B$}>*}wXc+d~NIVVrNku2q=z7u9kZVq;8VrN)Y7hCspV zWITb&L9Re$wxeD$N0JWgC^QC`wjt$cbwzv}C(C7*_0f|UN3pL<;PPx&bdQ>ee8mZQ zgBl8RF>0)X6h+@P0z$%fj80Dr+j1vgHzJ;dftD73ruw%o6k#ng znnFgkm>hhrqM?}=bR&Nraq&Px1RtGtk2|6UoBbBEi#OD1jr;YB($YLyDeW1s&0WJ) zAF#cOlsfWiHctYFE&eU!AGZ3FNT;i(X zx;J#Hm&>*h$?<(5{CY$na;`5Q?%hwGx@qoxDqTg77bbmDX=sCc<-Q)#*X1c&KYi09 z`mAgM>7}7<(MRPDOJUdd2R{D+R+k!G<_vNO$q8NVWwpXKw!;n8yt8D|O`@$T5I&Hh zRxJ|HWy|CS1m|W4XTYTzlpnWmLIIL2) z$J@m7l%})DXa?PpjZkzJscH~!qsOY3@zT|Z>v9lxq)4cVs`&)Hhgh4kJ&x#tSUaQ{ zmU3Z|%Jk6DkewbbC^lT>f$eaW1?825XLcTSZa3Ejp`&rX*y_6y17d5D^>U-fNv6ZzR7r*-O)xJ#?vfuF5GVSqkB~9> z!uNE$m2P8ok=guf7|vDrN=vWqk`^;BR6{<=4?vzI7TI!=w{`BCG`U|`@?MB?=jwn> zlIpZ?xNrhBJ@L(3eV?hY8yti&%0c{3b>UI0OMDe%{n>5wUV(*9Z-V(=2{0=al`dJ? zH04|S#?i_Z|IC|T3wlOxj&laz?jf~gnG&lm*GSF>9WC51Hn?ARtAqP%tIv1gdGMSr z5nBvWMR)llu9s>({+mme()kJHp@veyAMI^k39k|dKA=~!SAOc{_X?PR)y=?4z$D_p zTb>og^cLw0bS?Q9LvOj9ZFG20mO7U&+xP7r{0d%K7tQsosMbTkmb^}VEYb{8F>?_c zeyZwBix801azotTQM3Y*=fSJK94UadY~FIt9Zz&bF`jb^;R{qIEM!>c5!Ijr&F+K(*b!xj9njSoN1>i%H0Gs>&JWR%+KeyZq0e~B}G zs0rsk9g=mC5XL5T%wKW603qH5B@Tcc@Q6)nkjQUh3LYeRwYjJ3&};FC$651LG|VJQ z5zFA;6YI^nizH`d?q_zO0u@2j8~WDQIW#Ue+F47VVpA7iftqyQSyenQLm&%%lgcX> zrja++cY%9xAKsP~?JIGQY$?UiQ?${2`$ymjk;X!s(}_?~7tbV3>nRJln!aAV{HJ^K z_IQ(0c{{C~l-xvh|4BFCO$jlQMSEse0*e!dY%MF=JDb$7t4l)%_U(PSjx$Lh2z9Hh?H8^nO?TOwZ zwUgPMr0mxf-1TsVXK^aC_r_4Z*O$dM%KSy+KAkK8?nMV7Zw*GmI3w2ytqY7ZG>j#8 z&DHO+q4r!L3wI)4ij1U6U|e>NH}6AWPG0VP%@MgchqBD*7vke_c>K|NFR=?kuXDkq z89BD&he=}ez2r9lZ>9;}Tq-PD7R!I4H}HMTmkvs@^xNKHObg~a$TSLxKZ^NigSrO~ z=%s?AIpucVA2IxnmSdM;n7y>mcfEafC^j-Jt2e$}?=pIWNzi-SxU=pD%5HZP|-Uet1S;UL-(1sEYjhM_4W4V(F>SwEy)+YcJZ(xMW_atA` zo1T_Km~^owK6VOOH*uGpgl0n%erSuFQzyysw3ulq@zs&+ma@0N38cP0y2?B8QZU7D zm51K1K=!E!j?IxOrn53R;Yo)XH_jzvXK<8Kn>A<*Px*;9$B+$2x4Ex%o3h}9%*1bj z8+<6+d?<|%AqMMqR~|vTr*4n8J1wD|!E1maOi@qe(K))N!fL@HYnXs{=Dg6#h6Zcg zTc(8wSR>h3Saio7;N{;rNW9=Pvl-RWUjmX4b+}%w!KHYqaeb+l&q3mqyArpeGY9;{ zRTa$k>j@101kw=Gj0K>F#pW*+XKO<~+Ev`MauN z$!J3Nr6@uClb{nLlXLX`L1gl*$CG?VJ)Y)6H@`c5W~wL`s4sPUekjJJwV`+5tt($* zp8I3P?myLs$AI?QDCXE=n3A@gCd!Pqeu1k#La>G%39KPYZJTQkSpE4^y~@#nj5c}B zzm@uom6byTG`m5y00+aSuKS!{mQ)Y1YC6?0OpsF(zKNN(?ME+*e{_KL(UYu?&ays= zydYma9+Wa)ZRSP$uO4zu5ID@D_^#7ESIJT|+e?wI=7{OG#cS5$UgZ3ryB4>-FKfZ{ zWibXmE2;p!8f(L&W6>TeFvo@`2+;BBfNR>vGh6-2sjTD@huD<=5_?GQ6@>Ktj-#ZL>nOa@wRH%la1I zHxWtFs0mz=MmMS(UeIF7;_n2tOEAHZ3HJ8SdC<;p?0-H?fb``}+3byN!2UKXzq&BP ze>CZ)loOb>kHhk*W~Qpl7Vx6gBY@5MGcZ9wAh=+-%f7rBsj8} zNTX_BZ*OQ!X0%&%LApQ16I(0Zl|`vD_i!*h-UGbE#$U5_?jChE3KX+qkqa3ZW*c`+ zJud||{xr^i5h9XZz$;~Hn(5kIBl>h}36oWb)Fwr1{Ug1hahahyK*E3Cl+}_gA#V$l zD07e5EN4*GcC|Neb#-C7ACF`i4>KrQGxKY))#q@)A8kXekRE~L;@1&eRtSf}JbIM2 z>vyy4`k^LYN@yxxFP#^q2!hloSuKWFkk-jZ@3QXxZ}qPf&z7$}q__5l?$8J; zz9+}S7W6GgtRM-?3OYH~>iAdzvgvsQJzIxhtp*mq1;Zx~LB}6Yu<6+Q zPAfV__*7k+P|fayR6T{4rOof;30@W_)_a^_^m$!nKoK8n;|cw$9o6nhYE8AJORjXc zrdoGd<>)jyF@TDa6SgdLep%iEL%4k%!d1-DQ#jcT;fh|@yX6}hm1OF?$PN9~LSda5 z6GXd!FUE4s?K47pJ~_XGeJ1nfhpA=~}#+r<=P zk!>uIY#Wc9Y-6p+wp&Eve>}}4ZXw&U&}f@%C0ALjwydbjOjO*^EvpWbpOgrMG#3o)HGvQG0SDt;N4f&SKW}@MDqjW0p+inxEI5_n3piW5hb=M7KZ*1~) zVt7KtwXq)@B4(JW5V3s4&@O!1Ytu0p0G~TIk&Z9g{qyL!BR$HbAt2RH>uToN)jH~9 zvi%ZX(b4;93GXc(L>pZVyLC?M^Hi4l>kanms>+>)t&EM!&c0n&7vd8zIy5?apjJ~C zmV~ZHi}95&-@W)&VHzQBSt3Y$JGzXoN<(jQDVNGzEvk#_)4WOjym`^`l!K8!2<3#{ z_ZCHGUdizB^WCIALz+ihUsAg0Q>}_2fOX%up%3!jizbJ-=3u^-4p{UM1h7@d(@{|Kbb+d*AE)<2qkD@TB7lpxo$Q3V393pdUS9;FOywC@+8VyRLEL*1#wJt z2)gQ$-#SaubqAUQ)M^{lRK&BT9H9w|WmKXx=*owz4dz3U-LN9X4UVG6Pdq>W#2NM- zlB*u+xi{;L|KZ$w9UuB%&b^Owb(-Do@aNui^M%B7ud@~i&2w|&zTOapUJINe676PL zYR$FI3f#^mkZh#Uvl7m{yX4HfX@_2ra#73}#rFnJ>|L|rU-+IaO5_U>70Xg+Zyv4m zZhy{Pzs8(1e<>T7b5=(KCHX-u$Btsr_7{}O2Sf*jl+#-0-$!+ik9rGNM&iBE44x+N zqz}|l44R#TM5uFQ_$rBin~Oz-T%!rGK|R@+cy6E9>nG0bgEm;__7nJVBptx8R)`q$e4do!-c(@??rGp&Bm zlDZdtDwDzz;{Qe9`*e5BRvxKiGR!XSC6R@QVfpIdcKb_v`PKeQJ58w?>wGCnHc%`@ z^y;JQn6F%vyghMC)Wr#1Kj?IQSBG6!TV3zjW=|se1bz8W^(;PL75zpabRwfxu6Nk5 zDP|==C(*^fLeO)XJd@6#!uq{!UNA73a*Y}(({p?COZJH zRoGaX%(EdOJ}kOkxLenH&B!z5_dxTzljuCnUep2A zKrhS=+96G(2cBS0t&iGzwKKK5w`t13#g*NLI(CGIdiNbc4FU0aGF`P+KR2lJ*GU+X z73XtQMd&+8`(MU33>WXwzadnJy(i;04e7$50_&2zg&AL_;eW8KwqrX`akl#VNtUo9XFlQSUbLBQ zZFj|)DBz!PYIZ0)(br<9hSgWQezMigt?FdGR&U0-p0Q>Xo3ZZO;XQ7hcffjYFyjnL zEWLc|adDR&5?d=$y5cGa-%j3QlTw&HLd}3aB*4a)nz!<_R87`p-h8!Bwv{GTZaov< zqXl}j6KVxnrEp$3(`pXc{DI0#RgP6)`s*SLOk3RaU3G_r;evrSw1q!ty)he-*z0w^ zXNak_S4$st$Cb{kej&GD)<;efK7KzkSaY$r*guo|5A)Rp&`Uf(Dw{kyhqY1GzhP}K zuk*v+V3z%y0IBOhLY2eEjX|c z_#J%|)%nj_X()2=3LOL5hFEV4}ta$1MmR%|o&Oqgt%WiW<6zvs~m+6%sD25l+pvsCv=2mV_& z8LYZoH2nzj>(vQ-cPWXA(JXmlWF;fU1vY(B(yX+(-IpNfrYwd}r$oDHsdt3wC4#p+zEl|(RI3yM`0)%lK# zZdWH*Xyr$sg2$U=UbpAtfi+)gtrZ98Q)ndKTejTMP+tlcwDlk0gi;CCL+uo zpYs+trH*z_@Hbz%TKx1zYCpY^X+~S!#aIsD1gH!e)dPQJ<@d+@oy56EKC(t;#T0DK z6a3DhXBoTY!}ma61~p_SuW;cz>qVSxer;U%-bDoThK@$RvDG(9JKGGW*8($#tQGog z_y1^Tn`69zd4pUq{skhsY41LKY5rt7_z$gaqZOWe_Zn_={0TM!6$^MpK*n>gV}7iy zT5{?|01>Xv4n~>(9N8`V-pJZ_T5HLt{4M0|W|WT+0W5r#j&X+VtWh z(k4308JBir5v$^HroTud??eX?Lgtb3T{z^@CbHa=hdQr(o-h=%K6+`ql{>a?j2QtjoYOHuEMI>`WY*Kw?0X!u-uDB8841dn6S3hfvX$~c;Z*qZ2r=jluID17c<-%ZcK z&x4)kP#;e;eJ??dnMx;6(YDc9D538j>&gKTlSHRzSI^6$a~9As8G4EPMhQV$qMztI zI4+^~5b6|GWeI%l8d4IvJo{>4OB@m&lZU|m5_b(Tfl|DRVt-~?*wf-2{v&P|?%Va@ zDDYW}+OfeR-RrcNy+Q2(qj6jQb`3)wmF;P+?}VRuLnlmm<>6U5uQN)9hj&;sk9_NX zi6~M3(13!TYKbGntF#|J!^F3{qG=f}oS~4WqE5J}bs>ee zERZw9j^_7j;{4kACWvE#G3cY5*;5v%R2%{`-ntlmCRl3$M(cLQ=7?H>27{z3{tYU@ zQ6l3WY2u4F>A(-7<8Pfu)PjNy9>KS|N|RPTSt4h~V>E@cv6XV~5n3=oMK;BVK}9bf zeLK{$=grDxsbRl%Rxb9Yk!Xr#@jffZOthF$*@^+JrCtX61(b37i;rgJ#l`re|K9S*(x=Q%UNZ1v|$oDohjBaG-sD$pL1+3EXG zsKufY?%=?~cuIp855HJ!#O$v1rN|huh0!kIP9uV)n}w)^h)_B{hq?>6(7_17GxBO^ z;*mdMmJ60PMBNt3{gP9kluNzNi3C>23z(jRejU=+<^j&q{%o9h{Qe`xKfg5jU-0kQ zXO0;E=1Y^GiGP|Ew#L7`>gZ=>b$7xIS6=L_?!r2Qe`Db(zR%*wC1Sg5k@ljd^JtaB{)p5?D0As$U4&3*=_4} z(AS`ZIvwyC&63o)Cpbt%9g7d;YnBz#{79*z<5d!9O~fv-{CQPV!o1q(s)aGxs^794 z>q{N+($nmhhuBL>65eYMs6?W-_DC4hRhwZ<&^%HD6xk$1uaf@BchRb3smCTdC~+P4 zVZz{}poFlba7DgsrkaAc*Nb*Cwy?fb$?gc%@8L~7MiB&X(nq)t$*t|B$?1!RN zTJnaqAC8|Ym;JQf3ld>4-v(uyI&FQ~9{Gi(pMOe5VDF)=`)%8%;&Q9a+}3Rl>&tc? zAF>yy_z2qV=Kc=5-Tx20UdaRvy{2E}EKVcQwX!&)L<0Ftgs9&_)iDzv=IP5VqfsK*#>M`0Rd3&5|#ki zd4NLS&7F`{C0>UB>+AAg~|_&qtgNDS_~jCtS7 z5On(uYN2lLLt)9RWdYdyhHPaWo>_kaj8#J5fw^8!^b+?ojWcZ#`VSbTZ;lKD2qmRG4QD36(cSZZGEhq_9$vpO^o*}5@I~c z-?#OrU!sD#Tz}f19DP-N=9L9=`P0<<{33OF0Ah^!N*HBGs;(VQzrj&>r`M8RN0#8# z%Tb!;8X0W>T$ij2q0ZluZN_4@SjhH7%F`KY&lwu+6>OI5)tP-Ar`)(I~$e-C)dvM*GQL0jO=1DxoSFH`iL^68btK%4!c@@HbI1E8b%N=rJ*_q4%DvRA z6}RIuSOdfIV7_`qCb`qsDVR;(X|4hYrWp#HCKSjT+Fk*dd8UY0fapQ8<#rpE3t>O} zIG8CR2!i3E_g0?4&~y%(z3QBysgC>``j+X&Uyw^ycl-SKa^tE-dY*&Ko1J^5;g=)E2IZ6d{LE7lJrG%&>Wc(5WQK10Jl*x0@SEsS^!qP) z68xd6{~--Hefd)?>)=GLk=!317rW(v+{HepU-;rA3xb(> zg6kz{@3f{&-%%Y|NujQfvGmGZFZD}uy~N%w)W#<9oHAC4Umi4##bj9kE@863nYNEw zGRlz)$32tcS|P44(c`3-ViUpZ(HUe+CmGU-ZZG&HRFh*8rM?$B;9hhaO?6(J$HgHb zqxNr-C$(<`W>sFfxs*&}n5>d!a|<&H^!1WVot)}cLiG(K^|4Z@5A;w|Dw0ASpZqme z-mG$Rc~qoyuk+{}>iyK#kZCVx!Vf z1AK#-I*DY2_0h0xmrlqjYC>2Y2Zy})F!wyIhZ#LVU^MDkxI0>ZIN`JSQiwregIZ6a z*=?+O82)7EskM_%Fu2a209>0>c~+V9hGeUaRB-?wbDt=~Sz9QvY1Wf_Macu1D<^b^^E#HaWyc~!_O zNq0L?9!}#y_*tb%WZqZa*;yaUKal)VlF3{W%Qk2PA^*=K(mduvdT&%;>4z5I0D0KW zLqcC$(R-1e?v&!i*TLO!30Yi{duDW?<{A1xLcZFKR=(Qa zpBm0|JKu%<=Sc99xAI+yiz@6ht4ClV%YJ>)oZN-K@do=42j{Ka%*i#&8*?uyIXd4P z!{+T?oHXwnX`3`Bjr2v|5R;wcUjAmZNcY860p3FQte(23TvFBM6813jIFeA3p|(Z9 zNxoWc1?S4MRo;}f-e4*z+F&^ri~kyeD-WY2f;aL1wO;s=aa_k=uqrqxxn2{j@~!`o@A?h+gl7SuuP>s?jm+&HsM9geAq{oFt`b>ZRb_m`S) zb&1z;&Zu#pZCjq_`v**nJLw$Sc>ZB1 zw9>w@qWUu^^l&#;4F0R-mv$0AY`?UhmpkK14qH|P<|#5pojYTY?Ebx9fM*dTg4A6h zk{iP3CQs~bVQ7*$W7YE-3CZ*Eq|Mu)iG-voCQ?HVLuSnrVQj~PKMaRVT=O>TdG2FB zfftW*oEDwKPvFHus{IsR#E2j`EM7eEXgjd3F z0x$M13+@j6rd%SgY9kyN#V^P?|Cn6HiFR_^Wh22(en4IKN2piZDSO5zx&2Wy$6;SCe9|QN&!tR3^sOPwe`(egX8cG!Qr@aQuOfM- z{4n#@N{KyU=Ecos7~8A~Z7L_?N9QOU#HSY86B0&m ztg`As93Nur;#l0$Wvj>$RW!%Gi*j>VlivSe9ko(nnnXNtq%jWj;t`e^H<#*p_ZyobBk)qgqOf`9z1_qi{;o$iPOYI;px{K4cvZc~6L*p=P*3uMjwaI)J(PqHIY|O45oxmctvfr8&eoO` z#gKDb{Kt9&Eio>Ty2kYDAEKu5OH%QkLT<%DM6gJ$zUl%>t^CB@)NuVEM<|v2uwG!x z26&zAj*9{UpEjLJ>@c{y5fMz?fy{PD0>z}s9hpV8W#1w zNdg9s!>P%#XTh8j?OEc~Bo?dre`A)mDN7ibcn!*nD|rFF86PfN2_>14M3FdtN?qgz z@Fj7Nx|)v)7k^-XyFIF$SCQLIxwEI$KVj-iF8?-r+EcuWT4@Ys1ApqzF)c!5_`V(ERZOF7_rr zgo}+=XJO#7xY!2lJBEwRP2^%TIQ|FO;Y^E*-9bm{Yo3Ayk!tz;2mA0ne}Rwu5Bu=t((ZrWhqdXu1lLm8hxh7zc+X;4 zq-J>fUD$^#8ST>h46}F)kXc)C%=e*#xAWO;=Wi~%g`L58KQ_tc98DcX-VgR*d&?Fp zIHI?ayOCukvn7`a!yx^xY{`lI!m)opAX`_AfDnsmbV}H|^R1ViLTjULw(hEt!O3%4 ze%{`Fh;?{~gNc$X@kh9){6^YI++4eMLPN&=2Rc21o#mC~^mqm=;eDI>?;KPpIe`UY}t^bKkiSCeVTK>$-zhL{6}i^eL}-?k@Jb06JuVpxx*|= zb&Ah--93h#YHRNCv{)*~w`XJ%krb62vh73O+x8*v*SyrVf>dvH$g{)^=aB8}8Rx## z>KtV0nOfy))w+&KB2Sw|619(~nQ9VgO|0BL_=Q;+nn&rvu0ToOLx^a%_*`BV4ZWWG zCftEMexn$OXK3C=k{BH-l#rnrCmokd@-zR)-;(g9Cqz4y1!|M4N(-}n%_z>`k(c{= z1@_PMr3d!U@pX;d$ih2Gn#s{jri#$J-G+DDCii34CQFkldJ!+P`{J5Te{gn@?EGU9wIRr4m$ zTy27DBpOaL)X~_3+NWw>f3MV&RL$RU4mG!vsF&}S=w1;Y^5v{o+$u2N%0-L&hJD{_ zn_RR{(vh8u_6B-tmy7mTnxfwpOP#fsE|P8& zLdtX054Bc6aO-Toh{2#6DyR)=_C36-ej>c~CMUD(2w2RKsrgNOw zIN&_x*<;PIn}gKF>u-9vlblM<${7Q=ZA(aX-r3e{S@9;8omy0Xy4+26F_O` z?b6WuOz2d7HAFJM@_fzi_JlUm8C37CAs#{B?eQIBhx)C%Jv@0E-8EY%5=PL$-5z&9<|e?ZG_+an z_IN~^%iSLL@x$EhAvR38+hYlTOG8c3oAuouvs>ToF+=#p6?Ee1_G7eC?)DfbcYB;i zcKB1}+kJF)_+w!^)}0;a@Rc6XLSZ_2rJ)9WxksKn_0>;b_lWjwb-RaK-|hh)dfQy@ zA=9_!z6jp|bHm5$3^CeCUKvOuLKc@N-tlpLzOj+~pI+R$E{T<^0&>mA9P`HMAS+dO z(3zeE``*M+1FDsaKGK;%PqM3qv%VWE-$=8nJRGl*NtL6bc~tp_uAL5TpM(o0vr{f&Vj7#5EFg?Nx96Q2=Mh=%29+hM`vIG6Iw*`~{FTsmHD7 z#2Eee?-ZX-6}FnQP+zl0Emb$S>hB8rgT-Q%{^=O~hnsCEb~NwA7})QAgP1r@P)M7* zJA_kW{Q_*8ia-Oqz9Z{ANk@q~YlnwxJ)YKGp$9vl)eG(N>RglSz;y6Z1JiTW{68=W zomk@&el1nM)z1x%x>~a8G^vZ7S{}eoyKN64P%nP~%xidaEDHxhZvqCp;w? z1o-dn7V#_-_e$Z#xJI1dwcRUcsBw6$823uKTs6VZaO9o%HPBAGSI!U(R8QP1&tn^t z&a`7rEBDG1^&88*vi}&|D>Es<`6-LvaIq6dw{x!?g}ts^cKt?Gz)$U7*{JUw+oqoB zC*CwDn%Nj;u`zJ!9mL_;@~-SZ$S}bYEjKi(1E)|UaPyd!$-W`_?_ggZ6TO#jTK<&Z zoGdMTSpu2FX&|wn$j?ne%L)$im@a z5=r108618*h4@F#=UHv;4^rV6nMRp7M!NVLT5bD9URDNM$*c2j*{>ZWYmIkgS?F!` zT{jK$Q`DVw02suBX@h$HWGVGMtL9NE-jR>08~7#Ok!|NVCyaCCFZD}ldGxW|JQVuC z4F2G*mRPhMR7z<9ZkFfHP@f&6og;Vg$8wIGCTw^*2%Nx%wf^R?{w(QwZ^74vhWN9z z)@L2c4=)zlrS8cAY%a9F`Q$KACj)E{Fz$yJEKqZFjR=-5%VqMM4_Fb~6|W4~$6fJm zT5GxD4XLdvOf}AUS3?%9o$+8mV2gXv`wUt;jHyv4=|yPej5o@v^%AwBO+%W+9q&q& z^+^l7W)Jd|2*;L39%eLGdEvD2{@yG3m@9liceO|$8XPSmv=1&en;c(ppS(^d@!@9P zOwl2w33T~HD8VT&2~2J6ly`cSCwNX2WVW61Rt_|X-?pDC=*RNO+XuK3eezB|fw>-m zPoCqO^mRXn_rAaln1}aGIv}!v#s&Bp$8hM|!=6pLrtw@`#_gu!rfEtz6J(P^TLy(M9R zx-xV0nH;*<#2mM6=}+`-Hr^Zit7VJ9*$=E>)~_v$JNr@c|EPNx_^7ID@juDrO~Ofl z@Dv#(AQI7Nv`q+<9GKA=Nf3PE6KXV-qAisfLFEygP%|8-boYpuQZT5B7x zvY8k8=^U~4%O*uP4nhgV;%|pvetjq=f7ZcGtW#@xh2itP*5n&Az3;Wh&HvWx5Mj&w z?>FNu+@2@2GqftBbJJCWzYFQNmI=aV@va5LZm;Yli4dHADQh>V*VU#;9}J zs>l&|t5|V-lS-0PrUE*f)y>RX|HO#{B^D2q_&FCaGVQ7Ra!939!h{iz0!)>75p8Td zMwovZlUO{rQ3?ZbAsQP*MPr`*s!%;&)cSSBF36kMa%3Zo%eEPuEi}KQ%1d^+FM+$* zkzvehNHogL%lHa7k?@&wN?egENL6mWb~R8V>QKIUu4JgpBpe573v(jBf*2c}hG@p6 z$X2V}^dZt9a3&8Dk*GG1h`0w$aN3hA_s!Um!aZx=chZtrQWJ6SQ8_s0N)Mqx3mdSU zuW4Q~n&2m6~U=-x0FX2v5jk%_I4zpNWda3y)56V!%%JidGm_9U$K0ZrgC3`31!cqT; zr~cB%A$(l(dsssA)VHB;+lM9Hj`?0=SOb~MCRA0<)m%8i6($K z*iNS(<%e1F9ftC_dfw7hD#y-gGJkQ~dZX|Lq7bbmpnMl0fQ@2L@V-*XQ2nMale@6z zOTQ(|tH)R))yYpWO_sY_q7W_QMlnaD5 zO?BAE)PcvG@W37}A7zoLQ%Pm~y$pgkQl~k>dUJrukiZZNRWH=57wuQ=ysFsY!b@I; z`y(0d#3lUc9>G!^8GJyMkyDNr%wG;yY{=sYHK~kpx}<(sqr#+Dpj^o+yaCH%{!9`C zu*Fw&L(~x~`T8Uwb&&(o6S6F)t2-4HG{+Z<%%&UzCNQ%n6^Y#Uk~xfT;cE-ce4flI z`V|}*nJpsiwU)9BGZ!XZfa3;_}oIRaS{(k@W^j$P7GTdA+S`jZ^GT$Ahrf%j5rVg>DQuJ=hdZy33Q9-QaHxp&vu!MyV z3Xmdl)+6~-wiAfDgZME7m!`zZUh{s9!sx7* z{0VWdQc_S+FRa+@4cF1Bo4?EaPc^Va%cX6{E9CJVvR+^B8-z+$y$`xQJk0B6&EFS06se3)GxOAs0kmnJkA;dPpih3`3Jd-&s+$0#?dIZOK`i` zJH}_i4qY5p%(bR_dRKy%&Nm+@Q@r#V^IjezLjaGJsg`?}){8)Vv;4U!R&wun;ij*{ zO&?&<#JOq7Q+>E8S<5B=BoyDSgF7a z1f6f*`nIrAQ%IexF+2dJ-1CZy7EW*BWXm{Q8?=@<=i5a_iIYUtwY`~M$5v1E;iW@7 zRpWexUIz^MX+;a7Z-SYERbH;ps6KS-JZ?$hl8g)bBj;Bn;Mvm!EKFwWbnx+oC&9a>StK+X-zSUzb!j2N%Lojof|ZNSbs`%&dMZvUmj=g zmr?R5i@mp7?7bBjm|s~0dw-x*o?-8w^CjFng}txczye*1B$?#z!oc0tN0SVGq$-kN z@UrGDu2nEno?!7WnCbGUSp3!W#M}=Hj`CPcX zROi1yn1y6b@cCBzM~y6fn1wjN)s{{Y+)Qx!or=rf>&$_&^+f(6U=TV1kF~h`^gLk- z2`>MYT;Xin%`^G7xJD^Y<|XtCE-!mXn54fVKI7c+_>1Fl`5AXwRV)O#^36AL9!pWKMpfl7*A6S5I+9{fDtREQf;@rxw{SR&qZ{ z=FbXc(kgb#J1no_W4M4jKF^BWO+HU>TvVY=LS``6-7Ygy8^<4Xw#$!6X&|Lyw+lgi zuGe_c{Nq{%R1ftHUi0)#wZe8DD1DIH;bXhu&{fwo-J}@we6wUCmDg`kDZ-!Un+{TJ z{`}}R;m;UL-&3l%8T+=riMMx` zXH2VSd^q*&RynS5WNTTg%B2!=^nJN7?h^C%g5)Xd^yR?2JvvRQ9pb5e`BpA*WPkdK zS-ODXaIt}0o%o|002~l~-c$YA(gL$e%AYF3-J}#&iIe+EkJ{e8Ah$4%6z8H?8@*hY z(X7Yxsa&n>jcxTuy%L_;>aTSdGw1nIpxWx(>*#LdN68N^Q=J_mD@A96U@2P?`p2ibPC<$ z*NUEX8PTyW?TJ?Y2lnK6!=__h$Bun7b1%(wdSh++x(pS)psCgWS}qpq(Ls7FtWvzO zcDMF~Lq~3+Oki)$%ll?FQONgqZ#`YJ^O$WHAU428^N0)76x8m>+XgFMDOQN%2c1YDB9b3Sx|gjuAEgbeptigrkKZ zN@G=;FTc5%`CzL3ABumZz-i^pNjO!sDllzTFuG&2E7PfXLmWn@+AvaM9~e*qqv$wY zd!mC+tCewYjtA(xyiXwGALosQ-RsibWR%tgd_ESofDOrE`%VRq6f{5` zP=+)7ekkMbgEB2FN(Bzq?0e>L*o~zR!%r?@&&m81Rcs~1MNIqUmaO*{cv8rf1Q&ZuG9%f5DC4@*AdWPX4SKakyKi&FR_&KAsjmZ>Iumcb0(a96-$h2( znteSpV%nM`t=Z{mzOpq(7Q!!mjJ{@Xn%1M~YYwMr3)5B%B4Z{QC-A-nC0<&! zx#Cpm6;g0!DbzbxI;CxVD{rY}%^>TM-%~v)!8~lH;VM zXKu-Qh;#%VK=@OhL{Ey%gVQ%`OIDEINaVZ;@N_0mLh+npD9TwSlCdH`MY00lAE`aj z2HFPpYA&P88`#sMU9m$C@5=?>T!XsMnZCTILD#<3wqIM)k=CGnyNzEy9+tc+zqZM* z+y*V$(V*?@9^d6Z)f;FnQZMYRxpsal2WDS?*Phu0d$q`a zG4R0j)z<<@EhOQTSUrqZs`gST_8eF22=C1uMBl#^PBzhJq%@{Rx|2-bZkMr;va?Gc z->r||>OWI^rjvB}w0j+$Yj@OY?yy&SM8^Dh?yXV+nz_RW_wE`Wj&+RhqFge+0a*tG z2g90g6!!(O4X6{Pr4YckAQL(-{O{6ny4gydQ|r@fmKN65hwB_+`={?IZy;P0-6t}O zvi~fqSvQqv2}~@8apGPbj{F%^4ov^fH9$k(7$e4-J9O2@TBr-Si03r0Fgg;@uwlT^ zVRqi}ZQknkWv3s|wQtL$0}5X|ABL@FH4J^umU)lv0P?ktR=u$@4b>tI>QgKIi@XNr z=i8WRyCR*PkNx-+sWb0DVp63}9|Mi538r3bSlG?W;GU&!;>J0;YaNi+^d{u}UG%*& zgW<*6fK&9RklaWu8^>h**-|yOEk>ty1?R0rGT3!H8?>dn(zQ*rGu25oJMi{_>lX{R ze>*wetE6waMrq5ABjRz?y!{1|%<+t=B&NH2$2a8qC7+9}Nz_3#7Nm;al5UkTalQlu6 z)-%0_zstByO^tv>t9``h+g%NsznjlCAk6p9HXuAw&D`@1dR38cJZ6%)zEPxPL?6?h z?x+ z)_0WnKVk;Fq0E|gS`;{RBwy-FbJWXWH9l+B-e!jS%bG>nlT$glP)nqty4PAF&#NUe z=gNLdL>#1W&t`=P!23YkM&l`V>#{WbEDisFOQXZn9jOatdKg@})`U-68c&seU;p)S zK@y{;NyYa1@H0-S*nh(H(H-%iaj;g2_GEfPb&uBc4g+YY%210bgT<5){eb{GQa!+0 zVIHlulB-6o)(SRkwE0|XPDAy69|wnF64Ywhms~AZOHZxUQkYmRezjT(nGVLywm|4W za&S|V%jK-T%cbx;BbT3>TrL7I-|1jUr4TxBvzb|!q4_i!*8AkNhV@XNRRgD+WGx-| z9h|2~D5?q`VO>bt({9Q0ZesBnTz9k8S18$XMczEg)m&@}`o%^2=NF4;PjyJ`E_*w} zj=_I`BK|CQb8)oGTh@WxH?ui2UCDkzRXY72$a{_V=3^LZT04P9Sx0}d+OF7LD>&FK zJD$O^q2SLB|7bFtE*&bC4i(65!zsNQ(>%(&S*l@+oJN?b@{~?hj#67JY4a1+C%t)e zwA&jvjLTgAo=s6bi%yh^$JLgF^>vxK&FK(9j?}n`q|@5@M5I$0&6by-oSdr4@@F+) zGddQUIX8MYEtqexS5~8n+)NH=lr^qnpqXwyCOPenFZ*T^n!vtJL2lLnkQ)r(?ua)L zeIB@UCfdNovk%lx=Is<|80SW2TV7^1kBTx33v%bAbl~8k)DCc+(+&$#b!EGlLwe${ z=5VrC<}f-QAkA8rIZ|&Xy&4*19g2(3c+J3M7w9xeoiR-x;Lu*+B`NM=O0u&Xl9S0r;Y$ki;{9In8n z5Xdst)tqNuP6PJY>KKM*ZF2({paGL!yS^QL!F3_8u9hZrX=0jcqS!Z*Oukd4oxxT+ za79;TkzWl{i^6L=1%vQl<_o@oAon^K#%_5mX;FLWbIWLY~#N{s}=Bu@Lo z&mQGSo@LObLmUE!om${2u-nyqO#wSzq{G9`74Nf?)6{;1@IXjvZV_13#@F8Vx|_BV zO9n4?PD188Q8+V2r*JbHzN);^mYKkIH=bX;ndzT0BxB{fuz@xLC;b~TUT zM{V^sZ}2K7{7}T1#BOi{%TOfjC6I@?3);;R?4s4a*%=@A7KG6FxGQ3HavWu?`d0sB z^CzDrfVbcqqU29hywI*#xg{d5Gf&;jm_N%4Da3$&i|l;0fC#!Z%`1``0)f{c8(!_l zg%=3xFRU|$+Tdc#CtJPagR9QyjE+mq(jQ!+e5jl%;L@83I@eZL-B}kLikQD0Xhkru zikU}#AbZ1xKo!Dx*f&VY3c3W6`?R*KO-?5CU?u@aFIE!7MLth0udHSb7zDOs7kxM`E1R@#H;Y=B77=>!V_&W=C{vo&n#>VfX8<yfsvfO5)vq3-9#c=;%v|`3u}%SdB|jW$n{{)tx7ipC-R z9$C@aE>ab!JEWmH!(XU?D3TRQ+jn@QJ(*tyOn|q|!nmoj!v?v)n>s#BVPay*oy$2e z+?^`V-tzQ0}&VbiB^K>Nu89>dn7qW=SMdA@>%AY>w(A)Stb zs}|qy$EW8p)azxa#CGKJtoZ7s;jO-j!j6l<*ECriuxeSaeuW6d(L8y{2HIN17MXiY z(Zxyh%9a*BSlE|ci|xCO29q0f=rlwkP9VB`L;Dd3wi4J%u%ByHblTE=_S*wyiu!Xb zaL(mZ49N2Mu%|~aDnmyJ`j#j`sfMu9z$4`4_!>3nfj)8&OKk_jkRn}qK5kt_K#7l= zLFZb6_Q@pWnchzl!yDXZctEljl8k;@dacOxWVjkcFvB;3-VK57`PdML#Zi&2R(DY? z@S{vxv@1>pZQZ6ivap4iH=ht82CY4WXt$p|)ci@&)8NnaO!E!Xo*dCo-3?`;Dx0`| zBz=|?aS-ApeyhJ*+zctRJ*CW0$)R>zLXf3Qo?n&WX^{WrXfDGYBz0io=MBzBxrZ$Z zdu*g8G245=!Y3l3u<_~?BpYE)Igo(O{_B)Q0kLE_EZO11n0c%JJg<=}-&3N*`|JiV zqkJRXf)B3hR=AVR(gbq;_vyswcn5`U_+OMcEbCt`eV}qO49KyoYLtJw8V0w%3C#|B zgZT_VHd+{0)F>F!eTa@)a7^F=>0XI>P0#)j?gP&}el%9`fgFQE6i@b4 z-E@BVHnQX3=2-jbTvbR!6 zhzb+p<58#}H?C<-e}-WL8LjCzJZ#1wD{y4AcGm;^key7^y*#*$3y0zErZs<8QtPiO z(gU9j((Yc)FFkNa?g;JfTdc>-YVGdp)#Fs2=39vc>DoPYJbFT7x2*m=Hq&Uj-_=o= zHnXhh{u;jZ>X`*AZ`Rj@Z$>@Nsm279*^Mi6VjY2w&tt8i)999QYoqh@-bnaJmeCeA z$2qzdci!MaGjvMwO^*F$QQLaNDpz#}0d07oqeM8}uAc5F7^{7s_*pbEb7bI9wstq} z<7p@)JoOz!4Y;~CbiesSIFcK*1tPK@pc*;@@F2Kf6xH=3&>wc{`_OI zr>Eprpq2i3)Ah}IhEwnT<}fCJPI5RCXd9|C5iUoY-fJeuq{@T}7?{_wu2TlqnX%P1 zIqb@4cQ@;qZe!*!m0xNxI>V81j&7MrgqhS@6lC-yWL%S5si2~jDzY2&EqV?|EC@C0gLX(F|>^gcv6nFO*7rj*RvTLg%Lc%dLz%VJrSz zT3F?9JNBDeu?(%Q#cbnzKun`l6o^pW)8<|~0n1#;(Q2k~SRy&zgz)Jb1q>lWa%17f z4ZLl7=;_kNHJ7b$1^sUauYKJWyrs((T=_z8M4jBWxq>%#=;6aTa;(N0kBn0!q}Aov zYOjA+S?7-f`y7t8McZzn*6^VW-LYABgdH8BOmC>*d0I`=9WO2pPtzS+7I#czJ{@(f z1bA^A4y;_B?iyKiKkjE*8XHlyOY-`I}JuT17yyG8#yYJaoka;i2^z`n7B#)?Q z4UULx#ab(Mwm9lG8!nZJv2@YqjlUD`H<7CRnt6sPXi*?D(HcFO82Za4hJGo(&CB*F zA#1q^Sy0AVLhh82jxD$O2o(xBgKi!+f5CQ64v>_rhUFIdJIs@)MTuX3w;d^!L>9L) zviA+*BxBVhUJ;3WmU zXSLj0>ivOZM4;Z8Ce?NZ+A>8}=R};9g zGA(dp4rgGuiS%n-hQbFxtMCG%^TSV8?N z&5v;l6FQ(PfxE89EW#aE5=L7I<>py-g1C_wT4>GcL7&H_e=+WZjUroSIeDKJkzhk{ zKOFn@SgS_4Zh|<(sz1JBV~|~fUX<1KM6--RJn7c#8Ligj$ET0EGrG&Vf)f7BnyRXmI$e%gxoSBjr1*l1iE9$x>yWB&_YPe+QV*CTgR^tVO-^KG z>cDQwu7eHps&ZrYNQL6MqhkP+cBRiM0HgUj2}l0@fb8~ON=ULQ6$s}HT+mSE*0!#G zF3>t|%d8@1iTj@m^iZQr9M#2U4~zcyG1hjoE`mfJlR9O<)Deyf4my&F{{^sQ>qL%9GxcVGB#HZ5MSu`MX>QEP8m413|oq`TlY5;fk$+LnE~xhB4sS z3Tgj?F)Mdws3472==kz{K7)~k|1+9vR}pd{=JYK-Em2%syO>pD%*sruVlY(m@-$bOBf-9t;yGJW>cWFg+d$eMQRy?~XILm3cTO+sd@)(@Gy>=i> zu9wsoUZ~g+akG|QQ0H2asq$#a1vMb>Su=4#6hLf|n@?+*{HNrXM6Cz73jr6cK{cJ0U*OBc(9DhK5)ZKQ3>QWxL&S{gDZ(YAI<0wFI23Z z1Y5B2=lfIvG5?bdISYT@`_KZ?B!xMX6&9V5z#nEA?3oJo@X1X}o!0-4@Z>cXQa?QD zMYyxiv+Z@GHFXIZh~{vMJ=(w#!IP(7kK@UPB%Zwc!T%Nz{1bdQx;u#vZ5Q;xhjwU# z1r~dsAq0dOMgeu`ec5KQ|MK8JXK!fO%p|rjvU?HU!Vbo>=E&+D-0r4bgx}$AUq*1K zQZw1U0ii6tB0r7L2wBtZ?@RR+qR z9X`iqHe9foDLS`gEIZ9xAK`YJ-Bjr{3O+P5z6wI2T@7X<{`$qb=R7I7*<3_t;)`?& zy+I8>h7*w6a$1BQMYTF3^F!t5%^eH7<g0aJw|~ z)&GObVPN`iRN5eOG&|5()&u;qUjOz-Y$vVriA${Q;H%b)Ur0F-ZSheegua!yg4}V# zF;4aIs@<&aZ&T~BJ(s@obW-3SyN>>(fW}HB{a!Gv;e?zG2uy;Vr;5z zrdiN#d~2Al;wDs2`QzF7+#pyzA#y@>7*6DJ=O^t4B_n*m&5|5Q(>@-zu>{sO{87k41;AP3p0enzg?~Im` zJ8QI+yQGM39O$UAQgWA*dy?o^Byh`Q08NWOr*Bf^Ug_hLSwB!;C3jn?h0FL(?N7y4 zMzBy`sydDHhxx}#_vTso$Ih1gs!NxOhaG*2C?^TBl=DjZlG2UnDs_#P+vp9=&vRk8 z5cp#8N{t7k_APqo%4~P&JLyz6myhU$YUI8I=EQ2kc%JbBAYM$OH%@at;*g6j9j}CB zRL*BaFU3%nJ25A!5`{4~W=3INIm0r}KZ)awm8I_Luy#)#c;MpU`)NFovT6dqRs!ZN zkshQNeylh^^6C$HT9v1Yyh8foIl0pub21lqPjd`k)F#>!Uipiwv+k#z8ttcBDE}z= zs3Jg?8FBpvD!|& zpG5PzZ?p7waVcrmO7Y8hk;qw7Hk~QhG3D2Mp~7AMS$3LvFLpCxi^43`cvx6Xa^UHz zbZSk_Ja~-4jVs6u6)F`)JX)OmbCjgp^r+gv7T#~a&N82QNvvA7n~TUGmM&&#mne*~ zZdW;|d6g=$-Snsob2(?mNUQKFUYq}TMXlk5<-QO`HGeN_d7}*r!|eDhAmlzB=V59xGsv`RyxOoOQmWJ33O{ z+$nEPGqTq3jf!h5p1T5SsirJzB#Db#r`b-<1j`COtlrA^gXBncu;e1B8%oPJp^ZvI znKj94WD9hiZsSEfPgmb5OU>98D>?n`Y-wkxtLkCp6zk_q7E8K?Gosn*!Fg<*R(0pY zLK5`_67{|Mma1=9qP~2uael64A2ey5# z$J#f^(S=(sI5IXLdp=X4hnnSphIj0r`k&9>k{g;n=* zX+Am1j&)dvBgSSu#@3D<))F}fQ3oKlLW);%*cn$up((JBK+qp#ENU0cMAihf5~4P8 zJKEe1luoUdy2w_v#&u69K#?t%qYGJ#N(hZeb=zu3p!Kk$&E@C{9M00#?f?b*4B0+& z-El+pYyQ)$!=mGiIL~PMqnyr1b9h+JgR8nr``#KV)C2G3MDL8BeZ|k|6?jps|GUur z{Q`kx80g-efbNfzX#!oBX)c)hJv_ zvZJFV?V5>M!NLZ9+@9~~h!xJ~DOyn7v0`vpM=a|?egz9X@^|c1dGjB~XenN-@Ewk;QOz9V^rqu;+t?r8G95N|0xwcN+plPO7^^|QVi(< zDr2+Nw8*X4D^l)lX;L*uv;S6;-&YN2O=5#gWi3{-i|kY}OGRp5H&l+>>K?5Pxm%C} zDt5$5F0ylAa}Zi;g7ER_)?uB@C1QF)M89qU_XIQN>d2>D zPXCU`maW8mNL3{OHgB@3ie7A+0&vf34e8wT+6YTQjx{p~a{*eu24$%c2t9!WXB^^q z&YxpmMMcI)d1GGjPDWZFCW&qm;eD{1YvTUaYOliz$f`o{vv=>d-NJ}uUtX{5W4G|e zG_}i}kIjTKT=?LH_(m`ahIT8xkGUdOBql%FJuzGuz8k&XCK+?m{$1p;3O0ul{VIL} z;=4rlfOBlSh4a0Z-NHRI5Vu>HMWCK<*W4>i+FO;j`Ylzzm@y2p8th}nFh-gkYSt#p zn?;O8j#Syth{CH_#sWOzW(>!(H5e7|Ew%;+En9=Sddt?}NYLLB^gkW+$88PdcqMd! zWos~)XFc!*wg#Cz)z-&t4Gyw?YU|^+2DlY*h<>?cYp`3EZm96xQ&VgWHehS8;s1iI z!MABE5X;ck3cavw4YsYv8vN##sri=6!a; zVJ6yQq?W~jZEMia#z1Tf;&ukMjRD7mm=;(J7S7t&#z0KD>f6JIGduzF{6P349S6C3 zIa*fdT8=Jn{bsp;w%*<92^Cz-=S8}a=5@U2VH4$b?DQ<&Kh5LlVV1p)PsI2DD+JsA zV6?J7KuW;=;3G8%{Nw8Dp7uCC=3#O_`QJ=ZRtT6h*j5N!Rvg(Z+w>Gm5+U1fRwQ^nTblT}znm$5{mp;lOj&4ZznBWn z3b1N_!iZqbmIU=QhtN1i1Z$v0sprXej)UY79OdO&W3YG4VcUqHBv~-p>1o+MQCDQQ zwz^~WTb31+r)9&EA=^InoZam06+hNuZ}<=-osjVkP7b&5a=k zcOn6+6Iq8?IqJRdr3%1paT6dU-azX|WC_(^&ee@sre{$YO+icyLl(6*634dI(Q*4t zsK&i(!eY4K=72;U=nP;Yg~EZBl&GB$dl8ZSPFvI$JFNj^egD^`Zkmc-1_k+7YELmq z4gb^HIi^11dFG1K=e_h`hkGQKu%9tjG!?Tj9eJM708&r*2u8}p1T$wSa@2-Fg=bNR zSX7|@ef}iw{B~?z8^fYvmp3$9SyZ$oEh^fm$6Mbar=!?Y7}!&Ide0O~3KfU!Ff|jy zPHOJ350fz(J;tiS(~`B~z&H0@+3n#V+UgRwfA;B8E?pA)3XfXo7+5sZE3$ggZ!@{c z+;Kw-OfSVq9k$C!K|%)`u{Rx2_pup7&gGVH`e7 zQ8|vj`rBG8z=B8FT6ipDi&%T2RP@E9Fyg7oS^bvThNukXFE{ObAxW4>kU#U@cGZhs+G8n*q#bN1^zt4_=QVumH@7aMM;UBp49 zKjMlH=~Vq7Z(@e&ovd?EwErY0%`x&Y$H1`)dkiZp2GkIU!&x}-SOlVjv-wPxF|P+g zm&N@IGrX2zhLu}U8!^m~f0Lm*R2!!|RGSO=p&f6p2?}N;Q4nt4-$(b|U%Mhjy2|6MDMpH6{;9J80ad%)E1s8rSzHi%q@tHN8SSZmB2Zwmo#+gjs= zw8R1_F^7fYl8X8285nDnfU33i^M-L}4AvUn(9EZ5gO{~>t6R0ZKLWE1Z&Bdzpxb6C zYmMGW!dL@S4eT^P=lZrQr(iOwD82nRp!phY5T5A1bI3bmd#E29YlnsdvzSo`eRp zqQz@4zwr-6S~|=Ni9IQYLG6fEkd_zBMRvjil2Gq{0V;sl%C=c-FFwJdf_>PqlY@VG^|bUvuBEQi089qo_eRV zPF-I77F%8wcrz&vnSY%;5F&4q)Z^P|IFo0p4{smvOqH-eea}@BJ4SW7THVFTDn8S@ zi83AJ>PIo*x6f8tCnlR5G9@Mwe`IH#swRmMO7Lf$~|XVosyQ)6m6$B6Try!eN;g zUy-?7wVSGo8Jf_=?6h?;AE6le0tL%QC`>d<7xOWXI3&71>@d|E(q+s)2+q=1r^FH(r#E za83y@V0K5-l`iI8bTMz*x|nu5M?x2K{nPQ;Fi)El*TsBQHu{qwV6thE+5DGuF(Xt} zN*D9`X{xFd=wfa=q^{RW=wkkyqKkRyse~?O+h60lm<=QztBV;xmbZMt_Fs=4@=vS! z`GPGGU$6}E1v~RE%1n6)hgr%OY{{4Q1ylQo%jN8vD^0{X(DDd-OQaLA;CPLPhTz$j zN7#$}P#$5=@sRKcds0#p9%14_W_yJF%z6}$FmWN%1L6@Dv=YT5Y!#1qg#E?)|Ds1& zzG_}P!qV)H;Af#cL*gD`qLc|`LY=$%c!WVVvj(99#CsW*kiG$hFwd}n*Jf#(G6&(v zN?5i{;tR%OO|JM5dx#>n&lS4TsT{xv7%-C0e9S^GEHK*Lq1mHTEqX#T%cWqx1lS4h z%V==4H8@%u$~uhphCoDaEO_b=HZ$18ScaolwWuf!Bhd5raO7qhoy@godXDs-WY(3?#JDQobZ4GtWb z%YbE|wVbMS0!PO^$4=-trbeargCgf6sv@odqN)NM$OdEMAueR6ww|8^V{PBA z7y>!IT{WDX)81S-&aXx#+e`5au!FO(7?DkV=jv7ED+|m;G!VKDeNBpESIDZrk4ChF ztpvlJO7^(9%+XV=;o2I}*hJOyxmJjEIqw(!@Tio&SYz+Szu7h~dYT$i#{P^|Lqb3N zVj^dXe)yXGYVfQk(GO?H;5Vg={Wl{A9{a_jAFi{mQ zTxoTvIVD-%{P>hUz}Sy6foZgXkcY~`1j8DF zRcfHIlC&)Ym_s(`PnF|Qm9Q0U;9}4LY(!hmQdP|&WCGTm#~O?_1Red?BDvto+Zuwi zGX^poC4GRk=61B>Q6uK<#~P4Qg0KvISLfCSJUJ*an@~HpW#ooZ0LKP@KG3TX-|0TE z+crEgy9wB7O<76=g4cX*Lrkm%3(fE00v%d#YNUr$8;DOm|Nm1UifJK}2Lw}zE#|)h zL8y|z5RAP4u>?k&3&zDUQd#IOgwCV_whvsFmK+OLEcn# z`FoRRm4Bcj`>gVJWV6mHe@xZa12S}lFb2znScLd0x%Dak<}Kx%0`{cu%M2s^o+o4XH00dt8_A3Lx{ONPJ-gf z_e4b>T&1VRI#7*BigSu6Fi;H3kJ8|*k>nuS=hrneRV?&~HS^AM_zi)zok`*GT1hs$KcH{#qW3#IMRP65l4uZzSaLCVUNez zjri`5mmkCHTzUN=uXCaS`I-0_1;rk%!=rJxN7!n;@9mMgADyZx9Lpc2|Yqk1U?0-`AFJR{0rp*Zz z6nT2PyyL^(we7y`Ktux86R28jr>uX;{>0-S9V*hkt1R-%x|eEb+Prve;*ow2H^g(f z_Jo@+!Mjz~Hp^&Q^Wbw1j%>rRJ#X`1@;SgK#%I{`jdS<$D zAr7+_=eSj$XQor!K}%|4B+fDsU{|X?HORlj`er_BjZ5=o@i;v}eNSz0p6M}M`8|?) zh!sX+4~d8Tf0c!(JRhM5PVKvUSuhg(dazamP7nkdbSjFD)rtz_m$Pv%PGZ!fYsH)| zg}r6%wPmdq9_9ENwA1yTXnwm zqemgLSc(QK24xx_r z+C%9OUw&%sNr=0Y^{3VzX_<-jXRkfKo?Lf<2%2(P!%RrJKe6th4ejkI^GS?4mY=M` z$V&E?>t!kr$yD~xfJ`vw4)cm6HMiCnW>u$iok_9(Z!*2n?^$!3g`Q6hf$61SkxY-8 zUg)m;Vv3Ehnqj7`n5x2cW$p3Fy-7PgJz5CJU1}bSwA1qxCdmBk@vMp1^SgwJTPQE) z%8MFne&>={BZ=jb=wvF&NpVVwYS#Y;lEAcn)0;BCL<_Y0%k&DI2!YQm%H$2AV*;-@ z*-d;W*8}uddxB`Q(BHen{DxUgn?YT1b!zTK z@lWZRTTk}%zDht-UpA5IyuqPf$2I{^V9yNrV77mT^@AX(5eE_CK%(^?6>LsX)lY;a zS+{El7d>bpoPaIO!Z(#UI1gh3<}whj;d>XKJqkNmzrlGud=B|{MgNlm@-Km}9&QV0 z&=$5zJp18VF~o*&WP3DO51z7)IU!eCPkbKFiKedyVgm5ws$>D`_F81+>0NyG@aa+b zv)U?}Nl-O=eNaBW)IL#jkPZgh1J~#5Ymd~Yp&f-(cN9S`MA19xb@dK8RgYynI1m}IxJTHdn-@H$w z`}w;+IPVCFMA(#0r5gz6?kbN=`yD zAd0ScgDp6$;#NFwV1KNxq8k9^dN-t5__U^OZMW}ba9A!-y_CXDZ~N-_;+VFGl$lma zbuy*gN;#b`E6X@5fg5we(REfQ`}B_pKL^`#eB-!CC$pF;2~pWbg8!pvfgqYEm`T*b zHmFTTva`&Fbl&Q3-@a~dYNa0EmDJMoc5`X5?;@V8-b%WjNdIb|boy)Or@z>0FgVFh z)Ji*9?hQ~OF$Y+&$?+hc3cQEeavN=j8IoHd{{BGX+Bf>jYaPrA@@TRD**dX9>+Mo= zVM%I#9Y|8^4^LS>+(7gjB|U1$#{_|H<<5cykK_7|-lyWz>oJO0B*Yrbt#x#I zdUtp$y1nCH_Q7-K9-`blE-Sf!v#}zct9U-kem;fg5ms`3(?S0RPso)H`tlc)c>^A$&5!FK8B zxmFIM!>XSX5*Y}Ztx|?s8Mr`6erju{!Eh6!N}(+M@y(hqoT02mJZW8qJ%G2815i+U z=h)ROyODnvJ|gYdUAN)mw|}O<=XyKIhR-GT&lLF7*hw~g&bEIh;UmOA0BFO9)s%#f zqE0LtZuNsd-ztk-h*!8-BGg7dMm}-gI!f4RoHGXJjbuGL<;Bu>nR0o`y*1C~v{Irq zm!$MtbJXol(E}E#v18;LuWr^yDoxbdyBNLsId=kkZHZ))mGMPhnx|@3u5S#ni;9e9m96k`$(Cn+?3D_! zJuqe$8EfR#BN>Fx>c|MHADd^5OpoRuiXPBb!?8I9kz?|TRt%NMs{NqVzAHh5m#yae znH+xaU{jXW_}Kz~ma@c)AFW$sBe44gS@BGPV={qsfxW9G#B$u19)AaQIIvgD{s`XZ z47B`}meW_2s8Dqqa}bp{7e1N$AB~P^vBzl472)a0g86Iq%DcuD+@ef0Qi=N)cu>ao zg~%P2j>OjC#M@YToHpcQW7^orIq)%U$h$Ao#wgkde3s|W3eEm1e#--lsD?h$TCLUE z5PL+*@Lzj!*!=OGCv2`i+QDa?_5T9Xrh(woXx0DsAqqZy=Rn?_s0n)x0@LrkkP~DKg8Z!3tj}V3 z(4Wlt6NLP5$Fz_y?w)iWrvo+tyLO-s{4)Y(%~4?b(A4(tjJGeODcSym7!3^s0GqhI zQ9J+u{uyx#O#iW0;v5DD0+wE40efQUe6Xw{bym>QW&$C+Zi>UJMM2H&4ljsF0 zW52|1Kd>hwIrck_)4ELxpG4Js%-Byz3KL`hcD!vF`_9kpu?v|?j{Wn41CL#DG4?8} z^}b`5cmK-RKRQ2U>{rIw=Hx2))9No z8>u%r=efseU2@U7+iJbB2hxpCW3GlWmCEVXi5 zrsQr5T2%gN#-Zrdh9?ta)k&PF-B9Y}?{8MEUG`e^#%TTv{`>25FGFl0SCSz zH%a{ZB{pCzT4se*a+;l--70FSJ@GP|B1`tqoHrq@F$F^ye;mk`;IDQK5$>GA#(1NX zo<=TK&#G>xdaFJ8syUrRwVlasICiUI=M@$yc{yM`e%_73IwBteN!k-)9oc6+3-OA) zVm-@Jk91nkB&S6-spmf9MUL1dPByY__);ULUFm7$o2t%=){Tv{&`{keJ2<&_3I3g} zxOMx+8fkl`)ej;2k*`?KLIxv~t>;F0K3P30d#!}4`oaA$f6JkFxmc|luL=5jKtC_e zZ6`_Ji7@UF9H|kn-%8dNjybZ-tW`$to3IXNrI}xO2ZIFS=*Cz>oFJ1Q+~T#|>V5R@ zyz6KYyUV6s{sO{8`9=p0XZVLkvktbW`*KY|4XYvDf|)`EY~pf!%2 z#x8Tkt}i)~`SwWW_8-ZGviyn4@u2kH9+BM3BSEYqm$C1Z=SVFN#~WiM(PERc*Jq4h z$BR{_?w^cNSC?4H>@9!0&oHyz`kxwR{n3Gj$z9o)jx|b;UW-j06`k{~AhI zg8cY!MjC2rO|r%t6_RaFi4Gv#Z!mY)`k* zZM1t0PERiib1#kON1p1gr6pz|!%$%z@dob3(4E+7GeR?uaV*&OtkPcP8dFm)BN3+6eso!#9Y7oB0c_Ch-IV zk|g%^ujti>H(H)>+gw`hb^*d9;j&J%jBIOLy_!27tQ&TFvqT8- zl`hmK`NUmu1w;r=qF<-Tpg8^@W*%`wVKM03 zDz07jFr2LO(43>yhqa3iuZ=C|veoU4(?+HFGB;Olif)&F*Q&_P?!k%0!r~zJE zzcDit0BkSapaWM|okJpHRCB_jZ#5`$E|LIuTZ#sso?LQr2BWlgbF{3)~Jx7|F zCpAN5o=oOT=4Mj$VVNhVRtE^TG4B3zWe-X}!a8H7me^D#2VVcx&_k&u=XNirq#U<4Ma@LRk0vjVlj~u zUu(d{P{@_LMZ&A`YiSXau_q#1BUC1tp6Eo2gECOXYT;AiSjmi^WUCqVWl3n^8t%5% zp4>KG^w`R2Eik>f68Y25E-7n;tW;6IWO~rN2&WezPV508^YPF^f%g}B>JPhwH`eVD z5$3LUp%xdUPnTXTqZ;>~q%?hd^md~c_pUwRqq$rO|B`t-`zEE^hp-N*Y4%svG_S1M z?4HULU6>vn#IMTD?kWfqA-~;wB(@^%T9x3wC**bll1b94#dCi$RmHCvR_Q*(70fsq z+7JdrBk@La>f<*zt~?~yGZP{sA@DqI!5(hL(!RF;{gZPO+as;%F~-jI&RWxNc~G{! zzmNw(BN?{w4z`c+Ez2+2AE^rxSUKQQxo?`wXcivrs@}Hh621E46?6J-kV2PWf3hW3 zGVh17H}XNxC}sReibN;&&1y*-_Fn1~mESLSWDFp0z*!Ml?ahx*aT?hW2BuH>ip+5y zq4Z1^Z`7gYR@itl#z$WnNb%20^~-f73=w`2{#h%$=df--sfbIi4Cp|SMnOhb@Dw1# zmhzOf2|D*qkI)>pl-H5N23xmzskouaU=hx>rZ*XHZPkO7EPHHGi>L+9ZRYOrrqgwCE*J#^{{*@Cv=gOXgjBWc0hD3Zql| z?;`r)Bo)stRx&+NWue&}h*yadedx-VtMZ0YkDN)dloL4JF8;D}?Le-R2;>Ta-Wd<( zs$YY3go^ROB34e^+=OJ!YYp>SC$^Y9u&P?)V>Puq{9+sFJ0+SWGd$e9h#tgUeTIGn z;cm0WcdB54qn3#`?z7euE5m8}-jYC^O{IY@XTFziB)&hEzx>OJkL|T`L@ZP05=3tam+VDWqOQEamjMo zhZ$+n;e^O}YA!i=eZvJuMf|~@Fk7HjX+bTqoku1^%vw>pM4~xa%99!uBk-E`!1ON& z7_8PyVT)<4m#vZ4V5rc-!256tmnd75f=7w}_aiVtP%9CFjwgo_!W5GzGfrQ)RZyTj z*j0Isf1*HAMtyc-?cOYXQ{vMKE3_2yVqysu@3WT>f|6P}TuvVIWou7lvt|?(Qr99R za660rmra~}S1Do8Wd!5I=`6iEvSPB~#UE(1EXg0XD$=x>am5$Z@7J@SM1}+(hIs1N zNKsFddHExv@>on)mFv1=D znl$q+Pl(bER>)l$@g{-_S4qz9H z%;1j%#a?xW)fa2F`^=O~67=$W$@ymKtV;K-RdpSu8bi%~&=KKYO784pKmr%5D#ip; zvoJ?d_{5wqrbeO1xQxWiqqrekR8oK}ct1l%>j(^rnfrKWq(%Ode2Todf>lVDMC z4pR+oBxoCs_w@dTXrQfAL0~l9F2Ww4tOQ9bLXL1}uI@yJoLjV=R zCdiD|5x3UZq6oSvcSRWPF0Rz*6rL5GSI4-$Rz+69x-Rmoa+Y4fDpx3Ev0e%;AHm(< zRzrc!8Q$1-|CT5hA;S`=&l~(&BX?maImhhF6BgQ@>ZqFTM3JVTreCXHgWRKZgXIX& z{v0J>Mr#8Eu8dXeZdTGGn{L@#DLK;P3e8Rz>N8h>J&DhJt|Uei$3UItHz11|t|Xo+ zco3Ts@UvE=%krzm@3m6Z%0iS&!b4d>n-iC;i3j@!63m78&Zr;-ZJ^GcKpq%r^Tu%&Z!9q@xL7348++eXnvKN`LGBf9 z^}SWg5|~>H*__X%t+myN{o7!MTg=%qtHSJx71lQd%gp!h6s(V86bY}}&32@E%WcDW z;i*1!Te0~PZxxe^{gH2*2u73ZBg zIX5jjvR4J1_Kj7FEDAMfXKubj^B0=;-XSA6l}<;qc)4UCEtfWFv(Qha=$ZvVh{qlQ zC`%`aDu6}w)&jK~>cfL1Zg4`7sx|h-BUiHVhvJwwzb51ZaMlG+t6TfFZ!jBo-^qID z{G)+Gr`}d#9=bgN+-LrQRP|jtsjoY?RM3V1Y+fX~bUkjcG+Nf8Q#Mc=m7;GkM;9t% zbcolozL9sbZ?iOgxi#x5pcm0is3e3T)ifTR;?D}am=Vq9vCN-sy_YVHjdw|l_qHMy znE+AerGFy1%dte?gfx^EJ$IesjQNkeDZix`(NcX=k$e{rAGgRqT=M#htUP{tuoNTe z_KZ4Xy=WmTcCZuBdk?yd4(TfQKWAR38y$hYnZCRlZPQDENO^R$zGjcGS>G9<^M5Xh z(?%_G-~bQ^b4TV&ONR$u%tiHf>#6?C>dxCv3cQ#}kNuWP4%u#nUH{kANFC>5Nybifo5Es3N1|MN(v0sEOPyajAY;eCrU$ zcu$Ls@OSPU0O1LcXCeFuGiO->;a}iVM6m1$2K6ta{BnfY{~46`m-fNxbNXTRsTNkB z7^fc*oUW^XMc7P7%-g%a)_AQpf!eM*B*g@7zY=&a1-H+#aQhX7+wVC8ZQ%AROGkm* zUT}MYpLpS3?j4DvH>S51dgG}WNAD$Gc&YZs?GWz-lCSj$mdig2(@>Cy5+j#rXA@pR-pyfR~J7$=uB@IGV)iI}p24ar(^NHiF(5M^J^+1Fff7@f_$k zK4SA}wOtvQK7l%qhySnH)n_LPOZ~@Ni+e;?vBZ>q<6>9cYMv4wS`C>P+6$3!%nkjB zJccoqe9IMVe1~)=`|}m0#4tlWod~T~e^?Y<=0t+(L#9BsrPq3l%l5<%eukqJ+hf_t zZa1%epRVvyOflm}KFb4p(vd=nNRew=P^eT!o)dCsYs3=TGGj~R8PY}D7Uwo)E=y;p zqqNgSY4;r4BPtu}YW5eQp)20(9+IXuGSQJ{`O>2?wFj_7dR`Z8b{A9MWqTkmHM9*! ztt&ESa>e`)WN)P_^(7OFuuPahG(n>ARKhR%J*OJ>X@u~Sz1tjM6gZTwJ>hox^0X)F zP6_YH9Tbj_A)(c?S@xYH6QRPe1)g3-Y`Qf6;E?`o;E*tquoL58j<3GQ=0f1U2e{iR zkz?TghaD$^yX@gmTm0j_0pXru!+m5N?rmg`_c;~rPszAb;C^~vRq32JEvTa`);w{X`_WtSCBNa!`qd{=;&kXHdPmb2X-KHU!>tMsMghCP6dv z6SV7qz#7v`drTH;F{ZOmFs6+Xn9B4KNa)K9jB%Z=#ue8GFDYV&?onaa7b^XVtvHe6 zYR@i|F6Nr;GCJ!91=;#I0#5K+HjjZ8nL-iOpR~@3Hi*d8P#s=&V{?vdb*{4XD$$Dr z4=X_x6tHfcsSVkOOH2@Fyf$aRZUMLJJes8>JOH(gZsO_>hQf}N1_tp|& zvChEtnA1L6$1p}Ut8@%|UbS@$rwKBPj^RY57wXsT||&qwVJN{7ra4AgKx$~B#60MK`w zBwCVf(L8V9G=hG*N@Fw<&9PJ$Ga6U!u~ZkklB$b%O!LQI2X>YwA zJg~bJ#lvRvOeNPO6c3!enoFq$#Y35`co-#0c1>Pf_5ZNJ*8_i&Ng%8*AiGt-sViB^?md* zV7UHaj#D7F7quW^hVzO~Zw}F{o`HwN9TdW-~ z$UajEJ1ZRB#x37UN+TEi&CzZAh~a80`wL{Y<*@x6QQJV-PVa0bfs3-lD;X?*{x?xt zY)9uNN{i^AO9`yX&{}LaE)F!7+7m=;F|;;(p;BAqzUrziZW#WBYKy;LpWw=mOl@%& zIOZ^F3v}nrv3Agcz!~#~QCWO6Qi5EeZpQo$_CmYH8ute5LPM=7st*c<9s4TcT5~K4 z0`s#cdXZCIlo$)QYb(ztb6NDN9AEV2d_uiemWssB`BvJ>O;!addYHKXsSPJ}4_p?r zz;3a>?tmDGmf)iprrJhfqKO08c1d{W_XMw(~_N!et@FOrW!gVPF! z^0k%oIhJ8vZc63A(b;cF@hub=&0A6Q5_pNd!x!{I7*hoJO!q=t*$Ss<6^5G;%Ub6T zRVs)5^G*%r=@ri{IMLNP6b8*1VgRypkh1baBT}N-)k^cwopEleG4H4Q!0`d9($?U2e?9+wFmGYKPp#@c%mLOi(BmE!->){PW@bV7b`N@}2iRVRg9TAU4NEkVu86t?nA0-> zrBCHo0F=K4z5q}vr*CrP_`sfzs;0jiaF06+;xPu${FG09X0yP}$%nvAIdB6?YgIs$ z%W>_6I-uhRbdFaN{r-8QL;cA8AEeKjfnu9+FY^&d$22>9YATE|)fc#gdkdjh^I3O6Ts#@Pj~UmKeI8f+@z z8cuSrX_kvsq~(FWVQz*hex#FYxpci8i&Sm&z-n*FZjKM`!wpP%WX6FwPLDAq8<-od z{BJ-9#I3iP&~tdgGAb0#P-?;O1WUEvvCR9#jCEkXGBgg24}OL#svARf5JRhS8i4yd z`P2*A6pRkjDIPf(HMvZ=kilfnvH3UoaoAQ0w`mDgg77u;>QMb435gQQhS1L+S`CSGL_8Ys^~_+fNZ z7Iy|-;?%}g-K-KXrDkzI6G2;ycqM>T=~fX}f{tzV`fm%EZv&?8^p($S4lVPS%{V@; z)&G(~z$C|hEC|o7NII3O3B&rql^vrh6Q^0u!<>nIwOVS4ej^^coD1jC*SLxgerm3A zfzj&EloBFnlyZ@1$e|UgDc!7>@vFWw2;8mwmTFdUxADObQ;|&LyA*O7_&ZlTQQl7E zIwrw$o_1#&57{v1!%%8>wsRvGt$yp0qnmvFEY{@02z5Lzg-Ev`0Ua;g{*EjWT1hP| zcKH~x37gg5o^YQjSF31#&LSGOCdJ5s>Z5p@yyQ*Dwy(8*UL)(d*_He3DqyEsrc!pd zNR!BsYIsbj9N#-b)`m?NAH4BqSsUeptkwp9>CJY3>k{g7Wk_?MuWaT{Wob=`D_}&9 z*?_svlcQU~j@x8hX<|zfL8f?p#}7xP%T|6N>DET_X^7}?8S`a$d=2NwR`CQ+I9s&e z)ff`Ris-u3EId77U=)OOqrwuC+nuWc% zos=Ee97hGrOAU?(RxUjEvxqNXV?r4kQu0YMnvnfJ7e>e9|`#Erjb9sGNMHw<*84yTs;c3GlO?*0!7seBx>Vg!}0PEVZe4b9>gXQ277GJ=?+zalkw&r&VEfC5m6Ivad z-s~>CRW6VO0D7H;uXYw#O#CHGfzlJmXV!oO#G&5;^JS%CFqRT4qCRA7p_V6;=64kjoCGV9ynhCuoVe+|I;!LXf(sO($FK)$ur2RHuIVP6mh~+X*A5Qv+aDU# zmiJon@p>NP_d7Ja@AJ?=wK3ZAR=aP_DXA0yDL(?0FvqLnYTW&o;iH7wWf%g~U$bcz z;_ow`C&2TQKgyZ1f#{OHfyN2BfyO%uS%cL*=$N*$x%QJsIA*%wPoTTv15LTdH%M4R zAij}6hUneHsYaPonsUokzSThd1&MIz?ua#|Pbg3<3@IueEvgeTPs|T0YV@jSt#uifrfv0;9Hv!&J7cWz<4MXzXI@F5A`awL@$N7zo3aO)DJIX-pR*7~^& z9TrbnhDymlDICJA-Xxk9v5yY|=8t4{crJ#>xu9L8!97JJLQdLVhb)P7W8L5HFrU=V zWdNC9VcMid_rvLYh_ZcdFdCJT!Q!?+^j_&yAbRQWVDaY8oNN$ruL8Zvm;avKuQMmd zD5&dI$ZfCp8kWf{**#m;U&SOdR^)@wdiz3n18VR^$Nd6DT%nl6@~I{|u239txa&_X z(Q!Kus)O`)%<#+e;8vq*VPIG%JuiAg#CcW@-a!m`!aF#!JhuAPK!4oIaTY49%-GJ_ zD^<1iwP7MpcbWYje7aXwy~+(`90iNh47_C_FPZnP;=-P@x*vb6*C4^m1LiN}nE-T2 zfU~9nMzRCKMjYJ{?-Lq=pWoa+0zMEjUbh>0*3YVhr_Q@optkW&^{tsVN8N$HI?zlD zh&nCIJc|AhIGG>4xX`-2mvm0Kc4I4WV+6zR6Fv;yWUIXRq>DDgiy)YJrZ@L+bTIr} zKxFxZZeuQxzlemSa|=~$LXm z&8XMQJvm1M)!bKeU&DP3$tQUBV5A7dBR)=+I#?ucvXJghFZc zgH=E7mVN}IW30z|Wp%`RNnDV6R9Uf!<>()z=Z$J~9dS?R9U|K0X!UaPLTBFn?0n9{ z>EhWMS#qj>OJmW^@wtt8kAK!H%N(EInD+=5m}O<}1se07kjJm#zS*^FUz~8CLd3_# zg9Fn!+uL_>U(yCg0uK!9pA}zgzh%BA@0Wch7;o`W6lwAeA2zNbl0A2QKPj+FBy7i7 zV(}0{7Mmi&1*=Jkx)&(XW)qd!ujKJwl54(0Ysn@{DWmIm98a9lm0T>NJGLJW7#-a| z3YfKvMfG9F~IyxS~zFLl#wANzw`L3`cO!<$>VVLdiri-hKEsbp@gq z4yv<+A51Thdvd2?Iqp;L^yuLYB|}rEi2KdVC^tbo>Gc>u@gm%LUwQ-u@65J-K+F3j%gkR~v83 zw>^#X^8?Y_I3=T15kDwjOqwenb5R%3a`g|hM@6&ruY-sE=Z9eCp05H$6a=Hkcv}Mhj;fg`r+rz$j6M5aWe8T zgXDsdkMX!8AM-Ja(qQp+cb!g+FsG!~dICkXSV9C1A{%4^FPpBO4ttbT31 zztBF3T6Q8;sPGk6lyKkXUMA`{zZIE^ypdz>@RluBaezsW4Y7#TNIbeCY>tP@5sc~2 ze@GkCmEDhN*5St_^J2d2up3>RIF~jm5jPG$D(CH28dbV{ASNDhRzQ;>LIR8Q)?UdW4?(S3d^L{s9c3GE*Z#&JEK>4Ac4<5&z{Jr4*d0$p(Wt&>h9O-!XsO&Ah|qPs{slE`zTRO)+%(CxdZ#S1BD3y z6gjT8o}~gg`z>=vr!Qx?$H-F?aD-r(l<6{L3+voRU9Kb{#|?~zuUjlmaF;Lasifw^ zb19CjkeIW~df$BHpn69{!_Bu#y;m;OmhD>_2JikS^)KnB{%4m+{Wqxkm;HzJAE)X^ zyR3`rjsElZ*Sa|ry?)0vgPe?HM*3dsGz3a40y=(n%1+gadu0(9@ zSa_0XSBWfl^{)Mt(sf6g()EoaQo5pt`%?JnN$W}YISl_*euVUIubT5d3SZ?#rWGC* zUF9Arx>CMJnRDxH+MDK<75I%ymEs$W3V7)@y=hX`@XoclM$gsYl`Q-GbQQ8v1lEqL z&(%Y{JJ))MXF_*90#*1BB8oOQP0Ai#_f~%A8%M7X@AAagn=MI2XG*7*rsho927my9 z67*~tfcC`ssvA8WTs5hOwn>5%bFWz8a1tq0 zCZv7>NcqGrhKhX+y)0{d%7*mlA4NYf$4wmMC@~VMc+xwO3ZIayr(Y^-k&pn2qmnLJU&r9w#sSJKBcKgL(irO z*$or3<@2F!9)!OvTa(9W^_5Bv!m=zaG6nUJ($%=Gn=!HbD7|+^KCO&g5?&K z8;MD14vq0OWLs~KOHIP>{@_f)>{KAUGZQsp8*n4_)l7(E!2Vykpd{*?&|tCkij(UG zYtA@946zZw6K)6rvEZI8X&%}F@l7Z=aX%~YHH@^br)ADRjXl7CgVCi}9(M;T_RSkX z(19Z^TUW%?4D;#6K!rX3T}1uj=l?2T>Ww^a^z)hTR3iV&%zHjX`U`qKWzszR$s3aw zDE>6`zBF}-UUqJ%G!R|Lv>gakd@_#&UMlHfq4h7zt-g4Fpkm+r_srJfHmNwT6`Ai+ z@yTq}Q_I!#7|T^jMF$S4=#j%z)PsuXB(A|mf9qDM%Y}%X?Y;7PKACrHKO9)@-AokwK_QGaAYumGN0v+yMuw`qW#@&?2}Hkr=sZ69USgRxC+G1YV)P=1KczQ^R ziRdj%;~t93dbk^EMzWqwEEMa}R@_QGL!{II**)h;J%>zT--EZrKABTz{*wCpH1|ud zzx0DD6*20d2*3G`ukleO2MKEEFXlgfwuX)d(Ggg@UTnl$jefi|%EfyZmn zvwrgb}@vB-V0*?Raw zwS6`M=K*s^!2Hx#RxH~G!$E5MoMoLx2W0zPEafUbolkm?8*sRICs?t2-qFMm^(|65 zC#ye6b3juZ81!PW;=TFr=;rf!@pH^8ajgGfDkSYnbY`}%q1f)@b3NpETp2zP4-L_q zdR77rVzvMph?d?Idfz@(a(o<@`3ln}%F0UKzsK8952}+Mdn_>BlWS)zTg149Ih=U zJzaQz_5vyl9SC^#98%}t?(58>PMe=OXT??85_^`f;VkR#UrT}L0}lhDm&u%-OJ{-8 zgF5@nKfCR0FDllb5$xn__(rMHg;tMl{=-*B)VLOT84Z61245=%ucWSfHd4}DG?s~6 zdL-gh-supt*E7Mh5b!)pz;md8rv&MT7*;Ra5*R&OFhfu2fr}Y7JR~scP~#+>OV5ob zSqxn=H}YpmH1VpS39v;7OtBexu1 zXrY%5esTO1r5_X1fdMPpLAX9YS<9g~DzDX79M5uq;hTc5Hdmy8;RnA17=jY

gd! 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 Y3Z`C{I*a0MYPHhZjdF+PO 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

    wl^tKe`GesM%7|^O0a15-PLn2$OWxfxnbQE{ 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 literal 0 HcmV?d00001 diff --git a/Externals/msvcrt/x64/vcomp100.dll b/Externals/msvcrt/x64/vcomp100.dll deleted file mode 100644 index 15ab393e85b5f223240d0549139b7eb2955ca491..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 57168 zcmeFa3wRV&wl-Xy?uO2dYA&te-a^n|5CcI?CZJuU8>*oL0fL~Q5OR@7NMh2>MG(PG zMv85Z%&6a|Gmal;K4-?6;~8{D1=P_FU?5xsf({@vikF$`*rE}X1aI}fYghFpoq*0c z=l`GQf1VTAy{mSuz1H4qt$ka2)vlu3w+co<5KIWFDhN9f)1QO?UjC;8kNb^$xu5Vt z^5Ls?8a#)uDp_9DV6UsMy{o=-rM;}Qrl!_wUshqS_tn^|YV6M0^Xw~Y%PYpGr>A7< zs7FkkV!VCcyy8fZ-n>{`jC<+L!^KMw&&v+-`1W~oi-+>`Z;BW2cz^LC9=Gc8n>?Od zRkoaPU8>~8E z$6C69Gw=7W81Te_8=ff|MKAPZ%EK>T5QK-)1>x0a1z|EJb_l|L5%C$Ivmo9t2*p<- z77W5s{O0^h5Qfq15B=LF2pK5vrT)fyE7o}Nu+5JjDiGD3lpyZUE(lA<*O!-iOHtOV z@L(IlD1^-jaeoe|%Xke;DDQ&@RA8e0dxW?@had#U*J*&fj%VeM5a2 z5;;%68(zkj;-LV<;VP>H8rp@Rcr&x; zk=>OWl-QfD+*X+#l@*_$+WyzWg5YFlnu5MTavNF+B-$|x2m~8nSEV(Zo9AkL84 zLDhBxPbdP(Y+SX^hBnG7!yx;clPZ-Y*}t1V zIxDjys_m1XP|hRmeF;OLiMmHr2sHyYGUNaPJ1#3u;)BbA+G>^eSt!k}+J24f>?8=; zzQEwzask;bVWaetLACuGkqFGUyV+q>z#%@iPqjUUG=G;td^E_Ju?&jc z81&vGv-uWJpvdZEdk7lDK;s@>#Q6d}aIw9y2Mh6_-G!_k=0btInR)b+qZJWZW&fLM zZriT*Z%HU`sJ>sS$H#^gh!}0iv3-Ed;>Yh*nE<8ZmVj07o2f5 zUht+sT`a2YpAXTk%5MeLb`rOEkSFIJ4t>)=!mN;`CDNVJ9n#_@cP_eP&mrwk24lD! ztP5oSCpl2yU0;CLGW$xk9RiMBA7dnz*~!pp3^^Xw0@ccG^|1Z>oS9kt5%DxM_Z!Nx zm|CVcQ>`Q5+c_MYhia9lIP@XbsUQMyks8hkT&9i@M7e^EJEC zXR5XZAg-4Y3HsHcL%G37$qyYud$w?F>{Q5+D+o=eH;j-2y#1GC=J~&N$l|PHC}^Go zh*^pvn@}?Qq9_6n+5?J&UZGn@gC6GnXm8`X-^spmvd_^rUYD79Z8M786!cEcJuN>t zdmmxQ`dd;D4Dlu=d{ecm~_T;vqeyZ(p+{x@cxk>f4vGiH55X2y) z0T1sZynWe1lYgm6;9PKSX?HbU@MW-5O3@DLLCmg+XTw8f=CC`rWQ7Mbo%W?N^A|zX zIVjFPsob$+o3ThXVP@<)U%tWSaYCoczv76%(r*V|aPb6EUUzO@xewRxDR&%n zD);>p{ZuDzKSO_1Or4~H+km+Om&zR~zuV`cJ_7NQwuP1f9+#hmZd-zu0dQX9u^XrC#n2)6GN|eUNgkGvaRNXg24!_#cmN^# zQ3VpfD6{OpD^HL&?WLiox8`$*w;yUcOW9X4JJrmxHs4kzUX{pFdNf{foB{<{$M zf-d4IIwDV|gQd&6P{9)Pc>(&tL%GG7S&T}qLnS?|FoVsrL$j=*0#Ik^g8`1>Vnl*= zgFu^Vn@ikap3H@s;`z(zc5!AM^n7Wg1s*zt(q)Bc-WEF?204mUF$ZQcs@2`&A~H zpdJ3MByW{!dlgwdai| zx2WyNEo6U|+s5ALydW8a;n9FX8;pZ;Dnhsn0Q<5vkj{5=+dA(tN%;fs>*ov<8(iY{ zfl^>tQg|RbX3@!xQi9XiCIuEJVN@ba;`YCY+uwB>PZ-~e&{i_S{rE!#O%i2Mpz~ao z)zn74G?cC9Lz!J#tn*4AE2}eOf+gi*>G!{g-hs9AW^&Gd5i`X@oHe;k-B`1Ov!1Y@qzbuM zyTrQKId)2JI*X}kV0nfour!0E=e_`5zD})!GxAehsJ4&&U;$~@d&CQ9my_LQauvKM zHol1jC$qYm&bq`|pB21|)&XhOxtiLVZUmU549isR5R{B|3m)7zv`M`m zBOHL+zr@q*^H8yt&Q8g=FWkRL-SBtZ?#b2?I^WA}lRCe2vLHG@qsxflMPflGJ0f+S zhq4{UES~T<3)=2WQkxa@WsRBWFrX8y68NZK65cEYW*Bg@+qg$@p$dAD#OSfeCC^$+g9-IeU|L=R3Z$^yda(LNr5!<{#sTggVUr6Md>Md0ZA3N?=$X^ z6jNq6Q!7a(5u}Ojh?aOX0!i$1iG`f(11D<_)sCh9x7aST zHCdQ{N^FM7!xmVJFv3p909fZ_hq180@R=pCx6#kqLyw^sm)UG9?}=J{BKk{@`1}&9 z_-J!ut8YLNCOPSDW_+1+%Z-lSDzieMrkbO@FNIoJTMBawvN98?#1!)UfY?0uI08kWv7JEz(< zL1>ueyRoKa3$x_1Jeevs5UP$PtfbDhW5oxxnwdirjzO%Ci>1+Yke#5VW#~vc77WDR zaKXm)Bl84SXy>=Sr0iy;4~DHA!F#2X&BP?OnUJs(PMUp({x|Z;>~Lu0HJEE+WzH88 z)sevq{qRE8%%u_Oi7}_S#8{=(=hN+aeV)Jn`|EQxisGR9Tp_bQMUe{e#d7G0evum8 zj2g)(Wnq?9C8M0(Eb~e^P$|r0vb0J$*a^O*2;GUSRH+$P|IkWB=aP1oJ`OcN2k5KP_t5W;X~$*hj{|+xcJ4j`>x$O; z4z88#pv(s9wH}H2V@?rRGgU6@i;1)Y^F&7$lQSiQ=cp+>PG+za9MoAb0>BOewrRi{ zQwSK?bKHQo^e7PKN_t=A&E)H2yUfhUPKcj zh>o)fV|)t6_#BM!IbjP;0?^T5P2+mD+h~6giK^|Jb*Ko9_8;SxWbe#hi+SWZ6>6#pu6+Dhn*-Ax4%vH zJ1T+)(<`H_qC65Y;vrzcGu;)jV55 z7Z+>Kd|igV)FH@vh0u41KcSlNY8|tPO;|*sLe685frM$s{%koj-*epLtIrMQ7v^kO zAqUpUfx09|-c7zf&iv^XZ@L9SHu5_BUg2@HY|tyABZk?(S_CZJAv5-$^VtfH_FLu zNxvl}ye{=WFd%=}A*H?}z8vn0^^SLh|DZiQ*vX#dv+)bN?cOvb-`^L{Eto;G7x>Kl z!XAe=6KiTKl9QdR)5-oR`H!gKT&zj3jL8mmUT_974Sd}#Mqyy=`DeHv7C8jctbugC zE2#&>#$(_&E_TrZ$GbT6@TVmC5bv-59ZA>*z=%=jRH`#`Tj9{&T%+8v-h+$ku ze_@Z^S0D${+z0`xU+DR>T8p^TNgE20N>LrD?~j$>Ma*EsH^L(0&Xk+qPYSKo^IiQt z`M%|oM2wRAJORvl-E2{wo2@|HAiLRzQHx_-Km3Drsfb-HO4Oy7o(B8Nu6zCW@w$Wo zRo5j?ye=VG(77gK{S}GoVf!it7`Hx(L9q zh_RD^nsp#q*Qn1(Ch7t2@?Fmm&!>D6)2LP?=o;lA;TP!|Maw4a$I#xx&8b|aUZ>7q z`45ts@=IEhk_LE`UvHyJC{~g2AGmuQcj0??QDW%raD<56BDLKunnyNz$kN`T4})i>BObbTXLBb~#z zopyK|l0y=e31j0DeeX!Cazx+a%G9MRT-sqQ-GorGp6{CP%ePphQvPs->%LaE^Nx#* zIi9i)VDWNo3C#?6%abu7P;KehX3AA17zrJDlh6B7orXn|yw|p;U^Hiim?)gbi25xG z>uNmf>sL^HKFw!QR!nZENnZZCNxoZY9r4!d*PfH!|$ zj`)*JAS4H7%I<=JC9z&@awawCT0aIk-5{6cHSu+L*#|X(k zd5hpPP7Lmm{Fz&zl4%Z!Ik&7=pu>$@Hi8F|B0Oh^_4zz+YZ2`^o7^6@Tk^m90D);p zJQ#GYDrAGUNQzZbAL37Zqojhl>wTicrrIUNIJL#uKhF?`fvu5tK7ijC9_`X^T#8XL z&RtWe00Wz`MhXnFNXnxeF0K&Wb&XHZto|vbPhqdtU8XPeJnYo{a075=V*269G)dTr z2#eA#2T|Nfjy%{VV7IM@ZFWsAb~M?s@Hkh&(FPb)+r$ZS^9Oc0bvN7J+-%C-F9oKm zqxVb31KwoTe15Bp3G+pXJ+cv~3XXeGk-{}FVzb>HlK4EMRNwCk4to1Y*)uc4DX8vn ztd3!4QpD#B$`#?Hi9u>nc3S6T(K?6B9@dE2BeGXhotZ)AYU|?4~KVYz8d6dTMmHxT|RA13+rB}(xPK3uf3y%K_Rr1rs2gWl88JC0JRhY(fHmqm+ z`P>Do$9ZcCQX2X>3zFmjfMl_7H?z3delkC2w|2NtdqN;K-3ueVixp<-Ou}<9bj%6XHK|$kgrB67mu*Eq{XHP$6J~S=DA2gV1ZuZ2M$C5i^`Ul0OeFEs|4F9XG zq(GYH&G0|1-Jxub0WwR&`Zr}JYdk=MpZoGU?DoI9o4_%dKg#YzSkpbh>SBmbTliq=v60^|#GtrUONa(QW)0mCmi`*w_|+3yq$s z3_1|i=H7Mrv0wbFx-7FNsDS@jeRi`)_$&bmjY*%Mii*A<363otZpf9M`Tnm=YVFRR znWL$-Y;eQUD3e~x->cYEPxOs3y+(`O{`21S+5)}S+UtLhUZXnOs5($=7-V5VfiVYL z)q=Z>5yxQU==>b>XMF|*HGhQH9;z;SG*!fVcP*kQlh zRfAHWmdietVeo_f54TDcMhF9XyJ9%aD3Tpl3uWatt0HCMa;a01GMtKgm;%eeg`m}Y zx3FK@#ft+~C=#`g`IMig?foPzp=7gokv9LOvWRsw2ZpZHLo^qKtZp#M{(PckjHCY9j&<{ z@|rI`6RmmiWoj<7S$1WiEGx2u*ZtSaF_UL^f@Gxb#hc;2v(SpVXT{ZBj?~=|nmF(K z>W=*_x3b9MR#sTuN<&6ue(TWpwVbe2a@8#Riga1u)p99iN7)H%VPbB@H$GavRaHEr zCX1c$!0;hpU1z69848VYl8x|iQ`?3co$!mn_B4DT*1OmnU?BDm-$M9nVZdZ{DoOjM zeuD{^piIRs?CvxdEQacvz7OG}hCbXkj<#@zq3>Hc!V@t0$^9+6S%L-6?GL8W_;?-) zu?QpIO@?qu!Dsi)lwf&u1?FH>fU(ZGQXoRut0bBj3l4b#PXBtzcsTo8Z0<}AnEFfD zgxu%gC6E+{iO@>MgKp^5`z_8PH^CK=wr|Fv&2G2`R%cJ3aJ}ST^NrxegmorHWXvj@ z$;Fh-jVZK@3HTY(xaFj7b-HDHDb&uN;m%H1?rAXLO(%nR&cOP66FcT) zfAIwPaGd=%9GnXN=2EQUlR-({qp@NyxY7Ye4R9Kd;j+tF@ZS0ptQpo;r4X|w+IVd? zws0;fh3mc7V-Em`v%o4j@CXgk{(HeJOlGm~l{A%jMN%eSxgos|;(4_mwpnc}Kw}v9 z+KY|Hz3D7>kp;_SuwWaA$?R3Gj!;1C$3g=m`?Tw@$SUGoL;B8;z&-aGGoL{onuvb{ z?fvF%@fGdb!{*Z1R}Q%7I7saLIxW%mV&V0(g?) z&fW)YzOZ4wbMyMa)5Eh0zP!)n3CvYJ>>X&bdjMu4dqDF&qDw0_xHKS~a2x-U{V6*< z10r%O{i!q{Y2geu9(QLS@%`Pkd40xoNC-Q2*JB%K!?l`lXh@R%_jYNj3>GH2As(6&c-0VE7hv|6DBE(CH?P_LO0}w%Og;;bw=xh9e$!&ci}r zUjcTBs5g3K84)W8*~@^rAQe9y>_E^V4mCfhFh6>22302F`hz)gS!qNykcog z#e9xWOWfMFLbGgqgL4nbRQzsCBqEn#BI)>LFAFey%eYg(cad#gsas>MkSP3_-tFc=LM{G~Tl}r2xVuveNI9;{<0vS0J zZ42n0T@OzzTp%^TR~p%+mMIp(>+?uP5z0_@bZ`R)wNu!rtENqP+h4tlQv z?IobC+yle7fhJS|^GGf+gS=0&q6T<046csw378HHL0@`@EIvOQE*-lY+k9{W6HbNO2+Uid)qNo7Jv4=iIurNGi}Xrh=Wa~&mI(GsKqlhwt9gFGoM2~FCjYkv zu@Rp5;9Fgm%%<_W)&*udLOCZ?^m}~se*(BOp`3aPqol0Blw}cSx@NJGr(ljHZC;ck zDTP^*vS=J0=7o(O2Jd1GS%30{xl{9n@tXc*2>0p_Gabaiwdpwq@g?k6&dv&(cN%!H zV)Ms@$s_HN!@rcJ-}@7)qT^0f0;0uoQ1?`@K-eLd8Od=jr?e-M=od~Jn#a;7ay(sk z5HtAfcxe>Xt+f5mC!c69n03y~Pzvq-by-kew4V*S8Ln_#)C_k!mBzm=kMFC^%p><6 z?2}U>I}&={1jA|hNM5kKB~eMn@2Ro$rvp^0yLo9&%KkN0WL=Zx8!QKAXN69Gtzz$H zi5+`(P~e%E!!5!@ywHj&lP~6)E_J4b&9ro$l83g*qmRPeWreF7I~ckVq{&mSXQ!j_ zay+P#_eVDTP#1I6B%Z>{K(=#vz^~FfNb(m5UQ=!`oMMnH5kYn1F_+5+4^a)C0UE*q z*Kmj3zs6+PU{v9k9}lj}@sAvSjYc*%NN!U`30@R2P%t~{cfS|ffp$3tzV}yQa7JGW z(d1~p_svn?dqFWzhkAEwF%i9)3VKvmxJ4NCLc*Txurr6LmrAkp?|zELXAUvYZ53xX z>-}A%J%54p+|z^){pX(+X_Zc5841nx5HtSxN1`~y^5gPtFI?hd>7QX&#P z&#BPsSdfAV$xWxl$IO)|U-ycNFPY~cF-k0&@4@(d*Y}ohNY8vS8w?dvZBLZfI8WG_vi8!nU$9-aOY@Nm_(>o!aY%+qlf0SKNG?=(L^<8iE^p*-hAt2q;35#^!& zp+&+Q10=r)~LOJWHRn^k|9L@>hJ0@Ru6!#h%C|590i{QPAm)V&NHtiLRSe(>T2x_9*1 zs1UrgFtU-(u=M^Y9$p)Q9`F)gejL_)OYQ7)mVWX6x(l;!X%aPcvDrG!3?wu-S$loNX7NOUT59fsmZ(S2bm<5WtA zX=bA17-?{4iPd(k9ZzUN6G50xw!WgvPH1GSTxN`TraCrPTOinjq4O{~gwvf{us}P( z-V6!pRE_vuBP=iB#zVVCQQgtr^@{qh$MfdZAA>jIjwo}QIdkf7jWK6?59a(bfjKo% z<^(*+IUyhVB7LGq+@b!Z8+YF3+VS7Yol2#eOi~9!Z(~^-?&lPD=jYG$wQ2)*Pqf~F= z40-`m7pM=d?@4`b!*b#K)aSDNS>K3hXpBEJEl_Q_-1Mlmtv~kQ&$i3(=P>6_?xAk{ znS@TWJAa^3|IPe?xxAS(=n*Wx!|B`rLJWGEFKWK0ef4I`LWiA0ozEg{`-@}iLSh!y zuUZGBDN#ReqtuubQ6h;g*VY6YkCvkUal(|3IYw>7n5wIg^b;#&tkC#(vZTc`|=^7j$0i@70v3_9F2}%=(L_L?!6<6O>5If@eOxNke@zDZ7Tf|k0H9>Jv5aLVPb6&h{K-hF%TsQ!?1M~qxr*o@LXO>RKfjLN0 zWsFctB@xK;-59p;t0eC@#64-97yp4t4Txdl17hbu47U+tnACB??${1Wxl24QhQ+Z3uMlZNqWn0IPH^M)~=z|?WhfUKUEM5`c<-;HWpfHHj| zngOh~ChQxL0ez|+iS%6D0?#MxAU%!Wa4s;|dtfm8jAGV-NM>~S(ab;KugQn; z8_aChm?`XulnMB*h{JaqY>!$I(BcWpZIRP+?-bsLp-nk5#!bA z7_X>ikW~V+oG9AWC|V9N>l`r)664$g()4f84p3AJaSL|nsdglC0C5Wq`eM`X@Eg7n zI7aov0S$vr6T^7^f5hhp$L;~4IF{);(Sv7^f^nX4M4V^PoSr<3z;d3&!!EQyzv6hd z6Dy*~#2LEg+~Usiux4G=Zi1HSsx}Un+=MiR+LhS&IkHWm6KKRn8po#4CcoGS;~p+y z$MDufG|@Z0VE2Zhm*}y6Kgnx%VHxsR zFg(CHA!&~@8R4p=JuHcw8Wh|Zk|Hfdr*#J~P+vJ8G0~cem}uRIm}p&#m}rfN(&{UN z*x0Zck#|&)Ms1)6)I6Z(0X5ndpiO1a^Tg;uuRK_a#kw$OOt12BsjY={#rlS;5Lc|j z{E{oyQ~Z)j(-2dv+*YX|xB>4(&V{-!RNeV0MWSmzjP{nI?2~jv$W*(W4~M$%kU2bo zV24AqG+34-cb=4owi2{wbSq^DQwEq(k)`n^k#tt<%kq&?D>;Du{9<64NS*&$ue zmg%%^*J({dOnR1&nDlHMVv_90n4VQa&#n)f5qYyJb+x{-lJvTg6uXi%TilUUNxF@r zUyu;fHa-rBJLY8Ro!Io4vQ6ffsIS;);+I^_-ioQ&(@`~B15duFrcHpcbi*)Dz^ge+Z!CvX4UX1iNJf1QPjnCjSVdZ!fTV)&`XVmEM{4MCprZx#J zw-Rr0Q^!G>ZJvMxYO-1>s@<+A_)?R>86M&L?0~(zGbX61xV{(L?xIGGm z@x^V&2|JZ|_ohKyU8O?#*3;;mth`rh9YOV0d$ngX!MfH5jeAb0FT_8NCtR z+*@PU;CW+@!x`7ubsHV_i)PX^nqI`au$%8*-8hYmIFa2eJML)rD&8KdoB86_v)pjW z-tm8B@MVR*9EU7{DL3cV3(th33YUEk}OF9)8@eC|6e4mW*Lj4l+X zpR9p1yPS*Hw3{4g(L^2|>FLX$P0~*4Usc-%(C7B@dEDH~j)s;JB#JUsJJ5xUz@Zn= z@+ob6WqyWlEZk!4O|9BaNhXK#UxZWVtliit$#kG_3_B&mQPK#({&57;^$JJG(KMA% z~A_BsdiCAXNLUIRgd`{VI1aHS#7 zC$8vBcrgz7+63e<>G3iV^0xt}BVQIpE=Q5y5=H)3Dme>qM&}+16^*6aCo`84%}skr zAkm{;;@T{|457a$#!hYeiiA>6i{0Yfvz7T{y*6=2YUooW;*E988E~{(ezq@+A20Sq zv3;^{DzL+j8<;#(4y^tzj6I(3WPi(d;*Nfy9Xy-wY^8F2bmyDehPJQVy=_E&EU7%P z_aj`nXYpn|e7s&q@dXT@W4%Kw{Wp)Ja`g+{su94Hxf74Z`~EJmzsc-V;BwHt_eya` zkr1MHT2cBG+4vb!R|>v%9$~rdzfTw^Ha$Sh4iv#PxFpjNngM81hgtw-`Krhkj7_;x z2x1r%2hJfFg2$`26O!(@0MP64P}Cl(w%70g1}1Z0LlWMI4cPib9{gH+a3%W=eUrK1 zJJI#7GNrl>wvyqiR)Hoc$>iBlOzerhs}Pxy>urqK6M2UkZalVqPzioA&orRVy#UI6 z9h-CEjLh4GgEnZPAiPG_%KRK(YCbleF_GA848NnfbE7BedG1anZBC-YA}`@gS>m<= z>OtUQe{2^`$@qKyI3LZyTScn417OV|qyG#X-1g>03tj2Yzs|#Os!g-cEIn@sC%Y!L zA}!lTj&WFb>=2|^$VOQy73`^>TIuh~Up+au71JOo`}n4dPdxF&;ML=NX8%{_)nfuC zh4KW_rcySZp$}zPbqtFT+k*tD^lSvv#f zW7G%1SBUmM1JhLa{@Vkz5Pb_`O zO1-YME>Ug6rcnL5&{)OBPZR3;F2Bdo8`{gwzJ^_SNC}O7FkXqiBgb_W>oMMc@3P#A}{ z^rciRu0AxJfZ&OOD8cx>`HR3YNyl*#GZey+t>YM$h~tq<;(FTE2=BOEV9am-1?vHwR= zc4%XM98WX#a_q+zDDh*oUX`>&B>otZ#JZfR)%ek<_>VxcHDAl98c;v96F9v z9Y$j;`z7B;rRyLE|q6n1P_#6FVOpV)QvL>;}9kC_XQo#Lf{c!C!MWS zNb#RcL^3djBoRj);n?v`Xb|Dp5yP=C5yz36qMS*@F-|YXQEW|ezKo7kXFwtrC5EME z8~mtR{FI-cj^@qDf0`D{f()haKEXD>jhJj>(pgmpZ>O~f;z7d-qd z&TPiKzc3mg{}Zb1N^enOL3>#KD;5mOwqY#tX^21vx|hs(s>$~26Ief z2-6|#CXS`1btT92L~oel@X*<$gvTbPCo{Z+g0=egeH~8md4sPbJQ~G23ZMVbY9Mv8 zp?HR45{Cl$%Sgq!D!m~`>+J>qP~dm6WV~hZL?=)MaiLN9IBW-%yNODFP+>+qSBxOB zfRi{isTWT4f`6EXpTEb^iL)$X1ln=fO&~p)2t3zG1aL@XC#Udb6;)z&Zxnj1gSq1> zO=PbkW2g+st|F2BfuqUk9Zhe%Fn3JQ@OTN&P~e$Bcq%!bP;M_3?wzORj${qbIKp%M zf~qDHo)H|+wjYk?3X;8%9U!h9KSN?M`aTN}2iJ}-2jY8ym>oGj8mRZ+UbVS;L*0u^ zy5a4L$GeX3j?(Z_kymiMXD9Yj_3y(QipM*e@E-V*mp2=D2XefRT^=vIE_fs8>+6fT zBw8h2rb<6`7cgxECYd+O1GrUfp5733lMR{8sA2ZSsa9y2KsT79+d}9j5IWvA*Ku^; zPPlA+W91@7Vh02-OybR!edMrhfPkoVP9(gia4@%r4drjX@YXquqkpP5^l|za!#^DO zJuDe-i^xyNoxl~urA8)1%kK1pl^|0OGBW&q2?Ps0u=fQdtF{~eRXTKJ29El`86k;u z%7{*iMu*-7#o^CH$HVEonbQlqdaX~N4jC<##5jNu?mCZx^QLO#h?;ss6w|X9Uw{WK zmGB&>0G@jY4{xfk;8wLw`4{k@r4pV82+vr;!<%XY$Mfa&y;Q8X@?>y507niG>(Er8 z2}a-9FkYET&mzo6_&HcdWZqb>;K(2E4S9mjM)W@ce^)&I{pG-48^KSF_9dji&-g!& zKNOFDIpG&0_^I*U%JH8Z-wSh4es1T;5y!%|hSn=)eNLm;7~Yf7Tl4Vi;J*u7;4Xo; zQej{%#wp3EzB7C{_^J%l{tahS!P6xd5V@fD52UHK<)EiIC&4c%&iDTZ(p%h<-WW({ z3(=dv=~=VSi;F)6O{yb(Hbk|3aovB3=50M`(vWur(fl(`?t+6!q>f3PUgLj_-km+^ zQ5}D?4D^aPJ*wlKkvjea>8j28gJ{BI1cL1A8>?$Ni4w+o{=2Xl=6e2uG076E{#4&z zxiGII!f$=1s_-Pr1q=yuFemzpalJCOyDTq9b8&Apsj|CDL31gmY0W+dfr2gx^xu$< z_j&%SbZ_g8E(uj4x*;5Y1rL}=U9aObw`czs>w0HzG^wtKmx893)1*NnG#|BE^nr4XQr?)$vY zkC==HlO-toYuW!?8{4if2{O|lEc8~mxhu%J5q2-Z@F%#MAQjPtIjM&{ZO^I!wj?HT!LN|_U{4uAo zC?~&Q!%EF8t<_~I)ulBH1;}4#^?nha3hMNj;1IM5)~Orac(iC zC2CMiR@&YScg3B+Ut)na6`Ws%jk+pqSd?dG3HY(&!#^`sxG|VL0rMc(r!awOe&2*w z-Hq6@rE{HWdnHT7i*YU}%p2B%ck6d++oe&KMz%n3+&(sj#UDQi=0VU|`*5NoF5x+V zBO?sht8eRU^M8=EajivA=9s+wS|q$Z!Pz$*bPC>WaL@su@k$Y~w8r%IzH5LxQE%5! zB90Bf*%?Pd*P{|dJyi35P@7^s7svQ1yj5wAUXK8Up3IzG;rdcLI&!!z|r1@DhHNeS8Y!px%opA z-eDhBagDws>m5(BTi|fH$`xy-GW^il;^WwYIz1y9%SH<7N9k8 zU=D;FIiVIE@QQALI{paayl`g0lC@zJ{$b--IHTb85~0uHhGjX2e`57 zN?6Q`0}C*R9_*oaK>W>CIuxM;{Q`f{gkDp)9hO6Szvd~F6yJ}@AvXam!1y)?ool)U zSXEm&e&Hy9nKB&#GK(m&b$N-fcXHUgZm^>?*sMg@i5xbq8|;NlqSb}p*nZ9jxRcm7 zZX5y+0VOH;aLgX9nZ>q4;oL22{Yb=skuWB(3Ft>?Bj?8%kRnd6hKmxtI&SR4Q zecs97B${r$%=@6|UuP0%WIh<`OYb_k{Oi(i*b)t=dc|J_P++>M6w0K}m?Eqz#%WlA z^l}(*q@7l-vnRCrMcD8@De2+RKOWbG^ySYn+?Az8Y8Tl<@9AXH{abH=XEQAz0(Xoq z3$e!BJ_iwZ$2ilM5^%I-$b$tvPSLl&Wtq11-O6JdalPpS z6*QVdR{t5X`HVGnw;XtkiXpxnN>Q2`0g)Sw7D=PdIg!GtKStLm1n~gqL(hQsII-;< zJ3yz+;6#Zb?9msAO#Y)y6hV2^AP&7QXjy+&DmWxQbc|FYQhh=OTCWqAoB;<6CC5;j zZ72OZgwI<8+4s`)mnv< zHF2BhgoY5jc8&A(?HaeoqIgtw{Q)wCegkEb)V;FWg4Y3!4Fhu9+CRgX3N4e^U)$e@ z-r+PtXK0w#YbgP~o!T*+EFPU4g8*ZM65i5UjX>7gMd?_vL^$ zb1|IWzQn`8jHJr*zZDzL<8dUtou?a-&MWABPG%a~m`+wIkGhDtIAET&kdRQ|#XTy% zt&djlXyvt<{}lLp6YM<%j>B2)-Sj~xz`wc}$5bZ)N2GcsUhGF35*w2+=@ECJEYeOG zasc4TTrBR`T`6S;;f0aBdP*)Hx9udC4JrF5CNmEng@}F0@ZAs}e1m3CaBK~jUJp#3 zD(>hH_l=|VaNqbUe^o1-jo@%ZM_IIrjlTe7Wxhdd`WY_RNzUp&jo>{JUJF;A18G+i ziZd3QV>n(2gK9UuL3`soUjjztYRD9a%A%$VV&hC2 zoddihL1T8aH$!-RQV;?4r&E5H#j8VV5 zGc%Ek27<;+2b!OZGq@noiM-#JcG5_I?!6rDa5wQblkVUm2;v+Zq}o;6{$c1XyX1iB z7P(;GYPj9Bw~|ueh>Dg+sOaecC6>I)aRN1OXO;eo1>Rw5a0>N(_u-%#G^2gy;g%5 zO&&^iNc4|jEO(j1M`A+lGy-CFWvBJBNL0g{301h!&A!1ra47Gk^;uya?)Zrk4{3Y> zgUw)uC-7t@Ind$QqAVO+grkc->}9=2AI7wDC&+EkPK>%sAvBD-4Kon&QMVYvdR-f5 z!EJ1o({!{FYvG*Gn_8DS6;;(!f9b$==q1uwe5bO7N=BWR-iy;5_V-Am)h7*T>oaq7 zB@Q?}690_mk| z5jEj#B-egfN&mk9V0*ZuN^_UV8JK3SG`3)DR&A$-fG*0DjCtB{lr}sc_`CpzUa7V{ zc&Z)h!U5~g%Ga6g6-<2OP3Jfd6TOasdD>zpv z>@PPrTPr)8(Yqy`-y=7-TH7x|QXHDE z2_esjN2Pf+a_Ao~e0}1t-n;Gz*niMuaN1iZ4l*(0oqZv^iVH!t4W!!A>RYu5xOAfX z%RQ~yp2Pwya=jnd1f3U25C;?5q#2uy-IQCQTU5O+!oj?_)hy8KoO%r#Z zjpM_?`zz1?JGC;4n?=qN0TP^48~OS!r1*vGZ--MP-pW8$YQ}MRlY!FrceLmJF$A=} z1}`nSr(JZYP#bHeQ&`giGq1xdIq=j+XHdj;(^0SI{a+=o!f>*CLD+=foJvUK}{*N_hLvcq6?(tR#z8FGpOd!3eV0Zn8#EZx)Fq%&w_NF9%SBfvCsda51S3vFz z8?jUktpI-$9O3EI982^|r|EBiwfG()35uDYBk{v5%TIkq>s`t}Ga1T-zECm_7g&!^ zReB|v&UoQUM*f!kz)$kLbkG$Jo-o&uyl`#zkZB&@X@G|)#`C2p(P?B0kD?>aHj|Pn z=E+1epx@$sLL{|vahpf+(wHBa1^~cs)!-k+!+qwvk%&2PaG$vxS12D9f0v6elH)it zlfN=u*I_+4I@&^D3z7!2^6t1xkj>j(( zDZUQBn(}C02Gtk7{xScC(JA5!rjE%3gx0v!F=v1@($F+Hxfm8}??Bfi|A$@D1p%Ko zJLVlIF^8q7tk~3f(u2=Qm+kkA#<|gZX0Sn4I#Y_udK*=T?3BmFL0ckzspiTPkgD( zz008g;l-?DNOshZkULNL-|y?~LsKt&r_i{c4r%qDxy6k`OMUs;O<&v?z5OdIE4Oat zhkP_!=q;Zwr~#&I?vHQfPaQSNCE^gqLc!)3*($16N+*cdCMT!dquuc(wZeIRrc1%82(WmKufNU6RK z4?|vRmyk!~ouNaAV)$`nBK1!XJOyRtj4s7qi1)?|%?5Ak7E=lsv)KR!U1(17ij@or zG!AM#*@b44H(g6I@e~uWySd%$o1E{6CLjwE`(I8zFGD_BA9aYnN2#CJn}PFs?QR^Y*6m|DMQkn3jGlnA8r^JdUQu>u z5%y--$5c|cqgWekRsglZyXiimtYPIDAGC7H7K}W2 z#~35aCR~L|FcC-h*N?wmDYL^kR}RTIF;aVBkmEWMx|4bZjFS#F&*Uj9;zJka?ifzp z#uGS?1Rt!Y(F|*uL(t>U5`e2Xc6N`IYO(_a+w&n`ENq^`HM)L#?peHyfb2Rqsm+8}U6M z;+xFgEx4&+zKlH(81!Z1d#vyaaHu|C<66T6`Yw^#S&;3WKo^znkvdtf@mQB61m#l5fDZhmBN*rMrJ<<=OmHh=CuPSV~< z^RA-XF%QqTc#U{*LoSmiV-&ytKeY$2ShPCSEVw; zCY*&ARXl<8-PNj!c|hoPXaF>AR8e-bn;oT;%}Bw5#49pKW^-s{=TU6qz#|@Ou-E}$ z>X>``#m!Rao2+)&lkvVH?4es}auHiEX}r>Y`S-&KQf7wS)=gw24dSD#IB6M$=9wVb zf8o!%T>~DW$2odDO^-|Tc&Q$H_4sFc{3|`)smFWu_$@vDNRQ9yv4vU+{s!ss)p|Th zkBjwqsUFwp@diEKs>i?4<3H;0J9>Ohk5iu4=#0|iYxVd>JucScyY+aL9&gm+t$O^d z9=GW689n|)kGu3Zjm})c-w-{%R*!Gi;}Sit)8hy9_-A_jlpa5)$1QsNjvjv;x&Mknb*jSIgmjNUuW*fgp?LY~-P&+<(} zZYqOTDuNyZSzZOKR|#3To`|>{VXUA%%hjK0v=-^m1aU_krTFyjSTv}_=Y*ATT-S|a z3}Yhvq&WD?<;}cZ)BB}*Y#pTCN8-ryVF~Gx=MRn2^AGNxFY-Ks*L1V?y!w0Kz7OA9 zIU1htgR@TfVQ`QBK)AYz8ouwV$JX2*2KUwvgj+i4hvAcN(BLBS%DY9okH{es7whTH zOFWO{m*;lRADZ1Af8z5&b1wh9M8|h2{KFPpKL56bmw*0jiS~SbsTN!Gc#s}v>T%?G zoqiwTOC)R=cupLQc;3(v{^mP8wfVzD&blKx9ZU2`Q5-LdwKGbp}}A&0d4R<4K6q zl7uuve_`--DZ((rNJDx@>Y3!DeS_vY(^6wjQn7~#!Wj#2BpZZe;51~U2pQ$6LPiPV zNy$RS#6d>~1g&)jY%7?i3c}#4`i>dsO%_DZOC8;3Zc;I=odww0Q6}sjk6=gHWo((rCEWAkW}yk_B5yv0$4tTd)~s2>pU-b*W3W z=d=l<)wwUP^Wdw^fb(#;K6-gL43*LU!AhzJMpFdz3F?A3+385%|Q3sda|oX~J-CsxZ7fMHpU^ zEDQ(i@QH&vt~_cB8V08bgYj%Io(;yc!FV=!F4FOR=)P3WD^r9kOHzd^Cn26Vu%rJ` zF_>PLwp7apc+eS)vJVEW!4r{>(@p_x$YXA5-QeuL!VvGn!jMTn5r!BZ5>jWR&EuBm59QyN&SRj^%)&k zoY8fK^FRa-`hf@O-~o72Kllvi0jJduw9-KR30cR$%D6zenQG0(Kh%qO?Qc3nw(Q1 z=M=~}Sr{}IawZt?I4VzGUX&AZ$$(rk=IZ55P7;zQnsW?SCXuXi45LznQPAisItHB? zaMT*?SC_stEhn{@^q>BC`x$_kuI*`p9d)&%u6FRwUO%j3$eE0zR|E&u8Tuv(eGR|R z;0P8Wu|3^{c62wwb9&tMEP(XCuV{X}4MAULQ1TUj!n_vx)!X0yta~)B{Li|lyLP;7 zDyeRmUg5p9wAzO`xnWvu{mN2rQAI;T>0K2I1mPj$Y@fHz=XF*r^W8PiTVGXk7gDDg zJ+)<})lzkJEhhCdw7Y5b6&1pt4M0{{ThmZmU9q65ro47F46ku%^U45KGu2mFSyAt< zsjS5wiFrYNmA4|2N3fe0RFzj0E-$SwsV(wVd#k3d^;QUzG^lA+)fIvz2{b&V4PIA$ zeJxgBE9icnw_Gl*DaT`Bq`|eO%3EAtTZU=~2RU_LeSJlZw`6&JMQOPkOOF#taz$w! zFS0O)^6TJ~DhPieuFQ*YB4xIPb@t*)58?Cy#( zuW*+M#5qcAVPle`lQItEgXFTv1<1np0B- zL87W)&2i$Pt|4#HHD~s{TvlrvycH|C_%wywgp z2G0kW=2kRB`TT+|$%thBL?!c8%x|cuUr<}W!i^FOpA%iuLCFhL%Y5F72H^P(;U+j| zMP(^8cD~zFT632V4M-4fF-$`%m{wKa!1DomCQq4Fu|`jr#P7M*2oAKQ(sEDLvief+ zo60zZa2M5<`>HF5?yS<4)G9~BQZ-FOS_#L48rAyh%K%i!aYgPy*EM&R%ac2Ce0eoY z2ZNLJHa@i$WaiIv&5b?t2eau}I^~LoN3#5FtX|A{W)~b51ue5r8&1&!wZJW|OwY4jJb<=z` zycIw%>(>fG20bY(t@HZosWb6{!NM3y)3Ul~wyFKSovPV$Ht*ENT{L*u00bfH1=ze_ z6ohAX2*RtN^~_!9yY9wZv_=rp(AM8-5Cm%_+H92|5Dy0-(`Lwc<8r{RfIk9yv!#HU z3flG0o=1lcj7(|_cGu<0=^F53!+DO9QYmwzHb2cH1Pcu_h)dAkLn4Z;NFfh zWT6an9)RZ_*i&#{hx;#Z|19odmJm9SCIIi_z`GuJW#BCVo?_s60eBY!&s(LSE1|4Y zkr#dTHq`G7Jc1sFOH#>5LCCbDZi7%J_<%fw^fhpycpUx~%aOLG5GGo{2bZCo$S>o* z3-D{MLX1Fr>kHkupMg9x!7~qN!D5z}{tQ+?D8kQ!d(dK5q^sB8-!O7jv#!9 z(20=x3S@?G1Huf1B?w*w1>q@#KOwXtyoc~5Lh7r4N4NoD2Eq~qFM@*b6vCen_9Ofa z;S+@9KSNdsKSG#}ums^=gr6b&2f`kNcM!fn81NcKSA<&-<|C{?*o5#H!fz2?ML2@+ zPlT@##McF3G{Q{?GZB^`G$1^P@C$_P2zwDuA#@;^f|zq6T!SzLp$MTAp$_2zg#U%` zJA@qwZy>yl@FBtlgg(uX1;QAFNeD8+tq4^JYY?bqCJ9EtB$$OhLSMlmB*XfaDx?YN zLO&enZ58?p1B8LXAi*YFAzUeB2!r7sG!&cs!-WyTNWl*K)hJ=KkO_O&)xtHfw2g)R zHCq@53)pz!dRS5?!19(WOcHJoZWL}3@`QZY-wK4uIEVRW;TFLGyW>m{+iH^}-PkTtzgr^FuADX|AmN=(FAUbU)cjd)@rPM(;ElPC6uvqy~xvPX?5(bt2a zT550feLX6r!6ueqrLVeYt$1Q0R-TwxE1uXJ&K|WQ$R4$-t?x;k(h_M?S|VvmOQhVe zyqDVW#6*ldF%czC?1{6NLN+Y#rIb9eC(d5WS>KB^DZj5r-L=%-(E57T-?ywMLmMcu zNBt?W2U1GxQGX=%kS5{mAo8ORIRFrJi-*LqJBvkmIn>ACeg7~R{I*3M{iK<^0hUk)NNH^ zm2#={IM!g95Y19UbF>KFg!F_g4c=0$e3n#T4j7j~Pfa8pm)tv=hN_iy)fGL8tmlh+ z+CBS<2<^Knyi2@%ExDw|w=$AiP3x>43|k3qgO3S9iKJHCRaFzoucyV;v9`XvqQ0Vh z$+CE`NMbK=)wQ*C@jOCaAD<(~sdijiRJY>NCPhjUmloBmSXxZ2h{f^t#G(D7s%+x+Y4HP*ED?s?ad=Ta>8|7Kw&vrub4uGR5gsBxyC&UMmlw z!5x-d^sK68NnL4uX?1l)wSHd}S4wITya=&^6KCQJPWREea<+A=XCy_h1HX;qD-{8& z-#8Tft~;-MHQk74w=oc!<^6yC7jZW~e22ZQ@-3X0g#u96NCh!rEg^Of^bGDTDm|t@ zy8oZQ|NnBpV#ShqAl8V#LqObu@X^0xy^c5q>(abuwe{&zT<73=IpU|`U+uv4vxwy@ z1>q#%ixF2Lcz~x4aefB!;o5=t6$CqA_99*|7;DzwV@-qjXG5@#$2G01cMb(zz|(rW zaX13fY2AGaVLh&CZT`~{Sm%N+t4*(b1X*l!K@nm?Q&AxxMG?EAi;74R6bp(9 zimd2ba0NSx9oJp}MO4sL-Z{C!1jYAuzyEvtzW?{Vn{RT?ojdo;%$YOip8W0%NO}By zo~%#iX986+Als%6bc>YF2fBP9^bKUL1L{49EI$pX;b71SX#S#7%9Ok zBpjD?pe#Fb+&zKjLc)F_J~7>%lphRq52QQLhJ!%G4rD%J7Iz>qAs_LSI7h&N;9d!? z0zAq=jKtoFEQ44{l$1vtWwVq=%;G*Iv@ygwdI64sG75`VtX^BJmPwJQXX-~r&1oVJ+m;f zJmQD(QXVnKaw(5EBQ=~XgV^L~DUbNyN-2*R;|(c~_@e%7vOHpo_?Hv0kBBQCkn)Io zwn%xz79AmB8N@HQNqNLPX%W(Tfd)%?#6}CHJmQaUr95Js)^o}7h;MF?@`!CVNO{CH zT>;0$x)66=DdiE{yeH)mKedgL$^j~r@`$slaLIhcW__eQ;-6ckJYuX*q&(uQPJp3G z>H@k$$|J5y2OJgi5%=XoDgqv{)u&P(@!KhUG9NMD^HLr$V*6+^A92`HDUVpM3E;vg z2l3&2DZd*iEaH>curko~kcxJKPXx-3BYk56P{(+(J@`Kkrq2hP1v$Y$k1QmgDHT8! z7Ljtg1FeUI^Q9T+mt>fC1rXk(!2DVY^9=GMfJUT(9q$4^19W5>d9NqXC`hGHJ|3uX zI@AliInV`=DuF)*l$`3^h zaS6~|pvQog0xbu62`CV`1J+}~*|Sda@h@sfF3Oe049r)@n>rk1KJy3p#1HcAe~|Bq z`R~Aw$<>hv=P3%Z4CPNShve?(`~lAan(R8!263$Hl;Zye<{Dj=kwZ6!6CXgvXTrCO z1S1~NOhp zV9Dsb;x_+FWI4f}8pk;K03P%DTDVdWY za&4!7Rx{Rt-U)TmS+qa?MFJ_F_9-V5ACfqKQ(;(4g#8}*5^mMqoYJ93o9Ln%_r zIDS}4X0=RcDfSj?jE98#I3oTN(+={#)o(|MaUchKfO}8A zw`9`3u+O;rgeQ@1-a-10rI8xJeM2*$)oAhXrUiO}J7nNB2Atu1BlGc1HE9j)*HKR+ z{z6S?d8i$77NTatDQJPDUEt0fv>4nm69X-3A4U1vI@;K`{X(0?9?5$KCP;#9dAYj(q!&2aOlT3lkHS1{U5d)cPHUJxKBqm=YCu>+6{RX=iQ&PArKEMBjn|O?-$U^M8gM1 z757V#{lzm`ZP-pu2RWU4p?`1dJ8I@zOOeed`5Dk|5v1LtkHVSpz0IR${_J4^aZ3AB z68Cb+bVPa#GA1IuN&8Hb_aivgGCzryjc2&m3}aHXEs{emTXfJe*?NptFnZ)cKhR@! zRtH)~9F*fpp9|PPGYQp@iZCrU|k(;{?FG%?qowvpcF@#lNgcnfXY9CzW3!a zABfh4egfNs_J)3fj1Rbyc9Z(RT#SQB9~}+-3z3xT=p9I3j636Gv#5Qxe%}U+j?o8` zaVOS*b#*4u7~=vk!$iK2ATDp9s5S5zP>5|xT7 zM3tgTqFPa%=$YuXs6|8(D~r{|T4JWyNKA-1VtcWh*i-B)_7{hVx#D;zekOh`ZV^)olnc}gvFxr@+3zt-!Ou7m&999e+gw z_}-2}qfrP!A3Mb^LsQ*SKd8W7oLoU40wIg!{Jz0c+;ZF$Y<8$dWDvj3Fw6Mn=&$ek>&R4YGtphFMvW$r# ziga&AHw}F!SlYu2pA{C(GzuERWLa5RGAD!w@uK)qq0vmIC?408rAug&g?n|p62*fB zHBpf)Jz@Y}r)y}*u1|`Jie@^*M2AJe;-C41ZXXrGlHjo67|tTtetlF}Y&f-mOgQ|A z`4W|Z5Je4|w--x;=z$WIHM&j-;D^D&i)g4uolwP0B@LxXA;EK_B7@r-)>Y#N4KpD0 z$cFWkHOwh0IE3jHJ}VNWGCiFf2mw`}Q29EJRH_1nE}*Kx=u*4V1XL=eWd5S-(~DiK z3e0!2ZnX}y7!z0VX~5RAF7p~MyFR;?`RknVlLDJJ(SDs!J0`-+a8$_g3kD_K+)9?j z+;u76wNlmd^g!dL+@~rA11>ulehl1nv9F78?brdEs*BC^e;qq4A?ju?UF%FMb*sDO zLz+Xahf&#WUk1C04n9l3E{OB{nsGf6#Pa*F}M=<3n?@`6{XVnohlC9`We8BIvxyO}0zlhO)66tUbN7 zE`&~;ziUrgrO&8s0?+hFh5Z&M78;gM3bozjUS+&^cx1|G#mieSjZLLRrc&}N((ZfF zz&xotl0Fhi9|#Rlr_Mk|ccQDJGT5|&f)brhB;{c)m65cWNZOdFKJ^l}F`T#6VB%uU z0~4~^&Tr@a{q`nMqnw~Dx3Nj@ae37HpjY?p2{mk^29?^zP$1|)2p!B&W%OofR_R=b zrEsV2dvoiQ`{s$xraPR2UK8E$vKoT{(VRobDGLktE*?9m>B2Gh=se%S(L-a3 zQ$H7uUl&iA@cg%zT6e-vtL7!Vr8%AXEv>4>tLo&oa-XQzLC!m!DGeJcH`i#FcH7oh zW!;Tix_gE!YOELWcdxu>m1Ubf`xs~LmGpfEpYK1v9^Pejdij?Jlrrq-IY4W`wPE3c(D7+`};L2 z#oX&_9(o++5o@^iJtF{GD}nuAqC~%;m)< zCEJDP3vV$GA1C@QWooJnJvOP?p>788aE(!T+6nIOZ^eZd5*>N5s^DW5fR723`j`Of z#ZeOfsU|;<6u{5?7iTp(94qiKmTa~;!L~w&!y<-%JtdNo|05npMPfMMR~ZvLJSVj~ zDEbc^)W7sS7mcLps=*fnj6tA1w0#%y}I%VY_ z99L|-_6Mimqa&>kUtJBLAJ4sdJ!Zl**PZn5+jOroIxxqh~>1I!l zJX@$`B?vhsK2{i$-uFe?M$JLRO9sW}U*lM%JS-kmqt$Bs{K~oBev|c@Hm*oZ9rC4l zjLDPbEeyLw)zur;q^iuL|9M!4vs}6^dVgcwo~f^6c{*_hi!v-uX-_}k zNgp?Qu9Db0JzFtRl(c8Edu`J7kH;M=Sig9yY^w1Z)024lSeTwLB2)F~ zyo2YOYaT6oX2j*!)IT`6u;Go5xnH8-rTPsX{Y6jrS9eu17dm@%4~Y33nWJ>~g0Y{L zidB*S=UZ)zU9=swAG3Cpm7kbB*_t);kxAtFHxq_xH|fSMOx<@T?fU+q^}DN7D;{lI z^6cWX6y9WkR^-sit?Li=(>)Qj_I9A?#JD+o&ehwld3eCAa6z2atl5->f-Q9QdqL~R z4061;UjIZ|w@aEkX5Qhmc_Vb&DutI1L>|XqnvCbXK$WQw!9mmeos=VMf%B$jIq2^H&c3Dr4 zNtMacy(~y0MC@8C&yi0qR`S9^ULzH1vPuaxuNlcL!TWkXlFugIUoxI%x$a%XR%IXEu+h~wD`Kaa zEjm1qanNV#Z0(@7!~~m$8pgm0R&miv(@##TO|>+MIj8zU*Q!fG?3XPOkqhcxjas>J z>paz&Lp`(t{n=ZuB)c2yPYZKde$OmL-Sa@}p?)hO8V3HX(Q;n>#!}U0K`ej7ne_|u zs{9pSDHNp+FKJmfHN_#tcj>ywq5&puRZ%%kb+ex>8I(1L^fv;k5qM_9&ODCt|Bq-# zU9pSwCr2+ThAC7df@7EhNX^if=UEyU^4Ezdl zqBwMnguV--XIEk-R@-`w(fuV({Ay(lKm6)`bQ~;FP=ls(|4_pI5;;!ztr_=%G(w2f4rBCIPr4v zbMADPZELPnUAUW7@!V#M4_Offzj+_rVHR7_C-tpLb)|-p_^SA1y*B(6Bb8=>L z&dHFmn~etL_%BnlKC2ND?^bqkPx45QqCnq!#PjD?IuA3NZdoO@YUpJKCk81pHZ*Of zIhieVO+VU3yBX3t_TDXe^x9&D$nI5J?id9mxV`C<(?gF#(@xv1czOf7^s)UJFWd5+ z8TX!rTCQl;-;h&P6gPR|$m=}k0|xKGLG1zuwWd8hQph9U;VFOXn*P4<=sQP%;SmR- zAq#L#ES3fOC=8C^l!d26Qt{sr9t|c2!t)lQCEZA;aBf%#kLm2?!gTR+AIY(B9zJY1 zVc|5)!qLfCj0&ZV%_VOZ>IRy)-W-=d(Y)kpM7^K&!Q}0uZF?x2 zTFh~Ia?&P~7E0Tx75;K;{a}*@o4Bd@*SMR;O-WI|v~O5ThR%~0Lk>Q@xK%Mw%$t1D z`piYU(g#Jp>Jg8HH-0@CV_Dw3^g+@yquTy&n)bdC?6`h|p0}-6$|u{8g%1w1D|2bV zZ=baF8#GVZYgsQ^Q}W>0F@kyG#y#x#GdCi7d+3L344mL<)@HD8=_?VpoPPdREnDHV z@hbbnTWd^GBTCL|uota3vv_YGGxi^$WjaMJ-Yt7R4x5!cYslJ^D}LJzAiZou7_eGZf-JZ#<6)YZjp zk7il8NzmWmJIH(#_H9Dn`!RpAN)rfEF9d+UU}Pb6&6EKYjL=H4(00dUGV{@ z52ZV788zaLZ~ow)N8Tz|oUSQ4pf>(Qmd)~}z)dZo^)+v`jf&W}e`9qy_DMg?b^OPx zeEp|Gvh*pRe2y#bP0H<;~xAjwx5sAXg>SO@?>y8?u2W$+^VTX8c8Rv?O^pQ55B(P$^yHgQ(e8f z*i_S7?S7(EWq1X!1dRFMv0?zWB9hYni$B?DUFCjA%HXryquWG-9 zY@cR*aPE^sbq%3{BRd+5qqn@=U~?_o!tjRA?~%Rvr7LTux-YURtDjNLU!{Kc)X@4@ zLE3Ly4}E&C!#20;S(DeTPV&kA)o8{#fXJ~yzn`Q{&&j`8k)7?&S&iMTyjzt;Xm{`)Sx z+4XCukG!1rNTpOIVt#1IQHSM+v_f-ie8X4nQk{3PDI@<0J40)1UGT?rQFLQ%ba<~ULx<#9TWAjQCIYb%n#feo(W>V&CaE=SW=Ht@O}^?P zs^9qP>7B#ODT-gbiiP=1wZ-~Vs)|*nj9ahf-F7}q>z;vDv1xU#cWvs%Sk`lv1yqzM)*b5oxOXg%I{W^ItJ5|gcOTMy?c=WUyq^G`%AuU4Hy`E~96<3|&RzuUL3=bqNSlXSP_-m6i28YY2_{sEb@`?CN5 diff --git a/Externals/msvcrt/x64/vcomp120.dll b/Externals/msvcrt/x64/vcomp120.dll new file mode 100644 index 0000000000000000000000000000000000000000..34e1fb09dc66f03020336e05a80a15b0aada2579 GIT binary patch literal 137376 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 - + diff --git a/Source/VSProps/Base.props b/Source/VSProps/Base.props index d1803eb5ae..d613f45476 100644 --- a/Source/VSProps/Base.props +++ b/Source/VSProps/Base.props @@ -74,6 +74,7 @@ seem to be a way to only ignore the specific instance we don't care about... --> 4996 + true From bc45a3812241ea87fa0e7b30149dad7a8aee1cba Mon Sep 17 00:00:00 2001 From: Shawn Hoffman Date: Sat, 2 Nov 2013 16:19:17 -0700 Subject: [PATCH 32/90] do not copy pdbs to binary dir (you can use the symbol server for $(random_build), or it will be found locally if you built it yourself) --- Source/Core/DolphinWX/DolphinWX.vcxproj | 4 +-- Source/DSPTool/DSPTool.vcxproj | 34 ++++++------------------- 2 files changed, 10 insertions(+), 28 deletions(-) diff --git a/Source/Core/DolphinWX/DolphinWX.vcxproj b/Source/Core/DolphinWX/DolphinWX.vcxproj index 4a2c3ee83a..acc7d1fc7e 100644 --- a/Source/Core/DolphinWX/DolphinWX.vcxproj +++ b/Source/Core/DolphinWX/DolphinWX.vcxproj @@ -225,11 +225,11 @@ - + - + diff --git a/Source/DSPTool/DSPTool.vcxproj b/Source/DSPTool/DSPTool.vcxproj index d494a5e565..386ea0ce61 100644 --- a/Source/DSPTool/DSPTool.vcxproj +++ b/Source/DSPTool/DSPTool.vcxproj @@ -22,29 +22,16 @@ {1970D175-3DE8-4738-942A-4D98D1CDBF64} - + Application + v120 + Unicode + + true - v120 - Unicode - - Application - true - v120 - Unicode - - - Application + false - v120 - Unicode - - - Application - false - v120 - Unicode @@ -55,11 +42,6 @@ - - ../Core/Core/Src;../Core/Common/Src;%(AdditionalIncludeDirectories) - - - winmm.lib;%(AdditionalDependencies) Console @@ -88,9 +70,9 @@ - + - + From 26059f11098f004afb74976331b21c010eb40ac9 Mon Sep 17 00:00:00 2001 From: Shawn Hoffman Date: Sat, 2 Nov 2013 16:22:15 -0700 Subject: [PATCH 33/90] rename the dolphinwx project to dolphin, and thus change the executable name back to dolphin{d}.exe --- Source/Core/DolphinWX/DolphinWX.vcxproj | 1 + 1 file changed, 1 insertion(+) diff --git a/Source/Core/DolphinWX/DolphinWX.vcxproj b/Source/Core/DolphinWX/DolphinWX.vcxproj index acc7d1fc7e..70aa18d22f 100644 --- a/Source/Core/DolphinWX/DolphinWX.vcxproj +++ b/Source/Core/DolphinWX/DolphinWX.vcxproj @@ -20,6 +20,7 @@ {47411FDB-1BF2-48D0-AB4E-C7C41160F898} + Dolphin From 5f72542e0637799092ad1006d16ebad1961020e0 Mon Sep 17 00:00:00 2001 From: comex Date: Sat, 2 Nov 2013 22:17:56 -0400 Subject: [PATCH 34/90] Handle screenshot saving in RenderBase. Removes dependency on D3DX11 for screenshots (texture dumping is still broken). --- Source/Core/VideoBackends/D3D/Src/Render.cpp | 37 ++---- Source/Core/VideoBackends/D3D/Src/Render.h | 3 +- Source/Core/VideoBackends/OGL/Src/Render.cpp | 128 ++----------------- Source/Core/VideoBackends/OGL/Src/Render.h | 4 +- Source/Core/VideoCommon/Src/RenderBase.cpp | 77 ++++++++++- Source/Core/VideoCommon/Src/RenderBase.h | 7 +- 6 files changed, 109 insertions(+), 147 deletions(-) diff --git a/Source/Core/VideoBackends/D3D/Src/Render.cpp b/Source/Core/VideoBackends/D3D/Src/Render.cpp index e73b488bc9..e0f9aa7230 100644 --- a/Source/Core/VideoBackends/D3D/Src/Render.cpp +++ b/Source/Core/VideoBackends/D3D/Src/Render.cpp @@ -680,7 +680,7 @@ void Renderer::SetBlendMode(bool forceUpdate) } } -bool Renderer::SaveScreenshot(const std::string &filename, const TargetRectangle& rc) +void Renderer::TakeScreenshot(const TargetRectangle &rc) { if (!s_screenshot_texture) CreateScreenshotTexture(rc); @@ -689,34 +689,26 @@ 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 + u8* __restrict dest = (u8*) malloc(rc.GetWidth() * rc.GetHeight() * 3); + 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* src = (u8*) map.pData; + for (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) + u8* __restrict row = src; + for (int x = 0; x < rc.GetWidth(); ++x) { - *ptr = 0xFF; - ptr += 4; + *dest++ = *row++; + *dest++ = *row++; + *dest++ = *row++; + row++; } + src += map.RowPitch; } 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 = 0; - if (SUCCEEDED(hr)) - { - OSD::AddMessage(StringFromFormat("Saved %i x %i %s", rc.GetWidth(), - rc.GetHeight(), filename.c_str())); - } - else - { - OSD::AddMessage(StringFromFormat("Error saving %s", filename.c_str())); - } - - return SUCCEEDED(hr); + SaveScreenshot(dest, rc.GetWidth(), rc.GetHeight()); } void formatBufferDump(const u8* in, u8* out, int w, int h, int p) @@ -854,8 +846,7 @@ void Renderer::Swap(u32 xfbAddr, u32 fbWidth, u32 fbHeight,const EFBRectangle& r // done with drawing the game stuff, good moment to save a screenshot if (s_bScreenshot) { - SaveScreenshot(s_sScreenshotName, GetTargetRectangle()); - s_bScreenshot = false; + TakeScreenshot(GetTargetRectangle()); } // Dump frames diff --git a/Source/Core/VideoBackends/D3D/Src/Render.h b/Source/Core/VideoBackends/D3D/Src/Render.h index 12e5b595d3..0d5a569eaf 100644 --- a/Source/Core/VideoBackends/D3D/Src/Render.h +++ b/Source/Core/VideoBackends/D3D/Src/Render.h @@ -48,9 +48,10 @@ public: void UpdateViewport(); - bool SaveScreenshot(const std::string &filename, const TargetRectangle &rc); + static void TakeScreenshot(const TargetRectangle &rc); static bool CheckForResize(); + }; } diff --git a/Source/Core/VideoBackends/OGL/Src/Render.cpp b/Source/Core/VideoBackends/OGL/Src/Render.cpp index 5c560dc3cd..a9ab506c80 100644 --- a/Source/Core/VideoBackends/OGL/Src/Render.cpp +++ b/Source/Core/VideoBackends/OGL/Src/Render.cpp @@ -11,9 +11,6 @@ #include #include "GLUtil.h" -#if defined(HAVE_WX) && HAVE_WX -#include "WxUtils.h" -#endif #include "FileUtil.h" @@ -62,10 +59,6 @@ #include "AVIDump.h" #endif -#if defined(HAVE_WX) && HAVE_WX -#include -#endif - // glew1.8 doesn't define KHR_debug #ifndef GL_DEBUG_OUTPUT #define GL_DEBUG_OUTPUT 0x92E0 @@ -78,17 +71,6 @@ void VideoConfig::UpdateProjectionHack() } -#if defined(HAVE_WX) && HAVE_WX -// Screenshot thread struct -typedef struct -{ - int W, H; - std::string filename; - wxImage *img; -} ScrStrct; -#endif - - int OSDInternalW, OSDInternalH; namespace OGL @@ -127,10 +109,6 @@ static u32 s_blendMode; static bool s_vsync; -#if defined(HAVE_WX) && HAVE_WX -static std::thread scrshotThread; -#endif - // EFB cache related static const u32 EFB_CACHE_RECT_SIZE = 64; // Cache 64x64 blocks. static const u32 EFB_CACHE_WIDTH = (EFB_WIDTH + EFB_CACHE_RECT_SIZE - 1) / EFB_CACHE_RECT_SIZE; // round up @@ -626,11 +604,6 @@ Renderer::Renderer() Renderer::~Renderer() { - -#if defined(HAVE_WX) && HAVE_WX - if (scrshotThread.joinable()) - scrshotThread.join(); -#endif } void Renderer::Shutdown() @@ -1406,11 +1379,8 @@ void Renderer::Swap(u32 xfbAddr, u32 fbWidth, u32 fbHeight,const EFBRectangle& r // Save screenshot if (s_bScreenshot) { - std::lock_guard lk(s_criticalScreenshot); - SaveScreenshot(s_sScreenshotName, flipped_trc); + TakeScreenshot(flipped_trc); // Reset settings - s_sScreenshotName.clear(); - s_bScreenshot = false; } // Frame dumps are handled a little differently in Windows @@ -1788,71 +1758,22 @@ void Renderer::SetInterlacingMode() void Renderer::FlipImageData(u8 *data, int w, int h) { - // Flip image upside down. Damn OpenGL. + // XXX make this faster + u8* __restrict top = data; + u8* bot = data + w * h * 3; for (int y = 0; y < h / 2; y++) { - for(int x = 0; x < w; x++) + size_t stride = w * 3; + bot -= stride; + u8* __restrict brow = bot; + for(size_t x = 0; x < stride; x++) { - std::swap(data[(y * w + x) * 3], data[((h - 1 - y) * w + x) * 3]); - std::swap(data[(y * w + x) * 3 + 1], data[((h - 1 - y) * w + x) * 3 + 1]); - std::swap(data[(y * w + x) * 3 + 2], data[((h - 1 - y) * w + x) * 3 + 2]); + std::swap(*top++, *brow++); } } } -} - -// TODO: remove -extern bool g_aspect_wide; - -#if defined(HAVE_WX) && HAVE_WX -void TakeScreenshot(ScrStrct* threadStruct) -{ - // These will contain the final image size - float FloatW = (float)threadStruct->W; - float FloatH = (float)threadStruct->H; - - // Handle aspect ratio for the final ScrStrct to look exactly like what's on screen. - if (g_ActiveConfig.iAspectRatio != ASPECT_STRETCH) - { - bool use16_9 = g_aspect_wide; - - // Check for force-settings and override. - if (g_ActiveConfig.iAspectRatio == ASPECT_FORCE_16_9) - use16_9 = true; - else if (g_ActiveConfig.iAspectRatio == ASPECT_FORCE_4_3) - use16_9 = false; - - float Ratio = (FloatW / FloatH) / (!use16_9 ? (4.0f / 3.0f) : (16.0f / 9.0f)); - - // If ratio > 1 the picture is too wide and we have to limit the width. - if (Ratio > 1) - FloatW /= Ratio; - // ratio == 1 or the image is too high, we have to limit the height. - else - FloatH *= Ratio; - - // This is a bit expensive on high resolutions - threadStruct->img->Rescale((int)FloatW, (int)FloatH, wxIMAGE_QUALITY_HIGH); - } - - // Save the screenshot and finally kill the wxImage object - // This is really expensive when saving to PNG, but not at all when using BMP - threadStruct->img->SaveFile(StrToWxStr(threadStruct->filename), - wxBITMAP_TYPE_PNG); - threadStruct->img->Destroy(); - - // Show success messages - OSD::AddMessage(StringFromFormat("Saved %i x %i %s", (int)FloatW, (int)FloatH, - threadStruct->filename.c_str()), 2000); - delete threadStruct; -} -#endif - -namespace OGL -{ - -bool Renderer::SaveScreenshot(const std::string &filename, const TargetRectangle &back_rc) +void Renderer::TakeScreenshot(const TargetRectangle &back_rc) { u32 W = back_rc.GetWidth(); u32 H = back_rc.GetHeight(); @@ -1866,38 +1787,13 @@ bool Renderer::SaveScreenshot(const std::string &filename, const TargetRectangle { free(data); OSD::AddMessage("Error capturing or saving screenshot.", 2000); - return false; + return; } // Turn image upside down FlipImageData(data, W, H); -#if defined(HAVE_WX) && HAVE_WX - // Create wxImage - wxImage *a = new wxImage(W, H, data); - - if (scrshotThread.joinable()) - scrshotThread.join(); - - ScrStrct *threadStruct = new ScrStrct; - threadStruct->filename = filename; - threadStruct->img = a; - threadStruct->H = H; threadStruct->W = W; - - scrshotThread = std::thread(TakeScreenshot, threadStruct); -#ifdef _WIN32 - SetThreadPriority(scrshotThread.native_handle(), THREAD_PRIORITY_BELOW_NORMAL); -#endif - bool result = true; - - OSD::AddMessage("Saving Screenshot... ", 2000); - -#else - bool result = SaveTGA(filename.c_str(), W, H, data); - free(data); -#endif - - return result; + SaveScreenshot(data, W, H); } } diff --git a/Source/Core/VideoBackends/OGL/Src/Render.h b/Source/Core/VideoBackends/OGL/Src/Render.h index e30380d627..f0ddbb8862 100644 --- a/Source/Core/VideoBackends/OGL/Src/Render.h +++ b/Source/Core/VideoBackends/OGL/Src/Render.h @@ -63,7 +63,7 @@ public: void RenderText(const char* pstr, int left, int top, u32 color); void DrawDebugInfo(); - void FlipImageData(u8 *data, int w, int h); + static void FlipImageData(u8 *data, int w, int h); u32 AccessEFB(EFBAccessType type, u32 x, u32 y, u32 poke_data); @@ -80,7 +80,7 @@ public: void UpdateViewport(); - bool SaveScreenshot(const std::string &filename, const TargetRectangle &rc); + static void TakeScreenshot(const TargetRectangle &rc); private: void UpdateEFBCache(EFBAccessType type, u32 cacheRectIdx, const EFBRectangle& efbPixelRc, const TargetRectangle& targetPixelRc, const u32* data); diff --git a/Source/Core/VideoCommon/Src/RenderBase.cpp b/Source/Core/VideoCommon/Src/RenderBase.cpp index e509ccb980..2171cc6a95 100644 --- a/Source/Core/VideoCommon/Src/RenderBase.cpp +++ b/Source/Core/VideoCommon/Src/RenderBase.cpp @@ -30,6 +30,11 @@ #include "XFMemory.h" #include "FifoPlayer/FifoRecorder.h" #include "AVIDump.h" +#include "OnScreenDisplay.h" +#if defined(HAVE_WX) && HAVE_WX +#include "WxUtils.h" +#include +#endif #include #include @@ -67,6 +72,8 @@ unsigned int Renderer::efb_scale_numeratorY = 1; unsigned int Renderer::efb_scale_denominatorX = 1; unsigned int Renderer::efb_scale_denominatorY = 1; +// TODO: remove +extern bool g_aspect_wide; Renderer::Renderer() : frame_data() @@ -242,6 +249,73 @@ void Renderer::SetScreenshot(const char *filename) s_bScreenshot = true; } +#if defined(HAVE_WX) && HAVE_WX +void Renderer::SaveScreenshotOnThread(u8* data, size_t width, size_t height, std::string filename) +{ + wxImage *img = new wxImage(width, height, data); + + // These will contain the final image size + float FloatW = (float)width; + float FloatH = (float)height; + + // Handle aspect ratio for the final ScrStrct to look exactly like what's on screen. + if (g_ActiveConfig.iAspectRatio != ASPECT_STRETCH) + { + bool use16_9 = g_aspect_wide; + + // Check for force-settings and override. + if (g_ActiveConfig.iAspectRatio == ASPECT_FORCE_16_9) + use16_9 = true; + else if (g_ActiveConfig.iAspectRatio == ASPECT_FORCE_4_3) + use16_9 = false; + + float Ratio = (FloatW / FloatH) / (!use16_9 ? (4.0f / 3.0f) : (16.0f / 9.0f)); + + // If ratio > 1 the picture is too wide and we have to limit the width. + if (Ratio > 1) + FloatW /= Ratio; + // ratio == 1 or the image is too high, we have to limit the height. + else + FloatH *= Ratio; + + // This is a bit expensive on high resolutions + img->Rescale((int)FloatW, (int)FloatH, wxIMAGE_QUALITY_HIGH); + } + + // Save the screenshot and finally kill the wxImage object + // This is really expensive when saving to PNG, but not at all when using BMP + img->SaveFile(StrToWxStr(filename), wxBITMAP_TYPE_PNG); + img->Destroy(); + + // Show success messages + OSD::AddMessage(StringFromFormat("Saved %i x %i %s", (int)FloatW, (int)FloatH, + filename.c_str()), 2000); +} +#endif + +void Renderer::SaveScreenshot(u8* ptr, size_t width, size_t height) +{ + std::lock_guard lk(s_criticalScreenshot); +#if defined(HAVE_WX) && HAVE_WX + // Create wxImage + + std::thread thread(SaveScreenshotOnThread, ptr, width, height, s_sScreenshotName); +#ifdef _WIN32 + SetThreadPriority(thread.native_handle(), THREAD_PRIORITY_BELOW_NORMAL); +#endif + thread.detach(); + + OSD::AddMessage("Saving Screenshot... ", 2000); + +#else + SaveTGA(filename.c_str(), W, H, data); + free(data); +#endif + + s_sScreenshotName.clear(); + s_bScreenshot = false; +} + // Create On-Screen-Messages void Renderer::DrawDebugText() { @@ -347,9 +421,6 @@ void Renderer::DrawDebugText() g_renderer->RenderText(final_yellow.c_str(), 20, 20, 0xFFFFFF00); } -// TODO: remove -extern bool g_aspect_wide; - void Renderer::UpdateDrawRectangle(int backbuffer_width, int backbuffer_height) { float FloatGLWidth = (float)backbuffer_width; diff --git a/Source/Core/VideoCommon/Src/RenderBase.h b/Source/Core/VideoCommon/Src/RenderBase.h index 22d31cde23..22f5df0cd7 100644 --- a/Source/Core/VideoCommon/Src/RenderBase.h +++ b/Source/Core/VideoCommon/Src/RenderBase.h @@ -110,8 +110,6 @@ public: virtual void UpdateViewport() = 0; - virtual bool SaveScreenshot(const std::string &filename, const TargetRectangle &rc) = 0; - static unsigned int GetPrevPixelFormat() { return prev_efb_format; } static void StorePixelFormat(unsigned int new_format) { prev_efb_format = new_format; } @@ -123,6 +121,11 @@ protected: static void CheckFifoRecording(); static void RecordVideoMemory(); + #if defined(HAVE_WX) && HAVE_WX + static void SaveScreenshotOnThread(u8* data, size_t width, size_t height, std::string filename); + #endif + static void SaveScreenshot(u8* ptr, size_t width, size_t height); + static volatile bool s_bScreenshot; static std::mutex s_criticalScreenshot; static std::string s_sScreenshotName; From cd46138d299088631bbcbf37543584946c4b174a Mon Sep 17 00:00:00 2001 From: comex Date: Sat, 2 Nov 2013 22:23:29 -0400 Subject: [PATCH 35/90] fix non-HAVE_WX case --- Source/Core/VideoBackends/OGL/Src/Render.cpp | 1 - Source/Core/VideoCommon/Src/RenderBase.cpp | 5 +++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Source/Core/VideoBackends/OGL/Src/Render.cpp b/Source/Core/VideoBackends/OGL/Src/Render.cpp index a9ab506c80..9cae3b337a 100644 --- a/Source/Core/VideoBackends/OGL/Src/Render.cpp +++ b/Source/Core/VideoBackends/OGL/Src/Render.cpp @@ -22,7 +22,6 @@ #include "DriverDetails.h" #include "VideoConfig.h" #include "Statistics.h" -#include "ImageWrite.h" #include "PixelEngine.h" #include "Render.h" #include "BPStructs.h" diff --git a/Source/Core/VideoCommon/Src/RenderBase.cpp b/Source/Core/VideoCommon/Src/RenderBase.cpp index 2171cc6a95..c969885bdd 100644 --- a/Source/Core/VideoCommon/Src/RenderBase.cpp +++ b/Source/Core/VideoCommon/Src/RenderBase.cpp @@ -35,6 +35,7 @@ #include "WxUtils.h" #include #endif +#include "ImageWrite.h" #include #include @@ -308,8 +309,8 @@ void Renderer::SaveScreenshot(u8* ptr, size_t width, size_t height) OSD::AddMessage("Saving Screenshot... ", 2000); #else - SaveTGA(filename.c_str(), W, H, data); - free(data); + SaveTGA(s_sScreenshotName.c_str(), width, height, ptr); + free(ptr); #endif s_sScreenshotName.clear(); From 74b5fb3ab4b066681336d1be44c7eecfcf6a4dc6 Mon Sep 17 00:00:00 2001 From: comex Date: Sat, 2 Nov 2013 22:42:46 -0400 Subject: [PATCH 36/90] Actually, filename really does need to be a parameter because of some random debug thing. --- Source/Core/VideoBackends/D3D/Src/Render.cpp | 7 ++++--- Source/Core/VideoBackends/D3D/Src/Render.h | 2 +- Source/Core/VideoBackends/OGL/Src/Render.cpp | 7 ++++--- Source/Core/VideoBackends/OGL/Src/Render.h | 2 +- Source/Core/VideoBackends/OGL/Src/VertexManager.cpp | 2 +- Source/Core/VideoCommon/Src/RenderBase.cpp | 7 +++---- Source/Core/VideoCommon/Src/RenderBase.h | 2 +- 7 files changed, 15 insertions(+), 14 deletions(-) diff --git a/Source/Core/VideoBackends/D3D/Src/Render.cpp b/Source/Core/VideoBackends/D3D/Src/Render.cpp index e0f9aa7230..eb2f54387f 100644 --- a/Source/Core/VideoBackends/D3D/Src/Render.cpp +++ b/Source/Core/VideoBackends/D3D/Src/Render.cpp @@ -680,7 +680,7 @@ void Renderer::SetBlendMode(bool forceUpdate) } } -void Renderer::TakeScreenshot(const TargetRectangle &rc) +void Renderer::TakeScreenshot(const TargetRectangle &rc, std::string filename) { if (!s_screenshot_texture) CreateScreenshotTexture(rc); @@ -708,7 +708,7 @@ void Renderer::TakeScreenshot(const TargetRectangle &rc) } D3D::context->Unmap(s_screenshot_texture, 0); - SaveScreenshot(dest, rc.GetWidth(), rc.GetHeight()); + SaveScreenshot(dest, rc.GetWidth(), rc.GetHeight(), filename); } void formatBufferDump(const u8* in, u8* out, int w, int h, int p) @@ -846,7 +846,8 @@ void Renderer::Swap(u32 xfbAddr, u32 fbWidth, u32 fbHeight,const EFBRectangle& r // done with drawing the game stuff, good moment to save a screenshot if (s_bScreenshot) { - TakeScreenshot(GetTargetRectangle()); + TakeScreenshot(GetTargetRectangle(), s_sScreenshotName); + s_bScreenshot = false; } // Dump frames diff --git a/Source/Core/VideoBackends/D3D/Src/Render.h b/Source/Core/VideoBackends/D3D/Src/Render.h index 0d5a569eaf..e899484111 100644 --- a/Source/Core/VideoBackends/D3D/Src/Render.h +++ b/Source/Core/VideoBackends/D3D/Src/Render.h @@ -48,7 +48,7 @@ public: void UpdateViewport(); - static void TakeScreenshot(const TargetRectangle &rc); + static void TakeScreenshot(const TargetRectangle &rc, std::string filename); static bool CheckForResize(); diff --git a/Source/Core/VideoBackends/OGL/Src/Render.cpp b/Source/Core/VideoBackends/OGL/Src/Render.cpp index 9cae3b337a..537e04a25e 100644 --- a/Source/Core/VideoBackends/OGL/Src/Render.cpp +++ b/Source/Core/VideoBackends/OGL/Src/Render.cpp @@ -1378,7 +1378,8 @@ void Renderer::Swap(u32 xfbAddr, u32 fbWidth, u32 fbHeight,const EFBRectangle& r // Save screenshot if (s_bScreenshot) { - TakeScreenshot(flipped_trc); + TakeScreenshot(flipped_trc, s_sScreenshotName); + s_bScreenshot = false; // Reset settings } @@ -1772,7 +1773,7 @@ void Renderer::FlipImageData(u8 *data, int w, int h) } } -void Renderer::TakeScreenshot(const TargetRectangle &back_rc) +void Renderer::TakeScreenshot(const TargetRectangle &back_rc, std::string filename) { u32 W = back_rc.GetWidth(); u32 H = back_rc.GetHeight(); @@ -1792,7 +1793,7 @@ void Renderer::TakeScreenshot(const TargetRectangle &back_rc) // Turn image upside down FlipImageData(data, W, H); - SaveScreenshot(data, W, H); + SaveScreenshot(data, W, H, filename); } } diff --git a/Source/Core/VideoBackends/OGL/Src/Render.h b/Source/Core/VideoBackends/OGL/Src/Render.h index f0ddbb8862..96a001eca4 100644 --- a/Source/Core/VideoBackends/OGL/Src/Render.h +++ b/Source/Core/VideoBackends/OGL/Src/Render.h @@ -80,7 +80,7 @@ public: void UpdateViewport(); - static void TakeScreenshot(const TargetRectangle &rc); + static void TakeScreenshot(const TargetRectangle &rc, std::string filename); private: void UpdateEFBCache(EFBAccessType type, u32 cacheRectIdx, const EFBRectangle& efbPixelRc, const TargetRectangle& targetPixelRc, const u32* data); diff --git a/Source/Core/VideoBackends/OGL/Src/VertexManager.cpp b/Source/Core/VideoBackends/OGL/Src/VertexManager.cpp index 620df0c161..4b2e3cb4c0 100644 --- a/Source/Core/VideoBackends/OGL/Src/VertexManager.cpp +++ b/Source/Core/VideoBackends/OGL/Src/VertexManager.cpp @@ -341,7 +341,7 @@ void VertexManager::vFlush() tr.right = Renderer::GetTargetWidth(); tr.top = 0; tr.bottom = Renderer::GetTargetHeight(); - g_renderer->SaveScreenshot(str, tr); + static_cast(g_renderer)->TakeScreenshot(tr, str); } #endif g_Config.iSaveTargetId++; diff --git a/Source/Core/VideoCommon/Src/RenderBase.cpp b/Source/Core/VideoCommon/Src/RenderBase.cpp index c969885bdd..bb3dad8a73 100644 --- a/Source/Core/VideoCommon/Src/RenderBase.cpp +++ b/Source/Core/VideoCommon/Src/RenderBase.cpp @@ -294,13 +294,13 @@ void Renderer::SaveScreenshotOnThread(u8* data, size_t width, size_t height, std } #endif -void Renderer::SaveScreenshot(u8* ptr, size_t width, size_t height) +void Renderer::SaveScreenshot(u8* ptr, size_t width, size_t height, std::string filename) { std::lock_guard lk(s_criticalScreenshot); #if defined(HAVE_WX) && HAVE_WX // Create wxImage - std::thread thread(SaveScreenshotOnThread, ptr, width, height, s_sScreenshotName); + std::thread thread(SaveScreenshotOnThread, ptr, width, height, filename); #ifdef _WIN32 SetThreadPriority(thread.native_handle(), THREAD_PRIORITY_BELOW_NORMAL); #endif @@ -309,11 +309,10 @@ void Renderer::SaveScreenshot(u8* ptr, size_t width, size_t height) OSD::AddMessage("Saving Screenshot... ", 2000); #else - SaveTGA(s_sScreenshotName.c_str(), width, height, ptr); + SaveTGA(filename.c_str(), width, height, ptr); free(ptr); #endif - s_sScreenshotName.clear(); s_bScreenshot = false; } diff --git a/Source/Core/VideoCommon/Src/RenderBase.h b/Source/Core/VideoCommon/Src/RenderBase.h index 22f5df0cd7..7a153fb5cc 100644 --- a/Source/Core/VideoCommon/Src/RenderBase.h +++ b/Source/Core/VideoCommon/Src/RenderBase.h @@ -124,7 +124,7 @@ protected: #if defined(HAVE_WX) && HAVE_WX static void SaveScreenshotOnThread(u8* data, size_t width, size_t height, std::string filename); #endif - static void SaveScreenshot(u8* ptr, size_t width, size_t height); + static void SaveScreenshot(u8* ptr, size_t width, size_t height, std::string filename); static volatile bool s_bScreenshot; static std::mutex s_criticalScreenshot; From a250ab0af765c0394dccd326a789d507112b122f Mon Sep 17 00:00:00 2001 From: Rachel Bryk Date: Sat, 2 Nov 2013 23:47:10 -0400 Subject: [PATCH 37/90] Stop saving random files to ./ --- Source/Core/Core/Src/Movie.cpp | 2 +- Source/Core/Core/Src/State.cpp | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Source/Core/Core/Src/Movie.cpp b/Source/Core/Core/Src/Movie.cpp index c613d18fd5..787c1408d3 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]; diff --git a/Source/Core/Core/Src/State.cpp b/Source/Core/Core/Src/State.cpp index 24647c143a..56c6177536 100644 --- a/Source/Core/Core/Src/State.cpp +++ b/Source/Core/Core/Src/State.cpp @@ -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 { From a05733d6cc6a2ded942dab5da17888b3da61e628 Mon Sep 17 00:00:00 2001 From: Glenn Rice Date: Sun, 3 Nov 2013 08:53:20 -0600 Subject: [PATCH 38/90] Update translation files to reflect recent changes in the code. --- Languages/po/ar.po | 1166 ++++++++++++++++---------------- Languages/po/ca.po | 1169 ++++++++++++++++---------------- Languages/po/cs.po | 1223 +++++++++++++++++---------------- Languages/po/de.po | 1225 +++++++++++++++++---------------- Languages/po/dolphin-emu.pot | 1151 +++++++++++++++---------------- Languages/po/el.po | 1226 +++++++++++++++++---------------- Languages/po/en.po | 1151 +++++++++++++++---------------- Languages/po/es.po | 1224 +++++++++++++++++---------------- Languages/po/fa.po | 1166 ++++++++++++++++---------------- Languages/po/fr.po | 1227 +++++++++++++++++---------------- Languages/po/he.po | 1151 +++++++++++++++---------------- Languages/po/hu.po | 1211 +++++++++++++++++---------------- Languages/po/it.po | 1228 ++++++++++++++++++---------------- Languages/po/ja.po | 1216 +++++++++++++++++---------------- Languages/po/ko.po | 1213 +++++++++++++++++---------------- Languages/po/nb.po | 1222 +++++++++++++++++---------------- Languages/po/nl.po | 1226 +++++++++++++++++---------------- Languages/po/pl.po | 1211 +++++++++++++++++---------------- Languages/po/pt.po | 1166 ++++++++++++++++---------------- Languages/po/pt_BR.po | 1226 +++++++++++++++++---------------- Languages/po/ru.po | 1165 ++++++++++++++++---------------- Languages/po/sr.po | 1156 ++++++++++++++++---------------- Languages/po/sv.po | 1223 +++++++++++++++++---------------- Languages/po/tr.po | 1211 +++++++++++++++++---------------- Languages/po/zh_CN.po | 1222 +++++++++++++++++---------------- Languages/po/zh_TW.po | 1164 ++++++++++++++++---------------- 26 files changed, 16058 insertions(+), 15081 deletions(-) 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 。請回報。" From 00fe5057f13bca3416b9d25a1fe9df27c514b29c Mon Sep 17 00:00:00 2001 From: comex Date: Sun, 3 Nov 2013 14:37:49 -0500 Subject: [PATCH 39/90] Be less dumb. --- Source/Core/VideoBackends/OGL/Src/VertexManager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Core/VideoBackends/OGL/Src/VertexManager.cpp b/Source/Core/VideoBackends/OGL/Src/VertexManager.cpp index 4b2e3cb4c0..dbebc3ecfd 100644 --- a/Source/Core/VideoBackends/OGL/Src/VertexManager.cpp +++ b/Source/Core/VideoBackends/OGL/Src/VertexManager.cpp @@ -341,7 +341,7 @@ void VertexManager::vFlush() tr.right = Renderer::GetTargetWidth(); tr.top = 0; tr.bottom = Renderer::GetTargetHeight(); - static_cast(g_renderer)->TakeScreenshot(tr, str); + Renderer::TakeScreenshot(tr, str); } #endif g_Config.iSaveTargetId++; From 965b32be9c38cb8f03632ab15f3a0d3aa98004af Mon Sep 17 00:00:00 2001 From: comex Date: Tue, 29 Oct 2013 01:09:01 -0400 Subject: [PATCH 40/90] Run code through clang-modernize -loop-convert to create range-based for loops, and manually fix some stuff up. --- Source/Core/AudioCommon/Src/aldlist.cpp | 24 ++-- Source/Core/Common/Src/BreakPoints.cpp | 76 ++++++----- Source/Core/Common/Src/CDUtils.cpp | 11 +- Source/Core/Common/Src/ChunkFile.h | 10 +- Source/Core/Common/Src/FileSearch.cpp | 6 +- Source/Core/Common/Src/IniFile.cpp | 33 ++--- Source/Core/Common/Src/LogManager.cpp | 14 +-- Source/Core/Common/Src/MemArena.cpp | 6 +- Source/Core/Common/Src/SymbolDB.cpp | 10 +- Source/Core/Common/Src/SysConf.cpp | 4 +- Source/Core/Core/Src/ActionReplay.cpp | 25 ++-- Source/Core/Core/Src/Boot/Boot_DOL.cpp | 20 +-- Source/Core/Core/Src/CoreTiming.cpp | 8 +- Source/Core/Core/Src/DSP/DSPBreakpoints.h | 3 +- Source/Core/Core/Src/DSP/DSPTables.cpp | 33 +++-- .../Core/Core/Src/DSP/Jit/DSPJitRegCache.cpp | 20 +-- Source/Core/Core/Src/DSP/LabelMap.cpp | 12 +- .../Core/Core/Src/FifoPlayer/FifoAnalyzer.cpp | 4 +- .../Core/Core/Src/FifoPlayer/FifoDataFile.cpp | 12 +- .../Src/FifoPlayer/FifoPlaybackAnalyzer.cpp | 4 +- .../Core/Core/Src/FifoPlayer/FifoPlayer.cpp | 4 +- Source/Core/Core/Src/GeckoCodeConfig.cpp | 21 ++-- .../Core/Src/HW/DSPHLE/UCodes/UCode_AX.cpp | 42 +++---- .../Core/Src/HW/DSPHLE/UCodes/UCode_AXWii.cpp | 17 +-- .../HW/DSPHLE/UCodes/UCode_Zelda_ADPCM.cpp | 16 +-- Source/Core/Core/Src/HW/DSPLLE/DSPSymbols.cpp | 6 +- Source/Core/Core/Src/HW/EXI.cpp | 22 ++-- Source/Core/Core/Src/HW/EXI_Channel.cpp | 42 +++---- Source/Core/Core/Src/HW/EXI_Channel.h | 3 +- Source/Core/Core/Src/HW/GCPadEmu.cpp | 8 +- .../Src/HW/WiimoteEmu/Attachment/Classic.cpp | 12 +- .../Src/HW/WiimoteEmu/Attachment/Drums.cpp | 4 +- .../Src/HW/WiimoteEmu/Attachment/Guitar.cpp | 4 +- .../HW/WiimoteEmu/Attachment/Turntable.cpp | 4 +- .../Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp | 18 +-- .../Core/Src/HW/WiimoteReal/WiimoteReal.cpp | 18 +-- .../Src/IPC_HLE/WII_IPC_HLE_Device_FileIO.cpp | 6 +- .../Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp | 10 +- .../Src/IPC_HLE/WII_IPC_HLE_Device_fs.cpp | 3 +- .../Src/IPC_HLE/WII_IPC_HLE_Device_net.cpp | 38 +++--- .../Src/IPC_HLE/WII_IPC_HLE_Device_usb.cpp | 22 ++-- .../IPC_HLE/WII_IPC_HLE_Device_usb_kbd.cpp | 1 + Source/Core/Core/Src/IPC_HLE/WII_Socket.cpp | 8 +- Source/Core/Core/Src/Movie.cpp | 4 +- Source/Core/Core/Src/PatchEngine.cpp | 13 +- .../Interpreter/Interpreter_Tables.cpp | 118 +++++++++--------- .../Core/Src/PowerPC/Jit64/Jit64_Tables.cpp | 62 ++++----- .../Core/Src/PowerPC/Jit64/JitRegCache.cpp | 8 +- .../Core/Core/Src/PowerPC/Jit64IL/IR_X86.cpp | 36 +++--- .../Core/Core/Src/PowerPC/Jit64IL/JitIL.cpp | 8 +- .../Core/Src/PowerPC/Jit64IL/JitIL_Tables.cpp | 62 ++++----- .../Core/Core/Src/PowerPC/JitILCommon/IR.cpp | 12 +- Source/Core/Core/Src/PowerPC/JitInterface.cpp | 10 +- Source/Core/Core/Src/PowerPC/PPCAnalyst.cpp | 11 +- Source/Core/Core/Src/PowerPC/PPCSymbolDB.cpp | 16 +-- Source/Core/Core/Src/PowerPC/PPCTables.cpp | 4 +- Source/Core/Core/Src/State.cpp | 4 +- Source/Core/DiscIO/Src/DiscScrubber.cpp | 5 +- Source/Core/DiscIO/Src/FileHandlerARC.cpp | 6 +- Source/Core/DiscIO/Src/FileSystemGCWii.cpp | 18 +-- Source/Core/DiscIO/Src/NANDContentLoader.cpp | 33 +++-- Source/Core/DiscIO/Src/VolumeDirectory.cpp | 8 +- Source/Core/DolphinWX/Src/ARCodeAddEdit.cpp | 4 +- Source/Core/DolphinWX/Src/ConfigMain.cpp | 8 +- .../DolphinWX/Src/Debugger/BreakpointView.cpp | 7 +- .../DolphinWX/Src/Debugger/CodeWindow.cpp | 18 +-- .../DolphinWX/Src/Debugger/MemoryView.cpp | 32 ++--- Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp | 4 +- Source/Core/DolphinWX/Src/FrameAui.cpp | 38 +++--- Source/Core/DolphinWX/Src/FrameTools.cpp | 4 +- Source/Core/DolphinWX/Src/GameListCtrl.cpp | 22 ++-- Source/Core/DolphinWX/Src/ISOProperties.cpp | 21 ++-- Source/Core/DolphinWX/Src/InputConfigDiag.cpp | 8 +- .../Src/MemoryCards/WiiSaveCrypted.cpp | 24 ++-- Source/Core/DolphinWX/Src/NetWindow.cpp | 4 +- Source/Core/InputCommon/Src/ControllerEmu.cpp | 8 +- .../ControllerInterface/OSX/OSXKeyboard.mm | 6 +- Source/Core/InputCommon/Src/UDPWiimote.cpp | 17 ++- .../VideoBackends/OGL/Src/SamplerCache.cpp | 4 +- .../VideoBackends/OGL/Src/TextureCache.cpp | 16 +-- .../OGL/Src/TextureConverter.cpp | 4 +- Source/Core/VideoBackends/OGL/Src/main.cpp | 10 +- .../VideoBackends/Software/Src/Clipper.cpp | 4 +- .../Software/Src/NativeVertexFormat.h | 8 +- .../VideoBackends/Software/Src/Rasterizer.cpp | 8 +- Source/Core/VideoCommon/Src/DriverDetails.cpp | 12 +- Source/Core/VideoCommon/Src/HiresTextures.cpp | 16 +-- Source/Core/VideoCommon/Src/VertexLoader.h | 4 +- .../VideoCommon/Src/VertexLoaderManager.cpp | 8 +- .../Core/VideoCommon/Src/VideoBackendBase.cpp | 6 +- 90 files changed, 688 insertions(+), 739 deletions(-) diff --git a/Source/Core/AudioCommon/Src/aldlist.cpp b/Source/Core/AudioCommon/Src/aldlist.cpp index fa11fe3282..42fbb71002 100644 --- a/Source/Core/AudioCommon/Src/aldlist.cpp +++ b/Source/Core/AudioCommon/Src/aldlist.cpp @@ -144,10 +144,10 @@ ALDeviceList::ALDeviceList() */ 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; } } @@ -206,8 +206,8 @@ 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; } @@ -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/Common/Src/BreakPoints.cpp b/Source/Core/Common/Src/BreakPoints.cpp index 57d1b06538..425ceae881 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); } @@ -115,35 +114,34 @@ void 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/ChunkFile.h b/Source/Core/Common/Src/ChunkFile.h index ae5d9522e7..a765369ff1 100644 --- a/Source/Core/Common/Src/ChunkFile.h +++ b/Source/Core/Common/Src/ChunkFile.h @@ -90,10 +90,10 @@ public: case MODE_WRITE: case MODE_MEASURE: case MODE_VERIFY: - for (auto itr = x.begin(); itr != x.end(); ++itr) + for (auto& elem : x) { - Do(itr->first); - Do(itr->second); + Do(elem.first); + Do(elem.second); } break; } @@ -134,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 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/IniFile.cpp b/Source/Core/Common/Src/IniFile.cpp index fbce8254e3..ebbde7ac7c 100644 --- a/Source/Core/Common/Src/IniFile.cpp +++ b/Source/Core/Common/Src/IniFile.cpp @@ -125,18 +125,16 @@ bool IniFile::Section::Get(const char* key, std::vector& out) size_t subEnd; // split by , - while (subStart != std::string::npos) { - + while (subStart != std::string::npos) + { // Find next , subEnd = temp.find_first_of(",", subStart); 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 { diff --git a/Source/Core/Common/Src/LogManager.cpp b/Source/Core/Common/Src/LogManager.cpp index 60f649b373..30b6b4a92a 100644 --- a/Source/Core/Common/Src/LogManager.cpp +++ b/Source/Core/Common/Src/LogManager.cpp @@ -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,8 +102,8 @@ 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; diff --git a/Source/Core/Common/Src/MemArena.cpp b/Source/Core/Common/Src/MemArena.cpp index 49c51fd2ee..2383c011c3 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); @@ -263,7 +263,6 @@ u8 *MemoryMap_Setup(const MemoryView *views, int num_views, u32 flags, MemArena 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/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..41bf4e82b0 100644 --- a/Source/Core/Common/Src/SysConf.cpp +++ b/Source/Core/Common/Src/SysConf.cpp @@ -298,8 +298,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"); diff --git a/Source/Core/Core/Src/ActionReplay.cpp b/Source/Core/Core/Src/ActionReplay.cpp index 771ef5700b..505c67ddc2 100644 --- a/Source/Core/Core/Src/ActionReplay.cpp +++ b/Source/Core/Core/Src/ActionReplay.cpp @@ -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; @@ -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); @@ -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; diff --git a/Source/Core/Core/Src/Boot/Boot_DOL.cpp b/Source/Core/Core/Src/Boot/Boot_DOL.cpp index b1476f82d0..10e7f20dd2 100644 --- a/Source/Core/Core/Src/Boot/Boot_DOL.cpp +++ b/Source/Core/Core/Src/Boot/Boot_DOL.cpp @@ -30,16 +30,16 @@ 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; } } @@ -52,10 +52,10 @@ void CDolLoader::Initialize(u8* _pBuffer, u32 _Size) 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/CoreTiming.cpp b/Source/Core/Core/Src/CoreTiming.cpp index 1609043600..a753f96add 100644 --- a/Source/Core/Core/Src/CoreTiming.cpp +++ b/Source/Core/Core/Src/CoreTiming.cpp @@ -84,15 +84,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; } } diff --git a/Source/Core/Core/Src/DSP/DSPBreakpoints.h b/Source/Core/Core/Src/DSP/DSPBreakpoints.h index 96c116f5a1..625c25cf67 100644 --- a/Source/Core/Core/Src/DSP/DSPBreakpoints.h +++ b/Source/Core/Core/Src/DSP/DSPBreakpoints.h @@ -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/DSPTables.cpp b/Source/Core/Core/Src/DSP/DSPTables.cpp index bc2cbf1488..2a6912ee3b 100644 --- a/Source/Core/Core/Src/DSP/DSPTables.cpp +++ b/Source/Core/Core/Src/DSP/DSPTables.cpp @@ -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/Jit/DSPJitRegCache.cpp b/Source/Core/Core/Src/DSP/Jit/DSPJitRegCache.cpp index 386c32d8bc..2c51b31e05 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++; } @@ -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/LabelMap.cpp b/Source/Core/Core/Src/DSP/LabelMap.cpp index a5e6e1b6dd..75f6cf4b33 100644 --- a/Source/Core/Core/Src/DSP/LabelMap.cpp +++ b/Source/Core/Core/Src/DSP/LabelMap.cpp @@ -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/FifoPlayer/FifoAnalyzer.cpp b/Source/Core/Core/Src/FifoPlayer/FifoAnalyzer.cpp index 233dbbbb4a..b9f45d4c8c 100644 --- a/Source/Core/Core/Src/FifoPlayer/FifoAnalyzer.cpp +++ b/Source/Core/Core/Src/FifoPlayer/FifoAnalyzer.cpp @@ -128,8 +128,8 @@ u32 CalculateVertexSize(int vatIndex, const CPMemory &cpMem) 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; } diff --git a/Source/Core/Core/Src/FifoPlayer/FifoDataFile.cpp b/Source/Core/Core/Src/FifoPlayer/FifoDataFile.cpp index ebf19a07f8..ca980bc3cc 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(); @@ -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) diff --git a/Source/Core/Core/Src/FifoPlayer/FifoPlaybackAnalyzer.cpp b/Source/Core/Core/Src/FifoPlayer/FifoPlaybackAnalyzer.cpp index 1ea80c8699..0afd253807 100644 --- a/Source/Core/Core/Src/FifoPlayer/FifoPlaybackAnalyzer.cpp +++ b/Source/Core/Core/Src/FifoPlayer/FifoPlaybackAnalyzer.cpp @@ -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) { diff --git a/Source/Core/Core/Src/FifoPlayer/FifoPlayer.cpp b/Source/Core/Core/Src/FifoPlayer/FifoPlayer.cpp index f660b41f9e..e249bcd109 100644 --- a/Source/Core/Core/Src/FifoPlayer/FifoPlayer.cpp +++ b/Source/Core/Core/Src/FifoPlayer/FifoPlayer.cpp @@ -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); } } } 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/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_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_Zelda_ADPCM.cpp b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_Zelda_ADPCM.cpp index 1fbfaebaba..2cd0bd9c17 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; } } diff --git a/Source/Core/Core/Src/HW/DSPLLE/DSPSymbols.cpp b/Source/Core/Core/Src/HW/DSPLLE/DSPSymbols.cpp index a0afc516dd..52b9ba04a0 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; 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/GCPadEmu.cpp b/Source/Core/Core/Src/HW/GCPadEmu.cpp index a1e07794c7..68a0f5285a 100644 --- a/Source/Core/Core/Src/HW/GCPadEmu.cpp +++ b/Source/Core/Core/Src/HW/GCPadEmu.cpp @@ -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/WiimoteEmu/Attachment/Classic.cpp b/Source/Core/Core/Src/HW/WiimoteEmu/Attachment/Classic.cpp index 5b0d962397..8f7cbb01ea 100644 --- a/Source/Core/Core/Src/HW/WiimoteEmu/Attachment/Classic.cpp +++ b/Source/Core/Core/Src/HW/WiimoteEmu/Attachment/Classic.cpp @@ -57,8 +57,8 @@ Classic::Classic(WiimoteEmu::ExtensionReg& _reg) : Attachment(_trans("Classic"), { // buttons groups.push_back(m_buttons = new Buttons("Buttons")); - for (unsigned int i = 0; i < sizeof(classic_button_names)/sizeof(*classic_button_names); ++i) - m_buttons->controls.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/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/WiimoteEmu.cpp b/Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp index 94e7d88cd6..eda4f5104c 100644 --- a/Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp +++ b/Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp @@ -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"))); @@ -503,12 +503,12 @@ void Wiimote::GetIRData(u8* const data, bool use_accel) 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; diff --git a/Source/Core/Core/Src/HW/WiimoteReal/WiimoteReal.cpp b/Source/Core/Core/Src/HW/WiimoteReal/WiimoteReal.cpp index ee6de5f19d..a4d19aaa99 100644 --- a/Source/Core/Core/Src/HW/WiimoteReal/WiimoteReal.cpp +++ b/Source/Core/Core/Src/HW/WiimoteReal/WiimoteReal.cpp @@ -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) 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..24c32a83a2 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; 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 8c214a3986..5540fb6194 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 @@ -152,10 +152,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 +182,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; 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..20993e2dc4 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 @@ -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 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..c24db4f0c9 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 @@ -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; @@ -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_usb.cpp b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_usb.cpp index ecf84cf31e..204beba05d 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; } } @@ -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= 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, @@ -614,9 +614,9 @@ void WiiSockMan::Update() } 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); } } } diff --git a/Source/Core/Core/Src/Movie.cpp b/Source/Core/Core/Src/Movie.cpp index 787c1408d3..047b6d05d2 100644 --- a/Source/Core/Core/Src/Movie.cpp +++ b/Source/Core/Core/Src/Movie.cpp @@ -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()) { diff --git a/Source/Core/Core/Src/PatchEngine.cpp b/Source/Core/Core/Src/PatchEngine.cpp index e266e0d098..6522f7c73e 100644 --- a/Source/Core/Core/Src/PatchEngine.cpp +++ b/Source/Core/Core/Src/PatchEngine.cpp @@ -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; diff --git a/Source/Core/Core/Src/PowerPC/Interpreter/Interpreter_Tables.cpp b/Source/Core/Core/Src/PowerPC/Interpreter/Interpreter_Tables.cpp index f1403bed87..f403330276 100644 --- a/Source/Core/Core/Src/PowerPC/Interpreter/Interpreter_Tables.cpp +++ b/Source/Core/Core/Src/PowerPC/Interpreter/Interpreter_Tables.cpp @@ -382,112 +382,112 @@ void InitTables() 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/Jit64_Tables.cpp b/Source/Core/Core/Src/PowerPC/Jit64/Jit64_Tables.cpp index 268e2562d6..9c52bd1e82 100644 --- a/Source/Core/Core/Src/PowerPC/Jit64/Jit64_Tables.cpp +++ b/Source/Core/Core/Src/PowerPC/Jit64/Jit64_Tables.cpp @@ -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++) @@ -407,78 +407,78 @@ void InitTables() 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/JitRegCache.cpp b/Source/Core/Core/Src/PowerPC/Jit64/JitRegCache.cpp index 083066c6f1..13c5d827a2 100644 --- a/Source/Core/Core/Src/PowerPC/Jit64/JitRegCache.cpp +++ b/Source/Core/Core/Src/PowerPC/Jit64/JitRegCache.cpp @@ -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() diff --git a/Source/Core/Core/Src/PowerPC/Jit64IL/IR_X86.cpp b/Source/Core/Core/Src/PowerPC/Jit64IL/IR_X86.cpp index 0b874d8b36..686a7e4b3a 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) { diff --git a/Source/Core/Core/Src/PowerPC/Jit64IL/JitIL.cpp b/Source/Core/Core/Src/PowerPC/Jit64IL/JitIL.cpp index f056c9f8b3..8b448f9928 100644 --- a/Source/Core/Core/Src/PowerPC/Jit64IL/JitIL.cpp +++ b/Source/Core/Core/Src/PowerPC/Jit64IL/JitIL.cpp @@ -211,11 +211,11 @@ 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); } diff --git a/Source/Core/Core/Src/PowerPC/Jit64IL/JitIL_Tables.cpp b/Source/Core/Core/Src/PowerPC/Jit64IL/JitIL_Tables.cpp index 7ca1ad5a53..c84310eecd 100644 --- a/Source/Core/Core/Src/PowerPC/Jit64IL/JitIL_Tables.cpp +++ b/Source/Core/Core/Src/PowerPC/Jit64IL/JitIL_Tables.cpp @@ -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++) @@ -410,78 +410,78 @@ void InitTables() 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/JitILCommon/IR.cpp b/Source/Core/Core/Src/PowerPC/JitILCommon/IR.cpp index 50cba22a89..32062a8f53 100644 --- a/Source/Core/Core/Src/PowerPC/JitILCommon/IR.cpp +++ b/Source/Core/Core/Src/PowerPC/JitILCommon/IR.cpp @@ -1124,14 +1124,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; } } diff --git a/Source/Core/Core/Src/PowerPC/JitInterface.cpp b/Source/Core/Core/Src/PowerPC/JitInterface.cpp index 568de59a6f..54e1ce67a2 100644 --- a/Source/Core/Core/Src/PowerPC/JitInterface.cpp +++ b/Source/Core/Core/Src/PowerPC/JitInterface.cpp @@ -162,22 +162,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; + 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, + 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); + block->originalAddress, name.c_str(), stat.cost, percent, block->codeSize); #endif } } diff --git a/Source/Core/Core/Src/PowerPC/PPCAnalyst.cpp b/Source/Core/Core/Src/PowerPC/PPCAnalyst.cpp index 8299bc0b82..c0b5de8620 100644 --- a/Source/Core/Core/Src/PowerPC/PPCAnalyst.cpp +++ b/Source/Core/Core/Src/PowerPC/PPCAnalyst.cpp @@ -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) { @@ -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(); @@ -648,9 +646,8 @@ 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))) diff --git a/Source/Core/Core/Src/PowerPC/PPCSymbolDB.cpp b/Source/Core/Core/Src/PowerPC/PPCSymbolDB.cpp index e9f821eeed..77826903c3 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()) diff --git a/Source/Core/Core/Src/PowerPC/PPCTables.cpp b/Source/Core/Core/Src/PowerPC/PPCTables.cpp index 6599a58d4f..456785e73e 100644 --- a/Source/Core/Core/Src/PowerPC/PPCTables.cpp +++ b/Source/Core/Core/Src/PowerPC/PPCTables.cpp @@ -230,9 +230,9 @@ void LogCompiledInstructions() #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/State.cpp b/Source/Core/Core/Src/State.cpp index 56c6177536..97d5ebf39f 100644 --- a/Source/Core/Core/Src/State.cpp +++ b/Source/Core/Core/Src/State.cpp @@ -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; diff --git a/Source/Core/DiscIO/Src/DiscScrubber.cpp b/Source/Core/DiscIO/Src/DiscScrubber.cpp index 3724ad2e9f..d8bd968866 100644 --- a/Source/Core/DiscIO/Src/DiscScrubber.cpp +++ b/Source/Core/DiscIO/Src/DiscScrubber.cpp @@ -234,10 +234,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/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/FileSystemGCWii.cpp b/Source/Core/DiscIO/Src/FileSystemGCWii.cpp index 69d250e523..5addc25812 100644 --- a/Source/Core/DiscIO/Src/FileSystemGCWii.cpp +++ b/Source/Core/DiscIO/Src/FileSystemGCWii.cpp @@ -46,12 +46,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; } } @@ -222,8 +222,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 +232,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/NANDContentLoader.cpp b/Source/Core/DiscIO/Src/NANDContentLoader.cpp index 4e722d1397..14845e56ea 100644 --- a/Source/Core/DiscIO/Src/NANDContentLoader.cpp +++ b/Source/Core/DiscIO/Src/NANDContentLoader.cpp @@ -44,14 +44,14 @@ CSharedContent::~CSharedContent() std::string CSharedContent::GetFilenameFromSHA1(const u8* _pHash) { - for (size_t i=0; im_Index == _Index) + if (Content.m_Index == _Index) { - return pContent; + return &Content; } } return NULL; @@ -413,11 +412,11 @@ cUIDsys::~cUIDsys() u32 cUIDsys::GetUIDFromTitle(u64 _Title) { - for (size_t 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)); } } diff --git a/Source/Core/DiscIO/Src/VolumeDirectory.cpp b/Source/Core/DiscIO/Src/VolumeDirectory.cpp index 120e8c8018..f1832202be 100644 --- a/Source/Core/DiscIO/Src/VolumeDirectory.cpp +++ b/Source/Core/DiscIO/Src/VolumeDirectory.cpp @@ -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 @@ -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/DolphinWX/Src/ARCodeAddEdit.cpp b/Source/Core/DolphinWX/Src/ARCodeAddEdit.cpp index 3e02c96272..e9ac18c1e3 100644 --- a/Source/Core/DolphinWX/Src/ARCodeAddEdit.cpp +++ b/Source/Core/DolphinWX/Src/ARCodeAddEdit.cpp @@ -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/ConfigMain.cpp b/Source/Core/DolphinWX/Src/ConfigMain.cpp index a301534522..7087c96bde 100644 --- a/Source/Core/DolphinWX/Src/ConfigMain.cpp +++ b/Source/Core/DolphinWX/Src/ConfigMain.cpp @@ -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)); } } @@ -251,8 +251,8 @@ 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)); + for (auto& CPUCores_a : CPUCores) + arrayStringFor_CPUEngine.Add(wxGetTranslation(CPUCores_a.name)); // DSP Engine arrayStringFor_DSPEngine.Add(_("DSP HLE emulation (fast)")); diff --git a/Source/Core/DolphinWX/Src/Debugger/BreakpointView.cpp b/Source/Core/DolphinWX/Src/Debugger/BreakpointView.cpp index c3d366c1dc..29ad9b4d7e 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; @@ -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/CodeWindow.cpp b/Source/Core/DolphinWX/Src/Debugger/CodeWindow.cpp index 17e66337d2..49db840f7c 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) @@ -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/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/FifoPlayerDlg.cpp b/Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp index 63781008b3..c7ae3f7756 100644 --- a/Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp +++ b/Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp @@ -917,8 +917,8 @@ 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")); diff --git a/Source/Core/DolphinWX/Src/FrameAui.cpp b/Source/Core/DolphinWX/Src/FrameAui.cpp index 5ba5d54b43..b43b41a7cf 100644 --- a/Source/Core/DolphinWX/Src/FrameAui.cpp +++ b/Source/Core/DolphinWX/Src/FrameAui.cpp @@ -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..caa77ce0ee 100644 --- a/Source/Core/DolphinWX/Src/FrameTools.cpp +++ b/Source/Core/DolphinWX/Src/FrameTools.cpp @@ -1795,9 +1795,9 @@ void CFrame::GameListChanged(wxCommandEvent& event) 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; } diff --git a/Source/Core/DolphinWX/Src/GameListCtrl.cpp b/Source/Core/DolphinWX/Src/GameListCtrl.cpp index 300bf470c0..a6a6e2b6a0 100644 --- a/Source/Core/DolphinWX/Src/GameListCtrl.cpp +++ b/Source/Core/DolphinWX/Src/GameListCtrl.cpp @@ -475,15 +475,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 +491,7 @@ void CGameListCtrl::ScanForISOs() } if (!duplicate) Directories.push_back( - FST_Temp.children[j].physicalName.c_str()); + Entry.physicalName.c_str()); } } } @@ -539,7 +539,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 +603,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()); diff --git a/Source/Core/DolphinWX/Src/ISOProperties.cpp b/Source/Core/DolphinWX/Src/ISOProperties.cpp index e5943ef8cf..e73726e02a 100644 --- a/Source/Core/DolphinWX/Src/ISOProperties.cpp +++ b/Source/Core/DolphinWX/Src/ISOProperties.cpp @@ -1223,9 +1223,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 +1238,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); @@ -1330,10 +1329,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 +1338,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; diff --git a/Source/Core/DolphinWX/Src/InputConfigDiag.cpp b/Source/Core/DolphinWX/Src/InputConfigDiag.cpp index 574834f940..03d51acbee 100644 --- a/Source/Core/DolphinWX/Src/InputConfigDiag.cpp +++ b/Source/Core/DolphinWX/Src/InputConfigDiag.cpp @@ -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/MemoryCards/WiiSaveCrypted.cpp b/Source/Core/DolphinWX/Src/MemoryCards/WiiSaveCrypted.cpp index 99cea98b18..30c0639ab2 100644 --- a/Source/Core/DolphinWX/Src/MemoryCards/WiiSaveCrypted.cpp +++ b/Source/Core/DolphinWX/Src/MemoryCards/WiiSaveCrypted.cpp @@ -45,12 +45,12 @@ void CWiiSaveCrypted::ExportAllSaves() 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)) @@ -63,9 +63,9 @@ 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; } } @@ -581,25 +581,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/NetWindow.cpp b/Source/Core/DolphinWX/Src/NetWindow.cpp index b575ad6663..682dedb7b0 100644 --- a/Source/Core/DolphinWX/Src/NetWindow.cpp +++ b/Source/Core/DolphinWX/Src/NetWindow.cpp @@ -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/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/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/UDPWiimote.cpp b/Source/Core/InputCommon/Src/UDPWiimote.cpp index e0cf787e0f..f6f505a74d 100644 --- a/Source/Core/InputCommon/Src/UDPWiimote.cpp +++ b/Source/Core/InputCommon/Src/UDPWiimote.cpp @@ -160,12 +160,12 @@ 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 } @@ -194,11 +194,10 @@ void UDPWiimote::mainThread() 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; @@ -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; diff --git a/Source/Core/VideoBackends/OGL/Src/SamplerCache.cpp b/Source/Core/VideoBackends/OGL/Src/SamplerCache.cpp index 713b0e21fa..fff3063009 100644 --- a/Source/Core/VideoBackends/OGL/Src/SamplerCache.cpp +++ b/Source/Core/VideoBackends/OGL/Src/SamplerCache.cpp @@ -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/TextureCache.cpp b/Source/Core/VideoBackends/OGL/Src/TextureCache.cpp index 7810ff00eb..a9d23d78c8 100644 --- a/Source/Core/VideoBackends/OGL/Src/TextureCache.cpp +++ b/Source/Core/VideoBackends/OGL/Src/TextureCache.cpp @@ -88,9 +88,9 @@ TextureCache::TCacheEntry::~TCacheEntry() { if (texture) { - for(int i=0; i<8; i++) - if(s_Textures[i] == texture) - s_Textures[i] = 0; + for(auto& gtex : s_Textures) + if(gtex == texture) + gtex = 0; glDeleteTextures(1, &texture); texture = 0; } @@ -449,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; } @@ -459,9 +459,9 @@ 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/TextureConverter.cpp b/Source/Core/VideoBackends/OGL/Src/TextureConverter.cpp index 05742ddc95..104b6f5b1c 100644 --- a/Source/Core/VideoBackends/OGL/Src/TextureConverter.cpp +++ b/Source/Core/VideoBackends/OGL/Src/TextureConverter.cpp @@ -186,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; diff --git a/Source/Core/VideoBackends/OGL/Src/main.cpp b/Source/Core/VideoBackends/OGL/Src/main.cpp index 07c1fcfc0b..ada52a385f 100644 --- a/Source/Core/VideoBackends/OGL/Src/main.cpp +++ b/Source/Core/VideoBackends/OGL/Src/main.cpp @@ -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")) diff --git a/Source/Core/VideoBackends/Software/Src/Clipper.cpp b/Source/Core/VideoBackends/Software/Src/Clipper.cpp index ff71ee491d..fc34fbe0da 100644 --- a/Source/Core/VideoBackends/Software/Src/Clipper.cpp +++ b/Source/Core/VideoBackends/Software/Src/Clipper.cpp @@ -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() 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/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/VideoCommon/Src/DriverDetails.cpp b/Source/Core/VideoCommon/Src/DriverDetails.cpp index 4072f475f4..2ca8f4577b 100644 --- a/Source/Core/VideoCommon/Src/DriverDetails.cpp +++ b/Source/Core/VideoCommon/Src/DriverDetails.cpp @@ -75,15 +75,15 @@ namespace DriverDetails 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)); } } diff --git a/Source/Core/VideoCommon/Src/HiresTextures.cpp b/Source/Core/VideoCommon/Src/HiresTextures.cpp index 80bc41f089..3b432903d8 100644 --- a/Source/Core/VideoCommon/Src/HiresTextures.cpp +++ b/Source/Core/VideoCommon/Src/HiresTextures.cpp @@ -33,21 +33,21 @@ void Init(const char *gameCode) { 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/VertexLoader.h b/Source/Core/VideoCommon/Src/VertexLoader.h index 06c5508040..da96431f97 100644 --- a/Source/Core/VideoCommon/Src/VertexLoader.h +++ b/Source/Core/VideoCommon/Src/VertexLoader.h @@ -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; 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/VideoBackendBase.cpp b/Source/Core/VideoCommon/Src/VideoBackendBase.cpp index 72947182fd..d62a799d42 100644 --- a/Source/Core/VideoCommon/Src/VideoBackendBase.cpp +++ b/Source/Core/VideoCommon/Src/VideoBackendBase.cpp @@ -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; } } From c579637eafb9e9eb7f83711569254bd8da6d09d2 Mon Sep 17 00:00:00 2001 From: comex Date: Tue, 29 Oct 2013 01:23:17 -0400 Subject: [PATCH 41/90] Run code through the advanced tool 'sed' to remove trailing whitespace. --- Source/Core/AudioCommon/Src/AOSoundStream.h | 4 +- .../Core/AudioCommon/Src/AlsaSoundStream.cpp | 36 +- Source/Core/AudioCommon/Src/AlsaSoundStream.h | 4 +- Source/Core/AudioCommon/Src/AudioCommon.cpp | 14 +- Source/Core/AudioCommon/Src/AudioCommon.h | 2 +- Source/Core/AudioCommon/Src/DSoundStream.h | 2 +- Source/Core/AudioCommon/Src/Mixer.cpp | 16 +- Source/Core/AudioCommon/Src/Mixer.h | 4 +- .../Core/AudioCommon/Src/OpenSLESStream.cpp | 2 +- .../Core/AudioCommon/Src/PulseAudioStream.h | 2 +- Source/Core/AudioCommon/Src/SoundStream.h | 4 +- Source/Core/AudioCommon/Src/WaveFile.cpp | 2 +- Source/Core/AudioCommon/Src/XAudio2Stream.h | 2 +- Source/Core/AudioCommon/Src/aldlist.cpp | 36 +- Source/Core/Common/Src/ArmCPUDetect.cpp | 20 +- Source/Core/Common/Src/ArmEmitter.cpp | 42 +- Source/Core/Common/Src/ArmEmitter.h | 24 +- Source/Core/Common/Src/BreakPoints.cpp | 2 +- Source/Core/Common/Src/ChunkFile.h | 5 +- Source/Core/Common/Src/CommonFuncs.h | 14 +- Source/Core/Common/Src/ConsoleListener.cpp | 24 +- Source/Core/Common/Src/Crypto/ec.cpp | 4 +- Source/Core/Common/Src/ExtendedTrace.cpp | 26 +- Source/Core/Common/Src/FPURoundMode.h | 4 +- Source/Core/Common/Src/FifoQueue.h | 2 +- Source/Core/Common/Src/FileUtil.cpp | 60 +- Source/Core/Common/Src/FileUtil.h | 12 +- Source/Core/Common/Src/Hash.cpp | 32 +- Source/Core/Common/Src/IniFile.cpp | 14 +- Source/Core/Common/Src/IniFile.h | 4 +- Source/Core/Common/Src/LinearDiskCache.h | 6 +- Source/Core/Common/Src/Log.h | 4 +- Source/Core/Common/Src/LogManager.cpp | 6 +- Source/Core/Common/Src/LogManager.h | 4 +- Source/Core/Common/Src/MathUtil.cpp | 12 +- Source/Core/Common/Src/MathUtil.h | 4 +- Source/Core/Common/Src/MemArena.cpp | 2 +- Source/Core/Common/Src/MsgHandler.h | 42 +- Source/Core/Common/Src/NandPaths.cpp | 2 +- Source/Core/Common/Src/StdConditionVariable.h | 2 +- Source/Core/Common/Src/StdMutex.h | 10 +- Source/Core/Common/Src/StdThread.h | 6 +- Source/Core/Common/Src/StringUtil.cpp | 16 +- Source/Core/Common/Src/StringUtil.h | 2 +- Source/Core/Common/Src/SysConf.cpp | 8 +- Source/Core/Common/Src/Thread.cpp | 6 +- Source/Core/Common/Src/Thread.h | 8 +- Source/Core/Common/Src/Version.cpp | 2 +- Source/Core/Common/Src/x64ABI.cpp | 34 +- Source/Core/Common/Src/x64ABI.h | 2 +- Source/Core/Common/Src/x64Analyzer.cpp | 34 +- Source/Core/Common/Src/x64CPUDetect.cpp | 14 +- Source/Core/Common/Src/x64Emitter.cpp | 46 +- Source/Core/Common/Src/x64Emitter.h | 156 +- Source/Core/Common/Src/x64FPURoundMode.cpp | 6 +- Source/Core/Core/Src/ActionReplay.cpp | 34 +- Source/Core/Core/Src/ArmMemTools.cpp | 2 +- Source/Core/Core/Src/Boot/Boot.cpp | 16 +- Source/Core/Core/Src/Boot/Boot_DOL.cpp | 8 +- Source/Core/Core/Src/Boot/Boot_ELF.cpp | 8 +- Source/Core/Core/Src/Boot/Boot_WiiWAD.cpp | 6 +- Source/Core/Core/Src/Boot/ElfReader.cpp | 10 +- Source/Core/Core/Src/Boot/ElfReader.h | 6 +- Source/Core/Core/Src/Boot/ElfTypes.h | 30 +- Source/Core/Core/Src/BootManager.cpp | 4 +- Source/Core/Core/Src/ConfigManager.cpp | 4 +- Source/Core/Core/Src/Core.h | 2 +- Source/Core/Core/Src/CoreTiming.cpp | 24 +- Source/Core/Core/Src/DSP/DSPAccelerator.cpp | 4 +- Source/Core/Core/Src/DSP/DSPAnalyzer.cpp | 18 +- Source/Core/Core/Src/DSP/DSPBreakpoints.h | 4 +- Source/Core/Core/Src/DSP/DSPCodeUtil.cpp | 8 +- Source/Core/Core/Src/DSP/DSPCore.cpp | 8 +- Source/Core/Core/Src/DSP/DSPCore.h | 2 +- Source/Core/Core/Src/DSP/DSPEmitter.cpp | 16 +- Source/Core/Core/Src/DSP/DSPEmitter.h | 2 +- Source/Core/Core/Src/DSP/DSPHWInterface.cpp | 6 +- Source/Core/Core/Src/DSP/DSPIntCCUtil.cpp | 12 +- Source/Core/Core/Src/DSP/DSPIntCCUtil.h | 2 +- Source/Core/Core/Src/DSP/DSPIntExtOps.cpp | 32 +- Source/Core/Core/Src/DSP/DSPIntExtOps.h | 6 +- Source/Core/Core/Src/DSP/DSPIntUtil.h | 22 +- Source/Core/Core/Src/DSP/DSPInterpreter.cpp | 16 +- Source/Core/Core/Src/DSP/DSPInterpreter.h | 2 +- Source/Core/Core/Src/DSP/DSPMemoryMap.cpp | 4 +- Source/Core/Core/Src/DSP/DSPTables.cpp | 10 +- Source/Core/Core/Src/DSP/DSPTables.h | 2 +- Source/Core/Core/Src/DSP/DspIntArithmetic.cpp | 40 +- Source/Core/Core/Src/DSP/DspIntBranch.cpp | 12 +- Source/Core/Core/Src/DSP/DspIntLoadStore.cpp | 22 +- Source/Core/Core/Src/DSP/DspIntMisc.cpp | 10 +- Source/Core/Core/Src/DSP/DspIntMultiplier.cpp | 30 +- .../Core/Src/DSP/Jit/DSPJitArithmetic.cpp | 30 +- Source/Core/Core/Src/DSP/Jit/DSPJitBranch.cpp | 12 +- Source/Core/Core/Src/DSP/Jit/DSPJitCCUtil.cpp | 8 +- Source/Core/Core/Src/DSP/Jit/DSPJitExtOps.cpp | 12 +- .../Core/Core/Src/DSP/Jit/DSPJitLoadStore.cpp | 20 +- Source/Core/Core/Src/DSP/Jit/DSPJitMisc.cpp | 6 +- .../Core/Src/DSP/Jit/DSPJitMultiplier.cpp | 8 +- .../Core/Core/Src/DSP/Jit/DSPJitRegCache.cpp | 2 +- Source/Core/Core/Src/DSP/Jit/DSPJitRegCache.h | 2 +- Source/Core/Core/Src/DSP/LabelMap.cpp | 2 +- Source/Core/Core/Src/DSP/assemble.cpp | 18 +- Source/Core/Core/Src/DSP/assemble.h | 2 +- Source/Core/Core/Src/DSPEmulator.cpp | 2 +- .../Core/Src/Debugger/Debugger_SymbolMap.cpp | 14 +- .../Core/Src/Debugger/Debugger_SymbolMap.h | 2 +- Source/Core/Core/Src/Debugger/Dump.cpp | 6 +- Source/Core/Core/Src/Debugger/Dump.h | 2 +- .../Core/Src/Debugger/PPCDebugInterface.cpp | 16 +- .../Core/Src/Debugger/PPCDebugInterface.h | 2 +- .../Core/Core/Src/FifoPlayer/FifoAnalyzer.cpp | 8 +- .../Core/Core/Src/FifoPlayer/FifoDataFile.cpp | 8 +- .../Core/Core/Src/FifoPlayer/FifoDataFile.h | 4 +- .../Core/Core/Src/FifoPlayer/FifoFileStruct.h | 2 +- .../Src/FifoPlayer/FifoPlaybackAnalyzer.cpp | 8 +- .../Src/FifoPlayer/FifoPlaybackAnalyzer.h | 2 +- .../Core/Core/Src/FifoPlayer/FifoPlayer.cpp | 6 +- Source/Core/Core/Src/FifoPlayer/FifoPlayer.h | 2 +- .../Src/FifoPlayer/FifoRecordAnalyzer.cpp | 4 +- .../Core/Src/FifoPlayer/FifoRecordAnalyzer.h | 2 +- .../Core/Core/Src/FifoPlayer/FifoRecorder.cpp | 12 +- .../Core/Core/Src/FifoPlayer/FifoRecorder.h | 2 +- Source/Core/Core/Src/GeckoCode.cpp | 4 +- Source/Core/Core/Src/GeckoCode.h | 2 +- Source/Core/Core/Src/HLE/HLE.cpp | 4 +- Source/Core/Core/Src/HW/AudioInterface.cpp | 16 +- Source/Core/Core/Src/HW/BBA-TAP/TAP_Unix.cpp | 4 +- Source/Core/Core/Src/HW/BBA-TAP/TAP_Win32.cpp | 10 +- Source/Core/Core/Src/HW/CPU.cpp | 8 +- Source/Core/Core/Src/HW/CPU.h | 6 +- Source/Core/Core/Src/HW/DSP.cpp | 10 +- Source/Core/Core/Src/HW/DSP.h | 2 +- Source/Core/Core/Src/HW/DSPHLE/DSPHLE.cpp | 4 +- Source/Core/Core/Src/HW/DSPHLE/DSPHLE.h | 2 +- Source/Core/Core/Src/HW/DSPHLE/HLEMixer.h | 4 +- Source/Core/Core/Src/HW/DSPHLE/MailHandler.h | 2 +- .../Src/HW/DSPHLE/UCodes/UCode_AXStructs.h | 2 +- .../Core/Src/HW/DSPHLE/UCodes/UCode_Zelda.cpp | 14 +- .../Core/Src/HW/DSPHLE/UCodes/UCode_Zelda.h | 10 +- .../HW/DSPHLE/UCodes/UCode_Zelda_ADPCM.cpp | 8 +- .../HW/DSPHLE/UCodes/UCode_Zelda_Synth.cpp | 14 +- .../HW/DSPHLE/UCodes/UCode_Zelda_Voice.cpp | 40 +- .../Core/Core/Src/HW/DSPHLE/UCodes/UCodes.h | 2 +- .../Core/Src/HW/DSPLLE/DSPDebugInterface.cpp | 18 +- .../Core/Src/HW/DSPLLE/DSPDebugInterface.h | 2 +- Source/Core/Core/Src/HW/DSPLLE/DSPHost.cpp | 2 +- Source/Core/Core/Src/HW/DSPLLE/DSPLLE.cpp | 6 +- .../Core/Core/Src/HW/DSPLLE/DSPLLEGlobals.h | 2 +- Source/Core/Core/Src/HW/DSPLLE/DSPSymbols.cpp | 8 +- Source/Core/Core/Src/HW/DSPLLE/DSPSymbols.h | 4 +- Source/Core/Core/Src/HW/DVDInterface.cpp | 24 +- Source/Core/Core/Src/HW/EXI_Device.cpp | 2 +- Source/Core/Core/Src/HW/EXI_DeviceAD16.cpp | 4 +- Source/Core/Core/Src/HW/EXI_DeviceAD16.h | 2 +- .../Core/Src/HW/EXI_DeviceAMBaseboard.cpp | 2 +- .../Core/Core/Src/HW/EXI_DeviceEthernet.cpp | 8 +- Source/Core/Core/Src/HW/EXI_DeviceEthernet.h | 8 +- Source/Core/Core/Src/HW/EXI_DeviceGecko.cpp | 14 +- Source/Core/Core/Src/HW/EXI_DeviceIPL.cpp | 8 +- .../Core/Core/Src/HW/EXI_DeviceMemoryCard.cpp | 32 +- .../Core/Core/Src/HW/EXI_DeviceMemoryCard.h | 10 +- Source/Core/Core/Src/HW/EXI_DeviceMic.cpp | 12 +- Source/Core/Core/Src/HW/EXI_DeviceMic.h | 2 +- Source/Core/Core/Src/HW/GCMemcard.cpp | 44 +- Source/Core/Core/Src/HW/GCMemcard.h | 6 +- Source/Core/Core/Src/HW/GCPad.cpp | 6 +- Source/Core/Core/Src/HW/GCPadEmu.cpp | 2 +- Source/Core/Core/Src/HW/GCPadEmu.h | 2 +- Source/Core/Core/Src/HW/GPFifo.cpp | 8 +- Source/Core/Core/Src/HW/Memmap.cpp | 4 +- Source/Core/Core/Src/HW/Memmap.h | 4 +- Source/Core/Core/Src/HW/MemmapFunctions.cpp | 72 +- Source/Core/Core/Src/HW/MemoryInterface.cpp | 2 +- Source/Core/Core/Src/HW/MemoryInterface.h | 2 +- .../Core/Core/Src/HW/ProcessorInterface.cpp | 20 +- Source/Core/Core/Src/HW/ProcessorInterface.h | 6 +- Source/Core/Core/Src/HW/SI.cpp | 6 +- Source/Core/Core/Src/HW/SI_Device.cpp | 2 +- .../Core/Core/Src/HW/SI_DeviceAMBaseboard.cpp | 12 +- Source/Core/Core/Src/HW/SI_DeviceDanceMat.cpp | 6 +- Source/Core/Core/Src/HW/SI_DeviceDanceMat.h | 4 +- Source/Core/Core/Src/HW/SI_DeviceGBA.cpp | 4 +- .../Core/Src/HW/SI_DeviceGCController.cpp | 6 +- .../Core/Core/Src/HW/SI_DeviceGCController.h | 4 +- .../Core/Src/HW/SI_DeviceGCSteeringWheel.cpp | 2 +- .../Core/Src/HW/SI_DeviceGCSteeringWheel.h | 4 +- Source/Core/Core/Src/HW/Sram.cpp | 4 +- Source/Core/Core/Src/HW/StreamADPCM.cpp | 2 +- Source/Core/Core/Src/HW/SystemTimers.cpp | 4 +- Source/Core/Core/Src/HW/VideoInterface.cpp | 2 +- Source/Core/Core/Src/HW/VideoInterface.h | 28 +- Source/Core/Core/Src/HW/WII_IPC.cpp | 2 +- Source/Core/Core/Src/HW/Wiimote.cpp | 6 +- .../Src/HW/WiimoteEmu/Attachment/Classic.cpp | 2 +- .../Src/HW/WiimoteEmu/Attachment/Nunchuk.cpp | 8 +- .../Src/HW/WiimoteEmu/Attachment/Nunchuk.h | 2 +- .../Core/Src/HW/WiimoteEmu/Encryption.cpp | 18 +- .../Core/Core/Src/HW/WiimoteEmu/MatrixMath.h | 6 +- .../Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp | 60 +- Source/Core/Core/Src/HW/WiimoteReal/IONix.cpp | 4 +- Source/Core/Core/Src/HW/WiimoteReal/IOWin.cpp | 76 +- .../Core/Src/HW/WiimoteReal/WiimoteReal.cpp | 62 +- .../Core/Src/HW/WiimoteReal/WiimoteReal.h | 10 +- Source/Core/Core/Src/Host.h | 2 +- Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE.h | 4 +- .../Core/Src/IPC_HLE/WII_IPC_HLE_Device.h | 50 +- .../Src/IPC_HLE/WII_IPC_HLE_Device_DI.cpp | 14 +- .../Core/Src/IPC_HLE/WII_IPC_HLE_Device_DI.h | 4 +- .../Src/IPC_HLE/WII_IPC_HLE_Device_FileIO.cpp | 38 +- .../Src/IPC_HLE/WII_IPC_HLE_Device_FileIO.h | 2 +- .../Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp | 50 +- .../Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.h | 2 +- .../Src/IPC_HLE/WII_IPC_HLE_Device_fs.cpp | 24 +- .../Core/Src/IPC_HLE/WII_IPC_HLE_Device_fs.h | 2 +- .../Src/IPC_HLE/WII_IPC_HLE_Device_hid.cpp | 2 +- .../Src/IPC_HLE/WII_IPC_HLE_Device_net.cpp | 8 +- .../IPC_HLE/WII_IPC_HLE_Device_net_ssl.cpp | 6 +- .../IPC_HLE/WII_IPC_HLE_Device_sdio_slot0.cpp | 6 +- .../IPC_HLE/WII_IPC_HLE_Device_sdio_slot0.h | 4 +- .../Core/Src/IPC_HLE/WII_IPC_HLE_Device_stm.h | 6 +- .../Src/IPC_HLE/WII_IPC_HLE_Device_usb.cpp | 20 +- .../Core/Src/IPC_HLE/WII_IPC_HLE_Device_usb.h | 12 +- .../IPC_HLE/WII_IPC_HLE_Device_usb_kbd.cpp | 20 +- .../Core/Src/IPC_HLE/WII_IPC_HLE_WiiMote.cpp | 8 +- .../Core/Src/IPC_HLE/WII_IPC_HLE_WiiMote.h | 10 +- Source/Core/Core/Src/IPC_HLE/WII_Socket.cpp | 62 +- .../Core/Src/IPC_HLE/WiiMote_HID_Attr.cpp | 156 +- .../Core/Core/Src/IPC_HLE/WiiMote_HID_Attr.h | 2 +- Source/Core/Core/Src/IPC_HLE/hci.h | 2 +- Source/Core/Core/Src/Movie.cpp | 46 +- Source/Core/Core/Src/Movie.h | 2 +- Source/Core/Core/Src/NetPlayServer.cpp | 8 +- Source/Core/Core/Src/PatchEngine.cpp | 4 +- Source/Core/Core/Src/PowerPC/Gekko.h | 36 +- .../Src/PowerPC/Interpreter/Interpreter.h | 2 +- .../Interpreter/Interpreter_Branch.cpp | 2 +- .../PowerPC/Interpreter/Interpreter_FPUtils.h | 6 +- .../Interpreter/Interpreter_FloatingPoint.cpp | 42 +- .../Interpreter/Interpreter_Integer.cpp | 18 +- .../Interpreter/Interpreter_LoadStore.cpp | 22 +- .../Interpreter_LoadStorePaired.cpp | 28 +- .../Interpreter/Interpreter_Paired.cpp | 116 +- .../Interpreter_SystemRegisters.cpp | 16 +- .../Interpreter/Interpreter_Tables.cpp | 62 +- Source/Core/Core/Src/PowerPC/Jit64/Jit.cpp | 28 +- Source/Core/Core/Src/PowerPC/Jit64/Jit.h | 2 +- .../Core/Src/PowerPC/Jit64/Jit64_Tables.cpp | 56 +- Source/Core/Core/Src/PowerPC/Jit64/JitAsm.cpp | 14 +- Source/Core/Core/Src/PowerPC/Jit64/JitAsm.h | 2 +- .../Core/Src/PowerPC/Jit64/JitRegCache.cpp | 8 +- .../Core/Core/Src/PowerPC/Jit64/JitRegCache.h | 12 +- .../Core/Src/PowerPC/Jit64/Jit_Branch.cpp | 14 +- .../Src/PowerPC/Jit64/Jit_FloatingPoint.cpp | 6 +- .../Core/Src/PowerPC/Jit64/Jit_Integer.cpp | 78 +- .../Core/Src/PowerPC/Jit64/Jit_LoadStore.cpp | 40 +- .../PowerPC/Jit64/Jit_LoadStoreFloating.cpp | 12 +- .../Src/PowerPC/Jit64/Jit_LoadStorePaired.cpp | 2 +- .../Core/Src/PowerPC/Jit64/Jit_Paired.cpp | 14 +- .../Src/PowerPC/Jit64/Jit_SystemRegisters.cpp | 2 +- .../Core/Core/Src/PowerPC/Jit64IL/IR_X86.cpp | 36 +- .../Core/Core/Src/PowerPC/Jit64IL/JitIL.cpp | 28 +- Source/Core/Core/Src/PowerPC/Jit64IL/JitIL.h | 6 +- .../Core/Src/PowerPC/Jit64IL/JitILAsm.cpp | 16 +- .../Core/Core/Src/PowerPC/Jit64IL/JitILAsm.h | 2 +- .../Core/Src/PowerPC/Jit64IL/JitIL_Tables.cpp | 56 +- Source/Core/Core/Src/PowerPC/JitArm32/Jit.cpp | 34 +- Source/Core/Core/Src/PowerPC/JitArm32/Jit.h | 14 +- .../Src/PowerPC/JitArm32/JitArm_BackPatch.cpp | 12 +- .../Src/PowerPC/JitArm32/JitArm_Branch.cpp | 20 +- .../Src/PowerPC/JitArm32/JitArm_FPUtils.h | 4 +- .../PowerPC/JitArm32/JitArm_FloatingPoint.cpp | 70 +- .../Src/PowerPC/JitArm32/JitArm_Integer.cpp | 48 +- .../Src/PowerPC/JitArm32/JitArm_LoadStore.cpp | 40 +- .../JitArm32/JitArm_LoadStoreFloating.cpp | 30 +- .../JitArm32/JitArm_LoadStorePaired.cpp | 10 +- .../Src/PowerPC/JitArm32/JitArm_Paired.cpp | 112 +- .../JitArm32/JitArm_SystemRegisters.cpp | 18 +- .../Src/PowerPC/JitArm32/JitArm_Tables.cpp | 56 +- .../Core/Core/Src/PowerPC/JitArm32/JitAsm.cpp | 112 +- .../Core/Core/Src/PowerPC/JitArm32/JitAsm.h | 2 +- .../Core/Src/PowerPC/JitArm32/JitFPRCache.cpp | 12 +- .../Core/Src/PowerPC/JitArm32/JitFPRCache.h | 12 +- .../Core/Src/PowerPC/JitArm32/JitRegCache.cpp | 16 +- .../Core/Src/PowerPC/JitArm32/JitRegCache.h | 12 +- .../Core/Core/Src/PowerPC/JitArmIL/IR_Arm.cpp | 12 +- .../Core/Core/Src/PowerPC/JitArmIL/JitIL.cpp | 18 +- Source/Core/Core/Src/PowerPC/JitArmIL/JitIL.h | 8 +- .../Core/Src/PowerPC/JitArmIL/JitILAsm.cpp | 24 +- .../Core/Core/Src/PowerPC/JitArmIL/JitILAsm.h | 6 +- .../Src/PowerPC/JitArmIL/JitIL_Branch.cpp | 6 +- .../Src/PowerPC/JitArmIL/JitIL_Tables.cpp | 56 +- .../Src/PowerPC/JitCommon/JitAsmCommon.cpp | 16 +- .../Src/PowerPC/JitCommon/JitBackpatch.cpp | 6 +- .../Core/Src/PowerPC/JitCommon/JitBase.cpp | 2 +- .../Core/Core/Src/PowerPC/JitCommon/JitBase.h | 6 +- .../Core/Src/PowerPC/JitCommon/JitCache.cpp | 16 +- .../Core/Src/PowerPC/JitCommon/JitCache.h | 4 +- .../Core/Core/Src/PowerPC/JitILCommon/IR.cpp | 46 +- Source/Core/Core/Src/PowerPC/JitILCommon/IR.h | 4 +- .../Core/Src/PowerPC/JitILCommon/JitILBase.h | 6 +- .../PowerPC/JitILCommon/JitILBase_Branch.cpp | 10 +- .../PowerPC/JitILCommon/JitILBase_Integer.cpp | 10 +- .../JitILCommon/JitILBase_LoadStore.cpp | 4 +- .../PowerPC/JitILCommon/JitILBase_Paired.cpp | 8 +- .../JitILCommon/JitILBase_SystemRegisters.cpp | 4 +- Source/Core/Core/Src/PowerPC/JitInterface.cpp | 14 +- Source/Core/Core/Src/PowerPC/JitInterface.h | 6 +- Source/Core/Core/Src/PowerPC/PPCAnalyst.cpp | 32 +- Source/Core/Core/Src/PowerPC/PPCAnalyst.h | 2 +- Source/Core/Core/Src/PowerPC/PPCCache.cpp | 4 +- Source/Core/Core/Src/PowerPC/PPCSymbolDB.cpp | 4 +- Source/Core/Core/Src/PowerPC/PPCSymbolDB.h | 2 +- Source/Core/Core/Src/PowerPC/PPCTables.cpp | 6 +- Source/Core/Core/Src/PowerPC/PPCTables.h | 2 +- Source/Core/Core/Src/PowerPC/PowerPC.cpp | 8 +- Source/Core/Core/Src/PowerPC/PowerPC.h | 6 +- Source/Core/Core/Src/PowerPC/Profiler.h | 10 +- Source/Core/Core/Src/PowerPC/SignatureDB.cpp | 14 +- Source/Core/Core/Src/PowerPC/SignatureDB.h | 2 +- Source/Core/Core/Src/State.cpp | 10 +- Source/Core/Core/Src/VolumeHandler.cpp | 2 +- Source/Core/DiscIO/Src/BannerLoaderGC.cpp | 2 +- Source/Core/DiscIO/Src/BannerLoaderGC.h | 2 +- Source/Core/DiscIO/Src/BannerLoaderWii.cpp | 14 +- Source/Core/DiscIO/Src/BannerLoaderWii.h | 2 +- Source/Core/DiscIO/Src/Blob.cpp | 2 +- Source/Core/DiscIO/Src/CISOBlob.cpp | 8 +- Source/Core/DiscIO/Src/CISOBlob.h | 8 +- Source/Core/DiscIO/Src/CompressedBlob.cpp | 2 +- Source/Core/DiscIO/Src/DiscScrubber.cpp | 2 +- Source/Core/DiscIO/Src/DriveBlob.cpp | 2 +- Source/Core/DiscIO/Src/FileMonitor.cpp | 2 +- Source/Core/DiscIO/Src/FileSystemGCWii.cpp | 6 +- Source/Core/DiscIO/Src/FileSystemGCWii.h | 2 +- Source/Core/DiscIO/Src/Filesystem.h | 2 +- Source/Core/DiscIO/Src/NANDContentLoader.cpp | 18 +- Source/Core/DiscIO/Src/Volume.h | 2 +- Source/Core/DiscIO/Src/VolumeCommon.cpp | 12 +- Source/Core/DiscIO/Src/VolumeCreator.cpp | 8 +- Source/Core/DiscIO/Src/VolumeDirectory.cpp | 26 +- Source/Core/DiscIO/Src/VolumeDirectory.h | 2 +- Source/Core/DiscIO/Src/VolumeGC.cpp | 2 +- Source/Core/DiscIO/Src/VolumeGC.h | 4 +- Source/Core/DiscIO/Src/VolumeWad.cpp | 8 +- Source/Core/DiscIO/Src/VolumeWad.h | 4 +- Source/Core/DiscIO/Src/VolumeWiiCrypted.cpp | 12 +- Source/Core/DiscIO/Src/WbfsBlob.cpp | 6 +- Source/Core/DiscIO/Src/WbfsBlob.h | 2 +- Source/Core/DiscIO/Src/WiiWad.cpp | 8 +- Source/Core/DiscIO/Src/WiiWad.h | 4 +- Source/Core/DolphinWX/Src/ARCodeAddEdit.cpp | 2 +- .../DolphinWX/Src/Android/ButtonManager.cpp | 14 +- .../DolphinWX/Src/Android/ButtonManager.h | 12 +- .../DolphinWX/Src/Android/TextureLoader.cpp | 30 +- Source/Core/DolphinWX/Src/CheatsWindow.cpp | 4 +- Source/Core/DolphinWX/Src/ConfigMain.cpp | 30 +- Source/Core/DolphinWX/Src/ConfigMain.h | 2 +- .../DolphinWX/Src/Debugger/BreakpointDlg.h | 2 +- .../DolphinWX/Src/Debugger/BreakpointView.cpp | 4 +- .../Src/Debugger/BreakpointWindow.cpp | 4 +- .../Core/DolphinWX/Src/Debugger/CodeView.cpp | 10 +- Source/Core/DolphinWX/Src/Debugger/CodeView.h | 2 +- .../DolphinWX/Src/Debugger/CodeWindow.cpp | 16 +- .../Src/Debugger/CodeWindowFunctions.cpp | 2 +- .../DolphinWX/Src/Debugger/DSPDebugWindow.cpp | 2 +- .../DolphinWX/Src/Debugger/DebuggerPanel.cpp | 2 +- .../DolphinWX/Src/Debugger/DebuggerPanel.h | 2 +- .../DolphinWX/Src/Debugger/MemoryCheckDlg.h | 2 +- .../DolphinWX/Src/Debugger/MemoryWindow.cpp | 2 +- .../DolphinWX/Src/Debugger/RegisterView.cpp | 4 +- Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp | 98 +- Source/Core/DolphinWX/Src/FifoPlayerDlg.h | 2 +- Source/Core/DolphinWX/Src/Frame.cpp | 8 +- Source/Core/DolphinWX/Src/Frame.h | 8 +- Source/Core/DolphinWX/Src/FrameAui.cpp | 6 +- Source/Core/DolphinWX/Src/FrameTools.cpp | 48 +- Source/Core/DolphinWX/Src/GLInterface/AGL.cpp | 4 +- Source/Core/DolphinWX/Src/GLInterface/EGL.cpp | 2 +- Source/Core/DolphinWX/Src/GLInterface/EGL.h | 2 +- Source/Core/DolphinWX/Src/GLInterface/GLX.h | 2 +- .../DolphinWX/Src/GLInterface/InterfaceBase.h | 4 +- .../DolphinWX/Src/GLInterface/Platform.cpp | 4 +- Source/Core/DolphinWX/Src/GLInterface/WGL.cpp | 2 +- Source/Core/DolphinWX/Src/GLInterface/WGL.h | 2 +- Source/Core/DolphinWX/Src/GameListCtrl.cpp | 24 +- Source/Core/DolphinWX/Src/GameListCtrl.h | 2 +- Source/Core/DolphinWX/Src/GeckoCodeDiag.cpp | 8 +- Source/Core/DolphinWX/Src/Globals.h | 2 +- Source/Core/DolphinWX/Src/HotkeyDlg.cpp | 4 +- Source/Core/DolphinWX/Src/ISOFile.cpp | 12 +- Source/Core/DolphinWX/Src/ISOProperties.cpp | 46 +- Source/Core/DolphinWX/Src/ISOProperties.h | 2 +- Source/Core/DolphinWX/Src/InputConfigDiag.cpp | 10 +- Source/Core/DolphinWX/Src/InputConfigDiag.h | 4 +- .../DolphinWX/Src/InputConfigDiagBitmaps.cpp | 2 +- Source/Core/DolphinWX/Src/LogConfigWindow.cpp | 10 +- Source/Core/DolphinWX/Src/LogWindow.cpp | 12 +- Source/Core/DolphinWX/Src/Main.cpp | 12 +- Source/Core/DolphinWX/Src/MainAndroid.cpp | 16 +- Source/Core/DolphinWX/Src/MainNoGUI.cpp | 8 +- Source/Core/DolphinWX/Src/MemcardManager.cpp | 20 +- Source/Core/DolphinWX/Src/MemcardManager.h | 6 +- .../Src/MemoryCards/WiiSaveCrypted.cpp | 72 +- .../Src/MemoryCards/WiiSaveCrypted.h | 2 +- Source/Core/DolphinWX/Src/NetWindow.cpp | 20 +- Source/Core/DolphinWX/Src/PatchAddEdit.cpp | 14 +- Source/Core/DolphinWX/Src/TASInputDlg.cpp | 70 +- Source/Core/DolphinWX/Src/UDPConfigDiag.cpp | 2 +- Source/Core/DolphinWX/Src/VideoConfigDiag.cpp | 6 +- Source/Core/DolphinWX/Src/VideoConfigDiag.h | 2 +- .../Core/DolphinWX/Src/WiimoteConfigDiag.cpp | 26 +- Source/Core/DolphinWX/Src/X11Utils.cpp | 2 +- Source/Core/DolphinWX/resource.h | 2 +- .../Core/DolphinWX/resources/dolphin_logo.cpp | 5732 ++++++++--------- Source/Core/InputCommon/Src/ControllerEmu.h | 10 +- .../ControllerInterface.cpp | 4 +- .../ControllerInterface/ControllerInterface.h | 2 +- .../DInput/DInputJoystick.cpp | 16 +- .../DInput/DInputJoystick.h | 2 +- .../Src/ControllerInterface/SDL/SDL.cpp | 10 +- .../Src/ControllerInterface/XInput/XInput.cpp | 4 +- .../Src/ControllerInterface/Xlib/XInput2.cpp | 100 +- .../Src/ControllerInterface/Xlib/XInput2.h | 22 +- .../Src/ControllerInterface/Xlib/Xlib.cpp | 4 +- .../Src/ControllerInterface/Xlib/Xlib.h | 16 +- Source/Core/InputCommon/Src/UDPWiimote.cpp | 34 +- Source/Core/InputCommon/Src/UDPWiimote.h | 2 +- Source/Core/InputCommon/Src/UDPWrapper.cpp | 2 +- Source/Core/InputCommon/Src/X11InputBase.cpp | 12 +- Source/Core/VideoBackends/D3D/Src/D3DBase.h | 2 +- .../Core/VideoBackends/D3D/Src/D3DShader.cpp | 3 +- .../D3D/Src/FramebufferManager.cpp | 4 +- .../D3D/Src/LineGeometryShader.cpp | 2 +- .../D3D/Src/NativeVertexFormat.cpp | 4 +- .../D3D/Src/PSTextureEncoder.cpp | 64 +- .../VideoBackends/D3D/Src/PSTextureEncoder.h | 4 +- .../D3D/Src/PixelShaderCache.cpp | 12 +- .../D3D/Src/PointGeometryShader.cpp | 2 +- Source/Core/VideoBackends/D3D/Src/Render.cpp | 14 +- .../Core/VideoBackends/D3D/Src/Television.cpp | 2 +- .../VideoBackends/D3D/Src/TextureCache.cpp | 6 +- .../VideoBackends/D3D/Src/VertexManager.cpp | 16 +- .../VideoBackends/D3D/Src/VertexManager.h | 2 +- .../D3D/Src/VertexShaderCache.cpp | 6 +- .../VideoBackends/D3D/Src/VertexShaderCache.h | 4 +- Source/Core/VideoBackends/D3D/Src/stdafx.h | 2 +- .../OGL/Src/FramebufferManager.cpp | 46 +- .../OGL/Src/FramebufferManager.h | 6 +- .../VideoBackends/OGL/Src/GLFunctions.cpp | 4 +- Source/Core/VideoBackends/OGL/Src/GLUtil.cpp | 10 +- Source/Core/VideoBackends/OGL/Src/GLUtil.h | 8 +- .../OGL/Src/NativeVertexFormat.cpp | 10 +- .../Core/VideoBackends/OGL/Src/PerfQuery.cpp | 18 +- .../VideoBackends/OGL/Src/PostProcessing.cpp | 46 +- .../OGL/Src/ProgramShaderCache.cpp | 98 +- .../OGL/Src/ProgramShaderCache.h | 6 +- .../Core/VideoBackends/OGL/Src/RasterFont.cpp | 204 +- .../Core/VideoBackends/OGL/Src/RasterFont.h | 2 +- Source/Core/VideoBackends/OGL/Src/Render.cpp | 162 +- Source/Core/VideoBackends/OGL/Src/Render.h | 6 +- .../VideoBackends/OGL/Src/SamplerCache.cpp | 18 +- .../Core/VideoBackends/OGL/Src/SamplerCache.h | 22 +- .../VideoBackends/OGL/Src/StreamBuffer.cpp | 34 +- .../Core/VideoBackends/OGL/Src/StreamBuffer.h | 8 +- .../VideoBackends/OGL/Src/TextureCache.cpp | 22 +- .../OGL/Src/TextureConverter.cpp | 32 +- .../VideoBackends/OGL/Src/VertexManager.cpp | 44 +- .../VideoBackends/OGL/Src/VertexManager.h | 6 +- Source/Core/VideoBackends/OGL/Src/main.cpp | 8 +- Source/Core/VideoBackends/OGL/Src/stdafx.h | 2 +- .../Software/Src/BPMemLoader.cpp | 2 +- .../VideoBackends/Software/Src/Clipper.cpp | 24 +- .../VideoBackends/Software/Src/DebugUtil.h | 2 +- .../VideoBackends/Software/Src/EfbCopy.cpp | 2 +- .../Software/Src/EfbInterface.cpp | 4 +- .../Software/Src/HwRasterizer.cpp | 6 +- .../VideoBackends/Software/Src/HwRasterizer.h | 10 +- .../Software/Src/OpcodeDecoder.cpp | 12 +- .../Software/Src/SWCommandProcessor.cpp | 4 +- .../Software/Src/SWPixelEngine.cpp | 4 +- .../Software/Src/SWPixelEngine.h | 12 +- .../VideoBackends/Software/Src/SWRenderer.cpp | 14 +- .../Software/Src/SWVertexLoader.cpp | 10 +- .../Software/Src/SWVideoConfig.cpp | 2 +- .../Software/Src/SWVideoConfig.h | 2 +- .../VideoBackends/Software/Src/SWmain.cpp | 12 +- .../VideoBackends/Software/Src/SetupUnit.cpp | 2 +- .../Core/VideoBackends/Software/Src/Tev.cpp | 12 +- Source/Core/VideoBackends/Software/Src/Tev.h | 4 +- .../Software/Src/TextureEncoder.cpp | 24 +- .../Software/Src/TextureSampler.cpp | 2 +- .../Software/Src/TransformUnit.cpp | 4 +- Source/Core/VideoBackends/Software/Src/Vec3.h | 6 +- .../VideoBackends/Software/Src/VideoBackend.h | 4 +- .../Software/Src/VideoConfigDialog.cpp | 4 +- .../Software/Src/XFMemLoader.cpp | 2 +- .../VideoBackends/Software/Src/XFMemLoader.h | 4 +- .../Core/VideoBackends/Software/Src/stdafx.h | 2 +- Source/Core/VideoCommon/Src/AVIDump.cpp | 8 +- Source/Core/VideoCommon/Src/AVIDump.h | 2 +- Source/Core/VideoCommon/Src/BPMemory.h | 52 +- Source/Core/VideoCommon/Src/BPStructs.cpp | 26 +- Source/Core/VideoCommon/Src/CPMemory.h | 36 +- .../Core/VideoCommon/Src/CommandProcessor.cpp | 6 +- .../Core/VideoCommon/Src/CommandProcessor.h | 2 +- Source/Core/VideoCommon/Src/DataReader.h | 2 +- Source/Core/VideoCommon/Src/DriverDetails.cpp | 6 +- Source/Core/VideoCommon/Src/DriverDetails.h | 10 +- Source/Core/VideoCommon/Src/EmuWindow.cpp | 4 +- Source/Core/VideoCommon/Src/Fifo.cpp | 8 +- .../Core/VideoCommon/Src/GenericDLCache.cpp | 2 +- .../VideoCommon/Src/GenericTextureDecoder.cpp | 1332 ++-- Source/Core/VideoCommon/Src/HiresTextures.cpp | 2 +- Source/Core/VideoCommon/Src/ImageWrite.cpp | 2 +- .../Core/VideoCommon/Src/IndexGenerator.cpp | 30 +- Source/Core/VideoCommon/Src/IndexGenerator.h | 2 +- Source/Core/VideoCommon/Src/MainBase.cpp | 6 +- .../Core/VideoCommon/Src/NativeVertexFormat.h | 2 +- .../Core/VideoCommon/Src/OpcodeDecoding.cpp | 14 +- Source/Core/VideoCommon/Src/OpenCL.cpp | 4 +- Source/Core/VideoCommon/Src/PixelEngine.cpp | 20 +- Source/Core/VideoCommon/Src/PixelEngine.h | 20 +- .../Core/VideoCommon/Src/PixelShaderGen.cpp | 2 +- .../VideoCommon/Src/PixelShaderManager.cpp | 10 +- .../Core/VideoCommon/Src/PixelShaderManager.h | 2 +- Source/Core/VideoCommon/Src/ShaderGenCommon.h | 2 +- Source/Core/VideoCommon/Src/Statistics.h | 8 +- .../Core/VideoCommon/Src/TextureCacheBase.cpp | 28 +- .../Src/TextureConversionShader.cpp | 8 +- Source/Core/VideoCommon/Src/TextureDecoder.h | 2 +- Source/Core/VideoCommon/Src/VertexLoader.cpp | 36 +- Source/Core/VideoCommon/Src/VertexLoader.h | 4 +- .../VideoCommon/Src/VertexLoader_Color.cpp | 4 +- .../VideoCommon/Src/VertexLoader_Normal.cpp | 2 +- .../VideoCommon/Src/VertexLoader_Normal.h | 2 +- .../VideoCommon/Src/VertexLoader_Position.cpp | 2 +- .../Src/VertexLoader_TextCoord.cpp | 2 +- .../VideoCommon/Src/VertexManagerBase.cpp | 28 +- .../Core/VideoCommon/Src/VertexManagerBase.h | 16 +- .../Core/VideoCommon/Src/VertexShaderGen.cpp | 2 +- .../VideoCommon/Src/VertexShaderManager.cpp | 14 +- .../VideoCommon/Src/VertexShaderManager.h | 2 +- .../Core/VideoCommon/Src/VideoBackendBase.cpp | 2 +- .../Core/VideoCommon/Src/VideoBackendBase.h | 2 +- Source/Core/VideoCommon/Src/VideoConfig.h | 4 +- Source/Core/VideoCommon/Src/VideoState.cpp | 2 +- Source/Core/VideoCommon/Src/XFMemory.h | 14 +- Source/Core/VideoCommon/Src/XFStructs.cpp | 8 +- Source/Core/VideoCommon/Src/memcpy_amd.cpp | 10 +- Source/Core/VideoCommon/Src/x64DLCache.cpp | 48 +- .../VideoCommon/Src/x64TextureDecoder.cpp | 1356 ++-- Source/DSPSpy/dsp_interface.cpp | 2 +- Source/DSPSpy/dsp_interface.h | 2 +- Source/DSPSpy/main_spy.cpp | 18 +- Source/DSPSpy/mem_dump.h | 1024 +-- Source/DSPTool/Src/DSPTool.cpp | 40 +- Source/TestSuite/ASM/source/Init.cpp | 16 +- Source/TestSuite/ASM/source/asm_tables.cpp | 22 +- Source/TestSuite/ASM/source/asm_tables.h | 2 +- .../TestSuite/ASM/source/dolphintest_asm.cpp | 6 +- Source/TestSuite/AX/source/dolphintest_ax.cpp | 6 +- Source/TestSuite/FPU/source/asm.h | 30 +- .../TestSuite/PAD/source/dolphintest_pad.cpp | 2 +- .../WPAD/source/dolphintest_wpad.cpp | 2 +- Source/UnitTests/AudioJitTests.cpp | 28 +- Source/UnitTests/DSPJitTester.cpp | 6 +- Source/UnitTests/DSPJitTester.h | 36 +- 568 files changed, 8650 insertions(+), 8654 deletions(-) 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 3c40661a77..acb9f95067 100644 --- a/Source/Core/AudioCommon/Src/AudioCommon.cpp +++ b/Source/Core/AudioCommon/Src/AudioCommon.cpp @@ -22,7 +22,7 @@ SoundStream *soundStream = nullptr; namespace AudioCommon -{ +{ SoundStream *InitSoundStream(CMixer *mixer) { // TODO: possible memleak with mixer @@ -51,7 +51,7 @@ namespace AudioCommon soundStream = new PulseAudio(mixer); else if (backend == BACKEND_OPENSLES && OpenSLESStream::isValid()) soundStream = new OpenSLESStream(mixer); - + if (!soundStream && NullSound::isValid()) { WARN_LOG(DSPHLE, "Could not initialize backend %s, using %s instead.", @@ -83,11 +83,11 @@ namespace AudioCommon return nullptr; } - void ShutdownSoundStream() + void ShutdownSoundStream() { INFO_LOG(DSPHLE, "Shutting down sound stream"); - if (soundStream) + if (soundStream) { soundStream->Stop(); if (SConfig::GetInstance().m_DumpAudio) @@ -97,10 +97,10 @@ namespace AudioCommon 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; @@ -125,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 b5ab16cae3..8ff5ff38e1 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 ShutdownSoundStream(); diff --git a/Source/Core/AudioCommon/Src/DSoundStream.h b/Source/Core/AudioCommon/Src/DSoundStream.h index c244c91008..8778c7e863 100644 --- a/Source/Core/AudioCommon/Src/DSoundStream.h +++ b/Source/Core/AudioCommon/Src/DSoundStream.h @@ -59,7 +59,7 @@ public: {} virtual ~DSound() {} - + virtual bool Start(); virtual void SoundLoop(); virtual void SetVolume(int volume); 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/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 fa4499d1a2..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: +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.h b/Source/Core/AudioCommon/Src/XAudio2Stream.h index 6221304865..d85aafc4f7 100644 --- a/Source/Core/AudioCommon/Src/XAudio2Stream.h +++ b/Source/Core/AudioCommon/Src/XAudio2Stream.h @@ -52,7 +52,7 @@ private: public: XAudio2(CMixer *mixer); virtual ~XAudio2(); - + virtual bool Start(); virtual void Stop(); diff --git a/Source/Core/AudioCommon/Src/aldlist.cpp b/Source/Core/AudioCommon/Src/aldlist.cpp index 42fbb71002..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,7 +139,7 @@ ALDeviceList::ALDeviceList() ResetFilters(); } -/* +/* * Exit call */ ALDeviceList::~ALDeviceList() @@ -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) @@ -210,7 +210,7 @@ bool ALDeviceList::IsExtensionSupported(s32 index, char *szExtName) 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) 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..98b6d7fb48 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) { @@ -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); @@ -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) \ @@ -1728,11 +1728,11 @@ void NEONXEmitter::VSUB(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) void NEONXEmitter::VLD1(NEONElementType Size, ARMReg Vd, ARMReg Rn, NEONAlignment align, ARMReg Rm) { - u32 spacing = 0x7; // Only support loading to 1 reg + 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); } @@ -1743,7 +1743,7 @@ void NEONXEmitter::VLD2(NEONElementType Size, ARMReg Vd, ARMReg Rn, NEONAlignmen // 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); } @@ -1754,7 +1754,7 @@ void NEONXEmitter::VST1(NEONElementType Size, ARMReg Vd, ARMReg Rn, NEONAlignmen // 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); } @@ -1805,7 +1805,7 @@ void NEONXEmitter::VORR(ARMReg Vd, ARMReg Vn, ARMReg Vm) Vm = SubBase(Vm); Write32((0xF2 << 24) | (0x1 << 21) | ((Vd & 0x10) << 18) | ((Vn & 0xF) << 16) - | ((Vd & 0xF) << 12) | (1 << 8) | ((Vn & 0x10) << 3) + | ((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..cdfddd8d7e 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; } @@ -343,7 +343,7 @@ 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 +474,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 +526,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); @@ -574,7 +574,7 @@ public: enum NEONElementType { - I_8 = (1 << 0), + I_8 = (1 << 0), I_16 = (1 << 1), I_32 = (1 << 2), I_64 = (1 << 3), @@ -597,7 +597,7 @@ class NEONXEmitter private: ARMXEmitter *_emit; inline void Write32(u32 value) { _emit->Write32(value); } - + inline u32 encodedSize(u32 value) { if (value & I_8) @@ -612,7 +612,7 @@ 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: @@ -703,7 +703,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 425ceae881..1dee12ffd1 100644 --- a/Source/Core/Common/Src/BreakPoints.cpp +++ b/Source/Core/Common/Src/BreakPoints.cpp @@ -107,7 +107,7 @@ void BreakPoints::Clear() } ); } - + m_BreakPoints.clear(); } diff --git a/Source/Core/Common/Src/ChunkFile.h b/Source/Core/Common/Src/ChunkFile.h index a765369ff1..5192b4332e 100644 --- a/Source/Core/Common/Src/ChunkFile.h +++ b/Source/Core/Common/Src/ChunkFile.h @@ -180,7 +180,6 @@ public: void Do(T& x) { static_assert(IsTriviallyCopyable(T), "Only sane for trivially copyable types"); - DoVoid((void*)&x, sizeof(x)); } @@ -321,7 +320,7 @@ public: if (!File::Exists(_rFilename)) return false; - + // Check file size const u64 fileSize = File::GetSize(_rFilename); static const u64 headerSize = sizeof(SChunkHeader); @@ -374,7 +373,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..bf50a1756f 100644 --- a/Source/Core/Common/Src/CommonFuncs.h +++ b/Source/Core/Common/Src/CommonFuncs.h @@ -27,7 +27,7 @@ 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) @@ -95,12 +95,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 +108,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 +184,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 +242,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/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/FileUtil.cpp b/Source/Core/Common/Src/FileUtil.cpp index 84a48599da..22f8df849b 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; } diff --git a/Source/Core/Common/Src/FileUtil.h b/Source/Core/Common/Src/FileUtil.h index 8de525d64a..43482ffb32 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 @@ -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 ebbde7ac7c..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,13 +124,13 @@ bool IniFile::Section::Get(const char* key, std::vector& out) size_t subStart = temp.find_first_not_of(","); size_t subEnd; - // split by , + // split by , while (subStart != std::string::npos) { - // Find next , + // 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); @@ -435,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 30b6b4a92a..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; @@ -110,7 +110,7 @@ LogManager::~LogManager() 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 2383c011c3..6b69b63860 100644 --- a/Source/Core/Common/Src/MemArena.cpp +++ b/Source/Core/Common/Src/MemArena.cpp @@ -257,7 +257,7 @@ 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; 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/StdConditionVariable.h b/Source/Core/Common/Src/StdConditionVariable.h index 8f7d6e65b2..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 diff --git a/Source/Core/Common/Src/StdMutex.h b/Source/Core/Common/Src/StdMutex.h index c1cdb04799..4d3348d458 100644 --- a/Source/Core/Common/Src/StdMutex.h +++ b/Source/Core/Common/Src/StdMutex.h @@ -108,7 +108,7 @@ public: return (0 != TryEnterCriticalSection(&m_handle)); #else return !pthread_mutex_trylock(&m_handle); -#endif +#endif } native_handle_type native_handle() @@ -283,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) { @@ -295,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); } @@ -316,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 7db2851eaf..9e589061b1 100644 --- a/Source/Core/Common/Src/StdThread.h +++ b/Source/Core/Common/Src/StdThread.h @@ -213,7 +213,7 @@ public: std::swap(m_handle, other.m_handle); #endif } - + static unsigned hardware_concurrency() { #ifdef _WIN32 @@ -227,7 +227,7 @@ public: private: id m_id; - + #ifdef _WIN32 native_handle_type m_handle; #endif @@ -247,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..5243b24260 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 { @@ -494,10 +494,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/SysConf.cpp b/Source/Core/Common/Src/SysConf.cpp index 41bf4e82b0..e1c3eb8abb 100644 --- a/Source/Core/Common/Src/SysConf.cpp +++ b/Source/Core/Common/Src/SysConf.cpp @@ -38,11 +38,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%04llx)\nDo you want to generate a new one?", SYSCONF_SIZE, size)) { GenerateSysConf(); @@ -314,7 +314,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 +398,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..bfd7ea0308 100644 --- a/Source/Core/Common/Src/Thread.h +++ b/Source/Core/Common/Src/Thread.h @@ -32,7 +32,7 @@ int CurrentThreadId(); void SetThreadAffinity(std::thread::native_handle_type thread, u32 mask); void SetCurrentThreadAffinity(u32 mask); - + class Event { public: @@ -137,7 +137,7 @@ private: 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 +148,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/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..07b35cb968 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; @@ -189,7 +189,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 +210,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 diff --git a/Source/Core/Common/Src/x64Emitter.cpp b/Source/Core/Common/Src/x64Emitter.cpp index a5d7cb2f0f..8b3002b26a 100644 --- a/Source/Core/Common/Src/x64Emitter.cpp +++ b/Source/Core/Common/Src/x64Emitter.cpp @@ -16,7 +16,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 @@ -230,7 +230,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 +255,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 +268,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 +299,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 +495,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 +557,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 +594,7 @@ void XEmitter::PUSH(int bits, const OpArg ®) } void XEmitter::POP(int /*bits*/, const OpArg ®) -{ +{ if (reg.IsSimpleReg()) POP(reg.GetSimpleReg()); else @@ -787,7 +787,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 +834,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 +871,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 +901,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 +954,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 +1056,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); } @@ -1188,7 +1188,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 +1248,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 +1300,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) { @@ -1456,7 +1456,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..6ce16abcce 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,7 +30,7 @@ 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, INVALID_REG = 0xFFFFFFFF @@ -43,7 +43,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, @@ -264,7 +264,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 +353,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 +408,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 +422,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 +470,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 +480,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 +554,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); @@ -625,7 +625,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 +666,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 +722,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/Core/Src/ActionReplay.cpp b/Source/Core/Core/Src/ActionReplay.cpp index 505c67ddc2..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(); @@ -196,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, @@ -231,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) { @@ -257,7 +257,7 @@ void RunAllActive() { if (SConfig::GetInstance().m_LocalCoreStartupParameter.bEnableCheats) { - for (auto& activeCode : activeCodes) + for (auto& activeCode : activeCodes) { if (activeCode.active) { @@ -390,7 +390,7 @@ bool RunCode(const ARCode &arcode) doMemoryCopy = true; val_last = data; } - else + else { LogInfo("ZCode: Fill And Slide"); doFillNSlide = true; @@ -398,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; } @@ -702,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; @@ -766,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..97888c995c 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) @@ -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 10e7f20dd2..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); } @@ -44,19 +44,19 @@ CDolLoader::~CDolLoader() } 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 (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.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/CoreTiming.cpp b/Source/Core/Core/Src/CoreTiming.cpp index a753f96add..c17e46fc80 100644 --- a/Source/Core/Core/Src/CoreTiming.cpp +++ b/Source/Core/Core/Src/CoreTiming.cpp @@ -113,7 +113,7 @@ void Init() slicelength = maxSliceLength; globalTimer = 0; idledCycles = 0; - + ev_lost = RegisterEvent("_lost_event", &EmptyTimedCallback); } @@ -187,7 +187,7 @@ void DoState(PointerWrap &p) u64 GetTicks() { - return (u64)globalTimer; + return (u64)globalTimer; } u64 GetIdleTicks() @@ -251,7 +251,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 +266,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 +297,7 @@ void RemoveEvent(int event_type) break; } } - + if (!first) return; @@ -394,7 +394,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 +407,7 @@ void Advance() } } - if (!first) + if (!first) { WARN_LOG(POWERPC, "WARNING - no events in queue. Setting downcount to 10000"); downcount += 10000; @@ -437,9 +437,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 +449,7 @@ void Idle() idledCycles += downcount; downcount = 0; - + Advance(); } @@ -463,11 +463,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 625c25cf67..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; diff --git a/Source/Core/Core/Src/DSP/DSPCodeUtil.cpp b/Source/Core/Core/Src/DSP/DSPCodeUtil.cpp index 73e2c1f8b4..e769723b1d 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"); 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 2a6912ee3b..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 @@ -556,7 +556,7 @@ void InitInstructionTable() if (opTable[i] == &cw) opTable[i] = &opcode; else - ERROR_LOG(DSPLLE, "opcode table place %d already in use for %s", i, opcode.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 2c51b31e05..6950daa6d1 100644 --- a/Source/Core/Core/Src/DSP/Jit/DSPJitRegCache.cpp +++ b/Source/Core/Core/Src/DSP/Jit/DSPJitRegCache.cpp @@ -613,7 +613,7 @@ void DSPJitRegCache::movToHostReg(int reg, bool load) tmp = regs[reg].host_reg; else tmp = findSpillFreeXReg(); - + if (tmp == INVALID_REG) return; 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 75f6cf4b33..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); diff --git a/Source/Core/Core/Src/DSP/assemble.cpp b/Source/Core/Core/Src/DSP/assemble.cpp index 8deef98ed9..a8ddebf113 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), @@ -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/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..575121b983 100644 --- a/Source/Core/Core/Src/Debugger/PPCDebugInterface.h +++ b/Source/Core/Core/Src/Debugger/PPCDebugInterface.h @@ -14,7 +14,7 @@ class PPCDebugInterface : public DebugInterface { public: - PPCDebugInterface(){} + 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;} diff --git a/Source/Core/Core/Src/FifoPlayer/FifoAnalyzer.cpp b/Source/Core/Core/Src/FifoPlayer/FifoAnalyzer.cpp index b9f45d4c8c..2bdbd88074 100644 --- a/Source/Core/Core/Src/FifoPlayer/FifoAnalyzer.cpp +++ b/Source/Core/Core/Src/FifoPlayer/FifoAnalyzer.cpp @@ -124,7 +124,7 @@ 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); @@ -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 ca980bc3cc..118511af92 100644 --- a/Source/Core/Core/Src/FifoPlayer/FifoDataFile.cpp +++ b/Source/Core/Core/Src/FifoPlayer/FifoDataFile.cpp @@ -99,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); @@ -116,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()) @@ -150,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); @@ -230,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 0afd253807..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()); @@ -208,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(); } @@ -284,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();) { @@ -293,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 e249bcd109..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; } @@ -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..c791eeb31d 100644 --- a/Source/Core/Core/Src/GeckoCode.cpp +++ b/Source/Core/Core/Src/GeckoCode.cpp @@ -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/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 763ab787a7..3897fd6e86 100644 --- a/Source/Core/Core/Src/HW/DSPHLE/DSPHLE.cpp +++ b/Source/Core/Core/Src/HW/DSPHLE/DSPHLE.cpp @@ -252,7 +252,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 { @@ -333,5 +333,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 b6f2d5d874..b420070f58 100644 --- a/Source/Core/Core/Src/HW/DSPHLE/DSPHLE.h +++ b/Source/Core/Core/Src/HW/DSPHLE/DSPHLE.h @@ -49,7 +49,7 @@ private: // 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..4437887603 100644 --- a/Source/Core/Core/Src/HW/DSPHLE/HLEMixer.h +++ b/Source/Core/Core/Src/HW/DSPHLE/HLEMixer.h @@ -9,12 +9,12 @@ 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); 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_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_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..9b4d82136d 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 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 2cd0bd9c17..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 @@ -22,7 +22,7 @@ void CUCode_Zelda::AFCdecodebuffer(const s16 *coef, const char *src, signed shor src++; } for (auto& nibble : nibbles) { - if (nibble >= 8) + if (nibble >= 8) nibble = nibble - 16; nibble <<= 11; } @@ -41,9 +41,9 @@ void CUCode_Zelda::AFCdecodebuffer(const s16 *coef, const char *src, signed shor src++; } - for (auto& nibble : nibbles) + for (auto& nibble : nibbles) { - if (nibble >= 2) + 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.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 c718fd9e1c..9b9364947b 100644 --- a/Source/Core/Core/Src/HW/DSPLLE/DSPLLE.cpp +++ b/Source/Core/Core/Src/HW/DSPLLE/DSPLLE.cpp @@ -184,7 +184,7 @@ void DSPLLE::InitMixer() unsigned int AISampleRate, DACSampleRate; AudioInterface::Callback_GetSampleRate(AISampleRate, DACSampleRate); delete soundStream; - soundStream = AudioCommon::InitSoundStream(new CMixer(AISampleRate, DACSampleRate, 48000)); + soundStream = AudioCommon::InitSoundStream(new CMixer(AISampleRate, DACSampleRate, 48000)); if(!soundStream) PanicAlert("Error starting up sound stream"); // Mixer is initialized m_InitMixer = true; @@ -293,7 +293,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) { @@ -349,7 +349,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/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/DSPSymbols.cpp b/Source/Core/Core/Src/HW/DSPLLE/DSPSymbols.cpp index 52b9ba04a0..90beaed796 100644 --- a/Source/Core/Core/Src/HW/DSPLLE/DSPSymbols.cpp +++ b/Source/Core/Core/Src/HW/DSPLLE/DSPSymbols.cpp @@ -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..da739a008e 100644 --- a/Source/Core/Core/Src/HW/DSPLLE/DSPSymbols.h +++ b/Source/Core/Core/Src/HW/DSPLLE/DSPSymbols.h @@ -10,12 +10,12 @@ namespace DSPSymbols { -class DSPSymbolDB : public SymbolDB +class DSPSymbolDB : public SymbolDB { public: DSPSymbolDB() {} ~DSPSymbolDB() {} - + Symbol *GetSymbolFromAddr(u32 addr); }; 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_Device.cpp b/Source/Core/Core/Src/HW/EXI_Device.cpp index b956859c76..74f96f756c 100644 --- a/Source/Core/Core/Src/HW/EXI_Device.cpp +++ b/Source/Core/Core/Src/HW/EXI_Device.cpp @@ -88,7 +88,7 @@ public: }; -// 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..ec1b920081 100644 --- a/Source/Core/Core/Src/HW/EXI_DeviceAD16.h +++ b/Source/Core/Core/Src/HW/EXI_DeviceAD16.h @@ -14,7 +14,7 @@ public: virtual void DoState(PointerWrap &p); private: - enum + enum { init = 0x00, write = 0xa0, 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_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 3f0f371f43..f75c136db4 100644 --- a/Source/Core/Core/Src/HW/EXI_DeviceEthernet.h +++ b/Source/Core/Core/Src/HW/EXI_DeviceEthernet.h @@ -52,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 @@ -99,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, 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_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..1bc012e9bf 100644 --- a/Source/Core/Core/Src/HW/EXI_DeviceMemoryCard.h +++ b/Source/Core/Core/Src/HW/EXI_DeviceMemoryCard.h @@ -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,15 +79,15 @@ 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); }; 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..22786b3027 100644 --- a/Source/Core/Core/Src/HW/GCMemcard.cpp +++ b/Source/Core/Core/Src/HW/GCMemcard.cpp @@ -64,8 +64,8 @@ GCMemcard::GCMemcard(const char *filename, bool forceCreation, bool sjis) return; } } - - + + mcdFile.Seek(0, SEEK_SET); if (!mcdFile.ReadBytes(&hdr, BLOCK_SIZE)) { @@ -103,7 +103,7 @@ GCMemcard::GCMemcard(const char *filename, bool forceCreation, bool sjis) } u32 csums = TestChecksums(); - + if (csums & 0x1) { // header checksum error! @@ -159,7 +159,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); @@ -180,11 +180,11 @@ GCMemcard::GCMemcard(const char *filename, bool forceCreation, bool sjis) } mcdFile.Close(); - + initDirBatPointers(); } -void GCMemcard::initDirBatPointers() +void GCMemcard::initDirBatPointers() { if (BE16(dir.UpdateCounter) > (BE16(dir_backup.UpdateCounter))) { @@ -287,7 +287,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 +638,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 +672,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 +775,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 +851,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 +873,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 +889,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 +925,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 +1064,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 +1230,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 +1243,7 @@ bool GCMemcard::Format(bool sjis, u16 SizeMb) GCMBlock b; mc_data_blocks.push_back(b); } - + initDirBatPointers(); m_valid = true; @@ -1260,7 +1260,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 +1276,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 +1332,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 68a0f5285a..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[] = diff --git a/Source/Core/Core/Src/HW/GCPadEmu.h b/Source/Core/Core/Src/HW/GCPadEmu.h index aa5b33d252..cb6971c0ed 100644 --- a/Source/Core/Core/Src/HW/GCPadEmu.h +++ b/Source/Core/Core/Src/HW/GCPadEmu.h @@ -19,7 +19,7 @@ public: void SetMotor(const u8 on); bool GetMicButton() const; - + std::string GetName() const; void LoadDefaults(const ControllerInterface& ciface); 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..a6d5c8afde 100644 --- a/Source/Core/Core/Src/HW/SI_Device.cpp +++ b/Source/Core/Core/Src/HW/SI_Device.cpp @@ -56,7 +56,7 @@ public: }; -// 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_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..a9d5aefb69 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; 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_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; iGetState(&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..76518d9543 100644 --- a/Source/Core/Core/Src/HW/WiimoteEmu/Attachment/Nunchuk.h +++ b/Source/Core/Core/Src/HW/WiimoteEmu/Attachment/Nunchuk.h @@ -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/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 eda4f5104c..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; @@ -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,13 +493,13 @@ 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; @@ -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/WiimoteReal.cpp b/Source/Core/Core/Src/HW/WiimoteReal/WiimoteReal.cpp index a4d19aaa99..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); @@ -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/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..9b6cf8ac8e 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 @@ -68,7 +68,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 +85,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); @@ -418,7 +418,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 +453,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 +468,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 24c32a83a2..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 @@ -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 5540fb6194..151010e8fa 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 @@ -56,7 +56,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 +86,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; } @@ -239,7 +239,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 +271,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 +303,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 +394,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 +590,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 +628,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 +694,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 +782,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 +798,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 +820,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 +838,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 +967,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,7 +979,7 @@ 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); @@ -987,16 +987,16 @@ bool CWII_IPC_HLE_Device_es::IOCtlV(u32 _CommandAddress) // 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 +1116,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 20993e2dc4..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); @@ -70,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++) @@ -173,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); @@ -229,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); @@ -248,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) @@ -306,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; @@ -328,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); @@ -338,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_net.cpp b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_net.cpp index c24db4f0c9..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; } @@ -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; 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 204beba05d..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 @@ -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]); diff --git a/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_usb.h b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_usb.h index f6abbc67fe..75da4492e9 100644 --- a/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_usb.h +++ b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_usb.h @@ -148,7 +148,7 @@ private: SHCICommandMessage m_CtrlSetup; CtrlBuffer m_HCIEndpoint; std::deque m_EventQueue; - + u32 m_ACLSetup; CtrlBuffer m_ACLEndpoint; @@ -163,7 +163,7 @@ private: u16 size; u16 conn_handle; }; - + std::deque m_queue; public: @@ -209,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); @@ -253,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); @@ -261,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 d2ea7404b2..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 @@ -171,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, @@ -192,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, @@ -220,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, @@ -259,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, @@ -280,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, @@ -308,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 ac7c5d9035..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); @@ -606,8 +606,8 @@ void WiiSockMan::Update() { 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 ); } @@ -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..8923f68fb4 100644 --- a/Source/Core/Core/Src/IPC_HLE/hci.h +++ b/Source/Core/Core/Src/IPC_HLE/hci.h @@ -2416,7 +2416,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 047b6d05d2..cc5b099ee0 100644 --- a/Source/Core/Core/Src/Movie.cpp +++ b/Source/Core/Core/Src/Movie.cpp @@ -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; } @@ -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 6522f7c73e..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", @@ -212,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.h b/Source/Core/Core/Src/PowerPC/Interpreter/Interpreter.h index cd46e7846b..dcb1a53b54 100644 --- a/Source/Core/Core/Src/PowerPC/Interpreter/Interpreter.h +++ b/Source/Core/Core/Src/PowerPC/Interpreter/Interpreter.h @@ -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 f403330276..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,10 +376,10 @@ 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 (auto& tpl : primarytable) 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 43747074be..08f238dcdf 100644 --- a/Source/Core/Core/Src/PowerPC/Jit64/Jit.h +++ b/Source/Core/Core/Src/PowerPC/Jit64/Jit.h @@ -223,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 9c52bd1e82..53fe15dfac 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}}, @@ -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}}, @@ -394,7 +394,7 @@ void InitTables() return; //clear - for (auto& tpl : dynaOpTable59) + for (auto& tpl : dynaOpTable59) { tpl = &Jit64::unknown_instruction; } @@ -404,7 +404,7 @@ 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 (auto& tpl : primarytable) 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 13c5d827a2..f804877627 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; @@ -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 diff --git a/Source/Core/Core/Src/PowerPC/Jit64/JitRegCache.h b/Source/Core/Core/Src/PowerPC/Jit64/JitRegCache.h index 550036dba7..30ae663231 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; 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..b9a2e61c0b 100644 --- a/Source/Core/Core/Src/PowerPC/Jit64/Jit_FloatingPoint.cpp +++ b/Source/Core/Core/Src/PowerPC/Jit64/Jit_FloatingPoint.cpp @@ -209,7 +209,7 @@ void Jit64::fmrx(UGeckoInstruction inst) MOVSD(fpr.R(d), XMM0); fpr.UnlockAll(); } - + void Jit64::fcmpx(UGeckoInstruction inst) { INSTRUCTION_START @@ -264,12 +264,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 343803db9e..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) @@ -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..e881b5e7e8 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) diff --git a/Source/Core/Core/Src/PowerPC/Jit64/Jit_Paired.cpp b/Source/Core/Core/Src/PowerPC/Jit64/Jit_Paired.cpp index 7d7480b311..7dd8ad8ef2 100644 --- a/Source/Core/Core/Src/PowerPC/Jit64/Jit_Paired.cpp +++ b/Source/Core/Core/Src/PowerPC/Jit64/Jit_Paired.cpp @@ -90,7 +90,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 @@ -173,7 +173,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,7 +182,7 @@ 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 @@ -193,10 +193,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 +222,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 +288,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 686a7e4b3a..69dc1c2bd3 100644 --- a/Source/Core/Core/Src/PowerPC/Jit64IL/IR_X86.cpp +++ b/Source/Core/Core/Src/PowerPC/Jit64IL/IR_X86.cpp @@ -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; } @@ -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 @@ -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); @@ -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 8b448f9928..d7ccddb83c 100644 --- a/Source/Core/Core/Src/PowerPC/Jit64IL/JitIL.cpp +++ b/Source/Core/Core/Src/PowerPC/Jit64IL/JitIL.cpp @@ -50,7 +50,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 +84,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 @@ -385,22 +385,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 +414,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 +425,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 +435,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 +473,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 +562,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 199f4144e6..4deb048bb6 100644 --- a/Source/Core/Core/Src/PowerPC/Jit64IL/JitIL.h +++ b/Source/Core/Core/Src/PowerPC/Jit64IL/JitIL.h @@ -56,7 +56,7 @@ class JitIL : public JitILBase, public EmuCodeBlock { private: JitBlockCache blocks; - TrampolineCache trampolines; + 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. @@ -81,7 +81,7 @@ public: void Trace(); JitBlockCache *GetBlockCache() { return &blocks; } - + const u8 *BackPatch(u8 *codePtr, u32 em_address, void *ctx) { return NULL; }; bool IsInCodeSpace(u8 *ptr) { return IsInSpace(ptr); } @@ -115,7 +115,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); 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 c84310eecd..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,7 +397,7 @@ void InitTables() return; //clear - for (auto& tpl : dynaOpTable59) + for (auto& tpl : dynaOpTable59) { tpl = &JitIL::unknown_instruction; } @@ -407,7 +407,7 @@ 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 (auto& tpl : primarytable) 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..eaf9d944ae 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)); @@ -168,7 +168,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 +183,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 +248,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 +301,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 +315,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 +328,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..311ced730a 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]); @@ -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)); @@ -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)); @@ -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)); diff --git a/Source/Core/Core/Src/PowerPC/JitCommon/JitBackpatch.cpp b/Source/Core/Core/Src/PowerPC/JitCommon/JitBackpatch.cpp index 696ca457ee..cd10306f2f 100644 --- a/Source/Core/Core/Src/PowerPC/JitCommon/JitBackpatch.cpp +++ b/Source/Core/Core/Src/PowerPC/JitCommon/JitBackpatch.cpp @@ -107,7 +107,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 +157,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 +166,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..1bf2d70c53 100644 --- a/Source/Core/Core/Src/PowerPC/JitCommon/JitBase.h +++ b/Source/Core/Core/Src/PowerPC/JitCommon/JitBase.h @@ -77,7 +77,7 @@ public: // This should probably be removed from public: JitOptions jo; JitState js; - + virtual JitBaseBlockCache *GetBlockCache() = 0; virtual void Jit(u32 em_address) = 0; @@ -93,10 +93,10 @@ 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); bool IsInCodeSpace(u8 *ptr) { return IsInSpace(ptr); } 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..4b540ee2ff 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; diff --git a/Source/Core/Core/Src/PowerPC/JitILCommon/IR.cpp b/Source/Core/Core/Src/PowerPC/JitILCommon/IR.cpp index 32062a8f53..0e73b211c1 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, @@ -570,7 +570,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 +862,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 +1006,7 @@ InstLoc IRBuilder::FoldInterpreterFallback(InstLoc Op1, InstLoc Op2) { CRCacheStore[i] = 0; } CTRCache = 0; - CTRCacheStore = 0; + CTRCacheStore = 0; return EmitBiOp(InterpreterFallback, Op1, Op2); } @@ -1226,24 +1226,24 @@ struct Writer static std::auto_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", }; diff --git a/Source/Core/Core/Src/PowerPC/JitILCommon/IR.h b/Source/Core/Core/Src/PowerPC/JitILCommon/IR.h index cce9c3ae3c..991f1524c8 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); } 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 54e1ce67a2..ce8cc2e3ef 100644 --- a/Source/Core/Core/Src/PowerPC/JitInterface.cpp +++ b/Source/Core/Core/Src/PowerPC/JitInterface.cpp @@ -44,7 +44,7 @@ namespace JitInterface { bFakeVMEM = SConfig::GetInstance().m_LocalCoreStartupParameter.bTLBHack == true; bMMU = SConfig::GetInstance().m_LocalCoreStartupParameter.bMMU; - + CPUCoreBase *ptr = NULL; switch(core) { @@ -128,7 +128,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; @@ -169,14 +169,14 @@ namespace JitInterface { std::string name = g_symbolDB.GetDescription(block->originalAddress); double percent = 100.0 * (double)stat.cost / (double)cost_sum; - #ifdef _WIN32 + #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", + fprintf(f.GetHandle(), "%08x\t%s\t%llu\t%llu\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", + fprintf(f.GetHandle(), "%08x\t%s\t%llu\t???\t%.2lf\t???\t???\t%i\n", block->originalAddress, name.c_str(), stat.cost, percent, block->codeSize); #endif } @@ -211,7 +211,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 +233,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 c0b5de8620..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; @@ -249,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)) { @@ -283,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) @@ -291,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; @@ -357,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++; @@ -447,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: @@ -576,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; @@ -605,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) @@ -652,7 +652,7 @@ void FindFunctionsAfterBLR(PPCSymbolDB *func_db) { 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; @@ -671,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; @@ -716,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 d7495924fe..db7a52c812 100644 --- a/Source/Core/Core/Src/PowerPC/PPCAnalyst.h +++ b/Source/Core/Core/Src/PowerPC/PPCAnalyst.h @@ -63,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 77826903c3..37621388fe 100644 --- a/Source/Core/Core/Src/PowerPC/PPCSymbolDB.cpp +++ b/Source/Core/Core/Src/PowerPC/PPCSymbolDB.cpp @@ -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..157d9d1379 100644 --- a/Source/Core/Core/Src/PowerPC/PPCSymbolDB.h +++ b/Source/Core/Core/Src/PowerPC/PPCSymbolDB.h @@ -19,7 +19,7 @@ private: public: typedef void (*functionGetterCallback)(Symbol *f); - + PPCSymbolDB(); ~PPCSymbolDB(); diff --git a/Source/Core/Core/Src/PowerPC/PPCTables.cpp b/Source/Core/Core/Src/PowerPC/PPCTables.cpp index 456785e73e..0041904a75 100644 --- a/Source/Core/Core/Src/PowerPC/PPCTables.cpp +++ b/Source/Core/Core/Src/PowerPC/PPCTables.cpp @@ -38,7 +38,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 +67,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 +197,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); 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 97d5ebf39f..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); @@ -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; } } 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/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..3fdc779a44 100644 --- a/Source/Core/DiscIO/Src/CompressedBlob.cpp +++ b/Source/Core/DiscIO/Src/CompressedBlob.cpp @@ -89,7 +89,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); diff --git a/Source/Core/DiscIO/Src/DiscScrubber.cpp b/Source/Core/DiscIO/Src/DiscScrubber.cpp index d8bd968866..4f289cef9f 100644 --- a/Source/Core/DiscIO/Src/DiscScrubber.cpp +++ b/Source/Core/DiscIO/Src/DiscScrubber.cpp @@ -32,7 +32,7 @@ struct SPartitionHeader u64 TMDOffset; u32 CertChainSize; u64 CertChainOffset; - // H3Size is always 0x18000 + // H3Size is always 0x18000 u64 H3Offset; u64 DataOffset; u64 DataSize; 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/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 5addc25812..90731b2573 100644 --- a/Source/Core/DiscIO/Src/FileSystemGCWii.cpp +++ b/Source/Core/DiscIO/Src/FileSystemGCWii.cpp @@ -190,7 +190,7 @@ bool CFileSystemGCWii::ExportDOL(const char* _rExportFolder) const return true; } } - + return false; } @@ -207,14 +207,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(); 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 14845e56ea..8dc6a9e3cb 100644 --- a/Source/Core/DiscIO/Src/NANDContentLoader.cpp +++ b/Source/Core/DiscIO/Src/NANDContentLoader.cpp @@ -238,10 +238,10 @@ bool CNANDContentLoader::Initialize(const std::string& _rName) m_Content.resize(m_numEntries); - for (u32 i=0; i PartitionsVec; }; SPartitionGroup PartitionGroup[4]; - + // read all partitions for (u32 x = 0; x < 4; x++) { @@ -184,10 +184,10 @@ static IVolume* CreateVolumeFromCryptedWiiImage(IBlobReader& _rReader, u32 _Part _rReader.Read(rPartition.Offset + 0x44c, 8, IV); aes_context AES_ctx; - aes_setkey_dec(&AES_ctx, (Korean ? g_MasterKeyK : g_MasterKey), 128); + aes_setkey_dec(&AES_ctx, (Korean ? g_MasterKeyK : g_MasterKey), 128); u8 VolumeKey[16]; - aes_crypt_cbc(&AES_ctx, AES_DECRYPT, 16, IV, SubKey, VolumeKey); + 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 f1832202be..b949932b0b 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; @@ -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; 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 c20ccf4b7f..8d2e46a0f6 100644 --- a/Source/Core/DiscIO/Src/VolumeWiiCrypted.cpp +++ b/Source/Core/DiscIO/Src/VolumeWiiCrypted.cpp @@ -70,7 +70,7 @@ bool CVolumeWiiCrypted::Read(u64 _ReadOffset, u64 _Length, u8* _pBuffer) const if (m_LastDecryptedBlockOffset != Block) { memcpy(IV, m_pBuffer + 0x3d0, 16); - aes_crypt_cbc(m_AES_ctx, AES_DECRYPT, 0x7C00, IV, m_pBuffer + 0x400, m_LastDecryptedBlock); + aes_crypt_cbc(m_AES_ctx, AES_DECRYPT, 0x7C00, IV, m_pBuffer + 0x400, m_LastDecryptedBlock); m_LastDecryptedBlockOffset = Block; } @@ -108,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) @@ -153,7 +153,7 @@ std::string CVolumeWiiCrypted::GetMakerID() const { return std::string(); } - + makerID[2] = '\0'; return makerID; @@ -162,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] = {}; @@ -202,7 +202,7 @@ std::string CVolumeWiiCrypted::GetApploaderDate() const { return std::string(); } - + date[10] = '\0'; return date; @@ -253,7 +253,7 @@ bool CVolumeWiiCrypted::CheckIntegrity() const NOTICE_LOG(DISCIO, "Integrity Check: fail at cluster %d: could not read metadata", clusterID); return false; } - aes_crypt_cbc(m_AES_ctx, AES_DECRYPT, 0x400, IV, clusterMDCrypted, clusterMD); + aes_crypt_cbc(m_AES_ctx, AES_DECRYPT, 0x400, IV, clusterMDCrypted, clusterMD); // Some clusters have invalid data and metadata because they aren't 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/DolphinWX/Src/ARCodeAddEdit.cpp b/Source/Core/DolphinWX/Src/ARCodeAddEdit.cpp index e9ac18c1e3..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); diff --git a/Source/Core/DolphinWX/Src/Android/ButtonManager.cpp b/Source/Core/DolphinWX/Src/Android/ButtonManager.cpp index 1aa7187075..c8a190cea1 100644 --- a/Source/Core/DolphinWX/Src/Android/ButtonManager.cpp +++ b/Source/Core/DolphinWX/Src/Android/ButtonManager.cpp @@ -55,7 +55,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; @@ -123,7 +123,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 action, float x, float y) { @@ -185,7 +185,7 @@ namespace ButtonManager { // XXX: Make platform specific drawing } - + // InputDevice void InputDevice::PressEvent(int button, int action) { @@ -212,8 +212,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 39b828efb7..484332bc03 100644 --- a/Source/Core/DolphinWX/Src/Android/ButtonManager.h +++ b/Source/Core/DolphinWX/Src/Android/ButtonManager.h @@ -72,7 +72,7 @@ namespace ButtonManager char *image; // image = LoadPNG((std::string(DOLPHIN_DATA_DIR "/") + filename).c_str(), width, height); // XXX: Make platform specific drawing - + m_button = button; memcpy(m_coords, coords, sizeof(float) * 8); m_state = BUTTON_RELEASED; @@ -87,7 +87,7 @@ namespace ButtonManager ButtonType GetButtonType() { return m_button; } GLuint GetTexture() { return m_tex; } float *GetCoords() { return m_coords; } - + ~Button() { } }; @@ -97,11 +97,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 { @@ -120,7 +120,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 7087c96bde..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 @@ -216,7 +216,7 @@ void CConfigMain::UpdateGUI() CPUThread->Disable(); SkipIdle->Disable(); EnableCheats->Disable(); - + CPUEngine->Disable(); _NTSCJ->Disable(); @@ -253,12 +253,12 @@ void CConfigMain::InitializeGUILists() // Emulator Engine for (auto& CPUCores_a : CPUCores) arrayStringFor_CPUEngine.Add(wxGetTranslation(CPUCores_a.name)); - - // DSP Engine + + // 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 29ad9b4d7e..c23412e7ad 100644 --- a/Source/Core/DolphinWX/Src/Debugger/BreakpointView.cpp +++ b/Source/Core/DolphinWX/Src/Debugger/BreakpointView.cpp @@ -41,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); 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 49db840f7c..3a6c9d4f42 100644 --- a/Source/Core/DolphinWX/Src/Debugger/CodeWindow.cpp +++ b/Source/Core/DolphinWX/Src/Debugger/CodeWindow.cpp @@ -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(); } 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/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 c7ae3f7756..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"); } @@ -921,9 +921,9 @@ wxString FifoPlayerDlg::CreateRecordingMemSizeLabel() const 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 b43b41a7cf..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) diff --git a/Source/Core/DolphinWX/Src/FrameTools.cpp b/Source/Core/DolphinWX/Src/FrameTools.cpp index caa77ce0ee..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 (auto& rFilename : rFilenames) { 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 d6f3631cfb..741492e0a4 100644 --- a/Source/Core/DolphinWX/Src/GLInterface/EGL.cpp +++ b/Source/Core/DolphinWX/Src/GLInterface/EGL.cpp @@ -53,7 +53,7 @@ bool cInterfaceEGL::Create(void *&window_handle) #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.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 5a4276b9c5..62a4438c6d 100644 --- a/Source/Core/DolphinWX/Src/GLInterface/WGL.cpp +++ b/Source/Core/DolphinWX/Src/GLInterface/WGL.cpp @@ -84,7 +84,7 @@ bool cInterfaceWGL::Create(void *&window_handle) 0, // Shift Bit Ignored 0, // No Accumulation Buffer 0, 0, 0, 0, // Accumulation Bits Ignored - 0, // 0Bit Z-Buffer (Depth Buffer) + 0, // 0Bit Z-Buffer (Depth Buffer) 0, // 0bit Stencil Buffer 0, // No Auxiliary Buffer PFD_MAIN_PLANE, // Main Drawing Layer 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 a6a6e2b6a0..c1d8ef3787 100644 --- a/Source/Core/DolphinWX/Src/GameListCtrl.cpp +++ b/Source/Core/DolphinWX/Src/GameListCtrl.cpp @@ -62,7 +62,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 +307,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,10 +375,10 @@ 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; @@ -409,13 +409,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); @@ -826,7 +826,7 @@ void CGameListCtrl::OnLeftClick(wxMouseEvent& event) } void CGameListCtrl::OnRightClick(wxMouseEvent& event) -{ +{ // Focus the clicked item. int flags; long item = HitTest(event.GetPosition(), flags); @@ -869,7 +869,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...")); } @@ -1105,7 +1105,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; @@ -1133,7 +1133,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; @@ -1194,7 +1194,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); @@ -1203,7 +1203,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..a867d9b6ca 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 @@ -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 e73726e02a..b6c3d9e8ea 100644 --- a/Source/Core/DolphinWX/Src/ISOProperties.cpp +++ b/Source/Core/DolphinWX/Src/ISOProperties.cpp @@ -196,7 +196,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 +218,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 +233,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 +260,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 +365,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 +396,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 +430,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 +452,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 +475,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 +501,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 +519,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 +670,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 +682,7 @@ void CISOProperties::OnRightClickOnTree(wxTreeEvent& event) popupMenu->AppendSeparator(); popupMenu->Append(IDM_CHECKINTEGRITY, _("Check Partition Integrity")); } - + PopupMenu(popupMenu); event.Skip(); @@ -694,7 +694,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 +784,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 +794,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 +879,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 +895,7 @@ void CISOProperties::OnExtractDataFromHeader(wxCommandEvent& event) { FS = pFileSystem; } - + bool ret = false; if (event.GetId() == IDM_EXTRACTAPPLOADER) { @@ -1159,7 +1159,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(); } @@ -1273,7 +1273,7 @@ void CISOProperties::PHackButtonClicked(wxCommandEvent& event) void CISOProperties::PatchButtonClicked(wxCommandEvent& event) { int selection = Patches->GetSelection(); - + switch (event.GetId()) { case ID_EDITPATCH: @@ -1352,7 +1352,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 03d51acbee..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; 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 5b8699bb0d..21bb84446b 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 30c0639ab2..10cebc904e 100644 --- a/Source/Core/DolphinWX/Src/MemoryCards/WiiSaveCrypted.cpp +++ b/Source/Core/DolphinWX/Src/MemoryCards/WiiSaveCrypted.cpp @@ -40,11 +40,11 @@ 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 (auto& entry : FST_Temp.children) { if (entry.isDirectory) @@ -61,7 +61,7 @@ void CWiiSaveCrypted::ExportAllSaves() } } } - } + } SuccessAlertT("Found %x save files", (unsigned int) titles.size()); for (auto& title : titles) { @@ -96,7 +96,7 @@ CWiiSaveCrypted::CWiiSaveCrypted(const char* FileName, u64 TitleID) else { aes_setkey_enc(&m_AES_ctx, SDKey, 128); - + if (getPaths(true)) { b_valid = true; @@ -133,7 +133,7 @@ void CWiiSaveCrypted::ReadHDR() } fpData_bin.Close(); - aes_crypt_cbc(&m_AES_ctx, AES_DECRYPT, HEADER_SZ, SD_IV, (const u8*)&_encryptedHeader, (u8*)&_header); + 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 +144,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); @@ -155,11 +155,11 @@ void CWiiSaveCrypted::ReadHDR() 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)); 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())) @@ -198,7 +198,7 @@ void CWiiSaveCrypted::WriteHDR() memcpy(_header.hdr.Md5, md5_calc, 0x10); 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 +212,7 @@ void CWiiSaveCrypted::WriteHDR() void CWiiSaveCrypted::ReadBKHDR() { if (!b_valid) return; - + File::IOFile fpData_bin(encryptedSavePath, "rb"); if (!fpData_bin) { @@ -228,7 +228,7 @@ void CWiiSaveCrypted::ReadBKHDR() return; } fpData_bin.Close(); - + if (bkhdr.size != Common::swap32(BK_LISTED_SZ) || bkhdr.magic != Common::swap32(BK_HDR_MAGIC)) { @@ -236,11 +236,11 @@ 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)) @@ -252,7 +252,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 +293,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 +315,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 +329,20 @@ void CWiiSaveCrypted::ImportWiiSaveFiles() b_valid = false; break; } - - + + memcpy(IV, _tmpFileHDR.IV, 0x10); - aes_crypt_cbc(&m_AES_ctx, AES_DECRYPT, RoundedFileSize, IV, (const u8*)&_encryptedData[0], &_data[0]); - + 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 +355,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 +374,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 +382,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 +390,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 +410,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); @@ -422,7 +422,7 @@ void CWiiSaveCrypted::ExportWiiSaveFiles() } 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 +445,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 +503,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 +545,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; } diff --git a/Source/Core/DolphinWX/Src/MemoryCards/WiiSaveCrypted.h b/Source/Core/DolphinWX/Src/MemoryCards/WiiSaveCrypted.h index 6ec4194f88..68afad43cf 100644 --- a/Source/Core/DolphinWX/Src/MemoryCards/WiiSaveCrypted.h +++ b/Source/Core/DolphinWX/Src/MemoryCards/WiiSaveCrypted.h @@ -44,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 682dedb7b0..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 ""; } 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..86127eba6b 100644 --- a/Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp +++ b/Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp @@ -54,8 +54,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 +64,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 +92,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); @@ -209,7 +209,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 +220,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 +245,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/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 4e38e480ff..7287c380d5 100644 --- a/Source/Core/InputCommon/Src/ControllerInterface/ControllerInterface.cpp +++ b/Source/Core/InputCommon/Src/ControllerInterface/ControllerInterface.cpp @@ -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/SDL/SDL.cpp b/Source/Core/InputCommon/Src/ControllerInterface/SDL/SDL.cpp index 45be64e91b..bcd3586dc6 100644 --- a/Source/Core/InputCommon/Src/ControllerInterface/SDL/SDL.cpp +++ b/Source/Core/InputCommon/Src/ControllerInterface/SDL/SDL.cpp @@ -14,7 +14,7 @@ namespace ciface { namespace SDL { - + std::string GetJoystickName(int index) { #if SDL_VERSION_ATLEAST(2, 0, 0) @@ -25,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; @@ -79,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) { @@ -151,7 +151,7 @@ Joystick::~Joystick() { #ifdef USE_SDL_HAPTIC if (m_haptic) - { + { // stop/destroy all effects SDL_HapticStopAll(m_haptic); std::list::iterator @@ -306,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/XInput/XInput.cpp b/Source/Core/InputCommon/Src/ControllerInterface/XInput/XInput.cpp index 2bc924bf41..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 }, @@ -153,7 +153,7 @@ 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 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 f6f505a74d..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; @@ -168,7 +168,7 @@ void UDPWiimote::mainThread() maxfd=(fd)+1; #endif } - + u64 tleft=timeout.tv_sec*1000+timeout.tv_usec/1000; u64 telapsed=time.GetTimeDifference(); time.Update(); @@ -184,14 +184,14 @@ 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 (sock_t fd : d->sockfds) @@ -203,9 +203,9 @@ void UDPWiimote::mainThread() 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"); } @@ -327,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) { @@ -344,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/VideoBackends/D3D/Src/D3DBase.h b/Source/Core/VideoBackends/D3D/Src/D3DBase.h index 899621d6c6..7f26cbd3cc 100644 --- a/Source/Core/VideoBackends/D3D/Src/D3DBase.h +++ b/Source/Core/VideoBackends/D3D/Src/D3DBase.h @@ -10,7 +10,7 @@ #include "Common.h" #include -namespace DX11 +namespace DX11 { #define SAFE_RELEASE(x) { if (x) (x)->Release(); (x) = NULL; } diff --git a/Source/Core/VideoBackends/D3D/Src/D3DShader.cpp b/Source/Core/VideoBackends/D3D/Src/D3DShader.cpp index 3ce33898cb..51a51b7233 100644 --- a/Source/Core/VideoBackends/D3D/Src/D3DShader.cpp +++ b/Source/Core/VideoBackends/D3D/Src/D3DShader.cpp @@ -39,7 +39,6 @@ bool CompileVertexShader(const char* code, unsigned int len, D3DBlob** blob) #endif 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", @@ -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/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/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 eb2f54387f..9790f2b52e 100644 --- a/Source/Core/VideoBackends/D3D/Src/Render.cpp +++ b/Source/Core/VideoBackends/D3D/Src/Render.cpp @@ -293,7 +293,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 +449,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; @@ -537,7 +537,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 @@ -794,7 +794,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; @@ -1252,7 +1252,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 }; @@ -1271,7 +1271,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 }; @@ -1322,7 +1322,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/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 01fe239cda..7ee92459c6 100644 --- a/Source/Core/VideoBackends/D3D/Src/TextureCache.cpp +++ b/Source/Core/VideoBackends/D3D/Src/TextureCache.cpp @@ -83,10 +83,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); @@ -138,7 +138,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..a48a3d289a 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,10 +217,10 @@ 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.texMode1[i&3].max_lod + 0xf) / 0x10, 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/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/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..681f4e3569 100644 --- a/Source/Core/VideoBackends/OGL/Src/FramebufferManager.h +++ b/Source/Core/VideoBackends/OGL/Src/FramebufferManager.h @@ -93,8 +93,8 @@ 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); @@ -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 eb05e8cddc..f2cf74acf2 100644 --- a/Source/Core/VideoBackends/OGL/Src/GLUtil.cpp +++ b/Source/Core/VideoBackends/OGL/Src/GLUtil.cpp @@ -53,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); @@ -72,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); @@ -88,7 +88,7 @@ GLuint OpenGL_CompileProgram ( const char* vertexShader, const char* fragmentSha } shader_errors |= !Result; #endif - + // link them glAttachShader(programID, vertexShaderID); glAttachShader(programID, fragmentShaderID); @@ -102,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 4dbbd06e05..48466fe580 100644 --- a/Source/Core/VideoBackends/OGL/Src/GLUtil.h +++ b/Source/Core/VideoBackends/OGL/Src/GLUtil.h @@ -32,12 +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 @@ -71,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/PostProcessing.cpp b/Source/Core/VideoBackends/OGL/Src/PostProcessing.cpp index a748ab5085..5d7fff3110 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"; @@ -161,16 +161,16 @@ void ApplyShader() 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>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 537e04a25e..b63fa3cffd 100644 --- a/Source/Core/VideoBackends/OGL/Src/Render.cpp +++ b/Source/Core/VideoBackends/OGL/Src/Render.cpp @@ -144,9 +144,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; @@ -171,7 +171,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; @@ -255,7 +255,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")) @@ -277,7 +277,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) { @@ -305,7 +305,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; @@ -337,7 +337,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. @@ -347,21 +347,21 @@ 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; @@ -376,7 +376,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); @@ -397,7 +397,7 @@ Renderer::Renderer() max_texture_size); bSuccess = false; } - + #if defined(_DEBUG) || defined(DEBUGFAST) if (GLEW_ARB_debug_output) { @@ -431,7 +431,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. @@ -450,7 +450,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. @@ -458,14 +458,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; @@ -503,11 +503,11 @@ Renderer::Renderer() // 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; @@ -515,14 +515,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 ", @@ -535,12 +535,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(); @@ -561,7 +561,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); @@ -608,14 +608,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(); @@ -626,10 +626,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" @@ -642,7 +642,7 @@ void Renderer::Init() "void main(void) {\n" " ocol0 = c;\n" "}\n"); - + // creating buffers glGenBuffers(1, &s_ShowEFBCopyRegions_VBO); glGenVertexArrays(1, &s_ShowEFBCopyRegions_VAO); @@ -688,7 +688,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) { @@ -704,78 +704,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]; @@ -783,7 +783,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); @@ -945,11 +945,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(); } @@ -998,11 +998,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(); } @@ -1159,10 +1159,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, @@ -1216,7 +1216,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); } @@ -1232,7 +1232,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 @@ -1242,7 +1242,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 @@ -1291,7 +1291,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. @@ -1302,7 +1302,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()); @@ -1325,12 +1325,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(); @@ -1355,22 +1355,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); @@ -1422,7 +1422,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); } @@ -1521,7 +1521,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); @@ -1635,11 +1635,11 @@ void Renderer::RestoreAPIState() #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(); } @@ -1747,7 +1747,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 96a001eca4..58ae98dabf 100644 --- a/Source/Core/VideoBackends/OGL/Src/Render.h +++ b/Source/Core/VideoBackends/OGL/Src/Render.h @@ -28,12 +28,12 @@ extern struct VideoConfig { 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; @@ -42,7 +42,7 @@ class Renderer : public ::Renderer public: Renderer(); ~Renderer(); - + static void Init(); static void Shutdown(); diff --git a/Source/Core/VideoBackends/OGL/Src/SamplerCache.cpp b/Source/Core/VideoBackends/OGL/Src/SamplerCache.cpp index fff3063009..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); 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); @@ -355,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; } @@ -370,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); @@ -404,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" @@ -458,7 +458,7 @@ TextureCache::~TextureCache() { s_ColorMatrixProgram.Destroy(); s_DepthMatrixProgram.Destroy(); - + for(auto& cache : s_VBO) { glDeleteBuffers(1, &cache.second.vbo); glDeleteVertexArrays(1, &cache.second.vao); diff --git a/Source/Core/VideoBackends/OGL/Src/TextureConverter.cpp b/Source/Core/VideoBackends/OGL/Src/TextureConverter.cpp index 104b6f5b1c..0c1800381e 100644 --- a/Source/Core/VideoBackends/OGL/Src/TextureConverter.cpp +++ b/Source/Core/VideoBackends/OGL/Src/TextureConverter.cpp @@ -169,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(); } @@ -229,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, @@ -240,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. @@ -303,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, @@ -344,9 +344,9 @@ 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); TextureCache::DisableStage(0); @@ -399,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, @@ -411,17 +411,17 @@ 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(); FramebufferManager::SetFramebuffer(0); diff --git a/Source/Core/VideoBackends/OGL/Src/VertexManager.cpp b/Source/Core/VideoBackends/OGL/Src/VertexManager.cpp index dbebc3ecfd..4fb355d897 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..67017b3436 100644 --- a/Source/Core/VideoBackends/OGL/Src/VertexManager.h +++ b/Source/Core/VideoBackends/OGL/Src/VertexManager.h @@ -21,7 +21,7 @@ namespace OGL virtual void Initialize(const PortableVertexDeclaration &_vtx_decl); virtual void SetupVertexPointers(); - + GLuint VAO; }; @@ -35,10 +35,10 @@ public: NativeVertexFormat* CreateNativeVertexFormat(); void CreateDeviceObjects(); void DestroyDeviceObjects(); - + // NativeVertexFormat use this GLuint m_vertex_buffers; - GLuint m_index_buffers; + GLuint m_index_buffers; GLuint m_last_vao; private: void Draw(u32 stride); diff --git a/Source/Core/VideoBackends/OGL/Src/main.cpp b/Source/Core/VideoBackends/OGL/Src/main.cpp index ada52a385f..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 @@ -182,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; @@ -233,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/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 fc34fbe0da..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 @@ -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/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/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..dd62838bc0 100644 --- a/Source/Core/VideoBackends/Software/Src/VideoBackend.h +++ b/Source/Core/VideoBackends/Software/Src/VideoBackend.h @@ -27,7 +27,7 @@ class VideoSoftware : public VideoBackend void Video_ExitLoop(); void Video_BeginField(u32, u32, u32); void Video_EndField(); - + u32 Video_AccessEFB(EFBAccessType, u32, u32, u32); u32 Video_GetQueryResult(PerfQueryType type); @@ -57,7 +57,7 @@ class VideoSoftware : public VideoBackend void PauseAndLock(bool doLock, bool unpauseOnUnlock=true); void DoState(PointerWrap &p); - + public: void CheckInvalidState(); }; 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/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 e3ada3c0bf..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 @@ -199,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); @@ -265,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); @@ -287,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; @@ -303,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]); @@ -377,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]); @@ -442,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; @@ -498,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/DriverDetails.cpp b/Source/Core/VideoCommon/Src/DriverDetails.cpp index 2ca8f4577b..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,7 +74,7 @@ namespace DriverDetails default: break; } - + for(auto& bug : m_known_bugs) { if( @@ -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 3b432903d8..c88e4ae5d5 100644 --- a/Source/Core/VideoCommon/Src/HiresTextures.cpp +++ b/Source/Core/VideoCommon/Src/HiresTextures.cpp @@ -27,7 +27,7 @@ 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++) { 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/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..442cfc1ef4 100644 --- a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp @@ -529,7 +529,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..b999ada6a3 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); @@ -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; } @@ -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/ShaderGenCommon.h b/Source/Core/VideoCommon/Src/ShaderGenCommon.h index 31ec8d3e71..35ec50407a 100644 --- a/Source/Core/VideoCommon/Src/ShaderGenCommon.h +++ b/Source/Core/VideoCommon/Src/ShaderGenCommon.h @@ -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..ea008dc898 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() ) { @@ -499,7 +499,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 +515,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 +530,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 +566,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 +667,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 +682,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 +710,7 @@ void TextureCache::CopyRenderTargetToTexture(u32 dstAddr, unsigned int dstFormat { cbufid = 11; } - + } break; @@ -723,7 +723,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 9e8467fe44..02109b88fd 100644 --- a/Source/Core/VideoCommon/Src/TextureConversionShader.cpp +++ b/Source/Core/VideoCommon/Src/TextureConversionShader.cpp @@ -66,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) { @@ -176,7 +176,7 @@ void Write32BitSwizzler(char*& p, u32 format, API_TYPE ApiType) WRITE(p, " float xoff = xel - (xb * %f);\n", blkH); WRITE(p, " float x2 = uv1.x * 2.0;\n"); - WRITE(p, " float xl = floor(x2 / %f);\n", blkW); + WRITE(p, " float xl = floor(x2 / %f);\n", blkW); WRITE(p, " float xib = x2 - (xl * %f);\n", blkW); WRITE(p, " float halfxb = floor(xb / 2.0);\n"); @@ -334,12 +334,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 da96431f97..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() { } @@ -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/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..f36f857973 100644 --- a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp @@ -136,7 +136,7 @@ static inline void GenerateVertexShader(T& out, u32 components, API_TYPE api_typ 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/VertexShaderManager.cpp b/Source/Core/VideoCommon/Src/VertexShaderManager.cpp index 6fa22c4b9c..5ec371a0ba 100644 --- a/Source/Core/VideoCommon/Src/VertexShaderManager.cpp +++ b/Source/Core/VideoCommon/Src/VertexShaderManager.cpp @@ -197,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; @@ -216,7 +216,7 @@ void VertexShaderManager::Dirty() bProjectionChanged = true; nMaterialsChanged = 15; - + dirty = true; } @@ -304,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))) @@ -338,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 @@ -386,7 +386,7 @@ void VertexShaderManager::SetConstants() 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 8b5875a8ac..93287ffe1e 100644 --- a/Source/Core/VideoCommon/Src/VertexShaderManager.h +++ b/Source/Core/VideoCommon/Src/VertexShaderManager.h @@ -34,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 d62a799d42..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; 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 e717cc463b..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]; 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/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/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/Src/DSPTool.cpp b/Source/DSPTool/Src/DSPTool.cpp index 78335d3026..f5dcb18694 100644 --- a/Source/DSPTool/Src/DSPTool.cpp +++ b/Source/DSPTool/Src/DSPTool.cpp @@ -174,7 +174,7 @@ void RunAsmTests() //.File::ReadFileToString(true, "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)) fail = fail || !SuperTrip(dsp_test.c_str()); @@ -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()) { @@ -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 @@ -386,7 +386,7 @@ int main(int argc, const char *argv[]) else printf("%s", text.c_str()); } - else + else { if (input_name.empty()) { @@ -396,7 +396,7 @@ int main(int argc, const char *argv[]) std::string source; if (File::ReadFileToString(true, 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)) { 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,7 +447,7 @@ 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()); @@ -466,7 +466,7 @@ 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; 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_ From 21610c2e54302f8d4e5cae0705abaf10e63a8b44 Mon Sep 17 00:00:00 2001 From: comex Date: Tue, 29 Oct 2013 01:34:26 -0400 Subject: [PATCH 42/90] Run code through clang-modernize -add-override to add 'override' decls. --- .../Core/Src/Debugger/PPCDebugInterface.h | 46 ++++++------- Source/Core/Core/Src/HW/DSPHLE/DSPHLE.h | 32 +++++----- Source/Core/Core/Src/HW/DSPHLE/HLEMixer.h | 2 +- .../Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX.h | 10 +-- .../Core/Src/HW/DSPHLE/UCodes/UCode_AXWii.h | 6 +- .../Core/Src/HW/DSPHLE/UCodes/UCode_CARD.h | 6 +- .../Core/Src/HW/DSPHLE/UCodes/UCode_GBA.h | 6 +- .../HW/DSPHLE/UCodes/UCode_InitAudioSystem.h | 6 +- .../Core/Src/HW/DSPHLE/UCodes/UCode_ROM.h | 8 +-- .../Core/Src/HW/DSPHLE/UCodes/UCode_Zelda.h | 10 +-- Source/Core/Core/Src/HW/DSPLLE/DSPSymbols.h | 2 +- Source/Core/Core/Src/HW/EXI_Device.cpp | 10 +-- Source/Core/Core/Src/HW/EXI_DeviceAD16.h | 8 +-- .../Core/Core/Src/HW/EXI_DeviceAMBaseboard.h | 10 +-- Source/Core/Core/Src/HW/EXI_DeviceEthernet.h | 16 ++--- Source/Core/Core/Src/HW/EXI_DeviceGecko.h | 4 +- .../Core/Core/Src/HW/EXI_DeviceMemoryCard.h | 16 ++--- Source/Core/Core/Src/HW/GCPadEmu.h | 4 +- Source/Core/Core/Src/HW/SI_Device.cpp | 6 +- .../Core/Core/Src/HW/SI_DeviceAMBaseboard.h | 6 +- Source/Core/Core/Src/HW/SI_DeviceDanceMat.h | 8 +-- Source/Core/Core/Src/HW/SI_DeviceGBA.h | 6 +- .../Src/HW/WiimoteEmu/Attachment/Attachment.h | 2 +- .../Src/HW/WiimoteEmu/Attachment/Guitar.h | 2 +- .../Src/HW/WiimoteEmu/Attachment/Nunchuk.h | 4 +- .../Src/HW/WiimoteEmu/Attachment/Turntable.h | 2 +- .../Src/PowerPC/Interpreter/Interpreter.h | 12 ++-- Source/Core/Core/Src/PowerPC/Jit64/Jit.h | 18 +++--- .../Core/Core/Src/PowerPC/Jit64/JitRegCache.h | 20 +++--- Source/Core/Core/Src/PowerPC/Jit64IL/JitIL.h | 40 ++++++------ .../Core/Core/Src/PowerPC/JitCommon/JitBase.h | 6 +- .../Core/Src/PowerPC/JitCommon/JitCache.h | 4 +- Source/Core/Core/Src/PowerPC/PPCSymbolDB.h | 4 +- Source/Core/DiscIO/Src/NANDContentLoader.cpp | 32 +++++----- Source/Core/DolphinWX/Src/ISOProperties.cpp | 2 +- .../ControllerInterface/ExpressionParser.cpp | 24 +++---- .../Src/ControllerInterface/SDL/SDL.h | 22 +++---- .../OGL/Src/FramebufferManager.h | 12 ++-- Source/Core/VideoBackends/OGL/Src/PerfQuery.h | 10 +-- .../OGL/Src/ProgramShaderCache.h | 2 +- Source/Core/VideoBackends/OGL/Src/Render.h | 42 ++++++------ .../Core/VideoBackends/OGL/Src/TextureCache.h | 10 +-- .../VideoBackends/OGL/Src/VertexManager.h | 12 ++-- .../Core/VideoBackends/OGL/Src/VideoBackend.h | 18 +++--- .../VideoBackends/Software/Src/VideoBackend.h | 64 +++++++++---------- 45 files changed, 296 insertions(+), 296 deletions(-) diff --git a/Source/Core/Core/Src/Debugger/PPCDebugInterface.h b/Source/Core/Core/Src/Debugger/PPCDebugInterface.h index 575121b983..71ab0d79c6 100644 --- a/Source/Core/Core/Src/Debugger/PPCDebugInterface.h +++ b/Source/Core/Core/Src/Debugger/PPCDebugInterface.h @@ -15,33 +15,33 @@ 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); + 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/HW/DSPHLE/DSPHLE.h b/Source/Core/Core/Src/HW/DSPHLE/DSPHLE.h index b420070f58..9cff0e8baf 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(bool bWii, bool bDSPThread); - virtual void Shutdown(); - virtual bool IsLLE() { return false; } + virtual bool Initialize(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; } diff --git a/Source/Core/Core/Src/HW/DSPHLE/HLEMixer.h b/Source/Core/Core/Src/HW/DSPHLE/HLEMixer.h index 4437887603..d19291d567 100644 --- a/Source/Core/Core/Src/HW/DSPHLE/HLEMixer.h +++ b/Source/Core/Core/Src/HW/DSPHLE/HLEMixer.h @@ -15,7 +15,7 @@ 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/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_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.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.h b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_Zelda.h index 9b4d82136d..76f2663317 100644 --- a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_Zelda.h +++ b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_Zelda.h @@ -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/DSPLLE/DSPSymbols.h b/Source/Core/Core/Src/HW/DSPLLE/DSPSymbols.h index da739a008e..c9b8214157 100644 --- a/Source/Core/Core/Src/HW/DSPLLE/DSPSymbols.h +++ b/Source/Core/Core/Src/HW/DSPLLE/DSPSymbols.h @@ -16,7 +16,7 @@ public: DSPSymbolDB() {} ~DSPSymbolDB() {} - Symbol *GetSymbolFromAddr(u32 addr); + Symbol *GetSymbolFromAddr(u32 addr) override; }; diff --git a/Source/Core/Core/Src/HW/EXI_Device.cpp b/Source/Core/Core/Src/HW/EXI_Device.cpp index 74f96f756c..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,10 +81,10 @@ 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);} }; diff --git a/Source/Core/Core/Src/HW/EXI_DeviceAD16.h b/Source/Core/Core/Src/HW/EXI_DeviceAD16.h index ec1b920081..b80db4882b 100644 --- a/Source/Core/Core/Src/HW/EXI_DeviceAD16.h +++ b/Source/Core/Core/Src/HW/EXI_DeviceAD16.h @@ -9,9 +9,9 @@ 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 @@ -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.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.h b/Source/Core/Core/Src/HW/EXI_DeviceEthernet.h index f75c136db4..ba66e816f8 100644 --- a/Source/Core/Core/Src/HW/EXI_DeviceEthernet.h +++ b/Source/Core/Core/Src/HW/EXI_DeviceEthernet.h @@ -189,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.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_DeviceMemoryCard.h b/Source/Core/Core/Src/HW/EXI_DeviceMemoryCard.h index 1bc012e9bf..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 @@ -89,7 +89,7 @@ private: std::thread flushThread; protected: - virtual void TransferByte(u8 &byte); + virtual void TransferByte(u8 &byte) override; }; #endif diff --git a/Source/Core/Core/Src/HW/GCPadEmu.h b/Source/Core/Core/Src/HW/GCPadEmu.h index cb6971c0ed..94d07b539f 100644 --- a/Source/Core/Core/Src/HW/GCPadEmu.h +++ b/Source/Core/Core/Src/HW/GCPadEmu.h @@ -20,9 +20,9 @@ public: bool GetMicButton() const; - std::string GetName() const; + std::string GetName() const override; - void LoadDefaults(const ControllerInterface& ciface); + void LoadDefaults(const ControllerInterface& ciface) override; private: diff --git a/Source/Core/Core/Src/HW/SI_Device.cpp b/Source/Core/Core/Src/HW/SI_Device.cpp index a6d5c8afde..ee0e649b5e 100644 --- a/Source/Core/Core/Src/HW/SI_Device.cpp +++ b/Source/Core/Core/Src/HW/SI_Device.cpp @@ -44,15 +44,15 @@ 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 {} }; 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.h b/Source/Core/Core/Src/HW/SI_DeviceDanceMat.h index a9d5aefb69..f2dbb2f311 100644 --- a/Source/Core/Core/Src/HW/SI_DeviceDanceMat.h +++ b/Source/Core/Core/Src/HW/SI_DeviceDanceMat.h @@ -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.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/WiimoteEmu/Attachment/Attachment.h b/Source/Core/Core/Src/HW/WiimoteEmu/Attachment/Attachment.h index dfa292bf3b..e965261d21 100644 --- a/Source/Core/Core/Src/HW/WiimoteEmu/Attachment/Attachment.h +++ b/Source/Core/Core/Src/HW/WiimoteEmu/Attachment/Attachment.h @@ -18,7 +18,7 @@ public: virtual void GetState( u8* const data, const bool focus = true ) {} void Reset(); - std::string GetName() const; + std::string GetName() const override; const char* const name; WiimoteEmu::ExtensionReg& reg; 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.h b/Source/Core/Core/Src/HW/WiimoteEmu/Attachment/Nunchuk.h index 76518d9543..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; 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/PowerPC/Interpreter/Interpreter.h b/Source/Core/Core/Src/PowerPC/Interpreter/Interpreter.h index dcb1a53b54..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); diff --git a/Source/Core/Core/Src/PowerPC/Jit64/Jit.h b/Source/Core/Core/Src/PowerPC/Jit64/Jit.h index 08f238dcdf..4bd7ab5d15 100644 --- a/Source/Core/Core/Src/PowerPC/Jit64/Jit.h +++ b/Source/Core/Core/Src/PowerPC/Jit64/Jit.h @@ -62,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 @@ -94,8 +94,8 @@ public: } // Run! - void Run(); - void SingleStep(); + void Run() override; + void SingleStep() override; // Utilities for use by opcodes diff --git a/Source/Core/Core/Src/PowerPC/Jit64/JitRegCache.h b/Source/Core/Core/Src/PowerPC/Jit64/JitRegCache.h index 30ae663231..cacd1e0e4e 100644 --- a/Source/Core/Core/Src/PowerPC/Jit64/JitRegCache.h +++ b/Source/Core/Core/Src/PowerPC/Jit64/JitRegCache.h @@ -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/Jit64IL/JitIL.h b/Source/Core/Core/Src/PowerPC/Jit64IL/JitIL.h index 4deb048bb6..3f0e847d91 100644 --- a/Source/Core/Core/Src/PowerPC/Jit64IL/JitIL.h +++ b/Source/Core/Core/Src/PowerPC/Jit64IL/JitIL.h @@ -70,31 +70,31 @@ public: // 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; } + JitBlockCache *GetBlockCache() override { return &blocks; } - const u8 *BackPatch(u8 *codePtr, u32 em_address, void *ctx) { return NULL; }; + const u8 *BackPatch(u8 *codePtr, u32 em_address, void *ctx) override { return NULL; }; - bool IsInCodeSpace(u8 *ptr) { return IsInSpace(ptr); } + bool IsInCodeSpace(u8 *ptr) override { return IsInSpace(ptr); } - void ClearCache(); + 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 @@ -104,8 +104,8 @@ public: // Run! - void Run(); - void SingleStep(); + void Run() override; + void SingleStep() override; // Utilities for use by opcodes @@ -128,16 +128,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); diff --git a/Source/Core/Core/Src/PowerPC/JitCommon/JitBase.h b/Source/Core/Core/Src/PowerPC/JitCommon/JitBase.h index 1bf2d70c53..2beb58d0d6 100644 --- a/Source/Core/Core/Src/PowerPC/JitCommon/JitBase.h +++ b/Source/Core/Core/Src/PowerPC/JitCommon/JitBase.h @@ -95,11 +95,11 @@ protected: JitBlockCache blocks; TrampolineCache trampolines; public: - JitBlockCache *GetBlockCache() { return &blocks; } + JitBlockCache *GetBlockCache() override { return &blocks; } - const u8 *BackPatch(u8 *codePtr, u32 em_address, void *ctx); + const u8 *BackPatch(u8 *codePtr, u32 em_address, void *ctx) override; - bool IsInCodeSpace(u8 *ptr) { return IsInSpace(ptr); } + bool IsInCodeSpace(u8 *ptr) override { return IsInSpace(ptr); } }; extern JitBase *jit; diff --git a/Source/Core/Core/Src/PowerPC/JitCommon/JitCache.h b/Source/Core/Core/Src/PowerPC/JitCommon/JitCache.h index 4b540ee2ff..b81c5d837a 100644 --- a/Source/Core/Core/Src/PowerPC/JitCommon/JitCache.h +++ b/Source/Core/Core/Src/PowerPC/JitCommon/JitCache.h @@ -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/PPCSymbolDB.h b/Source/Core/Core/Src/PowerPC/PPCSymbolDB.h index 157d9d1379..27b80eb683 100644 --- a/Source/Core/Core/Src/PowerPC/PPCSymbolDB.h +++ b/Source/Core/Core/Src/PowerPC/PPCSymbolDB.h @@ -23,10 +23,10 @@ public: 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/DiscIO/Src/NANDContentLoader.cpp b/Source/Core/DiscIO/Src/NANDContentLoader.cpp index 8dc6a9e3cb..e5b36c54d5 100644 --- a/Source/Core/DiscIO/Src/NANDContentLoader.cpp +++ b/Source/Core/DiscIO/Src/NANDContentLoader.cpp @@ -92,24 +92,24 @@ public: virtual ~CNANDContentLoader(); - bool IsValid() const { return m_Valid; } - void RemoveTitle(void) const; - u64 GetTitleID() const { return m_TitleID; } - u16 GetIosVersion() const { return m_IosVersion; } - u32 GetBootIndex() const { return m_BootIndex; } - size_t GetContentSize() const { return m_Content.size(); } - const SNANDContent* GetContentByIndex(int _Index) const; - const u8* GetTMDView() const { return m_TMDView; } - const u8* GetTMDHeader() const { return m_TMDHeader; } - u32 GetTIKSize() const { return m_TIKSize; } - const u8* GetTIK() const { return m_TIK; } + bool IsValid() const override { return m_Valid; } + void RemoveTitle(void) const override; + u64 GetTitleID() const override { return m_TitleID; } + u16 GetIosVersion() const override { return m_IosVersion; } + u32 GetBootIndex() const override { return m_BootIndex; } + size_t GetContentSize() const override { return m_Content.size(); } + const SNANDContent* GetContentByIndex(int _Index) const override; + const u8* GetTMDView() const override { return m_TMDView; } + const u8* GetTMDHeader() const override { return m_TMDHeader; } + u32 GetTIKSize() const override { return m_TIKSize; } + const u8* GetTIK() const override { return m_TIK; } - const std::vector& 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: diff --git a/Source/Core/DolphinWX/Src/ISOProperties.cpp b/Source/Core/DolphinWX/Src/ISOProperties.cpp index b6c3d9e8ea..a191b79677 100644 --- a/Source/Core/DolphinWX/Src/ISOProperties.cpp +++ b/Source/Core/DolphinWX/Src/ISOProperties.cpp @@ -919,7 +919,7 @@ public: Create(); } - virtual ExitCode Entry() + virtual ExitCode Entry() override { return (ExitCode)m_Partition.Partition->CheckIntegrity(); } 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/SDL/SDL.h b/Source/Core/InputCommon/Src/ControllerInterface/SDL/SDL.h index 8b802540b1..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; @@ -130,15 +130,15 @@ private: #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/VideoBackends/OGL/Src/FramebufferManager.h b/Source/Core/VideoBackends/OGL/Src/FramebufferManager.h index 681f4e3569..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; }; @@ -99,10 +99,10 @@ public: 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; 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/ProgramShaderCache.h b/Source/Core/VideoBackends/OGL/Src/ProgramShaderCache.h index ddf37c0872..a7b21a929d 100644 --- a/Source/Core/VideoBackends/OGL/Src/ProgramShaderCache.h +++ b/Source/Core/VideoBackends/OGL/Src/ProgramShaderCache.h @@ -97,7 +97,7 @@ private: class ProgramShaderCacheInserter : public LinearDiskCacheReader { 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/Render.h b/Source/Core/VideoBackends/OGL/Src/Render.h index 58ae98dabf..f38c9b4c58 100644 --- a/Source/Core/VideoBackends/OGL/Src/Render.h +++ b/Source/Core/VideoBackends/OGL/Src/Render.h @@ -46,39 +46,39 @@ public: 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(); static 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(); + void UpdateViewport() override; static void TakeScreenshot(const TargetRectangle &rc, std::string filename); 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/VertexManager.h b/Source/Core/VideoBackends/OGL/Src/VertexManager.h index 67017b3436..f96ec7ec97 100644 --- a/Source/Core/VideoBackends/OGL/Src/VertexManager.h +++ b/Source/Core/VideoBackends/OGL/Src/VertexManager.h @@ -19,8 +19,8 @@ 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,9 +32,9 @@ 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; @@ -42,7 +42,7 @@ public: 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/Software/Src/VideoBackend.h b/Source/Core/VideoBackends/Software/Src/VideoBackend.h index dd62838bc0..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(); + void Video_EnterLoop() override; + void Video_ExitLoop() override; + void Video_BeginField(u32, u32, u32) override; + void Video_EndField() override; - u32 Video_AccessEFB(EFBAccessType, u32, u32, u32); - u32 Video_GetQueryResult(PerfQueryType type); + u32 Video_AccessEFB(EFBAccessType, u32, u32, u32) override; + u32 Video_GetQueryResult(PerfQueryType type) override; - void Video_AddMessage(const char* pstr, unsigned int milliseconds); - void Video_ClearMessages(); - bool Video_Screenshot(const char* filename); + 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); - void DoState(PointerWrap &p); + void PauseAndLock(bool doLock, bool unpauseOnUnlock=true) override; + void DoState(PointerWrap &p) override; public: - void CheckInvalidState(); + void CheckInvalidState() override; }; } From 3f1ea21e4fabdd672bd33ed01a8d1495ec5056e7 Mon Sep 17 00:00:00 2001 From: comex Date: Sun, 3 Nov 2013 20:30:34 -0500 Subject: [PATCH 43/90] Fix warnings. --- Externals/SDL/src/joystick/darwin/SDL_sysjoystick.c | 2 +- Source/Core/Core/Src/HW/DSPHLE/DSPHLE.h | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) 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 ("CouldnÕt 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/Source/Core/Core/Src/HW/DSPHLE/DSPHLE.h b/Source/Core/Core/Src/HW/DSPHLE/DSPHLE.h index 9cff0e8baf..44248fd88f 100644 --- a/Source/Core/Core/Src/HW/DSPHLE/DSPHLE.h +++ b/Source/Core/Core/Src/HW/DSPHLE/DSPHLE.h @@ -47,7 +47,6 @@ private: void InitMixer(); // Declarations and definitions - void *m_hWnd; bool m_bWii; bool m_InitMixer; From e15f6289354bb815edbb7cf7925e47c5216a844e Mon Sep 17 00:00:00 2001 From: Matthew Parlane Date: Tue, 5 Nov 2013 00:33:41 +1300 Subject: [PATCH 44/90] Fix {Read,Write}FileToString. We should be using binary always. --- Source/Core/Common/Src/FileUtil.cpp | 31 +++-------------- Source/Core/Common/Src/FileUtil.h | 4 +-- Source/Core/Core/Src/Boot/Boot.cpp | 2 +- Source/Core/Core/Src/DSP/DSPCodeUtil.cpp | 4 +-- Source/Core/Core/Src/DSP/assemble.cpp | 2 +- Source/Core/Core/Src/GeckoCode.cpp | 2 +- .../Core/Core/Src/HW/DSPLLE/DSPLLETools.cpp | 2 +- Source/Core/DiscIO/Src/VolumeDirectory.cpp | 4 +-- .../VideoBackends/OGL/Src/PostProcessing.cpp | 2 +- Source/Core/VideoCommon/Src/Debugger.cpp | 4 +-- .../Src/OpenCL/OCLTextureDecoder.cpp | 2 +- Source/DSPTool/Src/DSPTool.cpp | 34 +++++++++---------- 12 files changed, 35 insertions(+), 58 deletions(-) diff --git a/Source/Core/Common/Src/FileUtil.cpp b/Source/Core/Common/Src/FileUtil.cpp index 22f8df849b..7eed3f08f4 100644 --- a/Source/Core/Common/Src/FileUtil.cpp +++ b/Source/Core/Common/Src/FileUtil.cpp @@ -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 43482ffb32..b39135fa41 100644 --- a/Source/Core/Common/Src/FileUtil.h +++ b/Source/Core/Common/Src/FileUtil.h @@ -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 diff --git a/Source/Core/Core/Src/Boot/Boot.cpp b/Source/Core/Core/Src/Boot/Boot.cpp index 97888c995c..7691421623 100644 --- a/Source/Core/Core/Src/Boot/Boot.cpp +++ b/Source/Core/Core/Src/Boot/Boot.cpp @@ -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()); diff --git a/Source/Core/Core/Src/DSP/DSPCodeUtil.cpp b/Source/Core/Core/Src/DSP/DSPCodeUtil.cpp index e769723b1d..afaaa7d22e 100644 --- a/Source/Core/Core/Src/DSP/DSPCodeUtil.cpp +++ b/Source/Core/Core/Src/DSP/DSPCodeUtil.cpp @@ -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/assemble.cpp b/Source/Core/Core/Src/DSP/assemble.cpp index a8ddebf113..7ae9346f29 100644 --- a/Source/Core/Core/Src/DSP/assemble.cpp +++ b/Source/Core/Core/Src/DSP/assemble.cpp @@ -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)) diff --git a/Source/Core/Core/Src/GeckoCode.cpp b/Source/Core/Core/Src/GeckoCode.cpp index c791eeb31d..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 diff --git a/Source/Core/Core/Src/HW/DSPLLE/DSPLLETools.cpp b/Source/Core/Core/Src/HW/DSPLLE/DSPLLETools.cpp index c2ee99f5ee..d0f50834a2 100644 --- a/Source/Core/Core/Src/HW/DSPLLE/DSPLLETools.cpp +++ b/Source/Core/Core/Src/HW/DSPLLE/DSPLLETools.cpp @@ -55,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/DiscIO/Src/VolumeDirectory.cpp b/Source/Core/DiscIO/Src/VolumeDirectory.cpp index b949932b0b..f9f8f00ea8 100644 --- a/Source/Core/DiscIO/Src/VolumeDirectory.cpp +++ b/Source/Core/DiscIO/Src/VolumeDirectory.cpp @@ -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); diff --git a/Source/Core/VideoBackends/OGL/Src/PostProcessing.cpp b/Source/Core/VideoBackends/OGL/Src/PostProcessing.cpp index 5d7fff3110..84fb0c4d1c 100644 --- a/Source/Core/VideoBackends/OGL/Src/PostProcessing.cpp +++ b/Source/Core/VideoBackends/OGL/Src/PostProcessing.cpp @@ -157,7 +157,7 @@ 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; } 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/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/DSPTool/Src/DSPTool.cpp b/Source/DSPTool/Src/DSPTool.cpp index f5dcb18694..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"); @@ -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"); @@ -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,12 +377,12 @@ 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()); } @@ -394,7 +394,7 @@ 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) { @@ -429,7 +429,7 @@ int main(int argc, const char *argv[]) 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--; @@ -450,7 +450,7 @@ 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; } @@ -471,13 +471,13 @@ int main(int argc, const char *argv[]) { 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()); } } } From 045efdfc3e558f1152b116574d92015f27e396fa Mon Sep 17 00:00:00 2001 From: degasus Date: Mon, 4 Nov 2013 12:38:01 +0100 Subject: [PATCH 45/90] ogl: drop all %f from TextureConversionShader --- .../Src/TextureConversionShader.cpp | 45 +++++++++---------- 1 file changed, 22 insertions(+), 23 deletions(-) diff --git a/Source/Core/VideoCommon/Src/TextureConversionShader.cpp b/Source/Core/VideoCommon/Src/TextureConversionShader.cpp index 02109b88fd..99e9f702c7 100644 --- a/Source/Core/VideoCommon/Src/TextureConversionShader.cpp +++ b/Source/Core/VideoCommon/Src/TextureConversionShader.cpp @@ -75,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"); @@ -101,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"); @@ -139,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) @@ -167,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"); @@ -247,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) From f4056978c8d24beb6abb244c9c664427778ef009 Mon Sep 17 00:00:00 2001 From: Shawn Hoffman Date: Mon, 4 Nov 2013 23:50:52 -0800 Subject: [PATCH 46/90] [windows] update SDL-2.0.0 to 2.0.1. Fixes issue 6793. --- Externals/SDL2-2.0.0/WhatsNew.txt | 3 - Externals/SDL2-2.0.0/include/SDL_revision.h | 2 - Externals/SDL2-2.0.0/lib/Win32/SDL2.lib | Bin 111002 -> 0 bytes Externals/SDL2-2.0.0/lib/x64/SDL2.lib | Bin 108428 -> 0 bytes Externals/{SDL2-2.0.0 => SDL2-2.0.1}/BUGS.txt | 0 .../{SDL2-2.0.0 => SDL2-2.0.1}/COPYING.txt | 0 .../{SDL2-2.0.0 => SDL2-2.0.1}/README-SDL.txt | 0 .../{SDL2-2.0.0 => SDL2-2.0.1}/README.txt | 0 Externals/SDL2-2.0.1/WhatsNew.txt | 57 ++++++++ .../{SDL2-2.0.0 => SDL2-2.0.1}/include/SDL.h | 27 ++-- .../include/SDL_assert.h | 13 +- .../include/SDL_atomic.h | 4 +- .../include/SDL_audio.h | 44 +++--- .../include/SDL_bits.h | 0 .../include/SDL_blendmode.h | 0 .../include/SDL_clipboard.h | 0 .../include/SDL_config.h | 18 ++- .../include/SDL_cpuinfo.h | 5 + .../include/SDL_endian.h | 8 +- .../include/SDL_error.h | 4 +- .../include/SDL_events.h | 8 +- Externals/SDL2-2.0.1/include/SDL_filesystem.h | 136 ++++++++++++++++++ .../include/SDL_gamecontroller.h | 0 .../include/SDL_gesture.h | 0 .../include/SDL_haptic.h | 14 +- .../include/SDL_hints.h | 16 +++ .../include/SDL_joystick.h | 4 +- .../include/SDL_keyboard.h | 0 .../include/SDL_keycode.h | 0 .../include/SDL_loadso.h | 0 .../include/SDL_log.h | 0 .../include/SDL_main.h | 2 +- .../include/SDL_messagebox.h | 0 .../include/SDL_mouse.h | 0 .../include/SDL_mutex.h | 18 +-- .../include/SDL_name.h | 0 .../include/SDL_opengl.h | 0 .../include/SDL_opengles.h | 0 .../include/SDL_opengles2.h | 0 .../include/SDL_pixels.h | 4 +- .../include/SDL_platform.h | 8 +- .../include/SDL_power.h | 0 .../include/SDL_quit.h | 0 .../include/SDL_rect.h | 2 +- .../include/SDL_render.h | 25 ++++ Externals/SDL2-2.0.1/include/SDL_revision.h | 2 + .../include/SDL_rwops.h | 16 +-- .../include/SDL_scancode.h | 12 +- .../include/SDL_shape.h | 0 .../include/SDL_stdinc.h | 8 +- .../include/SDL_surface.h | 6 +- .../include/SDL_system.h | 26 +++- .../include/SDL_syswm.h | 0 .../include/SDL_test.h | 0 .../include/SDL_test_assert.h | 0 .../include/SDL_test_common.h | 1 + .../include/SDL_test_compare.h | 0 .../include/SDL_test_crc32.h | 0 .../include/SDL_test_font.h | 0 .../include/SDL_test_fuzzer.h | 0 .../include/SDL_test_harness.h | 28 ++-- .../include/SDL_test_images.h | 0 .../include/SDL_test_log.h | 0 .../include/SDL_test_md5.h | 0 .../include/SDL_test_random.h | 0 .../include/SDL_thread.h | 10 +- .../include/SDL_timer.h | 11 ++ .../include/SDL_touch.h | 0 .../include/SDL_types.h | 0 .../include/SDL_version.h | 2 +- .../include/SDL_video.h | 39 +++-- .../include/begin_code.h | 60 ++++---- .../include/close_code.h | 0 .../lib/Win32/SDL2.dll | Bin 872448 -> 880640 bytes Externals/SDL2-2.0.1/lib/Win32/SDL2.lib | Bin 0 -> 112590 bytes .../lib/x64/SDL2.dll | Bin 1020416 -> 1026560 bytes Externals/SDL2-2.0.1/lib/x64/SDL2.lib | Bin 0 -> 109980 bytes Source/Core/DolphinWX/DolphinWX.vcxproj | 4 +- Source/VSProps/Base.props | 2 +- 79 files changed, 474 insertions(+), 175 deletions(-) delete mode 100644 Externals/SDL2-2.0.0/WhatsNew.txt delete mode 100644 Externals/SDL2-2.0.0/include/SDL_revision.h delete mode 100644 Externals/SDL2-2.0.0/lib/Win32/SDL2.lib delete mode 100644 Externals/SDL2-2.0.0/lib/x64/SDL2.lib rename Externals/{SDL2-2.0.0 => SDL2-2.0.1}/BUGS.txt (100%) rename Externals/{SDL2-2.0.0 => SDL2-2.0.1}/COPYING.txt (100%) rename Externals/{SDL2-2.0.0 => SDL2-2.0.1}/README-SDL.txt (100%) rename Externals/{SDL2-2.0.0 => SDL2-2.0.1}/README.txt (100%) create mode 100644 Externals/SDL2-2.0.1/WhatsNew.txt rename Externals/{SDL2-2.0.0 => SDL2-2.0.1}/include/SDL.h (86%) rename Externals/{SDL2-2.0.0 => SDL2-2.0.1}/include/SDL_assert.h (95%) rename Externals/{SDL2-2.0.0 => SDL2-2.0.1}/include/SDL_atomic.h (99%) rename Externals/{SDL2-2.0.0 => SDL2-2.0.1}/include/SDL_audio.h (98%) rename Externals/{SDL2-2.0.0 => SDL2-2.0.1}/include/SDL_bits.h (100%) rename Externals/{SDL2-2.0.0 => SDL2-2.0.1}/include/SDL_blendmode.h (100%) rename Externals/{SDL2-2.0.0 => SDL2-2.0.1}/include/SDL_clipboard.h (100%) rename Externals/{SDL2-2.0.0 => SDL2-2.0.1}/include/SDL_config.h (96%) rename Externals/{SDL2-2.0.0 => SDL2-2.0.1}/include/SDL_cpuinfo.h (96%) rename Externals/{SDL2-2.0.0 => SDL2-2.0.1}/include/SDL_endian.h (99%) rename Externals/{SDL2-2.0.0 => SDL2-2.0.1}/include/SDL_error.h (97%) rename Externals/{SDL2-2.0.0 => SDL2-2.0.1}/include/SDL_events.h (99%) create mode 100644 Externals/SDL2-2.0.1/include/SDL_filesystem.h rename Externals/{SDL2-2.0.0 => SDL2-2.0.1}/include/SDL_gamecontroller.h (100%) rename Externals/{SDL2-2.0.0 => SDL2-2.0.1}/include/SDL_gesture.h (100%) rename Externals/{SDL2-2.0.0 => SDL2-2.0.1}/include/SDL_haptic.h (99%) rename Externals/{SDL2-2.0.0 => SDL2-2.0.1}/include/SDL_hints.h (95%) rename Externals/{SDL2-2.0.0 => SDL2-2.0.1}/include/SDL_joystick.h (99%) rename Externals/{SDL2-2.0.0 => SDL2-2.0.1}/include/SDL_keyboard.h (100%) rename Externals/{SDL2-2.0.0 => SDL2-2.0.1}/include/SDL_keycode.h (100%) rename Externals/{SDL2-2.0.0 => SDL2-2.0.1}/include/SDL_loadso.h (100%) rename Externals/{SDL2-2.0.0 => SDL2-2.0.1}/include/SDL_log.h (100%) rename Externals/{SDL2-2.0.0 => SDL2-2.0.1}/include/SDL_main.h (99%) rename Externals/{SDL2-2.0.0 => SDL2-2.0.1}/include/SDL_messagebox.h (100%) rename Externals/{SDL2-2.0.0 => SDL2-2.0.1}/include/SDL_mouse.h (100%) rename Externals/{SDL2-2.0.0 => SDL2-2.0.1}/include/SDL_mutex.h (95%) rename Externals/{SDL2-2.0.0 => SDL2-2.0.1}/include/SDL_name.h (100%) rename Externals/{SDL2-2.0.0 => SDL2-2.0.1}/include/SDL_opengl.h (100%) rename Externals/{SDL2-2.0.0 => SDL2-2.0.1}/include/SDL_opengles.h (100%) rename Externals/{SDL2-2.0.0 => SDL2-2.0.1}/include/SDL_opengles2.h (100%) rename Externals/{SDL2-2.0.0 => SDL2-2.0.1}/include/SDL_pixels.h (99%) rename Externals/{SDL2-2.0.0 => SDL2-2.0.1}/include/SDL_platform.h (96%) rename Externals/{SDL2-2.0.0 => SDL2-2.0.1}/include/SDL_power.h (100%) rename Externals/{SDL2-2.0.0 => SDL2-2.0.1}/include/SDL_quit.h (100%) rename Externals/{SDL2-2.0.0 => SDL2-2.0.1}/include/SDL_rect.h (99%) rename Externals/{SDL2-2.0.0 => SDL2-2.0.1}/include/SDL_render.h (95%) create mode 100644 Externals/SDL2-2.0.1/include/SDL_revision.h rename Externals/{SDL2-2.0.0 => SDL2-2.0.1}/include/SDL_rwops.h (97%) rename Externals/{SDL2-2.0.0 => SDL2-2.0.1}/include/SDL_scancode.h (99%) rename Externals/{SDL2-2.0.0 => SDL2-2.0.1}/include/SDL_shape.h (100%) rename Externals/{SDL2-2.0.0 => SDL2-2.0.1}/include/SDL_stdinc.h (99%) rename Externals/{SDL2-2.0.0 => SDL2-2.0.1}/include/SDL_surface.h (99%) rename Externals/{SDL2-2.0.0 => SDL2-2.0.1}/include/SDL_system.h (82%) rename Externals/{SDL2-2.0.0 => SDL2-2.0.1}/include/SDL_syswm.h (100%) rename Externals/{SDL2-2.0.0 => SDL2-2.0.1}/include/SDL_test.h (100%) rename Externals/{SDL2-2.0.0 => SDL2-2.0.1}/include/SDL_test_assert.h (100%) rename Externals/{SDL2-2.0.0 => SDL2-2.0.1}/include/SDL_test_common.h (99%) rename Externals/{SDL2-2.0.0 => SDL2-2.0.1}/include/SDL_test_compare.h (100%) rename Externals/{SDL2-2.0.0 => SDL2-2.0.1}/include/SDL_test_crc32.h (100%) rename Externals/{SDL2-2.0.0 => SDL2-2.0.1}/include/SDL_test_font.h (100%) rename Externals/{SDL2-2.0.0 => SDL2-2.0.1}/include/SDL_test_fuzzer.h (100%) rename Externals/{SDL2-2.0.0 => SDL2-2.0.1}/include/SDL_test_harness.h (78%) rename Externals/{SDL2-2.0.0 => SDL2-2.0.1}/include/SDL_test_images.h (100%) rename Externals/{SDL2-2.0.0 => SDL2-2.0.1}/include/SDL_test_log.h (100%) rename Externals/{SDL2-2.0.0 => SDL2-2.0.1}/include/SDL_test_md5.h (100%) rename Externals/{SDL2-2.0.0 => SDL2-2.0.1}/include/SDL_test_random.h (100%) rename Externals/{SDL2-2.0.0 => SDL2-2.0.1}/include/SDL_thread.h (97%) rename Externals/{SDL2-2.0.0 => SDL2-2.0.1}/include/SDL_timer.h (89%) rename Externals/{SDL2-2.0.0 => SDL2-2.0.1}/include/SDL_touch.h (100%) rename Externals/{SDL2-2.0.0 => SDL2-2.0.1}/include/SDL_types.h (100%) rename Externals/{SDL2-2.0.0 => SDL2-2.0.1}/include/SDL_version.h (99%) rename Externals/{SDL2-2.0.0 => SDL2-2.0.1}/include/SDL_video.h (95%) rename Externals/{SDL2-2.0.0 => SDL2-2.0.1}/include/begin_code.h (75%) rename Externals/{SDL2-2.0.0 => SDL2-2.0.1}/include/close_code.h (100%) rename Externals/{SDL2-2.0.0 => SDL2-2.0.1}/lib/Win32/SDL2.dll (53%) create mode 100644 Externals/SDL2-2.0.1/lib/Win32/SDL2.lib rename Externals/{SDL2-2.0.0 => SDL2-2.0.1}/lib/x64/SDL2.dll (58%) create mode 100644 Externals/SDL2-2.0.1/lib/x64/SDL2.lib diff --git a/Externals/SDL2-2.0.0/WhatsNew.txt b/Externals/SDL2-2.0.0/WhatsNew.txt deleted file mode 100644 index a54ab0abbb..0000000000 --- a/Externals/SDL2-2.0.0/WhatsNew.txt +++ /dev/null @@ -1,3 +0,0 @@ - -This is a list of API changes in SDL's version history. - diff --git a/Externals/SDL2-2.0.0/include/SDL_revision.h b/Externals/SDL2-2.0.0/include/SDL_revision.h deleted file mode 100644 index 2d57530ee6..0000000000 --- a/Externals/SDL2-2.0.0/include/SDL_revision.h +++ /dev/null @@ -1,2 +0,0 @@ -#define SDL_REVISION "hg-7633:d6a8fa507a45" -#define SDL_REVISION_NUMBER 7633 diff --git a/Externals/SDL2-2.0.0/lib/Win32/SDL2.lib b/Externals/SDL2-2.0.0/lib/Win32/SDL2.lib deleted file mode 100644 index 0a4ffb10f45279a045e3859b47c56fa2385d34d2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 111002 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 diff --git a/Externals/SDL2-2.0.0/lib/x64/SDL2.lib b/Externals/SDL2-2.0.0/lib/x64/SDL2.lib deleted file mode 100644 index 091b8112df633291eb68ba1b01d9944ea59c8305..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 108428 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 xH3zG`g%jW6{%nvob~01q@->ra$= 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 @@ -181,6 +184,9 @@ typedef unsigned int uintptr_t; /* 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 diff --git a/Externals/SDL2-2.0.0/include/SDL_cpuinfo.h b/Externals/SDL2-2.0.1/include/SDL_cpuinfo.h similarity index 96% rename from Externals/SDL2-2.0.0/include/SDL_cpuinfo.h rename to Externals/SDL2-2.0.1/include/SDL_cpuinfo.h index dde3074f03..6d72bbb81c 100644 --- a/Externals/SDL2-2.0.0/include/SDL_cpuinfo.h +++ b/Externals/SDL2-2.0.1/include/SDL_cpuinfo.h @@ -134,6 +134,11 @@ extern DECLSPEC SDL_bool SDLCALL SDL_HasSSE41(void); */ 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 diff --git a/Externals/SDL2-2.0.0/include/SDL_endian.h b/Externals/SDL2-2.0.1/include/SDL_endian.h similarity index 99% rename from Externals/SDL2-2.0.0/include/SDL_endian.h rename to Externals/SDL2-2.0.1/include/SDL_endian.h index c58edcca02..3450316c0a 100644 --- a/Externals/SDL2-2.0.0/include/SDL_endian.h +++ b/Externals/SDL2-2.0.1/include/SDL_endian.h @@ -33,10 +33,10 @@ /** * \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__ @@ -206,7 +206,7 @@ SDL_SwapFloat(float x) * \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) @@ -226,7 +226,7 @@ SDL_SwapFloat(float x) #define SDL_SwapBE64(X) (X) #define SDL_SwapFloatBE(X) (X) #endif -/*@}*//*Swap to native*/ +/* @} *//* Swap to native */ /* Ends C function definitions when using C++ */ #ifdef __cplusplus diff --git a/Externals/SDL2-2.0.0/include/SDL_error.h b/Externals/SDL2-2.0.1/include/SDL_error.h similarity index 97% rename from Externals/SDL2-2.0.0/include/SDL_error.h rename to Externals/SDL2-2.0.1/include/SDL_error.h index 229b268027..2b8bb4165f 100644 --- a/Externals/SDL2-2.0.0/include/SDL_error.h +++ b/Externals/SDL2-2.0.1/include/SDL_error.h @@ -48,7 +48,7 @@ extern DECLSPEC void SDLCALL SDL_ClearError(void); * \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)) @@ -63,7 +63,7 @@ typedef enum } SDL_errorcode; /* SDL_Error() unconditionally returns -1. */ extern DECLSPEC int SDLCALL SDL_Error(SDL_errorcode code); -/*@}*//*Internal error functions*/ +/* @} *//* Internal error functions */ /* Ends C function definitions when using C++ */ #ifdef __cplusplus diff --git a/Externals/SDL2-2.0.0/include/SDL_events.h b/Externals/SDL2-2.0.1/include/SDL_events.h similarity index 99% rename from Externals/SDL2-2.0.0/include/SDL_events.h rename to Externals/SDL2-2.0.1/include/SDL_events.h index b997b5ec8b..c08903073a 100644 --- a/Externals/SDL2-2.0.0/include/SDL_events.h +++ b/Externals/SDL2-2.0.1/include/SDL_events.h @@ -541,7 +541,7 @@ typedef union SDL_Event */ extern DECLSPEC void SDLCALL SDL_PumpEvents(void); -/*@{*/ +/* @{ */ typedef enum { SDL_ADDEVENT, @@ -570,7 +570,7 @@ typedef enum 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. @@ -681,7 +681,7 @@ extern DECLSPEC void SDLCALL SDL_DelEventWatch(SDL_EventFilter filter, extern DECLSPEC void SDLCALL SDL_FilterEvents(SDL_EventFilter filter, void *userdata); -/*@{*/ +/* @{ */ #define SDL_QUERY -1 #define SDL_IGNORE 0 #define SDL_DISABLE 0 @@ -697,7 +697,7 @@ extern DECLSPEC void SDLCALL SDL_FilterEvents(SDL_EventFilter filter, * 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) /** 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.0/include/SDL_gamecontroller.h b/Externals/SDL2-2.0.1/include/SDL_gamecontroller.h similarity index 100% rename from Externals/SDL2-2.0.0/include/SDL_gamecontroller.h rename to Externals/SDL2-2.0.1/include/SDL_gamecontroller.h diff --git a/Externals/SDL2-2.0.0/include/SDL_gesture.h b/Externals/SDL2-2.0.1/include/SDL_gesture.h similarity index 100% rename from Externals/SDL2-2.0.0/include/SDL_gesture.h rename to Externals/SDL2-2.0.1/include/SDL_gesture.h diff --git a/Externals/SDL2-2.0.0/include/SDL_haptic.h b/Externals/SDL2-2.0.1/include/SDL_haptic.h similarity index 99% rename from Externals/SDL2-2.0.0/include/SDL_haptic.h rename to Externals/SDL2-2.0.1/include/SDL_haptic.h index da555c9c3c..a029eb9969 100644 --- a/Externals/SDL2-2.0.0/include/SDL_haptic.h +++ b/Externals/SDL2-2.0.1/include/SDL_haptic.h @@ -140,12 +140,12 @@ typedef struct _SDL_Haptic SDL_Haptic; * * Different haptic features a device can have. */ -/*@{*/ +/* @{ */ /** * \name Haptic effects */ -/*@{*/ +/* @{ */ /** * \brief Constant effect supported. @@ -177,7 +177,7 @@ typedef struct _SDL_Haptic SDL_Haptic; #define SDL_HAPTIC_LEFTRIGHT (1<<2) /* !!! FIXME: put this back when we have more bits in 2.1 */ -/*#define SDL_HAPTIC_SQUARE (1<<2)*/ +/* #define SDL_HAPTIC_SQUARE (1<<2) */ /** * \brief Triangle wave effect supported. @@ -262,7 +262,7 @@ typedef struct _SDL_Haptic SDL_Haptic; */ #define SDL_HAPTIC_CUSTOM (1<<11) -/*@}*//*Haptic effects*/ +/* @} *//* Haptic effects */ /* These last few are features the device has, not effects */ @@ -305,7 +305,7 @@ typedef struct _SDL_Haptic SDL_Haptic; /** * \name Direction encodings */ -/*@{*/ +/* @{ */ /** * \brief Uses polar coordinates for the direction. @@ -328,9 +328,9 @@ typedef struct _SDL_Haptic SDL_Haptic; */ #define SDL_HAPTIC_SPHERICAL 2 -/*@}*//*Direction encodings*/ +/* @} *//* Direction encodings */ -/*@}*//*Haptic features*/ +/* @} *//* Haptic features */ /* * Misc defines. diff --git a/Externals/SDL2-2.0.0/include/SDL_hints.h b/Externals/SDL2-2.0.1/include/SDL_hints.h similarity index 95% rename from Externals/SDL2-2.0.0/include/SDL_hints.h rename to Externals/SDL2-2.0.1/include/SDL_hints.h index 74b63ee099..dac928e075 100644 --- a/Externals/SDL2-2.0.0/include/SDL_hints.h +++ b/Externals/SDL2-2.0.1/include/SDL_hints.h @@ -94,6 +94,17 @@ extern "C" { */ #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 * @@ -257,6 +268,11 @@ extern "C" { #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 diff --git a/Externals/SDL2-2.0.0/include/SDL_joystick.h b/Externals/SDL2-2.0.1/include/SDL_joystick.h similarity index 99% rename from Externals/SDL2-2.0.0/include/SDL_joystick.h rename to Externals/SDL2-2.0.1/include/SDL_joystick.h index 2667403483..b0e4b5dab8 100644 --- a/Externals/SDL2-2.0.0/include/SDL_joystick.h +++ b/Externals/SDL2-2.0.1/include/SDL_joystick.h @@ -187,7 +187,7 @@ extern DECLSPEC Sint16 SDLCALL SDL_JoystickGetAxis(SDL_Joystick * joystick, /** * \name Hat positions */ -/*@{*/ +/* @{ */ #define SDL_HAT_CENTERED 0x00 #define SDL_HAT_UP 0x01 #define SDL_HAT_RIGHT 0x02 @@ -197,7 +197,7 @@ extern DECLSPEC Sint16 SDLCALL SDL_JoystickGetAxis(SDL_Joystick * joystick, #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. diff --git a/Externals/SDL2-2.0.0/include/SDL_keyboard.h b/Externals/SDL2-2.0.1/include/SDL_keyboard.h similarity index 100% rename from Externals/SDL2-2.0.0/include/SDL_keyboard.h rename to Externals/SDL2-2.0.1/include/SDL_keyboard.h diff --git a/Externals/SDL2-2.0.0/include/SDL_keycode.h b/Externals/SDL2-2.0.1/include/SDL_keycode.h similarity index 100% rename from Externals/SDL2-2.0.0/include/SDL_keycode.h rename to Externals/SDL2-2.0.1/include/SDL_keycode.h diff --git a/Externals/SDL2-2.0.0/include/SDL_loadso.h b/Externals/SDL2-2.0.1/include/SDL_loadso.h similarity index 100% rename from Externals/SDL2-2.0.0/include/SDL_loadso.h rename to Externals/SDL2-2.0.1/include/SDL_loadso.h diff --git a/Externals/SDL2-2.0.0/include/SDL_log.h b/Externals/SDL2-2.0.1/include/SDL_log.h similarity index 100% rename from Externals/SDL2-2.0.0/include/SDL_log.h rename to Externals/SDL2-2.0.1/include/SDL_log.h diff --git a/Externals/SDL2-2.0.0/include/SDL_main.h b/Externals/SDL2-2.0.1/include/SDL_main.h similarity index 99% rename from Externals/SDL2-2.0.0/include/SDL_main.h rename to Externals/SDL2-2.0.1/include/SDL_main.h index bbb7e859b3..b7e4a10e5e 100644 --- a/Externals/SDL2-2.0.0/include/SDL_main.h +++ b/Externals/SDL2-2.0.1/include/SDL_main.h @@ -94,7 +94,7 @@ extern C_LINKAGE int SDL_main(int argc, char *argv[]); 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. * diff --git a/Externals/SDL2-2.0.0/include/SDL_messagebox.h b/Externals/SDL2-2.0.1/include/SDL_messagebox.h similarity index 100% rename from Externals/SDL2-2.0.0/include/SDL_messagebox.h rename to Externals/SDL2-2.0.1/include/SDL_messagebox.h diff --git a/Externals/SDL2-2.0.0/include/SDL_mouse.h b/Externals/SDL2-2.0.1/include/SDL_mouse.h similarity index 100% rename from Externals/SDL2-2.0.0/include/SDL_mouse.h rename to Externals/SDL2-2.0.1/include/SDL_mouse.h diff --git a/Externals/SDL2-2.0.0/include/SDL_mutex.h b/Externals/SDL2-2.0.1/include/SDL_mutex.h similarity index 95% rename from Externals/SDL2-2.0.0/include/SDL_mutex.h rename to Externals/SDL2-2.0.1/include/SDL_mutex.h index 3efc4a8901..2b5df0ec33 100644 --- a/Externals/SDL2-2.0.0/include/SDL_mutex.h +++ b/Externals/SDL2-2.0.1/include/SDL_mutex.h @@ -52,9 +52,9 @@ extern "C" { /** * \name Mutex functions */ -/*@{*/ +/* @{ */ -/* The SDL mutex structure, defined in SDL_mutex.c */ +/* The SDL mutex structure, defined in SDL_sysmutex.c */ struct SDL_mutex; typedef struct SDL_mutex SDL_mutex; @@ -94,15 +94,15 @@ extern DECLSPEC int SDLCALL SDL_UnlockMutex(SDL_mutex * mutex); */ extern DECLSPEC void SDLCALL SDL_DestroyMutex(SDL_mutex * mutex); -/*@}*//*Mutex functions*/ +/* @} *//* Mutex functions */ /** * \name Semaphore functions */ -/*@{*/ +/* @{ */ -/* The SDL semaphore structure, defined in SDL_sem.c */ +/* The SDL semaphore structure, defined in SDL_syssem.c */ struct SDL_semaphore; typedef struct SDL_semaphore SDL_sem; @@ -154,15 +154,15 @@ extern DECLSPEC int SDLCALL SDL_SemPost(SDL_sem * sem); */ extern DECLSPEC Uint32 SDLCALL SDL_SemValue(SDL_sem * sem); -/*@}*//*Semaphore functions*/ +/* @} *//* Semaphore functions */ /** * \name Condition variable functions */ -/*@{*/ +/* @{ */ -/* The SDL condition variable structure, defined in SDL_cond.c */ +/* The SDL condition variable structure, defined in SDL_syscond.c */ struct SDL_cond; typedef struct SDL_cond SDL_cond; @@ -237,7 +237,7 @@ extern DECLSPEC int SDLCALL SDL_CondWait(SDL_cond * cond, SDL_mutex * mutex); extern DECLSPEC int SDLCALL SDL_CondWaitTimeout(SDL_cond * cond, SDL_mutex * mutex, Uint32 ms); -/*@}*//*Condition variable functions*/ +/* @} *//* Condition variable functions */ /* Ends C function definitions when using C++ */ diff --git a/Externals/SDL2-2.0.0/include/SDL_name.h b/Externals/SDL2-2.0.1/include/SDL_name.h similarity index 100% rename from Externals/SDL2-2.0.0/include/SDL_name.h rename to Externals/SDL2-2.0.1/include/SDL_name.h diff --git a/Externals/SDL2-2.0.0/include/SDL_opengl.h b/Externals/SDL2-2.0.1/include/SDL_opengl.h similarity index 100% rename from Externals/SDL2-2.0.0/include/SDL_opengl.h rename to Externals/SDL2-2.0.1/include/SDL_opengl.h diff --git a/Externals/SDL2-2.0.0/include/SDL_opengles.h b/Externals/SDL2-2.0.1/include/SDL_opengles.h similarity index 100% rename from Externals/SDL2-2.0.0/include/SDL_opengles.h rename to Externals/SDL2-2.0.1/include/SDL_opengles.h diff --git a/Externals/SDL2-2.0.0/include/SDL_opengles2.h b/Externals/SDL2-2.0.1/include/SDL_opengles2.h similarity index 100% rename from Externals/SDL2-2.0.0/include/SDL_opengles2.h rename to Externals/SDL2-2.0.1/include/SDL_opengles2.h diff --git a/Externals/SDL2-2.0.0/include/SDL_pixels.h b/Externals/SDL2-2.0.1/include/SDL_pixels.h similarity index 99% rename from Externals/SDL2-2.0.0/include/SDL_pixels.h rename to Externals/SDL2-2.0.1/include/SDL_pixels.h index 5e17cba53d..99fcd9aac1 100644 --- a/Externals/SDL2-2.0.0/include/SDL_pixels.h +++ b/Externals/SDL2-2.0.1/include/SDL_pixels.h @@ -39,10 +39,10 @@ extern "C" { * * These define alpha as the opacity of a surface. */ -/*@{*/ +/* @{ */ #define SDL_ALPHA_OPAQUE 255 #define SDL_ALPHA_TRANSPARENT 0 -/*@}*/ +/* @} */ /** Pixel type. */ enum diff --git a/Externals/SDL2-2.0.0/include/SDL_platform.h b/Externals/SDL2-2.0.1/include/SDL_platform.h similarity index 96% rename from Externals/SDL2-2.0.0/include/SDL_platform.h rename to Externals/SDL2-2.0.1/include/SDL_platform.h index 1e8e0d9f42..a40c41e265 100644 --- a/Externals/SDL2-2.0.0/include/SDL_platform.h +++ b/Externals/SDL2-2.0.1/include/SDL_platform.h @@ -66,7 +66,7 @@ #endif #if defined(ANDROID) #undef __ANDROID__ -#undef __LINUX__ /*do we need to do this?*/ +#undef __LINUX__ /* do we need to do this? */ #define __ANDROID__ 1 #endif @@ -121,8 +121,12 @@ #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 +#define __WIN32__ 1 #endif #if defined(__PSP__) #undef __PSP__ diff --git a/Externals/SDL2-2.0.0/include/SDL_power.h b/Externals/SDL2-2.0.1/include/SDL_power.h similarity index 100% rename from Externals/SDL2-2.0.0/include/SDL_power.h rename to Externals/SDL2-2.0.1/include/SDL_power.h diff --git a/Externals/SDL2-2.0.0/include/SDL_quit.h b/Externals/SDL2-2.0.1/include/SDL_quit.h similarity index 100% rename from Externals/SDL2-2.0.0/include/SDL_quit.h rename to Externals/SDL2-2.0.1/include/SDL_quit.h diff --git a/Externals/SDL2-2.0.0/include/SDL_rect.h b/Externals/SDL2-2.0.1/include/SDL_rect.h similarity index 99% rename from Externals/SDL2-2.0.0/include/SDL_rect.h rename to Externals/SDL2-2.0.1/include/SDL_rect.h index c8af7c197a..7132e1b440 100644 --- a/Externals/SDL2-2.0.0/include/SDL_rect.h +++ b/Externals/SDL2-2.0.1/include/SDL_rect.h @@ -44,7 +44,7 @@ extern "C" { * * \sa SDL_EnclosePoints */ -typedef struct +typedef struct SDL_Point { int x; int y; diff --git a/Externals/SDL2-2.0.0/include/SDL_render.h b/Externals/SDL2-2.0.1/include/SDL_render.h similarity index 95% rename from Externals/SDL2-2.0.0/include/SDL_render.h rename to Externals/SDL2-2.0.1/include/SDL_render.h index 1e24619f01..a765dc79f0 100644 --- a/Externals/SDL2-2.0.0/include/SDL_render.h +++ b/Externals/SDL2-2.0.1/include/SDL_render.h @@ -381,6 +381,31 @@ 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. * 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.0/include/SDL_rwops.h b/Externals/SDL2-2.0.1/include/SDL_rwops.h similarity index 97% rename from Externals/SDL2-2.0.0/include/SDL_rwops.h rename to Externals/SDL2-2.0.1/include/SDL_rwops.h index 0461ff7829..d257442382 100644 --- a/Externals/SDL2-2.0.0/include/SDL_rwops.h +++ b/Externals/SDL2-2.0.1/include/SDL_rwops.h @@ -148,7 +148,7 @@ typedef struct SDL_RWops * * Functions to create SDL_RWops structures from various data streams. */ -/*@{*/ +/* @{ */ extern DECLSPEC SDL_RWops *SDLCALL SDL_RWFromFile(const char *file, const char *mode); @@ -165,7 +165,7 @@ 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*/ +/* @} *//* RWFrom functions */ extern DECLSPEC SDL_RWops *SDLCALL SDL_AllocRW(void); @@ -180,14 +180,14 @@ extern DECLSPEC void SDLCALL SDL_FreeRW(SDL_RWops * area); * * 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*/ +/* @} *//* Read/write macros */ /** @@ -195,7 +195,7 @@ extern DECLSPEC void SDLCALL SDL_FreeRW(SDL_RWops * area); * * 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); @@ -203,14 +203,14 @@ 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*/ +/* @} *//* 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); @@ -218,7 +218,7 @@ 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*/ +/* @} *//* Write endian functions */ /* Ends C function definitions when using C++ */ diff --git a/Externals/SDL2-2.0.0/include/SDL_scancode.h b/Externals/SDL2-2.0.1/include/SDL_scancode.h similarity index 99% rename from Externals/SDL2-2.0.0/include/SDL_scancode.h rename to Externals/SDL2-2.0.1/include/SDL_scancode.h index d3f8748116..00b47a3b80 100644 --- a/Externals/SDL2-2.0.0/include/SDL_scancode.h +++ b/Externals/SDL2-2.0.1/include/SDL_scancode.h @@ -49,7 +49,7 @@ typedef enum * * These values are from usage page 0x07 (USB keyboard page). */ - /*@{*/ + /* @{ */ SDL_SCANCODE_A = 4, SDL_SCANCODE_B = 5, @@ -339,14 +339,14 @@ typedef enum * special KMOD_MODE for it I'm adding it here */ - /*@}*//*Usage page 0x07*/ + /* @} *//* 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, @@ -366,14 +366,14 @@ typedef enum SDL_SCANCODE_AC_REFRESH = 273, SDL_SCANCODE_AC_BOOKMARKS = 274, - /*@}*//*Usage page 0x0C*/ + /* @} *//* Usage page 0x0C */ /** * \name Walther keys * * These are values that Christian Walther added (for mac keyboard?). */ - /*@{*/ + /* @{ */ SDL_SCANCODE_BRIGHTNESSDOWN = 275, SDL_SCANCODE_BRIGHTNESSUP = 276, @@ -388,7 +388,7 @@ typedef enum SDL_SCANCODE_APP1 = 283, SDL_SCANCODE_APP2 = 284, - /*@}*//*Walther keys*/ + /* @} *//* Walther keys */ /* Add any other keys here. */ diff --git a/Externals/SDL2-2.0.0/include/SDL_shape.h b/Externals/SDL2-2.0.1/include/SDL_shape.h similarity index 100% rename from Externals/SDL2-2.0.0/include/SDL_shape.h rename to Externals/SDL2-2.0.1/include/SDL_shape.h diff --git a/Externals/SDL2-2.0.0/include/SDL_stdinc.h b/Externals/SDL2-2.0.1/include/SDL_stdinc.h similarity index 99% rename from Externals/SDL2-2.0.0/include/SDL_stdinc.h rename to Externals/SDL2-2.0.1/include/SDL_stdinc.h index 7fa9c1049f..8f17d5519a 100644 --- a/Externals/SDL2-2.0.0/include/SDL_stdinc.h +++ b/Externals/SDL2-2.0.1/include/SDL_stdinc.h @@ -89,7 +89,7 @@ * 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) @@ -99,7 +99,7 @@ #define SDL_static_cast(type, expression) ((type)(expression)) #define SDL_const_cast(type, expression) ((type)(expression)) #endif -/*@}*//*Cast operators*/ +/* @} *//* Cast operators */ /* Define a four character code as a Uint32 */ #define SDL_FOURCC(A, B, C, D) \ @@ -111,7 +111,7 @@ /** * \name Basic data types */ -/*@{*/ +/* @{ */ typedef enum { @@ -153,7 +153,7 @@ typedef int64_t Sint64; */ typedef uint64_t Uint64; -/*@}*//*Basic data types*/ +/* @} *//* Basic data types */ #define SDL_COMPILE_TIME_ASSERT(name, x) \ diff --git a/Externals/SDL2-2.0.0/include/SDL_surface.h b/Externals/SDL2-2.0.1/include/SDL_surface.h similarity index 99% rename from Externals/SDL2-2.0.0/include/SDL_surface.h rename to Externals/SDL2-2.0.1/include/SDL_surface.h index fece797437..e18153a694 100644 --- a/Externals/SDL2-2.0.0/include/SDL_surface.h +++ b/Externals/SDL2-2.0.1/include/SDL_surface.h @@ -48,12 +48,12 @@ extern "C" { * \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*/ +/* @} *//* Surface flags */ /** * Evaluates to true if the surface needs to be locked before access. @@ -357,7 +357,7 @@ extern DECLSPEC void SDLCALL SDL_GetClipRect(SDL_Surface * surface, * surface. */ extern DECLSPEC SDL_Surface *SDLCALL SDL_ConvertSurface - (SDL_Surface * src, SDL_PixelFormat * fmt, Uint32 flags); + (SDL_Surface * src, const SDL_PixelFormat * fmt, Uint32 flags); extern DECLSPEC SDL_Surface *SDLCALL SDL_ConvertSurfaceFormat (SDL_Surface * src, Uint32 pixel_format, Uint32 flags); diff --git a/Externals/SDL2-2.0.0/include/SDL_system.h b/Externals/SDL2-2.0.1/include/SDL_system.h similarity index 82% rename from Externals/SDL2-2.0.0/include/SDL_system.h rename to Externals/SDL2-2.0.1/include/SDL_system.h index 26e9eaa0a9..9af2a4c2ce 100644 --- a/Externals/SDL2-2.0.0/include/SDL_system.h +++ b/Externals/SDL2-2.0.1/include/SDL_system.h @@ -29,11 +29,9 @@ #define _SDL_system_h #include "SDL_stdinc.h" - -#if defined(__IPHONEOS__) && __IPHONEOS__ -#include "SDL_video.h" #include "SDL_keyboard.h" -#endif +#include "SDL_render.h" +#include "SDL_video.h" #include "begin_code.h" /* Set up for C function definitions, even when using C++ */ @@ -41,6 +39,25 @@ 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__ @@ -93,7 +110,6 @@ extern DECLSPEC const char * SDLCALL SDL_AndroidGetExternalStoragePath(); #endif /* __ANDROID__ */ - /* Ends C function definitions when using C++ */ #ifdef __cplusplus } diff --git a/Externals/SDL2-2.0.0/include/SDL_syswm.h b/Externals/SDL2-2.0.1/include/SDL_syswm.h similarity index 100% rename from Externals/SDL2-2.0.0/include/SDL_syswm.h rename to Externals/SDL2-2.0.1/include/SDL_syswm.h diff --git a/Externals/SDL2-2.0.0/include/SDL_test.h b/Externals/SDL2-2.0.1/include/SDL_test.h similarity index 100% rename from Externals/SDL2-2.0.0/include/SDL_test.h rename to Externals/SDL2-2.0.1/include/SDL_test.h diff --git a/Externals/SDL2-2.0.0/include/SDL_test_assert.h b/Externals/SDL2-2.0.1/include/SDL_test_assert.h similarity index 100% rename from Externals/SDL2-2.0.0/include/SDL_test_assert.h rename to Externals/SDL2-2.0.1/include/SDL_test_assert.h diff --git a/Externals/SDL2-2.0.0/include/SDL_test_common.h b/Externals/SDL2-2.0.1/include/SDL_test_common.h similarity index 99% rename from Externals/SDL2-2.0.0/include/SDL_test_common.h rename to Externals/SDL2-2.0.1/include/SDL_test_common.h index f07acf7c15..57f31146e5 100644 --- a/Externals/SDL2-2.0.0/include/SDL_test_common.h +++ b/Externals/SDL2-2.0.1/include/SDL_test_common.h @@ -108,6 +108,7 @@ typedef struct int gl_major_version; int gl_minor_version; int gl_debug; + int gl_profile_mask; } SDLTest_CommonState; #include "begin_code.h" diff --git a/Externals/SDL2-2.0.0/include/SDL_test_compare.h b/Externals/SDL2-2.0.1/include/SDL_test_compare.h similarity index 100% rename from Externals/SDL2-2.0.0/include/SDL_test_compare.h rename to Externals/SDL2-2.0.1/include/SDL_test_compare.h diff --git a/Externals/SDL2-2.0.0/include/SDL_test_crc32.h b/Externals/SDL2-2.0.1/include/SDL_test_crc32.h similarity index 100% rename from Externals/SDL2-2.0.0/include/SDL_test_crc32.h rename to Externals/SDL2-2.0.1/include/SDL_test_crc32.h diff --git a/Externals/SDL2-2.0.0/include/SDL_test_font.h b/Externals/SDL2-2.0.1/include/SDL_test_font.h similarity index 100% rename from Externals/SDL2-2.0.0/include/SDL_test_font.h rename to Externals/SDL2-2.0.1/include/SDL_test_font.h diff --git a/Externals/SDL2-2.0.0/include/SDL_test_fuzzer.h b/Externals/SDL2-2.0.1/include/SDL_test_fuzzer.h similarity index 100% rename from Externals/SDL2-2.0.0/include/SDL_test_fuzzer.h rename to Externals/SDL2-2.0.1/include/SDL_test_fuzzer.h diff --git a/Externals/SDL2-2.0.0/include/SDL_test_harness.h b/Externals/SDL2-2.0.1/include/SDL_test_harness.h similarity index 78% rename from Externals/SDL2-2.0.0/include/SDL_test_harness.h rename to Externals/SDL2-2.0.1/include/SDL_test_harness.h index d2da04f1ed..935038e904 100644 --- a/Externals/SDL2-2.0.0/include/SDL_test_harness.h +++ b/Externals/SDL2-2.0.1/include/SDL_test_harness.h @@ -43,43 +43,43 @@ extern "C" { #endif -//! Definitions for test case structures +/* ! 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 +/* ! 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 +/* ! 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) +/* !< 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 +/* !< 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) +/* !< 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 */ + /* !< Func2Stress */ SDLTest_TestCaseFp testCase; - /*!< Short name (or function name) "Func2Stress" */ + /* !< Short name (or function name) "Func2Stress" */ char *name; - /*!< Long name or full description "This test pushes func2() to the limit." */ + /* !< 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) */ + /* !< Set to TEST_ENABLED or TEST_DISABLED (test won't be run) */ int enabled; } SDLTest_TestCaseReference; @@ -87,13 +87,13 @@ typedef struct SDLTest_TestCaseReference { * Holds information about a test suite (multiple test cases). */ typedef struct SDLTest_TestSuiteReference { - /*!< "PlatformSuite" */ + /* !< "PlatformSuite" */ char *name; - /*!< The function that is run before each test. NULL skips. */ + /* !< 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. */ + /* !< 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. */ + /* !< The function that is run after each test. NULL skips. */ SDLTest_TestCaseTearDownFp testTearDown; } SDLTest_TestSuiteReference; diff --git a/Externals/SDL2-2.0.0/include/SDL_test_images.h b/Externals/SDL2-2.0.1/include/SDL_test_images.h similarity index 100% rename from Externals/SDL2-2.0.0/include/SDL_test_images.h rename to Externals/SDL2-2.0.1/include/SDL_test_images.h diff --git a/Externals/SDL2-2.0.0/include/SDL_test_log.h b/Externals/SDL2-2.0.1/include/SDL_test_log.h similarity index 100% rename from Externals/SDL2-2.0.0/include/SDL_test_log.h rename to Externals/SDL2-2.0.1/include/SDL_test_log.h diff --git a/Externals/SDL2-2.0.0/include/SDL_test_md5.h b/Externals/SDL2-2.0.1/include/SDL_test_md5.h similarity index 100% rename from Externals/SDL2-2.0.0/include/SDL_test_md5.h rename to Externals/SDL2-2.0.1/include/SDL_test_md5.h diff --git a/Externals/SDL2-2.0.0/include/SDL_test_random.h b/Externals/SDL2-2.0.1/include/SDL_test_random.h similarity index 100% rename from Externals/SDL2-2.0.0/include/SDL_test_random.h rename to Externals/SDL2-2.0.1/include/SDL_test_random.h diff --git a/Externals/SDL2-2.0.0/include/SDL_thread.h b/Externals/SDL2-2.0.1/include/SDL_thread.h similarity index 97% rename from Externals/SDL2-2.0.0/include/SDL_thread.h rename to Externals/SDL2-2.0.1/include/SDL_thread.h index c878c3ab9c..f248c3d69c 100644 --- a/Externals/SDL2-2.0.0/include/SDL_thread.h +++ b/Externals/SDL2-2.0.1/include/SDL_thread.h @@ -51,9 +51,10 @@ typedef unsigned long SDL_threadID; /* Thread local storage ID, 0 is the invalid ID */ typedef unsigned int SDL_TLSID; -/* The SDL thread priority +/** + * The SDL thread priority. * - * Note: On many systems you require special privileges to set high priority. + * \note On many systems you require special privileges to set high priority. */ typedef enum { SDL_THREAD_PRIORITY_LOW, @@ -61,8 +62,9 @@ typedef enum { SDL_THREAD_PRIORITY_HIGH } SDL_ThreadPriority; -/* The function passed to SDL_CreateThread() - It is passed a void* user context parameter and returns an int. +/** + * 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); diff --git a/Externals/SDL2-2.0.0/include/SDL_timer.h b/Externals/SDL2-2.0.1/include/SDL_timer.h similarity index 89% rename from Externals/SDL2-2.0.0/include/SDL_timer.h rename to Externals/SDL2-2.0.1/include/SDL_timer.h index e065cf4f9f..28ab415b40 100644 --- a/Externals/SDL2-2.0.0/include/SDL_timer.h +++ b/Externals/SDL2-2.0.1/include/SDL_timer.h @@ -44,6 +44,17 @@ extern "C" { */ 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 */ diff --git a/Externals/SDL2-2.0.0/include/SDL_touch.h b/Externals/SDL2-2.0.1/include/SDL_touch.h similarity index 100% rename from Externals/SDL2-2.0.0/include/SDL_touch.h rename to Externals/SDL2-2.0.1/include/SDL_touch.h diff --git a/Externals/SDL2-2.0.0/include/SDL_types.h b/Externals/SDL2-2.0.1/include/SDL_types.h similarity index 100% rename from Externals/SDL2-2.0.0/include/SDL_types.h rename to Externals/SDL2-2.0.1/include/SDL_types.h diff --git a/Externals/SDL2-2.0.0/include/SDL_version.h b/Externals/SDL2-2.0.1/include/SDL_version.h similarity index 99% rename from Externals/SDL2-2.0.0/include/SDL_version.h rename to Externals/SDL2-2.0.1/include/SDL_version.h index a9ced804d3..dc52c85c0a 100644 --- a/Externals/SDL2-2.0.0/include/SDL_version.h +++ b/Externals/SDL2-2.0.1/include/SDL_version.h @@ -59,7 +59,7 @@ typedef struct SDL_version */ #define SDL_MAJOR_VERSION 2 #define SDL_MINOR_VERSION 0 -#define SDL_PATCHLEVEL 0 +#define SDL_PATCHLEVEL 1 /** * \brief Macro to determine SDL version program was compiled against. diff --git a/Externals/SDL2-2.0.0/include/SDL_video.h b/Externals/SDL2-2.0.1/include/SDL_video.h similarity index 95% rename from Externals/SDL2-2.0.0/include/SDL_video.h rename to Externals/SDL2-2.0.1/include/SDL_video.h index f3a9619773..4a53f9b340 100644 --- a/Externals/SDL2-2.0.0/include/SDL_video.h +++ b/Externals/SDL2-2.0.1/include/SDL_video.h @@ -107,7 +107,8 @@ typedef enum 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_FOREIGN = 0x00000800, /**< window not created by SDL */ + SDL_WINDOW_ALLOW_HIGHDPI = 0x00002000 /**< window should be created in high-DPI mode if supported */ } SDL_WindowFlags; /** @@ -186,14 +187,15 @@ typedef enum SDL_GL_CONTEXT_EGL, SDL_GL_CONTEXT_FLAGS, SDL_GL_CONTEXT_PROFILE_MASK, - SDL_GL_SHARE_WITH_CURRENT_CONTEXT + 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 + SDL_GL_CONTEXT_PROFILE_ES = 0x0004 /* GLX_CONTEXT_ES2_PROFILE_BIT_EXT */ } SDL_GLprofile; typedef enum @@ -393,10 +395,11 @@ extern DECLSPEC Uint32 SDLCALL SDL_GetWindowPixelFormat(SDL_Window * window); * \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_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. * @@ -821,7 +824,7 @@ extern DECLSPEC void SDLCALL SDL_DisableScreenSaver(void); /** * \name OpenGL support functions */ -/*@{*/ +/* @{ */ /** * \brief Dynamically load an OpenGL library. @@ -899,6 +902,24 @@ extern DECLSPEC SDL_Window* SDLCALL SDL_GL_GetCurrentWindow(void); */ 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. * @@ -939,7 +960,7 @@ extern DECLSPEC void SDLCALL SDL_GL_SwapWindow(SDL_Window * window); */ extern DECLSPEC void SDLCALL SDL_GL_DeleteContext(SDL_GLContext context); -/*@}*//*OpenGL support functions*/ +/* @} *//* OpenGL support functions */ /* Ends C function definitions when using C++ */ diff --git a/Externals/SDL2-2.0.0/include/begin_code.h b/Externals/SDL2-2.0.1/include/begin_code.h similarity index 75% rename from Externals/SDL2-2.0.0/include/begin_code.h rename to Externals/SDL2-2.0.1/include/begin_code.h index dd1f0616d0..968a540a4d 100644 --- a/Externals/SDL2-2.0.0/include/begin_code.h +++ b/Externals/SDL2-2.0.1/include/begin_code.h @@ -33,15 +33,17 @@ #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(__BEOS__) || defined(__HAIKU__) -# if defined(__GNUC__) -# define DECLSPEC __declspec(dllexport) -# else -# define DECLSPEC __declspec(export) -# endif -# elif defined(__WIN32__) +# if defined(__WIN32__) # ifdef __BORLANDC__ # ifdef BUILD_SDL # define DECLSPEC @@ -54,6 +56,8 @@ # else # if defined(__GNUC__) && __GNUC__ >= 4 # define DECLSPEC __attribute__ ((visibility("default"))) +# elif defined(__GNUC__) && __GNUC__ >= 2 +# define DECLSPEC __declspec(dllexport) # else # define DECLSPEC # endif @@ -95,48 +99,34 @@ #endif #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 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 +#define __inline__ __inline #endif -#define SDL_INLINE_OKAY #else -#if !defined(__MRC__) && !defined(_SGI_SOURCE) +#define SDL_INLINE inline #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 +#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 +#define SDL_FORCE_INLINE __attribute__((always_inline)) static __inline__ #else -#define SDL_FORCE_INLINE static __inline__ -#endif +#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__) diff --git a/Externals/SDL2-2.0.0/include/close_code.h b/Externals/SDL2-2.0.1/include/close_code.h similarity index 100% rename from Externals/SDL2-2.0.0/include/close_code.h rename to Externals/SDL2-2.0.1/include/close_code.h diff --git a/Externals/SDL2-2.0.0/lib/Win32/SDL2.dll b/Externals/SDL2-2.0.1/lib/Win32/SDL2.dll similarity index 53% rename from Externals/SDL2-2.0.0/lib/Win32/SDL2.dll rename to Externals/SDL2-2.0.1/lib/Win32/SDL2.dll index c67dabdbacbc5f4164da021e0cdeed189c98dcd7..c86aba1c522dfda4daa8cd42b862db095b4a1742 100644 GIT binary patch delta 202029 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

    IY?kP8> zFep*(=8H$N%tU##UHzVWw!yAq44g`6qpjM4Fl}(CM*F%pZFCSOhT)jn*aXDkWx}RC z9)$^!wgBDv=}076VsTu)J?226+xXPwA2*KtaJ?`*-KgHcOTajBKr>JzN2y;selg_i zMl?)uhSN!gLzo`ft;#RE9fhc+Si(hd&V_@9vkxkd-=e7%&e34y#a37*AfF94^=WqH z3VH(*8=6L05H(UEv_RlIPg9m#m}Kpzc>?eqw+!lSC5JXiHC&60IGa8v?kvu?BN?Xw zC1uuC#g5zBR%JE@dS%u)xI9k1MF#@`p`8#wfk%f#Q?DwuD4d;!KSxTHi9ai|;qpnD z^s`cWTKVOYa`dcn^s@5w5tH)tQIm2Pu%DGDPAgdr95_u>V00AIyXLvIh%wFyPD~QF znCBp=GIO8m%r#MF-BREN=6>F$5Tt@PVuyI6@FBeY^cTDp8145JPo6JP=a7dKkCm{> z#X}`{@f1F!c+X!J@30pey;Cqxf%OlgyVfQgxiVtD6^8j%Q^1w^e)k)s2VVVAIsUVf ze<<})@2kM2wq1(02LJ7O+y1#}Iix~-i%I`Teq7KGZrhezFCW^z-gug2J?f36$=9Rs zuE{4~k9r#u_z1GLlDY+9BuNDgxAaw=&@eM32s9P!B3O!%;HSC)C%o&;gN3 zC}P&AA>P*1EknGk{qaEjDDRddhHC7kesZVgc|8|l`TjE~ zboOn-7VEEke+e7ZaK(>ByM5UU%!d4!KNhBK$&O_=`^mOe2@MyeW#0knB|qx4yzE70 zqvCu7?UYaSyz@{rT&U$IG-Q4I%T26*Snrgn+w)V$FT$awEeAtbc7J(vaI%7;b4CK! zdzgeZ)Iu39_m{iWph6xQ8ia4iva*0Jd5bxQtQ*C?9w3LbZd#M)I5&lIC^_3{8)2@Fl0A{boL_;m_dO)! z7lg8)fpXR(=P)p%5y^29n>|SGz`6{QpLFBTajb_=c83m@#|V#vPp&{3Gz>`fhXDzH zfRr%VeRH@xR1i`py9bPt#|uLCWcNp78^$4MO31|?xe^+3k8$erSUSo zvSOVe({^#eR6fxkG67!!h)v)V$}I*Qss8Ol%|;OYAFGcqwv)l zgwL>~2*-tUX86WQu8&1FT2-X!a8O;gHdT&bV<+O{4=ce>@lyXak(YC5qC6hJsvHGR zmYcHICgDr(0V#h%cW<67&!V~QjA?SXDKgorSzOo>8lcziiK#Mey;m*Z#8jDf@R5PO zZJwVd-xSVGcB@a|yA$yP(`Br|v!AESw5IOkclwi@-xW{FqX0brB(Fs73=aGl0qZn_ z^ZTci5kP-)CKvdGG@k3+OrTGjDR+2K%Ae5}q{&ZK6nQs|7g_%)c_M&5=3aY>13!C; zv+&zfytI0=s5E!GS^7s_RUW>dE&qIf@$TTKa&Exz{h2my>Ak$D?Xuz7ylCs(W&ld`<>l;xa$I z_*jx0(IV;j7O&k|%jDgl=T2H7|3IIEtu@|z2WWB~eQRV63vyL~Z#@41;NU!YJ}_fnlxcDOte*X|7vxT? z+Y54+2c`TO{izpaCorFUnKOUr4X&`wUXr_#sH#HOzbqd$RLh=%n`4`48psZQE@v{|)Fdgh=nlOuw__t;uUz+v6rx@gJ$sF8$J*H& zyy^{j)mg_kfh_u#l%YAkjH?iuccDoBp%$$-h|n{ zAIc)vadTG{^|y79Jy0{>`fJ&_H@$^|gmqKgmbYb`^(mObF8_lYLHoN{x525VjeHes z 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�EmYLQ%WIdsL=7DVc&2?D6Fe8vQf__^G;nNu) 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 delta 195610 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 OXN7w91dbAnW&R&qY{yRk literal 0 HcmV?d00001 diff --git a/Externals/SDL2-2.0.0/lib/x64/SDL2.dll b/Externals/SDL2-2.0.1/lib/x64/SDL2.dll similarity index 58% rename from Externals/SDL2-2.0.0/lib/x64/SDL2.dll rename to Externals/SDL2-2.0.1/lib/x64/SDL2.dll index 0f3ef1286b330d586b705cc5a69f10cab31ae3ea..1a156df58c3541a493033ff9de78de4ab77ee2ee 100644 GIT binary patch delta 215505 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 z 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

  1. sbIQ7^GH3>^QnZ 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 delta 209417 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®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

    r03C_ye*7RI959-pW}@}Iy-J4Mmb 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 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 0000000000000000000000000000000000000000..abeab3bc8adeb74b2e8347db9200870855b31165 GIT binary patch literal 109980 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 YX|S~wXD-t@N_S0x00400000 false true - ..\..\..\Externals\SDL2-2.0.0\lib\$(PlatformName);..\..\..\Externals\OpenAL\$(PlatformName);%(AdditionalLibraryDirectories) + ..\..\..\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) @@ -229,7 +229,7 @@ - + diff --git a/Source/VSProps/Base.props b/Source/VSProps/Base.props index d613f45476..2ee5bd8e8e 100644 --- a/Source/VSProps/Base.props +++ b/Source/VSProps/Base.props @@ -49,7 +49,7 @@ $(ExternalsDir)miniupnpc\src;%(AdditionalIncludeDirectories) $(ExternalsDir)polarssl\include;%(AdditionalIncludeDirectories) $(ExternalsDir)portaudio\include;%(AdditionalIncludeDirectories) - $(ExternalsDir)SDL2-2.0.0\include;%(AdditionalIncludeDirectories) + $(ExternalsDir)SDL2-2.0.1\include;%(AdditionalIncludeDirectories) $(ExternalsDir)SFML\include;%(AdditionalIncludeDirectories) $(ExternalsDir)SOIL;%(AdditionalIncludeDirectories) $(ExternalsDir)wxWidgets3;%(AdditionalIncludeDirectories) From 6cece6b486670dd149c827053a84754c98397ccc Mon Sep 17 00:00:00 2001 From: degasus Date: Mon, 4 Nov 2013 23:35:19 +0100 Subject: [PATCH 47/90] VideoCommon: create native texture pool We often need the same native texture objects for new textures. This commit try to avoid destroying and creation of this textures by pooling them. This should be a big performance gain for some efb2ram games as they may overwrites partially a cached texture (which would be deleted) and afterwards try to read it. Creating/destroying sounds like an easy task, but it isn't. eg the nvidia ogl driver synchonize their threads do avoid use-after-free issues. --- .../Core/VideoCommon/Src/TextureCacheBase.cpp | 92 ++++++++++++++++--- .../Core/VideoCommon/Src/TextureCacheBase.h | 6 +- 2 files changed, 86 insertions(+), 12 deletions(-) diff --git a/Source/Core/VideoCommon/Src/TextureCacheBase.cpp b/Source/Core/VideoCommon/Src/TextureCacheBase.cpp index ea008dc898..41af7ac946 100644 --- a/Source/Core/VideoCommon/Src/TextureCacheBase.cpp +++ b/Source/Core/VideoCommon/Src/TextureCacheBase.cpp @@ -30,6 +30,8 @@ unsigned int TextureCache::temp_size; TextureCache::TexCache TextureCache::textures; +TextureCache::TexPool TextureCache::texPool; + TextureCache::BackupConfig TextureCache::backup_config; bool invalidate_texture_cache_requested; @@ -68,6 +70,13 @@ void TextureCache::Invalidate() delete iter->second; textures.clear(); + + TexPool::iterator + iter2 = texPool.begin(), + tcend2 = texPool.end(); + for (; iter2 != tcend2; ++iter2) + delete iter2->second; + texPool.clear(); } TextureCache::~TextureCache() @@ -135,7 +144,7 @@ void TextureCache::Cleanup() // EFB copies living on the host GPU are unrecoverable and thus shouldn't be deleted && ! iter->second->IsEfbCopy() ) { - delete iter->second; + PoolTexture(iter->second); textures.erase(iter++); } else @@ -143,6 +152,21 @@ void TextureCache::Cleanup() ++iter; } } + + TexPool::iterator iter2 = texPool.begin(); + TexPool::iterator tcend2 = texPool.end(); + while (iter2 != tcend2) + { + if (frameCount > TEXTURE_KILL_THRESHOLD + iter2->second->frameCount) + { + delete iter2->second; + texPool.erase(iter2++); + } + else + { + ++iter2; + } + } } void TextureCache::InvalidateRange(u32 start_address, u32 size) @@ -155,7 +179,7 @@ void TextureCache::InvalidateRange(u32 start_address, u32 size) const int rangePosition = iter->second->IntersectsMemoryRange(start_address, size); if (0 == rangePosition) { - delete iter->second; + PoolTexture(iter->second); textures.erase(iter++); } else @@ -215,7 +239,7 @@ void TextureCache::ClearRenderTargets() { if (iter->second->type == TCET_EC_VRAM) { - delete iter->second; + PoolTexture(iter->second); textures.erase(iter++); } else @@ -426,8 +450,8 @@ TextureCache::TCacheEntryBase* TextureCache::Load(unsigned int const stage, } else { - // delete the texture and make a new one - delete entry; + // pool the texture and make a new one + PoolTexture(entry); entry = NULL; } } @@ -445,8 +469,8 @@ 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; + // If we thought we could reuse the texture before, make sure to pool it now! + PoolTexture(entry); entry = NULL; } using_custom_texture = true; @@ -473,6 +497,15 @@ TextureCache::TCacheEntryBase* TextureCache::Load(unsigned int const stage, const bool use_native_mips = use_mipmaps && !using_custom_lods && (width == nativeW && height == nativeH); texLevels = (use_native_mips || using_custom_lods) ? texLevels : 1; // TODO: Should be forced to 1 for non-pow2 textures (e.g. efb copies with automatically adjusted IR) + // try to search for a pooled texture + if (NULL == entry) + { + // Try to find a matching texture in the pool. We pool unused texture as they often just change the type. + // This happens in eg efb2ram which overwrites half of a texture. So most of this textures are only pooled + // for some frames. + textures[texID] = entry = GetPooledTexture ( width, height, full_format, texLevels, false ); + } + // create the entry/texture if (NULL == entry) { @@ -821,16 +854,23 @@ void TextureCache::CopyRenderTargetToTexture(u32 dstAddr, unsigned int dstFormat else if (!(entry->type == TCET_EC_VRAM && entry->virtual_width == scaled_tex_w && entry->virtual_height == scaled_tex_h)) { // remove it and recreate it as a render target - delete entry; + PoolTexture(entry); entry = NULL; } } if (NULL == entry) { - // create the texture - textures[dstAddr] = entry = g_texture_cache->CreateRenderTargetTexture(scaled_tex_w, scaled_tex_h); - + // search for a compatible pooled texture + entry = GetPooledTexture(scaled_tex_w, scaled_tex_h, 0, 0, true); + + if (NULL == entry) + { + // create the texture + entry = g_texture_cache->CreateRenderTargetTexture(scaled_tex_w, scaled_tex_h); + } + textures[dstAddr] = entry; + // TODO: Using the wrong dstFormat, dumb... entry->SetGeneralParameters(dstAddr, 0, dstFormat, 1); entry->SetDimensions(tex_w, tex_h, scaled_tex_w, scaled_tex_h); @@ -842,3 +882,33 @@ void TextureCache::CopyRenderTargetToTexture(u32 dstAddr, unsigned int dstFormat entry->FromRenderTarget(dstAddr, dstFormat, srcFormat, srcRect, isIntensity, scaleByHalf, cbufid, colmat); } + +TextureCache::TCacheEntryBase* TextureCache::GetPooledTexture ( u32 width, u32 height, u32 full_format, u32 maxlevel, bool isEfbCopy ) +{ + TCacheEntryBase* entry = NULL; + std::pair bounds; + bounds = texPool.equal_range(std::make_pair(width, height)); + while(!entry && bounds.first != bounds.second) { + entry = bounds.first->second; + if ( + (isEfbCopy && entry->IsEfbCopy()) || + (!isEfbCopy && entry->type == TCET_NORMAL && full_format == entry->format && entry->num_mipmaps == maxlevel) || + (!isEfbCopy && entry->type == TCET_EC_DYNAMIC) + ) + { + texPool.erase(bounds.first); + } + else + { + entry = NULL; + bounds.first++; + } + } + return entry; +} + +void TextureCache::PoolTexture(TextureCache::TCacheEntryBase* entry) +{ + entry->frameCount = frameCount; + texPool.insert(std::make_pair(std::make_pair(entry->virtual_width, entry->virtual_height), entry)); +} diff --git a/Source/Core/VideoCommon/Src/TextureCacheBase.h b/Source/Core/VideoCommon/Src/TextureCacheBase.h index 1afcb8cd2d..c035ee8d23 100644 --- a/Source/Core/VideoCommon/Src/TextureCacheBase.h +++ b/Source/Core/VideoCommon/Src/TextureCacheBase.h @@ -121,8 +121,12 @@ private: static void DumpTexture(TCacheEntryBase* entry, unsigned int level); typedef std::map TexCache; - static TexCache textures; + + static TCacheEntryBase* GetPooledTexture(u32 width, u32 height, u32 full_format, u32 maxlevel, bool isEfbCopy); + static void PoolTexture(TCacheEntryBase *entry); + typedef std::multimap, TCacheEntryBase*> TexPool; + static TexPool texPool; // Backup configuration values static struct BackupConfig From 56685c396a97519f008e65a351055dc0e0276fe4 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Tue, 5 Nov 2013 12:50:57 +0000 Subject: [PATCH 48/90] [ARM] Fix an issue with the data offset in LoadStore operations. Thanks to PPSSPP. --- Source/Core/Common/Src/ArmEmitter.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Core/Common/Src/ArmEmitter.cpp b/Source/Core/Common/Src/ArmEmitter.cpp index 98b6d7fb48..cb9544dce3 100644 --- a/Source/Core/Common/Src/ArmEmitter.cpp +++ b/Source/Core/Common/Src/ArmEmitter.cpp @@ -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; From 948ace954675d3da9ec32aba119493c385800847 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Tue, 5 Nov 2013 13:05:04 +0000 Subject: [PATCH 49/90] [ARM] Minor idle skip optimization in bx. --- Source/Core/Core/Src/PowerPC/JitArm32/JitArm_Branch.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/Source/Core/Core/Src/PowerPC/JitArm32/JitArm_Branch.cpp b/Source/Core/Core/Src/PowerPC/JitArm32/JitArm_Branch.cpp index eaf9d944ae..1879e4af85 100644 --- a/Source/Core/Core/Src/PowerPC/JitArm32/JitArm_Branch.cpp +++ b/Source/Core/Core/Src/PowerPC/JitArm32/JitArm_Branch.cpp @@ -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); } From 274f6dd7ab4af69f3c8c4d6d78e66929c06cd1ae Mon Sep 17 00:00:00 2001 From: degasus Date: Tue, 5 Nov 2013 17:37:32 +0100 Subject: [PATCH 50/90] ogl: check default framebuffer for msaa default framebuffer must not be sampled, so throw a panicalert if it is --- Source/Core/VideoBackends/OGL/Src/Render.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/Source/Core/VideoBackends/OGL/Src/Render.cpp b/Source/Core/VideoBackends/OGL/Src/Render.cpp index b63fa3cffd..4583c6772c 100644 --- a/Source/Core/VideoBackends/OGL/Src/Render.cpp +++ b/Source/Core/VideoBackends/OGL/Src/Render.cpp @@ -497,6 +497,19 @@ 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. From 897bec1add3cc7650d979cf40c54508dafbddfc0 Mon Sep 17 00:00:00 2001 From: Matthew Parlane Date: Wed, 6 Nov 2013 22:18:08 +1300 Subject: [PATCH 51/90] [JitIL] No more terrible usage of vectors. This is possible because of C++11. --- Source/Core/Core/Src/PowerPC/JitILCommon/IR.cpp | 14 +++++++------- Source/Core/Core/Src/PowerPC/JitILCommon/IR.h | 6 +++--- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/Source/Core/Core/Src/PowerPC/JitILCommon/IR.cpp b/Source/Core/Core/Src/PowerPC/JitILCommon/IR.cpp index 0e73b211c1..ffc5f94b62 100644 --- a/Source/Core/Core/Src/PowerPC/JitILCommon/IR.cpp +++ b/Source/Core/Core/Src/PowerPC/JitILCommon/IR.cpp @@ -131,14 +131,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 +152,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 +175,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); @@ -1049,7 +1049,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 +1061,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]; } diff --git a/Source/Core/Core/Src/PowerPC/JitILCommon/IR.h b/Source/Core/Core/Src/PowerPC/JitILCommon/IR.h index 991f1524c8..f3246e77b0 100644 --- a/Source/Core/Core/Src/PowerPC/JitILCommon/IR.h +++ b/Source/Core/Core/Src/PowerPC/JitILCommon/IR.h @@ -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; From c29fb22cd4b0d9ec87626f76360721c5fa1e1687 Mon Sep 17 00:00:00 2001 From: Tillmann Karras Date: Tue, 29 Oct 2013 23:35:38 +0100 Subject: [PATCH 52/90] Jit64: extract frsqrtex as method --- .../Core/Src/PowerPC/Jit64/Jit64_Tables.cpp | 2 +- .../Src/PowerPC/Jit64/Jit_FloatingPoint.cpp | 29 ++++++++++--------- 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/Source/Core/Core/Src/PowerPC/Jit64/Jit64_Tables.cpp b/Source/Core/Core/Src/PowerPC/Jit64/Jit64_Tables.cpp index 53fe15dfac..ef40b5ef4a 100644 --- a/Source/Core/Core/Src/PowerPC/Jit64/Jit64_Tables.cpp +++ b/Source/Core/Core/Src/PowerPC/Jit64/Jit64_Tables.cpp @@ -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}}, diff --git a/Source/Core/Core/Src/PowerPC/Jit64/Jit_FloatingPoint.cpp b/Source/Core/Core/Src/PowerPC/Jit64/Jit_FloatingPoint.cpp index b9a2e61c0b..5fe71d5ffc 100644 --- a/Source/Core/Core/Src/PowerPC/Jit64/Jit_FloatingPoint.cpp +++ b/Source/Core/Core/Src/PowerPC/Jit64/Jit_FloatingPoint.cpp @@ -70,20 +70,6 @@ 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; @@ -106,6 +92,21 @@ void Jit64::fp_arith_s(UGeckoInstruction inst) } } +void Jit64::frsqrtex(UGeckoInstruction inst) +{ + INSTRUCTION_START + JITDISABLE(bJITFloatingPointOff) + 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(); +} + void Jit64::fmaddXX(UGeckoInstruction inst) { INSTRUCTION_START From 2f7ca688ae221bc144e4b40dd8608b27cc2358c7 Mon Sep 17 00:00:00 2001 From: degasus Date: Tue, 29 Oct 2013 22:06:35 +0100 Subject: [PATCH 53/90] jit64: remove dead code --- Source/Core/Core/Src/PowerPC/Jit64/Jit_FloatingPoint.cpp | 5 ----- 1 file changed, 5 deletions(-) diff --git a/Source/Core/Core/Src/PowerPC/Jit64/Jit_FloatingPoint.cpp b/Source/Core/Core/Src/PowerPC/Jit64/Jit_FloatingPoint.cpp index 5fe71d5ffc..9cf0069f95 100644 --- a/Source/Core/Core/Src/PowerPC/Jit64/Jit_FloatingPoint.cpp +++ b/Source/Core/Core/Src/PowerPC/Jit64/Jit_FloatingPoint.cpp @@ -70,11 +70,6 @@ void Jit64::fp_arith_s(UGeckoInstruction inst) Default(inst); 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; From 201c4c65a5cf869382f55e85ad6460446ac42091 Mon Sep 17 00:00:00 2001 From: Tillmann Karras Date: Fri, 1 Nov 2013 23:36:56 +0100 Subject: [PATCH 54/90] Jit64: fix typo in ps_sel and re-enable it --- Source/Core/Core/Src/PowerPC/Jit64/Jit_Paired.cpp | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/Source/Core/Core/Src/PowerPC/Jit64/Jit_Paired.cpp b/Source/Core/Core/Src/PowerPC/Jit64/Jit_Paired.cpp index 7dd8ad8ef2..3f7732d589 100644 --- a/Source/Core/Core/Src/PowerPC/Jit64/Jit_Paired.cpp +++ b/Source/Core/Core/Src/PowerPC/Jit64/Jit_Paired.cpp @@ -40,12 +40,9 @@ void Jit64::ps_sel(UGeckoInstruction inst) 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; @@ -59,7 +56,7 @@ void Jit64::ps_sel(UGeckoInstruction inst) MOVAPD(XMM7, fpr.R(a)); CMPPD(XMM7, M((void*)psZeroZero), 1); //less-than = 111111 MOVAPD(XMM6, R(XMM7)); - ANDPD(XMM7, fpr.R(d)); + ANDPD(XMM7, fpr.R(b)); ANDNPD(XMM6, fpr.R(c)); MOVAPD(fpr.RX(d), R(XMM7)); ORPD(fpr.RX(d), R(XMM6)); From 0a2a273a2e6ec89478989c4c4a139f28e1d0bca7 Mon Sep 17 00:00:00 2001 From: Tillmann Karras Date: Sat, 2 Nov 2013 06:03:13 +0100 Subject: [PATCH 55/90] Jit64: simplify ps_sel --- .../Core/Src/PowerPC/Jit64/Jit_Paired.cpp | 29 +++++++++---------- 1 file changed, 13 insertions(+), 16 deletions(-) diff --git a/Source/Core/Core/Src/PowerPC/Jit64/Jit_Paired.cpp b/Source/Core/Core/Src/PowerPC/Jit64/Jit_Paired.cpp index 3f7732d589..f6299599ef 100644 --- a/Source/Core/Core/Src/PowerPC/Jit64/Jit_Paired.cpp +++ b/Source/Core/Core/Src/PowerPC/Jit64/Jit_Paired.cpp @@ -11,7 +11,6 @@ // ps_madds0 // ps_muls0 // ps_madds1 -// ps_sel // cmppd, andpd, andnpd, or // lfsx, ps_merge01 etc @@ -37,6 +36,9 @@ 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) @@ -47,21 +49,18 @@ void Jit64::ps_sel(UGeckoInstruction inst) 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(b)); - ANDNPD(XMM6, fpr.R(c)); - MOVAPD(fpr.RX(d), R(XMM7)); - ORPD(fpr.RX(d), R(XMM6)); + MOVAPD(XMM0, fpr.R(a)); + // XMM0 = XMM0 < 0 ? all 1s : all 0s + CMPPD(XMM0, M((void*)psZeroZero), LT); + MOVAPD(XMM1, R(XMM0)); + ANDPD(XMM0, fpr.R(b)); + ANDNPD(XMM1, fpr.R(c)); + fpr.BindToRegister(d, false); + MOVAPD(fpr.RX(d), R(XMM0)); + ORPD(fpr.RX(d), R(XMM1)); fpr.UnlockAll(); - fpr.UnlockAllX(); } void Jit64::ps_sign(UGeckoInstruction inst) @@ -181,8 +180,6 @@ void Jit64::ps_arith(UGeckoInstruction inst) 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 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!!!"); From cdc27e46f11040c4a76fdae78c166f842d90b507 Mon Sep 17 00:00:00 2001 From: Tillmann Karras Date: Sat, 2 Nov 2013 16:02:18 +0100 Subject: [PATCH 56/90] Jit64: implement ps_res This is probably more accurate than it is allowed to be. After all, the instructions are supposed to be "estimates". --- Source/Core/Core/Src/PowerPC/Jit64/Jit.h | 2 +- .../Core/Src/PowerPC/Jit64/Jit64_Tables.cpp | 4 ++-- .../Src/PowerPC/Jit64/Jit_FloatingPoint.cpp | 10 ++++----- .../Core/Src/PowerPC/Jit64/Jit_Paired.cpp | 21 +++++++++++++++---- 4 files changed, 24 insertions(+), 13 deletions(-) diff --git a/Source/Core/Core/Src/PowerPC/Jit64/Jit.h b/Source/Core/Core/Src/PowerPC/Jit64/Jit.h index 4bd7ab5d15..8676b1cb5a 100644 --- a/Source/Core/Core/Src/PowerPC/Jit64/Jit.h +++ b/Source/Core/Core/Src/PowerPC/Jit64/Jit.h @@ -178,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); diff --git a/Source/Core/Core/Src/PowerPC/Jit64/Jit64_Tables.cpp b/Source/Core/Core/Src/PowerPC/Jit64/Jit64_Tables.cpp index ef40b5ef4a..0ff2bf5d7f 100644 --- a/Source/Core/Core/Src/PowerPC/Jit64/Jit64_Tables.cpp +++ b/Source/Core/Core/Src/PowerPC/Jit64/Jit64_Tables.cpp @@ -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}}, diff --git a/Source/Core/Core/Src/PowerPC/Jit64/Jit_FloatingPoint.cpp b/Source/Core/Core/Src/PowerPC/Jit64/Jit_FloatingPoint.cpp index 9cf0069f95..ec8ddc63d3 100644 --- a/Source/Core/Core/Src/PowerPC/Jit64/Jit_FloatingPoint.cpp +++ b/Source/Core/Core/Src/PowerPC/Jit64/Jit_FloatingPoint.cpp @@ -8,9 +8,10 @@ #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)) { @@ -59,9 +60,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 diff --git a/Source/Core/Core/Src/PowerPC/Jit64/Jit_Paired.cpp b/Source/Core/Core/Src/PowerPC/Jit64/Jit_Paired.cpp index f6299599ef..96a3335249 100644 --- a/Source/Core/Core/Src/PowerPC/Jit64/Jit_Paired.cpp +++ b/Source/Core/Core/Src/PowerPC/Jit64/Jit_Paired.cpp @@ -100,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(); } From 954be9e2d9bfca8b33ac1cb36d3226bf2555f2c1 Mon Sep 17 00:00:00 2001 From: Pierre Bourdon Date: Sun, 5 Aug 2012 05:19:52 +0200 Subject: [PATCH 57/90] Handle BP mask register better to avoid useless BP writes (causing flushes) Patch from konpie: http://forums.dolphin-emulator.com/showthread.php?tid=24658 --- Source/Core/VideoCommon/Src/BPMemory.cpp | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) 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) From ea6fd58b978e80b8d5e00158ecdb4c227abd05eb Mon Sep 17 00:00:00 2001 From: Pierre Bourdon Date: Sat, 25 Aug 2012 02:19:19 +0200 Subject: [PATCH 58/90] Use an unordered_set to track FIFO write adresses Reduces CheckGatherPipe CPU consumption by 40%. --- Source/Core/Core/Src/PowerPC/JitCommon/JitBase.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Source/Core/Core/Src/PowerPC/JitCommon/JitBase.h b/Source/Core/Core/Src/PowerPC/JitCommon/JitBase.h index 2beb58d0d6..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,7 +70,7 @@ protected: JitBlock *curBlock; - std::set fifoWriteAddresses; + std::unordered_set fifoWriteAddresses; }; public: From c33036aa0128836163f8856c2277cfda7035632b Mon Sep 17 00:00:00 2001 From: Lioncash Date: Thu, 7 Nov 2013 01:33:32 -0500 Subject: [PATCH 59/90] Fix the filter for some files in the Core VS project related to the JitIL. They were in the root of the project. They should actually be in their own filter named JitILCommon. --- Source/Core/Core/Core.vcxproj.filters | 66 +++++++++++++++------------ 1 file changed, 36 insertions(+), 30 deletions(-) diff --git a/Source/Core/Core/Core.vcxproj.filters b/Source/Core/Core/Core.vcxproj.filters index ae766cd165..97364678a4 100644 --- a/Source/Core/Core/Core.vcxproj.filters +++ b/Source/Core/Core/Core.vcxproj.filters @@ -133,6 +133,9 @@ {8352be4d-d37d-4f55-adec-b940a9712802} + + {827afa93-1a80-4835-93ae-b5516d95867f} + @@ -636,39 +639,12 @@ PowerPC\JitCommon - - PowerPC\JitIL - PowerPC\JitIL PowerPC\JitIL - - PowerPC\JitIL - - - PowerPC\JitIL - - - PowerPC\JitIL - - - PowerPC\JitIL - - - PowerPC\JitIL - - - PowerPC\JitIL - - - PowerPC\JitIL - - - PowerPC\JitIL - PowerPC\JitIL @@ -706,6 +682,33 @@ PowerPC\Jit64 + + PowerPC\JitILCommon + + + PowerPC\JitILCommon + + + PowerPC\JitILCommon + + + PowerPC\JitILCommon + + + PowerPC\JitILCommon + + + PowerPC\JitILCommon + + + PowerPC\JitILCommon + + + PowerPC\JitILCommon + + + PowerPC\JitILCommon + @@ -1190,9 +1193,6 @@ PowerPC\JitCommon - - PowerPC\JitIL - PowerPC\JitIL @@ -1209,6 +1209,12 @@ PowerPC\Jit64 + + PowerPC\JitILCommon + + + PowerPC\JitILCommon + From ea2d8bf328e72da63edc1cfaaebfb6495ea1ccce Mon Sep 17 00:00:00 2001 From: degasus Date: Thu, 7 Nov 2013 15:54:16 +0100 Subject: [PATCH 60/90] VideoCommon: fix custom textures This fix a regression by revision 6cece6b48667 delete pointer must not do anything if pointer==NULL. --- Source/Core/VideoCommon/Src/TextureCacheBase.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/Source/Core/VideoCommon/Src/TextureCacheBase.cpp b/Source/Core/VideoCommon/Src/TextureCacheBase.cpp index 41af7ac946..c29a59e2b4 100644 --- a/Source/Core/VideoCommon/Src/TextureCacheBase.cpp +++ b/Source/Core/VideoCommon/Src/TextureCacheBase.cpp @@ -470,8 +470,11 @@ TextureCache::TCacheEntryBase* TextureCache::Load(unsigned int const stage, expandedHeight = height; // If we thought we could reuse the texture before, make sure to pool it now! - PoolTexture(entry); - entry = NULL; + if(entry) + { + PoolTexture(entry); + entry = NULL; + } } using_custom_texture = true; } From 33d56f50a44863d482665cf2f38c4264424f6184 Mon Sep 17 00:00:00 2001 From: Shawn Hoffman Date: Thu, 7 Nov 2013 09:24:56 -0800 Subject: [PATCH 61/90] Re-plumb window handle to the dsound backend. Reverts parts of commit 71c01d83ab614b9e0c421d03ca694713dbabff48. Fixes issue 6800 --- Source/Core/AudioCommon/Src/AudioCommon.cpp | 4 ++-- Source/Core/AudioCommon/Src/AudioCommon.h | 2 +- Source/Core/AudioCommon/Src/DSoundStream.h | 4 ++-- Source/Core/Core/Src/Core.cpp | 4 ++-- Source/Core/Core/Src/DSPEmulator.h | 3 ++- Source/Core/Core/Src/HW/DSPHLE/DSPHLE.cpp | 5 +++-- Source/Core/Core/Src/HW/DSPHLE/DSPHLE.h | 2 +- Source/Core/Core/Src/HW/DSPLLE/DSPLLE.cpp | 5 +++-- Source/Core/Core/Src/HW/DSPLLE/DSPLLE.h | 2 +- 9 files changed, 17 insertions(+), 14 deletions(-) diff --git a/Source/Core/AudioCommon/Src/AudioCommon.cpp b/Source/Core/AudioCommon/Src/AudioCommon.cpp index acb9f95067..c8c37ea891 100644 --- a/Source/Core/AudioCommon/Src/AudioCommon.cpp +++ b/Source/Core/AudioCommon/Src/AudioCommon.cpp @@ -23,7 +23,7 @@ SoundStream *soundStream = nullptr; namespace AudioCommon { - SoundStream *InitSoundStream(CMixer *mixer) + SoundStream *InitSoundStream(CMixer *mixer, void *hWnd) { // TODO: possible memleak with mixer @@ -33,7 +33,7 @@ namespace AudioCommon else if (backend == BACKEND_NULLSOUND && NullSound::isValid()) soundStream = new NullSound(mixer); else if (backend == BACKEND_DIRECTSOUND && DSound::isValid()) - soundStream = new DSound(mixer); + soundStream = new DSound(mixer, hWnd); else if (backend == BACKEND_XAUDIO2) { if (XAudio2::isValid()) diff --git a/Source/Core/AudioCommon/Src/AudioCommon.h b/Source/Core/AudioCommon/Src/AudioCommon.h index 8ff5ff38e1..9c49293a48 100644 --- a/Source/Core/AudioCommon/Src/AudioCommon.h +++ b/Source/Core/AudioCommon/Src/AudioCommon.h @@ -40,7 +40,7 @@ union UDSPControl namespace AudioCommon { - SoundStream *InitSoundStream(CMixer *mixer); + SoundStream *InitSoundStream(CMixer *mixer, void *hWnd); void ShutdownSoundStream(); std::vector GetSoundBackends(); bool UseJIT(); diff --git a/Source/Core/AudioCommon/Src/DSoundStream.h b/Source/Core/AudioCommon/Src/DSoundStream.h index 8778c7e863..a872e79181 100644 --- a/Source/Core/AudioCommon/Src/DSoundStream.h +++ b/Source/Core/AudioCommon/Src/DSoundStream.h @@ -48,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) @@ -71,7 +71,7 @@ public: #else public: - DSound(CMixer *mixer) + DSound(CMixer *mixer, void *_hWnd) : SoundStream(mixer) {} #endif diff --git a/Source/Core/Core/Src/Core.cpp b/Source/Core/Core/Src/Core.cpp index 88c0376cb2..ea54163c30 100644 --- a/Source/Core/Core/Src/Core.cpp +++ b/Source/Core/Core/Src/Core.cpp @@ -388,8 +388,8 @@ void EmuThread() OSD::AddMessage("Dolphin " + g_video_backend->GetName() + " Video Backend.", 5000); - if (!DSP::GetDSPEmulator()->Initialize(_CoreParameter.bWii, - _CoreParameter.bDSPThread)) + if (!DSP::GetDSPEmulator()->Initialize(g_pWindowHandle, + _CoreParameter.bWii, _CoreParameter.bDSPThread)) { HW::Shutdown(); g_video_backend->Shutdown(); diff --git a/Source/Core/Core/Src/DSPEmulator.h b/Source/Core/Core/Src/DSPEmulator.h index 207818cbca..45b2b30c8c 100644 --- a/Source/Core/Core/Src/DSPEmulator.h +++ b/Source/Core/Core/Src/DSPEmulator.h @@ -15,7 +15,7 @@ public: virtual bool IsLLE() = 0; - virtual bool Initialize(bool bWii, bool bDSPThread) = 0; + virtual bool Initialize(void *hWnd, bool bWii, bool bDSPThread) = 0; virtual void Shutdown() = 0; virtual void DoState(PointerWrap &p) = 0; @@ -35,6 +35,7 @@ public: protected: SoundStream *soundStream; + void *m_hWnd; }; DSPEmulator *CreateDSPEmulator(bool HLE); diff --git a/Source/Core/Core/Src/HW/DSPHLE/DSPHLE.cpp b/Source/Core/Core/Src/HW/DSPHLE/DSPHLE.cpp index 3897fd6e86..501bc2a0dd 100644 --- a/Source/Core/Core/Src/HW/DSPHLE/DSPHLE.cpp +++ b/Source/Core/Core/Src/HW/DSPHLE/DSPHLE.cpp @@ -42,8 +42,9 @@ struct DSPState } }; -bool DSPHLE::Initialize(bool bWii, bool bDSPThread) +bool DSPHLE::Initialize(void *hWnd, bool bWii, bool bDSPThread) { + m_hWnd = hWnd; m_bWii = bWii; m_pUCode = NULL; m_lastUCode = NULL; @@ -265,7 +266,7 @@ void DSPHLE::InitMixer() unsigned int AISampleRate, DACSampleRate; AudioInterface::Callback_GetSampleRate(AISampleRate, DACSampleRate); delete soundStream; - soundStream = AudioCommon::InitSoundStream(new HLEMixer(this, AISampleRate, DACSampleRate, 48000)); + soundStream = AudioCommon::InitSoundStream(new HLEMixer(this, AISampleRate, DACSampleRate, 48000), m_hWnd); if(!soundStream) PanicAlert("Error starting up sound stream"); // Mixer is initialized m_InitMixer = true; diff --git a/Source/Core/Core/Src/HW/DSPHLE/DSPHLE.h b/Source/Core/Core/Src/HW/DSPHLE/DSPHLE.h index 44248fd88f..6627b9dc2a 100644 --- a/Source/Core/Core/Src/HW/DSPHLE/DSPHLE.h +++ b/Source/Core/Core/Src/HW/DSPHLE/DSPHLE.h @@ -16,7 +16,7 @@ class DSPHLE : public DSPEmulator { public: DSPHLE(); - virtual bool Initialize(bool bWii, bool bDSPThread) override; + virtual bool Initialize(void *hWnd, bool bWii, bool bDSPThread) override; virtual void Shutdown() override; virtual bool IsLLE() override { return false ; } diff --git a/Source/Core/Core/Src/HW/DSPLLE/DSPLLE.cpp b/Source/Core/Core/Src/HW/DSPLLE/DSPLLE.cpp index 9b9364947b..af747815d1 100644 --- a/Source/Core/Core/Src/HW/DSPLLE/DSPLLE.cpp +++ b/Source/Core/Core/Src/HW/DSPLLE/DSPLLE.cpp @@ -130,8 +130,9 @@ void DSPLLE::dsp_thread(DSPLLE *dsp_lle) } } -bool DSPLLE::Initialize(bool bWii, bool bDSPThread) +bool DSPLLE::Initialize(void *hWnd, bool bWii, bool bDSPThread) { + m_hWnd = hWnd; m_bWii = bWii; m_bDSPThread = bDSPThread; m_InitMixer = false; @@ -184,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)); + soundStream = AudioCommon::InitSoundStream(new CMixer(AISampleRate, DACSampleRate, 48000), m_hWnd); if(!soundStream) PanicAlert("Error starting up sound stream"); // Mixer is initialized m_InitMixer = true; diff --git a/Source/Core/Core/Src/HW/DSPLLE/DSPLLE.h b/Source/Core/Core/Src/HW/DSPLLE/DSPLLE.h index 5ae0fd6a74..71addf77b0 100644 --- a/Source/Core/Core/Src/HW/DSPLLE/DSPLLE.h +++ b/Source/Core/Core/Src/HW/DSPLLE/DSPLLE.h @@ -14,7 +14,7 @@ class DSPLLE : public DSPEmulator { public: DSPLLE(); - virtual bool Initialize(bool bWii, bool bDSPThread); + virtual bool Initialize(void *hWnd, bool bWii, bool bDSPThread); virtual void Shutdown(); virtual bool IsLLE() { return true; } From 8923968b47ab27f571ff7464dc34143001c5a567 Mon Sep 17 00:00:00 2001 From: degasus Date: Thu, 7 Nov 2013 21:16:36 +0100 Subject: [PATCH 62/90] Revert "VideoCommon: create native texture pool" This reverts commit 6cece6b486670dd149c827053a84754c98397ccc. In fact, there was a _huge_ speedup on lots of games (mostly on nvidia+ogl), but there are some crashes on D3D. I have to fix this crash and then I'll commit something like this again :-) Conflicts: Source/Core/VideoCommon/Src/TextureCacheBase.cpp --- .../Core/VideoCommon/Src/TextureCacheBase.cpp | 90 +++---------------- .../Core/VideoCommon/Src/TextureCacheBase.h | 6 +- 2 files changed, 11 insertions(+), 85 deletions(-) diff --git a/Source/Core/VideoCommon/Src/TextureCacheBase.cpp b/Source/Core/VideoCommon/Src/TextureCacheBase.cpp index c29a59e2b4..05c2e88aae 100644 --- a/Source/Core/VideoCommon/Src/TextureCacheBase.cpp +++ b/Source/Core/VideoCommon/Src/TextureCacheBase.cpp @@ -30,8 +30,6 @@ unsigned int TextureCache::temp_size; TextureCache::TexCache TextureCache::textures; -TextureCache::TexPool TextureCache::texPool; - TextureCache::BackupConfig TextureCache::backup_config; bool invalidate_texture_cache_requested; @@ -70,13 +68,6 @@ void TextureCache::Invalidate() delete iter->second; textures.clear(); - - TexPool::iterator - iter2 = texPool.begin(), - tcend2 = texPool.end(); - for (; iter2 != tcend2; ++iter2) - delete iter2->second; - texPool.clear(); } TextureCache::~TextureCache() @@ -144,7 +135,7 @@ void TextureCache::Cleanup() // EFB copies living on the host GPU are unrecoverable and thus shouldn't be deleted && ! iter->second->IsEfbCopy() ) { - PoolTexture(iter->second); + delete iter->second; textures.erase(iter++); } else @@ -152,21 +143,6 @@ void TextureCache::Cleanup() ++iter; } } - - TexPool::iterator iter2 = texPool.begin(); - TexPool::iterator tcend2 = texPool.end(); - while (iter2 != tcend2) - { - if (frameCount > TEXTURE_KILL_THRESHOLD + iter2->second->frameCount) - { - delete iter2->second; - texPool.erase(iter2++); - } - else - { - ++iter2; - } - } } void TextureCache::InvalidateRange(u32 start_address, u32 size) @@ -179,7 +155,7 @@ void TextureCache::InvalidateRange(u32 start_address, u32 size) const int rangePosition = iter->second->IntersectsMemoryRange(start_address, size); if (0 == rangePosition) { - PoolTexture(iter->second); + delete iter->second; textures.erase(iter++); } else @@ -239,7 +215,7 @@ void TextureCache::ClearRenderTargets() { if (iter->second->type == TCET_EC_VRAM) { - PoolTexture(iter->second); + delete iter->second; textures.erase(iter++); } else @@ -450,8 +426,8 @@ TextureCache::TCacheEntryBase* TextureCache::Load(unsigned int const stage, } else { - // pool the texture and make a new one - PoolTexture(entry); + // delete the texture and make a new one + delete entry; entry = NULL; } } @@ -472,7 +448,7 @@ TextureCache::TCacheEntryBase* TextureCache::Load(unsigned int const stage, // If we thought we could reuse the texture before, make sure to pool it now! if(entry) { - PoolTexture(entry); + delete entry; entry = NULL; } } @@ -500,15 +476,6 @@ TextureCache::TCacheEntryBase* TextureCache::Load(unsigned int const stage, const bool use_native_mips = use_mipmaps && !using_custom_lods && (width == nativeW && height == nativeH); texLevels = (use_native_mips || using_custom_lods) ? texLevels : 1; // TODO: Should be forced to 1 for non-pow2 textures (e.g. efb copies with automatically adjusted IR) - // try to search for a pooled texture - if (NULL == entry) - { - // Try to find a matching texture in the pool. We pool unused texture as they often just change the type. - // This happens in eg efb2ram which overwrites half of a texture. So most of this textures are only pooled - // for some frames. - textures[texID] = entry = GetPooledTexture ( width, height, full_format, texLevels, false ); - } - // create the entry/texture if (NULL == entry) { @@ -857,23 +824,16 @@ void TextureCache::CopyRenderTargetToTexture(u32 dstAddr, unsigned int dstFormat else if (!(entry->type == TCET_EC_VRAM && entry->virtual_width == scaled_tex_w && entry->virtual_height == scaled_tex_h)) { // remove it and recreate it as a render target - PoolTexture(entry); + delete entry; entry = NULL; } } if (NULL == entry) { - // search for a compatible pooled texture - entry = GetPooledTexture(scaled_tex_w, scaled_tex_h, 0, 0, true); - - if (NULL == entry) - { - // create the texture - entry = g_texture_cache->CreateRenderTargetTexture(scaled_tex_w, scaled_tex_h); - } - textures[dstAddr] = entry; - + // create the texture + textures[dstAddr] = entry = g_texture_cache->CreateRenderTargetTexture(scaled_tex_w, scaled_tex_h); + // TODO: Using the wrong dstFormat, dumb... entry->SetGeneralParameters(dstAddr, 0, dstFormat, 1); entry->SetDimensions(tex_w, tex_h, scaled_tex_w, scaled_tex_h); @@ -885,33 +845,3 @@ void TextureCache::CopyRenderTargetToTexture(u32 dstAddr, unsigned int dstFormat entry->FromRenderTarget(dstAddr, dstFormat, srcFormat, srcRect, isIntensity, scaleByHalf, cbufid, colmat); } - -TextureCache::TCacheEntryBase* TextureCache::GetPooledTexture ( u32 width, u32 height, u32 full_format, u32 maxlevel, bool isEfbCopy ) -{ - TCacheEntryBase* entry = NULL; - std::pair bounds; - bounds = texPool.equal_range(std::make_pair(width, height)); - while(!entry && bounds.first != bounds.second) { - entry = bounds.first->second; - if ( - (isEfbCopy && entry->IsEfbCopy()) || - (!isEfbCopy && entry->type == TCET_NORMAL && full_format == entry->format && entry->num_mipmaps == maxlevel) || - (!isEfbCopy && entry->type == TCET_EC_DYNAMIC) - ) - { - texPool.erase(bounds.first); - } - else - { - entry = NULL; - bounds.first++; - } - } - return entry; -} - -void TextureCache::PoolTexture(TextureCache::TCacheEntryBase* entry) -{ - entry->frameCount = frameCount; - texPool.insert(std::make_pair(std::make_pair(entry->virtual_width, entry->virtual_height), entry)); -} diff --git a/Source/Core/VideoCommon/Src/TextureCacheBase.h b/Source/Core/VideoCommon/Src/TextureCacheBase.h index c035ee8d23..1afcb8cd2d 100644 --- a/Source/Core/VideoCommon/Src/TextureCacheBase.h +++ b/Source/Core/VideoCommon/Src/TextureCacheBase.h @@ -121,12 +121,8 @@ private: static void DumpTexture(TCacheEntryBase* entry, unsigned int level); typedef std::map TexCache; + static TexCache textures; - - static TCacheEntryBase* GetPooledTexture(u32 width, u32 height, u32 full_format, u32 maxlevel, bool isEfbCopy); - static void PoolTexture(TCacheEntryBase *entry); - typedef std::multimap, TCacheEntryBase*> TexPool; - static TexPool texPool; // Backup configuration values static struct BackupConfig From a83c239765f8add99a360a29bfba2fdb408075c8 Mon Sep 17 00:00:00 2001 From: Tony Wasserka Date: Sun, 10 Nov 2013 00:06:32 +0100 Subject: [PATCH 63/90] D3D: Reintroduce depencency on D3DX11 because it's the most straightforward way to bring back some broken features. The Dolphin development team is incapable of providing sufficient replacement for its previous usage in Dolphin and the advantages of dropping the dependency do not justify the removal of screenshots and texture dumping. From now on, d3dx11.h, d3dx11async.h, d3dx11core.h and d3dx11tex.h are required to be stored somewhere in the header include path. I don't know if this is the case for anyone else than me, but I can't really say that I care after having people randomly merge unfinished branches into master. --- Source/Core/VideoBackends/D3D/Src/D3DBase.cpp | 60 +++++++++++++++++++ Source/Core/VideoBackends/D3D/Src/D3DBase.h | 25 +++++++- 2 files changed, 84 insertions(+), 1 deletion(-) diff --git a/Source/Core/VideoBackends/D3D/Src/D3DBase.cpp b/Source/Core/VideoBackends/D3D/Src/D3DBase.cpp index 5434354f37..e9e678d841 100644 --- a/Source/Core/VideoBackends/D3D/Src/D3DBase.cpp +++ b/Source/Core/VideoBackends/D3D/Src/D3DBase.cpp @@ -17,6 +17,13 @@ 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; @@ -91,6 +98,44 @@ 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; @@ -132,6 +177,18 @@ 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; @@ -215,11 +272,13 @@ 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; } @@ -361,6 +420,7 @@ void Close() // unload DLLs UnloadD3D(); + UnloadD3DX(); UnloadDXGI(); } diff --git a/Source/Core/VideoBackends/D3D/Src/D3DBase.h b/Source/Core/VideoBackends/D3D/Src/D3DBase.h index 7f26cbd3cc..6e06de6e90 100644 --- a/Source/Core/VideoBackends/D3D/Src/D3DBase.h +++ b/Source/Core/VideoBackends/D3D/Src/D3DBase.h @@ -5,7 +5,7 @@ #pragma once #include -#include +#include #include #include "Common.h" #include @@ -25,9 +25,11 @@ namespace D3D HRESULT LoadDXGI(); HRESULT LoadD3D(); +HRESULT LoadD3DX(); HRESULT LoadD3DCompiler(); void UnloadDXGI(); void UnloadD3D(); +void UnloadD3DX(); void UnloadD3DCompiler(); D3D_FEATURE_LEVEL GetFeatureLevel(IDXGIAdapter* adapter); @@ -72,6 +74,27 @@ void SetDebugObjectName(T resource, const char* name) } // 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**); extern CREATEDXGIFACTORY PCreateDXGIFactory; typedef HRESULT (WINAPI *D3D11CREATEDEVICE)(IDXGIAdapter*, D3D_DRIVER_TYPE, HMODULE, UINT, CONST D3D_FEATURE_LEVEL*, UINT, UINT, ID3D11Device**, D3D_FEATURE_LEVEL*, ID3D11DeviceContext**); From 3de2ee5d46c118929bf90540706cf82fc0671920 Mon Sep 17 00:00:00 2001 From: Tony Wasserka Date: Sun, 10 Nov 2013 00:09:09 +0100 Subject: [PATCH 64/90] D3D: Use D3DX for texture dumping. --- Source/Core/VideoBackends/D3D/Src/TextureCache.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Source/Core/VideoBackends/D3D/Src/TextureCache.cpp b/Source/Core/VideoBackends/D3D/Src/TextureCache.cpp index 7ee92459c6..d3c536c4a6 100644 --- a/Source/Core/VideoBackends/D3D/Src/TextureCache.cpp +++ b/Source/Core/VideoBackends/D3D/Src/TextureCache.cpp @@ -42,8 +42,7 @@ 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)); - return true; + return SUCCEEDED(PD3DX11SaveTextureToFileA(D3D::context, texture->GetTex(), D3DX11_IFF_PNG, filename)); } void TextureCache::TCacheEntry::Load(unsigned int width, unsigned int height, From 0b02880b7699b8049be0ae64ff1461a792a9bf9b Mon Sep 17 00:00:00 2001 From: Tony Wasserka Date: Sun, 10 Nov 2013 00:10:20 +0100 Subject: [PATCH 65/90] Revert "Be less dumb." Revert "Actually, filename really does need to be a parameter because of some random debug thing." Revert "fix non-HAVE_WX case" Revert "Handle screenshot saving in RenderBase. Removes dependency on D3DX11 for screenshots (texture dumping is still broken)." This reverts commits 00fe5057f13bca3416b9d25a1fe9df27c514b29c, 74b5fb3ab4b066681336d1be44c7eecfcf6a4dc6, cd46138d299088631bbcbf37543584946c4b174a and 5f72542e0637799092ad1006d16ebad1961020e0 because taking screenshots in D3D still crashed for me so there was no point in the code changes (which I found ugly anyway). --- Source/Core/VideoBackends/D3D/Src/Render.cpp | 36 +++-- Source/Core/VideoBackends/D3D/Src/Render.h | 3 +- Source/Core/VideoBackends/OGL/Src/Render.cpp | 130 ++++++++++++++++-- Source/Core/VideoBackends/OGL/Src/Render.h | 4 +- .../VideoBackends/OGL/Src/VertexManager.cpp | 2 +- Source/Core/VideoCommon/Src/RenderBase.cpp | 77 +---------- Source/Core/VideoCommon/Src/RenderBase.h | 7 +- 7 files changed, 148 insertions(+), 111 deletions(-) diff --git a/Source/Core/VideoBackends/D3D/Src/Render.cpp b/Source/Core/VideoBackends/D3D/Src/Render.cpp index 9790f2b52e..380ab7fa83 100644 --- a/Source/Core/VideoBackends/D3D/Src/Render.cpp +++ b/Source/Core/VideoBackends/D3D/Src/Render.cpp @@ -680,7 +680,7 @@ void Renderer::SetBlendMode(bool forceUpdate) } } -void Renderer::TakeScreenshot(const TargetRectangle &rc, std::string filename) +bool Renderer::SaveScreenshot(const std::string &filename, const TargetRectangle& rc) { if (!s_screenshot_texture) CreateScreenshotTexture(rc); @@ -689,26 +689,34 @@ void Renderer::TakeScreenshot(const TargetRectangle &rc, std::string filename) 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); - u8* __restrict dest = (u8*) malloc(rc.GetWidth() * rc.GetHeight() * 3); - + // 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); - u8* src = (u8*) map.pData; - for (int y = 0; y < rc.GetHeight(); ++y) + for (unsigned int y = 0; y < rc.GetHeight(); ++y) { - u8* __restrict row = src; - for (int x = 0; x < rc.GetWidth(); ++x) + u8* ptr = (u8*)map.pData + y * map.RowPitch + 3; + for (unsigned int x = 0; x < rc.GetWidth(); ++x) { - *dest++ = *row++; - *dest++ = *row++; - *dest++ = *row++; - row++; + *ptr = 0xFF; + ptr += 4; } - src += map.RowPitch; } D3D::context->Unmap(s_screenshot_texture, 0); - SaveScreenshot(dest, rc.GetWidth(), rc.GetHeight(), filename); + // ready to be saved + //HRESULT hr = PD3DX11SaveTextureToFileA(D3D::context, s_screenshot_texture, D3DX11_IFF_PNG, filename.c_str()); + HRESULT hr = 0; + if (SUCCEEDED(hr)) + { + OSD::AddMessage(StringFromFormat("Saved %i x %i %s", rc.GetWidth(), + rc.GetHeight(), filename.c_str())); + } + else + { + OSD::AddMessage(StringFromFormat("Error saving %s", filename.c_str())); + } + + return SUCCEEDED(hr); } void formatBufferDump(const u8* in, u8* out, int w, int h, int p) @@ -846,7 +854,7 @@ void Renderer::Swap(u32 xfbAddr, u32 fbWidth, u32 fbHeight,const EFBRectangle& r // done with drawing the game stuff, good moment to save a screenshot if (s_bScreenshot) { - TakeScreenshot(GetTargetRectangle(), s_sScreenshotName); + SaveScreenshot(s_sScreenshotName, GetTargetRectangle()); s_bScreenshot = false; } diff --git a/Source/Core/VideoBackends/D3D/Src/Render.h b/Source/Core/VideoBackends/D3D/Src/Render.h index e899484111..12e5b595d3 100644 --- a/Source/Core/VideoBackends/D3D/Src/Render.h +++ b/Source/Core/VideoBackends/D3D/Src/Render.h @@ -48,10 +48,9 @@ public: void UpdateViewport(); - static void TakeScreenshot(const TargetRectangle &rc, std::string filename); + bool SaveScreenshot(const std::string &filename, const TargetRectangle &rc); static bool CheckForResize(); - }; } diff --git a/Source/Core/VideoBackends/OGL/Src/Render.cpp b/Source/Core/VideoBackends/OGL/Src/Render.cpp index 4583c6772c..d03d3cedd3 100644 --- a/Source/Core/VideoBackends/OGL/Src/Render.cpp +++ b/Source/Core/VideoBackends/OGL/Src/Render.cpp @@ -11,6 +11,9 @@ #include #include "GLUtil.h" +#if defined(HAVE_WX) && HAVE_WX +#include "WxUtils.h" +#endif #include "FileUtil.h" @@ -22,6 +25,7 @@ #include "DriverDetails.h" #include "VideoConfig.h" #include "Statistics.h" +#include "ImageWrite.h" #include "PixelEngine.h" #include "Render.h" #include "BPStructs.h" @@ -58,6 +62,10 @@ #include "AVIDump.h" #endif +#if defined(HAVE_WX) && HAVE_WX +#include +#endif + // glew1.8 doesn't define KHR_debug #ifndef GL_DEBUG_OUTPUT #define GL_DEBUG_OUTPUT 0x92E0 @@ -70,6 +78,17 @@ void VideoConfig::UpdateProjectionHack() } +#if defined(HAVE_WX) && HAVE_WX +// Screenshot thread struct +typedef struct +{ + int W, H; + std::string filename; + wxImage *img; +} ScrStrct; +#endif + + int OSDInternalW, OSDInternalH; namespace OGL @@ -108,6 +127,10 @@ static u32 s_blendMode; static bool s_vsync; +#if defined(HAVE_WX) && HAVE_WX +static std::thread scrshotThread; +#endif + // EFB cache related static const u32 EFB_CACHE_RECT_SIZE = 64; // Cache 64x64 blocks. static const u32 EFB_CACHE_WIDTH = (EFB_WIDTH + EFB_CACHE_RECT_SIZE - 1) / EFB_CACHE_RECT_SIZE; // round up @@ -616,6 +639,11 @@ Renderer::Renderer() Renderer::~Renderer() { + +#if defined(HAVE_WX) && HAVE_WX + if (scrshotThread.joinable()) + scrshotThread.join(); +#endif } void Renderer::Shutdown() @@ -1391,9 +1419,11 @@ void Renderer::Swap(u32 xfbAddr, u32 fbWidth, u32 fbHeight,const EFBRectangle& r // Save screenshot if (s_bScreenshot) { - TakeScreenshot(flipped_trc, s_sScreenshotName); - s_bScreenshot = false; + std::lock_guard lk(s_criticalScreenshot); + SaveScreenshot(s_sScreenshotName, flipped_trc); // Reset settings + s_sScreenshotName.clear(); + s_bScreenshot = false; } // Frame dumps are handled a little differently in Windows @@ -1771,22 +1801,71 @@ void Renderer::SetInterlacingMode() void Renderer::FlipImageData(u8 *data, int w, int h) { - // XXX make this faster - u8* __restrict top = data; - u8* bot = data + w * h * 3; + // Flip image upside down. Damn OpenGL. for (int y = 0; y < h / 2; y++) { - size_t stride = w * 3; - bot -= stride; - u8* __restrict brow = bot; - for(size_t x = 0; x < stride; x++) + for(int x = 0; x < w; x++) { - std::swap(*top++, *brow++); + std::swap(data[(y * w + x) * 3], data[((h - 1 - y) * w + x) * 3]); + std::swap(data[(y * w + x) * 3 + 1], data[((h - 1 - y) * w + x) * 3 + 1]); + std::swap(data[(y * w + x) * 3 + 2], data[((h - 1 - y) * w + x) * 3 + 2]); } } } -void Renderer::TakeScreenshot(const TargetRectangle &back_rc, std::string filename) +} + +// TODO: remove +extern bool g_aspect_wide; + +#if defined(HAVE_WX) && HAVE_WX +void TakeScreenshot(ScrStrct* threadStruct) +{ + // These will contain the final image size + float FloatW = (float)threadStruct->W; + float FloatH = (float)threadStruct->H; + + // Handle aspect ratio for the final ScrStrct to look exactly like what's on screen. + if (g_ActiveConfig.iAspectRatio != ASPECT_STRETCH) + { + bool use16_9 = g_aspect_wide; + + // Check for force-settings and override. + if (g_ActiveConfig.iAspectRatio == ASPECT_FORCE_16_9) + use16_9 = true; + else if (g_ActiveConfig.iAspectRatio == ASPECT_FORCE_4_3) + use16_9 = false; + + float Ratio = (FloatW / FloatH) / (!use16_9 ? (4.0f / 3.0f) : (16.0f / 9.0f)); + + // If ratio > 1 the picture is too wide and we have to limit the width. + if (Ratio > 1) + FloatW /= Ratio; + // ratio == 1 or the image is too high, we have to limit the height. + else + FloatH *= Ratio; + + // This is a bit expensive on high resolutions + threadStruct->img->Rescale((int)FloatW, (int)FloatH, wxIMAGE_QUALITY_HIGH); + } + + // Save the screenshot and finally kill the wxImage object + // This is really expensive when saving to PNG, but not at all when using BMP + threadStruct->img->SaveFile(StrToWxStr(threadStruct->filename), + wxBITMAP_TYPE_PNG); + threadStruct->img->Destroy(); + + // Show success messages + OSD::AddMessage(StringFromFormat("Saved %i x %i %s", (int)FloatW, (int)FloatH, + threadStruct->filename.c_str()), 2000); + delete threadStruct; +} +#endif + +namespace OGL +{ + +bool Renderer::SaveScreenshot(const std::string &filename, const TargetRectangle &back_rc) { u32 W = back_rc.GetWidth(); u32 H = back_rc.GetHeight(); @@ -1800,13 +1879,38 @@ void Renderer::TakeScreenshot(const TargetRectangle &back_rc, std::string filena { free(data); OSD::AddMessage("Error capturing or saving screenshot.", 2000); - return; + return false; } // Turn image upside down FlipImageData(data, W, H); - SaveScreenshot(data, W, H, filename); +#if defined(HAVE_WX) && HAVE_WX + // Create wxImage + wxImage *a = new wxImage(W, H, data); + + if (scrshotThread.joinable()) + scrshotThread.join(); + + ScrStrct *threadStruct = new ScrStrct; + threadStruct->filename = filename; + threadStruct->img = a; + threadStruct->H = H; threadStruct->W = W; + + scrshotThread = std::thread(TakeScreenshot, threadStruct); +#ifdef _WIN32 + SetThreadPriority(scrshotThread.native_handle(), THREAD_PRIORITY_BELOW_NORMAL); +#endif + bool result = true; + + OSD::AddMessage("Saving Screenshot... ", 2000); + +#else + bool result = SaveTGA(filename.c_str(), W, H, data); + free(data); +#endif + + return result; } } diff --git a/Source/Core/VideoBackends/OGL/Src/Render.h b/Source/Core/VideoBackends/OGL/Src/Render.h index f38c9b4c58..9b4838ee25 100644 --- a/Source/Core/VideoBackends/OGL/Src/Render.h +++ b/Source/Core/VideoBackends/OGL/Src/Render.h @@ -63,7 +63,7 @@ public: void RenderText(const char* pstr, int left, int top, u32 color) override; void DrawDebugInfo(); - static void FlipImageData(u8 *data, int w, int h); + void FlipImageData(u8 *data, int w, int h); u32 AccessEFB(EFBAccessType type, u32 x, u32 y, u32 poke_data) override; @@ -80,7 +80,7 @@ public: void UpdateViewport() override; - static void TakeScreenshot(const TargetRectangle &rc, std::string filename); + bool SaveScreenshot(const std::string &filename, const TargetRectangle &rc); private: void UpdateEFBCache(EFBAccessType type, u32 cacheRectIdx, const EFBRectangle& efbPixelRc, const TargetRectangle& targetPixelRc, const u32* data); diff --git a/Source/Core/VideoBackends/OGL/Src/VertexManager.cpp b/Source/Core/VideoBackends/OGL/Src/VertexManager.cpp index 4fb355d897..44d8ddeaa4 100644 --- a/Source/Core/VideoBackends/OGL/Src/VertexManager.cpp +++ b/Source/Core/VideoBackends/OGL/Src/VertexManager.cpp @@ -341,7 +341,7 @@ void VertexManager::vFlush() tr.right = Renderer::GetTargetWidth(); tr.top = 0; tr.bottom = Renderer::GetTargetHeight(); - Renderer::TakeScreenshot(tr, str); + g_renderer->SaveScreenshot(str, tr); } #endif g_Config.iSaveTargetId++; diff --git a/Source/Core/VideoCommon/Src/RenderBase.cpp b/Source/Core/VideoCommon/Src/RenderBase.cpp index bb3dad8a73..e509ccb980 100644 --- a/Source/Core/VideoCommon/Src/RenderBase.cpp +++ b/Source/Core/VideoCommon/Src/RenderBase.cpp @@ -30,12 +30,6 @@ #include "XFMemory.h" #include "FifoPlayer/FifoRecorder.h" #include "AVIDump.h" -#include "OnScreenDisplay.h" -#if defined(HAVE_WX) && HAVE_WX -#include "WxUtils.h" -#include -#endif -#include "ImageWrite.h" #include #include @@ -73,8 +67,6 @@ unsigned int Renderer::efb_scale_numeratorY = 1; unsigned int Renderer::efb_scale_denominatorX = 1; unsigned int Renderer::efb_scale_denominatorY = 1; -// TODO: remove -extern bool g_aspect_wide; Renderer::Renderer() : frame_data() @@ -250,72 +242,6 @@ void Renderer::SetScreenshot(const char *filename) s_bScreenshot = true; } -#if defined(HAVE_WX) && HAVE_WX -void Renderer::SaveScreenshotOnThread(u8* data, size_t width, size_t height, std::string filename) -{ - wxImage *img = new wxImage(width, height, data); - - // These will contain the final image size - float FloatW = (float)width; - float FloatH = (float)height; - - // Handle aspect ratio for the final ScrStrct to look exactly like what's on screen. - if (g_ActiveConfig.iAspectRatio != ASPECT_STRETCH) - { - bool use16_9 = g_aspect_wide; - - // Check for force-settings and override. - if (g_ActiveConfig.iAspectRatio == ASPECT_FORCE_16_9) - use16_9 = true; - else if (g_ActiveConfig.iAspectRatio == ASPECT_FORCE_4_3) - use16_9 = false; - - float Ratio = (FloatW / FloatH) / (!use16_9 ? (4.0f / 3.0f) : (16.0f / 9.0f)); - - // If ratio > 1 the picture is too wide and we have to limit the width. - if (Ratio > 1) - FloatW /= Ratio; - // ratio == 1 or the image is too high, we have to limit the height. - else - FloatH *= Ratio; - - // This is a bit expensive on high resolutions - img->Rescale((int)FloatW, (int)FloatH, wxIMAGE_QUALITY_HIGH); - } - - // Save the screenshot and finally kill the wxImage object - // This is really expensive when saving to PNG, but not at all when using BMP - img->SaveFile(StrToWxStr(filename), wxBITMAP_TYPE_PNG); - img->Destroy(); - - // Show success messages - OSD::AddMessage(StringFromFormat("Saved %i x %i %s", (int)FloatW, (int)FloatH, - filename.c_str()), 2000); -} -#endif - -void Renderer::SaveScreenshot(u8* ptr, size_t width, size_t height, std::string filename) -{ - std::lock_guard lk(s_criticalScreenshot); -#if defined(HAVE_WX) && HAVE_WX - // Create wxImage - - std::thread thread(SaveScreenshotOnThread, ptr, width, height, filename); -#ifdef _WIN32 - SetThreadPriority(thread.native_handle(), THREAD_PRIORITY_BELOW_NORMAL); -#endif - thread.detach(); - - OSD::AddMessage("Saving Screenshot... ", 2000); - -#else - SaveTGA(filename.c_str(), width, height, ptr); - free(ptr); -#endif - - s_bScreenshot = false; -} - // Create On-Screen-Messages void Renderer::DrawDebugText() { @@ -421,6 +347,9 @@ void Renderer::DrawDebugText() g_renderer->RenderText(final_yellow.c_str(), 20, 20, 0xFFFFFF00); } +// TODO: remove +extern bool g_aspect_wide; + void Renderer::UpdateDrawRectangle(int backbuffer_width, int backbuffer_height) { float FloatGLWidth = (float)backbuffer_width; diff --git a/Source/Core/VideoCommon/Src/RenderBase.h b/Source/Core/VideoCommon/Src/RenderBase.h index 7a153fb5cc..22d31cde23 100644 --- a/Source/Core/VideoCommon/Src/RenderBase.h +++ b/Source/Core/VideoCommon/Src/RenderBase.h @@ -110,6 +110,8 @@ public: virtual void UpdateViewport() = 0; + virtual bool SaveScreenshot(const std::string &filename, const TargetRectangle &rc) = 0; + static unsigned int GetPrevPixelFormat() { return prev_efb_format; } static void StorePixelFormat(unsigned int new_format) { prev_efb_format = new_format; } @@ -121,11 +123,6 @@ protected: static void CheckFifoRecording(); static void RecordVideoMemory(); - #if defined(HAVE_WX) && HAVE_WX - static void SaveScreenshotOnThread(u8* data, size_t width, size_t height, std::string filename); - #endif - static void SaveScreenshot(u8* ptr, size_t width, size_t height, std::string filename); - static volatile bool s_bScreenshot; static std::mutex s_criticalScreenshot; static std::string s_sScreenshotName; From 22f727cc69a897cfb79ddf77b7f11539477b3390 Mon Sep 17 00:00:00 2001 From: Tony Wasserka Date: Sun, 10 Nov 2013 00:14:01 +0100 Subject: [PATCH 66/90] D3D: Use D3DX11 for taking screenshots. --- Source/Core/VideoBackends/D3D/Src/Render.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Source/Core/VideoBackends/D3D/Src/Render.cpp b/Source/Core/VideoBackends/D3D/Src/Render.cpp index 380ab7fa83..1a4421f3c5 100644 --- a/Source/Core/VideoBackends/D3D/Src/Render.cpp +++ b/Source/Core/VideoBackends/D3D/Src/Render.cpp @@ -704,8 +704,7 @@ bool Renderer::SaveScreenshot(const std::string &filename, const TargetRectangle 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 = 0; + HRESULT hr = PD3DX11SaveTextureToFileA(D3D::context, s_screenshot_texture, D3DX11_IFF_PNG, filename.c_str()); if (SUCCEEDED(hr)) { OSD::AddMessage(StringFromFormat("Saved %i x %i %s", rc.GetWidth(), From e013a74cdbdf9cebb150bc59c196a5ff3f6af710 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Sun, 10 Nov 2013 05:02:32 +0000 Subject: [PATCH 67/90] [ARM] More NEON emitters. --- Source/Core/Common/Src/ArmEmitter.cpp | 73 ++++++++++++++++++++------- Source/Core/Common/Src/ArmEmitter.h | 10 ++-- 2 files changed, 62 insertions(+), 21 deletions(-) diff --git a/Source/Core/Common/Src/ArmEmitter.cpp b/Source/Core/Common/Src/ArmEmitter.cpp index cb9544dce3..a324659f26 100644 --- a/Source/Core/Common/Src/ArmEmitter.cpp +++ b/Source/Core/Common/Src/ArmEmitter.cpp @@ -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 @@ -1710,6 +1710,56 @@ 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::VMUL(NEONElementType 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"); + + 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(NEONElementType 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(NEONElementType 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::VSUB(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) { @@ -1797,18 +1847,5 @@ void NEONXEmitter::VRSQRTE(NEONElementType Size, ARMReg Vd, ARMReg Vm) | ((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 cdfddd8d7e..a00c0d1197 100644 --- a/Source/Core/Common/Src/ArmEmitter.h +++ b/Source/Core/Common/Src/ArmEmitter.h @@ -580,7 +580,8 @@ enum NEONElementType I_64 = (1 << 3), I_SIGNED = (1 << 4), I_UNSIGNED = (1 << 5), - F_32 = (1 << 6) + F_32 = (1 << 6), + I_POLYNOMIAL = (1 << 7), // Only used in VMUL/VMULL }; enum NEONAlignment @@ -665,6 +666,11 @@ public: 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 VMUL(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); + void VMULL(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); + void VNEG(NEONElementType Size, ARMReg Vd, ARMReg Vm); + void VORN(ARMReg Vd, ARMReg Vn, ARMReg Vm); + void VORR(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); @@ -672,8 +678,6 @@ public: void VRSQRTE(NEONElementType Size, ARMReg Vd, ARMReg Vm); - void VORR(ARMReg Vd, ARMReg Vn, 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); From 3a28afd8d5d55dc4a90199029d50a7e13dc7c7b2 Mon Sep 17 00:00:00 2001 From: Jordan Cristiano Date: Sun, 10 Nov 2013 04:57:11 -0500 Subject: [PATCH 68/90] Changed thread barrier and event to use a lamba wait predicate instead of a functor. --- Source/Core/Common/Src/Thread.h | 42 +++++---------------------------- 1 file changed, 6 insertions(+), 36 deletions(-) diff --git a/Source/Core/Common/Src/Thread.h b/Source/Core/Common/Src/Thread.h index bfd7ea0308..b2e9572ce5 100644 --- a/Source/Core/Common/Src/Thread.h +++ b/Source/Core/Common/Src/Thread.h @@ -38,7 +38,7 @@ 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,28 +96,12 @@ 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; From d1de3368797e137a9b953356775271918c116e57 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Mon, 11 Nov 2013 01:46:57 +0000 Subject: [PATCH 69/90] [ARM] More NEON emitters. --- Source/Core/Common/Src/ArmEmitter.cpp | 351 ++++++++++++++++++++++++-- Source/Core/Common/Src/ArmEmitter.h | 34 ++- 2 files changed, 359 insertions(+), 26 deletions(-) diff --git a/Source/Core/Common/Src/ArmEmitter.cpp b/Source/Core/Common/Src/ArmEmitter.cpp index a324659f26..6fa952ea40 100644 --- a/Source/Core/Common/Src/ArmEmitter.cpp +++ b/Source/Core/Common/Src/ArmEmitter.cpp @@ -1760,22 +1760,340 @@ void NEONXEmitter::VORR(ARMReg Vd, ARMReg Vn, ARMReg Vm) Write32((0xF2 << 24) | (2 << 20) | EncodeVn(Vn) | EncodeVd(Vd) | (0x11 << 4) | (register_quad << 6) | EncodeVm(Vm)); } - -void NEONXEmitter::VSUB(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) +void NEONXEmitter::VPADAL(NEONElementType Size, ARMReg Vd, 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"); + _dbg_assert_msg_(DYNA_REC, !(Size & F_32), __FUNCTION__ " doesn't support float"); - // Gets encoded as a double register + 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(NEONElementType 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) | (1 << 23) | (encodedSize(Size) << 20) | EncodeVn(Vn) | EncodeVd(Vd) | \ + (0xB1 << 4) | EncodeVm(Vm)); +} +void NEONXEmitter::VPADDL(NEONElementType 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(NEONElementType 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(NEONElementType 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(NEONElementType 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(NEONElementType 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::VQMLAL(NEONElementType 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::VQMLSL(NEONElementType 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(NEONElementType 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(NEONElementType 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(NEONElementType 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(NEONElementType 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(NEONElementType 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) | \ + (0x91 << 4) | (register_quad << 6) | EncodeVm(Vm)); +} +void NEONXEmitter::VQSHL(NEONElementType 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(NEONElementType 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(NEONElementType 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) << 20) | EncodeVn(Vn) | EncodeVd(Vd) | \ + (0x40 << 4) | EncodeVm(Vm)); +} +void NEONXEmitter::VRECPE(NEONElementType 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) | (0x3 << 16) | EncodeVd(Vd) | \ + (0x40 << 4) | (Size & F_32 ? 1 << 8 : 0) | (register_quad << 6) | EncodeVm(Vm)); +} +void NEONXEmitter::VRHADD(NEONElementType 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) | (Size & I_UNSIGNED ? 1 << 24 : 0) | (encodedSize(Size) << 20) | EncodeVn(Vn) | EncodeVd(Vd) | \ + (0x10 << 4) | EncodeVm(Vm)); +} +void NEONXEmitter::VRSHL(NEONElementType 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(NEONElementType Size, ARMReg Vd, ARMReg Vm) +{ + 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::VRSQRTS(NEONElementType 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__ " only supports float"); + bool register_quad = Vd >= Q0; + + Write32((0xF2 << 24) | (1 << 21) | EncodeVn(Vn) | EncodeVd(Vd) | \ + (0xF1 << 4) | (register_quad << 6) | EncodeVm(Vm)); +} +void NEONXEmitter::VRSUBHN(NEONElementType 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 << 21) | (encodedSize(Size) << 20) | EncodeVn(Vn) | EncodeVd(Vd) | \ + (0x60 << 4) | EncodeVm(Vm)); +} +void NEONXEmitter::VSHL(NEONElementType 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(NEONElementType 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(NEONElementType 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) << 20) | EncodeVn(Vn) | EncodeVd(Vd) | \ + (0x60 << 4) | EncodeVm(Vm)); +} +void NEONXEmitter::VSUBL(NEONElementType 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) | (encodedSize(Size) << 20) | EncodeVn(Vn) | EncodeVd(Vd) | \ + (0x20 << 4) | EncodeVm(Vm)); +} +void NEONXEmitter::VSUBW(NEONElementType 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) | (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(NEONElementType 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(NEONElementType 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(NEONElementType 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(NEONElementType 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(NEONElementType Size, ARMReg Vd, ARMReg Rn, NEONAlignment align, ARMReg Rm) { u32 spacing = 0x7; // Only support loading to 1 reg @@ -1786,7 +2104,6 @@ void NEONXEmitter::VLD1(NEONElementType Size, ARMReg Vd, ARMReg Rn, NEONAlignmen | ((Vd & 0xF) << 12) | (spacing << 8) | (encodedSize(Size) << 6) | (align << 4) | Rm); } - void NEONXEmitter::VLD2(NEONElementType Size, ARMReg Vd, ARMReg Rn, NEONAlignment align, ARMReg Rm) { u32 spacing = 0x8; // Single spaced registers @@ -1797,7 +2114,6 @@ void NEONXEmitter::VLD2(NEONElementType Size, ARMReg Vd, ARMReg Rn, NEONAlignmen | ((Vd & 0xF) << 12) | (spacing << 8) | (encodedSize(Size) << 6) | (align << 4) | Rm); } - void NEONXEmitter::VST1(NEONElementType Size, ARMReg Vd, ARMReg Rn, NEONAlignment align, ARMReg Rm) { u32 spacing = 0x7; // Single spaced registers @@ -1809,7 +2125,6 @@ void NEONXEmitter::VST1(NEONElementType Size, ARMReg Vd, ARMReg Rn, NEONAlignmen | (align << 4) | Rm); } - void NEONXEmitter::VREVX(u32 size, NEONElementType Size, ARMReg Vd, ARMReg Vm) { bool register_quad = Vd >= Q0; @@ -1835,17 +2150,5 @@ void NEONXEmitter::VREV16(NEONElementType 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)); -} - } diff --git a/Source/Core/Common/Src/ArmEmitter.h b/Source/Core/Common/Src/ArmEmitter.h index a00c0d1197..a2b6884607 100644 --- a/Source/Core/Common/Src/ArmEmitter.h +++ b/Source/Core/Common/Src/ArmEmitter.h @@ -671,13 +671,43 @@ public: void VNEG(NEONElementType Size, ARMReg Vd, ARMReg Vm); void VORN(ARMReg Vd, ARMReg Vn, ARMReg Vm); void VORR(ARMReg Vd, ARMReg Vn, ARMReg Vm); + void VPADAL(NEONElementType Size, ARMReg Vd, ARMReg Vm); + void VPADD(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); + void VPADDL(NEONElementType Size, ARMReg Vd, ARMReg Vm); + void VPMAX(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); + void VPMIN(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); + void VQABS(NEONElementType Size, ARMReg Vd, ARMReg Vm); + void VQADD(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); + void VQMLAL(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); + void VQMLSL(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); + void VQDMULH(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); + void VQDMULL(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); + void VQNEG(NEONElementType Size, ARMReg Vd, ARMReg Vm); + void VQRDMULH(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); + void VQRSHL(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); + void VQSHL(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); + void VQSUB(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); + void VRADDHN(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); + void VRECPE(NEONElementType Size, ARMReg Vd, ARMReg Vm); + void VRHADD(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); + void VRSHL(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); + void VRSQRTE(NEONElementType Size, ARMReg Vd, ARMReg Vm); + void VRSQRTS(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); + void VRSUBHN(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); + void VSHL(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); void VSUB(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); + void VSUBHN(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); + void VSUBL(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); + void VSUBW(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); + void VSWP(ARMReg Vd, ARMReg Vm); + void VTRN(NEONElementType Size, ARMReg Vd, ARMReg Vm); + void VTST(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); + void VUZP(NEONElementType Size, ARMReg Vd, ARMReg Vm); + void VZIP(NEONElementType Size, ARMReg Vd, 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 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); From 22fef0da9bdda47dba0b83ba2ea89de1b28a75ab Mon Sep 17 00:00:00 2001 From: Chanwoong Kim Date: Tue, 12 Nov 2013 01:05:30 +0900 Subject: [PATCH 70/90] Fixed a bug that incorrectly recognized as 'GameCube'. when you open the Korean Wii Disc, which is re-encrypted with a common-key(g_MasterKey). --- Source/Core/DiscIO/Src/VolumeCreator.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/Source/Core/DiscIO/Src/VolumeCreator.cpp b/Source/Core/DiscIO/Src/VolumeCreator.cpp index 7cf26f826a..4863a17949 100644 --- a/Source/Core/DiscIO/Src/VolumeCreator.cpp +++ b/Source/Core/DiscIO/Src/VolumeCreator.cpp @@ -183,8 +183,14 @@ static IVolume* CreateVolumeFromCryptedWiiImage(IBlobReader& _rReader, u32 _Part memset(IV, 0, 16); _rReader.Read(rPartition.Offset + 0x44c, 8, IV); + bool usingKoreanKey = false; + if (Korean && Reader.Read32(0x501ee) != 0) + { + usingKoreanKey = true; + } + aes_context AES_ctx; - aes_setkey_dec(&AES_ctx, (Korean ? g_MasterKeyK : g_MasterKey), 128); + aes_setkey_dec(&AES_ctx, (usingKoreanKey ? g_MasterKeyK : g_MasterKey), 128); u8 VolumeKey[16]; aes_crypt_cbc(&AES_ctx, AES_DECRYPT, 16, IV, SubKey, VolumeKey); From 68ba0f7f4e587e3359411cd57f7acb51b96e5d2c Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Mon, 11 Nov 2013 17:17:49 +0000 Subject: [PATCH 71/90] Add a comment to the magic value reading location. --- Source/Core/DiscIO/Src/VolumeCreator.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Source/Core/DiscIO/Src/VolumeCreator.cpp b/Source/Core/DiscIO/Src/VolumeCreator.cpp index 4863a17949..4dd24f9b4b 100644 --- a/Source/Core/DiscIO/Src/VolumeCreator.cpp +++ b/Source/Core/DiscIO/Src/VolumeCreator.cpp @@ -184,6 +184,10 @@ static IVolume* CreateVolumeFromCryptedWiiImage(IBlobReader& _rReader, u32 _Part _rReader.Read(rPartition.Offset + 0x44c, 8, IV); 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; From 56557c845aa4ee5a0f9a1b06ad3fc5d6e7e6e4b7 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Tue, 12 Nov 2013 01:01:54 +0000 Subject: [PATCH 72/90] [ARM] Fix NEON emitter encodings. --- Source/Core/Common/Src/ArmEmitter.cpp | 181 ++++++++++-------- Source/Core/Common/Src/ArmEmitter.h | 172 ++++++++--------- Source/Core/Core/Src/PowerPC/JitArm32/Jit.cpp | 19 ++ 3 files changed, 201 insertions(+), 171 deletions(-) diff --git a/Source/Core/Common/Src/ArmEmitter.cpp b/Source/Core/Common/Src/ArmEmitter.cpp index 6fa952ea40..6178d2c58c 100644 --- a/Source/Core/Common/Src/ArmEmitter.cpp +++ b/Source/Core/Common/Src/ArmEmitter.cpp @@ -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,7 +1710,7 @@ 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::VMUL(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 >= D0, "Pass invalid register to " __FUNCTION__); _dbg_assert_msg_(DYNA_REC, cpu_info.bNEON, "Can't use " __FUNCTION__ " when CPU doesn't support it"); @@ -1723,7 +1723,7 @@ void NEONXEmitter::VMUL(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) 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(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg 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"); @@ -1732,7 +1732,7 @@ void NEONXEmitter::VMULL(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) 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(NEONElementType Size, ARMReg Vd, ARMReg 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"); @@ -1760,7 +1760,7 @@ void NEONXEmitter::VORR(ARMReg Vd, ARMReg Vn, ARMReg Vm) Write32((0xF2 << 24) | (2 << 20) | EncodeVn(Vn) | EncodeVd(Vd) | (0x11 << 4) | (register_quad << 6) | EncodeVm(Vm)); } -void NEONXEmitter::VPADAL(NEONElementType Size, ARMReg Vd, ARMReg 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"); @@ -1771,7 +1771,7 @@ void NEONXEmitter::VPADAL(NEONElementType Size, ARMReg Vd, ARMReg Vm) 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(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg 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"); @@ -1779,10 +1779,10 @@ void NEONXEmitter::VPADD(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) if (Size & F_32) Write32((0xF3 << 24) | EncodeVn(Vn) | EncodeVd(Vd) | (0xD0 << 4) | EncodeVm(Vm)); else - Write32((0xF2 << 24) | (1 << 23) | (encodedSize(Size) << 20) | EncodeVn(Vn) | EncodeVd(Vd) | \ + Write32((0xF2 << 24) | (encodedSize(Size) << 20) | EncodeVn(Vn) | EncodeVd(Vd) | \ (0xB1 << 4) | EncodeVm(Vm)); } -void NEONXEmitter::VPADDL(NEONElementType Size, ARMReg Vd, ARMReg 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"); @@ -1793,7 +1793,7 @@ void NEONXEmitter::VPADDL(NEONElementType Size, ARMReg Vd, ARMReg Vm) 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(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg 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"); @@ -1804,7 +1804,7 @@ void NEONXEmitter::VPMAX(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) Write32((0xF2 << 24) | (Size & I_UNSIGNED ? 1 << 24 : 0) | (encodedSize(Size) << 20) | EncodeVn(Vn) | EncodeVd(Vd) | \ (0xA0 << 4) | EncodeVm(Vm)); } -void NEONXEmitter::VPMIN(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg 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"); @@ -1815,7 +1815,7 @@ void NEONXEmitter::VPMIN(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) Write32((0xF2 << 24) | (Size & I_UNSIGNED ? 1 << 24 : 0) | (encodedSize(Size) << 20) | EncodeVn(Vn) | EncodeVd(Vd) | \ (0xA1 << 4) | EncodeVm(Vm)); } -void NEONXEmitter::VQABS(NEONElementType Size, ARMReg Vd, ARMReg 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"); @@ -1826,7 +1826,7 @@ void NEONXEmitter::VQABS(NEONElementType Size, ARMReg Vd, ARMReg Vm) Write32((0xF3 << 24) | (0xB << 20) | (encodedSize(Size) << 18) | EncodeVd(Vd) | \ (0x70 << 4) | (register_quad << 6) | EncodeVm(Vm)); } -void NEONXEmitter::VQADD(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg 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"); @@ -1837,7 +1837,7 @@ void NEONXEmitter::VQADD(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) Write32((0xF2 << 24) | (encodedSize(Size) << 20) | EncodeVn(Vn) | EncodeVd(Vd) | \ (0x1 << 4) | (register_quad << 6) | EncodeVm(Vm)); } -void NEONXEmitter::VQMLAL(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg 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"); @@ -1846,7 +1846,7 @@ void NEONXEmitter::VQMLAL(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) Write32((0xF2 << 24) | (1 << 23) | (encodedSize(Size) << 20) | EncodeVn(Vn) | EncodeVd(Vd) | \ (0x90 << 4) | EncodeVm(Vm)); } -void NEONXEmitter::VQMLSL(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg 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"); @@ -1855,7 +1855,7 @@ void NEONXEmitter::VQMLSL(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) Write32((0xF2 << 24) | (1 << 23) | (encodedSize(Size) << 20) | EncodeVn(Vn) | EncodeVd(Vd) | \ (0xB0 << 4) | EncodeVm(Vm)); } -void NEONXEmitter::VQDMULH(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg 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"); @@ -1864,7 +1864,7 @@ void NEONXEmitter::VQDMULH(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm Write32((0xF2 << 24) | (encodedSize(Size) << 20) | EncodeVn(Vn) | EncodeVd(Vd) | \ (0xB0 << 4) | EncodeVm(Vm)); } -void NEONXEmitter::VQDMULL(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg 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"); @@ -1873,7 +1873,7 @@ void NEONXEmitter::VQDMULL(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm Write32((0xF2 << 24) | (1 << 23) | (encodedSize(Size) << 20) | EncodeVn(Vn) | EncodeVd(Vd) | \ (0xD0 << 4) | EncodeVm(Vm)); } -void NEONXEmitter::VQNEG(NEONElementType Size, ARMReg Vd, ARMReg 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"); @@ -1884,7 +1884,7 @@ void NEONXEmitter::VQNEG(NEONElementType Size, ARMReg Vd, ARMReg Vm) Write32((0xF3 << 24) | (0xB << 20) | (encodedSize(Size) << 18) | EncodeVd(Vd) | \ (0x78 << 4) | (register_quad << 6) | EncodeVm(Vm)); } -void NEONXEmitter::VQRDMULH(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg 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"); @@ -1893,7 +1893,7 @@ void NEONXEmitter::VQRDMULH(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg V Write32((0xF3 << 24) | (encodedSize(Size) << 20) | EncodeVn(Vn) | EncodeVd(Vd) | \ (0xB0 << 4) | EncodeVm(Vm)); } -void NEONXEmitter::VQRSHL(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg 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"); @@ -1902,9 +1902,9 @@ void NEONXEmitter::VQRSHL(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) bool register_quad = Vd >= Q0; Write32((0xF2 << 24) | (Size & I_UNSIGNED ? 1 << 24 : 0) | (encodedSize(Size) << 20) | EncodeVn(Vn) | EncodeVd(Vd) | \ - (0x91 << 4) | (register_quad << 6) | EncodeVm(Vm)); + (0x51 << 4) | (register_quad << 6) | EncodeVm(Vm)); } -void NEONXEmitter::VQSHL(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg 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"); @@ -1915,7 +1915,7 @@ void NEONXEmitter::VQSHL(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) 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(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg 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"); @@ -1926,35 +1926,46 @@ void NEONXEmitter::VQSUB(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) 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(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg 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) << 20) | EncodeVn(Vn) | EncodeVd(Vd) | \ + Write32((0xF3 << 24) | (1 << 23) | ((encodedSize(Size) - 1) << 20) | EncodeVn(Vn) | EncodeVd(Vd) | \ (0x40 << 4) | EncodeVm(Vm)); } -void NEONXEmitter::VRECPE(NEONElementType Size, ARMReg Vd, ARMReg 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) | (encodedSize(Size) << 18) | (0x3 << 16) | EncodeVd(Vd) | \ + Write32((0xF3 << 24) | (0xB << 20) | (0xB << 16) | EncodeVd(Vd) | \ (0x40 << 4) | (Size & F_32 ? 1 << 8 : 0) | (register_quad << 6) | EncodeVm(Vm)); } -void NEONXEmitter::VRHADD(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg 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) | EncodeVm(Vm)); + (0x10 << 4) | (register_quad << 6) | EncodeVm(Vm)); } -void NEONXEmitter::VRSHL(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg 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"); @@ -1965,8 +1976,11 @@ void NEONXEmitter::VRSHL(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) 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(NEONElementType Size, ARMReg Vd, ARMReg 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); Vm = SubBase(Vm); @@ -1975,27 +1989,26 @@ void NEONXEmitter::VRSQRTE(NEONElementType Size, ARMReg Vd, ARMReg Vm) | ((Vd & 0xF) << 12) | (9 << 7) | (Size & F_32 ? (1 << 8) : 0) | (register_quad << 6) | ((Vm & 0x10) << 1) | (Vm & 0xF)); } -void NEONXEmitter::VRSQRTS(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) +void NEONXEmitter::VRSQRTS(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__ " only supports float"); bool register_quad = Vd >= Q0; Write32((0xF2 << 24) | (1 << 21) | EncodeVn(Vn) | EncodeVd(Vd) | \ (0xF1 << 4) | (register_quad << 6) | EncodeVm(Vm)); } -void NEONXEmitter::VRSUBHN(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg 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 << 21) | (encodedSize(Size) << 20) | EncodeVn(Vn) | EncodeVd(Vd) | \ + Write32((0xF3 << 24) | (1 << 23) | ((encodedSize(Size) - 1) << 20) | EncodeVn(Vn) | EncodeVd(Vd) | \ (0x60 << 4) | EncodeVm(Vm)); } -void NEONXEmitter::VSHL(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg 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"); @@ -2006,7 +2019,7 @@ void NEONXEmitter::VSHL(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) 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(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg 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"); @@ -2020,28 +2033,28 @@ void NEONXEmitter::VSUB(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) Write32((0xF3 << 24) | (encodedSize(Size) << 20) | EncodeVn(Vn) | EncodeVd(Vd) | \ (0x80 << 4) | (register_quad << 6) | EncodeVm(Vm)); } -void NEONXEmitter::VSUBHN(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg 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) << 20) | EncodeVn(Vn) | EncodeVd(Vd) | \ + Write32((0xF2 << 24) | (1 << 23) | ((encodedSize(Size) - 1) << 20) | EncodeVn(Vn) | EncodeVd(Vd) | \ (0x60 << 4) | EncodeVm(Vm)); } -void NEONXEmitter::VSUBL(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg 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) | (encodedSize(Size) << 20) | EncodeVn(Vn) | EncodeVd(Vd) | \ + 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(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg 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) | (encodedSize(Size) << 20) | EncodeVn(Vn) | EncodeVd(Vd) | \ + 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) @@ -2054,7 +2067,7 @@ void NEONXEmitter::VSWP(ARMReg Vd, ARMReg Vm) Write32((0xF3 << 24) | (0xB << 20) | (1 << 17) | EncodeVd(Vd) | \ (register_quad << 6) | EncodeVm(Vm)); } -void NEONXEmitter::VTRN(NEONElementType Size, ARMReg Vd, ARMReg 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"); @@ -2064,7 +2077,7 @@ void NEONXEmitter::VTRN(NEONElementType Size, ARMReg Vd, ARMReg Vm) Write32((0xF3 << 24) | (0xB << 20) | (encodedSize(Size) << 18) | (1 << 17) | EncodeVd(Vd) | \ (1 << 7) | (register_quad << 6) | EncodeVm(Vm)); } -void NEONXEmitter::VTST(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg 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"); @@ -2074,7 +2087,7 @@ void NEONXEmitter::VTST(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) Write32((0xF2 << 24) | (encodedSize(Size) << 20) | EncodeVn(Vn) | EncodeVd(Vd) | \ (0x81 << 4) | (register_quad << 6) | EncodeVm(Vm)); } -void NEONXEmitter::VUZP(NEONElementType Size, ARMReg Vd, ARMReg 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"); @@ -2084,7 +2097,7 @@ void NEONXEmitter::VUZP(NEONElementType Size, ARMReg Vd, ARMReg Vm) Write32((0xF3 << 24) | (0xB << 20) | (encodedSize(Size) << 18) | (1 << 17) | EncodeVd(Vd) | \ (0x10 << 4) | (register_quad << 6) | EncodeVm(Vm)); } -void NEONXEmitter::VZIP(NEONElementType Size, ARMReg Vd, ARMReg 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"); @@ -2094,7 +2107,7 @@ void NEONXEmitter::VZIP(NEONElementType Size, ARMReg Vd, ARMReg Vm) Write32((0xF3 << 24) | (0xB << 20) | (encodedSize(Size) << 18) | (1 << 17) | EncodeVd(Vd) | \ (0x18 << 4) | (register_quad << 6) | EncodeVm(Vm)); } -void NEONXEmitter::VLD1(NEONElementType Size, ARMReg Vd, ARMReg Rn, NEONAlignment align, ARMReg Rm) +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 @@ -2104,7 +2117,7 @@ void NEONXEmitter::VLD1(NEONElementType Size, ARMReg Vd, ARMReg Rn, NEONAlignmen | ((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 @@ -2114,7 +2127,7 @@ void NEONXEmitter::VLD2(NEONElementType Size, ARMReg Vd, ARMReg Rn, NEONAlignmen | ((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 @@ -2125,7 +2138,7 @@ void NEONXEmitter::VST1(NEONElementType Size, ARMReg Vd, ARMReg Rn, NEONAlignmen | (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); @@ -2136,17 +2149,17 @@ 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); } diff --git a/Source/Core/Common/Src/ArmEmitter.h b/Source/Core/Common/Src/ArmEmitter.h index a2b6884607..99024f3b6f 100644 --- a/Source/Core/Common/Src/ArmEmitter.h +++ b/Source/Core/Common/Src/ArmEmitter.h @@ -338,6 +338,15 @@ 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); @@ -572,18 +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), - I_POLYNOMIAL = (1 << 7), // Only used in VMUL/VMULL -}; - enum NEONAlignment { ALIGN_NONE = 0, @@ -614,104 +611,105 @@ private: return 0; } - void VREVX(u32 size, NEONElementType Size, ARMReg Vd, ARMReg Vm); + void VREVX(u32 size, u32 Size, ARMReg Vd, ARMReg Vm); -public: +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 VMUL(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); - void VMULL(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); - void VNEG(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(NEONElementType Size, ARMReg Vd, ARMReg Vm); - void VPADD(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); - void VPADDL(NEONElementType Size, ARMReg Vd, ARMReg Vm); - void VPMAX(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); - void VPMIN(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); - void VQABS(NEONElementType Size, ARMReg Vd, ARMReg Vm); - void VQADD(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); - void VQMLAL(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); - void VQMLSL(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); - void VQDMULH(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); - void VQDMULL(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); - void VQNEG(NEONElementType Size, ARMReg Vd, ARMReg Vm); - void VQRDMULH(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); - void VQRSHL(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); - void VQSHL(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); - void VQSUB(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); - void VRADDHN(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); - void VRECPE(NEONElementType Size, ARMReg Vd, ARMReg Vm); - void VRHADD(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); - void VRSHL(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); - void VRSQRTE(NEONElementType Size, ARMReg Vd, ARMReg Vm); - void VRSQRTS(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); - void VRSUBHN(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); - void VSHL(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); - void VSUB(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); - void VSUBHN(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); - void VSUBL(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); - void VSUBW(NEONElementType Size, 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(NEONElementType Size, ARMReg Vd, ARMReg Vm); - void VTST(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); - void VUZP(NEONElementType Size, ARMReg Vd, ARMReg Vm); - void VZIP(NEONElementType Size, ARMReg Vd, 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 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. diff --git a/Source/Core/Core/Src/PowerPC/JitArm32/Jit.cpp b/Source/Core/Core/Src/PowerPC/JitArm32/Jit.cpp index 4083a383e9..0b13372079 100644 --- a/Source/Core/Core/Src/PowerPC/JitArm32/Jit.cpp +++ b/Source/Core/Core/Src/PowerPC/JitArm32/Jit.cpp @@ -358,6 +358,25 @@ const u8* JitArm::DoJit(u32 em_address, PPCAnalyst::CodeBuffer *code_buf, JitBlo b->checkedEntry = start; b->runCount = 0; + BKPT(1); + NEONXEmitter emit(this); +#if 1 + emit.VNEG(I_8, D15, D15); + emit.VNEG(I_16, D15, D15); + emit.VNEG(I_32, D15, D15); + emit.VNEG(F_32, Q15, Q15); + +#elif 0 + emit.VTRN(I_8, D31, D31); + emit.VTRN(I_8, Q15, Q15); + emit.VTRN(I_16, D31, D31); + emit.VTRN(I_16, Q15, Q15); + emit.VTRN(I_32, D31, D31); + emit.VTRN(I_32, Q15, Q15); +#else + emit.VSWP(D31, D31); + emit.VSWP(Q15, Q15); +#endif // Downcount flag check, Only valid for linked blocks { SetCC(CC_MI); From a72b3ca20c82c6828676b60b9e20358ce93f9a24 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Tue, 12 Nov 2013 04:22:42 +0000 Subject: [PATCH 73/90] [ARM] Don't leave my test code in the JIT core. --- Source/Core/Core/Src/PowerPC/JitArm32/Jit.cpp | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/Source/Core/Core/Src/PowerPC/JitArm32/Jit.cpp b/Source/Core/Core/Src/PowerPC/JitArm32/Jit.cpp index 0b13372079..4083a383e9 100644 --- a/Source/Core/Core/Src/PowerPC/JitArm32/Jit.cpp +++ b/Source/Core/Core/Src/PowerPC/JitArm32/Jit.cpp @@ -358,25 +358,6 @@ const u8* JitArm::DoJit(u32 em_address, PPCAnalyst::CodeBuffer *code_buf, JitBlo b->checkedEntry = start; b->runCount = 0; - BKPT(1); - NEONXEmitter emit(this); -#if 1 - emit.VNEG(I_8, D15, D15); - emit.VNEG(I_16, D15, D15); - emit.VNEG(I_32, D15, D15); - emit.VNEG(F_32, Q15, Q15); - -#elif 0 - emit.VTRN(I_8, D31, D31); - emit.VTRN(I_8, Q15, Q15); - emit.VTRN(I_16, D31, D31); - emit.VTRN(I_16, Q15, Q15); - emit.VTRN(I_32, D31, D31); - emit.VTRN(I_32, Q15, Q15); -#else - emit.VSWP(D31, D31); - emit.VSWP(Q15, Q15); -#endif // Downcount flag check, Only valid for linked blocks { SetCC(CC_MI); From 0f94652952058e41f19d6dc2a6bf55f471305251 Mon Sep 17 00:00:00 2001 From: Rachel Bryk Date: Tue, 12 Nov 2013 04:16:51 -0500 Subject: [PATCH 74/90] Disable wiimote source selection while netplay is running. --- Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp b/Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp index 86127eba6b..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) @@ -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(); + } + } + } From 7c1ac441f633220365d0feef3871f891e7ed7a43 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Tue, 12 Nov 2013 16:34:32 -0600 Subject: [PATCH 75/90] Redo 'Fixes GCC 4.9 compilation. It now supplies its own _mm_shuffle_epi8 intrinsic.' This time with support for Windows. --- Source/Core/Common/Src/CommonFuncs.h | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/Source/Core/Common/Src/CommonFuncs.h b/Source/Core/Common/Src/CommonFuncs.h index bf50a1756f..63bdc04dfb 100644 --- a/Source/Core/Common/Src/CommonFuncs.h +++ b/Source/Core/Common/Src/CommonFuncs.h @@ -31,7 +31,12 @@ struct ArraySizeImpl : public std::extent #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) From 39ad5a2f7a6f8533d19fea41e4eeaf8ace2763d4 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Tue, 12 Nov 2013 19:37:09 -0600 Subject: [PATCH 76/90] Disable Fastmem on JIT64IL. JIT64IL is completely incompatible with Fastmem and doesn't need it since it has its own way to speed up memory accesses. This fixes the JIT64IL core, which I totally didn't break but was blamed for. --- .../Core/Core/Src/PowerPC/Jit64IL/IR_X86.cpp | 10 ++++----- Source/Core/Core/Src/PowerPC/Jit64IL/JitIL.h | 8 +------ .../Src/PowerPC/JitCommon/JitAsmCommon.cpp | 22 +++++++++---------- .../Core/Src/PowerPC/JitCommon/Jit_Util.cpp | 18 ++++++++------- .../Core/Src/PowerPC/JitCommon/Jit_Util.h | 10 ++++----- 5 files changed, 32 insertions(+), 36 deletions(-) diff --git a/Source/Core/Core/Src/PowerPC/Jit64IL/IR_X86.cpp b/Source/Core/Core/Src/PowerPC/Jit64IL/IR_X86.cpp index 69dc1c2bd3..7a37a1cb43 100644 --- a/Source/Core/Core/Src/PowerPC/Jit64IL/IR_X86.cpp +++ b/Source/Core/Core/Src/PowerPC/Jit64IL/IR_X86.cpp @@ -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)); } @@ -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) @@ -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) diff --git a/Source/Core/Core/Src/PowerPC/Jit64IL/JitIL.h b/Source/Core/Core/Src/PowerPC/Jit64IL/JitIL.h index 3f0e847d91..e56a56c815 100644 --- a/Source/Core/Core/Src/PowerPC/Jit64IL/JitIL.h +++ b/Source/Core/Core/Src/PowerPC/Jit64IL/JitIL.h @@ -58,14 +58,10 @@ 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; - public: JitILAsmRoutineManager asm_routines; - JitIL() : code_buffer(32000) {} + JitIL() {} ~JitIL() {} // Initialization, etc @@ -140,6 +136,4 @@ public: void DynaRunTable63(UGeckoInstruction _inst) override; }; -void Jit(u32 em_address); - #endif // _JITIL_H diff --git a/Source/Core/Core/Src/PowerPC/JitCommon/JitAsmCommon.cpp b/Source/Core/Core/Src/PowerPC/JitCommon/JitAsmCommon.cpp index 311ced730a..bc8272f48c 100644 --- a/Source/Core/Core/Src/PowerPC/JitCommon/JitAsmCommon.cpp +++ b/Source/Core/Core/Src/PowerPC/JitCommon/JitAsmCommon.cpp @@ -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(); @@ -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(); @@ -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(); @@ -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/Jit_Util.cpp b/Source/Core/Core/Src/PowerPC/JitCommon/Jit_Util.cpp index ae62bae6ce..00e24e7a20 100644 --- a/Source/Core/Core/Src/PowerPC/JitCommon/Jit_Util.cpp +++ b/Source/Core/Core/Src/PowerPC/JitCommon/Jit_Util.cpp @@ -117,18 +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) { 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); @@ -282,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); @@ -321,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 86802df822..a321ddd117 100644 --- a/Source/Core/Core/Src/PowerPC/JitCommon/Jit_Util.h +++ b/Source/Core/Core/Src/PowerPC/JitCommon/Jit_Util.h @@ -28,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. From 268bdf19cee3836af68a4248e373c2f0897afc5a Mon Sep 17 00:00:00 2001 From: Tillmann Karras Date: Sat, 26 Oct 2013 11:55:41 +0200 Subject: [PATCH 77/90] Fix format string warnings --- Source/Core/Common/Src/SDCardUtil.cpp | 3 ++- Source/Core/Common/Src/SysConf.cpp | 4 +++- Source/Core/Common/Src/x64Emitter.cpp | 4 +++- Source/Core/Core/Src/CoreParameter.cpp | 4 +++- Source/Core/Core/Src/CoreTiming.cpp | 3 ++- Source/Core/Core/Src/HW/DSPLLE/DSPLLEGlobals.cpp | 5 +++-- Source/Core/Core/Src/HW/GCMemcard.cpp | 5 ++++- .../Core/Src/IPC_HLE/WII_IPC_HLE_Device_DI.cpp | 14 ++++++++------ .../Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp | 10 +++++++--- .../Core/Src/PowerPC/Interpreter/Interpreter.cpp | 4 ++-- Source/Core/Core/Src/PowerPC/Jit64IL/JitIL.cpp | 3 ++- .../Core/Src/PowerPC/JitCommon/JitBackpatch.cpp | 3 ++- Source/Core/Core/Src/PowerPC/JitILCommon/IR.cpp | 3 ++- Source/Core/Core/Src/PowerPC/JitInterface.cpp | 5 +++-- Source/Core/Core/Src/PowerPC/PPCTables.cpp | 5 +++-- Source/Core/DiscIO/Src/CompressedBlob.cpp | 6 ++++-- Source/Core/DiscIO/Src/DiscScrubber.cpp | 8 +++++--- Source/Core/DiscIO/Src/FileSystemGCWii.cpp | 3 ++- Source/Core/DolphinWX/Src/GameListCtrl.cpp | 3 ++- Source/Core/DolphinWX/Src/ISOFile.cpp | 2 +- Source/Core/DolphinWX/Src/ISOProperties.cpp | 3 ++- .../DolphinWX/Src/MemoryCards/WiiSaveCrypted.cpp | 8 +++++--- Source/Core/VideoBackends/D3D/Src/Render.cpp | 5 +++-- Source/Core/VideoBackends/OGL/Src/Render.cpp | 3 ++- 24 files changed, 75 insertions(+), 41 deletions(-) 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/SysConf.cpp b/Source/Core/Common/Src/SysConf.cpp index e1c3eb8abb..519765b10d 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) { @@ -42,7 +44,7 @@ bool SysConf::LoadFromFile(const char *filename) 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(); diff --git a/Source/Core/Common/Src/x64Emitter.cpp b/Source/Core/Common/Src/x64Emitter.cpp index 8b3002b26a..261213fdfa 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 { @@ -176,7 +178,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); 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 c17e46fc80..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" @@ -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; } } diff --git a/Source/Core/Core/Src/HW/DSPLLE/DSPLLEGlobals.cpp b/Source/Core/Core/Src/HW/DSPLLE/DSPLLEGlobals.cpp index 4013ec77c9..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,12 +38,12 @@ 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]); } } } diff --git a/Source/Core/Core/Src/HW/GCMemcard.cpp b/Source/Core/Core/Src/HW/GCMemcard.cpp index 22786b3027..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; @@ -173,7 +176,7 @@ 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; } 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 9b6cf8ac8e..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; @@ -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); } } 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 151010e8fa..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 @@ -35,6 +35,10 @@ #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" @@ -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; } @@ -940,7 +944,7 @@ bool CWII_IPC_HLE_Device_es::IOCtlV(u32 _CommandAddress) if (!bSuccess) { PanicAlertT("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.", TitleID); + "TitleID %016" PRIx64".\n Dolphin will likely hang now.", TitleID); } else { @@ -983,7 +987,7 @@ bool CWII_IPC_HLE_Device_es::IOCtlV(u32 _CommandAddress) //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. 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/Jit64IL/JitIL.cpp b/Source/Core/Core/Src/PowerPC/Jit64IL/JitIL.cpp index d7ccddb83c..8ecc3a2902 100644 --- a/Source/Core/Core/Src/PowerPC/Jit64IL/JitIL.cpp +++ b/Source/Core/Core/Src/PowerPC/Jit64IL/JitIL.cpp @@ -3,6 +3,7 @@ // Refer to the license.txt file included. #include +#include #include "Common.h" #include "../../HLE/HLE.h" @@ -217,7 +218,7 @@ namespace JitILProfiler 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); } } }; diff --git a/Source/Core/Core/Src/PowerPC/JitCommon/JitBackpatch.cpp b/Source/Core/Core/Src/PowerPC/JitCommon/JitBackpatch.cpp index cd10306f2f..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; } diff --git a/Source/Core/Core/Src/PowerPC/JitILCommon/IR.cpp b/Source/Core/Core/Src/PowerPC/JitILCommon/IR.cpp index ffc5f94b62..a8e37c92dd 100644 --- a/Source/Core/Core/Src/PowerPC/JitILCommon/IR.cpp +++ b/Source/Core/Core/Src/PowerPC/JitILCommon/IR.cpp @@ -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" @@ -1279,7 +1280,7 @@ void IRBuilder::WriteToFile(u64 codeHash) { } 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/JitInterface.cpp b/Source/Core/Core/Src/PowerPC/JitInterface.cpp index ce8cc2e3ef..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 @@ -171,12 +172,12 @@ namespace JitInterface 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", + 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", + 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 } diff --git a/Source/Core/Core/Src/PowerPC/PPCTables.cpp b/Source/Core/Core/Src/PowerPC/PPCTables.cpp index 0041904a75..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" @@ -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,7 +224,7 @@ 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); } } diff --git a/Source/Core/DiscIO/Src/CompressedBlob.cpp b/Source/Core/DiscIO/Src/CompressedBlob.cpp index 3fdc779a44..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" @@ -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 4f289cef9f..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 { @@ -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)) { diff --git a/Source/Core/DiscIO/Src/FileSystemGCWii.cpp b/Source/Core/DiscIO/Src/FileSystemGCWii.cpp index 90731b2573..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" @@ -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); diff --git a/Source/Core/DolphinWX/Src/GameListCtrl.cpp b/Source/Core/DolphinWX/Src/GameListCtrl.cpp index c1d8ef3787..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" @@ -383,7 +384,7 @@ wxString NiceSizeFormat(u64 _size) 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) diff --git a/Source/Core/DolphinWX/Src/ISOFile.cpp b/Source/Core/DolphinWX/Src/ISOFile.cpp index a867d9b6ca..5aa02f5df1 100644 --- a/Source/Core/DolphinWX/Src/ISOFile.cpp +++ b/Source/Core/DolphinWX/Src/ISOFile.cpp @@ -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))); diff --git a/Source/Core/DolphinWX/Src/ISOProperties.cpp b/Source/Core/DolphinWX/Src/ISOProperties.cpp index a191b79677..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; } } diff --git a/Source/Core/DolphinWX/Src/MemoryCards/WiiSaveCrypted.cpp b/Source/Core/DolphinWX/Src/MemoryCards/WiiSaveCrypted.cpp index 10cebc904e..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; @@ -152,7 +154,7 @@ 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; } @@ -244,7 +246,7 @@ void CWiiSaveCrypted::ReadBKHDR() 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() diff --git a/Source/Core/VideoBackends/D3D/Src/Render.cpp b/Source/Core/VideoBackends/D3D/Src/Render.cpp index 1a4421f3c5..091eb100be 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" @@ -928,7 +929,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); } diff --git a/Source/Core/VideoBackends/OGL/Src/Render.cpp b/Source/Core/VideoBackends/OGL/Src/Render.cpp index d03d3cedd3..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 @@ -709,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()); From 6f5650f82e81f9e9d1fea307cdff0d2f324bf79a Mon Sep 17 00:00:00 2001 From: Tillmann Karras Date: Mon, 4 Nov 2013 09:33:33 +0100 Subject: [PATCH 78/90] Fix Bluetooth warnings --- Source/Core/Core/Src/IPC_HLE/hci.h | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/Source/Core/Core/Src/IPC_HLE/hci.h b/Source/Core/Core/Src/IPC_HLE/hci.h index 8923f68fb4..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 /************************************************************************** ************************************************************************** From 2fecb033be90217f47f5c4d19b44c2cf0595779b Mon Sep 17 00:00:00 2001 From: Tillmann Karras Date: Thu, 7 Nov 2013 03:38:04 +0100 Subject: [PATCH 79/90] Jit64: micro-optimize ps_sel Adapted from a patch by konpie: https://forums.dolphin-emu.org/Thread-code-bug-report-based-on-3-0-735 --- Source/Core/Core/Src/PowerPC/Jit64/Jit_Paired.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Source/Core/Core/Src/PowerPC/Jit64/Jit_Paired.cpp b/Source/Core/Core/Src/PowerPC/Jit64/Jit_Paired.cpp index 96a3335249..781b75a538 100644 --- a/Source/Core/Core/Src/PowerPC/Jit64/Jit_Paired.cpp +++ b/Source/Core/Core/Src/PowerPC/Jit64/Jit_Paired.cpp @@ -14,10 +14,9 @@ // 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) { @@ -52,14 +51,15 @@ void Jit64::ps_sel(UGeckoInstruction inst) fpr.Lock(a, b, c, d); MOVAPD(XMM0, fpr.R(a)); + XORPD(XMM1, R(XMM1)); // XMM0 = XMM0 < 0 ? all 1s : all 0s - CMPPD(XMM0, M((void*)psZeroZero), LT); + 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)); - ORPD(fpr.RX(d), R(XMM1)); fpr.UnlockAll(); } From 6054129df8df194828cdf4409c7bf2180af7b265 Mon Sep 17 00:00:00 2001 From: Tillmann Karras Date: Wed, 13 Nov 2013 04:46:34 +0100 Subject: [PATCH 80/90] x64: detect FMA support --- Source/Core/Common/Src/CPUDetect.h | 1 + Source/Core/Common/Src/x64CPUDetect.cpp | 5 +++++ 2 files changed, 6 insertions(+) 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/x64CPUDetect.cpp b/Source/Core/Common/Src/x64CPUDetect.cpp index 07b35cb968..2b434ad2b6 100644 --- a/Source/Core/Common/Src/x64CPUDetect.cpp +++ b/Source/Core/Common/Src/x64CPUDetect.cpp @@ -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) { @@ -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; From 22b47d5b9c078d978c0d71b0493509b5e30d0857 Mon Sep 17 00:00:00 2001 From: Tillmann Karras Date: Wed, 13 Nov 2013 05:58:28 +0100 Subject: [PATCH 81/90] Jit64: Fix and re-enable psq_l for W=1 Patch by konpie: https://forums.dolphin-emu.org/Thread-code-bug-report-based-on-3-0-735 --- .../Core/Core/Src/PowerPC/Jit64/Jit_LoadStorePaired.cpp | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/Source/Core/Core/Src/PowerPC/Jit64/Jit_LoadStorePaired.cpp b/Source/Core/Core/Src/PowerPC/Jit64/Jit_LoadStorePaired.cpp index e881b5e7e8..a2cb0784d1 100644 --- a/Source/Core/Core/Src/PowerPC/Jit64/Jit_LoadStorePaired.cpp +++ b/Source/Core/Core/Src/PowerPC/Jit64/Jit_LoadStorePaired.cpp @@ -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 From ae86850a787eada3a585583878649c93b78cfcd6 Mon Sep 17 00:00:00 2001 From: Tillmann Karras Date: Mon, 4 Nov 2013 21:37:07 +0100 Subject: [PATCH 82/90] x64: support VEX opcode encoding and add some AVX instructions --- Source/Core/Common/Src/x64Emitter.cpp | 53 +++++++++++++++++++++++++++ Source/Core/Common/Src/x64Emitter.h | 13 +++++++ 2 files changed, 66 insertions(+) diff --git a/Source/Core/Common/Src/x64Emitter.cpp b/Source/Core/Common/Src/x64Emitter.cpp index 261213fdfa..05540ba4a8 100644 --- a/Source/Core/Common/Src/x64Emitter.cpp +++ b/Source/Core/Common/Src/x64Emitter.cpp @@ -156,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 { @@ -1143,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);} @@ -1446,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); } diff --git a/Source/Core/Common/Src/x64Emitter.h b/Source/Core/Common/Src/x64Emitter.h index 6ce16abcce..87e76ef21a 100644 --- a/Source/Core/Common/Src/x64Emitter.h +++ b/Source/Core/Common/Src/x64Emitter.h @@ -33,6 +33,9 @@ enum X64Reg 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 }; @@ -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: @@ -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 From ddaf29e039d1736be1ca48c1c0b6af1c8d4ec47d Mon Sep 17 00:00:00 2001 From: Tillmann Karras Date: Mon, 4 Nov 2013 21:42:30 +0100 Subject: [PATCH 83/90] Jit64: use AVX instructions in some places --- Source/Core/Core/Src/PowerPC/Jit64/Jit.h | 2 +- .../Src/PowerPC/Jit64/Jit_FloatingPoint.cpp | 94 +++++++++++++------ 2 files changed, 64 insertions(+), 32 deletions(-) diff --git a/Source/Core/Core/Src/PowerPC/Jit64/Jit.h b/Source/Core/Core/Src/PowerPC/Jit64/Jit.h index 8676b1cb5a..71a556cb5f 100644 --- a/Source/Core/Core/Src/PowerPC/Jit64/Jit.h +++ b/Source/Core/Core/Src/PowerPC/Jit64/Jit.h @@ -119,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); diff --git a/Source/Core/Core/Src/PowerPC/Jit64/Jit_FloatingPoint.cpp b/Source/Core/Core/Src/PowerPC/Jit64/Jit_FloatingPoint.cpp index ec8ddc63d3..066ba69dfd 100644 --- a/Source/Core/Core/Src/PowerPC/Jit64/Jit_FloatingPoint.cpp +++ b/Source/Core/Core/Src/PowerPC/Jit64/Jit_FloatingPoint.cpp @@ -13,37 +13,62 @@ static const u64 GC_ALIGNED16(psAbsMask2[2]) = {0x7FFFFFFFFFFFFFFFULL, 0x7FFFFF 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, !single); + 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, !single); + fpr.BindToRegister(a); + (this->*op_3)(fpr.RX(d), fpr.RX(a), fpr.R(b)); + } + else + { + fpr.BindToRegister(d, !single); + 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) @@ -73,13 +98,13 @@ void Jit64::fp_arith_s(UGeckoInstruction inst) 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!!!"); } @@ -87,17 +112,24 @@ void Jit64::fp_arith_s(UGeckoInstruction inst) void Jit64::frsqrtex(UGeckoInstruction inst) { - INSTRUCTION_START - JITDISABLE(bJITFloatingPointOff) - 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(); + 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) @@ -198,7 +230,7 @@ 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(); From 710a0ff435c8593914c6eb074b6bc4d1985ae8c5 Mon Sep 17 00:00:00 2001 From: Tillmann Karras Date: Thu, 7 Nov 2013 01:57:52 +0100 Subject: [PATCH 84/90] Jit64: don't unnecessarily load registers --- Source/Core/Core/Src/PowerPC/Jit64/Jit_FloatingPoint.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Source/Core/Core/Src/PowerPC/Jit64/Jit_FloatingPoint.cpp b/Source/Core/Core/Src/PowerPC/Jit64/Jit_FloatingPoint.cpp index 066ba69dfd..c4699ecc62 100644 --- a/Source/Core/Core/Src/PowerPC/Jit64/Jit_FloatingPoint.cpp +++ b/Source/Core/Core/Src/PowerPC/Jit64/Jit_FloatingPoint.cpp @@ -46,7 +46,7 @@ void Jit64::fp_tri_op(int d, int a, int b, bool reversible, bool single, else { MOVSD(XMM0, fpr.R(b)); - fpr.BindToRegister(d, !single); + fpr.BindToRegister(d, false); MOVSD(fpr.RX(d), fpr.R(a)); (this->*op_2)(fpr.RX(d), Gen::R(XMM0)); } @@ -56,13 +56,13 @@ void Jit64::fp_tri_op(int d, int a, int b, bool reversible, bool single, { if (op_3) { - fpr.BindToRegister(d, !single); + fpr.BindToRegister(d, false); fpr.BindToRegister(a); (this->*op_3)(fpr.RX(d), fpr.RX(a), fpr.R(b)); } else { - fpr.BindToRegister(d, !single); + fpr.BindToRegister(d, false); MOVSD(fpr.RX(d), fpr.R(a)); (this->*op_2)(fpr.RX(d), fpr.R(b)); } From 038ffea369bbe65a7436c81f6ff7fb12d14ee46d Mon Sep 17 00:00:00 2001 From: Tillmann Karras Date: Wed, 13 Nov 2013 08:03:18 +0100 Subject: [PATCH 85/90] Jit64: don't flush clean FPRs --- Source/Core/Core/Src/PowerPC/Jit64/JitRegCache.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Source/Core/Core/Src/PowerPC/Jit64/JitRegCache.cpp b/Source/Core/Core/Src/PowerPC/Jit64/JitRegCache.cpp index f804877627..b2317c9394 100644 --- a/Source/Core/Core/Src/PowerPC/Jit64/JitRegCache.cpp +++ b/Source/Core/Core/Src/PowerPC/Jit64/JitRegCache.cpp @@ -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; } From f96e9e1ae43a510c83087efcbfb5fd57cdfe0b38 Mon Sep 17 00:00:00 2001 From: Jordan Cristiano Date: Wed, 13 Nov 2013 04:03:46 -0500 Subject: [PATCH 86/90] warnings and code formatting --- Source/Core/Common/Src/ChunkFile.h | 4 +++- Source/Core/Common/Src/StringUtil.cpp | 12 ++++++++---- Source/Core/Common/Src/SysConf.cpp | 2 +- Source/Core/VideoBackends/D3D/Src/PerfQuery.cpp | 4 ++-- Source/Core/VideoBackends/D3D/Src/Render.cpp | 4 ++-- Source/Core/VideoBackends/D3D/Src/VertexManager.cpp | 4 ++-- Source/Core/VideoCommon/Src/PixelShaderGen.cpp | 12 +++++++++--- Source/Core/VideoCommon/Src/PixelShaderManager.cpp | 8 ++++---- Source/Core/VideoCommon/Src/ShaderGenCommon.h | 2 +- Source/Core/VideoCommon/Src/VertexShaderGen.cpp | 6 +++++- 10 files changed, 37 insertions(+), 21 deletions(-) diff --git a/Source/Core/Common/Src/ChunkFile.h b/Source/Core/Common/Src/ChunkFile.h index 5192b4332e..d7aeba0558 100644 --- a/Source/Core/Common/Src/ChunkFile.h +++ b/Source/Core/Common/Src/ChunkFile.h @@ -193,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! diff --git a/Source/Core/Common/Src/StringUtil.cpp b/Source/Core/Common/Src/StringUtil.cpp index 5243b24260..7ad4ac6ca5 100644 --- a/Source/Core/Common/Src/StringUtil.cpp +++ b/Source/Core/Common/Src/StringUtil.cpp @@ -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; } diff --git a/Source/Core/Common/Src/SysConf.cpp b/Source/Core/Common/Src/SysConf.cpp index 519765b10d..acfb11b0ed 100644 --- a/Source/Core/Common/Src/SysConf.cpp +++ b/Source/Core/Common/Src/SysConf.cpp @@ -153,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]; 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/Render.cpp b/Source/Core/VideoBackends/D3D/Src/Render.cpp index 091eb100be..c7ad9e2bda 100644 --- a/Source/Core/VideoBackends/D3D/Src/Render.cpp +++ b/Source/Core/VideoBackends/D3D/Src/Render.cpp @@ -693,10 +693,10 @@ bool Renderer::SaveScreenshot(const std::string &filename, const TargetRectangle // 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) + for (auto y = 0; y < rc.GetHeight(); ++y) { u8* ptr = (u8*)map.pData + y * map.RowPitch + 3; - for (unsigned int x = 0; x < rc.GetWidth(); ++x) + for (auto x = 0; x < rc.GetWidth(); ++x) { *ptr = 0xFF; ptr += 4; diff --git a/Source/Core/VideoBackends/D3D/Src/VertexManager.cpp b/Source/Core/VideoBackends/D3D/Src/VertexManager.cpp index a48a3d289a..b951a7464f 100644 --- a/Source/Core/VideoBackends/D3D/Src/VertexManager.cpp +++ b/Source/Core/VideoBackends/D3D/Src/VertexManager.cpp @@ -222,9 +222,9 @@ void VertexManager::vFlush() 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.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/VideoCommon/Src/PixelShaderGen.cpp b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp index 442cfc1ef4..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) { diff --git a/Source/Core/VideoCommon/Src/PixelShaderManager.cpp b/Source/Core/VideoCommon/Src/PixelShaderManager.cpp index b999ada6a3..98722e48ce 100644 --- a/Source/Core/VideoCommon/Src/PixelShaderManager.cpp +++ b/Source/Core/VideoCommon/Src/PixelShaderManager.cpp @@ -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 @@ -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 { diff --git a/Source/Core/VideoCommon/Src/ShaderGenCommon.h b/Source/Core/VideoCommon/Src/ShaderGenCommon.h index 35ec50407a..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 << ": "; } diff --git a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp index f36f857973..78b3c57dda 100644 --- a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp @@ -130,9 +130,13 @@ 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"); From abc3bddb548e6fa7406d99703260f8099c808d1b Mon Sep 17 00:00:00 2001 From: Matthew Parlane Date: Wed, 13 Nov 2013 17:58:49 +1300 Subject: [PATCH 87/90] Revert "D3D: Reintroduce depencency on D3DX11 because it's the most straightforward way to bring back some broken features." This reverts commit a83c239765f8add99a360a29bfba2fdb408075c8. --- Source/Core/VideoBackends/D3D/Src/D3DBase.cpp | 60 ------------------- Source/Core/VideoBackends/D3D/Src/D3DBase.h | 25 +------- 2 files changed, 1 insertion(+), 84 deletions(-) diff --git a/Source/Core/VideoBackends/D3D/Src/D3DBase.cpp b/Source/Core/VideoBackends/D3D/Src/D3DBase.cpp index e9e678d841..5434354f37 100644 --- a/Source/Core/VideoBackends/D3D/Src/D3DBase.cpp +++ b/Source/Core/VideoBackends/D3D/Src/D3DBase.cpp @@ -17,13 +17,6 @@ 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; @@ -98,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; @@ -177,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; @@ -272,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; } @@ -420,7 +361,6 @@ void Close() // unload DLLs UnloadD3D(); - UnloadD3DX(); UnloadDXGI(); } diff --git a/Source/Core/VideoBackends/D3D/Src/D3DBase.h b/Source/Core/VideoBackends/D3D/Src/D3DBase.h index 6e06de6e90..7f26cbd3cc 100644 --- a/Source/Core/VideoBackends/D3D/Src/D3DBase.h +++ b/Source/Core/VideoBackends/D3D/Src/D3DBase.h @@ -5,7 +5,7 @@ #pragma once #include -#include +#include #include #include "Common.h" #include @@ -25,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); @@ -74,27 +72,6 @@ void SetDebugObjectName(T resource, const char* name) } // 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**); extern CREATEDXGIFACTORY PCreateDXGIFactory; typedef HRESULT (WINAPI *D3D11CREATEDEVICE)(IDXGIAdapter*, D3D_DRIVER_TYPE, HMODULE, UINT, CONST D3D_FEATURE_LEVEL*, UINT, UINT, ID3D11Device**, D3D_FEATURE_LEVEL*, ID3D11DeviceContext**); From 7b53574b68be91e29b57939c003809855fff6c5c Mon Sep 17 00:00:00 2001 From: Matthew Parlane Date: Thu, 14 Nov 2013 00:48:02 +1300 Subject: [PATCH 88/90] Support texture and screenshot dumping using WIC, no XP support. --- .../Core/VideoBackends/D3D/Src/D3DTexture.cpp | 126 ++++++++++++++++++ .../Core/VideoBackends/D3D/Src/D3DTexture.h | 1 + Source/Core/VideoBackends/D3D/Src/Render.cpp | 15 +-- .../VideoBackends/D3D/Src/TextureCache.cpp | 28 +++- 4 files changed, 157 insertions(+), 13 deletions(-) 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/Render.cpp b/Source/Core/VideoBackends/D3D/Src/Render.cpp index c7ad9e2bda..33528359c5 100644 --- a/Source/Core/VideoBackends/D3D/Src/Render.cpp +++ b/Source/Core/VideoBackends/D3D/Src/Render.cpp @@ -690,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 (auto y = 0; y < rc.GetHeight(); ++y) - { - u8* ptr = (u8*)map.pData + y * map.RowPitch + 3; - for (auto 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(), diff --git a/Source/Core/VideoBackends/D3D/Src/TextureCache.cpp b/Source/Core/VideoBackends/D3D/Src/TextureCache.cpp index d3c536c4a6..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, From 652ef24a2efd73fca5e316e2e54b31c4f96e62c8 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Wed, 13 Nov 2013 11:43:54 -0600 Subject: [PATCH 89/90] Remove our two instances of auto_ptr and replace it with unique_ptr. auto_ptr has been deprecated. --- Source/Core/Core/Src/PowerPC/Jit64IL/JitIL.cpp | 4 ++-- Source/Core/Core/Src/PowerPC/JitILCommon/IR.cpp | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Source/Core/Core/Src/PowerPC/Jit64IL/JitIL.cpp b/Source/Core/Core/Src/PowerPC/Jit64IL/JitIL.cpp index 8ecc3a2902..6a8cb8d594 100644 --- a/Source/Core/Core/Src/PowerPC/Jit64IL/JitIL.cpp +++ b/Source/Core/Core/Src/PowerPC/Jit64IL/JitIL.cpp @@ -222,10 +222,10 @@ namespace JitILProfiler } } }; - 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() { diff --git a/Source/Core/Core/Src/PowerPC/JitILCommon/IR.cpp b/Source/Core/Core/Src/PowerPC/JitILCommon/IR.cpp index a8e37c92dd..3a4866f2f8 100644 --- a/Source/Core/Core/Src/PowerPC/JitILCommon/IR.cpp +++ b/Source/Core/Core/Src/PowerPC/JitILCommon/IR.cpp @@ -1224,7 +1224,7 @@ 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", @@ -1276,7 +1276,7 @@ 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(); From 63a9dff3bb8c88cdc5b941db1f3813843c7a8564 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Wed, 13 Nov 2013 12:51:49 -0600 Subject: [PATCH 90/90] Windows requires memory to be included to use unique_ptr --- Source/Core/Core/Src/PowerPC/Jit64IL/JitIL.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/Source/Core/Core/Src/PowerPC/Jit64IL/JitIL.cpp b/Source/Core/Core/Src/PowerPC/Jit64IL/JitIL.cpp index 6a8cb8d594..b15ffbacca 100644 --- a/Source/Core/Core/Src/PowerPC/Jit64IL/JitIL.cpp +++ b/Source/Core/Core/Src/PowerPC/Jit64IL/JitIL.cpp @@ -3,6 +3,7 @@ // Refer to the license.txt file included. #include +#include #include #include "Common.h"

-${a-wP1? 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

CvQj1G=v?vBl0 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 -#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/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/win32/SDL.1.3.dll b/Externals/SDL/win32/SDL.1.3.dll deleted file mode 100644 index 2e09512bee108b513b5cf3dbc208bddae910a757..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 569344 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 DvwHb7?jp&h^B}2iTmzwz}Ab28l>P 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

WVkhBwzIBV-;~vDsc5`6OEd{DP$R!J}IDyT? zBw%QZKf`UOq9=cqxbp(UrUuEn39idKaopA;reU#{?>~cryNAB6M$rA8@>VSJAJx0( zfT*v*RU=#BP8}_1BFuYfRCHEs1yTsIi0U-*Qz_1l%Mq@kvRQ8M8Bsn_=xe-`<}&?XU*N^tCi@Zop-PkFTg(c8yMa6$ zm)F;gZxIvQFSjE&WhNG>OZU2ZZrtnhHNIP`IiJrNlTq#k<=P?|F3h;xurP>J6Wni? zcEupDA73%tcxKx%VF5yuIF?*v?OagH9-p7?9X=7$6bUfYdh5rgw$x&SSTzIBC5~d@ zStr?K4EzL-snSL4x139PDk3-P_%W>ktQrXeCtQ!nEZ+>aX)MkYyW86%+~%M4R&M5l z;a0V)rf(`doE;2K2EjZ>ewxm)7CkQy>&4~M{qY%>o|pS7ij*eMJyPcAd66SVNb< zK)k8=H<}FJ%!^EYGcK|&m^QJO@&pm*c9E7WYClb3MmVM+ahjWBGsBTX0tk1XO*#A;LPgtMtFsTp>u;}DHm0N@<6&ZnJ(_DR!n8-LhQW;68 zMaCvZ9J6|2V2jNG@Q9CCdc#av`6i~ErU^;UK+w_{IVgYB^zgHe^7HliAf2-OW}yS`1cG#+E-m(BQ5fr_wq@5yv88Y54f~C35C_G-G?f zMX@u8J>QX!zqH!m4T?eVUBwm^WtZrikfv69ib|U)JWOOq!bs6eWI=X40ME)5(>5e$ z)rbZ2k#J#Jw~1CeNE^-z#u?cg(Tz4* zsAh9EB#E1lN)bvPHs_v`{F)%6JSTc-GhOX*0=1N zT>qty=IHW8HrCH-MjKrINTgvjO82KA2k!oiXCQ)2S8}e!@b(*SE{sF2k=at+tzB8Z zO=(3Ng53!djpjNWXr9B@AT@%C;GOF+&_MWHnOnE%*y8!=QL=5&%1Wjc&8Y2AH%TMk z?$2Zh!U?dsa!)y0zo7tQ93Z|&_^I{m>DkZ5d_|iPt{;e~w8^Bi>}osb8a%Sm-kh(! zGs-ya8J&!Y5Ck(w>5iDHh1s_Fn1r8N-%~O!&A6&e&E!qx>n&4_c|AGHMtmxHD$^?( z$xculxnu{E?T&bUomr-9$~fpsZ^)`irYQl^itYe6Mh;-S;0*zZYFMHT3A4b(nh>O> zpA!h23Xd^_p#2=YmtgSLokBZY9-eoF;BK+E83$zusRV;_LqiYNyG0QE(f)U6+K^U_y!y zh$&u#fw@Dhb~t3(5T1*&K5#BktcXmk7w^3x)y#0S8E{Vnha^G;Ti?Mhe)`8h>hD<$ z7x>7+Rtr5q#s7*nnK>De3pA){L&8tICiOLyH^gHNgXRR0W z0dPO+^21tZ?jIv?%V7RmfPK~gI5>dF_VIgEOfa|Q9+L%a7IQo_FjYr}TrX%`Yfp70 zZO9l+t_)f0h||E;CaVAw!v-lqfz7&++++nR2jeshFIeus*sDtDWgIf+t}K@+YmnIz zBk6U{^#TMvGC=kr24RGIXvf(O=jiW*9u$NZg2(;c?^7$vrU7rJ9dSFtG zBNrO-J5mWY()}Pn3_5SHqnTrFNV6o}$mH`%T5#Sul4wj90?`%EbvT@6zq%lh<*c&# z%QztSZxma=lgu1t?&f@rZ`&NbG3(}Wur5!5YK}becw-nZ)^Psbc_U-cd<-H`w?CC4 z;HKr@$fQ7yLX>Si#~%jDz-gHBt$^XKwA?24{oN0vtW{7)WfgoNsJL zpe8<$6}+|1GtPEMI2)=;ZR359GtQO^hxV~sw|r0WO=-Ye7-zScOs5TWU2((f^R^!m zSh>=7n|$lW?w$@_*_`jm*|x#SIr3tWl&Ea>`g}ZI)j`p;A;>ly7?NVS23c#Tss;81c8QFH9Vqy%idvg(`&Vz zG}>{&$zv7;fS~PSHgqf+(?8 zjGROsm82x0%TcmRBTQuwNL`3b)`+UoPpxM+jSw~jLYqdax=UPo8tZ<(ufJ&wKJV5b z06Yqb*3&uVK*ORR(X603UlxOqyzEa*Pps0!k~6(Dvj~$lAhF-hB*rXQ2`$Y4>QTGn_qYX74Yy! zw>VhN5ZN^PP#)RrwXle9M-NV;^$;V)L~gDb!kaa0o^xq5Co)25MA+Qw?6q!VTO1%) z1JO=05^PXT@49nTF~l^2Kmc}_F#-8wCNTQW>LGp&$9qLQ>;YkDo(x7>jq&MCDHSb= zm=Z6euTJJJX|x>d;8*!3pBl9cAufP0cbM%|5bXj!UM$e}^M#iIQ5pfXycp=~Bx3*l z&jSdPf;3=f+=<)~XTvdWiuMf31MqIS+oLhXIQRPI683>Kp}`3~*ZsD=?z1fsJh*Mh zF~auxRl){>(`EkyFrR|DxLs$fS4bi7ch2ULyf+v{hIS|5oP#;s&^Itp} zCqgS|gbz0?m6|<@&)CV)OU_6fqL2nLqhO9l-}ZbB(h@j2+1?hbhY08_ z1lNyvWQE2K2cn?Lo{Ygrxc|>2jQ|INKE;bykb!{t&K9vIMmV;SU5c9_zCBrtv77`W zeBShC!^IHQzb%9+hS=GTMmQ=FriWAu+pE4Og=c5Kg}CloJhIt zIWe?Ef9dP#zSE9Yghu2uA6W)m#YGKFfvkfPTPNO{MoR*fky1_b(7YM$&Dg8}0N<}> z1p; zErESwARu&lm_>hYda!z6A?Q1Zufy*oNZJB!I)<6jDA4RIm|WA#!S063{mArwNnffI zg6uPS?$2me`giEi?z0wFWY55&J@DP_ikV2Tmfr@Y;)Ybf13UjZs4qSBNet6JO zDVS60hjDexjxZ^V-kDOaIITXqdWMst*bph+vdWc(a+2EVvE ze82p0U)#KBHJvX=wh~uEU-e*)3tq*oCjhN@IY1zkt601?VrW)Y-O;1cYEL3@d=X_0 zS;61jFLWQ%`A9L9dU(Fp%Vmd05yqm0UXsvisPI#1<&Uj;hE|yJuoK9E*8pFM<`xH8 zeMEXYs*DB(JI?(@OVy3tUS&xCyam%_nDNYL|3X+Q4pRNJ_N*R`bA# zc`%$_o`<*8%$eaFpHfVBruD<0sa1crnOb(|Sh0zB(5%%wC=L~M*hgC7R@JTTP-vdK*g&Dtgh?eu2HvIu0VU<>nW6n+|)w3eC22Z zcIQ~>*TAj`T~mL_JV{Qt$qt1g%{ciS46a1J>+a<}Ak2agt=+b^2j6F6N$4LKXS>O4PcL+k}2rWJ9q^L?~h7p;1I2zR0xAi!VM>So;2#VC+a+Qq={ zaD}g)EJky+qBBq1imY=hlF#YUkYgCn1`;Q{&6R7g+nsOWcb5~*#hiqh80g)Xp@&wJ z6{xc*uJ|@O9=-&iMNj=oEAR<-I~CFVOX--(X~k=TMqUn7&*OFLJYGA{%gBptd)&8* zHPyhn47NHFS32?Ko%DQrcG$5em`^k_ga1xCHUnBMP(`5Ild=4_s}0eVRvSdZ=p*RR zYbQ#RRx|_7O?Y|O@!!(`?auey$H7X|1O#bXvo+XbWF)?^m(q$v6?mP?%FFADxO*qy zg|d(mdKJiMx$=ADAp!}4-0+px3!q@#Y~y?<61UX~L^NAViZ9C(AD$F(F}!~iS26qn zZU`#{->4aFjf*PSOx-@0!l8KSHsprU@Ik>nUbd{q3gvJ_(oCR=lp+QyRg9+ou+C_B z1`vm|{o0%$S2B`J@-%lk4KnJw_? zQoc<$Af%MLNDwR6Eh^|96Y3saxVdnP0xHrCRdIl?a`0kqXg1n`v!EzG{z`g!>OBbL z6Z~;O?n>9X*Z_4Rb2b12-Eu`(XyiO1K{dB|IG5MM3uqVhN&?kKo=0U$g~|~Tys=2& z;94pnRSg%hm%O{vfn_JAnR)J^0S$nbVZycJ4b6sw2|0x2Owx>ZEXI;2Ue@6-rI|R| zsx8M~Nl!r{%~q?WLFM+`07rVJ83|EIQPQ^o>Ur*Lz*Im!(LwWVRmjT;z&S?S6JE1Z z|D}!|M^P!fzs_hg#8ZY-;@?A%J)$t5poGA+F>XMnz)mU!XS6v^JY&h?YAUz%TIZbH z*-aG;y%%|6L;6aQuEM^R*AyAGRq#nOQdG<|s|BYdQ$eOv;_&&}Y)K@!(8)|S5HlC{ zC`f5G6HTl_LNJ;hluCo)kA`rt0T7(gf}Za;%sh++b~8XaDK&Y#ra`;_y6X9<@${qF zdIc__atICM!y~2PsLnOT%s-iJaFRsK3J=xCYI;T^=0JVN)4mlXNTZOPQ?kHwT3zV7 zhuduGr=;oqIiC0X^;o_B*nozL#J9MnTv*s3=OfV_(=4N0iiyZ(;6?5%$%2svWKHSL zWbthpo#%WTM*ra$s2PJ>;1Q^>gLo5A<27&hazv^+g}y7)T)X!-(j@fgx%Sw33A`L@ ze2IT=e0qm-xFGHb;p!nJF1^D62R#yUB$r!Eu<=NK@N$3{O`dZU6G9U@v&=`_3?T`q zPgKXyLzEo`lqFfu2rkZ$OA;-JKHQFujAqc*4Js7bZJ$iKmzxZUq?IQ%WcaqkmMC@$ z%DlthFVD5niP5m=0K+FlS&pQM7y6ZHwyk%_9x-_eeyAqlrkVFDx|1Za2}uMs8sLwR zH2U+cGTA4b+!$>)z;3ro6zDfOHEg-N?M4$v2Ch82)qziT?hQ^a%Z1XdupHHG^Q_H# z@{xjRMW7iA*(VLPu?{qo%uyp{FR~XPW@YVt0oGd_e)k&I=S@=Gj-5{ zk)Y$TFG;}u95pJ*?s6ye>bW@*JXH(KG(&YrD3qM7?AzkT_kP=EM{e|)vKQXBLGE1P z0gQU`mPQ!djJO82P=q9hxRPgJxd&*0N%l}6SLT4VBM?O6CcYs~UFX!iH^ga=tc|xT z<`KE2^SvTwgnTD4MqM098kqwyBVv|RZtlCKt;u4KSh`vb#lYEwg1_I}j-1^#KBapM zkD4k@C1)cD#SP$axhyZKqcOpz0P2h_Imu1#L5(Mgv`iAikBGApH-PC3K{Kk28Znqj zB0B^1qx7!dR9BgArJ2}aHC=)WJ?JJtrWpa3V9$r_+ea)Szdp9R(F}0F3AzEd}5X$O!cN(J*`k!A7PHAz6F-Da^SyP5Iy;r%Xx zBn7aMAL{iS@34G;!4ls_kW^2AMV zG==%PG+E@O-GsbnM0uaOuZsV1d7&89Pqg+uIx zfo1Tv;p(Nz#Y(%`e6YpU+E#@FBVw4qg92+6?B(s_ugxT|PmQ(8GekkIkR0nrOWG~R zL|*bBmtn4Pwthxr+JWZCjol{oLbK~%KL0}wOug$wV*}_K^NP3^u+^h7-eLjd9?x>U zoF|jEN;?Gp9U?C4$zqNK0yZ#3U*50!$TaO%z)(#Wyj)@X5{B@l#V9`njbQzK_&02L zUgeb4>}e(n?$IlfpAfj$lHF_L}NjHefOs0UvzfX*{Gyz~F{ zuYX;P&M*E!u=Q{THsKo8c+NO-R)rcy&q@_ui$<8mP_T-jpuT&dX~1GA8u2FVMgcyH z&$_`RoY3y`oPR|lj5DAI%19#tRj7wElmxDM-e?4#C5m(r$JuDpkq+LTAMdXNPix2f z{zuUWj$^xp%j7U8lelMGC>m|2Vq3I?60mm>ydZ8_qUw1gGQoo5&o{}rm}Th#6n{3gg|1@aY7V0C?d*V z4mTMeYyk)5l25R&5>GxXP*gKnEFmA{BTY$Tff_vMM6(gn2L-5&q7gbW&><6)XnHT+ zL%>CRFp5UNK@++ztJjG~)hSm2sc5uW4#>JJEWMbha{Zl|wd@#e|I8ba(S8Q{kbG0O zG|lBnuD205O)7g4#WQ40%K(Fk1v*bHL7 z$?0yeohuJxw)dhDd5DQ7qD|w*Rmenn8;s0L2yS2pl$sbcLt)geE-ul;;KZ)fEl^#X zLjd>Y^5?fAhC3gL%*{(YE7iXb$vC>W2lg?+fIh$GjRcQZ(nQ&c_n1-SL>7(6G7KuI zuqyx22k7(Z2dHQZaLr-|Th*n;zTjd#+?&1AC(gL{3?#r2LUA^pc6mi|US;~9KRy)$ z!A;F^G_@~FG$Q)k1jm4C;c;gXFUjD=*+X5#`70l3Gea>OW6UD^>u}I{8<@Q{Vj+`r zJ%UnpilWVIKi{sDiQ;y&Dv_jdE*fpOWHXq^GW6bf)pwSS_PAlH@+-W6c4muApw-e5 z+`>z^3!!$5rCddIcZD&`2Lkhl5Z-xUCjGTjo}z0sLY~Gr23)Zm2PTpDg5bs4VdIvK z$hS&D;$j`*fboHsg(w;U`?F>3B0^WCa!;w(iZ(>m;uE><)6=JOUo;ZXBn42Do$c2X z=WRx4l>x?10ud_W2n1E)cISevxt;}A+5oS!>n&#R_PHS}D z7Z;%G!;QGTg!7t@gf|3nb{(8V(qQZBu1p|`AzU1aMi{JdMUR)hID?fd865U z5>tQ5>Y0u!I&BNv9~~)*Mxe3avMmxx%}eDELU|r$D-zZ~nC0XNM;avb7GpRc38*EE zkm~Q!KAriiRx~0`jQ3MtfD&N1z)Cz8`$X1M@Zl7T(0{1IOJ6qH6WL2edLV@OIYB;uf8~(z36L|2xM}) zDjIEP`}IQ2zPh=t)c*xHdItN1?s1XdoJq7f-DB_N{pCZ&+17qc-Lr*n2Q7R<rqd`c8HITKmFro0j0o+Hd*$|UY4-yp+L zZ&%^=UfxKs=?TydY-LR*vgb2zMA~fv(?~DX9fI4#;pPhU@Y%%!(RoJ_JKcj9 zkT;qSN$4Q?3BuzZ1gCh&yCYaO+7do!XHTz2I(2ct0Kt+sTFgk=y--(zoYy!dd``%Z zP1+b-;L8&cpHJ0k*pbLbB1Jaw+3Kd)zfa<;STx$qS6fuP9XLm0FYY9q>IMAW2MQe;mI9?PN%}w~+VArkFQcPeCtVp`X%I)IY;T-iTD;$kG}*(ceOX2J=R{ z)pj}~(W@)W{P+99J*jInC%+)~iQG(#)HEvemU$zX6;dEY zV_5%ZWeYJsCw6DHohqb1Y;K{AF3t4$NZ>4y$9^LeteIZ#H!aDAGbSuv?h|i&A4$5- zn4CEw@r0cZ71G1iO_|OYTAojDzgUlmn2_nkZ~9`cU{&B>(P$4ThsW;yrf4zk8Z97u zgUx81jQ{be$Rp!a>6^EikrN0_erl9-FtuSQZv-Uj3aH9(^nPob7Uzo*mbKBymgFz#Lq|CY^EUHsDsGwF5ZGjBwn=TL=^1Jf#^A}Gy+VFKwo=kP+(*WQ7U2c=@E{B z7EIA(nvwMAwcE55=MLC%O?jf%BByx;qtlJF#D!svQCiU$nvvqld=~t?yb*4h7{{U` z!f#Qq)%kb;3icZRN@w+YMk2#AnPfM6{ifc}(bNLn^hiIv#2!iZqxiP>vZQ$Js_%-P}wL0!&~*cG!_7h;3HS_9>8;ZY0j>XtPBG|G&|%5FoXZkY&we#_Os3>#ut^ z5R9I=-?fDU)7irB`I+w=YM0wd;S|wqS7&u6uavQh?<%UX!3NUhNrp@B7TXd-<%)+ z2AoID=~WE^5~eFsub$sN-(5UwBD}iB7!O$qYrF<9&|=T38Vht*n-z+e@qY}(<@u$l z0rbFRzC7ns$Wtf@YO5NgCqhIeBggUm>dlN8bq#Sple6`Bf4sgB?2CFmR#TET!GN%) zi=!Dit3FmJPlrUooPYU@HbdT>x(_@N#`85?Pe*F2KJd9)?Dh*4z`vbcG@f##^dl1( z#w>{JThUCijodx__vQWDHxfbDePE|lq{*;cs9CBS zf~B>TJUrhoA8s#1$5uvjtq?;OIIvm5tbbDKRby8(C#`8)Y zjTc9`_O+icRfw`dUrVkLM0(DMyt2h)sWQj2X1c`^&q4G~0Qs0Od=9XW*-113zv^YQ zm;$7!E{eiHkrA$pu%MF#nwl=6@9OULvhHI;3d4!&MmL%g9c@@ug*)LQrgs2 zK+OQ}YJYyjR;rml-yf?glhJ%VUh!&RnR&avzPQ0hx~?*v5$~nK(o{aCIS1sWK`z1z zN=}Nt8fWb$;ten)(V(~y1YhDWCAFa!%p^!l!aap5pPDK}u&=fX1QM!zZmZ16o*-&4 zKmv@1`ci+<9^Y*s`MZJ6nqKy662|DmnDBt%ydmY7}C7s+C1g7 zh(57R14Nbi3>A_vv}wBktOvrZLt?l6d8QMns*rzav?aVho6Buo1&)H;1)`eXy}o^a zzD1W?S0UTxnr!Y=(QVwL&D^_F_*; zSs+6Zy+r$c31O%@S;G(E-8ebFet!U;N445%|E!3EGbX`=+&ukHstPO?-&KcL^2As0hiM+`G^uCCti z$dd8;S4CtPi-%&&6M1fVBwsc4Zru+`;{5<7S6OK;Z-dK4KOh>6NMoKht4`bqEH=F1 zS}>Z?NgBRn#e9h~~ZCxDG1)TP|aEjLUr(;=t_8o7-G4xQeAu8ul&mOwWE zcLXtlw-200F^x^Eg^#b zd9sMY3|3=JCu9^vaT?AJ38Nk_f7W#n69(LJ4{EWEs6k-y&8+l2)Iv>1&PT^#khG0j!m1v3p_udb$%;x?z5 zI!jXgtix5e2%NefI7`fVLghveJkUzvt2zJ!1EGfL?&T@i9UmGJ2G|!ALmg7nJ5t}$ z1@;H<2W7X82ahq?5`8k>!y}Dj@KCENkUEH*`73eO5JG|{CTnp5&yc-J?vZYIr3nX+ zOS(83lHW~JhcM0^%DHoWKYb#H*%0|yWVvT#aF9@5@83!$6TEHIbwe}@j0IyCd~>Q* zmNX7~Fezkt%mo^3ho%lXGDsA4Bsx(fpo-;XEFK$JME!QQlH}A?q$TDWdTD@z-C?SnC1Kq67wsAbSHyrFh-d^VxzE z%bT2idzE@uan8|bt6o2@PnF0AIB$Yr2ZomvZ$-0)B&;D;f_!1-XW@v=^s~hI4{FGK zqBzx#g{U-Hsopk@)z$$RdP#Pl6@IKUWqG3m-8cI$rD;*rie-zyB3d!Bb} z#+Eb&Vc#81A7g=$i6Yh$kbTPpORn_IWXdEmk^aAebVM)%`43Rq zt8s9Hc+&Tp( z30rQHtw4KK7>)b~5I`XTtYy#*mG2dm2u)qh5hfzNX*GCKX|w zoJ#xAX0_1QNMv;HsR5)JY)n8?_JRCgU%tp)s1_VxGfX1N7Tq15E)I`Z-y^2&)p%FfI}yy@chTk%jLUkiz!-c7aV@9M=&}?^U-k?k_z>d81ZS2#_%uj%ErN$vQ=Zu&Spu68}UJ&6yS3 z|2ll_kZkcePofJfQN7|)X(?$fBhTo)7;8{fM{prZ<|N))wc7QZ@F~Le1YJcYjn~IX zR0F8JEkN+-%F!$Vz)0A`EQ|zSBU2|=!)>s^3O0JwE;*d_?wm@{R4fmXV759aDos{1 zbXlx`5hu}3*2@IC4ahN=HiedgqDq#GmOO6&zFUz+`&=Nx2~o4m3H7{TV+dVAHI!-K zN<%hNB4P(O2Dx>Fqmd`O)h$v9;5!}`p#&Yf-%NZDG|)cfBjRn>ebA#vjO8k>VWu;wORad@ByP`ZfNV%*Z1Sw`(tBaq!N*i0&qi5|3+!* znPI5J^F*@84NDFi?y7{TgmGgJ;9A;Xp6Uw81*GI5Ho`G6JOFeFrj+9bBb8>m;Q+cS zPr01&U)QhKSJe_g!58a+f`p0n!n3Q<6X4b}6tR3A*Ic3PXNzxjPk5Q2LX{<0-#`83 z>E!5Xzh6vtBq+EdQZj@CR2m#mk4e5WoT_gz1mg)Qz2z^cMGOFrb(lZ}0m#+-QfWF| z4<>3%qALwuYG941wZybIRuxT1IniQ`P>X9v(pTZwQ^Mt%OjBz^8cWEqxzbpy(|e`F zqZZkCFtQ8P*r?ie|NPSSg}sB*iC<$dKV9OT&TbbA50LU`za}mO*Nq1$jUoPZEf6~K zdC9C@pKoiHoW5q@TcdSnRq-bBc@}D6VZ)0T5cFg8=52@AVCwXiTO)(Qs2~n zX!ml~&K}1sAm0Mx66Rm2T3cz;?~a2v1HxkQ}S1b4n3aW`3S z001aM>8eU7kH$PZ=+2%We%+Cm)A7O+jOhs&acKC>f)bb~$Hp`t;w5zUC`e-9pa zT?>OTOw;rAH8?2}vjf;fePKbUA{i>&e0;-?inCbvB&Y~8UJH?*pdi8Lr>O;mSu6~X zlbfo(jqSY#duavU@C2Ur?Gm+aSdi))Q77S5rdl_-K(mKmFO9K~c`e1?LW9D(c{M9B zTOx5A?TY;POO3%uU-+nvApopIxcg@g?V6#nAHZp)eRLA~($^ZkPI9~msSk`nOS|U4 z7l^OC(FpFND24v47J@g5JXnBT!Pps?^HqZ@j&m`rh~lSOB$P`>*uU{^I}rL7l%1_B zB|Xh~3`Xi&66IxQ8L-Qv>)y$%x`jWMY#V(o*2GS!>>WjgCQAji&o=Tw+>};%V_zcUU$~omTy-fs(1y`GaC`h@Bs%Laq5@JIK3qS>_6^ZkwTC`%s zjR@*0>)1BK!(CQMJE?_B&7MRfvO%f=esA@9;3bP8T|f+vdK5x{alNSc63_T&b$(P2 zELTHDUx=94S&&jv3}};3Pw=40_A|z(!(=|FFAgo2r7BTsEhby&7qef8hqJJs?KZ9k z_Fv=BH+$AZV~=YUup{v*k9E(TMY@$9V$LbI1rzmV-MW+YMb(N`OcJ# zNSgK;USOJ@;z80=h|69*;1nJeQxMY%_qxRarmN`?uQWVqB0n!1Ri)#QT9OG|V`0MN zKRJBf3O6FyJkd@XdbT4$(AN$}tC{*=glEHJyAU7HUuhyhj%o;K`8=+^ag7Hoz}g~f zb+yi#TIl>y;0PV;YJF;IVFU(VT@JK`=D9SEd$GiMCOnOnd8#G6>lqgkjKp(%H4)s9 zBOYJ)vz|T1X>w=D4kcZ+(-+L_R5F&QeLOn!8Ja|L%>6uiXu;o*i@RnLcw~W^(W9EE z>RCfoab6HB$@=`B)HP^zU*AO>{8Y^z^Z{Nouv#Dh;!z+vsP+nN=GbbHgs8=Cn}F`r zBC#|6_1j2$UmT}U0J3*jN$8HgBKc|@Sip=Pjs|POie+BVfakx}!c)H-WTu0x+N{En zZkUoS*Lo;nj^RZ>U*WtP=tuGDmt&KzYx{v)@G?OQES@uPxvM4R;^VTWHlA+k4Htwq zb~ypMFu{QqrGa+w?c|0)XJ%n(rh7``$_ zoro=IE$#q> zfEUo2-wtJkOc!ahD2nw{4Q>>|qpIzq{0V#Pg_z`S5Y4Ktf&Nh^3|x;c9xXpp(Y7!R z7bX82kKJEEQx*8DqCD_aaJ~29Re3B6`+yKIE0z_Fe~Yd%lEvort*p_9Vsukfi|07} z`K2sOoLxlsDB(nK>nrLDlfHV zRbio5t;&=**T1O`lxggnA^=n4rmM}ls$f#%#moEa-9Z!`RdMcGRuuvMb3wFS{VR^@ zSHD=n>i6XM`-7wo`90L-ikt1tu;k*aZo|fAa8B7_)2@peUjOOQekNk<@uCadtA;W= zYVpOW7AD_5D|S<|F?X%B^z1~b&iaU2$oSuE$!J>WsEbaGtcmyY1yoQ}rP0Vr%kGg`iZf8l=!h%F98gQ z{jLsUMQ=XsroNK-cp=*Fv|XZc$^Dju;>1pyF50lZIHg{n17aaAEB{j317 zzn2g9M7p9Ye!r54*P;WHZY2(oh=cpPCplDo6)GxC=cR7EY$up^eaw_JjhJ}(+ZKQK zE_A0oZ>}sr@LHbC+{#~kUp!U1MO})~y3UVh$N4&m8<_BhM}BLfy%|%cqv<^RIY_8 zv8-c7RWf$3$`v4CFmTV}iRYD@uQCi+NZH$8M-0VYsr!XCKT#yyiy_Br*T-UW(u_hy zTWoyo9D)}srhKj5K#@5k61XXrGxvZu)Vm}u{`8N3oURZu!#`__A@+66?&5x3R8KO2NSd~6Rk^ww$8=*Y2N72>uvpG!xHSZ0^Q@#ZRlSy4 z#tNBm?9MeSzmSAPA6AkiAAY6xD+ziiFJhWTD71&iZIAl%;_{|EUa`59F;iaE^7<6z zueh#WU6$l5uWG0h~RX$9=PS3j&yRXw1xt*BI{vb)9N)i}*2^FfF z8B0^P54ZEzlAxtVcUPbOadC+*$8F`Y^|5Iv>wR-mJqtH+`xmjgEa-yI%ilTphASI& z0M#{V%BvI5lqZ*<>L5x*)FN`iCCIUuMdY6QuXQ1S3Mxs_z9@BwLM*r3Q~&ja_sDH; zT8ftkCLuc$jp*C? zfE2yufvrVB)Kj+lD0&KPKwQP*p{H1W7tBJF1f6-thWUd+67XUIu}r9G@Dau^>y z#qNin?mSo}Wg*QXqP+fGSn|JhC8-L-+1TWkDDz zsuh=BYREMeW!pud9%XG!W~uH+&hJfV&%H{ zL8evo)nZ~V3nhfM{H1WIs)`<8NSb|<_Dc4$s*zAts^3veSdJ===wo*>WTA8PgR)hJ z^iuq8dLs+ptO`T{boKoHbOUBJZdGNeD)G5nBK}@pU*{r}%p)fm-7A$!S~X58;_ZR6 zj(VbE&|AWgRV`Eg8t$LU;EHN~&oNf7LeI+z}$dt{_HE0??FG>h&d zPEjCyMTzcBqMI(Jqhb zE(;E*L~l^{*;K1CGY!V))sBC8s3MgHZQ%g=6e{|b@Q2sASJNPKmpTz5sGNi-VbVrL z@6xhLkc7=d@OIgW1=@3zlmC8(6}lYylo>Uikt_df;s$hOYmMofjjv#Sl(R>s4?laK~=N-~8j6 z=O*?n1<*@$e&u0L<#wgSwEdK8v5U^d&%vG4v66kYl_TQn?~RCBbQ$^DhF8i9E*kDL zmU<$kj2g--K0hn@Tm3j|*5c=0xY((ui>#QFOwFi=^(j(cH?gUn5>m| zdUzl?XZ;~s8s~LH4}Hw`ECGh4-cF_sdARAed-cbEqDIWg``;6Vs=Tds4&_FrKT45o-XRt{{2T@|F6;0BnD*Jq@VaMe=EpgHlx2CGS zC-1NcoG=U;dEF$7gh>`-rNUa;U>-RLP0?W|zx=c3_tGXD`m!O4CY>=j@5p2faeZrE zD!R%x)BWDOJg@{X3agG4orMdKs2= z(fJXU6h&=oiQjG3y8N%gSanVK6(XVGNyU%oPpe<|GZg$O<3Xw{KZj*d@YhseP;WUt zZ(StLfExB$(&K~?m(|~r+l=5YY!CFG@S=3RbmWpq7U*|Lq9ha{<>5FxrRi@DyfFMO}tHvIUd(?RHH;pZrH zl&p18!;##Ja(hC%16>s6_Lic+LUZ%)2v{M`PblDPttNei`jrQn7ML5U!oRWy;v--7 zD$4z8WB$V-=tME}-0zqKIyJp^8(7(jJ=UTegt;6`j)_G_x4%0Z_MeU~OnS3MhO;4s z&-kC`=S~*apOZvX4p+u8m1PA|NmNZbRs;#1e=I6{|jz39UTdU z70J+F<(&0)+=C8pPG}l-Hn| z=_P`Vgwrg%Bn9v+zg|~7Xt0%~rb8;-J#@g$-M|!dIf;s&^=Y%`Q;%c!KuT{}7L%e? z0e4oE*czsv{+xXMw%Bbiau%Wct>X={-!f*R`?X^Py5Bm2+5OhBxbe5o7oFc(_glxX z#NW=GdS}jD&Mw+npIx-``{MNX#p&;h)8Ch@zyDrrFAB)Nw6;=`C>%txERfVsQ79t` zcTXf$ELn@`KMQP=zN}1Qr9@1MG?i2`;NPHdNS+`nB?dSbh@xOA-R25q)WYUc~vEqPrM6&B97=2;=i4)PM% zO7lLn=?KQ@&Hdf|8!EpbxL96^u7?DJTK#l*B3wiDo?Ta_+^$cf^q_Ol&2Iz@!*(tdRlD1KHNn5wHMMbbm2pKD!TDo}b75_c2>WVemyj<=+qSb_FdG!2)a z;V{#nAKwzbP*+90(u>XmXP{c}PRdDLH{xei(uIjyfry7W*1n8|Ao=$IQRqj^8Ne|t zfB&X_-+K!rsfx@FJ4M=Tn*CucS=k``NRU+dJJHm?5Nfx7rk`(azVVdIVT!*(S9o($ ziR6Zu1{Lh?1Ui_Y?*mzRfMVPg4Lyv7wdeg#nN20EQh@AVK`q{5;pjzSXy zqN{)2Y3x8gyzIzEvDt;$OW&dymP74qx%6k-l2}zUc#JxQ{#QjRJ6+m+infmHX&q;? z)6!kUZu);DT(@evC-`?`LBG7&#i&}n{UzJ|F8RnpJY7unFGo@fBJO9=#UD|_H9Z_| zu7WuxHEBw-_18X|3f1TQsk$s%hq~>bf?Gc_+~TYmPB?&Wyxw1}pRW_6qBCkr@=vF5 zs3|1U=cQlVYC`}5+p6+wKF`#L6qJ*+(RP}4(`{l!UZby3UmZWo`qH1>uC%1=NzT|9 z<+ry=by?MCUA(9c3m@Hof~_zbRq_?2P5ikUa3N^_6$Km8QT}_?WGw)D`{?vl6>d-} z36f85x$qAy4U!@IngoJe9hLBFx$@!1{r$^9R8jd77_I1D@wmVF@71?_Q$^xy-U~CI zNy?&NK&cw|-xYrSHz>)y4STOT>vHNMQ*8Hm5Zw^scV#~-3`qVJR@UChK9V4#WEA0> zVs2UUa{b#{;p2;H3PQ0LJJ8`ZUqP|pj-m-xza#xpSDTRAEJ{kLX8f_Q^1?1tPP}D+ z*z8*dCeid63;X(x<-a+GMtAfMB9K#Qzw#;i&6?^{biO?kk)k-)Vu-w;{>Z%SH~KAS znKyQ4+Ey>C-M?kztDAH2b3S8zY6dqqSOShUbxxU#Qa|aJe9iU8bXo7q3#5f#6&O9_ zdn!Bo_I@SQ-~BNgWc2-T{a5y7-*8TOSM89T3%@k`Os%kmtjmKCiM#cY*GkE_;&evo zmwYaQPhb~1pStD~u%D}s%1Un2{^dWa+EPEH>-ygN5jfXwYRp0jz(T-VouA*E-^T(R zbJLL*orC^(TeP>Iur(FG>iTuxT@RWShwm?H2;{Cw6oJZheK$qLVt1v1;wnMSn9-5K z`5Lb^KHOgNXf`9q{MFf@FMCmA3r2PNQON1ptqpT_i^{R5V2FxezT6sA zcYptFjbl#5|nBsgq=l;%4t+ofp&iX{;Q-{yzz+DIe87Avbrnuzk3=Ec>Sgok*I0SiAj zuf>mrc%v01TnA0I_^)(EGbXYJFSQkdU5IejWiQoPNwHQvUk_ z=d|~mLscw~>EUJ*xObHfK8=eVd=%ADUFY*})Hyp{hokm8!^LVJj2Nr+3<@C+gJt^= zKCCNq*CrN!PO1S}Zd;SC>||5(!q-=`X?iy9YZ^c4lRt1*{80xzGmjm7{%{68^N$_$ ze}Xs_o!Vs9FIDN;;Jixz=1MPdIz8t%bQEiy9xm3ZMoeb<>HPyjPQEiuQE`c?(tJmn zBEMlr4Z0JYns$XBHO{E7(^{ZSPj#O?MQ!VXhwD5V(%f?5?X)h(e);9|rvO&z>&6Bt z_3vg|6%=0*%KR4kYw=1*^)$nFtKH&eysCqI%bgCY9as6N4`$hsUKuHNr9FhwwFqsxbfT!-(KWr``cxKj!h#hqQ&k+imY(JKOz$mzBRN~U+B}pk#{MZbl zc>2deS7QyVpgXAH*C5h0mY`G|wJO#4nZD(i9X@NODg$l@Hoj(pQYM)`%WrJXxOG&R zqV5l5jVYVS?QDPSOjPYa;YL*5n6)!%%&SigO^(f{#DaQOVhCfh3;-QcI7OHuArUD!EVWbKafF}7Rz zr-WXQ-ZFM&VYU2*{!%uL`xeu!cxs|yyzYB`yXR`7lzfEY{bg-ylxv%p7aLm?bTiEt zu&7eatRdEU!=^AE(VLUCGIGy>X*w~h=*b?eN;BF7;DPDGr;|xqQi(-pNm3Taw6`_3-me(6Z#2 zRFH^lwkiwcTp`KAFCVB0D%jz*Qus?E@#A+DUUI3$e%79f%a#4!&BcBUoRVPT$Ir2X zz>Z>sNJsYB|=72M_QWATDthEiP(xS zm!Gqns;%0w>l#_V&vzq<6|70!H2fZDR$8O-=X@W_l8OSx?h-*yKR8|7BxX6)%5{wK z$HWn*ADq5At5vGy^_AH?W4+w!$!|5Y97#to9-5O?K7k<37Ujj(g$nAuwE;lmL2~e= zg>FkfXk2_&+xo}p=K0eRKdqbD{RfRtkA2@icJC+O_KsL6e2S@JI?hxXMN#kP^?#YB z9d@_F|DNb*=Y3Kt^Cp-Iy;bZAPc`*EFSc~QFcqE}v-!?Pg!PD56JTnx1$sREe?%5m z(~K$`;oFUPmWRA8&lLgeVXTl;f$8PX3cr%a?^N%(_M({aRq!3c5$)Cf?oThg3QpTl z(pi+UX{EB0opuI>wrQbZZi_pexL0;^)Ql@>+n#JGKKCbES5EnD_v_1FhNK|Ua8L2c z5wwG1l81x6=ynP+K{Lw}A9oLj(LVhrMb<--eY#(=8S$f|+)TfA&#U|tXtD8I$82g= z7!P<6z&v=GD z1<^F;3uqV$N!pkVV~41FnE&g`snU~W)l^D%-}ifZ&S}hB7}@;ioQ^|**DD7yx6I48 z>1g5ivI**!)`gQM%G4K53B`}a^~@@#rRt=TqFq-08(qL@Wt-7WDfLnuO}G5RQIrLA zN2y28}3lUU@bv&rz;kn%Z-$oO0z>R-K~U zcPu#{)B{v*Cq@5NS#Q&9x%~E7g^xR_&QF>|>ZA~nSjybgy|(atd)(@h%;wrQD;G}; zTduWA8fqq4pJJsfv)MwV-^y>F#Ay0LyG8%X<5g!0Em5VOO3P6l_Y*biJ|$zN{~1#$ zD#>pAsr(2>MIm1R^C{#`JI_`k{_eaHbx}1;u30EV@i3ZXGE>DtDUH{q_0f@0Q`1uL z%$i2AwQu0AJQqWq4*G_V9e6W{jJmzMGTF5A#ZBQ;PF8IeG}ivGyR1Ul$qc~h@Auad z5qx-q+7Y)>-lCLoJv##_@3!|_*?+2CCfUhzjA6ie22P;ZcW&)HWL&xQV;xc6*& z^L_SNJ+028w=hh(|N2s1!t`^_eS{zVn;Z(=ZiK_3p!_l$xMhB%qb~WN z@J9KUmW5@}k4qv!pCU6?v3LtI7HYB5m%hUA6;-j25p?$I)Yj8|QN2`ntUbsPPmJpcAv>Y}(kP1(t&#l5MT z)|Vzahfbb;)D$x->T88eTDaXoMq?|A`Z}bjuS30s)yD;~R=oc@Z@<32%UXTIq*Y#g zT!WAte?qB~zPY3dZV!egR&KL=YW%%8wIW{z^<{6bUY(XSn30AhgygEE&uZ8`ZCP;_QV5yisb9-r;O5D_11$@#+b;7akd~0QX&1kt#Y*}F@d2&DKMC;UDi2dB-2g?hrX7;vPeM5uw+h^!P zA$(iacdM2PqykWlkP17n3gLI&=d{;1)g5%I)Ymjrk!>lZ?oT5$4zx@&9+e1sn2|{Kb-C&tyE9z05#IP8qu@bTMXo<=l9oZ^Lx$cWLT?M zEX$FDUC7b3xz{ynxx1<+%h5lKH$zor`304Wdp9Y&MkN)q>3SX2FHV?pMLE>dDcp;q z7cH=Nr4mi5lJe5zg}KmD{9e9JS&?!=*+SMuy<=q|*{oO5th$F<)_!TdT0IYcHn*M{ z^xL`x;!m?vUT)_w2V(0Q9%aUrgiqqEKII~RbfoIgT-R5JI zcdG5a>6PpGx!iK=u$;01S@XQr9y)Aj;Gy!qlewzCnvJE(x#i-gR*cTD!}rHrY%C2p zb$QK}$+R^h)tNkHJ^Npkl$%i$mItFQ>Tej{wua%O2T@=0Z zY|r4Bn>OpC9?Q(|MMB@Q|4>Y;ds261(+dU8#i&ZkTN?@+_%|+SDC+KBd0<0v=MdO6 zDTrFAS2HHz=f->(f6r-Z`puntD{6=O?tGh5#|DYw?Sv7ytx=PTP$O7kt79DsJ-u2e z@-=FqFkbia98f6Gm~p!c1|oBP2t7A^a9gFGv;rRLqV)07Ssy)fv_86M9b-K>356j& z^ix-B);Q~}d~)*+8g)fcSe}Tws9ND{ymfKP^LCV+Xx5zWqG@|@^WwOs*&X+a%PZm4 z@Xm%VcJD{kl1AQZB|GFr#kDUB`e#{53VE~QH7^VL`>P0h?llj`akzY}KcKSZKoN_Hym)@S%3!r-b>Ypa!W`qPX?cIDU{PNX60*8P)8u0N!>6z`h!pjj*T6{fC|8hQ-PO0(#`|Sieh>DM^s=J^kNQxfQS(ZyQ`=u z62(PwP*7CT0xJuPyMU}&3}8eM6>~yG#T-CI#ViJtdr^WYm@}dxX8G!!?sHC0pXxL3 z|M}*5SjX<)RCiZZSBD8FlUeON1MEI6P+D#3p9RhTJDn?y$Zn6sPWS8FrPb#3v{8}m z%0{`GOJ`*sU@xuCePzj}Wn-}3K+c2eZNq*+?+B*yLuWpbj)pA{D)qGy9-!`ppjrDyqs zan@q#`Z`IDEqcmtKIWJfiBaPwR#w|@zGPlA)ABrd-ldth%9Kk-$1WW?E?T;{kD2$9 zpH?xQqIab{;qFI=Y_^`~bl%|g4xIJDwWPh@{1H12Idk%k1{J({eZ6og7QLyH033D(2pP?&y5EMR~6+ z@~_37l6{>e)-t3=ZbH0L-b8)`vn;>d_O(s%aJeWa& zcyT$aTjzVlQ9ZVJuSHz+p zs-6)Rb0jA@SVndeDqcox$sW&groLW=v+okm$*dE+EXDn z>VSIVLxro}BHe^C_BoS)_yu|yMX{ZdShb3D6Uqo0DkEURqOb{zLMAM7zZ4L!mTtl# z_vaM63j$4#579Ag=_V`+ny@HfLP-y4t5`Q-anOXt*=^rg`y@SBhHk>*pb6zm@v%^z zc3w#jmJu>xanOXtx(SPeCM*v0LP-x+OE+P0(1gVS6H0ohj1t|1B|#IG1WYLD!7_9c zmIO^$5-_2p2g?YVuq0^065WI)K@*k)OepEWYUw5{37W7ZU_wa`mC?8DWW6QG(ECE) zqR=Ih5xB(pX@gkb#cv)2E^&V9AbyGalLzq}^NgG_?BiMWK(c!mEG^C3NpO=jT%L`L zO_gmVMREYwDib|nsZ>(Z-EEC@Wss~%kCyVW4-}`bh;m}zeu(A7zAK#0$t+^yw`pscaB}2IEwhV! z!rRPM1Awz5n{BgSgaZYd9@WIbWLU!^EinxQn3y60Os+n1%gR$}TO02SAAz#`uXIG1 z-M+&^1=$xqO59GF4|Clw59j)DK8zDrTH-o(Se|gKz}W95<&zlitYNZR#!TOCs;aB$ zS_&C1-P{xKOLTpDfZTMH?`#uD)Z440-}dWbe**Xac9l=(+_2~^KkI3~^fSi(oHuqp zBss7tnCEwt{4DqPifo=UM@gqRt2~qB-|RD~?hgxPQ!>M@P0ATOW9i;~zF1!TmxD}} zXiFYhC?4TFF%!>lpQVZAj0#;MbHwaTq1Yv(gBig~%0rjPbSzMc`<0zo@iM#0USez? zdpE@-_4VFZv8j`*#+2a$$+2A!lQ&3ym`KgV?xFjg=DxiL;!!a1zG_z$PO{tFzVaLN z>2-}$ak-T?GW&K&b`l*=&rB9^=PmupO!lUaN%dceF{$zQVNBYTva0CQ)3_lWm!iBV zgG=O%beZ|Y(e4#B6U|4im2~Ir7+jwjMMuZkY`W8_Vi!2S+7wUsE*M~bL^^7g{|mIZ z(B|j1*aVn(wPac#H`Bd0j3Oz>$knLW)l<*p>au9p7N5yUKO>r6;`SY`-sBFv|Kg6DA;cYK0*pIchLD&T1hh^Sl@rE5UrwWto;7zy7x83gy%gO5$zI@$ z3tmnpqWbA!VL27fl#}gfv5L7~7|#fl?%rkUTUk+&^PN*k#4|`a57Nrri0ECYoToM9 z(few-R})R~x=tQmft&4)dY#F3FBErheIs@I{#&T(6wi#2_xtnSS~i;c|SPr|TxqG3V&U z$;(w-CNoc2Aw|Si>t2Ji`=&V=d8+6=T%B`ixRMfsv%_oD?b0oaufgLYv-j5g^k7MH z7fmlnGQt-H{GurA7jh>pP)=;4!mD?{FN*T`1@eM^Q52hs#{9D=q;bgzDpUuw-*h}u&h06)}MRC|KoZEI@1@ibs_AZ=v zO&+Be=ktr=uwOVg@chE^C?ez+a?>R27g1)=FC;gt_@H0lE=};V>|MZk(_;ItepbLQ zWRMG&6Yz_YuwOX$0=)|4@r&%OJ@1-4N-xRh7qOjQUuH-V`4k@V3)xx?`$d!)^b5%i zD?aEK-d=9JZRUaEd{xR4!Frj8wu0kJCOcSpON0iFOm>ohsm|jE@pf7f0Fs3y)MKhd zvP2=yU39%B`Fc^hw!yC900}io&`7dAf??a#Az2s2QxiNR0+O0BH8`!X^#G74B*7}h zQw3Aw*3Qe6)nMO2cUtV{n$mRt%#UQmf7uo3(JQRcR;~MH9dag^RA(vNzif0_RoR4*Wqm7#PbhPD zmHU^;7sRW}%=<2Qv#h)#`#TTHy}@kFvcJEPd)rXC(79unM}|YC?<;1FlwYc&`u=4T zE9Bcr_}*(5dDzuHWAD7#=mD|!8gug8yM=ycd32Mec(iewV)wnvBs5uU$!K#U?EfG> z_Y$I*$s_3Mmt@(zg8wfS_u0IH^B6Jn7;w?($SS$I`2V^%Z?)2Q{EGfhCJSFh7RJ~u zTS%JDD?AP5(^Zf;r)*N@?cr=>aZ_WF zK{Cus4ly?8y$6(drhPH2x>vUWog93!{HT)uJ(q;+Y!EZA8m5C=`m%Vc6S+->yrSgX zOHQX%k8@gQF3LOw?5Bs@lYI`@zb22eCx^Ue@`!Lr@&aJM=Oic3 zWg+FowjsRAyZtk+^7!_Ye_2R@lijy$b1n+Dt2*2+|M{!9Q1>~k+?+spc50|A*=7dy zZ1cT`w+6_JdSt?fQ@xLmWPeUBCnHw4`E`rfvrGf*PhL0!jQI%(On%d|dh?NYcLXVu z#{;IAFI>e-i0)CQKMNnva^~jpuz&V5v8I&xLjWeN&&0N_i0IRSeI^zuX~j8d@lOmI zc_z&r9nIGW&0~wvZ$?Qq+!r6^x~hp~6J!qLf30u8M0u;HySP%MSUHiCIV&G_vWa<$D(>oJhKnlc>aHzCvbL`D zlH;K+CP-In$q*sZ6dKbw`4Y~~@^-xZd++P%^249`t-wBkxP zVq%K7Vq%JPFR@?BioJ4#l5BeHH6tfIUWSEz`=*8DmwL? zFH$9B%H!wm-n324edo^2@S6rXq<`yZPE#UjzEU#R#!RC6wvOf$W4^MK{W*EtNV!Q? zCa)h<>Q?avjNDEU{EL`kyhAf=x#dvZoJyv8nMa9~lnZ3a5PvpwZK30~~ z(Xv^&u3#U0%HF83#n|*56J^qK6>GEHXU5{f+($~h9OwBRKPOOy+k5h^N`4|@)pFh2e5%4}USNinaI)aZ2=#pNZ-Y~PtYXDf8jM0_|o zlv!P7?^S2Y&ZOAw!0czP24%9MpNh)N#w6YBds|UXUp&5R-%f+%*Q%ZO#G)kpfX-z5 z!(rL(8D*7Da36RwN!1qi&|bqQ+6-s%7+rzKkg8=tVt&M3zdFrC4=Cw~P3<&NeyqeV zBC=bc_(2n@Yz1=V+AmpqYL|WL=mXa_*)hA9<9}pWX0_h$e>k?cnYr7{HY0X(&Zfnl z$+Ky(N9=4`Y|&=ZVmHNXTKo=RI#Ih?9;t9$C;9;k_tR)*S1z`rXtyJsExB}x6WQ%< zUJex7wKGt36F$0&p7SQG19TfTrtFxC;bZbKvPTeY*yUrQyZiZoXyZi|r-_ox8atn; z%zC;!wuW_DmAk<8Go9{deq97#ZjRr>%vS}bA-2fq8_%Wrgt=f(7EIdyK-*n z@|oUjjEraGD9nnJ)0+KS*${6mhkm4C3F?xk!!);tpPWLj4__jHnES(;@ zATx@@K z57}6r>^nX^md7v9D-^V`JXal%6tJ-pn2qs^R2#=WBN?lyJJLG8V&r^XGL8pT8nSVA zP3#JaeRDFNp)10famVpch2(;OB()#Mmf^7y0ycIgt#Le9p^%N;J9IHo?vqfl4AsW5 z?@Y$=fFksM9RK=cTu?xzCB3uHB)JzLJvYVgdu24l6pdvl%zCMwkb8OU_x0nc-Y6P<;*Q!Ar9Hv++V=8?Sy=pcpY# zsGRH$e@s^FU41V{FC_k^e*BU^TVzu|Sgk-PF2&Ovp^LIx>9OKt@0WWydRyeR^I#c) zw#eRho=XD7JJTJbLo0}IHSbFLUM@bG<(0OS&R!aP>*mzdBP2RUk;+N%VQ*LN7q3H}Hu<;JVi$(HaL;^QxM!X&oX!h0(S3-~txD{J@v#hXG%Zxb9%zhRAXZc_ zkaRT|^c5AU7a(G)8RlWdJXwK>mQ|bXwbc@nLOG%7es$Z>yuP|^Xuez>+%c*SZrxM| z_h_nRcO_8k;I2ir>^Fq23ARU;@_}olKZSCF@(H?8H4B;VZ%HqII$JMEK=L-3R ze~u?asq!g9_fxyZebYJa*LF>g-WSmW;y$SK3HPlbBMd2?Tj%xwr1((IqrFz1N%!6o zisi*0>or;OmV|ubS@ysOmc|>A&Tv1A9J?e}bM_M1k_-sTRjIv17H@$|-0wBVijRG- z+0Bu?UR{=SxKK{0Ez%Q1mxS6PE0546p|;@nb@VFBo@OW`cuA-&cwitPEYueKGELx; zP+PFor(YspObulOFA23pc4|VxLT!;{MCg)GTkwl3ew9xsD<3mfdGW`1pviTgX^o}l zPB_d3IXm(;*$sjCDfTYIC*tukAGFy?+r7Eg%cS8C&LJf~Cb zE6>>-aZ9JuGvVxn;pNe9U8lp2)vSEx+1abIi6*u=LENOrHjqqG>;{cV5?{&Q;4?|$ z3x1N=+E0>!CO1vFG`^8^g1j17c}Cw#8Q?Qb%O<%3v#IWz|IYPUU1iZ&m7HWFn6QWN!6>6 zU6nhiZis5V3fYxdMnddBx2>3$DD79uXf7a7= zbI1^=s%}lkaDHMMN$! zs9Jt|%xiVj+-k4ANSrXb(oY>OzvL5*M!t+pMrIA>*FJ5t=m*Vm4LT{EAF^p2$Te#` z->YA*>X9h2Pp{||<0x#1LT&%eu~a7AQ=vPMMG-$U1I$Ro?+w|Z&Jsy7GE=yqjLbc= zG=ZVN6d&K1l6hw}lT|Zeq&#&kA9VBD8o5?ZOcy0Y8L+j}u}iB>a4~Vjk5-vnYcf~Y zJ!G|t>P6q*bR_nylpc|9N`pdj!-ylH*YI(<<3PGwI>P}tJ1nPjozXKl*R_xNKB(#H zR)$l9C^zax(I-UJ95h4bieejAE7>cx>0Xp;b=hn9RPzO%oTwI2$WCk54Y5(CG90<- zIStK7@>`PE4)$xN&dAs;XL@UyOh0lXm7nKU%jRhlSewOEEn;$9-4zg3-f4C8g+tY{ zk|UoAupcSRodpgUJ|&zdTklo_11qCCIVH+`DLLi~)IAeeU4M#Y=n+?tv_C|F$TflF z$+v{6$|}3b2YTg1UWu7hR@^lk8{rvdLRBr1(~Ts^(LxW>qaQZaFT;M9ghfx7O&u`8 z6oGYBx2Y55ReXF{Yj{QKRHR_wtE#G$N@C3GSdvXm4~I@#9K!239ov`-O65JAiP*U- z8wEa!m$r+iv2+a045S$_esN*z)=gta+v1XvqIPZC9DZmlxoI2wza@vI(}xwd8Y;gW zHmQ7M>nfR;%2$DhqK&O8N1T?j>7&XeP9(iy9E*gEyNaF-9+HcINeODfed)u3~$DtSd~c$!M3AgM{K+Svp->)4=8M~!Pn za?J@2CAJ{A?S(st;F<|{IKed)?nHvyNw_l!u0XgeHEu+8wPah}5Njg;%_9a%dyLH^-@Uup8r7I|+7)3t-)wi7P$7cXu!ko4Cq zBd5`!#SL8l0m1Do+-D^Bo5p$myhRjN@95g8!Y-yACyRWoy%o|S793MMwR=y)4Hr&p z?+%jwX&=MLX>@4qMcnv>;C2+Qc3)23?gR&U2N4|VcND=vUSEQPyb%Nkd6Nka@}?6U zuog^Tyv@wn?QX z3U~1drY)z+b=vrQk&M6XPpX}IVVL1CPtnHT|48~RqmuQ4^}+&zgS=-54)T@~9OSJe zILP~w;2>`k!9m{EWyyMhyd4M*@|qGHV@}b=o-n zxoi~va$4=w%JGK7evvj#Bc5Jdnd~pn-!%kRDBNuXS5LV62o8FAg5Y3}7YPpi<9(9* zn&43GUj&Ew-+v}1>ly9cm*k2G4tnlLaPZUPNbV$(8%J)C z6z+kk#wO27J+ywbLN?z1IIni)JD%Vm zZ!EzcAQIa(90}>gCE>QaInX71lLfww+Ie;{*vT=B{-~Cx4Ayq4^ZyT1P6J|Nv@dS zu>ahJ;NS-*5gghvQRBRI?M&g$6K?ytMmLD-+PZdu>?2(*%#k-54)Y^zU5omCX&E_< z4(&M#aDS0pgPW4=26-(=?g*0Wqj8@8UX}Y`ql7!)c2mbnsfVV&u9AJ;yxOUk?>Ahv zaGL(G@6+kwf z_YfS$^JfWeFX7%IIMnYOfXpt#9x__qJ??L>#-7<0-9a?)~x5o$$apNtG^V)%UuwJ;$mX*h*)pmR? z={rANJN3K#!-4i{c7wbQ&nSBK%B>M@pm6V47JAY2H%Ii>{@L28cNZI(Shr~9Vw@>^ zPAS*3FZ^vP!9jl)6CC2kjRXg~J)m)(UZB5Mgj-|TeD?TVn6=O6w+H-c?-vxkc;%x1 zmI!yfWkdbNiE0PnQ}l z6i+dJ^nEkg9+(#oB{=l+(=^U&$3McICEV1vOxYNZH9fbH=V?xPyLRfTWroAPS4ht{ zznk0+_`$OT2fMvbaG2k3BDiM4HFz(%ekivs$@L{T#OF$a!#eaLf;X?Bb#OGG44HF5JKU)0||N0Uf+B=@$An!tggI;deI8QHl zPHB;F)oV;!5a+abwN~`f_`}+%Kh_!!{ZETmm~XuGQLUY#9wNnp%YU&pnr!g;X_*t?&FpicG9LBBVG|p=W^gKqm zTP+*X^FV3Gd&2DVMSeZQzUNv-PNPH9GseN$8t2sy^YKT8+xg3Exmv%({B(jao4+z# zXg-eqI`wN#&sP#0<{R?}4t9H9U^ZC_SVOD)>xR77LpO5)2xxI*| zr;yxP8t1j+Zjm=vxTC%|Wg{+Wc3UNO`=2lmY%m<+h!#)LKgxehZU?w&BzF_ZJwb5L z-#Y{cfBBZ+Fc02lqtaea<~}2shWV`Ns3wKh;j%`E%ADnx0{&!+uf9Ro0>12@dTz zmEf@cIFsaNXq=}P^rP#9`^>VTel%A6?|@CRU-zqNbEqG+5_wxJBd5`!#Wj51;^586 z`op}bpT>FZKzyzi?taUL;xopEyLu&`d%R4mAs~_fTF9`R( zWkd69?3?`}%*sDZ{X+A5_)FtI75#bTVq7>(xSK4C_G%5$PD=(<}YVkCS7u<+^dDV$Flj#eMOiBTjwtq{qkqaiMBvAfneh+Rf!D0N}L~!tf?dq7i$!T#=7TH%h+N~dp*C0o^KTHAIpaHjQDawL7mjP!u)zhe;Zy;X|ESI zpy$&G4t{zm!C@V6i^eJKeOkCi^-Uc^?ZtO{rU+AO`~2<2_;HbC(v2M`?msu#h*pUXAQYwyd_jthkAx~r+< z0dk!-p4XKC@bPYSQeWj^NPGHxeA?8>z<0_1hO1 z!J&R#2oB@SK!U^gJBHv8$7=`<{o@*vyPxD6~Vy|ekM5d-@1Dx+YNE3F~LF4 zhY}p@b}Yd`-botg^*6+q@xr}l*-(7Jci#?dQYZCLQ`6?qJOcJ@(=1sp@cZrrhxjsz z;1FNV*Ep}ey@Z=9+!vNbO||%f{kntpu9Lc{xoJyiJ&5tQV4vjnA|5m*IN0}Kjq}=Z zz0|Lxa4TDwvRee&u|n>vmF`z3)%ZZeA)ab+68^mKpyYOddz;|Uj!y^<@-~rNLCfU& zq1?R)4&}Bbxnl?p<(@=v=rPnhu|RZc7lVv2MG@Ho+dcRdyU|* zFZExI^ZLgp;`g5j_fl))GhO65t)G`{Bk$7{)k)1c)NtK})A|Sc`H6=o`yckNCJ-FP z>9YwA@%T!DgZ{1~IQadY1cx}jkmQyT9P0N4!C{>KiR9`Xk!%n6OACU-I8#D$eF+Zw zs~|Y+b6rSsw-Ox2nWqU3dR|I$pAj7V`5%HqKia;1vfVIm+MD1o?zbm6$QwX#kXJ!) zm?vIDayJqj%6)|7-XJ){-Sq?qfB8Y<3Z*AUMdoRpY#Nz-|kLd&jb}j8xmPQPRH?=EI}2?bXHw$ZOV7X@^p7JK=g+ zHeb2pggL2G{&L|jcUVSFqeI&_n<+U@3wLa1BM*L|*=>>7?M-2(bu}FNv({de+p?R| zUT^;j<4jkAgMEh(9Lk+UaENPH5FFz3JsRiPt(|bs3Af3zq5UE3d+&Qpoz$7#jczb* zYx;v;S6D_)qeI&tfR-6v08>TLcGrpAa16 zZ6-L#tABE`-5{?S!9iX-f`h!C1P6H|2oCbjAUMdolHefkPJ)BHMFatD)y4(P_jVnb><3r}G$%OBn~DhzdhS7R zD0djaVP9n;!9maG5**5%rE#7;Fps!HxK)-7%_A`XD;!lPbxN7hb!h$vy)3efoJNN> zkAOXwX`EL-%BMRb^*y(yp9Q@!Rg2OugMS{aR zYAwM*f4>tPT_ZO~%W%Kp(p~4(H#mK~8t-m2|TxA(KjSj7!A1(cSo^YR? zVdNpsY5jbXtjo5osgtTX%W%zv)5?XPzI?V}qCz81@8_!s4)VSyIM`#WbCS!&_^}JY zL4Pd?4)+Z@6CC<^Z;~5La2RLKB{;;Pxdey#%cBH`IQ{~`LEd{B=lOlHOjte^Zifqv z?P}yY&Hv=p%hX%b>!hx~%5dihr}-cBQgcnRA0TdALvZN7_mJF6B=<4N{Yh|W@2+!_ z+Y7D@!J)l9NNzOAO(VHm2@dUehU8Wd9NN2qQupDS9|T1G@ihqliJzq&xsumM z@aKmJ4&Ui`gWyn~uLutF#J>p+^sM2~eocRPu5FLS$?e5_bRUAlzVg8YhxmLr!9iXr!NHFP5ghzw zgvNP##=N~+xce;|nzu*ag%GCXd85P7yd81!D$B@ebcFo$c8&Au2S0sWxTTg2#nX+# zeI?Aw7fk)|SMvk-QR5|wA9&?LFD-=|Y1w>wxmK7TUd*o-#MACCDdl?W1=#IWjq~b< z{xMOwU0yaaL;d4D=^qaWbJnYd3-u4&e>?oOfJ zo<~Z#e+W19b)y^jy%vY?{{BgX8Y46@|)k%Huw&CEnT6@ud&ws}-kcUHSFSzSSZUMoeKfFY8 z%Smp%#(DaKzx*g%|7E7lA%DU9_6vkL^1ZB{HT^XcdCyx$PNPH9AGmb{hkle=o@@_r zdup85Uf8WfxE_`b#b-Q+JXV;#|21Xfuhw4p^L3Vy)98rW>y_I}a^?y5lOs>-m-sGI zyZ_Zm-L}G%8+xAv{<7Ws$$CM18xb7lu|*o^wF7ayyKvuIHeVc{_JR1-DpSW$9EaT+ ztWItR)<*{t9NOE3;1I8dklg76hwl){^7xR}7h1>BX(~i*mWtg$lMahxN=k1c&-vNpL9lE`o#Io*_8wm#iQ-^vjI|hj~q{uN6Ie_Ju$1B-|9s zhWr`v-ArZd)sbI=FpDa2@diOBsj=Bir^rx55Ym+2!eyWNdyOZ(+LiC zxoet$>s>Lh3_xXY_XZ&Kg&^iG2ZMG@dZipL)kz8+rLwiRN9LlXB zIM`#R#(DbtO1L|PyYyGn=1~7=Ao2dB&2>`aem7jGe_&o%_D8b*z)d2#3keSM@!2GI zJIOsna*IjsO@f2nRuLTh_dAXA?E8;!e+&1=pT;KeZ>@jecPZBWRVVeIe+`Futu~&c z+{Rlt`?exD*zG8SgWn%VaA@Cfg2OmHmEbVG%_cb5?M{+=lHgG88zi?%<2*k&RVLP7 z3)g+yx*}QTM)FVd1Nk&?>VU$!sm41P?gHU7KS2NAZ&$;}X>@4gKJ3-w6)#>hF>42awl{;4p3-LU7pkIhNpX-(@txLEeP~ z2YGi89M;p%6CCC>YX}bVekC}_+hNaSdtkoXlHd?`+ml>>k}D@T==pqt!}{$Of~?S-Jx;b{I8dAj|sQM zvY5eZ^FQ2&=+>xi>cPfFhoSor@Y9BSCF>dSs)*pQKi*yAyms`F8#kv4_fRuaHrl1N zV~IQ;`^Y|ZQxgv`TtDHoc`Vi+H?~Y}2lf@_6CC6{NpO(&GQmOKdjto09}^t>>N|qN zxUhxbAaBQmll2FA`w|@F9ZqnN*NfmFZy3Qr-XwyLn4aFBNo!9m_r1P6Jq z5**~cPjHa;Il)2RCW6Dbuyw0se?i>XgW%9VS`i%j$B_hwa!Uygesv1LL0%QXLEdzN zgS?vv4)Pu$ILLd2;2>``!9mYI5FDN(`;*`xuXgKXe}TN6G|n48z7np9aJAbQnP|T@ ze(Ws!VXK7szQ}N){Z8oR%i`qvA-?=ca2U_GD@m4zdDvbA2YGD>4*k3n!J)tPBRIr^ zQwa|Gn?P{T-!zT$>^n~8FV})Q)abC8T&LOhcCl}dc6C$V9&Wf6!fEpZ=y_=SWP3o* z69^9S&LcR;n?-PtcPGI?-V+1|d9M;2i2a`tFUaFExE;84Gg z1P6Kj2oCZ_YMkfK7%wLYcbR2n`m6f$*OES8n5&O6y21Qj^JkR%fo0@0I--4BuiRde z^ObNV9kTMYeuVYHnZkT}wBbVQ1@!a29SvhjMg4NW=YjR~D1w7t&eJ%r9k}0pt#H3v zHgvxm&u{eaR5$fOXH!RvJDUEmP8r-KxgFpp5**q)gXHegIIq3<4$Jex{nORd5$jUT zZukyMlVj?pt~u6lh?81-@m|75rOE9@y#JfvqW;?>SswJ)nBcGuJ%r$Jzo#d`!LLS> z+}R{Io8Zvi`2>e~$P$7>J64n2k0iJ4af;nM|7$1ZHWaSEWkb(%;X85{3A3uFk%@k( z`5)|C)JrMXd)@-`xKfQ%>UWB8*IG7IzrIqx*M-@wPyYJBpHH`poJNNh*T7wi|e%ba;(IcZwAy& zwLRW&h(nrv;r9bhFpQi=ho(Pp;|LCZa3R5AJeo^zsP_VrTS{=S$Co7c55b|I?>snJ zf8Y)zxsC*fdBpJ==lKif5o3gV!m^=#$Eo61e+pA|qG?NL9szr-w~U-dhvqMPOU^$e z*W@Hce_lJjk%?C);SN02uqTOp&F_awhg~$HZffVThC5X_&F|r-Z;n&S_2L@*bREG# z-Y*0Pd37t2%Z0o~1P6I-2@dkQ5gg>5NN|uhf#4wTLV|<5>j@6>77!fdEg?9_d!OJS z?;C=HynhJ}@^&1b><5syAHhLhdxC?!z61w(qX-W2Y6uSUt|U0fyOZD`?tArDCO=sxo)bB{KF9{ccbL>7N*0L z{N-X^e34}!4@aoIHwpKsWkcnDE!V#*%)&GBmkWRS$1*4rhgNPoNpCQV+aoW1=C3GCXMs_3V#2D zaNk)rFKqJK0cxpo8xz4Ruz5gO;|1$LVv+=G@4*$w+}>x5~2d49XW z9+z51PNO4aw_7#Ns~_eikAu6ylpC6t;Qq%k!aQ`P;X?Bg)UVN1hB39%<304;mf&FD zZW`yc1M`xh!c|!|G+ur$+||OIJu};0&Hu3P^O9xcG&&+Zd*!|>1K0nAyYnt1?;X*T z=J$)Fg7coNn;QDI;g$=hm5Vre$;Zk1YcAYf1hMP2g>VJylIw?dv?4gv z?>K@(e6A!owBvG;yPx1t?oxt-|9wGl@aMlsZpZb>dWO6M2oB>>M}osVVhF*Z+|vmT z@@5bm;!66QPOLG5`+>W0l+YR&GeF+Zz=x~CA-yctMlSyt4$vsYR zXvcp^?ni<{d+UFitY>fskz5awDk((OC!Z>f2{}(>W4Z&fb`hJ3g-QFO$ zeT7?3a9A(Y{wi62SO*+LaFExB;2>`j$;~A=thW}E+&Y58efwHpC+h{}?n7{p*PZ0b z39gyQyPV)K?k^xX%wLw0+}9*m=bL2xK`;9f9M*Zq5*+%+D1yU2$k_x3d9z6FK9YNp z;INKbO>kI8{X%ePNBwV;?E!iF5FF$kMR3@U9Yk z#ae=cybS~gd0Ty#Y&Xc;iQph_UxI_Y!w3%Yjw3k8JDK1hZz93LU#1Zp_783*IE?#` zklbqohjy$bxeWvd{iVJq{ea+bzieNE!~XxF1c&|DZX|a+$&Dd6_`y_?n@w@Ta2PMoAvnaB*#rmwyPM#!4tS2>urB+Q;9$2u2oB}$ z{A02`z#UF-`w4dn!C}31F~PMG?g4^Bdsh=2{Av@yVSe9WW3pZ#uQkaXM{wwuV+aoY z=wgDyy5~-kdzs)c?te~lf0A5-pOW>Aa`z>&&%%q2L?haMt0 z#DgUShjy$axTeBwCOGuBU4Krt8~R6Ef`hzX1P6Iz2@diuA~^Jq+XybwGr^%>t|T~& z3!4ZI@u2=M$$Eyo0|^fDIujh`Il~AJepN$ou*Y1Idz|E!5ghdL4ase_DOu0(zdcCq z5R&UhaInXClDmZ9BEKiOB_#I=!NLD({hF+2a7{_B1Hob6Y$(Z{OLDgp9QwygB=-r) zr8Xz)5B}1G;NS;`5gf*?AsXjBKQvRgO5y&sEZ)b~o*#N-EBS8OZ}J@SAEqrBKegwF zQ0^Mb$Z2$F&xfI(ZzQ?8e^ZTX*hjm^t!J!@9HO|vtJK;_iZjNQQMLiny9oA}8 z*@($w_8B1m8y$Eq@-<=h{M)o8^jsw3?j+0DOGVGQ@9)E3W@?;QKeS`MaL-#d^jsRA zA73lX+y9vQg`StkxVq!Niaoq?YlJ&MxH~NydLDC*=%vAyx~X|7XheQ%SN>^!h5ei( zwlWMj9GYHmeGh_zydeY!dF2F$b?8)$^Yn7PwD(Hk_SxFB1?x1;UslwT-@VzUAazFt8l>~?Q@;$*p zUaBzJZjiSN!C@cn0D?o@=t6LiH-C1d`^1k!01c!08V3%ZhO@(Vja0du?B*DS&%Loqs zQbTa?gP8;ezn@2P&y(CLg2OuWXM%%$|FdhdJrMu)CpfH+Iuac8Je1&|=PHf!`Wv46 zpDx@A%cB2kevkJN_uQ=@b;<6g&7tT15yv-KMoyzcn;)RP_4eTOx1Yv&?Pw?Rjuvi; zWkd77q0)}|!feyfl#Rby|Hb;_6wAnIbZG5>znr6SUj2TPxN)O!v-UFOc9ZKgJ@?&4 z#)W1DscTvou2eX!e&`?L_cx53Mu%2E*kd}$-AZuqzb6R}<-SF5koPIc{Z4T3`|S@% z)(gsQPHz6CCO{i{Mbd`6Tx|!J&RD2oCl8hTu@Y)PbDcb|pB} zuO-1@{oIM*uukbuaF92G;2^J>;2`fpf`hy{1P6KZ2oCa|Bsh$NuM!-_!H)?J^PJ5D zhjI%JO7<7T$-Onsi_c#PccgI5TN;`0A1yxDmpJ~bFk7`Y9O|LPXXyDa%gAYTXz>~I ztNLw{+kx-BHYGT$Lt7FY^wOT>1`!;}tt2>%m*KS6!u7Lks9db0Dup?zIDfh5A9q+rPNO68E3aJ4>z)v9 ztCFld&7bi;XLn&9KE!aLc^&#g<3pA9dg~e3qlo0XYMj@Ob|UY1;jXl7XkLeXy%&Vp z=`d4A{MGs;#-s6;k<;kV`X$@4y1NR8Qp}orp z4(9OAXsUaSL#bux^cMn|Z<=Mfy_-9m8C z-(rH>TevkO_qWD*`a^%)t8+nWko?0D@@Mq7>B4;2#c=qm=?`)Dkgm!4Lw`F?Wo-Avh`I1c}N%`$Qt9g%&Na#suYqh<4zyWKGbsXyc&j!?O1@6p{A zy?Euq9s`BD+_E8iAig{&%yy+lCjM&n!1v6@SVm5xL-S|!x5*mk)erk-7YkSWI8$zO zxlZeEi)G$4s%Jr}X&=MwC!AJ4>`&g)*D!J#9a{Y`pL~(v5bswL9OP{zILNEpkE>r3 zf`hzvB-fkZ&_Buu4&|OjaF92f;2>{4!9m^&1P6KV6CC7yPjHY|tADcHAa4(i^ZXw3 ztJcDuZCUhl&F?2k|9DB5LkF6&L-Q+?JI^w58XcP7W4-YV!6B~wPvg9Hv=i=2;TjJz z^$W!p?3?uw=7Hl4hre3?MY-FaU>G@#4y_$%@9rAs)el@N;ksHjU)&ubOz**_>`>f= zAIz~#R5|$*)z2#z_I*IO-yM0HeKCLTFr*-L&xxkokbR+-oli>E3%LDA?g)+Z+5!Fb z5^khrL;Cw%xC?|S8=7B#7#AL}jGRV?razSXtZ>UM8!8v;tsjM1d2;@8v2JX9ilRTI zy+;Vw*Rr8-hZ7w3b9xXQAb|pBJJCNi?Yn*3~e?;C?;U-TuZN|Juvqu|Qmz^|4 z)|XQahxM0c5BTW~HOcye|2UT29Rgm0SBzGCf-9T`N&+`cm^UTEr2fZvMxm6_h6~Uo@Y$iCwzxtOa z`xWHvMR4eEB?O0lR7!Hg2@dtEAvlyfli;uqd@sRaoPL$yAny}`L%iQYaA?OKS0vjF z^4by{^miP=A-)VJILJGl;NUOQ2@d+Zncy%_e1_nlztseXcKk$es9&8clkI_db_;^T zyr~1hVcyV>;LzR*g2Q~}B8~ILH|*2gB;41Q4ei6>`L$M86{K#QX>=3Xr$OAUdv&t@ zpqEAj2R*meIIkVB@3F$2V%gC84fl!97G~@$Q^(Ny4gKRG%gAYTXzMqW`@C=~EE_6! zqi{b9^XcsT<)Xd&U!&+xX>TXtPOxmKT(ozxFvI8MFBk2&*D`V%9a?*5O3rh_^}N=| z%ePOnOqglc8!og@gZ|cXuF_s_y^8&-9s~z@V+aoNE+#mvL+>QHmo?6_8`k@u3)k=l z)8^26AK%^YCCuG78V-N8`6S}T7R$(KbZF~5_|={_DSGzmhjnPNa2qTeT8Dlu^_zRM z+#kHv$VB|t>W4Vg|2Cyu&%UT%Il*CEm_~3Y_YQ)C-!CFK)NdKdeMN96H+8$B7tbCe z1>04)8q4AeZT*4g5B?|233nQq=$D#3Q0{8W$Z2$F{(^DlM}mXAI(I4U@azl!XsmHw zd(l6Nge$jfsDI%8`Ax$7IM0-gzgl}SFD|`1xqfKJNgC(X?7jE!9Mkd;&*`u!P z3mkZ_?8n|`IQWlNKlHDb_b1m6+))IF`_sKiZYaTFJU@-#P``5t4*Hr&a`Oldc6*xO z5D(tfIM2Q{!hI>+sSg;NV4kDd7r(#ojxc2p8V>72&AyoD{AC$AjSj89!B4k;DA^An zuPMPn&&31>{T-`uo?gJ6BHSd)=9_QK7UtZCONrr5~*l?w3c6 zytYDW_82A=`sne3)KLo!cZhHyd-QoaSCJ`LuO(!_WyMf>!ZvnwU-tz