Example #1
0
        bool TryBatchImageHex(ref string line)
        {
            System.Text.RegularExpressions.Match match =
                RegexCache.Match(line, @"[A-Za-z0-9_]+=0x[A-Za-z0-9]+//0x([A-Za-z0-9]+)");
            if (match.Groups.Count < 1)
            {
                return(false);
            }

            bool found = false;

            for (int n = 1; n < match.Groups.Count; n++)
            {
                string v    = match.Groups[n].Value;
                uint   addr = U.atoh(v);
                if (addr < 0x100)
                {
                    continue;
                }
                this.Address.Text = U.ToHexString(addr);
                AutoSearch();

                bool isNearMatch;
                if (!IsDataFound(out isNearMatch))
                {//見つからなかった
                    continue;
                }
                found = true;
                string newV = v + "(0x" + OtherROMAddressWithLDRRef.Text + "//0x" + OtherROMAddressWithLDR.Text + ",0x" + OtherROMRefPointer2.Text + "//0x" + OtherROMAddress2.Text + ")";
                line = line.Replace(v, newV);
            }
            return(found);
        }
 public static void TEST_DateParseTest()
 {
     {
         string a     = "Expires: Wed, 27 Jan 2021 04:03:09 GMT\r\nLast-Modified: Mon, 27 Jan 2020 07:06:32 GMT\r\nVary: Accept-Encoding";
         string regex = "Last-Modified: (.+?)\r\n";
         Match  m     = RegexCache.Match(a, regex);
         string r     = m.Groups[1].ToString();
         Debug.Assert(r == "Mon, 27 Jan 2020 07:06:32 GMT");
     }
 }
        //配列の値があったら、添え字を返す.
        static uint ParseArrayIndex(string str)
        {
            Match deep = RegexCache.Match(str, @"\[(\d+)\]");

            if (deep.Groups.Count >= 2)
            {
                string m = deep.Groups[1].ToString();
                return(U.atoi(m));
            }
            return(0);
        }
Example #4
0
        string DownloadProgram_Grep(string url, string dir, string findEXE, string pattern)
        {
            string html  = U.HttpGet(url);
            Match  match = RegexCache.Match(html, pattern);

            if (match.Groups.Count <= 1)
            {
                return(R.Error("ダウンロード先が見つかりませんでした。\r\nURL:{0}\r\nPATH:{1}\r\nfindEXE:{2}\r\npattern:{3}", url, dir, findEXE, pattern));
            }
            string binary_url = match.Groups[1].Value;

            binary_url = U.MakeFullURLPath(url, binary_url);

            return(DownloadProgram_Direct(binary_url, dir, findEXE));
        }
        void RunDownloadAndExtract(InputFormRef.AutoPleaseWait pleaseWait)
        {
            string url = U.at(this.Lines, "UPDATE_URL");

            if (url == "")
            {
                R.ShowStopError("UPDATE_URLの項目がありません");
                return;
            }

            string regex = U.at(this.Lines, "UPDATE_REGEX");

            if (regex == "")
            {
                R.ShowStopError("UPDATE_REGEXの項目がありません");
                return;
            }

            if (regex == "@DIRECT_URL")
            {//直リン
            }
            else
            {
                string html = U.HttpGet(url);
                Match  m    = RegexCache.Match(html, regex);
                if (m.Groups.Count < 2)
                {
                    R.ShowStopError("UPDATE_REGEXでマッチしたデータがありませんでした。\r\n{0}", html);
                    return;
                }
                url = m.Groups[1].ToString();
            }

            Program.UpdateWatcher.Stop();
            //少し時間がかかるので、しばらくお待ちください表示.
            bool r = DownloadAndExtract(url, pleaseWait);

            if (!r)
            {
                Program.UpdateWatcher.Resume();
                return;
            }

            R.ShowOK("アップデートが完了しました。\r\nROMを再読み込みします。\r\n");
            MainFormUtil.Open(this, Program.ROM.Filename, true, "");

            Program.UpdateWatcher.Resume();
        }
Example #6
0
        //1行の翻訳
        public string Trans(string src, string from, string to, long time = 0)
        {
            List <string> list = new List <string>();

            char term_char = '。';
            int  term      = src.IndexOf(term_char);

            if (term < 0)
            {
                term_char = '.';
            }

            string[] lines = src.Split(term_char);
            for (int i = 0; i < lines.Length; i++)
            {
                if (lines[i] == "")
                {
                    continue;
                }

                string a;
                if (term_char == ' ')
                {
                    a = lines[i];
                }
                else
                {
                    a = lines[i] + term_char;
                }

                //URLが壊されないように変換する
                System.Text.RegularExpressions.Match match = RegexCache.Match(a, @"^s?https?://[-_.!~*'()a-zA-Z0-9;/?:@&=+$,%#]+$");
                if (match.Groups.Count >= 2)
                {
                    a.Replace(match.Groups[1].Value, "AURL");
                }

                string b = TransOne(a, from, to, time);
                if (match.Groups.Count >= 2)
                {//URLをもとに戻す.
                    b.Replace("AURL", match.Groups[1].Value);
                }

                list.Add(b);
            }

            return(string.Join("", list.ToArray()));
        }
        public static void TEST_Parse1()
        {
            string html = File.ReadAllText(Program.GetTestData("test_getuploader.txt"));
            {
                string regex = "fe8_kaitou.*?MB</td><td>(.+?)</td><td>";

                Match  m = RegexCache.Match(html, regex);
                string r = m.Groups[1].ToString();
                Debug.Assert(r == "20/01/29 13:22");
            }
            {
                string regex = "<td><a href=\"(.+?)\" title=\"fe8_kaitou.+?\">";

                Match  m = RegexCache.Match(html, regex);
                string r = m.Groups[1].ToString();
                Debug.Assert(r == "https://ux.getuploader.com/FE4/download/1310");
            }
        }
Example #8
0
        //ファイル名にある _swap_[0-9] にある番号で、パレットを切り替える.
        Bitmap PaletteSwapper(Bitmap bitmap)
        {
            string lastFilename = Program.LastSelectedFilename.Load(this, "");

            Match m = RegexCache.Match(lastFilename, "_swap_([0-9])");

            if (m.Groups.Count < 2)
            {
                return(bitmap);
            }
            int palIndex = (int)U.atoh(m.Groups[1].Value);

            if (palIndex <= 0 || palIndex >= 10)
            {
                return(bitmap);
            }

            Bitmap newbitmap = ImageUtil.SwapPalette(bitmap, (int)palIndex);

            return(newbitmap);
        }
Example #9
0
        public static void TEST_DateParseTest()
        {
            {
                string a     = "Expires: Wed, 27 Jan 2021 04:03:09 GMT\r\nLast-Modified: Mon, 27 Jan 2020 07:06:32 GMT\r\nVary: Accept-Encoding";
                string regex = "Last-Modified: (.+?)\r\n";
                Match  m     = RegexCache.Match(a, regex);
                string r     = m.Groups[1].ToString();
                Debug.Assert(r == "Mon, 27 Jan 2020 07:06:32 GMT");

                DateTime d = DateTime.Parse(r);
                r = d.ToString();
                Debug.Assert(r == "2020/01/27 16:06:32");
            }
            {
                string r = "20/01/27 20:04";

                DateTime d = DateTime.Parse(r, new CultureInfo("ja-JP", false));
                r = d.ToString();
                Debug.Assert(r == "2020/01/27 20:04:00");
            }
        }
        public static UPDATE_RESULT CheckUpdateLow(Dictionary <string, string> lines, string romfilename, bool isSlientMode)
        {
            string url = U.at(lines, "CHECK_URL");

            if (url == "")
            {
                if (!isSlientMode)
                {
                    R.ShowStopError("CHECK_URLの項目がありません");
                }
                return(UPDATE_RESULT.ERROR);
            }

            string regex = U.at(lines, "CHECK_REGEX");

            if (regex == "")
            {
                if (!isSlientMode)
                {
                    R.ShowStopError("CHECK_REGEXの項目がありません");
                }
                return(UPDATE_RESULT.ERROR);
            }

            string dateString;
            string match;

            if (regex == "@DIRECT_URL")
            {
                match = url;
            }
            else
            {
                string html = U.HttpGet(url);
                Match  m    = RegexCache.Match(html, regex);
                if (m.Groups.Count < 2)
                {
                    if (!isSlientMode)
                    {
                        R.ShowStopError("CHECK_REGEXでマッチしたデータがありませんでした。\r\n{0}", html);
                    }
                    return(UPDATE_RESULT.ERROR);
                }
                match = m.Groups[1].ToString();
            }

            if (U.isURL(match))
            {//直URL
                WebResponse rsp = U.HttpHead(url);
                dateString = rsp.Headers["LastModified"];
                if (dateString == null)
                {
                    if (!isSlientMode)
                    {
                        R.ShowStopError("Last-Modifiedを検知できませんでした。\r\n仕方がないので、常に最新版に更新します。");
                    }
                    dateString = DateTime.Now.ToString();
                }
            }
            else
            {
                dateString = match;
            }

            DateTime datetime;

            try
            {
                if (url.IndexOf("getuploader.com") >= 0)
                {
                    datetime = DateTime.Parse(dateString, new CultureInfo("ja-JP", false));
                }
                else
                {
                    if (U.TryParseUnitTime(dateString, out datetime))
                    {//unittmie
                    }
                    else
                    {//通常の日付
                        datetime = DateTime.Parse(dateString);
                    }
                }
            }
            catch (Exception)
            {
                if (!isSlientMode)
                {
                    R.ShowStopError("日付({0})をパースできませんでした。\r\n仕方がないので、常に最新版に更新します。", dateString);
                }
                datetime = DateTime.Now;
            }

            DateTime romDatetime = GetROMDateTime(romfilename);

            Log.Notify("romDatetime:{0} vs datetime:{1}", romDatetime.ToString(), datetime.ToString());
            if (romDatetime < datetime)
            {//更新する必要あり!
                return(UPDATE_RESULT.UPDATEABLE);
            }
            //更新する必要なし
            return(UPDATE_RESULT.LATEST);
        }
Example #11
0
        static string CheckUpdateURLByGetUploader(out string out_url, out string out_version)
        {
            out_url     = "";
            out_version = "";

            string versionString = U.getVersion();
            double version       = U.atof(versionString);

            string url = "https://ux.getuploader.com/FE4/";
            string contents;

            try
            {
                contents = U.HttpGet(url);
            }
            catch (Exception e)
            {
#if DEBUG
                R.Error("Webサイトにアクセスできません。 URL:{0} Message:{1}", url, e.ToString());
                throw;
#else
                return(R.Error("Webサイトにアクセスできません。 URL:{0} Message:{1}", url, e.ToString()));
#endif
            }

            System.Text.RegularExpressions.Match match = RegexCache.Match(contents
                                                                          , "<td><a href=\"(https://ux.getuploader.com/FE4/download/[0-9]+)\" title=\"FEBuilder(?:GBA)?_[0-9.]+.7z\">FEBuilder(?:GBA)?_([0-9.]+).7z</a></td><td></td><td>FEBuilder(?:GBA)?_[0-9.]+.7z</td><td>(2|3|4)\\.[0-9] MB</td>"
                                                                          );
            Log.Error(U.var_dump(match.Groups));
            if (match.Groups.Count < 2)
            {
                return(R._("サイトの結果が期待外でした。\r\n{0}", url) + "\r\n\r\n"
                       + "href can not parse" + "\r\n"
                       + "contents:\r\n" + contents + "\r\n"
                       + "match.Groups:\r\n" + U.var_dump(match.Groups));
            }

            out_version = match.Groups[2].Value;
            double net_version = U.atof(match.Groups[2].Value);
            if (version >= net_version)
            {
                if (net_version == 0)
                {
                    return(R._("サイトの結果が期待外でした。\r\n{0}", url) + "\r\n\r\n"
                           + "version can not parse" + "\r\n"
                           + "contents:\r\n" + contents + "\r\n"
                           + "match.Groups:\r\n" + U.var_dump(match.Groups));
                }
                return(R._("現在のバージョンが最新です。version:{0}", version));
            }

            double yyyymmdd = U.atof(DateTime.Now.AddDays(3).ToString("yyyyMMdd.HH"));
            if (net_version > yyyymmdd)
            {//いたずらで変な日付のものが挙げられた可能性あり
                return(R._("サイトの結果が期待外でした。\r\n{0}", url) + "\r\n\r\n"
                       + "date can not parse" + "\r\n"
                       + "contents:\r\n" + contents + "\r\n"
                       + "match.Groups:\r\n" + U.var_dump(match.Groups));
            }

            out_url = match.Groups[1].Value;
            return("");
        }
Example #12
0
        static string CheckUpdateURLByGitHub(out string out_url, out string out_version)
        {
            out_url     = "";
            out_version = "";

            string versionString = U.getVersion();
            double version       = U.atof(versionString);

            string url = "https://api.github.com/repos/FEBuilderGBA/FEBuilderGBA/releases/latest";
            string contents;

            try
            {
                contents = U.HttpGet(url);
            }
            catch (Exception e)
            {
#if DEBUG
                R.Error("Webサイトにアクセスできません。 URL:{0} Message:{1}", url, e.ToString());
                throw;
#else
                return(R.Error("Webサイトにアクセスできません。 URL:{0} Message:{1}", url, e.ToString()));
#endif
            }


            string downloadurl;
            {
                System.Text.RegularExpressions.Match match = RegexCache.Match(contents
                                                                              , "\"browser_download_url\": \"(.+)\""
                                                                              );
                if (match.Groups.Count < 2)
                {
                    return(R._("サイトの結果が期待外でした。\r\n{0}", url) + "\r\n\r\n"
                           + "browser_download_url not found" + "\r\n"
                           + "contents:\r\n" + contents + "\r\n"
                           + "match.Groups:\r\n" + U.var_dump(match.Groups));
                }
                downloadurl = match.Groups[1].Value;
            }

            {
                System.Text.RegularExpressions.Match match = RegexCache.Match(contents
                                                                              , "download/ver_([0-9.]+)/"
                                                                              );
                if (match.Groups.Count < 2)
                {
                    return(R._("サイトの結果が期待外でした。\r\n{0}", url) + "\r\n\r\n"
                           + "download/ver_ not found" + "\r\n"
                           + "contents:\r\n" + contents + "\r\n"
                           + "match.Groups:\r\n" + U.var_dump(match.Groups));
                }
                out_version = match.Groups[1].Value;

                double net_version = U.atof(out_version);
                if (version >= net_version)
                {
                    if (net_version == 0)
                    {
                        return(R._("サイトの結果が期待外でした。\r\n{0}", url) + "\r\n\r\n"
                               + "version can not parse" + "\r\n"
                               + "contents:\r\n" + contents + "\r\n"
                               + "match.Groups:\r\n" + U.var_dump(match.Groups));
                    }
                    return(R._("現在のバージョンが最新です。version:{0}", version));
                }
            }

            out_url = downloadurl;
            return("");
        }