From 929b7de9441353a20aa4688ed3335a6167243397 Mon Sep 17 00:00:00 2001 From: Grigory Chudov Date: Sun, 11 Mar 2018 17:07:48 -0400 Subject: [PATCH] Updated the build system, now using .NET Framework v4.0 for most things --- .gitignore | 7 +- .hgignore | 22 - Bwg.Hardware/Bwg.Hardware.csproj | 130 +- Bwg.Hardware/Properties/AssemblyInfo.cs | 35 - Bwg.Hardware/app.config | 3 - Bwg.Logging/Bwg.Logging.csproj | 138 +- Bwg.Logging/Properties/AssemblyInfo.cs | 35 - Bwg.Logging/app.config | 3 - Bwg.Scsi/Bwg.Scsi.csproj | 177 +- Bwg.Scsi/FileReader.cs | 142 - Bwg.Scsi/Properties/AssemblyInfo.cs | 35 - Bwg.Scsi/app.config | 3 - CUEControls/CUEControls.csproj | 140 +- CUEPlayer/CUEPlayer.csproj | 18 +- CUEPlayer/DataSet1.Designer.cs | 1643 -- CUEPlayer/Output.cs | 2 +- CUEPlayer/Properties/Resources.Designer.cs | 52 +- CUEPlayer/Properties/Settings.Designer.cs | 4 +- CUEPlayer/app.config | 8 +- CUERipper.WPF/App.xaml | 8 + CUERipper.WPF/App.xaml.cs | 16 + CUERipper.WPF/CUERipper.WPF.csproj | 158 + .../Properties/AssemblyInfo.cs | 91 +- .../Properties/Resources.Designer.cs | 63 + CUERipper.WPF/Properties/Resources.resx | 117 + CUERipper.WPF/Properties/Settings.Designer.cs | 26 + CUERipper.WPF/Properties/Settings.settings | 7 + CUERipper.WPF/Window1.xaml | 95 + CUERipper.WPF/Window1.xaml.cs | 77 + CUERipper.WPF/app.config | 4 + CUERipper.WPF/depprop.txt | 17 + CUERipper.WPF/freedb16.png | Bin 0 -> 394 bytes CUERipper.WPF/musicbrainz.ico | Bin 0 -> 1406 bytes CUERipper/CUERipper.csproj | 11 +- CUERipper/Properties/Resources.Designer.cs | 4 +- CUERipper/Properties/Settings.Designer.cs | 4 +- CUERipper/app.config | 8 +- CUETools.ALACEnc/App.config | 4 +- CUETools.ALACEnc/CUETools.ALACEnc.csproj | 119 +- CUETools.ALACEnc/Properties/AssemblyInfo.cs | 33 - CUETools.ARCUE/CUETools.ARCUE.csproj | 123 +- CUETools.ARCUE/Properties/AssemblyInfo.cs | 33 - .../CUETools.AccurateRip.csproj | 126 +- .../Properties/AssemblyInfo.cs | 35 - CUETools.CDImage/CUETools.CDImage.csproj | 104 +- CUETools.CDImage/Properties/AssemblyInfo.cs | 35 - CUETools.CDRepair/CUETools.CDRepair.csproj | 2 +- CUETools.CLParity/CLParity.cs | 664 + CUETools.CLParity/CUETools.CLParity.csproj | 127 + .../Properties/AssemblyInfo.cs | 70 +- .../Properties/Resources.Designer.cs | 180 + CUETools.CLParity/Properties/Resources.resx | 159 + .../Properties/Resources.ru-RU.resx | 138 + CUETools.CLParity/fastdecode/0901.1886v1.pdf | Bin 0 -> 64995 bytes CUETools.CLParity/fastdecode/0901.1886v1.txt | 3 + CUETools.CLParity/fastdecode/VERSION | 1 + CUETools.CLParity/fastdecode/fastdecode.sln | 20 + .../fastdecode/fastdecode.vcproj | 398 +- ...fastdecode.vcproj.fandrahomevs.chudov.user | 65 + .../fastdecode/fastdecode.vcproj.user | 1 + CUETools.CLParity/fastdecode/inttypes.h | 305 + CUETools.CLParity/fastdecode/main.c | 422 + CUETools.CLParity/fastdecode/new/README | 25 + CUETools.CLParity/fastdecode/new/VERSION | 1 + CUETools.CLParity/fastdecode/new/fermat.cc | 891 + CUETools.CLParity/fastdecode/new/main.c | 343 + .../fastdecode/new/reed_solomon.c | 1083 + .../fastdecode/new/reed_solomon.h | 49 + CUETools.CLParity/fastdecode/reed_solomon.c | 1073 + CUETools.CLParity/fastdecode/reed_solomon.h | 72 + CUETools.CLParity/fastdecode/speed.c | 302 + CUETools.CLParity/fastdecode/stdint.h | 247 + CUETools.CLParity/fastdecode/test_rs.c | 1228 + .../matlab/Errors_And_Erasures_Test.m | 105 + CUETools.CLParity/matlab/RS_ENC4.m | 51 + CUETools.CLParity/matlab/RS_E_E_DEC.m | 229 + CUETools.CLParity/matlab/gfdiff.m | 14 + CUETools.CLParity/matlab/gfpow.m | 4 + CUETools.CLParity/matlab/gfsubstitute.m | 11 + .../matlab/massey_berlekamp_M3.m | 106 + CUETools.CLParity/parity.cl | 199 + .../CUETools.CTDB.Converter.csproj | 93 +- .../Properties/AssemblyInfo.cs | 36 - .../CUETools.CTDB.EACPlugin.csproj | 66 +- CUETools.CTDB.EACPlugin/ImagePreview.cs | 1 - .../CTDBResponse.cs | 80 +- .../CTDBResponseEntry.cs | 60 +- .../CTDBResponseMeta.cs | 178 +- .../CTDBResponseMetaImage.cs | 66 +- .../CTDBResponseMetaLabel.cs | 48 +- .../CTDBResponseMetaRelease.cs | 48 +- .../CTDBResponseMetaTrack.cs | 54 +- .../CUETools.CTDB.Types.csproj | 25 + .../CUETools.CTDB.Types.csproj.bak | 41 + CUETools.CTDB/CTDBSubmitResponse.cs | 34 - CUETools.CTDB/CUETools.CTDB.csproj | 156 +- CUETools.CTDB/CUETools.CTDB.csproj.bak | 50 + CUETools.CTDB/CUEToolsDB.cs | 40 +- CUETools.CTDB/GeneratedAssembly.cs | 1810 ++ .../UploadHelper/Properties/AssemblyInfo.cs | 35 - .../UploadHelper/UploadHelper.csproj | 59 - .../CUETools.ChaptersToCue.csproj | 106 + CUETools.ChaptersToCue/Program.cs | 251 + .../Properties/AssemblyInfo.cs | 66 +- .../CUETools.Codecs.ALAC.csproj | 122 +- .../Properties/AssemblyInfo.cs | 35 - .../CUETools.Codecs.APE.vcproj | 427 - .../CUETools.Codecs.APE.vcxproj | 10 +- CUETools.Codecs.BDLPCM/BDLPCMReader.cs | 114 +- .../CUETools.Codecs.BDLPCM.csproj | 114 +- .../Properties/AssemblyInfo.cs | 35 - .../CUETools.Codecs.CoreAudio.csproj | 163 +- .../CoreAudioApi/WasapiCapture.cs | 216 - .../CUETools.Codecs.DirectSound.csproj | 99 + CUETools.Codecs.DirectSound/DirectSoundOut.cs | 297 + .../Properties/AssemblyInfo.cs | 72 +- CUETools.Codecs.FLAC/AssemblyInfo.cpp | 39 - CUETools.Codecs.FLAC/CUETools.Codecs.FLAC.cpp | 696 - .../CUETools.Codecs.FLAC.vcproj | 423 - .../CUETools.Codecs.FLAC.vcxproj | 232 - CUETools.Codecs.FLAC/app.ico | Bin 1078 -> 0 bytes CUETools.Codecs.FLAC/app.rc | 63 - CUETools.Codecs.FLAC/cuesheet.c | 610 - CUETools.Codecs.FLAC/resource.h | 3 - .../CUETools.Codecs.FLACCL.csproj | 6 +- CUETools.Codecs.FLACCL/FLACCLWriter.cs | 66 +- .../CUETools.Codecs.FLAKE.csproj | 139 +- CUETools.Codecs.FLAKE/FlacFrame.cs | 2 +- CUETools.Codecs.FLAKE/Flake.cs | 2 +- CUETools.Codecs.FLAKE/FlakeReader.cs | 20 +- CUETools.Codecs.FLAKE/FlakeWriter.cs | 118 +- .../Properties/AssemblyInfo.cs | 35 - CUETools.Codecs.FLAKE/RiceContext.cs | 4 +- .../CUETools.Codecs.FlaCuda.csproj | 6 +- .../CUETools.Codecs.HDCD.csproj | 158 +- .../Properties/AssemblyInfo.cs | 35 - .../CUETools.Codecs.Icecast.csproj | 115 +- .../Properties/AssemblyInfo.cs | 36 - .../CUETools.Codecs.LAME.csproj | 134 +- .../Properties/AssemblyInfo.cs | 36 - .../CUETools.Codecs.LossyWAV.csproj | 121 +- .../Properties/AssemblyInfo.cs | 35 - .../CUETools.Codecs.TTA.vcproj | 423 - .../CUETools.Codecs.TTA.vcxproj | 10 +- CUETools.Codecs.TTA/ReadMe.txt | 31 - .../CUETools.Codecs.WMA.csproj | 130 +- .../Properties/AssemblyInfo.cs | 35 - .../CUETools.Codecs.WavPack.vcproj | 390 - .../CUETools.Codecs.WavPack.vcxproj | 10 +- CUETools.Codecs.libFLAC/FLACDLL.cs | 18 +- CUETools.Codecs.libFLAC/Reader.cs | 2 +- CUETools.Codecs.libFLAC/Writer.cs | 6 +- CUETools.Codecs/CUETools.Codecs.csproj | 146 +- CUETools.Codecs/Properties/AssemblyInfo.cs | 35 - .../CUETools.Compression.Rar.csproj | 113 +- .../Properties/AssemblyInfo.cs | 35 - .../CUETools.Compression.Zip.csproj | 124 +- .../ICSharpCode.SharpZipLib.dll | Bin 192512 -> 0 bytes .../Properties/AssemblyInfo.cs | 35 - .../CUETools.Compression.csproj | 101 +- .../Properties/AssemblyInfo.cs | 35 - CUETools.Converter/CUETools.Converter.csproj | 122 +- CUETools.Converter/Program.cs | 4 + CUETools.Converter/Properties/AssemblyInfo.cs | 33 - CUETools.DSP.Mixer/CUETools.DSP.Mixer.csproj | 114 +- CUETools.DSP.Mixer/Properties/AssemblyInfo.cs | 36 - .../CUETools.DSP.Resampler.csproj | 127 +- .../Properties/AssemblyInfo.cs | 36 - CUETools.FLACCL.cmd/CUETools.FLACL.cmd.csproj | 6 +- CUETools.FLACCL.cmd/Program.cs | 4 +- CUETools.FlaCudaExe/CUETools.FlaCuda.csproj | 6 +- CUETools.Flake/App.config | 4 +- CUETools.Flake/CUETools.Flake.csproj | 119 +- CUETools.Flake/Program.cs | 10 +- CUETools.LossyWAV/CUETools.LossyWAV.csproj | 117 +- CUETools.LossyWAV/Properties/AssemblyInfo.cs | 33 - CUETools.Parity/CUETools.Parity.csproj | 104 +- CUETools.Parity/Properties/AssemblyInfo.cs | 36 - CUETools.Processor/CUEMetadata.cs | 3 +- CUETools.Processor/CUEProcessorPlugins.cs | 2 +- CUETools.Processor/CUESheet.cs | 10 + CUETools.Processor/CUETools.Processor.csproj | 202 +- CUETools.Processor/CUEToolsLocalDB.cs | 2 +- CUETools.Processor/Properties/AssemblyInfo.cs | 35 - CUETools.Ripper.Console/App.config | 8 + .../CUETools.ConsoleRipper.csproj | 136 +- .../Properties/AssemblyInfo.cs | 33 - .../CUETools.Ripper.SCSI.csproj | 147 +- CUETools.Ripper.SCSI/Galois.cs | Bin 6368 -> 0 bytes .../Properties/AssemblyInfo.cs | 35 - CUETools.Ripper.SCSI/RsDecode.cs | Bin 12560 -> 0 bytes CUETools.Ripper.SCSI/RsEncode.cs | Bin 3950 -> 0 bytes CUETools.Ripper/CUETools.Ripper.csproj | 115 +- CUETools.Ripper/Properties/AssemblyInfo.cs | 35 - .../CUETools.TestHelpers.csproj | 10 +- CUETools.TestHelpers/app.config | 2 +- CUETools.eac3to/CUETools.eac3to.csproj | 139 +- CUETools.eac3to/Program.cs | 12 +- CUETools.eac3to/Properties/AssemblyInfo.cs | 33 - CUETools.eac3ui/App.config | 14 +- CUETools.eac3ui/BLUTools.csproj | 9 +- CUETools.eac3ui/MainWindow.xaml | 4 +- CUETools.eac3ui/MainWindow.xaml.cs | 20 +- .../CUETools.TestCodecs.csproj | 48 +- .../CUETools.TestCodecs/{ => Data}/alac.m4a | Bin .../{ => Data}/flacwriter1.flac | Bin .../CUETools.TestCodecs/{ => Data}/flake.flac | Bin .../{ => Data}/hires1.flac | Bin .../CUETools.TestCodecs/{ => Data}/hires1.wav | Bin .../CUETools.TestCodecs/{ => Data}/pipe.wav | Bin .../CUETools.TestCodecs/{ => Data}/test.flac | Bin .../CUETools.TestCodecs/{ => Data}/test.wav | Bin .../CUETools.TestCodecs/FlacWriterTest.cs | 15 +- .../CUETools.TestParity.csproj | 9 +- .../CUETools.TestProcessor.csproj | 23 +- CUETools/CUETools.csproj | 19 +- CUETools/CUETools.sln | 188 +- CUETools/Properties/Resources.Designer.cs | 4 +- CUETools/Properties/Settings.Designer.cs | 4 +- CUETools/TestRipper/TestRipper.csproj | 6 + CUETools/app.config | 4 +- CUETools/localtestrun.testrunconfig | 7 +- Freedb/Freedb.csproj | 6 +- MAC_SDK/Source/MACLib/Assembly/Assembly.obj | Bin 818 -> 818 bytes MusicBrainz/MusicBrainz.csproj | 6 +- ProgressODoom/ProgressODoom.csproj | 6 +- ThirdParty/Win32/libmp3lame.dll | Bin 0 -> 239104 bytes ThirdParty/openclnet.patch | 206 + ThirdParty/x64/libmp3lame.dll | Bin 0 -> 909824 bytes WindowsMediaLib/AssemblyInfo.cs | 50 - WindowsMediaLib/WindowsMediaLib.csproj | 161 +- flac/AUTHORS | 58 - flac/COPYING.FDL | 397 - flac/COPYING.GPL | 339 - flac/COPYING.LGPL | 504 - flac/COPYING.Xiph | 29 - flac/FLAC-vs2005.sln | 272 - flac/FLAC.sln | 288 - flac/Makefile.am | 53 - flac/Makefile.in | 888 - flac/Makefile.lite | 77 - flac/README | 254 - flac/aclocal.m4 | 1248 - flac/ar-lib | 270 - flac/autogen.sh | 44 - flac/build/Makefile.am | 23 - flac/build/Makefile.in | 486 - flac/build/compile.mk | 49 - flac/build/config.mk | 143 - flac/build/exe.mk | 89 - flac/build/lib.mk | 120 - flac/compile | 347 - flac/config.guess | 1420 - flac/config.h.in | 234 - flac/config.rpath | 0 flac/config.sub | 1799 -- flac/configure | 23088 ---------------- flac/configure.ac | 495 - flac/depcomp | 791 - flac/examples/Makefile.am | 27 - flac/examples/Makefile.in | 666 - flac/examples/Makefile.lite | 50 - flac/examples/README | 12 - flac/examples/c/Makefile.am | 19 - flac/examples/c/Makefile.in | 661 - flac/examples/c/decode/Makefile.am | 19 - flac/examples/c/decode/Makefile.in | 661 - flac/examples/c/decode/file/Makefile.am | 32 - flac/examples/c/decode/file/Makefile.in | 644 - flac/examples/c/decode/file/Makefile.lite | 44 - .../decode/file/example_c_decode_file.vcproj | 199 - .../decode/file/example_c_decode_file.vcxproj | 183 - .../example_c_decode_file.vcxproj.filters | 18 - flac/examples/c/decode/file/main.c | 200 - flac/examples/c/encode/Makefile.am | 19 - flac/examples/c/encode/Makefile.in | 661 - flac/examples/c/encode/file/Makefile.am | 34 - flac/examples/c/encode/file/Makefile.in | 646 - flac/examples/c/encode/file/Makefile.lite | 44 - .../encode/file/example_c_encode_file.vcproj | 199 - .../encode/file/example_c_encode_file.vcxproj | 183 - .../example_c_encode_file.vcxproj.filters | 18 - flac/examples/c/encode/file/main.c | 171 - flac/examples/cpp/Makefile.am | 19 - flac/examples/cpp/Makefile.in | 661 - flac/examples/cpp/decode/Makefile.am | 19 - flac/examples/cpp/decode/Makefile.in | 661 - flac/examples/cpp/decode/file/Makefile.am | 35 - flac/examples/cpp/decode/file/Makefile.in | 649 - flac/examples/cpp/decode/file/Makefile.lite | 46 - .../file/example_cpp_decode_file.vcproj | 199 - .../file/example_cpp_decode_file.vcxproj | 187 - .../example_cpp_decode_file.vcxproj.filters | 18 - flac/examples/cpp/decode/file/main.cpp | 191 - flac/examples/cpp/encode/Makefile.am | 19 - flac/examples/cpp/encode/Makefile.in | 661 - flac/examples/cpp/encode/file/Makefile.am | 35 - flac/examples/cpp/encode/file/Makefile.in | 649 - flac/examples/cpp/encode/file/Makefile.lite | 46 - .../file/example_cpp_encode_file.vcproj | 199 - .../file/example_cpp_encode_file.vcxproj | 187 - .../example_cpp_encode_file.vcxproj.filters | 18 - flac/examples/cpp/encode/file/main.cpp | 176 - flac/include/FLAC++/Makefile.am | 39 - flac/include/FLAC++/Makefile.in | 623 - flac/include/FLAC++/all.h | 49 - flac/include/FLAC++/decoder.h | 246 - flac/include/FLAC++/encoder.h | 261 - flac/include/FLAC++/export.h | 86 - flac/include/FLAC++/metadata.h | 1225 - flac/include/FLAC/Makefile.am | 43 - flac/include/FLAC/Makefile.in | 626 - flac/include/FLAC/all.h | 371 - flac/include/FLAC/assert.h | 46 - flac/include/FLAC/callback.h | 185 - flac/include/FLAC/export.h | 97 - flac/include/FLAC/format.h | 1025 - flac/include/FLAC/metadata.h | 2182 -- flac/include/FLAC/ordinals.h | 86 - flac/include/FLAC/stream_decoder.h | 1560 -- flac/include/FLAC/stream_encoder.h | 1790 -- flac/include/Makefile.am | 23 - flac/include/Makefile.in | 662 - flac/include/share/Makefile.am | 17 - flac/include/share/Makefile.in | 657 - flac/include/share/alloc.h | 209 - flac/include/share/compat.h | 201 - flac/include/share/endswap.h | 78 - flac/include/share/getopt.h | 184 - flac/include/share/grabbag.h | 30 - flac/include/share/grabbag/Makefile.am | 8 - flac/include/share/grabbag/Makefile.in | 469 - flac/include/share/grabbag/cuesheet.h | 43 - flac/include/share/grabbag/file.h | 65 - flac/include/share/grabbag/picture.h | 47 - flac/include/share/grabbag/replaygain.h | 73 - flac/include/share/grabbag/seektable.h | 39 - flac/include/share/macros.h | 41 - flac/include/share/private.h | 45 - flac/include/share/replaygain_analysis.h | 59 - flac/include/share/replaygain_synthesis.h | 52 - flac/include/share/safe_str.h | 69 - flac/include/share/utf8.h | 25 - flac/include/share/win_utf8_io.h | 69 - flac/include/test_libs_common/Makefile.am | 5 - flac/include/test_libs_common/Makefile.in | 466 - .../test_libs_common/file_utils_flac.h | 36 - .../include/test_libs_common/metadata_utils.h | 71 - flac/install-sh | 527 - flac/ltmain.sh | 9661 ------- flac/m4/Makefile.am | 27 - flac/m4/Makefile.in | 490 - flac/m4/add_cflags.m4 | 18 - flac/m4/add_cxxflags.m4 | 19 - flac/m4/bswap.m4 | 82 - flac/m4/clang.m4 | 31 - flac/m4/codeset.m4 | 23 - flac/m4/endian.m4 | 177 - flac/m4/gcc_version.m4 | 31 - flac/m4/iconv.m4 | 268 - flac/m4/lib-ld.m4 | 119 - flac/m4/lib-link.m4 | 777 - flac/m4/lib-prefix.m4 | 224 - flac/m4/libtool.m4 | 7997 ------ flac/m4/ltoptions.m4 | 384 - flac/m4/ltsugar.m4 | 123 - flac/m4/ltversion.m4 | 23 - flac/m4/lt~obsolete.m4 | 98 - flac/m4/ogg.m4 | 116 - flac/m4/really_gcc.m4 | 32 - flac/m4/stack_protect.m4 | 73 - flac/m4/xmms.m4 | 148 - flac/man/Makefile.am | 38 - flac/man/Makefile.in | 576 - flac/man/flac.1 | 390 - flac/man/flac.sgml | 814 - flac/man/metaflac.1 | 300 - flac/man/metaflac.sgml | 571 - flac/missing | 215 - flac/objs/Makefile.am | 20 - flac/objs/Makefile.in | 663 - flac/objs/debug/Makefile.am | 20 - flac/objs/debug/Makefile.in | 663 - flac/objs/debug/lib/Makefile.am | 16 - flac/objs/debug/lib/Makefile.in | 479 - flac/objs/release/Makefile.am | 20 - flac/objs/release/Makefile.in | 663 - flac/objs/release/lib/Makefile.am | 16 - flac/objs/release/lib/Makefile.in | 479 - flac/src/Makefile.am | 42 - flac/src/Makefile.in | 681 - flac/src/Makefile.lite | 76 - flac/src/flac/Makefile.am | 61 - flac/src/flac/Makefile.in | 730 - flac/src/flac/Makefile.lite | 52 - flac/src/flac/Makefile.lite.iffscan | 46 - flac/src/flac/analyze.c | 247 - flac/src/flac/analyze.h | 32 - flac/src/flac/decode.c | 1495 - flac/src/flac/decode.h | 71 - flac/src/flac/encode.c | 2885 -- flac/src/flac/encode.h | 117 - flac/src/flac/flac.vcproj | 255 - flac/src/flac/flac.vcxproj | 219 - flac/src/flac/flac.vcxproj.filters | 62 - flac/src/flac/foreign_metadata.c | 816 - flac/src/flac/foreign_metadata.h | 74 - flac/src/flac/iffscan.c | 129 - flac/src/flac/iffscan.vcproj | 207 - flac/src/flac/iffscan.vcxproj | 191 - flac/src/flac/iffscan.vcxproj.filters | 26 - flac/src/flac/local_string_utils.c | 109 - flac/src/flac/local_string_utils.h | 28 - flac/src/flac/main.c | 2255 -- flac/src/flac/utils.c | 418 - flac/src/flac/utils.h | 73 - flac/src/flac/vorbiscomment.c | 254 - flac/src/flac/vorbiscomment.h | 27 - flac/src/libFLAC++/Makefile.am | 58 - flac/src/libFLAC++/Makefile.in | 780 - flac/src/libFLAC++/Makefile.lite | 59 - flac/src/libFLAC++/flac++.pc.in | 11 - flac/src/libFLAC++/libFLAC++.m4 | 117 - flac/src/libFLAC++/libFLAC++_dynamic.vcproj | 225 - flac/src/libFLAC++/libFLAC++_dynamic.vcxproj | 184 - .../libFLAC++_dynamic.vcxproj.filters | 44 - flac/src/libFLAC++/libFLAC++_static.vcproj | 202 - flac/src/libFLAC++/libFLAC++_static.vcxproj | 152 - .../libFLAC++_static.vcxproj.filters | 44 - flac/src/libFLAC++/metadata.cpp | 1742 -- flac/src/libFLAC++/stream_decoder.cpp | 394 - flac/src/libFLAC++/stream_encoder.cpp | 516 - flac/src/libFLAC/Makefile.am | 133 - flac/src/libFLAC/Makefile.in | 1018 - flac/src/libFLAC/Makefile.lite | 109 - flac/src/libFLAC/bitmath.c | 109 - flac/src/libFLAC/bitreader.c | 1059 - flac/src/libFLAC/bitwriter.c | 843 - flac/src/libFLAC/cpu.c | 487 - flac/src/libFLAC/crc.c | 143 - flac/src/libFLAC/fixed.c | 419 - flac/src/libFLAC/fixed_intrin_sse2.c | 253 - flac/src/libFLAC/fixed_intrin_ssse3.c | 241 - flac/src/libFLAC/flac.pc.in | 12 - flac/src/libFLAC/float.c | 302 - flac/src/libFLAC/format.c | 585 - flac/src/libFLAC/ia32/Makefile.am | 44 - flac/src/libFLAC/ia32/Makefile.in | 623 - flac/src/libFLAC/ia32/bitreader_asm.nasm | 593 - flac/src/libFLAC/ia32/cpu_asm.nasm | 98 - flac/src/libFLAC/ia32/fixed_asm.nasm | 309 - flac/src/libFLAC/ia32/lpc_asm.nasm | 2049 -- flac/src/libFLAC/ia32/nasm.h | 85 - flac/src/libFLAC/ia32/stream_encoder_asm.nasm | 156 - flac/src/libFLAC/include/Makefile.am | 32 - flac/src/libFLAC/include/Makefile.in | 674 - flac/src/libFLAC/include/private/Makefile.am | 53 - flac/src/libFLAC/include/private/Makefile.in | 584 - flac/src/libFLAC/include/private/all.h | 50 - flac/src/libFLAC/include/private/bitmath.h | 186 - flac/src/libFLAC/include/private/bitreader.h | 91 - flac/src/libFLAC/include/private/bitwriter.h | 104 - flac/src/libFLAC/include/private/cpu.h | 168 - flac/src/libFLAC/include/private/crc.h | 62 - flac/src/libFLAC/include/private/fixed.h | 107 - flac/src/libFLAC/include/private/float.h | 98 - flac/src/libFLAC/include/private/format.h | 45 - flac/src/libFLAC/include/private/lpc.h | 246 - flac/src/libFLAC/include/private/macros.h | 72 - flac/src/libFLAC/include/private/md5.h | 50 - flac/src/libFLAC/include/private/memory.h | 58 - flac/src/libFLAC/include/private/metadata.h | 46 - .../include/private/ogg_decoder_aspect.h | 80 - .../include/private/ogg_encoder_aspect.h | 63 - flac/src/libFLAC/include/private/ogg_helper.h | 44 - .../src/libFLAC/include/private/ogg_mapping.h | 64 - .../libFLAC/include/private/stream_encoder.h | 67 - .../include/private/stream_encoder_framing.h | 46 - flac/src/libFLAC/include/private/window.h | 74 - .../src/libFLAC/include/protected/Makefile.am | 35 - .../src/libFLAC/include/protected/Makefile.in | 566 - flac/src/libFLAC/include/protected/all.h | 39 - .../include/protected/stream_decoder.h | 60 - .../include/protected/stream_encoder.h | 118 - flac/src/libFLAC/libFLAC.m4 | 118 - flac/src/libFLAC/libFLAC_dynamic.vcproj | 517 - flac/src/libFLAC/libFLAC_dynamic.vcxproj | 325 - .../libFLAC/libFLAC_dynamic.vcxproj.filters | 214 - flac/src/libFLAC/libFLAC_static.vcproj | 490 - flac/src/libFLAC/libFLAC_static.vcxproj | 304 - .../libFLAC/libFLAC_static.vcxproj.filters | 214 - flac/src/libFLAC/lpc.c | 1357 - flac/src/libFLAC/lpc_intrin_avx2.c | 1120 - flac/src/libFLAC/lpc_intrin_sse.c | 451 - flac/src/libFLAC/lpc_intrin_sse2.c | 1088 - flac/src/libFLAC/lpc_intrin_sse41.c | 1312 - flac/src/libFLAC/md5.c | 518 - flac/src/libFLAC/memory.c | 218 - flac/src/libFLAC/metadata_iterators.c | 3402 --- flac/src/libFLAC/metadata_object.c | 1824 -- flac/src/libFLAC/ogg_decoder_aspect.c | 251 - flac/src/libFLAC/ogg_encoder_aspect.c | 228 - flac/src/libFLAC/ogg_helper.c | 210 - flac/src/libFLAC/ogg_mapping.c | 48 - flac/src/libFLAC/ppc/Makefile.am | 32 - flac/src/libFLAC/ppc/Makefile.in | 658 - flac/src/libFLAC/ppc/as/Makefile.am | 53 - flac/src/libFLAC/ppc/as/Makefile.in | 589 - flac/src/libFLAC/ppc/as/lpc_asm.s | 430 - flac/src/libFLAC/ppc/gas/Makefile.am | 53 - flac/src/libFLAC/ppc/gas/Makefile.in | 589 - flac/src/libFLAC/ppc/gas/lpc_asm.s | 432 - flac/src/libFLAC/stream_decoder.c | 3389 --- flac/src/libFLAC/stream_encoder.c | 4525 --- flac/src/libFLAC/stream_encoder_framing.c | 549 - flac/src/libFLAC/stream_encoder_intrin_avx2.c | 142 - flac/src/libFLAC/stream_encoder_intrin_sse2.c | 159 - .../src/libFLAC/stream_encoder_intrin_ssse3.c | 147 - flac/src/libFLAC/window.c | 282 - flac/src/metaflac/Makefile.am | 55 - flac/src/metaflac/Makefile.in | 732 - flac/src/metaflac/Makefile.lite | 54 - flac/src/metaflac/main.c | 70 - flac/src/metaflac/metaflac.vcproj | 251 - flac/src/metaflac/metaflac.vcxproj | 214 - flac/src/metaflac/metaflac.vcxproj.filters | 59 - flac/src/metaflac/operations.c | 664 - flac/src/metaflac/operations.h | 27 - flac/src/metaflac/operations_shorthand.h | 26 - .../metaflac/operations_shorthand_cuesheet.c | 214 - .../metaflac/operations_shorthand_picture.c | 176 - .../metaflac/operations_shorthand_seektable.c | 218 - .../operations_shorthand_streaminfo.c | 127 - .../operations_shorthand_vorbiscomment.c | 374 - flac/src/metaflac/options.c | 1089 - flac/src/metaflac/options.h | 216 - flac/src/metaflac/usage.c | 328 - flac/src/metaflac/usage.h | 26 - flac/src/metaflac/utils.c | 275 - flac/src/metaflac/utils.h | 42 - flac/src/monkeys_audio_utilities/Makefile.am | 19 - flac/src/monkeys_audio_utilities/Makefile.in | 645 - .../flac_mac/Makefile.am | 21 - .../flac_mac/Makefile.in | 449 - .../flac_mac/flac_mac.vcproj | 196 - .../monkeys_audio_utilities/flac_mac/main.c | 231 - .../flac_ren/Makefile.am | 21 - .../flac_ren/Makefile.in | 449 - .../monkeys_audio_utilities/flac_ren/main.c | 40 - flac/src/plugin_common/Makefile.am | 48 - flac/src/plugin_common/Makefile.in | 665 - flac/src/plugin_common/Makefile.lite | 46 - flac/src/plugin_common/README | 2 - flac/src/plugin_common/all.h | 27 - flac/src/plugin_common/charset.c | 158 - flac/src/plugin_common/charset.h | 40 - flac/src/plugin_common/defs.h | 25 - flac/src/plugin_common/dither.c | 263 - flac/src/plugin_common/dither.h | 30 - .../plugin_common/plugin_common_static.vcproj | 208 - .../plugin_common_static.vcxproj | 162 - .../plugin_common_static.vcxproj.filters | 47 - flac/src/plugin_common/replaygain.c | 65 - flac/src/plugin_common/replaygain.h | 33 - flac/src/plugin_common/tags.c | 359 - flac/src/plugin_common/tags.h | 75 - flac/src/plugin_xmms/Makefile.am | 66 - flac/src/plugin_xmms/Makefile.in | 749 - flac/src/plugin_xmms/Makefile.lite | 49 - flac/src/plugin_xmms/charset.c | 200 - flac/src/plugin_xmms/charset.h | 56 - flac/src/plugin_xmms/configure.c | 825 - flac/src/plugin_xmms/configure.h | 77 - flac/src/plugin_xmms/fileinfo.c | 495 - flac/src/plugin_xmms/http.c | 901 - flac/src/plugin_xmms/http.h | 26 - flac/src/plugin_xmms/locale_hack.h | 56 - flac/src/plugin_xmms/plugin.c | 688 - flac/src/plugin_xmms/plugin.h | 33 - flac/src/plugin_xmms/tag.c | 157 - flac/src/plugin_xmms/tag.h | 24 - flac/src/share/Makefile.am | 100 - flac/src/share/Makefile.in | 874 - flac/src/share/Makefile.lite | 58 - flac/src/share/README | 5 - flac/src/share/getopt/Makefile.lite | 16 - flac/src/share/getopt/getopt.c | 1063 - flac/src/share/getopt/getopt1.c | 204 - flac/src/share/getopt/getopt_static.vcproj | 184 - flac/src/share/getopt/getopt_static.vcxproj | 141 - .../getopt/getopt_static.vcxproj.filters | 29 - flac/src/share/grabbag/Makefile.lite | 32 - flac/src/share/grabbag/alloc.c | 48 - flac/src/share/grabbag/cuesheet.c | 656 - flac/src/share/grabbag/file.c | 193 - flac/src/share/grabbag/grabbag_static.vcproj | 228 - flac/src/share/grabbag/grabbag_static.vcxproj | 165 - .../grabbag/grabbag_static.vcxproj.filters | 62 - flac/src/share/grabbag/picture.c | 416 - flac/src/share/grabbag/replaygain.c | 668 - flac/src/share/grabbag/seektable.c | 104 - flac/src/share/grabbag/snprintf.c | 98 - .../share/replaygain_analysis/Makefile.lite | 15 - .../replaygain_analysis/replaygain_analysis.c | 577 - .../replaygain_analysis_static.vcproj | 180 - .../replaygain_analysis_static.vcxproj | 140 - ...replaygain_analysis_static.vcxproj.filters | 26 - .../share/replaygain_synthesis/Makefile.lite | 15 - .../include/private/fast_float_math_hack.h | 39 - .../replaygain_synthesis.c | 423 - .../replaygain_synthesis_static.vcproj | 180 - .../replaygain_synthesis_static.vcxproj | 140 - ...eplaygain_synthesis_static.vcxproj.filters | 26 - flac/src/share/utf8/Makefile.lite | 25 - flac/src/share/utf8/charmaps.h | 57 - flac/src/share/utf8/charset.c | 532 - flac/src/share/utf8/charset.h | 72 - flac/src/share/utf8/charset_test.c | 263 - flac/src/share/utf8/charsetmap.h | 79 - flac/src/share/utf8/iconvert.c | 254 - flac/src/share/utf8/iconvert.h | 49 - flac/src/share/utf8/makemap.c | 81 - flac/src/share/utf8/utf8.c | 320 - flac/src/share/utf8/utf8_static.vcproj | 200 - flac/src/share/utf8/utf8_static.vcxproj | 145 - .../share/utf8/utf8_static.vcxproj.filters | 41 - flac/src/share/win_utf8_io/win_utf8_io.c | 373 - flac/src/share/win_utf8_io/win_utf8_io.vcproj | 175 - .../win_utf8_io/win_utf8_io_static.vcproj | 174 - .../win_utf8_io/win_utf8_io_static.vcxproj | 140 - .../win_utf8_io_static.vcxproj.filters | 22 - flac/src/test_grabbag/Makefile.am | 22 - flac/src/test_grabbag/Makefile.in | 664 - flac/src/test_grabbag/Makefile.lite | 41 - flac/src/test_grabbag/cuesheet/Makefile.am | 34 - flac/src/test_grabbag/cuesheet/Makefile.in | 650 - flac/src/test_grabbag/cuesheet/Makefile.lite | 45 - flac/src/test_grabbag/cuesheet/main.c | 143 - .../cuesheet/test_cuesheet.vcproj | 197 - .../cuesheet/test_cuesheet.vcxproj | 179 - .../cuesheet/test_cuesheet.vcxproj.filters | 18 - flac/src/test_grabbag/picture/Makefile.am | 34 - flac/src/test_grabbag/picture/Makefile.in | 648 - flac/src/test_grabbag/picture/Makefile.lite | 45 - flac/src/test_grabbag/picture/main.c | 217 - .../test_grabbag/picture/test_picture.vcproj | 197 - .../test_grabbag/picture/test_picture.vcxproj | 179 - .../picture/test_picture.vcxproj.filters | 18 - flac/src/test_libFLAC++/Makefile.am | 47 - flac/src/test_libFLAC++/Makefile.in | 689 - flac/src/test_libFLAC++/Makefile.lite | 52 - flac/src/test_libFLAC++/decoders.cpp | 1179 - flac/src/test_libFLAC++/decoders.h | 25 - flac/src/test_libFLAC++/encoders.cpp | 563 - flac/src/test_libFLAC++/encoders.h | 25 - flac/src/test_libFLAC++/main.cpp | 42 - flac/src/test_libFLAC++/metadata.cpp | 41 - flac/src/test_libFLAC++/metadata.h | 25 - flac/src/test_libFLAC++/metadata_manip.cpp | 2213 -- flac/src/test_libFLAC++/metadata_object.cpp | 2099 -- flac/src/test_libFLAC++/test_libFLAC++.vcproj | 229 - .../src/test_libFLAC++/test_libFLAC++.vcxproj | 197 - .../test_libFLAC++.vcxproj.filters | 44 - flac/src/test_libFLAC/Makefile.am | 60 - flac/src/test_libFLAC/Makefile.in | 683 - flac/src/test_libFLAC/Makefile.lite | 54 - flac/src/test_libFLAC/bitwriter.c | 579 - flac/src/test_libFLAC/bitwriter.h | 27 - flac/src/test_libFLAC/decoders.c | 1058 - flac/src/test_libFLAC/decoders.h | 27 - flac/src/test_libFLAC/encoders.c | 519 - flac/src/test_libFLAC/encoders.h | 27 - flac/src/test_libFLAC/endswap.c | 111 - flac/src/test_libFLAC/endswap.h | 26 - flac/src/test_libFLAC/format.c | 257 - flac/src/test_libFLAC/format.h | 27 - flac/src/test_libFLAC/main.c | 56 - flac/src/test_libFLAC/md5.c | 222 - flac/src/test_libFLAC/md5.h | 26 - flac/src/test_libFLAC/metadata.c | 41 - flac/src/test_libFLAC/metadata.h | 29 - flac/src/test_libFLAC/metadata_manip.c | 2133 -- flac/src/test_libFLAC/metadata_object.c | 2285 -- flac/src/test_libFLAC/test_libFLAC.vcproj | 263 - flac/src/test_libFLAC/test_libFLAC.vcxproj | 209 - .../test_libFLAC/test_libFLAC.vcxproj.filters | 68 - flac/src/test_libs_common/Makefile.am | 32 - flac/src/test_libs_common/Makefile.in | 645 - flac/src/test_libs_common/Makefile.lite | 46 - flac/src/test_libs_common/README | 2 - flac/src/test_libs_common/file_utils_flac.c | 155 - flac/src/test_libs_common/metadata_utils.c | 635 - .../test_libs_common_static.vcproj | 176 - .../test_libs_common_static.vcxproj | 148 - .../test_libs_common_static.vcxproj.filters | 21 - flac/src/test_seeking/Makefile.am | 36 - flac/src/test_seeking/Makefile.in | 646 - flac/src/test_seeking/Makefile.lite | 45 - flac/src/test_seeking/main.c | 470 - flac/src/test_seeking/test_seeking.vcproj | 199 - flac/src/test_seeking/test_seeking.vcxproj | 183 - .../test_seeking/test_seeking.vcxproj.filters | 18 - flac/src/test_streams/Makefile.am | 36 - flac/src/test_streams/Makefile.in | 645 - flac/src/test_streams/Makefile.lite | 45 - flac/src/test_streams/main.c | 1162 - flac/src/test_streams/test_streams.vcproj | 197 - flac/src/test_streams/test_streams.vcxproj | 179 - .../test_streams/test_streams.vcxproj.filters | 18 - flac/src/utils/Makefile.am | 19 - flac/src/utils/Makefile.in | 661 - flac/src/utils/flacdiff/Makefile.am | 24 - flac/src/utils/flacdiff/Makefile.in | 487 - flac/src/utils/flacdiff/Makefile.lite | 47 - flac/src/utils/flacdiff/flacdiff.vcproj | 197 - flac/src/utils/flacdiff/flacdiff.vcxproj | 179 - .../utils/flacdiff/flacdiff.vcxproj.filters | 18 - flac/src/utils/flacdiff/main.cpp | 230 - flac/src/utils/flactimer/Makefile.am | 23 - flac/src/utils/flactimer/Makefile.in | 486 - flac/src/utils/flactimer/flactimer.vcproj | 195 - flac/src/utils/flactimer/flactimer.vcxproj | 165 - .../utils/flactimer/flactimer.vcxproj.filters | 18 - flac/src/utils/flactimer/main.cpp | 175 - flac/strip_non_asm_libtool_args.sh | 19 - flac/test/Makefile.am | 78 - flac/test/Makefile.in | 720 - flac/test/Makefile.lite | 56 - flac/test/common.sh.in | 71 - flac/test/cuesheet.ok | 93 - flac/test/cuesheets/Makefile.am | 68 - flac/test/cuesheets/Makefile.in | 531 - .../cuesheets/bad.000.CATALOG_multiple.cue | 5 - .../bad.001.CATALOG_missing_number.cue | 4 - .../bad.002.CATALOG_number_too_long.cue | 4 - .../bad.003.CATALOG_not_13_digits.cue | 4 - .../test/cuesheets/bad.030.FLAGS_multiple.cue | 5 - .../cuesheets/bad.031.FLAGS_wrong_place_1.cue | 4 - .../cuesheets/bad.032.FLAGS_wrong_place_2.cue | 4 - .../cuesheets/bad.060.INDEX_wrong_place.cue | 5 - .../bad.061.INDEX_missing_number.cue | 4 - .../bad.062.INDEX_invalid_number_1.cue | 4 - .../bad.063.first_INDEX_not_0_or_1.cue | 4 - .../bad.064.INDEX_num_non_sequential.cue | 5 - .../bad.065.INDEX_num_out_of_range.cue | 104 - .../bad.066.INDEX_missing_offset.cue | 4 - .../bad.067.INDEX_illegal_offset.cue | 4 - .../bad.068.INDEX_cdda_illegal_offset.cue | 4 - .../cuesheets/bad.069.nonzero_first_INDEX.cue | 4 - .../bad.070.INDEX_offset_not_ascending_1.cue | 5 - .../bad.071.INDEX_offset_not_ascending_2.cue | 6 - flac/test/cuesheets/bad.110.ISRC_multiple.cue | 5 - .../cuesheets/bad.111.ISRC_wrong_place_1.cue | 4 - .../cuesheets/bad.112.ISRC_wrong_place_2.cue | 4 - .../cuesheets/bad.113.ISRC_missing_number.cue | 4 - .../cuesheets/bad.114.ISRC_invalid_number.cue | 4 - .../bad.130.TRACK_missing_INDEX_01_1.cue | 2 - .../bad.131.TRACK_missing_INDEX_01_2.cue | 3 - .../bad.132.TRACK_missing_INDEX_01_3.cue | 4 - .../bad.133.TRACK_missing_INDEX_01_4.cue | 5 - .../bad.134.TRACK_missing_number.cue | 2 - .../bad.135.TRACK_invalid_number_1.cue | 2 - .../bad.136.TRACK_invalid_number_2.cue | 2 - .../bad.137.TRACK_cdda_out_of_range.cue | 2 - .../bad.138.TRACK_num_non_sequential.cue | 6 - .../cuesheets/bad.139.TRACK_missing_type.cue | 2 - flac/test/cuesheets/bad.140.no_TRACKs.cue | 1 - .../bad.200.FLAC_leadin_missing_offset.cue | 1 - .../bad.201.FLAC_leadin_illegal_offset.cue | 1 - ...ad.202.FLAC_leadin_cdda_illegal_offset.cue | 1 - .../bad.230.FLAC_leadout_multiple.cue | 3 - .../bad.231.FLAC_leadout_missing_track.cue | 1 - .../bad.232.FLAC_leadout_illegal_track.cue | 1 - .../bad.233.FLAC_leadout_missing_offset.cue | 1 - .../bad.234.FLAC_leadout_illegal_offset.cue | 1 - ....235.FLAC_leadout_offset_not_211680000.cue | 1 - flac/test/cuesheets/good.000.cue | 4 - flac/test/cuesheets/good.001.cue | 184 - flac/test/cuesheets/good.002.dos_format.cue | 4 - .../good.003.missing_final_newline.cue | 4 - ...d.004.dos_format.missing_final_newline.cue | 4 - .../Makefile.am | 46 - .../Makefile.in | 509 - .../case00a-expect.meta | 84 - .../case01a-expect.meta | 79 - .../case01b-expect.meta | 75 - .../case01c-expect.meta | 79 - .../case01d-expect.meta | 79 - .../case01e-expect.meta | 79 - .../case02a-expect.meta | 73 - .../case02b-expect.meta | 74 - .../case02c-expect.meta | 79 - .../case03a-expect.meta | 84 - .../case03b-expect.meta | 84 - .../case03c-expect.meta | 41 - .../case04a-expect.meta | 26 - .../case04b-expect.meta | 36 - .../case04c-expect.meta | 32 - .../case04d-expect.meta | 60 - .../case04e-expect.meta | 70 - .../input-SCPAP.flac | Bin 4021 -> 0 bytes .../input-SCVA.flac | Bin 1015 -> 0 bytes .../input-SCVAUP.flac | Bin 4224 -> 0 bytes .../input-SCVPAP.flac | Bin 4228 -> 0 bytes .../input-SVAUP.flac | Bin 3680 -> 0 bytes .../input-VA.flac | Bin 287 -> 0 bytes .../input0.cue | 7 - flac/test/metaflac-test-files/Makefile.am | 85 - flac/test/metaflac-test-files/Makefile.in | 548 - .../metaflac-test-files/case00-expect.meta | 24 - .../metaflac-test-files/case01-expect.meta | 9 - .../metaflac-test-files/case02-expect.meta | 28 - .../metaflac-test-files/case03-expect.meta | 25 - .../metaflac-test-files/case04-expect.meta | 26 - .../metaflac-test-files/case05-expect.meta | 27 - .../metaflac-test-files/case06-expect.meta | 28 - .../metaflac-test-files/case07-expect.meta | 4 - .../metaflac-test-files/case08-expect.meta | 27 - .../metaflac-test-files/case09-expect.meta | 25 - .../metaflac-test-files/case10-expect.meta | 6 - .../metaflac-test-files/case11-expect.meta | 9 - .../metaflac-test-files/case12-expect.meta | 12 - .../metaflac-test-files/case13-expect.meta | 10 - .../metaflac-test-files/case14-expect.meta | 13 - .../metaflac-test-files/case15-expect.meta | 16 - .../metaflac-test-files/case16-expect.meta | 33 - .../metaflac-test-files/case17-expect.meta | 25 - .../metaflac-test-files/case18-expect.meta | 29 - .../metaflac-test-files/case19-expect.meta | 25 - .../metaflac-test-files/case20-expect.meta | 29 - .../metaflac-test-files/case21-expect.meta | 24 - .../metaflac-test-files/case22-expect.meta | 18 - .../metaflac-test-files/case23-expect.meta | 18 - .../metaflac-test-files/case24-expect.meta | 18 - .../metaflac-test-files/case25-expect.meta | 14 - .../metaflac-test-files/case26-expect.meta | 22 - .../metaflac-test-files/case27-expect.meta | 13 - .../metaflac-test-files/case28-expect.meta | 13 - .../metaflac-test-files/case29-expect.meta | 9 - .../metaflac-test-files/case30-expect.meta | 9 - .../metaflac-test-files/case31-expect.meta | 15 - .../metaflac-test-files/case32-expect.meta | 15 - .../metaflac-test-files/case33-expect.meta | 19 - .../metaflac-test-files/case34-expect.meta | 19 - .../metaflac-test-files/case35-expect.meta | 19 - .../metaflac-test-files/case36-expect.meta | 15 - .../metaflac-test-files/case37-expect.meta | 19 - .../metaflac-test-files/case38-expect.meta | 19 - .../metaflac-test-files/case39-expect.meta | 20 - .../metaflac-test-files/case40-expect.meta | 22 - .../metaflac-test-files/case41-expect.meta | 27 - .../metaflac-test-files/case42-expect.meta | 22 - .../metaflac-test-files/case43-expect.meta | 49 - .../metaflac-test-files/case44-expect.meta | 28 - .../metaflac-test-files/case45-expect.meta | 49 - .../metaflac-test-files/case46-expect.meta | 62 - .../metaflac-test-files/case47-expect.meta | 75 - .../metaflac-test-files/case48-expect.meta | 88 - .../metaflac-test-files/case49-expect.meta | 101 - .../metaflac-test-files/case50-expect.meta | 114 - .../metaflac-test-files/case51-expect.meta | 127 - .../metaflac-test-files/case52-expect.meta | 140 - .../metaflac-test-files/case53-expect.meta | 153 - .../metaflac-test-files/case54-expect.meta | 166 - .../metaflac-test-files/case55-expect.meta | 179 - .../metaflac-test-files/case56-expect.meta | 192 - .../metaflac-test-files/case57-expect.meta | 205 - .../metaflac-test-files/case58-expect.meta | 218 - .../metaflac-test-files/case59-expect.meta | 231 - .../metaflac-test-files/case60-expect.meta | 49 - .../metaflac-test-files/case61-expect.meta | 62 - .../metaflac-test-files/case62-expect.meta | 75 - flac/test/metaflac.flac.in | Bin 667 -> 0 bytes flac/test/metaflac.flac.ok | Bin 617 -> 0 bytes flac/test/picture.ok | 42 - flac/test/pictures/0.gif | Bin 95 -> 0 bytes flac/test/pictures/0.jpg | Bin 330 -> 0 bytes flac/test/pictures/0.png | Bin 446 -> 0 bytes flac/test/pictures/1.gif | Bin 871 -> 0 bytes flac/test/pictures/1.png | Bin 462 -> 0 bytes flac/test/pictures/2.gif | Bin 532 -> 0 bytes flac/test/pictures/2.png | Bin 292 -> 0 bytes flac/test/pictures/3.png | Bin 308 -> 0 bytes flac/test/pictures/4.jpg | Bin 567 -> 0 bytes flac/test/pictures/4.png | Bin 1800 -> 0 bytes flac/test/pictures/5.png | Bin 1816 -> 0 bytes flac/test/pictures/6.png | Bin 543 -> 0 bytes flac/test/pictures/7.png | Bin 559 -> 0 bytes flac/test/pictures/8.png | Bin 244 -> 0 bytes flac/test/pictures/Makefile.am | 33 - flac/test/pictures/Makefile.in | 496 - flac/test/test_bins.sh | 97 - flac/test/test_compression.sh | 46 - flac/test/test_flac.sh | 1219 - flac/test/test_grabbag.sh | 133 - flac/test/test_libFLAC++.sh | 35 - flac/test/test_libFLAC.sh | 35 - flac/test/test_metaflac.sh | 367 - flac/test/test_replaygain.sh | 188 - flac/test/test_seeking.sh | 141 - flac/test/test_streams.sh | 257 - flac/test/test_wrapper.sh | 12 - flac/test/write_iff.pl | 211 - taglib-sharp/src/taglib-sharp.csproj | 6 +- ttalib-1.1/TTALib.vcxproj | 4 +- 905 files changed, 13647 insertions(+), 216371 deletions(-) delete mode 100644 .hgignore delete mode 100644 Bwg.Hardware/Properties/AssemblyInfo.cs delete mode 100644 Bwg.Hardware/app.config delete mode 100644 Bwg.Logging/Properties/AssemblyInfo.cs delete mode 100644 Bwg.Logging/app.config delete mode 100644 Bwg.Scsi/FileReader.cs delete mode 100644 Bwg.Scsi/Properties/AssemblyInfo.cs delete mode 100644 Bwg.Scsi/app.config delete mode 100644 CUEPlayer/DataSet1.Designer.cs create mode 100644 CUERipper.WPF/App.xaml create mode 100644 CUERipper.WPF/App.xaml.cs create mode 100644 CUERipper.WPF/CUERipper.WPF.csproj rename {CUETools.Codecs.CoreAudio => CUERipper.WPF}/Properties/AssemblyInfo.cs (53%) create mode 100644 CUERipper.WPF/Properties/Resources.Designer.cs create mode 100644 CUERipper.WPF/Properties/Resources.resx create mode 100644 CUERipper.WPF/Properties/Settings.Designer.cs create mode 100644 CUERipper.WPF/Properties/Settings.settings create mode 100644 CUERipper.WPF/Window1.xaml create mode 100644 CUERipper.WPF/Window1.xaml.cs create mode 100644 CUERipper.WPF/app.config create mode 100644 CUERipper.WPF/depprop.txt create mode 100644 CUERipper.WPF/freedb16.png create mode 100644 CUERipper.WPF/musicbrainz.ico delete mode 100644 CUETools.ALACEnc/Properties/AssemblyInfo.cs delete mode 100644 CUETools.ARCUE/Properties/AssemblyInfo.cs delete mode 100644 CUETools.AccurateRip/Properties/AssemblyInfo.cs delete mode 100644 CUETools.CDImage/Properties/AssemblyInfo.cs create mode 100644 CUETools.CLParity/CLParity.cs create mode 100644 CUETools.CLParity/CUETools.CLParity.csproj rename {CUEControls => CUETools.CLParity}/Properties/AssemblyInfo.cs (82%) create mode 100644 CUETools.CLParity/Properties/Resources.Designer.cs create mode 100644 CUETools.CLParity/Properties/Resources.resx create mode 100644 CUETools.CLParity/Properties/Resources.ru-RU.resx create mode 100644 CUETools.CLParity/fastdecode/0901.1886v1.pdf create mode 100644 CUETools.CLParity/fastdecode/0901.1886v1.txt create mode 100644 CUETools.CLParity/fastdecode/VERSION create mode 100644 CUETools.CLParity/fastdecode/fastdecode.sln rename flac/src/monkeys_audio_utilities/flac_ren/flac_ren.vcproj => CUETools.CLParity/fastdecode/fastdecode.vcproj (77%) create mode 100644 CUETools.CLParity/fastdecode/fastdecode.vcproj.fandrahomevs.chudov.user create mode 100644 CUETools.CLParity/fastdecode/fastdecode.vcproj.user create mode 100644 CUETools.CLParity/fastdecode/inttypes.h create mode 100644 CUETools.CLParity/fastdecode/main.c create mode 100644 CUETools.CLParity/fastdecode/new/README create mode 100644 CUETools.CLParity/fastdecode/new/VERSION create mode 100644 CUETools.CLParity/fastdecode/new/fermat.cc create mode 100644 CUETools.CLParity/fastdecode/new/main.c create mode 100644 CUETools.CLParity/fastdecode/new/reed_solomon.c create mode 100644 CUETools.CLParity/fastdecode/new/reed_solomon.h create mode 100644 CUETools.CLParity/fastdecode/reed_solomon.c create mode 100644 CUETools.CLParity/fastdecode/reed_solomon.h create mode 100644 CUETools.CLParity/fastdecode/speed.c create mode 100644 CUETools.CLParity/fastdecode/stdint.h create mode 100644 CUETools.CLParity/fastdecode/test_rs.c create mode 100644 CUETools.CLParity/matlab/Errors_And_Erasures_Test.m create mode 100644 CUETools.CLParity/matlab/RS_ENC4.m create mode 100644 CUETools.CLParity/matlab/RS_E_E_DEC.m create mode 100644 CUETools.CLParity/matlab/gfdiff.m create mode 100644 CUETools.CLParity/matlab/gfpow.m create mode 100644 CUETools.CLParity/matlab/gfsubstitute.m create mode 100644 CUETools.CLParity/matlab/massey_berlekamp_M3.m create mode 100644 CUETools.CLParity/parity.cl delete mode 100644 CUETools.CTDB.Converter/Properties/AssemblyInfo.cs rename {CUETools.CTDB => CUETools.CTDB.Types}/CTDBResponse.cs (95%) rename {CUETools.CTDB => CUETools.CTDB.Types}/CTDBResponseEntry.cs (96%) rename {CUETools.CTDB => CUETools.CTDB.Types}/CTDBResponseMeta.cs (97%) rename {CUETools.CTDB => CUETools.CTDB.Types}/CTDBResponseMetaImage.cs (96%) rename {CUETools.CTDB => CUETools.CTDB.Types}/CTDBResponseMetaLabel.cs (95%) rename {CUETools.CTDB => CUETools.CTDB.Types}/CTDBResponseMetaRelease.cs (95%) rename {CUETools.CTDB => CUETools.CTDB.Types}/CTDBResponseMetaTrack.cs (95%) create mode 100644 CUETools.CTDB.Types/CUETools.CTDB.Types.csproj create mode 100644 CUETools.CTDB.Types/CUETools.CTDB.Types.csproj.bak delete mode 100644 CUETools.CTDB/CTDBSubmitResponse.cs create mode 100644 CUETools.CTDB/CUETools.CTDB.csproj.bak create mode 100644 CUETools.CTDB/GeneratedAssembly.cs delete mode 100644 CUETools.CTDB/UploadHelper/Properties/AssemblyInfo.cs delete mode 100644 CUETools.CTDB/UploadHelper/UploadHelper.csproj create mode 100644 CUETools.ChaptersToCue/CUETools.ChaptersToCue.csproj create mode 100644 CUETools.ChaptersToCue/Program.cs rename {CUETools.Flake => CUETools.ChaptersToCue}/Properties/AssemblyInfo.cs (75%) delete mode 100644 CUETools.Codecs.ALAC/Properties/AssemblyInfo.cs delete mode 100644 CUETools.Codecs.APE/CUETools.Codecs.APE.vcproj delete mode 100644 CUETools.Codecs.BDLPCM/Properties/AssemblyInfo.cs delete mode 100644 CUETools.Codecs.CoreAudio/CoreAudioApi/WasapiCapture.cs create mode 100644 CUETools.Codecs.DirectSound/CUETools.Codecs.DirectSound.csproj create mode 100644 CUETools.Codecs.DirectSound/DirectSoundOut.cs rename {CUETools.CTDB => CUETools.Codecs.DirectSound}/Properties/AssemblyInfo.cs (87%) delete mode 100644 CUETools.Codecs.FLAC/AssemblyInfo.cpp delete mode 100644 CUETools.Codecs.FLAC/CUETools.Codecs.FLAC.cpp delete mode 100644 CUETools.Codecs.FLAC/CUETools.Codecs.FLAC.vcproj delete mode 100644 CUETools.Codecs.FLAC/CUETools.Codecs.FLAC.vcxproj delete mode 100644 CUETools.Codecs.FLAC/app.ico delete mode 100644 CUETools.Codecs.FLAC/app.rc delete mode 100644 CUETools.Codecs.FLAC/cuesheet.c delete mode 100644 CUETools.Codecs.FLAC/resource.h delete mode 100644 CUETools.Codecs.FLAKE/Properties/AssemblyInfo.cs delete mode 100644 CUETools.Codecs.HDCD/Properties/AssemblyInfo.cs delete mode 100644 CUETools.Codecs.Icecast/Properties/AssemblyInfo.cs delete mode 100644 CUETools.Codecs.LAME/Properties/AssemblyInfo.cs delete mode 100644 CUETools.Codecs.LossyWAV/Properties/AssemblyInfo.cs delete mode 100644 CUETools.Codecs.TTA/CUETools.Codecs.TTA.vcproj delete mode 100644 CUETools.Codecs.TTA/ReadMe.txt delete mode 100644 CUETools.Codecs.WMA/Properties/AssemblyInfo.cs delete mode 100644 CUETools.Codecs.WavPack/CUETools.Codecs.WavPack.vcproj delete mode 100644 CUETools.Codecs/Properties/AssemblyInfo.cs delete mode 100644 CUETools.Compression.Rar/Properties/AssemblyInfo.cs delete mode 100644 CUETools.Compression.Zip/ICSharpCode.SharpZipLib.dll delete mode 100644 CUETools.Compression.Zip/Properties/AssemblyInfo.cs delete mode 100644 CUETools.Compression/Properties/AssemblyInfo.cs delete mode 100644 CUETools.Converter/Properties/AssemblyInfo.cs delete mode 100644 CUETools.DSP.Mixer/Properties/AssemblyInfo.cs delete mode 100644 CUETools.DSP.Resampler/Properties/AssemblyInfo.cs delete mode 100644 CUETools.LossyWAV/Properties/AssemblyInfo.cs delete mode 100644 CUETools.Parity/Properties/AssemblyInfo.cs delete mode 100644 CUETools.Processor/Properties/AssemblyInfo.cs create mode 100644 CUETools.Ripper.Console/App.config delete mode 100644 CUETools.Ripper.Console/Properties/AssemblyInfo.cs delete mode 100644 CUETools.Ripper.SCSI/Galois.cs delete mode 100644 CUETools.Ripper.SCSI/Properties/AssemblyInfo.cs delete mode 100644 CUETools.Ripper.SCSI/RsDecode.cs delete mode 100644 CUETools.Ripper.SCSI/RsEncode.cs delete mode 100644 CUETools.Ripper/Properties/AssemblyInfo.cs delete mode 100644 CUETools.eac3to/Properties/AssemblyInfo.cs rename CUETools/CUETools.TestCodecs/{ => Data}/alac.m4a (100%) rename CUETools/CUETools.TestCodecs/{ => Data}/flacwriter1.flac (100%) rename CUETools/CUETools.TestCodecs/{ => Data}/flake.flac (100%) rename CUETools/CUETools.TestCodecs/{ => Data}/hires1.flac (100%) rename CUETools/CUETools.TestCodecs/{ => Data}/hires1.wav (100%) rename CUETools/CUETools.TestCodecs/{ => Data}/pipe.wav (100%) rename CUETools/CUETools.TestCodecs/{ => Data}/test.flac (100%) rename CUETools/CUETools.TestCodecs/{ => Data}/test.wav (100%) create mode 100644 ThirdParty/Win32/libmp3lame.dll create mode 100644 ThirdParty/openclnet.patch create mode 100644 ThirdParty/x64/libmp3lame.dll delete mode 100644 WindowsMediaLib/AssemblyInfo.cs delete mode 100644 flac/AUTHORS delete mode 100644 flac/COPYING.FDL delete mode 100644 flac/COPYING.GPL delete mode 100644 flac/COPYING.LGPL delete mode 100644 flac/COPYING.Xiph delete mode 100644 flac/FLAC-vs2005.sln delete mode 100644 flac/FLAC.sln delete mode 100644 flac/Makefile.am delete mode 100644 flac/Makefile.in delete mode 100644 flac/Makefile.lite delete mode 100644 flac/README delete mode 100644 flac/aclocal.m4 delete mode 100644 flac/ar-lib delete mode 100644 flac/autogen.sh delete mode 100644 flac/build/Makefile.am delete mode 100644 flac/build/Makefile.in delete mode 100644 flac/build/compile.mk delete mode 100644 flac/build/config.mk delete mode 100644 flac/build/exe.mk delete mode 100644 flac/build/lib.mk delete mode 100644 flac/compile delete mode 100644 flac/config.guess delete mode 100644 flac/config.h.in delete mode 100644 flac/config.rpath delete mode 100644 flac/config.sub delete mode 100644 flac/configure delete mode 100644 flac/configure.ac delete mode 100644 flac/depcomp delete mode 100644 flac/examples/Makefile.am delete mode 100644 flac/examples/Makefile.in delete mode 100644 flac/examples/Makefile.lite delete mode 100644 flac/examples/README delete mode 100644 flac/examples/c/Makefile.am delete mode 100644 flac/examples/c/Makefile.in delete mode 100644 flac/examples/c/decode/Makefile.am delete mode 100644 flac/examples/c/decode/Makefile.in delete mode 100644 flac/examples/c/decode/file/Makefile.am delete mode 100644 flac/examples/c/decode/file/Makefile.in delete mode 100644 flac/examples/c/decode/file/Makefile.lite delete mode 100644 flac/examples/c/decode/file/example_c_decode_file.vcproj delete mode 100644 flac/examples/c/decode/file/example_c_decode_file.vcxproj delete mode 100644 flac/examples/c/decode/file/example_c_decode_file.vcxproj.filters delete mode 100644 flac/examples/c/decode/file/main.c delete mode 100644 flac/examples/c/encode/Makefile.am delete mode 100644 flac/examples/c/encode/Makefile.in delete mode 100644 flac/examples/c/encode/file/Makefile.am delete mode 100644 flac/examples/c/encode/file/Makefile.in delete mode 100644 flac/examples/c/encode/file/Makefile.lite delete mode 100644 flac/examples/c/encode/file/example_c_encode_file.vcproj delete mode 100644 flac/examples/c/encode/file/example_c_encode_file.vcxproj delete mode 100644 flac/examples/c/encode/file/example_c_encode_file.vcxproj.filters delete mode 100644 flac/examples/c/encode/file/main.c delete mode 100644 flac/examples/cpp/Makefile.am delete mode 100644 flac/examples/cpp/Makefile.in delete mode 100644 flac/examples/cpp/decode/Makefile.am delete mode 100644 flac/examples/cpp/decode/Makefile.in delete mode 100644 flac/examples/cpp/decode/file/Makefile.am delete mode 100644 flac/examples/cpp/decode/file/Makefile.in delete mode 100644 flac/examples/cpp/decode/file/Makefile.lite delete mode 100644 flac/examples/cpp/decode/file/example_cpp_decode_file.vcproj delete mode 100644 flac/examples/cpp/decode/file/example_cpp_decode_file.vcxproj delete mode 100644 flac/examples/cpp/decode/file/example_cpp_decode_file.vcxproj.filters delete mode 100644 flac/examples/cpp/decode/file/main.cpp delete mode 100644 flac/examples/cpp/encode/Makefile.am delete mode 100644 flac/examples/cpp/encode/Makefile.in delete mode 100644 flac/examples/cpp/encode/file/Makefile.am delete mode 100644 flac/examples/cpp/encode/file/Makefile.in delete mode 100644 flac/examples/cpp/encode/file/Makefile.lite delete mode 100644 flac/examples/cpp/encode/file/example_cpp_encode_file.vcproj delete mode 100644 flac/examples/cpp/encode/file/example_cpp_encode_file.vcxproj delete mode 100644 flac/examples/cpp/encode/file/example_cpp_encode_file.vcxproj.filters delete mode 100644 flac/examples/cpp/encode/file/main.cpp delete mode 100644 flac/include/FLAC++/Makefile.am delete mode 100644 flac/include/FLAC++/Makefile.in delete mode 100644 flac/include/FLAC++/all.h delete mode 100644 flac/include/FLAC++/decoder.h delete mode 100644 flac/include/FLAC++/encoder.h delete mode 100644 flac/include/FLAC++/export.h delete mode 100644 flac/include/FLAC++/metadata.h delete mode 100644 flac/include/FLAC/Makefile.am delete mode 100644 flac/include/FLAC/Makefile.in delete mode 100644 flac/include/FLAC/all.h delete mode 100644 flac/include/FLAC/assert.h delete mode 100644 flac/include/FLAC/callback.h delete mode 100644 flac/include/FLAC/export.h delete mode 100644 flac/include/FLAC/format.h delete mode 100644 flac/include/FLAC/metadata.h delete mode 100644 flac/include/FLAC/ordinals.h delete mode 100644 flac/include/FLAC/stream_decoder.h delete mode 100644 flac/include/FLAC/stream_encoder.h delete mode 100644 flac/include/Makefile.am delete mode 100644 flac/include/Makefile.in delete mode 100644 flac/include/share/Makefile.am delete mode 100644 flac/include/share/Makefile.in delete mode 100644 flac/include/share/alloc.h delete mode 100644 flac/include/share/compat.h delete mode 100644 flac/include/share/endswap.h delete mode 100644 flac/include/share/getopt.h delete mode 100644 flac/include/share/grabbag.h delete mode 100644 flac/include/share/grabbag/Makefile.am delete mode 100644 flac/include/share/grabbag/Makefile.in delete mode 100644 flac/include/share/grabbag/cuesheet.h delete mode 100644 flac/include/share/grabbag/file.h delete mode 100644 flac/include/share/grabbag/picture.h delete mode 100644 flac/include/share/grabbag/replaygain.h delete mode 100644 flac/include/share/grabbag/seektable.h delete mode 100644 flac/include/share/macros.h delete mode 100644 flac/include/share/private.h delete mode 100644 flac/include/share/replaygain_analysis.h delete mode 100644 flac/include/share/replaygain_synthesis.h delete mode 100644 flac/include/share/safe_str.h delete mode 100644 flac/include/share/utf8.h delete mode 100644 flac/include/share/win_utf8_io.h delete mode 100644 flac/include/test_libs_common/Makefile.am delete mode 100644 flac/include/test_libs_common/Makefile.in delete mode 100644 flac/include/test_libs_common/file_utils_flac.h delete mode 100644 flac/include/test_libs_common/metadata_utils.h delete mode 100644 flac/install-sh delete mode 100644 flac/ltmain.sh delete mode 100644 flac/m4/Makefile.am delete mode 100644 flac/m4/Makefile.in delete mode 100644 flac/m4/add_cflags.m4 delete mode 100644 flac/m4/add_cxxflags.m4 delete mode 100644 flac/m4/bswap.m4 delete mode 100644 flac/m4/clang.m4 delete mode 100644 flac/m4/codeset.m4 delete mode 100644 flac/m4/endian.m4 delete mode 100644 flac/m4/gcc_version.m4 delete mode 100644 flac/m4/iconv.m4 delete mode 100644 flac/m4/lib-ld.m4 delete mode 100644 flac/m4/lib-link.m4 delete mode 100644 flac/m4/lib-prefix.m4 delete mode 100644 flac/m4/libtool.m4 delete mode 100644 flac/m4/ltoptions.m4 delete mode 100644 flac/m4/ltsugar.m4 delete mode 100644 flac/m4/ltversion.m4 delete mode 100644 flac/m4/lt~obsolete.m4 delete mode 100644 flac/m4/ogg.m4 delete mode 100644 flac/m4/really_gcc.m4 delete mode 100644 flac/m4/stack_protect.m4 delete mode 100644 flac/m4/xmms.m4 delete mode 100644 flac/man/Makefile.am delete mode 100644 flac/man/Makefile.in delete mode 100644 flac/man/flac.1 delete mode 100644 flac/man/flac.sgml delete mode 100644 flac/man/metaflac.1 delete mode 100644 flac/man/metaflac.sgml delete mode 100644 flac/missing delete mode 100644 flac/objs/Makefile.am delete mode 100644 flac/objs/Makefile.in delete mode 100644 flac/objs/debug/Makefile.am delete mode 100644 flac/objs/debug/Makefile.in delete mode 100644 flac/objs/debug/lib/Makefile.am delete mode 100644 flac/objs/debug/lib/Makefile.in delete mode 100644 flac/objs/release/Makefile.am delete mode 100644 flac/objs/release/Makefile.in delete mode 100644 flac/objs/release/lib/Makefile.am delete mode 100644 flac/objs/release/lib/Makefile.in delete mode 100644 flac/src/Makefile.am delete mode 100644 flac/src/Makefile.in delete mode 100644 flac/src/Makefile.lite delete mode 100644 flac/src/flac/Makefile.am delete mode 100644 flac/src/flac/Makefile.in delete mode 100644 flac/src/flac/Makefile.lite delete mode 100644 flac/src/flac/Makefile.lite.iffscan delete mode 100644 flac/src/flac/analyze.c delete mode 100644 flac/src/flac/analyze.h delete mode 100644 flac/src/flac/decode.c delete mode 100644 flac/src/flac/decode.h delete mode 100644 flac/src/flac/encode.c delete mode 100644 flac/src/flac/encode.h delete mode 100644 flac/src/flac/flac.vcproj delete mode 100644 flac/src/flac/flac.vcxproj delete mode 100644 flac/src/flac/flac.vcxproj.filters delete mode 100644 flac/src/flac/foreign_metadata.c delete mode 100644 flac/src/flac/foreign_metadata.h delete mode 100644 flac/src/flac/iffscan.c delete mode 100644 flac/src/flac/iffscan.vcproj delete mode 100644 flac/src/flac/iffscan.vcxproj delete mode 100644 flac/src/flac/iffscan.vcxproj.filters delete mode 100644 flac/src/flac/local_string_utils.c delete mode 100644 flac/src/flac/local_string_utils.h delete mode 100644 flac/src/flac/main.c delete mode 100644 flac/src/flac/utils.c delete mode 100644 flac/src/flac/utils.h delete mode 100644 flac/src/flac/vorbiscomment.c delete mode 100644 flac/src/flac/vorbiscomment.h delete mode 100644 flac/src/libFLAC++/Makefile.am delete mode 100644 flac/src/libFLAC++/Makefile.in delete mode 100644 flac/src/libFLAC++/Makefile.lite delete mode 100644 flac/src/libFLAC++/flac++.pc.in delete mode 100644 flac/src/libFLAC++/libFLAC++.m4 delete mode 100644 flac/src/libFLAC++/libFLAC++_dynamic.vcproj delete mode 100644 flac/src/libFLAC++/libFLAC++_dynamic.vcxproj delete mode 100644 flac/src/libFLAC++/libFLAC++_dynamic.vcxproj.filters delete mode 100644 flac/src/libFLAC++/libFLAC++_static.vcproj delete mode 100644 flac/src/libFLAC++/libFLAC++_static.vcxproj delete mode 100644 flac/src/libFLAC++/libFLAC++_static.vcxproj.filters delete mode 100644 flac/src/libFLAC++/metadata.cpp delete mode 100644 flac/src/libFLAC++/stream_decoder.cpp delete mode 100644 flac/src/libFLAC++/stream_encoder.cpp delete mode 100644 flac/src/libFLAC/Makefile.am delete mode 100644 flac/src/libFLAC/Makefile.in delete mode 100644 flac/src/libFLAC/Makefile.lite delete mode 100644 flac/src/libFLAC/bitmath.c delete mode 100644 flac/src/libFLAC/bitreader.c delete mode 100644 flac/src/libFLAC/bitwriter.c delete mode 100644 flac/src/libFLAC/cpu.c delete mode 100644 flac/src/libFLAC/crc.c delete mode 100644 flac/src/libFLAC/fixed.c delete mode 100644 flac/src/libFLAC/fixed_intrin_sse2.c delete mode 100644 flac/src/libFLAC/fixed_intrin_ssse3.c delete mode 100644 flac/src/libFLAC/flac.pc.in delete mode 100644 flac/src/libFLAC/float.c delete mode 100644 flac/src/libFLAC/format.c delete mode 100644 flac/src/libFLAC/ia32/Makefile.am delete mode 100644 flac/src/libFLAC/ia32/Makefile.in delete mode 100644 flac/src/libFLAC/ia32/bitreader_asm.nasm delete mode 100644 flac/src/libFLAC/ia32/cpu_asm.nasm delete mode 100644 flac/src/libFLAC/ia32/fixed_asm.nasm delete mode 100644 flac/src/libFLAC/ia32/lpc_asm.nasm delete mode 100644 flac/src/libFLAC/ia32/nasm.h delete mode 100644 flac/src/libFLAC/ia32/stream_encoder_asm.nasm delete mode 100644 flac/src/libFLAC/include/Makefile.am delete mode 100644 flac/src/libFLAC/include/Makefile.in delete mode 100644 flac/src/libFLAC/include/private/Makefile.am delete mode 100644 flac/src/libFLAC/include/private/Makefile.in delete mode 100644 flac/src/libFLAC/include/private/all.h delete mode 100644 flac/src/libFLAC/include/private/bitmath.h delete mode 100644 flac/src/libFLAC/include/private/bitreader.h delete mode 100644 flac/src/libFLAC/include/private/bitwriter.h delete mode 100644 flac/src/libFLAC/include/private/cpu.h delete mode 100644 flac/src/libFLAC/include/private/crc.h delete mode 100644 flac/src/libFLAC/include/private/fixed.h delete mode 100644 flac/src/libFLAC/include/private/float.h delete mode 100644 flac/src/libFLAC/include/private/format.h delete mode 100644 flac/src/libFLAC/include/private/lpc.h delete mode 100644 flac/src/libFLAC/include/private/macros.h delete mode 100644 flac/src/libFLAC/include/private/md5.h delete mode 100644 flac/src/libFLAC/include/private/memory.h delete mode 100644 flac/src/libFLAC/include/private/metadata.h delete mode 100644 flac/src/libFLAC/include/private/ogg_decoder_aspect.h delete mode 100644 flac/src/libFLAC/include/private/ogg_encoder_aspect.h delete mode 100644 flac/src/libFLAC/include/private/ogg_helper.h delete mode 100644 flac/src/libFLAC/include/private/ogg_mapping.h delete mode 100644 flac/src/libFLAC/include/private/stream_encoder.h delete mode 100644 flac/src/libFLAC/include/private/stream_encoder_framing.h delete mode 100644 flac/src/libFLAC/include/private/window.h delete mode 100644 flac/src/libFLAC/include/protected/Makefile.am delete mode 100644 flac/src/libFLAC/include/protected/Makefile.in delete mode 100644 flac/src/libFLAC/include/protected/all.h delete mode 100644 flac/src/libFLAC/include/protected/stream_decoder.h delete mode 100644 flac/src/libFLAC/include/protected/stream_encoder.h delete mode 100644 flac/src/libFLAC/libFLAC.m4 delete mode 100644 flac/src/libFLAC/libFLAC_dynamic.vcproj delete mode 100644 flac/src/libFLAC/libFLAC_dynamic.vcxproj delete mode 100644 flac/src/libFLAC/libFLAC_dynamic.vcxproj.filters delete mode 100644 flac/src/libFLAC/libFLAC_static.vcproj delete mode 100644 flac/src/libFLAC/libFLAC_static.vcxproj delete mode 100644 flac/src/libFLAC/libFLAC_static.vcxproj.filters delete mode 100644 flac/src/libFLAC/lpc.c delete mode 100644 flac/src/libFLAC/lpc_intrin_avx2.c delete mode 100644 flac/src/libFLAC/lpc_intrin_sse.c delete mode 100644 flac/src/libFLAC/lpc_intrin_sse2.c delete mode 100644 flac/src/libFLAC/lpc_intrin_sse41.c delete mode 100644 flac/src/libFLAC/md5.c delete mode 100644 flac/src/libFLAC/memory.c delete mode 100644 flac/src/libFLAC/metadata_iterators.c delete mode 100644 flac/src/libFLAC/metadata_object.c delete mode 100644 flac/src/libFLAC/ogg_decoder_aspect.c delete mode 100644 flac/src/libFLAC/ogg_encoder_aspect.c delete mode 100644 flac/src/libFLAC/ogg_helper.c delete mode 100644 flac/src/libFLAC/ogg_mapping.c delete mode 100644 flac/src/libFLAC/ppc/Makefile.am delete mode 100644 flac/src/libFLAC/ppc/Makefile.in delete mode 100644 flac/src/libFLAC/ppc/as/Makefile.am delete mode 100644 flac/src/libFLAC/ppc/as/Makefile.in delete mode 100644 flac/src/libFLAC/ppc/as/lpc_asm.s delete mode 100644 flac/src/libFLAC/ppc/gas/Makefile.am delete mode 100644 flac/src/libFLAC/ppc/gas/Makefile.in delete mode 100644 flac/src/libFLAC/ppc/gas/lpc_asm.s delete mode 100644 flac/src/libFLAC/stream_decoder.c delete mode 100644 flac/src/libFLAC/stream_encoder.c delete mode 100644 flac/src/libFLAC/stream_encoder_framing.c delete mode 100644 flac/src/libFLAC/stream_encoder_intrin_avx2.c delete mode 100644 flac/src/libFLAC/stream_encoder_intrin_sse2.c delete mode 100644 flac/src/libFLAC/stream_encoder_intrin_ssse3.c delete mode 100644 flac/src/libFLAC/window.c delete mode 100644 flac/src/metaflac/Makefile.am delete mode 100644 flac/src/metaflac/Makefile.in delete mode 100644 flac/src/metaflac/Makefile.lite delete mode 100644 flac/src/metaflac/main.c delete mode 100644 flac/src/metaflac/metaflac.vcproj delete mode 100644 flac/src/metaflac/metaflac.vcxproj delete mode 100644 flac/src/metaflac/metaflac.vcxproj.filters delete mode 100644 flac/src/metaflac/operations.c delete mode 100644 flac/src/metaflac/operations.h delete mode 100644 flac/src/metaflac/operations_shorthand.h delete mode 100644 flac/src/metaflac/operations_shorthand_cuesheet.c delete mode 100644 flac/src/metaflac/operations_shorthand_picture.c delete mode 100644 flac/src/metaflac/operations_shorthand_seektable.c delete mode 100644 flac/src/metaflac/operations_shorthand_streaminfo.c delete mode 100644 flac/src/metaflac/operations_shorthand_vorbiscomment.c delete mode 100644 flac/src/metaflac/options.c delete mode 100644 flac/src/metaflac/options.h delete mode 100644 flac/src/metaflac/usage.c delete mode 100644 flac/src/metaflac/usage.h delete mode 100644 flac/src/metaflac/utils.c delete mode 100644 flac/src/metaflac/utils.h delete mode 100644 flac/src/monkeys_audio_utilities/Makefile.am delete mode 100644 flac/src/monkeys_audio_utilities/Makefile.in delete mode 100644 flac/src/monkeys_audio_utilities/flac_mac/Makefile.am delete mode 100644 flac/src/monkeys_audio_utilities/flac_mac/Makefile.in delete mode 100644 flac/src/monkeys_audio_utilities/flac_mac/flac_mac.vcproj delete mode 100644 flac/src/monkeys_audio_utilities/flac_mac/main.c delete mode 100644 flac/src/monkeys_audio_utilities/flac_ren/Makefile.am delete mode 100644 flac/src/monkeys_audio_utilities/flac_ren/Makefile.in delete mode 100644 flac/src/monkeys_audio_utilities/flac_ren/main.c delete mode 100644 flac/src/plugin_common/Makefile.am delete mode 100644 flac/src/plugin_common/Makefile.in delete mode 100644 flac/src/plugin_common/Makefile.lite delete mode 100644 flac/src/plugin_common/README delete mode 100644 flac/src/plugin_common/all.h delete mode 100644 flac/src/plugin_common/charset.c delete mode 100644 flac/src/plugin_common/charset.h delete mode 100644 flac/src/plugin_common/defs.h delete mode 100644 flac/src/plugin_common/dither.c delete mode 100644 flac/src/plugin_common/dither.h delete mode 100644 flac/src/plugin_common/plugin_common_static.vcproj delete mode 100644 flac/src/plugin_common/plugin_common_static.vcxproj delete mode 100644 flac/src/plugin_common/plugin_common_static.vcxproj.filters delete mode 100644 flac/src/plugin_common/replaygain.c delete mode 100644 flac/src/plugin_common/replaygain.h delete mode 100644 flac/src/plugin_common/tags.c delete mode 100644 flac/src/plugin_common/tags.h delete mode 100644 flac/src/plugin_xmms/Makefile.am delete mode 100644 flac/src/plugin_xmms/Makefile.in delete mode 100644 flac/src/plugin_xmms/Makefile.lite delete mode 100644 flac/src/plugin_xmms/charset.c delete mode 100644 flac/src/plugin_xmms/charset.h delete mode 100644 flac/src/plugin_xmms/configure.c delete mode 100644 flac/src/plugin_xmms/configure.h delete mode 100644 flac/src/plugin_xmms/fileinfo.c delete mode 100644 flac/src/plugin_xmms/http.c delete mode 100644 flac/src/plugin_xmms/http.h delete mode 100644 flac/src/plugin_xmms/locale_hack.h delete mode 100644 flac/src/plugin_xmms/plugin.c delete mode 100644 flac/src/plugin_xmms/plugin.h delete mode 100644 flac/src/plugin_xmms/tag.c delete mode 100644 flac/src/plugin_xmms/tag.h delete mode 100644 flac/src/share/Makefile.am delete mode 100644 flac/src/share/Makefile.in delete mode 100644 flac/src/share/Makefile.lite delete mode 100644 flac/src/share/README delete mode 100644 flac/src/share/getopt/Makefile.lite delete mode 100644 flac/src/share/getopt/getopt.c delete mode 100644 flac/src/share/getopt/getopt1.c delete mode 100644 flac/src/share/getopt/getopt_static.vcproj delete mode 100644 flac/src/share/getopt/getopt_static.vcxproj delete mode 100644 flac/src/share/getopt/getopt_static.vcxproj.filters delete mode 100644 flac/src/share/grabbag/Makefile.lite delete mode 100644 flac/src/share/grabbag/alloc.c delete mode 100644 flac/src/share/grabbag/cuesheet.c delete mode 100644 flac/src/share/grabbag/file.c delete mode 100644 flac/src/share/grabbag/grabbag_static.vcproj delete mode 100644 flac/src/share/grabbag/grabbag_static.vcxproj delete mode 100644 flac/src/share/grabbag/grabbag_static.vcxproj.filters delete mode 100644 flac/src/share/grabbag/picture.c delete mode 100644 flac/src/share/grabbag/replaygain.c delete mode 100644 flac/src/share/grabbag/seektable.c delete mode 100644 flac/src/share/grabbag/snprintf.c delete mode 100644 flac/src/share/replaygain_analysis/Makefile.lite delete mode 100644 flac/src/share/replaygain_analysis/replaygain_analysis.c delete mode 100644 flac/src/share/replaygain_analysis/replaygain_analysis_static.vcproj delete mode 100644 flac/src/share/replaygain_analysis/replaygain_analysis_static.vcxproj delete mode 100644 flac/src/share/replaygain_analysis/replaygain_analysis_static.vcxproj.filters delete mode 100644 flac/src/share/replaygain_synthesis/Makefile.lite delete mode 100644 flac/src/share/replaygain_synthesis/include/private/fast_float_math_hack.h delete mode 100644 flac/src/share/replaygain_synthesis/replaygain_synthesis.c delete mode 100644 flac/src/share/replaygain_synthesis/replaygain_synthesis_static.vcproj delete mode 100644 flac/src/share/replaygain_synthesis/replaygain_synthesis_static.vcxproj delete mode 100644 flac/src/share/replaygain_synthesis/replaygain_synthesis_static.vcxproj.filters delete mode 100644 flac/src/share/utf8/Makefile.lite delete mode 100644 flac/src/share/utf8/charmaps.h delete mode 100644 flac/src/share/utf8/charset.c delete mode 100644 flac/src/share/utf8/charset.h delete mode 100644 flac/src/share/utf8/charset_test.c delete mode 100644 flac/src/share/utf8/charsetmap.h delete mode 100644 flac/src/share/utf8/iconvert.c delete mode 100644 flac/src/share/utf8/iconvert.h delete mode 100644 flac/src/share/utf8/makemap.c delete mode 100644 flac/src/share/utf8/utf8.c delete mode 100644 flac/src/share/utf8/utf8_static.vcproj delete mode 100644 flac/src/share/utf8/utf8_static.vcxproj delete mode 100644 flac/src/share/utf8/utf8_static.vcxproj.filters delete mode 100644 flac/src/share/win_utf8_io/win_utf8_io.c delete mode 100644 flac/src/share/win_utf8_io/win_utf8_io.vcproj delete mode 100644 flac/src/share/win_utf8_io/win_utf8_io_static.vcproj delete mode 100644 flac/src/share/win_utf8_io/win_utf8_io_static.vcxproj delete mode 100644 flac/src/share/win_utf8_io/win_utf8_io_static.vcxproj.filters delete mode 100644 flac/src/test_grabbag/Makefile.am delete mode 100644 flac/src/test_grabbag/Makefile.in delete mode 100644 flac/src/test_grabbag/Makefile.lite delete mode 100644 flac/src/test_grabbag/cuesheet/Makefile.am delete mode 100644 flac/src/test_grabbag/cuesheet/Makefile.in delete mode 100644 flac/src/test_grabbag/cuesheet/Makefile.lite delete mode 100644 flac/src/test_grabbag/cuesheet/main.c delete mode 100644 flac/src/test_grabbag/cuesheet/test_cuesheet.vcproj delete mode 100644 flac/src/test_grabbag/cuesheet/test_cuesheet.vcxproj delete mode 100644 flac/src/test_grabbag/cuesheet/test_cuesheet.vcxproj.filters delete mode 100644 flac/src/test_grabbag/picture/Makefile.am delete mode 100644 flac/src/test_grabbag/picture/Makefile.in delete mode 100644 flac/src/test_grabbag/picture/Makefile.lite delete mode 100644 flac/src/test_grabbag/picture/main.c delete mode 100644 flac/src/test_grabbag/picture/test_picture.vcproj delete mode 100644 flac/src/test_grabbag/picture/test_picture.vcxproj delete mode 100644 flac/src/test_grabbag/picture/test_picture.vcxproj.filters delete mode 100644 flac/src/test_libFLAC++/Makefile.am delete mode 100644 flac/src/test_libFLAC++/Makefile.in delete mode 100644 flac/src/test_libFLAC++/Makefile.lite delete mode 100644 flac/src/test_libFLAC++/decoders.cpp delete mode 100644 flac/src/test_libFLAC++/decoders.h delete mode 100644 flac/src/test_libFLAC++/encoders.cpp delete mode 100644 flac/src/test_libFLAC++/encoders.h delete mode 100644 flac/src/test_libFLAC++/main.cpp delete mode 100644 flac/src/test_libFLAC++/metadata.cpp delete mode 100644 flac/src/test_libFLAC++/metadata.h delete mode 100644 flac/src/test_libFLAC++/metadata_manip.cpp delete mode 100644 flac/src/test_libFLAC++/metadata_object.cpp delete mode 100644 flac/src/test_libFLAC++/test_libFLAC++.vcproj delete mode 100644 flac/src/test_libFLAC++/test_libFLAC++.vcxproj delete mode 100644 flac/src/test_libFLAC++/test_libFLAC++.vcxproj.filters delete mode 100644 flac/src/test_libFLAC/Makefile.am delete mode 100644 flac/src/test_libFLAC/Makefile.in delete mode 100644 flac/src/test_libFLAC/Makefile.lite delete mode 100644 flac/src/test_libFLAC/bitwriter.c delete mode 100644 flac/src/test_libFLAC/bitwriter.h delete mode 100644 flac/src/test_libFLAC/decoders.c delete mode 100644 flac/src/test_libFLAC/decoders.h delete mode 100644 flac/src/test_libFLAC/encoders.c delete mode 100644 flac/src/test_libFLAC/encoders.h delete mode 100644 flac/src/test_libFLAC/endswap.c delete mode 100644 flac/src/test_libFLAC/endswap.h delete mode 100644 flac/src/test_libFLAC/format.c delete mode 100644 flac/src/test_libFLAC/format.h delete mode 100644 flac/src/test_libFLAC/main.c delete mode 100644 flac/src/test_libFLAC/md5.c delete mode 100644 flac/src/test_libFLAC/md5.h delete mode 100644 flac/src/test_libFLAC/metadata.c delete mode 100644 flac/src/test_libFLAC/metadata.h delete mode 100644 flac/src/test_libFLAC/metadata_manip.c delete mode 100644 flac/src/test_libFLAC/metadata_object.c delete mode 100644 flac/src/test_libFLAC/test_libFLAC.vcproj delete mode 100644 flac/src/test_libFLAC/test_libFLAC.vcxproj delete mode 100644 flac/src/test_libFLAC/test_libFLAC.vcxproj.filters delete mode 100644 flac/src/test_libs_common/Makefile.am delete mode 100644 flac/src/test_libs_common/Makefile.in delete mode 100644 flac/src/test_libs_common/Makefile.lite delete mode 100644 flac/src/test_libs_common/README delete mode 100644 flac/src/test_libs_common/file_utils_flac.c delete mode 100644 flac/src/test_libs_common/metadata_utils.c delete mode 100644 flac/src/test_libs_common/test_libs_common_static.vcproj delete mode 100644 flac/src/test_libs_common/test_libs_common_static.vcxproj delete mode 100644 flac/src/test_libs_common/test_libs_common_static.vcxproj.filters delete mode 100644 flac/src/test_seeking/Makefile.am delete mode 100644 flac/src/test_seeking/Makefile.in delete mode 100644 flac/src/test_seeking/Makefile.lite delete mode 100644 flac/src/test_seeking/main.c delete mode 100644 flac/src/test_seeking/test_seeking.vcproj delete mode 100644 flac/src/test_seeking/test_seeking.vcxproj delete mode 100644 flac/src/test_seeking/test_seeking.vcxproj.filters delete mode 100644 flac/src/test_streams/Makefile.am delete mode 100644 flac/src/test_streams/Makefile.in delete mode 100644 flac/src/test_streams/Makefile.lite delete mode 100644 flac/src/test_streams/main.c delete mode 100644 flac/src/test_streams/test_streams.vcproj delete mode 100644 flac/src/test_streams/test_streams.vcxproj delete mode 100644 flac/src/test_streams/test_streams.vcxproj.filters delete mode 100644 flac/src/utils/Makefile.am delete mode 100644 flac/src/utils/Makefile.in delete mode 100644 flac/src/utils/flacdiff/Makefile.am delete mode 100644 flac/src/utils/flacdiff/Makefile.in delete mode 100644 flac/src/utils/flacdiff/Makefile.lite delete mode 100644 flac/src/utils/flacdiff/flacdiff.vcproj delete mode 100644 flac/src/utils/flacdiff/flacdiff.vcxproj delete mode 100644 flac/src/utils/flacdiff/flacdiff.vcxproj.filters delete mode 100644 flac/src/utils/flacdiff/main.cpp delete mode 100644 flac/src/utils/flactimer/Makefile.am delete mode 100644 flac/src/utils/flactimer/Makefile.in delete mode 100644 flac/src/utils/flactimer/flactimer.vcproj delete mode 100644 flac/src/utils/flactimer/flactimer.vcxproj delete mode 100644 flac/src/utils/flactimer/flactimer.vcxproj.filters delete mode 100644 flac/src/utils/flactimer/main.cpp delete mode 100644 flac/strip_non_asm_libtool_args.sh delete mode 100644 flac/test/Makefile.am delete mode 100644 flac/test/Makefile.in delete mode 100644 flac/test/Makefile.lite delete mode 100644 flac/test/common.sh.in delete mode 100644 flac/test/cuesheet.ok delete mode 100644 flac/test/cuesheets/Makefile.am delete mode 100644 flac/test/cuesheets/Makefile.in delete mode 100644 flac/test/cuesheets/bad.000.CATALOG_multiple.cue delete mode 100644 flac/test/cuesheets/bad.001.CATALOG_missing_number.cue delete mode 100644 flac/test/cuesheets/bad.002.CATALOG_number_too_long.cue delete mode 100644 flac/test/cuesheets/bad.003.CATALOG_not_13_digits.cue delete mode 100644 flac/test/cuesheets/bad.030.FLAGS_multiple.cue delete mode 100644 flac/test/cuesheets/bad.031.FLAGS_wrong_place_1.cue delete mode 100644 flac/test/cuesheets/bad.032.FLAGS_wrong_place_2.cue delete mode 100644 flac/test/cuesheets/bad.060.INDEX_wrong_place.cue delete mode 100644 flac/test/cuesheets/bad.061.INDEX_missing_number.cue delete mode 100644 flac/test/cuesheets/bad.062.INDEX_invalid_number_1.cue delete mode 100644 flac/test/cuesheets/bad.063.first_INDEX_not_0_or_1.cue delete mode 100644 flac/test/cuesheets/bad.064.INDEX_num_non_sequential.cue delete mode 100644 flac/test/cuesheets/bad.065.INDEX_num_out_of_range.cue delete mode 100644 flac/test/cuesheets/bad.066.INDEX_missing_offset.cue delete mode 100644 flac/test/cuesheets/bad.067.INDEX_illegal_offset.cue delete mode 100644 flac/test/cuesheets/bad.068.INDEX_cdda_illegal_offset.cue delete mode 100644 flac/test/cuesheets/bad.069.nonzero_first_INDEX.cue delete mode 100644 flac/test/cuesheets/bad.070.INDEX_offset_not_ascending_1.cue delete mode 100644 flac/test/cuesheets/bad.071.INDEX_offset_not_ascending_2.cue delete mode 100644 flac/test/cuesheets/bad.110.ISRC_multiple.cue delete mode 100644 flac/test/cuesheets/bad.111.ISRC_wrong_place_1.cue delete mode 100644 flac/test/cuesheets/bad.112.ISRC_wrong_place_2.cue delete mode 100644 flac/test/cuesheets/bad.113.ISRC_missing_number.cue delete mode 100644 flac/test/cuesheets/bad.114.ISRC_invalid_number.cue delete mode 100644 flac/test/cuesheets/bad.130.TRACK_missing_INDEX_01_1.cue delete mode 100644 flac/test/cuesheets/bad.131.TRACK_missing_INDEX_01_2.cue delete mode 100644 flac/test/cuesheets/bad.132.TRACK_missing_INDEX_01_3.cue delete mode 100644 flac/test/cuesheets/bad.133.TRACK_missing_INDEX_01_4.cue delete mode 100644 flac/test/cuesheets/bad.134.TRACK_missing_number.cue delete mode 100644 flac/test/cuesheets/bad.135.TRACK_invalid_number_1.cue delete mode 100644 flac/test/cuesheets/bad.136.TRACK_invalid_number_2.cue delete mode 100644 flac/test/cuesheets/bad.137.TRACK_cdda_out_of_range.cue delete mode 100644 flac/test/cuesheets/bad.138.TRACK_num_non_sequential.cue delete mode 100644 flac/test/cuesheets/bad.139.TRACK_missing_type.cue delete mode 100644 flac/test/cuesheets/bad.140.no_TRACKs.cue delete mode 100644 flac/test/cuesheets/bad.200.FLAC_leadin_missing_offset.cue delete mode 100644 flac/test/cuesheets/bad.201.FLAC_leadin_illegal_offset.cue delete mode 100644 flac/test/cuesheets/bad.202.FLAC_leadin_cdda_illegal_offset.cue delete mode 100644 flac/test/cuesheets/bad.230.FLAC_leadout_multiple.cue delete mode 100644 flac/test/cuesheets/bad.231.FLAC_leadout_missing_track.cue delete mode 100644 flac/test/cuesheets/bad.232.FLAC_leadout_illegal_track.cue delete mode 100644 flac/test/cuesheets/bad.233.FLAC_leadout_missing_offset.cue delete mode 100644 flac/test/cuesheets/bad.234.FLAC_leadout_illegal_offset.cue delete mode 100644 flac/test/cuesheets/bad.235.FLAC_leadout_offset_not_211680000.cue delete mode 100644 flac/test/cuesheets/good.000.cue delete mode 100644 flac/test/cuesheets/good.001.cue delete mode 100644 flac/test/cuesheets/good.002.dos_format.cue delete mode 100644 flac/test/cuesheets/good.003.missing_final_newline.cue delete mode 100644 flac/test/cuesheets/good.004.dos_format.missing_final_newline.cue delete mode 100644 flac/test/flac-to-flac-metadata-test-files/Makefile.am delete mode 100644 flac/test/flac-to-flac-metadata-test-files/Makefile.in delete mode 100644 flac/test/flac-to-flac-metadata-test-files/case00a-expect.meta delete mode 100644 flac/test/flac-to-flac-metadata-test-files/case01a-expect.meta delete mode 100644 flac/test/flac-to-flac-metadata-test-files/case01b-expect.meta delete mode 100644 flac/test/flac-to-flac-metadata-test-files/case01c-expect.meta delete mode 100644 flac/test/flac-to-flac-metadata-test-files/case01d-expect.meta delete mode 100644 flac/test/flac-to-flac-metadata-test-files/case01e-expect.meta delete mode 100644 flac/test/flac-to-flac-metadata-test-files/case02a-expect.meta delete mode 100644 flac/test/flac-to-flac-metadata-test-files/case02b-expect.meta delete mode 100644 flac/test/flac-to-flac-metadata-test-files/case02c-expect.meta delete mode 100644 flac/test/flac-to-flac-metadata-test-files/case03a-expect.meta delete mode 100644 flac/test/flac-to-flac-metadata-test-files/case03b-expect.meta delete mode 100644 flac/test/flac-to-flac-metadata-test-files/case03c-expect.meta delete mode 100644 flac/test/flac-to-flac-metadata-test-files/case04a-expect.meta delete mode 100644 flac/test/flac-to-flac-metadata-test-files/case04b-expect.meta delete mode 100644 flac/test/flac-to-flac-metadata-test-files/case04c-expect.meta delete mode 100644 flac/test/flac-to-flac-metadata-test-files/case04d-expect.meta delete mode 100644 flac/test/flac-to-flac-metadata-test-files/case04e-expect.meta delete mode 100644 flac/test/flac-to-flac-metadata-test-files/input-SCPAP.flac delete mode 100644 flac/test/flac-to-flac-metadata-test-files/input-SCVA.flac delete mode 100644 flac/test/flac-to-flac-metadata-test-files/input-SCVAUP.flac delete mode 100644 flac/test/flac-to-flac-metadata-test-files/input-SCVPAP.flac delete mode 100644 flac/test/flac-to-flac-metadata-test-files/input-SVAUP.flac delete mode 100644 flac/test/flac-to-flac-metadata-test-files/input-VA.flac delete mode 100644 flac/test/flac-to-flac-metadata-test-files/input0.cue delete mode 100644 flac/test/metaflac-test-files/Makefile.am delete mode 100644 flac/test/metaflac-test-files/Makefile.in delete mode 100644 flac/test/metaflac-test-files/case00-expect.meta delete mode 100644 flac/test/metaflac-test-files/case01-expect.meta delete mode 100644 flac/test/metaflac-test-files/case02-expect.meta delete mode 100644 flac/test/metaflac-test-files/case03-expect.meta delete mode 100644 flac/test/metaflac-test-files/case04-expect.meta delete mode 100644 flac/test/metaflac-test-files/case05-expect.meta delete mode 100644 flac/test/metaflac-test-files/case06-expect.meta delete mode 100644 flac/test/metaflac-test-files/case07-expect.meta delete mode 100644 flac/test/metaflac-test-files/case08-expect.meta delete mode 100644 flac/test/metaflac-test-files/case09-expect.meta delete mode 100644 flac/test/metaflac-test-files/case10-expect.meta delete mode 100644 flac/test/metaflac-test-files/case11-expect.meta delete mode 100644 flac/test/metaflac-test-files/case12-expect.meta delete mode 100644 flac/test/metaflac-test-files/case13-expect.meta delete mode 100644 flac/test/metaflac-test-files/case14-expect.meta delete mode 100644 flac/test/metaflac-test-files/case15-expect.meta delete mode 100644 flac/test/metaflac-test-files/case16-expect.meta delete mode 100644 flac/test/metaflac-test-files/case17-expect.meta delete mode 100644 flac/test/metaflac-test-files/case18-expect.meta delete mode 100644 flac/test/metaflac-test-files/case19-expect.meta delete mode 100644 flac/test/metaflac-test-files/case20-expect.meta delete mode 100644 flac/test/metaflac-test-files/case21-expect.meta delete mode 100644 flac/test/metaflac-test-files/case22-expect.meta delete mode 100644 flac/test/metaflac-test-files/case23-expect.meta delete mode 100644 flac/test/metaflac-test-files/case24-expect.meta delete mode 100644 flac/test/metaflac-test-files/case25-expect.meta delete mode 100644 flac/test/metaflac-test-files/case26-expect.meta delete mode 100644 flac/test/metaflac-test-files/case27-expect.meta delete mode 100644 flac/test/metaflac-test-files/case28-expect.meta delete mode 100644 flac/test/metaflac-test-files/case29-expect.meta delete mode 100644 flac/test/metaflac-test-files/case30-expect.meta delete mode 100644 flac/test/metaflac-test-files/case31-expect.meta delete mode 100644 flac/test/metaflac-test-files/case32-expect.meta delete mode 100644 flac/test/metaflac-test-files/case33-expect.meta delete mode 100644 flac/test/metaflac-test-files/case34-expect.meta delete mode 100644 flac/test/metaflac-test-files/case35-expect.meta delete mode 100644 flac/test/metaflac-test-files/case36-expect.meta delete mode 100644 flac/test/metaflac-test-files/case37-expect.meta delete mode 100644 flac/test/metaflac-test-files/case38-expect.meta delete mode 100644 flac/test/metaflac-test-files/case39-expect.meta delete mode 100644 flac/test/metaflac-test-files/case40-expect.meta delete mode 100644 flac/test/metaflac-test-files/case41-expect.meta delete mode 100644 flac/test/metaflac-test-files/case42-expect.meta delete mode 100644 flac/test/metaflac-test-files/case43-expect.meta delete mode 100644 flac/test/metaflac-test-files/case44-expect.meta delete mode 100644 flac/test/metaflac-test-files/case45-expect.meta delete mode 100644 flac/test/metaflac-test-files/case46-expect.meta delete mode 100644 flac/test/metaflac-test-files/case47-expect.meta delete mode 100644 flac/test/metaflac-test-files/case48-expect.meta delete mode 100644 flac/test/metaflac-test-files/case49-expect.meta delete mode 100644 flac/test/metaflac-test-files/case50-expect.meta delete mode 100644 flac/test/metaflac-test-files/case51-expect.meta delete mode 100644 flac/test/metaflac-test-files/case52-expect.meta delete mode 100644 flac/test/metaflac-test-files/case53-expect.meta delete mode 100644 flac/test/metaflac-test-files/case54-expect.meta delete mode 100644 flac/test/metaflac-test-files/case55-expect.meta delete mode 100644 flac/test/metaflac-test-files/case56-expect.meta delete mode 100644 flac/test/metaflac-test-files/case57-expect.meta delete mode 100644 flac/test/metaflac-test-files/case58-expect.meta delete mode 100644 flac/test/metaflac-test-files/case59-expect.meta delete mode 100644 flac/test/metaflac-test-files/case60-expect.meta delete mode 100644 flac/test/metaflac-test-files/case61-expect.meta delete mode 100644 flac/test/metaflac-test-files/case62-expect.meta delete mode 100644 flac/test/metaflac.flac.in delete mode 100644 flac/test/metaflac.flac.ok delete mode 100644 flac/test/picture.ok delete mode 100644 flac/test/pictures/0.gif delete mode 100644 flac/test/pictures/0.jpg delete mode 100644 flac/test/pictures/0.png delete mode 100644 flac/test/pictures/1.gif delete mode 100644 flac/test/pictures/1.png delete mode 100644 flac/test/pictures/2.gif delete mode 100644 flac/test/pictures/2.png delete mode 100644 flac/test/pictures/3.png delete mode 100644 flac/test/pictures/4.jpg delete mode 100644 flac/test/pictures/4.png delete mode 100644 flac/test/pictures/5.png delete mode 100644 flac/test/pictures/6.png delete mode 100644 flac/test/pictures/7.png delete mode 100644 flac/test/pictures/8.png delete mode 100644 flac/test/pictures/Makefile.am delete mode 100644 flac/test/pictures/Makefile.in delete mode 100644 flac/test/test_bins.sh delete mode 100644 flac/test/test_compression.sh delete mode 100644 flac/test/test_flac.sh delete mode 100644 flac/test/test_grabbag.sh delete mode 100644 flac/test/test_libFLAC++.sh delete mode 100644 flac/test/test_libFLAC.sh delete mode 100644 flac/test/test_metaflac.sh delete mode 100644 flac/test/test_replaygain.sh delete mode 100644 flac/test/test_seeking.sh delete mode 100644 flac/test/test_streams.sh delete mode 100644 flac/test/test_wrapper.sh delete mode 100644 flac/test/write_iff.pl diff --git a/.gitignore b/.gitignore index f1a6cfd..bcaef3a 100644 --- a/.gitignore +++ b/.gitignore @@ -3,11 +3,12 @@ obj/ bin/ lib/ Release/ +Debug/ *.vcxproj.user *.csproj.user *.sdf *.suo *.opensdf -Win32/ -x64/ -ia32/ +a32/ +launchSettings.json +/CUETools/TestResults diff --git a/.hgignore b/.hgignore deleted file mode 100644 index 7c4aafa..0000000 --- a/.hgignore +++ /dev/null @@ -1,22 +0,0 @@ -syntax: glob -CUETools.AVX/Release -CUETools.CLParity -*.vcxproj.user -CUETools.Codecs.DirectSound -obj -_UpgradeReport_Files -MAC_SDK/Source/MACLib/Release -MAC_SDK/Source/MACLib/x64 -ttalib-1.1/x64 -*.sdf -*.suo -*.opensdf -CUETools.AVX/Win32 -CUETools.AVX/x64 -CUETools/TestResults/ -*.csproj.user -bin/ -flac/src/libFLAC/ia32/*.obj -CUETools/ipch/ -flac/src/libFLAC/x64/ -flac/src/libFLAC/Release/ diff --git a/Bwg.Hardware/Bwg.Hardware.csproj b/Bwg.Hardware/Bwg.Hardware.csproj index 9b0031e..211dd43 100644 --- a/Bwg.Hardware/Bwg.Hardware.csproj +++ b/Bwg.Hardware/Bwg.Hardware.csproj @@ -1,117 +1,19 @@ - - + + - Debug - AnyCPU - 9.0.30729 - 2.0 - {B75FA7AD-968E-4990-B342-1B4B17C850DF} - Library - Properties - Bwg.Hardware + net40;net20 + 0.0.7.1 Bwg.Hardware - - - - - - - - - - - 3.5 - - - v2.0 - false - publish\ - true - Disk - false - Foreground - 7 - Days - false - false - true - 0 - 1.0.0.%2a - false - true + Bwg.Hardware + BwgBurn + CD-R/CD-RW/DVD-R/DVD-RW burning program for Windows XP: devices. + Copyright © 2006 by Jack W. Griffin, Jr. + Jack W. Griffin, Jr + true + ..\bin\$(Configuration)\plugins + https://svn.code.sf.net/p/bwgburn/code/ + svn + BwgSoftware - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - bin\Debug\Bwg.Hardware.XML - true - AllRules.ruleset - - - pdbonly - true - ..\bin\Release\plugins\ - TRACE - prompt - 4 - AllRules.ruleset - - - - - - - - - - - - - - - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 2.0 %28x86%29 - false - - - False - .NET Framework 3.0 %28x86%29 - false - - - False - .NET Framework 3.5 - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - - - - - \ No newline at end of file + + diff --git a/Bwg.Hardware/Properties/AssemblyInfo.cs b/Bwg.Hardware/Properties/AssemblyInfo.cs deleted file mode 100644 index 4e44a4a..0000000 --- a/Bwg.Hardware/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("Bwg.Hardware")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("BwgSoftware")] -[assembly: AssemblyProduct("BwgBurn")] -[assembly: AssemblyCopyright("Copyright © 2006 by Jack W. Griffin, Jr.")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("de5dc145-3520-47ee-8988-205a142c6177")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Revision and Build Numbers -// by using the '*' as shown below: -[assembly: AssemblyVersion("0.0.7.1")] -[assembly: AssemblyFileVersion("0.0.7.1")] diff --git a/Bwg.Hardware/app.config b/Bwg.Hardware/app.config deleted file mode 100644 index 73859b0..0000000 --- a/Bwg.Hardware/app.config +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/Bwg.Logging/Bwg.Logging.csproj b/Bwg.Logging/Bwg.Logging.csproj index c9c96b7..1798d49 100644 --- a/Bwg.Logging/Bwg.Logging.csproj +++ b/Bwg.Logging/Bwg.Logging.csproj @@ -1,125 +1,19 @@ - - + + - Debug - AnyCPU - 9.0.30729 - 2.0 - {F2DFEB00-BB35-4665-85EA-CB8C7729A6B7} - Library - Properties - Bwg.Logging + net40;net20 + 0.0.7.1 Bwg.Logging - - - - - - - - - - - 3.5 - - - v2.0 - false - publish\ - true - Disk - false - Foreground - 7 - Days - false - false - true - 0 - 1.0.0.%2a - false - true + Bwg.Logging + BwgBurn + CD-R/CD-RW/DVD-R/DVD-RW burning program for Windows XP: logging. + Copyright © 2006 by Jack W. Griffin, Jr. + Jack W. Griffin, Jr + true + ..\bin\$(Configuration)\plugins + https://svn.code.sf.net/p/bwgburn/code/ + svn + BwgSoftware - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - bin\Debug\Bwg.Logging.XML - true - AllRules.ruleset - - - pdbonly - true - ..\bin\Release\plugins\ - TRACE - prompt - 4 - - - AllRules.ruleset - - - - - - - - - - - - - - - - - - - - - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 2.0 %28x86%29 - false - - - False - .NET Framework 3.0 %28x86%29 - false - - - False - .NET Framework 3.5 - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - - - - - \ No newline at end of file + + diff --git a/Bwg.Logging/Properties/AssemblyInfo.cs b/Bwg.Logging/Properties/AssemblyInfo.cs deleted file mode 100644 index c21ddab..0000000 --- a/Bwg.Logging/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("Bwg.Logging")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("BwgSoftware")] -[assembly: AssemblyProduct("BwgBurn")] -[assembly: AssemblyCopyright("Copyright © 2006 by Jack W. Griffin, Jr.")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("216f12e9-2978-457c-95d6-32b4b87a361d")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Revision and Build Numbers -// by using the '*' as shown below: -[assembly: AssemblyVersion("0.0.7.1")] -[assembly: AssemblyFileVersion("0.0.7.1")] diff --git a/Bwg.Logging/app.config b/Bwg.Logging/app.config deleted file mode 100644 index 73859b0..0000000 --- a/Bwg.Logging/app.config +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/Bwg.Scsi/Bwg.Scsi.csproj b/Bwg.Scsi/Bwg.Scsi.csproj index f625170..05cd3e7 100644 --- a/Bwg.Scsi/Bwg.Scsi.csproj +++ b/Bwg.Scsi/Bwg.Scsi.csproj @@ -1,162 +1,29 @@ - - + + - Debug - AnyCPU - 9.0.30729 - 2.0 - {A05B6AA6-0EC3-495D-BCC4-ECE1210071A8} - Library - Properties - Bwg.Scsi + net40;net20 + 0.0.7.1 Bwg.Scsi - - - - - - - - - - - 3.5 - - - v2.0 - false - publish\ - true - Disk - false - Foreground - 7 - Days - false - false - true - 0 - 1.0.0.%2a - false - true - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 + Bwg.Scsi + BwgBurn + CD-R/CD-RW/DVD-R/DVD-RW burning program for Windows XP: Windows SCSI interface. + Copyright © 2006 by Jack W. Griffin, Jr. + Jack W. Griffin, Jr true - bin\Debug\Bwg.Scsi.XML - true - AllRules.ruleset + ..\bin\$(Configuration)\plugins + https://svn.code.sf.net/p/bwgburn/code/ + svn + BwgSoftware - - pdbonly - true - ..\bin\Release\plugins\ - TRACE - prompt - 4 - true - - - AllRules.ruleset - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {F2DFEB00-BB35-4665-85EA-CB8C7729A6B7} - Bwg.Logging + + + + False - + + - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 2.0 %28x86%29 - false - - - False - .NET Framework 3.0 %28x86%29 - false - - - False - .NET Framework 3.5 - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - + - - - - - - - - \ No newline at end of file + + diff --git a/Bwg.Scsi/FileReader.cs b/Bwg.Scsi/FileReader.cs deleted file mode 100644 index 9f5594c..0000000 --- a/Bwg.Scsi/FileReader.cs +++ /dev/null @@ -1,142 +0,0 @@ -// -// BwgBurn - CD-R/CD-RW/DVD-R/DVD-RW burning program for Windows XP -// -// Copyright (C) 2006 by Jack W. Griffin (butchg@comcast.net) -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, but -// WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with this program; if not, write to the -// -// Free Software Foundation, Inc., -// 59 Temple Place, Suite 330, -// Boston, MA 02111-1307 USA -// - -using System; -using System.Collections.Generic; -using System.Text; -using System.Runtime.InteropServices; -//using Bwg.Utils; - -namespace Bwg.Scsi -{ - /// - /// This class reads data from a file and sends this data to the buffered - /// write stream. - /// - public unsafe class FileReader - { - #region private member variables - /// - /// The OS file for reading data from a file into a memory buffer (IntPtr) - /// - private OsFileReader m_reader; - - /// - /// The buffer pool to receive the data - /// - private WriteBufferPool m_buffer_stream; - #endregion - - - /// - /// Create a new file reader that sends the data read to a buffer stream - /// object - /// - /// the buffer to receive the data - public FileReader(WriteBufferPool buffer) - { - m_buffer_stream = buffer; - m_reader = new OsFileReader(); - } - - /// - /// Open a file to read data from - /// - /// the name of the file - /// true if the file is opened, false otherwise - public bool Open(string filename) - { - return m_reader.Open(filename); - } - - /// - /// This method closes an open file. - /// - /// true if the file is closed sucessfully, false otherwise - public bool Close() - { - return m_reader.Close(); - } - - /// - /// This function reads data from the file and sends it to the - /// buffer stream to be sent to the burner. This function does not - /// return until all of the data from the file is read. - /// - /// - public bool ReadData(int sector_size, long lba) - { - bool shortbuf = false; - int NumberRead ; - int num_sectors ; - bool first = true; - - // This is the number of whole sectors that will fit into the buffer. - num_sectors = m_buffer_stream.PageSize / sector_size; - - while (true) - { - WriteBuffer buf ; - - buf = m_buffer_stream.GetFreeBuffer(); - if (!m_reader.ReadData(buf.BufferPtr, num_sectors * sector_size, out NumberRead)) - return false ; - - // If the read succeeded, but read zero bytes, we have reached the - // end of the file. - if (NumberRead == 0) - return true; - - if (shortbuf) - throw new Exception("read two short packets"); - - // Mark the buffer with the amount of data that has - // been read from the file - int sectors = NumberRead / sector_size ; - if ((NumberRead % sector_size) != 0) - { - shortbuf = true; - sectors++; - } - - if (first) - { - buf.SourceString = "First block from FileReader"; - buf.LogicalBlockAddress = lba; - first = false; - } - else - { - buf.SourceString = "Not first block from FileReader"; - buf.LogicalBlockAddress = long.MaxValue; - } - - buf.SectorSize = sector_size; - buf.DataSize = sectors; - - // Send the buffer to the device - m_buffer_stream.SendBufferToDevice(buf); - } - } - } -} diff --git a/Bwg.Scsi/Properties/AssemblyInfo.cs b/Bwg.Scsi/Properties/AssemblyInfo.cs deleted file mode 100644 index 40e7750..0000000 --- a/Bwg.Scsi/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("Bwg.Scsi")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("BwgSoftware")] -[assembly: AssemblyProduct("BwgBurn")] -[assembly: AssemblyCopyright("Copyright © 2006 by Jack W. Griffin, Jr.")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("d8330703-34ac-4124-a059-ba011391cc2e")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Revision and Build Numbers -// by using the '*' as shown below: -[assembly: AssemblyVersion("0.0.7.1")] -[assembly: AssemblyFileVersion("0.0.7.1")] diff --git a/Bwg.Scsi/app.config b/Bwg.Scsi/app.config deleted file mode 100644 index 73859b0..0000000 --- a/Bwg.Scsi/app.config +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/CUEControls/CUEControls.csproj b/CUEControls/CUEControls.csproj index f9d2ead..ca00377 100644 --- a/CUEControls/CUEControls.csproj +++ b/CUEControls/CUEControls.csproj @@ -1,131 +1,23 @@ - - + + - Debug - AnyCPU - 9.0.30729 - 2.0 - {CA4D64E6-6544-4A29-8BA5-7DB08D50D072} - Library - Properties - CUEControls + net40;net20 + 2.1.6.0 CUEControls - - - 3.5 - - - v2.0 - publish\ - true - Disk - false - Foreground - 7 - Days - false - false - true - 0 - 1.0.0.%2a - false - false - true - - - true - full - false - ..\bin\Debug\ - DEBUG;TRACE - prompt - 4 + CUEControls + CUETools + Library containing windows GUI controls for CUETools. + Copyright (c) 2008-2018 Grigory Chudov + Grigory Chudov true - AllRules.ruleset - - - pdbonly - true - ..\bin\Release\ - TRACE - prompt - 4 - true - AllRules.ruleset + ..\bin\$(Configuration)\ + https://github.com/gchudov/cuetools.net + git + + - - - - - - - Component - - - FileSystemTreeView.cs - - - - Component - - - UserControl - - - MediaSlider.cs - - - Component - - - PeakMeterCtrl.cs - - - - True - True - Resources.resx - - - - - - - Designer - ResXFileCodeGenerator - Resources.Designer.cs - - - - - - - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - - - - - \ No newline at end of file + + diff --git a/CUEPlayer/CUEPlayer.csproj b/CUEPlayer/CUEPlayer.csproj index d8d08ad..5e44b40 100644 --- a/CUEPlayer/CUEPlayer.csproj +++ b/CUEPlayer/CUEPlayer.csproj @@ -10,7 +10,7 @@ Properties CUEPlayer CUEPlayer - v2.0 + v4.0 512 false @@ -31,12 +31,13 @@ 1.0.0.%2a false true + true full false - ..\bin\Debug\ + ..\bin\Debug\net40\ DEBUG;TRACE prompt 4 @@ -45,7 +46,7 @@ pdbonly true - ..\bin\Release\ + ..\bin\Release\net40\ TRACE prompt 4 @@ -71,12 +72,6 @@ DataSet1.xsd - Component - - - True - True - DataSet1.xsd Form @@ -162,10 +157,12 @@ {CA4D64E6-6544-4A29-8BA5-7DB08D50D072} CUEControls + False {1DD41038-D885-46C5-8DDE-E0B82F066584} CUETools.CDImage + False {FAD09EE2-D6B2-4A8E-9F1C-2A9FB293661A} @@ -178,6 +175,7 @@ {6458A13A-30EF-45A9-9D58-E5031B17BEE2} CUETools.Codecs + False {AFF1AFF9-839D-4892-88CD-8BD09BAFC1D2} @@ -190,6 +188,7 @@ {4911BD82-49EF-4858-8B51-5394F86739A4} CUETools.Processor + False {8DD1E84B-0B03-4C0B-9B42-1E49F75E7CB1} @@ -234,7 +233,6 @@ Designer MSDataSetGenerator - DataSet1.Designer.cs DataSet1.xsd diff --git a/CUEPlayer/DataSet1.Designer.cs b/CUEPlayer/DataSet1.Designer.cs deleted file mode 100644 index 1608c3a..0000000 --- a/CUEPlayer/DataSet1.Designer.cs +++ /dev/null @@ -1,1643 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.239 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -#pragma warning disable 1591 - -namespace CUEPlayer { - - - /// - ///Represents a strongly typed in-memory cache of data. - /// - [global::System.Serializable()] - [global::System.ComponentModel.DesignerCategoryAttribute("code")] - [global::System.ComponentModel.ToolboxItem(true)] - [global::System.Xml.Serialization.XmlSchemaProviderAttribute("GetTypedDataSetSchema")] - [global::System.Xml.Serialization.XmlRootAttribute("DataSet1")] - [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.DataSet")] - public partial class DataSet1 : global::System.Data.DataSet { - - private PlaylistDataTable tablePlaylist; - - private global::System.Data.SchemaSerializationMode _schemaSerializationMode = global::System.Data.SchemaSerializationMode.IncludeSchema; - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - public DataSet1() { - this.BeginInit(); - this.InitClass(); - global::System.ComponentModel.CollectionChangeEventHandler schemaChangedHandler = new global::System.ComponentModel.CollectionChangeEventHandler(this.SchemaChanged); - base.Tables.CollectionChanged += schemaChangedHandler; - base.Relations.CollectionChanged += schemaChangedHandler; - this.EndInit(); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - protected DataSet1(global::System.Runtime.Serialization.SerializationInfo info, global::System.Runtime.Serialization.StreamingContext context) : - base(info, context, false) { - if ((this.IsBinarySerialized(info, context) == true)) { - this.InitVars(false); - global::System.ComponentModel.CollectionChangeEventHandler schemaChangedHandler1 = new global::System.ComponentModel.CollectionChangeEventHandler(this.SchemaChanged); - this.Tables.CollectionChanged += schemaChangedHandler1; - this.Relations.CollectionChanged += schemaChangedHandler1; - return; - } - string strSchema = ((string)(info.GetValue("XmlSchema", typeof(string)))); - if ((this.DetermineSchemaSerializationMode(info, context) == global::System.Data.SchemaSerializationMode.IncludeSchema)) { - global::System.Data.DataSet ds = new global::System.Data.DataSet(); - ds.ReadXmlSchema(new global::System.Xml.XmlTextReader(new global::System.IO.StringReader(strSchema))); - if ((ds.Tables["Playlist"] != null)) { - base.Tables.Add(new PlaylistDataTable(ds.Tables["Playlist"])); - } - this.DataSetName = ds.DataSetName; - this.Prefix = ds.Prefix; - this.Namespace = ds.Namespace; - this.Locale = ds.Locale; - this.CaseSensitive = ds.CaseSensitive; - this.EnforceConstraints = ds.EnforceConstraints; - this.Merge(ds, false, global::System.Data.MissingSchemaAction.Add); - this.InitVars(); - } - else { - this.ReadXmlSchema(new global::System.Xml.XmlTextReader(new global::System.IO.StringReader(strSchema))); - } - this.GetSerializationData(info, context); - global::System.ComponentModel.CollectionChangeEventHandler schemaChangedHandler = new global::System.ComponentModel.CollectionChangeEventHandler(this.SchemaChanged); - base.Tables.CollectionChanged += schemaChangedHandler; - this.Relations.CollectionChanged += schemaChangedHandler; - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - [global::System.ComponentModel.Browsable(false)] - [global::System.ComponentModel.DesignerSerializationVisibility(global::System.ComponentModel.DesignerSerializationVisibility.Content)] - public PlaylistDataTable Playlist { - get { - return this.tablePlaylist; - } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - [global::System.ComponentModel.BrowsableAttribute(true)] - [global::System.ComponentModel.DesignerSerializationVisibilityAttribute(global::System.ComponentModel.DesignerSerializationVisibility.Visible)] - public override global::System.Data.SchemaSerializationMode SchemaSerializationMode { - get { - return this._schemaSerializationMode; - } - set { - this._schemaSerializationMode = value; - } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - [global::System.ComponentModel.DesignerSerializationVisibilityAttribute(global::System.ComponentModel.DesignerSerializationVisibility.Hidden)] - public new global::System.Data.DataTableCollection Tables { - get { - return base.Tables; - } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - [global::System.ComponentModel.DesignerSerializationVisibilityAttribute(global::System.ComponentModel.DesignerSerializationVisibility.Hidden)] - public new global::System.Data.DataRelationCollection Relations { - get { - return base.Relations; - } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - protected override void InitializeDerivedDataSet() { - this.BeginInit(); - this.InitClass(); - this.EndInit(); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - public override global::System.Data.DataSet Clone() { - DataSet1 cln = ((DataSet1)(base.Clone())); - cln.InitVars(); - cln.SchemaSerializationMode = this.SchemaSerializationMode; - return cln; - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - protected override bool ShouldSerializeTables() { - return false; - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - protected override bool ShouldSerializeRelations() { - return false; - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - protected override void ReadXmlSerializable(global::System.Xml.XmlReader reader) { - if ((this.DetermineSchemaSerializationMode(reader) == global::System.Data.SchemaSerializationMode.IncludeSchema)) { - this.Reset(); - global::System.Data.DataSet ds = new global::System.Data.DataSet(); - ds.ReadXml(reader); - if ((ds.Tables["Playlist"] != null)) { - base.Tables.Add(new PlaylistDataTable(ds.Tables["Playlist"])); - } - this.DataSetName = ds.DataSetName; - this.Prefix = ds.Prefix; - this.Namespace = ds.Namespace; - this.Locale = ds.Locale; - this.CaseSensitive = ds.CaseSensitive; - this.EnforceConstraints = ds.EnforceConstraints; - this.Merge(ds, false, global::System.Data.MissingSchemaAction.Add); - this.InitVars(); - } - else { - this.ReadXml(reader); - this.InitVars(); - } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - protected override global::System.Xml.Schema.XmlSchema GetSchemaSerializable() { - global::System.IO.MemoryStream stream = new global::System.IO.MemoryStream(); - this.WriteXmlSchema(new global::System.Xml.XmlTextWriter(stream, null)); - stream.Position = 0; - return global::System.Xml.Schema.XmlSchema.Read(new global::System.Xml.XmlTextReader(stream), null); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - internal void InitVars() { - this.InitVars(true); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - internal void InitVars(bool initTable) { - this.tablePlaylist = ((PlaylistDataTable)(base.Tables["Playlist"])); - if ((initTable == true)) { - if ((this.tablePlaylist != null)) { - this.tablePlaylist.InitVars(); - } - } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - private void InitClass() { - this.DataSetName = "DataSet1"; - this.Prefix = ""; - this.Namespace = "http://tempuri.org/DataSet1.xsd"; - this.EnforceConstraints = true; - this.SchemaSerializationMode = global::System.Data.SchemaSerializationMode.IncludeSchema; - this.tablePlaylist = new PlaylistDataTable(); - base.Tables.Add(this.tablePlaylist); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - private bool ShouldSerializePlaylist() { - return false; - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - private void SchemaChanged(object sender, global::System.ComponentModel.CollectionChangeEventArgs e) { - if ((e.Action == global::System.ComponentModel.CollectionChangeAction.Remove)) { - this.InitVars(); - } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - public static global::System.Xml.Schema.XmlSchemaComplexType GetTypedDataSetSchema(global::System.Xml.Schema.XmlSchemaSet xs) { - DataSet1 ds = new DataSet1(); - global::System.Xml.Schema.XmlSchemaComplexType type = new global::System.Xml.Schema.XmlSchemaComplexType(); - global::System.Xml.Schema.XmlSchemaSequence sequence = new global::System.Xml.Schema.XmlSchemaSequence(); - global::System.Xml.Schema.XmlSchemaAny any = new global::System.Xml.Schema.XmlSchemaAny(); - any.Namespace = ds.Namespace; - sequence.Items.Add(any); - type.Particle = sequence; - global::System.Xml.Schema.XmlSchema dsSchema = ds.GetSchemaSerializable(); - if (xs.Contains(dsSchema.TargetNamespace)) { - global::System.IO.MemoryStream s1 = new global::System.IO.MemoryStream(); - global::System.IO.MemoryStream s2 = new global::System.IO.MemoryStream(); - try { - global::System.Xml.Schema.XmlSchema schema = null; - dsSchema.Write(s1); - for (global::System.Collections.IEnumerator schemas = xs.Schemas(dsSchema.TargetNamespace).GetEnumerator(); schemas.MoveNext(); ) { - schema = ((global::System.Xml.Schema.XmlSchema)(schemas.Current)); - s2.SetLength(0); - schema.Write(s2); - if ((s1.Length == s2.Length)) { - s1.Position = 0; - s2.Position = 0; - for (; ((s1.Position != s1.Length) - && (s1.ReadByte() == s2.ReadByte())); ) { - ; - } - if ((s1.Position == s1.Length)) { - return type; - } - } - } - } - finally { - if ((s1 != null)) { - s1.Close(); - } - if ((s2 != null)) { - s2.Close(); - } - } - } - xs.Add(dsSchema); - return type; - } - - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - public delegate void PlaylistRowChangeEventHandler(object sender, PlaylistRowChangeEvent e); - - /// - ///Represents the strongly named DataTable class. - /// - [global::System.Serializable()] - [global::System.Xml.Serialization.XmlSchemaProviderAttribute("GetTypedTableSchema")] - public partial class PlaylistDataTable : global::System.Data.DataTable, global::System.Collections.IEnumerable { - - private global::System.Data.DataColumn columnid; - - private global::System.Data.DataColumn columnpath; - - private global::System.Data.DataColumn columnartist; - - private global::System.Data.DataColumn columntitle; - - private global::System.Data.DataColumn columnalbum; - - private global::System.Data.DataColumn columnlength; - - private global::System.Data.DataColumn columntrack; - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - public PlaylistDataTable() { - this.TableName = "Playlist"; - this.BeginInit(); - this.InitClass(); - this.EndInit(); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - internal PlaylistDataTable(global::System.Data.DataTable table) { - this.TableName = table.TableName; - if ((table.CaseSensitive != table.DataSet.CaseSensitive)) { - this.CaseSensitive = table.CaseSensitive; - } - if ((table.Locale.ToString() != table.DataSet.Locale.ToString())) { - this.Locale = table.Locale; - } - if ((table.Namespace != table.DataSet.Namespace)) { - this.Namespace = table.Namespace; - } - this.Prefix = table.Prefix; - this.MinimumCapacity = table.MinimumCapacity; - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - protected PlaylistDataTable(global::System.Runtime.Serialization.SerializationInfo info, global::System.Runtime.Serialization.StreamingContext context) : - base(info, context) { - this.InitVars(); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - public global::System.Data.DataColumn idColumn { - get { - return this.columnid; - } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - public global::System.Data.DataColumn pathColumn { - get { - return this.columnpath; - } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - public global::System.Data.DataColumn artistColumn { - get { - return this.columnartist; - } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - public global::System.Data.DataColumn titleColumn { - get { - return this.columntitle; - } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - public global::System.Data.DataColumn albumColumn { - get { - return this.columnalbum; - } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - public global::System.Data.DataColumn lengthColumn { - get { - return this.columnlength; - } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - public global::System.Data.DataColumn trackColumn { - get { - return this.columntrack; - } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - [global::System.ComponentModel.Browsable(false)] - public int Count { - get { - return this.Rows.Count; - } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - public PlaylistRow this[int index] { - get { - return ((PlaylistRow)(this.Rows[index])); - } - } - - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - public event PlaylistRowChangeEventHandler PlaylistRowChanging; - - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - public event PlaylistRowChangeEventHandler PlaylistRowChanged; - - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - public event PlaylistRowChangeEventHandler PlaylistRowDeleting; - - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - public event PlaylistRowChangeEventHandler PlaylistRowDeleted; - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - public void AddPlaylistRow(PlaylistRow row) { - this.Rows.Add(row); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - public PlaylistRow AddPlaylistRow(string path, string artist, string title, string album, int length, int track) { - PlaylistRow rowPlaylistRow = ((PlaylistRow)(this.NewRow())); - object[] columnValuesArray = new object[] { - null, - path, - artist, - title, - album, - length, - track}; - rowPlaylistRow.ItemArray = columnValuesArray; - this.Rows.Add(rowPlaylistRow); - return rowPlaylistRow; - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - public PlaylistRow FindByid(int id) { - return ((PlaylistRow)(this.Rows.Find(new object[] { - id}))); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - public virtual global::System.Collections.IEnumerator GetEnumerator() { - return this.Rows.GetEnumerator(); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - public override global::System.Data.DataTable Clone() { - PlaylistDataTable cln = ((PlaylistDataTable)(base.Clone())); - cln.InitVars(); - return cln; - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - protected override global::System.Data.DataTable CreateInstance() { - return new PlaylistDataTable(); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - internal void InitVars() { - this.columnid = base.Columns["id"]; - this.columnpath = base.Columns["path"]; - this.columnartist = base.Columns["artist"]; - this.columntitle = base.Columns["title"]; - this.columnalbum = base.Columns["album"]; - this.columnlength = base.Columns["length"]; - this.columntrack = base.Columns["track"]; - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - private void InitClass() { - this.columnid = new global::System.Data.DataColumn("id", typeof(int), null, global::System.Data.MappingType.Element); - base.Columns.Add(this.columnid); - this.columnpath = new global::System.Data.DataColumn("path", typeof(string), null, global::System.Data.MappingType.Element); - base.Columns.Add(this.columnpath); - this.columnartist = new global::System.Data.DataColumn("artist", typeof(string), null, global::System.Data.MappingType.Element); - base.Columns.Add(this.columnartist); - this.columntitle = new global::System.Data.DataColumn("title", typeof(string), null, global::System.Data.MappingType.Element); - base.Columns.Add(this.columntitle); - this.columnalbum = new global::System.Data.DataColumn("album", typeof(string), null, global::System.Data.MappingType.Element); - base.Columns.Add(this.columnalbum); - this.columnlength = new global::System.Data.DataColumn("length", typeof(int), null, global::System.Data.MappingType.Element); - base.Columns.Add(this.columnlength); - this.columntrack = new global::System.Data.DataColumn("track", typeof(int), null, global::System.Data.MappingType.Element); - base.Columns.Add(this.columntrack); - this.Constraints.Add(new global::System.Data.UniqueConstraint("Constraint1", new global::System.Data.DataColumn[] { - this.columnid}, true)); - this.columnid.AutoIncrement = true; - this.columnid.AutoIncrementSeed = -1; - this.columnid.AutoIncrementStep = -1; - this.columnid.AllowDBNull = false; - this.columnid.ReadOnly = true; - this.columnid.Unique = true; - this.columnpath.AllowDBNull = false; - this.columnpath.MaxLength = 255; - this.columnartist.MaxLength = 255; - this.columntitle.MaxLength = 255; - this.columnalbum.MaxLength = 255; - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - public PlaylistRow NewPlaylistRow() { - return ((PlaylistRow)(this.NewRow())); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - protected override global::System.Data.DataRow NewRowFromBuilder(global::System.Data.DataRowBuilder builder) { - return new PlaylistRow(builder); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - protected override global::System.Type GetRowType() { - return typeof(PlaylistRow); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - protected override void OnRowChanged(global::System.Data.DataRowChangeEventArgs e) { - base.OnRowChanged(e); - if ((this.PlaylistRowChanged != null)) { - this.PlaylistRowChanged(this, new PlaylistRowChangeEvent(((PlaylistRow)(e.Row)), e.Action)); - } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - protected override void OnRowChanging(global::System.Data.DataRowChangeEventArgs e) { - base.OnRowChanging(e); - if ((this.PlaylistRowChanging != null)) { - this.PlaylistRowChanging(this, new PlaylistRowChangeEvent(((PlaylistRow)(e.Row)), e.Action)); - } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - protected override void OnRowDeleted(global::System.Data.DataRowChangeEventArgs e) { - base.OnRowDeleted(e); - if ((this.PlaylistRowDeleted != null)) { - this.PlaylistRowDeleted(this, new PlaylistRowChangeEvent(((PlaylistRow)(e.Row)), e.Action)); - } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - protected override void OnRowDeleting(global::System.Data.DataRowChangeEventArgs e) { - base.OnRowDeleting(e); - if ((this.PlaylistRowDeleting != null)) { - this.PlaylistRowDeleting(this, new PlaylistRowChangeEvent(((PlaylistRow)(e.Row)), e.Action)); - } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - public void RemovePlaylistRow(PlaylistRow row) { - this.Rows.Remove(row); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - public static global::System.Xml.Schema.XmlSchemaComplexType GetTypedTableSchema(global::System.Xml.Schema.XmlSchemaSet xs) { - global::System.Xml.Schema.XmlSchemaComplexType type = new global::System.Xml.Schema.XmlSchemaComplexType(); - global::System.Xml.Schema.XmlSchemaSequence sequence = new global::System.Xml.Schema.XmlSchemaSequence(); - DataSet1 ds = new DataSet1(); - global::System.Xml.Schema.XmlSchemaAny any1 = new global::System.Xml.Schema.XmlSchemaAny(); - any1.Namespace = "http://www.w3.org/2001/XMLSchema"; - any1.MinOccurs = new decimal(0); - any1.MaxOccurs = decimal.MaxValue; - any1.ProcessContents = global::System.Xml.Schema.XmlSchemaContentProcessing.Lax; - sequence.Items.Add(any1); - global::System.Xml.Schema.XmlSchemaAny any2 = new global::System.Xml.Schema.XmlSchemaAny(); - any2.Namespace = "urn:schemas-microsoft-com:xml-diffgram-v1"; - any2.MinOccurs = new decimal(1); - any2.ProcessContents = global::System.Xml.Schema.XmlSchemaContentProcessing.Lax; - sequence.Items.Add(any2); - global::System.Xml.Schema.XmlSchemaAttribute attribute1 = new global::System.Xml.Schema.XmlSchemaAttribute(); - attribute1.Name = "namespace"; - attribute1.FixedValue = ds.Namespace; - type.Attributes.Add(attribute1); - global::System.Xml.Schema.XmlSchemaAttribute attribute2 = new global::System.Xml.Schema.XmlSchemaAttribute(); - attribute2.Name = "tableTypeName"; - attribute2.FixedValue = "PlaylistDataTable"; - type.Attributes.Add(attribute2); - type.Particle = sequence; - global::System.Xml.Schema.XmlSchema dsSchema = ds.GetSchemaSerializable(); - if (xs.Contains(dsSchema.TargetNamespace)) { - global::System.IO.MemoryStream s1 = new global::System.IO.MemoryStream(); - global::System.IO.MemoryStream s2 = new global::System.IO.MemoryStream(); - try { - global::System.Xml.Schema.XmlSchema schema = null; - dsSchema.Write(s1); - for (global::System.Collections.IEnumerator schemas = xs.Schemas(dsSchema.TargetNamespace).GetEnumerator(); schemas.MoveNext(); ) { - schema = ((global::System.Xml.Schema.XmlSchema)(schemas.Current)); - s2.SetLength(0); - schema.Write(s2); - if ((s1.Length == s2.Length)) { - s1.Position = 0; - s2.Position = 0; - for (; ((s1.Position != s1.Length) - && (s1.ReadByte() == s2.ReadByte())); ) { - ; - } - if ((s1.Position == s1.Length)) { - return type; - } - } - } - } - finally { - if ((s1 != null)) { - s1.Close(); - } - if ((s2 != null)) { - s2.Close(); - } - } - } - xs.Add(dsSchema); - return type; - } - } - - /// - ///Represents strongly named DataRow class. - /// - public partial class PlaylistRow : global::System.Data.DataRow { - - private PlaylistDataTable tablePlaylist; - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - internal PlaylistRow(global::System.Data.DataRowBuilder rb) : - base(rb) { - this.tablePlaylist = ((PlaylistDataTable)(this.Table)); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - public int id { - get { - return ((int)(this[this.tablePlaylist.idColumn])); - } - set { - this[this.tablePlaylist.idColumn] = value; - } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - public string path { - get { - return ((string)(this[this.tablePlaylist.pathColumn])); - } - set { - this[this.tablePlaylist.pathColumn] = value; - } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - public string artist { - get { - if (this.IsartistNull()) { - return string.Empty; - } - else { - return ((string)(this[this.tablePlaylist.artistColumn])); - } - } - set { - this[this.tablePlaylist.artistColumn] = value; - } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - public string title { - get { - if (this.IstitleNull()) { - return string.Empty; - } - else { - return ((string)(this[this.tablePlaylist.titleColumn])); - } - } - set { - this[this.tablePlaylist.titleColumn] = value; - } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - public string album { - get { - if (this.IsalbumNull()) { - return string.Empty; - } - else { - return ((string)(this[this.tablePlaylist.albumColumn])); - } - } - set { - this[this.tablePlaylist.albumColumn] = value; - } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - public int length { - get { - try { - return ((int)(this[this.tablePlaylist.lengthColumn])); - } - catch (global::System.InvalidCastException e) { - throw new global::System.Data.StrongTypingException("The value for column \'length\' in table \'Playlist\' is DBNull.", e); - } - } - set { - this[this.tablePlaylist.lengthColumn] = value; - } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - public int track { - get { - try { - return ((int)(this[this.tablePlaylist.trackColumn])); - } - catch (global::System.InvalidCastException e) { - throw new global::System.Data.StrongTypingException("The value for column \'track\' in table \'Playlist\' is DBNull.", e); - } - } - set { - this[this.tablePlaylist.trackColumn] = value; - } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - public bool IsartistNull() { - return this.IsNull(this.tablePlaylist.artistColumn); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - public void SetartistNull() { - this[this.tablePlaylist.artistColumn] = global::System.Convert.DBNull; - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - public bool IstitleNull() { - return this.IsNull(this.tablePlaylist.titleColumn); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - public void SettitleNull() { - this[this.tablePlaylist.titleColumn] = global::System.Convert.DBNull; - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - public bool IsalbumNull() { - return this.IsNull(this.tablePlaylist.albumColumn); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - public void SetalbumNull() { - this[this.tablePlaylist.albumColumn] = global::System.Convert.DBNull; - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - public bool IslengthNull() { - return this.IsNull(this.tablePlaylist.lengthColumn); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - public void SetlengthNull() { - this[this.tablePlaylist.lengthColumn] = global::System.Convert.DBNull; - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - public bool IstrackNull() { - return this.IsNull(this.tablePlaylist.trackColumn); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - public void SettrackNull() { - this[this.tablePlaylist.trackColumn] = global::System.Convert.DBNull; - } - } - - /// - ///Row event argument class - /// - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - public class PlaylistRowChangeEvent : global::System.EventArgs { - - private PlaylistRow eventRow; - - private global::System.Data.DataRowAction eventAction; - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - public PlaylistRowChangeEvent(PlaylistRow row, global::System.Data.DataRowAction action) { - this.eventRow = row; - this.eventAction = action; - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - public PlaylistRow Row { - get { - return this.eventRow; - } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - public global::System.Data.DataRowAction Action { - get { - return this.eventAction; - } - } - } - } -} -namespace CUEPlayer.DataSet1TableAdapters { - - - /// - ///Represents the connection and commands used to retrieve and save data. - /// - [global::System.ComponentModel.DesignerCategoryAttribute("code")] - [global::System.ComponentModel.ToolboxItem(true)] - [global::System.ComponentModel.DataObjectAttribute(true)] - [global::System.ComponentModel.DesignerAttribute("Microsoft.VSDesigner.DataSource.Design.TableAdapterDesigner, Microsoft.VSDesigner" + - ", Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")] - [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")] - public partial class PlaylistTableAdapter : global::System.ComponentModel.Component { - - private global::System.Data.SqlServerCe.SqlCeDataAdapter _adapter; - - private global::System.Data.SqlServerCe.SqlCeConnection _connection; - - private global::System.Data.SqlServerCe.SqlCeTransaction _transaction; - - private global::System.Data.SqlServerCe.SqlCeCommand[] _commandCollection; - - private bool _clearBeforeFill; - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - public PlaylistTableAdapter() { - this.ClearBeforeFill = true; - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - protected internal global::System.Data.SqlServerCe.SqlCeDataAdapter Adapter { - get { - if ((this._adapter == null)) { - this.InitAdapter(); - } - return this._adapter; - } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - internal global::System.Data.SqlServerCe.SqlCeConnection Connection { - get { - if ((this._connection == null)) { - this.InitConnection(); - } - return this._connection; - } - set { - this._connection = value; - if ((this.Adapter.InsertCommand != null)) { - this.Adapter.InsertCommand.Connection = value; - } - if ((this.Adapter.DeleteCommand != null)) { - this.Adapter.DeleteCommand.Connection = value; - } - if ((this.Adapter.UpdateCommand != null)) { - this.Adapter.UpdateCommand.Connection = value; - } - for (int i = 0; (i < this.CommandCollection.Length); i = (i + 1)) { - if ((this.CommandCollection[i] != null)) { - ((global::System.Data.SqlServerCe.SqlCeCommand)(this.CommandCollection[i])).Connection = value; - } - } - } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - internal global::System.Data.SqlServerCe.SqlCeTransaction Transaction { - get { - return this._transaction; - } - set { - this._transaction = value; - for (int i = 0; (i < this.CommandCollection.Length); i = (i + 1)) { - this.CommandCollection[i].Transaction = this._transaction; - } - if (((this.Adapter != null) - && (this.Adapter.DeleteCommand != null))) { - this.Adapter.DeleteCommand.Transaction = this._transaction; - } - if (((this.Adapter != null) - && (this.Adapter.InsertCommand != null))) { - this.Adapter.InsertCommand.Transaction = this._transaction; - } - if (((this.Adapter != null) - && (this.Adapter.UpdateCommand != null))) { - this.Adapter.UpdateCommand.Transaction = this._transaction; - } - } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - protected global::System.Data.SqlServerCe.SqlCeCommand[] CommandCollection { - get { - if ((this._commandCollection == null)) { - this.InitCommandCollection(); - } - return this._commandCollection; - } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - public bool ClearBeforeFill { - get { - return this._clearBeforeFill; - } - set { - this._clearBeforeFill = value; - } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - private void InitAdapter() { - this._adapter = new global::System.Data.SqlServerCe.SqlCeDataAdapter(); - global::System.Data.Common.DataTableMapping tableMapping = new global::System.Data.Common.DataTableMapping(); - tableMapping.SourceTable = "Table"; - tableMapping.DataSetTable = "Playlist"; - tableMapping.ColumnMappings.Add("id", "id"); - tableMapping.ColumnMappings.Add("path", "path"); - tableMapping.ColumnMappings.Add("artist", "artist"); - tableMapping.ColumnMappings.Add("title", "title"); - tableMapping.ColumnMappings.Add("album", "album"); - tableMapping.ColumnMappings.Add("length", "length"); - tableMapping.ColumnMappings.Add("track", "track"); - this._adapter.TableMappings.Add(tableMapping); - this._adapter.DeleteCommand = new global::System.Data.SqlServerCe.SqlCeCommand(); - this._adapter.DeleteCommand.Connection = this.Connection; - this._adapter.DeleteCommand.CommandText = "DELETE FROM [Playlist] WHERE (([id] = @p1))"; - this._adapter.DeleteCommand.CommandType = global::System.Data.CommandType.Text; - this._adapter.DeleteCommand.Parameters.Add(new global::System.Data.SqlServerCe.SqlCeParameter("@p1", global::System.Data.SqlDbType.Int, 0, global::System.Data.ParameterDirection.Input, true, 0, 0, "id", global::System.Data.DataRowVersion.Original, null)); - this._adapter.InsertCommand = new global::System.Data.SqlServerCe.SqlCeCommand(); - this._adapter.InsertCommand.Connection = this.Connection; - this._adapter.InsertCommand.CommandText = "INSERT INTO [Playlist] ([path], [artist], [title], [album], [length], [track]) VA" + - "LUES (@p1, @p2, @p3, @p4, @p5, @p6)"; - this._adapter.InsertCommand.CommandType = global::System.Data.CommandType.Text; - this._adapter.InsertCommand.Parameters.Add(new global::System.Data.SqlServerCe.SqlCeParameter("@p1", global::System.Data.SqlDbType.NVarChar, 0, global::System.Data.ParameterDirection.Input, true, 0, 0, "path", global::System.Data.DataRowVersion.Current, null)); - this._adapter.InsertCommand.Parameters.Add(new global::System.Data.SqlServerCe.SqlCeParameter("@p2", global::System.Data.SqlDbType.NVarChar, 0, global::System.Data.ParameterDirection.Input, true, 0, 0, "artist", global::System.Data.DataRowVersion.Current, null)); - this._adapter.InsertCommand.Parameters.Add(new global::System.Data.SqlServerCe.SqlCeParameter("@p3", global::System.Data.SqlDbType.NVarChar, 0, global::System.Data.ParameterDirection.Input, true, 0, 0, "title", global::System.Data.DataRowVersion.Current, null)); - this._adapter.InsertCommand.Parameters.Add(new global::System.Data.SqlServerCe.SqlCeParameter("@p4", global::System.Data.SqlDbType.NVarChar, 0, global::System.Data.ParameterDirection.Input, true, 0, 0, "album", global::System.Data.DataRowVersion.Current, null)); - this._adapter.InsertCommand.Parameters.Add(new global::System.Data.SqlServerCe.SqlCeParameter("@p5", global::System.Data.SqlDbType.Int, 0, global::System.Data.ParameterDirection.Input, true, 0, 0, "length", global::System.Data.DataRowVersion.Current, null)); - this._adapter.InsertCommand.Parameters.Add(new global::System.Data.SqlServerCe.SqlCeParameter("@p6", global::System.Data.SqlDbType.Int, 0, global::System.Data.ParameterDirection.Input, true, 0, 0, "track", global::System.Data.DataRowVersion.Current, null)); - this._adapter.UpdateCommand = new global::System.Data.SqlServerCe.SqlCeCommand(); - this._adapter.UpdateCommand.Connection = this.Connection; - this._adapter.UpdateCommand.CommandText = "UPDATE [Playlist] SET [path] = @p1, [artist] = @p2, [title] = @p3, [album] = @p4," + - " [length] = @p5, [track] = @p6 WHERE (([id] = @p7))"; - this._adapter.UpdateCommand.CommandType = global::System.Data.CommandType.Text; - this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlServerCe.SqlCeParameter("@p1", global::System.Data.SqlDbType.NVarChar, 0, global::System.Data.ParameterDirection.Input, true, 0, 0, "path", global::System.Data.DataRowVersion.Current, null)); - this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlServerCe.SqlCeParameter("@p2", global::System.Data.SqlDbType.NVarChar, 0, global::System.Data.ParameterDirection.Input, true, 0, 0, "artist", global::System.Data.DataRowVersion.Current, null)); - this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlServerCe.SqlCeParameter("@p3", global::System.Data.SqlDbType.NVarChar, 0, global::System.Data.ParameterDirection.Input, true, 0, 0, "title", global::System.Data.DataRowVersion.Current, null)); - this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlServerCe.SqlCeParameter("@p4", global::System.Data.SqlDbType.NVarChar, 0, global::System.Data.ParameterDirection.Input, true, 0, 0, "album", global::System.Data.DataRowVersion.Current, null)); - this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlServerCe.SqlCeParameter("@p5", global::System.Data.SqlDbType.Int, 0, global::System.Data.ParameterDirection.Input, true, 0, 0, "length", global::System.Data.DataRowVersion.Current, null)); - this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlServerCe.SqlCeParameter("@p6", global::System.Data.SqlDbType.Int, 0, global::System.Data.ParameterDirection.Input, true, 0, 0, "track", global::System.Data.DataRowVersion.Current, null)); - this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlServerCe.SqlCeParameter("@p7", global::System.Data.SqlDbType.Int, 0, global::System.Data.ParameterDirection.Input, true, 0, 0, "id", global::System.Data.DataRowVersion.Original, null)); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - private void InitConnection() { - this._connection = new global::System.Data.SqlServerCe.SqlCeConnection(); - this._connection.ConnectionString = global::CUEPlayer.Properties.Settings.Default.CUEPlayerConnectionString; - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - private void InitCommandCollection() { - this._commandCollection = new global::System.Data.SqlServerCe.SqlCeCommand[1]; - this._commandCollection[0] = new global::System.Data.SqlServerCe.SqlCeCommand(); - this._commandCollection[0].Connection = this.Connection; - this._commandCollection[0].CommandText = "SELECT [id], [path], [artist], [title], [album], [length], [track] FROM [Playlist" + - "]"; - this._commandCollection[0].CommandType = global::System.Data.CommandType.Text; - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")] - [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Fill, true)] - public virtual int Fill(DataSet1.PlaylistDataTable dataTable) { - this.Adapter.SelectCommand = this.CommandCollection[0]; - if ((this.ClearBeforeFill == true)) { - dataTable.Clear(); - } - int returnValue = this.Adapter.Fill(dataTable); - return returnValue; - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")] - [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Select, true)] - public virtual DataSet1.PlaylistDataTable GetData() { - this.Adapter.SelectCommand = this.CommandCollection[0]; - DataSet1.PlaylistDataTable dataTable = new DataSet1.PlaylistDataTable(); - this.Adapter.Fill(dataTable); - return dataTable; - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")] - public virtual int Update(DataSet1.PlaylistDataTable dataTable) { - return this.Adapter.Update(dataTable); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")] - public virtual int Update(DataSet1 dataSet) { - return this.Adapter.Update(dataSet, "Playlist"); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")] - public virtual int Update(global::System.Data.DataRow dataRow) { - return this.Adapter.Update(new global::System.Data.DataRow[] { - dataRow}); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")] - public virtual int Update(global::System.Data.DataRow[] dataRows) { - return this.Adapter.Update(dataRows); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")] - [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Delete, true)] - public virtual int Delete(int p1) { - this.Adapter.DeleteCommand.Parameters[0].Value = ((int)(p1)); - global::System.Data.ConnectionState previousConnectionState = this.Adapter.DeleteCommand.Connection.State; - if (((this.Adapter.DeleteCommand.Connection.State & global::System.Data.ConnectionState.Open) - != global::System.Data.ConnectionState.Open)) { - this.Adapter.DeleteCommand.Connection.Open(); - } - try { - int returnValue = this.Adapter.DeleteCommand.ExecuteNonQuery(); - return returnValue; - } - finally { - if ((previousConnectionState == global::System.Data.ConnectionState.Closed)) { - this.Adapter.DeleteCommand.Connection.Close(); - } - } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")] - [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Insert, true)] - public virtual int Insert(string p1, string p2, string p3, string p4, global::System.Nullable p5, global::System.Nullable p6) { - if ((p1 == null)) { - throw new global::System.ArgumentNullException("p1"); - } - else { - this.Adapter.InsertCommand.Parameters[0].Value = ((string)(p1)); - } - if ((p2 == null)) { - this.Adapter.InsertCommand.Parameters[1].Value = global::System.DBNull.Value; - } - else { - this.Adapter.InsertCommand.Parameters[1].Value = ((string)(p2)); - } - if ((p3 == null)) { - this.Adapter.InsertCommand.Parameters[2].Value = global::System.DBNull.Value; - } - else { - this.Adapter.InsertCommand.Parameters[2].Value = ((string)(p3)); - } - if ((p4 == null)) { - this.Adapter.InsertCommand.Parameters[3].Value = global::System.DBNull.Value; - } - else { - this.Adapter.InsertCommand.Parameters[3].Value = ((string)(p4)); - } - if ((p5.HasValue == true)) { - this.Adapter.InsertCommand.Parameters[4].Value = ((int)(p5.Value)); - } - else { - this.Adapter.InsertCommand.Parameters[4].Value = global::System.DBNull.Value; - } - if ((p6.HasValue == true)) { - this.Adapter.InsertCommand.Parameters[5].Value = ((int)(p6.Value)); - } - else { - this.Adapter.InsertCommand.Parameters[5].Value = global::System.DBNull.Value; - } - global::System.Data.ConnectionState previousConnectionState = this.Adapter.InsertCommand.Connection.State; - if (((this.Adapter.InsertCommand.Connection.State & global::System.Data.ConnectionState.Open) - != global::System.Data.ConnectionState.Open)) { - this.Adapter.InsertCommand.Connection.Open(); - } - try { - int returnValue = this.Adapter.InsertCommand.ExecuteNonQuery(); - return returnValue; - } - finally { - if ((previousConnectionState == global::System.Data.ConnectionState.Closed)) { - this.Adapter.InsertCommand.Connection.Close(); - } - } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")] - [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Update, true)] - public virtual int Update(string p1, string p2, string p3, string p4, global::System.Nullable p5, global::System.Nullable p6, int p7) { - if ((p1 == null)) { - throw new global::System.ArgumentNullException("p1"); - } - else { - this.Adapter.UpdateCommand.Parameters[0].Value = ((string)(p1)); - } - if ((p2 == null)) { - this.Adapter.UpdateCommand.Parameters[1].Value = global::System.DBNull.Value; - } - else { - this.Adapter.UpdateCommand.Parameters[1].Value = ((string)(p2)); - } - if ((p3 == null)) { - this.Adapter.UpdateCommand.Parameters[2].Value = global::System.DBNull.Value; - } - else { - this.Adapter.UpdateCommand.Parameters[2].Value = ((string)(p3)); - } - if ((p4 == null)) { - this.Adapter.UpdateCommand.Parameters[3].Value = global::System.DBNull.Value; - } - else { - this.Adapter.UpdateCommand.Parameters[3].Value = ((string)(p4)); - } - if ((p5.HasValue == true)) { - this.Adapter.UpdateCommand.Parameters[4].Value = ((int)(p5.Value)); - } - else { - this.Adapter.UpdateCommand.Parameters[4].Value = global::System.DBNull.Value; - } - if ((p6.HasValue == true)) { - this.Adapter.UpdateCommand.Parameters[5].Value = ((int)(p6.Value)); - } - else { - this.Adapter.UpdateCommand.Parameters[5].Value = global::System.DBNull.Value; - } - this.Adapter.UpdateCommand.Parameters[6].Value = ((int)(p7)); - global::System.Data.ConnectionState previousConnectionState = this.Adapter.UpdateCommand.Connection.State; - if (((this.Adapter.UpdateCommand.Connection.State & global::System.Data.ConnectionState.Open) - != global::System.Data.ConnectionState.Open)) { - this.Adapter.UpdateCommand.Connection.Open(); - } - try { - int returnValue = this.Adapter.UpdateCommand.ExecuteNonQuery(); - return returnValue; - } - finally { - if ((previousConnectionState == global::System.Data.ConnectionState.Closed)) { - this.Adapter.UpdateCommand.Connection.Close(); - } - } - } - } - - /// - ///TableAdapterManager is used to coordinate TableAdapters in the dataset to enable Hierarchical Update scenarios - /// - [global::System.ComponentModel.DesignerCategoryAttribute("code")] - [global::System.ComponentModel.ToolboxItem(true)] - [global::System.ComponentModel.DesignerAttribute("Microsoft.VSDesigner.DataSource.Design.TableAdapterManagerDesigner, Microsoft.VSD" + - "esigner, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")] - [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapterManager")] - public partial class TableAdapterManager : global::System.ComponentModel.Component { - - private UpdateOrderOption _updateOrder; - - private PlaylistTableAdapter _playlistTableAdapter; - - private bool _backupDataSetBeforeUpdate; - - private global::System.Data.IDbConnection _connection; - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - public UpdateOrderOption UpdateOrder { - get { - return this._updateOrder; - } - set { - this._updateOrder = value; - } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - [global::System.ComponentModel.EditorAttribute("Microsoft.VSDesigner.DataSource.Design.TableAdapterManagerPropertyEditor, Microso" + - "ft.VSDesigner, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3" + - "a", "System.Drawing.Design.UITypeEditor")] - public PlaylistTableAdapter PlaylistTableAdapter { - get { - return this._playlistTableAdapter; - } - set { - this._playlistTableAdapter = value; - } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - public bool BackupDataSetBeforeUpdate { - get { - return this._backupDataSetBeforeUpdate; - } - set { - this._backupDataSetBeforeUpdate = value; - } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - [global::System.ComponentModel.Browsable(false)] - public global::System.Data.IDbConnection Connection { - get { - if ((this._connection != null)) { - return this._connection; - } - if (((this._playlistTableAdapter != null) - && (this._playlistTableAdapter.Connection != null))) { - return this._playlistTableAdapter.Connection; - } - return null; - } - set { - this._connection = value; - } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - [global::System.ComponentModel.Browsable(false)] - public int TableAdapterInstanceCount { - get { - int count = 0; - if ((this._playlistTableAdapter != null)) { - count = (count + 1); - } - return count; - } - } - - /// - ///Update rows in top-down order. - /// - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - private int UpdateUpdatedRows(DataSet1 dataSet, global::System.Collections.Generic.List allChangedRows, global::System.Collections.Generic.List allAddedRows) { - int result = 0; - if ((this._playlistTableAdapter != null)) { - global::System.Data.DataRow[] updatedRows = dataSet.Playlist.Select(null, null, global::System.Data.DataViewRowState.ModifiedCurrent); - updatedRows = this.GetRealUpdatedRows(updatedRows, allAddedRows); - if (((updatedRows != null) - && (0 < updatedRows.Length))) { - result = (result + this._playlistTableAdapter.Update(updatedRows)); - allChangedRows.AddRange(updatedRows); - } - } - return result; - } - - /// - ///Insert rows in top-down order. - /// - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - private int UpdateInsertedRows(DataSet1 dataSet, global::System.Collections.Generic.List allAddedRows) { - int result = 0; - if ((this._playlistTableAdapter != null)) { - global::System.Data.DataRow[] addedRows = dataSet.Playlist.Select(null, null, global::System.Data.DataViewRowState.Added); - if (((addedRows != null) - && (0 < addedRows.Length))) { - result = (result + this._playlistTableAdapter.Update(addedRows)); - allAddedRows.AddRange(addedRows); - } - } - return result; - } - - /// - ///Delete rows in bottom-up order. - /// - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - private int UpdateDeletedRows(DataSet1 dataSet, global::System.Collections.Generic.List allChangedRows) { - int result = 0; - if ((this._playlistTableAdapter != null)) { - global::System.Data.DataRow[] deletedRows = dataSet.Playlist.Select(null, null, global::System.Data.DataViewRowState.Deleted); - if (((deletedRows != null) - && (0 < deletedRows.Length))) { - result = (result + this._playlistTableAdapter.Update(deletedRows)); - allChangedRows.AddRange(deletedRows); - } - } - return result; - } - - /// - ///Remove inserted rows that become updated rows after calling TableAdapter.Update(inserted rows) first - /// - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - private global::System.Data.DataRow[] GetRealUpdatedRows(global::System.Data.DataRow[] updatedRows, global::System.Collections.Generic.List allAddedRows) { - if (((updatedRows == null) - || (updatedRows.Length < 1))) { - return updatedRows; - } - if (((allAddedRows == null) - || (allAddedRows.Count < 1))) { - return updatedRows; - } - global::System.Collections.Generic.List realUpdatedRows = new global::System.Collections.Generic.List(); - for (int i = 0; (i < updatedRows.Length); i = (i + 1)) { - global::System.Data.DataRow row = updatedRows[i]; - if ((allAddedRows.Contains(row) == false)) { - realUpdatedRows.Add(row); - } - } - return realUpdatedRows.ToArray(); - } - - /// - ///Update all changes to the dataset. - /// - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - public virtual int UpdateAll(DataSet1 dataSet) { - if ((dataSet == null)) { - throw new global::System.ArgumentNullException("dataSet"); - } - if ((dataSet.HasChanges() == false)) { - return 0; - } - if (((this._playlistTableAdapter != null) - && (this.MatchTableAdapterConnection(this._playlistTableAdapter.Connection) == false))) { - throw new global::System.ArgumentException("All TableAdapters managed by a TableAdapterManager must use the same connection s" + - "tring."); - } - global::System.Data.IDbConnection workConnection = this.Connection; - if ((workConnection == null)) { - throw new global::System.ApplicationException("TableAdapterManager contains no connection information. Set each TableAdapterMana" + - "ger TableAdapter property to a valid TableAdapter instance."); - } - bool workConnOpened = false; - if (((workConnection.State & global::System.Data.ConnectionState.Broken) - == global::System.Data.ConnectionState.Broken)) { - workConnection.Close(); - } - if ((workConnection.State == global::System.Data.ConnectionState.Closed)) { - workConnection.Open(); - workConnOpened = true; - } - global::System.Data.IDbTransaction workTransaction = workConnection.BeginTransaction(); - if ((workTransaction == null)) { - throw new global::System.ApplicationException("The transaction cannot begin. The current data connection does not support transa" + - "ctions or the current state is not allowing the transaction to begin."); - } - global::System.Collections.Generic.List allChangedRows = new global::System.Collections.Generic.List(); - global::System.Collections.Generic.List allAddedRows = new global::System.Collections.Generic.List(); - global::System.Collections.Generic.List adaptersWithAcceptChangesDuringUpdate = new global::System.Collections.Generic.List(); - global::System.Collections.Generic.Dictionary revertConnections = new global::System.Collections.Generic.Dictionary(); - int result = 0; - global::System.Data.DataSet backupDataSet = null; - if (this.BackupDataSetBeforeUpdate) { - backupDataSet = new global::System.Data.DataSet(); - backupDataSet.Merge(dataSet); - } - try { - // ---- Prepare for update ----------- - // - if ((this._playlistTableAdapter != null)) { - revertConnections.Add(this._playlistTableAdapter, this._playlistTableAdapter.Connection); - this._playlistTableAdapter.Connection = ((global::System.Data.SqlServerCe.SqlCeConnection)(workConnection)); - this._playlistTableAdapter.Transaction = ((global::System.Data.SqlServerCe.SqlCeTransaction)(workTransaction)); - if (this._playlistTableAdapter.Adapter.AcceptChangesDuringUpdate) { - this._playlistTableAdapter.Adapter.AcceptChangesDuringUpdate = false; - adaptersWithAcceptChangesDuringUpdate.Add(this._playlistTableAdapter.Adapter); - } - } - // - //---- Perform updates ----------- - // - if ((this.UpdateOrder == UpdateOrderOption.UpdateInsertDelete)) { - result = (result + this.UpdateUpdatedRows(dataSet, allChangedRows, allAddedRows)); - result = (result + this.UpdateInsertedRows(dataSet, allAddedRows)); - } - else { - result = (result + this.UpdateInsertedRows(dataSet, allAddedRows)); - result = (result + this.UpdateUpdatedRows(dataSet, allChangedRows, allAddedRows)); - } - result = (result + this.UpdateDeletedRows(dataSet, allChangedRows)); - // - //---- Commit updates ----------- - // - workTransaction.Commit(); - if ((0 < allAddedRows.Count)) { - global::System.Data.DataRow[] rows = new System.Data.DataRow[allAddedRows.Count]; - allAddedRows.CopyTo(rows); - for (int i = 0; (i < rows.Length); i = (i + 1)) { - global::System.Data.DataRow row = rows[i]; - row.AcceptChanges(); - } - } - if ((0 < allChangedRows.Count)) { - global::System.Data.DataRow[] rows = new System.Data.DataRow[allChangedRows.Count]; - allChangedRows.CopyTo(rows); - for (int i = 0; (i < rows.Length); i = (i + 1)) { - global::System.Data.DataRow row = rows[i]; - row.AcceptChanges(); - } - } - } - catch (global::System.Exception ex) { - workTransaction.Rollback(); - // ---- Restore the dataset ----------- - if (this.BackupDataSetBeforeUpdate) { - global::System.Diagnostics.Debug.Assert((backupDataSet != null)); - dataSet.Clear(); - dataSet.Merge(backupDataSet); - } - else { - if ((0 < allAddedRows.Count)) { - global::System.Data.DataRow[] rows = new System.Data.DataRow[allAddedRows.Count]; - allAddedRows.CopyTo(rows); - for (int i = 0; (i < rows.Length); i = (i + 1)) { - global::System.Data.DataRow row = rows[i]; - row.AcceptChanges(); - row.SetAdded(); - } - } - } - throw ex; - } - finally { - if (workConnOpened) { - workConnection.Close(); - } - if ((this._playlistTableAdapter != null)) { - this._playlistTableAdapter.Connection = ((global::System.Data.SqlServerCe.SqlCeConnection)(revertConnections[this._playlistTableAdapter])); - this._playlistTableAdapter.Transaction = null; - } - if ((0 < adaptersWithAcceptChangesDuringUpdate.Count)) { - global::System.Data.Common.DataAdapter[] adapters = new System.Data.Common.DataAdapter[adaptersWithAcceptChangesDuringUpdate.Count]; - adaptersWithAcceptChangesDuringUpdate.CopyTo(adapters); - for (int i = 0; (i < adapters.Length); i = (i + 1)) { - global::System.Data.Common.DataAdapter adapter = adapters[i]; - adapter.AcceptChangesDuringUpdate = true; - } - } - } - return result; - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - protected virtual void SortSelfReferenceRows(global::System.Data.DataRow[] rows, global::System.Data.DataRelation relation, bool childFirst) { - global::System.Array.Sort(rows, new SelfReferenceComparer(relation, childFirst)); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - protected virtual bool MatchTableAdapterConnection(global::System.Data.IDbConnection inputConnection) { - if ((this._connection != null)) { - return true; - } - if (((this.Connection == null) - || (inputConnection == null))) { - return true; - } - if (string.Equals(this.Connection.ConnectionString, inputConnection.ConnectionString, global::System.StringComparison.Ordinal)) { - return true; - } - return false; - } - - /// - ///Update Order Option - /// - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - public enum UpdateOrderOption { - - InsertUpdateDelete = 0, - - UpdateInsertDelete = 1, - } - - /// - ///Used to sort self-referenced table's rows - /// - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - private class SelfReferenceComparer : object, global::System.Collections.Generic.IComparer { - - private global::System.Data.DataRelation _relation; - - private int _childFirst; - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - internal SelfReferenceComparer(global::System.Data.DataRelation relation, bool childFirst) { - this._relation = relation; - if (childFirst) { - this._childFirst = -1; - } - else { - this._childFirst = 1; - } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - private global::System.Data.DataRow GetRoot(global::System.Data.DataRow row, out int distance) { - global::System.Diagnostics.Debug.Assert((row != null)); - global::System.Data.DataRow root = row; - distance = 0; - - global::System.Collections.Generic.IDictionary traversedRows = new global::System.Collections.Generic.Dictionary(); - traversedRows[row] = row; - - global::System.Data.DataRow parent = row.GetParentRow(this._relation, global::System.Data.DataRowVersion.Default); - for ( - ; ((parent != null) - && (traversedRows.ContainsKey(parent) == false)); - ) { - distance = (distance + 1); - root = parent; - traversedRows[parent] = parent; - parent = parent.GetParentRow(this._relation, global::System.Data.DataRowVersion.Default); - } - - if ((distance == 0)) { - traversedRows.Clear(); - traversedRows[row] = row; - parent = row.GetParentRow(this._relation, global::System.Data.DataRowVersion.Original); - for ( - ; ((parent != null) - && (traversedRows.ContainsKey(parent) == false)); - ) { - distance = (distance + 1); - root = parent; - traversedRows[parent] = parent; - parent = parent.GetParentRow(this._relation, global::System.Data.DataRowVersion.Original); - } - } - - return root; - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] - public int Compare(global::System.Data.DataRow row1, global::System.Data.DataRow row2) { - if (object.ReferenceEquals(row1, row2)) { - return 0; - } - if ((row1 == null)) { - return -1; - } - if ((row2 == null)) { - return 1; - } - - int distance1 = 0; - global::System.Data.DataRow root1 = this.GetRoot(row1, out distance1); - - int distance2 = 0; - global::System.Data.DataRow root2 = this.GetRoot(row2, out distance2); - - if (object.ReferenceEquals(root1, root2)) { - return (this._childFirst * distance1.CompareTo(distance2)); - } - else { - global::System.Diagnostics.Debug.Assert(((root1.Table != null) - && (root2.Table != null))); - if ((root1.Table.Rows.IndexOf(root1) < root2.Table.Rows.IndexOf(root2))) { - return -1; - } - else { - return 1; - } - } - } - } - } -} - -#pragma warning restore 1591 \ No newline at end of file diff --git a/CUEPlayer/Output.cs b/CUEPlayer/Output.cs index 1143556..ac45b46 100644 --- a/CUEPlayer/Output.cs +++ b/CUEPlayer/Output.cs @@ -11,7 +11,7 @@ namespace CUEPlayer { public partial class Output : Form { - private IWavePlayer _player; + private CUETools.Codecs.CoreAudio.IWavePlayer _player; private AudioBuffer resampled; private SOXResampler _resampler; private MMDevice _device; diff --git a/CUEPlayer/Properties/Resources.Designer.cs b/CUEPlayer/Properties/Resources.Designer.cs index 129754a..5d5c3ef 100644 --- a/CUEPlayer/Properties/Resources.Designer.cs +++ b/CUEPlayer/Properties/Resources.Designer.cs @@ -1,7 +1,7 @@ //------------------------------------------------------------------------------ // // This code was generated by a tool. -// Runtime Version:4.0.30319.239 +// Runtime Version:4.0.30319.42000 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. @@ -19,7 +19,7 @@ namespace CUEPlayer.Properties { // class via a tool like ResGen or Visual Studio. // To add or remove a member, edit your .ResX file then rerun ResGen // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] internal class Resources { @@ -60,6 +60,9 @@ namespace CUEPlayer.Properties { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// internal static System.Drawing.Bitmap cog { get { object obj = ResourceManager.GetObject("cog", resourceCulture); @@ -67,6 +70,9 @@ namespace CUEPlayer.Properties { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// internal static System.Drawing.Bitmap control_eject { get { object obj = ResourceManager.GetObject("control_eject", resourceCulture); @@ -74,6 +80,9 @@ namespace CUEPlayer.Properties { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// internal static System.Drawing.Bitmap control_eject_blue { get { object obj = ResourceManager.GetObject("control_eject_blue", resourceCulture); @@ -81,6 +90,9 @@ namespace CUEPlayer.Properties { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// internal static System.Drawing.Bitmap control_end_blue { get { object obj = ResourceManager.GetObject("control_end_blue", resourceCulture); @@ -88,6 +100,9 @@ namespace CUEPlayer.Properties { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// internal static System.Drawing.Bitmap control_equalizer_blue { get { object obj = ResourceManager.GetObject("control_equalizer_blue", resourceCulture); @@ -95,6 +110,9 @@ namespace CUEPlayer.Properties { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// internal static System.Drawing.Bitmap control_fastforward_blue { get { object obj = ResourceManager.GetObject("control_fastforward_blue", resourceCulture); @@ -102,6 +120,9 @@ namespace CUEPlayer.Properties { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// internal static System.Drawing.Bitmap control_pause_blue { get { object obj = ResourceManager.GetObject("control_pause_blue", resourceCulture); @@ -109,6 +130,9 @@ namespace CUEPlayer.Properties { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// internal static System.Drawing.Bitmap control_play_blue { get { object obj = ResourceManager.GetObject("control_play_blue", resourceCulture); @@ -116,6 +140,9 @@ namespace CUEPlayer.Properties { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// internal static System.Drawing.Bitmap control_repeat_blue { get { object obj = ResourceManager.GetObject("control_repeat_blue", resourceCulture); @@ -123,6 +150,9 @@ namespace CUEPlayer.Properties { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// internal static System.Drawing.Bitmap control_rewind_blue { get { object obj = ResourceManager.GetObject("control_rewind_blue", resourceCulture); @@ -130,6 +160,9 @@ namespace CUEPlayer.Properties { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// internal static System.Drawing.Bitmap control_start_blue { get { object obj = ResourceManager.GetObject("control_start_blue", resourceCulture); @@ -137,6 +170,9 @@ namespace CUEPlayer.Properties { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// internal static System.Drawing.Bitmap control_stop_blue { get { object obj = ResourceManager.GetObject("control_stop_blue", resourceCulture); @@ -144,6 +180,9 @@ namespace CUEPlayer.Properties { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// internal static System.Drawing.Bitmap ctdb { get { object obj = ResourceManager.GetObject("ctdb", resourceCulture); @@ -151,6 +190,9 @@ namespace CUEPlayer.Properties { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// internal static System.Drawing.Bitmap sound { get { object obj = ResourceManager.GetObject("sound", resourceCulture); @@ -158,6 +200,9 @@ namespace CUEPlayer.Properties { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// internal static System.Drawing.Bitmap sound_mute { get { object obj = ResourceManager.GetObject("sound_mute", resourceCulture); @@ -165,6 +210,9 @@ namespace CUEPlayer.Properties { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// internal static System.Drawing.Bitmap transmit_blue { get { object obj = ResourceManager.GetObject("transmit_blue", resourceCulture); diff --git a/CUEPlayer/Properties/Settings.Designer.cs b/CUEPlayer/Properties/Settings.Designer.cs index 2cf71d7..ab84620 100644 --- a/CUEPlayer/Properties/Settings.Designer.cs +++ b/CUEPlayer/Properties/Settings.Designer.cs @@ -1,7 +1,7 @@ //------------------------------------------------------------------------------ // // This code was generated by a tool. -// Runtime Version:4.0.30319.239 +// Runtime Version:4.0.30319.42000 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. @@ -12,7 +12,7 @@ namespace CUEPlayer.Properties { [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.5.0.0")] internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); diff --git a/CUEPlayer/app.config b/CUEPlayer/app.config index d979376..ab7a041 100644 --- a/CUEPlayer/app.config +++ b/CUEPlayer/app.config @@ -1,15 +1,13 @@ - + - + - \ No newline at end of file + diff --git a/CUERipper.WPF/App.xaml b/CUERipper.WPF/App.xaml new file mode 100644 index 0000000..2d7edc7 --- /dev/null +++ b/CUERipper.WPF/App.xaml @@ -0,0 +1,8 @@ + + + + + diff --git a/CUERipper.WPF/App.xaml.cs b/CUERipper.WPF/App.xaml.cs new file mode 100644 index 0000000..81d9cd8 --- /dev/null +++ b/CUERipper.WPF/App.xaml.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Configuration; +using System.Data; +using System.Linq; +using System.Windows; + +namespace CUERipper.WPF +{ + /// + /// Interaction logic for App.xaml + /// + public partial class App : Application + { + } +} diff --git a/CUERipper.WPF/CUERipper.WPF.csproj b/CUERipper.WPF/CUERipper.WPF.csproj new file mode 100644 index 0000000..08e3fcf --- /dev/null +++ b/CUERipper.WPF/CUERipper.WPF.csproj @@ -0,0 +1,158 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {2D8D7A03-DFFA-44EF-9299-8BB56D122245} + WinExe + Properties + CUERipper.WPF + CUERipper.WPF + v4.0 + 512 + {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + 4 + + + + + + + 3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + false + ..\bin\Debug\net40\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + ..\bin\Release\net40\ + TRACE + prompt + 4 + + + + 3.0 + + + 3.0 + + + + 3.5 + + + + + 3.5 + + + 3.5 + + + + + + + + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + + + App.xaml + Code + + + Window1.xaml + Code + + + + + Code + + + True + True + Resources.resx + + + True + Settings.settings + True + + + ResXFileCodeGenerator + Resources.Designer.cs + + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + + + + {CA4D64E6-6544-4A29-8BA5-7DB08D50D072} + CUEControls + + + {1DD41038-D885-46C5-8DDE-E0B82F066584} + CUETools.CDImage + + + {4911BD82-49EF-4858-8B51-5394F86739A4} + CUETools.Processor + + + + + + + + + + + False + .NET Framework 3.5 SP1 + true + + + + + \ No newline at end of file diff --git a/CUETools.Codecs.CoreAudio/Properties/AssemblyInfo.cs b/CUERipper.WPF/Properties/AssemblyInfo.cs similarity index 53% rename from CUETools.Codecs.CoreAudio/Properties/AssemblyInfo.cs rename to CUERipper.WPF/Properties/AssemblyInfo.cs index d60860f..d4322cb 100644 --- a/CUETools.Codecs.CoreAudio/Properties/AssemblyInfo.cs +++ b/CUERipper.WPF/Properties/AssemblyInfo.cs @@ -1,36 +1,55 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("CUETools.Codecs.CoreAudio")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("Microsoft")] -[assembly: AssemblyProduct("CUETools.Codecs.CoreAudio")] -[assembly: AssemblyCopyright("Copyright © Microsoft 2010")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("f597837f-dd1c-4e0f-b915-0e929bf0dd35")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] +using System.Reflection; +using System.Resources; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Windows; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("CUERipper.WPF")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("CUERipper.WPF")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2010")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +//In order to begin building localizable applications, set +//CultureYouAreCodingWith in your .csproj file +//inside a . For example, if you are using US english +//in your source files, set the to en-US. Then uncomment +//the NeutralResourceLanguage attribute below. Update the "en-US" in +//the line below to match the UICulture setting in the project file. + +//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)] + + +[assembly: ThemeInfo( + ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located + //(used if a resource is not found in the page, + // or application resource dictionaries) + ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located + //(used if a resource is not found in the page, + // app, or any theme specific resource dictionaries) +)] + + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/CUERipper.WPF/Properties/Resources.Designer.cs b/CUERipper.WPF/Properties/Resources.Designer.cs new file mode 100644 index 0000000..4fd0e16 --- /dev/null +++ b/CUERipper.WPF/Properties/Resources.Designer.cs @@ -0,0 +1,63 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace CUERipper.WPF.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("CUERipper.WPF.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + } +} diff --git a/CUERipper.WPF/Properties/Resources.resx b/CUERipper.WPF/Properties/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/CUERipper.WPF/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/CUERipper.WPF/Properties/Settings.Designer.cs b/CUERipper.WPF/Properties/Settings.Designer.cs new file mode 100644 index 0000000..6269b82 --- /dev/null +++ b/CUERipper.WPF/Properties/Settings.Designer.cs @@ -0,0 +1,26 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace CUERipper.WPF.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.5.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { + return defaultInstance; + } + } + } +} diff --git a/CUERipper.WPF/Properties/Settings.settings b/CUERipper.WPF/Properties/Settings.settings new file mode 100644 index 0000000..033d7a5 --- /dev/null +++ b/CUERipper.WPF/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/CUERipper.WPF/Window1.xaml b/CUERipper.WPF/Window1.xaml new file mode 100644 index 0000000..c4e5949 --- /dev/null +++ b/CUERipper.WPF/Window1.xaml @@ -0,0 +1,95 @@ + + + + + + + + + + + + + + + + + Track + Title + Artist + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + lossless + lossy + + + image + tracks + + + + + + EAC log + + + + + + + + + + + + + + diff --git a/CUERipper.WPF/Window1.xaml.cs b/CUERipper.WPF/Window1.xaml.cs new file mode 100644 index 0000000..800845a --- /dev/null +++ b/CUERipper.WPF/Window1.xaml.cs @@ -0,0 +1,77 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Navigation; +using System.Windows.Shapes; +using System.Collections.ObjectModel; +using CUETools.CDImage; +using CUETools.Processor; + +namespace CUERipper.WPF +{ + public class DriveInfo + { + public string Name { get; set; } + public string Icon { get; set; } + } + + /// + /// Interaction logic for Window1.xaml + /// + public partial class Window1 : Window + { + private CUEControls.ShellIconMgr m_icon_mgr; + + public Window1() + { + InitializeComponent(); + m_icon_mgr = new CUEControls.ShellIconMgr(); + } + + ObservableCollection _Releases = new ObservableCollection(); + ObservableCollection _Drives = new ObservableCollection(); + public ObservableCollection Drives { get { return _Drives; } } + public ObservableCollection Releases { get { return _Releases; } } + + public static DependencyProperty SelectedDriveProperty = DependencyProperty.Register("SelectedDrive", typeof(DriveInfo), typeof(Window1)); + public DriveInfo SelectedDrive + { + get { return ((DriveInfo)(base.GetValue(SelectedDriveProperty))); } + set { base.SetValue(SelectedDriveProperty, value); } + } + + public static DependencyProperty SelectedReleaseProperty = DependencyProperty.Register("SelectedRelease", typeof(CUEMetadataEntry), typeof(Window1)); + public CUEMetadataEntry SelectedRelease + { + get { return ((CUEMetadataEntry)(base.GetValue(SelectedReleaseProperty))); } + set { base.SetValue(SelectedReleaseProperty, value); } + } + + private void Window_Loaded(object sender, RoutedEventArgs e) + { + Drives.Add(new DriveInfo { Name = "aa", Icon = "/CUERipper.WPF;component/musicbrainz.ico" }); + Drives.Add(new DriveInfo { Name = "cc", Icon = "/CUERipper.WPF;component/freedb16.png" }); + Drives.Add(new DriveInfo { Name = "ee", Icon = "ff" }); + SelectedDrive = Drives[0]; + + CDImageLayout toc = new CDImageLayout(2, 2, 1, "0 10000 20000"); + Releases.Add(new CUEMetadataEntry(toc, "/CUERipper.WPF;component/musicbrainz.ico")); + Releases[0].metadata.Artist = "Mike Oldfield"; + Releases[0].metadata.Title = "Amarok"; + Releases[0].metadata.Tracks[0].Artist = "Mike Oldfield"; + Releases[0].metadata.Tracks[0].Title = "Amarok 01"; + Releases[0].metadata.Tracks[1].Artist = "Mike Oldfield"; + Releases[0].metadata.Tracks[1].Title = "Amarok 02"; + Releases.Add(new CUEMetadataEntry(toc, "/CUERipper.WPF;component/freedb16.png")); + SelectedRelease = Releases[0]; + } + } +} diff --git a/CUERipper.WPF/app.config b/CUERipper.WPF/app.config new file mode 100644 index 0000000..f6387ff --- /dev/null +++ b/CUERipper.WPF/app.config @@ -0,0 +1,4 @@ + + + + diff --git a/CUERipper.WPF/depprop.txt b/CUERipper.WPF/depprop.txt new file mode 100644 index 0000000..1fe7d89 --- /dev/null +++ b/CUERipper.WPF/depprop.txt @@ -0,0 +1,17 @@ + //public static global::System.Workflow.ComponentModel.DependencyProperty MyPropertyProperty = DependencyProperty.Register("MyProperty", typeof(string), typeof(Window1)); + + //[System.ComponentModel.DescriptionAttribute("MyProperty")] + //[System.ComponentModel.CategoryAttribute("MyProperty Category")] + //[System.ComponentModel.BrowsableAttribute(true)] + //[System.ComponentModel.DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Visible)] + //public string MyProperty + //{ + // get + // { + // return ((string)(base.GetValue(Window1.MyPropertyProperty))); + // } + // set + // { + // base.SetValue(Window1.MyPropertyProperty, value); + // } + //} diff --git a/CUERipper.WPF/freedb16.png b/CUERipper.WPF/freedb16.png new file mode 100644 index 0000000000000000000000000000000000000000..a7ba1386e50bc8efb81ca78722124c92319b89f6 GIT binary patch literal 394 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s713g_FLn`LckQ=E&9)8i zH~d|4@!Xz^XZFo>6kW%*@>}coxO0}h$CD)+-rvvLx!XQ9eoCt6wA3Y;UeXHZ|7y)V z;ykJ1M;_0IpO^Lb)&2D4U{rbe<3*Ib{hui+Gt25#x1KbAyYG|D^&GR{ZuxFOhIyO1 z-FD8+2zV^k#l_&GyW8^ppH0VXQ^g~)C40{#vES~pzL?4E z?6{1KpXML?nhM2?!ej3)ruaTf<6-=8fO-AD1-v3`#U|1W3=9mOu6{1-oD!M<0XC`B literal 0 HcmV?d00001 diff --git a/CUERipper.WPF/musicbrainz.ico b/CUERipper.WPF/musicbrainz.ico new file mode 100644 index 0000000000000000000000000000000000000000..7942139f7dc7f5449321d2dc61ddf1fce1dc7254 GIT binary patch literal 1406 zcmZQzU}Ruq5D;KsU|`^2$Y5n)5My9q&|qL-00}8DfaEzqk{||z29bTW zKR$hCSe2H`@a6RzhQ*PI3~%l|VAxbr#c;T(gF#M5i{bFmgA6PT3=Dhr?qztmYahdb zz9|gnmakzrzj7_Z>hwH@=htp9?CI!Z*jm}ZaImqRAu=hEfti7UK~qwiVc-7!3{MXq zWmuO}%<$seMTYBJwll2BEMPb>Zz03AZ95ruR5dW1ZSQ3Wi;HErbm}<6iq*>*OjXnv zPPTS4oSQU*p~TaVVR2Cz!}0b$hV}Vn3|q=;89I|Q7*ynC89I78879x0!!Tpf0tPin zDTYY}#S9i|>I_#VOlR0x-^y^fsgprMM}W+E#{!uxJKlX<3FF4{tHN z|NM-Bft!>}_mkC<_c>u&}aVIDPRH z!{!xB8BSd~$?*8yeTL+a0EYOGAcpycWen%LCo>#vXkj?o)W)#0vXDr|L+-|etgWZbJqrj+fS}BJpcHJ;pLYn4E|2e3=C{+41wmR3@herWmqtAIm6QF z>lo7Gau}>^Eg6EH-5H*Jdc^Sl+iQj;i)J&Nzjm5o^3GkRfOHCx*=9{~63I zEg1g)|H<&>*9V4YZyqqb`|*lFnt_4A+Q5L}=+V6lU;cbzXsfAaa56Dv0Hy2P>;D-% zecTxi9o@_D|Nmcx4?o{A=o=a``~{iu;|)XijsFZ;XZ|x3T>8)8*0P2{PCzqE(!tqN1XyRh^wCCMG6TqE%HJK;~3|cwm0)lq!%m7=KC? zXKZYhC|q9Di?eD9g0BiPOdrnY+yD{~6@{rc;jH5H0$B*vZ(?G?Sv93M6(o-kno_la P)1;~aR1T6Eu^_zwcl@TF literal 0 HcmV?d00001 diff --git a/CUERipper/CUERipper.csproj b/CUERipper/CUERipper.csproj index aa3f592..5f98ddf 100644 --- a/CUERipper/CUERipper.csproj +++ b/CUERipper/CUERipper.csproj @@ -26,7 +26,7 @@ LocalIntranet Properties\app.manifest - v2.0 + v4.0 publish\ true Web @@ -48,12 +48,13 @@ false true true + true full false - ..\bin\Debug\ + ..\bin\Debug\net40\ DEBUG;TRACE prompt 4 @@ -63,7 +64,7 @@ pdbonly true - ..\bin\Release\ + ..\bin\Release\net40\ TRACE prompt 4 @@ -156,6 +157,10 @@ {6458A13A-30EF-45A9-9D58-E5031B17BEE2} CUETools.Codecs + + {c36efaa5-4f81-4a29-800d-ba866ff13bc8} + CUETools.CTDB.Types + {AA2A9A7E-45FB-4632-AD85-85B0E556F818} CUETools.CTDB diff --git a/CUERipper/Properties/Resources.Designer.cs b/CUERipper/Properties/Resources.Designer.cs index 900841a..c9a722e 100644 --- a/CUERipper/Properties/Resources.Designer.cs +++ b/CUERipper/Properties/Resources.Designer.cs @@ -1,7 +1,7 @@ //------------------------------------------------------------------------------ // // This code was generated by a tool. -// Runtime Version:4.0.30319.18033 +// Runtime Version:4.0.30319.42000 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. @@ -19,7 +19,7 @@ namespace CUERipper.Properties { // class via a tool like ResGen or Visual Studio. // To add or remove a member, edit your .ResX file then rerun ResGen // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] internal class Resources { diff --git a/CUERipper/Properties/Settings.Designer.cs b/CUERipper/Properties/Settings.Designer.cs index ffa7057..3f5be14 100644 --- a/CUERipper/Properties/Settings.Designer.cs +++ b/CUERipper/Properties/Settings.Designer.cs @@ -1,7 +1,7 @@ //------------------------------------------------------------------------------ // // This code was generated by a tool. -// Runtime Version:4.0.30319.239 +// Runtime Version:4.0.30319.42000 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. @@ -12,7 +12,7 @@ namespace CUERipper.Properties { [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.5.0.0")] internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); diff --git a/CUERipper/app.config b/CUERipper/app.config index 1c41d78..50b8ed3 100644 --- a/CUERipper/app.config +++ b/CUERipper/app.config @@ -1,8 +1,8 @@ - + - -
+ +
@@ -17,4 +17,4 @@ - \ No newline at end of file + diff --git a/CUETools.ALACEnc/App.config b/CUETools.ALACEnc/App.config index 220cf55..f6267ab 100644 --- a/CUETools.ALACEnc/App.config +++ b/CUETools.ALACEnc/App.config @@ -1,8 +1,8 @@ - + - \ No newline at end of file + diff --git a/CUETools.ALACEnc/CUETools.ALACEnc.csproj b/CUETools.ALACEnc/CUETools.ALACEnc.csproj index a28aba5..634b79e 100644 --- a/CUETools.ALACEnc/CUETools.ALACEnc.csproj +++ b/CUETools.ALACEnc/CUETools.ALACEnc.csproj @@ -1,102 +1,31 @@ - - + + - Debug - AnyCPU - 8.0.50727 - 2.0 - {8E6E1763-39AE-491D-A10F-44C8844ABA5B} - Exe - Properties - CUETools.ALACEnc + net40;net20;netcoreapp2.0 + 2.1.6.0 CUETools.ALACEnc - - - 3.5 - - - v2.0 - publish\ - true - Disk - false - Foreground - 7 - Days - false - false - true - 0 - 1.0.0.%2a - false - false - true + CUETools.ALACEnc + CUETools + Exe + A tool for encoding and decoding ALAC. + Copyright (c) 2008-2018 Grigory Chudov + Grigory Chudov + true + ..\bin\$(Configuration)\ + https://github.com/gchudov/cuetools.net + git + - - true - full - false - ..\bin\Debug\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - - - pdbonly - true - ..\bin\Release\ - TRACE - prompt - 4 - AllRules.ruleset - - - - - - - - - - - - - {F2EC7193-D5E5-4252-9803-5CEB407E910F} - CUETools.Codecs.ALAC + + + False - - {6458A13A-30EF-45A9-9D58-E5031B17BEE2} - CUETools.Codecs - - + + - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - + + - - - - - - \ No newline at end of file + + diff --git a/CUETools.ALACEnc/Properties/AssemblyInfo.cs b/CUETools.ALACEnc/Properties/AssemblyInfo.cs deleted file mode 100644 index 5b7c58a..0000000 --- a/CUETools.ALACEnc/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,33 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("CUETools.ALACEnc")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("Microsoft")] -[assembly: AssemblyProduct("CUETools.ALACEnc")] -[assembly: AssemblyCopyright("Copyright © Microsoft 2009")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("24fa1fb9-e01a-48cf-b478-f560496d1ed3")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/CUETools.ARCUE/CUETools.ARCUE.csproj b/CUETools.ARCUE/CUETools.ARCUE.csproj index 4ec8c2e..41e4ccb 100644 --- a/CUETools.ARCUE/CUETools.ARCUE.csproj +++ b/CUETools.ARCUE/CUETools.ARCUE.csproj @@ -1,102 +1,33 @@ - - + + - Debug - AnyCPU - 8.0.50727 - 2.0 - {A5A8D8FA-9E32-4010-8AAF-AE580C5AF728} + net40;netcoreapp2.0 + 2.1.6.0 + CUETools.ARCUE + CUETools.ARCUE + CUETools Exe - Properties - ArCueDotNet - ArCueDotNet - - - 3.5 - - - v2.0 - publish\ - true - Disk - false - Foreground - 7 - Days - false - false - true - 0 - 1.0.0.%2a - false - false - true + A tool for CD image verification against AccurateRip. + Copyright (c) 2008-2018 Grigory Chudov + Grigory Chudov + true + ..\bin\$(Configuration)\ + https://github.com/gchudov/cuetools.net + git + - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - - - pdbonly - true - ..\bin\Release\ - TRACE - prompt - 4 - AllRules.ruleset - - - - - - - - - - - - - {6458A13A-30EF-45A9-9D58-E5031B17BEE2} - CUETools.Codecs + + + + False - - {AA2A9A7E-45FB-4632-AD85-85B0E556F818} - CUETools.CTDB - - - {4911BD82-49EF-4858-8B51-5394F86739A4} - CUETools.Processor - - + + - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - + + + + - - - \ No newline at end of file + + diff --git a/CUETools.ARCUE/Properties/AssemblyInfo.cs b/CUETools.ARCUE/Properties/AssemblyInfo.cs deleted file mode 100644 index 151d269..0000000 --- a/CUETools.ARCUE/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,33 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("CUETools.ARCUE")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("CUETools.ARCUE")] -[assembly: AssemblyCopyright("Copyright © 2008-2010 Grigory Chudov")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("2da81ac9-8929-42c8-ae27-9431b4f71508")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -[assembly: AssemblyVersion("2.1.6.0")] -[assembly: AssemblyFileVersion("2.1.6.0")] diff --git a/CUETools.AccurateRip/CUETools.AccurateRip.csproj b/CUETools.AccurateRip/CUETools.AccurateRip.csproj index 51065c7..a62f4f0 100644 --- a/CUETools.AccurateRip/CUETools.AccurateRip.csproj +++ b/CUETools.AccurateRip/CUETools.AccurateRip.csproj @@ -1,109 +1,31 @@ - - + + - Debug - AnyCPU - 9.0.30729 - 2.0 - {5802C7E9-157E-4124-946D-70B5AE48A5A1} - Library - Properties - CUETools.AccurateRip + net40;net20;netstandard2.0 + 2.1.6.0 CUETools.AccurateRip - - - 3.5 - - - false - - - v2.0 - publish\ - true - Disk - false - Foreground - 7 - Days - false - false - true - 0 - 1.0.0.%2a - false - false - true - - - true - full - false - ..\bin\Debug\ - DEBUG;TRACE - prompt - 4 + CUETools.AccurateRip + CUETools + A library for calculating AccurateRip checksums, CRC32 and Reed-solomon codes of CD audio. + Copyright (c) 2008-2018 Grigory Chudov + Grigory Chudov true - AllRules.ruleset + ..\bin\$(Configuration)\ + https://github.com/gchudov/cuetools.net + git + - - pdbonly - true - ..\bin\Release\ - TRACE - prompt - 4 - true - AllRules.ruleset - - - - - - - - - - - - - - - {6458A13A-30EF-45A9-9D58-E5031B17BEE2} - CUETools.Codecs + + + + False - - {1DD41038-D885-46C5-8DDE-E0B82F066584} - CUETools.CDImage - - - {ECEB839C-171B-4535-958F-9899310A0342} - CUETools.Parity - - + + - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - + + + - - - \ No newline at end of file + + diff --git a/CUETools.AccurateRip/Properties/AssemblyInfo.cs b/CUETools.AccurateRip/Properties/AssemblyInfo.cs deleted file mode 100644 index e6a706c..0000000 --- a/CUETools.AccurateRip/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("CUETools.AccurateRip")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("CUETools.AccurateRip")] -[assembly: AssemblyCopyright("Copyright © 2008-2010 Grigory Chudov")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("080b79f6-6b19-417e-a1d1-afcb6e469112")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Revision and Build Numbers -// by using the '*' as shown below: -[assembly: AssemblyVersion("2.1.6.0")] -[assembly: AssemblyFileVersion("2.1.6.0")] diff --git a/CUETools.CDImage/CUETools.CDImage.csproj b/CUETools.CDImage/CUETools.CDImage.csproj index eda8258..af3defb 100644 --- a/CUETools.CDImage/CUETools.CDImage.csproj +++ b/CUETools.CDImage/CUETools.CDImage.csproj @@ -1,91 +1,19 @@ - - + + - Debug - AnyCPU - 9.0.30729 - 2.0 - {1DD41038-D885-46C5-8DDE-E0B82F066584} - Library - Properties - CUETools.CDImage + net40;net20;netstandard2.0 + 2.1.6.0 CUETools.CDImage - - - 3.5 - - - false - - - v2.0 - publish\ - true - Disk - false - Foreground - 7 - Days - false - false - true - 0 - 1.0.0.%2a - false - false - true + CUETools.CDImage + CUETools + A library for working with CD TOC. + Copyright (c) 2008-2018 Grigory Chudov + Grigory Chudov + true + ..\bin\$(Configuration)\ + https://github.com/gchudov/cuetools.net + git + - - true - full - false - ..\bin\Debug\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - - - pdbonly - true - ..\bin\Release\ - TRACE - prompt - 4 - AllRules.ruleset - - - - - - - - - - - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - - - - - \ No newline at end of file + + diff --git a/CUETools.CDImage/Properties/AssemblyInfo.cs b/CUETools.CDImage/Properties/AssemblyInfo.cs deleted file mode 100644 index 108d34b..0000000 --- a/CUETools.CDImage/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("CUETools.CDImage")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("CUETools.CDImage")] -[assembly: AssemblyCopyright("Copyright © 2008-2010 Grigory Chudov")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("3db8bfa6-d3ba-4875-b02f-ef81119eab98")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Revision and Build Numbers -// by using the '*' as shown below: -[assembly: AssemblyVersion("2.1.6.0")] -[assembly: AssemblyFileVersion("2.1.6.0")] diff --git a/CUETools.CDRepair/CUETools.CDRepair.csproj b/CUETools.CDRepair/CUETools.CDRepair.csproj index 7f0ab30..c945320 100644 --- a/CUETools.CDRepair/CUETools.CDRepair.csproj +++ b/CUETools.CDRepair/CUETools.CDRepair.csproj @@ -10,7 +10,7 @@ Properties CUETools.CDRepair CUETools.CDRepair - v2.0 + v4.0 512 diff --git a/CUETools.CLParity/CLParity.cs b/CUETools.CLParity/CLParity.cs new file mode 100644 index 0000000..2c12892 --- /dev/null +++ b/CUETools.CLParity/CLParity.cs @@ -0,0 +1,664 @@ +/** + * CUETools.CLParity: Reed-Solomon (32 bit) using OpenCL + * Copyright (c) 2009 Gregory S. Chudov + * + * 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 Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +using System; +using System.ComponentModel; +using System.Collections.Generic; +using System.IO; +using System.Security.Cryptography; +using System.Threading; +using System.Text; +using System.Runtime.InteropServices; +using CUETools.Codecs; +using OpenCLNet; + +namespace CUETools.CLParity +{ + public class CLParitySettings + { + public CLParitySettings() + { + this.MappedMemory = false; + this.GroupSize = 128; + this.DeviceType = OpenCLDeviceType.GPU; + } + + [DefaultValue(false)] + [SRDescription(typeof(Properties.Resources), "DescriptionMappedMemory")] + public bool MappedMemory { get; set; } + + [TypeConverter(typeof(CLParitySettingsGroupSizeConverter))] + [DefaultValue(128)] + [SRDescription(typeof(Properties.Resources), "DescriptionGroupSize")] + public int GroupSize { get; set; } + + [SRDescription(typeof(Properties.Resources), "DescriptionDefines")] + public string Defines { get; set; } + + [TypeConverter(typeof(CLParitySettingsPlatformConverter))] + [SRDescription(typeof(Properties.Resources), "DescriptionPlatform")] + public string Platform { get; set; } + + [DefaultValue(OpenCLDeviceType.GPU)] + [SRDescription(typeof(Properties.Resources), "DescriptionDeviceType")] + public OpenCLDeviceType DeviceType { get; set; } + } + + public class CLParitySettingsPlatformConverter : TypeConverter + { + public override bool GetStandardValuesSupported(ITypeDescriptorContext context) + { + return true; + } + + public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context) + { + var res = new List(); + foreach (var p in OpenCL.GetPlatforms()) + res.Add(p.Name); + return new StandardValuesCollection(res); + } + } + + public class CLParitySettingsGroupSizeConverter : TypeConverter + { + public override bool GetStandardValuesSupported(ITypeDescriptorContext context) + { + return true; + } + + public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context) + { + return new StandardValuesCollection(new int[] { 64, 128, 256 }); + } + } + + public enum OpenCLDeviceType : ulong + { + CPU = DeviceType.CPU, + GPU = DeviceType.GPU + } + + //[AudioEncoderClass("CLParity", typeof(CLParitySettings))] + public class CLParityWriter : IAudioDest + { + long _position; + + // total stream samples + // if 0, stream length is unknown + int sample_count = -1; + + TimeSpan _userProcessorTime; + + int samplesInBuffer = 0; + + bool inited = false; + + OpenCLManager OCLMan; + Program openCLProgram; + + CLParityTask task1; + CLParityTask task2; + + int npar, stride, stridesPerTask; + + AudioPCMConfig _pcm; + + public CLParityWriter(string path, Stream IO, AudioPCMConfig pcm) + { + _pcm = pcm; + if (pcm.BitsPerSample != 16) + throw new Exception("Bits per sample must be 16."); + if (pcm.ChannelCount != 2) + throw new Exception("ChannelCount must be 2."); + npar = 256; + stride = 1; + } + + public CLParityWriter(string path, AudioPCMConfig pcm) + : this(path, null, pcm) + { + } + + internal CLParitySettings _settings = new CLParitySettings(); + + public object Settings + { + get + { + return _settings; + } + set + { + if (value as CLParitySettings == null) + throw new Exception("Unsupported options " + value); + _settings = value as CLParitySettings; + } + } + + //[DllImport("kernel32.dll")] + //static extern bool GetThreadTimes(IntPtr hThread, out long lpCreationTime, out long lpExitTime, out long lpKernelTime, out long lpUserTime); + //[DllImport("kernel32.dll")] + //static extern IntPtr GetCurrentThread(); + + void DoClose() + { + if (inited) + { + int strideCount = samplesInBuffer / stride; + if (strideCount > 0) + do_output_frames(strideCount); + if (samplesInBuffer > 0) + throw new Exception(string.Format("samplesInBuffer % stride != 0")); + if (task2.strideCount > 0) + { + task2.openCLCQ.Finish(); // cuda.SynchronizeStream(task2.stream); + task2.strideCount = 0; + } + + task1.Dispose(); + task2.Dispose(); + openCLProgram.Dispose(); + OCLMan.Dispose(); + inited = false; + } + } + + public void Close() + { + DoClose(); + if (sample_count > 0 && _position != sample_count) + throw new Exception(string.Format("Samples written differs from the expected sample count. Expected {0}, got {1}.", sample_count, _position)); + } + + public void Delete() + { + if (inited) + { + task1.Dispose(); + task2.Dispose(); + openCLProgram.Dispose(); + OCLMan.Dispose(); + inited = false; + } + } + + public long Position + { + get + { + return _position; + } + } + + public long FinalSampleCount + { + set { sample_count = (int)value; } + } + + public TimeSpan UserProcessorTime + { + get { return _userProcessorTime; } + } + + public AudioPCMConfig PCM + { + get { return _pcm; } + } + + public unsafe void InitTasks() + { + if (!inited) + { + if (OpenCL.NumberOfPlatforms < 1) + throw new Exception("no opencl platforms found"); + + int groupSize = _settings.DeviceType == OpenCLDeviceType.CPU ? 1 : _settings.GroupSize; + OCLMan = new OpenCLManager(); + // Attempt to save binaries after compilation, as well as load precompiled binaries + // to avoid compilation. Usually you'll want this to be true. + OCLMan.AttemptUseBinaries = true; // true; + // Attempt to compile sources. This should probably be true for almost all projects. + // Setting it to false means that when you attempt to compile "mysource.cl", it will + // only scan the precompiled binary directory for a binary corresponding to a source + // with that name. There's a further restriction that the compiled binary also has to + // use the same Defines and BuildOptions + OCLMan.AttemptUseSource = true; + // Binary and source paths + // This is where we store our sources and where compiled binaries are placed + //OCLMan.BinaryPath = @"OpenCL\bin"; + //OCLMan.SourcePath = @"OpenCL\src"; + // If true, RequireImageSupport will filter out any devices without image support + // In this project we don't need image support though, so we set it to false + OCLMan.RequireImageSupport = false; + // The BuildOptions string is passed directly to clBuild and can be used to do debug builds etc + OCLMan.BuildOptions = ""; + OCLMan.SourcePath = System.IO.Path.GetDirectoryName(GetType().Assembly.Location); + OCLMan.BinaryPath = System.IO.Path.Combine(System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "CUE Tools"), "OpenCL"); + int platformId = 0; + if (_settings.Platform != null) + { + platformId = -1; + string platforms = ""; + for (int i = 0; i < OpenCL.NumberOfPlatforms; i++) + { + var platform = OpenCL.GetPlatform(i); + platforms += " \"" + platform.Name + "\""; + if (platform.Name.Equals(_settings.Platform, StringComparison.InvariantCultureIgnoreCase)) + { + platformId = i; + break; + } + } + if (platformId < 0) + throw new Exception("unknown platform \"" + _settings.Platform + "\". Platforms available:" + platforms); + } + OCLMan.CreateDefaultContext(platformId, (DeviceType)_settings.DeviceType); + + this.stridesPerTask = (int)OCLMan.Context.Devices[0].MaxComputeUnits * npar * 8; + + // The Defines string gets prepended to any and all sources that are compiled + // and serve as a convenient way to pass configuration information to the compilation process + OCLMan.Defines = + "#define GROUP_SIZE " + groupSize.ToString() + "\n" + + "#define CLPARITY_VERSION \"" + vendor_string + "\"\n" + +#if DEBUG + "#define DEBUG\n" + +#endif + (_settings.DeviceType == OpenCLDeviceType.CPU ? "#define CLPARITY_CPU\n" : "") + + _settings.Defines + "\n"; + + var exts = new string[] { "cl_khr_local_int32_base_atomics", "cl_khr_local_int32_extended_atomics", "cl_khr_fp64", "cl_amd_fp64" }; + foreach (string extension in exts) + if (OCLMan.Context.Devices[0].Extensions.Contains(extension)) + { + OCLMan.Defines += "#pragma OPENCL EXTENSION " + extension + ": enable\n"; + OCLMan.Defines += "#define HAVE_" + extension + "\n"; + } + + try + { + openCLProgram = OCLMan.CompileFile("parity.cl"); + } + catch (OpenCLBuildException ex) + { + string buildLog = ex.BuildLogs[0]; + throw ex; + } + //using (Stream kernel = GetType().Assembly.GetManifestResourceStream(GetType(), "parity.cl")) + //using (StreamReader sr = new StreamReader(kernel)) + //{ + // try + // { + // openCLProgram = OCLMan.CompileSource(sr.ReadToEnd()); ; + // } + // catch (OpenCLBuildException ex) + // { + // string buildLog = ex.BuildLogs[0]; + // throw ex; + // } + //} +#if TTTTKJHSKJH + var openCLPlatform = OpenCL.GetPlatform(0); + openCLContext = openCLPlatform.CreateDefaultContext(); + using (Stream kernel = GetType().Assembly.GetManifestResourceStream(GetType(), "parity.cl")) + using (StreamReader sr = new StreamReader(kernel)) + openCLProgram = openCLContext.CreateProgramWithSource(sr.ReadToEnd()); + try + { + openCLProgram.Build(); + } + catch (OpenCLException) + { + string buildLog = openCLProgram.GetBuildLog(openCLProgram.Devices[0]); + throw; + } +#endif + + task1 = new CLParityTask(openCLProgram, this, groupSize, this.npar, this.stride, this.stridesPerTask); + task2 = new CLParityTask(openCLProgram, this, groupSize, this.npar, this.stride, this.stridesPerTask); + inited = true; + } + } + + public unsafe void Write(AudioBuffer buff) + { + InitTasks(); + buff.Prepare(this); + int pos = 0; + while (pos < buff.Length) + { + int block = Math.Min(buff.Length - pos, stride * stridesPerTask - samplesInBuffer); + + fixed (byte* buf = buff.Bytes) + AudioSamples.MemCpy(((byte*)task1.clSamplesBytesPtr) + samplesInBuffer * _pcm.BlockAlign, buf + pos * _pcm.BlockAlign, block * _pcm.BlockAlign); + + samplesInBuffer += block; + pos += block; + + int strideCount = samplesInBuffer / stride; + if (strideCount >= stridesPerTask) + do_output_frames(strideCount); + } + } + + public unsafe void do_output_frames(int strideCount) + { + task1.strideCount = strideCount; + if (!task1.UseMappedMemory) + task1.openCLCQ.EnqueueWriteBuffer(task1.clSamplesBytes, false, 0, sizeof(int) * stride * strideCount, task1.clSamplesBytesPtr); + //task.openCLCQ.EnqueueUnmapMemObject(task.clSamplesBytes, task.clSamplesBytes.HostPtr); + //task.openCLCQ.EnqueueMapBuffer(task.clSamplesBytes, true, MapFlags.WRITE, 0, task.samplesBufferLen / 2); + task1.EnqueueKernels(); + if (task2.strideCount > 0) + task2.openCLCQ.Finish(); + int bs = stride * strideCount; + samplesInBuffer -= bs; + if (samplesInBuffer > 0) + AudioSamples.MemCpy( + ((byte*)task2.clSamplesBytesPtr), + ((byte*)task1.clSamplesBytesPtr) + bs * _pcm.BlockAlign, + samplesInBuffer * _pcm.BlockAlign); + CLParityTask tmp = task1; + task1 = task2; + task2 = tmp; + task1.strideCount = 0; + } + + public string Path { get { return null; } } + + public static readonly string vendor_string = "CLParity#2.1.6"; + } + + internal class CLParityTask + { + Program openCLProgram; + public CommandQueue openCLCQ; + public Kernel reedSolomonInit; + public Kernel reedSolomonInitGx; + public Kernel reedSolomonA; + public Kernel reedSolomonB; + public Kernel reedSolomon; + public Kernel reedSolomonDecodeInit; + public Kernel reedSolomonDecode; + public Kernel chienSearch; + public Mem clSamplesBytes; + public Mem clExp; + public Mem clEncodeGx0; + public Mem clEncodeGx1; + public Mem clParity0; + public Mem clParity1; + public Mem clSigma; + public Mem clWkOut; + + public Mem clSamplesBytesPinned; + public Mem clExpPinned; + public Mem clParity0Pinned; + public Mem clParity1Pinned; + + public IntPtr clSamplesBytesPtr; + public IntPtr clExpPtr; + public IntPtr clParity0Ptr; + public IntPtr clParity1Ptr; + + public int[] samplesBuffer; + public int strideCount = 0; + public int npar; + public int stride; + public int maxStridesCount; + + public Thread workThread = null; + public Exception exception = null; + public bool done = false; + public bool exit = false; + + public int groupSize = 128; + public CLParityWriter writer; + public bool UseMappedMemory = false; + + unsafe public CLParityTask(Program _openCLProgram, CLParityWriter writer, int groupSize, int npar, int stride, int maxStridesCount) + { + this.UseMappedMemory = writer._settings.MappedMemory || writer._settings.DeviceType == OpenCLDeviceType.CPU; + this.groupSize = groupSize; + this.writer = writer; + openCLProgram = _openCLProgram; +#if DEBUG + var prop = CommandQueueProperties.PROFILING_ENABLE; +#else + var prop = CommandQueueProperties.NONE; +#endif + openCLCQ = openCLProgram.Context.CreateCommandQueue(openCLProgram.Context.Devices[0], prop); + + this.npar = npar; + this.stride = stride; + this.maxStridesCount = maxStridesCount; + + int samplesBufferLen = this.maxStridesCount * this.stride * sizeof(int); + int parityLength = (this.npar + 1) * sizeof(int); + int encodeGxLength = (this.npar + this.groupSize) * sizeof(int); + int expLength = this.npar * sizeof(int); + int sigmaLength = this.npar * sizeof(int); + //int wkOutLength = this.npar * sizeof(int); + + if (!this.UseMappedMemory) + { + clSamplesBytes = openCLProgram.Context.CreateBuffer(MemFlags.READ_WRITE, samplesBufferLen); + clParity0 = openCLProgram.Context.CreateBuffer(MemFlags.READ_WRITE, parityLength); + clParity1 = openCLProgram.Context.CreateBuffer(MemFlags.READ_WRITE, parityLength); + clExp = openCLProgram.Context.CreateBuffer(MemFlags.READ_WRITE, expLength); + + clSamplesBytesPinned = openCLProgram.Context.CreateBuffer(MemFlags.READ_WRITE | MemFlags.ALLOC_HOST_PTR, samplesBufferLen); + clParity0Pinned = openCLProgram.Context.CreateBuffer(MemFlags.READ_WRITE | MemFlags.ALLOC_HOST_PTR, parityLength); + clParity1Pinned = openCLProgram.Context.CreateBuffer(MemFlags.READ_WRITE | MemFlags.ALLOC_HOST_PTR, parityLength); + clExpPinned = openCLProgram.Context.CreateBuffer(MemFlags.READ_WRITE | MemFlags.ALLOC_HOST_PTR, expLength); + + clSamplesBytesPtr = openCLCQ.EnqueueMapBuffer(clSamplesBytesPinned, true, MapFlags.READ_WRITE, 0, samplesBufferLen); + clParity0Ptr = openCLCQ.EnqueueMapBuffer(clParity0Pinned, true, MapFlags.READ_WRITE, 0, parityLength); + clParity1Ptr = openCLCQ.EnqueueMapBuffer(clParity1Pinned, true, MapFlags.READ_WRITE, 0, parityLength); + clExpPtr = openCLCQ.EnqueueMapBuffer(clExpPinned, true, MapFlags.READ_WRITE, 0, expLength); + } + else + { + clSamplesBytes = openCLProgram.Context.CreateBuffer(MemFlags.READ_WRITE | MemFlags.ALLOC_HOST_PTR, samplesBufferLen); + clParity0 = openCLProgram.Context.CreateBuffer(MemFlags.READ_WRITE | MemFlags.ALLOC_HOST_PTR, parityLength); + clParity1 = openCLProgram.Context.CreateBuffer(MemFlags.READ_WRITE | MemFlags.ALLOC_HOST_PTR, parityLength); + clExp = openCLProgram.Context.CreateBuffer(MemFlags.READ_WRITE | MemFlags.ALLOC_HOST_PTR, expLength); + + clSamplesBytesPtr = openCLCQ.EnqueueMapBuffer(clSamplesBytes, true, MapFlags.READ_WRITE, 0, samplesBufferLen); + clParity0Ptr = openCLCQ.EnqueueMapBuffer(clParity0, true, MapFlags.READ_WRITE, 0, parityLength); + clParity1Ptr = openCLCQ.EnqueueMapBuffer(clParity1, true, MapFlags.READ_WRITE, 0, parityLength); + clExpPtr = openCLCQ.EnqueueMapBuffer(clExp, true, MapFlags.READ_WRITE, 0, expLength); + + //clSamplesBytesPtr = clSamplesBytes.HostPtr; + //clResidualPtr = clResidual.HostPtr; + //clBestRiceParamsPtr = clBestRiceParams.HostPtr; + //clResidualTasksPtr = clResidualTasks.HostPtr; + //clWindowFunctionsPtr = clWindowFunctions.HostPtr; + } + + clEncodeGx0 = openCLProgram.Context.CreateBuffer(MemFlags.READ_WRITE, encodeGxLength); + clEncodeGx1 = openCLProgram.Context.CreateBuffer(MemFlags.READ_WRITE, encodeGxLength); + + //clSamples = openCLProgram.Context.CreateBuffer(MemFlags.READ_WRITE, samplesBufferLen); + //openCLCQ.EnqueueMapBuffer(clSamplesBytes, true, MapFlags.WRITE, 0, samplesBufferLen / 2); + + reedSolomonInit = openCLProgram.CreateKernel("reedSolomonInit"); + reedSolomonInitGx = openCLProgram.CreateKernel("reedSolomonInitGx"); + reedSolomonA = openCLProgram.CreateKernel("reedSolomonA"); + reedSolomonB = openCLProgram.CreateKernel("reedSolomonB"); + reedSolomon = openCLProgram.CreateKernel("reedSolomon"); + reedSolomonDecodeInit = openCLProgram.CreateKernel("reedSolomonDecodeInit"); + reedSolomonDecode = openCLProgram.CreateKernel("reedSolomonDecode"); + chienSearch = openCLProgram.CreateKernel("chienSearch"); + + samplesBuffer = new int[this.maxStridesCount * this.stride]; + + InitData(); + } + + public void Dispose() + { + if (workThread != null) + { + lock (this) + { + exit = true; + Monitor.Pulse(this); + } + workThread.Join(); + workThread = null; + } + + openCLCQ.Finish(); + + reedSolomonInit.Dispose(); + reedSolomonInitGx.Dispose(); + reedSolomonA.Dispose(); + reedSolomonB.Dispose(); + reedSolomon.Dispose(); + reedSolomonDecodeInit.Dispose(); + reedSolomonDecode.Dispose(); + chienSearch.Dispose(); + + if (!this.UseMappedMemory) + { + if (clSamplesBytesPtr != IntPtr.Zero) + openCLCQ.EnqueueUnmapMemObject(clSamplesBytesPinned, clSamplesBytesPtr); + clSamplesBytesPtr = IntPtr.Zero; + if (clParity0Ptr != IntPtr.Zero) + openCLCQ.EnqueueUnmapMemObject(clParity0Pinned, clParity0Ptr); + clParity0Ptr = IntPtr.Zero; + if (clParity1Ptr != IntPtr.Zero) + openCLCQ.EnqueueUnmapMemObject(clParity1Pinned, clParity1Ptr); + clParity1Ptr = IntPtr.Zero; + if (clExpPtr != IntPtr.Zero) + openCLCQ.EnqueueUnmapMemObject(clExpPinned, clExpPtr); + clExpPtr = IntPtr.Zero; + + clSamplesBytesPinned.Dispose(); + clParity0Pinned.Dispose(); + clParity1Pinned.Dispose(); + clExpPinned.Dispose(); + } + else + { + openCLCQ.EnqueueUnmapMemObject(clSamplesBytes, clSamplesBytesPtr); + openCLCQ.EnqueueUnmapMemObject(clParity0, clParity0Ptr); + openCLCQ.EnqueueUnmapMemObject(clParity1, clParity1Ptr); + openCLCQ.EnqueueUnmapMemObject(clExp, clExpPtr); + } + + clSamplesBytes.Dispose(); + clParity0.Dispose(); + clParity1.Dispose(); + clEncodeGx0.Dispose(); + clEncodeGx1.Dispose(); + clExp.Dispose(); + + //clSamples.Dispose(); + + openCLCQ.Dispose(); + + GC.SuppressFinalize(this); + } + + private unsafe void InitData() + { + reedSolomonInit.SetArgs( + clEncodeGx0, + clEncodeGx1, + clParity0, + clParity1, + npar); + + openCLCQ.EnqueueNDRangeKernel( + reedSolomonInit, + groupSize, npar / groupSize); + + for (int i = 0; i < npar / (groupSize / 2); i++) + { + reedSolomonInitGx.SetArgs( + clExp, + clEncodeGx0, + clEncodeGx1, + npar, + i); + + openCLCQ.EnqueueNDRangeKernel( + reedSolomonInitGx, + groupSize, npar / (groupSize / 2)); + + var temp = clEncodeGx0; clEncodeGx0 = clEncodeGx1; clEncodeGx1 = temp; + } + } + + internal unsafe void EnqueueKernels() + { + int blocks = strideCount / groupSize; + for (int i = 0; i < blocks; i++) + { + reedSolomonA.SetArgs(clSamplesBytes, clEncodeGx0, clParity0, this.npar, i * groupSize); + openCLCQ.EnqueueNDRangeKernel(reedSolomonA, groupSize, 1); + reedSolomonB.SetArgs(clSamplesBytes, clEncodeGx0, clParity0, this.npar, i * groupSize); + openCLCQ.EnqueueNDRangeKernel(reedSolomonB, groupSize, npar / groupSize); + } + for (int i = blocks * groupSize; i < strideCount; i++) + { + reedSolomon.SetArgs(clSamplesBytes, clEncodeGx0, clParity0, clParity1, this.npar, i); + openCLCQ.EnqueueNDRangeKernel(reedSolomon, groupSize, npar / groupSize); + var temp = clParity0; clParity0 = clParity1; clParity1 = temp; + } + + //openCLCQ.EnqueueReadBuffer(clRiceOutput, false, 0, (channels * frameSize * (writer.PCM.BitsPerSample + 1) + 256) / 8 * frameCount, clRiceOutputPtr); + } + } + +#if LKJLKJLJK + public static class OpenCLExtensions + { + public static void SetArgs(this Kernel kernel, params object[] args) + { + int i = 0; + foreach (object arg in args) + { + if (arg is int) + kernel.SetArg(i, (int)arg); + else if (arg is Mem) + kernel.SetArg(i, (Mem)arg); + else + throw new ArgumentException("Invalid argument type", arg.GetType().ToString()); + i++; + } + } + + public static void EnqueueNDRangeKernel(this CommandQueue queue, Kernel kernel, long localSize, long globalSize) + { + if (localSize == 0) + queue.EnqueueNDRangeKernel(kernel, 1, null, new long[] { globalSize }, null); + else + queue.EnqueueNDRangeKernel(kernel, 1, null, new long[] { localSize * globalSize }, new long[] { localSize }); + } + + public static void EnqueueNDRangeKernel(this CommandQueue queue, Kernel kernel, long localSizeX, long localSizeY, long globalSizeX, long globalSizeY) + { + queue.EnqueueNDRangeKernel(kernel, 2, null, new long[] { localSizeX * globalSizeX, localSizeY * globalSizeY }, new long[] { localSizeX, localSizeY }); + } + } +#endif +} diff --git a/CUETools.CLParity/CUETools.CLParity.csproj b/CUETools.CLParity/CUETools.CLParity.csproj new file mode 100644 index 0000000..cb8ab92 --- /dev/null +++ b/CUETools.CLParity/CUETools.CLParity.csproj @@ -0,0 +1,127 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {D41FEFF9-9D43-4049-BF9B-B13D9AC7E192} + Library + Properties + CUETools.CLParity + CUETools.CLParity + + + 3.5 + + + v4.0 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + false + ..\bin\Debug\plugins\net40\ + DEBUG;TRACE + prompt + 4 + true + AllRules.ruleset + + + pdbonly + true + ..\bin\Release\plugins\net40\ + TRACE + prompt + 4 + true + AllRules.ruleset + + + + False + ..\ThirdParty\OpenCLNet.dll + + + + + + + + + + True + True + Resources.resx + + + + + {082D6B9E-326E-4D15-9798-EDAE9EDE70A6} + CUETools.Codecs.FLAKE + False + + + {6458A13A-30EF-45A9-9D58-E5031B17BEE2} + CUETools.Codecs + False + + + + + PreserveNewest + + + ResXFileCodeGenerator + Resources.Designer.cs + + + + + + False + .NET Framework 3.5 SP1 Client Profile + false + + + False + .NET Framework 3.5 SP1 + true + + + False + Windows Installer 3.1 + true + + + + + + + + + + + \ No newline at end of file diff --git a/CUEControls/Properties/AssemblyInfo.cs b/CUETools.CLParity/Properties/AssemblyInfo.cs similarity index 82% rename from CUEControls/Properties/AssemblyInfo.cs rename to CUETools.CLParity/Properties/AssemblyInfo.cs index c4c1133..3aad582 100644 --- a/CUEControls/Properties/AssemblyInfo.cs +++ b/CUETools.CLParity/Properties/AssemblyInfo.cs @@ -1,35 +1,35 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("CUEControls")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("CUEControls")] -[assembly: AssemblyCopyright("Copyright © 2008-2010 Grigory Chudov")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("3c6acc24-0c31-4ad1-8856-218877a987fd")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Revision and Build Numbers -// by using the '*' as shown below: -[assembly: AssemblyVersion("2.1.6.0")] -[assembly: AssemblyFileVersion("2.1.6.0")] +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("CUETools.CLParity")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("CUETools.CLParity")] +[assembly: AssemblyCopyright("Copyright © 2011 Gregory S. Chudov")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("b28ffece-6c89-426b-b227-e647b435cc3d")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Revision and Build Numbers +// by using the '*' as shown below: +[assembly: AssemblyVersion("2.1.6.0")] +[assembly: AssemblyFileVersion("2.1.6.0")] diff --git a/CUETools.CLParity/Properties/Resources.Designer.cs b/CUETools.CLParity/Properties/Resources.Designer.cs new file mode 100644 index 0000000..39b66af --- /dev/null +++ b/CUETools.CLParity/Properties/Resources.Designer.cs @@ -0,0 +1,180 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.18033 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace CUETools.CLParity.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("CUETools.CLParity.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized string similar to Use additional CPU threads. + /// + internal static string DescriptionCPUThreads { + get { + return ResourceManager.GetString("DescriptionCPUThreads", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Additional preprocessor definitions for OpenCL kernel. + /// + internal static string DescriptionDefines { + get { + return ResourceManager.GetString("DescriptionDefines", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Use CPU or GPU device. + /// + internal static string DescriptionDeviceType { + get { + return ResourceManager.GetString("DescriptionDeviceType", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Do final encoding stages on GPU (experimental). + /// + internal static string DescriptionDoRice { + get { + return ResourceManager.GetString("DescriptionDoRice", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Use GPU on all stages. + /// + internal static string DescriptionGPUOnly { + get { + return ResourceManager.GetString("DescriptionGPUOnly", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to GPU thread block size (64, 128, 256). + /// + internal static string DescriptionGroupSize { + get { + return ResourceManager.GetString("DescriptionGroupSize", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Device uses host memory (Don't use). + /// + internal static string DescriptionMappedMemory { + get { + return ResourceManager.GetString("DescriptionMappedMemory", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to OpenCL platform to use. + /// + internal static string DescriptionPlatform { + get { + return ResourceManager.GetString("DescriptionPlatform", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Number of frames processed per one multiprocessor. + /// + internal static string DescriptionTaskSize { + get { + return ResourceManager.GetString("DescriptionTaskSize", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Calculate MD5 hash for audio stream. + /// + internal static string DoMD5Description { + get { + return ResourceManager.GetString("DoMD5Description", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Decode each frame and compare with original. + /// + internal static string DoVerifyDescription { + get { + return ResourceManager.GetString("DoVerifyDescription", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Samples written differs from the expected sample count. + /// + internal static string ExceptionSampleCount { + get { + return ResourceManager.GetString("ExceptionSampleCount", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Validation failed. + /// + internal static string ExceptionValidationFailed { + get { + return ResourceManager.GetString("ExceptionValidationFailed", resourceCulture); + } + } + } +} diff --git a/CUETools.CLParity/Properties/Resources.resx b/CUETools.CLParity/Properties/Resources.resx new file mode 100644 index 0000000..54702b4 --- /dev/null +++ b/CUETools.CLParity/Properties/Resources.resx @@ -0,0 +1,159 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Use additional CPU threads + + + Additional preprocessor definitions for OpenCL kernel + + + Use CPU or GPU device + + + Do final encoding stages on GPU (experimental) + + + Use GPU on all stages + + + GPU thread block size (64, 128, 256) + + + Device uses host memory (Don't use) + + + OpenCL platform to use + + + Number of frames processed per one multiprocessor + + + Calculate MD5 hash for audio stream + + + Decode each frame and compare with original + + + Samples written differs from the expected sample count + + + Validation failed + + \ No newline at end of file diff --git a/CUETools.CLParity/Properties/Resources.ru-RU.resx b/CUETools.CLParity/Properties/Resources.ru-RU.resx new file mode 100644 index 0000000..250cb03 --- /dev/null +++ b/CUETools.CLParity/Properties/Resources.ru-RU.resx @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ИÑпользовать дополнительные потоки + + + ИÑпользовать GPU на вÑех ÑтадиÑÑ… + + + ВычиÑлÑть MD5-хеш аудиопотока + + + Декодировать каждый блок и Ñравнивать Ñ Ð¾Ñ€Ð¸Ð³Ð¸Ð½Ð°Ð»Ð¾Ð¼ + + + КоличеÑтво запиÑанных ÑÑмплов отличаетÑÑ Ð¾Ñ‚ ожидавшегоÑÑ + + + Ошибка верификации + + \ No newline at end of file diff --git a/CUETools.CLParity/fastdecode/0901.1886v1.pdf b/CUETools.CLParity/fastdecode/0901.1886v1.pdf new file mode 100644 index 0000000000000000000000000000000000000000..a6ccd019d562c406039d5af0bbc99056b2aa5947 GIT binary patch literal 64995 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 literal 0 HcmV?d00001 diff --git a/CUETools.CLParity/fastdecode/0901.1886v1.txt b/CUETools.CLParity/fastdecode/0901.1886v1.txt new file mode 100644 index 0000000..477292a --- /dev/null +++ b/CUETools.CLParity/fastdecode/0901.1886v1.txt @@ -0,0 +1,3 @@ +q = 2^m = 65536, m = 16 +k == npar? +n < q diff --git a/CUETools.CLParity/fastdecode/VERSION b/CUETools.CLParity/fastdecode/VERSION new file mode 100644 index 0000000..ac5330c --- /dev/null +++ b/CUETools.CLParity/fastdecode/VERSION @@ -0,0 +1 @@ +Mon Jul 13 12:03:07 CEST 2009 diff --git a/CUETools.CLParity/fastdecode/fastdecode.sln b/CUETools.CLParity/fastdecode/fastdecode.sln new file mode 100644 index 0000000..48ff604 --- /dev/null +++ b/CUETools.CLParity/fastdecode/fastdecode.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fastdecode", "fastdecode.vcproj", "{32B8B6B7-FAED-4D9D-B90D-7E5C1E392DD8}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {32B8B6B7-FAED-4D9D-B90D-7E5C1E392DD8}.Debug|Win32.ActiveCfg = Debug|Win32 + {32B8B6B7-FAED-4D9D-B90D-7E5C1E392DD8}.Debug|Win32.Build.0 = Debug|Win32 + {32B8B6B7-FAED-4D9D-B90D-7E5C1E392DD8}.Release|Win32.ActiveCfg = Release|Win32 + {32B8B6B7-FAED-4D9D-B90D-7E5C1E392DD8}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/flac/src/monkeys_audio_utilities/flac_ren/flac_ren.vcproj b/CUETools.CLParity/fastdecode/fastdecode.vcproj similarity index 77% rename from flac/src/monkeys_audio_utilities/flac_ren/flac_ren.vcproj rename to CUETools.CLParity/fastdecode/fastdecode.vcproj index 5fc7cbc..63f7aa2 100644 --- a/flac/src/monkeys_audio_utilities/flac_ren/flac_ren.vcproj +++ b/CUETools.CLParity/fastdecode/fastdecode.vcproj @@ -1,194 +1,204 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/CUETools.CLParity/fastdecode/fastdecode.vcproj.fandrahomevs.chudov.user b/CUETools.CLParity/fastdecode/fastdecode.vcproj.fandrahomevs.chudov.user new file mode 100644 index 0000000..e59cbe7 --- /dev/null +++ b/CUETools.CLParity/fastdecode/fastdecode.vcproj.fandrahomevs.chudov.user @@ -0,0 +1,65 @@ + + + + + + + + + + + diff --git a/CUETools.CLParity/fastdecode/fastdecode.vcproj.user b/CUETools.CLParity/fastdecode/fastdecode.vcproj.user new file mode 100644 index 0000000..0ce2ced --- /dev/null +++ b/CUETools.CLParity/fastdecode/fastdecode.vcproj.user @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/CUETools.CLParity/fastdecode/inttypes.h b/CUETools.CLParity/fastdecode/inttypes.h new file mode 100644 index 0000000..4b3828a --- /dev/null +++ b/CUETools.CLParity/fastdecode/inttypes.h @@ -0,0 +1,305 @@ +// ISO C9x compliant inttypes.h for Microsoft Visual Studio +// Based on ISO/IEC 9899:TC2 Committee draft (May 6, 2005) WG14/N1124 +// +// Copyright (c) 2006 Alexander Chemeris +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// 1. Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. The name of the author may be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED +// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO +// EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +// OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +// ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +/////////////////////////////////////////////////////////////////////////////// + +#ifndef _MSC_VER // [ +#error "Use this header only with Microsoft Visual C++ compilers!" +#endif // _MSC_VER ] + +#ifndef _MSC_INTTYPES_H_ // [ +#define _MSC_INTTYPES_H_ + +#if _MSC_VER > 1000 +#pragma once +#endif + +#include "stdint.h" + +// 7.8 Format conversion of integer types + +typedef struct { + intmax_t quot; + intmax_t rem; +} imaxdiv_t; + +// 7.8.1 Macros for format specifiers + +#if !defined(__cplusplus) || defined(__STDC_FORMAT_MACROS) // [ See footnote 185 at page 198 + +// The fprintf macros for signed integers are: +#define PRId8 "d" +#define PRIi8 "i" +#define PRIdLEAST8 "d" +#define PRIiLEAST8 "i" +#define PRIdFAST8 "d" +#define PRIiFAST8 "i" + +#define PRId16 "hd" +#define PRIi16 "hi" +#define PRIdLEAST16 "hd" +#define PRIiLEAST16 "hi" +#define PRIdFAST16 "hd" +#define PRIiFAST16 "hi" + +#define PRId32 "I32d" +#define PRIi32 "I32i" +#define PRIdLEAST32 "I32d" +#define PRIiLEAST32 "I32i" +#define PRIdFAST32 "I32d" +#define PRIiFAST32 "I32i" + +#define PRId64 "I64d" +#define PRIi64 "I64i" +#define PRIdLEAST64 "I64d" +#define PRIiLEAST64 "I64i" +#define PRIdFAST64 "I64d" +#define PRIiFAST64 "I64i" + +#define PRIdMAX "I64d" +#define PRIiMAX "I64i" + +#define PRIdPTR "Id" +#define PRIiPTR "Ii" + +// The fprintf macros for unsigned integers are: +#define PRIo8 "o" +#define PRIu8 "u" +#define PRIx8 "x" +#define PRIX8 "X" +#define PRIoLEAST8 "o" +#define PRIuLEAST8 "u" +#define PRIxLEAST8 "x" +#define PRIXLEAST8 "X" +#define PRIoFAST8 "o" +#define PRIuFAST8 "u" +#define PRIxFAST8 "x" +#define PRIXFAST8 "X" + +#define PRIo16 "ho" +#define PRIu16 "hu" +#define PRIx16 "hx" +#define PRIX16 "hX" +#define PRIoLEAST16 "ho" +#define PRIuLEAST16 "hu" +#define PRIxLEAST16 "hx" +#define PRIXLEAST16 "hX" +#define PRIoFAST16 "ho" +#define PRIuFAST16 "hu" +#define PRIxFAST16 "hx" +#define PRIXFAST16 "hX" + +#define PRIo32 "I32o" +#define PRIu32 "I32u" +#define PRIx32 "I32x" +#define PRIX32 "I32X" +#define PRIoLEAST32 "I32o" +#define PRIuLEAST32 "I32u" +#define PRIxLEAST32 "I32x" +#define PRIXLEAST32 "I32X" +#define PRIoFAST32 "I32o" +#define PRIuFAST32 "I32u" +#define PRIxFAST32 "I32x" +#define PRIXFAST32 "I32X" + +#define PRIo64 "I64o" +#define PRIu64 "I64u" +#define PRIx64 "I64x" +#define PRIX64 "I64X" +#define PRIoLEAST64 "I64o" +#define PRIuLEAST64 "I64u" +#define PRIxLEAST64 "I64x" +#define PRIXLEAST64 "I64X" +#define PRIoFAST64 "I64o" +#define PRIuFAST64 "I64u" +#define PRIxFAST64 "I64x" +#define PRIXFAST64 "I64X" + +#define PRIoMAX "I64o" +#define PRIuMAX "I64u" +#define PRIxMAX "I64x" +#define PRIXMAX "I64X" + +#define PRIoPTR "Io" +#define PRIuPTR "Iu" +#define PRIxPTR "Ix" +#define PRIXPTR "IX" + +// The fscanf macros for signed integers are: +#define SCNd8 "d" +#define SCNi8 "i" +#define SCNdLEAST8 "d" +#define SCNiLEAST8 "i" +#define SCNdFAST8 "d" +#define SCNiFAST8 "i" + +#define SCNd16 "hd" +#define SCNi16 "hi" +#define SCNdLEAST16 "hd" +#define SCNiLEAST16 "hi" +#define SCNdFAST16 "hd" +#define SCNiFAST16 "hi" + +#define SCNd32 "ld" +#define SCNi32 "li" +#define SCNdLEAST32 "ld" +#define SCNiLEAST32 "li" +#define SCNdFAST32 "ld" +#define SCNiFAST32 "li" + +#define SCNd64 "I64d" +#define SCNi64 "I64i" +#define SCNdLEAST64 "I64d" +#define SCNiLEAST64 "I64i" +#define SCNdFAST64 "I64d" +#define SCNiFAST64 "I64i" + +#define SCNdMAX "I64d" +#define SCNiMAX "I64i" + +#ifdef _WIN64 // [ +# define SCNdPTR "I64d" +# define SCNiPTR "I64i" +#else // _WIN64 ][ +# define SCNdPTR "ld" +# define SCNiPTR "li" +#endif // _WIN64 ] + +// The fscanf macros for unsigned integers are: +#define SCNo8 "o" +#define SCNu8 "u" +#define SCNx8 "x" +#define SCNX8 "X" +#define SCNoLEAST8 "o" +#define SCNuLEAST8 "u" +#define SCNxLEAST8 "x" +#define SCNXLEAST8 "X" +#define SCNoFAST8 "o" +#define SCNuFAST8 "u" +#define SCNxFAST8 "x" +#define SCNXFAST8 "X" + +#define SCNo16 "ho" +#define SCNu16 "hu" +#define SCNx16 "hx" +#define SCNX16 "hX" +#define SCNoLEAST16 "ho" +#define SCNuLEAST16 "hu" +#define SCNxLEAST16 "hx" +#define SCNXLEAST16 "hX" +#define SCNoFAST16 "ho" +#define SCNuFAST16 "hu" +#define SCNxFAST16 "hx" +#define SCNXFAST16 "hX" + +#define SCNo32 "lo" +#define SCNu32 "lu" +#define SCNx32 "lx" +#define SCNX32 "lX" +#define SCNoLEAST32 "lo" +#define SCNuLEAST32 "lu" +#define SCNxLEAST32 "lx" +#define SCNXLEAST32 "lX" +#define SCNoFAST32 "lo" +#define SCNuFAST32 "lu" +#define SCNxFAST32 "lx" +#define SCNXFAST32 "lX" + +#define SCNo64 "I64o" +#define SCNu64 "I64u" +#define SCNx64 "I64x" +#define SCNX64 "I64X" +#define SCNoLEAST64 "I64o" +#define SCNuLEAST64 "I64u" +#define SCNxLEAST64 "I64x" +#define SCNXLEAST64 "I64X" +#define SCNoFAST64 "I64o" +#define SCNuFAST64 "I64u" +#define SCNxFAST64 "I64x" +#define SCNXFAST64 "I64X" + +#define SCNoMAX "I64o" +#define SCNuMAX "I64u" +#define SCNxMAX "I64x" +#define SCNXMAX "I64X" + +#ifdef _WIN64 // [ +# define SCNoPTR "I64o" +# define SCNuPTR "I64u" +# define SCNxPTR "I64x" +# define SCNXPTR "I64X" +#else // _WIN64 ][ +# define SCNoPTR "lo" +# define SCNuPTR "lu" +# define SCNxPTR "lx" +# define SCNXPTR "lX" +#endif // _WIN64 ] + +#endif // __STDC_FORMAT_MACROS ] + +// 7.8.2 Functions for greatest-width integer types + +// 7.8.2.1 The imaxabs function +#define imaxabs _abs64 + +// 7.8.2.2 The imaxdiv function + +// This is modified version of div() function from Microsoft's div.c found +// in %MSVC.NET%\crt\src\div.c +#ifdef STATIC_IMAXDIV // [ +static +#else // STATIC_IMAXDIV ][ +_inline +#endif // STATIC_IMAXDIV ] +imaxdiv_t __cdecl imaxdiv(intmax_t numer, intmax_t denom) +{ + imaxdiv_t result; + + result.quot = numer / denom; + result.rem = numer % denom; + + if (numer < 0 && result.rem > 0) { + // did division wrong; must fix up + ++result.quot; + result.rem -= denom; + } + + return result; +} + +// 7.8.2.3 The strtoimax and strtoumax functions +#define strtoimax _strtoi64 +#define strtoumax _strtoui64 + +// 7.8.2.4 The wcstoimax and wcstoumax functions +#define wcstoimax _wcstoi64 +#define wcstoumax _wcstoui64 + + +#endif // _MSC_INTTYPES_H_ ] diff --git a/CUETools.CLParity/fastdecode/main.c b/CUETools.CLParity/fastdecode/main.c new file mode 100644 index 0000000..0d0d036 --- /dev/null +++ b/CUETools.CLParity/fastdecode/main.c @@ -0,0 +1,422 @@ +// ************************************************ +// ************************************************ + +// Sample program to use reed_solomon.c +// (c) 2009 Frederic Didier. + +#include "reed_solomon.h" +#include "stdio.h" +#include "stdlib.h" +#include "time.h" + +/************************************************/ +/** Random number generator -> 32bits **/ +/** Mersenne twister code **/ +/************************************************/ + +/* A C-program for MT19937: Integer version */ +/* genrand() generates one pseudorandom unsigned integer (32bit) */ +/* which is uniformly distributed among 0 to 2^32-1 for each */ +/* call. sgenrand(seed) set initial values to the working area */ +/* of 624 words. Before genrand(), sgenrand(seed) must be */ +/* called once. (seed is any 32-bit integer except for 0). */ +/* Coded by Takuji Nishimura, considering the suggestions by */ +/* Topher Cooper and Marc Rieffel in July-Aug. 1997. */ + +/* 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 */ + +/* Copyright (C) 1997 Makoto Matsumoto and Takuji Nishimura. */ +/* Any feedback is very welcome. For any question, comments, */ +/* see http://www.math.keio.ac.jp/matumoto/emt.html or email */ +/* matumoto@math.keio.ac.jp */ + +/* Period parameters */ +#define MT_N 624 +#define MT_M 397 +#define MATRIX_A 0x9908b0df /* constant vector a */ +#define UPPER_MASK 0x80000000 /* most significant w-r bits */ +#define LOWER_MASK 0x7fffffff /* least significant r bits */ + +/* Tempering parameters */ +#define TEMPERING_MASK_B 0x9d2c5680 +#define TEMPERING_MASK_C 0xefc60000 +#define TEMPERING_SHIFT_U(y) (y >> 11) +#define TEMPERING_SHIFT_S(y) (y << 7) +#define TEMPERING_SHIFT_T(y) (y << 15) +#define TEMPERING_SHIFT_L(y) (y >> 18) + +static unsigned long mt[MT_N]; /* the table for the state vector */ +static int mti=MT_N+1; /* mti==MT_N+1 means mt[MT_N] is not initialized */ + +/* initializing the table with a NONZERO seed */ +void sgenrand(unsigned long seed) +{ + /* setting initial seeds to mt[MT_N] using */ + /* the generator Line 25 of Table 1 in */ + /* [KNUTH 1981, The Art of Computer Programming */ + /* Vol. 2 (2nd Ed.), pp102] */ + mt[0]= seed & 0xffffffff; + for (mti=1; mti= MT_N) { /* generate MT_N words at one time */ + int kk; + + if (mti == MT_N+1) /* if sgenrand() has not been called, */ + sgenrand(4357); /* a default initial seed is used */ + + for (kk=0;kk> 1) ^ mag01[y & 0x1]; + } + for (;kk> 1) ^ mag01[y & 0x1]; + } + y = (mt[MT_N-1]&UPPER_MASK)|(mt[0]&LOWER_MASK); + mt[MT_N-1] = mt[MT_M-1] ^ (y >> 1) ^ mag01[y & 0x1]; + + mti = 0; + } + + y = mt[mti++]; + y ^= TEMPERING_SHIFT_U(y); + y ^= TEMPERING_SHIFT_S(y) & TEMPERING_MASK_B; + y ^= TEMPERING_SHIFT_T(y) & TEMPERING_MASK_C; + y ^= TEMPERING_SHIFT_L(y); + + return y; +} + +double double_genrand() { + return genrand() * (1.0/4294967295.0); +} + +// ******************************************************* + +// The Art of Computer programming - Knuth +// vol 2 - section 3.4.2 page 137 +// Algorithm S (Selection sampling technique) + +void generate_positions(int N, int K, int *pos) +{ + int size=N; + int w=K; + do { + if (double_genrand()*size <= w) { + pos[K-w] = N-size; + w--; + } + size--; + } while (size); +} + +//void generate_message(byte *data, int size) +//{ +// int *p = (int *)data; +// size >>=2; +// int i; +// for (i=0; i>=2; + for (i=0; i>=1; + for (i=0; i>=2; + for (i=0; i5) S = atoi(argv[5]); + if (argc>6) m_size = atoi(argv[6]) << 20; + + // modify packet size + // always divisible by [4], + // if xor code used, divisible by [4*n_field] + inc = 4 * n_field; + while (temp < S) temp +=inc; + S = temp; + + // number of field elements per packets. + nb_elt = (S * 8) / n_field; + + // compute number of blocs + nb_bloc = m_size / (K*S); + if (nb_bloc==0) nb_bloc=1; + + // power of two just greater than N + while ((1< +using namespace std; + +#include "stdio.h" +#include "stdlib.h" +#include "time.h" + +typedef unsigned char byte; + +/************************************************/ +/** Random number generator -> 32bits **/ +/** Mersenne twister code **/ +/************************************************/ + +/* A C-program for MT19937: Integer version */ +/* genrand() generates one pseudorandom unsigned integer (32bit) */ +/* which is uniformly distributed among 0 to 2^32-1 for each */ +/* call. sgenrand(seed) set initial values to the working area */ +/* of 624 words. Before genrand(), sgenrand(seed) must be */ +/* called once. (seed is any 32-bit integer except for 0). */ +/* Coded by Takuji Nishimura, considering the suggestions by */ +/* Topher Cooper and Marc Rieffel in July-Aug. 1997. */ + +/* 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 */ + +/* Copyright (C) 1997 Makoto Matsumoto and Takuji Nishimura. */ +/* Any feedback is very welcome. For any question, comments, */ +/* see http://www.math.keio.ac.jp/matumoto/emt.html or email */ +/* matumoto@math.keio.ac.jp */ + +/* Period parameters */ +#define MT_N 624 +#define MT_M 397 +#define MATRIX_A 0x9908b0df /* constant vector a */ +#define UPPER_MASK 0x80000000 /* most significant w-r bits */ +#define LOWER_MASK 0x7fffffff /* least significant r bits */ + +/* Tempering parameters */ +#define TEMPERING_MASK_B 0x9d2c5680 +#define TEMPERING_MASK_C 0xefc60000 +#define TEMPERING_SHIFT_U(y) (y >> 11) +#define TEMPERING_SHIFT_S(y) (y << 7) +#define TEMPERING_SHIFT_T(y) (y << 15) +#define TEMPERING_SHIFT_L(y) (y >> 18) + +static unsigned long mt[MT_N]; /* the table for the state vector */ +static int mti=MT_N+1; /* mti==MT_N+1 means mt[MT_N] is not initialized */ + +/* initializing the table with a NONZERO seed */ +void sgenrand(unsigned long seed) +{ + /* setting initial seeds to mt[MT_N] using */ + /* the generator Line 25 of Table 1 in */ + /* [KNUTH 1981, The Art of Computer Programming */ + /* Vol. 2 (2nd Ed.), pp102] */ + mt[0]= seed & 0xffffffff; + for (mti=1; mti= MT_N) { /* generate MT_N words at one time */ + int kk; + + if (mti == MT_N+1) /* if sgenrand() has not been called, */ + sgenrand(4357); /* a default initial seed is used */ + + for (kk=0;kk> 1) ^ mag01[y & 0x1]; + } + for (;kk> 1) ^ mag01[y & 0x1]; + } + y = (mt[MT_N-1]&UPPER_MASK)|(mt[0]&LOWER_MASK); + mt[MT_N-1] = mt[MT_M-1] ^ (y >> 1) ^ mag01[y & 0x1]; + + mti = 0; + } + + y = mt[mti++]; + y ^= TEMPERING_SHIFT_U(y); + y ^= TEMPERING_SHIFT_S(y) & TEMPERING_MASK_B; + y ^= TEMPERING_SHIFT_T(y) & TEMPERING_MASK_C; + y ^= TEMPERING_SHIFT_L(y); + + return y; +} + +double double_genrand() { + return genrand() * (1.0/4294967295.0); +} + +// ******************************************************* + +// The Art of Computer programming - Knuth +// vol 2 - section 3.4.2 page 137 +// Algorithm S (Selection sampling technique) + +void generate_positions(int N, int K, int *pos) +{ + int size=N; + int w=K; + do { + if (double_genrand()*size <= w) { + pos[K-w] = N-size; + w--; + } + size--; + } while (size); +} + +void generate_message(byte *data, int size) +{ + int *p = (int *)data; + size >>=2; + int i; + for (i=0; i>=2; + int res=0; + int i; + for (i=0; i>16); + a += (((int)a)>>31) & GF; + return a; +} + +int inline field_mult(unsigned int a, unsigned int b) +{ + if (a==(1<<16)) return -(int)b + (((-(int)b)>>31) & GF); + return reduce(a*b); +} + +// this one work if not both a and b are (1<<16) that is -1. +int inline field_mult_no(unsigned int a, unsigned int b) +{ + return reduce(a*b); +} + +int inline field_diff(unsigned int a, unsigned int b) +{ + a -= b; + return a + ((((int)a)>>31)&GF); +} + +int inline field_sum(unsigned int a, unsigned int b) +{ + a -= GF-b; + return a + ((((int)a)>>31)&GF); +} + + +void init_field() +{ + GF_log = (int *) malloc(sizeof(int) * GF); + GF_exp = (int *) malloc(sizeof(int) * GF); + inv = (int *) malloc(sizeof(int) * GF); + + int p = 1; + int i; + for (i=0; i+1>(i+1)) + i++; + return i; +} + +void reverse(int *vect, int n) +{ + int i,j; + + j=n >> 1; + for (i=1; i i) { + int temp=vect[i]; + vect[i]=vect[j]; + vect[j]=temp; + } + + int m = n >> 1; + while (m >= 1 && (j & m)) { + j ^= m; + m >>= 1; + } + j += m; + } +} + +void fft_dit(int *vect, int n) +{ + reverse(vect, n); + + int i,j; + + int step=1; + int number=n/2; + int mult=15; + while (number>0) + { + int *p=vect; + int *q=vect+step; + for (i=0; i>=1; + mult--; + } +} + +void ifft_dit(int *vect, int n) +{ + reverse(vect, n); + + int i,j; + + int step=1; + int number=n/2; + int mult=15; + while (number>0) + { + int *p=vect; + int *q=vect+step; + for (i=0; istep; j--) { + int a = *p; + int b = field_mult_no(*q, GF_exp[j<>=1; + mult--; + } +} + + +void fft2(int *vect, int n) +{ + int i=n/2; + while (i--) { + int a = *vect; + int b = *(vect+1); + *(vect++) = field_sum(a,b); + *(vect++) = field_diff(a,b); + } +} + + +// decimation in frequency +void fft_inc(int *vect, int n) +{ + int i,j; + + int number=1; + int step=n/2; + int mult = 16 - get_log(n); + + while (step>0) + { + int *p=vect; + int *q=vect+step; + for (i=0; i>=1; + number<<=1; + mult++; + } +} + +// decimation in time +void ifft_inc(int *vect, int n) +{ + int i,j; + int number=n/2; + + int step=1; + int mult=15; + + int *root=GF_exp + (1<<16); + while (number>0) + { + int *p=vect; + int *q=vect+step; + for (i=0; i>=1; + mult--; + } +} + +void fft_rec(int *vect, int n) +{ + if (n == 1<<11) return fft_inc(vect, n); +/* if (n==2) { + int a = vect[0]; + int b = vect[1]; + vect[0] = field_sum(a,b); + vect[1] = field_diff(a,b); + return; + } +*/ + int i; + int mult = 16 - get_log(n); + + n/=2; + int *l = vect; + int *h = vect + n; + for (i=0; i* X, int n) +{ + if (n==1) return; + for (int i=0; i a = X[i]; + complex b = X[n/2 + i]; + X[i] = a + b; + X[n/2 + i] = (a - b) * polar(1.0, -2*Pi*i/double(n)); + } + complex_fft_rec(X, n/2); + complex_fft_rec(X + n/2, n/2); +} + +// decimation in time +// input is bit reversed. +void complex_ifft_rec(complex* X, int n) +{ + if (n==1) return; + complex_ifft_rec(X, n/2); + complex_ifft_rec(X + n/2, n/2); + for (int i=0; i a = X[i]; + complex b = X[n/2 + i] * polar(1.0, 2*Pi*i/double(n)); + X[i] = a + b; + X[n/2 + i] = (a - b); + } +} + +// The memory can be allocated only once if many call to this +// function are expected. the fft of the log can be precomputed. +void compute_prod_fast(int *prod, int *pos, int k, int n) +{ + const int NN = 2*n; + complex* R = (complex *)malloc(NN * sizeof(complex)); + complex* L = (complex *)malloc(NN * sizeof(complex)); + for (int i=0; i0) { + L[NN - i] = GF_log[GF - i]; + } + } + + // convolution + complex_fft_rec(R, NN); + complex_fft_rec(L, NN); + for (int i=0; i < NN; ++i) { + R[i] *= L[i]; + } + complex_ifft_rec(R, NN); + + // now we have the GF_log(prod[i]) in Re(R[i]) + // we take the result mod 2^16 since we are in the multiplicative + // field of GF(2^16+1) + for (int x=0; x < n; ++x) { + prod[x] = GF_exp[((long long) (real(R[x])/double(NN) + 0.5)) % (1<<16)]; + } + + free(R); + free(L); +} + +//********************************************************************* +//********************************************************************* + +int *high; +int *low; +int *prod; +int *enc_fft; +int *rev_fft; +int *mid_fft; +int *prod_enc; + +void init_code(int n) +{ + low = (int *) malloc(sizeof(int) * n); + high = (int *) malloc(sizeof(int) * n); + prod = (int *) malloc(sizeof(int) * n); + prod_enc = (int *) malloc(sizeof(int) * n); + + enc_fft = (int *) malloc(sizeof(int) * n); + rev_fft = (int *) malloc(sizeof(int) * n); + mid_fft = (int *) malloc(sizeof(int) * n); + + int x; + for (x=0; x=n/2 and we don't need the fist half of the output + fft(dst, n); + for (x=0; x n/2 + if (k > n/2) { + for (i=0; i 32bits **/ +/** Mersenne twister code **/ +/************************************************/ + +/* A C-program for MT19937: Integer version */ +/* genrand() generates one pseudorandom unsigned integer (32bit) */ +/* which is uniformly distributed among 0 to 2^32-1 for each */ +/* call. sgenrand(seed) set initial values to the working area */ +/* of 624 words. Before genrand(), sgenrand(seed) must be */ +/* called once. (seed is any 32-bit integer except for 0). */ +/* Coded by Takuji Nishimura, considering the suggestions by */ +/* Topher Cooper and Marc Rieffel in July-Aug. 1997. */ + +/* 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 */ + +/* Copyright (C) 1997 Makoto Matsumoto and Takuji Nishimura. */ +/* Any feedback is very welcome. For any question, comments, */ +/* see http://www.math.keio.ac.jp/matumoto/emt.html or email */ +/* matumoto@math.keio.ac.jp */ + +/* Period parameters */ +#define MT_N 624 +#define MT_M 397 +#define MATRIX_A 0x9908b0df /* constant vector a */ +#define UPPER_MASK 0x80000000 /* most significant w-r bits */ +#define LOWER_MASK 0x7fffffff /* least significant r bits */ + +/* Tempering parameters */ +#define TEMPERING_MASK_B 0x9d2c5680 +#define TEMPERING_MASK_C 0xefc60000 +#define TEMPERING_SHIFT_U(y) (y >> 11) +#define TEMPERING_SHIFT_S(y) (y << 7) +#define TEMPERING_SHIFT_T(y) (y << 15) +#define TEMPERING_SHIFT_L(y) (y >> 18) + +static unsigned long mt[MT_N]; /* the table for the state vector */ +static int mti=MT_N+1; /* mti==MT_N+1 means mt[MT_N] is not initialized */ + +/* initializing the table with a NONZERO seed */ +void sgenrand(unsigned long seed) +{ + /* setting initial seeds to mt[MT_N] using */ + /* the generator Line 25 of Table 1 in */ + /* [KNUTH 1981, The Art of Computer Programming */ + /* Vol. 2 (2nd Ed.), pp102] */ + mt[0]= seed & 0xffffffff; + for (mti=1; mti= MT_N) { /* generate MT_N words at one time */ + int kk; + + if (mti == MT_N+1) /* if sgenrand() has not been called, */ + sgenrand(4357); /* a default initial seed is used */ + + for (kk=0;kk> 1) ^ mag01[y & 0x1]; + } + for (;kk> 1) ^ mag01[y & 0x1]; + } + y = (mt[MT_N-1]&UPPER_MASK)|(mt[0]&LOWER_MASK); + mt[MT_N-1] = mt[MT_M-1] ^ (y >> 1) ^ mag01[y & 0x1]; + + mti = 0; + } + + y = mt[mti++]; + y ^= TEMPERING_SHIFT_U(y); + y ^= TEMPERING_SHIFT_S(y) & TEMPERING_MASK_B; + y ^= TEMPERING_SHIFT_T(y) & TEMPERING_MASK_C; + y ^= TEMPERING_SHIFT_L(y); + + return y; +} + +double double_genrand() { + return genrand() * (1.0/4294967295.0); +} + +// ******************************************************* + +// The Art of Computer programming - Knuth +// vol 2 - section 3.4.2 page 137 +// Algorithm S (Selection sampling technique) + +void generate_positions(int N, int K, int *pos) +{ + int size=N; + int w=K; + do { + if (double_genrand()*size <= w) { + pos[K-w] = N-size; + w--; + } + size--; + } while (size); +} + +void generate_message(byte *data, int size) +{ + int *p = (int *)data; + size >>=2; + int i; + for (i=0; i>=2; + int res=0; + int i; + for (i=0; i3) S = atoi(argv[3]); + if (argc>4) m_size = atoi(argv[4]) << 20; + + // number of field elements per packets. + int nb_elt = (S * 8) / n_field; + + // compute number of blocs + int nb_bloc = m_size / (K*S); + if (nb_bloc==0) nb_bloc=1; + + // power of two just greater than N + int n_walsh=1; + while ((1<=n_field) break; + index++; + } + + // used for the fast version only + poly = &primitive[temp]; + weight = index-temp; + + if (primitive[index]!=n_field) { + printf("primitive poly for GF %d not found !\n", n_field); + } + + // clock the lfsr (multiply by X) + // fill the table + int state=1; + for (i=0; i>n_field) state^=mask; + if (state>>n_field!=0) exit(0); + } + + // small change so we have bijection + log_table[0]=0; + log_table[1]=modulo; + exp_table[2*modulo]=1; +} + +// ************************************************ +// ************************************************ + +void walsh_mod(symbol *vect, int size); +void compute_product(); +void walsh_field(symbol *vect); + +// ************************************************ +// ************************************************ + +void log_walsh_init() +{ + int i; + for (i=0; i>j)&1; + } + + // precompute the Walsh transforms of the inverse + walsh_field(inverse); + + // everything is even if n_walsh=16 + // divide by two so computation fit on 16 bits! + // otherwise, multiply by power of two, so + // shift factor is always 15. + if (n_walsh==16) + for (i=0; i>= 1; + else { + for (i=0; i31 || nw > nf) { + printf("incorrect field parameters\n"); + exit(0); + } + + n_field = nf; + n_walsh = nw; + N_field = 1<>n_field); +// b = (b & modulo) + (b>>n_field); + + // on GF 2^16 + a = a + (a>>16); + b = b + (b>>16); + + vect[i]=a; + vect[i+step]=b; + + i++; + } + i+=step; + } + step<<=1; + } +} + +// ************************************************ +// ************************************************ + +// compute the product (3) of the paper +// return in product the logarithm of the product +void compute_product() +{ + int i; + // initialisation + for (i=0; i 16 + // otherwise int is ok. + for (i=0; imodulo) t-= modulo; + product[j] = t; + } + } +} + +// ******************************************************* +// ******************************************************* + +// Perform a Walsh transform +// Nothing special this time, except that we do not +// have to worry about any overflow since in our use, +// only the bit n_walsh will be important +// +// special version that do n_field transforms at once. +// one of the limiting part in the complexity + +void walsh_field_generic(symbol *vect) +{ + int i,j; + int step=n_field; + int size=n_field * N_walsh; + while (step (A+B, A-B) +// where sizeof A = sizeof B = s*32 bits +void walsh_step(symbol *p, symbol *q, int s) { + while (s--) { + __asm__ __volatile__ ( + "movdqa (%%esi), %%xmm0\n" + "movdqa 16(%%esi), %%xmm1\n" + "movdqa 32(%%esi), %%xmm2\n" + "movdqa 48(%%esi), %%xmm3\n" + + "movdqa (%%edi), %%xmm4\n" + "movdqa 16(%%edi), %%xmm5\n" + "movdqa 32(%%edi), %%xmm6\n" + "movdqa 48(%%edi), %%xmm7\n" + + "psubw %%xmm4, %%xmm0\n" + "psubw %%xmm5, %%xmm1\n" + "psubw %%xmm6, %%xmm2\n" + "psubw %%xmm7, %%xmm3\n" + + "psllw $1,%%xmm4\n" + "psllw $1,%%xmm5\n" + "psllw $1,%%xmm6\n" + "psllw $1,%%xmm7\n" + + "paddw %%xmm0, %%xmm4\n" + "paddw %%xmm1, %%xmm5\n" + "paddw %%xmm2, %%xmm6\n" + "paddw %%xmm3, %%xmm7\n" + + "movdqa %%xmm4, (%%esi)\n" + "movdqa %%xmm5, 16(%%esi)\n" + "movdqa %%xmm6, 32(%%esi)\n" + "movdqa %%xmm7, 48(%%esi)\n" + + "movdqa %%xmm0, (%%edi)\n" + "movdqa %%xmm1, 16(%%edi)\n" + "movdqa %%xmm2, 32(%%edi)\n" + "movdqa %%xmm3, 48(%%edi)\n" + : : "S"(p), "D"(q) : "memory"); + + p += 32; + q += 32; + } +} + +// Perform a Walsh step (A,B) -> (A+B, A-B) +// where sizeof A = sizeof B = s*16 bits +void walsh_step_simple(symbol *p, symbol *q, int s) { + while (s--) { + __asm__ __volatile__ ( + "movdqa (%%esi), %%xmm0\n" + "movdqa 16(%%esi), %%xmm1\n" + + "movdqa (%%edi), %%xmm4\n" + "movdqa 16(%%edi), %%xmm5\n" + + "psubw %%xmm4, %%xmm0\n" + "psubw %%xmm5, %%xmm1\n" + + "psllw $1,%%xmm4\n" + "psllw $1,%%xmm5\n" + + "paddw %%xmm0, %%xmm4\n" + "paddw %%xmm1, %%xmm5\n" + + "movdqa %%xmm4, (%%esi)\n" + "movdqa %%xmm5, 16(%%esi)\n" + + "movdqa %%xmm0, (%%edi)\n" + "movdqa %%xmm1, 16(%%edi)\n" + : : "S"(p), "D"(q) : "memory"); + + p += 16; + q += 16; + } +} + +// iterative DFS +void walsh_field_iter(symbol *p, int size) +{ + int i; + size/=4; + for (i=0; i>= 1; + }; + // next bloc + p += 4*NFIELD; + } +} + +// Recursive version +void walsh_field_rec(symbol *p, int size) +{ +// if (size==2) return walsh_step_simple(p,p+n_field,1); + if (size==4) return walsh_end(p); + + size /= 2; + symbol *q = p + size*NFIELD; + walsh_field_rec(p,size); + walsh_field_rec(q,size); + +// walsh_step_simple(p,q,size); + walsh_step(p,q,size/2); +} + +void walsh_field(symbol *vect) +{ + return walsh_field_iter(vect, N_walsh); + return walsh_field_rec(vect, N_walsh); + int i,j; + int step=n_field; + int size=n_field * N_walsh; + while (step>=1; + // we are interested only in the parity + // so no need to add &1; + } + } + + // compute the Walsh transforms of the coefficient + walsh_field(coeff); + + // multiply with precomputed Walsh transform of the inverse + field_product(); + + // walsh transform again + walsh_field(coeff); + + // put decoded symbol in place + // final multiplication by the product + temp = coeff + K*n_field; + for (i=0; i>= 1; + t ^= *(temp++); + } + + if (t) t = exp_table[log_table[t] + product_enc[K+i]]; + parity[i*S + j] = t; + } + } +} + +void fast_decode(int K, int S, int *positions, symbol *data, symbol *packets) +{ + int i,j,k; + + // copy the systematic pieces in place + for (i=0; i>=1; + // we are interested only in the parity + // so no need to add &1; + } + } + + // compute the Walsh transforms of the coefficient + walsh_field(coeff); + + // multiply with precomputed Walsh transform of the inverse + field_product(); + + // walsh transform again + walsh_field(coeff); + + // put decoded symbol in place + // final multiplication by the product + for (i=0; i>= 1; + t ^= *(temp++); + } + + if (t) t = exp_table[log_table[t] + product[i]]; + packets[i*S + j] = t; + } + } +} + diff --git a/CUETools.CLParity/fastdecode/new/reed_solomon.h b/CUETools.CLParity/fastdecode/new/reed_solomon.h new file mode 100644 index 0000000..103154d --- /dev/null +++ b/CUETools.CLParity/fastdecode/new/reed_solomon.h @@ -0,0 +1,49 @@ +// Reed-Solomon encoding/erasure decoding + +// Implementation of the algorithms described in +// Efficient erasure decoding of Reed-Solomon codes +// http://arxiv.org/abs/0901.1886v1 + +// (c) 2009 Frederic didier. +// Any feedback is very welcome. For any question, comments, +// see http://algo.epfl.ch/~didier/reed_solomon.html or email +// frederic.didier@epfl.ch + +// 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. +// +// 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 +// 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. + +// type used to store one field symbol +// With short int, we can work up to GF(16) +// If one wants to work on bigger fied, replace this by int. +typedef unsigned short symbol; +typedef unsigned char byte; + +// Common initialisation functions +extern void code_init(int n_field, int n_walsh); +extern void code_clear(); + +extern void encode_init(int K); +extern void fast_encode(int N, int K, int S, symbol *data, symbol *packets); +extern void fast_decode(int K, int S, int *positions, symbol *data, symbol *packets); + diff --git a/CUETools.CLParity/fastdecode/reed_solomon.c b/CUETools.CLParity/fastdecode/reed_solomon.c new file mode 100644 index 0000000..a95764e --- /dev/null +++ b/CUETools.CLParity/fastdecode/reed_solomon.c @@ -0,0 +1,1073 @@ +// Reed-Solomon encoding/erasure decoding + +// Implementation of the algorithms described in +// Efficient erasure decoding of Reed-Solomon codes +// http://arxiv.org/abs/0901.1886v1 + +// (c) 2009 Frederic didier. +// Any feedback is very welcome. For any question, comments, +// see http://algo.epfl.ch/~didier/reed_solomon.html or email +// frederic.didier@epfl.ch + +// 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. +// +// 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 +// BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, +// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, +// OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR +// TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +// OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY +// OF SUCH DAMAGE. +// + +// ************************************************ +// ************************************************ + +#include "reed_solomon.h" + +// ************************************************ +// ************************************************ +int n_field; +int N_field; +int modulo; + +symbol *log_table; +symbol *exp_table; + + +uint8_t *mult_table; + +// ************************************************ +// ************************************************ + +// compute the tables for the finite field operations +// exp_table is twice the needed size so we do not need to +// perform a modulo each time. + +// list of some primitive polynomials +int primitive[] = { + 0,1,6, + 0,3,7, + 0,2,3,4,8, + 0,4,9, + 0,3,10, + 0,2,11, + 0,1,4,6,12, + 0,1,3,4,13, + 0,1,11,12,14, + 0,1,15, + 0,1,3,12,16, + 0,3,17, + 0,3,20, + 0,3,25, + 100 // fallback +}; + +// will be set to the primitive poly of the field +// used only by the fast algorithm version +int *poly; +int weight; + +// contain the primitive poly in binary form +// used in xor type field multiplication +int field_mask; + +// init field. +void fill_table(int nf) +{ + n_field = nf; + N_field = 1<=n_field) break; + pos++; + } + + // used for the fast version only + poly = &primitive[temp]; + weight = pos-temp; + + if (primitive[pos]!=n_field) { + printf("primitive poly for GF %d not found !\n", n_field); + } + + // clock the lfsr (multiply by X) + int state=1; + int i; + for (i=0; i>n_field) state^=field_mask; + if (state>>n_field!=0) exit(0); + } + + // usefull since later + // since log_table[0]=0 + // we set log_table[1]=modulo + // so log_table is a bijection... + log_table[0]=0; + log_table[1]=modulo; + exp_table[2*modulo]=1; + + // for GF(2^8) + if (n_field==8) { + int i,j; + mult_table = (uint8_t *) malloc(256*256); + for (i=0; i<256; i++) + for (j=0; j<256; j++) { + if (j==0) mult_table[i*256+j]=0; + else mult_table[i*256+j]=exp_table[i+log_table[j]]; + } + } +} + +// ******************************************************* +// ******************************************************* + +void packet_clear(void *p, int S) +{ + memset(p, 0, S); +} + +void packet_log(void *p, int S) +{ + int i; + uint8_t *pt = (uint8_t *)p; + for (i=0; i> j)&1) { + uint32_t *src = (uint32_t *) (p_src + i*seg_size); + uint32_t *dst = (uint32_t *) (p_dst + j*seg_size); + + for (k=0; k>n_field) + cte^=field_mask; + } +} + +// less efficient even with inline ?? +void process_packet_xor2(int log_cte, void *p_dst, void *p_src, int S) +{ + int i,j; + + int seg_size = S / n_field; + int cte = exp_table[log_cte]; + + for (i=0; i> j)&1) { + memxor(p_dst+j*seg_size, p_src+i*seg_size, seg_size); + } + } + + // multiply cte by X + cte <<=1; + if (cte>>n_field) + cte^=field_mask; + } +} + +void process_packet_xor_eq(int log_cte, void *p_dst, void *p_src, int S) +{ + memset(p_dst, 0, S); + process_packet_xor(log_cte, p_dst, p_src, S); +} + +// ******************************************************* +// ******************************************************* + +int multiply(int a, int b) +{ + int i; + int res=0; + for (i=0; i> n_field) + a^=field_mask; + b >>=1; + } + return res; +} + +void process_packet_direct_simple(int log_cte, void *p_dst, void *p_src, int S) +{ + int i; + int cte = exp_table[log_cte]; + + uint16_t *src = (uint16_t *)p_src; + uint16_t *dst = (uint16_t *)p_dst; + for (i=0; i> n_field) + cte^=field_mask; + } + + uint16_t *src = (uint16_t *)p_src; + uint16_t *dst = (uint16_t *)p_dst; + for (i=0; i>0)&1)) & table[0]; + res ^= (-((a>>1)&1)) & table[1]; + res ^= (-((a>>2)&1)) & table[2]; + res ^= (-((a>>3)&1)) & table[3]; + res ^= (-((a>>4)&1)) & table[4]; + res ^= (-((a>>5)&1)) & table[5]; + res ^= (-((a>>6)&1)) & table[6]; + res ^= (-((a>>7)&1)) & table[7]; + res ^= (-((a>>8)&1)) & table[8]; + res ^= (-((a>>9)&1)) & table[9]; + res ^= (-((a>>10)&1)) & table[10]; + res ^= (-((a>>11)&1)) & table[11]; + res ^= (-((a>>12)&1)) & table[12]; + res ^= (-((a>>13)&1)) & table[13]; + res ^= (-((a>>14)&1)) & table[14]; + res ^= (-((a>>15)&1)) & table[15]; + *dst++ ^= res; + } +} + +void process_packet_direct_eq16(int log_cte, void *p_dst, void *p_src, int S) { + memset(p_dst, 0, S); + process_packet_direct16(log_cte, p_dst, p_src, S); +} + + +void process_packet_direct8(int log_cte, void *p_dst, void *p_src, int S) +{ + int i; + int cte = exp_table[log_cte]; + int table[8]; + for (i=0;i> n_field) + cte^=field_mask; + } + + uint8_t *src = (uint8_t *)p_src; + uint8_t *dst = (uint8_t *)p_dst; + for (i=0; i>0)&1)) & table[0]; + res ^= (-((a>>1)&1)) & table[1]; + res ^= (-((a>>2)&1)) & table[2]; + res ^= (-((a>>3)&1)) & table[3]; + res ^= (-((a>>4)&1)) & table[4]; + res ^= (-((a>>5)&1)) & table[5]; + res ^= (-((a>>6)&1)) & table[6]; + res ^= (-(a>>7)) & table[7]; + *dst++ ^= res; + } +} + +void process_packet_direct_eq8(int log_cte, void *p_dst, void *p_src, int S) { + memset(p_dst, 0, S); + process_packet_direct8(log_cte, p_dst, p_src, S); +} + + +// ******************************************************* +// ******************************************************* + +// these functions need the src packet +// to be in log form + +void process_packet_table(int log_cte, void *p_dst, void *p_src, int S) +{ + symbol *table = &exp_table[log_cte]; + int t = table[0]; + table[0]=0; + + int i; + uint8_t *src = (uint8_t *)p_src; + uint8_t *dst = (uint8_t *)p_dst; + for (i=0; i>n_field); + b = (b & modulo) + (b>>n_field); + + vect[i]=a; + vect[i+step]=b; + + i++; + } + i+=step; + } + step<<=1; + } +} + +void code_init(int nw) +{ + n_walsh = nw; + if (n_field>31 || n_walsh > n_field) { + printf("incorrect field parameters\n"); + exit(0); + } + + N_field = 1< 16 + // otherwise int is ok. + for (i=0; imodulo) t-= modulo; + product[j] = t; + } + } +} + +// ******************************************************* +// ******************************************************* + +// for encoding, we can precompute the product once +void encode_init(int N, int K) +{ + int i; + + // fill pos + for (i=0; i 32bits **/ +/** Mersenne twister code **/ +/************************************************/ + +/* A C-program for MT19937: Integer version */ +/* genrand() generates one pseudorandom unsigned integer (32bit) */ +/* which is uniformly distributed among 0 to 2^32-1 for each */ +/* call. sgenrand(seed) set initial values to the working area */ +/* of 624 words. Before genrand(), sgenrand(seed) must be */ +/* called once. (seed is any 32-bit integer except for 0). */ +/* Coded by Takuji Nishimura, considering the suggestions by */ +/* Topher Cooper and Marc Rieffel in July-Aug. 1997. */ + +/* 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 */ + +/* Copyright (C) 1997 Makoto Matsumoto and Takuji Nishimura. */ +/* Any feedback is very welcome. For any question, comments, */ +/* see http://www.math.keio.ac.jp/matumoto/emt.html or email */ +/* matumoto@math.keio.ac.jp */ + +/* Period parameters */ +#define MT_N 624 +#define MT_M 397 +#define MATRIX_A 0x9908b0df /* constant vector a */ +#define UPPER_MASK 0x80000000 /* most significant w-r bits */ +#define LOWER_MASK 0x7fffffff /* least significant r bits */ + +/* Tempering parameters */ +#define TEMPERING_MASK_B 0x9d2c5680 +#define TEMPERING_MASK_C 0xefc60000 +#define TEMPERING_SHIFT_U(y) (y >> 11) +#define TEMPERING_SHIFT_S(y) (y << 7) +#define TEMPERING_SHIFT_T(y) (y << 15) +#define TEMPERING_SHIFT_L(y) (y >> 18) + +static unsigned long mt[MT_N]; /* the table for the state vector */ +static int mti=MT_N+1; /* mti==MT_N+1 means mt[MT_N] is not initialized */ + +/* initializing the table with a NONZERO seed */ +void sgenrand(unsigned long seed) +{ + /* setting initial seeds to mt[MT_N] using */ + /* the generator Line 25 of Table 1 in */ + /* [KNUTH 1981, The Art of Computer Programming */ + /* Vol. 2 (2nd Ed.), pp102] */ + mt[0]= seed & 0xffffffff; + for (mti=1; mti= MT_N) { /* generate MT_N words at one time */ + int kk; + + if (mti == MT_N+1) /* if sgenrand() has not been called, */ + sgenrand(4357); /* a default initial seed is used */ + + for (kk=0;kk> 1) ^ mag01[y & 0x1]; + } + for (;kk> 1) ^ mag01[y & 0x1]; + } + y = (mt[MT_N-1]&UPPER_MASK)|(mt[0]&LOWER_MASK); + mt[MT_N-1] = mt[MT_M-1] ^ (y >> 1) ^ mag01[y & 0x1]; + + mti = 0; + } + + y = mt[mti++]; + y ^= TEMPERING_SHIFT_U(y); + y ^= TEMPERING_SHIFT_S(y) & TEMPERING_MASK_B; + y ^= TEMPERING_SHIFT_T(y) & TEMPERING_MASK_C; + y ^= TEMPERING_SHIFT_L(y); + + return y; +} + +double double_genrand() { + return genrand() * (1.0/4294967295.0); +} + +// ******************************************************* + +void generate_message(void *data, int size, int n_field) +{ + if (n_field==8 || n_field==16) { + int *p = (int *)data; + size >>=2; + int i; + for (i=0; i>=1; + int i; + for (i=0; i>=2; + int res=0; + int i; + for (i=0; i2) S = atoi(argv[2])*n_field*4; + if (argc>3) nb_bloc = atoi(argv[3]); + if (argc>4) nb_time = atoi(argv[4]); + + // print parameters + printf("[parameters]\n"); + printf("GF 2^%d\n", n_field); + + printf("packet size = %d Byte\n", S); + printf("number of packets = %d (%f KB)\n", nb_bloc, get_KB(nb_bloc * S)); + printf("number of time = %d\n", nb_time); + printf("\n"); + + // **************************************** + // **************************************** + printf("[initialisation (memory + randomness)]\n"); + tick = clock(); + + // init field + fill_table(n_field); + + // this is the memory for the packet and their positions + void *source; + void *destination; + int *coeff; + + source = malloc(S*nb_bloc); + destination = malloc(S*nb_bloc); + coeff = malloc(nb_bloc*sizeof(int)); + + // init random number generator + // sgenrand(time(NULL)); + sgenrand(123); + + // Generate the random message + generate_message(source, S*nb_bloc, n_field); + for (i=0; i 1000 +#pragma once +#endif + +#include + +// For Visual Studio 6 in C++ mode and for many Visual Studio versions when +// compiling for ARM we should wrap include with 'extern "C++" {}' +// or compiler give many errors like this: +// error C2733: second C linkage of overloaded function 'wmemchr' not allowed +#ifdef __cplusplus +extern "C" { +#endif +# include +#ifdef __cplusplus +} +#endif + +// Define _W64 macros to mark types changing their size, like intptr_t. +#ifndef _W64 +# if !defined(__midl) && (defined(_X86_) || defined(_M_IX86)) && _MSC_VER >= 1300 +# define _W64 __w64 +# else +# define _W64 +# endif +#endif + + +// 7.18.1 Integer types + +// 7.18.1.1 Exact-width integer types + +// Visual Studio 6 and Embedded Visual C++ 4 doesn't +// realize that, e.g. char has the same size as __int8 +// so we give up on __intX for them. +#if (_MSC_VER < 1300) + typedef signed char int8_t; + typedef signed short int16_t; + typedef signed int int32_t; + typedef unsigned char uint8_t; + typedef unsigned short uint16_t; + typedef unsigned int uint32_t; +#else + typedef signed __int8 int8_t; + typedef signed __int16 int16_t; + typedef signed __int32 int32_t; + typedef unsigned __int8 uint8_t; + typedef unsigned __int16 uint16_t; + typedef unsigned __int32 uint32_t; +#endif +typedef signed __int64 int64_t; +typedef unsigned __int64 uint64_t; + + +// 7.18.1.2 Minimum-width integer types +typedef int8_t int_least8_t; +typedef int16_t int_least16_t; +typedef int32_t int_least32_t; +typedef int64_t int_least64_t; +typedef uint8_t uint_least8_t; +typedef uint16_t uint_least16_t; +typedef uint32_t uint_least32_t; +typedef uint64_t uint_least64_t; + +// 7.18.1.3 Fastest minimum-width integer types +typedef int8_t int_fast8_t; +typedef int16_t int_fast16_t; +typedef int32_t int_fast32_t; +typedef int64_t int_fast64_t; +typedef uint8_t uint_fast8_t; +typedef uint16_t uint_fast16_t; +typedef uint32_t uint_fast32_t; +typedef uint64_t uint_fast64_t; + +// 7.18.1.4 Integer types capable of holding object pointers +#ifdef _WIN64 // [ + typedef signed __int64 intptr_t; + typedef unsigned __int64 uintptr_t; +#else // _WIN64 ][ + typedef _W64 signed int intptr_t; + typedef _W64 unsigned int uintptr_t; +#endif // _WIN64 ] + +// 7.18.1.5 Greatest-width integer types +typedef int64_t intmax_t; +typedef uint64_t uintmax_t; + + +// 7.18.2 Limits of specified-width integer types + +#if !defined(__cplusplus) || defined(__STDC_LIMIT_MACROS) // [ See footnote 220 at page 257 and footnote 221 at page 259 + +// 7.18.2.1 Limits of exact-width integer types +#define INT8_MIN ((int8_t)_I8_MIN) +#define INT8_MAX _I8_MAX +#define INT16_MIN ((int16_t)_I16_MIN) +#define INT16_MAX _I16_MAX +#define INT32_MIN ((int32_t)_I32_MIN) +#define INT32_MAX _I32_MAX +#define INT64_MIN ((int64_t)_I64_MIN) +#define INT64_MAX _I64_MAX +#define UINT8_MAX _UI8_MAX +#define UINT16_MAX _UI16_MAX +#define UINT32_MAX _UI32_MAX +#define UINT64_MAX _UI64_MAX + +// 7.18.2.2 Limits of minimum-width integer types +#define INT_LEAST8_MIN INT8_MIN +#define INT_LEAST8_MAX INT8_MAX +#define INT_LEAST16_MIN INT16_MIN +#define INT_LEAST16_MAX INT16_MAX +#define INT_LEAST32_MIN INT32_MIN +#define INT_LEAST32_MAX INT32_MAX +#define INT_LEAST64_MIN INT64_MIN +#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_FAST8_MAX INT8_MAX +#define INT_FAST16_MIN INT16_MIN +#define INT_FAST16_MAX INT16_MAX +#define INT_FAST32_MIN INT32_MIN +#define INT_FAST32_MAX INT32_MAX +#define INT_FAST64_MIN INT64_MIN +#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 // _WIN64 ][ +# define INTPTR_MIN INT32_MIN +# define INTPTR_MAX INT32_MAX +# define UINTPTR_MAX UINT32_MAX +#endif // _WIN64 ] + +// 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 _I64_MIN +# define PTRDIFF_MAX _I64_MAX +#else // _WIN64 ][ +# define PTRDIFF_MIN _I32_MIN +# define PTRDIFF_MAX _I32_MAX +#endif // _WIN64 ] + +#define SIG_ATOMIC_MIN INT_MIN +#define SIG_ATOMIC_MAX INT_MAX + +#ifndef SIZE_MAX // [ +# ifdef _WIN64 // [ +# define SIZE_MAX _UI64_MAX +# else // _WIN64 ][ +# define SIZE_MAX _UI32_MAX +# endif // _WIN64 ] +#endif // SIZE_MAX ] + +// WCHAR_MIN and WCHAR_MAX are also defined in +#ifndef WCHAR_MIN // [ +# define WCHAR_MIN 0 +#endif // WCHAR_MIN ] +#ifndef WCHAR_MAX // [ +# define WCHAR_MAX _UI16_MAX +#endif // WCHAR_MAX ] + +#define WINT_MIN 0 +#define WINT_MAX _UI16_MAX + +#endif // __STDC_LIMIT_MACROS ] + + +// 7.18.4 Limits of other integer types + +#if !defined(__cplusplus) || defined(__STDC_CONSTANT_MACROS) // [ See footnote 224 at page 260 + +// 7.18.4.1 Macros for minimum-width integer constants + +#define INT8_C(val) val##i8 +#define INT16_C(val) val##i16 +#define INT32_C(val) val##i32 +#define INT64_C(val) val##i64 + +#define UINT8_C(val) val##ui8 +#define UINT16_C(val) val##ui16 +#define UINT32_C(val) val##ui32 +#define UINT64_C(val) val##ui64 + +// 7.18.4.2 Macros for greatest-width integer constants +#define INTMAX_C INT64_C +#define UINTMAX_C UINT64_C + +#endif // __STDC_CONSTANT_MACROS ] + + +#endif // _MSC_STDINT_H_ ] diff --git a/CUETools.CLParity/fastdecode/test_rs.c b/CUETools.CLParity/fastdecode/test_rs.c new file mode 100644 index 0000000..96ca4e8 --- /dev/null +++ b/CUETools.CLParity/fastdecode/test_rs.c @@ -0,0 +1,1228 @@ +// Reed-Solomon encoding/erasure decoding + +// Implementation of the algorithms described in +// Efficient erasure decoding of Reed-Solomon codes +// http://arxiv.org/abs/0901.1886v1 + +// (c) 2009 Frederic didier. +// Any feedback is very welcome. For any question, comments, +// see http://algo.epfl.ch/~didier/reed_solomon.html or email +// frederic.didier@epfl.ch + +// 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. +// +// 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 +// BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, +// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, +// OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR +// TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +// OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY +// OF SUCH DAMAGE. +// + +// ************************************************ +// ************************************************ + +#include "reed_solomon.h" +#include "stdlib.h" +#include "stdio.h" + +int n_field; +int n_walsh; +int N_field; +int N_walsh; +int modulo; + +symbol *log_table; +symbol *exp_table; + +symbol *product; +symbol *lagrange; +symbol *product_enc; + +symbol *log_walsh; +symbol *pos; +symbol *upos; + +// ************************************************ +// ************************************************ + +// compute the tables for the finite field operations +// exp_table is twice the needed size so we do not need to +// perform a modulo each time. + +// list of some primitive polynomials +int primitive[] = { + 0,1,6, + 0,3,7, + 0,2,3,4,8, + 0,4,9, + 0,3,10, + 0,2,11, + 0,1,4,6,12, + 0,1,3,4,13, + 0,1,11,12,14, + 0,1,15, + 0,1,3,12,16, + 0,3,17, + 0,3,20, + 0,3,25, + 100 // fallback +}; + +// will be set to the primitive poly of the field +// used only by the fast algorithm version +int *poly; +int weight; + +void fill_table() +{ + int i; + for (i=0; i=n_field) break; + pos++; + } + + // used for the fast version only + poly = &primitive[temp]; + weight = pos-temp; + + if (primitive[pos]!=n_field) { + printf("primitive poly for GF %d not found !\n", n_field); + } + + // clock the lfsr (multiply by X) + int state=1; + for (i=0; i>n_field) state^=mask; + if (state>>n_field!=0) exit(0); + } + + // usefull since later + // log_table[1] = modulo + exp_table[2*modulo]=1; +} + +// ************************************************ +// ************************************************ + +// Perform a Walsh transform and keep the coeffs mod (modulo) +// The transformation is involutive if N_walsh = N_field. +void walsh_mod(symbol *vect) +{ + int i,j,step; + step=1; + while (step>n_field); + b = (b & modulo) + (b>>n_field); + + vect[i]=a; + vect[i+step]=b; + + i++; + } + i+=step; + } + step<<=1; + } +} + +void code_init(int nf, int nw) +{ + int i; + + n_field = nf; + n_walsh = nw; + if (n_field>31 || n_walsh > n_field) { + printf("incorrect field parameters\n"); + exit(0); + } + + N_field = 1< 16 + // otherwise int is ok. + for (i=0; imodulo) t-= modulo; + product[j] = t; + } + } +} + +// ******************************************************* +// ******************************************************* + +// compute one redundancy piece +// this is the heart of the encoding/decoding complexity + +// [data] contain the [K] known pieces and the log of the coefficients +// [positions] contain their positions in the codeword +// [x] is the index of the piece we want to compute +// [output] is where we will write the result + +// both functions are almost identical +// but it is usefull to have two for profiling + +void quadratic_enc(int K, int S, symbol *data, symbol *output, int x) +{ + int i,j; + int m = product_enc[x]; + + // first time we overwrite output + { + // the second substraction can also + // go into quadratic_init + int t = m - log_table[x] - product_enc[0]; + if (t<0) t+= modulo; + if (t<0) t+= modulo; + + // we set table[0] = 0 + // because 0 correspond to a null coefficient + // and not to a logarithm of 0. + symbol *table = &exp_table[t]; + t = table[0]; + table[0]=0; + + symbol *o = output; + + for (j=0; j=K) + lagrange[i] = exp_table[modulo - log_table[p ^ upos[i]] + log_table[p ^ x]]; + } + lagrange[x-K]=p^x; + } else { + // we want a 0 at old_pos (we have a 1 now) + // we want a 1 at x + + // put the 0 + for (i=0; i=K) + lagrange[i] ^= exp_table[modulo - log_table[p ^ upos[i]] + log_table[p ^ old_pos]]; + } + + // rescale to get the one + int c = lagrange[x-K]; + upos[x-K]=p; + lagrange[x-K]=p ^ old_pos; + + for (i=0; i>j)&1; + } + + // precompute the Walsh transforms of the inverse + walsh_field(inverse); +} + +void fast_clear() +{ + free(codeword); + free(coeff); + free(inverse); +} + +// ******************************************************* +// ******************************************************* + +// compute field product of the vector coeff and inverse +// for each [n_field] consecutive int of [inverse] and [coeff] +// multiply them as if they were element of the field in the +// standard basis. +// +// the difference is instead of coefficients in GF_2, +// the coefficients are in Z ... +// +// The other limiting part in the complexity (with walsh_field). +// The multiplication is quadratic in n_field +// and is performed N_walsh time. + +void field_product() +{ + int i,j,k; + symbol s[64]; + + symbol *inv = inverse; + + for (k=0; k>j)&1; + } + } + + // compute the Walsh transforms of the coefficient + walsh_field(coeff); + + // multiply with precomputed Walsh transform of the inverse + field_product(); + + // walsh transform again + walsh_field(coeff); + + // final multiplication by the product + for (i=0; i> n_walsh) &1 ) << j; + } + + if (t) { + res[i] = exp_table[log_table[t] + product[i]]; + } + } + } +} + +// ******************************************************* +// ******************************************************* + +void fast_encode(int N, int K, int S, symbol *data, symbol *packets) +{ + int i,j; + + // fill pos + for (i=0; i the number of symbols transmitted +% k = the number of code symbols that is going to be codes to a n symbol message +% t = the number of errors that can be found + corrected + +%Tripple-error-correcting Reed-Solomon code with symbols from GF(2^4) +% Lin & Costello p.175 and article: Reed_Solomon Codes by Joel Sylvester + +%generator polynomial + +%field = gftuple([-1:2^m-2]', m, 2); + +%p = 2; m = 4; +%primpoly = [0 0 -Inf -Inf 0]; +%field = gftuple([-1:p^m-2]',primpoly,p); + + +%Lin + Costello, p.171 + + +%Encoder (Article) +%shift codeword by X^(n-k) +for ii = 1:n-k + shiftpol(ii) = -Inf; +end +shiftpol(n-k+1) = 0; +shiftcode = gfconv(code,shiftpol,field); + + +%divide shifted codeword by g(x) +[Q, R] = GFDECONV(shiftcode, g, field); + +while length(R) < n-k + R = [R -inf]; +end + +%for ii = 1:n-k +% CON(ii) = -Inf; +% if length(R) >= ii +% CON(ii) = gfadd(R(ii),CON(ii),field); +% end +%end + +%%concatenate the parity to the data +%message = [CON code]; diff --git a/CUETools.CLParity/matlab/RS_E_E_DEC.m b/CUETools.CLParity/matlab/RS_E_E_DEC.m new file mode 100644 index 0000000..28c66d4 --- /dev/null +++ b/CUETools.CLParity/matlab/RS_E_E_DEC.m @@ -0,0 +1,229 @@ +%h = n - k = npar +%t = h / 2 + +function DECODED = RS_E_E_DEC(received, erasures,n,k,t,h,g,field); + +%Check for decoding failures +%Previous decoder RS_E_E_DEC4 + +%**************** +%*** Decoding *** +%**************** + +%syndrome calculation +S = []; +%Subtitute alpha^i in received polynomial - Lin + Costello p.152 eq. 6.13 +for ii = 1:2*t + S(ii)= -Inf; + for cc = 1:n + S(ii) = gfadd(S(ii),gfmul(received(cc),gfpow(ii,cc-1,n),field),field); %Sum all the terms + end +end +%S + +%Test if syndrome = 0, if syndrome equals 0, assume that no errors occured +for i = 1:2*t + test_pol(i) = -Inf; +end + +if all (S == test_pol) + + message = received; + + for i = 1:n + if message(i) < 0 + message(i) = -Inf; + end + end + +else + + + %Compute the erasure locator polynomial: + erasures_pos = erasures - 1; + num_erasures = length(erasures); + + %Compute the erasure-locator polynomial + erasure_loc_pol = 0; + for i = 1:length(erasures_pos) + erasure_loc_pol = gfconv(erasure_loc_pol, [0 erasures_pos(i)],field); + end + + %Compute modified syndrome polynomial: + S_pol = [-inf S]; + dividend = gfconv(erasure_loc_pol,gfadd(0,S_pol,field),field); + dividend = gfadd(dividend,0,field); + + + divisor = []; + for i = 1:2*t+2 + divisor(i) = -Inf; + end + divisor(2*t+2) = 0; + + [q,mod_syn] = gfdeconv(dividend,divisor,field); + + while length(mod_syn) < h+1 + mod_syn = [mod_syn -Inf]; + end + + S_M = []; + for i = 1:h - num_erasures + S_M(i) = mod_syn(i + num_erasures + 1); + end + + flag = 0; + if isempty(S_M) == 1 + flag = 0; + else + for i = 1:length(S_M) + if (S_M(i) ~= -Inf) + flag = 1; %Other errors occured in conjunction with erasures + end + end + end + + + + %Find error-location polynomial sigma (Berlekamp's iterative algorithm - + %sigma = [0 7 4 6] + if (flag == 1) + %sigma = M_B2(n,k,length(S_M) - 1,S_M,field); + + + num_iter = t - num_erasures/2; + + + sigma = massey_berlekamp_M3(n,k,num_iter,S_M,field); + + %Chien search + %step 3 from Lin + Costello p.175 + %the error locating polynomial have a maximum of t entries + error_loc = []; + kk = 0; + + for ii = 0:n-1 + error_r = -Inf; + for cc = 1:length(sigma) + error_r = gfadd(error_r,gfmul(sigma(cc),gfpow(ii,cc-1,n),field),field); %Sum all the terms + end + if error_r == -Inf + kk = kk + 1; + error_loc(kk) = ii; + end + end + + + % Test if the roots are distinct + % Form a test polynomial by multiplying the roots of error_loc with each other + % Divide the error_loc pol by test pol + % if the degree of the quotient exceeds a constant, then the roots are + % not distinct + + test_pol = 0; + for ii = 1:length(error_loc) + test_pol = gfconv(test_pol,[error_loc(ii) 0],field); + end + + %test_pol + %error_loc + %sigma + + [QQ,RR] = gfdeconv(sigma,test_pol,field); + if length(QQ) > 1 + DECODED = received; + return + end + + + + + + comp_error_locs = []; + %Take reciprocals of elements in error_loc - error location numbers + for ii = 1:length(error_loc) + comp_error_locs(ii) = gfdiv(0,error_loc(ii),field); + end + %error_loc_p %places where errors occur + else + sigma = 0; + comp_error_locs = []; + end + + + + + + + + %Calculate error magnitudes - Forney algorithm? + %Step 4. Lin and Costello - This program uses another algorithm from: + % drake.ee.washington.edu/~adina/rsc/slide/node9.html + % http://www.ee.ucla.edu/~matache/rsc/slide.html + %Compute the error magnitude polynomial: + %1. Form the function [1 + S(x)] + + SS(1) = 0; + for ii = 1: 2*t + SS(ii+1) = S(ii); + end + + %SS + + + %2. form the product of SS and the KEY Equation + %OMEGA = gfconv(SS,sigma,field); + OMEGA = gfconv(sigma,gfadd(0,mod_syn,field),field); + + + + %3. OMEGA = (SS * sigma)mod(x^(2t+1)) + %3.1. Form a function := x^(2t+1) + for ii = 1: (2*t) + DIV(ii)= -Inf; + end + DIV(2*t+1) = 0; + + + %3.2. OMEGA = (SS * sigma)mod(x^(2t+1)) + [DUMMY, OMEGA] = gfdeconv(OMEGA,DIV,field); + %OMEGA + + %4. Differentiate the key equation with respect to x + %sigma_diff = gfdiff(sigma); + tsi = gfconv(sigma,erasure_loc_pol,field); + tsi_diff = gfdiff(tsi); + + e_e_places = [erasures_pos comp_error_locs]; + + %Calculate the error magnitudes + %Substitute the inverse into sigma_diff + for ii = 1:length(e_e_places) + %error_loc_p(ii) + ERR_DEN = gfsubstitute(tsi_diff,gfdiv(0,e_e_places(ii),field),length(tsi_diff),n,field); + ERR_NUM = gfsubstitute(OMEGA,gfdiv(0,e_e_places(ii),field),length(OMEGA),n,field); + ERR_NUM = gfmul(ERR_NUM,e_e_places(ii),field); + ERR(ii) = gfmul(ERR_NUM,gfdiv(0,ERR_DEN,field),field); + end + + %error_loc_p + %ERR + + %Determine introduced error + for ii = 1:n + ERR_p(ii) = -Inf; + end + + %Error - t must be substituted by amount of errors + for ii = 1:length(e_e_places) + pp = e_e_places(ii); + ERR_p(pp+1) = ERR(ii); + end + + %ERR_p + + message = gfadd(received,ERR_p,field); + +end + +DECODED = message; \ No newline at end of file diff --git a/CUETools.CLParity/matlab/gfdiff.m b/CUETools.CLParity/matlab/gfdiff.m new file mode 100644 index 0000000..b4863bc --- /dev/null +++ b/CUETools.CLParity/matlab/gfdiff.m @@ -0,0 +1,14 @@ +function diff = gfdiff(polynomial) + +%use: diff = gfdiff(polynomial) +%Differentiate polynomial with respect to x +l = length(polynomial); + +for cc = 2:l + %cc-1 represents the power of x + if mod(cc-1,2) == 0 %all the even powers are zero because of GF(2) + diff(cc-1) = -Inf; + else + diff(cc-1) = polynomial(cc); + end +end \ No newline at end of file diff --git a/CUETools.CLParity/matlab/gfpow.m b/CUETools.CLParity/matlab/gfpow.m new file mode 100644 index 0000000..510aff7 --- /dev/null +++ b/CUETools.CLParity/matlab/gfpow.m @@ -0,0 +1,4 @@ +function a = gfpow(value,p,n) +%a = gfpow(alpha,p,n) +%alpha^value, (alpha^value)^p and n = 2^m- in Galois field +a = mod(value*p,n); \ No newline at end of file diff --git a/CUETools.CLParity/matlab/gfsubstitute.m b/CUETools.CLParity/matlab/gfsubstitute.m new file mode 100644 index 0000000..943a5d2 --- /dev/null +++ b/CUETools.CLParity/matlab/gfsubstitute.m @@ -0,0 +1,11 @@ +function sum = gfsubstitute(polynomial,value,terms,n,field) + +%use: gfsubstitute(polynomial,value,terms,n,field) +%Subtitute i^value in polynomial +%the number of terms in polynomial +%n = n of the decoder + +sum = polynomial(1); +for cc = 2:terms + sum = gfadd(sum,gfmul(polynomial(cc),gfpow(value,cc-1,n),field),field); %Sum all the terms +end diff --git a/CUETools.CLParity/matlab/massey_berlekamp_M3.m b/CUETools.CLParity/matlab/massey_berlekamp_M3.m new file mode 100644 index 0000000..66132e3 --- /dev/null +++ b/CUETools.CLParity/matlab/massey_berlekamp_M3.m @@ -0,0 +1,106 @@ +function sigma = massey_berlekamp_M2(n,k,t,S,field) + +%http://www.ee.ucla.edu/~matache/rsc/node8.html#SECTION00051000000000000000 + +%Step 2: Initialize variables +kk = 0; + + + +for i = 1:n + Kappa(1,i) = -Inf; +end +Kappa(1,1) = 0; + +%Kappa + + + +LAMBDA = 0; +Tau = [-inf 0]; + +done = 0; + +%Step 3: +while (done ~= 1) + %disp('K'); + + kk = kk + 1; + + %disp('S(kk)'); + %S(kk) + + %disp('LAMBDA') + %LAMBDA + + sum = -Inf; + for i = 1:LAMBDA + %Kappa(kk,i+1) + %S(kk-i) + sum = gfadd(sum,gfmul(Kappa(kk,i+1),S(kk-i),field),field); + end + + %disp('Delta - sum') + %sum + + delta(kk) = gfadd(S(kk),sum,field); + + %disp('delta'); + %delta + + %Step 4: + if (delta(kk) == -Inf) + for i = 1:n + Kappa(kk+1,i) = Kappa(kk,i); + end + end + + + if (delta(kk) ~= -Inf) + + for i = 1:n + Kappa_i(i) = Kappa(kk-1+1,i); + end + + Kappa_k = gfadd(Kappa_i,gfconv(delta(kk),Tau,field),field); + + while length(Kappa_k) < n + Kappa_k = [Kappa_k -Inf]; + end + + for i = 1:length(Kappa_k) + Kappa(kk+1,i) = Kappa_k(i); + end + + + %Step 7: + if (2*LAMBDA < kk) + LAMBDA = kk - LAMBDA; + + for i = 1:n + Kappa_k(i) = Kappa(kk+1-1,i); + end + + Tau = gfconv(Kappa_k,gfdiv(0,delta(kk),field),field); + end + end + + %Step 8: + Tau = gfconv([-Inf 0],Tau,field); + + %step 9: + if kk >= 2*t + done = 1; + end + + %Kappa + %LAMBDA + %Tau + + +end + + +for i = 1:n + sigma(i) = Kappa(kk+1,i); +end \ No newline at end of file diff --git a/CUETools.CLParity/parity.cl b/CUETools.CLParity/parity.cl new file mode 100644 index 0000000..7b1308d --- /dev/null +++ b/CUETools.CLParity/parity.cl @@ -0,0 +1,199 @@ +/** + * CUETools.CLParity: Reed-Solomon (32 bit) using OpenCL + * Copyright (c) 2010 Gregory S. Chudov + * + * 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 Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#define WARP_SIZE 32 + +int +galois_mul(int x, int y) +{ + const int poly = 00020000007; + int prod = 0; + +//#pragma unroll 0 + for (int i = 0; i < 4; i++) + { + if (x & 1) prod ^= y; + y = (y << 1) ^ ((y >> 31) ? poly : 0); + if (x & 2) prod ^= y; + y = (y << 1) ^ ((y >> 31) ? poly : 0); + if (x & 4) prod ^= y; + y = (y << 1) ^ ((y >> 31) ? poly : 0); + if (x & 8) prod ^= y; + y = (y << 1) ^ ((y >> 31) ? poly : 0); + if (x & 16) prod ^= y; + y = (y << 1) ^ ((y >> 31) ? poly : 0); + if (x & 32) prod ^= y; + y = (y << 1) ^ ((y >> 31) ? poly : 0); + if (x & 64) prod ^= y; + y = (y << 1) ^ ((y >> 31) ? poly : 0); + if (x & 128) prod ^= y; + y = (y << 1) ^ ((y >> 31) ? poly : 0); + x >>= 8; + } + return prod; +} + +__kernel __attribute__((reqd_work_group_size(GROUP_SIZE, 1, 1))) +void reedSolomonInit(__global int *encodeGx0, __global int *encodeGx1, __global int *parity0, __global int *parity1, int npar) +{ + int i = get_group_id(0) * GROUP_SIZE + get_local_id(0); + parity0[i] = parity1[i] = 0; + encodeGx0[i] = encodeGx1[i] = (i == npar - 1 ? 1 : 0); + if (i < GROUP_SIZE) encodeGx0[npar + i] = encodeGx1[npar + i] = 0; + if (i == 0) parity0[npar] = parity1[npar] = 0; +} + +__kernel __attribute__((reqd_work_group_size(GROUP_SIZE, 1, 1))) +void reedSolomonInitGx(__global int *exp, __global int *old_encodeGx, __global int *new_encodeGx, int npar, int step) +{ + int tid = get_local_id(0); + int i = get_group_id(0) * (GROUP_SIZE / 2) + tid; + __local int gx[GROUP_SIZE]; + __local int ex[GROUP_SIZE / 2]; + + gx[tid] = old_encodeGx[i]; + if (tid < GROUP_SIZE / 2) ex[tid] = exp[step * (GROUP_SIZE / 2) + tid]; + barrier(CLK_LOCAL_MEM_FENCE); + for (int s = 0; s < GROUP_SIZE / 2; s++) + { + int p = tid + s < (GROUP_SIZE - 1) ? galois_mul(gx[tid], ex[s]) ^ gx[tid + 1] : 0; + barrier(CLK_LOCAL_MEM_FENCE); + gx[tid] = p; + barrier(CLK_LOCAL_MEM_FENCE); + } + barrier(CLK_LOCAL_MEM_FENCE); + if (tid < GROUP_SIZE / 2) new_encodeGx[i] = gx[tid]; +} + +__kernel __attribute__((reqd_work_group_size(GROUP_SIZE, 1, 1))) +void reedSolomonA(__global int* data, __global int*encodeGx, __global int*old_parity, int npar, int offset) +{ + int tid = get_local_id(0); + __local int ib[GROUP_SIZE]; + __local int gx[GROUP_SIZE]; + + ib[tid] = data[offset + tid] ^ old_parity[tid]; + gx[tid] = encodeGx[tid]; + barrier(CLK_LOCAL_MEM_FENCE); + + for (int s = 0; s < GROUP_SIZE; s++) + { + if (tid > s) + ib[tid] ^= galois_mul(ib[s], gx[tid - 1 - s]); + barrier(CLK_LOCAL_MEM_FENCE); + } + + data[offset + tid] = ib[tid]; +} + +__kernel __attribute__((reqd_work_group_size(GROUP_SIZE, 1, 1))) +void reedSolomonB(__global int* data, __global int* encodeGx, __global int* parity, int npar, int offset) +{ + __local int ib[GROUP_SIZE]; + __local int gx[GROUP_SIZE * 2]; + int tid = get_local_id(0); + int i = (get_group_id(0) * GROUP_SIZE) + get_local_id(0); + ib[tid] = data[offset + tid]; + gx[tid] = encodeGx[i]; + gx[tid + GROUP_SIZE] = i + GROUP_SIZE >= npar ? 0 : encodeGx[i + GROUP_SIZE]; + barrier(CLK_LOCAL_MEM_FENCE); + + int p = i + GROUP_SIZE >= npar ? 0 : parity[i + GROUP_SIZE]; + for (int s = 0; s < GROUP_SIZE; s++) + p ^= galois_mul(ib[s], gx[tid + GROUP_SIZE - 1 - s]); + parity[i] = p; +} + +__kernel __attribute__((reqd_work_group_size(GROUP_SIZE, 1, 1))) +void reedSolomon(__global int*data, __global int*encodeGx, __global int*old_parity, __global int *new_parity, int npar, int offset) +{ + int tid = get_local_id(0); + int i = (get_group_id(0) * GROUP_SIZE) + get_local_id(0); + __local int old[GROUP_SIZE]; + __local int ib; + if (tid == 0) + ib = old_parity[0] ^ data[offset]; + if (tid == 0) + old[GROUP_SIZE - 1] = old_parity[i + GROUP_SIZE]; + else + old[tid - 1] = old_parity[i]; + barrier(CLK_LOCAL_MEM_FENCE); + new_parity[i] = old[tid] ^ galois_mul(ib, encodeGx[i]); + //new_parity[i] = old_parity[i + 1] ^ galois_mul(ib, encodeGx[i]); +} + +__kernel __attribute__((reqd_work_group_size(GROUP_SIZE, 1, 1))) +void reedSolomonDecodeInit(__global int* data, int dataLen, __global int*expTbl, __global int*syn, int npar) +{ + int i = (get_group_id(0) * GROUP_SIZE) + get_local_id(0); + syn[i] = 0; +} + +__kernel __attribute__((reqd_work_group_size(GROUP_SIZE, 1, 1))) +void reedSolomonDecode(__global int* data, int dataLen, __global int*expTbl, __global int*syn, int npar) +{ + int tid = get_local_id(0); + int i = (get_group_id(0) * GROUP_SIZE) + get_local_id(0); + __local int ds[GROUP_SIZE]; + + ds[tid] = data[tid]; + barrier(CLK_LOCAL_MEM_FENCE); + + int wk = syn[i]; + int ai = expTbl[i]; + + for (int s = 0; s < GROUP_SIZE; s++) + wk = ds[s] ^ galois_mul(wk, ai); + + syn[i] = wk; +} + +int galois_exp(int t, int n) +{ + int e = 1; + for (int i = 0; i < 32; i++) + { + if ((n >> i) & 1) e = galois_mul(e, t); + t = galois_mul(t, t); + } + return e; +} + +__kernel __attribute__((reqd_work_group_size(GROUP_SIZE, 1, 1))) +void chienSearch(__global int *wk_out, int pos, __global int *sigma, int jisu, int n) +{ + const int poly = 00020000007; + const int oneByTwo = (poly >> 1) | (1 << 31); + int tid = get_local_id(0); + int i = (get_group_id(0) * GROUP_SIZE) + get_local_id(0); + int zexp = galois_exp(oneByTwo, i + pos); + int wk = 1; + int jzexp = 1; + __local int sj; + + for (int j = 1; j <= jisu; j++) + { + jzexp = galois_mul(jzexp, zexp); + if (tid == 0) sj = sigma[j]; + barrier(CLK_LOCAL_MEM_FENCE); + wk ^= galois_mul(sj, jzexp); // wk ^= sigma[j] / 2^(ij); + barrier(CLK_LOCAL_MEM_FENCE); + } + wk_out[i] = wk; +} diff --git a/CUETools.CTDB.Converter/CUETools.CTDB.Converter.csproj b/CUETools.CTDB.Converter/CUETools.CTDB.Converter.csproj index 0feff43..7c0545a 100644 --- a/CUETools.CTDB.Converter/CUETools.CTDB.Converter.csproj +++ b/CUETools.CTDB.Converter/CUETools.CTDB.Converter.csproj @@ -1,73 +1,30 @@ - - + + - Debug - x86 - 8.0.30703 - 2.0 - {F8C29953-A697-4462-82DC-DA7146654A64} - Exe - Properties - CUETools.CTDB.Converter + net40;net20;netcoreapp2.0 + 2.1.6.0 CUETools.CTDB.Converter - v2.0 - - - 512 + CUETools.CTDB.Converter + CUETools + Exe + A tool for CTDB database files conversion. + Copyright (c) 2008-2018 Grigory Chudov + Grigory Chudov + true + ..\bin\$(Configuration)\ + https://github.com/gchudov/cuetools.net + git + - - true - bin\Debug\ - DEBUG;TRACE - full - AnyCPU - bin\Debug\CUETools.CTDB.Converter.exe.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - prompt - MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets - false - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules - false - - - ..\bin\Release\ - TRACE - true - pdbonly - AnyCPU - bin\Release\CUETools.CTDB.Converter.exe.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - prompt - MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets - false - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules - false - - - - - - - - - - - - - {ECEB839C-171B-4535-958F-9899310A0342} - CUETools.Parity + + + + False + + + + - - - \ No newline at end of file + + diff --git a/CUETools.CTDB.Converter/Properties/AssemblyInfo.cs b/CUETools.CTDB.Converter/Properties/AssemblyInfo.cs deleted file mode 100644 index 0acd0f7..0000000 --- a/CUETools.CTDB.Converter/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("CUETools.CTDB.Converter")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("CUETools.CTDB.Converter")] -[assembly: AssemblyCopyright("Copyright © 2011")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("b6155a69-7207-4214-ad24-7737b8b1868a")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/CUETools.CTDB.EACPlugin/CUETools.CTDB.EACPlugin.csproj b/CUETools.CTDB.EACPlugin/CUETools.CTDB.EACPlugin.csproj index 4841539..b780faa 100644 --- a/CUETools.CTDB.EACPlugin/CUETools.CTDB.EACPlugin.csproj +++ b/CUETools.CTDB.EACPlugin/CUETools.CTDB.EACPlugin.csproj @@ -51,18 +51,6 @@ 4 AllRules.ruleset - - - False - .\Interop.HelperFunctionsLib.dll - False - - - - - - - Form @@ -116,24 +104,6 @@ Resources.Designer.cs - - - {5802C7E9-157E-4124-946D-70B5AE48A5A1} - CUETools.AccurateRip - - - {1DD41038-D885-46C5-8DDE-E0B82F066584} - CUETools.CDImage - - - {6458A13A-30EF-45A9-9D58-E5031B17BEE2} - CUETools.Codecs - - - {AA2A9A7E-45FB-4632-AD85-85B0E556F818} - CUETools.CTDB - - @@ -163,6 +133,42 @@ + + + .\Interop.HelperFunctionsLib.dll + True + + + + + + + + + {5802c7e9-157e-4124-946d-70b5ae48a5a1} + CUETools.AccurateRip + + + {1dd41038-d885-46c5-8dde-e0b82f066584} + CUETools.CDImage + + + {6458a13a-30ef-45a9-9d58-e5031b17bee2} + CUETools.Codecs + + + {c36efaa5-4f81-4a29-800d-ba866ff13bc8} + CUETools.CTDB.Types + + + {aa2a9a7e-45fb-4632-ad85-85b0e556f818} + CUETools.CTDB + + + {eceb839c-171b-4535-958f-9899310a0342} + CUETools.Parity + + - \ No newline at end of file + + diff --git a/CUETools.CTDB/CUETools.CTDB.csproj.bak b/CUETools.CTDB/CUETools.CTDB.csproj.bak new file mode 100644 index 0000000..1a5a1d1 --- /dev/null +++ b/CUETools.CTDB/CUETools.CTDB.csproj.bak @@ -0,0 +1,50 @@ + + + + net40;net20;netstandard2.0 + 2.1.6.0 + CUETools.CTDB + CUETools.CTDB + CUETools + A library for accessing CUETools Database. + Copyright (c) 2008-2018 Grigory Chudov + Grigory Chudov + true + ..\bin\$(Configuration)\ + https://github.com/gchudov/cuetools.net + git + + + + + + False + + + + + + + + ..\bin\Release\net20\CUETools.CTDB.Types.XmlSerializers.dll + + + + + + + ..\bin\Release\net40\CUETools.CTDB.Types.XmlSerializers.dll + + + + + + + + + + + + + + diff --git a/CUETools.CTDB/CUEToolsDB.cs b/CUETools.CTDB/CUEToolsDB.cs index 63597d5..57668c6 100644 --- a/CUETools.CTDB/CUEToolsDB.cs +++ b/CUETools.CTDB/CUEToolsDB.cs @@ -3,7 +3,6 @@ using System.Collections.Generic; using System.Collections.Specialized; using System.Globalization; using System.IO; -using System.Management; using System.Net; using System.Security.Cryptography; using System.Text; @@ -11,6 +10,13 @@ using System.Xml.Serialization; using CUETools.AccurateRip; using CUETools.CDImage; using CUETools.Parity; +#if NET20 +using System.Management; +#else +using DeviceId; +using DeviceId.Encoders; +using DeviceId.Formatters; +#endif using Krystalware.UploadHelper; namespace CUETools.CTDB @@ -98,9 +104,9 @@ namespace CUETools.CTDB this.QueryExceptionMessage = resp.StatusDescription; if (this.QueryResponseStatus == HttpStatusCode.OK) { - //XmlSerializer serializer = new XmlSerializer(typeof(CTDBResponse)); - XmlSerializer serializer = new Microsoft.Xml.Serialization.GeneratedAssembly.CTDBResponseSerializer(); - this.total = 0; + //var serializer = new XmlSerializer(typeof(CTDBResponse)); + var serializer = new Microsoft.Xml.Serialization.GeneratedAssembly.CTDBResponseSerializer(); + this.total = 0; using (Stream responseStream = resp.GetResponseStream()) { CTDBResponse ctdbResp = serializer.Deserialize(responseStream) as CTDBResponse; @@ -277,16 +283,27 @@ namespace CUETools.CTDB { if (uuidInfo == null) { +#if NET20 string id = "CTDB userid"; using (ManagementClass mc = new ManagementClass("Win32_ComputerSystemProduct")) foreach (ManagementObject mo in mc.GetInstances()) { - id = id + mo.Properties["UUID"].Value.ToString(); - break; - } - byte[] hashBytes = (new SHA1CryptoServiceProvider()).ComputeHash(Encoding.ASCII.GetBytes(id)); - uuidInfo = Convert.ToBase64String(hashBytes).Replace('+', '.').Replace('/', '_').Replace('=', '-'); - } + id = id + mo.Properties["UUID"].Value.ToString(); + break; + } + byte[] hashBytes = (new SHA1CryptoServiceProvider()).ComputeHash(Encoding.ASCII.GetBytes(id)); + uuidInfo = Convert.ToBase64String(hashBytes).Replace('+', '.').Replace('/', '_').Replace('=', '-'); +#else + uuidInfo = new DeviceIdBuilder() + .AddMachineName() +#if NET40 + .AddProcessorId() + .AddMotherboardSerialNumber() +#endif + .UseFormatter(new HashDeviceIdFormatter(() => SHA256.Create(), new Base64UrlByteArrayEncoder())) + .ToString(); +#endif + } return uuidInfo; } @@ -391,7 +408,8 @@ namespace CUETools.CTDB { using (Stream s = resp.GetResponseStream()) { - var serializer = new XmlSerializer(typeof(CTDBResponse)); + //var serializer = new XmlSerializer(typeof(CTDBResponse)); + var serializer = new Microsoft.Xml.Serialization.GeneratedAssembly.CTDBResponseSerializer(); return serializer.Deserialize(s) as CTDBResponse; } } diff --git a/CUETools.CTDB/GeneratedAssembly.cs b/CUETools.CTDB/GeneratedAssembly.cs new file mode 100644 index 0000000..b0744e7 --- /dev/null +++ b/CUETools.CTDB/GeneratedAssembly.cs @@ -0,0 +1,1810 @@ +namespace Microsoft.Xml.Serialization.GeneratedAssembly { + + public class XmlSerializationWriter1 : System.Xml.Serialization.XmlSerializationWriter { + + public void Write15_ctdb(object o) { + WriteStartDocument(); + if (o == null) { + WriteNullTagLiteral(@"ctdb", @"http://db.cuetools.net/ns/mmd-1.0#"); + return; + } + TopLevelElement(); + Write8_CTDBResponse(@"ctdb", @"http://db.cuetools.net/ns/mmd-1.0#", ((global::CUETools.CTDB.CTDBResponse)o), true, false); + } + + public void Write16_CTDBResponseEntry(object o) { + WriteStartDocument(); + if (o == null) { + WriteNullTagLiteral(@"CTDBResponseEntry", @""); + return; + } + TopLevelElement(); + Write9_CTDBResponseEntry(@"CTDBResponseEntry", @"", ((global::CUETools.CTDB.CTDBResponseEntry)o), true, false); + } + + public void Write17_CTDBResponseMeta(object o) { + WriteStartDocument(); + if (o == null) { + WriteNullTagLiteral(@"CTDBResponseMeta", @""); + return; + } + TopLevelElement(); + Write14_CTDBResponseMeta(@"CTDBResponseMeta", @"", ((global::CUETools.CTDB.CTDBResponseMeta)o), true, false); + } + + public void Write18_CTDBResponseMetaImage(object o) { + WriteStartDocument(); + if (o == null) { + WriteNullTagLiteral(@"CTDBResponseMetaImage", @""); + return; + } + TopLevelElement(); + Write10_CTDBResponseMetaImage(@"CTDBResponseMetaImage", @"", ((global::CUETools.CTDB.CTDBResponseMetaImage)o), true, false); + } + + public void Write19_CTDBResponseMetaLabel(object o) { + WriteStartDocument(); + if (o == null) { + WriteNullTagLiteral(@"CTDBResponseMetaLabel", @""); + return; + } + TopLevelElement(); + Write12_CTDBResponseMetaLabel(@"CTDBResponseMetaLabel", @"", ((global::CUETools.CTDB.CTDBResponseMetaLabel)o), true, false); + } + + public void Write20_CTDBResponseMetaRelease(object o) { + WriteStartDocument(); + if (o == null) { + WriteNullTagLiteral(@"CTDBResponseMetaRelease", @""); + return; + } + TopLevelElement(); + Write13_CTDBResponseMetaRelease(@"CTDBResponseMetaRelease", @"", ((global::CUETools.CTDB.CTDBResponseMetaRelease)o), true, false); + } + + public void Write21_CTDBResponseMetaTrack(object o) { + WriteStartDocument(); + if (o == null) { + WriteNullTagLiteral(@"CTDBResponseMetaTrack", @""); + return; + } + TopLevelElement(); + Write11_CTDBResponseMetaTrack(@"CTDBResponseMetaTrack", @"", ((global::CUETools.CTDB.CTDBResponseMetaTrack)o), true, false); + } + + void Write11_CTDBResponseMetaTrack(string n, string ns, global::CUETools.CTDB.CTDBResponseMetaTrack o, bool isNullable, bool needType) { + if ((object)o == null) { + if (isNullable) WriteNullTagLiteral(n, ns); + return; + } + if (!needType) { + System.Type t = o.GetType(); + if (t == typeof(global::CUETools.CTDB.CTDBResponseMetaTrack)) { + } + else { + throw CreateUnknownTypeException(o); + } + } + WriteStartElement(n, ns, o, false, null); + if (needType) WriteXsiType(@"CTDBResponseMetaTrack", @""); + WriteAttribute(@"name", @"", ((global::System.String)o.@name)); + WriteAttribute(@"artist", @"", ((global::System.String)o.@artist)); + WriteElementString(@"extra", @"", ((global::System.String)o.@extra)); + WriteEndElement(o); + } + + void Write13_CTDBResponseMetaRelease(string n, string ns, global::CUETools.CTDB.CTDBResponseMetaRelease o, bool isNullable, bool needType) { + if ((object)o == null) { + if (isNullable) WriteNullTagLiteral(n, ns); + return; + } + if (!needType) { + System.Type t = o.GetType(); + if (t == typeof(global::CUETools.CTDB.CTDBResponseMetaRelease)) { + } + else { + throw CreateUnknownTypeException(o); + } + } + WriteStartElement(n, ns, o, false, null); + if (needType) WriteXsiType(@"CTDBResponseMetaRelease", @""); + WriteAttribute(@"date", @"", ((global::System.String)o.@date)); + WriteAttribute(@"country", @"", ((global::System.String)o.@country)); + WriteEndElement(o); + } + + void Write12_CTDBResponseMetaLabel(string n, string ns, global::CUETools.CTDB.CTDBResponseMetaLabel o, bool isNullable, bool needType) { + if ((object)o == null) { + if (isNullable) WriteNullTagLiteral(n, ns); + return; + } + if (!needType) { + System.Type t = o.GetType(); + if (t == typeof(global::CUETools.CTDB.CTDBResponseMetaLabel)) { + } + else { + throw CreateUnknownTypeException(o); + } + } + WriteStartElement(n, ns, o, false, null); + if (needType) WriteXsiType(@"CTDBResponseMetaLabel", @""); + WriteAttribute(@"name", @"", ((global::System.String)o.@name)); + WriteAttribute(@"catno", @"", ((global::System.String)o.@catno)); + WriteEndElement(o); + } + + void Write10_CTDBResponseMetaImage(string n, string ns, global::CUETools.CTDB.CTDBResponseMetaImage o, bool isNullable, bool needType) { + if ((object)o == null) { + if (isNullable) WriteNullTagLiteral(n, ns); + return; + } + if (!needType) { + System.Type t = o.GetType(); + if (t == typeof(global::CUETools.CTDB.CTDBResponseMetaImage)) { + } + else { + throw CreateUnknownTypeException(o); + } + } + WriteStartElement(n, ns, o, false, null); + if (needType) WriteXsiType(@"CTDBResponseMetaImage", @""); + WriteAttribute(@"uri", @"", ((global::System.String)o.@uri)); + WriteAttribute(@"uri150", @"", ((global::System.String)o.@uri150)); + WriteAttribute(@"height", @"", System.Xml.XmlConvert.ToString((global::System.Int32)((global::System.Int32)o.@height))); + WriteAttribute(@"width", @"", System.Xml.XmlConvert.ToString((global::System.Int32)((global::System.Int32)o.@width))); + WriteAttribute(@"primary", @"", System.Xml.XmlConvert.ToString((global::System.Boolean)((global::System.Boolean)o.@primary))); + WriteEndElement(o); + } + + void Write14_CTDBResponseMeta(string n, string ns, global::CUETools.CTDB.CTDBResponseMeta o, bool isNullable, bool needType) { + if ((object)o == null) { + if (isNullable) WriteNullTagLiteral(n, ns); + return; + } + if (!needType) { + System.Type t = o.GetType(); + if (t == typeof(global::CUETools.CTDB.CTDBResponseMeta)) { + } + else { + throw CreateUnknownTypeException(o); + } + } + WriteStartElement(n, ns, o, false, null); + if (needType) WriteXsiType(@"CTDBResponseMeta", @""); + WriteAttribute(@"source", @"", ((global::System.String)o.@source)); + WriteAttribute(@"id", @"", ((global::System.String)o.@id)); + WriteAttribute(@"artist", @"", ((global::System.String)o.@artist)); + WriteAttribute(@"album", @"", ((global::System.String)o.@album)); + WriteAttribute(@"year", @"", ((global::System.String)o.@year)); + WriteAttribute(@"genre", @"", ((global::System.String)o.@genre)); + WriteAttribute(@"discnumber", @"", ((global::System.String)o.@discnumber)); + WriteAttribute(@"disccount", @"", ((global::System.String)o.@disccount)); + WriteAttribute(@"discname", @"", ((global::System.String)o.@discname)); + WriteAttribute(@"infourl", @"", ((global::System.String)o.@infourl)); + WriteAttribute(@"barcode", @"", ((global::System.String)o.@barcode)); + { + global::CUETools.CTDB.CTDBResponseMetaImage[] a = (global::CUETools.CTDB.CTDBResponseMetaImage[])o.@coverart; + if (a != null) { + for (int ia = 0; ia < a.Length; ia++) { + Write10_CTDBResponseMetaImage(@"coverart", @"", ((global::CUETools.CTDB.CTDBResponseMetaImage)a[ia]), false, false); + } + } + } + { + global::CUETools.CTDB.CTDBResponseMetaTrack[] a = (global::CUETools.CTDB.CTDBResponseMetaTrack[])o.@track; + if (a != null) { + for (int ia = 0; ia < a.Length; ia++) { + Write11_CTDBResponseMetaTrack(@"track", @"", ((global::CUETools.CTDB.CTDBResponseMetaTrack)a[ia]), false, false); + } + } + } + { + global::CUETools.CTDB.CTDBResponseMetaLabel[] a = (global::CUETools.CTDB.CTDBResponseMetaLabel[])o.@label; + if (a != null) { + for (int ia = 0; ia < a.Length; ia++) { + Write12_CTDBResponseMetaLabel(@"label", @"", ((global::CUETools.CTDB.CTDBResponseMetaLabel)a[ia]), false, false); + } + } + } + { + global::CUETools.CTDB.CTDBResponseMetaRelease[] a = (global::CUETools.CTDB.CTDBResponseMetaRelease[])o.@release; + if (a != null) { + for (int ia = 0; ia < a.Length; ia++) { + Write13_CTDBResponseMetaRelease(@"release", @"", ((global::CUETools.CTDB.CTDBResponseMetaRelease)a[ia]), false, false); + } + } + } + WriteElementString(@"extra", @"", ((global::System.String)o.@extra)); + WriteEndElement(o); + } + + void Write9_CTDBResponseEntry(string n, string ns, global::CUETools.CTDB.CTDBResponseEntry o, bool isNullable, bool needType) { + if ((object)o == null) { + if (isNullable) WriteNullTagLiteral(n, ns); + return; + } + if (!needType) { + System.Type t = o.GetType(); + if (t == typeof(global::CUETools.CTDB.CTDBResponseEntry)) { + } + else { + throw CreateUnknownTypeException(o); + } + } + WriteStartElement(n, ns, o, false, null); + if (needType) WriteXsiType(@"CTDBResponseEntry", @""); + WriteAttribute(@"id", @"", System.Xml.XmlConvert.ToString((global::System.Int64)((global::System.Int64)o.@id))); + WriteAttribute(@"crc32", @"", ((global::System.String)o.@crc32)); + WriteAttribute(@"confidence", @"", System.Xml.XmlConvert.ToString((global::System.Int32)((global::System.Int32)o.@confidence))); + WriteAttribute(@"npar", @"", System.Xml.XmlConvert.ToString((global::System.Int32)((global::System.Int32)o.@npar))); + WriteAttribute(@"stride", @"", System.Xml.XmlConvert.ToString((global::System.Int32)((global::System.Int32)o.@stride))); + WriteAttribute(@"hasparity", @"", ((global::System.String)o.@hasparity)); + WriteAttribute(@"parity", @"", ((global::System.String)o.@parity)); + WriteAttribute(@"syndrome", @"", ((global::System.String)o.@syndrome)); + WriteAttribute(@"trackcrcs", @"", ((global::System.String)o.@trackcrcs)); + WriteAttribute(@"toc", @"", ((global::System.String)o.@toc)); + WriteEndElement(o); + } + + void Write8_CTDBResponse(string n, string ns, global::CUETools.CTDB.CTDBResponse o, bool isNullable, bool needType) { + if ((object)o == null) { + if (isNullable) WriteNullTagLiteral(n, ns); + return; + } + if (!needType) { + System.Type t = o.GetType(); + if (t == typeof(global::CUETools.CTDB.CTDBResponse)) { + } + else { + throw CreateUnknownTypeException(o); + } + } + WriteStartElement(n, ns, o, false, null); + if (needType) WriteXsiType(@"CTDBResponse", @"http://db.cuetools.net/ns/mmd-1.0#"); + WriteAttribute(@"status", @"", ((global::System.String)o.@status)); + WriteAttribute(@"updateurl", @"", ((global::System.String)o.@updateurl)); + WriteAttribute(@"updatemsg", @"", ((global::System.String)o.@updatemsg)); + WriteAttribute(@"message", @"", ((global::System.String)o.@message)); + WriteAttribute(@"npar", @"", System.Xml.XmlConvert.ToString((global::System.Int32)((global::System.Int32)o.@npar))); + { + global::CUETools.CTDB.CTDBResponseEntry[] a = (global::CUETools.CTDB.CTDBResponseEntry[])o.@entry; + if (a != null) { + for (int ia = 0; ia < a.Length; ia++) { + Write2_CTDBResponseEntry(@"entry", @"http://db.cuetools.net/ns/mmd-1.0#", ((global::CUETools.CTDB.CTDBResponseEntry)a[ia]), false, false); + } + } + } + { + global::CUETools.CTDB.CTDBResponseMeta[] a = (global::CUETools.CTDB.CTDBResponseMeta[])o.@metadata; + if (a != null) { + for (int ia = 0; ia < a.Length; ia++) { + Write7_CTDBResponseMeta(@"metadata", @"http://db.cuetools.net/ns/mmd-1.0#", ((global::CUETools.CTDB.CTDBResponseMeta)a[ia]), false, false); + } + } + } + WriteEndElement(o); + } + + void Write7_CTDBResponseMeta(string n, string ns, global::CUETools.CTDB.CTDBResponseMeta o, bool isNullable, bool needType) { + if ((object)o == null) { + if (isNullable) WriteNullTagLiteral(n, ns); + return; + } + if (!needType) { + System.Type t = o.GetType(); + if (t == typeof(global::CUETools.CTDB.CTDBResponseMeta)) { + } + else { + throw CreateUnknownTypeException(o); + } + } + WriteStartElement(n, ns, o, false, null); + if (needType) WriteXsiType(@"CTDBResponseMeta", @"http://db.cuetools.net/ns/mmd-1.0#"); + WriteAttribute(@"source", @"", ((global::System.String)o.@source)); + WriteAttribute(@"id", @"", ((global::System.String)o.@id)); + WriteAttribute(@"artist", @"", ((global::System.String)o.@artist)); + WriteAttribute(@"album", @"", ((global::System.String)o.@album)); + WriteAttribute(@"year", @"", ((global::System.String)o.@year)); + WriteAttribute(@"genre", @"", ((global::System.String)o.@genre)); + WriteAttribute(@"discnumber", @"", ((global::System.String)o.@discnumber)); + WriteAttribute(@"disccount", @"", ((global::System.String)o.@disccount)); + WriteAttribute(@"discname", @"", ((global::System.String)o.@discname)); + WriteAttribute(@"infourl", @"", ((global::System.String)o.@infourl)); + WriteAttribute(@"barcode", @"", ((global::System.String)o.@barcode)); + { + global::CUETools.CTDB.CTDBResponseMetaImage[] a = (global::CUETools.CTDB.CTDBResponseMetaImage[])o.@coverart; + if (a != null) { + for (int ia = 0; ia < a.Length; ia++) { + Write3_CTDBResponseMetaImage(@"coverart", @"http://db.cuetools.net/ns/mmd-1.0#", ((global::CUETools.CTDB.CTDBResponseMetaImage)a[ia]), false, false); + } + } + } + { + global::CUETools.CTDB.CTDBResponseMetaTrack[] a = (global::CUETools.CTDB.CTDBResponseMetaTrack[])o.@track; + if (a != null) { + for (int ia = 0; ia < a.Length; ia++) { + Write4_CTDBResponseMetaTrack(@"track", @"http://db.cuetools.net/ns/mmd-1.0#", ((global::CUETools.CTDB.CTDBResponseMetaTrack)a[ia]), false, false); + } + } + } + { + global::CUETools.CTDB.CTDBResponseMetaLabel[] a = (global::CUETools.CTDB.CTDBResponseMetaLabel[])o.@label; + if (a != null) { + for (int ia = 0; ia < a.Length; ia++) { + Write5_CTDBResponseMetaLabel(@"label", @"http://db.cuetools.net/ns/mmd-1.0#", ((global::CUETools.CTDB.CTDBResponseMetaLabel)a[ia]), false, false); + } + } + } + { + global::CUETools.CTDB.CTDBResponseMetaRelease[] a = (global::CUETools.CTDB.CTDBResponseMetaRelease[])o.@release; + if (a != null) { + for (int ia = 0; ia < a.Length; ia++) { + Write6_CTDBResponseMetaRelease(@"release", @"http://db.cuetools.net/ns/mmd-1.0#", ((global::CUETools.CTDB.CTDBResponseMetaRelease)a[ia]), false, false); + } + } + } + WriteElementString(@"extra", @"http://db.cuetools.net/ns/mmd-1.0#", ((global::System.String)o.@extra)); + WriteEndElement(o); + } + + void Write6_CTDBResponseMetaRelease(string n, string ns, global::CUETools.CTDB.CTDBResponseMetaRelease o, bool isNullable, bool needType) { + if ((object)o == null) { + if (isNullable) WriteNullTagLiteral(n, ns); + return; + } + if (!needType) { + System.Type t = o.GetType(); + if (t == typeof(global::CUETools.CTDB.CTDBResponseMetaRelease)) { + } + else { + throw CreateUnknownTypeException(o); + } + } + WriteStartElement(n, ns, o, false, null); + if (needType) WriteXsiType(@"CTDBResponseMetaRelease", @"http://db.cuetools.net/ns/mmd-1.0#"); + WriteAttribute(@"date", @"", ((global::System.String)o.@date)); + WriteAttribute(@"country", @"", ((global::System.String)o.@country)); + WriteEndElement(o); + } + + void Write5_CTDBResponseMetaLabel(string n, string ns, global::CUETools.CTDB.CTDBResponseMetaLabel o, bool isNullable, bool needType) { + if ((object)o == null) { + if (isNullable) WriteNullTagLiteral(n, ns); + return; + } + if (!needType) { + System.Type t = o.GetType(); + if (t == typeof(global::CUETools.CTDB.CTDBResponseMetaLabel)) { + } + else { + throw CreateUnknownTypeException(o); + } + } + WriteStartElement(n, ns, o, false, null); + if (needType) WriteXsiType(@"CTDBResponseMetaLabel", @"http://db.cuetools.net/ns/mmd-1.0#"); + WriteAttribute(@"name", @"", ((global::System.String)o.@name)); + WriteAttribute(@"catno", @"", ((global::System.String)o.@catno)); + WriteEndElement(o); + } + + void Write4_CTDBResponseMetaTrack(string n, string ns, global::CUETools.CTDB.CTDBResponseMetaTrack o, bool isNullable, bool needType) { + if ((object)o == null) { + if (isNullable) WriteNullTagLiteral(n, ns); + return; + } + if (!needType) { + System.Type t = o.GetType(); + if (t == typeof(global::CUETools.CTDB.CTDBResponseMetaTrack)) { + } + else { + throw CreateUnknownTypeException(o); + } + } + WriteStartElement(n, ns, o, false, null); + if (needType) WriteXsiType(@"CTDBResponseMetaTrack", @"http://db.cuetools.net/ns/mmd-1.0#"); + WriteAttribute(@"name", @"", ((global::System.String)o.@name)); + WriteAttribute(@"artist", @"", ((global::System.String)o.@artist)); + WriteElementString(@"extra", @"http://db.cuetools.net/ns/mmd-1.0#", ((global::System.String)o.@extra)); + WriteEndElement(o); + } + + void Write3_CTDBResponseMetaImage(string n, string ns, global::CUETools.CTDB.CTDBResponseMetaImage o, bool isNullable, bool needType) { + if ((object)o == null) { + if (isNullable) WriteNullTagLiteral(n, ns); + return; + } + if (!needType) { + System.Type t = o.GetType(); + if (t == typeof(global::CUETools.CTDB.CTDBResponseMetaImage)) { + } + else { + throw CreateUnknownTypeException(o); + } + } + WriteStartElement(n, ns, o, false, null); + if (needType) WriteXsiType(@"CTDBResponseMetaImage", @"http://db.cuetools.net/ns/mmd-1.0#"); + WriteAttribute(@"uri", @"", ((global::System.String)o.@uri)); + WriteAttribute(@"uri150", @"", ((global::System.String)o.@uri150)); + WriteAttribute(@"height", @"", System.Xml.XmlConvert.ToString((global::System.Int32)((global::System.Int32)o.@height))); + WriteAttribute(@"width", @"", System.Xml.XmlConvert.ToString((global::System.Int32)((global::System.Int32)o.@width))); + WriteAttribute(@"primary", @"", System.Xml.XmlConvert.ToString((global::System.Boolean)((global::System.Boolean)o.@primary))); + WriteEndElement(o); + } + + void Write2_CTDBResponseEntry(string n, string ns, global::CUETools.CTDB.CTDBResponseEntry o, bool isNullable, bool needType) { + if ((object)o == null) { + if (isNullable) WriteNullTagLiteral(n, ns); + return; + } + if (!needType) { + System.Type t = o.GetType(); + if (t == typeof(global::CUETools.CTDB.CTDBResponseEntry)) { + } + else { + throw CreateUnknownTypeException(o); + } + } + WriteStartElement(n, ns, o, false, null); + if (needType) WriteXsiType(@"CTDBResponseEntry", @"http://db.cuetools.net/ns/mmd-1.0#"); + WriteAttribute(@"id", @"", System.Xml.XmlConvert.ToString((global::System.Int64)((global::System.Int64)o.@id))); + WriteAttribute(@"crc32", @"", ((global::System.String)o.@crc32)); + WriteAttribute(@"confidence", @"", System.Xml.XmlConvert.ToString((global::System.Int32)((global::System.Int32)o.@confidence))); + WriteAttribute(@"npar", @"", System.Xml.XmlConvert.ToString((global::System.Int32)((global::System.Int32)o.@npar))); + WriteAttribute(@"stride", @"", System.Xml.XmlConvert.ToString((global::System.Int32)((global::System.Int32)o.@stride))); + WriteAttribute(@"hasparity", @"", ((global::System.String)o.@hasparity)); + WriteAttribute(@"parity", @"", ((global::System.String)o.@parity)); + WriteAttribute(@"syndrome", @"", ((global::System.String)o.@syndrome)); + WriteAttribute(@"trackcrcs", @"", ((global::System.String)o.@trackcrcs)); + WriteAttribute(@"toc", @"", ((global::System.String)o.@toc)); + WriteEndElement(o); + } + + protected override void InitCallbacks() { + } + } + + public class XmlSerializationReader1 : System.Xml.Serialization.XmlSerializationReader { + + public object Read15_ctdb() { + object o = null; + Reader.MoveToContent(); + if (Reader.NodeType == System.Xml.XmlNodeType.Element) { + if (((object) Reader.LocalName == (object)id1_ctdb && (object) Reader.NamespaceURI == (object)id2_Item)) { + o = Read8_CTDBResponse(true, true); + } + else { + throw CreateUnknownNodeException(); + } + } + else { + UnknownNode(null, @"http://db.cuetools.net/ns/mmd-1.0#:ctdb"); + } + return (object)o; + } + + public object Read16_CTDBResponseEntry() { + object o = null; + Reader.MoveToContent(); + if (Reader.NodeType == System.Xml.XmlNodeType.Element) { + if (((object) Reader.LocalName == (object)id3_CTDBResponseEntry && (object) Reader.NamespaceURI == (object)id4_Item)) { + o = Read9_CTDBResponseEntry(true, true); + } + else { + throw CreateUnknownNodeException(); + } + } + else { + UnknownNode(null, @":CTDBResponseEntry"); + } + return (object)o; + } + + public object Read17_CTDBResponseMeta() { + object o = null; + Reader.MoveToContent(); + if (Reader.NodeType == System.Xml.XmlNodeType.Element) { + if (((object) Reader.LocalName == (object)id5_CTDBResponseMeta && (object) Reader.NamespaceURI == (object)id4_Item)) { + o = Read14_CTDBResponseMeta(true, true); + } + else { + throw CreateUnknownNodeException(); + } + } + else { + UnknownNode(null, @":CTDBResponseMeta"); + } + return (object)o; + } + + public object Read18_CTDBResponseMetaImage() { + object o = null; + Reader.MoveToContent(); + if (Reader.NodeType == System.Xml.XmlNodeType.Element) { + if (((object) Reader.LocalName == (object)id6_CTDBResponseMetaImage && (object) Reader.NamespaceURI == (object)id4_Item)) { + o = Read10_CTDBResponseMetaImage(true, true); + } + else { + throw CreateUnknownNodeException(); + } + } + else { + UnknownNode(null, @":CTDBResponseMetaImage"); + } + return (object)o; + } + + public object Read19_CTDBResponseMetaLabel() { + object o = null; + Reader.MoveToContent(); + if (Reader.NodeType == System.Xml.XmlNodeType.Element) { + if (((object) Reader.LocalName == (object)id7_CTDBResponseMetaLabel && (object) Reader.NamespaceURI == (object)id4_Item)) { + o = Read12_CTDBResponseMetaLabel(true, true); + } + else { + throw CreateUnknownNodeException(); + } + } + else { + UnknownNode(null, @":CTDBResponseMetaLabel"); + } + return (object)o; + } + + public object Read20_CTDBResponseMetaRelease() { + object o = null; + Reader.MoveToContent(); + if (Reader.NodeType == System.Xml.XmlNodeType.Element) { + if (((object) Reader.LocalName == (object)id8_CTDBResponseMetaRelease && (object) Reader.NamespaceURI == (object)id4_Item)) { + o = Read13_CTDBResponseMetaRelease(true, true); + } + else { + throw CreateUnknownNodeException(); + } + } + else { + UnknownNode(null, @":CTDBResponseMetaRelease"); + } + return (object)o; + } + + public object Read21_CTDBResponseMetaTrack() { + object o = null; + Reader.MoveToContent(); + if (Reader.NodeType == System.Xml.XmlNodeType.Element) { + if (((object) Reader.LocalName == (object)id9_CTDBResponseMetaTrack && (object) Reader.NamespaceURI == (object)id4_Item)) { + o = Read11_CTDBResponseMetaTrack(true, true); + } + else { + throw CreateUnknownNodeException(); + } + } + else { + UnknownNode(null, @":CTDBResponseMetaTrack"); + } + return (object)o; + } + + global::CUETools.CTDB.CTDBResponseMetaTrack Read11_CTDBResponseMetaTrack(bool isNullable, bool checkType) { + System.Xml.XmlQualifiedName xsiType = checkType ? GetXsiType() : null; + bool isNull = false; + if (isNullable) isNull = ReadNull(); + if (checkType) { + if (xsiType == null || ((object) ((System.Xml.XmlQualifiedName)xsiType).Name == (object)id9_CTDBResponseMetaTrack && (object) ((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)id4_Item)) { + } + else + throw CreateUnknownTypeException((System.Xml.XmlQualifiedName)xsiType); + } + if (isNull) return null; + global::CUETools.CTDB.CTDBResponseMetaTrack o; + o = new global::CUETools.CTDB.CTDBResponseMetaTrack(); + bool[] paramsRead = new bool[3]; + while (Reader.MoveToNextAttribute()) { + if (!paramsRead[0] && ((object) Reader.LocalName == (object)id10_name && (object) Reader.NamespaceURI == (object)id4_Item)) { + o.@name = Reader.Value; + paramsRead[0] = true; + } + else if (!paramsRead[1] && ((object) Reader.LocalName == (object)id11_artist && (object) Reader.NamespaceURI == (object)id4_Item)) { + o.@artist = Reader.Value; + paramsRead[1] = true; + } + else if (!IsXmlnsAttribute(Reader.Name)) { + UnknownNode((object)o, @":name, :artist"); + } + } + Reader.MoveToElement(); + if (Reader.IsEmptyElement) { + Reader.Skip(); + return o; + } + Reader.ReadStartElement(); + Reader.MoveToContent(); + int whileIterations0 = 0; + int readerCount0 = ReaderCount; + while (Reader.NodeType != System.Xml.XmlNodeType.EndElement && Reader.NodeType != System.Xml.XmlNodeType.None) { + if (Reader.NodeType == System.Xml.XmlNodeType.Element) { + if (!paramsRead[2] && ((object) Reader.LocalName == (object)id12_extra && (object) Reader.NamespaceURI == (object)id4_Item)) { + { + o.@extra = Reader.ReadElementString(); + } + paramsRead[2] = true; + } + else { + UnknownNode((object)o, @":extra"); + } + } + else { + UnknownNode((object)o, @":extra"); + } + Reader.MoveToContent(); + CheckReaderCount(ref whileIterations0, ref readerCount0); + } + ReadEndElement(); + return o; + } + + global::CUETools.CTDB.CTDBResponseMetaRelease Read13_CTDBResponseMetaRelease(bool isNullable, bool checkType) { + System.Xml.XmlQualifiedName xsiType = checkType ? GetXsiType() : null; + bool isNull = false; + if (isNullable) isNull = ReadNull(); + if (checkType) { + if (xsiType == null || ((object) ((System.Xml.XmlQualifiedName)xsiType).Name == (object)id8_CTDBResponseMetaRelease && (object) ((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)id4_Item)) { + } + else + throw CreateUnknownTypeException((System.Xml.XmlQualifiedName)xsiType); + } + if (isNull) return null; + global::CUETools.CTDB.CTDBResponseMetaRelease o; + o = new global::CUETools.CTDB.CTDBResponseMetaRelease(); + bool[] paramsRead = new bool[2]; + while (Reader.MoveToNextAttribute()) { + if (!paramsRead[0] && ((object) Reader.LocalName == (object)id13_date && (object) Reader.NamespaceURI == (object)id4_Item)) { + o.@date = Reader.Value; + paramsRead[0] = true; + } + else if (!paramsRead[1] && ((object) Reader.LocalName == (object)id14_country && (object) Reader.NamespaceURI == (object)id4_Item)) { + o.@country = Reader.Value; + paramsRead[1] = true; + } + else if (!IsXmlnsAttribute(Reader.Name)) { + UnknownNode((object)o, @":date, :country"); + } + } + Reader.MoveToElement(); + if (Reader.IsEmptyElement) { + Reader.Skip(); + return o; + } + Reader.ReadStartElement(); + Reader.MoveToContent(); + int whileIterations1 = 0; + int readerCount1 = ReaderCount; + while (Reader.NodeType != System.Xml.XmlNodeType.EndElement && Reader.NodeType != System.Xml.XmlNodeType.None) { + if (Reader.NodeType == System.Xml.XmlNodeType.Element) { + UnknownNode((object)o, @""); + } + else { + UnknownNode((object)o, @""); + } + Reader.MoveToContent(); + CheckReaderCount(ref whileIterations1, ref readerCount1); + } + ReadEndElement(); + return o; + } + + global::CUETools.CTDB.CTDBResponseMetaLabel Read12_CTDBResponseMetaLabel(bool isNullable, bool checkType) { + System.Xml.XmlQualifiedName xsiType = checkType ? GetXsiType() : null; + bool isNull = false; + if (isNullable) isNull = ReadNull(); + if (checkType) { + if (xsiType == null || ((object) ((System.Xml.XmlQualifiedName)xsiType).Name == (object)id7_CTDBResponseMetaLabel && (object) ((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)id4_Item)) { + } + else + throw CreateUnknownTypeException((System.Xml.XmlQualifiedName)xsiType); + } + if (isNull) return null; + global::CUETools.CTDB.CTDBResponseMetaLabel o; + o = new global::CUETools.CTDB.CTDBResponseMetaLabel(); + bool[] paramsRead = new bool[2]; + while (Reader.MoveToNextAttribute()) { + if (!paramsRead[0] && ((object) Reader.LocalName == (object)id10_name && (object) Reader.NamespaceURI == (object)id4_Item)) { + o.@name = Reader.Value; + paramsRead[0] = true; + } + else if (!paramsRead[1] && ((object) Reader.LocalName == (object)id15_catno && (object) Reader.NamespaceURI == (object)id4_Item)) { + o.@catno = Reader.Value; + paramsRead[1] = true; + } + else if (!IsXmlnsAttribute(Reader.Name)) { + UnknownNode((object)o, @":name, :catno"); + } + } + Reader.MoveToElement(); + if (Reader.IsEmptyElement) { + Reader.Skip(); + return o; + } + Reader.ReadStartElement(); + Reader.MoveToContent(); + int whileIterations2 = 0; + int readerCount2 = ReaderCount; + while (Reader.NodeType != System.Xml.XmlNodeType.EndElement && Reader.NodeType != System.Xml.XmlNodeType.None) { + if (Reader.NodeType == System.Xml.XmlNodeType.Element) { + UnknownNode((object)o, @""); + } + else { + UnknownNode((object)o, @""); + } + Reader.MoveToContent(); + CheckReaderCount(ref whileIterations2, ref readerCount2); + } + ReadEndElement(); + return o; + } + + global::CUETools.CTDB.CTDBResponseMetaImage Read10_CTDBResponseMetaImage(bool isNullable, bool checkType) { + System.Xml.XmlQualifiedName xsiType = checkType ? GetXsiType() : null; + bool isNull = false; + if (isNullable) isNull = ReadNull(); + if (checkType) { + if (xsiType == null || ((object) ((System.Xml.XmlQualifiedName)xsiType).Name == (object)id6_CTDBResponseMetaImage && (object) ((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)id4_Item)) { + } + else + throw CreateUnknownTypeException((System.Xml.XmlQualifiedName)xsiType); + } + if (isNull) return null; + global::CUETools.CTDB.CTDBResponseMetaImage o; + o = new global::CUETools.CTDB.CTDBResponseMetaImage(); + bool[] paramsRead = new bool[5]; + while (Reader.MoveToNextAttribute()) { + if (!paramsRead[0] && ((object) Reader.LocalName == (object)id16_uri && (object) Reader.NamespaceURI == (object)id4_Item)) { + o.@uri = Reader.Value; + paramsRead[0] = true; + } + else if (!paramsRead[1] && ((object) Reader.LocalName == (object)id17_uri150 && (object) Reader.NamespaceURI == (object)id4_Item)) { + o.@uri150 = Reader.Value; + paramsRead[1] = true; + } + else if (!paramsRead[2] && ((object) Reader.LocalName == (object)id18_height && (object) Reader.NamespaceURI == (object)id4_Item)) { + o.@height = System.Xml.XmlConvert.ToInt32(Reader.Value); + paramsRead[2] = true; + } + else if (!paramsRead[3] && ((object) Reader.LocalName == (object)id19_width && (object) Reader.NamespaceURI == (object)id4_Item)) { + o.@width = System.Xml.XmlConvert.ToInt32(Reader.Value); + paramsRead[3] = true; + } + else if (!paramsRead[4] && ((object) Reader.LocalName == (object)id20_primary && (object) Reader.NamespaceURI == (object)id4_Item)) { + o.@primary = System.Xml.XmlConvert.ToBoolean(Reader.Value); + paramsRead[4] = true; + } + else if (!IsXmlnsAttribute(Reader.Name)) { + UnknownNode((object)o, @":uri, :uri150, :height, :width, :primary"); + } + } + Reader.MoveToElement(); + if (Reader.IsEmptyElement) { + Reader.Skip(); + return o; + } + Reader.ReadStartElement(); + Reader.MoveToContent(); + int whileIterations3 = 0; + int readerCount3 = ReaderCount; + while (Reader.NodeType != System.Xml.XmlNodeType.EndElement && Reader.NodeType != System.Xml.XmlNodeType.None) { + if (Reader.NodeType == System.Xml.XmlNodeType.Element) { + UnknownNode((object)o, @""); + } + else { + UnknownNode((object)o, @""); + } + Reader.MoveToContent(); + CheckReaderCount(ref whileIterations3, ref readerCount3); + } + ReadEndElement(); + return o; + } + + global::CUETools.CTDB.CTDBResponseMeta Read14_CTDBResponseMeta(bool isNullable, bool checkType) { + System.Xml.XmlQualifiedName xsiType = checkType ? GetXsiType() : null; + bool isNull = false; + if (isNullable) isNull = ReadNull(); + if (checkType) { + if (xsiType == null || ((object) ((System.Xml.XmlQualifiedName)xsiType).Name == (object)id5_CTDBResponseMeta && (object) ((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)id4_Item)) { + } + else + throw CreateUnknownTypeException((System.Xml.XmlQualifiedName)xsiType); + } + if (isNull) return null; + global::CUETools.CTDB.CTDBResponseMeta o; + o = new global::CUETools.CTDB.CTDBResponseMeta(); + global::CUETools.CTDB.CTDBResponseMetaImage[] a_0 = null; + int ca_0 = 0; + global::CUETools.CTDB.CTDBResponseMetaTrack[] a_1 = null; + int ca_1 = 0; + global::CUETools.CTDB.CTDBResponseMetaLabel[] a_2 = null; + int ca_2 = 0; + global::CUETools.CTDB.CTDBResponseMetaRelease[] a_3 = null; + int ca_3 = 0; + bool[] paramsRead = new bool[16]; + while (Reader.MoveToNextAttribute()) { + if (!paramsRead[4] && ((object) Reader.LocalName == (object)id21_source && (object) Reader.NamespaceURI == (object)id4_Item)) { + o.@source = Reader.Value; + paramsRead[4] = true; + } + else if (!paramsRead[5] && ((object) Reader.LocalName == (object)id22_id && (object) Reader.NamespaceURI == (object)id4_Item)) { + o.@id = Reader.Value; + paramsRead[5] = true; + } + else if (!paramsRead[6] && ((object) Reader.LocalName == (object)id11_artist && (object) Reader.NamespaceURI == (object)id4_Item)) { + o.@artist = Reader.Value; + paramsRead[6] = true; + } + else if (!paramsRead[7] && ((object) Reader.LocalName == (object)id23_album && (object) Reader.NamespaceURI == (object)id4_Item)) { + o.@album = Reader.Value; + paramsRead[7] = true; + } + else if (!paramsRead[8] && ((object) Reader.LocalName == (object)id24_year && (object) Reader.NamespaceURI == (object)id4_Item)) { + o.@year = Reader.Value; + paramsRead[8] = true; + } + else if (!paramsRead[9] && ((object) Reader.LocalName == (object)id25_genre && (object) Reader.NamespaceURI == (object)id4_Item)) { + o.@genre = Reader.Value; + paramsRead[9] = true; + } + else if (!paramsRead[11] && ((object) Reader.LocalName == (object)id26_discnumber && (object) Reader.NamespaceURI == (object)id4_Item)) { + o.@discnumber = Reader.Value; + paramsRead[11] = true; + } + else if (!paramsRead[12] && ((object) Reader.LocalName == (object)id27_disccount && (object) Reader.NamespaceURI == (object)id4_Item)) { + o.@disccount = Reader.Value; + paramsRead[12] = true; + } + else if (!paramsRead[13] && ((object) Reader.LocalName == (object)id28_discname && (object) Reader.NamespaceURI == (object)id4_Item)) { + o.@discname = Reader.Value; + paramsRead[13] = true; + } + else if (!paramsRead[14] && ((object) Reader.LocalName == (object)id29_infourl && (object) Reader.NamespaceURI == (object)id4_Item)) { + o.@infourl = Reader.Value; + paramsRead[14] = true; + } + else if (!paramsRead[15] && ((object) Reader.LocalName == (object)id30_barcode && (object) Reader.NamespaceURI == (object)id4_Item)) { + o.@barcode = Reader.Value; + paramsRead[15] = true; + } + else if (!IsXmlnsAttribute(Reader.Name)) { + UnknownNode((object)o, @":source, :id, :artist, :album, :year, :genre, :discnumber, :disccount, :discname, :infourl, :barcode"); + } + } + Reader.MoveToElement(); + if (Reader.IsEmptyElement) { + Reader.Skip(); + o.@coverart = (global::CUETools.CTDB.CTDBResponseMetaImage[])ShrinkArray(a_0, ca_0, typeof(global::CUETools.CTDB.CTDBResponseMetaImage), true); + o.@track = (global::CUETools.CTDB.CTDBResponseMetaTrack[])ShrinkArray(a_1, ca_1, typeof(global::CUETools.CTDB.CTDBResponseMetaTrack), true); + o.@label = (global::CUETools.CTDB.CTDBResponseMetaLabel[])ShrinkArray(a_2, ca_2, typeof(global::CUETools.CTDB.CTDBResponseMetaLabel), true); + o.@release = (global::CUETools.CTDB.CTDBResponseMetaRelease[])ShrinkArray(a_3, ca_3, typeof(global::CUETools.CTDB.CTDBResponseMetaRelease), true); + return o; + } + Reader.ReadStartElement(); + Reader.MoveToContent(); + int whileIterations4 = 0; + int readerCount4 = ReaderCount; + while (Reader.NodeType != System.Xml.XmlNodeType.EndElement && Reader.NodeType != System.Xml.XmlNodeType.None) { + if (Reader.NodeType == System.Xml.XmlNodeType.Element) { + if (((object) Reader.LocalName == (object)id31_coverart && (object) Reader.NamespaceURI == (object)id4_Item)) { + a_0 = (global::CUETools.CTDB.CTDBResponseMetaImage[])EnsureArrayIndex(a_0, ca_0, typeof(global::CUETools.CTDB.CTDBResponseMetaImage));a_0[ca_0++] = Read10_CTDBResponseMetaImage(false, true); + } + else if (((object) Reader.LocalName == (object)id32_track && (object) Reader.NamespaceURI == (object)id4_Item)) { + a_1 = (global::CUETools.CTDB.CTDBResponseMetaTrack[])EnsureArrayIndex(a_1, ca_1, typeof(global::CUETools.CTDB.CTDBResponseMetaTrack));a_1[ca_1++] = Read11_CTDBResponseMetaTrack(false, true); + } + else if (((object) Reader.LocalName == (object)id33_label && (object) Reader.NamespaceURI == (object)id4_Item)) { + a_2 = (global::CUETools.CTDB.CTDBResponseMetaLabel[])EnsureArrayIndex(a_2, ca_2, typeof(global::CUETools.CTDB.CTDBResponseMetaLabel));a_2[ca_2++] = Read12_CTDBResponseMetaLabel(false, true); + } + else if (((object) Reader.LocalName == (object)id34_release && (object) Reader.NamespaceURI == (object)id4_Item)) { + a_3 = (global::CUETools.CTDB.CTDBResponseMetaRelease[])EnsureArrayIndex(a_3, ca_3, typeof(global::CUETools.CTDB.CTDBResponseMetaRelease));a_3[ca_3++] = Read13_CTDBResponseMetaRelease(false, true); + } + else if (!paramsRead[10] && ((object) Reader.LocalName == (object)id12_extra && (object) Reader.NamespaceURI == (object)id4_Item)) { + { + o.@extra = Reader.ReadElementString(); + } + paramsRead[10] = true; + } + else { + UnknownNode((object)o, @":coverart, :track, :label, :release, :extra"); + } + } + else { + UnknownNode((object)o, @":coverart, :track, :label, :release, :extra"); + } + Reader.MoveToContent(); + CheckReaderCount(ref whileIterations4, ref readerCount4); + } + o.@coverart = (global::CUETools.CTDB.CTDBResponseMetaImage[])ShrinkArray(a_0, ca_0, typeof(global::CUETools.CTDB.CTDBResponseMetaImage), true); + o.@track = (global::CUETools.CTDB.CTDBResponseMetaTrack[])ShrinkArray(a_1, ca_1, typeof(global::CUETools.CTDB.CTDBResponseMetaTrack), true); + o.@label = (global::CUETools.CTDB.CTDBResponseMetaLabel[])ShrinkArray(a_2, ca_2, typeof(global::CUETools.CTDB.CTDBResponseMetaLabel), true); + o.@release = (global::CUETools.CTDB.CTDBResponseMetaRelease[])ShrinkArray(a_3, ca_3, typeof(global::CUETools.CTDB.CTDBResponseMetaRelease), true); + ReadEndElement(); + return o; + } + + global::CUETools.CTDB.CTDBResponseEntry Read9_CTDBResponseEntry(bool isNullable, bool checkType) { + System.Xml.XmlQualifiedName xsiType = checkType ? GetXsiType() : null; + bool isNull = false; + if (isNullable) isNull = ReadNull(); + if (checkType) { + if (xsiType == null || ((object) ((System.Xml.XmlQualifiedName)xsiType).Name == (object)id3_CTDBResponseEntry && (object) ((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)id4_Item)) { + } + else + throw CreateUnknownTypeException((System.Xml.XmlQualifiedName)xsiType); + } + if (isNull) return null; + global::CUETools.CTDB.CTDBResponseEntry o; + o = new global::CUETools.CTDB.CTDBResponseEntry(); + bool[] paramsRead = new bool[10]; + while (Reader.MoveToNextAttribute()) { + if (!paramsRead[0] && ((object) Reader.LocalName == (object)id22_id && (object) Reader.NamespaceURI == (object)id4_Item)) { + o.@id = System.Xml.XmlConvert.ToInt64(Reader.Value); + paramsRead[0] = true; + } + else if (!paramsRead[1] && ((object) Reader.LocalName == (object)id35_crc32 && (object) Reader.NamespaceURI == (object)id4_Item)) { + o.@crc32 = Reader.Value; + paramsRead[1] = true; + } + else if (!paramsRead[2] && ((object) Reader.LocalName == (object)id36_confidence && (object) Reader.NamespaceURI == (object)id4_Item)) { + o.@confidence = System.Xml.XmlConvert.ToInt32(Reader.Value); + paramsRead[2] = true; + } + else if (!paramsRead[3] && ((object) Reader.LocalName == (object)id37_npar && (object) Reader.NamespaceURI == (object)id4_Item)) { + o.@npar = System.Xml.XmlConvert.ToInt32(Reader.Value); + paramsRead[3] = true; + } + else if (!paramsRead[4] && ((object) Reader.LocalName == (object)id38_stride && (object) Reader.NamespaceURI == (object)id4_Item)) { + o.@stride = System.Xml.XmlConvert.ToInt32(Reader.Value); + paramsRead[4] = true; + } + else if (!paramsRead[5] && ((object) Reader.LocalName == (object)id39_hasparity && (object) Reader.NamespaceURI == (object)id4_Item)) { + o.@hasparity = Reader.Value; + paramsRead[5] = true; + } + else if (!paramsRead[6] && ((object) Reader.LocalName == (object)id40_parity && (object) Reader.NamespaceURI == (object)id4_Item)) { + o.@parity = Reader.Value; + paramsRead[6] = true; + } + else if (!paramsRead[7] && ((object) Reader.LocalName == (object)id41_syndrome && (object) Reader.NamespaceURI == (object)id4_Item)) { + o.@syndrome = Reader.Value; + paramsRead[7] = true; + } + else if (!paramsRead[8] && ((object) Reader.LocalName == (object)id42_trackcrcs && (object) Reader.NamespaceURI == (object)id4_Item)) { + o.@trackcrcs = Reader.Value; + paramsRead[8] = true; + } + else if (!paramsRead[9] && ((object) Reader.LocalName == (object)id43_toc && (object) Reader.NamespaceURI == (object)id4_Item)) { + o.@toc = Reader.Value; + paramsRead[9] = true; + } + else if (!IsXmlnsAttribute(Reader.Name)) { + UnknownNode((object)o, @":id, :crc32, :confidence, :npar, :stride, :hasparity, :parity, :syndrome, :trackcrcs, :toc"); + } + } + Reader.MoveToElement(); + if (Reader.IsEmptyElement) { + Reader.Skip(); + return o; + } + Reader.ReadStartElement(); + Reader.MoveToContent(); + int whileIterations5 = 0; + int readerCount5 = ReaderCount; + while (Reader.NodeType != System.Xml.XmlNodeType.EndElement && Reader.NodeType != System.Xml.XmlNodeType.None) { + if (Reader.NodeType == System.Xml.XmlNodeType.Element) { + UnknownNode((object)o, @""); + } + else { + UnknownNode((object)o, @""); + } + Reader.MoveToContent(); + CheckReaderCount(ref whileIterations5, ref readerCount5); + } + ReadEndElement(); + return o; + } + + global::CUETools.CTDB.CTDBResponse Read8_CTDBResponse(bool isNullable, bool checkType) { + System.Xml.XmlQualifiedName xsiType = checkType ? GetXsiType() : null; + bool isNull = false; + if (isNullable) isNull = ReadNull(); + if (checkType) { + if (xsiType == null || ((object) ((System.Xml.XmlQualifiedName)xsiType).Name == (object)id44_CTDBResponse && (object) ((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)id2_Item)) { + } + else + throw CreateUnknownTypeException((System.Xml.XmlQualifiedName)xsiType); + } + if (isNull) return null; + global::CUETools.CTDB.CTDBResponse o; + o = new global::CUETools.CTDB.CTDBResponse(); + global::CUETools.CTDB.CTDBResponseEntry[] a_0 = null; + int ca_0 = 0; + global::CUETools.CTDB.CTDBResponseMeta[] a_1 = null; + int ca_1 = 0; + bool[] paramsRead = new bool[7]; + while (Reader.MoveToNextAttribute()) { + if (!paramsRead[2] && ((object) Reader.LocalName == (object)id45_status && (object) Reader.NamespaceURI == (object)id4_Item)) { + o.@status = Reader.Value; + paramsRead[2] = true; + } + else if (!paramsRead[3] && ((object) Reader.LocalName == (object)id46_updateurl && (object) Reader.NamespaceURI == (object)id4_Item)) { + o.@updateurl = Reader.Value; + paramsRead[3] = true; + } + else if (!paramsRead[4] && ((object) Reader.LocalName == (object)id47_updatemsg && (object) Reader.NamespaceURI == (object)id4_Item)) { + o.@updatemsg = Reader.Value; + paramsRead[4] = true; + } + else if (!paramsRead[5] && ((object) Reader.LocalName == (object)id48_message && (object) Reader.NamespaceURI == (object)id4_Item)) { + o.@message = Reader.Value; + paramsRead[5] = true; + } + else if (!paramsRead[6] && ((object) Reader.LocalName == (object)id37_npar && (object) Reader.NamespaceURI == (object)id4_Item)) { + o.@npar = System.Xml.XmlConvert.ToInt32(Reader.Value); + paramsRead[6] = true; + } + else if (!IsXmlnsAttribute(Reader.Name)) { + UnknownNode((object)o, @":status, :updateurl, :updatemsg, :message, :npar"); + } + } + Reader.MoveToElement(); + if (Reader.IsEmptyElement) { + Reader.Skip(); + o.@entry = (global::CUETools.CTDB.CTDBResponseEntry[])ShrinkArray(a_0, ca_0, typeof(global::CUETools.CTDB.CTDBResponseEntry), true); + o.@metadata = (global::CUETools.CTDB.CTDBResponseMeta[])ShrinkArray(a_1, ca_1, typeof(global::CUETools.CTDB.CTDBResponseMeta), true); + return o; + } + Reader.ReadStartElement(); + Reader.MoveToContent(); + int whileIterations6 = 0; + int readerCount6 = ReaderCount; + while (Reader.NodeType != System.Xml.XmlNodeType.EndElement && Reader.NodeType != System.Xml.XmlNodeType.None) { + if (Reader.NodeType == System.Xml.XmlNodeType.Element) { + if (((object) Reader.LocalName == (object)id49_entry && (object) Reader.NamespaceURI == (object)id2_Item)) { + a_0 = (global::CUETools.CTDB.CTDBResponseEntry[])EnsureArrayIndex(a_0, ca_0, typeof(global::CUETools.CTDB.CTDBResponseEntry));a_0[ca_0++] = Read2_CTDBResponseEntry(false, true); + } + else if (((object) Reader.LocalName == (object)id50_metadata && (object) Reader.NamespaceURI == (object)id2_Item)) { + a_1 = (global::CUETools.CTDB.CTDBResponseMeta[])EnsureArrayIndex(a_1, ca_1, typeof(global::CUETools.CTDB.CTDBResponseMeta));a_1[ca_1++] = Read7_CTDBResponseMeta(false, true); + } + else { + UnknownNode((object)o, @"http://db.cuetools.net/ns/mmd-1.0#:entry, http://db.cuetools.net/ns/mmd-1.0#:metadata"); + } + } + else { + UnknownNode((object)o, @"http://db.cuetools.net/ns/mmd-1.0#:entry, http://db.cuetools.net/ns/mmd-1.0#:metadata"); + } + Reader.MoveToContent(); + CheckReaderCount(ref whileIterations6, ref readerCount6); + } + o.@entry = (global::CUETools.CTDB.CTDBResponseEntry[])ShrinkArray(a_0, ca_0, typeof(global::CUETools.CTDB.CTDBResponseEntry), true); + o.@metadata = (global::CUETools.CTDB.CTDBResponseMeta[])ShrinkArray(a_1, ca_1, typeof(global::CUETools.CTDB.CTDBResponseMeta), true); + ReadEndElement(); + return o; + } + + global::CUETools.CTDB.CTDBResponseMeta Read7_CTDBResponseMeta(bool isNullable, bool checkType) { + System.Xml.XmlQualifiedName xsiType = checkType ? GetXsiType() : null; + bool isNull = false; + if (isNullable) isNull = ReadNull(); + if (checkType) { + if (xsiType == null || ((object) ((System.Xml.XmlQualifiedName)xsiType).Name == (object)id5_CTDBResponseMeta && (object) ((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)id2_Item)) { + } + else + throw CreateUnknownTypeException((System.Xml.XmlQualifiedName)xsiType); + } + if (isNull) return null; + global::CUETools.CTDB.CTDBResponseMeta o; + o = new global::CUETools.CTDB.CTDBResponseMeta(); + global::CUETools.CTDB.CTDBResponseMetaImage[] a_0 = null; + int ca_0 = 0; + global::CUETools.CTDB.CTDBResponseMetaTrack[] a_1 = null; + int ca_1 = 0; + global::CUETools.CTDB.CTDBResponseMetaLabel[] a_2 = null; + int ca_2 = 0; + global::CUETools.CTDB.CTDBResponseMetaRelease[] a_3 = null; + int ca_3 = 0; + bool[] paramsRead = new bool[16]; + while (Reader.MoveToNextAttribute()) { + if (!paramsRead[4] && ((object) Reader.LocalName == (object)id21_source && (object) Reader.NamespaceURI == (object)id4_Item)) { + o.@source = Reader.Value; + paramsRead[4] = true; + } + else if (!paramsRead[5] && ((object) Reader.LocalName == (object)id22_id && (object) Reader.NamespaceURI == (object)id4_Item)) { + o.@id = Reader.Value; + paramsRead[5] = true; + } + else if (!paramsRead[6] && ((object) Reader.LocalName == (object)id11_artist && (object) Reader.NamespaceURI == (object)id4_Item)) { + o.@artist = Reader.Value; + paramsRead[6] = true; + } + else if (!paramsRead[7] && ((object) Reader.LocalName == (object)id23_album && (object) Reader.NamespaceURI == (object)id4_Item)) { + o.@album = Reader.Value; + paramsRead[7] = true; + } + else if (!paramsRead[8] && ((object) Reader.LocalName == (object)id24_year && (object) Reader.NamespaceURI == (object)id4_Item)) { + o.@year = Reader.Value; + paramsRead[8] = true; + } + else if (!paramsRead[9] && ((object) Reader.LocalName == (object)id25_genre && (object) Reader.NamespaceURI == (object)id4_Item)) { + o.@genre = Reader.Value; + paramsRead[9] = true; + } + else if (!paramsRead[11] && ((object) Reader.LocalName == (object)id26_discnumber && (object) Reader.NamespaceURI == (object)id4_Item)) { + o.@discnumber = Reader.Value; + paramsRead[11] = true; + } + else if (!paramsRead[12] && ((object) Reader.LocalName == (object)id27_disccount && (object) Reader.NamespaceURI == (object)id4_Item)) { + o.@disccount = Reader.Value; + paramsRead[12] = true; + } + else if (!paramsRead[13] && ((object) Reader.LocalName == (object)id28_discname && (object) Reader.NamespaceURI == (object)id4_Item)) { + o.@discname = Reader.Value; + paramsRead[13] = true; + } + else if (!paramsRead[14] && ((object) Reader.LocalName == (object)id29_infourl && (object) Reader.NamespaceURI == (object)id4_Item)) { + o.@infourl = Reader.Value; + paramsRead[14] = true; + } + else if (!paramsRead[15] && ((object) Reader.LocalName == (object)id30_barcode && (object) Reader.NamespaceURI == (object)id4_Item)) { + o.@barcode = Reader.Value; + paramsRead[15] = true; + } + else if (!IsXmlnsAttribute(Reader.Name)) { + UnknownNode((object)o, @":source, :id, :artist, :album, :year, :genre, :discnumber, :disccount, :discname, :infourl, :barcode"); + } + } + Reader.MoveToElement(); + if (Reader.IsEmptyElement) { + Reader.Skip(); + o.@coverart = (global::CUETools.CTDB.CTDBResponseMetaImage[])ShrinkArray(a_0, ca_0, typeof(global::CUETools.CTDB.CTDBResponseMetaImage), true); + o.@track = (global::CUETools.CTDB.CTDBResponseMetaTrack[])ShrinkArray(a_1, ca_1, typeof(global::CUETools.CTDB.CTDBResponseMetaTrack), true); + o.@label = (global::CUETools.CTDB.CTDBResponseMetaLabel[])ShrinkArray(a_2, ca_2, typeof(global::CUETools.CTDB.CTDBResponseMetaLabel), true); + o.@release = (global::CUETools.CTDB.CTDBResponseMetaRelease[])ShrinkArray(a_3, ca_3, typeof(global::CUETools.CTDB.CTDBResponseMetaRelease), true); + return o; + } + Reader.ReadStartElement(); + Reader.MoveToContent(); + int whileIterations7 = 0; + int readerCount7 = ReaderCount; + while (Reader.NodeType != System.Xml.XmlNodeType.EndElement && Reader.NodeType != System.Xml.XmlNodeType.None) { + if (Reader.NodeType == System.Xml.XmlNodeType.Element) { + if (((object) Reader.LocalName == (object)id31_coverart && (object) Reader.NamespaceURI == (object)id2_Item)) { + a_0 = (global::CUETools.CTDB.CTDBResponseMetaImage[])EnsureArrayIndex(a_0, ca_0, typeof(global::CUETools.CTDB.CTDBResponseMetaImage));a_0[ca_0++] = Read3_CTDBResponseMetaImage(false, true); + } + else if (((object) Reader.LocalName == (object)id32_track && (object) Reader.NamespaceURI == (object)id2_Item)) { + a_1 = (global::CUETools.CTDB.CTDBResponseMetaTrack[])EnsureArrayIndex(a_1, ca_1, typeof(global::CUETools.CTDB.CTDBResponseMetaTrack));a_1[ca_1++] = Read4_CTDBResponseMetaTrack(false, true); + } + else if (((object) Reader.LocalName == (object)id33_label && (object) Reader.NamespaceURI == (object)id2_Item)) { + a_2 = (global::CUETools.CTDB.CTDBResponseMetaLabel[])EnsureArrayIndex(a_2, ca_2, typeof(global::CUETools.CTDB.CTDBResponseMetaLabel));a_2[ca_2++] = Read5_CTDBResponseMetaLabel(false, true); + } + else if (((object) Reader.LocalName == (object)id34_release && (object) Reader.NamespaceURI == (object)id2_Item)) { + a_3 = (global::CUETools.CTDB.CTDBResponseMetaRelease[])EnsureArrayIndex(a_3, ca_3, typeof(global::CUETools.CTDB.CTDBResponseMetaRelease));a_3[ca_3++] = Read6_CTDBResponseMetaRelease(false, true); + } + else if (!paramsRead[10] && ((object) Reader.LocalName == (object)id12_extra && (object) Reader.NamespaceURI == (object)id2_Item)) { + { + o.@extra = Reader.ReadElementString(); + } + paramsRead[10] = true; + } + else { + UnknownNode((object)o, @"http://db.cuetools.net/ns/mmd-1.0#:coverart, http://db.cuetools.net/ns/mmd-1.0#:track, http://db.cuetools.net/ns/mmd-1.0#:label, http://db.cuetools.net/ns/mmd-1.0#:release, http://db.cuetools.net/ns/mmd-1.0#:extra"); + } + } + else { + UnknownNode((object)o, @"http://db.cuetools.net/ns/mmd-1.0#:coverart, http://db.cuetools.net/ns/mmd-1.0#:track, http://db.cuetools.net/ns/mmd-1.0#:label, http://db.cuetools.net/ns/mmd-1.0#:release, http://db.cuetools.net/ns/mmd-1.0#:extra"); + } + Reader.MoveToContent(); + CheckReaderCount(ref whileIterations7, ref readerCount7); + } + o.@coverart = (global::CUETools.CTDB.CTDBResponseMetaImage[])ShrinkArray(a_0, ca_0, typeof(global::CUETools.CTDB.CTDBResponseMetaImage), true); + o.@track = (global::CUETools.CTDB.CTDBResponseMetaTrack[])ShrinkArray(a_1, ca_1, typeof(global::CUETools.CTDB.CTDBResponseMetaTrack), true); + o.@label = (global::CUETools.CTDB.CTDBResponseMetaLabel[])ShrinkArray(a_2, ca_2, typeof(global::CUETools.CTDB.CTDBResponseMetaLabel), true); + o.@release = (global::CUETools.CTDB.CTDBResponseMetaRelease[])ShrinkArray(a_3, ca_3, typeof(global::CUETools.CTDB.CTDBResponseMetaRelease), true); + ReadEndElement(); + return o; + } + + global::CUETools.CTDB.CTDBResponseMetaRelease Read6_CTDBResponseMetaRelease(bool isNullable, bool checkType) { + System.Xml.XmlQualifiedName xsiType = checkType ? GetXsiType() : null; + bool isNull = false; + if (isNullable) isNull = ReadNull(); + if (checkType) { + if (xsiType == null || ((object) ((System.Xml.XmlQualifiedName)xsiType).Name == (object)id8_CTDBResponseMetaRelease && (object) ((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)id2_Item)) { + } + else + throw CreateUnknownTypeException((System.Xml.XmlQualifiedName)xsiType); + } + if (isNull) return null; + global::CUETools.CTDB.CTDBResponseMetaRelease o; + o = new global::CUETools.CTDB.CTDBResponseMetaRelease(); + bool[] paramsRead = new bool[2]; + while (Reader.MoveToNextAttribute()) { + if (!paramsRead[0] && ((object) Reader.LocalName == (object)id13_date && (object) Reader.NamespaceURI == (object)id4_Item)) { + o.@date = Reader.Value; + paramsRead[0] = true; + } + else if (!paramsRead[1] && ((object) Reader.LocalName == (object)id14_country && (object) Reader.NamespaceURI == (object)id4_Item)) { + o.@country = Reader.Value; + paramsRead[1] = true; + } + else if (!IsXmlnsAttribute(Reader.Name)) { + UnknownNode((object)o, @":date, :country"); + } + } + Reader.MoveToElement(); + if (Reader.IsEmptyElement) { + Reader.Skip(); + return o; + } + Reader.ReadStartElement(); + Reader.MoveToContent(); + int whileIterations8 = 0; + int readerCount8 = ReaderCount; + while (Reader.NodeType != System.Xml.XmlNodeType.EndElement && Reader.NodeType != System.Xml.XmlNodeType.None) { + if (Reader.NodeType == System.Xml.XmlNodeType.Element) { + UnknownNode((object)o, @""); + } + else { + UnknownNode((object)o, @""); + } + Reader.MoveToContent(); + CheckReaderCount(ref whileIterations8, ref readerCount8); + } + ReadEndElement(); + return o; + } + + global::CUETools.CTDB.CTDBResponseMetaLabel Read5_CTDBResponseMetaLabel(bool isNullable, bool checkType) { + System.Xml.XmlQualifiedName xsiType = checkType ? GetXsiType() : null; + bool isNull = false; + if (isNullable) isNull = ReadNull(); + if (checkType) { + if (xsiType == null || ((object) ((System.Xml.XmlQualifiedName)xsiType).Name == (object)id7_CTDBResponseMetaLabel && (object) ((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)id2_Item)) { + } + else + throw CreateUnknownTypeException((System.Xml.XmlQualifiedName)xsiType); + } + if (isNull) return null; + global::CUETools.CTDB.CTDBResponseMetaLabel o; + o = new global::CUETools.CTDB.CTDBResponseMetaLabel(); + bool[] paramsRead = new bool[2]; + while (Reader.MoveToNextAttribute()) { + if (!paramsRead[0] && ((object) Reader.LocalName == (object)id10_name && (object) Reader.NamespaceURI == (object)id4_Item)) { + o.@name = Reader.Value; + paramsRead[0] = true; + } + else if (!paramsRead[1] && ((object) Reader.LocalName == (object)id15_catno && (object) Reader.NamespaceURI == (object)id4_Item)) { + o.@catno = Reader.Value; + paramsRead[1] = true; + } + else if (!IsXmlnsAttribute(Reader.Name)) { + UnknownNode((object)o, @":name, :catno"); + } + } + Reader.MoveToElement(); + if (Reader.IsEmptyElement) { + Reader.Skip(); + return o; + } + Reader.ReadStartElement(); + Reader.MoveToContent(); + int whileIterations9 = 0; + int readerCount9 = ReaderCount; + while (Reader.NodeType != System.Xml.XmlNodeType.EndElement && Reader.NodeType != System.Xml.XmlNodeType.None) { + if (Reader.NodeType == System.Xml.XmlNodeType.Element) { + UnknownNode((object)o, @""); + } + else { + UnknownNode((object)o, @""); + } + Reader.MoveToContent(); + CheckReaderCount(ref whileIterations9, ref readerCount9); + } + ReadEndElement(); + return o; + } + + global::CUETools.CTDB.CTDBResponseMetaTrack Read4_CTDBResponseMetaTrack(bool isNullable, bool checkType) { + System.Xml.XmlQualifiedName xsiType = checkType ? GetXsiType() : null; + bool isNull = false; + if (isNullable) isNull = ReadNull(); + if (checkType) { + if (xsiType == null || ((object) ((System.Xml.XmlQualifiedName)xsiType).Name == (object)id9_CTDBResponseMetaTrack && (object) ((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)id2_Item)) { + } + else + throw CreateUnknownTypeException((System.Xml.XmlQualifiedName)xsiType); + } + if (isNull) return null; + global::CUETools.CTDB.CTDBResponseMetaTrack o; + o = new global::CUETools.CTDB.CTDBResponseMetaTrack(); + bool[] paramsRead = new bool[3]; + while (Reader.MoveToNextAttribute()) { + if (!paramsRead[0] && ((object) Reader.LocalName == (object)id10_name && (object) Reader.NamespaceURI == (object)id4_Item)) { + o.@name = Reader.Value; + paramsRead[0] = true; + } + else if (!paramsRead[1] && ((object) Reader.LocalName == (object)id11_artist && (object) Reader.NamespaceURI == (object)id4_Item)) { + o.@artist = Reader.Value; + paramsRead[1] = true; + } + else if (!IsXmlnsAttribute(Reader.Name)) { + UnknownNode((object)o, @":name, :artist"); + } + } + Reader.MoveToElement(); + if (Reader.IsEmptyElement) { + Reader.Skip(); + return o; + } + Reader.ReadStartElement(); + Reader.MoveToContent(); + int whileIterations10 = 0; + int readerCount10 = ReaderCount; + while (Reader.NodeType != System.Xml.XmlNodeType.EndElement && Reader.NodeType != System.Xml.XmlNodeType.None) { + if (Reader.NodeType == System.Xml.XmlNodeType.Element) { + if (!paramsRead[2] && ((object) Reader.LocalName == (object)id12_extra && (object) Reader.NamespaceURI == (object)id2_Item)) { + { + o.@extra = Reader.ReadElementString(); + } + paramsRead[2] = true; + } + else { + UnknownNode((object)o, @"http://db.cuetools.net/ns/mmd-1.0#:extra"); + } + } + else { + UnknownNode((object)o, @"http://db.cuetools.net/ns/mmd-1.0#:extra"); + } + Reader.MoveToContent(); + CheckReaderCount(ref whileIterations10, ref readerCount10); + } + ReadEndElement(); + return o; + } + + global::CUETools.CTDB.CTDBResponseMetaImage Read3_CTDBResponseMetaImage(bool isNullable, bool checkType) { + System.Xml.XmlQualifiedName xsiType = checkType ? GetXsiType() : null; + bool isNull = false; + if (isNullable) isNull = ReadNull(); + if (checkType) { + if (xsiType == null || ((object) ((System.Xml.XmlQualifiedName)xsiType).Name == (object)id6_CTDBResponseMetaImage && (object) ((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)id2_Item)) { + } + else + throw CreateUnknownTypeException((System.Xml.XmlQualifiedName)xsiType); + } + if (isNull) return null; + global::CUETools.CTDB.CTDBResponseMetaImage o; + o = new global::CUETools.CTDB.CTDBResponseMetaImage(); + bool[] paramsRead = new bool[5]; + while (Reader.MoveToNextAttribute()) { + if (!paramsRead[0] && ((object) Reader.LocalName == (object)id16_uri && (object) Reader.NamespaceURI == (object)id4_Item)) { + o.@uri = Reader.Value; + paramsRead[0] = true; + } + else if (!paramsRead[1] && ((object) Reader.LocalName == (object)id17_uri150 && (object) Reader.NamespaceURI == (object)id4_Item)) { + o.@uri150 = Reader.Value; + paramsRead[1] = true; + } + else if (!paramsRead[2] && ((object) Reader.LocalName == (object)id18_height && (object) Reader.NamespaceURI == (object)id4_Item)) { + o.@height = System.Xml.XmlConvert.ToInt32(Reader.Value); + paramsRead[2] = true; + } + else if (!paramsRead[3] && ((object) Reader.LocalName == (object)id19_width && (object) Reader.NamespaceURI == (object)id4_Item)) { + o.@width = System.Xml.XmlConvert.ToInt32(Reader.Value); + paramsRead[3] = true; + } + else if (!paramsRead[4] && ((object) Reader.LocalName == (object)id20_primary && (object) Reader.NamespaceURI == (object)id4_Item)) { + o.@primary = System.Xml.XmlConvert.ToBoolean(Reader.Value); + paramsRead[4] = true; + } + else if (!IsXmlnsAttribute(Reader.Name)) { + UnknownNode((object)o, @":uri, :uri150, :height, :width, :primary"); + } + } + Reader.MoveToElement(); + if (Reader.IsEmptyElement) { + Reader.Skip(); + return o; + } + Reader.ReadStartElement(); + Reader.MoveToContent(); + int whileIterations11 = 0; + int readerCount11 = ReaderCount; + while (Reader.NodeType != System.Xml.XmlNodeType.EndElement && Reader.NodeType != System.Xml.XmlNodeType.None) { + if (Reader.NodeType == System.Xml.XmlNodeType.Element) { + UnknownNode((object)o, @""); + } + else { + UnknownNode((object)o, @""); + } + Reader.MoveToContent(); + CheckReaderCount(ref whileIterations11, ref readerCount11); + } + ReadEndElement(); + return o; + } + + global::CUETools.CTDB.CTDBResponseEntry Read2_CTDBResponseEntry(bool isNullable, bool checkType) { + System.Xml.XmlQualifiedName xsiType = checkType ? GetXsiType() : null; + bool isNull = false; + if (isNullable) isNull = ReadNull(); + if (checkType) { + if (xsiType == null || ((object) ((System.Xml.XmlQualifiedName)xsiType).Name == (object)id3_CTDBResponseEntry && (object) ((System.Xml.XmlQualifiedName)xsiType).Namespace == (object)id2_Item)) { + } + else + throw CreateUnknownTypeException((System.Xml.XmlQualifiedName)xsiType); + } + if (isNull) return null; + global::CUETools.CTDB.CTDBResponseEntry o; + o = new global::CUETools.CTDB.CTDBResponseEntry(); + bool[] paramsRead = new bool[10]; + while (Reader.MoveToNextAttribute()) { + if (!paramsRead[0] && ((object) Reader.LocalName == (object)id22_id && (object) Reader.NamespaceURI == (object)id4_Item)) { + o.@id = System.Xml.XmlConvert.ToInt64(Reader.Value); + paramsRead[0] = true; + } + else if (!paramsRead[1] && ((object) Reader.LocalName == (object)id35_crc32 && (object) Reader.NamespaceURI == (object)id4_Item)) { + o.@crc32 = Reader.Value; + paramsRead[1] = true; + } + else if (!paramsRead[2] && ((object) Reader.LocalName == (object)id36_confidence && (object) Reader.NamespaceURI == (object)id4_Item)) { + o.@confidence = System.Xml.XmlConvert.ToInt32(Reader.Value); + paramsRead[2] = true; + } + else if (!paramsRead[3] && ((object) Reader.LocalName == (object)id37_npar && (object) Reader.NamespaceURI == (object)id4_Item)) { + o.@npar = System.Xml.XmlConvert.ToInt32(Reader.Value); + paramsRead[3] = true; + } + else if (!paramsRead[4] && ((object) Reader.LocalName == (object)id38_stride && (object) Reader.NamespaceURI == (object)id4_Item)) { + o.@stride = System.Xml.XmlConvert.ToInt32(Reader.Value); + paramsRead[4] = true; + } + else if (!paramsRead[5] && ((object) Reader.LocalName == (object)id39_hasparity && (object) Reader.NamespaceURI == (object)id4_Item)) { + o.@hasparity = Reader.Value; + paramsRead[5] = true; + } + else if (!paramsRead[6] && ((object) Reader.LocalName == (object)id40_parity && (object) Reader.NamespaceURI == (object)id4_Item)) { + o.@parity = Reader.Value; + paramsRead[6] = true; + } + else if (!paramsRead[7] && ((object) Reader.LocalName == (object)id41_syndrome && (object) Reader.NamespaceURI == (object)id4_Item)) { + o.@syndrome = Reader.Value; + paramsRead[7] = true; + } + else if (!paramsRead[8] && ((object) Reader.LocalName == (object)id42_trackcrcs && (object) Reader.NamespaceURI == (object)id4_Item)) { + o.@trackcrcs = Reader.Value; + paramsRead[8] = true; + } + else if (!paramsRead[9] && ((object) Reader.LocalName == (object)id43_toc && (object) Reader.NamespaceURI == (object)id4_Item)) { + o.@toc = Reader.Value; + paramsRead[9] = true; + } + else if (!IsXmlnsAttribute(Reader.Name)) { + UnknownNode((object)o, @":id, :crc32, :confidence, :npar, :stride, :hasparity, :parity, :syndrome, :trackcrcs, :toc"); + } + } + Reader.MoveToElement(); + if (Reader.IsEmptyElement) { + Reader.Skip(); + return o; + } + Reader.ReadStartElement(); + Reader.MoveToContent(); + int whileIterations12 = 0; + int readerCount12 = ReaderCount; + while (Reader.NodeType != System.Xml.XmlNodeType.EndElement && Reader.NodeType != System.Xml.XmlNodeType.None) { + if (Reader.NodeType == System.Xml.XmlNodeType.Element) { + UnknownNode((object)o, @""); + } + else { + UnknownNode((object)o, @""); + } + Reader.MoveToContent(); + CheckReaderCount(ref whileIterations12, ref readerCount12); + } + ReadEndElement(); + return o; + } + + protected override void InitCallbacks() { + } + + string id11_artist; + string id9_CTDBResponseMetaTrack; + string id4_Item; + string id45_status; + string id5_CTDBResponseMeta; + string id37_npar; + string id34_release; + string id49_entry; + string id30_barcode; + string id22_id; + string id16_uri; + string id8_CTDBResponseMetaRelease; + string id42_trackcrcs; + string id15_catno; + string id41_syndrome; + string id38_stride; + string id32_track; + string id24_year; + string id35_crc32; + string id14_country; + string id40_parity; + string id29_infourl; + string id18_height; + string id7_CTDBResponseMetaLabel; + string id6_CTDBResponseMetaImage; + string id28_discname; + string id19_width; + string id20_primary; + string id13_date; + string id1_ctdb; + string id27_disccount; + string id2_Item; + string id3_CTDBResponseEntry; + string id33_label; + string id21_source; + string id17_uri150; + string id48_message; + string id39_hasparity; + string id25_genre; + string id46_updateurl; + string id44_CTDBResponse; + string id50_metadata; + string id12_extra; + string id26_discnumber; + string id47_updatemsg; + string id23_album; + string id31_coverart; + string id36_confidence; + string id43_toc; + string id10_name; + + protected override void InitIDs() { + id11_artist = Reader.NameTable.Add(@"artist"); + id9_CTDBResponseMetaTrack = Reader.NameTable.Add(@"CTDBResponseMetaTrack"); + id4_Item = Reader.NameTable.Add(@""); + id45_status = Reader.NameTable.Add(@"status"); + id5_CTDBResponseMeta = Reader.NameTable.Add(@"CTDBResponseMeta"); + id37_npar = Reader.NameTable.Add(@"npar"); + id34_release = Reader.NameTable.Add(@"release"); + id49_entry = Reader.NameTable.Add(@"entry"); + id30_barcode = Reader.NameTable.Add(@"barcode"); + id22_id = Reader.NameTable.Add(@"id"); + id16_uri = Reader.NameTable.Add(@"uri"); + id8_CTDBResponseMetaRelease = Reader.NameTable.Add(@"CTDBResponseMetaRelease"); + id42_trackcrcs = Reader.NameTable.Add(@"trackcrcs"); + id15_catno = Reader.NameTable.Add(@"catno"); + id41_syndrome = Reader.NameTable.Add(@"syndrome"); + id38_stride = Reader.NameTable.Add(@"stride"); + id32_track = Reader.NameTable.Add(@"track"); + id24_year = Reader.NameTable.Add(@"year"); + id35_crc32 = Reader.NameTable.Add(@"crc32"); + id14_country = Reader.NameTable.Add(@"country"); + id40_parity = Reader.NameTable.Add(@"parity"); + id29_infourl = Reader.NameTable.Add(@"infourl"); + id18_height = Reader.NameTable.Add(@"height"); + id7_CTDBResponseMetaLabel = Reader.NameTable.Add(@"CTDBResponseMetaLabel"); + id6_CTDBResponseMetaImage = Reader.NameTable.Add(@"CTDBResponseMetaImage"); + id28_discname = Reader.NameTable.Add(@"discname"); + id19_width = Reader.NameTable.Add(@"width"); + id20_primary = Reader.NameTable.Add(@"primary"); + id13_date = Reader.NameTable.Add(@"date"); + id1_ctdb = Reader.NameTable.Add(@"ctdb"); + id27_disccount = Reader.NameTable.Add(@"disccount"); + id2_Item = Reader.NameTable.Add(@"http://db.cuetools.net/ns/mmd-1.0#"); + id3_CTDBResponseEntry = Reader.NameTable.Add(@"CTDBResponseEntry"); + id33_label = Reader.NameTable.Add(@"label"); + id21_source = Reader.NameTable.Add(@"source"); + id17_uri150 = Reader.NameTable.Add(@"uri150"); + id48_message = Reader.NameTable.Add(@"message"); + id39_hasparity = Reader.NameTable.Add(@"hasparity"); + id25_genre = Reader.NameTable.Add(@"genre"); + id46_updateurl = Reader.NameTable.Add(@"updateurl"); + id44_CTDBResponse = Reader.NameTable.Add(@"CTDBResponse"); + id50_metadata = Reader.NameTable.Add(@"metadata"); + id12_extra = Reader.NameTable.Add(@"extra"); + id26_discnumber = Reader.NameTable.Add(@"discnumber"); + id47_updatemsg = Reader.NameTable.Add(@"updatemsg"); + id23_album = Reader.NameTable.Add(@"album"); + id31_coverart = Reader.NameTable.Add(@"coverart"); + id36_confidence = Reader.NameTable.Add(@"confidence"); + id43_toc = Reader.NameTable.Add(@"toc"); + id10_name = Reader.NameTable.Add(@"name"); + } + } + + public abstract class XmlSerializer1 : System.Xml.Serialization.XmlSerializer { + protected override System.Xml.Serialization.XmlSerializationReader CreateReader() { + return new XmlSerializationReader1(); + } + protected override System.Xml.Serialization.XmlSerializationWriter CreateWriter() { + return new XmlSerializationWriter1(); + } + } + + public sealed class CTDBResponseSerializer : XmlSerializer1 { + + public override System.Boolean CanDeserialize(System.Xml.XmlReader xmlReader) { + return xmlReader.IsStartElement(@"ctdb", @"http://db.cuetools.net/ns/mmd-1.0#"); + } + + protected override void Serialize(object objectToSerialize, System.Xml.Serialization.XmlSerializationWriter writer) { + ((XmlSerializationWriter1)writer).Write15_ctdb(objectToSerialize); + } + + protected override object Deserialize(System.Xml.Serialization.XmlSerializationReader reader) { + return ((XmlSerializationReader1)reader).Read15_ctdb(); + } + } + + public sealed class CTDBResponseEntrySerializer : XmlSerializer1 { + + public override System.Boolean CanDeserialize(System.Xml.XmlReader xmlReader) { + return xmlReader.IsStartElement(@"CTDBResponseEntry", @""); + } + + protected override void Serialize(object objectToSerialize, System.Xml.Serialization.XmlSerializationWriter writer) { + ((XmlSerializationWriter1)writer).Write16_CTDBResponseEntry(objectToSerialize); + } + + protected override object Deserialize(System.Xml.Serialization.XmlSerializationReader reader) { + return ((XmlSerializationReader1)reader).Read16_CTDBResponseEntry(); + } + } + + public sealed class CTDBResponseMetaSerializer : XmlSerializer1 { + + public override System.Boolean CanDeserialize(System.Xml.XmlReader xmlReader) { + return xmlReader.IsStartElement(@"CTDBResponseMeta", @""); + } + + protected override void Serialize(object objectToSerialize, System.Xml.Serialization.XmlSerializationWriter writer) { + ((XmlSerializationWriter1)writer).Write17_CTDBResponseMeta(objectToSerialize); + } + + protected override object Deserialize(System.Xml.Serialization.XmlSerializationReader reader) { + return ((XmlSerializationReader1)reader).Read17_CTDBResponseMeta(); + } + } + + public sealed class CTDBResponseMetaImageSerializer : XmlSerializer1 { + + public override System.Boolean CanDeserialize(System.Xml.XmlReader xmlReader) { + return xmlReader.IsStartElement(@"CTDBResponseMetaImage", @""); + } + + protected override void Serialize(object objectToSerialize, System.Xml.Serialization.XmlSerializationWriter writer) { + ((XmlSerializationWriter1)writer).Write18_CTDBResponseMetaImage(objectToSerialize); + } + + protected override object Deserialize(System.Xml.Serialization.XmlSerializationReader reader) { + return ((XmlSerializationReader1)reader).Read18_CTDBResponseMetaImage(); + } + } + + public sealed class CTDBResponseMetaLabelSerializer : XmlSerializer1 { + + public override System.Boolean CanDeserialize(System.Xml.XmlReader xmlReader) { + return xmlReader.IsStartElement(@"CTDBResponseMetaLabel", @""); + } + + protected override void Serialize(object objectToSerialize, System.Xml.Serialization.XmlSerializationWriter writer) { + ((XmlSerializationWriter1)writer).Write19_CTDBResponseMetaLabel(objectToSerialize); + } + + protected override object Deserialize(System.Xml.Serialization.XmlSerializationReader reader) { + return ((XmlSerializationReader1)reader).Read19_CTDBResponseMetaLabel(); + } + } + + public sealed class CTDBResponseMetaReleaseSerializer : XmlSerializer1 { + + public override System.Boolean CanDeserialize(System.Xml.XmlReader xmlReader) { + return xmlReader.IsStartElement(@"CTDBResponseMetaRelease", @""); + } + + protected override void Serialize(object objectToSerialize, System.Xml.Serialization.XmlSerializationWriter writer) { + ((XmlSerializationWriter1)writer).Write20_CTDBResponseMetaRelease(objectToSerialize); + } + + protected override object Deserialize(System.Xml.Serialization.XmlSerializationReader reader) { + return ((XmlSerializationReader1)reader).Read20_CTDBResponseMetaRelease(); + } + } + + public sealed class CTDBResponseMetaTrackSerializer : XmlSerializer1 { + + public override System.Boolean CanDeserialize(System.Xml.XmlReader xmlReader) { + return xmlReader.IsStartElement(@"CTDBResponseMetaTrack", @""); + } + + protected override void Serialize(object objectToSerialize, System.Xml.Serialization.XmlSerializationWriter writer) { + ((XmlSerializationWriter1)writer).Write21_CTDBResponseMetaTrack(objectToSerialize); + } + + protected override object Deserialize(System.Xml.Serialization.XmlSerializationReader reader) { + return ((XmlSerializationReader1)reader).Read21_CTDBResponseMetaTrack(); + } + } + + public class XmlSerializerContract : global::System.Xml.Serialization.XmlSerializerImplementation { + public override global::System.Xml.Serialization.XmlSerializationReader Reader { get { return new XmlSerializationReader1(); } } + public override global::System.Xml.Serialization.XmlSerializationWriter Writer { get { return new XmlSerializationWriter1(); } } + System.Collections.Hashtable readMethods = null; + public override System.Collections.Hashtable ReadMethods { + get { + if (readMethods == null) { + System.Collections.Hashtable _tmp = new System.Collections.Hashtable(); + _tmp[@"CUETools.CTDB.CTDBResponse:http://db.cuetools.net/ns/mmd-1.0#:ctdb:True:"] = @"Read15_ctdb"; + _tmp[@"CUETools.CTDB.CTDBResponseEntry::"] = @"Read16_CTDBResponseEntry"; + _tmp[@"CUETools.CTDB.CTDBResponseMeta::"] = @"Read17_CTDBResponseMeta"; + _tmp[@"CUETools.CTDB.CTDBResponseMetaImage::"] = @"Read18_CTDBResponseMetaImage"; + _tmp[@"CUETools.CTDB.CTDBResponseMetaLabel::"] = @"Read19_CTDBResponseMetaLabel"; + _tmp[@"CUETools.CTDB.CTDBResponseMetaRelease::"] = @"Read20_CTDBResponseMetaRelease"; + _tmp[@"CUETools.CTDB.CTDBResponseMetaTrack::"] = @"Read21_CTDBResponseMetaTrack"; + if (readMethods == null) readMethods = _tmp; + } + return readMethods; + } + } + System.Collections.Hashtable writeMethods = null; + public override System.Collections.Hashtable WriteMethods { + get { + if (writeMethods == null) { + System.Collections.Hashtable _tmp = new System.Collections.Hashtable(); + _tmp[@"CUETools.CTDB.CTDBResponse:http://db.cuetools.net/ns/mmd-1.0#:ctdb:True:"] = @"Write15_ctdb"; + _tmp[@"CUETools.CTDB.CTDBResponseEntry::"] = @"Write16_CTDBResponseEntry"; + _tmp[@"CUETools.CTDB.CTDBResponseMeta::"] = @"Write17_CTDBResponseMeta"; + _tmp[@"CUETools.CTDB.CTDBResponseMetaImage::"] = @"Write18_CTDBResponseMetaImage"; + _tmp[@"CUETools.CTDB.CTDBResponseMetaLabel::"] = @"Write19_CTDBResponseMetaLabel"; + _tmp[@"CUETools.CTDB.CTDBResponseMetaRelease::"] = @"Write20_CTDBResponseMetaRelease"; + _tmp[@"CUETools.CTDB.CTDBResponseMetaTrack::"] = @"Write21_CTDBResponseMetaTrack"; + if (writeMethods == null) writeMethods = _tmp; + } + return writeMethods; + } + } + System.Collections.Hashtable typedSerializers = null; + public override System.Collections.Hashtable TypedSerializers { + get { + if (typedSerializers == null) { + System.Collections.Hashtable _tmp = new System.Collections.Hashtable(); + _tmp.Add(@"CUETools.CTDB.CTDBResponseEntry::", new CTDBResponseEntrySerializer()); + _tmp.Add(@"CUETools.CTDB.CTDBResponseMeta::", new CTDBResponseMetaSerializer()); + _tmp.Add(@"CUETools.CTDB.CTDBResponse:http://db.cuetools.net/ns/mmd-1.0#:ctdb:True:", new CTDBResponseSerializer()); + _tmp.Add(@"CUETools.CTDB.CTDBResponseMetaTrack::", new CTDBResponseMetaTrackSerializer()); + _tmp.Add(@"CUETools.CTDB.CTDBResponseMetaRelease::", new CTDBResponseMetaReleaseSerializer()); + _tmp.Add(@"CUETools.CTDB.CTDBResponseMetaLabel::", new CTDBResponseMetaLabelSerializer()); + _tmp.Add(@"CUETools.CTDB.CTDBResponseMetaImage::", new CTDBResponseMetaImageSerializer()); + if (typedSerializers == null) typedSerializers = _tmp; + } + return typedSerializers; + } + } + public override System.Boolean CanSerialize(System.Type type) { + if (type == typeof(global::CUETools.CTDB.CTDBResponse)) return true; + if (type == typeof(global::CUETools.CTDB.CTDBResponseEntry)) return true; + if (type == typeof(global::CUETools.CTDB.CTDBResponseMeta)) return true; + if (type == typeof(global::CUETools.CTDB.CTDBResponseMetaImage)) return true; + if (type == typeof(global::CUETools.CTDB.CTDBResponseMetaLabel)) return true; + if (type == typeof(global::CUETools.CTDB.CTDBResponseMetaRelease)) return true; + if (type == typeof(global::CUETools.CTDB.CTDBResponseMetaTrack)) return true; + return false; + } + public override System.Xml.Serialization.XmlSerializer GetSerializer(System.Type type) { + if (type == typeof(global::CUETools.CTDB.CTDBResponse)) return new CTDBResponseSerializer(); + if (type == typeof(global::CUETools.CTDB.CTDBResponseEntry)) return new CTDBResponseEntrySerializer(); + if (type == typeof(global::CUETools.CTDB.CTDBResponseMeta)) return new CTDBResponseMetaSerializer(); + if (type == typeof(global::CUETools.CTDB.CTDBResponseMetaImage)) return new CTDBResponseMetaImageSerializer(); + if (type == typeof(global::CUETools.CTDB.CTDBResponseMetaLabel)) return new CTDBResponseMetaLabelSerializer(); + if (type == typeof(global::CUETools.CTDB.CTDBResponseMetaRelease)) return new CTDBResponseMetaReleaseSerializer(); + if (type == typeof(global::CUETools.CTDB.CTDBResponseMetaTrack)) return new CTDBResponseMetaTrackSerializer(); + return null; + } + } +} diff --git a/CUETools.CTDB/UploadHelper/Properties/AssemblyInfo.cs b/CUETools.CTDB/UploadHelper/Properties/AssemblyInfo.cs deleted file mode 100644 index 8616d05..0000000 --- a/CUETools.CTDB/UploadHelper/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("UploadHelper")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("Microsoft")] -[assembly: AssemblyProduct("UploadHelper")] -[assembly: AssemblyCopyright("Copyright © Microsoft 2009")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("13eac2b4-c1d5-4317-a17a-5389ad4c6005")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Revision and Build Numbers -// by using the '*' as shown below: -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/CUETools.CTDB/UploadHelper/UploadHelper.csproj b/CUETools.CTDB/UploadHelper/UploadHelper.csproj deleted file mode 100644 index 025e3ae..0000000 --- a/CUETools.CTDB/UploadHelper/UploadHelper.csproj +++ /dev/null @@ -1,59 +0,0 @@ - - - Debug - AnyCPU - 8.0.50727 - 2.0 - {02FBD52C-B997-4D18-9E2C-81B5AE8EFB30} - Library - Properties - Krystalware.UploadHelper - Krystalware.UploadHelper - - - - - - - - - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/CUETools.ChaptersToCue/CUETools.ChaptersToCue.csproj b/CUETools.ChaptersToCue/CUETools.ChaptersToCue.csproj new file mode 100644 index 0000000..9d7bd09 --- /dev/null +++ b/CUETools.ChaptersToCue/CUETools.ChaptersToCue.csproj @@ -0,0 +1,106 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {9253A314-1821-42BF-B02F-2BF986B1765D} + Exe + Properties + CUETools.ChaptersToCue + CUETools.ChaptersToCue + + + 3.5 + + + v4.0 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + false + ..\bin\Debug\net40\ + DEBUG;TRACE + prompt + 4 + AllRules.ruleset + + + pdbonly + true + ..\bin\Release\net40\ + TRACE + prompt + 4 + AllRules.ruleset + + + + + + + False + ..\bin\Release\taglib-sharp.dll + + + + + + + + + {1DD41038-D885-46C5-8DDE-E0B82F066584} + CUETools.CDImage + + + {AA2A9A7E-45FB-4632-AD85-85B0E556F818} + CUETools.CTDB + + + {6458A13A-30EF-45A9-9D58-E5031B17BEE2} + CUETools.Codecs + + + + + False + .NET Framework 3.5 SP1 Client Profile + false + + + False + .NET Framework 3.5 SP1 + true + + + False + Windows Installer 3.1 + true + + + + + \ No newline at end of file diff --git a/CUETools.ChaptersToCue/Program.cs b/CUETools.ChaptersToCue/Program.cs new file mode 100644 index 0000000..0ea330f --- /dev/null +++ b/CUETools.ChaptersToCue/Program.cs @@ -0,0 +1,251 @@ +// **************************************************************************** +// +// ChaptersToCue +// Copyright (C) 2018 Grigory Chudov (gchudov@gmail.com) +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// **************************************************************************** + +using System; +using System.IO; +using System.Net; +using System.Text; +using System.Text.RegularExpressions; +using System.Collections.Generic; +using CUETools.CDImage; +using CUETools.CTDB; +using CUETools.Codecs; + +namespace CUETools.ChaptersToCue +{ + class Program + { + static void Usage() + { + Console.WriteLine("Usage : CUETools.ChaptersToCue.exe "); + Console.WriteLine(); + Console.WriteLine("-i, --input File containing chapter times"); + Console.WriteLine("-o, --output Output filename; Default: Artist - year - album.cue"); + Console.WriteLine("-t, --tracks File containing track filenames"); + Console.WriteLine("-m, --meta query CTDB for metadata;"); + Console.WriteLine("--celltimes Input is in Celltimes format;"); + Console.WriteLine("--image Use image file to calculate duration"); + } + + static void Main(string[] args) + { + TextWriter stdout = Console.Out; + Console.SetOut(Console.Error); + Console.WriteLine("CUETools.ChaptersToCue v2.1.7 Copyright (C) 2017 Grigory Chudov"); + Console.WriteLine("This is free software under the GNU GPLv3+ license; There is NO WARRANTY, to"); + Console.WriteLine("the extent permitted by law. for details."); + + bool queryMeta = false; + bool celltimes = false; + int fps_mul = 0; + int fps_div = 1; + string inputPath = "-"; + string outputPath = null; + string tracksPath = null; + string imagePath = null; + for (int arg = 0; arg < args.Length; arg++) + { + bool ok = true; + if ((args[arg] == "-i" || args[arg] == "--input") && ++arg < args.Length) + inputPath = args[arg]; + else if ((args[arg] == "-o" || args[arg] == "--output") && ++arg < args.Length) + outputPath = args[arg]; + else if ((args[arg] == "-t" || args[arg] == "--tracks") && ++arg < args.Length) + tracksPath = args[arg]; + else if (args[arg] == "--image" && ++arg < args.Length) + imagePath = args[arg]; + else if (args[arg] == "-m" || args[arg] == "--meta") + queryMeta = true; + else if (args[arg] == "--celltimes" && ++arg < args.Length) + { + celltimes = true; + ok = int.TryParse(args[arg], out fps_mul); + if (ok && fps_mul == 30) + { + fps_mul = 30000; + fps_div = 1001; + } + } + else + ok = false; + if (!ok) + { + Usage(); + return; + } + } + + string strtoc = ""; + string extension = null; + if (tracksPath != null) + { + //CUEToolsCodecsConfig config = new CUEConfig(); + //TagLib.UserDefined.AdditionalFileTypes.Config = config; + TimeSpan pos = new TimeSpan(0); + using (TextReader sr = tracksPath == "-" ? Console.In : new StreamReader(tracksPath)) + { + while (sr.Peek() >= 0) + { + string line = sr.ReadLine(); + extension = Path.GetExtension(line); + TagLib.File sourceInfo = TagLib.File.Create(new TagLib.File.LocalFileAbstraction(line)); + strtoc += string.Format(" {0}", (int)(pos.TotalSeconds * 75)); + pos += sourceInfo.Properties.Duration; + } + } + strtoc += string.Format(" {0}", (int)(pos.TotalSeconds * 75)); + } + else + { + using (TextReader sr = inputPath == "-" ? Console.In : new StreamReader(inputPath)) + { + if (celltimes) + { + strtoc += string.Format(" {0}", 0); + while (sr.Peek() >= 0) + { + string line = sr.ReadLine(); + strtoc += string.Format(" {0}", long.Parse(line) * 75 * fps_div / fps_mul); + } + } + else + { + while (sr.Peek() >= 0) + { + string line = sr.ReadLine(); + Regex r = new Regex(@"^CHAPTER(?\d\d)(?