private void decompress_Mode(byte[] buffer, byte mode, ushort windowSize) { CircularBuffer circularBuffer = new CircularBuffer(windowSize); string outputPath = FilePath + ".OUT"; using (BinaryWriter writer = new BinaryWriter(new FileStream(outputPath, FileMode.Create))) { writer.Write(buffer, 0, 1); circularBuffer.AddData(new byte[] { buffer[0] }); for (int i = 1; i < buffer.Length; i++) { bool[] flags = GetFlags(buffer[i]); for (int j = 7; j >= 0; j--) { if (flags[j]) { byte[] wordBytes = new byte[2]; Array.Copy(buffer, ++i, wordBytes, 0, 2); CompressedWord word = new CompressedWord(wordBytes, mode); byte[] result = circularBuffer.GetData(word.Offset, word.Length); i++; writer.Write(result, 0, result.Length); } else { if (i < buffer.Length - 1) { writer.Write(buffer, ++i, 1); circularBuffer.AddData(new byte[] { buffer[i] }); } } if (writer.BaseStream.Length >= LZSSHeader.UncompressedSize) { break; } } if (writer.BaseStream.Length >= LZSSHeader.UncompressedSize) { break; } } } DecompressedFile = HeaderList.GetTypeFromFile(outputPath); string headerPath = Path.Combine(Path.GetDirectoryName(FilePath), Path.GetFileName(FilePath) + ".HEADER"); using (BinaryWriter writer = new BinaryWriter(new FileStream(headerPath, FileMode.Create))) { writer.Write(LZSSHeader.GetBytes()); } HeaderFile = new BaseFile(headerPath); }