| """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 |