View Raw SPL
/* parse args */
cumfun_parse_args(argv)
{
        local s, dim, dof, nanmode, method, j, val, na_arg;

        s = dim = dof = nanmode = method = {};

        if (argc < 1 || not(isarray(s)))
        {
                error(sprintf("%s - series required", __CALLER__));
        }

        loop (j = 1..argc)
        {
                if (isarray(getargv(j)))
                {
                        try
                        {
                                s = refseries(getargv(j));
                        }
                        catch
                        {
                                s = {}
                        }
                }
                else
                {
                        val = getargv(j);

                        if (isscalar(val))
                        {
                                if (isempty(dim))
                                {
                                        dim = val;
                                }
                                else if (isempty(dof))
                                {
                                        dof = val;
                                }
                        }
                        else if (isstring(val))
                        {
                                val = tolower(val);
                                na_arg = 0;

                                switch (val)
                                {
                                        case "omitnan":
                                        case "omitna":
                                        case "omitmissing":
                                        case "ignorenan":
                                        case "ignorena":
                                                val = "omitnan";
                                                na_arg = 1;
                                                break;
                                                
                                        case "includenan":
                                        case "includena":
                                        case "includemissing":
                                                val = "includenan";
                                                na_arg = 1;
                                                break;
        
                                        default:
                                                break;
                                }

                                if (na_arg)
                                {
                                        nanmode = val;
                                }
                                else if (strlen(val) > 0)
                                {
                                        method = val;
                                }
                        }
                        else
                        {
                                error(sprintf("%s - unknown parameter", __CALLER__));
                        }
                }
        }

        if (isempty(dim))     dim = 1;
        if (isempty(dof))     dof = 0;
        if (isempty(nanmode)) nanmode = "";
        if (isempty(method))  method = "";

        return(s, dim, dof, nanmode, method);
}