View Raw SPL
_collist(serstr, ncstr, comflag)
{
        local i, s = "", p, nc, scom, def, isvalid;

        if (argc < 1)
        {
                ser = current;
                nc = numcols(ser);
        }
        else
        {
                if (_isser(serstr))
                {
                        nc = _collist_iswin(serstr) ? numcols(eval(serstr)) : 1
                }
                else
                {
                        nc = 1;
                }
        }

        if (argc > 1)
        {
                setvname(ncstr, nc);
        }

        if (argc > 2)
        {
                def = getwksattrib("defaultcomment");

                isvalid = _collist_validwin(serstr);

                loop (i = 1..nc)
                {
                        if (strlen(s) > 0) s = strcat(s, strescape("\n"));

                        if (isvalid)
                        {
                                scom = eval(sprintf("getcomment(%s, 1, %d)", serstr, i));

                                if (scom == def || strlen(scom) == 0)
                                {
                                        scom = eval(sprintf("getvunits(%s, 1, %d)", serstr, i));
                                }

                                p = sprintf("%d: %s", i, scom);

                                s = strcat(s, p);
                        }
                }
        }
        else
        {
                loop (i = 1..nc)
                {
                        if (strlen(s) > 0) s = strcat(s, strescape("\n"));
                        p = sprintf("%d", i);
                        s = strcat(s, p);
                }
        }

        return(s);
}


_collist_iswin(serstr)
{
        local wnum;

        wnum = castint(serstr);

        return(wnum <= numwindows);
}


_collist_length(serstr)
{

        return(eval(sprintf("length(%s)", serstr)));
}


_collist_validwin(serstr)
{
        local status = 0;

        if (_collist_iswin(serstr))
        {
                status = _collist_length(serstr) > 0;
        }

        return(status);
}