protected override void DoCommandAction()
        {
            NetlistContainer netlistContainer = GetNetlistContainer();

            int numberOfUnroutedNets = netlistContainer.Nets.Where(n => n.PipCount == 0 && n.OutpinCount == 1 && n.InpinCount > 0).Count();
            int routedNets           = 0;

            List <XDLNet> unrouteableNets = new List <XDLNet>();

            foreach (XDLNet unroutedNet in netlistContainer.Nets.Where(n => n.PipCount == 0 && n.OutpinCount == 1 && n.InpinCount > 0))
            {
                int pipCount = unroutedNet.PipCount;

                RouteNet routeCmd = new RouteNet();
                routeCmd.NetlistContainerName = NetlistContainerName;
                routeCmd.NetName    = unroutedNet.Name;
                routeCmd.SearchMode = SearchMode;

                CommandExecuter.Instance.Execute(routeCmd);

                // pip count did not change if no paht was found
                if (pipCount == unroutedNet.PipCount)
                {
                    unrouteableNets.Add(unroutedNet);
                }

                ProgressInfo.Progress = ProgressStart + (int)((double)routedNets++ / (double)numberOfUnroutedNets * ProgressShare);
            }

            foreach (XDLNet net in unrouteableNets)
            {
                RouteNet routeCmd = new RouteNet();
                routeCmd.NetlistContainerName = NetlistContainerName;
                routeCmd.NetName    = net.Name;
                routeCmd.SearchMode = SearchMode;

                OutputManager.WriteOutput(routeCmd.ToString());

                CommandExecuter.Instance.Execute(routeCmd);
            }
        }
        private void ExecutePathSearch(Location startLocation, Location targetLocation)
        {
            m_paths.Clear();

            CheckExistence(startLocation);
            CheckExistence(targetLocation);

            if (KeepPathsIndependet)
            {
                LatencyMan = new LatencyManager(KeepPathsIndependet);
            }
            else
            {
                LatencyMan = new LatencyManager(PrintLatency, SortByAttribute);
            }

            // print results
            if (PrintBanner && !OutputMode.ToUpper().Equals("TCL"))
            {
                OutputManager.WriteOutput(GetBannerWithLatency(startLocation, targetLocation));
            }

            RouteNet routeCmd = new RouteNet();

            routeCmd.Watch = Watch;

            foreach (List <Location> path in routeCmd.Route(SearchMode, Forward, Enumerable.Repeat(startLocation, 1), targetLocation, 1000, MaxDepth, KeepPathsIndependet))
            {
                if (!PathAlreadyFound(path, m_paths))
                {
                    m_paths.Add(path);

                    if (BlockUsedPorts)
                    {
                        foreach (Location l in path)
                        {
                            if (!l.Tile.IsPortBlocked(l.Pip))
                            {
                                l.Tile.BlockPort(l.Pip, Tile.BlockReason.Blocked);
                            }
                        }
                    }

                    ProgressInfo.Progress = ProgressStart + (int)(m_paths.Count / (double)MaxSolutions * ProgressShare);

                    if (m_paths.Count >= MaxSolutions)
                    {
                        break;
                    }
                }
            }

            if (m_paths.Count == 0)
            {
                OutputManager.WriteOutput("No path found");
            }
            else if (OutputMode.ToUpper().Equals("CHAIN"))
            {
                PrintAsChain(m_paths);
            }
            else if (OutputMode.ToUpper().Equals("XDL"))
            {
                OutputManager.WriteOutput(PathToString(startLocation, targetLocation, m_paths));
            }
            else if (OutputMode.ToUpper().Equals("TCL"))
            {
                AddToTCLOutput(m_paths);
            }
        }