Added functionality: locate CW projects, copy them, empty them and
binhex them.
diff --git a/Mac/scripts/binhextree.py b/Mac/scripts/binhextree.py
index 9ffefbe..fa95af7 100644
--- a/Mac/scripts/binhextree.py
+++ b/Mac/scripts/binhextree.py
@@ -13,19 +13,118 @@
 import os
 import binhex
 import sys
+import macostools
+import macfs
 
-extensions = ['.rsrc']
+import addpack
+addpack.addpack('Tools')
+addpack.addpack('bgen')
+addpack.addpack('AE')
+import aetools
+from Metrowerks_Shell_Suite import Metrowerks_Shell_Suite
+from Required_Suite import Required_Suite 
+
+class MwShell(aetools.TalkTo, Metrowerks_Shell_Suite, Required_Suite):
+	pass
+
+# Top-level directory
+TOP=''
+
+# Where to put CW projects, relative to TOP
+CWDIR=':Mac:mwerks:projects'
+
+# Helper routines
+def binhexit(path, name):
+	dstfile = path + '.hqx'
+	if os.path.exists(dstfile) and \
+			os.stat(dstfile)[8] > os.stat(path)[8]:
+		print 'Skip', path,'- Up-to-date'
+		return
+	print 'Binhexing', path
+	binhex.binhex(path, dstfile)
+	
+# Project files to handle
+project_files = {}
+
+def hexbincwprojects(creator):
+	"""Compact and hexbin all files remembered with a given creator"""
+	print 'Please start project mgr with signature', creator,'-'
+	sys.stdin.readline()
+	try:
+		mgr = MwShell(creator)
+	except 'foo':
+		print 'Not handled:', creator
+		return
+	for fss in project_files[creator]:
+		srcfile = fss.as_pathname()
+		dstfile = srcfile + '.hqx'
+		if os.path.exists(dstfile) and \
+				os.stat(dstfile)[8] > os.stat(srcfile)[8]:
+			print 'Skip', path,'- Up-to-date'
+			continue
+		print 'Compacting', dstfile
+		mgr.open(fss)
+		mgr.Reset_File_Paths()
+		mgr.Remove_Binaries()
+		mgr.Close_Project()
+		
+		print 'Binhexing', dstfile
+		binhex.binhex(srcfile, dstfile)
+	mgr.quit()
+	
+def copycwproject(path, name):
+	"""Copy CW project (if needed) and remember for hexbinning"""
+	global project_files
+	
+	dstdir = os.path.join(TOP, CWDIR)
+	if not os.path.exists(dstdir):
+		print dstdir
+		print 'No CW-project dir, skip', name
+		return
+	dstfile = os.path.join(dstdir, name)
+	# Check that we're not in the dest directory
+	if dstfile == path:
+		return
+
+	# If the destination doesn't exists or is older that the source
+	# we copy and remember it
+	
+	if os.path.exists(dstfile) and \
+			os.stat(dstfile)[8] > os.stat(path)[8]:
+		print 'Not copying', path,'- Up-to-date'
+	else:
+		print 'Copy', path
+		macostools.copy(path, dstfile)
+	
+	fss = macfs.FSSpec(dstfile)
+	creator = fss.GetCreatorType()[0]
+	
+	if project_files.has_key(creator):
+		project_files[creator].append(fss)
+	else:
+		project_files[creator] = [fss]	
+	
+
+extensions = [
+	('.rsrc', binhexit),
+	('.µ', copycwproject)
+	]
 
 def walker(arg, top, names):
 	for n in names:
-		for ext in extensions:
+		for ext, handler in extensions:
 			if n[-len(ext):] == ext:
 				name = os.path.join(top, n)
-				print 'Binhexing', name
-				binhex.binhex(name, name + '.hqx')
+				handler(name, n)
 				
 def dodir(name):
+	global TOP, project_files
+	TOP = name
 	os.path.walk(name, walker, None)
+	
+	for creator in project_files.keys():
+		hexbincwprojects(creator)
+	project_files = {}
 				
 def main():
 	if len(sys.argv) > 1: