public override void Decompress(AU3_Resource res) { res.State = "Extracted"; res.DoUpdate(); res.count = 0; //form.SetText("Decompressing...", form.lblStatus); if (res.CompressedSize == res.DecompressedSize) { //form.SetText("Not Compressed.", form.lblStatus); //res.evtDecompressed.Set(); return; } res.pMem = new byte[res.DecompressedSize]; res.spos = 0; res.pos = 8; // "EA06/EA05/JB??", p32(size) if (!Utils.AU3_SIGN.Contains(BitConverter.ToUInt32(res.RawData, 0))) { res.Status = Utils.STATUS.InvalidCompressedHeader; res.State = "Invalid Compressed File Format!"; res.DoUpdate(); //res.evtDecompressed.Set(); return; // invalid signature } if (BitConverter.ToUInt32(res.RawData, 0) == 0x3130424a) { try { res.JB01_Decompress(this); } catch (Exception) { res.count = 0; res.pos = 8; res.DecompressorInitLegacy(); while (res.spos < res.DecompressedSize) { res.r = res.sub_417518(this); if (res.r < 0x100) { res.pMem[res.spos++] = (byte)res.r; } else { res.v = res.sub_417665(res.r, this) + 3; res.delta = res.spos - res.sub_4176a5(this); while (res.spos < res.pMem.Length && res.v-- > 0) { res.pMem[res.spos++] = res.pMem[res.delta++]; } } } } } else { res.count = 0; res.pos = 8; res.DecompressorInitLegacy(); while (res.spos < res.DecompressedSize) { res.r = res.sub_417518(this); if (res.r < 0x100) { res.pMem[res.spos++] = (byte)res.r; } else { res.v = res.sub_417665(res.r, this) + 3; res.delta = res.spos - res.sub_4176a5(this); while (res.spos < res.pMem.Length && res.v-- > 0) { res.pMem[res.spos++] = res.pMem[res.delta++]; } } } } res.RawDataSize = res.DecompressedSize; res.RawData = res.pMem; if (this.IsUnicode) { res.SourceCode = Encoding.Unicode.GetString(res.pMem); } else { res.SourceCode = Encoding.ASCII.GetString(res.pMem); } res.Status = Utils.STATUS.OK; res.State = "Decompressed"; res.Type = Utils.TYPE.Text; res.SourceState = Utils.SOURCE_STATE.Decompressed; //form.SetText("Decompressed.", form.lblStatus); //res.evtDecompressed.Set(); //form.UpdateStatus(null, null); if (!res.Tag.Contains("SCRIPT")) { res.MarkComplete(); } else { res.DoUpdate(); } }
public override void Decompress(AU3_Resource res) { res.State = "Extracted"; res.count = 0; res.DoUpdate(); //form.SetText("Decompressing...", form.lblStatus); if (res.CompressedSize == res.DecompressedSize) { //form.SetText("Not Compressed.", form.lblStatus); //res.evtNotify.Set(); if (!res.Tag.Contains("SCRIPT<")) { res.MarkComplete(); } else { res.DoUpdate(); } return; } var mem = new byte[res.DecompressedSize]; int i = 0; res.pos = 8; // "EA06", p32(size) if (!Utils.AU3_SIGN.Contains(BitConverter.ToUInt32(res.RawData, 0))) { res.Status = Utils.STATUS.InvalidCompressedHeader; res.State = "Invalid Compressed File Format!"; //res.evtNotify.Set(); return; // invalid signature } while (i < res.DecompressedSize) { var r = ExtractBits(res, 1); if (r == 1) { mem[i++] = (byte)ExtractBits(res, 8); } else { var v = ExtractBits(res, 0xf); r = CustomExtractBits(res); var delta = i - v; while (r-- > 0) { mem[i++] = mem[delta++]; } } } res.RawDataSize = res.DecompressedSize; res.RawData = mem; res.Status = Utils.STATUS.OK; res.State = "Decompressed"; res.Type = Utils.TYPE.Binary; res.SourceState = Utils.SOURCE_STATE.Decompressed; //form.SetText("Decompressed.", form.lblStatus); //res.evtNotify.Set(); //form.UpdateStatus(null, null); if (!res.Tag.Contains("SCRIPT<")) { res.MarkComplete(); } else { res.DoUpdate(); } }