summaryrefslogtreecommitdiff
path: root/copy-deviceids.py
diff options
context:
space:
mode:
Diffstat (limited to 'copy-deviceids.py')
-rwxr-xr-xcopy-deviceids.py75
1 files changed, 75 insertions, 0 deletions
diff --git a/copy-deviceids.py b/copy-deviceids.py
new file mode 100755
index 0000000..c27a06b
--- /dev/null
+++ b/copy-deviceids.py
@@ -0,0 +1,75 @@
+#!/usr/bin/python3
+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 = open (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("%d IEEE 1284 Device IDs loaded from %s" % (len (devid_by_mn),
+ os.path.basename (hpcups_drv)),
+ file=sys.stderr)
+
+replaced = 0
+hpijs_lines = open (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 ("Not matched: %s" % current_mn, file=sys.stderr)
+
+ if end_re.match (line):
+ current_mn = None
+
+ print (line.rstrip ("\n"))
+
+print("%d IEEE 1284 Device IDs loaded in %s" % (replaced,
+ os.path.basename (hpijs_drv)),
+ file=sys.stderr)