diff --git a/Mac/Lib/py_resource.py b/Mac/Lib/py_resource.py
new file mode 100644
index 0000000..8530b59
--- /dev/null
+++ b/Mac/Lib/py_resource.py
@@ -0,0 +1,76 @@
+"""Creation of PYC resources"""
+import os
+import Res
+import __builtin__
+
+READ = 1
+WRITE = 2
+smAllScripts = -3
+
+def Pstring(str):
+	"""Return a pascal-style string from a python-style string"""
+	if len(str) > 255:
+		raise ValueError, 'String too large'
+	return chr(len(str))+str
+	
+def create(dst, creator='Pyth'):
+	"""Create output file. Return handle and first id to use."""
+	
+	try:
+		os.unlink(dst)
+	except os.error:
+		pass
+	Res.FSpCreateResFile(dst, creator, 'rsrc', smAllScripts)
+	return open(dst)
+	
+def open(dst):
+	output = Res.FSpOpenResFile(dst, WRITE)
+	Res.UseResFile(output)
+	return output
+
+def writemodule(name, id, data, type='PYC '):
+	"""Write pyc code to a PYC resource with given name and id."""
+	# XXXX Check that it doesn't exist
+	res = Res.Resource(data)
+	res.AddResource(type, id, name)
+	res.WriteResource()
+	res.ReleaseResource()
+		
+def frompycfile(file, name=None):
+	"""Copy one pyc file to the open resource file"""
+	if name == None:
+		d, name = os.path.split(file)
+		name = name[:-4]
+	id = findfreeid()
+	writemodule(name, id, __builtin__.open(file, 'rb').read())
+	return id, name
+
+def frompyfile(file, name=None):
+	"""Compile python source file to pyc file and add to resource file"""
+	import py_compile
+	
+	py_compile.compile(file)
+	file = file +'c'
+	return frompycfile(file, name)	
+
+# XXXX Note this is incorrect, it only handles one type and one file....
+
+_firstfreeid = None
+
+def findfreeid(type='PYC '):
+	"""Find next free id-number for given resource type"""
+	global _firstfreeid
+	
+	if _firstfreeid == None:
+		Res.SetResLoad(0)
+		highest = 511
+		num = Res.Count1Resources(type)
+		for i in range(1, num+1):
+			r = Res.Get1IndResource(type, i)
+			id, d1, d2 = r.GetResInfo()
+			highest = max(highest, id)
+		Res.SetResLoad(1)
+		_firstfreeid = highest+1
+	id = _firstfreeid
+	_firstfreeid = _firstfreeid+1
+	return id
