static VAL functions(string func, VAL parameters, Memory DS) { int size = parameters.Size; VAL L0 = size > 0 ? parameters[0] : null; VAL L1 = size > 1 ? parameters[1] : null; VAL L2 = size > 2 ? parameters[2] : null; switch (func) { //run("command"); case "run": { string line = null; if (size == 1 && L0.VALTYPE == VALTYPE.stringcon) { line = L0.Str; } else { cerr.WriteLine("invalid arguments on function void run(string)"); } if (line != null) { IShell shell = DS[SHELL].Value as IShell; if (shell != null) { int result = (int)shell.Run(line); return(new VAL(result)); } else { cerr.WriteLine("shell not found"); return(new VAL()); } } } break; default: var query = DS[func]; if (query.VALTYPE == VALTYPE.stringcon) { VAL val = VAL.Array(0); for (int i = 0; i < parameters.Size; i++) { VAL parameter = parameters[i]; string name = parameter.GetName(); if (name == null) { cout.WriteLine("require parameter name at arguments({0}), run func(id=20,x=2);", i + 1); return(new VAL(2)); } val.AddMember(name, parameter); } VAL result = VAL.Array(0); result.Add(query); result.Add(val); return(result); } break; } return(null); }