annotate Mac/scripts/cfmfile.py @ 5817:48b94de85bf3 legacy-trunk

Extensive changes by AMK.
author Guido van Rossum <guido@python.org>
date Thu, 17 Jul 1997 16:29:42 +0000
parents 3d7890236a4e
children 5e48d83c0fce
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
5419
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
1 """cfmfile - Interface to code fragments on file"""
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
2 import struct
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
3 import Res
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
4 import macfs
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
5 import string
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
6
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
7 Error = 'cfmfile.Error'
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
8
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
9 READ = 1
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
10 WRITE = 2
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
11 smAllScripts = -3
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
12 BUFSIZE = 0x100000
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
13
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
14 class FragmentInfo:
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
15 """Information on a single fragment"""
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
16 def __init__(self):
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
17 self.arch = 'pwpc'
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
18 self.current_version = 0
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
19 self.oldest_version = 0
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
20 self.stacksize = 0
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
21 self.libdir = 0
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
22 self.fragtype = 1
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
23 self.location = 1
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
24 self.offset = 0
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
25 self.length = 0
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
26 self.res_0 = 0
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
27 self.res_1 = 0
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
28 self.name = ''
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
29 self.ifp = None
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
30
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
31 def load(self, data):
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
32 if len(data) < 43:
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
33 raise Error, 'Not enough data in cfrg resource'
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
34 self.arch = data[:4]
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
35 self.update, self.current_version, self.oldest_version, \
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
36 self.stacksize, self.libdir, self.fragtype, self.location, \
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
37 self.offset, self.length, self.res_0, self.res_1, length = \
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
38 struct.unpack("llllhbbllllh", data[4:42])
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
39 namelen = ord(data[42])
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
40 self.name = data[43:43+namelen]
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
41 if len(self.name) != namelen:
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
42 raise Error, 'Not enough data in cfrg resource'
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
43 return length
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
44
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
45 def save(self):
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
46 length = (43+len(self.name)+3) & ~3
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
47 data = self.arch + struct.pack("llllhbbllllh", self.update, \
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
48 self.current_version, self.oldest_version, self.stacksize, \
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
49 self.libdir, self.fragtype, self.location, self.offset, \
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
50 self.length, self.res_0, self.res_1, length)
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
51 data = data + chr(len(self.name)) + self.name
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
52 data = data + ('\0'*(length-len(data)))
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
53 return data
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
54
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
55 def copydata(self, ofp):
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
56 """Copy fragment data to a new file, updating self.offset"""
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
57 if self.location != 1:
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
58 raise Error, 'Can only copy kOnDiskFlat (data fork) fragments'
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
59 if not self.ifp:
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
60 raise Error, 'No source file for fragment'
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
61 # Find out real length (if zero)
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
62 if self.length == 0:
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
63 self.ifp.seek(0, 2)
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
64 self.length = self.ifp.tell()
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
65 # Position input file and record new offset from output file
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
66 self.ifp.seek(self.offset)
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
67 self.offset = ofp.tell()
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
68 l = self.length
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
69 while l:
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
70 if l > BUFSIZE:
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
71 ofp.write(self.ifp.read(BUFSIZE))
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
72 l = l - BUFSIZE
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
73 else:
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
74 ofp.write(self.ifp.read(l))
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
75 l = 0
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
76 self.ifp = ofp
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
77
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
78 def setfile(self, ifp):
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
79 self.ifp = ifp
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
80
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
81 class FragmentResource:
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
82
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
83 def __init__(self, data):
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
84 self.load(data)
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
85
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
86 def load(self, data):
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
87 r0, r1, version, r3, r4, r5, r6, nfrag = struct.unpack("llllllll", data[:32])
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
88 if version != 1:
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
89 raise Error, 'Unsupported cfrg version number %d'%version
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
90 data = data[32:]
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
91 self.fragments = []
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
92 for i in range(nfrag):
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
93 f = FragmentInfo()
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
94 len = f.load(data)
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
95 data = data[len:]
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
96 self.fragments.append(f)
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
97 if data:
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
98 raise Error, 'Spurious data after fragment descriptions'
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
99
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
100 def save(self):
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
101 data = struct.pack("llllllll", 0, 0, 1, 0, 0, 0, 0, len(self.fragments))
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
102 for f in self.fragments:
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
103 data = data+f.save()
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
104 return data
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
105
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
106 def setfile(self, ifp):
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
107 for f in self.fragments:
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
108 f.setfile(ifp)
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
109
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
110 def copydata(self, ofp):
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
111 for f in self.fragments:
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
112 f.copydata(ofp)
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
113
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
114 def getfragments(self):
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
115 return self.fragments
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
116
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
117 def addfragments(self, fragments):
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
118 self.fragments = self.fragments + fragments
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
119
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
120 class ResourceCollection:
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
121 def __init__(self, fhandle):
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
122 self.reslist = []
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
123 self.fhandle = fhandle
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
124 oldresfile = Res.CurResFile()
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
125 Res.UseResFile(fhandle)
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
126 Res.SetResLoad(0)
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
127 ntypes = Res.Count1Types()
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
128 for itype in range(1, 1+ntypes):
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
129 type = Res.Get1IndType(itype)
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
130 nresources = Res.Count1Resources(type)
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
131 for ires in range(1, 1+nresources):
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
132 res = Res.Get1IndResource(type, ires)
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
133 id, type, name = res.GetResInfo()
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
134 self.reslist.append((type, id))
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
135 Res.SetResLoad(1)
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
136 Res.UseResFile(oldresfile)
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
137
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
138 def contains(self, type, id):
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
139 return (type, id) in self.reslist
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
140
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
141 def getresource(self, type, id):
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
142 oldresfile = Res.CurResFile()
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
143 Res.UseResFile(self.fhandle)
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
144 Res.SetResLoad(1)
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
145 resource = Res.Get1Resource(type, id)
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
146 Res.UseResFile(oldresfile)
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
147 return resource
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
148
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
149 def saveresto(self, type, id, fhandle):
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
150 oldresfile = Res.CurResFile()
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
151 resource = self.getresource(type, id)
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
152 id, type, name = resource.GetResInfo()
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
153 resource.DetachResource()
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
154 Res.UseResFile(fhandle)
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
155 resource.AddResource(type, id, name)
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
156 Res.UseResFile(oldresfile)
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
157
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
158 def getreslist(self):
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
159 return self.reslist
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
160
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
161 class CfmFile(ResourceCollection, FragmentResource):
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
162
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
163 def __init__(self, fsspec):
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
164 rfork = Res.FSpOpenResFile(fsspec, READ)
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
165 dfork = open(fsspec.as_pathname(), 'rb')
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
166 ResourceCollection.__init__(self, rfork)
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
167 cfrg_resource = self.getresource('cfrg', 0)
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
168 FragmentResource.__init__(self, cfrg_resource.data)
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
169 self.setfile(dfork)
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
170
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
171 def mergecfmfiles(inputs, output):
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
172 # Convert inputs/outputs to fsspecs
5434
3d7890236a4e Sometimes tried to modify a tuple. Fixed.
Jack Jansen <jack.jansen@cwi.nl>
parents: 5419
diff changeset
173 inputs = map(None, inputs)
5419
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
174 for i in range(len(inputs)):
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
175 if type(inputs[i]) == type(''):
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
176 inputs[i] = macfs.FSSpec(inputs[i])
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
177 if type(output) == type(''):
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
178 output = macfs.FSSpec(output)
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
179
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
180 input_list = []
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
181 for i in inputs:
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
182 input_list.append(CfmFile(i))
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
183
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
184 # Create output file, if needed
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
185 creator, tp = inputs[0].GetCreatorType()
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
186 try:
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
187 Res.FSpCreateResFile(output, creator, tp, smAllScripts)
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
188 except Res.Error:
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
189 pass
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
190
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
191 # Copy fragments
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
192 dfork = open(output.as_pathname(), 'wb')
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
193 for i in input_list:
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
194 i.copydata(dfork)
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
195 dfork.close()
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
196
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
197 # Merge cfrg's
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
198 for i in input_list[1:]:
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
199 input_list[0].addfragments(i.getfragments())
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
200
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
201 old_res_file = Res.CurResFile()
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
202 rfork = Res.FSpOpenResFile(output, WRITE)
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
203 Res.UseResFile(rfork)
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
204
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
205 # Write cfrg
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
206 data = input_list[0].save()
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
207 cfrg_resource = Res.Resource(data)
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
208 cfrg_resource.AddResource('cfrg', 0, '')
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
209 resources_done = [('cfrg', 0)]
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
210
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
211 # Write other resources
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
212 for i in input_list:
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
213 todo = i.getreslist()
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
214 for tp, id in todo:
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
215 if (tp, id) in resources_done:
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
216 continue
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
217 i.saveresto(tp, id, rfork)
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
218 resources_done.append(tp, id)
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
219
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
220 def main():
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
221 list = []
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
222 while 1:
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
223 fss, ok = macfs.PromptGetFile("Next input file:", "shlb", "APPL")
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
224 if not ok: break
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
225 list.append(fss)
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
226 if not list:
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
227 sys.exit(0)
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
228 output, ok = macfs.StandardPutFile("Output file:")
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
229 if not ok:
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
230 sys.exit(0)
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
231 mergecfmfiles(list, output)
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
232
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
233 if __name__ == '__main__':
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
234 main()
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
235
d9941a895c02 Module to merge 'cfrg' resources (to create fat ppc/cfm68k programs
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
236