2001-08-25 12:15:04 +00:00
|
|
|
|
from Carbon.Res import *
|
|
|
|
|
from Carbon.Resources import *
|
1995-01-30 11:53:55 +00:00
|
|
|
|
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.<2E>.rsrc', '::foo.rsrc')
|