diff options
author | cinap_lenrek <cinap_lenrek@localhost> | 2011-05-03 11:25:13 +0000 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@localhost> | 2011-05-03 11:25:13 +0000 |
commit | 458120dd40db6b4df55a4e96b650e16798ef06a0 (patch) | |
tree | 8f82685be24fef97e715c6f5ca4c68d34d5074ee /sys/lib/python/plat-mac/macfs.py | |
parent | 3a742c699f6806c1145aea5149bf15de15a0afd7 (diff) |
add hg and python
Diffstat (limited to 'sys/lib/python/plat-mac/macfs.py')
-rw-r--r-- | sys/lib/python/plat-mac/macfs.py | 198 |
1 files changed, 198 insertions, 0 deletions
diff --git a/sys/lib/python/plat-mac/macfs.py b/sys/lib/python/plat-mac/macfs.py new file mode 100644 index 000000000..73815aeb3 --- /dev/null +++ b/sys/lib/python/plat-mac/macfs.py @@ -0,0 +1,198 @@ +"""macfs - Pure Python module designed to be backward compatible with +macfs and MACFS. +""" +import sys +import struct +import Carbon.Res +import Carbon.File +import warnings + +warnings.warn("macfs is deprecated, use Carbon.File, Carbon.Folder or EasyDialogs", + DeprecationWarning, stacklevel=2) + +# First step: ensure we also emulate the MACFS module, which contained +# all the constants + +sys.modules['MACFS'] = sys.modules[__name__] + +# Import all those constants +from Carbon.Files import * +from Carbon.Folders import * + +# For some obscure historical reason these are here too: +READ = 1 +WRITE = 2 +smAllScripts = -3 + +# +# Find the epoch conversion for file dates in a way that works on OS9 and OSX +import time +if time.gmtime(0)[0] == 1970: + _EPOCHCONVERT = -((1970-1904)*365 + 17) * (24*60*60) + 0x100000000L + def _utc2time(utc): + t = utc[1] + _EPOCHCONVERT + return int(t) + def _time2utc(t): + t = int(t) - _EPOCHCONVERT + if t < -0x7fffffff: + t = t + 0x10000000L + return (0, int(t), 0) +else: + def _utc2time(utc): + t = utc[1] + if t < 0: + t = t + 0x100000000L + return t + def _time2utc(t): + if t > 0x7fffffff: + t = t - 0x100000000L + return (0, int(t), 0) + +# 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) + + def NewAlias(self, src=None): + return Alias(Carbon.File.NewAlias(src, self)) + + def GetCreatorType(self): + finfo = self.FSpGetFInfo() + return finfo.Creator, finfo.Type + + def SetCreatorType(self, ctor, tp): + finfo = self.FSpGetFInfo() + finfo.Creator = ctor + finfo.Type = tp + self.FSpSetFInfo(finfo) + + def GetFInfo(self): + return self.FSpGetFInfo() + + def SetFInfo(self, info): + return self.FSpSetFInfo(info) + + def GetDates(self): + catInfoFlags = kFSCatInfoCreateDate|kFSCatInfoContentMod|kFSCatInfoBackupDate + catinfo, d1, d2, d3 = FSRef(self).FSGetCatalogInfo(catInfoFlags) + cdate = catinfo.createDate + mdate = catinfo.contentModDate + bdate = catinfo.backupDate + return _utc2time(cdate), _utc2time(mdate), _utc2time(bdate) + + def SetDates(self, cdate, mdate, bdate): + catInfoFlags = kFSCatInfoCreateDate|kFSCatInfoContentMod|kFSCatInfoBackupDate + catinfo = Carbon.File.FSCatalogInfo( + createDate = _time2utc(cdate), + contentModDate = _time2utc(mdate), + backupDate = _time2utc(bdate)) + FSRef(self).FSSetCatalogInfo(catInfoFlags, catinfo) + +class FSRef(Carbon.File.FSRef): + def as_fsspec(self): + return FSSpec(self) + +class Alias(Carbon.File.Alias): + + def GetInfo(self, index): + return self.GetAliasInfo(index) + + def Update(self, *args): + pass # print "Alias.Update not yet implemented" + + def Resolve(self, src=None): + fss, changed = self.ResolveAlias(src) + 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 + +def RawFSSpec(data): + return FSSpec(rawdata=data) + +def RawAlias(data): + return Alias(rawdata=data) + +def FindApplication(*args): + raise NotImplementedError, "FindApplication no longer implemented" + +def NewAliasMinimalFromFullPath(path): + return Alias(Carbon.File.NewAliasMinimalFromFullPath(path, '', '')) + +# Another global function: +from Carbon.Folder import FindFolder + +# +# Finally the old Standard File routine emulators. +# + +_curfolder = None + +def StandardGetFile(*typelist): + """Ask for an input file, optionally specifying 4-char file types that are + allowable""" + return PromptGetFile('', *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""" + import EasyDialogs + warnings.warn("macfs.StandardGetFile and friends are deprecated, use EasyDialogs.AskFileForOpen", + DeprecationWarning, stacklevel=2) + if not typelist: + typelist = None + fss = EasyDialogs.AskFileForOpen(message=prompt, wanted=FSSpec, + typeList=typelist, defaultLocation=_handleSetFolder()) + return fss, not fss is None + +def StandardPutFile(prompt, default=None): + """Ask the user for an output file, with a prompt. Optionally you cn supply a + default output filename""" + import EasyDialogs + warnings.warn("macfs.StandardGetFile and friends are deprecated, use EasyDialogs.AskFileForOpen", + DeprecationWarning, stacklevel=2) + fss = EasyDialogs.AskFileForSave(wanted=FSSpec, message=prompt, + savedFileName=default, defaultLocation=_handleSetFolder()) + return fss, not fss is None + +def SetFolder(folder): + global _curfolder + warnings.warn("macfs.StandardGetFile and friends are deprecated, use EasyDialogs.AskFileForOpen", + DeprecationWarning, stacklevel=2) + if _curfolder: + rv = FSSpec(_curfolder) + else: + rv = None + _curfolder = folder + return rv + +def _handleSetFolder(): + global _curfolder + rv = _curfolder + _curfolder = None + return rv + +def GetDirectory(prompt=None): + """Ask the user to select a folder. Optionally you can give a prompt.""" + import EasyDialogs + warnings.warn("macfs.StandardGetFile and friends are deprecated, use EasyDialogs.AskFileForOpen", + DeprecationWarning, stacklevel=2) + fss = EasyDialogs.AskFolder(message=prompt, wanted=FSSpec, + defaultLocation=_handleSetFolder()) + return fss, not fss is None |