diff options
author | Jack Jansen <jack.jansen@cwi.nl> | 2002-12-26 21:09:39 (GMT) |
---|---|---|
committer | Jack Jansen <jack.jansen@cwi.nl> | 2002-12-26 21:09:39 (GMT) |
commit | 6dd561bdfd532f63d5013ab88d3feb7dc5c8cd3f (patch) | |
tree | 81337261a1d4a1c358d7f75dcb1198b5a2dcb3dc /Mac/Lib/macfs.py | |
parent | 315e9bebcd990fd93dcba056851bc806d1f2af47 (diff) | |
download | cpython-6dd561bdfd532f63d5013ab88d3feb7dc5c8cd3f.zip cpython-6dd561bdfd532f63d5013ab88d3feb7dc5c8cd3f.tar.gz cpython-6dd561bdfd532f63d5013ab88d3feb7dc5c8cd3f.tar.bz2 |
Integrated macfsn into macfs, and made the Standard File calls return the
correct FSSpec implementations.
Diffstat (limited to 'Mac/Lib/macfs.py')
-rw-r--r-- | Mac/Lib/macfs.py | 147 |
1 files changed, 140 insertions, 7 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 + |