Esempio n. 1
0
XML * DSREP_localxml_new  (WFTK_ADAPTOR * ad, va_list args)
{
    char path[256];
    struct stat statbuf;
    char * id = (char *) 0;
    FILE * file;
    XML * ret = xml_create ("datasheet");

    if (args) id = va_arg (args, char *);
    if (id) {
        strcpy (path, xml_attrval (ad->parms, "dir"));
        strcat (path, id);
        strcat (path, ".xml");
        if (stat (path, &statbuf) == -1) {
            file = fopen (path, "w");
            if (file) {
                xml_set (ret, "id", id);
                xml_write (file, ret);
                fclose (file);
            } else {
                xml_set (ad->parms, "error", "Couldn't open file for writing.");
            }
        } else {
            xml_set (ad->parms, "error", "File already exists.");
        }
    }
    return ret;
}
Esempio n. 2
0
static PyObject*
py_xml_write(PyObject *self, PyObject *args)
{
    int n;
    char *file;
    if (!PyArg_ParseTuple(args, "is:xml_write", &n, &file))
        return NULL;
    int iok = xml_write(n, file);
    if (iok < 0) return reportError(iok);
    return Py_BuildValue("i",iok);
}
Esempio n. 3
0
XML * DSREP_localxml_save (WFTK_ADAPTOR * ad, va_list args) {
    char path[256];
    struct stat statbuf;
    XML  * ds = (XML *) 0;
    FILE * file;
    FILE * _index;
    XML  * index;
    int  counter;

    if (args) ds = va_arg (args, XML *);
    if (!ds) {
        xml_set (ad->parms, "error", "No datasheet given.");
        return (XML *) 0;
    }

    if (*xml_attrval (ds, "id")) {
        strcpy (path, xml_attrval (ad->parms, "dir"));
        strcat (path, xml_attrval (ds, "id"));
        strcat (path, ".xml");
        file = fopen (path, "w");
    } else {
        /* Find a unique ID. */
        strcpy (path, xml_attrval (ad->parms, "dir"));
        strcat (path, "index");
        if (stat (path, &statbuf) == -1) {
            _index = fopen (path, "w");
            if (!_index) {
                xml_set (ad->parms, "error", "Unable to create index file.");
                return (XML *) 0;
            }
            index = xml_create ("index");
        } else {
            _index = fopen (path, "r+");
            if (_index) {
                index = xml_read (_index);
                rewind (_index);
            } else {
                xml_set (ad->parms, "error", "Unable to create index file.");
                return (XML *) 0;
            }
        }
        if (!index) {
            xml_set (ad->parms, "error", "Directory index file corrupt.");
            return (XML *) 0;
        }

        if (!xml_attrval (index, "counter")) xml_set (index, "counter", "0");

        counter = xml_attrvalnum (index, "counter");
        do {
            counter ++;
            xml_setnum (ds, "id", counter);
            strcpy (path, xml_attrval (ad->parms, "dir"));
            strcat (path, xml_attrval (ds, "id"));
            strcat (path, ".xml");
        } while (stat (path, &statbuf) != -1);
        file = fopen (path, "w");

        xml_setnum (index, "counter", counter);
        xml_write (_index, index);
        fclose (_index);
    }

    if (file) {
        xml_write (file, ds);
        fclose (file);
    } else {
        xml_set (ad->parms, "error", "Couldn't open file for writing.");
        return (XML *) 0;
    }

    return ds;
}
void xmlmethods(int nlhs, mxArray* plhs[],
                int nrhs, const mxArray* prhs[])
{
    int j, m, iok = 0;
    char* file, *key, *val, *nm;
    int job = getInt(prhs[1]);
    int i = getInt(prhs[2]);

    // Check for proper number of arguments
    if (!nargs_ok(job,nrhs-1)) {
        mexErrMsgTxt("Wrong number of inputs.");
        return;
    } else if (nlhs > 1) {
        mexErrMsgTxt("Too many output arguments");
    }

    // options that do not return a value
    if (job < 20) {
        switch (job) {
        case 0:
            nm = getString(prhs[3]);
            iok = xml_new(nm);
            break;
        case 1:
            iok = xml_del(i);
            break;
        case 2:
            iok = xml_copy(i);
            break;
        case 4:
            file = getString(prhs[3]);
            iok = xml_build(i, file);
            break;
        case 5:
            key = getString(prhs[3]);
            val = getString(prhs[4]);
            iok = xml_addAttrib(i, key, val);
            break;
        case 6:
            key = getString(prhs[3]);
            iok = xml_child(i, key);
            break;
        case 7:
            m = getInt(prhs[3]);
            iok = xml_child_bynumber(i, m);
            break;
        case 8:
            key = getString(prhs[3]);
            iok = xml_findID(i, key);
            break;
        case 9:
            key = getString(prhs[3]);
            iok = xml_findByName(i, key);
            break;
        case 10:
            iok = xml_nChildren(i);
            break;
        case 11:
            key = getString(prhs[3]);
            val = getString(prhs[4]);
            iok = xml_addChild(i, key, val);
            break;
        case 12:
            key = getString(prhs[3]);
            j = getInt(prhs[4]);
            iok = xml_addChildNode(i, j);
            break;
        case 13:
            file = getString(prhs[3]);
            iok = xml_write(i, file);
            break;
        case 14:
            j = getInt(prhs[3]);
            iok = xml_removeChild(i, j);
            break;
        case 15:
            file = getString(prhs[3]);
            iok = xml_get_XML_File(file, 0);
            break;
        default:
            mexErrMsgTxt("unknown job parameter");
        }
        plhs[0] = mxCreateNumericMatrix(1,1,mxDOUBLE_CLASS,mxREAL);
        double* h = mxGetPr(plhs[0]);
        *h = double(iok);
        if (iok < 0) {
            reportError();
        }
        return;
    }

    // options that return strings
    char* v = (char*)mxCalloc(80, sizeof(char));
    switch (job) {
    case 20:
        // return an attribute
        key = getString(prhs[3]);
        iok = xml_attrib(i, key, v);
        break;
    case 21:
        // return the value of the node
        iok = xml_value(i, v);
        break;
    case 22:
        iok = xml_tag(i, v);
        break;
    default:
        mexErrMsgTxt("unknown job parameter");
    }
    if (iok < 0) {
        plhs[0] = mxCreateNumericMatrix(1,1,mxDOUBLE_CLASS,mxREAL);
        double* h = mxGetPr(plhs[0]);
        *h = double(iok);
        if (iok < 0) {
            reportError();
        }
    } else {
        plhs[0] = mxCreateString(v);
    }
}
Esempio n. 5
0
int main (int argc, char *argv[])
{
   xml=  xml_read(stdin);
   xml_prepend (xml, xml_create("boogida"));
   xml_write (stdout, xml);
}