Battle_Script_Pro.Form1.DebugParameters C# (CSharp) 메소드

DebugParameters() 개인적인 메소드

private DebugParameters ( ) : bool
리턴 bool
        private bool DebugParameters()
        {
            int lineNumber = 1;
            foreach (string line in scripts[tabControl1.SelectedIndex].Lines)
            {
                if (!line.Equals("") && !line.StartsWith("#") && !line.StartsWith("="))
                {
                    string newLine = line;
                    if (line.Contains(commentString))
                    {
                        newLine = Regex.Split(newLine, commentString)[0].TrimEnd();
                    }
                    string[] info = newLine.Split(' ');
                    Command c;
                    bool success = commands.TryGetValue(info[0].ToUpper(), out c);
                    if (success)
                    {
                        byte[] parameterLengths = c.ParameterLengths;
                        for (int parameterIndex = 0; parameterIndex < c.NumberOfParameters; parameterIndex++)
                        {
                            if (c.HexID == 0x89 && parameterIndex == 0)
                            {
                                byte paramTwo;
                                if (info[2].ToUpper().Equals("TRUE"))
                                {
                                    paramTwo = 0x40;
                                }
                                else if (info[2].ToUpper().Equals("FALSE"))
                                {
                                    paramTwo = 0;
                                }
                                else
                                {
                                    paramTwo = ParseByteParameter(info[2], lineNumber, 2).Byte;
                                    if (paramTwo != 0x40)
                                    {
                                        paramTwo = 0;
                                    }
                                }
                                byte byteOne = (byte)((int)ParseByteParameter(info[1], lineNumber, 1).Byte | (int)paramTwo);
                                bool value = ParseByteParameter(info[1], lineNumber, 1).Result;
                                if (!value)
                                {
                                    MessageBox.Show("Parameter " + (parameterIndex + 1) + " on line " + lineNumber + " is invalid. Maximum value is 0xFFFF or 65535.");
                                    return false;
                                }
                                parameterIndex++;
                            }
                            else
                            {
                                switch (parameterLengths[parameterIndex])
                                {
                                    case 2:
                                        {
                                            ReturnWorked test = ParseHalfWordParameter(info[parameterIndex + 1], lineNumber, parameterIndex);
                                            if (!test.Result)
                                            {
                                                if (test.GeneralReason == null)
                                                {
                                                    MessageBox.Show("Parameter " + (parameterIndex + 1) + " on line " + lineNumber + " is too long. Maximum value is 0xFF or 255.");
                                                }
                                                else
                                                {
                                                    MessageBox.Show(test.GeneralReason);
                                                }
                                                return false;
                                            }
                                            break;
                                        }
                                    case 4:
                                        {
                                            ReturnWorked test = ParseWordParameter(info[parameterIndex + 1], lineNumber, parameterIndex, true);
                                            if (!test.Result)
                                            {
                                                if (test.GeneralReason == null)
                                                {
                                                    MessageBox.Show("Parameter " + (parameterIndex + 1) + " on line " + lineNumber + " is too long. Maximum value is 0xFF or 255.");
                                                }
                                                else
                                                {
                                                    MessageBox.Show(test.GeneralReason);
                                                }
                                                return false;
                                            }
                                            break;
                                        }
                                    default:
                                        {
                                            ReturnWorked test = ParseByteParameter(info[parameterIndex + 1], lineNumber, parameterIndex);
                                            if (!test.Result)
                                            {
                                                if (test.GeneralReason == null)
                                                {
                                                    MessageBox.Show("Parameter " + (parameterIndex + 1) + " on line " + lineNumber + " is too long. Maximum value is 0xFF or 255.");
                                                }
                                                else
                                                {
                                                    MessageBox.Show(test.GeneralReason);
                                                }
                                                return false;
                                            }
                                            break;
                                        }
                                }
                            }
                        }
                    }
                    else
                    {
                        SQLiteConnection con = new SQLiteConnection("Data Source=" + System.Windows.Forms.Application.StartupPath + @"\Data\Commands.sqlite;Version=3;");
                        con.Open();
                        SQLiteCommand com = new SQLiteCommand("select * from commands where name = '" + info[0].ToUpper() + "'", con);
                        SQLiteDataReader reader = com.ExecuteReader();
                        if (reader != null)
                        {
                            c = GetCommand(reader, con);
                            byte[] parameterLengths = c.ParameterLengths;
                            for (int parameterIndex = 0; parameterIndex < c.NumberOfParameters; parameterIndex++)
                            {
                                if (c.HexID == 0x89 && parameterIndex == 0)
                                {
                                    byte paramTwo;
                                    if (info[2].ToUpper().Equals("TRUE"))
                                    {
                                        paramTwo = 0x40;
                                    }
                                    else if (info[2].ToUpper().Equals("FALSE"))
                                    {
                                        paramTwo = 0;
                                    }
                                    else
                                    {
                                        paramTwo = ParseByteParameter(info[2], lineNumber, 2).Byte;
                                        if (paramTwo != 0x40)
                                        {
                                            paramTwo = 0;
                                        }
                                    }
                                    byte byteOne = (byte)((int)ParseByteParameter(info[1], lineNumber, 1).Byte | (int)paramTwo);
                                    bool value = ParseByteParameter(info[1], lineNumber, 1).Result;
                                    if (!value)
                                    {
                                        MessageBox.Show("Parameter " + (parameterIndex + 1) + " on line " + lineNumber + " is invalid. Maximum value is 0xFFFF or 65535.");
                                        return false;
                                    }
                                    parameterIndex++;
                                }
                                else
                                {
                                    switch (parameterLengths[parameterIndex])
                                    {
                                        case 2:
                                            {
                                                ReturnWorked test = ParseHalfWordParameter(info[parameterIndex + 1], lineNumber, parameterIndex);
                                                if (!test.Result)
                                                {
                                                    if (test.GeneralReason == null)
                                                    {
                                                        MessageBox.Show("Parameter " + (parameterIndex + 1) + " on line " + lineNumber + " is too long. Maximum value is 0xFFFFFFFF or 4294967295.");
                                                    }
                                                    else
                                                    {
                                                        MessageBox.Show(test.GeneralReason);
                                                    }
                                                    return false;
                                                }
                                                break;
                                            }
                                        case 4:
                                            {
                                                ReturnWorked test = ParseWordParameter(info[parameterIndex + 1], lineNumber, parameterIndex, true);
                                                if (!test.Result)
                                                {
                                                    if (test.GeneralReason == null)
                                                    {
                                                        MessageBox.Show("Parameter " + (parameterIndex + 1) + " on line " + lineNumber + " is too long. Maximum value is 0xFFFFFFFF or 4294967295.");
                                                    }
                                                    else
                                                    {
                                                        MessageBox.Show(test.GeneralReason);
                                                    }
                                                    return false;
                                                }
                                                break;
                                            }
                                        default:
                                            {
                                                ReturnWorked test = ParseByteParameter(info[parameterIndex + 1], lineNumber, parameterIndex);
                                                if (!test.Result)
                                                {
                                                    if (test.GeneralReason == null)
                                                    {
                                                        MessageBox.Show("Parameter " + (parameterIndex + 1) + " on line " + lineNumber + " is too long. Maximum value is 0xFFFFFFFF or 4294967295.");
                                                    }
                                                    else
                                                    {
                                                        MessageBox.Show(test.GeneralReason);
                                                    }
                                                    return false;
                                                }
                                                break;
                                            }
                                    }
                                }
                            }
                        }
                        else
                        {
                            con.Close();
                            SuperCommand sc;
                            success = superCommands.TryGetValue(info[0].ToUpper(), out sc);
                            if (success)
                            {
                                byte[] parameterLengths = sc.ParameterLengths;
                                for (int parameterIndex = 0; parameterIndex < sc.NumberOfParameters; parameterIndex++)
                                {
                                    switch (parameterLengths[parameterIndex])
                                    {
                                        case 2:
                                            {
                                                ReturnWorked test = ParseHalfWordParameter(info[parameterIndex + 1], lineNumber, parameterIndex);
                                                if (!test.Result)
                                                {
                                                    MessageBox.Show("Parameter " + (parameterIndex + 1) + " on line " + lineNumber + " is too long. Maximum value is 0xFFFF or 65535.");
                                                    return false;
                                                }
                                                break;
                                            }
                                        case 4:
                                            {
                                                ReturnWorked test = ParseWordParameter(info[parameterIndex + 1], lineNumber, parameterIndex, true);
                                                if (!test.Result && test.PointerName == null)
                                                {
                                                    MessageBox.Show("Parameter " + (parameterIndex + 1) + " on line " + lineNumber + " is too long. Maximum value is 0xFFFFFFFF or 4294967295.");
                                                    return false;
                                                }
                                                else if (!test.Result && test.PointerName != null)
                                                {
                                                    MessageBox.Show("Parameter " + (parameterIndex + 1) + " on line " + lineNumber + " is a dynamic pointer. Dynamic pointers cannot be used without first defining a dynamic search location.");
                                                    return false;
                                                }
                                                break;
                                            }
                                        default:
                                            {
                                                ReturnWorked test = ParseByteParameter(info[parameterIndex + 1], lineNumber, parameterIndex);
                                                if (!test.Result)
                                                {
                                                    MessageBox.Show("Parameter " + (parameterIndex + 1) + " on line " + lineNumber + " is too long. Maximum value is 0xFF or 255.");
                                                    return false;
                                                }
                                                break;
                                            }
                                    }
                                }
                            }
                        }
                    }
                }
                else if (line.StartsWith("#"))
                {
                    string[] theLine = line.Split(' ');
                    switch (theLine[0])
                    {
                        case "#define":
                            {
                                int temp = 0;
                                bool success = Int32.TryParse(theLine[2], out temp);
                                if (success)
                                {
                                    try
                                    {
                                        userDefinitions.Add(theLine[1].ToUpper(), UInt32.Parse(theLine[2]));
                                    }
                                    catch (FormatException)
                                    {
                                        MessageBox.Show("A number was expected for parameter 2 of the definition");
                                    }
                                    catch
                                    {
                                        MessageBox.Show("There was an unknown error with the custom definition");
                                    }
                                }
                                else
                                {
                                    try
                                    {
                                        userDefinitions.Add(theLine[1].ToUpper(), UInt32.Parse(ToDecimal(theLine[2])));
                                    }
                                    catch (FormatException)
                                    {
                                        MessageBox.Show("A number was expected for parameter 2 of the definition");
                                    }
                                    catch
                                    {
                                        MessageBox.Show("There was an unknown error with the custom definition");
                                    }
                                }
                                break;
                            }
                        case "#org":
                            string[] splitLine = line.Split(' ');
                            if (splitLine[1].StartsWith("@"))
                            {
                                pointerNames.Add(new DynamicPointer(line.Split(' ')[1].Substring(1), lineNumber, 1), false);
                                insideHashOrgBracket = true;
                                if (!dynamicLocationSet)
                                {
                                    MessageBox.Show("#org on line " + lineNumber + " references a non existant dynamic location.");
                                    return false;
                                }
                            }
                            break;
                        case "#dynamic":
                            {
                                freeSpaceLocation = 0x720000;
                                ReturnWorked result = ParseWordParameter(theLine[1], lineNumber, 1, false);
                                if (!result.Result)
                                {
                                    MessageBox.Show(result.PointerName);
                                    return false;
                                }
                                dynamicLocationSet = true;
                                break;
                            }
                        case "#include":
                            string filePath = System.Windows.Forms.Application.StartupPath + @"\Data\" + theLine[1];
                            if (!filePath.EndsWith(".bsh"))
                            {
                                filePath += ".bsh";
                            }
                            if (!File.Exists(filePath))
                            {
                                MessageBox.Show("The included header file could not be found.");
                                break;
                            }
                            else
                            {
                                if (!theLine[1].Equals("std"))
                                {
                                    string[] rbhFile = File.ReadAllLines(filePath);
                                    ParseHeaderFile(rbhFile);
                                }
                            }
                            break;
                        case "#freespacebyte":
                            {
                                byte temp = 0;
                                bool success = Byte.TryParse(theLine[1], out temp);
                                if (!success)
                                {
                                    success = Byte.TryParse(ToDecimal(theLine[1]), out temp);
                                    if (!success)
                                    {
                                        MessageBox.Show("Error. Free space byte could not be parsed from script.");
                                    }
                                }
                            }
                            break;
                        default:
                            break;
                    }
                }
                lineNumber++;
            }
            return true;
        }
Form1