private static SubDir_s initActualSubDir(BinaryReader reader, int index, MainDir_s actualMainDir, SubDir_s actualSubDir) { Array.Resize <byte>(ref actualSubDir.Type2, index + 1); actualSubDir.Type2[index] = reader.ReadByte(); actualSubDir.Type = actualSubDir.Type2[index]; actualSubDir.Parent_ID = actualMainDir.FFile_ID; return(actualSubDir); }
private static int createMainDirList(BinaryReader reader, uint offset, Nds.NdsFat_s FAT, int index, List <Common.FileInfo_s> fileInfoList) { MainDir_s actualMainDir = loadActualMainDir(reader); long nextMainDirOffset = reader.BaseStream.Position; actualMainDir = loadActualSubDir(reader, offset, FAT, ref index, fileInfoList, actualMainDir); MainDir.Add(actualMainDir); reader.BaseStream.Position = nextMainDirOffset; return(index); }
private static MainDir_s loadActualMainDir(BinaryReader reader) { MainDir_s actualMainDir = new MainDir_s { Start = reader.ReadUInt32(), FFile_ID = reader.ReadUInt16(), Parent_ID = reader.ReadUInt16() }; return(actualMainDir); }
private static int loadSubFiles(BinaryReader reader, Nds.NdsFat_s FAT, List <Common.FileInfo_s> fileInfoList, ref MainDir_s actualMainDir, ref SubDir_s actualSubDir) { int type; Common.FileInfo_s actualFileInfo = new Common.FileInfo_s(); if (actualSubDir.Files == null) { actualSubDir.Files = new List <Common.FileInfo_s>(); } type = actualSubDir.Type; actualFileInfo.Name = new string(Encoding.GetEncoding("shift_jis").GetChars(reader.ReadBytes(type))); actualFileInfo.ID = actualMainDir.FFile_ID; actualFileInfo.Offset = FAT.getFileStartAt((int)actualFileInfo.ID); actualFileInfo.Size = FAT.getFileEndAt((int)actualFileInfo.ID) - actualFileInfo.Offset; long num5 = reader.BaseStream.Position; reader.BaseStream.Seek((long)actualFileInfo.Offset, SeekOrigin.Begin); actualFileInfo.FileData = new ClosableMemoryStream(); Utils.loadStream(reader, actualFileInfo.Size, actualFileInfo.FileData); reader.BaseStream.Seek((long)actualFileInfo.Offset, SeekOrigin.Begin); FAT.setFileStreamAt((int)actualFileInfo.ID, actualFileInfo.FileData); reader.BaseStream.Seek(num5, SeekOrigin.Begin); actualMainDir.FFile_ID = (ushort)(actualMainDir.FFile_ID + 1); actualSubDir.Files.Add(actualFileInfo); fileInfoList.Add(actualFileInfo); return(type); }
private static void loadSubElements(BinaryReader reader, Nds.NdsFat_s FAT, ref int index, List <Common.FileInfo_s> fileInfoList, ref MainDir_s actualMainDir, ref SubDir_s actualSubDir) { int type; if (actualSubDir.Type < 0x80) { type = loadSubFiles(reader, FAT, fileInfoList, ref actualMainDir, ref actualSubDir); } if (actualSubDir.Type > 0x80) { type = loadSubFolders(reader, ref actualSubDir); } updateTypes(reader, ref index, ref actualSubDir); }
private static MainDir_s loadActualSubDir(BinaryReader reader, uint offset, Nds.NdsFat_s FAT, ref int index, List <Common.FileInfo_s> fileInfoList, MainDir_s actualMainDir) { reader.BaseStream.Position = offset + actualMainDir.Start; var actualSubDir = actualMainDir.SubDir; actualSubDir = initActualSubDir(reader, index, actualMainDir, actualSubDir); while (actualSubDir.Type != 0) { loadSubElements(reader, FAT, ref index, fileInfoList, ref actualMainDir, ref actualSubDir); } actualMainDir.SubDir = actualSubDir; return(actualMainDir); }
public Common.Folder_s ReadFnt(BinaryReader reader, uint size, uint offset, NarcFat_s FAT) { Common.Folder_s folderStruct = new Common.Folder_s(); long position = reader.BaseStream.Position; Fnt_Data = new byte[size]; Fnt_Data = reader.ReadBytes((int)size); reader.BaseStream.Position = offset; int index = 0; SubDir_Off = reader.ReadUInt32(); reader.BaseStream.Position = offset; MainDir = new List <MainDir_s>(); List <Common.FileInfo_s> fileInfoList = new List <Common.FileInfo_s>(); while (reader.BaseStream.Position < (position + SubDir_Off)) { MainDir_s actualDir = new MainDir_s { startOffset = reader.ReadUInt32(), firstFileId = reader.ReadUInt16(), parentId = reader.ReadUInt16() }; long num3 = reader.BaseStream.Position; reader.BaseStream.Position = offset + actualDir.startOffset; Array.Resize <byte>(ref actualDir.SubDir.Type2, index + 1); actualDir.SubDir.Type2[index] = reader.ReadByte(); actualDir.SubDir.Type = actualDir.SubDir.Type2[index]; actualDir.SubDir.Parent_ID = actualDir.firstFileId; while (actualDir.SubDir.Type != 0) { int type; if (actualDir.SubDir.Type < 0x80) { Common.FileInfo_s _s3 = new Common.FileInfo_s(); if (actualDir.SubDir.Files == null) { actualDir.SubDir.Files = new List <Common.FileInfo_s>(); } type = actualDir.SubDir.Type; _s3.Name = new string(Encoding.GetEncoding("shift_jis").GetChars(reader.ReadBytes(type))); pad += _s3.Name.Length; _s3.ID = actualDir.firstFileId; _s3.Offset = FAT.getFileStartAt((int)_s3.ID); _s3.Size = FAT.getFileEndAt((int)_s3.ID) - _s3.Offset; long num5 = reader.BaseStream.Position; reader.BaseStream.Seek((long)_s3.Offset, SeekOrigin.Begin); _s3.FileData = new ClosableMemoryStream(); Utils.loadStream(reader, _s3.Size, _s3.FileData); reader.BaseStream.Seek((long)_s3.Offset, SeekOrigin.Begin); FAT.setFileStreamAt((int)_s3.ID, _s3.FileData); reader.BaseStream.Seek(num5, SeekOrigin.Begin); actualDir.firstFileId = (ushort)(actualDir.firstFileId + 1); actualDir.SubDir.Files.Add(_s3); fileInfoList.Add(_s3); } if (actualDir.SubDir.Type > 0x80) { Common.Folder_s _s4 = new Common.Folder_s(); if (actualDir.SubDir.Folders == null) { actualDir.SubDir.Folders = new List <Common.Folder_s>(); } type = actualDir.SubDir.Type - 0x80; _s4.Name = new string(Encoding.GetEncoding("shift_jis").GetChars(reader.ReadBytes(type))); pad += _s4.Name.Length; _s4.ID = reader.ReadUInt16(); actualDir.SubDir.Folders.Add(_s4); } index++; Array.Resize <byte>(ref actualDir.SubDir.Type2, index + 1); actualDir.SubDir.Type2[index] = reader.ReadByte(); pad++; actualDir.SubDir.Type = actualDir.SubDir.Type2[index]; } MainDir.Add(actualDir); reader.BaseStream.Position = num3; } folderStruct = Order_Folder(MainDir, 0, "root"); folderStruct.ID = 0xf000; return(folderStruct); }