void ProcessCommand(string line) {
Match m = cmdSplit.Match(line);
string cmd = m.Groups[1].ToString();
string arg = m.Groups[2].ToString().TrimStart(null);
switch(cmd) {
case "n":
AddNamespace(arg);
break;
case "r":
AddReference(arg);
break;
case "v":
foreach(string v in varTable.Keys)
Utils.Print(v + " = " + varTable[v]);
break;
case "dcl":
MustDeclare = ! MustDeclare;
break;
case "code": // show code sent to compiler!
showCode = ! showCode;
break;
default:
// a macro may be used as a command; the line is split up and
// and supplied as arguments.
// For macros taking one argument, the whole line is supplied.
MacroEntry me = macro.Lookup(cmd);
if (me != null && me.Parms != null) {
string[] parms;
if (me.Parms.Length > 1)
parms = spaces.Split(arg);
else
parms = new string[] { arg };
string s = macro.ReplaceParms(me,parms);
ExecuteLine(s);
} else
Utils.Print("unrecognized command, or bad macro");
break;
}
}