private void btnSave_Click(object sender, EventArgs e) { if (tbxFile.Text == "") { MessageBox.Show("Whoops, browse for a file first!"); } else { int nodeCount = SARC.GetFileNodeCount(tbxFile.Text); uint[] currentPaddings = SARC.GetFileNodePaddings(tbxFile.Text); int[] gridPaddings = new int[nodeCount]; bool dataChanged = false; for (int i = 0; i < nodeCount; i++) { gridPaddings[i] = Convert.ToInt32(dgvTable.Rows[i].Cells[1].Value); if (gridPaddings[i] != currentPaddings[i]) //check if paddings need to be changed { SARC.UpdateFilePadding(tbxFile.Text, i, (gridPaddings[i] - (int)(currentPaddings[i]))); dataChanged = true; } } if (dataChanged) { SARC.UpdateFileSize(tbxFile.Text); MessageBox.Show("Save Complete!" + "\n\n" + tbxFile.Text); } else //if no change occured in the data upon saving { MessageBox.Show("No changes were made!" + "\n" + "Data matches current file"); } for (int i = 0; i < dgvTable.Rows.Count; i++) //reset color { ResetTableColor(dgvTable); } tbxFileSize.Text = System.IO.File.ReadAllBytes(tbxFile.Text).Length.ToString(); } }
private void btnBrowse_Click(object sender, EventArgs e) { OpenFileDialog inFile = new OpenFileDialog(); inFile.Filter = "All Files|*.*"; if (inFile.ShowDialog() == DialogResult.Cancel) { goto toss; } tbxFile.Text = inFile.FileName; btnSave.Enabled = true; dgvTable.Rows.Clear(); dgvTable.Refresh(); verify: byte[] fileCheck = System.IO.File.ReadAllBytes(tbxFile.Text); if (fileCheck[0] == 'Y' && fileCheck[1] == 'a' && fileCheck[2] == 'z' && fileCheck[3] == '0') // if Yaz0 encoded, ask if they want to decode it { DialogResult diagResult = MessageBox.Show("This file is encoded!" + "\n\n" + "Do you want to decode?\nIt will create a seperate file automatically", "Yaz0 Encoded file...", MessageBoxButtons.YesNo); if (diagResult == DialogResult.No) { tbxFile.Text = ""; btnSave.Enabled = false; goto toss; } string outFile = Yaz0.DecodeOutputFileRename(inFile.FileName); if (!Yaz0.Decode(inFile.FileName, outFile)) { MessageBox.Show("Decode error:" + "\n\n" + Yaz0.lerror); tbxFile.Text = ""; btnSave.Enabled = false; goto toss; } tbxFile.Text = outFile; goto verify; } if (("" + ((char)fileCheck[0]) + ((char)fileCheck[1]) + ((char)fileCheck[2]) + ((char)fileCheck[3])) != "SARC") { MessageBox.Show("Not a SARC archive! Missing SARC header at 0x00" + "\n" + "( Your file header is: " + ((char)fileCheck[0]) + ((char)fileCheck[1]) + ((char)fileCheck[2]) + ((char)fileCheck[3]) + " )"); tbxFile.Text = ""; btnSave.Enabled = false; goto toss; } int nodeCount = SARC.GetFileNodeCount(tbxFile.Text); string[] nodeTypes = SARC.GetFileNodeType(tbxFile.Text); uint[] nodeSizes = SARC.GetFileNodeSizes(tbxFile.Text); string[] nodePaths = SARC.GetFileNodePaths(tbxFile.Text); uint[] nodePaddings = SARC.GetFileNodePaddings(tbxFile.Text); for (int i = 0; i < nodeCount; i++) { dgvTable.Rows.Add(); dgvTable.Rows[i].Cells[0].Value = i + 1; dgvTable.Rows[i].Cells[1].Value = nodePaddings[i]; dgvTable.Rows[i].Cells[2].Value = nodeTypes[i]; dgvTable.Rows[i].Cells[3].Value = nodeSizes[i]; dgvTable.Rows[i].Cells[4].Value = nodeSizes[i].ToString("X"); dgvTable.Rows[i].Cells[5].Value = nodePaths[i]; } fileSize = fileCheck.Length; tbxFileSize.Text = fileSize.ToString(); dataOffset = SARC.GetFileDataOffset(tbxFile.Text); tbxDataOffset.Text = "0x" + dataOffset.ToString("X"); toss: inFile.Dispose(); GC.Collect(); }
private void btnOriBrowse_Click(object sender, EventArgs e) { if (rbnOriFile.Checked) { OpenFileDialog oriFile = new OpenFileDialog(); oriFile.Filter = "All Files|*.*"; if (BotwUnpacker.Properties.Settings.Default.RootFolder != "") { oriFile.InitialDirectory = BotwUnpacker.Properties.Settings.Default.RootFolder; } if (oriFile.ShowDialog() == DialogResult.Cancel) { goto toss; } tbxOriFile.Text = oriFile.FileName; dgvOriTable.Rows.Clear(); dgvOriTable.Refresh(); verify: byte[] fileCheck = System.IO.File.ReadAllBytes(tbxOriFile.Text); if (fileCheck[0] == 'Y' && fileCheck[1] == 'a' && fileCheck[2] == 'z' && fileCheck[3] == '0') // if Yaz0 encoded, ask if they want to decode it { DialogResult diagResult = MessageBox.Show("This file is encoded!" + "\n\n" + "Do you want to decode?\nIt will create a seperate file automatically", "Yaz0 Encoded file...", MessageBoxButtons.YesNo); if (diagResult == DialogResult.No) { tbxOriFile.Text = ""; goto toss; } string outFile = Yaz0.DecodeOutputFileRename(oriFile.FileName); if (!Yaz0.Decode(oriFile.FileName, outFile)) { MessageBox.Show("Decode error:" + "\n\n" + Yaz0.lerror); tbxOriFile.Text = ""; goto toss; } tbxOriFile.Text = outFile; goto verify; } if (("" + ((char)fileCheck[0]) + ((char)fileCheck[1]) + ((char)fileCheck[2]) + ((char)fileCheck[3])) != "SARC") { MessageBox.Show("Not a SARC archive! Missing SARC header at 0x00" + "\n" + "( Your file header is: " + ((char)fileCheck[0]) + ((char)fileCheck[1]) + ((char)fileCheck[2]) + ((char)fileCheck[3]) + " )"); tbxOriFile.Text = ""; goto toss; } int nodeCount = SARC.GetFileNodeCount(tbxOriFile.Text); string[] nodeTypes = SARC.GetFileNodeType(tbxOriFile.Text); uint[] nodeSizes = SARC.GetFileNodeSizes(tbxOriFile.Text); string[] nodePaths = SARC.GetFileNodePaths(tbxOriFile.Text); uint[] nodePaddings = SARC.GetFileNodePaddings(tbxOriFile.Text); for (int i = 0; i < nodeCount; i++) { dgvOriTable.Rows.Add(); dgvOriTable.Rows[i].Cells[0].Value = i + 1; dgvOriTable.Rows[i].Cells[1].Value = nodeTypes[i]; dgvOriTable.Rows[i].Cells[2].Value = nodeSizes[i]; dgvOriTable.Rows[i].Cells[3].Value = nodeSizes[i].ToString("X"); dgvOriTable.Rows[i].Cells[4].Value = nodePaths[i]; dgvOriTable.Rows[i].Cells[5].Value = nodePaddings[i]; } toss: oriFile.Dispose(); GC.Collect(); } else if (rbnOriFolder.Checked) { CommonOpenFileDialog oriFolder = new CommonOpenFileDialog(); oriFolder.IsFolderPicker = true; if (BotwUnpacker.Properties.Settings.Default.RootFolder != "") { oriFolder.InitialDirectory = BotwUnpacker.Properties.Settings.Default.RootFolder; } if (oriFolder.ShowDialog() == CommonFileDialogResult.Cancel) { goto toss; } tbxOriFile.Text = oriFolder.FileName; dgvOriTable.Rows.Clear(); dgvCusTable.Refresh(); string[] oriFolderFiles = System.IO.Directory.GetFiles(oriFolder.FileName == "" ? System.Environment.CurrentDirectory : oriFolder.FileName, "*.*", System.IO.SearchOption.AllDirectories); int nodeCount = oriFolderFiles.Length; if (nodeCount > 1000) { MessageBox.Show("Too many files (1000+)!\n\nI doubt you ment to select this folder...\n" + tbxOriFile.Text + "\n\nTry again"); tbxOriFile.Text = ""; goto toss; } uint[] nodeSizes = SARC.GetFolderFileSizes(oriFolder.FileName); string[] nodeTypes = SARC.GetFolderFileTypes(oriFolder.FileName); string[] nodePaths = SARC.GetFolderFilePaths(oriFolder.FileName); for (int i = 0; i < nodeCount; i++) { dgvOriTable.Rows.Add(); dgvOriTable.Rows[i].Cells[0].Value = i + 1; dgvOriTable.Rows[i].Cells[1].Value = nodeTypes[i]; dgvOriTable.Rows[i].Cells[2].Value = nodeSizes[i]; dgvOriTable.Rows[i].Cells[3].Value = nodeSizes[i].ToString("X"); dgvOriTable.Rows[i].Cells[4].Value = nodePaths[i]; } toss: oriFolder.Dispose(); GC.Collect(); } }