completely redone
diff --git a/Mac/mkapplet.py b/Mac/mkapplet.py
new file mode 100644
index 0000000..d5cfba3
--- /dev/null
+++ b/Mac/mkapplet.py
@@ -0,0 +1,89 @@
+"""Add a 'PYC ' resource named "__main__" to a resource file.
+
+This first puts up a dialog asking for a Python source file ('TEXT'),
+then one asking for an existing destination file ('APPL' or 'rsrc').
+
+It compiles the Python source into a code object, marshals it into a string,
+prefixes the string with a .pyc header, and turns it into a resource,
+which is then written to the destination.
+
+If the destination already contains a resource with the same name and type,
+it is overwritten.
+"""
+
+import marshal
+import imp
+import macfs
+from Res import *
+
+# .pyc file (and 'PYC ' resource magic number)
+MAGIC = imp.get_magic()
+
+# Complete specification of our resource
+RESTYPE = 'PYC '
+RESID = 128
+RESNAME = '__main__'
+
+# OpenResFile mode parameters
+READ = 1
+WRITE = 2
+
+def main():
+	
+	# Ask for source text
+	
+	srcfss, ok = macfs.StandardGetFile('TEXT')
+	if not ok: return
+	
+	# Read the source and compile it
+	# (there's no point asking for a destination if it has a syntax error)
+	
+	filename = srcfss.as_pathname()
+	fp = open(filename)
+	text = fp.read()
+	fp.close()
+	code = compile(text, filename, "exec")
+	
+	# Ask for destination file
+	
+	dstfss, ok = macfs.StandardGetFile('APPL', 'rsrc')
+	if not ok: return
+	
+	# Create the raw data for the resource from the code object
+	
+	data = marshal.dumps(code)
+	del code
+	data = (MAGIC + '\0\0\0\0') + data
+	
+	# Open the resource file
+	
+	fnum = FSpOpenResFile(dstfss.as_pathname(), WRITE)
+	
+	# Delete any existing resource with name __main__ or number 128
+	
+	try:
+		res = Get1NamedResource(RESTYPE, RESNAME)
+		res.RmveResource()
+	except Error:
+		pass
+	
+	try:
+		res = Get1Resource(RESTYPE, RESID)
+		res.RmveResource()
+	except Error:
+		pass
+	
+	# Create the resource and write it
+	
+	res = Resource(data)
+	res.AddResource(RESTYPE, RESID, RESNAME)
+	# XXX Are the following two calls needed?
+	res.WriteResource()
+	res.ReleaseResource()
+	
+	# Close the resource file
+	
+	CloseResFile(fnum)
+
+if __name__ == '__main__':
+	main()