Beispiel #1
0
        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;
            }
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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();
            }
        }
Beispiel #5
0
        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);
        }
Beispiel #6
0
        //現在の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);
        }
Beispiel #8
0
        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);
            }
        }