Skip to content

Commit

Permalink
Integrated macfsn into macfs, and made the Standard File calls return…
Browse files Browse the repository at this point in the history
… the

correct FSSpec implementations.
  • Loading branch information
jackjansen committed Dec 26, 2002
1 parent 315e9be commit 6dd561b
Show file tree
Hide file tree
Showing 2 changed files with 140 additions and 169 deletions.
147 changes: 140 additions & 7 deletions Mac/Lib/macfs.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -11,19 +15,19 @@
# 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)
Expand Down Expand Up @@ -72,12 +76,14 @@ def Resolve(self, src=None):
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
Expand All @@ -94,5 +100,132 @@ def FindApplication(*args):
def NewAliasMinimalFromFullPath(path):
return Alias(Carbon.File.NewAliasMinimalFromFullPath(path, '', ''))

# Finally, install nav services
import macfsn
# 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

162 changes: 0 additions & 162 deletions Mac/Lib/macfsn.py

This file was deleted.

0 comments on commit 6dd561b

Please sign in to comment.