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