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);
}