/* Copyright 1999 Red Hat, Inc. * * This software may be freely redistributed under the terms of the GNU * public license. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * */ #include "kudzu.h" #include "Python.h" typedef struct { char * name; int value; } TableEntry; static TableEntry classTable[] = { { "CLASS_UNSPEC", CLASS_UNSPEC }, { "CLASS_OTHER", CLASS_OTHER }, { "CLASS_NETWORK", CLASS_NETWORK }, { "CLASS_SCSI", CLASS_SCSI }, { "CLASS_VIDEO", CLASS_VIDEO }, { "CLASS_AUDIO", CLASS_AUDIO }, { "CLASS_MOUSE", CLASS_MOUSE }, { "CLASS_MODEM", CLASS_MODEM }, { "CLASS_CDROM", CLASS_CDROM }, { "CLASS_TAPE", CLASS_TAPE }, { "CLASS_FLOPPY", CLASS_FLOPPY }, { "CLASS_SCANNER", CLASS_SCANNER }, { "CLASS_HD", CLASS_HD }, { "CLASS_RAID", CLASS_RAID }, { "CLASS_PRINTER", CLASS_PRINTER }, { NULL }, } ; static int numClassEntries = sizeof (classTable) / sizeof classTable[0]; static TableEntry busTable[] = { { "BUS_UNSPEC", BUS_UNSPEC }, { "BUS_OTHER", BUS_OTHER }, { "BUS_PCI", BUS_PCI }, { "BUS_SBUS", BUS_SBUS }, { "BUS_PSAUX", BUS_PSAUX }, { "BUS_SERIAL", BUS_SERIAL }, { "BUS_PARALLEL", BUS_PARALLEL }, { "BUS_SCSI", BUS_SCSI }, { "BUS_IDE", BUS_IDE }, /* { "BUS_ISAPNP", BUS_ISAPNP }, */ { NULL }, } ; static int numBusEntries = sizeof (busTable) / sizeof busTable[0]; static TableEntry modeTable[] = { { "PROBE_ALL", PROBE_ALL }, { "PROBE_SAFE", PROBE_SAFE }, { "PROBE_ONE", PROBE_ONE }, { NULL }, } ; static int numModeEntries = sizeof (modeTable) / sizeof modeTable[0]; static PyObject * doProbe (PyObject * self, PyObject * args) { int class, bus, mode; struct device ** devices, ** tmp; PyObject * list; if (!PyArg_ParseTuple(args, "iii", &class, &bus, &mode)) return NULL; devices = probeDevices(class, bus, mode); list = PyList_New(0); if (!devices) return list; tmp = devices; while (*tmp) { PyList_Append (list, Py_BuildValue("(sss)", (*tmp)->device, (*tmp)->driver, (*tmp)->desc)); tmp++; } tmp = devices; while (*tmp) { (*tmp)->freeDevice (*tmp); tmp++; } free(devices); return list; } static PyMethodDef kudzuMethods[] = { { "probe", (PyCFunction) doProbe, METH_VARARGS, NULL }, { NULL } } ; static void registerTable (PyObject * dict, TableEntry * table) { int i; i = 0; while (table[i].name) { PyDict_SetItemString(dict, table[i].name, PyInt_FromLong (table[i].value)); i++; } } void initkudzu (void) { PyObject * m, * dict; int i; m = Py_InitModule("kudzu", kudzuMethods); dict = PyModule_GetDict(m); registerTable (dict, classTable); registerTable (dict, busTable); registerTable (dict, modeTable); initializeDeviceList(); }