예제 #1
0
 public static void Reset()
 {
     Process = null;
     ConstantData = null;
     GameBaseData = null;
     EMediator = null;
     VEvaluator = null;
     VariableData = null;
     Console = null;
     MainWindow = null;
     LabelDictionary = null;
     IdentifierDictionary = null;
     tempDic.Clear();
 }
예제 #2
0
파일: Process.cs 프로젝트: ZeLye/uEmuera
        public bool Initialize()
        {
            LexicalAnalyzer.UseMacro = false;
            state         = new ProcessState(console);
            originalState = state;
            initialiing   = true;
            try
            {
                ParserMediator.Initialize(console);
                if (ParserMediator.HasWarning)
                {
                    ParserMediator.FlushWarningList();
                    if (MessageBox.Show("コンフィグファイルに異常があります\nEmueraを終了しますか", "コンフィグエラー", MessageBoxButtons.YesNo)
                        == DialogResult.Yes)
                    {
                        console.PrintSystemLine("コンフィグファイルに異常があり、終了が選択されたため処理を終了しました");
                        return(false);
                    }
                }
                Content.AppContents.LoadContents();

                if (Config.UseKeyMacro && !Program.AnalysisMode)
                {
                    if (File.Exists(Program.ExeDir + "macro.txt"))
                    {
                        if (Config.DisplayReport)
                        {
                            console.PrintSystemLine("macro.txt読み込み中・・・");
                        }
                        KeyMacro.LoadMacroFile(Program.ExeDir + "macro.txt");
                    }
                }
                if (Config.UseReplaceFile && !Program.AnalysisMode)
                {
                    if (File.Exists(Program.CsvDir + "_Replace.csv"))
                    {
                        if (Config.DisplayReport)
                        {
                            console.PrintSystemLine("_Replace.csv読み込み中・・・");
                        }
                        ConfigData.Instance.LoadReplaceFile(Program.CsvDir + "_Replace.csv");
                        if (ParserMediator.HasWarning)
                        {
                            ParserMediator.FlushWarningList();
                            if (MessageBox.Show("_Replace.csvに異常があります\nEmueraを終了しますか", "_Replace.csvエラー", MessageBoxButtons.YesNo)
                                == DialogResult.Yes)
                            {
                                console.PrintSystemLine("_Replace.csvに異常があり、終了が選択されたため処理を終了しました");
                                return(false);
                            }
                        }
                    }
                }
                Config.SetReplace(ConfigData.Instance);
                //ここでBARを設定すれば、いいことに気づいた予感
                console.setStBar(Config.DrawLineString);

                if (Config.UseRenameFile)
                {
                    if (File.Exists(Program.CsvDir + "_Rename.csv"))
                    {
                        if (Config.DisplayReport || Program.AnalysisMode)
                        {
                            console.PrintSystemLine("_Rename.csv読み込み中・・・");
                        }
                        ParserMediator.LoadEraExRenameFile(Program.CsvDir + "_Rename.csv");
                    }
                    else
                    {
                        console.PrintError("csv\\_Rename.csvが見つかりません");
                    }
                }
                if (!Config.DisplayReport)
                {
                    console.PrintSingleLine(Config.LoadLabel);
                    console.RefreshStrings(true);
                }
                gamebase = new GameBase();
                if (!gamebase.LoadGameBaseCsv(Program.CsvDir + "GAMEBASE.CSV"))
                {
                    console.PrintSystemLine("GAMEBASE.CSVの読み込み中に問題が発生したため処理を終了しました");
                    return(false);
                }
                console.SetWindowTitle(gamebase.ScriptWindowTitle);
                GlobalStatic.GameBaseData = gamebase;

                ConstantData constant = new ConstantData(gamebase);
                constant.LoadData(Program.CsvDir, console, Config.DisplayReport);
                GlobalStatic.ConstantData = constant;
                TrainName = constant.GetCsvNameList(VariableCode.TRAINNAME);

                vEvaluator = new VariableEvaluator(gamebase, constant);
                GlobalStatic.VEvaluator = vEvaluator;

                idDic = new IdentifierDictionary(vEvaluator.VariableData);
                GlobalStatic.IdentifierDictionary = idDic;

                StrForm.Initialize();
                VariableParser.Initialize();

                exm = new ExpressionMediator(this, vEvaluator, console);
                GlobalStatic.EMediator = exm;

                labelDic = new LabelDictionary();
                GlobalStatic.LabelDictionary = labelDic;
                HeaderFileLoader hLoader = new HeaderFileLoader(console, idDic, this);

                LexicalAnalyzer.UseMacro = false;
                if (!hLoader.LoadHeaderFiles(Program.ErbDir, Config.DisplayReport))
                {
                    console.PrintSystemLine("ERHの読み込み中にエラーが発生したため処理を終了しました");
                    return(false);
                }
                LexicalAnalyzer.UseMacro = idDic.UseMacro();

                ErbLoader loader = new ErbLoader(console, exm, this);
                if (Program.AnalysisMode)
                {
                    noError = loader.loadErbs(Program.AnalysisFiles, labelDic);
                }
                else
                {
                    noError = loader.LoadErbFiles(Program.ErbDir, Config.DisplayReport, labelDic);
                }
                initSystemProcess();
                initialiing = false;
            }
            catch (Exception e)
            {
                handleException(e, null, true);
                console.PrintSystemLine("初期化中に致命的なエラーが発生したため処理を終了しました");
                return(false);
            }
            if (labelDic == null)
            {
                return(false);
            }
            state.Begin(BeginType.TITLE);
            GC.Collect();
            return(true);
        }
예제 #3
0
        public bool Initialize()
        {
            LexicalAnalyzer.UseMacro = false;
            state = new ProcessState(console);
            originalState = state;
            initialiing = true;
            try
            {
                ParserMediator.Initialize(console);
                if (ParserMediator.HasWarning)
                {
                    ParserMediator.FlushWarningList();
                    if (MessageBox.Show("コンフィグファイルに異常があります\nEmueraを終了しますか", "コンフィグエラー", MessageBoxButtons.YesNo)
                        == DialogResult.Yes)
                    {
                        console.PrintLine("コンフィグファイルに異常があり、終了が選択されたため処理を終了しました");
                        return false;
                    }
                }
                if (Config.UseKeyMacro && !Program.AnalysisMode)
                {
                    if (File.Exists(Program.ExeDir + "macro.txt"))
                    {
                        if (Config.DisplayReport)
                            console.PrintLine("macro.txt読み込み中・・・");
                        KeyMacro.LoadMacroFile(Program.ExeDir + "macro.txt");
                    }
                }
                if (Config.UseReplaceFile && !Program.AnalysisMode)
                {
                    if (File.Exists(Program.CsvDir + "_Replace.csv"))
                    {
                        if (Config.DisplayReport)
                            console.PrintLine("_Replace.csv読み込み中・・・");
                        ConfigData.Instance.LoadReplaceFile(Program.CsvDir + "_Replace.csv");
                        if (ParserMediator.HasWarning)
                        {
                            ParserMediator.FlushWarningList();
                            if (MessageBox.Show("_Replace.csvに異常があります\nEmueraを終了しますか", "_Replace.csvエラー", MessageBoxButtons.YesNo)
                                == DialogResult.Yes)
                            {
                                console.PrintLine("_Replace.csvに異常があり、終了が選択されたため処理を終了しました");
                                return false;
                            }
                        }
                    }
                }
                Config.SetReplace(ConfigData.Instance);
                //ここでBARを設定すれば、いいことに気づいた予感
                console.setStBar(Config.DrawLineString);

                if (Config.UseRenameFile)
                {
                    if (File.Exists(Program.CsvDir + "_Rename.csv"))
                    {
                        if (Config.DisplayReport || Program.AnalysisMode)
                            console.PrintLine("_Rename.csv読み込み中・・・");
                        ParserMediator.LoadEraExRenameFile(Program.CsvDir + "_Rename.csv");
                    }
                    else
                        console.PrintError("csv\\_Rename.csvが見つかりません");
                }
                if (!Config.DisplayReport)
                {
                    console.PrintLine(Config.LoadLabel);
                    console.RefreshStrings(true);
                }
                gamebase = new GameBase();
                gamebase.LoadGameBaseCsv(Program.CsvDir + "GAMEBASE.CSV");
                console.SetWindowTitle(gamebase.ScriptWindowTitle);
                GlobalStatic.GameBaseData = gamebase;

                ConstantData constant = new ConstantData(gamebase);
                constant.LoadData(Program.CsvDir, console, Config.DisplayReport);
                GlobalStatic.ConstantData = constant;
                TrainName = constant.GetCsvNameList(VariableCode.TRAINNAME);

                vEvaluator = new VariableEvaluator(gamebase, constant);
                GlobalStatic.VEvaluator = vEvaluator;

                idDic = new IdentifierDictionary(vEvaluator.VariableData);
                GlobalStatic.IdentifierDictionary = idDic;

                StrForm.Initialize();
                VariableParser.Initialize();

                exm = new ExpressionMediator(this, vEvaluator, console);
                GlobalStatic.EMediator = exm;

                labelDic = new LabelDictionary();
                GlobalStatic.LabelDictionary = labelDic;
                HeaderFileLoader hLoader = new HeaderFileLoader(console, idDic, this);

                LexicalAnalyzer.UseMacro = false;
                if (!hLoader.LoadHeaderFiles(Program.ErbDir, Config.DisplayReport))
                {
                    console.PrintLine("ERHの読み込み中にエラーが発生したため処理を終了しました");
                    return false;
                }
                LexicalAnalyzer.UseMacro = idDic.UseMacro();

                ErbLoader loader = new ErbLoader(console, exm, this);
                if (Program.AnalysisMode)
                    noError = loader.loadErbs(Program.AnalysisFiles, labelDic);
                else
                    noError = loader.LoadErbFiles(Program.ErbDir, Config.DisplayReport, labelDic);
                initSystemProcess();
                initialiing = false;
            }
            catch (Exception e)
            {
                handleException(e, null, true);
                console.PrintLine("初期化中に致命的なエラーが発生したため処理を終了しました");
                return false;
            }
            if (labelDic == null)
            {
                return false;
            }
            state.Begin(BeginType.TITLE);
            GC.Collect();
            return true;
        }
예제 #4
0
        /// <summary>
        /// 複数のファイルを読む
        /// </summary>
        /// <param name="filepath"></param>
        public bool LoadErbFiles(string erbDir, bool displayReport, LabelDictionary labelDictionary)
        {
            //1.713 labelDicをnewする位置を変更。
            //checkScript();の時点でExpressionPerserがProcess.instance.LabelDicを必要とするから。
            labelDic = labelDictionary;
            labelDic.Initialized = false;
            List<KeyValuePair<string, string>> erbFiles = Config.GetFiles(erbDir, "*.ERB");
            List<string> isOnlyEvent = new List<string>();
            noError = true;
            uint starttime = WinmmTimer.TickCount;
            try
            {
                labelDic.RemoveAll();
                for (int i = 0; i < erbFiles.Count; i++)
                {
                    string filename = erbFiles[i].Key;
                    string file = erbFiles[i].Value;
            #if DEBUG
                    if (displayReport)
                        output.PrintLine("経過時間:" + (WinmmTimer.TickCount - starttime).ToString("D4") + "ms:" + filename + "読み込み中・・・");
            #else
                    if (displayReport)
                        output.PrintLine(filename + "読み込み中・・・");
                    //output.PrintLine(filename + "読み込み中・・・");
            #endif
                    System.Windows.Forms.Application.DoEvents();
                    loadErb(file, filename, isOnlyEvent);
                }
                ParserMediator.FlushWarningList();

                if (displayReport)
                    output.PrintLine("ユーザー定義関数のリストを構築中・・・");
                setLabelsArg();
                ParserMediator.FlushWarningList();
                labelDic.Initialized = true;

                if (displayReport)
                    output.PrintLine("スクリプトの構文チェック中・・・");
                checkScript();
                ParserMediator.FlushWarningList();

                //もう使わないのでnullにしちゃってGCで拾ってもらおうという魂胆
                GlobalStatic.VEvaluator.Constant.DummyChara = null;

                if (displayReport)
                    output.PrintLine("ロード完了");
            }
            catch (Exception e)
            {
                ParserMediator.FlushWarningList();
                System.Media.SystemSounds.Hand.Play();
                output.PrintError("予期しないエラーが発生しました:" + Program.ExeName);
                output.PrintError(e.GetType().ToString() + ":" + e.Message);
                return false;
            }
            finally
            {
                parentProcess.scaningLine = null;
            }
            isOnlyEvent.Clear();
            return noError;
        }
예제 #5
0
 /// <summary>
 /// 指定されたファイルを読み込む
 /// </summary>
 /// <param name="filename"></param>
 public bool loadErbs(List<string> path, LabelDictionary labelDictionary)
 {
     string fname;
     List<string> isOnlyEvent = new List<string>();
     noError = true;
     labelDic = labelDictionary;
     labelDic.Initialized = false;
     foreach (string fpath in path)
     {
         if (fpath.StartsWith(Program.ErbDir, Config.SCIgnoreCase) && !Program.AnalysisMode)
             fname = fpath.Substring(Program.ErbDir.Length);
         else
             fname = fpath;
         if (Program.AnalysisMode)
             output.PrintLine(fname + "読み込み中・・・");
         System.Windows.Forms.Application.DoEvents();
         loadErb(fpath, fname, isOnlyEvent);
     }
     if (Program.AnalysisMode)
         output.NewLine();
     ParserMediator.FlushWarningList();
     setLabelsArg();
     ParserMediator.FlushWarningList();
     labelDic.Initialized = true;
     checkScript();
     ParserMediator.FlushWarningList();
     parentProcess.scaningLine = null;
     isOnlyEvent.Clear();
     return noError;
 }
예제 #6
0
 public List<string> GetOverloadedList(LabelDictionary labelDic)
 {
     List<string> list = new List<string>();
     foreach (KeyValuePair<string, FunctionMethod> pair in methodDic)
     {
         FunctionLabelLine func = labelDic.GetNonEventLabel(pair.Key);
         if (func == null)
             continue;
         if (!func.IsMethod)
             continue;
         list.Add(pair.Key);
     }
     return list;
 }
예제 #7
0
 public IOperandTerm GetFunctionMethod(LabelDictionary labelDic, string codeStr, IOperandTerm[] arguments)
 {
     if (Config.ICFunction)
         codeStr = codeStr.ToUpper();
     if ((labelDic != null) && (labelDic.Initialized))
     {
         FunctionLabelLine func = labelDic.GetNonEventLabel(codeStr);
         if (func != null)
         {
             if (func.IsMethod)
             {
                 CalledFunction call = CalledFunction.CreateCalledFunctionMethod(func, codeStr);
                 string errMes;
                 IOperandTerm ret = UserDefinedMethodTerm.Create(arguments, call, out errMes);
                 if(ret == null)
                     throw new CodeEE(errMes);
                 return ret;
             }
             //1.721 #FUNCTIONが定義されていない関数は組み込み関数を上書きしない方向に。 PANCTION.ERBのRANDとか。
             if (!methodDic.ContainsKey(codeStr))
                 throw new CodeEE("#FUNCTIONが定義されていない関数(" + func.Position.Filename + ":" + func.Position.LineNo + "行目)を式中で呼び出そうとしました");
         }
     }
     FunctionMethod method = null;
     if (!methodDic.TryGetValue(codeStr, out method))
         return null;
     string errmes = method.CheckArgumentType(codeStr, arguments);
     if (errmes != null)
         throw new CodeEE(errmes);
     return new FunctionMethodTerm(method, arguments);
 }
예제 #8
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="path"></param>
 /// <param name="labelDictionary"></param>
 /// <returns></returns>
 public bool LoadErbs(List <string> path, LabelDictionary labelDictionary)
 {
     throw new NotImplementedException();
 }
예제 #9
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="erbDir"></param>
 /// <param name="displayReport"></param>
 /// <param name="labelDirectory"></param>
 /// <returns></returns>
 public bool LoadErbFiles(string erbDir, bool displayReport, LabelDictionary labelDirectory)
 {
     throw new NotImplementedException();
 }