copy-deviceids.py 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. #!/usr/bin/python
  2. import os
  3. import re
  4. import sys
  5. if len (sys.argv) < 3:
  6. print ("Specify hpcups.drv and hpijs.drv pathnames")
  7. sys.exit (1)
  8. hpcups_drv = sys.argv[1]
  9. hpijs_drv = sys.argv[2]
  10. # Match e.g. Model "ModelName"
  11. # and catch 'ModelName' in group 0
  12. mn_re = re.compile ('^\s*ModelName\s+"(.*)"\s*$')
  13. # Match e.g. Attribute "1284DeviceID" "" "blah"
  14. # and catch everything before 'blah' in group 0, 'blah' in group 1,
  15. # trailing characters in group 2
  16. devid_re = re.compile ('^(\s*Attribute\s+"1284DeviceID"\s+""\s+")(.*)("\s*)$')
  17. # Match e.g. }
  18. end_re = re.compile ('^\s*}')
  19. devid_by_mn = dict()
  20. hpcups_lines = open (hpcups_drv, "r").readlines ()
  21. current_mn = None
  22. for line in hpcups_lines:
  23. if current_mn == None:
  24. match = mn_re.match (line)
  25. if match == None:
  26. continue
  27. current_mn = match.groups ()[0]
  28. else:
  29. match = devid_re.match (line)
  30. if match:
  31. devid_by_mn[current_mn] = match.groups ()[1]
  32. continue
  33. if end_re.match (line):
  34. current_mn = None
  35. print("%d IEEE 1284 Device IDs loaded from %s" % (len (devid_by_mn),
  36. os.path.basename (hpcups_drv)),
  37. file=sys.stderr)
  38. replaced = 0
  39. hpijs_lines = open (hpijs_drv, "r").readlines ()
  40. current_mn = None
  41. for line in hpijs_lines:
  42. if current_mn == None:
  43. match = mn_re.match (line)
  44. if match:
  45. current_mn = match.groups ()[0]
  46. if current_mn.endswith (" hpijs"):
  47. current_mn = current_mn[:-6]
  48. else:
  49. match = devid_re.match (line)
  50. if match:
  51. devid = devid_by_mn.get (current_mn)
  52. if devid:
  53. line = (match.groups ()[0] + devid + match.groups ()[2])
  54. replaced += 1
  55. else:
  56. print ("Not matched: %s" % current_mn, file=sys.stderr)
  57. if end_re.match (line):
  58. current_mn = None
  59. print (line.rstrip ("\n"))
  60. print("%d IEEE 1284 Device IDs loaded in %s" % (replaced,
  61. os.path.basename (hpijs_drv)),
  62. file=sys.stderr)