diff options
Diffstat (limited to 'Modules/cdmodule.c')
-rw-r--r-- | Modules/cdmodule.c | 551 |
1 files changed, 278 insertions, 273 deletions
diff --git a/Modules/cdmodule.c b/Modules/cdmodule.c index a773e99..3653a03 100644 --- a/Modules/cdmodule.c +++ b/Modules/cdmodule.c @@ -34,117 +34,113 @@ PERFORMANCE OF THIS SOFTWARE. #include <sys/types.h> #include <cdaudio.h> -/* #include <sigfpe.h> */ -#include "allobjects.h" -#include "import.h" -#include "modsupport.h" -#include "ceval.h" +#include "Python.h" #define NCALLBACKS 8 typedef struct { - OB_HEAD + PyObject_HEAD CDPLAYER *ob_cdplayer; } cdplayerobject; -static object *CdError; /* exception cd.error */ +static PyObject *CdError; /* exception cd.error */ -static object * +static PyObject * CD_allowremoval(self, args) cdplayerobject *self; - object *args; + PyObject *args; { - if (!newgetargs(args, "")) + if (!PyArg_ParseTuple(args, "")) return NULL; CDallowremoval(self->ob_cdplayer); - INCREF(None); - return None; + Py_INCREF(Py_None); + return Py_None; } -static object * +static PyObject * CD_preventremoval(self, args) cdplayerobject *self; - object *args; + PyObject *args; { - if (!newgetargs(args, "")) + if (!PyArg_ParseTuple(args, "")) return NULL; CDpreventremoval(self->ob_cdplayer); - INCREF(None); - return None; + Py_INCREF(Py_None); + return Py_None; } -static object * +static PyObject * CD_bestreadsize(self, args) cdplayerobject *self; - object *args; + PyObject *args; { - if (!newgetargs(args, "")) + if (!PyArg_ParseTuple(args, "")) return NULL; - return newintobject((long) CDbestreadsize(self->ob_cdplayer)); + return PyInt_FromLong((long) CDbestreadsize(self->ob_cdplayer)); } -static object * +static PyObject * CD_close(self, args) cdplayerobject *self; - object *args; + PyObject *args; { - if (!newgetargs(args, "")) + if (!PyArg_ParseTuple(args, "")) return NULL; if (!CDclose(self->ob_cdplayer)) { - err_errno(CdError); /* XXX - ??? */ + PyErr_SetFromErrno(CdError); /* XXX - ??? */ return NULL; } self->ob_cdplayer = NULL; - INCREF(None); - return None; + Py_INCREF(Py_None); + return Py_None; } -static object * +static PyObject * CD_eject(self, args) cdplayerobject *self; - object *args; + PyObject *args; { CDSTATUS status; - if (!newgetargs(args, "")) + if (!PyArg_ParseTuple(args, "")) return NULL; if (!CDeject(self->ob_cdplayer)) { if (CDgetstatus(self->ob_cdplayer, &status) && status.state == CD_NODISC) - err_setstr(CdError, "no disc in player"); + PyErr_SetString(CdError, "no disc in player"); else - err_setstr(CdError, "eject failed"); + PyErr_SetString(CdError, "eject failed"); return NULL; } - INCREF(None); - return None; + Py_INCREF(Py_None); + return Py_None; } -static object * +static PyObject * CD_getstatus(self, args) cdplayerobject *self; - object *args; + PyObject *args; { CDSTATUS status; - if (!newgetargs(args, "")) + if (!PyArg_ParseTuple(args, "")) return NULL; if (!CDgetstatus(self->ob_cdplayer, &status)) { - err_errno(CdError); /* XXX - ??? */ + PyErr_SetFromErrno(CdError); /* XXX - ??? */ return NULL; } - return mkvalue("(ii(iii)(iii)(iii)iiii)", status.state, + return Py_BuildValue("(ii(iii)(iii)(iii)iiii)", status.state, status.track, status.min, status.sec, status.frame, status.abs_min, status.abs_sec, status.abs_frame, status.total_min, status.total_sec, status.total_frame, @@ -152,294 +148,296 @@ CD_getstatus(self, args) status.cur_block); } -static object * +static PyObject * CD_gettrackinfo(self, args) cdplayerobject *self; - object *args; + PyObject *args; { int track; CDTRACKINFO info; CDSTATUS status; - if (!newgetargs(args, "i", &track)) + if (!PyArg_ParseTuple(args, "i", &track)) return NULL; if (!CDgettrackinfo(self->ob_cdplayer, track, &info)) { if (CDgetstatus(self->ob_cdplayer, &status) && status.state == CD_NODISC) - err_setstr(CdError, "no disc in player"); + PyErr_SetString(CdError, "no disc in player"); else - err_setstr(CdError, "gettrackinfo failed"); + PyErr_SetString(CdError, "gettrackinfo failed"); return NULL; } - return mkvalue("((iii)(iii))", + return Py_BuildValue("((iii)(iii))", info.start_min, info.start_sec, info.start_frame, info.total_min, info.total_sec, info.total_frame); } -static object * +static PyObject * CD_msftoblock(self, args) cdplayerobject *self; - object *args; + PyObject *args; { int min, sec, frame; - if (!newgetargs(args, "iii", &min, &sec, &frame)) + if (!PyArg_ParseTuple(args, "iii", &min, &sec, &frame)) return NULL; - return newintobject((long) CDmsftoblock(self->ob_cdplayer, + return PyInt_FromLong((long) CDmsftoblock(self->ob_cdplayer, min, sec, frame)); } -static object * +static PyObject * CD_play(self, args) cdplayerobject *self; - object *args; + PyObject *args; { int start, play; CDSTATUS status; - if (!newgetargs(args, "ii", &start, &play)) + if (!PyArg_ParseTuple(args, "ii", &start, &play)) return NULL; if (!CDplay(self->ob_cdplayer, start, play)) { if (CDgetstatus(self->ob_cdplayer, &status) && status.state == CD_NODISC) - err_setstr(CdError, "no disc in player"); + PyErr_SetString(CdError, "no disc in player"); else - err_setstr(CdError, "play failed"); + PyErr_SetString(CdError, "play failed"); return NULL; } - INCREF(None); - return None; + Py_INCREF(Py_None); + return Py_None; } -static object * +static PyObject * CD_playabs(self, args) cdplayerobject *self; - object *args; + PyObject *args; { int min, sec, frame, play; CDSTATUS status; - if (!newgetargs(args, "iiii", &min, &sec, &frame, &play)) + if (!PyArg_ParseTuple(args, "iiii", &min, &sec, &frame, &play)) return NULL; if (!CDplayabs(self->ob_cdplayer, min, sec, frame, play)) { if (CDgetstatus(self->ob_cdplayer, &status) && status.state == CD_NODISC) - err_setstr(CdError, "no disc in player"); + PyErr_SetString(CdError, "no disc in player"); else - err_setstr(CdError, "playabs failed"); + PyErr_SetString(CdError, "playabs failed"); return NULL; } - INCREF(None); - return None; + Py_INCREF(Py_None); + return Py_None; } -static object * +static PyObject * CD_playtrack(self, args) cdplayerobject *self; - object *args; + PyObject *args; { int start, play; CDSTATUS status; - if (!newgetargs(args, "ii", &start, &play)) + if (!PyArg_ParseTuple(args, "ii", &start, &play)) return NULL; if (!CDplaytrack(self->ob_cdplayer, start, play)) { if (CDgetstatus(self->ob_cdplayer, &status) && status.state == CD_NODISC) - err_setstr(CdError, "no disc in player"); + PyErr_SetString(CdError, "no disc in player"); else - err_setstr(CdError, "playtrack failed"); + PyErr_SetString(CdError, "playtrack failed"); return NULL; } - INCREF(None); - return None; + Py_INCREF(Py_None); + return Py_None; } -static object * +static PyObject * CD_playtrackabs(self, args) cdplayerobject *self; - object *args; + PyObject *args; { int track, min, sec, frame, play; CDSTATUS status; - if (!newgetargs(args, "iiiii", &track, &min, &sec, &frame, &play)) + if (!PyArg_ParseTuple(args, "iiiii", &track, &min, &sec, + &frame, &play)) return NULL; if (!CDplaytrackabs(self->ob_cdplayer, track, min, sec, frame, play)) { if (CDgetstatus(self->ob_cdplayer, &status) && status.state == CD_NODISC) - err_setstr(CdError, "no disc in player"); + PyErr_SetString(CdError, "no disc in player"); else - err_setstr(CdError, "playtrackabs failed"); + PyErr_SetString(CdError, "playtrackabs failed"); return NULL; } - INCREF(None); - return None; + Py_INCREF(Py_None); + return Py_None; } -static object * +static PyObject * CD_readda(self, args) cdplayerobject *self; - object *args; + PyObject *args; { int numframes, n; - object *result; + PyObject *result; - if (!newgetargs(args, "i", &numframes)) + if (!PyArg_ParseTuple(args, "i", &numframes)) return NULL; - result = newsizedstringobject(NULL, numframes * sizeof(CDFRAME)); + result = PyString_FromStringAndSize(NULL, numframes * sizeof(CDFRAME)); if (result == NULL) return NULL; - n = CDreadda(self->ob_cdplayer, (CDFRAME *) getstringvalue(result), numframes); + n = CDreadda(self->ob_cdplayer, + (CDFRAME *) PyString_AsString(result), numframes); if (n == -1) { - DECREF(result); - err_errno(CdError); + Py_DECREF(result); + PyErr_SetFromErrno(CdError); return NULL; } if (n < numframes) - if (resizestring(&result, n * sizeof(CDFRAME))) + if (_PyString_Resize(&result, n * sizeof(CDFRAME))) return NULL; return result; } -static object * +static PyObject * CD_seek(self, args) cdplayerobject *self; - object *args; + PyObject *args; { int min, sec, frame; - long block; + long PyTryBlock; - if (!newgetargs(args, "iii", &min, &sec, &frame)) + if (!PyArg_ParseTuple(args, "iii", &min, &sec, &frame)) return NULL; - block = CDseek(self->ob_cdplayer, min, sec, frame); - if (block == -1) { - err_errno(CdError); + PyTryBlock = CDseek(self->ob_cdplayer, min, sec, frame); + if (PyTryBlock == -1) { + PyErr_SetFromErrno(CdError); return NULL; } - return newintobject(block); + return PyInt_FromLong(PyTryBlock); } -static object * +static PyObject * CD_seektrack(self, args) cdplayerobject *self; - object *args; + PyObject *args; { int track; - long block; + long PyTryBlock; - if (!newgetargs(args, "i", &track)) + if (!PyArg_ParseTuple(args, "i", &track)) return NULL; - block = CDseektrack(self->ob_cdplayer, track); - if (block == -1) { - err_errno(CdError); + PyTryBlock = CDseektrack(self->ob_cdplayer, track); + if (PyTryBlock == -1) { + PyErr_SetFromErrno(CdError); return NULL; } - return newintobject(block); + return PyInt_FromLong(PyTryBlock); } -static object * +static PyObject * CD_seekblock(self, args) cdplayerobject *self; - object *args; + PyObject *args; { - unsigned long block; + unsigned long PyTryBlock; - if (!newgetargs(args, "l", &block)) + if (!PyArg_ParseTuple(args, "l", &PyTryBlock)) return NULL; - block = CDseekblock(self->ob_cdplayer, block); - if (block == (unsigned long) -1) { - err_errno(CdError); + PyTryBlock = CDseekblock(self->ob_cdplayer, PyTryBlock); + if (PyTryBlock == (unsigned long) -1) { + PyErr_SetFromErrno(CdError); return NULL; } - return newintobject(block); + return PyInt_FromLong(PyTryBlock); } -static object * +static PyObject * CD_stop(self, args) cdplayerobject *self; - object *args; + PyObject *args; { CDSTATUS status; - if (!newgetargs(args, "")) + if (!PyArg_ParseTuple(args, "")) return NULL; if (!CDstop(self->ob_cdplayer)) { if (CDgetstatus(self->ob_cdplayer, &status) && status.state == CD_NODISC) - err_setstr(CdError, "no disc in player"); + PyErr_SetString(CdError, "no disc in player"); else - err_setstr(CdError, "stop failed"); + PyErr_SetString(CdError, "stop failed"); return NULL; } - INCREF(None); - return None; + Py_INCREF(Py_None); + return Py_None; } -static object * +static PyObject * CD_togglepause(self, args) cdplayerobject *self; - object *args; + PyObject *args; { CDSTATUS status; - if (!newgetargs(args, "")) + if (!PyArg_ParseTuple(args, "")) return NULL; if (!CDtogglepause(self->ob_cdplayer)) { if (CDgetstatus(self->ob_cdplayer, &status) && status.state == CD_NODISC) - err_setstr(CdError, "no disc in player"); + PyErr_SetString(CdError, "no disc in player"); else - err_setstr(CdError, "togglepause failed"); + PyErr_SetString(CdError, "togglepause failed"); return NULL; } - INCREF(None); - return None; + Py_INCREF(Py_None); + return Py_None; } -static struct methodlist cdplayer_methods[] = { - {"allowremoval", (method)CD_allowremoval, 1}, - {"bestreadsize", (method)CD_bestreadsize, 1}, - {"close", (method)CD_close, 1}, - {"eject", (method)CD_eject, 1}, - {"getstatus", (method)CD_getstatus, 1}, - {"gettrackinfo", (method)CD_gettrackinfo, 1}, - {"msftoblock", (method)CD_msftoblock, 1}, - {"play", (method)CD_play, 1}, - {"playabs", (method)CD_playabs, 1}, - {"playtrack", (method)CD_playtrack, 1}, - {"playtrackabs", (method)CD_playtrackabs, 1}, - {"preventremoval", (method)CD_preventremoval, 1}, - {"readda", (method)CD_readda, 1}, - {"seek", (method)CD_seek, 1}, - {"seekblock", (method)CD_seekblock, 1}, - {"seektrack", (method)CD_seektrack, 1}, - {"stop", (method)CD_stop, 1}, - {"togglepause", (method)CD_togglepause, 1}, +static PyMethodDef cdplayer_methods[] = { + {"allowremoval", (PyCFunction)CD_allowremoval, 1}, + {"bestreadsize", (PyCFunction)CD_bestreadsize, 1}, + {"close", (PyCFunction)CD_close, 1}, + {"eject", (PyCFunction)CD_eject, 1}, + {"getstatus", (PyCFunction)CD_getstatus, 1}, + {"gettrackinfo", (PyCFunction)CD_gettrackinfo, 1}, + {"msftoblock", (PyCFunction)CD_msftoblock, 1}, + {"play", (PyCFunction)CD_play, 1}, + {"playabs", (PyCFunction)CD_playabs, 1}, + {"playtrack", (PyCFunction)CD_playtrack, 1}, + {"playtrackabs", (PyCFunction)CD_playtrackabs, 1}, + {"preventremoval", (PyCFunction)CD_preventremoval, 1}, + {"readda", (PyCFunction)CD_readda, 1}, + {"seek", (PyCFunction)CD_seek, 1}, + {"seekblock", (PyCFunction)CD_seekblock, 1}, + {"seektrack", (PyCFunction)CD_seektrack, 1}, + {"stop", (PyCFunction)CD_stop, 1}, + {"togglepause", (PyCFunction)CD_togglepause, 1}, {NULL, NULL} /* sentinel */ }; @@ -449,23 +447,23 @@ cdplayer_dealloc(self) { if (self->ob_cdplayer != NULL) CDclose(self->ob_cdplayer); - DEL(self); + PyMem_DEL(self); } -static object * +static PyObject * cdplayer_getattr(self, name) cdplayerobject *self; char *name; { if (self->ob_cdplayer == NULL) { - err_setstr(RuntimeError, "no player active"); + PyErr_SetString(PyExc_RuntimeError, "no player active"); return NULL; } - return findmethod(cdplayer_methods, (object *)self, name); + return Py_FindMethod(cdplayer_methods, (PyObject *)self, name); } -typeobject CdPlayertype = { - OB_HEAD_INIT(&Typetype) +PyTypeObject CdPlayertype = { + PyObject_HEAD_INIT(&PyType_Type) 0, /*ob_size*/ "cdplayer", /*tp_name*/ sizeof(cdplayerobject), /*tp_size*/ @@ -479,22 +477,22 @@ typeobject CdPlayertype = { 0, /*tp_repr*/ }; -static object * +static PyObject * newcdplayerobject(cdp) CDPLAYER *cdp; { cdplayerobject *p; - p = NEWOBJ(cdplayerobject, &CdPlayertype); + p = PyObject_NEW(cdplayerobject, &CdPlayertype); if (p == NULL) return NULL; p->ob_cdplayer = cdp; - return (object *) p; + return (PyObject *) p; } -static object * +static PyObject * CD_open(self, args) - object *self, *args; + PyObject *self, *args; { char *dev, *direction; CDPLAYER *cdp; @@ -505,12 +503,12 @@ CD_open(self, args) */ dev = NULL; direction = "r"; - if (!newgetargs(args, "|zs", &dev, &direction)) + if (!PyArg_ParseTuple(args, "|zs", &dev, &direction)) return NULL; cdp = CDopen(dev, direction); if (cdp == NULL) { - err_errno(CdError); + PyErr_SetFromErrno(CdError); return NULL; } @@ -518,11 +516,11 @@ CD_open(self, args) } typedef struct { - OB_HEAD + PyObject_HEAD CDPARSER *ob_cdparser; struct { - object *ob_cdcallback; - object *ob_cdcallbackarg; + PyObject *ob_cdcallback; + PyObject *ob_cdcallbackarg; } ob_cdcallbacks[NCALLBACKS]; } cdparserobject; @@ -532,45 +530,45 @@ CD_callback(arg, type, data) CDDATATYPES type; void *data; { - object *result, *args, *v = NULL; + PyObject *result, *args, *v = NULL; char *p; int i; cdparserobject *self; self = (cdparserobject *) arg; - args = newtupleobject(3); + args = PyTuple_New(3); if (args == NULL) return; - INCREF(self->ob_cdcallbacks[type].ob_cdcallbackarg); - settupleitem(args, 0, self->ob_cdcallbacks[type].ob_cdcallbackarg); - settupleitem(args, 1, newintobject((long) type)); + Py_INCREF(self->ob_cdcallbacks[type].ob_cdcallbackarg); + PyTuple_SetItem(args, 0, self->ob_cdcallbacks[type].ob_cdcallbackarg); + PyTuple_SetItem(args, 1, PyInt_FromLong((long) type)); switch (type) { case cd_audio: - v = newsizedstringobject(data, CDDA_DATASIZE); + v = PyString_FromStringAndSize(data, CDDA_DATASIZE); break; case cd_pnum: case cd_index: - v = newintobject(((CDPROGNUM *) data)->value); + v = PyInt_FromLong(((CDPROGNUM *) data)->value); break; case cd_ptime: case cd_atime: #define ptr ((struct cdtimecode *) data) - v = mkvalue("(iii)", + v = Py_BuildValue("(iii)", ptr->mhi * 10 + ptr->mlo, ptr->shi * 10 + ptr->slo, ptr->fhi * 10 + ptr->flo); #undef ptr break; case cd_catalog: - v = newsizedstringobject(NULL, 13); - p = getstringvalue(v); + v = PyString_FromStringAndSize(NULL, 13); + p = PyString_AsString(v); for (i = 0; i < 13; i++) *p++ = ((char *) data)[i] + '0'; break; case cd_ident: #define ptr ((struct cdident *) data) - v = newsizedstringobject(NULL, 12); - p = getstringvalue(v); + v = PyString_FromStringAndSize(NULL, 12); + p = PyString_AsString(v); CDsbtoa(p, ptr->country, 2); p += 2; CDsbtoa(p, ptr->owner, 3); @@ -585,28 +583,29 @@ CD_callback(arg, type, data) #undef ptr break; case cd_control: - v = newintobject((long) *((unchar *) data)); + v = PyInt_FromLong((long) *((unchar *) data)); break; } - settupleitem(args, 2, v); - if (err_occurred()) { - DECREF(args); + PyTuple_SetItem(args, 2, v); + if (PyErr_Occurred()) { + Py_DECREF(args); return; } - result = call_object(self->ob_cdcallbacks[type].ob_cdcallback, args); - DECREF(args); - XDECREF(result); + result = PyEval_CallObject(self->ob_cdcallbacks[type].ob_cdcallback, + args); + Py_DECREF(args); + Py_XDECREF(result); } -static object * +static PyObject * CD_deleteparser(self, args) cdparserobject *self; - object *args; + PyObject *args; { int i; - if (!newgetargs(args, "")) + if (!PyArg_ParseTuple(args, "")) return NULL; CDdeleteparser(self->ob_cdparser); @@ -614,30 +613,30 @@ CD_deleteparser(self, args) /* no sense in keeping the callbacks, so remove them */ for (i = 0; i < NCALLBACKS; i++) { - XDECREF(self->ob_cdcallbacks[i].ob_cdcallback); + Py_XDECREF(self->ob_cdcallbacks[i].ob_cdcallback); self->ob_cdcallbacks[i].ob_cdcallback = NULL; - XDECREF(self->ob_cdcallbacks[i].ob_cdcallbackarg); + Py_XDECREF(self->ob_cdcallbacks[i].ob_cdcallbackarg); self->ob_cdcallbacks[i].ob_cdcallbackarg = NULL; } - INCREF(None); - return None; + Py_INCREF(Py_None); + return Py_None; } -static object * +static PyObject * CD_parseframe(self, args) cdparserobject *self; - object *args; + PyObject *args; { char *cdfp; int length; CDFRAME *p; - if (!newgetargs(args, "s#", &cdfp, &length)) + if (!PyArg_ParseTuple(args, "s#", &cdfp, &length)) return NULL; if (length % sizeof(CDFRAME) != 0) { - err_setstr(TypeError, "bad length"); + PyErr_SetString(PyExc_TypeError, "bad length"); return NULL; } @@ -646,102 +645,106 @@ CD_parseframe(self, args) CDparseframe(self->ob_cdparser, p); length -= sizeof(CDFRAME); p++; - if (err_occurred()) + if (PyErr_Occurred()) return NULL; } - INCREF(None); - return None; + Py_INCREF(Py_None); + return Py_None; } -static object * +static PyObject * CD_removecallback(self, args) cdparserobject *self; - object *args; + PyObject *args; { int type; - if (!newgetargs(args, "i", &type)) + if (!PyArg_ParseTuple(args, "i", &type)) return NULL; if (type < 0 || type >= NCALLBACKS) { - err_setstr(TypeError, "bad type"); + PyErr_SetString(PyExc_TypeError, "bad type"); return NULL; } CDremovecallback(self->ob_cdparser, (CDDATATYPES) type); - XDECREF(self->ob_cdcallbacks[type].ob_cdcallback); + Py_XDECREF(self->ob_cdcallbacks[type].ob_cdcallback); self->ob_cdcallbacks[type].ob_cdcallback = NULL; - XDECREF(self->ob_cdcallbacks[type].ob_cdcallbackarg); + Py_XDECREF(self->ob_cdcallbacks[type].ob_cdcallbackarg); self->ob_cdcallbacks[type].ob_cdcallbackarg = NULL; - INCREF(None); - return None; + Py_INCREF(Py_None); + return Py_None; } -static object * +static PyObject * CD_resetparser(self, args) cdparserobject *self; - object *args; + PyObject *args; { - if (!newgetargs(args, "")) + if (!PyArg_ParseTuple(args, "")) return NULL; CDresetparser(self->ob_cdparser); - INCREF(None); - return None; + Py_INCREF(Py_None); + return Py_None; } -static object * +static PyObject * CD_addcallback(self, args) cdparserobject *self; - object *args; + PyObject *args; { int type; - object *func, *funcarg; + PyObject *func, *funcarg; /* XXX - more work here */ - if (!newgetargs(args, "iOO", &type, &func, &funcarg)) + if (!PyArg_ParseTuple(args, "iOO", &type, &func, &funcarg)) return NULL; if (type < 0 || type >= NCALLBACKS) { - err_setstr(TypeError, "argument out of range"); + PyErr_SetString(PyExc_TypeError, "argument out of range"); return NULL; } #ifdef CDsetcallback - CDaddcallback(self->ob_cdparser, (CDDATATYPES) type, CD_callback, (void *) self); + CDaddcallback(self->ob_cdparser, (CDDATATYPES) type, CD_callback, + (void *) self); #else - CDsetcallback(self->ob_cdparser, (CDDATATYPES) type, CD_callback, (void *) self); + CDsetcallback(self->ob_cdparser, (CDDATATYPES) type, CD_callback, + (void *) self); #endif - XDECREF(self->ob_cdcallbacks[type].ob_cdcallback); - INCREF(func); + Py_XDECREF(self->ob_cdcallbacks[type].ob_cdcallback); + Py_INCREF(func); self->ob_cdcallbacks[type].ob_cdcallback = func; - XDECREF(self->ob_cdcallbacks[type].ob_cdcallbackarg); - INCREF(funcarg); + Py_XDECREF(self->ob_cdcallbacks[type].ob_cdcallbackarg); + Py_INCREF(funcarg); self->ob_cdcallbacks[type].ob_cdcallbackarg = funcarg; /* if (type == cd_audio) { sigfpe_[_UNDERFL].repls = _ZERO; - handle_sigfpes(_ON, _EN_UNDERFL, NULL, _ABORT_ON_ERROR, NULL); + handle_sigfpes(_ON, _EN_UNDERFL, NULL, + _ABORT_ON_ERROR, NULL); } */ - INCREF(None); - return None; + Py_INCREF(Py_None); + return Py_None; } -static struct methodlist cdparser_methods[] = { - {"addcallback", (method)CD_addcallback, 1}, - {"deleteparser", (method)CD_deleteparser, 1}, - {"parseframe", (method)CD_parseframe, 1}, - {"removecallback", (method)CD_removecallback, 1}, - {"resetparser", (method)CD_resetparser, 1}, - {"setcallback", (method)CD_addcallback, 1}, /* backward compatibility */ +static PyMethodDef cdparser_methods[] = { + {"addcallback", (PyCFunction)CD_addcallback, 1}, + {"deleteparser", (PyCFunction)CD_deleteparser, 1}, + {"parseframe", (PyCFunction)CD_parseframe, 1}, + {"removecallback", (PyCFunction)CD_removecallback, 1}, + {"resetparser", (PyCFunction)CD_resetparser, 1}, + /* backward compatibility */ + {"setcallback", (PyCFunction)CD_addcallback, 1}, {NULL, NULL} /* sentinel */ }; @@ -752,30 +755,30 @@ cdparser_dealloc(self) int i; for (i = 0; i < NCALLBACKS; i++) { - XDECREF(self->ob_cdcallbacks[i].ob_cdcallback); + Py_XDECREF(self->ob_cdcallbacks[i].ob_cdcallback); self->ob_cdcallbacks[i].ob_cdcallback = NULL; - XDECREF(self->ob_cdcallbacks[i].ob_cdcallbackarg); + Py_XDECREF(self->ob_cdcallbacks[i].ob_cdcallbackarg); self->ob_cdcallbacks[i].ob_cdcallbackarg = NULL; } CDdeleteparser(self->ob_cdparser); - DEL(self); + PyMem_DEL(self); } -static object * +static PyObject * cdparser_getattr(self, name) cdparserobject *self; char *name; { if (self->ob_cdparser == NULL) { - err_setstr(RuntimeError, "no parser active"); + PyErr_SetString(PyExc_RuntimeError, "no parser active"); return NULL; } - return findmethod(cdparser_methods, (object *)self, name); + return Py_FindMethod(cdparser_methods, (PyObject *)self, name); } -typeobject CdParsertype = { - OB_HEAD_INIT(&Typetype) +PyTypeObject CdParsertype = { + PyObject_HEAD_INIT(&PyType_Type) 0, /*ob_size*/ "cdparser", /*tp_name*/ sizeof(cdparserobject), /*tp_size*/ @@ -789,14 +792,14 @@ typeobject CdParsertype = { 0, /*tp_repr*/ }; -static object * +static PyObject * newcdparserobject(cdp) CDPARSER *cdp; { cdparserobject *p; int i; - p = NEWOBJ(cdparserobject, &CdParsertype); + p = PyObject_NEW(cdparserobject, &CdParsertype); if (p == NULL) return NULL; p->ob_cdparser = cdp; @@ -804,81 +807,83 @@ newcdparserobject(cdp) p->ob_cdcallbacks[i].ob_cdcallback = NULL; p->ob_cdcallbacks[i].ob_cdcallbackarg = NULL; } - return (object *) p; + return (PyObject *) p; } -static object * +static PyObject * CD_createparser(self, args) - object *self, *args; + PyObject *self, *args; { CDPARSER *cdp; - if (!newgetargs(args, "")) + if (!PyArg_ParseTuple(args, "")) return NULL; cdp = CDcreateparser(); if (cdp == NULL) { - err_setstr(CdError, "createparser failed"); + PyErr_SetString(CdError, "createparser failed"); return NULL; } return newcdparserobject(cdp); } -static object * +static PyObject * CD_msftoframe(self, args) - object *self, *args; + PyObject *self, *args; { int min, sec, frame; - if (!newgetargs(args, "iii", &min, &sec, &frame)) + if (!PyArg_ParseTuple(args, "iii", &min, &sec, &frame)) return NULL; - return newintobject((long) CDmsftoframe(min, sec, frame)); + return PyInt_FromLong((long) CDmsftoframe(min, sec, frame)); } -static struct methodlist CD_methods[] = { - {"open", (method)CD_open, 1}, - {"createparser", (method)CD_createparser, 1}, - {"msftoframe", (method)CD_msftoframe, 1}, +static PyMethodDef CD_methods[] = { + {"open", (PyCFunction)CD_open, 1}, + {"createparser", (PyCFunction)CD_createparser, 1}, + {"msftoframe", (PyCFunction)CD_msftoframe, 1}, {NULL, NULL} /* Sentinel */ }; void initcd() { - object *m, *d; + PyObject *m, *d; - m = initmodule("cd", CD_methods); - d = getmoduledict(m); + m = Py_InitModule("cd", CD_methods); + d = PyModule_GetDict(m); - CdError = newstringobject("cd.error"); - dictinsert(d, "error", CdError); + CdError = PyString_FromString("cd.error"); + PyDict_SetItemString(d, "error", CdError); /* Identifiers for the different types of callbacks from the parser */ - dictinsert(d, "audio", newintobject((long) cd_audio)); - dictinsert(d, "pnum", newintobject((long) cd_pnum)); - dictinsert(d, "index", newintobject((long) cd_index)); - dictinsert(d, "ptime", newintobject((long) cd_ptime)); - dictinsert(d, "atime", newintobject((long) cd_atime)); - dictinsert(d, "catalog", newintobject((long) cd_catalog)); - dictinsert(d, "ident", newintobject((long) cd_ident)); - dictinsert(d, "control", newintobject((long) cd_control)); + PyDict_SetItemString(d, "audio", PyInt_FromLong((long) cd_audio)); + PyDict_SetItemString(d, "pnum", PyInt_FromLong((long) cd_pnum)); + PyDict_SetItemString(d, "index", PyInt_FromLong((long) cd_index)); + PyDict_SetItemString(d, "ptime", PyInt_FromLong((long) cd_ptime)); + PyDict_SetItemString(d, "atime", PyInt_FromLong((long) cd_atime)); + PyDict_SetItemString(d, "catalog", PyInt_FromLong((long) cd_catalog)); + PyDict_SetItemString(d, "ident", PyInt_FromLong((long) cd_ident)); + PyDict_SetItemString(d, "control", PyInt_FromLong((long) cd_control)); /* Block size information for digital audio data */ - dictinsert(d, "DATASIZE", newintobject((long) CDDA_DATASIZE)); - dictinsert(d, "BLOCKSIZE", newintobject((long) CDDA_BLOCKSIZE)); + PyDict_SetItemString(d, "DATASIZE", + PyInt_FromLong((long) CDDA_DATASIZE)); + PyDict_SetItemString(d, "BLOCKSIZE", + PyInt_FromLong((long) CDDA_BLOCKSIZE)); /* Possible states for the cd player */ - dictinsert(d, "ERROR", newintobject((long) CD_ERROR)); - dictinsert(d, "NODISC", newintobject((long) CD_NODISC)); - dictinsert(d, "READY", newintobject((long) CD_READY)); - dictinsert(d, "PLAYING", newintobject((long) CD_PLAYING)); - dictinsert(d, "PAUSED", newintobject((long) CD_PAUSED)); - dictinsert(d, "STILL", newintobject((long) CD_STILL)); + PyDict_SetItemString(d, "ERROR", PyInt_FromLong((long) CD_ERROR)); + PyDict_SetItemString(d, "NODISC", PyInt_FromLong((long) CD_NODISC)); + PyDict_SetItemString(d, "READY", PyInt_FromLong((long) CD_READY)); + PyDict_SetItemString(d, "PLAYING", PyInt_FromLong((long) CD_PLAYING)); + PyDict_SetItemString(d, "PAUSED", PyInt_FromLong((long) CD_PAUSED)); + PyDict_SetItemString(d, "STILL", PyInt_FromLong((long) CD_STILL)); #ifdef CD_CDROM /* only newer versions of the library */ - dictinsert(d, "CDROM", newintobject((long) CD_CDROM)); + PyDict_SetItemString(d, "CDROM", PyInt_FromLong((long) CD_CDROM)); #endif - if (err_occurred()) - fatal("can't initialize module cd"); + if (PyErr_Occurred()) + Py_FatalError("can't initialize module cd"); } |