コード例 #1
0
        public UInt64 NGC_ParseDir(byte[] buffer, byte[] fstName, int SessionID, UInt64 bufferOffset, uint ParentID, UInt64 lastOffset, string sPath, bool isWII)
        {
            byte[] dateStamp = { 0, 0, 0, 0, 0, 0, 0 };

            do
            {
                uint   nameOffset = MemoryReader.ReadLongBE(ref buffer, bufferOffset) & 0x00ffffff;
                string Filename   = MemoryReader.GetString(ref fstName, nameOffset);

                if (buffer[bufferOffset] == 0x01)
                {
                    uint LastDir = MemoryReader.ReadLongBE(ref buffer, bufferOffset + 0x08) & 0x00ffffff;
                    ParentID = MemoryReader.ReadLongBE(ref buffer, bufferOffset + 0x04) + 1;
                    m_FST.FST_Folder.Add(new FST.cFolder((byte)SessionID, ParentID, (uint)((bufferOffset / 0x0C) + 1), Filename, 0));
                    bufferOffset = NGC_ParseDir(buffer, fstName, SessionID, bufferOffset + 0x0C, (uint)((bufferOffset / 0x0C) + 1), LastDir * 0x0C, sPath, isWII);
                }
                else
                {
                    UInt64 fileOffset = (UInt64)(MemoryReader.ReadLongBE(ref buffer, bufferOffset + 0x04) * (isWII ? 4 : 1));
                    UInt64 fileSize   = MemoryReader.ReadLongBE(ref buffer, bufferOffset + 0x08);
                    m_FST.FST_File.Add(new FST.cFile((byte)SessionID, ParentID, 0, Filename, sPath, sPath, fileOffset, fileSize, dateStamp, false));
                    bufferOffset += 0x0C;
                }
            } while (bufferOffset < lastOffset);
            return(bufferOffset);
        }
コード例 #2
0
        private void NGC_GetFST(string sPath, bool isWII)
        {
            // Read the first sector to grab disc info & rootDirectory offset & size
            byte[] buffer = m_FileReader.Read(0, 0x800);

            string SessionName = MemoryReader.GetString(ref buffer, 0x20);

            m_FST.FST_Session.Add(new FST.cSession(1, SessionName, 0, sPath));

            uint   fstNGCSize   = MemoryReader.ReadLongBE(ref buffer, 0x42C);
            UInt64 fstNGCOffset = MemoryReader.ReadLongBE(ref buffer, 0x424);

            // Ensure that we read the all FST
            byte[] fstNGC = m_FileReader.Read(fstNGCOffset, fstNGCSize);
            NGC_ParseRoot(fstNGC, 1, sPath, isWII);
        }