示例#1
0
        private void BuildRomFS()
        {
            this.isWorkerThreadAlive = true;
            ROOT_DIR = TB_Path.Text;
            FileNameTable FNT = new FileNameTable(ROOT_DIR);

            RomfsFile[]           RomFiles = new RomfsFile[FNT.NumFiles];
            LayoutManager.Input[] In       = new LayoutManager.Input[FNT.NumFiles];
            TB_Progress.Invoke((Action)(() => UpdateTB_Progress("Creating Layout...")));
            for (int i = 0; i < FNT.NumFiles; i++)
            {
                In[i]               = new LayoutManager.Input();
                In[i].FilePath      = FNT.NameEntryTable[i].FullName;
                In[i].AlignmentSize = 0x10;
            }
            LayoutManager.Output[] Out = LayoutManager.Create(In);
            for (int i = 0; i < Out.Length; i++)
            {
                RomFiles[i]          = new RomfsFile();
                RomFiles[i].Offset   = Out[i].Offset;
                RomFiles[i].PathName = Out[i].FilePath.Replace(Path.GetFullPath(ROOT_DIR), "").Replace("\\", "/");
                RomFiles[i].FullName = Out[i].FilePath;
                RomFiles[i].Size     = Out[i].Size;
            }
            using (MemoryStream memoryStream = new MemoryStream())
            {
                TB_Progress.Invoke((Action)(() => UpdateTB_Progress("Creating RomFS MetaData...")));
                MetaDataBuilder mdb = new MetaDataBuilder();
                mdb.BuildRomFSHeader(memoryStream, RomFiles, ROOT_DIR);
                MakeRomFSData(RomFiles, memoryStream);
            }
            this.isWorkerThreadAlive = false;
            Invoke((Action)(() =>
            {
                B_Go.Enabled = true;
                B_Open.Enabled = true;
            }
                            ));
        }
示例#2
0
 public static LayoutManager.Output[] Create(LayoutManager.Input[] Input)
 {
     List<LayoutManager.Output> list = new List<LayoutManager.Output>();
     ulong Len = 0;
     foreach (LayoutManager.Input input in Input)
     {
         LayoutManager.Output output = new LayoutManager.Output();
         FileInfo fileInfo = new FileInfo(input.FilePath);
         ulong ofs = Form1.Align(Len, input.AlignmentSize);
         output.FilePath = input.FilePath;
         output.Offset = ofs;
         output.Size = (ulong)fileInfo.Length;
         list.Add(output);
         Len = ofs + (ulong)fileInfo.Length;
     }
     return list.ToArray();
 }