Пример #1
0
        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);
        }