diff options
-rw-r--r-- | Modules/almodule.c | 461 |
1 files changed, 235 insertions, 226 deletions
diff --git a/Modules/almodule.c b/Modules/almodule.c index 6972e82..7990020 100644 --- a/Modules/almodule.c +++ b/Modules/almodule.c @@ -43,165 +43,161 @@ PERFORMANCE OF THIS SOFTWARE. #endif -#include "allobjects.h" -#include "import.h" -#include "modsupport.h" -#include "structmember.h" -#include "ceval.h" - +#include "Python.h" /* Config objects */ typedef struct { - OB_HEAD + PyObject_HEAD ALconfig ob_config; } configobject; -staticforward typeobject Configtype; +staticforward PyTypeObject Configtype; #define is_configobject(v) ((v)->ob_type == &Configtype) /* Forward */ -static int getconfigarg PROTO((object *, ALconfig *)); -static int getstrstrconfigarg PROTO((object *, char **, char **, ALconfig *)); +static int getconfigarg Py_PROTO((PyObject *, ALconfig *)); +static int getstrstrconfigarg Py_PROTO((PyObject *, char **, char **, + ALconfig *)); -static object * +static PyObject * setConfig (self, args, func) configobject *self; - object *args; + PyObject *args; void (*func)(ALconfig, long); { long par; - if (!getlongarg (args, &par)) return NULL; + if (!PyArg_Parse (args, "l", &par)) return NULL; (*func) (self-> ob_config, par); - INCREF (None); - return None; + Py_INCREF (Py_None); + return Py_None; } -static object * +static PyObject * getConfig (self, args, func) configobject *self; - object *args; + PyObject *args; long (*func)(ALconfig); { long par; - if (!getnoarg (args)) return NULL; + if (!PyArg_NoArgs (args)) return NULL; par = (*func) (self-> ob_config); - return newintobject (par); + return PyInt_FromLong (par); } -static object * +static PyObject * al_setqueuesize (self, args) configobject *self; - object *args; + PyObject *args; { return (setConfig (self, args, ALsetqueuesize)); } -static object * +static PyObject * al_getqueuesize (self, args) configobject *self; - object *args; + PyObject *args; { return (getConfig (self, args, ALgetqueuesize)); } -static object * +static PyObject * al_setwidth (self, args) configobject *self; - object *args; + PyObject *args; { return (setConfig (self, args, ALsetwidth)); } -static object * +static PyObject * al_getwidth (self, args) configobject *self; - object *args; + PyObject *args; { return (getConfig (self, args, ALgetwidth)); } -static object * +static PyObject * al_getchannels (self, args) configobject *self; - object *args; + PyObject *args; { return (getConfig (self, args, ALgetchannels)); } -static object * +static PyObject * al_setchannels (self, args) configobject *self; - object *args; + PyObject *args; { return (setConfig (self, args, ALsetchannels)); } #ifdef AL_405 -static object * +static PyObject * al_getsampfmt (self, args) configobject *self; - object *args; + PyObject *args; { return (getConfig (self, args, ALgetsampfmt)); } -static object * +static PyObject * al_setsampfmt (self, args) configobject *self; - object *args; + PyObject *args; { return (setConfig (self, args, ALsetsampfmt)); } -static object * +static PyObject * al_getfloatmax(self, args) configobject *self; - object *args; + PyObject *args; { double arg; - if ( !getnoarg(args) ) + if ( !PyArg_NoArgs(args) ) return 0; arg = ALgetfloatmax(self->ob_config); - return newfloatobject(arg); + return PyFloat_FromDouble(arg); } -static object * +static PyObject * al_setfloatmax(self, args) configobject *self; - object *args; + PyObject *args; { double arg; - if ( !getargs(args, "d", &arg) ) + if ( !PyArg_Parse(args, "d", &arg) ) return 0; ALsetfloatmax(self->ob_config, arg); - INCREF(None); - return None; + Py_INCREF(Py_None); + return Py_None; } #endif /* AL_405 */ -static struct methodlist config_methods[] = { - {"getqueuesize", (method)al_getqueuesize}, - {"setqueuesize", (method)al_setqueuesize}, - {"getwidth", (method)al_getwidth}, - {"setwidth", (method)al_setwidth}, - {"getchannels", (method)al_getchannels}, - {"setchannels", (method)al_setchannels}, +static PyMethodDef config_methods[] = { + {"getqueuesize", (PyCFunction)al_getqueuesize}, + {"setqueuesize", (PyCFunction)al_setqueuesize}, + {"getwidth", (PyCFunction)al_getwidth}, + {"setwidth", (PyCFunction)al_setwidth}, + {"getchannels", (PyCFunction)al_getchannels}, + {"setchannels", (PyCFunction)al_setchannels}, #ifdef AL_405 - {"getsampfmt", (method)al_getsampfmt}, - {"setsampfmt", (method)al_setsampfmt}, - {"getfloatmax", (method)al_getfloatmax}, - {"setfloatmax", (method)al_setfloatmax}, + {"getsampfmt", (PyCFunction)al_getsampfmt}, + {"setsampfmt", (PyCFunction)al_setsampfmt}, + {"getfloatmax", (PyCFunction)al_getfloatmax}, + {"setfloatmax", (PyCFunction)al_setfloatmax}, #endif /* AL_405 */ {NULL, NULL} /* sentinel */ }; @@ -211,19 +207,19 @@ config_dealloc(self) configobject *self; { ALfreeconfig(self->ob_config); - DEL(self); + PyMem_DEL(self); } -static object * +static PyObject * config_getattr(self, name) configobject *self; char *name; { - return findmethod(config_methods, (object *)self, name); + return Py_FindMethod(config_methods, (PyObject *)self, name); } -static typeobject Configtype = { - OB_HEAD_INIT(&Typetype) +static PyTypeObject Configtype = { + PyObject_HEAD_INIT(&PyType_Type) 0, /*ob_size*/ "config", /*tp_name*/ sizeof(configobject), /*tp_size*/ @@ -237,36 +233,36 @@ static typeobject Configtype = { 0, /*tp_repr*/ }; -static object * +static PyObject * newconfigobject(config) ALconfig config; { configobject *p; - p = NEWOBJ(configobject, &Configtype); + p = PyObject_NEW(configobject, &Configtype); if (p == NULL) return NULL; p->ob_config = config; - return (object *)p; + return (PyObject *)p; } /* Port objects */ typedef struct { - OB_HEAD + PyObject_HEAD ALport ob_port; } portobject; -staticforward typeobject Porttype; +staticforward PyTypeObject Porttype; #define is_portobject(v) ((v)->ob_type == &Porttype) -static object * +static PyObject * al_closeport (self, args) portobject *self; - object *args; + PyObject *args; { - if (!getnoarg (args)) return NULL; + if (!PyArg_NoArgs (args)) return NULL; if (self->ob_port != NULL) { ALcloseport (self-> ob_port); @@ -274,67 +270,68 @@ al_closeport (self, args) /* XXX Using a closed port may dump core! */ } - INCREF (None); - return None; + Py_INCREF (Py_None); + return Py_None; } -static object * +static PyObject * al_getfd (self, args) portobject *self; - object *args; + PyObject *args; { int fd; - if (!getnoarg (args)) return NULL; + if (!PyArg_NoArgs (args)) return NULL; fd = ALgetfd (self-> ob_port); - return newintobject (fd); + return PyInt_FromLong (fd); } -static object * +static PyObject * al_getfilled (self, args) portobject *self; - object *args; + PyObject *args; { long count; - if (!getnoarg (args)) return NULL; + if (!PyArg_NoArgs (args)) return NULL; count = ALgetfilled (self-> ob_port); - return newintobject (count); + return PyInt_FromLong (count); } -static object * +static PyObject * al_getfillable (self, args) portobject *self; - object *args; + PyObject *args; { long count; - if (!getnoarg (args)) return NULL; + if (!PyArg_NoArgs (args)) return NULL; count = ALgetfillable (self-> ob_port); - return newintobject (count); + return PyInt_FromLong (count); } -static object * +static PyObject * al_readsamps (self, args) portobject *self; - object *args; + PyObject *args; { long count; - object *v; + PyObject *v; ALconfig c; int width; - if (!getlongarg (args, &count)) return NULL; + if (!PyArg_Parse (args, "l", &count)) return NULL; if (count <= 0) { - err_setstr (RuntimeError, "al.readsamps : arg <= 0"); + PyErr_SetString (PyExc_RuntimeError, + "al.readsamps : arg <= 0"); return NULL; } @@ -351,26 +348,26 @@ al_readsamps (self, args) width = ALgetwidth(c); #endif /* AL_405 */ ALfreeconfig(c); - v = newsizedstringobject ((char *)NULL, width * count); + v = PyString_FromStringAndSize ((char *)NULL, width * count); if (v == NULL) return NULL; - BGN_SAVE - ALreadsamps (self-> ob_port, (void *) getstringvalue(v), count); - END_SAVE + Py_BEGIN_ALLOW_THREADS + ALreadsamps (self-> ob_port, (void *) PyString_AsString(v), count); + Py_END_ALLOW_THREADS return (v); } -static object * +static PyObject * al_writesamps (self, args) portobject *self; - object *args; + PyObject *args; { char *buf; int size, width; ALconfig c; - if (!getargs (args, "s#", &buf, &size)) return NULL; + if (!PyArg_Parse (args, "s#", &buf, &size)) return NULL; c = ALgetconfig(self->ob_port); #ifdef AL_405 @@ -385,47 +382,47 @@ al_writesamps (self, args) width = ALgetwidth(c); #endif /* AL_405 */ ALfreeconfig(c); - BGN_SAVE + Py_BEGIN_ALLOW_THREADS ALwritesamps (self-> ob_port, (void *) buf, (long) size / width); - END_SAVE + Py_END_ALLOW_THREADS - INCREF (None); - return None; + Py_INCREF (Py_None); + return Py_None; } -static object * +static PyObject * al_getfillpoint (self, args) portobject *self; - object *args; + PyObject *args; { long count; - if (!getnoarg (args)) return NULL; + if (!PyArg_NoArgs (args)) return NULL; count = ALgetfillpoint (self-> ob_port); - return newintobject (count); + return PyInt_FromLong (count); } -static object * +static PyObject * al_setfillpoint (self, args) portobject *self; - object *args; + PyObject *args; { long count; - if (!getlongarg (args, &count)) return NULL; + if (!PyArg_Parse (args, "l", &count)) return NULL; ALsetfillpoint (self-> ob_port, count); - INCREF (None); - return (None); + Py_INCREF (Py_None); + return (Py_None); } -static object * +static PyObject * al_setconfig (self, args) portobject *self; - object *args; + PyObject *args; { ALconfig config; @@ -433,18 +430,18 @@ al_setconfig (self, args) ALsetconfig (self-> ob_port, config); - INCREF (None); - return (None); + Py_INCREF (Py_None); + return (Py_None); } -static object * +static PyObject * al_getconfig (self, args) portobject *self; - object *args; + PyObject *args; { ALconfig config; - if (!getnoarg (args)) return NULL; + if (!PyArg_NoArgs (args)) return NULL; config = ALgetconfig (self-> ob_port); @@ -452,62 +449,62 @@ al_getconfig (self, args) } #ifdef AL_405 -static object * +static PyObject * al_getstatus (self, args) portobject *self; - object *args; + PyObject *args; { - object *list, *v; + PyObject *list, *v; long *PVbuffer; long length; int i; - if (!getargs(args, "O", &list)) + if (!PyArg_Parse(args, "O", &list)) return NULL; - if (!is_listobject(list)) { - err_badarg(); + if (!PyList_Check(list)) { + PyErr_BadArgument(); return NULL; } - length = getlistsize(list); - PVbuffer = NEW(long, length); + length = PyList_Size(list); + PVbuffer = PyMem_NEW(long, length); if (PVbuffer == NULL) - return err_nomem(); + return PyErr_NoMemory(); for (i = 0; i < length; i++) { - v = getlistitem(list, i); - if (!is_intobject(v)) { - DEL(PVbuffer); - err_badarg(); + v = PyList_GetItem(list, i); + if (!PyInt_Check(v)) { + PyMem_DEL(PVbuffer); + PyErr_BadArgument(); return NULL; } - PVbuffer[i] = getintvalue(v); + PVbuffer[i] = PyInt_AsLong(v); } ALgetstatus(self->ob_port, PVbuffer, length); for (i = 0; i < length; i++) - setlistitem(list, i, newintobject(PVbuffer[i])); + PyList_SetItem(list, i, PyInt_FromLong(PVbuffer[i])); - DEL(PVbuffer); + PyMem_DEL(PVbuffer); - INCREF(None); - return None; + Py_INCREF(Py_None); + return Py_None; } #endif /* AL_405 */ -static struct methodlist port_methods[] = { - {"closeport", (method)al_closeport}, - {"getfd", (method)al_getfd}, - {"fileno", (method)al_getfd}, - {"getfilled", (method)al_getfilled}, - {"getfillable", (method)al_getfillable}, - {"readsamps", (method)al_readsamps}, - {"writesamps", (method)al_writesamps}, - {"setfillpoint", (method)al_setfillpoint}, - {"getfillpoint", (method)al_getfillpoint}, - {"setconfig", (method)al_setconfig}, - {"getconfig", (method)al_getconfig}, +static PyMethodDef port_methods[] = { + {"closeport", (PyCFunction)al_closeport}, + {"getfd", (PyCFunction)al_getfd}, + {"fileno", (PyCFunction)al_getfd}, + {"getfilled", (PyCFunction)al_getfilled}, + {"getfillable", (PyCFunction)al_getfillable}, + {"readsamps", (PyCFunction)al_readsamps}, + {"writesamps", (PyCFunction)al_writesamps}, + {"setfillpoint", (PyCFunction)al_setfillpoint}, + {"getfillpoint", (PyCFunction)al_getfillpoint}, + {"setconfig", (PyCFunction)al_setconfig}, + {"getconfig", (PyCFunction)al_getconfig}, #ifdef AL_405 - {"getstatus", (method)al_getstatus}, + {"getstatus", (PyCFunction)al_getstatus}, #endif /* AL_405 */ {NULL, NULL} /* sentinel */ }; @@ -518,19 +515,19 @@ port_dealloc(p) { if (p->ob_port != NULL) ALcloseport(p->ob_port); - DEL(p); + PyMem_DEL(p); } -static object * +static PyObject * port_getattr(p, name) portobject *p; char *name; { - return findmethod(port_methods, (object *)p, name); + return Py_FindMethod(port_methods, (PyObject *)p, name); } -static typeobject Porttype = { - OB_HEAD_INIT(&Typetype) +static PyTypeObject Porttype = { + PyObject_HEAD_INIT(&PyType_Type) 0, /*ob_size*/ "port", /*tp_name*/ sizeof(portobject), /*tp_size*/ @@ -544,37 +541,37 @@ static typeobject Porttype = { 0, /*tp_repr*/ }; -static object * +static PyObject * newportobject(port) ALport port; { portobject *p; - p = NEWOBJ(portobject, &Porttype); + p = PyObject_NEW(portobject, &Porttype); if (p == NULL) return NULL; p->ob_port = port; - return (object *)p; + return (PyObject *)p; } /* the module al */ -static object * +static PyObject * al_openport (self, args) - object *self, *args; + PyObject *self, *args; { char *name, *dir; ALport port; ALconfig config = NULL; int size; - if (args == NULL || !is_tupleobject(args)) { - err_badarg (); + if (args == NULL || !PyTuple_Check(args)) { + PyErr_BadArgument (); return NULL; } - size = gettuplesize(args); + size = PyTuple_Size(args); if (size == 2) { - if (!getargs (args, "(ss)", &name, &dir)) + if (!PyArg_Parse (args, "(ss)", &name, &dir)) return NULL; } else if (size == 3) { @@ -582,188 +579,189 @@ al_openport (self, args) return NULL; } else { - err_badarg (); + PyErr_BadArgument (); return NULL; } port = ALopenport(name, dir, config); if (port == NULL) { - err_errno(RuntimeError); + PyErr_SetFromErrno(PyExc_RuntimeError); return NULL; } return newportobject (port); } -static object * +static PyObject * al_newconfig (self, args) - object *self, *args; + PyObject *self, *args; { ALconfig config; - if (!getnoarg (args)) return NULL; + if (!PyArg_NoArgs (args)) return NULL; config = ALnewconfig (); if (config == NULL) { - err_errno(RuntimeError); + PyErr_SetFromErrno(PyExc_RuntimeError); return NULL; } return newconfigobject (config); } -static object * +static PyObject * al_queryparams(self, args) - object *self, *args; + PyObject *self, *args; { long device; long length; long *PVbuffer; long PVdummy[2]; - object *v; + PyObject *v; - if (!getlongarg (args, &device)) + if (!PyArg_Parse (args, "l", &device)) return NULL; length = ALqueryparams(device, PVdummy, 2L); - PVbuffer = NEW(long, length); + PVbuffer = PyMem_NEW(long, length); if (PVbuffer == NULL) - return err_nomem(); + return PyErr_NoMemory(); (void) ALqueryparams(device, PVbuffer, length); - v = newlistobject((int)length); + v = PyList_New((int)length); if (v != NULL) { int i; for (i = 0; i < length; i++) - setlistitem(v, i, newintobject(PVbuffer[i])); + PyList_SetItem(v, i, PyInt_FromLong(PVbuffer[i])); } - DEL(PVbuffer); + PyMem_DEL(PVbuffer); return v; } -static object * +static PyObject * doParams(args, func, modified) - object *args; + PyObject *args; void (*func)(long, long *, long); int modified; { long device; - object *list, *v; + PyObject *list, *v; long *PVbuffer; long length; int i; - if (!getargs(args, "(lO)", &device, &list)) + if (!PyArg_Parse(args, "(lO)", &device, &list)) return NULL; - if (!is_listobject(list)) { - err_badarg(); + if (!PyList_Check(list)) { + PyErr_BadArgument(); return NULL; } - length = getlistsize(list); - PVbuffer = NEW(long, length); + length = PyList_Size(list); + PVbuffer = PyMem_NEW(long, length); if (PVbuffer == NULL) - return err_nomem(); + return PyErr_NoMemory(); for (i = 0; i < length; i++) { - v = getlistitem(list, i); - if (!is_intobject(v)) { - DEL(PVbuffer); - err_badarg(); + v = PyList_GetItem(list, i); + if (!PyInt_Check(v)) { + PyMem_DEL(PVbuffer); + PyErr_BadArgument(); return NULL; } - PVbuffer[i] = getintvalue(v); + PVbuffer[i] = PyInt_AsLong(v); } (*func)(device, PVbuffer, length); if (modified) { for (i = 0; i < length; i++) - setlistitem(list, i, newintobject(PVbuffer[i])); + PyList_SetItem(list, i, PyInt_FromLong(PVbuffer[i])); } - DEL(PVbuffer); + PyMem_DEL(PVbuffer); - INCREF(None); - return None; + Py_INCREF(Py_None); + return Py_None; } -static object * +static PyObject * al_getparams(self, args) - object *self, *args; + PyObject *self, *args; { return doParams(args, ALgetparams, 1); } -static object * +static PyObject * al_setparams(self, args) - object *self, *args; + PyObject *self, *args; { return doParams(args, ALsetparams, 0); } -static object * +static PyObject * al_getname(self, args) - object *self, *args; + PyObject *self, *args; { long device, descriptor; char *name; - if (!getargs(args, "(ll)", &device, &descriptor)) + if (!PyArg_Parse(args, "(ll)", &device, &descriptor)) return NULL; name = ALgetname(device, descriptor); if (name == NULL) { - err_setstr(ValueError, "al.getname: bad descriptor"); + PyErr_SetString(PyExc_ValueError, + "al.getname: bad descriptor"); return NULL; } - return newstringobject(name); + return PyString_FromString(name); } -static object * +static PyObject * al_getdefault(self, args) - object *self, *args; + PyObject *self, *args; { long device, descriptor, value; - if (!getargs(args, "(ll)", &device, &descriptor)) + if (!PyArg_Parse(args, "(ll)", &device, &descriptor)) return NULL; value = ALgetdefault(device, descriptor); - return newlongobject(value); + return PyLong_FromLong(value); } -static object * +static PyObject * al_getminmax(self, args) - object *self, *args; + PyObject *self, *args; { long device, descriptor, min, max; - if (!getargs(args, "(ll)", &device, &descriptor)) + if (!PyArg_Parse(args, "(ll)", &device, &descriptor)) return NULL; min = -1; max = -1; ALgetminmax(device, descriptor, &min, &max); - return mkvalue("ll", min, max); -} - -static struct methodlist al_methods[] = { - {"openport", (method)al_openport}, - {"newconfig", (method)al_newconfig}, - {"queryparams", (method)al_queryparams}, - {"getparams", (method)al_getparams}, - {"setparams", (method)al_setparams}, - {"getname", (method)al_getname}, - {"getdefault", (method)al_getdefault}, - {"getminmax", (method)al_getminmax}, + return Py_BuildValue("ll", min, max); +} + +static PyMethodDef al_methods[] = { + {"openport", (PyCFunction)al_openport}, + {"newconfig", (PyCFunction)al_newconfig}, + {"queryparams", (PyCFunction)al_queryparams}, + {"getparams", (PyCFunction)al_getparams}, + {"setparams", (PyCFunction)al_setparams}, + {"getname", (PyCFunction)al_getname}, + {"getdefault", (PyCFunction)al_getdefault}, + {"getminmax", (PyCFunction)al_getminmax}, {NULL, NULL} /* sentinel */ }; void inital() { - initmodule("al", al_methods); + Py_InitModule("al", al_methods); } static int getconfigarg(o, conf) - object *o; + PyObject *o; ALconfig *conf; { if (o == NULL || !is_configobject(o)) - return err_badarg (); + return PyErr_BadArgument (); *conf = ((configobject *) o) -> ob_config; @@ -772,11 +770,22 @@ getconfigarg(o, conf) static int getstrstrconfigarg(v, a, b, c) - object *v; + PyObject *v; char **a; char **b; ALconfig *c; { - object *o; - return getargs(v, "(ssO)", a, b, &o) && getconfigarg(o, c); + PyObject *o; + return PyArg_Parse(v, "(ssO)", a, b, &o) && getconfigarg(o, c); } + + + + + + + + + + + |