Integrated macfsn into macfs, and made the Standard File calls return the
correct FSSpec implementations.
diff --git a/Mac/Lib/macfs.py b/Mac/Lib/macfs.py
index a0aa032..3cf56d0 100644
--- a/Mac/Lib/macfs.py
+++ b/Mac/Lib/macfs.py
@@ -2,6 +2,10 @@
 macfs and MACFS.
 """
 import sys
+import struct
+import Carbon.Res
+import Carbon.File
+import Nav
 
 # First step: ensure we also emulate the MACFS module, which contained
 # all the constants
@@ -11,19 +15,19 @@
 # Import all those constants
 from Carbon.Files import *
 from Carbon.Folders import *
-# Another method:
-from Carbon.Folder import FindFolder
 
 # For some obscure historical reason these are here too:
 READ = 1
 WRITE = 2
 smAllScripts = -3
 
-
-import Carbon.File
 # The old name of the error object:
 error = Carbon.File.Error
 
+#
+# The various objects macfs used to export. We override them here, because some
+# of the method names are subtly different.
+#
 class FSSpec(Carbon.File.FSSpec):
 	def as_fsref(self):
 		return FSRef(self)
@@ -72,12 +76,14 @@
 		return FSSpec(fss), changed
 		
 from Carbon.File import FInfo
-	
+
+# Backward-compatible type names:
 FSSpecType = FSSpec
 FSRefType = FSRef
 AliasType = Alias
 FInfoType = FInfo
 
+# Global functions:
 def ResolveAliasFile(fss, chain=1):
 	fss, isdir, isalias = Carbon.File.ResolveAliasFile(fss, chain)
 	return FSSpec(fss), isdir, isalias
@@ -94,5 +100,132 @@
 def NewAliasMinimalFromFullPath(path):
 	return Alias(Carbon.File.NewAliasMinimalFromFullPath(path, '', ''))
 	
-# Finally, install nav services
-import macfsn
\ No newline at end of file
+# Another global function:
+from Carbon.Folder import FindFolder
+
+#
+# Finally the old Standard File routine emulators.
+#
+
+_movablemodal = 0
+_curfolder = None
+
+def _mktypelist(typelist):
+	# Workaround for OSX typeless files:
+	if 'TEXT' in typelist and not '\0\0\0\0' in typelist:
+		typelist = typelist + ('\0\0\0\0',)
+	if not typelist:
+		return None
+	data = 'Pyth' + struct.pack("hh", 0, len(typelist))
+	for type in typelist:
+		data = data+type
+	return Carbon.Res.Handle(data)
+	
+def StandardGetFile(*typelist):
+	"""Ask for an input file, optionally specifying 4-char file types that are
+	allowable"""
+	return apply(PromptGetFile, (None,)+typelist)
+	
+def PromptGetFile(prompt, *typelist):
+	"""Ask for an input file giving the user a prompt message. Optionally you can
+	specifying 4-char file types that are allowable"""
+	args = {}
+	flags = 0x56
+	typehandle = _mktypelist(typelist)
+	if typehandle:
+		args['typeList'] = typehandle
+	else:
+		flags = flags | 0x01
+	if prompt:
+		args['message'] = prompt
+	args['preferenceKey'] = 'PyMC'
+	if _movablemodal:
+		args['eventProc'] = None
+	args['dialogOptionFlags'] = flags
+	_handleSetFolder(args)
+	try:
+		rr = Nav.NavChooseFile(args)
+		good = 1
+	except Nav.error, arg:
+		if arg[0] != -128: # userCancelledErr
+			raise Nav.error, arg
+		good = 0
+		fss = None
+	else:
+		if rr.selection:
+			fss = FSSpec(rr.selection[0])
+		else:
+			fss = None
+			good = 0
+##	if typehandle:
+##		typehandle.DisposeHandle()
+	return fss, good
+
+def StandardPutFile(prompt, default=None):
+	"""Ask the user for an output file, with a prompt. Optionally you cn supply a
+	default output filename"""
+	args = {}
+	flags = 0x07
+	if prompt:
+		args['message'] = prompt
+	args['preferenceKey'] = 'PyMC'
+	if _movablemodal:
+		args['eventProc'] = None
+	if default:
+		args['savedFileName'] = default
+	args['dialogOptionFlags'] = flags
+	_handleSetFolder(args)
+	try:
+		rr = Nav.NavPutFile(args)
+		good = 1
+	except Nav.error, arg:
+		if arg[0] != -128: # userCancelledErr
+			raise Nav.error, arg
+		good = 0
+		fss = None
+	else:
+		fss = FSSpec(rr.selection[0])
+	return fss, good
+	
+def SetFolder(folder):
+	global _curfolder
+	if _curfolder:
+		rv = _curfolder
+	else:
+		rv = None
+	_curfolder = FSSpec(folder)
+	return rv
+	
+def _handleSetFolder(args):
+	global _curfolder
+	if not _curfolder:
+		return
+	import aepack
+	fss = _curfolder
+	aedesc = aepack.pack(fss)
+	args['defaultLocation'] = aedesc
+	_curfolder = None
+	
+def GetDirectory(prompt=None):
+	"""Ask the user to select a folder. Optionally you can give a prompt."""
+	args = {}
+	flags = 0x17
+	if prompt:
+		args['message'] = prompt
+	args['preferenceKey'] = 'PyMC'
+	if _movablemodal:
+		args['eventProc'] = None
+	args['dialogOptionFlags'] = flags
+	_handleSetFolder(args)
+	try:
+		rr = Nav.NavChooseFolder(args)
+		good = 1
+	except Nav.error, arg:
+		if arg[0] != -128: # userCancelledErr
+			raise Nav.error, arg
+		good = 0
+		fss = None
+	else:
+		fss = FSSpec(rr.selection[0])
+	return fss, good
+	
diff --git a/Mac/Lib/macfsn.py b/Mac/Lib/macfsn.py
deleted file mode 100644
index 8f3203c..0000000
--- a/Mac/Lib/macfsn.py
+++ /dev/null
@@ -1,162 +0,0 @@
-"""StandardFile compatability module: implement macfs StandardFile
-API calls with Navigation Services"""
-import macfs
-import struct
-from Carbon import Res
-try:
-	import Nav
-except ImportError:
-	Nav = None
-
-_curfolder = None
-_movablemodal = 1
-
-def _mktypelist(typelist):
-	# Workaround for OSX typeless files:
-	if 'TEXT' in typelist and not '\0\0\0\0' in typelist:
-		typelist = typelist + ('\0\0\0\0',)
-	if not typelist:
-		return None
-	data = 'Pyth' + struct.pack("hh", 0, len(typelist))
-	for type in typelist:
-		data = data+type
-	return Res.Handle(data)
-	
-def _StandardGetFile(*typelist):
-	return apply(_PromptGetFile, (None,)+typelist)
-	
-def _PromptGetFile(prompt, *typelist):
-	args = {}
-	flags = 0x56
-	typehandle = _mktypelist(typelist)
-	if typehandle:
-		args['typeList'] = typehandle
-	else:
-		flags = flags | 0x01
-	if prompt:
-		args['message'] = prompt
-	args['preferenceKey'] = 'PyMC'
-	if _movablemodal:
-		args['eventProc'] = None
-	args['dialogOptionFlags'] = flags
-	_handleSetFolder(args)
-	try:
-		rr = Nav.NavChooseFile(args)
-		good = 1
-	except Nav.error, arg:
-		if arg[0] != -128: # userCancelledErr
-			raise Nav.error, arg
-		good = 0
-		fss = None
-	else:
-		if rr.selection:
-			fss = rr.selection[0]
-		else:
-			fss = None
-			good = 0
-##	if typehandle:
-##		typehandle.DisposeHandle()
-	return fss, good
-
-def _StandardPutFile(prompt, default=None):
-	args = {}
-	flags = 0x07
-	if prompt:
-		args['message'] = prompt
-	args['preferenceKey'] = 'PyMC'
-	if _movablemodal:
-		args['eventProc'] = None
-	if default:
-		args['savedFileName'] = default
-	args['dialogOptionFlags'] = flags
-	_handleSetFolder(args)
-	try:
-		rr = Nav.NavPutFile(args)
-		good = 1
-	except Nav.error, arg:
-		if arg[0] != -128: # userCancelledErr
-			raise Nav.error, arg
-		good = 0
-		fss = None
-	else:
-		fss = rr.selection[0]
-	return fss, good
-	
-def _SetFolder(folder):
-	global _curfolder
-	if _curfolder:
-		rv = _curfolder
-	else:
-		rv = None
-	_curfolder = macfs.FSSpec(folder)
-	return rv
-	
-def _handleSetFolder(args):
-	global _curfolder
-	if not _curfolder:
-		return
-	import aepack
-	fss = macfs.FSSpec(_curfolder)
-	aedesc = aepack.pack(fss)
-	args['defaultLocation'] = aedesc
-	_curfolder = None
-	
-def _GetDirectory(prompt=None):
-	args = {}
-	flags = 0x17
-	if prompt:
-		args['message'] = prompt
-	args['preferenceKey'] = 'PyMC'
-	if _movablemodal:
-		args['eventProc'] = None
-	args['dialogOptionFlags'] = flags
-	_handleSetFolder(args)
-	try:
-		rr = Nav.NavChooseFolder(args)
-		good = 1
-	except Nav.error, arg:
-		if arg[0] != -128: # userCancelledErr
-			raise Nav.error, arg
-		good = 0
-		fss = None
-	else:
-		fss = rr.selection[0]
-	return fss, good
-	
-def _install():
-	macfs.StandardGetFile = StandardGetFile
-	macfs.PromptGetFile = PromptGetFile
-	macfs.StandardPutFile = StandardPutFile
-	macfs.SetFolder = SetFolder
-	macfs.GetDirectory = GetDirectory
-	
-if Nav and Nav.NavServicesAvailable():
-	StandardGetFile = _StandardGetFile
-	PromptGetFile = _PromptGetFile
-	StandardPutFile = _StandardPutFile
-	SetFolder = _SetFolder
-	GetDirectory = _GetDirectory
-	_install()
-else:
-	from macfs import StandardGetFile, PromptGetFile, StandardPutFile, SetFolder, GetDirectory
-	
-
-if __name__ == '__main__':
-	print 'Testing StandardGetFile'
-	fss, ok = StandardGetFile()
-	print '->', fss, ok
-	print 'Testing StandardGetFile("TEXT")'
-	fss, ok = StandardGetFile("TEXT")
-	print '->', fss, ok
-	print 'Testing PromptGetFile'
-	fss, ok = PromptGetFile("prompt")
-	print '->', fss, ok
-	print 'Testing StandardPutFile("the prompt", "default")'
-	fss, ok = StandardPutFile("the prompt", "default")
-	print '->', fss, ok
-	print 'Testing GetDirectory("another prompt")'
-	fss, ok = GetDirectory("Another prompt")
-	print '->', fss, ok
-	import sys
-	sys.exit(1)
-