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); }
public void readOverlaysData(BinaryReader reader, uint offset, int size, Nds.NdsFat_s FAT) { reader.BaseStream.Seek((long)offset, SeekOrigin.Begin); for (int i = 0; i < (size / 0x20); i++) { Overlay_s actualOverlay = Overlay[i]; actualOverlay = readOverlayData(reader, FAT, i, actualOverlay); Overlay[i] = actualOverlay; } }
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 Overlay_s readOverlayData(BinaryReader reader, Nds.NdsFat_s FAT, int i, Overlay_s actualOverlay) { actualOverlay.Over = new ClosableMemoryStream(); actualOverlay.Ov_Start = FAT.getFileStartAt((int)actualOverlay.fileID); actualOverlay.Ov_End = FAT.getFileEndAt((int)actualOverlay.fileID); reader.BaseStream.Seek((long)actualOverlay.Ov_Start, SeekOrigin.Begin); Utils.loadStream(reader, actualOverlay.Ov_End - actualOverlay.Ov_Start, actualOverlay.Over); FAT.setFileStreamAt(i, actualOverlay.Over); return(actualOverlay); }
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 static Common.Folder_s readFnt(BinaryReader reader, uint size, uint offset, Nds.NdsFat_s FAT) { loadFntDataBinary(reader, size, offset); loadSubDirOff(reader, offset); MainDir = new List <MainDir_s>(); int index = 0; List <Common.FileInfo_s> fileInfoList = new List <Common.FileInfo_s>(); while (reader.BaseStream.Position < (offset + SubDir_Off)) { index = createMainDirList(reader, offset, FAT, index, fileInfoList); } Common.Folder_s root = makeRoot(); return(root); }