diff --git a/DATFromDir/7z/7za.dll b/DATFromDir/7z/7za.dll new file mode 100644 index 00000000..46f6e8e2 Binary files /dev/null and b/DATFromDir/7z/7za.dll differ diff --git a/DATFromDir/7z/7za.exe b/DATFromDir/7z/7za.exe new file mode 100644 index 00000000..710bda2f Binary files /dev/null and b/DATFromDir/7z/7za.exe differ diff --git a/DATFromDir/7z/7zxa.dll b/DATFromDir/7z/7zxa.dll new file mode 100644 index 00000000..afa96d4c Binary files /dev/null and b/DATFromDir/7z/7zxa.dll differ diff --git a/DATFromDir/7z/License.txt b/DATFromDir/7z/License.txt new file mode 100644 index 00000000..d1285cc6 --- /dev/null +++ b/DATFromDir/7z/License.txt @@ -0,0 +1,31 @@ + 7-Zip Extra + ~~~~~~~~~~~ + License for use and distribution + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + Copyright (C) 1999-2015 Igor Pavlov. + + 7-Zip Extra files are under the GNU LGPL license. + + + Notes: + You can use 7-Zip Extra on any computer, including a computer in a commercial + organization. You don't need to register or pay for 7-Zip. + + + GNU LGPL information + -------------------- + + 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 can receive a copy of the GNU Lesser General Public License from + http://www.gnu.org/ + diff --git a/DATFromDir/7z/history.txt b/DATFromDir/7z/history.txt new file mode 100644 index 00000000..fe8fb9d8 --- /dev/null +++ b/DATFromDir/7z/history.txt @@ -0,0 +1,77 @@ +7-Zip Extra history +------------------- + +9.35 beta 2014-12-07 +------------------------------ + - SFX modules were moved to LZMA SDK package. + + +9.34 alpha 2014-06-22 +------------------------------ + - Minimum supported system now is Windows 2000 for EXE and DLL files. + - all EXE and DLL files use msvcrt.dll. + - 7zr.exe now support AES encryption. + + +9.18 2010-11-02 +------------------------------ + - New small SFX module for installers. + + +9.17 2010-10-04 +------------------------------ + - New 7-Zip plugin for FAR Manager x64. + + +9.10 2009-12-30 +------------------------------ + - 7-Zip for installers now supports LZMA2. + + +9.09 2009-12-12 +------------------------------ + - LZMA2 compression method support. + - Some bugs were fixed. + + +4.65 2009-02-03 +------------------------------ + - Some bugs were fixed. + + +4.38 beta 2006-04-13 +------------------------------ + - SFX for installers now supports new properties in config file: + Progress, Directory, ExecuteFile, ExecuteParameters. + + +4.34 beta 2006-02-27 +------------------------------ + - ISetProperties::SetProperties: + it's possible to specify desirable number of CPU threads: + PROPVARIANT: name=L"mt", vt = VT_UI4, ulVal = NumberOfThreads + If "mt" is not defined, 7za.dll will check number of processors in system to set + number of desirable threads. + Now 7za.dll can use: + 2 threads for LZMA compressing + N threads for BZip2 compressing + 4 threads for BZip2 decompressing + Other codecs use only one thread. + Note: 7za.dll can use additional "small" threads with low CPU load. + - It's possible to call ISetProperties::SetProperties to specify "mt" property for decoder. + + +4.33 beta 2006-02-05 +------------------------------ + - Compressing speed and Memory requirements were increased. + Default dictionary size was increased: Fastest: 64 KB, Fast: 1 MB, + Normal: 4 MB, Max: 16 MB, Ultra: 64 MB. + - 7z/LZMA now can use only these match finders: HC4, BT2, BT3, BT4 + + +4.27 2005-09-21 +------------------------------ + - Some GUIDs/interfaces were changed. + IStream.h: + ISequentialInStream::Read now works as old ReadPart + ISequentialOutStream::Write now works as old WritePart diff --git a/DATFromDir/7z/readme.txt b/DATFromDir/7z/readme.txt new file mode 100644 index 00000000..c274630a --- /dev/null +++ b/DATFromDir/7z/readme.txt @@ -0,0 +1,124 @@ +7-Zip Extra 15.14 +----------------- + +7-Zip Extra is package of extra modules of 7-Zip. + +7-Zip Copyright (C) 1999-2015 Igor Pavlov. + +7-Zip is free software. Read License.txt for more information about license. + +Source code of binaries can be found at: + http://www.7-zip.org/ + +This package contains the following files: + +7za.exe - standalone console version of 7-Zip with reduced formats support. +7za.dll - library for working with 7z archives +7zxa.dll - library for extracting from 7z archives +License.txt - license information +readme.txt - this file + +Far\ - plugin for Far Manager +x64\ - binaries for x64 + + +All 32-bit binaries can work in: + Windows 2000 / 2003 / 2008 / XP / Vista / 7 / 8 / 10 + and in any Windows x64 version with WoW64 support. +All x64 binaries can work in any Windows x64 version. + +All binaries use msvcrt.dll. + +7za.exe +------- + +7za.exe - is a standalone console version of 7-Zip with reduced formats support. + + Extra: 7za.exe : support for only some formats of 7-Zip. + 7-Zip: 7z.exe with 7z.dll : support for all formats of 7-Zip. + +7za.exe and 7z.exe from 7-Zip have same command line interface. +7za.exe doesn't use external DLL files. + +You can read Help File (7-zip.chm) from 7-Zip package for description +of all commands and switches for 7za.exe and 7z.exe. + +7za.exe features: + + - High compression ratio in 7z format + - Supported formats: + - Packing / unpacking: 7z, xz, ZIP, GZIP, BZIP2 and TAR + - Unpacking only: Z, lzma, CAB. + - Highest compression ratio for ZIP and GZIP formats. + - Fast compression and decompression + - Strong AES-256 encryption in 7z and ZIP formats. + +Note: LZMA SDK contains 7zr.exe - more reduced version of 7za.exe. +But you can use 7zr.exe as "public domain" code. + + + +DLL files +--------- + +7za.dll and 7zxa.dll are reduced versions of 7z.dll from 7-Zip. +7za.dll and 7zxa.dll support only 7z format. +Note: 7z.dll is main DLL file that works with all archive types in 7-Zip. + +7za.dll and 7zxa.dll support the following decoding methods: + - LZMA, LZMA2, PPMD, BCJ, BCJ2, COPY, 7zAES, BZip2, Deflate. + +7za.dll also supports 7z encoding with the following encoding methods: + - LZMA, LZMA2, PPMD, BCJ, BCJ2, COPY, 7zAES. + +7za.dll and 7zxa.dll work via COM interfaces. +But these DLLs don't use standard COM interfaces for objects creating. + +Look also example code that calls DLL functions (in source code of 7-Zip): + + 7zip\UI\Client7z + +Another example of binary that uses these interface is 7-Zip itself. +The following binaries from 7-Zip use 7z.dll: + - 7z.exe (console version) + - 7zG.exe (GUI version) + - 7zFM.exe (7-Zip File Manager) + +Note: The source code of LZMA SDK also contains the code for similar DLLs +(DLLs without BZip2, Deflate support). And these files from LZMA SDK can be +used as "public domain" code. If you use LZMA SDK files, you don't need to +follow GNU LGPL rules, if you want to change the code. + + + + +License FAQ +----------- + +Can I use the EXE or DLL files from 7-Zip in a commercial application? +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Yes, but you are required to specify in documentation for your application: + (1) that you used parts of the 7-Zip program, + (2) that 7-Zip is licensed under the GNU LGPL license and + (3) you must give a link to www.7-zip.org, where the source code can be found. + + +Can I use the source code of 7-Zip in a commercial application? +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Since 7-Zip is licensed under the GNU LGPL you must follow the rules of that license. +In brief, it means that any LGPL'ed code must remain licensed under the LGPL. +For instance, you can change the code from 7-Zip or write a wrapper for some +code from 7-Zip and compile it into a DLL; but, the source code of that DLL +(including your modifications / additions / wrapper) must be licensed under +the LGPL or GPL. +Any other code in your application can be licensed as you wish. This scheme allows +users and developers to change LGPL'ed code and recompile that DLL. That is the +idea of free software. Read more here: http://www.gnu.org/. + + + +Note: You can look also LZMA SDK, which is available under a more liberal license. + + +--- +End of document diff --git a/DATFromDir/7z/x64/7za.dll b/DATFromDir/7z/x64/7za.dll new file mode 100644 index 00000000..444c4ffc Binary files /dev/null and b/DATFromDir/7z/x64/7za.dll differ diff --git a/DATFromDir/7z/x64/7za.exe b/DATFromDir/7z/x64/7za.exe new file mode 100644 index 00000000..881b7dd9 Binary files /dev/null and b/DATFromDir/7z/x64/7za.exe differ diff --git a/DATFromDir/7z/x64/7zxa.dll b/DATFromDir/7z/x64/7zxa.dll new file mode 100644 index 00000000..f72ab631 Binary files /dev/null and b/DATFromDir/7z/x64/7zxa.dll differ diff --git a/DATFromDir/App.config b/DATFromDir/App.config new file mode 100644 index 00000000..88fa4027 --- /dev/null +++ b/DATFromDir/App.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/DATFromDir/DATFromDir.cs b/DATFromDir/DATFromDir.cs new file mode 100644 index 00000000..0241446b --- /dev/null +++ b/DATFromDir/DATFromDir.cs @@ -0,0 +1,177 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.IO; +using System.Security.Cryptography; +using System.Text; +using System.Threading.Tasks; +using System.Web; + +namespace SabreTools +{ + class DATFromDir + { + private static string _7zPath; + private static string _basePath; + private static string _tempDir; + private static string _baseExtract; + + static void Main(string[] args) + { + // Set local paths + _7zPath = Environment.CurrentDirectory.Replace('/', '\\') + "\\7z" + (Environment.Is64BitOperatingSystem ? "\\x64" : "") + "\\"; + _tempDir = Environment.CurrentDirectory.Replace('/', '\\') + "\\temp" + DateTime.Now.ToString("yyyyMMddHHmmss") + "\\"; + _basePath = (args.Length == 0 ? Environment.CurrentDirectory : args[0]).Replace('/', '\\') + "\\"; + + // Set base arguments to be used + _baseExtract = "x -o\"" + _tempDir + "\""; + + // Set the basic Process information for 7za + ProcessStartInfo psi = new ProcessStartInfo + { + FileName = _7zPath + "7za.exe", + RedirectStandardError = true, + RedirectStandardOutput = true, + UseShellExecute = false, + }; + + // Get an output array going that has the right mappings (parent, name, size, hash) + List> roms = new List>(); + + // This is where the main loop would go + foreach (string item in Directory.EnumerateFileSystemEntries(_basePath)) + { + // Create the temporary output directory + Directory.CreateDirectory(_tempDir); + + psi.Arguments = _baseExtract + " " + item; + Process zip = Process.Start(psi); + zip.WaitForExit(); + + bool encounteredErrors = zip.StandardError.ReadToEnd().Contains("ERROR"); + + // Get a list of files including size and hash + SHA1 sha1 = SHA1.Create(); + + // If the file was an archive and was extracted successfully, check it + if (!encounteredErrors) + { + foreach (string entry in Directory.GetFiles(_tempDir, "*", SearchOption.AllDirectories)) + { + FileStream fs = File.OpenRead(entry); + string tempHash = BitConverter.ToString(sha1.ComputeHash(fs)).Replace("-", ""); + fs.Close(); + + roms.Add(new Tuple(Path.GetFileNameWithoutExtension(item), entry.Remove(0, _tempDir.Length), (new FileInfo(entry)).Length, tempHash)); + } + } + // Otherwise, just get the info on the file itself + else + { + FileStream fs = File.OpenRead(item); + string tempHash = BitConverter.ToString(sha1.ComputeHash(fs)).Replace("-", ""); + fs.Close(); + + roms.Add(new Tuple("Default", item.Remove(0, _basePath.Length), (new FileInfo(item)).Length, tempHash)); + } + + // Delete the temp directory + Directory.Delete(_tempDir, true); + } + + // Order the roms by name of parent, then name of rom + roms.Sort(delegate (Tuple A, Tuple B) + { + if (A.Item1 == B.Item1) + { + if (A.Item2 == B.Item2) + { + if (A.Item3 == B.Item3) + { + return String.Compare(A.Item4, B.Item4); + } + return (int)(A.Item3 - B.Item3); + } + return String.Compare(A.Item2, B.Item2); + } + return String.Compare(A.Item1, B.Item1); + }); + + // Write out all of the file information + Console.WriteLine("Parent\t\tRom\t\tSize\t\tSHA-1"); + foreach (Tuple rom in roms) + { + Console.WriteLine(rom.Item1 + "\t" + rom.Item2 + "\t" + rom.Item3 + "\t" + rom.Item4); + } + + // Now write it all out as a DAT + try + { + FileStream fs = File.Create("dirdat.xml"); + StreamWriter sw = new StreamWriter(fs, Encoding.UTF8); + + /* + string header_old = "clrmamepro (\n" + + "\tname \"dirdat\"\n" + + "\tdescription \"dirdat\"\n" + + "\tversion \"\"\n" + + "\tcomment \"\"\n" + + "\tauthor \"DATFromDir\"\n" + + ")\n"; + */ + + string header = "\n" + + "\n\n" + + "\t\n" + + "\t\t
\n" + + "\t\t\tdirdat\n" + + "\t\t\tdirdat\n" + + "\t\t\tDATFromDir\n" + + "\t\t\t\n" + + "\t\t\t\n" + + "\t\t\tDATFromDir\n" + + "\t\t\t\n" + + "\t\t
\n"; + + // Write the header out + sw.Write(header); + + // Write out each of the machines and roms + string lastgame = ""; + foreach (Tuple rom in roms) + { + string state = ""; + if (lastgame != "" && lastgame != rom.Item1) + { + state += "\t\n"; + } + + if (lastgame != rom.Item1) + { + state += "\t\n" + + "\t\t" + HttpUtility.HtmlEncode(rom.Item1) + "\n"; + } + + state += "\t\t\n"; + + lastgame = rom.Item1; + + sw.Write(state); + } + + sw.Write("\t\n
"); + Console.Write("File written!"); + sw.Close(); + fs.Close(); + } + catch (Exception ex) + { + Console.Write(ex.ToString()); + } + } + } +} diff --git a/DATFromDir/DATFromDir.csproj b/DATFromDir/DATFromDir.csproj new file mode 100644 index 00000000..14d3469f --- /dev/null +++ b/DATFromDir/DATFromDir.csproj @@ -0,0 +1,90 @@ + + + + + Debug + AnyCPU + {382B75D3-079E-49D5-A830-54DD6EB5A02D} + Exe + Properties + DATFromDir + DATFromDir + v4.5.2 + 512 + true + + + AnyCPU + true + full + false + ..\..\Builds\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + + + + + + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + + + \ No newline at end of file diff --git a/DATFromDir/Properties/AssemblyInfo.cs b/DATFromDir/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..0d9500f6 --- /dev/null +++ b/DATFromDir/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +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("DATFromDir")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("DATFromDir")] +[assembly: AssemblyCopyright("Copyright © 2016")] +[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("382b75d3-079e-49d5-a830-54dd6eb5a02d")] + +// 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/SabreTools.sln b/SabreTools.sln index d5a36b6f..1ea1c4db 100644 --- a/SabreTools.sln +++ b/SabreTools.sln @@ -15,6 +15,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SingleGame", "SingleGame\Si EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SabreHelper", "SabreHelper\SabreHelper.csproj", "{225A1AFD-0890-44E8-B779-7502665C23A5}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DATFromDir", "DATFromDir\DATFromDir.csproj", "{382B75D3-079E-49D5-A830-54DD6EB5A02D}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -45,6 +47,10 @@ Global {225A1AFD-0890-44E8-B779-7502665C23A5}.Debug|Any CPU.Build.0 = Debug|Any CPU {225A1AFD-0890-44E8-B779-7502665C23A5}.Release|Any CPU.ActiveCfg = Release|Any CPU {225A1AFD-0890-44E8-B779-7502665C23A5}.Release|Any CPU.Build.0 = Release|Any CPU + {382B75D3-079E-49D5-A830-54DD6EB5A02D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {382B75D3-079E-49D5-A830-54DD6EB5A02D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {382B75D3-079E-49D5-A830-54DD6EB5A02D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {382B75D3-079E-49D5-A830-54DD6EB5A02D}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE