Esempio n. 1
0
        private void ReadZDoomAcs(ref BinaryReader reader)
        {
            byte[] nameBytes = new byte[4];

            while (InputStream.Position < InputStream.Length)
            {
                if (reader.ReadInt32() == DirOffset)
                {
                    // End of file.
                    break;
                }

                InputStream.Seek(InputStream.Position - 4, SeekOrigin.Begin);
                reader.Read(nameBytes, 0, 4);
                string name = Encoding.ASCII.GetString(nameBytes);
                int    size = reader.ReadInt32();
                long   pos  = InputStream.Position;

                Console.WriteLine("Chunk " + name + " (" + size + " bytes)");

                if (name == "ARAY")
                {
                    ReadARAY(size, ref reader);
                }
                else if (name == "AINI")
                {
                    ReadAINI(size, ref reader);
                }
                else if (name == "AIMP")
                {
                    ReadAIMP(size, ref reader);
                }
                else if (name == "ASTR")
                {
                    ReadASTR(size, ref reader);
                }
                else if (name == "FUNC")
                {
                    ReadFUNC(size, ref reader);
                }
                else if (name == "FNAM")
                {
                    ReadFNAM(size, ref reader);
                }
                else if (name == "MEXP")
                {
                    ReadMEXP(size, ref reader);
                }
                else if (name == "MINI")
                {
                    ReadMINI(size, ref reader);
                }
                else if (name == "MIMP")
                {
                    ReadMIMP(size, ref reader);
                }
                else if (name == "MSTR")
                {
                    ReadMSTR(size, ref reader);
                }
                else if (name == "SPTR")
                {
                    ReadSPTR(size, ref reader);
                }
                else if (name == "SNAM")
                {
                    ReadSNAM(size, ref reader);
                }
                else if (name == "SFLG")
                {
                    ReadSFLG(size, ref reader);
                }
                else if (name == "STRL")
                {
                    StringTable.AddRange(ReadStringTable(ref reader, false, true));
                }
                else if (name == "STRE")
                {
                    StringTable.AddRange(ReadStringTable(ref reader, true, true));
                }
                else if (name == "LOAD")
                {
                    ReadLOAD(size, ref reader);
                }
                else
                {
                    Program.PrintError("Not implemented.");
                    //throw new NotImplementedException(Format + " chunk " + name + " (" + size + ")");
                }

                InputStream.Seek(pos + size, SeekOrigin.Begin);
            }

            ReadCode(ref reader);
        }