annotate Mac/Lib/py_resource.py @ 4566:6403c94de50d legacy-trunk

Added safeguard against failure in __del__.
author Guido van Rossum <guido@python.org>
date Wed, 27 Nov 1996 19:39:58 +0000
parents ade9f996590a
children a94b0a122c98
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3656
ade9f996590a Module to handle PYC resources
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
1 """Creation of PYC resources"""
ade9f996590a Module to handle PYC resources
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
2 import os
ade9f996590a Module to handle PYC resources
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
3 import Res
ade9f996590a Module to handle PYC resources
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
4 import __builtin__
ade9f996590a Module to handle PYC resources
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
5
ade9f996590a Module to handle PYC resources
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
6 READ = 1
ade9f996590a Module to handle PYC resources
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
7 WRITE = 2
ade9f996590a Module to handle PYC resources
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
8 smAllScripts = -3
ade9f996590a Module to handle PYC resources
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
9
ade9f996590a Module to handle PYC resources
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
10 def Pstring(str):
ade9f996590a Module to handle PYC resources
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
11 """Return a pascal-style string from a python-style string"""
ade9f996590a Module to handle PYC resources
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
12 if len(str) > 255:
ade9f996590a Module to handle PYC resources
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
13 raise ValueError, 'String too large'
ade9f996590a Module to handle PYC resources
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
14 return chr(len(str))+str
ade9f996590a Module to handle PYC resources
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
15
ade9f996590a Module to handle PYC resources
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
16 def create(dst, creator='Pyth'):
ade9f996590a Module to handle PYC resources
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
17 """Create output file. Return handle and first id to use."""
ade9f996590a Module to handle PYC resources
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
18
ade9f996590a Module to handle PYC resources
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
19 try:
ade9f996590a Module to handle PYC resources
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
20 os.unlink(dst)
ade9f996590a Module to handle PYC resources
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
21 except os.error:
ade9f996590a Module to handle PYC resources
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
22 pass
ade9f996590a Module to handle PYC resources
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
23 Res.FSpCreateResFile(dst, creator, 'rsrc', smAllScripts)
ade9f996590a Module to handle PYC resources
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
24 return open(dst)
ade9f996590a Module to handle PYC resources
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
25
ade9f996590a Module to handle PYC resources
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
26 def open(dst):
ade9f996590a Module to handle PYC resources
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
27 output = Res.FSpOpenResFile(dst, WRITE)
ade9f996590a Module to handle PYC resources
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
28 Res.UseResFile(output)
ade9f996590a Module to handle PYC resources
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
29 return output
ade9f996590a Module to handle PYC resources
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
30
ade9f996590a Module to handle PYC resources
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
31 def writemodule(name, id, data, type='PYC '):
ade9f996590a Module to handle PYC resources
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
32 """Write pyc code to a PYC resource with given name and id."""
ade9f996590a Module to handle PYC resources
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
33 # XXXX Check that it doesn't exist
ade9f996590a Module to handle PYC resources
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
34 res = Res.Resource(data)
ade9f996590a Module to handle PYC resources
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
35 res.AddResource(type, id, name)
ade9f996590a Module to handle PYC resources
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
36 res.WriteResource()
ade9f996590a Module to handle PYC resources
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
37 res.ReleaseResource()
ade9f996590a Module to handle PYC resources
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
38
ade9f996590a Module to handle PYC resources
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
39 def frompycfile(file, name=None):
ade9f996590a Module to handle PYC resources
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
40 """Copy one pyc file to the open resource file"""
ade9f996590a Module to handle PYC resources
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
41 if name == None:
ade9f996590a Module to handle PYC resources
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
42 d, name = os.path.split(file)
ade9f996590a Module to handle PYC resources
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
43 name = name[:-4]
ade9f996590a Module to handle PYC resources
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
44 id = findfreeid()
ade9f996590a Module to handle PYC resources
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
45 writemodule(name, id, __builtin__.open(file, 'rb').read())
ade9f996590a Module to handle PYC resources
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
46 return id, name
ade9f996590a Module to handle PYC resources
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
47
ade9f996590a Module to handle PYC resources
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
48 def frompyfile(file, name=None):
ade9f996590a Module to handle PYC resources
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
49 """Compile python source file to pyc file and add to resource file"""
ade9f996590a Module to handle PYC resources
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
50 import py_compile
ade9f996590a Module to handle PYC resources
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
51
ade9f996590a Module to handle PYC resources
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
52 py_compile.compile(file)
ade9f996590a Module to handle PYC resources
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
53 file = file +'c'
ade9f996590a Module to handle PYC resources
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
54 return frompycfile(file, name)
ade9f996590a Module to handle PYC resources
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
55
ade9f996590a Module to handle PYC resources
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
56 # XXXX Note this is incorrect, it only handles one type and one file....
ade9f996590a Module to handle PYC resources
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
57
ade9f996590a Module to handle PYC resources
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
58 _firstfreeid = None
ade9f996590a Module to handle PYC resources
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
59
ade9f996590a Module to handle PYC resources
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
60 def findfreeid(type='PYC '):
ade9f996590a Module to handle PYC resources
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
61 """Find next free id-number for given resource type"""
ade9f996590a Module to handle PYC resources
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
62 global _firstfreeid
ade9f996590a Module to handle PYC resources
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
63
ade9f996590a Module to handle PYC resources
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
64 if _firstfreeid == None:
ade9f996590a Module to handle PYC resources
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
65 Res.SetResLoad(0)
ade9f996590a Module to handle PYC resources
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
66 highest = 511
ade9f996590a Module to handle PYC resources
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
67 num = Res.Count1Resources(type)
ade9f996590a Module to handle PYC resources
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
68 for i in range(1, num+1):
ade9f996590a Module to handle PYC resources
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
69 r = Res.Get1IndResource(type, i)
ade9f996590a Module to handle PYC resources
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
70 id, d1, d2 = r.GetResInfo()
ade9f996590a Module to handle PYC resources
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
71 highest = max(highest, id)
ade9f996590a Module to handle PYC resources
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
72 Res.SetResLoad(1)
ade9f996590a Module to handle PYC resources
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
73 _firstfreeid = highest+1
ade9f996590a Module to handle PYC resources
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
74 id = _firstfreeid
ade9f996590a Module to handle PYC resources
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
75 _firstfreeid = _firstfreeid+1
ade9f996590a Module to handle PYC resources
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
76 return id