private void GetFunctions() { for (var i = 0; i < Script.Length; i++) { if (Script[i] != '~' || Script[i + 1] != '(') continue; var func = Extract(Script.Substring(i)); if (func.Item2 != -1) { var functionString = func.Item1; var indexOfColon = functionString.IndexOf(':'); var indexOfParenthesis = functionString.IndexOf('('); var indexOfPeriod = functionString.IndexOf('|'); var functionName = functionString.Substring(0, indexOfColon); //Console.WriteLine (FunctionName); string[] functionParameters; string functionContents; if (indexOfPeriod != -1 && indexOfParenthesis > indexOfPeriod) { functionParameters = functionString.Substring(indexOfColon + 1, indexOfPeriod - indexOfColon - 1).Split(new[] {' '}, StringSplitOptions.RemoveEmptyEntries).Select(x => Prefix + x).ToArray(); functionContents = functionString.Substring(indexOfPeriod + 1); } else { functionParameters = new string[0]; functionContents = functionString.Substring(indexOfParenthesis); } var functionFixedParams = !functionParameters.Contains("..."); var axFunc = new AxFunction(functionParameters, functionContents, Prefix, functionFixedParams); axFunc.GetDynamicTags(); Functions.Add(Prefix + functionName, axFunc); if (axFunc.Tags.ContainsKey("EntryPoint")) { EntryPoint = functionName; } foreach (var t in axFunc.Tags.Where(t => Hooks.ContainsKey(t.Key))) { Hooks[t.Key].Call(this, axFunc); } i += func.Item2; } else { Console.WriteLine("Invalid function"); } } }