View Raw SPL
iircomb_parse_args(funname, argv)
{
        local j, val, fs, f0, Q, Ab, unity_dc;

        fs = f0 = Q = Ab = unity_dc = {};

        loop (j = 1..(argc - 1))
        {
                val = getargv(j);

                if (isscalar(val))
                {
                        if (isempty(fs))
                        {
                                fs = val;
                        }
                        else if (isempty(f0))
                        {
                                f0 = val;
                        }

                        else if (isempty(Q))
                        {
                                Q = val;
                        }
                        else if (isempty(Ab))
                        {
                                Ab = val;
                        }
                        else if (isempty(unity_dc))
                        {
                                unity_dc = val;
                        }

                }
                else if (isstring(val))
                {
                        if (tolower(val) == "unity_dc")
                        {
                                unity_dc = 1;
                        }
                        else if (tolower(val) == "non_unity_dc")
                        {
                                unity_dc = 0;
                        }
                        else
                        {
                                error(sprintf("%s - unknown option '%s'", funname, val));
                        }
                }
                else if (isarray(val) && isempty(f0))
                {
                        f0 = val;
                }
                else
                {
                        error(sprintf("%s - invalid input", funname));
                }
        }

        if (isempty(fs))
        {
                fs = 1.0;
        }

        if (isempty(f0))
        {
                f0 = 0.25 * fs;
        }

        if (isempty(Q))
        {
                Q = 10;
        }

        if (isempty(Ab))
        {
                /* -3 db */
                Ab = 10 * log10(0.5);
        }

        if (isempty(unity_dc))
        {
                unity_dc = 0;
        }

        return(fs, f0, Q, Ab, unity_dc);
}