void ExecuteCommand(Command command)
		{
			AbortBackgroudThread();
			
			try {
				command.Execute(engine);
			} catch(ThreadAbortException) {
			} catch(ScriptingException ex) {
				interpreter.Error(ex);
			} catch(TargetException ex) {
				interpreter.Error(ex);
			} catch(Exception ex) {
				interpreter.Error("Caught exception while executing command {0}: {1}", engine, ex);
			}
			
			NotifyStateChange();
		}
Example #2
0
        public Command ParseArguments(Command c, ArrayList args)
        {
            PropertyInfo [] pi = c.GetType ().GetProperties ();

            int num_args = args != null ? args.Count : 0;
            for (int i = 0; i < num_args; i++){
                string arg = (string) args [i];

                if (!arg.StartsWith ("-")){
                    if (c.Args == null)
                        c.Args = new ArrayList ();
                    c.Args.Add (arg);

                    for (int j = i+1; j < args.Count; j++)
                        c.Args.Add ((string) args [j]);
                    break;
                }

                arg = arg.Substring (1);
                for (int j = 0; j < pi.Length; j++){
                    if (!pi [j].CanWrite)
                        continue;

                    object[] attrs = pi [j].GetCustomAttributes (
                        typeof (PropertyAttribute), false);

                    if ((attrs != null) && (attrs.Length > 0)) {
                        PropertyAttribute attr = (PropertyAttribute) attrs [0];
                        if ((arg != attr.Name) && (arg != attr.ShortName))
                            continue;
                    } else if (pi [j].Name.ToLower () != arg)
                        continue;

                    if (pi [j].PropertyType == typeof (bool)){
                        pi [j].SetValue (c, true, null);
                        goto next;
                    }

                    if (pi [j].PropertyType == typeof (string)){
                        i++;
                        if (i >= args.Count){
                            Error ("Missing argument to flag: " + arg);
                            return null;
                        }

                        pi [j].SetValue (c, args [i], null);
                        goto next;
                    }

                    if (pi [j].PropertyType == typeof (int)){
                        i++;

                        if (i >= args.Count){
                            Error ("Missing integer to flag: " + arg);
                            return null;
                        }

                        try {
                            pi [j].SetValue (c, Int32.Parse ((string) args [i]), null);
                        } catch {
                            Error ("Expected number, got: `{0}'", args [i]);
                            return null;
                        }
                        goto next;
                    }
                }
                if (c.Args == null)
                    c.Args = new ArrayList ();
                c.Args.Add (args [i]);
            next:
                ;
            }

            return c;
        }