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