Convenience routines: wrappers around some of the scriptable finder
functionality.
diff --git a/Mac/Lib/findertools.py b/Mac/Lib/findertools.py
new file mode 100644
index 0000000..ffc75f5
--- /dev/null
+++ b/Mac/Lib/findertools.py
@@ -0,0 +1,138 @@
+"""Utility routines depending on the finder."""
+
+import Finder_7_0_Suite
+import aetools
+import MacOS
+import sys
+import macfs
+
+SIGNATURE='MACS'
+
+class Finder(aetools.TalkTo, Finder_7_0_Suite.Finder_7_0_Suite):
+	pass
+	
+_finder_talker = None
+
+def _getfinder():
+	global _finder_talker
+	if not _finder_talker:
+		_finder_talker = Finder(SIGNATURE)
+	return _finder_talker
+	
+def launch(file):
+	"""Open a file thru the finder. Specify file by name or fsspec"""
+	finder = _getfinder()
+	fss = macfs.FSSpec(file)
+	vRefNum, parID, name = fss.as_tuple()
+	dir_fss = macfs.FSSpec((vRefNum, parID, ''))
+	file_alias = fss.NewAlias()
+	dir_alias = dir_fss.NewAlias()
+	return finder.open(dir_alias, items=[file_alias])
+	
+def Print(file):
+	"""Print a file thru the finder. Specify file by name or fsspec"""
+	finder = _getfinder()
+	fss = macfs.FSSpec(file)
+	vRefNum, parID, name = fss.as_tuple()
+	dir_fss = macfs.FSSpec((vRefNum, parID, ''))
+	file_alias = fss.NewAlias()
+	dir_alias = dir_fss.NewAlias()
+	return finder._print(dir_alias, items=[file_alias])
+	
+def copy(src, dstdir):
+	"""Copy a file to a folder"""
+	finder = _getfinder()
+	src_fss = macfs.FSSpec(src)
+	dst_fss = macfs.FSSpec(dstdir)
+	src_alias = src_fss.NewAlias()
+	dst_alias = dst_fss.NewAlias()
+	return finder.copy_to(dst_alias, _from=[src_alias])
+
+def move(src, dstdir):
+	"""Move a file to a folder"""
+	finder = _getfinder()
+	src_fss = macfs.FSSpec(src)
+	dst_fss = macfs.FSSpec(dstdir)
+	src_alias = src_fss.NewAlias()
+	dst_alias = dst_fss.NewAlias()
+	return finder.move_to(dst_alias, _from=[src_alias])
+	
+def sleep():
+	"""Put the mac to sleep"""
+	finder = _getfinder()
+	finder.sleep()
+	
+def shutdown():
+	"""Shut the mac down"""
+	finder = _getfinder()
+	finder.shut_down()
+	
+def restart():
+	"""Restart the mac"""
+	finder = _getfinder()
+	finder.restart()
+	
+
+def main():
+	print 'Testing launch...'
+	fss, ok = macfs.PromptGetFile('File to launch:')
+	if ok:
+		result = launch(fss)
+		if result:
+			print 'Result: ', result
+		print 'Press return-',
+		sys.stdin.readline()
+	print 'Testing print...'
+	fss, ok = macfs.PromptGetFile('File to print:')
+	if ok:
+		result = Print(fss)
+		if result:
+			print 'Result: ', result
+		print 'Press return-',
+		sys.stdin.readline()
+	print 'Testing copy...'
+	fss, ok = macfs.PromptGetFile('File to copy:')
+	if ok:
+		dfss, ok = macfs.GetDirectory()
+		if ok:
+			result = copy(fss, dfss)
+			if result:
+				print 'Result:', result
+			print 'Press return-',
+			sys.stdin.readline()
+	print 'Testing move...'
+	fss, ok = macfs.PromptGetFile('File to move:')
+	if ok:
+		dfss, ok = macfs.GetDirectory()
+		if ok:
+			result = move(fss, dfss)
+			if result:
+				print 'Result:', result
+			print 'Press return-',
+			sys.stdin.readline()
+	import EasyDialogs
+	print 'Testing sleep...'
+	if EasyDialogs.AskYesNoCancel('Sleep?') > 0:
+		result = sleep()
+		if result:
+			print 'Result:', result
+		print 'Press return-',
+		sys.stdin.readline()
+	print 'Testing shutdown...'
+	if EasyDialogs.AskYesNoCancel('Shut down?') > 0:
+		result = shutdown()
+		if result:
+			print 'Result:', result
+		print 'Press return-',
+		sys.stdin.readline()
+	print 'Testing restart...'
+	if EasyDialogs.AskYesNoCancel('Restart?') > 0:
+		result = restart()
+		if result:
+			print 'Result:', result
+		print 'Press return-',
+		sys.stdin.readline()
+		
+if __name__ == '__main__':
+	main()
+