View Raw SPL
#include 

/* gui based readjson */
rtjson(fname)
{
        local orgname, obj;
        extern _dvar, _pickfile_status;

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

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

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

        /* remember original name */
        orgname = _rjsfname;

        /* invoke dialog box */
        _mf("readjson.pan");

        if (_pickfile_status == 1)
        {
                /* remember default directory */
                setvar("_rjspickdir", strrev(strfind(pathchar, strrev(_rjsfname))));

                /* history */
                pdchist(_rjsstr_title, "rtjson", _rjsstr_title);

                if (strlen(_dvar) > 0)
                {
                        eval(sprintf("setvar(%s, readjson(_rjsfname))", _dvar));

                        viewobject(eval(_dvar));
                }
                else
                {
                        viewobject(readjson(_rjsfname));
                }
        }
        else
        {
                /* reset to original name */
                if (strlen(orgname) > 0)
                {
                        setvar("_rjsfname", orgname);
                }
        }
}