64 lines
1.9 KiB
Python
64 lines
1.9 KiB
Python
from Carbon.Res import *
|
|
from Carbon.Resources import *
|
|
import MacOS
|
|
|
|
READ = 1
|
|
WRITE = 2
|
|
smAllScripts = -3
|
|
|
|
def raw_input(prompt):
|
|
import sys
|
|
sys.stdout.write(prompt)
|
|
sys.stdout.flush()
|
|
return sys.stdin.readline()
|
|
|
|
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) as 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')
|