Ejemplo n.º 1
0
        private static void ReadDrsFileContents(IDrs drs, BinaryReader b)
        {
            drs.Files = new List <byte[]> (drs.FileInfo.Count);

            foreach (var fileInfo in drs.FileInfo)
            {
                b.BaseStream.Seek(fileInfo.FileDataOffset, SeekOrigin.Begin);

                byte[] fileContents = b.ReadBytes(fileInfo.FileSize);
                drs.Files.Add(fileContents);
            }
        }
Ejemplo n.º 2
0
        static void ReadDrsHeader(IDrs drs, BinaryReader b)
        {
            var header = new DrsHeader();

            drs.Header = header;

            // Magic numbers... mhmmmmm...
            header.Copyright  = b.ReadBytes(40);
            header.Version    = b.ReadBytes(4);
            header.FType      = b.ReadBytes(12);
            header.TableCount = b.ReadInt32();
            header.FileOffset = b.ReadInt32();
        }
Ejemplo n.º 3
0
        static void ReadDrsFileInfo(IDrs drs, BinaryReader b, int totalNumFiles)
        {
            drs.FileInfo = new List <IDrsFileInfo>(totalNumFiles);

            foreach (IDrsTableInfo table in drs.TableInfo)
            {
                b.BaseStream.Seek(table.FileInfoOffset, SeekOrigin.Begin);

                for (int j = 0; j < table.NumFiles; ++j)
                {
                    var fileInfo = new DrsFileInfo();
                    fileInfo.FileId         = b.ReadInt32();
                    fileInfo.FileDataOffset = b.ReadInt32();
                    fileInfo.FileSize       = b.ReadInt32();
                    drs.FileInfo.Add(fileInfo);
                }
            }
        }
Ejemplo n.º 4
0
        static int ReadDrsTableInfo(IDrs drs, BinaryReader b)
        {
            drs.TableInfo = new List <IDrsTableInfo>(drs.Header.TableCount);

            int totalNumFiles = 0;

            for (int i = 0; i < drs.Header.TableCount; ++i)
            {
                var tableInfo = new DrsTableInfo();
                tableInfo.FileType       = b.ReadByte();
                tableInfo.FileExtension  = b.ReadBytes(3);
                tableInfo.FileInfoOffset = b.ReadInt32();
                tableInfo.NumFiles       = b.ReadInt32();
                totalNumFiles           += tableInfo.NumFiles;
                drs.TableInfo.Add(tableInfo);
            }

            return(totalNumFiles);
        }
Ejemplo n.º 5
0
        public bool LoadDrsFile(string filename)
        {
            bool retval = false;

            try {
                IDrs drs = DrsReader.ReadDrs(filename);

                if (drs != null)
                {
                    this.DRS = drs;
                    retval   = true;
                }
            }
            catch {
                retval = false;
            }

            return(retval);
        }
Ejemplo n.º 6
0
        /// <summary>
        /// Reads the DRS archive from disk.
        /// </summary>
        /// <returns>The drs or null.</returns>
        /// <param name="filename">Full filename including path.</param>
        public static IDrs ReadDrs(string filename)
        {
            // Need some sanity checks and blahdyyea
            // Split into smaller chunkies...

            IDrs drs = null;

            try {
                drs = new Drs();

                using (BinaryReader b = new BinaryReader(File.Open(filename, FileMode.Open))) {
                    ReadDrsHeader(drs, b);
                    var totalNumFiles = ReadDrsTableInfo(drs, b);
                    ReadDrsFileInfo(drs, b, totalNumFiles);
                    ReadDrsFileContents(drs, b);
                }
            }
            catch {
                // Failed
                drs = null;
            }

            return(drs);
        }