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);
        }
Example #3
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();
        }
Example #8
0
        //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);
        }