View Raw SPL
/* parse inouts for ymd2date and hms2time */
d_or_t_2_parse_args(numargs, y_or_h, m_or_m, d_or_s)
{
        local nc, ylen, mlen, dlen, len, scalar = FALSE;

        if (numargs == 1)
        {
                if (not(isarray(y_or_h)))
                {
                        error(sprintf("%s - multi-column input series expected", __CALLER__));
                }

                nc = numcols(y_or_h);

                if (nc > 1)
                {
                        if (nc > 2)
                        {
                                d_or_s = y_or_h[.., 3..3..end];
                        }

                        m_or_m = y_or_h[.., 2..3..end];
                }

                y_or_h = y_or_h[.., 1..3..end];
        }
        else if (numargs < 3)
        {
                if (numargs < 2)
                {
                        if (numargs < 1)
                        {
                                error(sprintf("%s - input required", __CALLER__));
                        }

                        d_or_s = 1;
                }

                m_or_m = 1;
        }

        if (isarray(y_or_h) || isarray(m_or_m) || isarray(d_or_s))
        {
                /* find minimum length of array inputs */
                ylen = isarray(y_or_h) ? length(y_or_h) : inf;
                mlen = isarray(m_or_m) ? length(m_or_m) : inf;
                dlen = isarray(d_or_s) ? length(d_or_s) : inf;

                len = vmin(ylen, mlen, dlen);

                /* extend scalar inputs */
                if (not(isarray(y_or_h)))
                {
                        y_or_h = rep({y_or_h}, len);
                }

                if (not(isarray(m_or_m)))
                {
                        m_or_m = rep({m_or_m}, len);
                }

                if (not(isarray(d_or_s)))
                {
                        d_or_s = rep({d_or_s}, len);
                }
        }
        else
        {
                /* force series */
                y_or_h = {y_or_h};
                m_or_m = {m_or_m};
                d_or_s = {d_or_s};

                scalar = TRUE;
        }

        return(y_or_h, m_or_m, d_or_s);
}