mirror of
https://github.com/python/cpython.git
synced 2025-08-03 16:39:00 +00:00
Renamed, but not throughly tested.
This commit is contained in:
parent
4a9ac0612d
commit
a2a8b27221
1 changed files with 233 additions and 224 deletions
|
@ -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);
|
||||
return Py_BuildValue("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},
|
||||
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);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue