summaryrefslogtreecommitdiffstats
path: root/Mac/Lib
diff options
context:
space:
mode:
Diffstat (limited to 'Mac/Lib')
-rw-r--r--Mac/Lib/macfs.py147
-rw-r--r--Mac/Lib/macfsn.py162
2 files changed, 140 insertions, 169 deletions
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 @@ sys.modules['MACFS'] = sys.modules[__name__]
# 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 @@ class Alias(Carbon.File.Alias):
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 FindApplication(*args):
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)
-