//source private void button1_Click(object sender, EventArgs e) { OpenFileDialog fileDialog = new OpenFileDialog(); fileDialog.InitialDirectory = "C:\\"; fileDialog.Title = "Select path"; fileDialog.CheckFileExists = false; fileDialog.CheckPathExists = true; fileDialog.DefaultExt = "txt"; fileDialog.Filter = "Text files (*.txt)|*.txt|All files (*.*)|*.*"; fileDialog.FilterIndex = 2; fileDialog.RestoreDirectory = true; if (fileDialog.ShowDialog() == DialogResult.OK) { string script = File.ReadAllText(fileDialog.FileName); /*for(int i=0; i<lines.Length; i++) * { * int r = Program.mainInterpreter.EvalScript(lines[i]); * string result = Program.mainInterpreter.Result; * m_txtTCLInput.AppendText(result + (result == "" ? "" : Environment.NewLine)); * }*/ int r = Program.mainInterpreter.EvalScript(script); if (r != 0) { TclDLL.Tcl_SetObjResult(Program.mainInterpreter.ptr, TclAPI.Cs2Tcl("ERROR")); } // TODO: 'Switch (r)' or something of the sort string result = Program.mainInterpreter.Result; TCL_input.AppendText(result + (result == "" ? "" : Environment.NewLine)); TCL_input.SelectAll(); TCL_input.SelectionProtected = true; TCL_input.SelectionStart = TCL_input.Text.Length; TCL_input.SelectionLength = 0; TCL_input.ScrollToCaret(); } }
protected override void DoCommandAction() { List <Tile> startTiles = FPGA.FPGA.Instance.GetAllTiles().Where(t => Regex.IsMatch(t.Location, StartLocation)).OrderBy(t => t.Location).ToList(); List <Tile> targetTiles = FPGA.FPGA.Instance.GetAllTiles().Where(t => Regex.IsMatch(t.Location, TargetLocation)).OrderBy(t => t.Location).ToList(); // All matched regex start tiles for (int i = 0; i < startTiles.Count; i++) { List <Port> startPorts = startTiles[i].SwitchMatrix.Ports.Where(p => Regex.IsMatch(p.Name, StartPort)).OrderBy(p => p.Name).ToList(); // All matched regex target tiles for (int j = 0; j < targetTiles.Count; j++) { List <Port> targetPorts = targetTiles[j].SwitchMatrix.Ports.Where(p => Regex.IsMatch(p.Name, TargetPort)).OrderBy(p => p.Name).ToList(); // All matched regex start ports for (int k = 0; k < startPorts.Count; k++) { Location startLocation = new Location(startTiles[i], startPorts[k]); // All matched regex target ports for (int l = 0; l < targetPorts.Count; l++) { Location targetLocation = new Location(targetTiles[j], targetPorts[l]); ExecutePathSearch(startLocation, targetLocation); } } } } if (OutputMode.ToUpper().Equals("TCL")) { TclDLL.Tcl_SetObjResult(Program.mainInterpreter.ptr, TclAPI.Cs2Tcl(TCL_output)); } }
public static unsafe int Cs(IntPtr clientData, IntPtr interp, int objc, IntPtr *argv) { Program.mainInterpreter.ErrorMessage = ""; if (objc < 3) { Program.mainInterpreter.ErrorMessage = "Not enough parameters provided for the command." + NL + "Correct command format: 'cs $object $member $parameters'." + NL + "For more info type 'cshelp'."; return(TclInterpreter.TCL_ERROR); } Type objType = null; object obj = TclAPI.FindCsObject(argv[1]); if (obj == null) { string str = TclAPI.GetCsString(argv[1]); objType = TclAPI.GetCsTypeFromName(str); if (objType == null) { Program.mainInterpreter.ErrorMessage = "The parameter '" + str + "' could not be linked to any C# object or type."; return(TclInterpreter.TCL_ERROR); } } else { objType = obj.GetType(); } object result = null; // Required data - can be Method or Property string requiredMember = TclAPI.GetCsString(argv[2]); IEnumerable <MemberInfo> candidates = objType.GetMembers().Where(m => m.Name == requiredMember && TclAPI.IsAPICompatibleMember(m)); // Method if (candidates.FirstOrDefault() is MethodInfo) { int totalParams = objc - 3; IEnumerable <MethodInfo> matchedMethods = candidates.Where(m => m.MemberType == MemberTypes.Method) .Cast <MethodInfo>().Where(m => m.GetParameters().Count() == totalParams); // Convert the tcl parameters to cs objects object[] parameters = new object[totalParams]; for (int i = 0; i < totalParams; i++) { object csObj = TclAPI.Tcl2Cs(argv[3 + i]); if (csObj == null) { string args = "Parameters:" + Environment.NewLine; for (int j = 0; j < objc; j++) { args += j + ": " + TclAPI.GetCsString(argv[j]) + Environment.NewLine; } throw new ArgumentException("Invalid parameter provided at index: " + (3 + i).ToString() + Environment.NewLine + args); } parameters[i] = csObj; } // Try the candidate methods until one works bool success = false; foreach (MethodInfo method in matchedMethods) { try { result = method.Invoke(obj, parameters); /*if(result != null && !result.GetType().Equals(method.ReturnType)) * Console.WriteLine("Type Difference");*/ success = true; break; } catch (Exception) { } } // If invoked method was void if (success) { if (result == null) { TclDLL.Tcl_ResetResult(interp); return(0); } } else { Program.mainInterpreter.ErrorMessage += "No method overload could be executed for the method " + requiredMember + NL; } } // Property else if (candidates.Count() == 1 && candidates.FirstOrDefault() is PropertyInfo p) { result = p.GetValue(obj, null); } TclDLL.Tcl_SetObjResult(interp, TclAPI.Cs2Tcl(result)); if (result == null) { Program.mainInterpreter.ErrorMessage += "'" + requiredMember + "' returned null."; return(TclInterpreter.TCL_WARNING); } return(0); }