from Carbon.Res import * from Carbon.Resources import * import MacOS READ = 1 WRITE = 2 smAllScripts = -3 def copyres(src, dst): """Copy resource from src file to dst file.""" cur = CurResFile() ctor, type = MacOS.GetCreatorAndType(src) input = FSpOpenResFile(src, READ) try: FSpCreateResFile(dst, ctor, type, smAllScripts) except: raw_input("%s already exists... CR to write anyway! " % dst) output = FSpOpenResFile(dst, WRITE) UseResFile(input) ntypes = Count1Types() for itype in range(1, 1+ntypes): type = Get1IndType(itype) nresources = Count1Resources(type) for ires in range(1, 1+nresources): res = Get1IndResource(type, ires) res.LoadResource() id, type, name = res.GetResInfo() size = res.SizeResource() attrs = res.GetResAttrs() print id, type, name, size, hex(attrs) res.DetachResource() UseResFile(output) try: res2 = Get1Resource(type, id) except (RuntimeError, Res.Error), msg: res2 = None if res2: print "Duplicate type+id, not copied" print (res2.size, res2.data) print res2.GetResInfo() if res2.HomeResFile() == output: 'OK' elif res2.HomeResFile() == input: 'BAD!' else: print 'Home:', res2.HomeResFile() else: res.AddResource(type, id, name) #res.SetResAttrs(attrs) res.WriteResource() UseResFile(input) UseResFile(cur) CloseResFile(output) CloseResFile(input) copyres('::python.¹.rsrc', '::foo.rsrc')