Ejemplo n.º 1
0
        public static UInt32 Calculate(String fileName)
        {
            UInt32 checksum = 0xFFFFFFFF;

            // open file
            using (FileStream fs = File.OpenRead(fileName))
            {
                using (BinaryReader br = new BinaryReader(fs))
                {
                    // read version
                    Int32 version = br.ReadInt32();

                    if (version != 29 && version != 30)
                    {
                        throw new ApplicationException(String.Format("Unknown map version {0}, expected 29 or 30.", version));
                    }

                    // read lump headers
                    LumpHeader[] lumpHeaders = new LumpHeader[nLumpHeaders];

                    for (Int32 i = 0; i < nLumpHeaders; i++)
                    {
                        lumpHeaders[i].Offset = br.ReadInt32();
                        lumpHeaders[i].Length = br.ReadInt32();
                    }

                    // read lumps and calculate checksum
                    for (Int32 i = 1; i < nLumpHeaders; i++)
                    {
                        fs.Seek(lumpHeaders[i].Offset, SeekOrigin.Begin);

                        Int32 length = lumpHeaders[i].Length;

                        while (length > 0)
                        {
                            Byte[] buffer = null;

                            if (length >= readBufferSize)
                            {
                                buffer = br.ReadBytes(readBufferSize);
                            }
                            else
                            {
                                buffer = br.ReadBytes(length);
                            }

                            length -= buffer.Length;

                            ProcessBuffer(buffer, ref checksum);
                        }
                    }
                }
            }

            return(checksum);
        }
Ejemplo n.º 2
0
        public static UInt32 Calculate(String fileName)
        {
            UInt32 checksum = 0xFFFFFFFF;

            // open file
            using (FileStream fs = File.OpenRead(fileName))
            {
                using (BinaryReader br = new BinaryReader(fs))
                {
                    // read version
                    Int32 version = br.ReadInt32();

                    if (version != 29 && version != 30)
                    {
                        throw new ApplicationException(String.Format("Unknown map version {0}, expected 29 or 30.", version));
                    }

                    // read lump headers
                    LumpHeader[] lumpHeaders = new LumpHeader[nLumpHeaders];

                    for (Int32 i = 0; i < nLumpHeaders; i++)
                    {
                        lumpHeaders[i].Offset = br.ReadInt32();
                        lumpHeaders[i].Length = br.ReadInt32();
                    }

                    // read lumps and calculate checksum
                    for (Int32 i = 1; i < nLumpHeaders; i++)
                    {
                        fs.Seek(lumpHeaders[i].Offset, SeekOrigin.Begin);

                        Int32 length = lumpHeaders[i].Length;

                        while (length > 0)
                        {
                            Byte[] buffer = null;

                            if (length >= readBufferSize)
                            {
                                buffer = br.ReadBytes(readBufferSize);
                            }
                            else
                            {
                                buffer = br.ReadBytes(length);
                            }

                            length -= buffer.Length;

                            ProcessBuffer(buffer, ref checksum);
                        }
                    }
                }
            }

            return checksum;
        }