Пример #1
0
        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);
            }
        }
Пример #2
0
        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);
            }
        }
Пример #3
0
        public byte[] ToBytes()
        {
            List <byte> b = new List <byte>();

            b.AddRange(Header.ToBytes());
            b.AddRange(FileNameTable.ToBytes());
            b.AddRange(FileContentTable.ToBytes());
            return(b.ToArray());
        }
Пример #4
0
        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);
        }
Пример #5
0
            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);
            }
Пример #6
0
        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);
            }
        }
Пример #7
0
        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);
        }
Пример #9
0
        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);
            }
        }
Пример #10
0
        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);
            }
        }