View Raw SPL
/* defcolor using composite value */
defcolorint(name, intval, idx)
{
        local r, g, b;

        (name, intval, idx) = defcolorint_parse_args(name, intval, idx);

        /* get RGB components */
        (r, g, b) = int2rgb(intval);

        /* set color using RGB values */
        defcolor(name, r, g, b, idx);
}


defcolorint_parse_args(argv)
{
        local name = {}, idx = {}, intval = {}, err = 0;

        loop (j = 1..argvc)
        {
                if (isstring(getargv(j)))
                {
                        if (isempty(name))
                        {
                                name = getargv(j);
                        }
                        else
                        {
                                err = 1;
                                break;
                        }
                }
                else if (isreal(getargv(j)))
                {
                        if (isempty(intval))
                        {
                                intval = getargv(j);
                        }
                        else if (isempty(idx))
                        {
                                idx = getargv(j);
                        }
                }

                else
                {
                        err = 1;
                        break;
                }
        }

        if (err)
        {
                error(sprintf("%s - invalid argument type", __CALLER__));
        }

        if (isempty(name))
        {
                if (isempty(idx))
                {
                        error(sprintf("%s - color name or color index required", __CALLER__));
                }

                name = "";
        }

        if (isempty(intval))
        {
                error(sprintf("%s - color value required", __CALLER__));
        }

        if (isempty(idx))
        {
                idx = -1;
        }

        return(name, intval, idx)
}