annotate Mac/mkapplet.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 98c1d84101a5
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2387
5313ac6f34fd fancier version copies template file
Guido van Rossum <guido@python.org>
parents: 2362
diff changeset
1 """Create an applet from a Python script.
2362
747f0b7cb7be completely redone
Guido van Rossum <guido@python.org>
parents:
diff changeset
2
2387
5313ac6f34fd fancier version copies template file
Guido van Rossum <guido@python.org>
parents: 2362
diff changeset
3 This puts up a dialog asking for a Python source file ('TEXT').
5313ac6f34fd fancier version copies template file
Guido van Rossum <guido@python.org>
parents: 2362
diff changeset
4 The output is a file with the same name but its ".py" suffix dropped.
5313ac6f34fd fancier version copies template file
Guido van Rossum <guido@python.org>
parents: 2362
diff changeset
5 It is created by copying an applet template and then adding a 'PYC '
5313ac6f34fd fancier version copies template file
Guido van Rossum <guido@python.org>
parents: 2362
diff changeset
6 resource named __main__ containing the compiled, marshalled script.
2362
747f0b7cb7be completely redone
Guido van Rossum <guido@python.org>
parents:
diff changeset
7 """
747f0b7cb7be completely redone
Guido van Rossum <guido@python.org>
parents:
diff changeset
8
2387
5313ac6f34fd fancier version copies template file
Guido van Rossum <guido@python.org>
parents: 2362
diff changeset
9 import sys
2389
49bfef17b12b accept file arguments and loop over files
Guido van Rossum <guido@python.org>
parents: 2387
diff changeset
10 sys.stdout = sys.stderr
49bfef17b12b accept file arguments and loop over files
Guido van Rossum <guido@python.org>
parents: 2387
diff changeset
11
2387
5313ac6f34fd fancier version copies template file
Guido van Rossum <guido@python.org>
parents: 2362
diff changeset
12 import string
5313ac6f34fd fancier version copies template file
Guido van Rossum <guido@python.org>
parents: 2362
diff changeset
13 import os
2362
747f0b7cb7be completely redone
Guido van Rossum <guido@python.org>
parents:
diff changeset
14 import marshal
747f0b7cb7be completely redone
Guido van Rossum <guido@python.org>
parents:
diff changeset
15 import imp
747f0b7cb7be completely redone
Guido van Rossum <guido@python.org>
parents:
diff changeset
16 import macfs
2387
5313ac6f34fd fancier version copies template file
Guido van Rossum <guido@python.org>
parents: 2362
diff changeset
17 import MacOS
2362
747f0b7cb7be completely redone
Guido van Rossum <guido@python.org>
parents:
diff changeset
18 from Res import *
747f0b7cb7be completely redone
Guido van Rossum <guido@python.org>
parents:
diff changeset
19
747f0b7cb7be completely redone
Guido van Rossum <guido@python.org>
parents:
diff changeset
20 # .pyc file (and 'PYC ' resource magic number)
747f0b7cb7be completely redone
Guido van Rossum <guido@python.org>
parents:
diff changeset
21 MAGIC = imp.get_magic()
747f0b7cb7be completely redone
Guido van Rossum <guido@python.org>
parents:
diff changeset
22
2387
5313ac6f34fd fancier version copies template file
Guido van Rossum <guido@python.org>
parents: 2362
diff changeset
23 # Template file (searched on sys.path)
5313ac6f34fd fancier version copies template file
Guido van Rossum <guido@python.org>
parents: 2362
diff changeset
24 TEMPLATE = "PythonApplet"
5313ac6f34fd fancier version copies template file
Guido van Rossum <guido@python.org>
parents: 2362
diff changeset
25
5313ac6f34fd fancier version copies template file
Guido van Rossum <guido@python.org>
parents: 2362
diff changeset
26 # Specification of our resource
2362
747f0b7cb7be completely redone
Guido van Rossum <guido@python.org>
parents:
diff changeset
27 RESTYPE = 'PYC '
747f0b7cb7be completely redone
Guido van Rossum <guido@python.org>
parents:
diff changeset
28 RESNAME = '__main__'
747f0b7cb7be completely redone
Guido van Rossum <guido@python.org>
parents:
diff changeset
29
2428
7924b7819d8f get creator from Owner resource; set attrs
Guido van Rossum <guido@python.org>
parents: 2425
diff changeset
30 # A resource with this name sets the "owner" (creator) of the destination
7924b7819d8f get creator from Owner resource; set attrs
Guido van Rossum <guido@python.org>
parents: 2425
diff changeset
31 OWNERNAME = "owner resource"
7924b7819d8f get creator from Owner resource; set attrs
Guido van Rossum <guido@python.org>
parents: 2425
diff changeset
32
2362
747f0b7cb7be completely redone
Guido van Rossum <guido@python.org>
parents:
diff changeset
33 # OpenResFile mode parameters
747f0b7cb7be completely redone
Guido van Rossum <guido@python.org>
parents:
diff changeset
34 READ = 1
747f0b7cb7be completely redone
Guido van Rossum <guido@python.org>
parents:
diff changeset
35 WRITE = 2
747f0b7cb7be completely redone
Guido van Rossum <guido@python.org>
parents:
diff changeset
36
747f0b7cb7be completely redone
Guido van Rossum <guido@python.org>
parents:
diff changeset
37 def main():
747f0b7cb7be completely redone
Guido van Rossum <guido@python.org>
parents:
diff changeset
38
2387
5313ac6f34fd fancier version copies template file
Guido van Rossum <guido@python.org>
parents: 2362
diff changeset
39 # Find the template
5313ac6f34fd fancier version copies template file
Guido van Rossum <guido@python.org>
parents: 2362
diff changeset
40 # (there's no point in proceeding if we can't find it)
5313ac6f34fd fancier version copies template file
Guido van Rossum <guido@python.org>
parents: 2362
diff changeset
41
5313ac6f34fd fancier version copies template file
Guido van Rossum <guido@python.org>
parents: 2362
diff changeset
42 for p in sys.path:
5313ac6f34fd fancier version copies template file
Guido van Rossum <guido@python.org>
parents: 2362
diff changeset
43 template = os.path.join(p, TEMPLATE)
5313ac6f34fd fancier version copies template file
Guido van Rossum <guido@python.org>
parents: 2362
diff changeset
44 try:
5313ac6f34fd fancier version copies template file
Guido van Rossum <guido@python.org>
parents: 2362
diff changeset
45 tmpl = open(template, "rb")
2389
49bfef17b12b accept file arguments and loop over files
Guido van Rossum <guido@python.org>
parents: 2387
diff changeset
46 tmpl.close()
2387
5313ac6f34fd fancier version copies template file
Guido van Rossum <guido@python.org>
parents: 2362
diff changeset
47 break
5313ac6f34fd fancier version copies template file
Guido van Rossum <guido@python.org>
parents: 2362
diff changeset
48 except IOError:
5313ac6f34fd fancier version copies template file
Guido van Rossum <guido@python.org>
parents: 2362
diff changeset
49 continue
5313ac6f34fd fancier version copies template file
Guido van Rossum <guido@python.org>
parents: 2362
diff changeset
50 else:
2409
4fc033cb5544 real dialogs for warnings etc., copy applet.rsrc template too
Guido van Rossum <guido@python.org>
parents: 2402
diff changeset
51 die("Template %s not found" % `template`)
2387
5313ac6f34fd fancier version copies template file
Guido van Rossum <guido@python.org>
parents: 2362
diff changeset
52 return
5313ac6f34fd fancier version copies template file
Guido van Rossum <guido@python.org>
parents: 2362
diff changeset
53
2389
49bfef17b12b accept file arguments and loop over files
Guido van Rossum <guido@python.org>
parents: 2387
diff changeset
54 # Ask for source text if not specified in sys.argv[1:]
49bfef17b12b accept file arguments and loop over files
Guido van Rossum <guido@python.org>
parents: 2387
diff changeset
55
49bfef17b12b accept file arguments and loop over files
Guido van Rossum <guido@python.org>
parents: 2387
diff changeset
56 if not sys.argv[1:]:
49bfef17b12b accept file arguments and loop over files
Guido van Rossum <guido@python.org>
parents: 2387
diff changeset
57 srcfss, ok = macfs.StandardGetFile('TEXT')
49bfef17b12b accept file arguments and loop over files
Guido van Rossum <guido@python.org>
parents: 2387
diff changeset
58 if not ok:
49bfef17b12b accept file arguments and loop over files
Guido van Rossum <guido@python.org>
parents: 2387
diff changeset
59 return
49bfef17b12b accept file arguments and loop over files
Guido van Rossum <guido@python.org>
parents: 2387
diff changeset
60 filename = srcfss.as_pathname()
2444
98c1d84101a5 In interactive mode ask for output file
Jack Jansen <jack.jansen@cwi.nl>
parents: 2428
diff changeset
61 tp, tf = os.path.split(filename)
98c1d84101a5 In interactive mode ask for output file
Jack Jansen <jack.jansen@cwi.nl>
parents: 2428
diff changeset
62 if tf[-3:] == '.py':
98c1d84101a5 In interactive mode ask for output file
Jack Jansen <jack.jansen@cwi.nl>
parents: 2428
diff changeset
63 tf = tf[:-3]
98c1d84101a5 In interactive mode ask for output file
Jack Jansen <jack.jansen@cwi.nl>
parents: 2428
diff changeset
64 else:
98c1d84101a5 In interactive mode ask for output file
Jack Jansen <jack.jansen@cwi.nl>
parents: 2428
diff changeset
65 tf = tf + '.applet'
98c1d84101a5 In interactive mode ask for output file
Jack Jansen <jack.jansen@cwi.nl>
parents: 2428
diff changeset
66 dstfss, ok = macfs.StandardPutFile('Save application as:', tf)
98c1d84101a5 In interactive mode ask for output file
Jack Jansen <jack.jansen@cwi.nl>
parents: 2428
diff changeset
67 if not ok: return
98c1d84101a5 In interactive mode ask for output file
Jack Jansen <jack.jansen@cwi.nl>
parents: 2428
diff changeset
68 process(template, filename, dstfss.as_pathname())
98c1d84101a5 In interactive mode ask for output file
Jack Jansen <jack.jansen@cwi.nl>
parents: 2428
diff changeset
69 else:
98c1d84101a5 In interactive mode ask for output file
Jack Jansen <jack.jansen@cwi.nl>
parents: 2428
diff changeset
70
98c1d84101a5 In interactive mode ask for output file
Jack Jansen <jack.jansen@cwi.nl>
parents: 2428
diff changeset
71 # Loop over all files to be processed
98c1d84101a5 In interactive mode ask for output file
Jack Jansen <jack.jansen@cwi.nl>
parents: 2428
diff changeset
72 for filename in sys.argv[1:]:
98c1d84101a5 In interactive mode ask for output file
Jack Jansen <jack.jansen@cwi.nl>
parents: 2428
diff changeset
73 process(template, filename, '')
2389
49bfef17b12b accept file arguments and loop over files
Guido van Rossum <guido@python.org>
parents: 2387
diff changeset
74
2425
eccf4937f1dc Added BINA to unknown filetypes (what mw uses)
Jack Jansen <jack.jansen@cwi.nl>
parents: 2409
diff changeset
75 undefs = ('????', ' ', '\0\0\0\0', 'BINA')
2389
49bfef17b12b accept file arguments and loop over files
Guido van Rossum <guido@python.org>
parents: 2387
diff changeset
76
2444
98c1d84101a5 In interactive mode ask for output file
Jack Jansen <jack.jansen@cwi.nl>
parents: 2428
diff changeset
77 def process(template, filename, output):
2389
49bfef17b12b accept file arguments and loop over files
Guido van Rossum <guido@python.org>
parents: 2387
diff changeset
78
49bfef17b12b accept file arguments and loop over files
Guido van Rossum <guido@python.org>
parents: 2387
diff changeset
79 print "Processing", `filename`, "..."
2362
747f0b7cb7be completely redone
Guido van Rossum <guido@python.org>
parents:
diff changeset
80
747f0b7cb7be completely redone
Guido van Rossum <guido@python.org>
parents:
diff changeset
81 # Read the source and compile it
2387
5313ac6f34fd fancier version copies template file
Guido van Rossum <guido@python.org>
parents: 2362
diff changeset
82 # (there's no point overwriting the destination if it has a syntax error)
2362
747f0b7cb7be completely redone
Guido van Rossum <guido@python.org>
parents:
diff changeset
83
747f0b7cb7be completely redone
Guido van Rossum <guido@python.org>
parents:
diff changeset
84 fp = open(filename)
747f0b7cb7be completely redone
Guido van Rossum <guido@python.org>
parents:
diff changeset
85 text = fp.read()
747f0b7cb7be completely redone
Guido van Rossum <guido@python.org>
parents:
diff changeset
86 fp.close()
2387
5313ac6f34fd fancier version copies template file
Guido van Rossum <guido@python.org>
parents: 2362
diff changeset
87 try:
5313ac6f34fd fancier version copies template file
Guido van Rossum <guido@python.org>
parents: 2362
diff changeset
88 code = compile(text, filename, "exec")
5313ac6f34fd fancier version copies template file
Guido van Rossum <guido@python.org>
parents: 2362
diff changeset
89 except (SyntaxError, EOFError):
2409
4fc033cb5544 real dialogs for warnings etc., copy applet.rsrc template too
Guido van Rossum <guido@python.org>
parents: 2402
diff changeset
90 die("Syntax error in script %s" % `filename`)
2387
5313ac6f34fd fancier version copies template file
Guido van Rossum <guido@python.org>
parents: 2362
diff changeset
91 return
5313ac6f34fd fancier version copies template file
Guido van Rossum <guido@python.org>
parents: 2362
diff changeset
92
5313ac6f34fd fancier version copies template file
Guido van Rossum <guido@python.org>
parents: 2362
diff changeset
93 # Set the destination file name
5313ac6f34fd fancier version copies template file
Guido van Rossum <guido@python.org>
parents: 2362
diff changeset
94
5313ac6f34fd fancier version copies template file
Guido van Rossum <guido@python.org>
parents: 2362
diff changeset
95 if string.lower(filename[-3:]) == ".py":
5313ac6f34fd fancier version copies template file
Guido van Rossum <guido@python.org>
parents: 2362
diff changeset
96 destname = filename[:-3]
2409
4fc033cb5544 real dialogs for warnings etc., copy applet.rsrc template too
Guido van Rossum <guido@python.org>
parents: 2402
diff changeset
97 rsrcname = destname + '.rsrc'
2387
5313ac6f34fd fancier version copies template file
Guido van Rossum <guido@python.org>
parents: 2362
diff changeset
98 else:
5313ac6f34fd fancier version copies template file
Guido van Rossum <guido@python.org>
parents: 2362
diff changeset
99 destname = filename + ".applet"
2409
4fc033cb5544 real dialogs for warnings etc., copy applet.rsrc template too
Guido van Rossum <guido@python.org>
parents: 2402
diff changeset
100 rsrcname = filename + '.rsrc'
2387
5313ac6f34fd fancier version copies template file
Guido van Rossum <guido@python.org>
parents: 2362
diff changeset
101
2444
98c1d84101a5 In interactive mode ask for output file
Jack Jansen <jack.jansen@cwi.nl>
parents: 2428
diff changeset
102 if output:
98c1d84101a5 In interactive mode ask for output file
Jack Jansen <jack.jansen@cwi.nl>
parents: 2428
diff changeset
103 destname = output
2387
5313ac6f34fd fancier version copies template file
Guido van Rossum <guido@python.org>
parents: 2362
diff changeset
104 # Copy the data from the template (creating the file as well)
5313ac6f34fd fancier version copies template file
Guido van Rossum <guido@python.org>
parents: 2362
diff changeset
105
2389
49bfef17b12b accept file arguments and loop over files
Guido van Rossum <guido@python.org>
parents: 2387
diff changeset
106 tmpl = open(template, "rb")
2387
5313ac6f34fd fancier version copies template file
Guido van Rossum <guido@python.org>
parents: 2362
diff changeset
107 dest = open(destname, "wb")
5313ac6f34fd fancier version copies template file
Guido van Rossum <guido@python.org>
parents: 2362
diff changeset
108 data = tmpl.read()
5313ac6f34fd fancier version copies template file
Guido van Rossum <guido@python.org>
parents: 2362
diff changeset
109 if data:
5313ac6f34fd fancier version copies template file
Guido van Rossum <guido@python.org>
parents: 2362
diff changeset
110 dest.write(data)
5313ac6f34fd fancier version copies template file
Guido van Rossum <guido@python.org>
parents: 2362
diff changeset
111 dest.close()
5313ac6f34fd fancier version copies template file
Guido van Rossum <guido@python.org>
parents: 2362
diff changeset
112 tmpl.close()
5313ac6f34fd fancier version copies template file
Guido van Rossum <guido@python.org>
parents: 2362
diff changeset
113
2402
cab699453775 Always set type to APPL
Jack Jansen <jack.jansen@cwi.nl>
parents: 2389
diff changeset
114 # Copy the creator of the template to the destination
2409
4fc033cb5544 real dialogs for warnings etc., copy applet.rsrc template too
Guido van Rossum <guido@python.org>
parents: 2402
diff changeset
115 # unless it already got one. Set type to APPL
4fc033cb5544 real dialogs for warnings etc., copy applet.rsrc template too
Guido van Rossum <guido@python.org>
parents: 2402
diff changeset
116
2389
49bfef17b12b accept file arguments and loop over files
Guido van Rossum <guido@python.org>
parents: 2387
diff changeset
117 tctor, ttype = MacOS.GetCreatorAndType(template)
49bfef17b12b accept file arguments and loop over files
Guido van Rossum <guido@python.org>
parents: 2387
diff changeset
118 ctor, type = MacOS.GetCreatorAndType(destname)
2402
cab699453775 Always set type to APPL
Jack Jansen <jack.jansen@cwi.nl>
parents: 2389
diff changeset
119 if type in undefs: type = 'APPL'
2389
49bfef17b12b accept file arguments and loop over files
Guido van Rossum <guido@python.org>
parents: 2387
diff changeset
120 if ctor in undefs: ctor = tctor
2387
5313ac6f34fd fancier version copies template file
Guido van Rossum <guido@python.org>
parents: 2362
diff changeset
121
2409
4fc033cb5544 real dialogs for warnings etc., copy applet.rsrc template too
Guido van Rossum <guido@python.org>
parents: 2402
diff changeset
122 # Open the output resource fork
2387
5313ac6f34fd fancier version copies template file
Guido van Rossum <guido@python.org>
parents: 2362
diff changeset
123
5313ac6f34fd fancier version copies template file
Guido van Rossum <guido@python.org>
parents: 2362
diff changeset
124 try:
5313ac6f34fd fancier version copies template file
Guido van Rossum <guido@python.org>
parents: 2362
diff changeset
125 output = FSpOpenResFile(destname, WRITE)
5313ac6f34fd fancier version copies template file
Guido van Rossum <guido@python.org>
parents: 2362
diff changeset
126 except MacOS.Error:
5313ac6f34fd fancier version copies template file
Guido van Rossum <guido@python.org>
parents: 2362
diff changeset
127 print "Creating resource fork..."
5313ac6f34fd fancier version copies template file
Guido van Rossum <guido@python.org>
parents: 2362
diff changeset
128 CreateResFile(destname)
5313ac6f34fd fancier version copies template file
Guido van Rossum <guido@python.org>
parents: 2362
diff changeset
129 output = FSpOpenResFile(destname, WRITE)
5313ac6f34fd fancier version copies template file
Guido van Rossum <guido@python.org>
parents: 2362
diff changeset
130
2409
4fc033cb5544 real dialogs for warnings etc., copy applet.rsrc template too
Guido van Rossum <guido@python.org>
parents: 2402
diff changeset
131 # Copy the resources from the template
4fc033cb5544 real dialogs for warnings etc., copy applet.rsrc template too
Guido van Rossum <guido@python.org>
parents: 2402
diff changeset
132
4fc033cb5544 real dialogs for warnings etc., copy applet.rsrc template too
Guido van Rossum <guido@python.org>
parents: 2402
diff changeset
133 input = FSpOpenResFile(template, READ)
2428
7924b7819d8f get creator from Owner resource; set attrs
Guido van Rossum <guido@python.org>
parents: 2425
diff changeset
134 newctor = copyres(input, output)
2409
4fc033cb5544 real dialogs for warnings etc., copy applet.rsrc template too
Guido van Rossum <guido@python.org>
parents: 2402
diff changeset
135 CloseResFile(input)
2428
7924b7819d8f get creator from Owner resource; set attrs
Guido van Rossum <guido@python.org>
parents: 2425
diff changeset
136 if newctor: ctor = newctor
2409
4fc033cb5544 real dialogs for warnings etc., copy applet.rsrc template too
Guido van Rossum <guido@python.org>
parents: 2402
diff changeset
137
4fc033cb5544 real dialogs for warnings etc., copy applet.rsrc template too
Guido van Rossum <guido@python.org>
parents: 2402
diff changeset
138 # Copy the resources from the target specific resource template, if any
2362
747f0b7cb7be completely redone
Guido van Rossum <guido@python.org>
parents:
diff changeset
139
2409
4fc033cb5544 real dialogs for warnings etc., copy applet.rsrc template too
Guido van Rossum <guido@python.org>
parents: 2402
diff changeset
140 try:
4fc033cb5544 real dialogs for warnings etc., copy applet.rsrc template too
Guido van Rossum <guido@python.org>
parents: 2402
diff changeset
141 input = FSpOpenResFile(rsrcname, READ)
4fc033cb5544 real dialogs for warnings etc., copy applet.rsrc template too
Guido van Rossum <guido@python.org>
parents: 2402
diff changeset
142 except MacOS.Error:
4fc033cb5544 real dialogs for warnings etc., copy applet.rsrc template too
Guido van Rossum <guido@python.org>
parents: 2402
diff changeset
143 pass
4fc033cb5544 real dialogs for warnings etc., copy applet.rsrc template too
Guido van Rossum <guido@python.org>
parents: 2402
diff changeset
144 else:
2428
7924b7819d8f get creator from Owner resource; set attrs
Guido van Rossum <guido@python.org>
parents: 2425
diff changeset
145 newctor = copyres(input, output)
2409
4fc033cb5544 real dialogs for warnings etc., copy applet.rsrc template too
Guido van Rossum <guido@python.org>
parents: 2402
diff changeset
146 CloseResFile(input)
2428
7924b7819d8f get creator from Owner resource; set attrs
Guido van Rossum <guido@python.org>
parents: 2425
diff changeset
147 if newctor: ctor = newctor
7924b7819d8f get creator from Owner resource; set attrs
Guido van Rossum <guido@python.org>
parents: 2425
diff changeset
148
7924b7819d8f get creator from Owner resource; set attrs
Guido van Rossum <guido@python.org>
parents: 2425
diff changeset
149 # Now set the creator and type of the destination
7924b7819d8f get creator from Owner resource; set attrs
Guido van Rossum <guido@python.org>
parents: 2425
diff changeset
150
7924b7819d8f get creator from Owner resource; set attrs
Guido van Rossum <guido@python.org>
parents: 2425
diff changeset
151 MacOS.SetCreatorAndType(destname, ctor, type)
2362
747f0b7cb7be completely redone
Guido van Rossum <guido@python.org>
parents:
diff changeset
152
2387
5313ac6f34fd fancier version copies template file
Guido van Rossum <guido@python.org>
parents: 2362
diff changeset
153 # Make sure we're manipulating the output resource file now
5313ac6f34fd fancier version copies template file
Guido van Rossum <guido@python.org>
parents: 2362
diff changeset
154
5313ac6f34fd fancier version copies template file
Guido van Rossum <guido@python.org>
parents: 2362
diff changeset
155 UseResFile(output)
5313ac6f34fd fancier version copies template file
Guido van Rossum <guido@python.org>
parents: 2362
diff changeset
156
5313ac6f34fd fancier version copies template file
Guido van Rossum <guido@python.org>
parents: 2362
diff changeset
157 # Delete any existing 'PYC 'resource named __main__
5313ac6f34fd fancier version copies template file
Guido van Rossum <guido@python.org>
parents: 2362
diff changeset
158
5313ac6f34fd fancier version copies template file
Guido van Rossum <guido@python.org>
parents: 2362
diff changeset
159 try:
5313ac6f34fd fancier version copies template file
Guido van Rossum <guido@python.org>
parents: 2362
diff changeset
160 res = Get1NamedResource(RESTYPE, RESNAME)
5313ac6f34fd fancier version copies template file
Guido van Rossum <guido@python.org>
parents: 2362
diff changeset
161 res.RmveResource()
5313ac6f34fd fancier version copies template file
Guido van Rossum <guido@python.org>
parents: 2362
diff changeset
162 except Error:
5313ac6f34fd fancier version copies template file
Guido van Rossum <guido@python.org>
parents: 2362
diff changeset
163 pass
2362
747f0b7cb7be completely redone
Guido van Rossum <guido@python.org>
parents:
diff changeset
164
747f0b7cb7be completely redone
Guido van Rossum <guido@python.org>
parents:
diff changeset
165 # Create the raw data for the resource from the code object
747f0b7cb7be completely redone
Guido van Rossum <guido@python.org>
parents:
diff changeset
166
747f0b7cb7be completely redone
Guido van Rossum <guido@python.org>
parents:
diff changeset
167 data = marshal.dumps(code)
747f0b7cb7be completely redone
Guido van Rossum <guido@python.org>
parents:
diff changeset
168 del code
747f0b7cb7be completely redone
Guido van Rossum <guido@python.org>
parents:
diff changeset
169 data = (MAGIC + '\0\0\0\0') + data
747f0b7cb7be completely redone
Guido van Rossum <guido@python.org>
parents:
diff changeset
170
747f0b7cb7be completely redone
Guido van Rossum <guido@python.org>
parents:
diff changeset
171 # Create the resource and write it
747f0b7cb7be completely redone
Guido van Rossum <guido@python.org>
parents:
diff changeset
172
2387
5313ac6f34fd fancier version copies template file
Guido van Rossum <guido@python.org>
parents: 2362
diff changeset
173 id = 0
5313ac6f34fd fancier version copies template file
Guido van Rossum <guido@python.org>
parents: 2362
diff changeset
174 while id < 128:
5313ac6f34fd fancier version copies template file
Guido van Rossum <guido@python.org>
parents: 2362
diff changeset
175 id = Unique1ID(RESTYPE)
2362
747f0b7cb7be completely redone
Guido van Rossum <guido@python.org>
parents:
diff changeset
176 res = Resource(data)
2387
5313ac6f34fd fancier version copies template file
Guido van Rossum <guido@python.org>
parents: 2362
diff changeset
177 res.AddResource(RESTYPE, id, RESNAME)
2362
747f0b7cb7be completely redone
Guido van Rossum <guido@python.org>
parents:
diff changeset
178 res.WriteResource()
747f0b7cb7be completely redone
Guido van Rossum <guido@python.org>
parents:
diff changeset
179 res.ReleaseResource()
747f0b7cb7be completely redone
Guido van Rossum <guido@python.org>
parents:
diff changeset
180
2409
4fc033cb5544 real dialogs for warnings etc., copy applet.rsrc template too
Guido van Rossum <guido@python.org>
parents: 2402
diff changeset
181 # Close the output file
2362
747f0b7cb7be completely redone
Guido van Rossum <guido@python.org>
parents:
diff changeset
182
2387
5313ac6f34fd fancier version copies template file
Guido van Rossum <guido@python.org>
parents: 2362
diff changeset
183 CloseResFile(output)
2389
49bfef17b12b accept file arguments and loop over files
Guido van Rossum <guido@python.org>
parents: 2387
diff changeset
184
2409
4fc033cb5544 real dialogs for warnings etc., copy applet.rsrc template too
Guido van Rossum <guido@python.org>
parents: 2402
diff changeset
185 # Give positive feedback
4fc033cb5544 real dialogs for warnings etc., copy applet.rsrc template too
Guido van Rossum <guido@python.org>
parents: 2402
diff changeset
186
4fc033cb5544 real dialogs for warnings etc., copy applet.rsrc template too
Guido van Rossum <guido@python.org>
parents: 2402
diff changeset
187 message("Applet %s created." % `destname`)
4fc033cb5544 real dialogs for warnings etc., copy applet.rsrc template too
Guido van Rossum <guido@python.org>
parents: 2402
diff changeset
188
4fc033cb5544 real dialogs for warnings etc., copy applet.rsrc template too
Guido van Rossum <guido@python.org>
parents: 2402
diff changeset
189
2428
7924b7819d8f get creator from Owner resource; set attrs
Guido van Rossum <guido@python.org>
parents: 2425
diff changeset
190 # Copy resources between two resource file descriptors.
7924b7819d8f get creator from Owner resource; set attrs
Guido van Rossum <guido@python.org>
parents: 2425
diff changeset
191 # Exception: don't copy a __main__ resource.
7924b7819d8f get creator from Owner resource; set attrs
Guido van Rossum <guido@python.org>
parents: 2425
diff changeset
192 # If a resource's name is "owner resource", its type is returned
7924b7819d8f get creator from Owner resource; set attrs
Guido van Rossum <guido@python.org>
parents: 2425
diff changeset
193 # (so the caller can use it to set the destination's creator)
2409
4fc033cb5544 real dialogs for warnings etc., copy applet.rsrc template too
Guido van Rossum <guido@python.org>
parents: 2402
diff changeset
194
4fc033cb5544 real dialogs for warnings etc., copy applet.rsrc template too
Guido van Rossum <guido@python.org>
parents: 2402
diff changeset
195 def copyres(input, output):
2428
7924b7819d8f get creator from Owner resource; set attrs
Guido van Rossum <guido@python.org>
parents: 2425
diff changeset
196 ctor = None
2409
4fc033cb5544 real dialogs for warnings etc., copy applet.rsrc template too
Guido van Rossum <guido@python.org>
parents: 2402
diff changeset
197 UseResFile(input)
4fc033cb5544 real dialogs for warnings etc., copy applet.rsrc template too
Guido van Rossum <guido@python.org>
parents: 2402
diff changeset
198 ntypes = Count1Types()
4fc033cb5544 real dialogs for warnings etc., copy applet.rsrc template too
Guido van Rossum <guido@python.org>
parents: 2402
diff changeset
199 for itype in range(1, 1+ntypes):
4fc033cb5544 real dialogs for warnings etc., copy applet.rsrc template too
Guido van Rossum <guido@python.org>
parents: 2402
diff changeset
200 type = Get1IndType(itype)
4fc033cb5544 real dialogs for warnings etc., copy applet.rsrc template too
Guido van Rossum <guido@python.org>
parents: 2402
diff changeset
201 nresources = Count1Resources(type)
4fc033cb5544 real dialogs for warnings etc., copy applet.rsrc template too
Guido van Rossum <guido@python.org>
parents: 2402
diff changeset
202 for ires in range(1, 1+nresources):
4fc033cb5544 real dialogs for warnings etc., copy applet.rsrc template too
Guido van Rossum <guido@python.org>
parents: 2402
diff changeset
203 res = Get1IndResource(type, ires)
4fc033cb5544 real dialogs for warnings etc., copy applet.rsrc template too
Guido van Rossum <guido@python.org>
parents: 2402
diff changeset
204 id, type, name = res.GetResInfo()
2428
7924b7819d8f get creator from Owner resource; set attrs
Guido van Rossum <guido@python.org>
parents: 2425
diff changeset
205 lcname = string.lower(name)
7924b7819d8f get creator from Owner resource; set attrs
Guido van Rossum <guido@python.org>
parents: 2425
diff changeset
206 if (type, lcname) == (RESTYPE, RESNAME):
2409
4fc033cb5544 real dialogs for warnings etc., copy applet.rsrc template too
Guido van Rossum <guido@python.org>
parents: 2402
diff changeset
207 continue # Don't copy __main__ from template
2428
7924b7819d8f get creator from Owner resource; set attrs
Guido van Rossum <guido@python.org>
parents: 2425
diff changeset
208 if lcname == OWNERNAME: ctor = type
2409
4fc033cb5544 real dialogs for warnings etc., copy applet.rsrc template too
Guido van Rossum <guido@python.org>
parents: 2402
diff changeset
209 size = res.SizeResource()
4fc033cb5544 real dialogs for warnings etc., copy applet.rsrc template too
Guido van Rossum <guido@python.org>
parents: 2402
diff changeset
210 attrs = res.GetResAttrs()
4fc033cb5544 real dialogs for warnings etc., copy applet.rsrc template too
Guido van Rossum <guido@python.org>
parents: 2402
diff changeset
211 print id, type, name, size, hex(attrs)
4fc033cb5544 real dialogs for warnings etc., copy applet.rsrc template too
Guido van Rossum <guido@python.org>
parents: 2402
diff changeset
212 res.LoadResource()
4fc033cb5544 real dialogs for warnings etc., copy applet.rsrc template too
Guido van Rossum <guido@python.org>
parents: 2402
diff changeset
213 res.DetachResource()
4fc033cb5544 real dialogs for warnings etc., copy applet.rsrc template too
Guido van Rossum <guido@python.org>
parents: 2402
diff changeset
214 UseResFile(output)
4fc033cb5544 real dialogs for warnings etc., copy applet.rsrc template too
Guido van Rossum <guido@python.org>
parents: 2402
diff changeset
215 try:
4fc033cb5544 real dialogs for warnings etc., copy applet.rsrc template too
Guido van Rossum <guido@python.org>
parents: 2402
diff changeset
216 res2 = Get1Resource(type, id)
4fc033cb5544 real dialogs for warnings etc., copy applet.rsrc template too
Guido van Rossum <guido@python.org>
parents: 2402
diff changeset
217 except MacOS.Error:
4fc033cb5544 real dialogs for warnings etc., copy applet.rsrc template too
Guido van Rossum <guido@python.org>
parents: 2402
diff changeset
218 res2 = None
4fc033cb5544 real dialogs for warnings etc., copy applet.rsrc template too
Guido van Rossum <guido@python.org>
parents: 2402
diff changeset
219 if res2:
4fc033cb5544 real dialogs for warnings etc., copy applet.rsrc template too
Guido van Rossum <guido@python.org>
parents: 2402
diff changeset
220 print "Overwriting..."
4fc033cb5544 real dialogs for warnings etc., copy applet.rsrc template too
Guido van Rossum <guido@python.org>
parents: 2402
diff changeset
221 res2.RmveResource()
4fc033cb5544 real dialogs for warnings etc., copy applet.rsrc template too
Guido van Rossum <guido@python.org>
parents: 2402
diff changeset
222 res.AddResource(type, id, name)
4fc033cb5544 real dialogs for warnings etc., copy applet.rsrc template too
Guido van Rossum <guido@python.org>
parents: 2402
diff changeset
223 res.WriteResource()
2428
7924b7819d8f get creator from Owner resource; set attrs
Guido van Rossum <guido@python.org>
parents: 2425
diff changeset
224 attrs = attrs | res.GetResAttrs()
7924b7819d8f get creator from Owner resource; set attrs
Guido van Rossum <guido@python.org>
parents: 2425
diff changeset
225 print "New attrs =", hex(attrs)
7924b7819d8f get creator from Owner resource; set attrs
Guido van Rossum <guido@python.org>
parents: 2425
diff changeset
226 res.SetResAttrs(attrs)
2409
4fc033cb5544 real dialogs for warnings etc., copy applet.rsrc template too
Guido van Rossum <guido@python.org>
parents: 2402
diff changeset
227 UseResFile(input)
2428
7924b7819d8f get creator from Owner resource; set attrs
Guido van Rossum <guido@python.org>
parents: 2425
diff changeset
228 return ctor
2409
4fc033cb5544 real dialogs for warnings etc., copy applet.rsrc template too
Guido van Rossum <guido@python.org>
parents: 2402
diff changeset
229
4fc033cb5544 real dialogs for warnings etc., copy applet.rsrc template too
Guido van Rossum <guido@python.org>
parents: 2402
diff changeset
230
4fc033cb5544 real dialogs for warnings etc., copy applet.rsrc template too
Guido van Rossum <guido@python.org>
parents: 2402
diff changeset
231 # Show a message and exit
4fc033cb5544 real dialogs for warnings etc., copy applet.rsrc template too
Guido van Rossum <guido@python.org>
parents: 2402
diff changeset
232
4fc033cb5544 real dialogs for warnings etc., copy applet.rsrc template too
Guido van Rossum <guido@python.org>
parents: 2402
diff changeset
233 def die(str):
4fc033cb5544 real dialogs for warnings etc., copy applet.rsrc template too
Guido van Rossum <guido@python.org>
parents: 2402
diff changeset
234 message(str)
4fc033cb5544 real dialogs for warnings etc., copy applet.rsrc template too
Guido van Rossum <guido@python.org>
parents: 2402
diff changeset
235 sys.exit(1)
4fc033cb5544 real dialogs for warnings etc., copy applet.rsrc template too
Guido van Rossum <guido@python.org>
parents: 2402
diff changeset
236
4fc033cb5544 real dialogs for warnings etc., copy applet.rsrc template too
Guido van Rossum <guido@python.org>
parents: 2402
diff changeset
237
4fc033cb5544 real dialogs for warnings etc., copy applet.rsrc template too
Guido van Rossum <guido@python.org>
parents: 2402
diff changeset
238 # Show a message
4fc033cb5544 real dialogs for warnings etc., copy applet.rsrc template too
Guido van Rossum <guido@python.org>
parents: 2402
diff changeset
239
4fc033cb5544 real dialogs for warnings etc., copy applet.rsrc template too
Guido van Rossum <guido@python.org>
parents: 2402
diff changeset
240 def message(str, id = 256):
4fc033cb5544 real dialogs for warnings etc., copy applet.rsrc template too
Guido van Rossum <guido@python.org>
parents: 2402
diff changeset
241 from Dlg import *
4fc033cb5544 real dialogs for warnings etc., copy applet.rsrc template too
Guido van Rossum <guido@python.org>
parents: 2402
diff changeset
242 d = GetNewDialog(id, -1)
4fc033cb5544 real dialogs for warnings etc., copy applet.rsrc template too
Guido van Rossum <guido@python.org>
parents: 2402
diff changeset
243 if not d:
4fc033cb5544 real dialogs for warnings etc., copy applet.rsrc template too
Guido van Rossum <guido@python.org>
parents: 2402
diff changeset
244 print "Error:", `str`
4fc033cb5544 real dialogs for warnings etc., copy applet.rsrc template too
Guido van Rossum <guido@python.org>
parents: 2402
diff changeset
245 print "DLOG id =", id, "not found."
4fc033cb5544 real dialogs for warnings etc., copy applet.rsrc template too
Guido van Rossum <guido@python.org>
parents: 2402
diff changeset
246 return
4fc033cb5544 real dialogs for warnings etc., copy applet.rsrc template too
Guido van Rossum <guido@python.org>
parents: 2402
diff changeset
247 tp, h, rect = d.GetDItem(2)
4fc033cb5544 real dialogs for warnings etc., copy applet.rsrc template too
Guido van Rossum <guido@python.org>
parents: 2402
diff changeset
248 SetIText(h, str)
4fc033cb5544 real dialogs for warnings etc., copy applet.rsrc template too
Guido van Rossum <guido@python.org>
parents: 2402
diff changeset
249 while 1:
4fc033cb5544 real dialogs for warnings etc., copy applet.rsrc template too
Guido van Rossum <guido@python.org>
parents: 2402
diff changeset
250 n = ModalDialog(None)
4fc033cb5544 real dialogs for warnings etc., copy applet.rsrc template too
Guido van Rossum <guido@python.org>
parents: 2402
diff changeset
251 if n == 1: break
4fc033cb5544 real dialogs for warnings etc., copy applet.rsrc template too
Guido van Rossum <guido@python.org>
parents: 2402
diff changeset
252 del d
2389
49bfef17b12b accept file arguments and loop over files
Guido van Rossum <guido@python.org>
parents: 2387
diff changeset
253
2362
747f0b7cb7be completely redone
Guido van Rossum <guido@python.org>
parents:
diff changeset
254
747f0b7cb7be completely redone
Guido van Rossum <guido@python.org>
parents:
diff changeset
255 if __name__ == '__main__':
747f0b7cb7be completely redone
Guido van Rossum <guido@python.org>
parents:
diff changeset
256 main()
2428
7924b7819d8f get creator from Owner resource; set attrs
Guido van Rossum <guido@python.org>
parents: 2425
diff changeset
257