Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- internal class Bookmarks
- {
- public IO.FileIO IO;
- public Header Header;
- public System.Collections.Generic.List<Bookmark> Entries;
- public Bookmarks(IO.FileIO _IO)
- {
- IO = _IO;
- Deserialize();
- }
- public Bookmarks()
- {
- Header = new Header();
- Header.MajorVersion = 2;
- Header.Description = "Created by XeLib";
- Header.Reserved = new System.Byte[12];
- Entries = new System.Collections.Generic.List<Bookmark>();
- }
- public void Deserialize()
- {
- IO.BaseStream.Position = 0;
- Header = new Header();
- Header.Deserialize(IO.Reader);
- Entries = new System.Collections.Generic.List<Bookmark>();
- for (System.Int32 Index = 0; Index < Header.Entries; Index++)
- {
- Bookmark Entry = new Bookmark();
- Entry.Deserialize(IO.Reader);
- Entries.Add(Entry);
- }
- }
- public void Serialize()
- {
- Header.Entries = Entries.Count;
- IO.BaseStream.Position = 0;
- Header.Serialize(IO);
- for (System.Int32 Index = 0; Index < Entries.Count; Index++)
- Entries[Index].Serialize(IO.Writer);
- IO.BaseStream.Flush();
- }
- }
- internal class Header
- {
- public System.UInt16 MajorVersion;
- public System.UInt16 MinorVersion;
- public System.String Description;
- public System.String Author;
- public System.UInt32 flags;
- public System.Boolean RegisteredVersionRequired
- {
- get
- {
- return (flags & 1) == 1;
- }
- set
- {
- if (value != RegisteredVersionRequired)
- flags ^= 1;
- }
- }
- public System.Int32 Entries;
- public System.String StructureCollection;
- public System.Byte[] Reserved;
- public void Deserialize(IO.FileReader FileReader)
- {
- if (FileReader.ReadUInt32() != 11861760)
- {
- FileReader.Dispose();
- throw new InvalidMagic(new System.Exception("MagicID != 11861760"));
- }
- else
- {
- MajorVersion = FileReader.ReadUInt16();
- MinorVersion = FileReader.ReadUInt16();
- Description = FileReader.ReadUTF8String(80).Replace("\0", "");
- Author = FileReader.ReadUTF8String(80).Replace("\0", "");
- flags = FileReader.ReadUInt32();
- Entries = FileReader.ReadInt32();
- StructureCollection = FileReader.ReadUTF8String(256).Replace("\0", "");
- Reserved = FileReader.ReadBytes(12);
- System.UInt32 Checksum = FileReader.ReadUInt32();
- //FileReader.BaseStream.Position -= 4;
- //Write UInt: 11861760 + MajorVersion + MinorVersion + flags
- //FileReader.BaseStream.Position -= 448;
- //CRC32 for 448 bytes.
- //FileReader.BaseStream.Position -= 4;
- //Write UInt: Checksum
- //Compare
- }
- }
- public void Serialize(IO.FileIO FileIO)
- {
- FileIO.Writer.WriteUInt32(11861760);
- FileIO.Writer.WriteUInt16(MajorVersion);
- FileIO.Writer.WriteUInt16(MinorVersion);
- FileIO.Writer.WriteUTF8String(Description.PadRight(80, '\0'));
- FileIO.Writer.WriteUTF8String(Author.PadRight(80, '\0'));
- FileIO.Writer.WriteUInt32(flags);
- FileIO.Writer.WriteInt32(Entries);
- FileIO.Writer.WriteUTF8String(StructureCollection.PadRight(256, '\0'));
- FileIO.Writer.WriteBytes(Reserved);
- FileIO.Writer.WriteUInt32((System.UInt32)(11861760 + MajorVersion + MinorVersion + flags));
- FileIO.Reader.BaseStream.Position -= 448;
- System.Byte[] Buffer = FileIO.Reader.ReadBytes(448);//CRC32 it
- FileIO.Reader.BaseStream.Position -= 4;
- FileIO.Writer.WriteUInt32(0);//CRC
- }
- }
- internal class InvalidMagic : System.Exception
- {
- public InvalidMagic(System.Exception Inner) : base("Invalid Magic", Inner) { }
- }
- internal class Bookmark
- {
- public System.String Description;
- public System.String AddressRule;
- public System.String LengthRule;
- public System.String CountRule;
- public DATATYPE dataType;
- public System.Boolean Unsigned;
- public System.Boolean IsLittleEndian;
- public System.Byte Base;//(0=Dec, 1=hex)
- public System.String Structure;
- public System.UInt64 findPos;
- public System.UInt64 findLength;
- public System.Byte[] Reserved;
- public System.UInt32 flags;
- public System.Boolean FixedLength
- {
- get
- {
- return (flags & 1) == 1;
- }
- set
- {
- if (value != FixedLength)
- flags ^= 1;
- }
- }
- public System.Boolean SequentialAddresses
- {
- get
- {
- return (flags & 2) == 2;
- }
- set
- {
- if (value != SequentialAddresses)
- flags ^= 2;
- }
- }
- public Bookmark()
- {
- Reserved = new System.Byte[32];
- }
- public void Deserialize(IO.FileReader FileReader)
- {
- Description = FileReader.ReadUTF8String(80);
- AddressRule = FileReader.ReadUTF8String(128);
- LengthRule = FileReader.ReadUTF8String(128);
- CountRule = FileReader.ReadUTF8String(128);
- dataType = (DATATYPE)FileReader.ReadUInt32();
- Unsigned = FileReader.ReadUInt8() == 1;
- IsLittleEndian = FileReader.ReadUInt8() == 1;
- Base = FileReader.ReadUInt8();
- Structure = FileReader.ReadUTF8String(128);
- findPos = FileReader.ReadUInt64();
- findLength = FileReader.ReadUInt64();
- Reserved = FileReader.ReadBytes(32);
- flags = FileReader.ReadUInt32();
- }
- public void Serialize(IO.FileWriter FileWriter)
- {
- FileWriter.WriteUTF8String(Description.PadRight(80, '\0'));
- FileWriter.WriteUTF8String(AddressRule.PadRight(128, '\0'));
- FileWriter.WriteUTF8String(LengthRule.PadRight(128, '\0'));
- FileWriter.WriteUTF8String(CountRule.PadRight(128, '\0'));
- FileWriter.WriteUInt32((System.UInt32)dataType);
- FileWriter.WriteUInt8((System.Byte)(Unsigned ? 1 : 0));
- FileWriter.WriteUInt8((System.Byte)(IsLittleEndian ? 1 : 0));
- FileWriter.WriteUInt8(Base);
- FileWriter.WriteUTF8String(Structure.PadRight(128, '\0'));
- FileWriter.WriteUInt64(findPos);
- FileWriter.WriteUInt64(findLength);
- FileWriter.WriteBytes(Reserved);
- FileWriter.WriteUInt32(flags);
- }
- }
- internal enum DATATYPE
- {
- DT_NONE = 0,
- DT_BYTE = 1,
- DT_WORD = 2,
- DT_DWORD = 3,
- DT_QWORD = 4,
- DT_FLOAT = 5,
- DT_DOUBLE = 6,
- DT_STRING = 7,
- DT_UNICODESTRING = 8,
- DT_MSDOS_DATE = 9,
- DT_MSDOS_TIME = 10,
- DT_FILETIME = 11,
- DT_UNIXTIME = 12,
- DT_OLEDATETIME = 13,
- DT_BINARY = 14,
- DT_STRUCTURE = 15,
- DT_ENUM = 16,
- DT_UNION = 17,
- DT_BITFIELD = 18,
- DT_BLOB = 19,
- DT_UNIXTIME64 = 20,
- DT_FRAG = 21,
- DT_CHAR = 22,
- DT_WCHAR = 23,
- }
Advertisement
Add Comment
Please, Sign In to add comment