private void PopulateGrid_Properties(DataGridView grid, bool abbreviated, BindingFlags bindingFlags) { Type objType = null; if (Scope == null) { objType = TclAPI.GetCsTypeFromName(ScopeStr); if (objType == null) { return; } } else { objType = Scope.GetType(); } PropertyInfo[] properties = objType.GetProperties(bindingFlags); foreach (var property in properties) { object value = property.GetValue(Scope, null); string[] row = new string[] { property.Name, value == null ? "null" : value.ToString(), abbreviated ? property.PropertyType.Name : property.PropertyType.ToString() }; grid.Rows.Add(row); } }
public static unsafe int ExecuteGOACommand(IntPtr clientData, IntPtr interp, int objc, IntPtr *argv) { string command = TclAPI.GetCsString(argv[0]); for (int i = 1; i < objc; i++) { command += " " + TclAPI.GetCsString(argv[i]); } command += ";"; CommandStringParser parser = new CommandStringParser(command); foreach (string cmdstr in parser.Parse()) { bool valid = parser.ParseCommand(cmdstr, true, out Command cmd, out string errorDescr); if (valid) { CommandExecuter.Instance.Execute(cmd); Objects.CommandStackManager.Instance.Execute(); if (Program.mainInterpreter.context != null) { Program.mainInterpreter.context.Invalidate(); } } else { MessageBox.Show("Could not parse command " + Environment.NewLine + cmdstr + Environment.NewLine + "Error: " + errorDescr, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return(1); } } return(0); }
protected override void DoCommandAction() { // reset PRIOR to reading otherwise high lighter in gui might crash CommandExecuter.Instance.Execute(new Reset()); GZipStream gz = null; bool decompress = false; //Opens a file and deserialize it into FPGA.FPGA.Instance StreamDecorator stream = new StreamDecorator(FileName, this); BinaryFormatter formatter = new BinaryFormatter(); try { FPGA.FPGA.Instance = (FPGA.FPGA)formatter.Deserialize(stream); } catch (Exception) { // upon error try to decompress stream.Position = 0; decompress = true; gz = new GZipStream(stream, CompressionMode.Decompress); FPGA.FPGA.Instance = (FPGA.FPGA)formatter.Deserialize(gz); } finally { if (!decompress) { stream.Close(); } else { gz.Close(); stream.Close(); } } FPGA.FPGA.Instance.DoPostSerializationTasks(); CommandExecuter.Instance.Execute(new Reset()); CommandExecuter.Instance.Execute(new GC()); // no LoadFPGAFamilyScript here! LoadFPGAFamilyScript is called through Reset // remember for other stuff how we read in this FPGA Blackboard.Instance.LastLoadCommandForFPGA = ToString(); // familiy related warnings if (FPGA.FPGA.Instance.Family == FPGATypes.FPGAFamily.Spartan6 && FPGA.FPGA.Instance.GetAllTiles().Count(t => t.HasNonstopoverBlockedPorts) == 0) { OutputManager.WriteWarning("There are no tiles with bidirectional wires excluded from blocking"); OutputManager.WriteWarning("Consider using ExcludePipsToBidirectionalWiresFromBlocking for avoiding RUGs"); } // Reset tcl context TclAPI.ResetContext(); }
private void PopulateGrid_Methods(DataGridView grid, bool abbreviated, BindingFlags bindingFlags) { Type objType = null; if (Scope == null) { objType = TclAPI.GetCsTypeFromName(ScopeStr); if (objType == null) { return; } } else { objType = Scope.GetType(); } RelevantEnums = new List <Type>(); MethodInfo[] methods = objType.GetMethods(bindingFlags); foreach (var method in methods) { if (MethodRows == null) { MethodRows = new Dictionary <DataGridViewRow, MethodInfo>(); } string parameters = ""; ParameterInfo[] p = method.GetParameters(); for (int i = 0; i < p.Length; i++) { // Record relevant enums if (p[i].ParameterType.IsEnum) { RelevantEnums.Add(p[i].ParameterType); } parameters += "[" + (abbreviated ? p[i].ParameterType.Name : p[i].ParameterType.ToString()) + " " + p[i].Name + "]"; if (i + 1 < p.Length) { parameters += ", "; } } string[] row = new string[] { method.Name, parameters, abbreviated ? method.ReturnType.Name : method.ReturnType.ToString() }; int ind = grid.Rows.Add(row); MethodRows.Add(grid.Rows[ind], method); } }
public static unsafe int CsList(IntPtr clientData, IntPtr interp, int objc, IntPtr *argv) { if (objc < 2) { return(1); } object targetObj = null; // If only converting an object if (objc == 2) { targetObj = TclAPI.FindCsObject(argv[1]); } // If invoking cs first else { int r = Cs(clientData, interp, objc, argv); if (r != 0) { return(r); } targetObj = TclAPI.FindCsObject(TclDLL.Tcl_GetObjResult(interp)); } if (targetObj == null) { return(0); } IEnumerable <object> e = null; try { e = ((IEnumerable)targetObj).Cast <object>(); } catch (Exception) { e = null; } if (e == null) { return(1); } IntPtr list = TclAPI.GetTclList(e); TclDLL.Tcl_SetObjResult(interp, list); return(0); }
public static unsafe int ClearContext(IntPtr clientData, IntPtr interp, int objc, IntPtr *argv) { if (objc == 1) { TclAPI.ResetContext(); GUI.ConsoleCtrl.TCLTerminal_output.AppendText("'clearcontext' was executed manually." + NL + "Warning: your existing TCL variables pointing to C# objects will no longer hold a correct reference." + NL, System.Drawing.Color.OrangeRed);; return(0); } return(1); }
private void SendRowToTerminal(object sender, EventArgs e) { if (TargetRow == null) { return; } CsHelpLayoutPanel panel = (CsHelpLayoutPanel)TargetRow.DataGridView.Parent; if (panel == null) { return; } object cell0 = TargetRow.Cells[0].Value; if (cell0 == null) { return; } string result = ""; switch (TargetRow.DataGridView.Name) { case CsHelp_GUI.CSH_METHODS: result += cell0.ToString(); ParameterInfo[] parameters = panel.GetMethodInfoAtRow(TargetRow).GetParameters(); for (int i = 0; i < parameters.Length; i++) { result += " " + TclAPI.GetStringLabelForType(parameters[i].ParameterType); } break; default: result += cell0.ToString(); break; } RichTextBox terminal = ConsoleCtrl.TCLTerminal_input; terminal.AppendText(result); terminal.Focus(); }
//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); }
public static unsafe int Test(IntPtr clientData, IntPtr interp, int objc, IntPtr *argv) { TclAPI.Tcl2Cs(argv[1]); return(0); }
public static unsafe int CsHelp(IntPtr clientData, IntPtr interp, int objc, IntPtr *argv) { if (objc == 1) { CsHelp_GUI.CreateDialog(); return(0); } if (objc != 2) { return(1); } string arg = TclAPI.GetCsString(argv[1]).ToLower(); string scopeStr = ""; object scopeObj = null; List <string> grids = new List <string>(); if (arg.Equals(CsHelp_GUI.CSH_SINGLETONS)) { grids.Add(CsHelp_GUI.CSH_SINGLETONS); scopeStr = "Singletons"; } else if (arg.Equals(CsHelp_GUI.CSH_ENUMS)) { grids.Add(CsHelp_GUI.CSH_ENUMS); scopeStr = "Enums"; } else { // Try find object scopeObj = TclAPI.FindCsObject(argv[1]); if (scopeObj != null) { grids.Add(CsHelp_GUI.CSH_PROPERTIES); grids.Add(CsHelp_GUI.CSH_METHODS); grids.Add(CsHelp_GUI.CSH_ENUMS); grids.Add(CsHelp_GUI.CSH_PROPERTIES_STATIC); grids.Add(CsHelp_GUI.CSH_METHODS_STATIC); scopeStr = scopeObj.GetType().Name + " - " + scopeObj.GetType().ToString(); } // Try find type else { Type objType = null; string str = TclAPI.GetCsString(argv[1]); objType = TclAPI.GetCsTypeFromName(str); if (objType != null) { grids.Add(CsHelp_GUI.CSH_PROPERTIES_STATIC); grids.Add(CsHelp_GUI.CSH_METHODS_STATIC); scopeStr = objType.FullName; } } } CsHelp_GUI.CreateDialog(grids, scopeStr, scopeObj); return(0); }