| 
									
										
										
										
											2002-12-17 23:28:24 +00:00
										 |  |  | """macfs - Pure Python module designed to be backward compatible with
 | 
					
						
							|  |  |  | macfs and MACFS. | 
					
						
							|  |  |  | """
 | 
					
						
							|  |  |  | import sys | 
					
						
							| 
									
										
										
										
											2002-12-26 21:09:39 +00:00
										 |  |  | import struct | 
					
						
							|  |  |  | import Carbon.Res | 
					
						
							|  |  |  | import Carbon.File | 
					
						
							| 
									
										
										
										
											2003-01-21 22:58:39 +00:00
										 |  |  | import warnings | 
					
						
							| 
									
										
										
										
											2002-12-17 23:28:24 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-02-27 23:17:59 +00:00
										 |  |  | warnings.warn("macfs is deprecated, use Carbon.File, Carbon.Folder or EasyDialogs", | 
					
						
							|  |  |  |               DeprecationWarning, stacklevel=2) | 
					
						
							|  |  |  |                | 
					
						
							| 
									
										
										
										
											2002-12-17 23:28:24 +00:00
										 |  |  | # First step: ensure we also emulate the MACFS module, which contained | 
					
						
							|  |  |  | # all the constants | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | sys.modules['MACFS'] = sys.modules[__name__] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Import all those constants | 
					
						
							| 
									
										
										
										
											2002-12-19 23:26:07 +00:00
										 |  |  | from Carbon.Files import * | 
					
						
							|  |  |  | from Carbon.Folders import * | 
					
						
							| 
									
										
										
										
											2002-12-17 23:28:24 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | # For some obscure historical reason these are here too: | 
					
						
							|  |  |  | READ = 1 | 
					
						
							|  |  |  | WRITE = 2 | 
					
						
							|  |  |  | smAllScripts = -3 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-01-15 22:36:16 +00:00
										 |  |  | # | 
					
						
							|  |  |  | # Find the epoch conversion for file dates in a way that works on OS9 and OSX | 
					
						
							|  |  |  | import time | 
					
						
							|  |  |  | if time.gmtime(0)[0] == 1970: | 
					
						
							| 
									
										
										
										
											2003-04-09 13:25:43 +00:00
										 |  |  |     _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) | 
					
						
							| 
									
										
										
										
											2003-01-15 22:36:16 +00:00
										 |  |  | else: | 
					
						
							| 
									
										
										
										
											2003-04-09 13:25:43 +00:00
										 |  |  |     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) | 
					
						
							| 
									
										
										
										
											2003-01-15 22:36:16 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-12-19 23:26:07 +00:00
										 |  |  | # The old name of the error object: | 
					
						
							|  |  |  | error = Carbon.File.Error | 
					
						
							| 
									
										
										
										
											2002-12-17 23:28:24 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-12-26 21:09:39 +00:00
										 |  |  | # | 
					
						
							|  |  |  | # The various objects macfs used to export. We override them here, because some | 
					
						
							|  |  |  | # of the method names are subtly different. | 
					
						
							|  |  |  | # | 
					
						
							| 
									
										
										
										
											2002-12-17 23:28:24 +00:00
										 |  |  | class FSSpec(Carbon.File.FSSpec): | 
					
						
							| 
									
										
										
										
											2003-04-09 13:25:43 +00:00
										 |  |  |     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) | 
					
						
							|  |  |  |      | 
					
						
							| 
									
										
										
										
											2002-12-17 23:28:24 +00:00
										 |  |  | class FSRef(Carbon.File.FSRef): | 
					
						
							| 
									
										
										
										
											2003-04-09 13:25:43 +00:00
										 |  |  |     def as_fsspec(self): | 
					
						
							|  |  |  |         return FSSpec(self) | 
					
						
							|  |  |  |      | 
					
						
							| 
									
										
										
										
											2002-12-17 23:28:24 +00:00
										 |  |  | class Alias(Carbon.File.Alias): | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-04-09 13:25:43 +00:00
										 |  |  |     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 | 
					
						
							|  |  |  |          | 
					
						
							| 
									
										
										
										
											2002-12-19 23:26:07 +00:00
										 |  |  | from Carbon.File import FInfo | 
					
						
							| 
									
										
										
										
											2002-12-26 21:09:39 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | # Backward-compatible type names: | 
					
						
							| 
									
										
										
										
											2002-12-17 23:28:24 +00:00
										 |  |  | FSSpecType = FSSpec | 
					
						
							|  |  |  | FSRefType = FSRef | 
					
						
							|  |  |  | AliasType = Alias | 
					
						
							|  |  |  | FInfoType = FInfo | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-12-26 21:09:39 +00:00
										 |  |  | # Global functions: | 
					
						
							| 
									
										
										
										
											2002-12-17 23:28:24 +00:00
										 |  |  | def ResolveAliasFile(fss, chain=1): | 
					
						
							| 
									
										
										
										
											2003-04-09 13:25:43 +00:00
										 |  |  |     fss, isdir, isalias = Carbon.File.ResolveAliasFile(fss, chain) | 
					
						
							|  |  |  |     return FSSpec(fss), isdir, isalias | 
					
						
							|  |  |  |      | 
					
						
							| 
									
										
										
										
											2002-12-17 23:28:24 +00:00
										 |  |  | def RawFSSpec(data): | 
					
						
							| 
									
										
										
										
											2003-04-09 13:25:43 +00:00
										 |  |  |     return FSSpec(rawdata=data) | 
					
						
							|  |  |  |      | 
					
						
							| 
									
										
										
										
											2002-12-17 23:28:24 +00:00
										 |  |  | def RawAlias(data): | 
					
						
							| 
									
										
										
										
											2003-04-09 13:25:43 +00:00
										 |  |  |     return Alias(rawdata=data) | 
					
						
							|  |  |  |      | 
					
						
							| 
									
										
										
										
											2002-12-17 23:28:24 +00:00
										 |  |  | def FindApplication(*args): | 
					
						
							| 
									
										
										
										
											2003-04-09 13:25:43 +00:00
										 |  |  |     raise NotImplementedError, "FindApplication no longer implemented" | 
					
						
							|  |  |  |      | 
					
						
							| 
									
										
										
										
											2002-12-17 23:28:24 +00:00
										 |  |  | def NewAliasMinimalFromFullPath(path): | 
					
						
							| 
									
										
										
										
											2003-04-09 13:25:43 +00:00
										 |  |  |     return Alias(Carbon.File.NewAliasMinimalFromFullPath(path, '', '')) | 
					
						
							|  |  |  |      | 
					
						
							| 
									
										
										
										
											2002-12-26 21:09:39 +00:00
										 |  |  | # Another global function: | 
					
						
							|  |  |  | from Carbon.Folder import FindFolder | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | # Finally the old Standard File routine emulators. | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | _curfolder = None | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def StandardGetFile(*typelist): | 
					
						
							| 
									
										
										
										
											2003-04-09 13:25:43 +00:00
										 |  |  |     """Ask for an input file, optionally specifying 4-char file types that are
 | 
					
						
							|  |  |  |     allowable"""
 | 
					
						
							|  |  |  |     return PromptGetFile('', *typelist) | 
					
						
							|  |  |  |      | 
					
						
							| 
									
										
										
										
											2002-12-26 21:09:39 +00:00
										 |  |  | def PromptGetFile(prompt, *typelist): | 
					
						
							| 
									
										
										
										
											2003-04-09 13:25:43 +00:00
										 |  |  |     """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", | 
					
						
							| 
									
										
										
										
											2003-01-21 22:58:39 +00:00
										 |  |  |               DeprecationWarning, stacklevel=2) | 
					
						
							| 
									
										
										
										
											2003-04-09 13:25:43 +00:00
										 |  |  |     if not typelist: | 
					
						
							|  |  |  |         typelist = None | 
					
						
							|  |  |  |     fss = EasyDialogs.AskFileForOpen(message=prompt, wanted=FSSpec,  | 
					
						
							|  |  |  |         typeList=typelist, defaultLocation=_handleSetFolder()) | 
					
						
							|  |  |  |     return fss, not fss is None | 
					
						
							| 
									
										
										
										
											2002-12-26 21:09:39 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | def StandardPutFile(prompt, default=None): | 
					
						
							| 
									
										
										
										
											2003-04-09 13:25:43 +00:00
										 |  |  |     """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", | 
					
						
							| 
									
										
										
										
											2003-01-21 22:58:39 +00:00
										 |  |  |               DeprecationWarning, stacklevel=2) | 
					
						
							| 
									
										
										
										
											2003-04-09 13:25:43 +00:00
										 |  |  |     fss = EasyDialogs.AskFileForSave(wanted=FSSpec, message=prompt,  | 
					
						
							|  |  |  |     savedFileName=default, defaultLocation=_handleSetFolder()) | 
					
						
							|  |  |  |     return fss, not fss is None | 
					
						
							|  |  |  |      | 
					
						
							| 
									
										
										
										
											2002-12-26 21:09:39 +00:00
										 |  |  | def SetFolder(folder): | 
					
						
							| 
									
										
										
										
											2003-04-09 13:25:43 +00:00
										 |  |  |     global _curfolder | 
					
						
							|  |  |  |     warnings.warn("macfs.StandardGetFile and friends are deprecated, use EasyDialogs.AskFileForOpen", | 
					
						
							| 
									
										
										
										
											2003-01-21 22:58:39 +00:00
										 |  |  |               DeprecationWarning, stacklevel=2) | 
					
						
							| 
									
										
										
										
											2003-04-09 13:25:43 +00:00
										 |  |  |     if _curfolder: | 
					
						
							|  |  |  |         rv = FSSpec(_curfolder) | 
					
						
							|  |  |  |     else: | 
					
						
							|  |  |  |         rv = None | 
					
						
							|  |  |  |     _curfolder = folder | 
					
						
							|  |  |  |     return rv | 
					
						
							|  |  |  |      | 
					
						
							| 
									
										
										
										
											2003-01-21 15:31:16 +00:00
										 |  |  | def _handleSetFolder(): | 
					
						
							| 
									
										
										
										
											2003-04-09 13:25:43 +00:00
										 |  |  |     global _curfolder | 
					
						
							|  |  |  |     rv = _curfolder | 
					
						
							|  |  |  |     _curfolder = None | 
					
						
							|  |  |  |     return rv | 
					
						
							|  |  |  |      | 
					
						
							| 
									
										
										
										
											2002-12-26 21:09:39 +00:00
										 |  |  | def GetDirectory(prompt=None): | 
					
						
							| 
									
										
										
										
											2003-04-09 13:25:43 +00:00
										 |  |  |     """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", | 
					
						
							| 
									
										
										
										
											2003-01-21 22:58:39 +00:00
										 |  |  |               DeprecationWarning, stacklevel=2) | 
					
						
							| 
									
										
										
										
											2003-04-09 13:25:43 +00:00
										 |  |  |     fss = EasyDialogs.AskFolder(message=prompt, wanted=FSSpec,  | 
					
						
							|  |  |  |         defaultLocation=_handleSetFolder()) | 
					
						
							|  |  |  |     return fss, not fss is None |