Created Finder 7.0 AE interface and a test program that uses the
finder to launch an application.
diff --git a/Mac/Lib/test/testfinderopen.py b/Mac/Lib/test/testfinderopen.py
new file mode 100644
index 0000000..8ecf424
--- /dev/null
+++ b/Mac/Lib/test/testfinderopen.py
@@ -0,0 +1,33 @@
+"""Make the finder open an application, file or folder"""
+
+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
+	
+def open_in_finder(file):
+	"""Open a file thru the finder. Specify file by name or fsspec"""
+	finder = Finder(SIGNATURE)
+	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(file_alias, items=[file_alias])
+
+def main():
+	fss, ok = macfs.PromptGetFile('File to launch:')
+	if not ok: sys.exit(0)
+	result = open_in_finder(fss)
+	if result:
+		print 'Result: ', result
+		
+if __name__ == '__main__':
+	main()
+	
diff --git a/Mac/Lib/toolbox/Finder_7_0_Suite.py b/Mac/Lib/toolbox/Finder_7_0_Suite.py
new file mode 100644
index 0000000..1155795
--- /dev/null
+++ b/Mac/Lib/toolbox/Finder_7_0_Suite.py
@@ -0,0 +1,310 @@
+"""Suite 7.0 Finder Suite: This is the original Finder suite. These events will be supported in the future, but the syntax may be changed in a future Finder release.
+Level 1, version 1
+
+Generated from flap:Systeemmap:Finder
+AETE/AEUT resource version 0/149, language 0, script 0
+"""
+
+import aetools
+import MacOS
+
+_code = 'FNDR'
+
+class Finder_7_0_Suite:
+
+	def open_about_box(self, _no_object=None, _attributes={}, **_arguments):
+		"""open about box: Open the 'About This Mac' window
+		Keyword argument _attributes: AppleEvent attribute dictionary
+		"""
+		_code = 'aevt'
+		_subcode = 'abou'
+
+		if _arguments: raise TypeError, 'No optional args expected'
+		if _no_object != None: raise TypeError, 'No direct arg expected'
+
+
+		_reply, _arguments, _attributes = self.send(_code, _subcode,
+				_arguments, _attributes)
+		if _arguments.has_key('errn'):
+			raise MacOS.Error, aetools.decodeerror(_arguments)
+		# XXXX Optionally decode result
+		if _arguments.has_key('----'):
+			return _arguments['----']
+
+	_argmap_copy_to = {
+		'_from' : 'fsel',
+	}
+
+	def copy_to(self, _object, _attributes={}, **_arguments):
+		"""copy to: Copies one or more items into a folder
+		Required argument: Alias for folder into which the items are copied
+		Keyword argument _from: List of aliases for items to be copied
+		Keyword argument _attributes: AppleEvent attribute dictionary
+		"""
+		_code = 'FNDR'
+		_subcode = 'drag'
+
+		aetools.keysubst(_arguments, self._argmap_copy_to)
+		_arguments['----'] = _object
+
+
+		_reply, _arguments, _attributes = self.send(_code, _subcode,
+				_arguments, _attributes)
+		if _arguments.has_key('errn'):
+			raise MacOS.Error, aetools.decodeerror(_arguments)
+		# XXXX Optionally decode result
+		if _arguments.has_key('----'):
+			return _arguments['----']
+
+	_argmap_duplicate = {
+		'items' : 'fsel',
+	}
+
+	def duplicate(self, _object, _attributes={}, **_arguments):
+		"""duplicate: Duplicate a set of items in a folder
+		Required argument: Alias for folder containing the items
+		Keyword argument items: List of aliases for items in the folder
+		Keyword argument _attributes: AppleEvent attribute dictionary
+		"""
+		_code = 'FNDR'
+		_subcode = 'sdup'
+
+		aetools.keysubst(_arguments, self._argmap_duplicate)
+		_arguments['----'] = _object
+
+
+		_reply, _arguments, _attributes = self.send(_code, _subcode,
+				_arguments, _attributes)
+		if _arguments.has_key('errn'):
+			raise MacOS.Error, aetools.decodeerror(_arguments)
+		# XXXX Optionally decode result
+		if _arguments.has_key('----'):
+			return _arguments['----']
+
+	def empty_trash(self, _no_object=None, _attributes={}, **_arguments):
+		"""empty trash: Empties the trash
+		Keyword argument _attributes: AppleEvent attribute dictionary
+		"""
+		_code = 'FNDR'
+		_subcode = 'empt'
+
+		if _arguments: raise TypeError, 'No optional args expected'
+		if _no_object != None: raise TypeError, 'No direct arg expected'
+
+
+		_reply, _arguments, _attributes = self.send(_code, _subcode,
+				_arguments, _attributes)
+		if _arguments.has_key('errn'):
+			raise MacOS.Error, aetools.decodeerror(_arguments)
+		# XXXX Optionally decode result
+		if _arguments.has_key('----'):
+			return _arguments['----']
+
+	_argmap_make_aliases_for = {
+		'items' : 'fsel',
+	}
+
+	def make_aliases_for(self, _object, _attributes={}, **_arguments):
+		"""make aliases for: Make aliases to items from a single folder
+		Required argument: Alias for folder containing the items
+		Keyword argument items: List of aliases for items in folder
+		Keyword argument _attributes: AppleEvent attribute dictionary
+		"""
+		_code = 'FNDR'
+		_subcode = 'sali'
+
+		aetools.keysubst(_arguments, self._argmap_make_aliases_for)
+		_arguments['----'] = _object
+
+
+		_reply, _arguments, _attributes = self.send(_code, _subcode,
+				_arguments, _attributes)
+		if _arguments.has_key('errn'):
+			raise MacOS.Error, aetools.decodeerror(_arguments)
+		# XXXX Optionally decode result
+		if _arguments.has_key('----'):
+			return _arguments['----']
+
+	_argmap_move_to = {
+		'_from' : 'fsel',
+	}
+
+	def move_to(self, _object, _attributes={}, **_arguments):
+		"""move to: Move one or more items into a folder
+		Required argument: Alias for destination folder
+		Keyword argument _from: List of aliases for items to be moved 
+		Keyword argument _attributes: AppleEvent attribute dictionary
+		"""
+		_code = 'FNDR'
+		_subcode = 'move'
+
+		aetools.keysubst(_arguments, self._argmap_move_to)
+		_arguments['----'] = _object
+
+
+		_reply, _arguments, _attributes = self.send(_code, _subcode,
+				_arguments, _attributes)
+		if _arguments.has_key('errn'):
+			raise MacOS.Error, aetools.decodeerror(_arguments)
+		# XXXX Optionally decode result
+		if _arguments.has_key('----'):
+			return _arguments['----']
+
+	def sleep(self, _no_object=None, _attributes={}, **_arguments):
+		"""sleep: Put portable into sleep mode
+		Keyword argument _attributes: AppleEvent attribute dictionary
+		"""
+		_code = 'FNDR'
+		_subcode = 'slep'
+
+		if _arguments: raise TypeError, 'No optional args expected'
+		if _no_object != None: raise TypeError, 'No direct arg expected'
+
+
+		_reply, _arguments, _attributes = self.send(_code, _subcode,
+				_arguments, _attributes)
+		if _arguments.has_key('errn'):
+			raise MacOS.Error, aetools.decodeerror(_arguments)
+		# XXXX Optionally decode result
+		if _arguments.has_key('----'):
+			return _arguments['----']
+
+	def shut_down(self, _no_object=None, _attributes={}, **_arguments):
+		"""shut down: Shuts down the Macintosh if all applications can quit
+		Keyword argument _attributes: AppleEvent attribute dictionary
+		"""
+		_code = 'FNDR'
+		_subcode = 'shut'
+
+		if _arguments: raise TypeError, 'No optional args expected'
+		if _no_object != None: raise TypeError, 'No direct arg expected'
+
+
+		_reply, _arguments, _attributes = self.send(_code, _subcode,
+				_arguments, _attributes)
+		if _arguments.has_key('errn'):
+			raise MacOS.Error, aetools.decodeerror(_arguments)
+		# XXXX Optionally decode result
+		if _arguments.has_key('----'):
+			return _arguments['----']
+
+	_argmap_open = {
+		'items' : 'fsel',
+	}
+
+	def open(self, _object, _attributes={}, **_arguments):
+		"""open: Open folders, files, or applications from a given folder
+		Required argument: Alias for folder containing the items
+		Keyword argument items: List of aliases for items in the folder
+		Keyword argument _attributes: AppleEvent attribute dictionary
+		"""
+		_code = 'FNDR'
+		_subcode = 'sope'
+
+		aetools.keysubst(_arguments, self._argmap_open)
+		_arguments['----'] = _object
+
+
+		_reply, _arguments, _attributes = self.send(_code, _subcode,
+				_arguments, _attributes)
+		if _arguments.has_key('errn'):
+			raise MacOS.Error, aetools.decodeerror(_arguments)
+		# XXXX Optionally decode result
+		if _arguments.has_key('----'):
+			return _arguments['----']
+
+	_argmap__print = {
+		'items' : 'fsel',
+	}
+
+	def _print(self, _object, _attributes={}, **_arguments):
+		"""print: Print items from a given folder
+		Required argument: Alias for folder containing the items
+		Keyword argument items: List of aliases for items in folder
+		Keyword argument _attributes: AppleEvent attribute dictionary
+		"""
+		_code = 'FNDR'
+		_subcode = 'spri'
+
+		aetools.keysubst(_arguments, self._argmap__print)
+		_arguments['----'] = _object
+
+
+		_reply, _arguments, _attributes = self.send(_code, _subcode,
+				_arguments, _attributes)
+		if _arguments.has_key('errn'):
+			raise MacOS.Error, aetools.decodeerror(_arguments)
+		# XXXX Optionally decode result
+		if _arguments.has_key('----'):
+			return _arguments['----']
+
+	_argmap_put_away = {
+		'items' : 'fsel',
+	}
+
+	def put_away(self, _object, _attributes={}, **_arguments):
+		"""put away: Put away items from a given folder
+		Required argument: Alias for folder containing the items
+		Keyword argument items: List of aliases to items in folder
+		Keyword argument _attributes: AppleEvent attribute dictionary
+		Returns: undocumented, typecode 'alis'
+		"""
+		_code = 'FNDR'
+		_subcode = 'sput'
+
+		aetools.keysubst(_arguments, self._argmap_put_away)
+		_arguments['----'] = _object
+
+
+		_reply, _arguments, _attributes = self.send(_code, _subcode,
+				_arguments, _attributes)
+		if _arguments.has_key('errn'):
+			raise MacOS.Error, aetools.decodeerror(_arguments)
+		# XXXX Optionally decode result
+		if _arguments.has_key('----'):
+			return _arguments['----']
+
+	def restart(self, _no_object=None, _attributes={}, **_arguments):
+		"""restart: Restart the Macintosh
+		Keyword argument _attributes: AppleEvent attribute dictionary
+		"""
+		_code = 'FNDR'
+		_subcode = 'rest'
+
+		if _arguments: raise TypeError, 'No optional args expected'
+		if _no_object != None: raise TypeError, 'No direct arg expected'
+
+
+		_reply, _arguments, _attributes = self.send(_code, _subcode,
+				_arguments, _attributes)
+		if _arguments.has_key('errn'):
+			raise MacOS.Error, aetools.decodeerror(_arguments)
+		# XXXX Optionally decode result
+		if _arguments.has_key('----'):
+			return _arguments['----']
+
+	_argmap_select = {
+		'items' : 'fsel',
+	}
+
+	def select(self, _object, _attributes={}, **_arguments):
+		"""select: Select items in a folder
+		Required argument: Alias for folder containing the items
+		Keyword argument items: List of aliases for items in folder
+		Keyword argument _attributes: AppleEvent attribute dictionary
+		"""
+		_code = 'FNDR'
+		_subcode = 'srev'
+
+		aetools.keysubst(_arguments, self._argmap_select)
+		_arguments['----'] = _object
+
+
+		_reply, _arguments, _attributes = self.send(_code, _subcode,
+				_arguments, _attributes)
+		if _arguments.has_key('errn'):
+			raise MacOS.Error, aetools.decodeerror(_arguments)
+		# XXXX Optionally decode result
+		if _arguments.has_key('----'):
+			return _arguments['----']
+