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; }
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); }
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); } }
int main (int argc, char *argv[]) { xml= xml_read(stdin); xml_prepend (xml, xml_create("boogida")); xml_write (stdout, xml); }