cpython/Mac/Demo/resources/copyres.py

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')