/Mac/Demo/resources/copyres.py

http://unladen-swallow.googlecode.com/ · Python · 57 lines · 51 code · 4 blank · 2 comment · 10 complexity · 861b39341a88f0171ef1a0dd2dee2fc3 MD5 · raw file

  1. from Carbon.Res import *
  2. from Carbon.Resources import *
  3. import MacOS
  4. READ = 1
  5. WRITE = 2
  6. smAllScripts = -3
  7. def copyres(src, dst):
  8. """Copy resource from src file to dst file."""
  9. cur = CurResFile()
  10. ctor, type = MacOS.GetCreatorAndType(src)
  11. input = FSpOpenResFile(src, READ)
  12. try:
  13. FSpCreateResFile(dst, ctor, type, smAllScripts)
  14. except:
  15. raw_input("%s already exists... CR to write anyway! " % dst)
  16. output = FSpOpenResFile(dst, WRITE)
  17. UseResFile(input)
  18. ntypes = Count1Types()
  19. for itype in range(1, 1+ntypes):
  20. type = Get1IndType(itype)
  21. nresources = Count1Resources(type)
  22. for ires in range(1, 1+nresources):
  23. res = Get1IndResource(type, ires)
  24. res.LoadResource()
  25. id, type, name = res.GetResInfo()
  26. size = res.SizeResource()
  27. attrs = res.GetResAttrs()
  28. print id, type, name, size, hex(attrs)
  29. res.DetachResource()
  30. UseResFile(output)
  31. try:
  32. res2 = Get1Resource(type, id)
  33. except (RuntimeError, Res.Error), msg:
  34. res2 = None
  35. if res2:
  36. print "Duplicate type+id, not copied"
  37. print (res2.size, res2.data)
  38. print res2.GetResInfo()
  39. if res2.HomeResFile() == output:
  40. 'OK'
  41. elif res2.HomeResFile() == input:
  42. 'BAD!'
  43. else:
  44. print 'Home:', res2.HomeResFile()
  45. else:
  46. res.AddResource(type, id, name)
  47. #res.SetResAttrs(attrs)
  48. res.WriteResource()
  49. UseResFile(input)
  50. UseResFile(cur)
  51. CloseResFile(output)
  52. CloseResFile(input)
  53. copyres('::python.š.rsrc', '::foo.rsrc')