Home | History | Annotate | Download | only in Modules
      1 
      2 #define OLD_INTERFACE           /* define for pre-Irix 6 interface */
      3 
      4 #include "Python.h"
      5 #include "stringobject.h"
      6 #include <audio.h>
      7 #include <stdarg.h>
      8 
      9 #ifndef AL_NO_ELEM
     10 #ifndef OLD_INTERFACE
     11 #define OLD_INTERFACE
     12 #endif /* OLD_INTERFACE */
     13 #endif /* AL_NO_ELEM */
     14 
     15 static PyObject *ErrorObject;
     16 
     17 /* ----------------------------------------------------- */
     18 
     19 /* Declarations for objects of type port */
     20 
     21 typedef struct {
     22     PyObject_HEAD
     23     /* XXXX Add your own stuff here */
     24     ALport port;
     25 } alpobject;
     26 
     27 static PyTypeObject Alptype;
     28 
     29 
     30 
     31 /* ---------------------------------------------------------------- */
     32 
     33 /* Declarations for objects of type config */
     34 
     35 typedef struct {
     36     PyObject_HEAD
     37     /* XXXX Add your own stuff here */
     38     ALconfig config;
     39 } alcobject;
     40 
     41 static PyTypeObject Alctype;
     42 
     43 
     44 static void
     45 ErrorHandler(long code, const char *fmt, ...)
     46 {
     47     va_list args;
     48     char buf[128];
     49 
     50     va_start(args, fmt);
     51     vsprintf(buf, fmt, args);
     52     va_end(args);
     53     PyErr_SetString(ErrorObject, buf);
     54 }
     55 
     56 #ifdef AL_NO_ELEM               /* IRIX 6 */
     57 
     58 static PyObject *
     59 param2python(int resource, int param, ALvalue value, ALparamInfo *pinfo)
     60 {
     61     ALparamInfo info;
     62 
     63     if (pinfo == NULL) {
     64         pinfo = &info;
     65         if (alGetParamInfo(resource, param, &info) < 0)
     66             return NULL;
     67     }
     68     switch (pinfo->elementType) {
     69     case AL_PTR_ELEM:
     70         /* XXXX don't know how to handle this */
     71     case AL_NO_ELEM:
     72         Py_INCREF(Py_None);
     73         return Py_None;
     74     case AL_INT32_ELEM:
     75     case AL_RESOURCE_ELEM:
     76     case AL_ENUM_ELEM:
     77         return PyInt_FromLong((long) value.i);
     78     case AL_INT64_ELEM:
     79         return PyLong_FromLongLong(value.ll);
     80     case AL_FIXED_ELEM:
     81         return PyFloat_FromDouble(alFixedToDouble(value.ll));
     82     case AL_CHAR_ELEM:
     83         if (value.ptr == NULL) {
     84             Py_INCREF(Py_None);
     85             return Py_None;
     86         }
     87         return PyString_FromString((char *) value.ptr);
     88     default:
     89         PyErr_SetString(ErrorObject, "unknown element type");
     90         return NULL;
     91     }
     92 }
     93 
     94 static int
     95 python2elem(PyObject *item, void *ptr, int elementType)
     96 {
     97     switch (elementType) {
     98     case AL_INT32_ELEM:
     99     case AL_RESOURCE_ELEM:
    100     case AL_ENUM_ELEM:
    101         if (!PyInt_Check(item)) {
    102             PyErr_BadArgument();
    103             return -1;
    104         }
    105         *((int *) ptr) = PyInt_AsLong(item);
    106         break;
    107     case AL_INT64_ELEM:
    108         if (PyInt_Check(item))
    109             *((long long *) ptr) = PyInt_AsLong(item);
    110         else if (PyLong_Check(item))
    111             *((long long *) ptr) = PyLong_AsLongLong(item);
    112         else {
    113             PyErr_BadArgument();
    114             return -1;
    115         }
    116         break;
    117     case AL_FIXED_ELEM:
    118         if (PyInt_Check(item))
    119             *((long long *) ptr) = alDoubleToFixed((double) PyInt_AsLong(item));
    120         else if (PyFloat_Check(item))
    121             *((long long *) ptr) = alDoubleToFixed(PyFloat_AsDouble(item));
    122         else {
    123             PyErr_BadArgument();
    124             return -1;
    125         }
    126         break;
    127     default:
    128         PyErr_SetString(ErrorObject, "unknown element type");
    129         return -1;
    130     }
    131     return 0;
    132 }
    133 
    134 static int
    135 python2param(int resource, ALpv *param, PyObject *value, ALparamInfo *pinfo)
    136 {
    137     ALparamInfo info;
    138     int i, stepsize;
    139     PyObject *item;
    140 
    141     if (pinfo == NULL) {
    142         pinfo = &info;
    143         if (alGetParamInfo(resource, param->param, &info) < 0)
    144             return -1;
    145     }
    146     switch (pinfo->valueType) {
    147     case AL_STRING_VAL:
    148         if (pinfo->elementType != AL_CHAR_ELEM) {
    149             PyErr_SetString(ErrorObject, "unknown element type");
    150             return -1;
    151         }
    152         if (!PyString_Check(value)) {
    153             PyErr_BadArgument();
    154             return -1;
    155         }
    156         param->value.ptr = PyString_AS_STRING(value);
    157         param->sizeIn = PyString_GET_SIZE(value)+1; /*account for NUL*/
    158         break;
    159     case AL_SET_VAL:
    160     case AL_VECTOR_VAL:
    161         if (!PyList_Check(value) && !PyTuple_Check(value)) {
    162             PyErr_BadArgument();
    163             return -1;
    164         }
    165         switch (pinfo->elementType) {
    166         case AL_INT32_ELEM:
    167         case AL_RESOURCE_ELEM:
    168         case AL_ENUM_ELEM:
    169             param->sizeIn = PySequence_Size(value);
    170             param->value.ptr = PyMem_NEW(int, param->sizeIn);
    171             stepsize = sizeof(int);
    172             break;
    173         case AL_INT64_ELEM:
    174         case AL_FIXED_ELEM:
    175             param->sizeIn = PySequence_Size(value);
    176             param->value.ptr = PyMem_NEW(long long, param->sizeIn);
    177             stepsize = sizeof(long long);
    178             break;
    179         }
    180         for (i = 0; i < param->sizeIn; i++) {
    181             item = PySequence_GetItem(value, i);
    182             if (python2elem(item, (void *) ((char *) param->value.ptr + i*stepsize), pinfo->elementType) < 0) {
    183                 PyMem_DEL(param->value.ptr);
    184                 return -1;
    185             }
    186         }
    187         break;
    188     case AL_SCALAR_VAL:
    189         switch (pinfo->elementType) {
    190         case AL_INT32_ELEM:
    191         case AL_RESOURCE_ELEM:
    192         case AL_ENUM_ELEM:
    193             return python2elem(value, (void *) &param->value.i,
    194                                pinfo->elementType);
    195         case AL_INT64_ELEM:
    196         case AL_FIXED_ELEM:
    197             return python2elem(value, (void *) &param->value.ll,
    198                                pinfo->elementType);
    199         default:
    200             PyErr_SetString(ErrorObject, "unknown element type");
    201             return -1;
    202         }
    203     }
    204     return 0;
    205 }
    206 
    207 static int
    208 python2params(int resource1, int resource2, PyObject *list, ALpv **pvsp, ALparamInfo **pinfop)
    209 {
    210     PyObject *item;
    211     ALpv *pvs;
    212     ALparamInfo *pinfo;
    213     int npvs, i;
    214 
    215     npvs = PyList_Size(list);
    216     pvs = PyMem_NEW(ALpv, npvs);
    217     pinfo = PyMem_NEW(ALparamInfo, npvs);
    218     for (i = 0; i < npvs; i++) {
    219         item = PyList_GetItem(list, i);
    220         if (!PyArg_ParseTuple(item, "iO", &pvs[i].param, &item))
    221             goto error;
    222         if (alGetParamInfo(resource1, pvs[i].param, &pinfo[i]) < 0 &&
    223             alGetParamInfo(resource2, pvs[i].param, &pinfo[i]) < 0)
    224             goto error;
    225         if (python2param(resource1, &pvs[i], item, &pinfo[i]) < 0)
    226             goto error;
    227     }
    228 
    229     *pvsp = pvs;
    230     *pinfop = pinfo;
    231     return npvs;
    232 
    233   error:
    234     /* XXXX we should clean up everything */
    235     if (pvs)
    236         PyMem_DEL(pvs);
    237     if (pinfo)
    238         PyMem_DEL(pinfo);
    239     return -1;
    240 }
    241 
    242 /* -------------------------------------------------------- */
    243 
    244 
    245 static PyObject *
    246 SetConfig(alcobject *self, PyObject *args, int (*func)(ALconfig, int))
    247 {
    248     int par;
    249 
    250     if (!PyArg_ParseTuple(args, "i:SetConfig", &par))
    251         return NULL;
    252 
    253     if ((*func)(self->config, par) == -1)
    254         return NULL;
    255 
    256     Py_INCREF(Py_None);
    257     return Py_None;
    258 }
    259 
    260 static PyObject *
    261 GetConfig(alcobject *self, PyObject *args, int (*func)(ALconfig))
    262 {
    263     int par;
    264 
    265     if (!PyArg_ParseTuple(args, ":GetConfig"))
    266         return NULL;
    267 
    268     if ((par = (*func)(self->config)) == -1)
    269         return NULL;
    270 
    271     return PyInt_FromLong((long) par);
    272 }
    273 
    274 PyDoc_STRVAR(alc_SetWidth__doc__,
    275 "alSetWidth: set the wordsize for integer audio data.");
    276 
    277 static PyObject *
    278 alc_SetWidth(alcobject *self, PyObject *args)
    279 {
    280     return SetConfig(self, args, alSetWidth);
    281 }
    282 
    283 
    284 PyDoc_STRVAR(alc_GetWidth__doc__,
    285 "alGetWidth: get the wordsize for integer audio data.");
    286 
    287 static PyObject *
    288 alc_GetWidth(alcobject *self, PyObject *args)
    289 {
    290     return GetConfig(self, args, alGetWidth);
    291 }
    292 
    293 
    294 PyDoc_STRVAR(alc_SetSampFmt__doc__,
    295 "alSetSampFmt: set the sample format setting in an audio ALconfig "
    296 "structure.");
    297 
    298 static PyObject *
    299 alc_SetSampFmt(alcobject *self, PyObject *args)
    300 {
    301     return SetConfig(self, args, alSetSampFmt);
    302 }
    303 
    304 
    305 PyDoc_STRVAR(alc_GetSampFmt__doc__,
    306 "alGetSampFmt: get the sample format setting in an audio ALconfig "
    307 "structure.");
    308 
    309 static PyObject *
    310 alc_GetSampFmt(alcobject *self, PyObject *args)
    311 {
    312     return GetConfig(self, args, alGetSampFmt);
    313 }
    314 
    315 
    316 PyDoc_STRVAR(alc_SetChannels__doc__,
    317 "alSetChannels: set the channel settings in an audio ALconfig.");
    318 
    319 static PyObject *
    320 alc_SetChannels(alcobject *self, PyObject *args)
    321 {
    322     return SetConfig(self, args, alSetChannels);
    323 }
    324 
    325 
    326 PyDoc_STRVAR(alc_GetChannels__doc__,
    327 "alGetChannels: get the channel settings in an audio ALconfig.");
    328 
    329 static PyObject *
    330 alc_GetChannels(alcobject *self, PyObject *args)
    331 {
    332     return GetConfig(self, args, alGetChannels);
    333 }
    334 
    335 
    336 PyDoc_STRVAR(alc_SetFloatMax__doc__,
    337 "alSetFloatMax: set the maximum value of floating point sample data.");
    338 
    339 static PyObject *
    340 alc_SetFloatMax(alcobject *self, PyObject *args)
    341 {
    342     double maximum_value;
    343 
    344     if (!PyArg_ParseTuple(args, "d:SetFloatMax", &maximum_value))
    345         return NULL;
    346     if (alSetFloatMax(self->config, maximum_value) < 0)
    347         return NULL;
    348     Py_INCREF(Py_None);
    349     return Py_None;
    350 }
    351 
    352 
    353 PyDoc_STRVAR(alc_GetFloatMax__doc__,
    354 "alGetFloatMax: get the maximum value of floating point sample data.");
    355 
    356 static PyObject *
    357 alc_GetFloatMax(alcobject *self, PyObject *args)
    358 {
    359     double maximum_value;
    360 
    361     if (!PyArg_ParseTuple(args, ":GetFloatMax"))
    362         return NULL;
    363     if ((maximum_value = alGetFloatMax(self->config)) == 0)
    364         return NULL;
    365     return PyFloat_FromDouble(maximum_value);
    366 }
    367 
    368 
    369 PyDoc_STRVAR(alc_SetDevice__doc__,
    370 "alSetDevice: set the device setting in an audio ALconfig structure.");
    371 
    372 static PyObject *
    373 alc_SetDevice(alcobject *self, PyObject *args)
    374 {
    375     return SetConfig(self, args, alSetDevice);
    376 }
    377 
    378 
    379 PyDoc_STRVAR(alc_GetDevice__doc__,
    380 "alGetDevice: get the device setting in an audio ALconfig structure.");
    381 
    382 static PyObject *
    383 alc_GetDevice(alcobject *self, PyObject *args)
    384 {
    385     return GetConfig(self, args, alGetDevice);
    386 }
    387 
    388 
    389 PyDoc_STRVAR(alc_SetQueueSize__doc__,
    390 "alSetQueueSize: set audio port buffer size.");
    391 
    392 static PyObject *
    393 alc_SetQueueSize(alcobject *self, PyObject *args)
    394 {
    395     return SetConfig(self, args, alSetQueueSize);
    396 }
    397 
    398 
    399 PyDoc_STRVAR(alc_GetQueueSize__doc__,
    400 "alGetQueueSize: get audio port buffer size.");
    401 
    402 static PyObject *
    403 alc_GetQueueSize(alcobject *self, PyObject *args)
    404 {
    405     return GetConfig(self, args, alGetQueueSize);
    406 }
    407 
    408 #endif /* AL_NO_ELEM */
    409 
    410 static PyObject *
    411 setconfig(alcobject *self, PyObject *args, int (*func)(ALconfig, long))
    412 {
    413     long par;
    414 
    415     if (!PyArg_ParseTuple(args, "l:SetConfig", &par))
    416         return NULL;
    417 
    418     if ((*func)(self->config, par) == -1)
    419         return NULL;
    420 
    421     Py_INCREF(Py_None);
    422     return Py_None;
    423 }
    424 
    425 static PyObject *
    426 getconfig(alcobject *self, PyObject *args, long (*func)(ALconfig))
    427 {
    428     long par;
    429 
    430     if (!PyArg_ParseTuple(args, ":GetConfig"))
    431         return NULL;
    432 
    433     if ((par = (*func)(self->config)) == -1)
    434         return NULL;
    435 
    436     return PyInt_FromLong((long) par);
    437 }
    438 
    439 static PyObject *
    440 alc_setqueuesize (alcobject *self, PyObject *args)
    441 {
    442     return setconfig(self, args, ALsetqueuesize);
    443 }
    444 
    445 static PyObject *
    446 alc_getqueuesize (alcobject *self, PyObject *args)
    447 {
    448     return getconfig(self, args, ALgetqueuesize);
    449 }
    450 
    451 static PyObject *
    452 alc_setwidth (alcobject *self, PyObject *args)
    453 {
    454     return setconfig(self, args, ALsetwidth);
    455 }
    456 
    457 static PyObject *
    458 alc_getwidth (alcobject *self, PyObject *args)
    459 {
    460     return getconfig(self, args, ALgetwidth);
    461 }
    462 
    463 static PyObject *
    464 alc_getchannels (alcobject *self, PyObject *args)
    465 {
    466     return getconfig(self, args, ALgetchannels);
    467 }
    468 
    469 static PyObject *
    470 alc_setchannels (alcobject *self, PyObject *args)
    471 {
    472     return setconfig(self, args, ALsetchannels);
    473 }
    474 
    475 #ifdef AL_405
    476 
    477 static PyObject *
    478 alc_getsampfmt (alcobject *self, PyObject *args)
    479 {
    480     return getconfig(self, args, ALgetsampfmt);
    481 }
    482 
    483 static PyObject *
    484 alc_setsampfmt (alcobject *self, PyObject *args)
    485 {
    486     return setconfig(self, args, ALsetsampfmt);
    487 }
    488 
    489 static PyObject *
    490 alc_getfloatmax(alcobject *self, PyObject *args)
    491 {
    492     double arg;
    493 
    494     if (!PyArg_ParseTuple(args, ":GetFloatMax"))
    495         return 0;
    496     if ((arg = ALgetfloatmax(self->config)) == 0)
    497         return NULL;
    498     return PyFloat_FromDouble(arg);
    499 }
    500 
    501 static PyObject *
    502 alc_setfloatmax(alcobject *self, PyObject *args)
    503 {
    504     double arg;
    505 
    506     if (!PyArg_ParseTuple(args, "d:SetFloatMax", &arg))
    507         return 0;
    508     if (ALsetfloatmax(self->config, arg) == -1)
    509         return NULL;
    510     Py_INCREF(Py_None);
    511     return Py_None;
    512 }
    513 #endif /* AL_405 */
    514 
    515 static struct PyMethodDef alc_methods[] = {
    516 #ifdef AL_NO_ELEM               /* IRIX 6 */
    517     {"SetWidth",        (PyCFunction)alc_SetWidth,      METH_VARARGS,   alc_SetWidth__doc__},
    518     {"GetWidth",        (PyCFunction)alc_GetWidth,      METH_VARARGS,   alc_GetWidth__doc__},
    519     {"SetSampFmt",      (PyCFunction)alc_SetSampFmt,    METH_VARARGS,   alc_SetSampFmt__doc__},
    520     {"GetSampFmt",      (PyCFunction)alc_GetSampFmt,    METH_VARARGS,   alc_GetSampFmt__doc__},
    521     {"SetChannels",     (PyCFunction)alc_SetChannels,   METH_VARARGS,   alc_SetChannels__doc__},
    522     {"GetChannels",     (PyCFunction)alc_GetChannels,   METH_VARARGS,   alc_GetChannels__doc__},
    523     {"SetFloatMax",     (PyCFunction)alc_SetFloatMax,   METH_VARARGS,   alc_SetFloatMax__doc__},
    524     {"GetFloatMax",     (PyCFunction)alc_GetFloatMax,   METH_VARARGS,   alc_GetFloatMax__doc__},
    525     {"SetDevice",       (PyCFunction)alc_SetDevice,     METH_VARARGS,   alc_SetDevice__doc__},
    526     {"GetDevice",       (PyCFunction)alc_GetDevice,     METH_VARARGS,   alc_GetDevice__doc__},
    527     {"SetQueueSize",            (PyCFunction)alc_SetQueueSize,  METH_VARARGS,   alc_SetQueueSize__doc__},
    528     {"GetQueueSize",            (PyCFunction)alc_GetQueueSize,  METH_VARARGS,   alc_GetQueueSize__doc__},
    529 #endif /* AL_NO_ELEM */
    530     {"getqueuesize",            (PyCFunction)alc_getqueuesize,  METH_VARARGS},
    531     {"setqueuesize",            (PyCFunction)alc_setqueuesize,  METH_VARARGS},
    532     {"getwidth",                (PyCFunction)alc_getwidth,      METH_VARARGS},
    533     {"setwidth",                (PyCFunction)alc_setwidth,      METH_VARARGS},
    534     {"getchannels",             (PyCFunction)alc_getchannels,   METH_VARARGS},
    535     {"setchannels",             (PyCFunction)alc_setchannels,   METH_VARARGS},
    536 #ifdef AL_405
    537     {"getsampfmt",              (PyCFunction)alc_getsampfmt,    METH_VARARGS},
    538     {"setsampfmt",              (PyCFunction)alc_setsampfmt,    METH_VARARGS},
    539     {"getfloatmax",             (PyCFunction)alc_getfloatmax,   METH_VARARGS},
    540     {"setfloatmax",             (PyCFunction)alc_setfloatmax,   METH_VARARGS},
    541 #endif /* AL_405 */
    542 
    543     {NULL,              NULL}           /* sentinel */
    544 };
    545 
    546 /* ---------- */
    547 
    548 
    549 static PyObject *
    550 newalcobject(ALconfig config)
    551 {
    552     alcobject *self;
    553 
    554     self = PyObject_New(alcobject, &Alctype);
    555     if (self == NULL)
    556         return NULL;
    557     /* XXXX Add your own initializers here */
    558     self->config = config;
    559     return (PyObject *) self;
    560 }
    561 
    562 
    563 static void
    564 alc_dealloc(alcobject *self)
    565 {
    566     /* XXXX Add your own cleanup code here */
    567 #ifdef AL_NO_ELEM               /* IRIX 6 */
    568     (void) alFreeConfig(self->config);          /* ignore errors */
    569 #else
    570     (void) ALfreeconfig(self->config);          /* ignore errors */
    571 #endif
    572     PyObject_Del(self);
    573 }
    574 
    575 static PyObject *
    576 alc_getattr(alcobject *self, char *name)
    577 {
    578     /* XXXX Add your own getattr code here */
    579     return Py_FindMethod(alc_methods, (PyObject *)self, name);
    580 }
    581 
    582 PyDoc_STRVAR(Alctype__doc__, "");
    583 
    584 static PyTypeObject Alctype = {
    585     PyObject_HEAD_INIT(&PyType_Type)
    586     0,                                  /*ob_size*/
    587     "al.config",                        /*tp_name*/
    588     sizeof(alcobject),                  /*tp_basicsize*/
    589     0,                                  /*tp_itemsize*/
    590     /* methods */
    591     (destructor)alc_dealloc,            /*tp_dealloc*/
    592     (printfunc)0,               /*tp_print*/
    593     (getattrfunc)alc_getattr,           /*tp_getattr*/
    594     (setattrfunc)0,     /*tp_setattr*/
    595     (cmpfunc)0,                 /*tp_compare*/
    596     (reprfunc)0,                /*tp_repr*/
    597     0,                          /*tp_as_number*/
    598     0,                  /*tp_as_sequence*/
    599     0,                  /*tp_as_mapping*/
    600     (hashfunc)0,                /*tp_hash*/
    601     (ternaryfunc)0,             /*tp_call*/
    602     (reprfunc)0,                /*tp_str*/
    603 
    604     /* Space for future expansion */
    605     0L,0L,0L,0L,
    606     Alctype__doc__ /* Documentation string */
    607 };
    608 
    609 /* End of code for config objects */
    610 /* ---------------------------------------------------------------- */
    611 
    612 #ifdef AL_NO_ELEM               /* IRIX 6 */
    613 
    614 PyDoc_STRVAR(alp_SetConfig__doc__,
    615 "alSetConfig: set the ALconfig of an audio ALport.");
    616 
    617 static PyObject *
    618 alp_SetConfig(alpobject *self, PyObject *args)
    619 {
    620     alcobject *config;
    621     if (!PyArg_ParseTuple(args, "O!:SetConfig", &Alctype, &config))
    622         return NULL;
    623     if (alSetConfig(self->port, config->config) < 0)
    624         return NULL;
    625     Py_INCREF(Py_None);
    626     return Py_None;
    627 }
    628 
    629 
    630 PyDoc_STRVAR(alp_GetConfig__doc__,
    631 "alGetConfig: get the ALconfig of an audio ALport.");
    632 
    633 static PyObject *
    634 alp_GetConfig(alpobject *self, PyObject *args)
    635 {
    636     ALconfig config;
    637     if (!PyArg_ParseTuple(args, ":GetConfig"))
    638         return NULL;
    639     if ((config = alGetConfig(self->port)) == NULL)
    640         return NULL;
    641     return newalcobject(config);
    642 }
    643 
    644 
    645 PyDoc_STRVAR(alp_GetResource__doc__,
    646 "alGetResource: get the resource associated with an audio port.");
    647 
    648 static PyObject *
    649 alp_GetResource(alpobject *self, PyObject *args)
    650 {
    651     int resource;
    652 
    653     if (!PyArg_ParseTuple(args, ":GetResource"))
    654         return NULL;
    655     if ((resource = alGetResource(self->port)) == 0)
    656         return NULL;
    657     return PyInt_FromLong((long) resource);
    658 }
    659 
    660 
    661 PyDoc_STRVAR(alp_GetFD__doc__,
    662 "alGetFD: get the file descriptor for an audio port.");
    663 
    664 static PyObject *
    665 alp_GetFD(alpobject *self, PyObject *args)
    666 {
    667     int fd;
    668 
    669     if (!PyArg_ParseTuple(args, ":GetFD"))
    670         return NULL;
    671 
    672     if ((fd = alGetFD(self->port)) < 0)
    673         return NULL;
    674 
    675     return PyInt_FromLong((long) fd);
    676 }
    677 
    678 
    679 PyDoc_STRVAR(alp_GetFilled__doc__,
    680 "alGetFilled: return the number of filled sample frames in "
    681 "an audio port.");
    682 
    683 static PyObject *
    684 alp_GetFilled(alpobject *self, PyObject *args)
    685 {
    686     int filled;
    687 
    688     if (!PyArg_ParseTuple(args, ":GetFilled"))
    689         return NULL;
    690     if ((filled = alGetFilled(self->port)) < 0)
    691         return NULL;
    692     return PyInt_FromLong((long) filled);
    693 }
    694 
    695 
    696 PyDoc_STRVAR(alp_GetFillable__doc__,
    697 "alGetFillable: report the number of unfilled sample frames "
    698 "in an audio port.");
    699 
    700 static PyObject *
    701 alp_GetFillable(alpobject *self, PyObject *args)
    702 {
    703     int fillable;
    704 
    705     if (!PyArg_ParseTuple(args, ":GetFillable"))
    706         return NULL;
    707     if ((fillable = alGetFillable(self->port)) < 0)
    708         return NULL;
    709     return PyInt_FromLong((long) fillable);
    710 }
    711 
    712 
    713 PyDoc_STRVAR(alp_ReadFrames__doc__,
    714 "alReadFrames: read sample frames from an audio port.");
    715 
    716 static PyObject *
    717 alp_ReadFrames(alpobject *self, PyObject *args)
    718 {
    719     int framecount;
    720     PyObject *v;
    721     int size;
    722     int ch;
    723     ALconfig c;
    724 
    725     if (!PyArg_ParseTuple(args, "i:ReadFrames", &framecount))
    726         return NULL;
    727     if (framecount < 0) {
    728         PyErr_SetString(ErrorObject, "negative framecount");
    729         return NULL;
    730     }
    731     c = alGetConfig(self->port);
    732     switch (alGetSampFmt(c)) {
    733     case AL_SAMPFMT_TWOSCOMP:
    734         switch (alGetWidth(c)) {
    735         case AL_SAMPLE_8:
    736             size = 1;
    737             break;
    738         case AL_SAMPLE_16:
    739             size = 2;
    740             break;
    741         case AL_SAMPLE_24:
    742             size = 4;
    743             break;
    744         default:
    745             PyErr_SetString(ErrorObject, "can't determine width");
    746             alFreeConfig(c);
    747             return NULL;
    748         }
    749         break;
    750     case AL_SAMPFMT_FLOAT:
    751         size = 4;
    752         break;
    753     case AL_SAMPFMT_DOUBLE:
    754         size = 8;
    755         break;
    756     default:
    757         PyErr_SetString(ErrorObject, "can't determine format");
    758         alFreeConfig(c);
    759         return NULL;
    760     }
    761     ch = alGetChannels(c);
    762     alFreeConfig(c);
    763     if (ch < 0) {
    764         PyErr_SetString(ErrorObject, "can't determine # of channels");
    765         return NULL;
    766     }
    767     size *= ch;
    768     v = PyString_FromStringAndSize((char *) NULL, size * framecount);
    769     if (v == NULL)
    770         return NULL;
    771 
    772     Py_BEGIN_ALLOW_THREADS
    773     alReadFrames(self->port, (void *) PyString_AS_STRING(v), framecount);
    774     Py_END_ALLOW_THREADS
    775 
    776     return v;
    777 }
    778 
    779 
    780 PyDoc_STRVAR(alp_DiscardFrames__doc__,
    781 "alDiscardFrames: discard audio from an audio port.");
    782 
    783 static PyObject *
    784 alp_DiscardFrames(alpobject *self, PyObject *args)
    785 {
    786     int framecount;
    787 
    788     if (!PyArg_ParseTuple(args, "i:DiscardFrames", &framecount))
    789         return NULL;
    790 
    791     Py_BEGIN_ALLOW_THREADS
    792     framecount = alDiscardFrames(self->port, framecount);
    793     Py_END_ALLOW_THREADS
    794 
    795     if (framecount < 0)
    796         return NULL;
    797 
    798     return PyInt_FromLong((long) framecount);
    799 }
    800 
    801 
    802 PyDoc_STRVAR(alp_ZeroFrames__doc__,
    803 "alZeroFrames: write zero-valued sample frames to an audio port.");
    804 
    805 static PyObject *
    806 alp_ZeroFrames(alpobject *self, PyObject *args)
    807 {
    808     int framecount;
    809 
    810     if (!PyArg_ParseTuple(args, "i:ZeroFrames", &framecount))
    811         return NULL;
    812 
    813     if (framecount < 0) {
    814         PyErr_SetString(ErrorObject, "negative framecount");
    815         return NULL;
    816     }
    817 
    818     Py_BEGIN_ALLOW_THREADS
    819     alZeroFrames(self->port, framecount);
    820     Py_END_ALLOW_THREADS
    821 
    822     Py_INCREF(Py_None);
    823     return Py_None;
    824 }
    825 
    826 
    827 PyDoc_STRVAR(alp_SetFillPoint__doc__,
    828 "alSetFillPoint: set low- or high-water mark for an audio port.");
    829 
    830 static PyObject *
    831 alp_SetFillPoint(alpobject *self, PyObject *args)
    832 {
    833     int fillpoint;
    834 
    835     if (!PyArg_ParseTuple(args, "i:SetFillPoint", &fillpoint))
    836         return NULL;
    837 
    838     if (alSetFillPoint(self->port, fillpoint) < 0)
    839         return NULL;
    840 
    841     Py_INCREF(Py_None);
    842     return Py_None;
    843 }
    844 
    845 
    846 PyDoc_STRVAR(alp_GetFillPoint__doc__,
    847 "alGetFillPoint: get low- or high-water mark for an audio port.");
    848 
    849 static PyObject *
    850 alp_GetFillPoint(alpobject *self, PyObject *args)
    851 {
    852     int fillpoint;
    853 
    854     if (!PyArg_ParseTuple(args, ":GetFillPoint"))
    855         return NULL;
    856 
    857     if ((fillpoint = alGetFillPoint(self->port)) < 0)
    858         return NULL;
    859 
    860     return PyInt_FromLong((long) fillpoint);
    861 }
    862 
    863 
    864 PyDoc_STRVAR(alp_GetFrameNumber__doc__,
    865 "alGetFrameNumber: get the absolute sample frame number "
    866 "associated with a port.");
    867 
    868 static PyObject *
    869 alp_GetFrameNumber(alpobject *self, PyObject *args)
    870 {
    871     stamp_t fnum;
    872 
    873     if (!PyArg_ParseTuple(args, ":GetFrameNumber"))
    874         return NULL;
    875 
    876     if (alGetFrameNumber(self->port, &fnum) < 0)
    877         return NULL;
    878 
    879     return PyLong_FromLongLong((long long) fnum);
    880 }
    881 
    882 
    883 PyDoc_STRVAR(alp_GetFrameTime__doc__,
    884 "alGetFrameTime: get the time at which a sample frame came "
    885 "in or will go out.");
    886 
    887 static PyObject *
    888 alp_GetFrameTime(alpobject *self, PyObject *args)
    889 {
    890     stamp_t fnum, time;
    891     PyObject *ret, *v0, *v1;
    892 
    893     if (!PyArg_ParseTuple(args, ":GetFrameTime"))
    894         return NULL;
    895     if (alGetFrameTime(self->port, &fnum, &time) < 0)
    896         return NULL;
    897     v0 = PyLong_FromLongLong((long long) fnum);
    898     v1 = PyLong_FromLongLong((long long) time);
    899     if (PyErr_Occurred()) {
    900         Py_XDECREF(v0);
    901         Py_XDECREF(v1);
    902         return NULL;
    903     }
    904     ret = PyTuple_Pack(2, v0, v1);
    905     Py_DECREF(v0);
    906     Py_DECREF(v1);
    907     return ret;
    908 }
    909 
    910 
    911 PyDoc_STRVAR(alp_WriteFrames__doc__,
    912 "alWriteFrames: write sample frames to an audio port.");
    913 
    914 static PyObject *
    915 alp_WriteFrames(alpobject *self, PyObject *args)
    916 {
    917     char *samples;
    918     int length;
    919     int size, ch;
    920     ALconfig c;
    921 
    922     if (!PyArg_ParseTuple(args, "s#:WriteFrames", &samples, &length))
    923         return NULL;
    924     c = alGetConfig(self->port);
    925     switch (alGetSampFmt(c)) {
    926     case AL_SAMPFMT_TWOSCOMP:
    927         switch (alGetWidth(c)) {
    928         case AL_SAMPLE_8:
    929             size = 1;
    930             break;
    931         case AL_SAMPLE_16:
    932             size = 2;
    933             break;
    934         case AL_SAMPLE_24:
    935             size = 4;
    936             break;
    937         default:
    938             PyErr_SetString(ErrorObject, "can't determine width");
    939             alFreeConfig(c);
    940             return NULL;
    941         }
    942         break;
    943     case AL_SAMPFMT_FLOAT:
    944         size = 4;
    945         break;
    946     case AL_SAMPFMT_DOUBLE:
    947         size = 8;
    948         break;
    949     default:
    950         PyErr_SetString(ErrorObject, "can't determine format");
    951         alFreeConfig(c);
    952         return NULL;
    953     }
    954     ch = alGetChannels(c);
    955     alFreeConfig(c);
    956     if (ch < 0) {
    957         PyErr_SetString(ErrorObject, "can't determine # of channels");
    958         return NULL;
    959     }
    960     size *= ch;
    961     if (length % size != 0) {
    962         PyErr_SetString(ErrorObject,
    963                         "buffer length not whole number of frames");
    964         return NULL;
    965     }
    966 
    967     Py_BEGIN_ALLOW_THREADS
    968     alWriteFrames(self->port, (void *) samples, length / size);
    969     Py_END_ALLOW_THREADS
    970 
    971     Py_INCREF(Py_None);
    972     return Py_None;
    973 }
    974 
    975 
    976 PyDoc_STRVAR(alp_ClosePort__doc__, "alClosePort: close an audio port.");
    977 
    978 static PyObject *
    979 alp_ClosePort(alpobject *self, PyObject *args)
    980 {
    981     if (!PyArg_ParseTuple(args, ":ClosePort"))
    982         return NULL;
    983     if (alClosePort(self->port) < 0)
    984         return NULL;
    985     self->port = NULL;
    986     Py_INCREF(Py_None);
    987     return Py_None;
    988 }
    989 
    990 #endif /* AL_NO_ELEM */
    991 
    992 #ifdef OLD_INTERFACE
    993 static PyObject *
    994 alp_closeport(alpobject *self, PyObject *args)
    995 {
    996     if (!PyArg_ParseTuple(args, ":ClosePort"))
    997         return NULL;
    998     if (ALcloseport(self->port) < 0)
    999         return NULL;
   1000     self->port = NULL;
   1001     Py_INCREF(Py_None);
   1002     return Py_None;
   1003 }
   1004 
   1005 static PyObject *
   1006 alp_getfd(alpobject *self, PyObject *args)
   1007 {
   1008     int fd;
   1009 
   1010     if (!PyArg_ParseTuple(args, ":GetFD"))
   1011         return NULL;
   1012     if ((fd = ALgetfd(self-> port)) == -1)
   1013         return NULL;
   1014     return PyInt_FromLong(fd);
   1015 }
   1016 
   1017 static PyObject *
   1018 alp_getfilled(alpobject *self, PyObject *args)
   1019 {
   1020     long count;
   1021 
   1022     if (!PyArg_ParseTuple(args, ":GetFilled"))
   1023         return NULL;
   1024     if ((count = ALgetfilled(self-> port)) == -1)
   1025         return NULL;
   1026     return PyInt_FromLong(count);
   1027 }
   1028 
   1029 static PyObject *
   1030 alp_getfillable(alpobject *self, PyObject *args)
   1031 {
   1032     long count;
   1033 
   1034     if (!PyArg_ParseTuple(args, ":GetFillable"))
   1035         return NULL;
   1036     if ((count = ALgetfillable(self-> port)) == -1)
   1037         return NULL;
   1038     return PyInt_FromLong (count);
   1039 }
   1040 
   1041 static PyObject *
   1042 alp_readsamps(alpobject *self, PyObject *args)
   1043 {
   1044     long count;
   1045     PyObject *v;
   1046     ALconfig c;
   1047     int width;
   1048     int ret;
   1049 
   1050     if (!PyArg_ParseTuple(args, "l:readsamps", &count))
   1051         return NULL;
   1052 
   1053     if (count <= 0) {
   1054         PyErr_SetString(ErrorObject, "al.readsamps : arg <= 0");
   1055         return NULL;
   1056     }
   1057 
   1058     c = ALgetconfig(self->port);
   1059 #ifdef AL_405
   1060     width = ALgetsampfmt(c);
   1061     if (width == AL_SAMPFMT_FLOAT)
   1062         width = sizeof(float);
   1063     else if (width == AL_SAMPFMT_DOUBLE)
   1064         width = sizeof(double);
   1065     else
   1066         width = ALgetwidth(c);
   1067 #else
   1068     width = ALgetwidth(c);
   1069 #endif /* AL_405 */
   1070     ALfreeconfig(c);
   1071     v = PyString_FromStringAndSize((char *)NULL, width * count);
   1072     if (v == NULL)
   1073         return NULL;
   1074 
   1075     Py_BEGIN_ALLOW_THREADS
   1076     ret = ALreadsamps(self->port, (void *) PyString_AsString(v), count);
   1077     Py_END_ALLOW_THREADS
   1078     if (ret == -1) {
   1079         Py_DECREF(v);
   1080         return NULL;
   1081     }
   1082 
   1083     return (v);
   1084 }
   1085 
   1086 static PyObject *
   1087 alp_writesamps(alpobject *self, PyObject *args)
   1088 {
   1089     char *buf;
   1090     int size, width;
   1091     ALconfig c;
   1092     int ret;
   1093 
   1094     if (!PyArg_ParseTuple(args, "s#:writesamps", &buf, &size))
   1095         return NULL;
   1096 
   1097     c = ALgetconfig(self->port);
   1098 #ifdef AL_405
   1099     width = ALgetsampfmt(c);
   1100     if (width == AL_SAMPFMT_FLOAT)
   1101         width = sizeof(float);
   1102     else if (width == AL_SAMPFMT_DOUBLE)
   1103         width = sizeof(double);
   1104     else
   1105         width = ALgetwidth(c);
   1106 #else
   1107     width = ALgetwidth(c);
   1108 #endif /* AL_405 */
   1109     ALfreeconfig(c);
   1110     Py_BEGIN_ALLOW_THREADS
   1111     ret = ALwritesamps (self->port, (void *) buf, (long) size / width);
   1112     Py_END_ALLOW_THREADS
   1113     if (ret == -1)
   1114         return NULL;
   1115 
   1116     Py_INCREF(Py_None);
   1117     return Py_None;
   1118 }
   1119 
   1120 static PyObject *
   1121 alp_getfillpoint(alpobject *self, PyObject *args)
   1122 {
   1123     long count;
   1124 
   1125     if (!PyArg_ParseTuple(args, ":GetFillPoint"))
   1126         return NULL;
   1127     if ((count = ALgetfillpoint(self->port)) == -1)
   1128         return NULL;
   1129     return PyInt_FromLong(count);
   1130 }
   1131 
   1132 static PyObject *
   1133 alp_setfillpoint(alpobject *self, PyObject *args)
   1134 {
   1135     long count;
   1136 
   1137     if (!PyArg_ParseTuple(args, "l:SetFillPoint", &count))
   1138         return NULL;
   1139     if (ALsetfillpoint(self->port, count) == -1)
   1140         return NULL;
   1141     Py_INCREF(Py_None);
   1142     return Py_None;
   1143 }
   1144 
   1145 static PyObject *
   1146 alp_setconfig(alpobject *self, PyObject *args)
   1147 {
   1148     alcobject *config;
   1149 
   1150     if (!PyArg_ParseTuple(args, "O!:SetConfig", &Alctype, &config))
   1151         return NULL;
   1152     if (ALsetconfig(self->port, config->config) == -1)
   1153         return NULL;
   1154     Py_INCREF(Py_None);
   1155     return Py_None;
   1156 }
   1157 
   1158 static PyObject *
   1159 alp_getconfig(alpobject *self, PyObject *args)
   1160 {
   1161     ALconfig config;
   1162 
   1163     if (!PyArg_ParseTuple(args, ":GetConfig"))
   1164         return NULL;
   1165     config = ALgetconfig(self->port);
   1166     if (config == NULL)
   1167         return NULL;
   1168     return newalcobject(config);
   1169 }
   1170 
   1171 #ifdef AL_405
   1172 static PyObject *
   1173 alp_getstatus(alpobject *self, PyObject *args)
   1174 {
   1175     PyObject *list, *v;
   1176     long *PVbuffer;
   1177     long length;
   1178     int i;
   1179 
   1180     if (!PyArg_ParseTuple(args, "O!", &PyList_Type, &list))
   1181         return NULL;
   1182     length = PyList_Size(list);
   1183     PVbuffer = PyMem_NEW(long, length);
   1184     if (PVbuffer == NULL)
   1185         return PyErr_NoMemory();
   1186     for (i = 0; i < length; i++) {
   1187         v = PyList_GetItem(list, i);
   1188         if (!PyInt_Check(v)) {
   1189             PyMem_DEL(PVbuffer);
   1190             PyErr_BadArgument();
   1191             return NULL;
   1192         }
   1193         PVbuffer[i] = PyInt_AsLong(v);
   1194     }
   1195 
   1196     if (ALgetstatus(self->port, PVbuffer, length) == -1)
   1197         return NULL;
   1198 
   1199     for (i = 0; i < length; i++)
   1200         PyList_SetItem(list, i, PyInt_FromLong(PVbuffer[i]));
   1201 
   1202     PyMem_DEL(PVbuffer);
   1203 
   1204     Py_INCREF(Py_None);
   1205     return Py_None;
   1206 }
   1207 #endif /* AL_405 */
   1208 
   1209 #endif /* OLD_INTERFACE */
   1210 
   1211 static struct PyMethodDef alp_methods[] = {
   1212 #ifdef AL_NO_ELEM               /* IRIX 6 */
   1213     {"SetConfig",       (PyCFunction)alp_SetConfig,     METH_VARARGS,   alp_SetConfig__doc__},
   1214     {"GetConfig",       (PyCFunction)alp_GetConfig,     METH_VARARGS,   alp_GetConfig__doc__},
   1215     {"GetResource",     (PyCFunction)alp_GetResource,   METH_VARARGS,   alp_GetResource__doc__},
   1216     {"GetFD",           (PyCFunction)alp_GetFD, METH_VARARGS,   alp_GetFD__doc__},
   1217     {"GetFilled",       (PyCFunction)alp_GetFilled,     METH_VARARGS,   alp_GetFilled__doc__},
   1218     {"GetFillable",     (PyCFunction)alp_GetFillable,   METH_VARARGS,   alp_GetFillable__doc__},
   1219     {"ReadFrames",      (PyCFunction)alp_ReadFrames,    METH_VARARGS,   alp_ReadFrames__doc__},
   1220     {"DiscardFrames",           (PyCFunction)alp_DiscardFrames, METH_VARARGS,   alp_DiscardFrames__doc__},
   1221     {"ZeroFrames",      (PyCFunction)alp_ZeroFrames,    METH_VARARGS,   alp_ZeroFrames__doc__},
   1222     {"SetFillPoint",            (PyCFunction)alp_SetFillPoint,  METH_VARARGS,   alp_SetFillPoint__doc__},
   1223     {"GetFillPoint",            (PyCFunction)alp_GetFillPoint,  METH_VARARGS,   alp_GetFillPoint__doc__},
   1224     {"GetFrameNumber",          (PyCFunction)alp_GetFrameNumber,        METH_VARARGS,   alp_GetFrameNumber__doc__},
   1225     {"GetFrameTime",            (PyCFunction)alp_GetFrameTime,  METH_VARARGS,   alp_GetFrameTime__doc__},
   1226     {"WriteFrames",     (PyCFunction)alp_WriteFrames,   METH_VARARGS,   alp_WriteFrames__doc__},
   1227     {"ClosePort",       (PyCFunction)alp_ClosePort,     METH_VARARGS,   alp_ClosePort__doc__},
   1228 #endif /* AL_NO_ELEM */
   1229 #ifdef OLD_INTERFACE
   1230     {"closeport",               (PyCFunction)alp_closeport,     METH_VARARGS},
   1231     {"getfd",                   (PyCFunction)alp_getfd, METH_VARARGS},
   1232     {"fileno",                  (PyCFunction)alp_getfd, METH_VARARGS},
   1233     {"getfilled",               (PyCFunction)alp_getfilled,     METH_VARARGS},
   1234     {"getfillable",             (PyCFunction)alp_getfillable,   METH_VARARGS},
   1235     {"readsamps",               (PyCFunction)alp_readsamps,     METH_VARARGS},
   1236     {"writesamps",              (PyCFunction)alp_writesamps,    METH_VARARGS},
   1237     {"setfillpoint",            (PyCFunction)alp_setfillpoint,  METH_VARARGS},
   1238     {"getfillpoint",            (PyCFunction)alp_getfillpoint,  METH_VARARGS},
   1239     {"setconfig",               (PyCFunction)alp_setconfig,     METH_VARARGS},
   1240     {"getconfig",               (PyCFunction)alp_getconfig,     METH_VARARGS},
   1241 #ifdef AL_405
   1242     {"getstatus",               (PyCFunction)alp_getstatus,     METH_VARARGS},
   1243 #endif /* AL_405 */
   1244 #endif /* OLD_INTERFACE */
   1245 
   1246     {NULL,              NULL}           /* sentinel */
   1247 };
   1248 
   1249 /* ---------- */
   1250 
   1251 
   1252 static PyObject *
   1253 newalpobject(ALport port)
   1254 {
   1255     alpobject *self;
   1256 
   1257     self = PyObject_New(alpobject, &Alptype);
   1258     if (self == NULL)
   1259         return NULL;
   1260     /* XXXX Add your own initializers here */
   1261     self->port = port;
   1262     return (PyObject *) self;
   1263 }
   1264 
   1265 
   1266 static void
   1267 alp_dealloc(alpobject *self)
   1268 {
   1269     /* XXXX Add your own cleanup code here */
   1270     if (self->port) {
   1271 #ifdef AL_NO_ELEM               /* IRIX 6 */
   1272         alClosePort(self->port);
   1273 #else
   1274         ALcloseport(self->port);
   1275 #endif
   1276     }
   1277     PyObject_Del(self);
   1278 }
   1279 
   1280 static PyObject *
   1281 alp_getattr(alpobject *self, char *name)
   1282 {
   1283     /* XXXX Add your own getattr code here */
   1284     if (self->port == NULL) {
   1285         PyErr_SetString(ErrorObject, "port already closed");
   1286         return NULL;
   1287     }
   1288     return Py_FindMethod(alp_methods, (PyObject *)self, name);
   1289 }
   1290 
   1291 PyDoc_STRVAR(Alptype__doc__, "");
   1292 
   1293 static PyTypeObject Alptype = {
   1294     PyObject_HEAD_INIT(&PyType_Type)
   1295     0,                                  /*ob_size*/
   1296     "al.port",                          /*tp_name*/
   1297     sizeof(alpobject),                  /*tp_basicsize*/
   1298     0,                                  /*tp_itemsize*/
   1299     /* methods */
   1300     (destructor)alp_dealloc,            /*tp_dealloc*/
   1301     (printfunc)0,               /*tp_print*/
   1302     (getattrfunc)alp_getattr,           /*tp_getattr*/
   1303     (setattrfunc)0,     /*tp_setattr*/
   1304     (cmpfunc)0,                 /*tp_compare*/
   1305     (reprfunc)0,                /*tp_repr*/
   1306     0,                          /*tp_as_number*/
   1307     0,                  /*tp_as_sequence*/
   1308     0,                  /*tp_as_mapping*/
   1309     (hashfunc)0,                /*tp_hash*/
   1310     (ternaryfunc)0,             /*tp_call*/
   1311     (reprfunc)0,                /*tp_str*/
   1312 
   1313     /* Space for future expansion */
   1314     0L,0L,0L,0L,
   1315     Alptype__doc__ /* Documentation string */
   1316 };
   1317 
   1318 /* End of code for port objects */
   1319 /* -------------------------------------------------------- */
   1320 
   1321 
   1322 #ifdef AL_NO_ELEM               /* IRIX 6 */
   1323 
   1324 PyDoc_STRVAR(al_NewConfig__doc__,
   1325 "alNewConfig: create and initialize an audio ALconfig structure.");
   1326 
   1327 static PyObject *
   1328 al_NewConfig(PyObject *self, PyObject *args)
   1329 {
   1330     ALconfig config;
   1331 
   1332     if (!PyArg_ParseTuple(args, ":NewConfig"))
   1333         return NULL;
   1334     if ((config = alNewConfig()) == NULL)
   1335         return NULL;
   1336     return newalcobject(config);
   1337 }
   1338 
   1339 PyDoc_STRVAR(al_OpenPort__doc__,
   1340 "alOpenPort: open an audio port.");
   1341 
   1342 static PyObject *
   1343 al_OpenPort(PyObject *self, PyObject *args)
   1344 {
   1345     ALport port;
   1346     char *name, *dir;
   1347     alcobject *config = NULL;
   1348 
   1349     if (!PyArg_ParseTuple(args, "ss|O!:OpenPort", &name, &dir, &Alctype, &config))
   1350         return NULL;
   1351     if ((port = alOpenPort(name, dir, config ? config->config : NULL)) == NULL)
   1352         return NULL;
   1353     return newalpobject(port);
   1354 }
   1355 
   1356 PyDoc_STRVAR(al_Connect__doc__,
   1357 "alConnect: connect two audio I/O resources.");
   1358 
   1359 static PyObject *
   1360 al_Connect(PyObject *self, PyObject *args)
   1361 {
   1362     int source, dest, nprops = 0, id, i;
   1363     ALpv *props = NULL;
   1364     ALparamInfo *propinfo = NULL;
   1365     PyObject *propobj = NULL;
   1366 
   1367     if (!PyArg_ParseTuple(args, "ii|O!:Connect", &source, &dest, &PyList_Type, &propobj))
   1368         return NULL;
   1369     if (propobj != NULL) {
   1370         nprops = python2params(source, dest, propobj, &props, &propinfo);
   1371         if (nprops < 0)
   1372             return NULL;
   1373     }
   1374 
   1375     id = alConnect(source, dest, props, nprops);
   1376 
   1377     if (props) {
   1378         for (i = 0; i < nprops; i++) {
   1379             switch (propinfo[i].valueType) {
   1380             case AL_SET_VAL:
   1381             case AL_VECTOR_VAL:
   1382                 PyMem_DEL(props[i].value.ptr);
   1383                 break;
   1384             }
   1385         }
   1386         PyMem_DEL(props);
   1387         PyMem_DEL(propinfo);
   1388     }
   1389 
   1390     if (id < 0)
   1391         return NULL;
   1392     return PyInt_FromLong((long) id);
   1393 }
   1394 
   1395 PyDoc_STRVAR(al_Disconnect__doc__,
   1396 "alDisconnect: delete a connection between two audio I/O resources.");
   1397 
   1398 static PyObject *
   1399 al_Disconnect(PyObject *self, PyObject *args)
   1400 {
   1401     int res;
   1402 
   1403     if (!PyArg_ParseTuple(args, "i:Disconnect", &res))
   1404         return NULL;
   1405     if (alDisconnect(res) < 0)
   1406         return NULL;
   1407     Py_INCREF(Py_None);
   1408     return Py_None;
   1409 }
   1410 
   1411 PyDoc_STRVAR(al_GetParams__doc__,
   1412 "alGetParams: get the values of audio resource parameters.");
   1413 
   1414 static PyObject *
   1415 al_GetParams(PyObject *self, PyObject *args)
   1416 {
   1417     int resource;
   1418     PyObject *pvslist, *item = NULL, *v = NULL;
   1419     ALpv *pvs;
   1420     int i, j, npvs;
   1421     ALparamInfo *pinfo;
   1422 
   1423     if (!PyArg_ParseTuple(args, "iO!:GetParams", &resource, &PyList_Type, &pvslist))
   1424         return NULL;
   1425     npvs = PyList_Size(pvslist);
   1426     pvs = PyMem_NEW(ALpv, npvs);
   1427     pinfo = PyMem_NEW(ALparamInfo, npvs);
   1428     for (i = 0; i < npvs; i++) {
   1429         item = PyList_GetItem(pvslist, i);
   1430         if (!PyInt_Check(item)) {
   1431             item = NULL;
   1432             PyErr_SetString(ErrorObject, "list of integers expected");
   1433             goto error;
   1434         }
   1435         pvs[i].param = (int) PyInt_AsLong(item);
   1436         item = NULL;            /* not needed anymore */
   1437         if (alGetParamInfo(resource, pvs[i].param, &pinfo[i]) < 0)
   1438             goto error;
   1439         switch (pinfo[i].valueType) {
   1440         case AL_NO_VAL:
   1441             break;
   1442         case AL_MATRIX_VAL:
   1443             pinfo[i].maxElems *= pinfo[i].maxElems2;
   1444             /* fall through */
   1445         case AL_STRING_VAL:
   1446         case AL_SET_VAL:
   1447         case AL_VECTOR_VAL:
   1448             switch (pinfo[i].elementType) {
   1449             case AL_INT32_ELEM:
   1450             case AL_RESOURCE_ELEM:
   1451             case AL_ENUM_ELEM:
   1452                 pvs[i].value.ptr = PyMem_NEW(int, pinfo[i].maxElems);
   1453                 pvs[i].sizeIn = pinfo[i].maxElems;
   1454                 break;
   1455             case AL_INT64_ELEM:
   1456             case AL_FIXED_ELEM:
   1457                 pvs[i].value.ptr = PyMem_NEW(long long, pinfo[i].maxElems);
   1458                 pvs[i].sizeIn = pinfo[i].maxElems;
   1459                 break;
   1460             case AL_CHAR_ELEM:
   1461                 pvs[i].value.ptr = PyMem_NEW(char, 32);
   1462                 pvs[i].sizeIn = 32;
   1463                 break;
   1464             case AL_NO_ELEM:
   1465             case AL_PTR_ELEM:
   1466             default:
   1467                 PyErr_SetString(ErrorObject, "internal error");
   1468                 goto error;
   1469             }
   1470             break;
   1471         case AL_SCALAR_VAL:
   1472             break;
   1473         default:
   1474             PyErr_SetString(ErrorObject, "internal error");
   1475             goto error;
   1476         }
   1477         if (pinfo[i].valueType == AL_MATRIX_VAL) {
   1478             pinfo[i].maxElems /= pinfo[i].maxElems2;
   1479             pvs[i].sizeIn /= pinfo[i].maxElems2;
   1480             pvs[i].size2In = pinfo[i].maxElems2;
   1481         }
   1482     }
   1483     if (alGetParams(resource, pvs, npvs) < 0)
   1484         goto error;
   1485     if (!(v = PyList_New(npvs)))
   1486         goto error;
   1487     for (i = 0; i < npvs; i++) {
   1488         if (pvs[i].sizeOut < 0) {
   1489             char buf[32];
   1490             PyOS_snprintf(buf, sizeof(buf),
   1491                           "problem with param %d", i);
   1492             PyErr_SetString(ErrorObject, buf);
   1493             goto error;
   1494         }
   1495         switch (pinfo[i].valueType) {
   1496         case AL_NO_VAL:
   1497             item = Py_None;
   1498             Py_INCREF(item);
   1499             break;
   1500         case AL_STRING_VAL:
   1501             item = PyString_FromString(pvs[i].value.ptr);
   1502             PyMem_DEL(pvs[i].value.ptr);
   1503             break;
   1504         case AL_MATRIX_VAL:
   1505             /* XXXX this is not right */
   1506             pvs[i].sizeOut *= pvs[i].size2Out;
   1507             /* fall through */
   1508         case AL_SET_VAL:
   1509         case AL_VECTOR_VAL:
   1510             item = PyList_New(pvs[i].sizeOut);
   1511             for (j = 0; j < pvs[i].sizeOut; j++) {
   1512                 switch (pinfo[i].elementType) {
   1513                 case AL_INT32_ELEM:
   1514                 case AL_RESOURCE_ELEM:
   1515                 case AL_ENUM_ELEM:
   1516                     PyList_SetItem(item, j, PyInt_FromLong((long) ((int *) pvs[i].value.ptr)[j]));
   1517                     break;
   1518                 case AL_INT64_ELEM:
   1519                     PyList_SetItem(item, j, PyLong_FromLongLong(((long long *) pvs[i].value.ptr)[j]));
   1520                     break;
   1521                 case AL_FIXED_ELEM:
   1522                     PyList_SetItem(item, j, PyFloat_FromDouble(alFixedToDouble(((long long *) pvs[i].value.ptr)[j])));
   1523                     break;
   1524                 default:
   1525                     PyErr_SetString(ErrorObject, "internal error");
   1526                     goto error;
   1527                 }
   1528             }
   1529             PyMem_DEL(pvs[i].value.ptr);
   1530             break;
   1531         case AL_SCALAR_VAL:
   1532             item = param2python(resource, pvs[i].param, pvs[i].value, &pinfo[i]);
   1533             break;
   1534         }
   1535         if (PyErr_Occurred() ||
   1536             PyList_SetItem(v, i, Py_BuildValue("(iO)", pvs[i].param,
   1537                                                item)) < 0 ||
   1538             PyErr_Occurred())
   1539             goto error;
   1540         Py_DECREF(item);
   1541     }
   1542     PyMem_DEL(pvs);
   1543     PyMem_DEL(pinfo);
   1544     return v;
   1545 
   1546   error:
   1547     Py_XDECREF(v);
   1548     Py_XDECREF(item);
   1549     if (pvs)
   1550         PyMem_DEL(pvs);
   1551     if (pinfo)
   1552         PyMem_DEL(pinfo);
   1553     return NULL;
   1554 }
   1555 
   1556 PyDoc_STRVAR(al_SetParams__doc__,
   1557 "alSetParams: set the values of audio resource parameters.");
   1558 
   1559 static PyObject *
   1560 al_SetParams(PyObject *self, PyObject *args)
   1561 {
   1562     int resource;
   1563     PyObject *pvslist;
   1564     ALpv *pvs;
   1565     ALparamInfo *pinfo;
   1566     int npvs, i;
   1567 
   1568     if (!PyArg_ParseTuple(args, "iO!:SetParams", &resource, &PyList_Type, &pvslist))
   1569         return NULL;
   1570     npvs = python2params(resource, -1, pvslist, &pvs, &pinfo);
   1571     if (npvs < 0)
   1572         return NULL;
   1573 
   1574     if (alSetParams(resource, pvs, npvs) < 0)
   1575         goto error;
   1576 
   1577     /* cleanup */
   1578     for (i = 0; i < npvs; i++) {
   1579         switch (pinfo[i].valueType) {
   1580         case AL_SET_VAL:
   1581         case AL_VECTOR_VAL:
   1582             PyMem_DEL(pvs[i].value.ptr);
   1583             break;
   1584         }
   1585     }
   1586     PyMem_DEL(pvs);
   1587     PyMem_DEL(pinfo);
   1588 
   1589     Py_INCREF(Py_None);
   1590     return Py_None;
   1591 
   1592   error:
   1593     /* XXXX we should clean up everything */
   1594     if (pvs)
   1595         PyMem_DEL(pvs);
   1596     if (pinfo)
   1597         PyMem_DEL(pinfo);
   1598     return NULL;
   1599 }
   1600 
   1601 PyDoc_STRVAR(al_QueryValues__doc__,
   1602 "alQueryValues: get the set of possible values for a parameter.");
   1603 
   1604 static PyObject *
   1605 al_QueryValues(PyObject *self, PyObject *args)
   1606 {
   1607     int resource, param;
   1608     ALvalue *return_set = NULL;
   1609     int setsize = 32, qualsize = 0, nvals, i;
   1610     ALpv *quals = NULL;
   1611     ALparamInfo pinfo;
   1612     ALparamInfo *qualinfo = NULL;
   1613     PyObject *qualobj = NULL;
   1614     PyObject *res = NULL, *item;
   1615 
   1616     if (!PyArg_ParseTuple(args, "ii|O!:QueryValues", &resource, &param,
   1617                           &PyList_Type, &qualobj))
   1618         return NULL;
   1619     if (qualobj != NULL) {
   1620         qualsize = python2params(resource, param, qualobj, &quals, &qualinfo);
   1621         if (qualsize < 0)
   1622             return NULL;
   1623     }
   1624     setsize = 32;
   1625     return_set = PyMem_NEW(ALvalue, setsize);
   1626     if (return_set == NULL) {
   1627         PyErr_NoMemory();
   1628         goto cleanup;
   1629     }
   1630 
   1631   retry:
   1632     nvals = alQueryValues(resource, param, return_set, setsize, quals, qualsize);
   1633     if (nvals < 0)
   1634         goto cleanup;
   1635     if (nvals > setsize) {
   1636         ALvalue *old_return_set = return_set;
   1637         setsize = nvals;
   1638         PyMem_RESIZE(return_set, ALvalue, setsize);
   1639         if (return_set == NULL) {
   1640             return_set = old_return_set;
   1641             PyErr_NoMemory();
   1642             goto cleanup;
   1643         }
   1644         goto retry;
   1645     }
   1646 
   1647     if (alGetParamInfo(resource, param, &pinfo) < 0)
   1648         goto cleanup;
   1649 
   1650     res = PyList_New(nvals);
   1651     if (res == NULL)
   1652         goto cleanup;
   1653     for (i = 0; i < nvals; i++) {
   1654         item = param2python(resource, param, return_set[i], &pinfo);
   1655         if (item == NULL ||
   1656             PyList_SetItem(res, i, item) < 0) {
   1657             Py_DECREF(res);
   1658             res = NULL;
   1659             goto cleanup;
   1660         }
   1661     }
   1662 
   1663   cleanup:
   1664     if (return_set)
   1665         PyMem_DEL(return_set);
   1666     if (quals) {
   1667         for (i = 0; i < qualsize; i++) {
   1668             switch (qualinfo[i].valueType) {
   1669             case AL_SET_VAL:
   1670             case AL_VECTOR_VAL:
   1671                 PyMem_DEL(quals[i].value.ptr);
   1672                 break;
   1673             }
   1674         }
   1675         PyMem_DEL(quals);
   1676         PyMem_DEL(qualinfo);
   1677     }
   1678 
   1679     return res;
   1680 }
   1681 
   1682 PyDoc_STRVAR(al_GetParamInfo__doc__,
   1683 "alGetParamInfo: get information about a parameter on "
   1684 "a particular audio resource.");
   1685 
   1686 static PyObject *
   1687 al_GetParamInfo(PyObject *self, PyObject *args)
   1688 {
   1689     int res, param;
   1690     ALparamInfo pinfo;
   1691     PyObject *v, *item;
   1692 
   1693     if (!PyArg_ParseTuple(args, "ii:GetParamInfo", &res, &param))
   1694         return NULL;
   1695     if (alGetParamInfo(res, param, &pinfo) < 0)
   1696         return NULL;
   1697     v = PyDict_New();
   1698     if (!v) return NULL;
   1699 
   1700     item = PyInt_FromLong((long) pinfo.resource);
   1701     PyDict_SetItemString(v, "resource", item);
   1702     Py_DECREF(item);
   1703 
   1704     item = PyInt_FromLong((long) pinfo.param);
   1705     PyDict_SetItemString(v, "param", item);
   1706     Py_DECREF(item);
   1707 
   1708     item = PyInt_FromLong((long) pinfo.valueType);
   1709     PyDict_SetItemString(v, "valueType", item);
   1710     Py_DECREF(item);
   1711 
   1712     if (pinfo.valueType != AL_NO_VAL && pinfo.valueType != AL_SCALAR_VAL) {
   1713         /* multiple values */
   1714         item = PyInt_FromLong((long) pinfo.maxElems);
   1715         PyDict_SetItemString(v, "maxElems", item);
   1716         Py_DECREF(item);
   1717 
   1718         if (pinfo.valueType == AL_MATRIX_VAL) {
   1719             /* 2 dimensional */
   1720             item = PyInt_FromLong((long) pinfo.maxElems2);
   1721             PyDict_SetItemString(v, "maxElems2", item);
   1722             Py_DECREF(item);
   1723         }
   1724     }
   1725 
   1726     item = PyInt_FromLong((long) pinfo.elementType);
   1727     PyDict_SetItemString(v, "elementType", item);
   1728     Py_DECREF(item);
   1729 
   1730     item = PyString_FromString(pinfo.name);
   1731     PyDict_SetItemString(v, "name", item);
   1732     Py_DECREF(item);
   1733 
   1734     item = param2python(res, param, pinfo.initial, &pinfo);
   1735     PyDict_SetItemString(v, "initial", item);
   1736     Py_DECREF(item);
   1737 
   1738     if (pinfo.elementType != AL_ENUM_ELEM &&
   1739         pinfo.elementType != AL_RESOURCE_ELEM &&
   1740         pinfo.elementType != AL_CHAR_ELEM) {
   1741         /* range param */
   1742         item = param2python(res, param, pinfo.min, &pinfo);
   1743         PyDict_SetItemString(v, "min", item);
   1744         Py_DECREF(item);
   1745 
   1746         item = param2python(res, param, pinfo.max, &pinfo);
   1747         PyDict_SetItemString(v, "max", item);
   1748         Py_DECREF(item);
   1749 
   1750         item = param2python(res, param, pinfo.minDelta, &pinfo);
   1751         PyDict_SetItemString(v, "minDelta", item);
   1752         Py_DECREF(item);
   1753 
   1754         item = param2python(res, param, pinfo.maxDelta, &pinfo);
   1755         PyDict_SetItemString(v, "maxDelta", item);
   1756         Py_DECREF(item);
   1757 
   1758         item = PyInt_FromLong((long) pinfo.specialVals);
   1759         PyDict_SetItemString(v, "specialVals", item);
   1760         Py_DECREF(item);
   1761     }
   1762 
   1763     return v;
   1764 }
   1765 
   1766 PyDoc_STRVAR(al_GetResourceByName__doc__,
   1767 "alGetResourceByName: find an audio resource by name.");
   1768 
   1769 static PyObject *
   1770 al_GetResourceByName(PyObject *self, PyObject *args)
   1771 {
   1772     int res, start_res, type;
   1773     char *name;
   1774 
   1775     if (!PyArg_ParseTuple(args, "isi:GetResourceByName", &start_res, &name, &type))
   1776         return NULL;
   1777     if ((res = alGetResourceByName(start_res, name, type)) == 0)
   1778         return NULL;
   1779     return PyInt_FromLong((long) res);
   1780 }
   1781 
   1782 PyDoc_STRVAR(al_IsSubtype__doc__,
   1783 "alIsSubtype: indicate if one resource type is a subtype of another.");
   1784 
   1785 static PyObject *
   1786 al_IsSubtype(PyObject *self, PyObject *args)
   1787 {
   1788     int type, subtype;
   1789 
   1790     if (!PyArg_ParseTuple(args, "ii:IsSubtype", &type, &subtype))
   1791         return NULL;
   1792     return PyInt_FromLong((long) alIsSubtype(type, subtype));
   1793 }
   1794 
   1795 PyDoc_STRVAR(al_SetErrorHandler__doc__, "");
   1796 
   1797 static PyObject *
   1798 al_SetErrorHandler(PyObject *self, PyObject *args)
   1799 {
   1800 
   1801     if (!PyArg_ParseTuple(args, ":SetErrorHandler"))
   1802         return NULL;
   1803     Py_INCREF(Py_None);
   1804     return Py_None;
   1805 }
   1806 
   1807 #endif /* AL_NO_ELEM */
   1808 
   1809 #ifdef OLD_INTERFACE
   1810 
   1811 static PyObject *
   1812 al_openport(PyObject *self, PyObject *args)
   1813 {
   1814     char *name, *dir;
   1815     ALport port;
   1816     alcobject *config = NULL;
   1817 
   1818     if (!PyArg_ParseTuple(args, "ss|O!:OpenPort", &name, &dir, &Alctype, &config))
   1819         return NULL;
   1820     if ((port = ALopenport(name, dir, config ? config->config : NULL)) == NULL)
   1821         return NULL;
   1822     return newalpobject(port);
   1823 }
   1824 
   1825 static PyObject *
   1826 al_newconfig(PyObject *self, PyObject *args)
   1827 {
   1828     ALconfig config;
   1829 
   1830     if (!PyArg_ParseTuple(args, ":NewConfig"))
   1831         return NULL;
   1832     if ((config = ALnewconfig ()) == NULL)
   1833         return NULL;
   1834     return newalcobject(config);
   1835 }
   1836 
   1837 static PyObject *
   1838 al_queryparams(PyObject *self, PyObject *args)
   1839 {
   1840     long device;
   1841     long length;
   1842     long *PVbuffer;
   1843     long PVdummy[2];
   1844     PyObject *v = NULL;
   1845     int i;
   1846 
   1847     if (!PyArg_ParseTuple(args, "l:queryparams", &device))
   1848         return NULL;
   1849     if ((length = ALqueryparams(device, PVdummy, 2L)) == -1)
   1850         return NULL;
   1851     if ((PVbuffer = PyMem_NEW(long, length)) == NULL)
   1852         return PyErr_NoMemory();
   1853     if (ALqueryparams(device, PVbuffer, length) >= 0 &&
   1854         (v = PyList_New((int)length)) != NULL) {
   1855         for (i = 0; i < length; i++)
   1856             PyList_SetItem(v, i, PyInt_FromLong(PVbuffer[i]));
   1857     }
   1858     PyMem_DEL(PVbuffer);
   1859     return v;
   1860 }
   1861 
   1862 static PyObject *
   1863 doParams(PyObject *args, int (*func)(long, long *, long), int modified)
   1864 {
   1865     long device;
   1866     PyObject *list, *v;
   1867     long *PVbuffer;
   1868     long length;
   1869     int i;
   1870 
   1871     if (!PyArg_ParseTuple(args, "lO!", &device, &PyList_Type, &list))
   1872         return NULL;
   1873     length = PyList_Size(list);
   1874     PVbuffer = PyMem_NEW(long, length);
   1875     if (PVbuffer == NULL)
   1876         return PyErr_NoMemory();
   1877     for (i = 0; i < length; i++) {
   1878         v = PyList_GetItem(list, i);
   1879         if (!PyInt_Check(v)) {
   1880             PyMem_DEL(PVbuffer);
   1881             PyErr_BadArgument();
   1882             return NULL;
   1883         }
   1884         PVbuffer[i] = PyInt_AsLong(v);
   1885     }
   1886 
   1887     if ((*func)(device, PVbuffer, length) == -1) {
   1888         PyMem_DEL(PVbuffer);
   1889         return NULL;
   1890     }
   1891 
   1892     if (modified) {
   1893         for (i = 0; i < length; i++)
   1894             PyList_SetItem(list, i, PyInt_FromLong(PVbuffer[i]));
   1895     }
   1896 
   1897     PyMem_DEL(PVbuffer);
   1898 
   1899     Py_INCREF(Py_None);
   1900     return Py_None;
   1901 }
   1902 
   1903 static PyObject *
   1904 al_getparams(PyObject *self, PyObject *args)
   1905 {
   1906     return doParams(args, ALgetparams, 1);
   1907 }
   1908 
   1909 static PyObject *
   1910 al_setparams(PyObject *self, PyObject *args)
   1911 {
   1912     return doParams(args, ALsetparams, 0);
   1913 }
   1914 
   1915 static PyObject *
   1916 al_getname(PyObject *self, PyObject *args)
   1917 {
   1918     long device, descriptor;
   1919     char *name;
   1920 
   1921     if (!PyArg_ParseTuple(args, "ll:getname", &device, &descriptor))
   1922         return NULL;
   1923     if ((name = ALgetname(device, descriptor)) == NULL)
   1924         return NULL;
   1925     return PyString_FromString(name);
   1926 }
   1927 
   1928 static PyObject *
   1929 al_getdefault(PyObject *self, PyObject *args)
   1930 {
   1931     long device, descriptor, value;
   1932 
   1933     if (!PyArg_ParseTuple(args, "ll:getdefault", &device, &descriptor))
   1934         return NULL;
   1935     if ((value = ALgetdefault(device, descriptor)) == -1)
   1936         return NULL;
   1937     return PyLong_FromLong(value);
   1938 }
   1939 
   1940 static PyObject *
   1941 al_getminmax(PyObject *self, PyObject *args)
   1942 {
   1943     long device, descriptor, min, max;
   1944 
   1945     if (!PyArg_ParseTuple(args, "ll:getminmax", &device, &descriptor))
   1946         return NULL;
   1947     min = -1;
   1948     max = -1;
   1949     if (ALgetminmax(device, descriptor, &min, &max) == -1)
   1950         return NULL;
   1951     return Py_BuildValue("ll", min, max);
   1952 }
   1953 
   1954 #endif /* OLD_INTERFACE */
   1955 
   1956 /* List of methods defined in the module */
   1957 
   1958 static struct PyMethodDef al_methods[] = {
   1959 #ifdef AL_NO_ELEM               /* IRIX 6 */
   1960     {"NewConfig",       (PyCFunction)al_NewConfig,      METH_VARARGS,   al_NewConfig__doc__},
   1961     {"OpenPort",        (PyCFunction)al_OpenPort,       METH_VARARGS,   al_OpenPort__doc__},
   1962     {"Connect",         (PyCFunction)al_Connect,        METH_VARARGS,   al_Connect__doc__},
   1963     {"Disconnect",      (PyCFunction)al_Disconnect,     METH_VARARGS,   al_Disconnect__doc__},
   1964     {"GetParams",       (PyCFunction)al_GetParams,      METH_VARARGS,   al_GetParams__doc__},
   1965     {"SetParams",       (PyCFunction)al_SetParams,      METH_VARARGS,   al_SetParams__doc__},
   1966     {"QueryValues",     (PyCFunction)al_QueryValues,    METH_VARARGS,   al_QueryValues__doc__},
   1967     {"GetParamInfo",            (PyCFunction)al_GetParamInfo,   METH_VARARGS,   al_GetParamInfo__doc__},
   1968     {"GetResourceByName",       (PyCFunction)al_GetResourceByName,      METH_VARARGS,   al_GetResourceByName__doc__},
   1969     {"IsSubtype",       (PyCFunction)al_IsSubtype,      METH_VARARGS,   al_IsSubtype__doc__},
   1970 #if 0
   1971     /* this one not supported */
   1972     {"SetErrorHandler",         (PyCFunction)al_SetErrorHandler,        METH_VARARGS,   al_SetErrorHandler__doc__},
   1973 #endif
   1974 #endif /* AL_NO_ELEM */
   1975 #ifdef OLD_INTERFACE
   1976     {"openport",                (PyCFunction)al_openport,       METH_VARARGS},
   1977     {"newconfig",               (PyCFunction)al_newconfig,      METH_VARARGS},
   1978     {"queryparams",             (PyCFunction)al_queryparams,    METH_VARARGS},
   1979     {"getparams",               (PyCFunction)al_getparams,      METH_VARARGS},
   1980     {"setparams",               (PyCFunction)al_setparams,      METH_VARARGS},
   1981     {"getname",                 (PyCFunction)al_getname,        METH_VARARGS},
   1982     {"getdefault",              (PyCFunction)al_getdefault,     METH_VARARGS},
   1983     {"getminmax",               (PyCFunction)al_getminmax,      METH_VARARGS},
   1984 #endif /* OLD_INTERFACE */
   1985 
   1986     {NULL,       (PyCFunction)NULL, 0, NULL}            /* sentinel */
   1987 };
   1988 
   1989 
   1990 /* Initialization function for the module (*must* be called inital) */
   1991 
   1992 PyDoc_STRVAR(al_module_documentation, "");
   1993 
   1994 void
   1995 inital(void)
   1996 {
   1997     PyObject *m, *d, *x;
   1998 
   1999     if (PyErr_WarnPy3k("the al module has been removed in "
   2000                        "Python 3.0", 2) < 0)
   2001         return;
   2002 
   2003     /* Create the module and add the functions */
   2004     m = Py_InitModule4("al", al_methods,
   2005         al_module_documentation,
   2006         (PyObject*)NULL,PYTHON_API_VERSION);
   2007     if (m == NULL)
   2008         return;
   2009 
   2010     /* Add some symbolic constants to the module */
   2011     d = PyModule_GetDict(m);
   2012     ErrorObject = PyErr_NewException("al.error", NULL, NULL);
   2013     PyDict_SetItemString(d, "error", ErrorObject);
   2014 
   2015     /* XXXX Add constants here */
   2016 #ifdef AL_4CHANNEL
   2017     x =  PyInt_FromLong((long) AL_4CHANNEL);
   2018     if (x == NULL || PyDict_SetItemString(d, "FOURCHANNEL", x) < 0)
   2019         goto error;
   2020     Py_DECREF(x);
   2021 #endif
   2022 #ifdef AL_ADAT_IF_TYPE
   2023     x =  PyInt_FromLong((long) AL_ADAT_IF_TYPE);
   2024     if (x == NULL || PyDict_SetItemString(d, "ADAT_IF_TYPE", x) < 0)
   2025         goto error;
   2026     Py_DECREF(x);
   2027 #endif
   2028 #ifdef AL_ADAT_MCLK_TYPE
   2029     x =  PyInt_FromLong((long) AL_ADAT_MCLK_TYPE);
   2030     if (x == NULL || PyDict_SetItemString(d, "ADAT_MCLK_TYPE", x) < 0)
   2031         goto error;
   2032     Py_DECREF(x);
   2033 #endif
   2034 #ifdef AL_AES_IF_TYPE
   2035     x =  PyInt_FromLong((long) AL_AES_IF_TYPE);
   2036     if (x == NULL || PyDict_SetItemString(d, "AES_IF_TYPE", x) < 0)
   2037         goto error;
   2038     Py_DECREF(x);
   2039 #endif
   2040 #ifdef AL_AES_MCLK_TYPE
   2041     x =  PyInt_FromLong((long) AL_AES_MCLK_TYPE);
   2042     if (x == NULL || PyDict_SetItemString(d, "AES_MCLK_TYPE", x) < 0)
   2043         goto error;
   2044     Py_DECREF(x);
   2045 #endif
   2046 #ifdef AL_ANALOG_IF_TYPE
   2047     x =  PyInt_FromLong((long) AL_ANALOG_IF_TYPE);
   2048     if (x == NULL || PyDict_SetItemString(d, "ANALOG_IF_TYPE", x) < 0)
   2049         goto error;
   2050     Py_DECREF(x);
   2051 #endif
   2052 #ifdef AL_ASSOCIATE
   2053     x =  PyInt_FromLong((long) AL_ASSOCIATE);
   2054     if (x == NULL || PyDict_SetItemString(d, "ASSOCIATE", x) < 0)
   2055         goto error;
   2056     Py_DECREF(x);
   2057 #endif
   2058 #ifdef AL_BAD_BUFFER_NULL
   2059     x =  PyInt_FromLong((long) AL_BAD_BUFFER_NULL);
   2060     if (x == NULL || PyDict_SetItemString(d, "BAD_BUFFER_NULL", x) < 0)
   2061         goto error;
   2062     Py_DECREF(x);
   2063 #endif
   2064 #ifdef AL_BAD_BUFFERLENGTH
   2065     x =  PyInt_FromLong((long) AL_BAD_BUFFERLENGTH);
   2066     if (x == NULL || PyDict_SetItemString(d, "BAD_BUFFERLENGTH", x) < 0)
   2067         goto error;
   2068     Py_DECREF(x);
   2069 #endif
   2070 #ifdef AL_BAD_BUFFERLENGTH_NEG
   2071     x =  PyInt_FromLong((long) AL_BAD_BUFFERLENGTH_NEG);
   2072     if (x == NULL || PyDict_SetItemString(d, "BAD_BUFFERLENGTH_NEG", x) < 0)
   2073         goto error;
   2074     Py_DECREF(x);
   2075 #endif
   2076 #ifdef AL_BAD_BUFFERLENGTH_ODD
   2077     x =  PyInt_FromLong((long) AL_BAD_BUFFERLENGTH_ODD);
   2078     if (x == NULL || PyDict_SetItemString(d, "BAD_BUFFERLENGTH_ODD", x) < 0)
   2079         goto error;
   2080     Py_DECREF(x);
   2081 #endif
   2082 #ifdef AL_BAD_CHANNELS
   2083     x =  PyInt_FromLong((long) AL_BAD_CHANNELS);
   2084     if (x == NULL || PyDict_SetItemString(d, "BAD_CHANNELS", x) < 0)
   2085         goto error;
   2086     Py_DECREF(x);
   2087 #endif
   2088 #ifdef AL_BAD_CONFIG
   2089     x =  PyInt_FromLong((long) AL_BAD_CONFIG);
   2090     if (x == NULL || PyDict_SetItemString(d, "BAD_CONFIG", x) < 0)
   2091         goto error;
   2092     Py_DECREF(x);
   2093 #endif
   2094 #ifdef AL_BAD_COUNT_NEG
   2095     x =  PyInt_FromLong((long) AL_BAD_COUNT_NEG);
   2096     if (x == NULL || PyDict_SetItemString(d, "BAD_COUNT_NEG", x) < 0)
   2097         goto error;
   2098     Py_DECREF(x);
   2099 #endif
   2100 #ifdef AL_BAD_DEVICE
   2101     x =  PyInt_FromLong((long) AL_BAD_DEVICE);
   2102     if (x == NULL || PyDict_SetItemString(d, "BAD_DEVICE", x) < 0)
   2103         goto error;
   2104     Py_DECREF(x);
   2105 #endif
   2106 #ifdef AL_BAD_DEVICE_ACCESS
   2107     x =  PyInt_FromLong((long) AL_BAD_DEVICE_ACCESS);
   2108     if (x == NULL || PyDict_SetItemString(d, "BAD_DEVICE_ACCESS", x) < 0)
   2109         goto error;
   2110     Py_DECREF(x);
   2111 #endif
   2112 #ifdef AL_BAD_DIRECTION
   2113     x =  PyInt_FromLong((long) AL_BAD_DIRECTION);
   2114     if (x == NULL || PyDict_SetItemString(d, "BAD_DIRECTION", x) < 0)
   2115         goto error;
   2116     Py_DECREF(x);
   2117 #endif
   2118 #ifdef AL_BAD_FILLPOINT
   2119     x =  PyInt_FromLong((long) AL_BAD_FILLPOINT);
   2120     if (x == NULL || PyDict_SetItemString(d, "BAD_FILLPOINT", x) < 0)
   2121         goto error;
   2122     Py_DECREF(x);
   2123 #endif
   2124 #ifdef AL_BAD_FLOATMAX
   2125     x =  PyInt_FromLong((long) AL_BAD_FLOATMAX);
   2126     if (x == NULL || PyDict_SetItemString(d, "BAD_FLOATMAX", x) < 0)
   2127         goto error;
   2128     Py_DECREF(x);
   2129 #endif
   2130 #ifdef AL_BAD_ILLEGAL_STATE
   2131     x =  PyInt_FromLong((long) AL_BAD_ILLEGAL_STATE);
   2132     if (x == NULL || PyDict_SetItemString(d, "BAD_ILLEGAL_STATE", x) < 0)
   2133         goto error;
   2134     Py_DECREF(x);
   2135 #endif
   2136 #ifdef AL_BAD_NO_PORTS
   2137     x =  PyInt_FromLong((long) AL_BAD_NO_PORTS);
   2138     if (x == NULL || PyDict_SetItemString(d, "BAD_NO_PORTS", x) < 0)
   2139         goto error;
   2140     Py_DECREF(x);
   2141 #endif
   2142 #ifdef AL_BAD_NOT_FOUND
   2143     x =  PyInt_FromLong((long) AL_BAD_NOT_FOUND);
   2144     if (x == NULL || PyDict_SetItemString(d, "BAD_NOT_FOUND", x) < 0)
   2145         goto error;
   2146     Py_DECREF(x);
   2147 #endif
   2148 #ifdef AL_BAD_NOT_IMPLEMENTED
   2149     x =  PyInt_FromLong((long) AL_BAD_NOT_IMPLEMENTED);
   2150     if (x == NULL || PyDict_SetItemString(d, "BAD_NOT_IMPLEMENTED", x) < 0)
   2151         goto error;
   2152     Py_DECREF(x);
   2153 #endif
   2154 #ifdef AL_BAD_OUT_OF_MEM
   2155     x =  PyInt_FromLong((long) AL_BAD_OUT_OF_MEM);
   2156     if (x == NULL || PyDict_SetItemString(d, "BAD_OUT_OF_MEM", x) < 0)
   2157         goto error;
   2158     Py_DECREF(x);
   2159 #endif
   2160 #ifdef AL_BAD_PARAM
   2161     x =  PyInt_FromLong((long) AL_BAD_PARAM);
   2162     if (x == NULL || PyDict_SetItemString(d, "BAD_PARAM", x) < 0)
   2163         goto error;
   2164     Py_DECREF(x);
   2165 #endif
   2166 #ifdef AL_BAD_PERMISSIONS
   2167     x =  PyInt_FromLong((long) AL_BAD_PERMISSIONS);
   2168     if (x == NULL || PyDict_SetItemString(d, "BAD_PERMISSIONS", x) < 0)
   2169         goto error;
   2170     Py_DECREF(x);
   2171 #endif
   2172 #ifdef AL_BAD_PORT
   2173     x =  PyInt_FromLong((long) AL_BAD_PORT);
   2174     if (x == NULL || PyDict_SetItemString(d, "BAD_PORT", x) < 0)
   2175         goto error;
   2176     Py_DECREF(x);
   2177 #endif
   2178 #ifdef AL_BAD_PORTSTYLE
   2179     x =  PyInt_FromLong((long) AL_BAD_PORTSTYLE);
   2180     if (x == NULL || PyDict_SetItemString(d, "BAD_PORTSTYLE", x) < 0)
   2181         goto error;
   2182     Py_DECREF(x);
   2183 #endif
   2184 #ifdef AL_BAD_PVBUFFER
   2185     x =  PyInt_FromLong((long) AL_BAD_PVBUFFER);
   2186     if (x == NULL || PyDict_SetItemString(d, "BAD_PVBUFFER", x) < 0)
   2187         goto error;
   2188     Py_DECREF(x);
   2189 #endif
   2190 #ifdef AL_BAD_QSIZE
   2191     x =  PyInt_FromLong((long) AL_BAD_QSIZE);
   2192     if (x == NULL || PyDict_SetItemString(d, "BAD_QSIZE", x) < 0)
   2193         goto error;
   2194     Py_DECREF(x);
   2195 #endif
   2196 #ifdef AL_BAD_RATE
   2197     x =  PyInt_FromLong((long) AL_BAD_RATE);
   2198     if (x == NULL || PyDict_SetItemString(d, "BAD_RATE", x) < 0)
   2199         goto error;
   2200     Py_DECREF(x);
   2201 #endif
   2202 #ifdef AL_BAD_RESOURCE
   2203     x =  PyInt_FromLong((long) AL_BAD_RESOURCE);
   2204     if (x == NULL || PyDict_SetItemString(d, "BAD_RESOURCE", x) < 0)
   2205         goto error;
   2206     Py_DECREF(x);
   2207 #endif
   2208 #ifdef AL_BAD_SAMPFMT
   2209     x =  PyInt_FromLong((long) AL_BAD_SAMPFMT);
   2210     if (x == NULL || PyDict_SetItemString(d, "BAD_SAMPFMT", x) < 0)
   2211         goto error;
   2212     Py_DECREF(x);
   2213 #endif
   2214 #ifdef AL_BAD_TRANSFER_SIZE
   2215     x =  PyInt_FromLong((long) AL_BAD_TRANSFER_SIZE);
   2216     if (x == NULL || PyDict_SetItemString(d, "BAD_TRANSFER_SIZE", x) < 0)
   2217         goto error;
   2218     Py_DECREF(x);
   2219 #endif
   2220 #ifdef AL_BAD_WIDTH
   2221     x =  PyInt_FromLong((long) AL_BAD_WIDTH);
   2222     if (x == NULL || PyDict_SetItemString(d, "BAD_WIDTH", x) < 0)
   2223         goto error;
   2224     Py_DECREF(x);
   2225 #endif
   2226 #ifdef AL_CHANNEL_MODE
   2227     x =  PyInt_FromLong((long) AL_CHANNEL_MODE);
   2228     if (x == NULL || PyDict_SetItemString(d, "CHANNEL_MODE", x) < 0)
   2229         goto error;
   2230     Py_DECREF(x);
   2231 #endif
   2232 #ifdef AL_CHANNELS
   2233     x =  PyInt_FromLong((long) AL_CHANNELS);
   2234     if (x == NULL || PyDict_SetItemString(d, "CHANNELS", x) < 0)
   2235         goto error;
   2236     Py_DECREF(x);
   2237 #endif
   2238 #ifdef AL_CHAR_ELEM
   2239     x =  PyInt_FromLong((long) AL_CHAR_ELEM);
   2240     if (x == NULL || PyDict_SetItemString(d, "CHAR_ELEM", x) < 0)
   2241         goto error;
   2242     Py_DECREF(x);
   2243 #endif
   2244 #ifdef AL_CLOCK_GEN
   2245     x =  PyInt_FromLong((long) AL_CLOCK_GEN);
   2246     if (x == NULL || PyDict_SetItemString(d, "CLOCK_GEN", x) < 0)
   2247         goto error;
   2248     Py_DECREF(x);
   2249 #endif
   2250 #ifdef AL_CLOCKGEN_TYPE
   2251     x =  PyInt_FromLong((long) AL_CLOCKGEN_TYPE);
   2252     if (x == NULL || PyDict_SetItemString(d, "CLOCKGEN_TYPE", x) < 0)
   2253         goto error;
   2254     Py_DECREF(x);
   2255 #endif
   2256 #ifdef AL_CONNECT
   2257     x =  PyInt_FromLong((long) AL_CONNECT);
   2258     if (x == NULL || PyDict_SetItemString(d, "CONNECT", x) < 0)
   2259         goto error;
   2260     Py_DECREF(x);
   2261 #endif
   2262 #ifdef AL_CONNECTION_TYPE
   2263     x =  PyInt_FromLong((long) AL_CONNECTION_TYPE);
   2264     if (x == NULL || PyDict_SetItemString(d, "CONNECTION_TYPE", x) < 0)
   2265         goto error;
   2266     Py_DECREF(x);
   2267 #endif
   2268 #ifdef AL_CONNECTIONS
   2269     x =  PyInt_FromLong((long) AL_CONNECTIONS);
   2270     if (x == NULL || PyDict_SetItemString(d, "CONNECTIONS", x) < 0)
   2271         goto error;
   2272     Py_DECREF(x);
   2273 #endif
   2274 #ifdef AL_CRYSTAL_MCLK_TYPE
   2275     x =  PyInt_FromLong((long) AL_CRYSTAL_MCLK_TYPE);
   2276     if (x == NULL || PyDict_SetItemString(d, "CRYSTAL_MCLK_TYPE", x) < 0)
   2277         goto error;
   2278     Py_DECREF(x);
   2279 #endif
   2280 #ifdef AL_DEFAULT_DEVICE
   2281     x =  PyInt_FromLong((long) AL_DEFAULT_DEVICE);
   2282     if (x == NULL || PyDict_SetItemString(d, "DEFAULT_DEVICE", x) < 0)
   2283         goto error;
   2284     Py_DECREF(x);
   2285 #endif
   2286 #ifdef AL_DEFAULT_INPUT
   2287     x =  PyInt_FromLong((long) AL_DEFAULT_INPUT);
   2288     if (x == NULL || PyDict_SetItemString(d, "DEFAULT_INPUT", x) < 0)
   2289         goto error;
   2290     Py_DECREF(x);
   2291 #endif
   2292 #ifdef AL_DEFAULT_OUTPUT
   2293     x =  PyInt_FromLong((long) AL_DEFAULT_OUTPUT);
   2294     if (x == NULL || PyDict_SetItemString(d, "DEFAULT_OUTPUT", x) < 0)
   2295         goto error;
   2296     Py_DECREF(x);
   2297 #endif
   2298 #ifdef AL_DEST
   2299     x =  PyInt_FromLong((long) AL_DEST);
   2300     if (x == NULL || PyDict_SetItemString(d, "DEST", x) < 0)
   2301         goto error;
   2302     Py_DECREF(x);
   2303 #endif
   2304 #ifdef AL_DEVICE_TYPE
   2305     x =  PyInt_FromLong((long) AL_DEVICE_TYPE);
   2306     if (x == NULL || PyDict_SetItemString(d, "DEVICE_TYPE", x) < 0)
   2307         goto error;
   2308     Py_DECREF(x);
   2309 #endif
   2310 #ifdef AL_DEVICES
   2311     x =  PyInt_FromLong((long) AL_DEVICES);
   2312     if (x == NULL || PyDict_SetItemString(d, "DEVICES", x) < 0)
   2313         goto error;
   2314     Py_DECREF(x);
   2315 #endif
   2316 #ifdef AL_DIGITAL_IF_TYPE
   2317     x =  PyInt_FromLong((long) AL_DIGITAL_IF_TYPE);
   2318     if (x == NULL || PyDict_SetItemString(d, "DIGITAL_IF_TYPE", x) < 0)
   2319         goto error;
   2320     Py_DECREF(x);
   2321 #endif
   2322 #ifdef AL_DIGITAL_INPUT_RATE
   2323     x =  PyInt_FromLong((long) AL_DIGITAL_INPUT_RATE);
   2324     if (x == NULL || PyDict_SetItemString(d, "DIGITAL_INPUT_RATE", x) < 0)
   2325         goto error;
   2326     Py_DECREF(x);
   2327 #endif
   2328 #ifdef AL_DISCONNECT
   2329     x =  PyInt_FromLong((long) AL_DISCONNECT);
   2330     if (x == NULL || PyDict_SetItemString(d, "DISCONNECT", x) < 0)
   2331         goto error;
   2332     Py_DECREF(x);
   2333 #endif
   2334 #ifdef AL_ENUM_ELEM
   2335     x =  PyInt_FromLong((long) AL_ENUM_ELEM);
   2336     if (x == NULL || PyDict_SetItemString(d, "ENUM_ELEM", x) < 0)
   2337         goto error;
   2338     Py_DECREF(x);
   2339 #endif
   2340 #ifdef AL_ENUM_VALUE
   2341     x =  PyInt_FromLong((long) AL_ENUM_VALUE);
   2342     if (x == NULL || PyDict_SetItemString(d, "ENUM_VALUE", x) < 0)
   2343         goto error;
   2344     Py_DECREF(x);
   2345 #endif
   2346 #ifdef AL_ERROR_INPUT_OVERFLOW
   2347     x =  PyInt_FromLong((long) AL_ERROR_INPUT_OVERFLOW);
   2348     if (x == NULL || PyDict_SetItemString(d, "ERROR_INPUT_OVERFLOW", x) < 0)
   2349         goto error;
   2350     Py_DECREF(x);
   2351 #endif
   2352 #ifdef AL_ERROR_LENGTH
   2353     x =  PyInt_FromLong((long) AL_ERROR_LENGTH);
   2354     if (x == NULL || PyDict_SetItemString(d, "ERROR_LENGTH", x) < 0)
   2355         goto error;
   2356     Py_DECREF(x);
   2357 #endif
   2358 #ifdef AL_ERROR_LOCATION_LSP
   2359     x =  PyInt_FromLong((long) AL_ERROR_LOCATION_LSP);
   2360     if (x == NULL || PyDict_SetItemString(d, "ERROR_LOCATION_LSP", x) < 0)
   2361         goto error;
   2362     Py_DECREF(x);
   2363 #endif
   2364 #ifdef AL_ERROR_LOCATION_MSP
   2365     x =  PyInt_FromLong((long) AL_ERROR_LOCATION_MSP);
   2366     if (x == NULL || PyDict_SetItemString(d, "ERROR_LOCATION_MSP", x) < 0)
   2367         goto error;
   2368     Py_DECREF(x);
   2369 #endif
   2370 #ifdef AL_ERROR_NUMBER
   2371     x =  PyInt_FromLong((long) AL_ERROR_NUMBER);
   2372     if (x == NULL || PyDict_SetItemString(d, "ERROR_NUMBER", x) < 0)
   2373         goto error;
   2374     Py_DECREF(x);
   2375 #endif
   2376 #ifdef AL_ERROR_OUTPUT_UNDERFLOW
   2377     x =  PyInt_FromLong((long) AL_ERROR_OUTPUT_UNDERFLOW);
   2378     if (x == NULL || PyDict_SetItemString(d, "ERROR_OUTPUT_UNDERFLOW", x) < 0)
   2379         goto error;
   2380     Py_DECREF(x);
   2381 #endif
   2382 #ifdef AL_ERROR_TYPE
   2383     x =  PyInt_FromLong((long) AL_ERROR_TYPE);
   2384     if (x == NULL || PyDict_SetItemString(d, "ERROR_TYPE", x) < 0)
   2385         goto error;
   2386     Py_DECREF(x);
   2387 #endif
   2388 #ifdef AL_FIXED_ELEM
   2389     x =  PyInt_FromLong((long) AL_FIXED_ELEM);
   2390     if (x == NULL || PyDict_SetItemString(d, "FIXED_ELEM", x) < 0)
   2391         goto error;
   2392     Py_DECREF(x);
   2393 #endif
   2394 #ifdef AL_FIXED_MCLK_TYPE
   2395     x =  PyInt_FromLong((long) AL_FIXED_MCLK_TYPE);
   2396     if (x == NULL || PyDict_SetItemString(d, "FIXED_MCLK_TYPE", x) < 0)
   2397         goto error;
   2398     Py_DECREF(x);
   2399 #endif
   2400 #ifdef AL_GAIN
   2401     x =  PyInt_FromLong((long) AL_GAIN);
   2402     if (x == NULL || PyDict_SetItemString(d, "GAIN", x) < 0)
   2403         goto error;
   2404     Py_DECREF(x);
   2405 #endif
   2406 #ifdef AL_GAIN_REF
   2407     x =  PyInt_FromLong((long) AL_GAIN_REF);
   2408     if (x == NULL || PyDict_SetItemString(d, "GAIN_REF", x) < 0)
   2409         goto error;
   2410     Py_DECREF(x);
   2411 #endif
   2412 #ifdef AL_HRB_TYPE
   2413     x =  PyInt_FromLong((long) AL_HRB_TYPE);
   2414     if (x == NULL || PyDict_SetItemString(d, "HRB_TYPE", x) < 0)
   2415         goto error;
   2416     Py_DECREF(x);
   2417 #endif
   2418 #ifdef AL_INPUT_COUNT
   2419     x =  PyInt_FromLong((long) AL_INPUT_COUNT);
   2420     if (x == NULL || PyDict_SetItemString(d, "INPUT_COUNT", x) < 0)
   2421         goto error;
   2422     Py_DECREF(x);
   2423 #endif
   2424 #ifdef AL_INPUT_DEVICE_TYPE
   2425     x =  PyInt_FromLong((long) AL_INPUT_DEVICE_TYPE);
   2426     if (x == NULL || PyDict_SetItemString(d, "INPUT_DEVICE_TYPE", x) < 0)
   2427         goto error;
   2428     Py_DECREF(x);
   2429 #endif
   2430 #ifdef AL_INPUT_DIGITAL
   2431     x =  PyInt_FromLong((long) AL_INPUT_DIGITAL);
   2432     if (x == NULL || PyDict_SetItemString(d, "INPUT_DIGITAL", x) < 0)
   2433         goto error;
   2434     Py_DECREF(x);
   2435 #endif
   2436 #ifdef AL_INPUT_HRB_TYPE
   2437     x =  PyInt_FromLong((long) AL_INPUT_HRB_TYPE);
   2438     if (x == NULL || PyDict_SetItemString(d, "INPUT_HRB_TYPE", x) < 0)
   2439         goto error;
   2440     Py_DECREF(x);
   2441 #endif
   2442 #ifdef AL_INPUT_LINE
   2443     x =  PyInt_FromLong((long) AL_INPUT_LINE);
   2444     if (x == NULL || PyDict_SetItemString(d, "INPUT_LINE", x) < 0)
   2445         goto error;
   2446     Py_DECREF(x);
   2447 #endif
   2448 #ifdef AL_INPUT_MIC
   2449     x =  PyInt_FromLong((long) AL_INPUT_MIC);
   2450     if (x == NULL || PyDict_SetItemString(d, "INPUT_MIC", x) < 0)
   2451         goto error;
   2452     Py_DECREF(x);
   2453 #endif
   2454 #ifdef AL_INPUT_PORT_TYPE
   2455     x =  PyInt_FromLong((long) AL_INPUT_PORT_TYPE);
   2456     if (x == NULL || PyDict_SetItemString(d, "INPUT_PORT_TYPE", x) < 0)
   2457         goto error;
   2458     Py_DECREF(x);
   2459 #endif
   2460 #ifdef AL_INPUT_RATE
   2461     x =  PyInt_FromLong((long) AL_INPUT_RATE);
   2462     if (x == NULL || PyDict_SetItemString(d, "INPUT_RATE", x) < 0)
   2463         goto error;
   2464     Py_DECREF(x);
   2465 #endif
   2466 #ifdef AL_INPUT_SOURCE
   2467     x =  PyInt_FromLong((long) AL_INPUT_SOURCE);
   2468     if (x == NULL || PyDict_SetItemString(d, "INPUT_SOURCE", x) < 0)
   2469         goto error;
   2470     Py_DECREF(x);
   2471 #endif
   2472 #ifdef AL_INT32_ELEM
   2473     x =  PyInt_FromLong((long) AL_INT32_ELEM);
   2474     if (x == NULL || PyDict_SetItemString(d, "INT32_ELEM", x) < 0)
   2475         goto error;
   2476     Py_DECREF(x);
   2477 #endif
   2478 #ifdef AL_INT64_ELEM
   2479     x =  PyInt_FromLong((long) AL_INT64_ELEM);
   2480     if (x == NULL || PyDict_SetItemString(d, "INT64_ELEM", x) < 0)
   2481         goto error;
   2482     Py_DECREF(x);
   2483 #endif
   2484 #ifdef AL_INTERFACE
   2485     x =  PyInt_FromLong((long) AL_INTERFACE);
   2486     if (x == NULL || PyDict_SetItemString(d, "INTERFACE", x) < 0)
   2487         goto error;
   2488     Py_DECREF(x);
   2489 #endif
   2490 #ifdef AL_INTERFACE_TYPE
   2491     x =  PyInt_FromLong((long) AL_INTERFACE_TYPE);
   2492     if (x == NULL || PyDict_SetItemString(d, "INTERFACE_TYPE", x) < 0)
   2493         goto error;
   2494     Py_DECREF(x);
   2495 #endif
   2496 #ifdef AL_INVALID_PARAM
   2497     x =  PyInt_FromLong((long) AL_INVALID_PARAM);
   2498     if (x == NULL || PyDict_SetItemString(d, "INVALID_PARAM", x) < 0)
   2499         goto error;
   2500     Py_DECREF(x);
   2501 #endif
   2502 #ifdef AL_INVALID_VALUE
   2503     x =  PyInt_FromLong((long) AL_INVALID_VALUE);
   2504     if (x == NULL || PyDict_SetItemString(d, "INVALID_VALUE", x) < 0)
   2505         goto error;
   2506     Py_DECREF(x);
   2507 #endif
   2508 #ifdef AL_JITTER
   2509     x =  PyInt_FromLong((long) AL_JITTER);
   2510     if (x == NULL || PyDict_SetItemString(d, "JITTER", x) < 0)
   2511         goto error;
   2512     Py_DECREF(x);
   2513 #endif
   2514 #ifdef AL_LABEL
   2515     x =  PyInt_FromLong((long) AL_LABEL);
   2516     if (x == NULL || PyDict_SetItemString(d, "LABEL", x) < 0)
   2517         goto error;
   2518     Py_DECREF(x);
   2519 #endif
   2520 #ifdef AL_LEFT_INPUT_ATTEN
   2521     x =  PyInt_FromLong((long) AL_LEFT_INPUT_ATTEN);
   2522     if (x == NULL || PyDict_SetItemString(d, "LEFT_INPUT_ATTEN", x) < 0)
   2523         goto error;
   2524     Py_DECREF(x);
   2525 #endif
   2526 #ifdef AL_LEFT_MONITOR_ATTEN
   2527     x =  PyInt_FromLong((long) AL_LEFT_MONITOR_ATTEN);
   2528     if (x == NULL || PyDict_SetItemString(d, "LEFT_MONITOR_ATTEN", x) < 0)
   2529         goto error;
   2530     Py_DECREF(x);
   2531 #endif
   2532 #ifdef AL_LEFT_SPEAKER_GAIN
   2533     x =  PyInt_FromLong((long) AL_LEFT_SPEAKER_GAIN);
   2534     if (x == NULL || PyDict_SetItemString(d, "LEFT_SPEAKER_GAIN", x) < 0)
   2535         goto error;
   2536     Py_DECREF(x);
   2537 #endif
   2538 #ifdef AL_LEFT1_INPUT_ATTEN
   2539     x =  PyInt_FromLong((long) AL_LEFT1_INPUT_ATTEN);
   2540     if (x == NULL || PyDict_SetItemString(d, "LEFT1_INPUT_ATTEN", x) < 0)
   2541         goto error;
   2542     Py_DECREF(x);
   2543 #endif
   2544 #ifdef AL_LEFT2_INPUT_ATTEN
   2545     x =  PyInt_FromLong((long) AL_LEFT2_INPUT_ATTEN);
   2546     if (x == NULL || PyDict_SetItemString(d, "LEFT2_INPUT_ATTEN", x) < 0)
   2547         goto error;
   2548     Py_DECREF(x);
   2549 #endif
   2550 #ifdef AL_LINE_IF_TYPE
   2551     x =  PyInt_FromLong((long) AL_LINE_IF_TYPE);
   2552     if (x == NULL || PyDict_SetItemString(d, "LINE_IF_TYPE", x) < 0)
   2553         goto error;
   2554     Py_DECREF(x);
   2555 #endif
   2556 #ifdef AL_LOCKED
   2557     x =  PyInt_FromLong((long) AL_LOCKED);
   2558     if (x == NULL || PyDict_SetItemString(d, "LOCKED", x) < 0)
   2559         goto error;
   2560     Py_DECREF(x);
   2561 #endif
   2562 #ifdef AL_MASTER_CLOCK
   2563     x =  PyInt_FromLong((long) AL_MASTER_CLOCK);
   2564     if (x == NULL || PyDict_SetItemString(d, "MASTER_CLOCK", x) < 0)
   2565         goto error;
   2566     Py_DECREF(x);
   2567 #endif
   2568 #ifdef AL_MATRIX_VAL
   2569     x =  PyInt_FromLong((long) AL_MATRIX_VAL);
   2570     if (x == NULL || PyDict_SetItemString(d, "MATRIX_VAL", x) < 0)
   2571         goto error;
   2572     Py_DECREF(x);
   2573 #endif
   2574 #ifdef AL_MAX_ERROR
   2575     x =  PyInt_FromLong((long) AL_MAX_ERROR);
   2576     if (x == NULL || PyDict_SetItemString(d, "MAX_ERROR", x) < 0)
   2577         goto error;
   2578     Py_DECREF(x);
   2579 #endif
   2580 #ifdef AL_MAX_EVENT_PARAM
   2581     x =  PyInt_FromLong((long) AL_MAX_EVENT_PARAM);
   2582     if (x == NULL || PyDict_SetItemString(d, "MAX_EVENT_PARAM", x) < 0)
   2583         goto error;
   2584     Py_DECREF(x);
   2585 #endif
   2586 #ifdef AL_MAX_PBUFSIZE
   2587     x =  PyInt_FromLong((long) AL_MAX_PBUFSIZE);
   2588     if (x == NULL || PyDict_SetItemString(d, "MAX_PBUFSIZE", x) < 0)
   2589         goto error;
   2590     Py_DECREF(x);
   2591 #endif
   2592 #ifdef AL_MAX_PORTS
   2593     x =  PyInt_FromLong((long) AL_MAX_PORTS);
   2594     if (x == NULL || PyDict_SetItemString(d, "MAX_PORTS", x) < 0)
   2595         goto error;
   2596     Py_DECREF(x);
   2597 #endif
   2598 #ifdef AL_MAX_RESOURCE_ID
   2599     x =  PyInt_FromLong((long) AL_MAX_RESOURCE_ID);
   2600     if (x == NULL || PyDict_SetItemString(d, "MAX_RESOURCE_ID", x) < 0)
   2601         goto error;
   2602     Py_DECREF(x);
   2603 #endif
   2604 #ifdef AL_MAX_SETSIZE
   2605     x =  PyInt_FromLong((long) AL_MAX_SETSIZE);
   2606     if (x == NULL || PyDict_SetItemString(d, "MAX_SETSIZE", x) < 0)
   2607         goto error;
   2608     Py_DECREF(x);
   2609 #endif
   2610 #ifdef AL_MAX_STRLEN
   2611     x =  PyInt_FromLong((long) AL_MAX_STRLEN);
   2612     if (x == NULL || PyDict_SetItemString(d, "MAX_STRLEN", x) < 0)
   2613         goto error;
   2614     Py_DECREF(x);
   2615 #endif
   2616 #ifdef AL_MCLK_TYPE
   2617     x =  PyInt_FromLong((long) AL_MCLK_TYPE);
   2618     if (x == NULL || PyDict_SetItemString(d, "MCLK_TYPE", x) < 0)
   2619         goto error;
   2620     Py_DECREF(x);
   2621 #endif
   2622 #ifdef AL_MIC_IF_TYPE
   2623     x =  PyInt_FromLong((long) AL_MIC_IF_TYPE);
   2624     if (x == NULL || PyDict_SetItemString(d, "MIC_IF_TYPE", x) < 0)
   2625         goto error;
   2626     Py_DECREF(x);
   2627 #endif
   2628 #ifdef AL_MONITOR_CTL
   2629     x =  PyInt_FromLong((long) AL_MONITOR_CTL);
   2630     if (x == NULL || PyDict_SetItemString(d, "MONITOR_CTL", x) < 0)
   2631         goto error;
   2632     Py_DECREF(x);
   2633 #endif
   2634 #ifdef AL_MONITOR_OFF
   2635     x =  PyInt_FromLong((long) AL_MONITOR_OFF);
   2636     if (x == NULL || PyDict_SetItemString(d, "MONITOR_OFF", x) < 0)
   2637         goto error;
   2638     Py_DECREF(x);
   2639 #endif
   2640 #ifdef AL_MONITOR_ON
   2641     x =  PyInt_FromLong((long) AL_MONITOR_ON);
   2642     if (x == NULL || PyDict_SetItemString(d, "MONITOR_ON", x) < 0)
   2643         goto error;
   2644     Py_DECREF(x);
   2645 #endif
   2646 #ifdef AL_MONO
   2647     x =  PyInt_FromLong((long) AL_MONO);
   2648     if (x == NULL || PyDict_SetItemString(d, "MONO", x) < 0)
   2649         goto error;
   2650     Py_DECREF(x);
   2651 #endif
   2652 #ifdef AL_MUTE
   2653     x =  PyInt_FromLong((long) AL_MUTE);
   2654     if (x == NULL || PyDict_SetItemString(d, "MUTE", x) < 0)
   2655         goto error;
   2656     Py_DECREF(x);
   2657 #endif
   2658 #ifdef AL_NAME
   2659     x =  PyInt_FromLong((long) AL_NAME);
   2660     if (x == NULL || PyDict_SetItemString(d, "NAME", x) < 0)
   2661         goto error;
   2662     Py_DECREF(x);
   2663 #endif
   2664 #ifdef AL_NEG_INFINITY
   2665     x =  PyInt_FromLong((long) AL_NEG_INFINITY);
   2666     if (x == NULL || PyDict_SetItemString(d, "NEG_INFINITY", x) < 0)
   2667         goto error;
   2668     Py_DECREF(x);
   2669 #endif
   2670 #ifdef AL_NEG_INFINITY_BIT
   2671     x =  PyInt_FromLong((long) AL_NEG_INFINITY_BIT);
   2672     if (x == NULL || PyDict_SetItemString(d, "NEG_INFINITY_BIT", x) < 0)
   2673         goto error;
   2674     Py_DECREF(x);
   2675 #endif
   2676 #ifdef AL_NO_CHANGE
   2677     x =  PyInt_FromLong((long) AL_NO_CHANGE);
   2678     if (x == NULL || PyDict_SetItemString(d, "NO_CHANGE", x) < 0)
   2679         goto error;
   2680     Py_DECREF(x);
   2681 #endif
   2682 #ifdef AL_NO_CHANGE_BIT
   2683     x =  PyInt_FromLong((long) AL_NO_CHANGE_BIT);
   2684     if (x == NULL || PyDict_SetItemString(d, "NO_CHANGE_BIT", x) < 0)
   2685         goto error;
   2686     Py_DECREF(x);
   2687 #endif
   2688 #ifdef AL_NO_ELEM
   2689     x =  PyInt_FromLong((long) AL_NO_ELEM);
   2690     if (x == NULL || PyDict_SetItemString(d, "NO_ELEM", x) < 0)
   2691         goto error;
   2692     Py_DECREF(x);
   2693 #endif
   2694 #ifdef AL_NO_ERRORS
   2695     x =  PyInt_FromLong((long) AL_NO_ERRORS);
   2696     if (x == NULL || PyDict_SetItemString(d, "NO_ERRORS", x) < 0)
   2697         goto error;
   2698     Py_DECREF(x);
   2699 #endif
   2700 #ifdef AL_NO_OP
   2701     x =  PyInt_FromLong((long) AL_NO_OP);
   2702     if (x == NULL || PyDict_SetItemString(d, "NO_OP", x) < 0)
   2703         goto error;
   2704     Py_DECREF(x);
   2705 #endif
   2706 #ifdef AL_NO_VAL
   2707     x =  PyInt_FromLong((long) AL_NO_VAL);
   2708     if (x == NULL || PyDict_SetItemString(d, "NO_VAL", x) < 0)
   2709         goto error;
   2710     Py_DECREF(x);
   2711 #endif
   2712 #ifdef AL_NULL_INTERFACE
   2713     x =  PyInt_FromLong((long) AL_NULL_INTERFACE);
   2714     if (x == NULL || PyDict_SetItemString(d, "NULL_INTERFACE", x) < 0)
   2715         goto error;
   2716     Py_DECREF(x);
   2717 #endif
   2718 #ifdef AL_NULL_RESOURCE
   2719     x =  PyInt_FromLong((long) AL_NULL_RESOURCE);
   2720     if (x == NULL || PyDict_SetItemString(d, "NULL_RESOURCE", x) < 0)
   2721         goto error;
   2722     Py_DECREF(x);
   2723 #endif
   2724 #ifdef AL_OPTICAL_IF_TYPE
   2725     x =  PyInt_FromLong((long) AL_OPTICAL_IF_TYPE);
   2726     if (x == NULL || PyDict_SetItemString(d, "OPTICAL_IF_TYPE", x) < 0)
   2727         goto error;
   2728     Py_DECREF(x);
   2729 #endif
   2730 #ifdef AL_OUTPUT_COUNT
   2731     x =  PyInt_FromLong((long) AL_OUTPUT_COUNT);
   2732     if (x == NULL || PyDict_SetItemString(d, "OUTPUT_COUNT", x) < 0)
   2733         goto error;
   2734     Py_DECREF(x);
   2735 #endif
   2736 #ifdef AL_OUTPUT_DEVICE_TYPE
   2737     x =  PyInt_FromLong((long) AL_OUTPUT_DEVICE_TYPE);
   2738     if (x == NULL || PyDict_SetItemString(d, "OUTPUT_DEVICE_TYPE", x) < 0)
   2739         goto error;
   2740     Py_DECREF(x);
   2741 #endif
   2742 #ifdef AL_OUTPUT_HRB_TYPE
   2743     x =  PyInt_FromLong((long) AL_OUTPUT_HRB_TYPE);
   2744     if (x == NULL || PyDict_SetItemString(d, "OUTPUT_HRB_TYPE", x) < 0)
   2745         goto error;
   2746     Py_DECREF(x);
   2747 #endif
   2748 #ifdef AL_OUTPUT_PORT_TYPE
   2749     x =  PyInt_FromLong((long) AL_OUTPUT_PORT_TYPE);
   2750     if (x == NULL || PyDict_SetItemString(d, "OUTPUT_PORT_TYPE", x) < 0)
   2751         goto error;
   2752     Py_DECREF(x);
   2753 #endif
   2754 #ifdef AL_OUTPUT_RATE
   2755     x =  PyInt_FromLong((long) AL_OUTPUT_RATE);
   2756     if (x == NULL || PyDict_SetItemString(d, "OUTPUT_RATE", x) < 0)
   2757         goto error;
   2758     Py_DECREF(x);
   2759 #endif
   2760 #ifdef AL_PARAM_BIT
   2761     x =  PyInt_FromLong((long) AL_PARAM_BIT);
   2762     if (x == NULL || PyDict_SetItemString(d, "PARAM_BIT", x) < 0)
   2763         goto error;
   2764     Py_DECREF(x);
   2765 #endif
   2766 #ifdef AL_PARAMS
   2767     x =  PyInt_FromLong((long) AL_PARAMS);
   2768     if (x == NULL || PyDict_SetItemString(d, "PARAMS", x) < 0)
   2769         goto error;
   2770     Py_DECREF(x);
   2771 #endif
   2772 #ifdef AL_PORT_COUNT
   2773     x =  PyInt_FromLong((long) AL_PORT_COUNT);
   2774     if (x == NULL || PyDict_SetItemString(d, "PORT_COUNT", x) < 0)
   2775         goto error;
   2776     Py_DECREF(x);
   2777 #endif
   2778 #ifdef AL_PORT_TYPE
   2779     x =  PyInt_FromLong((long) AL_PORT_TYPE);
   2780     if (x == NULL || PyDict_SetItemString(d, "PORT_TYPE", x) < 0)
   2781         goto error;
   2782     Py_DECREF(x);
   2783 #endif
   2784 #ifdef AL_PORTS
   2785     x =  PyInt_FromLong((long) AL_PORTS);
   2786     if (x == NULL || PyDict_SetItemString(d, "PORTS", x) < 0)
   2787         goto error;
   2788     Py_DECREF(x);
   2789 #endif
   2790 #ifdef AL_PORTSTYLE_DIRECT
   2791     x =  PyInt_FromLong((long) AL_PORTSTYLE_DIRECT);
   2792     if (x == NULL || PyDict_SetItemString(d, "PORTSTYLE_DIRECT", x) < 0)
   2793         goto error;
   2794     Py_DECREF(x);
   2795 #endif
   2796 #ifdef AL_PORTSTYLE_SERIAL
   2797     x =  PyInt_FromLong((long) AL_PORTSTYLE_SERIAL);
   2798     if (x == NULL || PyDict_SetItemString(d, "PORTSTYLE_SERIAL", x) < 0)
   2799         goto error;
   2800     Py_DECREF(x);
   2801 #endif
   2802 #ifdef AL_PRINT_ERRORS
   2803     x =  PyInt_FromLong((long) AL_PRINT_ERRORS);
   2804     if (x == NULL || PyDict_SetItemString(d, "PRINT_ERRORS", x) < 0)
   2805         goto error;
   2806     Py_DECREF(x);
   2807 #endif
   2808 #ifdef AL_PTR_ELEM
   2809     x =  PyInt_FromLong((long) AL_PTR_ELEM);
   2810     if (x == NULL || PyDict_SetItemString(d, "PTR_ELEM", x) < 0)
   2811         goto error;
   2812     Py_DECREF(x);
   2813 #endif
   2814 #ifdef AL_RANGE_VALUE
   2815     x =  PyInt_FromLong((long) AL_RANGE_VALUE);
   2816     if (x == NULL || PyDict_SetItemString(d, "RANGE_VALUE", x) < 0)
   2817         goto error;
   2818     Py_DECREF(x);
   2819 #endif
   2820 #ifdef AL_RATE
   2821     x =  PyInt_FromLong((long) AL_RATE);
   2822     if (x == NULL || PyDict_SetItemString(d, "RATE", x) < 0)
   2823         goto error;
   2824     Py_DECREF(x);
   2825 #endif
   2826 #ifdef AL_RATE_11025
   2827     x =  PyInt_FromLong((long) AL_RATE_11025);
   2828     if (x == NULL || PyDict_SetItemString(d, "RATE_11025", x) < 0)
   2829         goto error;
   2830     Py_DECREF(x);
   2831 #endif
   2832 #ifdef AL_RATE_16000
   2833     x =  PyInt_FromLong((long) AL_RATE_16000);
   2834     if (x == NULL || PyDict_SetItemString(d, "RATE_16000", x) < 0)
   2835         goto error;
   2836     Py_DECREF(x);
   2837 #endif
   2838 #ifdef AL_RATE_22050
   2839     x =  PyInt_FromLong((long) AL_RATE_22050);
   2840     if (x == NULL || PyDict_SetItemString(d, "RATE_22050", x) < 0)
   2841         goto error;
   2842     Py_DECREF(x);
   2843 #endif
   2844 #ifdef AL_RATE_32000
   2845     x =  PyInt_FromLong((long) AL_RATE_32000);
   2846     if (x == NULL || PyDict_SetItemString(d, "RATE_32000", x) < 0)
   2847         goto error;
   2848     Py_DECREF(x);
   2849 #endif
   2850 #ifdef AL_RATE_44100
   2851     x =  PyInt_FromLong((long) AL_RATE_44100);
   2852     if (x == NULL || PyDict_SetItemString(d, "RATE_44100", x) < 0)
   2853         goto error;
   2854     Py_DECREF(x);
   2855 #endif
   2856 #ifdef AL_RATE_48000
   2857     x =  PyInt_FromLong((long) AL_RATE_48000);
   2858     if (x == NULL || PyDict_SetItemString(d, "RATE_48000", x) < 0)
   2859         goto error;
   2860     Py_DECREF(x);
   2861 #endif
   2862 #ifdef AL_RATE_8000
   2863     x =  PyInt_FromLong((long) AL_RATE_8000);
   2864     if (x == NULL || PyDict_SetItemString(d, "RATE_8000", x) < 0)
   2865         goto error;
   2866     Py_DECREF(x);
   2867 #endif
   2868 #ifdef AL_RATE_AES_1
   2869     x =  PyInt_FromLong((long) AL_RATE_AES_1);
   2870     if (x == NULL || PyDict_SetItemString(d, "RATE_AES_1", x) < 0)
   2871         goto error;
   2872     Py_DECREF(x);
   2873 #endif
   2874 #ifdef AL_RATE_AES_1s
   2875     x =  PyInt_FromLong((long) AL_RATE_AES_1s);
   2876     if (x == NULL || PyDict_SetItemString(d, "RATE_AES_1s", x) < 0)
   2877         goto error;
   2878     Py_DECREF(x);
   2879 #endif
   2880 #ifdef AL_RATE_AES_2
   2881     x =  PyInt_FromLong((long) AL_RATE_AES_2);
   2882     if (x == NULL || PyDict_SetItemString(d, "RATE_AES_2", x) < 0)
   2883         goto error;
   2884     Py_DECREF(x);
   2885 #endif
   2886 #ifdef AL_RATE_AES_3
   2887     x =  PyInt_FromLong((long) AL_RATE_AES_3);
   2888     if (x == NULL || PyDict_SetItemString(d, "RATE_AES_3", x) < 0)
   2889         goto error;
   2890     Py_DECREF(x);
   2891 #endif
   2892 #ifdef AL_RATE_AES_4
   2893     x =  PyInt_FromLong((long) AL_RATE_AES_4);
   2894     if (x == NULL || PyDict_SetItemString(d, "RATE_AES_4", x) < 0)
   2895         goto error;
   2896     Py_DECREF(x);
   2897 #endif
   2898 #ifdef AL_RATE_AES_6
   2899     x =  PyInt_FromLong((long) AL_RATE_AES_6);
   2900     if (x == NULL || PyDict_SetItemString(d, "RATE_AES_6", x) < 0)
   2901         goto error;
   2902     Py_DECREF(x);
   2903 #endif
   2904 #ifdef AL_RATE_FRACTION_D
   2905     x =  PyInt_FromLong((long) AL_RATE_FRACTION_D);
   2906     if (x == NULL || PyDict_SetItemString(d, "RATE_FRACTION_D", x) < 0)
   2907         goto error;
   2908     Py_DECREF(x);
   2909 #endif
   2910 #ifdef AL_RATE_FRACTION_N
   2911     x =  PyInt_FromLong((long) AL_RATE_FRACTION_N);
   2912     if (x == NULL || PyDict_SetItemString(d, "RATE_FRACTION_N", x) < 0)
   2913         goto error;
   2914     Py_DECREF(x);
   2915 #endif
   2916 #ifdef AL_RATE_INPUTRATE
   2917     x =  PyInt_FromLong((long) AL_RATE_INPUTRATE);
   2918     if (x == NULL || PyDict_SetItemString(d, "RATE_INPUTRATE", x) < 0)
   2919         goto error;
   2920     Py_DECREF(x);
   2921 #endif
   2922 #ifdef AL_RATE_NO_DIGITAL_INPUT
   2923     x =  PyInt_FromLong((long) AL_RATE_NO_DIGITAL_INPUT);
   2924     if (x == NULL || PyDict_SetItemString(d, "RATE_NO_DIGITAL_INPUT", x) < 0)
   2925         goto error;
   2926     Py_DECREF(x);
   2927 #endif
   2928 #ifdef AL_RATE_UNACQUIRED
   2929     x =  PyInt_FromLong((long) AL_RATE_UNACQUIRED);
   2930     if (x == NULL || PyDict_SetItemString(d, "RATE_UNACQUIRED", x) < 0)
   2931         goto error;
   2932     Py_DECREF(x);
   2933 #endif
   2934 #ifdef AL_RATE_UNDEFINED
   2935     x =  PyInt_FromLong((long) AL_RATE_UNDEFINED);
   2936     if (x == NULL || PyDict_SetItemString(d, "RATE_UNDEFINED", x) < 0)
   2937         goto error;
   2938     Py_DECREF(x);
   2939 #endif
   2940 #ifdef AL_REF_0DBV
   2941     x =  PyInt_FromLong((long) AL_REF_0DBV);
   2942     if (x == NULL || PyDict_SetItemString(d, "REF_0DBV", x) < 0)
   2943         goto error;
   2944     Py_DECREF(x);
   2945 #endif
   2946 #ifdef AL_REF_NONE
   2947     x =  PyInt_FromLong((long) AL_REF_NONE);
   2948     if (x == NULL || PyDict_SetItemString(d, "REF_NONE", x) < 0)
   2949         goto error;
   2950     Py_DECREF(x);
   2951 #endif
   2952 #ifdef AL_RESERVED1_TYPE
   2953     x =  PyInt_FromLong((long) AL_RESERVED1_TYPE);
   2954     if (x == NULL || PyDict_SetItemString(d, "RESERVED1_TYPE", x) < 0)
   2955         goto error;
   2956     Py_DECREF(x);
   2957 #endif
   2958 #ifdef AL_RESERVED2_TYPE
   2959     x =  PyInt_FromLong((long) AL_RESERVED2_TYPE);
   2960     if (x == NULL || PyDict_SetItemString(d, "RESERVED2_TYPE", x) < 0)
   2961         goto error;
   2962     Py_DECREF(x);
   2963 #endif
   2964 #ifdef AL_RESERVED3_TYPE
   2965     x =  PyInt_FromLong((long) AL_RESERVED3_TYPE);
   2966     if (x == NULL || PyDict_SetItemString(d, "RESERVED3_TYPE", x) < 0)
   2967         goto error;
   2968     Py_DECREF(x);
   2969 #endif
   2970 #ifdef AL_RESERVED4_TYPE
   2971     x =  PyInt_FromLong((long) AL_RESERVED4_TYPE);
   2972     if (x == NULL || PyDict_SetItemString(d, "RESERVED4_TYPE", x) < 0)
   2973         goto error;
   2974     Py_DECREF(x);
   2975 #endif
   2976 #ifdef AL_RESOURCE
   2977     x =  PyInt_FromLong((long) AL_RESOURCE);
   2978     if (x == NULL || PyDict_SetItemString(d, "RESOURCE", x) < 0)
   2979         goto error;
   2980     Py_DECREF(x);
   2981 #endif
   2982 #ifdef AL_RESOURCE_ELEM
   2983     x =  PyInt_FromLong((long) AL_RESOURCE_ELEM);
   2984     if (x == NULL || PyDict_SetItemString(d, "RESOURCE_ELEM", x) < 0)
   2985         goto error;
   2986     Py_DECREF(x);
   2987 #endif
   2988 #ifdef AL_RESOURCE_TYPE
   2989     x =  PyInt_FromLong((long) AL_RESOURCE_TYPE);
   2990     if (x == NULL || PyDict_SetItemString(d, "RESOURCE_TYPE", x) < 0)
   2991         goto error;
   2992     Py_DECREF(x);
   2993 #endif
   2994 #ifdef AL_RIGHT_INPUT_ATTEN
   2995     x =  PyInt_FromLong((long) AL_RIGHT_INPUT_ATTEN);
   2996     if (x == NULL || PyDict_SetItemString(d, "RIGHT_INPUT_ATTEN", x) < 0)
   2997         goto error;
   2998     Py_DECREF(x);
   2999 #endif
   3000 #ifdef AL_RIGHT_MONITOR_ATTEN
   3001     x =  PyInt_FromLong((long) AL_RIGHT_MONITOR_ATTEN);
   3002     if (x == NULL || PyDict_SetItemString(d, "RIGHT_MONITOR_ATTEN", x) < 0)
   3003         goto error;
   3004     Py_DECREF(x);
   3005 #endif
   3006 #ifdef AL_RIGHT_SPEAKER_GAIN
   3007     x =  PyInt_FromLong((long) AL_RIGHT_SPEAKER_GAIN);
   3008     if (x == NULL || PyDict_SetItemString(d, "RIGHT_SPEAKER_GAIN", x) < 0)
   3009         goto error;
   3010     Py_DECREF(x);
   3011 #endif
   3012 #ifdef AL_RIGHT1_INPUT_ATTEN
   3013     x =  PyInt_FromLong((long) AL_RIGHT1_INPUT_ATTEN);
   3014     if (x == NULL || PyDict_SetItemString(d, "RIGHT1_INPUT_ATTEN", x) < 0)
   3015         goto error;
   3016     Py_DECREF(x);
   3017 #endif
   3018 #ifdef AL_RIGHT2_INPUT_ATTEN
   3019     x =  PyInt_FromLong((long) AL_RIGHT2_INPUT_ATTEN);
   3020     if (x == NULL || PyDict_SetItemString(d, "RIGHT2_INPUT_ATTEN", x) < 0)
   3021         goto error;
   3022     Py_DECREF(x);
   3023 #endif
   3024 #ifdef AL_SAMPFMT_DOUBLE
   3025     x =  PyInt_FromLong((long) AL_SAMPFMT_DOUBLE);
   3026     if (x == NULL || PyDict_SetItemString(d, "SAMPFMT_DOUBLE", x) < 0)
   3027         goto error;
   3028     Py_DECREF(x);
   3029 #endif
   3030 #ifdef AL_SAMPFMT_FLOAT
   3031     x =  PyInt_FromLong((long) AL_SAMPFMT_FLOAT);
   3032     if (x == NULL || PyDict_SetItemString(d, "SAMPFMT_FLOAT", x) < 0)
   3033         goto error;
   3034     Py_DECREF(x);
   3035 #endif
   3036 #ifdef AL_SAMPFMT_TWOSCOMP
   3037     x =  PyInt_FromLong((long) AL_SAMPFMT_TWOSCOMP);
   3038     if (x == NULL || PyDict_SetItemString(d, "SAMPFMT_TWOSCOMP", x) < 0)
   3039         goto error;
   3040     Py_DECREF(x);
   3041 #endif
   3042 #ifdef AL_SAMPLE_16
   3043     x =  PyInt_FromLong((long) AL_SAMPLE_16);
   3044     if (x == NULL || PyDict_SetItemString(d, "SAMPLE_16", x) < 0)
   3045         goto error;
   3046     Py_DECREF(x);
   3047 #endif
   3048 #ifdef AL_SAMPLE_24
   3049     x =  PyInt_FromLong((long) AL_SAMPLE_24);
   3050     if (x == NULL || PyDict_SetItemString(d, "SAMPLE_24", x) < 0)
   3051         goto error;
   3052     Py_DECREF(x);
   3053 #endif
   3054 #ifdef AL_SAMPLE_8
   3055     x =  PyInt_FromLong((long) AL_SAMPLE_8);
   3056     if (x == NULL || PyDict_SetItemString(d, "SAMPLE_8", x) < 0)
   3057         goto error;
   3058     Py_DECREF(x);
   3059 #endif
   3060 #ifdef AL_SCALAR_VAL
   3061     x =  PyInt_FromLong((long) AL_SCALAR_VAL);
   3062     if (x == NULL || PyDict_SetItemString(d, "SCALAR_VAL", x) < 0)
   3063         goto error;
   3064     Py_DECREF(x);
   3065 #endif
   3066 #ifdef AL_SET_VAL
   3067     x =  PyInt_FromLong((long) AL_SET_VAL);
   3068     if (x == NULL || PyDict_SetItemString(d, "SET_VAL", x) < 0)
   3069         goto error;
   3070     Py_DECREF(x);
   3071 #endif
   3072 #ifdef AL_SHORT_NAME
   3073     x =  PyInt_FromLong((long) AL_SHORT_NAME);
   3074     if (x == NULL || PyDict_SetItemString(d, "SHORT_NAME", x) < 0)
   3075         goto error;
   3076     Py_DECREF(x);
   3077 #endif
   3078 #ifdef AL_SMPTE272M_IF_TYPE
   3079     x =  PyInt_FromLong((long) AL_SMPTE272M_IF_TYPE);
   3080     if (x == NULL || PyDict_SetItemString(d, "SMPTE272M_IF_TYPE", x) < 0)
   3081         goto error;
   3082     Py_DECREF(x);
   3083 #endif
   3084 #ifdef AL_SOURCE
   3085     x =  PyInt_FromLong((long) AL_SOURCE);
   3086     if (x == NULL || PyDict_SetItemString(d, "SOURCE", x) < 0)
   3087         goto error;
   3088     Py_DECREF(x);
   3089 #endif
   3090 #ifdef AL_SPEAKER_IF_TYPE
   3091     x =  PyInt_FromLong((long) AL_SPEAKER_IF_TYPE);
   3092     if (x == NULL || PyDict_SetItemString(d, "SPEAKER_IF_TYPE", x) < 0)
   3093         goto error;
   3094     Py_DECREF(x);
   3095 #endif
   3096 #ifdef AL_SPEAKER_MUTE_CTL
   3097     x =  PyInt_FromLong((long) AL_SPEAKER_MUTE_CTL);
   3098     if (x == NULL || PyDict_SetItemString(d, "SPEAKER_MUTE_CTL", x) < 0)
   3099         goto error;
   3100     Py_DECREF(x);
   3101 #endif
   3102 #ifdef AL_SPEAKER_MUTE_OFF
   3103     x =  PyInt_FromLong((long) AL_SPEAKER_MUTE_OFF);
   3104     if (x == NULL || PyDict_SetItemString(d, "SPEAKER_MUTE_OFF", x) < 0)
   3105         goto error;
   3106     Py_DECREF(x);
   3107 #endif
   3108 #ifdef AL_SPEAKER_MUTE_ON
   3109     x =  PyInt_FromLong((long) AL_SPEAKER_MUTE_ON);
   3110     if (x == NULL || PyDict_SetItemString(d, "SPEAKER_MUTE_ON", x) < 0)
   3111         goto error;
   3112     Py_DECREF(x);
   3113 #endif
   3114 #ifdef AL_SPEAKER_PLUS_LINE_IF_TYPE
   3115     x =  PyInt_FromLong((long) AL_SPEAKER_PLUS_LINE_IF_TYPE);
   3116     if (x == NULL || PyDict_SetItemString(d, "SPEAKER_PLUS_LINE_IF_TYPE", x) < 0)
   3117         goto error;
   3118     Py_DECREF(x);
   3119 #endif
   3120 #ifdef AL_STEREO
   3121     x =  PyInt_FromLong((long) AL_STEREO);
   3122     if (x == NULL || PyDict_SetItemString(d, "STEREO", x) < 0)
   3123         goto error;
   3124     Py_DECREF(x);
   3125 #endif
   3126 #ifdef AL_STRING_VAL
   3127     x =  PyInt_FromLong((long) AL_STRING_VAL);
   3128     if (x == NULL || PyDict_SetItemString(d, "STRING_VAL", x) < 0)
   3129         goto error;
   3130     Py_DECREF(x);
   3131 #endif
   3132 #ifdef AL_SUBSYSTEM
   3133     x =  PyInt_FromLong((long) AL_SUBSYSTEM);
   3134     if (x == NULL || PyDict_SetItemString(d, "SUBSYSTEM", x) < 0)
   3135         goto error;
   3136     Py_DECREF(x);
   3137 #endif
   3138 #ifdef AL_SUBSYSTEM_TYPE
   3139     x =  PyInt_FromLong((long) AL_SUBSYSTEM_TYPE);
   3140     if (x == NULL || PyDict_SetItemString(d, "SUBSYSTEM_TYPE", x) < 0)
   3141         goto error;
   3142     Py_DECREF(x);
   3143 #endif
   3144 #ifdef AL_SYNC_INPUT_TO_AES
   3145     x =  PyInt_FromLong((long) AL_SYNC_INPUT_TO_AES);
   3146     if (x == NULL || PyDict_SetItemString(d, "SYNC_INPUT_TO_AES", x) < 0)
   3147         goto error;
   3148     Py_DECREF(x);
   3149 #endif
   3150 #ifdef AL_SYNC_OUTPUT_TO_AES
   3151     x =  PyInt_FromLong((long) AL_SYNC_OUTPUT_TO_AES);
   3152     if (x == NULL || PyDict_SetItemString(d, "SYNC_OUTPUT_TO_AES", x) < 0)
   3153         goto error;
   3154     Py_DECREF(x);
   3155 #endif
   3156 #ifdef AL_SYSTEM
   3157     x =  PyInt_FromLong((long) AL_SYSTEM);
   3158     if (x == NULL || PyDict_SetItemString(d, "SYSTEM", x) < 0)
   3159         goto error;
   3160     Py_DECREF(x);
   3161 #endif
   3162 #ifdef AL_SYSTEM_TYPE
   3163     x =  PyInt_FromLong((long) AL_SYSTEM_TYPE);
   3164     if (x == NULL || PyDict_SetItemString(d, "SYSTEM_TYPE", x) < 0)
   3165         goto error;
   3166     Py_DECREF(x);
   3167 #endif
   3168 #ifdef AL_TEST_IF_TYPE
   3169     x =  PyInt_FromLong((long) AL_TEST_IF_TYPE);
   3170     if (x == NULL || PyDict_SetItemString(d, "TEST_IF_TYPE", x) < 0)
   3171         goto error;
   3172     Py_DECREF(x);
   3173 #endif
   3174 #ifdef AL_TYPE
   3175     x =  PyInt_FromLong((long) AL_TYPE);
   3176     if (x == NULL || PyDict_SetItemString(d, "TYPE", x) < 0)
   3177         goto error;
   3178     Py_DECREF(x);
   3179 #endif
   3180 #ifdef AL_TYPE_BIT
   3181     x =  PyInt_FromLong((long) AL_TYPE_BIT);
   3182     if (x == NULL || PyDict_SetItemString(d, "TYPE_BIT", x) < 0)
   3183         goto error;
   3184     Py_DECREF(x);
   3185 #endif
   3186 #ifdef AL_UNUSED_COUNT
   3187     x =  PyInt_FromLong((long) AL_UNUSED_COUNT);
   3188     if (x == NULL || PyDict_SetItemString(d, "UNUSED_COUNT", x) < 0)
   3189         goto error;
   3190     Py_DECREF(x);
   3191 #endif
   3192 #ifdef AL_UNUSED_PORTS
   3193     x =  PyInt_FromLong((long) AL_UNUSED_PORTS);
   3194     if (x == NULL || PyDict_SetItemString(d, "UNUSED_PORTS", x) < 0)
   3195         goto error;
   3196     Py_DECREF(x);
   3197 #endif
   3198 #ifdef AL_VARIABLE_MCLK_TYPE
   3199     x =  PyInt_FromLong((long) AL_VARIABLE_MCLK_TYPE);
   3200     if (x == NULL || PyDict_SetItemString(d, "VARIABLE_MCLK_TYPE", x) < 0)
   3201         goto error;
   3202     Py_DECREF(x);
   3203 #endif
   3204 #ifdef AL_VECTOR_VAL
   3205     x =  PyInt_FromLong((long) AL_VECTOR_VAL);
   3206     if (x == NULL || PyDict_SetItemString(d, "VECTOR_VAL", x) < 0)
   3207         goto error;
   3208     Py_DECREF(x);
   3209 #endif
   3210 #ifdef AL_VIDEO_MCLK_TYPE
   3211     x =  PyInt_FromLong((long) AL_VIDEO_MCLK_TYPE);
   3212     if (x == NULL || PyDict_SetItemString(d, "VIDEO_MCLK_TYPE", x) < 0)
   3213         goto error;
   3214     Py_DECREF(x);
   3215 #endif
   3216 #ifdef AL_WORDSIZE
   3217     x =  PyInt_FromLong((long) AL_WORDSIZE);
   3218     if (x == NULL || PyDict_SetItemString(d, "WORDSIZE", x) < 0)
   3219         goto error;
   3220     Py_DECREF(x);
   3221 #endif
   3222 
   3223 #ifdef AL_NO_ELEM               /* IRIX 6 */
   3224     (void) alSetErrorHandler(ErrorHandler);
   3225 #endif /* AL_NO_ELEM */
   3226 #ifdef OLD_INTERFACE
   3227     (void) ALseterrorhandler(ErrorHandler);
   3228 #endif /* OLD_INTERFACE */
   3229 
   3230   error:
   3231     return;
   3232 }
   3233