Exemple #1
0
        public NARCFile(BinaryReader brrReader)
        {
            m_strMagic = new string(brrReader.ReadChars(4));
            if (!m_strMagic.Contains('N'.ToString()) || !m_strMagic.Contains('A'.ToString()) || (!m_strMagic.Contains('R'.ToString()) || !m_strMagic.Contains('C'.ToString())))
            {
                throw new FormatException();
            }
            m_shBom = brrReader.ReadInt16();
            switch (m_shBom)
            {
            case -4097:
                if (m_strMagic != "CNAR")
                {
                    throw new FormatException();
                }
                break;

            case -257:
                if (m_strMagic != "RCNA")
                {
                    throw new FormatException();
                }
                break;

            case -17:
                if (m_strMagic != "ARCN")
                {
                    throw new FormatException();
                }
                break;

            case -2:
                if (m_strMagic != "NARC")
                {
                    throw new FormatException();
                }
                break;

            default:
                throw new FormatException();
            }
            m_shUnknown1 = brrReader.ReadInt16();
            if ((long)brrReader.ReadInt32() != brrReader.BaseStream.Length)
            {
                throw new FormatException();
            }
            m_shUnknown2    = brrReader.ReadInt16();
            m_shFramesCount = brrReader.ReadInt16();
            if (m_shFramesCount != (short)3)
            {
                throw new FormatException();
            }
            m_fatfFATB  = (FATBFrame)NARCFileFrame.ReadFrom(brrReader, (FATBFrame)null);
            m_fntfFNTB  = (FNTBFrame)NARCFileFrame.ReadFrom(brrReader, (FATBFrame)null);
            m_fimgfFIMG = (FIMGFrame)NARCFileFrame.ReadFrom(brrReader, m_fatfFATB);
            if (brrReader.BaseStream.Position != brrReader.BaseStream.Length)
            {
                throw new FormatException();
            }
        }
        public static NARCFileFrame ReadFrom(BinaryReader brrReader, FATBFrame fatfFATB = null)
        {
            string str = Global.ReplaceOrder(new string(brrReader.ReadChars(4)));

            foreach (char ch in str)
            {
                if (ch < 'A' || ch > 'Z')
                {
                    throw new FormatException();
                }
            }
            int num = brrReader.ReadInt32() - 4 - 4;

            if (num < 0)
            {
                throw new FormatException();
            }
            return((NARCFileFrame)Activator.CreateInstance(Type.GetType("NARCFileReadingDLL." + str + "Frame"), brrReader, num, fatfFATB));
        }
Exemple #3
0
        public FIMGFrame(BinaryReader brrReader, int nSize, params object[] args)
        {
            FATBFrame fatbFrame = (FATBFrame)args[0];

            if (nSize < 0 || nSize > 0 && fatbFrame.FilesCount == 0)
            {
                throw new FormatException();
            }
            m_lstfimgeEntries = new List <FIMGFrame.FileImageEntryBase>(fatbFrame.FilesCount);
            int position = (int)brrReader.BaseStream.Position;
            int num      = 0;

            foreach (FATBFrame.FileAllocationTableEntry entry in fatbFrame.Entries)
            {
                if ((long)entry.Start != brrReader.BaseStream.Position - (long)position)
                {
                    throw new FormatException();
                }
                FIMGFrame.FileImageEntryBase fileImageEntryBase = (FIMGFrame.FileImageEntryBase)null;
                foreach (byte readByte in brrReader.ReadBytes(4))
                {
                    if (readByte < (byte)65 || readByte > (byte)90)
                    {
                        brrReader.BaseStream.Position           -= 4L;
                        m_lstfimgeEntries.Add(fileImageEntryBase = SimpleFileImageEntry.ReadFrom(brrReader, entry.End - entry.Start, ref nSize));
                        break;
                    }
                }
                if (fileImageEntryBase == null)
                {
                    brrReader.ReadInt32();
                    bool flag = (long)brrReader.ReadInt32() > brrReader.BaseStream.Length - brrReader.BaseStream.Position + 12L;
                    brrReader.BaseStream.Position -= 12L;
                    try
                    {
                        if (flag)
                        {
                            m_lstfimgeEntries.Add(fileImageEntryBase = SimpleFileImageEntry.ReadFrom(brrReader, entry.End - entry.Start, ref nSize));
                        }
                        else
                        {
                            m_lstfimgeEntries.Add(fileImageEntryBase = (FIMGFrame.FileImageEntryBase)NitroFileBase.ReadFrom(brrReader, entry.End - entry.Start, ref nSize));
                        }
                    }
                    catch
                    {
                    }
                    ++num;
                }
                fileImageEntryBase.Changed += new FIMGFrame.FileImageEntryBase.FileChanged(entry.FileChanged);
                while ((brrReader.BaseStream.Position - (long)position) % 4L != 0L)
                {
                    if (brrReader.ReadByte() != byte.MaxValue)
                    {
                        throw new FormatException();
                    }
                    --nSize;
                }
            }
            if (nSize != 0)
            {
                throw new FormatException();
            }
        }