
static PyObject*
py_xml_new(PyObject* self, PyObject* args)
{
    char* nm;
    if (!PyArg_ParseTuple(args, "s:xml_new", &nm)) {
        return NULL;
    }
    int n = xml_new(nm);
    PyObject* pn = Py_BuildValue("i",n);
    return pn;
}

static PyObject*
py_xml_get_XML_File(PyObject* self, PyObject* args)
{
    char* file;
    int debug;
    if (!PyArg_ParseTuple(args, "si:xml_get_XML_File", &file, &debug)) {
        return NULL;
    }
    int n = xml_get_XML_File(file, debug);
    if (n < 0) {
        return reportError(n);
    }
    PyObject* pn = Py_BuildValue("i",n);
    return pn;
}


static PyObject*
py_xml_del(PyObject* self, PyObject* args)
{
    int n;
    if (!PyArg_ParseTuple(args, "i:xml_del", &n)) {
        return NULL;
    }
    int iok = xml_del(n);
    if (iok < 0) {
        return reportError(iok);
    }
    return Py_BuildValue("i",0);
}

static PyObject*
py_xml_clear(PyObject* self, PyObject* args)
{
    int iok = xml_clear();
    if (iok < 0) {
        return reportError(iok);
    }
    return Py_BuildValue("i",0);
}

static PyObject*
py_xml_attrib(PyObject* self, PyObject* args)
{
    int n;
    char* key;
    if (!PyArg_ParseTuple(args, "is:xml_attrib", &n, &key)) {
        return NULL;
    }
    char* val = new char[81];
    int iok = xml_attrib(n, key, val);
    if (iok < 0) {
        return reportError(iok);
    }
    PyObject* r = Py_BuildValue("s",val);
    delete[] val;
    return r;
}

static PyObject*
py_xml_tag(PyObject* self, PyObject* args)
{
    int n;
    if (!PyArg_ParseTuple(args, "i:xml_tag", &n)) {
        return NULL;
    }
    char* val = new char[81];
    int iok = xml_tag(n, val);
    if (iok < 0) {
        return reportError(iok);
    }
    PyObject* r = Py_BuildValue("s",val);
    delete val;
    return r;
}

static PyObject*
py_xml_value(PyObject* self, PyObject* args)
{
    int n;
    if (!PyArg_ParseTuple(args, "i:xml_value", &n)) {
        return NULL;
    }
    char* val = new char[81];
    int iok = xml_value(n, val);
    if (iok < 0) {
        return reportError(iok);
    }
    PyObject* r = Py_BuildValue("s",val);
    delete val;
    return r;
}

static PyObject*
py_xml_child(PyObject* self, PyObject* args)
{
    int n;
    char* loc;
    if (!PyArg_ParseTuple(args, "is:xml_child", &n, &loc)) {
        return NULL;
    }
    int m = xml_child(n, loc);
    if (m < 0) {
        return reportError(m);
    }
    return Py_BuildValue("i",m);
}

static PyObject*
py_xml_childbynumber(PyObject* self, PyObject* args)
{
    int n, k;
    if (!PyArg_ParseTuple(args, "ii:xml_childbynumber", &n, &k)) {
        return NULL;
    }
    int m = xml_child_bynumber(n, k);
    if (m < 0) {
        return reportError(m);
    }
    return Py_BuildValue("i",m);
}

static PyObject*
py_xml_findID(PyObject* self, PyObject* args)
{
    int n;
    char* id;
    if (!PyArg_ParseTuple(args, "is:xml_findID", &n, &id)) {
        return NULL;
    }
    int m = xml_findID(n, id);
    if (m < 0) {
        return reportError(m);
    }
    return Py_BuildValue("i",m);
}

static PyObject*
py_xml_findByName(PyObject* self, PyObject* args)
{
    int n;
    char* nm;
    if (!PyArg_ParseTuple(args, "is:xml_findID", &n, &nm)) {
        return NULL;
    }
    int m = xml_findByName(n, nm);
    if (m < 0) {
        return reportError(m);
    }
    return Py_BuildValue("i",m);
}

static PyObject*
py_xml_nChildren(PyObject* self, PyObject* args)
{
    int n;
    if (!PyArg_ParseTuple(args, "i:xml_nChildren", &n)) {
        return NULL;
    }
    int m = xml_nChildren(n);
    if (m < 0) {
        return reportError(m);
    }
    return Py_BuildValue("i",m);
}

static PyObject*
py_xml_addChild(PyObject* self, PyObject* args)
{
    int n;
    char* name, *value;
    if (!PyArg_ParseTuple(args, "iss:xml_addChild", &n, &name, &value)) {
        return NULL;
    }
    int m = xml_addChild(n, name, value);
    if (m < 0) {
        return reportError(m);
    }
    return Py_BuildValue("i",m);
}


static PyObject*
py_xml_addChildNode(PyObject* self, PyObject* args)
{
    int n, j;
    if (!PyArg_ParseTuple(args, "ii:xml_addChildNode", &n, &j)) {
        return NULL;
    }
    int m = xml_addChildNode(n, j);
    if (m < 0) {
        return reportError(m);
    }
    return Py_BuildValue("i",m);
}


static PyObject*
py_xml_addAttrib(PyObject* self, PyObject* args)
{
    int n;
    char* name, *value;
    if (!PyArg_ParseTuple(args, "iss:xml_addAttrib", &n, &name, &value)) {
        return NULL;
    }
    int m = xml_addAttrib(n, name, value);
    if (m < 0) {
        return reportError(m);
    }
    return Py_BuildValue("i",m);
}

static PyObject*
py_xml_addComment(PyObject* self, PyObject* args)
{
    int n;
    char* comment;
    if (!PyArg_ParseTuple(args, "is:xml_addComment", &n, &comment)) {
        return NULL;
    }
    int m = xml_addComment(n, comment);
    if (m < 0) {
        return reportError(m);
    }
    return Py_BuildValue("i",m);
}

static PyObject*
py_xml_removeChild(PyObject* self, PyObject* args)
{
    int n, m;
    if (!PyArg_ParseTuple(args, "ii:xml_removeChild", &n, &m)) {
        return NULL;
    }
    int iok = xml_removeChild(n, m);
    if (iok < 0) {
        return reportError(iok);
    }
    return Py_BuildValue("i",iok);
}


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);
}

static PyObject*
py_ctml_getFloatArray(PyObject* self, PyObject* args)
{
    int n;
    int iconv, ia;
    if (!PyArg_ParseTuple(args, "iii", &n, &iconv, &ia)) {
        return NULL;
    }

#ifdef HAS_NUMPY
    npy_intp nia = ia;
    PyArrayObject* a =
        (PyArrayObject*)PyArray_SimpleNew(1, &nia, PyArray_DOUBLE);
#else
    PyArrayObject* a =
        (PyArrayObject*)PyArray_FromDims(1, &ia, PyArray_DOUBLE);
#endif
    double* x = (double*)a->data;
    int iok = ctml_getFloatArray(n, ia, x, iconv);
    if (iok < 0) {
        return reportError(iok);
    }
    return PyArray_Return(a);
}

