Ejemplo n.º 1
0
        private void openABToolStripMenuItem1_Click(object sender, EventArgs e)
        {
            OpenFileDialog dialog = new OpenFileDialog {
                Filter = "AB File (*.AB)|*.AB"
            };

            if (dialog.ShowDialog() != DialogResult.Cancel)
            {
                ABList.Items.Clear();
                BinaryReader fp  = new BinaryReader(dialog.OpenFile());
                string       str = Encoding.UTF8.GetString(fp.ReadBytes(2));
                Ab = new List <AB_s>();
                if (str == "AB")
                {
                    AB_s ab = new AB_s();
                    ab = LoadAb(fp, ab);
                    Ab.Add(ab);
                }
            }
        }
Ejemplo n.º 2
0
        public static AB_s LoadAb(BinaryReader fp, AB_s Ab)
        {
            fp.BaseStream.Seek(0L, SeekOrigin.Begin);
            int num = 0;

            fp.ReadInt16();
            Ab.Block_Num     = fp.ReadInt16();
            Ab.BlockStartOff = new ArrayList();
            for (num = 0; num <= Ab.Block_Num; num++)
            {
                uint num2 = fp.ReadUInt32();
                Ab.BlockStartOff.Add(num2);
            }
            Ab.BlockData = new List <ClosableMemoryStream>();
            Ab.BlockInfo = new List <BlockInfo_s>();
            num          = 0;
            for (num = 0; num < Ab.Block_Num; num++)
            {
                ClosableMemoryStream output = new ClosableMemoryStream();
                byte[] buffer = new byte[((uint)Ab.BlockStartOff[num + 1]) - ((uint)Ab.BlockStartOff[num])];
                fp.Read(buffer, 0, buffer.Length);
                new BinaryWriter(output).Write(buffer);
                Ab.BlockData.Add(output);
                BlockInfo_s  item   = new BlockInfo_s();
                BinaryReader reader = new BinaryReader(Ab.BlockData[num]);
                reader.BaseStream.Seek(0x13L, SeekOrigin.Begin);
                item.File_Num = reader.ReadByte();
                item.FileOff  = new ArrayList();
                int num3 = 0;
                while (num3 < item.File_Num)
                {
                    uint num4 = reader.ReadUInt32();
                    item.FileOff.Add(num4);
                    num3++;
                }
                item.FileData = new List <ClosableMemoryStream>();
                reader.ReadInt32();
                if (item.File_Num == 0)
                {
                    ClosableMemoryStream stream2 = Ab.BlockData[num];
                    item.FileData.Add(stream2);
                }
                else
                {
                    for (num3 = 0; num3 < item.File_Num; num3++)
                    {
                        ClosableMemoryStream stream3 = new ClosableMemoryStream();
                        byte[] buffer2 = new byte[0];
                        if (num3 == (item.File_Num - 1))
                        {
                            buffer2 = new byte[((uint)Ab.BlockData[num].Length) - ((uint)item.FileOff[num3])];
                        }
                        else
                        {
                            buffer2 = new byte[((uint)item.FileOff[num3 + 1]) - ((uint)item.FileOff[num3])];
                        }
                        reader.Read(buffer, 0, buffer.Length);
                        new BinaryWriter(stream3).Write(buffer);
                        item.FileData.Add(stream3);
                    }
                }
                Ab.BlockInfo.Add(item);
            }
            return(Ab);
        }