/// <summary>
        /// Parse a single argument. If that argument takes another sub argument, it will take it and
        /// return the numbe rof arguments it took.
        /// </summary>
        /// <param name="parts"></param>
        /// <param name="i"></param>
        /// <returns></returns>
        private static int ParseProgramArgumentSingle(ref string[] parts, int i)
        {
            int _requiredArguments = 0; // how many part we will take to fulfill this command argument

            switch (parts[i].ToLower())
            {
            case "showlog":
                Program.ShowLog();
                _requiredArguments = 0;
                break;

            case "start":
                if (parts.Length < i + 2)
                {
                    MessageBox.Show("Invalid START command.\nUsage: START SERVER|WEB");
                }
                if (parts[i + 1].ToLower() == "server" && !PrintServerController.isPrintServerStarted)
                {
                    PrintServerController.StartPrintServer();
                }
                else if (parts[i + 1].ToLower() == "web" && !WebServerController.isWebServerStarted)
                {
                    WebServerController.StartWebServer();
                }
                _requiredArguments = 1;
                break;


            case "stop":
                if (parts.Length < i + 2)
                {
                    MessageBox.Show("Invalid STOP command.\nUsage: STOP SERVER|WEB");
                }
                if (parts[i + 1].ToLower() == "server" && PrintServerController.isPrintServerStarted)
                {
                    PrintServerController.StopPrintServer();
                }
                else if (parts[i + 1].ToLower() == "web" && WebServerController.isWebServerStarted)
                {
                    WebServerController.StopWebServer();
                }
                _requiredArguments = 1;
                break;
            }

            return(++_requiredArguments);
        }