mirror of
https://github.com/kwsch/pk3DS.git
synced 2026-10-02 13:57:14 -05:00
Add RomFS build event method
This commit is contained in:
@@ -587,5 +587,19 @@ private void rebuildExeFS(object sender, EventArgs e)
|
||||
}
|
||||
}
|
||||
}
|
||||
private void rebuildRomFS(object sender, EventArgs e)
|
||||
{
|
||||
if (RomFS != null)
|
||||
{
|
||||
if (Util.Prompt(MessageBoxButtons.YesNo, "Rebuild RomFS?") == DialogResult.Yes)
|
||||
{
|
||||
SaveFileDialog sfd = new SaveFileDialog();
|
||||
sfd.FileName = "romfs.bin";
|
||||
sfd.Filter = "Binary File|*.*";
|
||||
if (sfd.ShowDialog() == DialogResult.OK)
|
||||
{ new Thread(() => { threads++; RomFSTool.BuildRomFS(RomFS, null, pBar1); threads--; }).Start(); }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -9,16 +9,16 @@
|
||||
using System.Windows.Forms;
|
||||
using System.Threading;
|
||||
|
||||
namespace MetaDataBuilder
|
||||
namespace pk3DS
|
||||
{
|
||||
class MetaDataBuilder
|
||||
public partial class RomFSTool
|
||||
{
|
||||
private const int PADDING_ALIGN = 16;
|
||||
private string ROOT_DIR;
|
||||
private string TempFile;
|
||||
private const uint ROMFS_UNUSED_ENTRY = 0xFFFFFFFF;
|
||||
internal static const int PADDING_ALIGN = 16;
|
||||
internal static string ROOT_DIR;
|
||||
internal static string TempFile;
|
||||
internal static const uint ROMFS_UNUSED_ENTRY = 0xFFFFFFFF;
|
||||
|
||||
private void BuildRomFS(string path, RichTextBox TB_Progress = null, ProgressBar PB_Show = null)
|
||||
internal static void BuildRomFS(string path, RichTextBox TB_Progress = null, ProgressBar PB_Show = null)
|
||||
{
|
||||
ROOT_DIR = path;
|
||||
FileNameTable FNT = new FileNameTable(ROOT_DIR);
|
||||
@@ -43,13 +43,12 @@ private void BuildRomFS(string path, RichTextBox TB_Progress = null, ProgressBar
|
||||
using (MemoryStream memoryStream = new MemoryStream())
|
||||
{
|
||||
TB_Progress.Invoke((Action)(() => UpdateTB_Progress("Creating RomFS MetaData...")));
|
||||
MetaDataBuilder mdb = new MetaDataBuilder();
|
||||
mdb.BuildRomFSHeader(memoryStream, RomFiles, ROOT_DIR);
|
||||
BuildRomFSHeader(memoryStream, RomFiles, ROOT_DIR);
|
||||
MakeRomFSData(RomFiles, memoryStream);
|
||||
}
|
||||
}
|
||||
|
||||
public static ulong Align(ulong input, ulong alignsize)
|
||||
internal static ulong Align(ulong input, ulong alignsize)
|
||||
{
|
||||
ulong output = input;
|
||||
if (output % alignsize != 0)
|
||||
@@ -58,8 +57,7 @@ public static ulong Align(ulong input, ulong alignsize)
|
||||
}
|
||||
return output;
|
||||
}
|
||||
|
||||
private void MakeRomFSData(RomfsFile[] RomFiles, MemoryStream metadata, RichTextBox TB_Progress = null, ProgressBar PB_Show = null)
|
||||
internal static void MakeRomFSData(RomfsFile[] RomFiles, MemoryStream metadata, RichTextBox TB_Progress = null, ProgressBar PB_Show = null)
|
||||
{
|
||||
TempFile = Path.GetRandomFileName();
|
||||
TB_Progress.Invoke((Action)(() => UpdateTB_Progress("Computing IVFC Header Data...")));
|
||||
@@ -203,8 +201,7 @@ private void MakeRomFSData(RomfsFile[] RomFiles, MemoryStream metadata, RichText
|
||||
}
|
||||
}));
|
||||
}
|
||||
|
||||
public void WriteBinary(string tempFile, string outFile, RichTextBox TB_Progress = null, ProgressBar PB_Show = null)
|
||||
internal static void WriteBinary(string tempFile, string outFile, RichTextBox TB_Progress = null, ProgressBar PB_Show = null)
|
||||
{
|
||||
using (FileStream fs = new FileStream(outFile, FileMode.Create))
|
||||
{
|
||||
@@ -242,8 +239,7 @@ public void WriteBinary(string tempFile, string outFile, RichTextBox TB_Progress
|
||||
MessageBox.Show("Wrote RomFS to " + outFile + ".");
|
||||
}));
|
||||
}
|
||||
|
||||
public static string ByteArrayToString(byte[] input)
|
||||
internal static string ByteArrayToString(byte[] input)
|
||||
{
|
||||
StringBuilder sb = new StringBuilder();
|
||||
foreach (byte b in input)
|
||||
@@ -253,11 +249,11 @@ public static string ByteArrayToString(byte[] input)
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
public void UpdateTB_Progress(string text, RichTextBox TB_Progress = null)
|
||||
internal static void UpdateTB_Progress(string text, RichTextBox TB_Progress = null)
|
||||
{
|
||||
TB_Progress.Text += text + Environment.NewLine;
|
||||
}
|
||||
public void BuildRomFSHeader(MemoryStream romfs_stream, RomfsFile[] Entries, string DIR)
|
||||
internal static void BuildRomFSHeader(MemoryStream romfs_stream, RomfsFile[] Entries, string DIR)
|
||||
{
|
||||
ROOT_DIR = DIR;
|
||||
|
||||
@@ -271,7 +267,7 @@ public void BuildRomFSHeader(MemoryStream romfs_stream, RomfsFile[] Entries, str
|
||||
|
||||
WriteMetaDataToStream(MetaData, romfs_stream);
|
||||
}
|
||||
private void InitializeMetaData(Romfs_MetaData MetaData)
|
||||
internal static void InitializeMetaData(Romfs_MetaData MetaData)
|
||||
{
|
||||
MetaData.InfoHeader = new Romfs_InfoHeader();
|
||||
MetaData.DirTable = new Romfs_DirTable();
|
||||
@@ -286,7 +282,7 @@ private void InitializeMetaData(Romfs_MetaData MetaData)
|
||||
MetaData.DirUTable = new List<uint>();
|
||||
MetaData.FileUTable = new List<uint>();
|
||||
}
|
||||
private void CalcRomfsSize(Romfs_MetaData MetaData)
|
||||
internal static void CalcRomfsSize(Romfs_MetaData MetaData)
|
||||
{
|
||||
MetaData.DirNum = 1;
|
||||
DirectoryInfo Root_DI = new DirectoryInfo(ROOT_DIR);
|
||||
@@ -339,7 +335,7 @@ private void CalcRomfsSize(Romfs_MetaData MetaData)
|
||||
}
|
||||
MetaData.InfoHeader.DataOffset = MetaDataSize;
|
||||
}
|
||||
private void CalcDirSize(Romfs_MetaData MetaData, DirectoryInfo dir)
|
||||
internal static void CalcDirSize(Romfs_MetaData MetaData, DirectoryInfo dir)
|
||||
{
|
||||
if (MetaData.M_DirTableLen == 0)
|
||||
{
|
||||
@@ -365,7 +361,7 @@ private void CalcDirSize(Romfs_MetaData MetaData, DirectoryInfo dir)
|
||||
MetaData.FileNum += (uint)files.Length;
|
||||
MetaData.DirNum += (uint)SubDirectories.Length;
|
||||
}
|
||||
private void PopulateRomfs(Romfs_MetaData MetaData, RomfsFile[] Entries)
|
||||
internal static void PopulateRomfs(Romfs_MetaData MetaData, RomfsFile[] Entries)
|
||||
{
|
||||
//Recursively Add All Directories to DirectoryTable
|
||||
AddDir(MetaData, new DirectoryInfo(ROOT_DIR), 0, ROMFS_UNUSED_ENTRY);
|
||||
@@ -378,7 +374,7 @@ private void PopulateRomfs(Romfs_MetaData MetaData, RomfsFile[] Entries)
|
||||
|
||||
//Thats it.
|
||||
}
|
||||
private void CalculateWeirdOffsets(Romfs_MetaData MetaData)
|
||||
internal static void CalculateWeirdOffsets(Romfs_MetaData MetaData)
|
||||
{
|
||||
for (int i = 0; i < MetaData.DirTable.DirectoryTable.Count; i++)
|
||||
{
|
||||
@@ -390,7 +386,7 @@ private void CalculateWeirdOffsets(Romfs_MetaData MetaData)
|
||||
}
|
||||
}
|
||||
|
||||
private void AddDirHashKey(Romfs_MetaData MetaData, int index)
|
||||
internal static void AddDirHashKey(Romfs_MetaData MetaData, int index)
|
||||
{
|
||||
uint parent = MetaData.DirTable.DirectoryTable[index].ParentOffset;
|
||||
string Name = MetaData.DirTable.DirectoryTable[index].Name;
|
||||
@@ -418,7 +414,7 @@ private void AddDirHashKey(Romfs_MetaData MetaData, int index)
|
||||
}
|
||||
}
|
||||
}
|
||||
private void AddFileHashKey(Romfs_MetaData MetaData, int index)
|
||||
internal static void AddFileHashKey(Romfs_MetaData MetaData, int index)
|
||||
{
|
||||
uint parent = MetaData.FileTable.FileTable[index].ParentDirOffset;
|
||||
string Name = MetaData.FileTable.FileTable[index].Name;
|
||||
@@ -447,7 +443,7 @@ private void AddFileHashKey(Romfs_MetaData MetaData, int index)
|
||||
}
|
||||
}
|
||||
|
||||
private uint CalcPathHash(uint ParentOffset, byte[] NameArray, int start, int len)
|
||||
internal static uint CalcPathHash(uint ParentOffset, byte[] NameArray, int start, int len)
|
||||
{
|
||||
uint hash = ParentOffset ^ 123456789;
|
||||
for (int i = 0; i < NameArray.Length; i += 2)
|
||||
@@ -458,7 +454,7 @@ private uint CalcPathHash(uint ParentOffset, byte[] NameArray, int start, int le
|
||||
return hash;
|
||||
}
|
||||
|
||||
private void AddDir(Romfs_MetaData MetaData, DirectoryInfo Dir, uint parent, uint sibling)
|
||||
internal static void AddDir(Romfs_MetaData MetaData, DirectoryInfo Dir, uint parent, uint sibling)
|
||||
{
|
||||
uint CurrentDir = MetaData.DirTableLen;
|
||||
Romfs_DirEntry Entry = new Romfs_DirEntry();
|
||||
@@ -490,7 +486,7 @@ private void AddDir(Romfs_MetaData MetaData, DirectoryInfo Dir, uint parent, uin
|
||||
}
|
||||
}
|
||||
}
|
||||
private void AddFiles(Romfs_MetaData MetaData, RomfsFile[] Entries)
|
||||
internal static void AddFiles(Romfs_MetaData MetaData, RomfsFile[] Entries)
|
||||
{
|
||||
string PrevDirPath = "";
|
||||
for (int i = 0; i < Entries.Length; i++)
|
||||
@@ -522,7 +518,7 @@ private void AddFiles(Romfs_MetaData MetaData, RomfsFile[] Entries)
|
||||
}
|
||||
}
|
||||
|
||||
private void WriteMetaDataToStream(Romfs_MetaData MetaData, MemoryStream stream)
|
||||
internal static void WriteMetaDataToStream(Romfs_MetaData MetaData, MemoryStream stream)
|
||||
{
|
||||
//First, InfoHeader.
|
||||
stream.Write(BitConverter.GetBytes(MetaData.InfoHeader.HeaderLength), 0, 4);
|
||||
@@ -579,7 +575,7 @@ private void WriteMetaDataToStream(Romfs_MetaData MetaData, MemoryStream stream)
|
||||
|
||||
//GetRomfs[...]Entry Functions are all O(n)
|
||||
|
||||
private int GetRomfsDirEntry(Romfs_MetaData MetaData, string FullName)
|
||||
internal static int GetRomfsDirEntry(Romfs_MetaData MetaData, string FullName)
|
||||
{
|
||||
for (int i = 0; i < MetaData.DirTable.DirectoryTable.Count; i++)
|
||||
{
|
||||
@@ -590,7 +586,7 @@ private int GetRomfsDirEntry(Romfs_MetaData MetaData, string FullName)
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
private int GetRomfsDirEntry(Romfs_MetaData MetaData, uint Offset)
|
||||
internal static int GetRomfsDirEntry(Romfs_MetaData MetaData, uint Offset)
|
||||
{
|
||||
for (int i = 0; i < MetaData.DirTable.DirectoryTable.Count; i++)
|
||||
{
|
||||
@@ -601,7 +597,7 @@ private int GetRomfsDirEntry(Romfs_MetaData MetaData, uint Offset)
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
private int GetRomfsFileEntry(Romfs_MetaData MetaData, uint Offset)
|
||||
internal static int GetRomfsFileEntry(Romfs_MetaData MetaData, uint Offset)
|
||||
{
|
||||
for (int i = 0; i < MetaData.FileTable.FileTable.Count; i++)
|
||||
{
|
||||
@@ -613,6 +609,7 @@ private int GetRomfsFileEntry(Romfs_MetaData MetaData, uint Offset)
|
||||
return -1;
|
||||
}
|
||||
|
||||
#region Support Class/Struct
|
||||
public class Romfs_MetaData
|
||||
{
|
||||
public Romfs_InfoHeader InfoHeader;
|
||||
@@ -765,5 +762,6 @@ public class Output
|
||||
public ulong Size;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user