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