View Raw SPL
#include 

extern _wtxval;

/* delimiters */
extern _wttab;
extern _wtspace;
extern _wtcomma;
extern _wtsemi;
extern _wtother;
extern _wtotherstr;
extern _wthex;
extern _wtcsv;
extern _wtlbf;
extern _wtlidt;

extern _cvs_wttab;
extern _cvs_wtspace;
extern _cvs_wtcomma;
extern _cvs_wtsemi;
extern _cvs_wtother;
extern _cvs_wtotherstr;
extern _cvs_wthex;

static _wttab_save;
static _wtspace_save;
static _wtcomma_save;
static _wtsemi_save;
static _wtother_save;
static _wtotherstr_save;


/* gui based writet */
wtfname(fname)
{
        local orgname, fn, dl, collist, hformat, form, wlist;

        /* set default name to appear in dialog box */
        if (argc > 0)
        {
                /* use input filename */
                setvar("_wtfname", fname);
                setvar("_wtpickdir", strrev(strfind(pathchar, strrev(_wtfname))));
        }
        else
        {
                /* just define the variable */
                defvar("_wtfname", "");
        }

        /* define start directory if it doesn't already exist */
        defvar("_wtpickdir", "");

        /* define savemode */
        defvar("_wtsmode", 0);

        /* precision */
        defvar("_wtprec", castint(getconf("DISPLAY_PRECISION")));
        defvar("_wtdprec", 1);

        /* hex */
        defvar("_wthex", 0);

        /* csv */
        defvar("_wtcsv", 0);

        /* show formula */
        defvar("_wtwinf", 0);

        /* header */
        defvar("_wtlheader", 0);
        defvar("_wtcheader", 0);
        defvar("_wtuheader", 0);

        /* _pickfile_status == 1 if dialog was successful */
        setvar("_pickfile_status", 0);

        /* series name state */
        setvar("_wtser", 1);

        /* input windows */
        defvar("_wtwins", "");

        /* remember original name */
        orgname = _wtfname;

        /* xvals */
        defvar("_wtxval", 0);

        /* default delimiters */
        if (_wtcsv)
        {
                wtfname_def_csv_delim();
        }
        else
        {
                wtfname_def_delim();
        }

        /* save initial delimiters */
        wtfname_save_delim();

        setvar("_wtwlist",   "");

        /* invoke dialog box */
        _mf("writet.tab");

        if (_pickfile_status != 0)   /* dialog was successful */
        {
                /* set delimiters */
                _setwtdl(_wttab, _wtspace, _wtcomma, _wtsemi, _wtother, _wtotherstr);

                if (_wtcsv)
                {
                        /* save CSV delimiters */
                        wtfname_save_csv_delim();
                }

                /* remember default directory */
                setvar("_wtpickdir", strrev(strfind(pathchar, strrev(_wtfname))));
                fn = sprintf('"%s"', _wtfname);

                /* check if double quote a delimiter */
                if (strlen(strfind('"', _writet_delimiters)) > 0)
                {
                        dl = sprintf("'%s'", _writet_delimiters);
                }
                else
                {
                        dl = sprintf('"%s"', _writet_delimiters);
                }

                verbose = 1;

                /* column label options */
                header = _wtlheader + _wtcheader + _wtuheader;

                if (strlen(_wtwlist) <= 0)
                {
                        /* no data to write */
                        error(sprintf("writetable: %s", _rwterr_ndw));
                }
                else
                {
                        /* get window list with x vals */
                        wlist = wtfname_series(_wtwlist)
                }

                if (strlen(_wtfname) > 0 && strlen(wlist) > 0)
                {
                        if (setwfmode == 1)
                        {
                                if (_wthex)
                                {
                                        hformat = sprintf('"%s%d.%dx"', "%", _wtprec, _wtprec);
                                        form = sprintf("setwf('writet(%s, %s, %d, %s, %s, %d, %d, %d, %d)')", fn, wlist, _wtsmode, dl, hformat, -1, header, verbose, _wtxval);
                                }
                                else
                                {
                                        form = sprintf("setwf('writet(%s, %s, %d, %s, %d, %d, %d, %d)')", fn, wlist, _wtsmode, dl, _wtprec, header, verbose, _wtxval);
                                }
                        }
                        else
                        {
                                if (_wthex)
                                {
                                        hformat = sprintf('"%s%d.%dx"', "%", _wtprec, _wtprec);
                                        form = sprintf('writet(%s, %s, %d, %s, %s, %d, %d, %d, %d)', fn, wlist, _wtsmode, dl, hformat, -1, header, verbose, _wtxval);
                                }
                                else
                                {
                                        form = sprintf('writet(%s, %s, %d, %s, %d, %d, %d, %d)', fn, wlist, _wtsmode, dl, _wtprec, header, verbose, _wtxval);
                                }
                        }

                        /* evaluate */
                        eval(form);
                }
        }
        else
        {
                /* reset to original name */
                setvar("_wtfname", orgname);
        }

        if (_wtcsv)
        {
                wtfname_restore_delim();
        }
}


wtfname_series(wlist)
{
        local ser, k = 1, outlist = "";

        /* remove empty windows */
        wlist = _remempty_winlist(wlist);

        return(wlist); //

        /* add x vals */
        while (1)
        {
                ser = strget(k, wlist, ",");

                if (strlen(ser) == 0)
                {
                        break;
                }

                outlist += wtfname_series_x(ser) + ",";

                k++;
        }

        outlist = strextract(outlist, 1, strlen(outlist) - 1);

        return(outlist);
}


wtfname_series_x(ser)
{
        local xser, yser, zser, is_xy, is_xyz;

        is_xy  = eval(sprintf("isxy(%s)", ser));
        is_xyz = eval(sprintf("isxyz(%s)", ser));

        if (is_xy)
        {
                xser = sprintf("xvals(%s)", ser);
                yser = sprintf("yvals(%s)", ser);
        }
        else if (is_xyz)
        {
                xser = sprintf("xvals(%s)", ser);
                yser = sprintf("yvals(%s)", ser);
                zser = sprintf("zvals(%s)", ser);
        }
        else
        {
                xser = sprintf("col(xvals(%s), 1)", ser);
                yser = ser;
        }

        switch (_wtxval)
        {
                case 0:
                default:
                        ser = (is_xyz) ? zser : yser;
                        break;

                case 1:
                        ser = (is_xyz) ? sprintf("ravel(%s, %s, %s)", xser, yser, zser) :
                                         sprintf("ravel(%s, %s)", xser, yser);
                        break;

                case 2:
                        ser = (is_xyz) ? sprintf("ravel(%s, %s, %s)", zser, yser, xser) :
                                         sprintf("ravel(%s, %s)", yser, xser);
                        break;
        }

        return(ser);
}


wtfname_def_delim()
{
        defvar("_wttab",     "0");
        defvar("_wtspace",   "1");
        defvar("_wtcomma",   "0");
        defvar("_wtsemi",    "0");
        defvar("_wtother",   "0");
        defvar("_wtotherstr", "");
}


wtfname_def_csv_delim()
{
        defvar("_cvs_wttab",     "0");
        defvar("_cvs_wtspace",   "0");
        defvar("_cvs_wtcomma",   "1");
        defvar("_cvs_wtsemi",    "0");
        defvar("_cvs_wtother",   "0");
        defvar("_cvs_wtotherstr", "");
        defvar("_cvs_wthex", "0");
}


wtfname_save_delim()
{
        _wttab_save            = _wttab;
        _wtspace_save          = _wtspace;
        _wtcomma_save          = _wtcomma;
        _wtsemi_save           = _wtsemi;
        _wtother_save          = _wtother;
        _wtotherstr_save       = _wtotherstr;
        _wthex_save            = _wthex;
}


wtfname_set_csv_delim()
{
        _wttab                 = _cvs_wttab;
        _wtspace               = _cvs_wtspace;
        _wtcomma               = _cvs_wtcomma;
        _wtsemi                = _cvs_wtsemi;
        _wtother               = _cvs_wtother;
        _wtotherstr            = _cvs_wtotherstr;
}


wtfname_save_csv_delim()
{
        _cvs_wttab             = _wttab;
        _cvs_wtspace           = _wtspace;
        _cvs_wtcomma           = _wtcomma;
        _cvs_wtsemi            = _wtsemi;
        _cvs_wtother           = _wtother;
        _cvs_wtotherstr        = _wtotherstr;
        _cvs_wthex             = _wthex;
}


wtfname_restore_delim()
{
        _wttab                 = _wttab_save;
        _wtspace               = _wtspace_save;
        _wtcomma               = _wtcomma_save;
        _wtsemi                = _wtsemi_save;
        _wtother               = _wtother_save;
        _wtotherstr            = _wtotherstr_save;
}


wtfname_setdelim()
{
        if (_wtcsv)
        {
                wtfname_def_csv_delim();
                wtfname_set_csv_delim();
        }
        else
        {
                wtfname_restore_delim();
        }
}


wtfname_filespec()
{
        if (_wtcsv)
        {
                /* CSV, DAT, TXT files */
                spec = _wrtopt_cdt;
        }
        else
        {
                /* DAT, TXT, CSV files */
                spec = _wrtopt_dtc;
        }

        return(spec);
}