Ejemplo n.º 1
0
        public void Load(string FileName)
        {
            MyFileName = FileName;
            SerializingFile con = new SerializingFile(new FileStream(FileName, FileMode.Open, FileAccess.Read));

            Serialize(con);
            con.Memory.Close();
        }
Ejemplo n.º 2
0
 public void Serialize(SerializingFile con)
 {
     Magic = con + Magic;
     Version = con + Version;
     DataOffset = con + DataOffset;
     EntryOffset = con + EntryOffset;
     FileCount = con + FileCount;
     BlockTableOffset = con + BlockTableOffset;
     MaxBlockSize = con + MaxBlockSize;
     if (con.isLoading)
         CompressionScheme = new char[4];
     for (int i = 0; i < 4; i++)
         CompressionScheme[i] = con + CompressionScheme[i];
     if (Magic != 0x53464152 ||
         Version != 0x00010000 ||
         MaxBlockSize != 0x00010000)
         throw new Exception("Not supported DLC file!");
 }
Ejemplo n.º 3
0
        public void ReadFileNames(SerializingFile con)
        {
            FileEntryStruct e;
            int             f = -1;

            for (int i = 0; i < Header.FileCount; i++)
            {
                e          = Files[i];
                e.FileName = "UNKNOWN";
                Files[i]   = e;
                if (CompareByteArray(Files[i].Hash, TOCHash))
                {
                    f = i;
                }
            }
            if (f == -1)
            {
                return;
            }
            MemoryStream m = DecompressEntry(f);

            m.Seek(0, 0);
            StreamReader r = new StreamReader(m);

            while (!r.EndOfStream)
            {
                string line = r.ReadLine();
                byte[] hash = ComputeHash(line);
                f = -1;
                for (int i = 0; i < Header.FileCount; i++)
                {
                    if (CompareByteArray(Files[i].Hash, hash))
                    {
                        f = i;
                    }
                }
                if (f != -1)
                {
                    e          = Files[f];
                    e.FileName = line;
                    Files[f]   = e;
                }
            }
        }
Ejemplo n.º 4
0
 public void Serialize(SerializingFile con, HeaderStruct header)
 {
     Header = header;
     MyOffset = (uint)con.GetPos();
     if (con.isLoading)
         Hash = new byte[16];
     for (int i = 0; i < 16; i++)
         Hash[i] = con + Hash[i];
     BlockSizeIndex = con + BlockSizeIndex;
     UncompressedSize = con + UncompressedSize;
     UncompressedSizeAdder = con + UncompressedSizeAdder;
     RealUncompressedSize = UncompressedSize + UncompressedSizeAdder << 32;
     DataOffset = con + DataOffset;
     DataOffsetAdder = con + DataOffsetAdder;
     RealDataOffset = DataOffset + DataOffsetAdder << 32;
     if (BlockSizeIndex == 0xFFFFFFFF)
     {
         BlockOffsets = new long[1];
         BlockOffsets[0] = RealDataOffset;
         BlockSizes = new ushort[1];
         BlockSizes[0] = (ushort)UncompressedSize;
         BlockTableOffset = 0;
     }
     else
     {
         int numBlocks = (int)Math.Ceiling((double)UncompressedSize / (double)header.MaxBlockSize);
         if (con.isLoading)
         {
             BlockOffsets = new long[numBlocks];
             BlockSizes = new ushort[numBlocks];
         }
         BlockOffsets[0] = RealDataOffset;
         long pos = con.Memory.Position;
         con.Seek((int)getBlockOffset((int)BlockSizeIndex, header.EntryOffset, header.FileCount), SeekOrigin.Begin);
         BlockTableOffset = con.Memory.Position;
         BlockSizes[0] = con + BlockSizes[0];
         for (int i = 1; i < numBlocks; i++)
         {
             BlockSizes[i] = con + BlockSizes[i];
             BlockOffsets[i] = BlockOffsets[i - 1] + BlockSizes[i];
         }
         con.Seek((int)pos, SeekOrigin.Begin);
     }
 }
Ejemplo n.º 5
0
 public void Serialize(SerializingFile con)
 {
     if (con.isLoading)
     {
         Header = new HeaderStruct();
     }
     Header.Serialize(con);
     con.Seek((int)Header.EntryOffset, SeekOrigin.Begin);
     if (con.isLoading)
     {
         Files = new FileEntryStruct[Header.FileCount];
     }
     for (int i = 0; i < Header.FileCount; i++)
     {
         Files[i].Serialize(con, Header);
     }
     if (con.isLoading)
     {
         ReadFileNames(con);
     }
 }
Ejemplo n.º 6
0
 public void Serialize(SerializingFile con)
 {
     Magic            = con + Magic;
     Version          = con + Version;
     DataOffset       = con + DataOffset;
     EntryOffset      = con + EntryOffset;
     FileCount        = con + FileCount;
     BlockTableOffset = con + BlockTableOffset;
     MaxBlockSize     = con + MaxBlockSize;
     if (con.isLoading)
     {
         CompressionScheme = new char[4];
     }
     for (int i = 0; i < 4; i++)
     {
         CompressionScheme[i] = con + CompressionScheme[i];
     }
     if (Magic != 0x53464152 ||
         Version != 0x00010000 ||
         MaxBlockSize != 0x00010000)
     {
         throw new Exception("Not supported DLC file!");
     }
 }
Ejemplo n.º 7
0
 public void Serialize(SerializingFile con)
 {
     if (con.isLoading)
         Header = new HeaderStruct();
     Header.Serialize(con);
     con.Seek((int)Header.EntryOffset, SeekOrigin.Begin);
     if (con.isLoading)
         Files = new FileEntryStruct[Header.FileCount];
     for (int i = 0; i < Header.FileCount; i++)
         Files[i].Serialize(con, Header);
     if (con.isLoading)
         ReadFileNames(con);
 }
Ejemplo n.º 8
0
 public void ReadFileNames(SerializingFile con)
 {
     FileEntryStruct e;
     int f = -1;
     for (int i = 0; i < Header.FileCount; i++)
     {
         e = Files[i];
         e.FileName = "UNKNOWN";
         Files[i] = e;
         if (CompareByteArray(Files[i].Hash, TOCHash))
             f = i;
     }
     if (f == -1)
         return;
     MemoryStream m = DecompressEntry(f);
     m.Seek(0, 0);
     StreamReader r = new StreamReader(m);
     while (!r.EndOfStream)
     {
         string line = r.ReadLine();
         byte[] hash = ComputeHash(line);
         f = -1;
         for (int i = 0; i < Header.FileCount; i++)
             if (CompareByteArray(Files[i].Hash, hash))
                 f = i;
         if (f != -1)
         {
             e = Files[f];
             e.FileName = line;
             Files[f] = e;
         }
     }
 }
Ejemplo n.º 9
0
 public void Load(string FileName)
 {
     MyFileName = FileName;
     SerializingFile con = new SerializingFile(new FileStream(FileName, FileMode.Open, FileAccess.Read));
     Serialize(con);
     con.Memory.Close();
 }