private void UPSOpenSimpleForm_Shown(object sender, EventArgs e) { using (InputFormRef.AutoPleaseWait pleaseWait = new InputFormRef.AutoPleaseWait(this)) { String dir = Path.GetDirectoryName(this.UPSFilename); String filename = Path.GetFileName(this.UPSFilename); pleaseWait.DoEvents(R._("{0}に適合する元ファイルを自動検索中・・・", filename)); uint srcCRC32 = UPSUtil.GetUPSSrcCRC32(this.UPSFilename); string orignal_romfile = MainFormUtil.FindOrignalROMByCRC32(dir, srcCRC32); this.OrignalFilename.Text = orignal_romfile; } }
private void MakeUPSPatchButton_Click(object sender, EventArgs e) { if (InputFormRef.IsPleaseWaitDialog(this)) {//2重割り込み禁止 return; } string errorMessage = MainFormUtil.CheckOrignalROM(OrignalFilename.Text); if (errorMessage != "") { string error = R._("無改造ROMを指定してください。") + "\r\n" + errorMessage; OrignalFilename.ErrorMessage = error; R.ShowStopError(error); return; } OrignalFilename.ErrorMessage = ""; string title = R._("作成するUPSファイル名を選択してください"); string filter = R._("UPS|*.ups|All files|*"); SaveFileDialog save = new SaveFileDialog(); save.Title = title; save.Filter = filter; save.AddExtension = true; Program.LastSelectedFilename.Load(this, "", save, MakeUPSFilename()); DialogResult dr = save.ShowDialog(); if (dr != DialogResult.OK) { return; } if (save.FileNames.Length <= 0 || !U.CanWriteFileRetry(save.FileNames[0])) { return; } Program.LastSelectedFilename.Save(this, "", save); using (InputFormRef.AutoPleaseWait pleaseWait = new InputFormRef.AutoPleaseWait(this)) { UPSUtil.MakeUPS(OrignalFilename.Text, save.FileName); } //エクスプローラで選択しよう U.SelectFileByExplorer(save.FileName); }
public static int CommandLineMakeUPS() { U.echo("CommandLineMakeUPS"); ToolUPSPatchSimpleForm f = (ToolUPSPatchSimpleForm)InputFormRef.JumpFormLow <ToolUPSPatchSimpleForm>(); f.OnLoad(new EventArgs()); string fromrom = U.at(Program.ArgsDic, "--fromrom"); if (fromrom == "") { fromrom = U.at(Program.ArgsDic, "--target"); } if (fromrom != "") { f.OrignalFilename.Text = fromrom; } string errorMessage = MainFormUtil.CheckOrignalROM(f.OrignalFilename.Text); if (errorMessage != "") { string error = R._("無改造ROMを指定してください。") + "\r\n" + errorMessage; f.OrignalFilename.ErrorMessage = error; R.ShowStopError(error); return(-2); } string makeups = U.at(Program.ArgsDic, "--makeups"); if (makeups == "") { U.echo("保存するファイル名を選択してください"); return(-2); } using (InputFormRef.AutoPleaseWait pleaseWait = new InputFormRef.AutoPleaseWait(f)) { UPSUtil.MakeUPS(f.OrignalFilename.Text, makeups); } //エクスプローラで選択しよう U.SelectFileByExplorer(makeups); return(0); }
private void WorkSupport_SelectUPSForm_Shown(object sender, EventArgs e) { using (InputFormRef.AutoPleaseWait pleaseWait = new InputFormRef.AutoPleaseWait(this)) { String dir = Path.GetDirectoryName(this.UPSFilename); String filename = Path.GetFileName(this.UPSFilename); pleaseWait.DoEvents(R._("{0}に適合する元ファイルを自動検索中・・・", filename)); uint srcCRC32 = UPSUtil.GetUPSSrcCRC32(this.UPSFilename); string orignal_romfile = MainFormUtil.FindOrignalROMByCRC32(dir, srcCRC32); this.OrignalFilename.Text = orignal_romfile; } if (File.Exists(this.OrignalFilename.Text)) { ApplyUPSPatchButton.PerformClick(); } }
bool MakeUPS(string tempdir, byte[] s, string targetFilename) { string filename_only = Path.GetFileName(targetFilename); if (filename_only.IndexOf(".backup.") <= -1) { return(false); } InputFormRef.DoEvents(this, "=>" + Path.GetFileName(targetFilename)); string orignalFilename = OrignalFilename.Text; byte[] d = MainFormUtil.OpenROMToByte(targetFilename, orignalFilename); string ups = Path.Combine(tempdir, Path.GetFileNameWithoutExtension(targetFilename) + ".ups"); UPSUtil.MakeUPS(s, d, ups); U.CopyTimeStamp(targetFilename, ups); //タイムスタンプを元のファイルに合わせる. return(true); }
//現在のROMのUPSデータの回収 void CollectUPSsCurrentROM(string tempdir, byte[] s) { //現在のROMデータを保存する. { string file = Path.GetFileNameWithoutExtension(Program.ROM.Filename); string ups = Path.Combine(tempdir, file + ".ups"); UPSUtil.MakeUPS(s, Program.ROM.Data, ups); } //保存していないデータが存在する場合 変更する前のデータをバックアップとして回収する if (Program.ROM.Modified && !Program.ROM.IsVirtualROM) { byte[] d = MainFormUtil.OpenROMToByte(Program.ROM.Filename); DateTime date = File.GetLastWriteTime(Program.ROM.Filename); string file = Path.GetFileNameWithoutExtension(Program.ROM.Filename); string backup = "backup." + date.ToString("yyyyMMddHHmmss"); string ups = Path.Combine(tempdir, file + "." + backup + ".GBA.ups"); UPSUtil.MakeUPS(s, d, ups); U.CopyTimeStamp(Program.ROM.Filename, ups); //タイムスタンプを元のファイルに合わせる. } }
bool DownloadAndExtract(string download_url, InputFormRef.AutoPleaseWait pleaseWait) { string romdir = Path.GetDirectoryName(Program.ROM.Filename); string update7z = Path.GetTempFileName(); //ダウンロード try { U.DownloadFile(update7z, download_url, pleaseWait); } catch (Exception ee) { BrokenDownload(R.ExceptionToString(ee)); return(false); } if (!File.Exists(update7z)) { BrokenDownload(R._("ダウンロードしたはずのファイルがありません。")); return(false); } if (U.GetFileSize(update7z) <= 256) { BrokenDownload(R._("ダウンロードしたファイルが小さすぎます。")); File.Delete(update7z); return(false); } pleaseWait.DoEvents("Extract..."); if (UPSUtil.IsUPSFile(update7z)) { string upsName = Path.Combine(romdir, RecomendUPSName(download_url)); File.Copy(update7z, upsName, true); } else { //解凍 try { using (U.MakeTempDirectory t = new U.MakeTempDirectory()) { string r = ArchSevenZip.Extract(update7z, t.Dir); if (r != "") { BrokenDownload(R._("ダウンロードしたファイルを解凍できませんでした。") + "\r\n" + r); return(false); } U.CopyDirectory1Trim(t.Dir, romdir); } } catch (Exception ee) { BrokenDownload(R.ExceptionToString(ee)); File.Delete(update7z); return(false); } } File.Delete(update7z); pleaseWait.DoEvents("Select Vanilla ROM"); string[] ups_files = U.Directory_GetFiles_Safe(romdir, "*.ups", SearchOption.AllDirectories); if (ups_files.Length <= 0) { BrokenDownload(R._("UPSファイルが見つかりませんでした")); return(false); } ToolWorkSupport_SelectUPSForm f = (ToolWorkSupport_SelectUPSForm)InputFormRef.JumpFormLow <ToolWorkSupport_SelectUPSForm>(); f.OpenUPS(ups_files[0]); if (f.ShowDialog() != System.Windows.Forms.DialogResult.OK) { return(false); } pleaseWait.DoEvents("UPS"); string orignalROMFilename = f.GetOrignalFilename(); if (orignalROMFilename == "") { return(false); } for (int i = 0; i < ups_files.Length; i++) { ROM rom = new ROM(); string version; bool rr = rom.Load(orignalROMFilename, out version); if (!rr) { R.ShowStopError("未対応のROMです。\r\ngame version={0}", version); return(false); } rr = UPSUtil.ApplyUPS(rom, ups_files[i]); if (!rr) { R.ShowStopError("UPSパッチを適応できませんでした" + "\r\n" + ups_files[i]); } string savegba = U.ChangeExtFilename(ups_files[i], ".gba"); rom.Save(savegba, true); } pleaseWait.DoEvents("ReOpen..."); MainFormUtil.ForceReopen(); return(true); }
private void ApplyUPSPatchButton_Click(object sender, EventArgs e) { if (InputFormRef.IsPleaseWaitDialog(this)) {//2重割り込み禁止 return; } string errorMessage = MainFormUtil.CheckOrignalROM(OrignalFilename.Text); if (errorMessage != "") { R.ShowStopError("無改造ROMを指定してください。" + "\r\n" + errorMessage); OrignalFilename.ErrorMessage = R._("無改造ROMを指定してください。" + "\r\n" + errorMessage); return; } OrignalFilename.ErrorMessage = ""; ROM rom = new ROM(); string version; bool r = rom.Load(OrignalFilename.Text, out version); if (!r) { R.ShowStopError("未対応のROMです。\r\ngame version={0}", version); return; } using (InputFormRef.AutoPleaseWait pleaseWait = new InputFormRef.AutoPleaseWait(this)) { r = UPSUtil.ApplyUPS(rom, this.UPSFilename); if (!r) { R.ShowStopError("UPSパッチを適応できませんでした"); return; } } this.DialogResult = System.Windows.Forms.DialogResult.OK; this.Close(); if (this.UseReOpen) {//メインフォームを開きなおさないといけない場合 MainFormUtil.ReOpenMainForm(); } if (this.IsSaveFileCheckBox.Checked) { string newFilename = U.ChangeExtFilename(this.UPSFilename, ".gba"); rom.Save(newFilename, false); //エクスプローラで選択しよう U.SelectFileByExplorer(newFilename); //保存したROMを開く. Program.LoadROM(newFilename, this.ForceVersion); } else { //保存しない場合、メモリ上の存在になる. Program.LoadVirtualROM(rom, this.UPSFilename); } }