diff --git a/CSharp/Libraries/UniversalEditor.Compression/Modules/LZRW1/LZRW1CompressionModule.cs b/CSharp/Libraries/UniversalEditor.Compression/Modules/LZRW1/LZRW1CompressionModule.cs index 8dc98f59..e8b6f5e5 100644 --- a/CSharp/Libraries/UniversalEditor.Compression/Modules/LZRW1/LZRW1CompressionModule.cs +++ b/CSharp/Libraries/UniversalEditor.Compression/Modules/LZRW1/LZRW1CompressionModule.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.IO; using System.Linq; using System.Text; using UniversalEditor.Accessors; @@ -7,35 +8,35 @@ using UniversalEditor.IO; namespace UniversalEditor.Compression.Modules.LZRW1 { - public class LZRW1CompressionModule : CompressionModule - { - /// - /// Number of bytes used by copy flag - /// - private const byte FLAG_BYTES = 0x04; + public class LZRW1CompressionModule : CompressionModule + { + /// + /// Number of bytes used by copy flag + /// + private const byte FLAG_BYTES = 0x04; - private const byte FLAG_COMPRESS = 0x00; - private const byte FLAG_COPY = 0x01; + private const byte FLAG_COMPRESS = 0x00; + private const byte FLAG_COPY = 0x01; - public override string Name - { - get { return "LZRW1"; } - } + public override string Name + { + get { return "LZRW1"; } + } - protected override void CompressInternal(System.IO.Stream inputStream, System.IO.Stream outputStream) - { - throw new NotImplementedException(); - } + protected override void CompressInternal(System.IO.Stream inputStream, System.IO.Stream outputStream) + { + throw new NotImplementedException(); + } - protected override void DecompressInternal(System.IO.Stream inputStream, System.IO.Stream outputStream, int inputLength, int outputLength) - { - StreamAccessor sao = new StreamAccessor(outputStream); - StreamAccessor sai = new StreamAccessor(inputStream); - Reader br = new Reader(sai); - Writer bw = new Writer(sao); + protected override void DecompressInternal(System.IO.Stream inputStream, System.IO.Stream outputStream, int inputLength, int outputLength) + { + StreamAccessor sao = new StreamAccessor(outputStream); + StreamAccessor sai = new StreamAccessor(inputStream); + Reader br = new Reader(sai); + Writer bw = new Writer(sao); - /* + /* byte *p_src = p_src_first + 4, *p_dst = p_dst_first, *p_dst_end = p_dst_first + dst_len; @@ -43,61 +44,58 @@ namespace UniversalEditor.Compression.Modules.LZRW1 byte *p_src_max16 = p_src_first + src_len - (16 * 2); */ - uint control = 1; + uint control = 1; - uint flag = br.ReadUInt32(); - if (flag == FLAG_COPY) - { - // entire stream is uncompressed, so read it all - byte[] data = br.ReadToEnd(); - bw.WriteBytes(data); - } - while (!br.EndOfStream) - { - uint unroll; - if (control == 1) - { - control = (uint)(0x10000 | br.ReadByte()); - control |= (uint)(br.ReadByte() << 8); - } - unroll = (uint)((br.Accessor.Position <= (br.Accessor.Length - 32)) ? 16 : 1); - while (unroll-- != 0) - { - if ((control & 1) != 0) - { - byte offsetCalcByte1 = br.ReadByte(); - byte offsetCalcByte2 = br.ReadByte(); + uint flag = br.ReadUInt32(); + if (flag == FLAG_COPY) + { + // entire stream is uncompressed, so read it all + byte[] data = br.ReadToEnd(); + bw.WriteBytes(data); + } + while (!br.EndOfStream) + { + uint unroll; + if (control == 1) + { + control = (uint)(0x10000 | br.ReadByte()); + control |= (uint)(br.ReadByte() << 8); + } + unroll = (uint)((br.Accessor.Position <= (br.Accessor.Length - 32)) ? 16 : 1); + while (unroll-- != 0) + { + if ((control & 1) != 0) + { + byte offsetCalcByte1 = br.ReadByte(); + byte offsetCalcByte2 = br.ReadByte(); - ushort offset = (ushort)(((offsetCalcByte1 & 0xF0) << 4) | offsetCalcByte2); - ushort len = (ushort)(offsetCalcByte1 & 0xF); + ushort offset = (ushort)(((offsetCalcByte1 & 0xF0) << 4) | offsetCalcByte2); + ushort len = (ushort)(offsetCalcByte1 & 0xF); - long oldpos = sao.Position; - sao.Position = sao.Length - offset; - - IO.Reader bro = new Reader(sao); - byte value = bro.ReadByte(); + long oldpos = sao.Position; + sao.Position = sao.Length - offset; - sao.Position = oldpos; + IO.Reader bro = new Reader(sao); + byte value = bro.ReadByte(); - // if((p_dst + offset) > p_dst_end) return(-1); + sao.Position = oldpos; - - for (int i = 0; i < len + 3; i++) - { - bw.WriteByte(value); - } + // if((p_dst + offset) > p_dst_end) return(-1); - System.IO.File.WriteAllBytes(@"C:\Temp\Test.dat", outputStream.ToByteArray()); - } - else - { - if (br.EndOfStream) return; - bw.WriteByte(br.ReadByte()); - System.IO.File.WriteAllBytes(@"C:\Temp\Test.dat", outputStream.ToByteArray()); - } - control >>= 1; - } - } - } - } + + for (int i = 0; i < len + 3; i++) + { + bw.WriteByte(value); + } + } + else + { + if (br.EndOfStream) return; + bw.WriteByte(br.ReadByte()); + } + control >>= 1; + } + } + } + } }