diff --git a/Switch_Toolbox_Library/Compression/Formats/LZ77.cs b/Switch_Toolbox_Library/Compression/Formats/LZ77.cs new file mode 100644 index 00000000..ee9e8767 --- /dev/null +++ b/Switch_Toolbox_Library/Compression/Formats/LZ77.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.IO; +using System.IO.Compression; +using System.Threading.Tasks; +using Toolbox.Library.IO; +using Toolbox.Library.Forms; +using System.Runtime.InteropServices; + +namespace Toolbox.Library +{ + public class LZ77 : ICompressionFormat + { + public string[] Description { get; set; } = new string[] { "LZ77 Compressed" }; + public string[] Extension { get; set; } = new string[] { "*.lz", }; + + bool isType11; + public bool Identify(Stream stream, string fileName) + { + if (stream.Length < 16) + return false; + + using (var reader = new FileReader(stream, true)) + { + if(Utils.GetExtension(fileName) == ".lz") + { + reader.SeekBegin(12); + isType11 = reader.ReadByte() == 0x11; + return isType11; + } + } + return false; + } + + public bool CanCompress { get; } = true; + + private bool UseLZMAMagicHeader = true; + + public Stream Decompress(Stream stream) + { + using (var reader = new FileReader(stream)) + { + if (isType11) + { + uint decomp_size = reader.ReadUInt32(); + + var sub = new SubStream(stream, 16); + return new MemoryStream(LZ77_WII.Decompress11(sub.ToArray(), (int)decomp_size)); + } + else + { + return new MemoryStream(); + } + } + } + + public Stream Compress(Stream stream) + { + MemoryStream mem = new MemoryStream(); + + return mem; + } + } +} diff --git a/Switch_Toolbox_Library/Toolbox_Library.csproj b/Switch_Toolbox_Library/Toolbox_Library.csproj index 52eede1a..91152c36 100644 --- a/Switch_Toolbox_Library/Toolbox_Library.csproj +++ b/Switch_Toolbox_Library/Toolbox_Library.csproj @@ -232,6 +232,7 @@ +