| 1 | from Carbon.Res import *
|
|---|
| 2 | from Carbon.Resources import *
|
|---|
| 3 | import MacOS
|
|---|
| 4 |
|
|---|
| 5 | READ = 1
|
|---|
| 6 | WRITE = 2
|
|---|
| 7 | smAllScripts = -3
|
|---|
| 8 |
|
|---|
| 9 | def 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 |
|
|---|
| 57 | copyres('::python.¹.rsrc', '::foo.rsrc')
|
|---|