All pastes #383113 Raw Edit

Mine

public text v1 · immutable
·published 2007-03-06 03:19 UTC
rendered paste body
class myVendor(object):
    def __init__(self):
        self.name = ""
        self.num = ""
        self.devices = {}

class myDevice(object):
    def __init__(self):
        self.name = ""
        self.num = ""
        self.subvendors = {}
        self.vendor = ""

def deviceMap(bus='pci'):
    fn = "/usr/share/hwdata/%s.ids" % bus

    fo = open(fn, 'r')
    vendors = {}
    for i in range(32000):
        vendors[i] = ''
    curvendor = None
    curdevice = None
    for line in fo.readlines():
        if line.startswith('#') or not line.strip():
            continue
        elif not line.startswith('\t'):
            curvendor = myVendor()
            curvendor.num = line[0:4]
            curvendor.name = line[6:-1]
            curvendor.num = '0x%s' % curvendor.num
            print curvendor.num
            vendors[curvendor.num] = curvendor
            continue

        elif line.startswith('\t\t'):
            line = line.replace('\t', '')
            thisdev = myDevice()
            thisdev.vendor = line[0:4]
            thisdev.num = int(line[5:9])
            thisdev.name = line[11:-1]
            subvend = myVendor()
            subvend.num = thisdev.vendor
            subvend.name = ""

            if not curdevice.subvendors.has_key(subvend.num):
                curdevice.subvendors[subvend.num] = subvend
                subvend.devices[thisdev.num] = thisdev
            else:
                subvend = curdevice.subvendors[subvend.num]
                subvend.devices[thisdev.num] = thisdev

            continue

        elif line.startswith('\t'):
            line = line.replace('\t', '')
            curdevice = myDevice()
            curdevice.num = line[0:4]
            curdevice.name = line[6:-1]
            curdevice.vendor = curvendor.num
            curvendor.devices[curdevice.num] = curdevice
            continue        
        else:
            print line
            continue
    fo.close()
    # This introduces a bug, will fix later.
    vendors['0000'] = myVendor()
    vendors['0000'].name = None
    return vendors