godzcheater

Hex workshop bookmark (HBK)

Feb 1st, 2013
228
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 7.84 KB | None | 0 0
  1.     internal class Bookmarks
  2.     {
  3.         public IO.FileIO IO;
  4.  
  5.         public Header Header;
  6.         public System.Collections.Generic.List<Bookmark> Entries;
  7.  
  8.         public Bookmarks(IO.FileIO _IO)
  9.         {
  10.             IO = _IO;
  11.             Deserialize();
  12.         }
  13.         public Bookmarks()
  14.         {
  15.             Header = new Header();
  16.             Header.MajorVersion = 2;
  17.             Header.Description = "Created by XeLib";
  18.             Header.Reserved = new System.Byte[12];
  19.             Entries = new System.Collections.Generic.List<Bookmark>();
  20.         }
  21.  
  22.         public void Deserialize()
  23.         {
  24.             IO.BaseStream.Position = 0;
  25.             Header = new Header();
  26.             Header.Deserialize(IO.Reader);
  27.             Entries = new System.Collections.Generic.List<Bookmark>();
  28.             for (System.Int32 Index = 0; Index < Header.Entries; Index++)
  29.             {
  30.                 Bookmark Entry = new Bookmark();
  31.                 Entry.Deserialize(IO.Reader);
  32.                 Entries.Add(Entry);
  33.             }
  34.         }
  35.         public void Serialize()
  36.         {
  37.             Header.Entries = Entries.Count;
  38.  
  39.             IO.BaseStream.Position = 0;
  40.             Header.Serialize(IO);
  41.             for (System.Int32 Index = 0; Index < Entries.Count; Index++)
  42.                 Entries[Index].Serialize(IO.Writer);
  43.             IO.BaseStream.Flush();
  44.         }
  45.     }
  46.     internal class Header
  47.     {
  48.         public System.UInt16 MajorVersion;
  49.         public System.UInt16 MinorVersion;
  50.         public System.String Description;
  51.         public System.String Author;
  52.         public System.UInt32 flags;
  53.         public System.Boolean RegisteredVersionRequired
  54.         {
  55.             get
  56.             {
  57.                 return (flags & 1) == 1;
  58.             }
  59.             set
  60.             {
  61.                 if (value != RegisteredVersionRequired)
  62.                     flags ^= 1;
  63.             }
  64.         }
  65.         public System.Int32 Entries;
  66.         public System.String StructureCollection;
  67.         public System.Byte[] Reserved;
  68.  
  69.         public void Deserialize(IO.FileReader FileReader)
  70.         {
  71.             if (FileReader.ReadUInt32() != 11861760)
  72.             {
  73.                 FileReader.Dispose();
  74.                 throw new InvalidMagic(new System.Exception("MagicID != 11861760"));
  75.             }
  76.             else
  77.             {
  78.                 MajorVersion = FileReader.ReadUInt16();
  79.                 MinorVersion = FileReader.ReadUInt16();
  80.                 Description = FileReader.ReadUTF8String(80).Replace("\0", "");
  81.                 Author = FileReader.ReadUTF8String(80).Replace("\0", "");
  82.                 flags = FileReader.ReadUInt32();
  83.                 Entries = FileReader.ReadInt32();
  84.                 StructureCollection = FileReader.ReadUTF8String(256).Replace("\0", "");
  85.                 Reserved = FileReader.ReadBytes(12);
  86.                 System.UInt32 Checksum = FileReader.ReadUInt32();
  87.                 //FileReader.BaseStream.Position -= 4;
  88.                 //Write UInt: 11861760 + MajorVersion + MinorVersion + flags
  89.                 //FileReader.BaseStream.Position -= 448;
  90.                 //CRC32 for 448 bytes.
  91.                 //FileReader.BaseStream.Position -= 4;
  92.                 //Write UInt: Checksum
  93.                 //Compare
  94.             }
  95.         }
  96.         public void Serialize(IO.FileIO FileIO)
  97.         {
  98.             FileIO.Writer.WriteUInt32(11861760);
  99.             FileIO.Writer.WriteUInt16(MajorVersion);
  100.             FileIO.Writer.WriteUInt16(MinorVersion);
  101.             FileIO.Writer.WriteUTF8String(Description.PadRight(80, '\0'));
  102.             FileIO.Writer.WriteUTF8String(Author.PadRight(80, '\0'));
  103.             FileIO.Writer.WriteUInt32(flags);
  104.             FileIO.Writer.WriteInt32(Entries);
  105.             FileIO.Writer.WriteUTF8String(StructureCollection.PadRight(256, '\0'));
  106.             FileIO.Writer.WriteBytes(Reserved);
  107.             FileIO.Writer.WriteUInt32((System.UInt32)(11861760 + MajorVersion + MinorVersion + flags));
  108.             FileIO.Reader.BaseStream.Position -= 448;
  109.             System.Byte[] Buffer = FileIO.Reader.ReadBytes(448);//CRC32 it
  110.             FileIO.Reader.BaseStream.Position -= 4;
  111.             FileIO.Writer.WriteUInt32(0);//CRC
  112.         }
  113.     }
  114.     internal class InvalidMagic : System.Exception
  115.     {
  116.         public InvalidMagic(System.Exception Inner) : base("Invalid Magic", Inner) { }
  117.     }
  118.     internal class Bookmark
  119.     {
  120.         public System.String Description;
  121.         public System.String AddressRule;
  122.         public System.String LengthRule;
  123.         public System.String CountRule;
  124.         public DATATYPE dataType;
  125.         public System.Boolean Unsigned;
  126.         public System.Boolean IsLittleEndian;
  127.         public System.Byte Base;//(0=Dec, 1=hex)
  128.         public System.String Structure;
  129.         public System.UInt64 findPos;
  130.         public System.UInt64 findLength;
  131.         public System.Byte[] Reserved;
  132.         public System.UInt32 flags;
  133.         public System.Boolean FixedLength
  134.         {
  135.             get
  136.             {
  137.                 return (flags & 1) == 1;
  138.             }
  139.             set
  140.             {
  141.                 if (value != FixedLength)
  142.                     flags ^= 1;
  143.             }
  144.         }
  145.         public System.Boolean SequentialAddresses
  146.         {
  147.             get
  148.             {
  149.                 return (flags & 2) == 2;
  150.             }
  151.             set
  152.             {
  153.                 if (value != SequentialAddresses)
  154.                     flags ^= 2;
  155.             }
  156.         }
  157.  
  158.         public Bookmark()
  159.         {
  160.             Reserved = new System.Byte[32];
  161.         }
  162.  
  163.         public void Deserialize(IO.FileReader FileReader)
  164.         {
  165.             Description = FileReader.ReadUTF8String(80);
  166.             AddressRule = FileReader.ReadUTF8String(128);
  167.             LengthRule = FileReader.ReadUTF8String(128);
  168.             CountRule = FileReader.ReadUTF8String(128);
  169.             dataType = (DATATYPE)FileReader.ReadUInt32();
  170.             Unsigned = FileReader.ReadUInt8() == 1;
  171.             IsLittleEndian = FileReader.ReadUInt8() == 1;
  172.             Base = FileReader.ReadUInt8();
  173.             Structure = FileReader.ReadUTF8String(128);
  174.             findPos = FileReader.ReadUInt64();
  175.             findLength = FileReader.ReadUInt64();
  176.             Reserved = FileReader.ReadBytes(32);
  177.             flags = FileReader.ReadUInt32();
  178.         }
  179.         public void Serialize(IO.FileWriter FileWriter)
  180.         {
  181.             FileWriter.WriteUTF8String(Description.PadRight(80, '\0'));
  182.             FileWriter.WriteUTF8String(AddressRule.PadRight(128, '\0'));
  183.             FileWriter.WriteUTF8String(LengthRule.PadRight(128, '\0'));
  184.             FileWriter.WriteUTF8String(CountRule.PadRight(128, '\0'));
  185.             FileWriter.WriteUInt32((System.UInt32)dataType);
  186.             FileWriter.WriteUInt8((System.Byte)(Unsigned ? 1 : 0));
  187.             FileWriter.WriteUInt8((System.Byte)(IsLittleEndian ? 1 : 0));
  188.             FileWriter.WriteUInt8(Base);
  189.             FileWriter.WriteUTF8String(Structure.PadRight(128, '\0'));
  190.             FileWriter.WriteUInt64(findPos);
  191.             FileWriter.WriteUInt64(findLength);
  192.             FileWriter.WriteBytes(Reserved);
  193.             FileWriter.WriteUInt32(flags);
  194.         }
  195.     }
  196.     internal enum DATATYPE
  197.     {
  198.         DT_NONE = 0,
  199.         DT_BYTE = 1,
  200.         DT_WORD = 2,
  201.         DT_DWORD = 3,
  202.         DT_QWORD = 4,
  203.         DT_FLOAT = 5,
  204.         DT_DOUBLE = 6,
  205.         DT_STRING = 7,
  206.         DT_UNICODESTRING = 8,
  207.         DT_MSDOS_DATE = 9,
  208.         DT_MSDOS_TIME = 10,
  209.         DT_FILETIME = 11,
  210.         DT_UNIXTIME = 12,
  211.         DT_OLEDATETIME = 13,
  212.         DT_BINARY = 14,
  213.         DT_STRUCTURE = 15,
  214.         DT_ENUM = 16,
  215.         DT_UNION = 17,
  216.         DT_BITFIELD = 18,
  217.         DT_BLOB = 19,
  218.         DT_UNIXTIME64 = 20,
  219.         DT_FRAG = 21,
  220.         DT_CHAR = 22,
  221.         DT_WCHAR = 23,
  222.     }
Advertisement
Add Comment
Please, Sign In to add comment