a281e46
#!/usr/bin/python3
ffb1be1
import os
ffb1be1
import re
ffb1be1
import sys
ffb1be1
if len (sys.argv) < 3:
a281e46
    print ("Specify hpcups.drv and hpijs.drv pathnames")
ffb1be1
    sys.exit (1)
ffb1be1
ffb1be1
hpcups_drv = sys.argv[1]
ffb1be1
hpijs_drv = sys.argv[2]
ffb1be1
9ae4f5d
# Match e.g.      Model "ModelName"
9ae4f5d
# and catch 'ModelName' in group 0
9ae4f5d
mn_re = re.compile ('^\s*ModelName\s+"(.*)"\s*$')
ffb1be1
ffb1be1
# Match e.g.      Attribute "1284DeviceID" "" "blah"
ffb1be1
# and catch everything before 'blah' in group 0, 'blah' in group 1,
ffb1be1
# trailing characters in group 2
ffb1be1
devid_re = re.compile ('^(\s*Attribute\s+"1284DeviceID"\s+""\s+")(.*)("\s*)$')
ffb1be1
ffb1be1
# Match e.g.   }
ffb1be1
end_re = re.compile ('^\s*}')
ffb1be1
9ae4f5d
devid_by_mn = dict()
ffb1be1
a281e46
hpcups_lines = open (hpcups_drv, "r").readlines ()
9ae4f5d
current_mn = None
ffb1be1
for line in hpcups_lines:
9ae4f5d
    if current_mn == None:
9ae4f5d
        match = mn_re.match (line)
ffb1be1
        if match == None:
ffb1be1
            continue
ffb1be1
9ae4f5d
        current_mn = match.groups ()[0]
ffb1be1
    else:
ffb1be1
        match = devid_re.match (line)
ffb1be1
        if match:
9ae4f5d
            devid_by_mn[current_mn] = match.groups ()[1]
ffb1be1
            continue
ffb1be1
ffb1be1
    if end_re.match (line):
9ae4f5d
        current_mn = None
ffb1be1
a281e46
print("%d IEEE 1284 Device IDs loaded from %s" % (len (devid_by_mn),
a281e46
                                                os.path.basename (hpcups_drv)),
a281e46
      file=sys.stderr)
ffb1be1
ffb1be1
replaced = 0
a281e46
hpijs_lines = open (hpijs_drv, "r").readlines ()
9ae4f5d
current_mn = None
ffb1be1
for line in hpijs_lines:
9ae4f5d
    if current_mn == None:
9ae4f5d
        match = mn_re.match (line)
ffb1be1
        if match:
9ae4f5d
            current_mn = match.groups ()[0]
9ae4f5d
            if current_mn.endswith (" hpijs"):
9ae4f5d
                current_mn = current_mn[:-6]
ffb1be1
    else:
ffb1be1
        match = devid_re.match (line)
ffb1be1
        if match:
9ae4f5d
            devid = devid_by_mn.get (current_mn)
ffb1be1
            if devid:
ffb1be1
                line = (match.groups ()[0] + devid + match.groups ()[2])
ffb1be1
                replaced += 1
9ae4f5d
            else:
a281e46
                print ("Not matched: %s" % current_mn, file=sys.stderr)
ffb1be1
ffb1be1
    if end_re.match (line):
9ae4f5d
        current_mn = None
ffb1be1
a281e46
    print (line.rstrip ("\n"))
ffb1be1
a281e46
print("%d IEEE 1284 Device IDs loaded in %s" % (replaced,
a281e46
                                                os.path.basename (hpijs_drv)),
a281e46
      file=sys.stderr)