internal static void BuildRomFS(string infile, string outfile) { OutFile = outfile; RootDir = infile; if (File.Exists(TempFile)) { File.Delete(TempFile); } FileNameTable fnt = new FileNameTable(RootDir); RomfsFile[] romFiles = new RomfsFile[fnt.NumFiles]; LayoutManager.Input[] In = new LayoutManager.Input[fnt.NumFiles]; for (int i = 0; i < fnt.NumFiles; i++) { In[i] = new LayoutManager.Input { FilePath = fnt.NameEntryTable[i].FullName, AlignmentSize = 0x10 }; } LayoutManager.Output[] Out = LayoutManager.Create(In); for (int i = 0; i < Out.Length; i++) { romFiles[i] = new RomfsFile { Offset = Out[i].Offset, PathName = Out[i].FilePath.Replace(Path.GetFullPath(RootDir), "").Replace("\\", "/"), FullName = Out[i].FilePath, Size = Out[i].Size }; } using (MemoryStream memoryStream = new MemoryStream()) { RomFS.BuildRomFSHeader(memoryStream, romFiles, RootDir); RomFS.MakeRomFSData(romFiles, memoryStream); } }
internal static void BuildRomFS(string outfile, string infile, RichTextBox TB_Progress = null, ProgressBar PB_Show = null) { OutFile = outfile; ROOT_DIR = infile; if (File.Exists(TempFile)) File.Delete(TempFile); FileNameTable FNT = new FileNameTable(ROOT_DIR); RomfsFile[] RomFiles = new RomfsFile[FNT.NumFiles]; LayoutManager.Input[] In = new LayoutManager.Input[FNT.NumFiles]; updateTB(TB_Progress, "Creating Layout..."); for (int i = 0; i < FNT.NumFiles; i++) { In[i] = new LayoutManager.Input { FilePath = FNT.NameEntryTable[i].FullName, AlignmentSize = 0x10 }; } LayoutManager.Output[] Out = LayoutManager.Create(In); for (int i = 0; i < Out.Length; i++) { RomFiles[i] = new RomfsFile { Offset = Out[i].Offset, PathName = Out[i].FilePath.Replace(Path.GetFullPath(ROOT_DIR), "").Replace("\\", "/"), FullName = Out[i].FilePath, Size = Out[i].Size }; } using (MemoryStream memoryStream = new MemoryStream()) { updateTB(TB_Progress, "Creating RomFS MetaData..."); BuildRomFSHeader(memoryStream, RomFiles, ROOT_DIR); MakeRomFSData(RomFiles, memoryStream, TB_Progress, PB_Show); } }
public byte[] ToBytes() { List <byte> b = new List <byte>(); b.AddRange(Header.ToBytes()); b.AddRange(FileNameTable.ToBytes()); b.AddRange(FileContentTable.ToBytes()); return(b.ToArray()); }
public List <string> GetNames(FileNameTable nameTable) { var names = new List <string>(); foreach (var tblEntry in nameTable.entryNameTable) { if (tblEntry is EntryNameTableFileEntry) { names.Add(((EntryNameTableFileEntry)tblEntry).entryName); } } return(names); }
public Header(FileReader reader) { reader.ByteOrder = Syroot.BinaryData.ByteOrder.LittleEndian; reader.ReadSignature(4, "NARC"); ByteOrder = reader.ReadUInt16(); reader.CheckByteOrderMark(ByteOrder); Version = reader.ReadUInt16(); FileSize = reader.ReadUInt32(); HeaderSize = reader.ReadUInt16(); DataBlocks = reader.ReadUInt16(); FATB = new FileAllocationTableBlock(reader); FNTB = new FileNameTable(reader); FIMG = new FileImageBlock(reader); }
static void AddEaslyFiles(string path) { foreach (string FileName in Directory.GetFiles(path, "*.easly")) { FileNameTable.Add(FileName.Replace("\\", "/")); using (FileStream fs = new FileStream(FileName, FileMode.Open, FileAccess.Read)) { Node RootNode = DeserializeAndFix(fs); if (FirstRootNode == null) { FirstRootNode = RootNode; } } } foreach (string Folder in Directory.GetDirectories(path)) { AddEaslyFiles(Folder); } }
private static void AddEaslyFiles(string path) { foreach (string FileName in Directory.GetFiles(path, "*.easly")) { FileNameTable.Add(FileName.Replace("\\", "/")); if (FileName.EndsWith("coverage.easly")) { using (FileStream fs = new FileStream(FileName, FileMode.Open, FileAccess.Read)) { Serializer Serializer = new Serializer(); INode RootNode = Serializer.Deserialize(fs) as INode; CoverageNode = RootNode; } } } foreach (string Folder in Directory.GetDirectories(path)) { AddEaslyFiles(Folder); } }
public byte[] Write() { MemoryStream m = new MemoryStream(); EndianBinaryWriter er = new EndianBinaryWriter(m, Endianness.LittleEndian); er.Write((uint)0); er.Write((uint)0); er.Write((uint)0); er.Write((uint)0); long curpos = er.BaseStream.Position; er.BaseStream.Position = 0; er.Write((uint)curpos); er.BaseStream.Position = curpos; FileNameTable.Write(er); while ((er.BaseStream.Position % 4) != 0) { er.Write((byte)0xFF); } long curpos2 = er.BaseStream.Position; er.BaseStream.Position = 4; er.Write((uint)(curpos2 - curpos)); er.BaseStream.Position = curpos2; while ((er.BaseStream.Position % 0x20) != 0) { er.Write((byte)0); } curpos = er.BaseStream.Position; er.BaseStream.Position = 8; er.Write((uint)curpos); er.BaseStream.Position = curpos; er.BaseStream.Position += FileAllocationTable.Length * 8; curpos2 = er.BaseStream.Position; er.BaseStream.Position = 12; er.Write((uint)(curpos2 - curpos)); er.BaseStream.Position = curpos2; while ((er.BaseStream.Position % 0x20) != 0) { er.Write((byte)0); } for (int i = 0; i < FileData.Length; i++) { while ((er.BaseStream.Position % 4) != 0) { er.Write((byte)0xFF); } FileAllocationTable[i].fileTop = (uint)er.BaseStream.Position; FileAllocationTable[i].fileBottom = (uint)er.BaseStream.Position + (uint)FileData[i].Length; er.Write(FileData[i], 0, FileData[i].Length); } while ((er.BaseStream.Position % 4) != 0) { er.Write((byte)0xFF); } er.BaseStream.Position = curpos; foreach (var v in FileAllocationTable) { v.Write(er); } byte[] result = m.ToArray(); er.Close(); return(result); }
internal static Stream BuildRomFS(string outfile, string infile, string _patchDir) { OutFile = outfile; ROOT_DIR = infile; if (outfile != null) { if (File.Exists(TempFile)) { File.Delete(TempFile); } } FileNameTable FNT = new FileNameTable(ROOT_DIR); RomfsFile[] RomFiles = new RomfsFile[FNT.NumFiles]; LayoutManager.Input[] In = new LayoutManager.Input[FNT.NumFiles]; updateTB("Creating Layout..."); for (int i = 0; i < FNT.NumFiles; i++) { In[i] = new LayoutManager.Input { FilePath = FNT.NameEntryTable[i].FullName, AlignmentSize = 0x10 }; } String[] _relativePaths = new String[FNT.NumFiles]; for (int i = 0; i < _relativePaths.Length; ++i) { _relativePaths[i] = makePathRelative(In[i].FilePath, ROOT_DIR); } if (_patchDir != null) { string[] _altFiles = Directory.GetFiles(_patchDir, "*", SearchOption.AllDirectories); for (int i = 0; i < _altFiles.Length; ++i) { string _stippedStart = makePathRelative(_altFiles[i], _patchDir); int j; for (j = 0; j < In.Length; ++j) { if (_relativePaths[j] == _stippedStart) { In[j].FilePath = _altFiles[i]; break; } } } } LayoutManager.Output[] Out = LayoutManager.Create(In); for (int i = 0; i < Out.Length; i++) { RomFiles[i] = new RomfsFile { Offset = Out[i].Offset, PathName = _relativePaths[i], FullName = FNT.NameEntryTable[i].FullName, realFilePath = In[i].FilePath, Size = Out[i].Size }; } Stream _possibleRetStream; using (MemoryStream memoryStream = new MemoryStream()) { updateTB("Creating RomFS MetaData..."); BuildRomFSHeader(memoryStream, RomFiles, ROOT_DIR); _possibleRetStream = MakeRomFSData(RomFiles, memoryStream, outfile != null ? outfile : null); } if (outfile != null) { return(null); } else { return(_possibleRetStream); } }