summaryrefslogtreecommitdiffstats
path: root/Lib/plat-mac
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/plat-mac')
-rw-r--r--Lib/plat-mac/Audio_mac.py202
-rw-r--r--Lib/plat-mac/Carbon/ControlAccessor.py82
-rw-r--r--Lib/plat-mac/Carbon/Res.py4
-rw-r--r--Lib/plat-mac/PixMapWrapper.py362
-rw-r--r--Lib/plat-mac/aepack.py532
-rw-r--r--Lib/plat-mac/aetools.py534
-rw-r--r--Lib/plat-mac/aetypes.py890
-rw-r--r--Lib/plat-mac/applesingle.py142
-rw-r--r--Lib/plat-mac/appletrawmain.py60
-rwxr-xr-xLib/plat-mac/appletrunner.py12
-rw-r--r--Lib/plat-mac/bgenlocations.py34
-rw-r--r--Lib/plat-mac/buildtools.py704
-rwxr-xr-xLib/plat-mac/bundlebuilder.py1236
-rw-r--r--Lib/plat-mac/cfmfile.py314
-rw-r--r--Lib/plat-mac/findertools.py1406
-rw-r--r--Lib/plat-mac/gensuitemodule.py2148
-rw-r--r--Lib/plat-mac/ic.py424
-rw-r--r--Lib/plat-mac/macerrors.py3704
-rw-r--r--Lib/plat-mac/macfs.py242
-rw-r--r--Lib/plat-mac/macresource.py258
-rw-r--r--Lib/plat-mac/pimp.py1466
-rw-r--r--Lib/plat-mac/plistlib.py648
-rw-r--r--Lib/plat-mac/videoreader.py522
23 files changed, 7970 insertions, 7956 deletions
diff --git a/Lib/plat-mac/Audio_mac.py b/Lib/plat-mac/Audio_mac.py
index bf99787..5350e55 100644
--- a/Lib/plat-mac/Audio_mac.py
+++ b/Lib/plat-mac/Audio_mac.py
@@ -3,119 +3,119 @@ error='Audio_mac.error'
class Play_Audio_mac:
- def __init__(self, qsize=QSIZE):
- self._chan = None
- self._qsize = qsize
- self._outrate = 22254
- self._sampwidth = 1
- self._nchannels = 1
- self._gc = []
- self._usercallback = None
+ def __init__(self, qsize=QSIZE):
+ self._chan = None
+ self._qsize = qsize
+ self._outrate = 22254
+ self._sampwidth = 1
+ self._nchannels = 1
+ self._gc = []
+ self._usercallback = None
- def __del__(self):
- self.stop()
- self._usercallback = None
+ def __del__(self):
+ self.stop()
+ self._usercallback = None
- def wait(self):
- import time
- while self.getfilled():
- time.sleep(0.1)
- self._chan = None
- self._gc = []
+ def wait(self):
+ import time
+ while self.getfilled():
+ time.sleep(0.1)
+ self._chan = None
+ self._gc = []
- def stop(self, quietNow = 1):
- ##chan = self._chan
- self._chan = None
- ##chan.SndDisposeChannel(1)
- self._gc = []
+ def stop(self, quietNow = 1):
+ ##chan = self._chan
+ self._chan = None
+ ##chan.SndDisposeChannel(1)
+ self._gc = []
- def setoutrate(self, outrate):
- self._outrate = outrate
+ def setoutrate(self, outrate):
+ self._outrate = outrate
- def setsampwidth(self, sampwidth):
- self._sampwidth = sampwidth
+ def setsampwidth(self, sampwidth):
+ self._sampwidth = sampwidth
- def setnchannels(self, nchannels):
- self._nchannels = nchannels
+ def setnchannels(self, nchannels):
+ self._nchannels = nchannels
- def writeframes(self, data):
- import time
- from Carbon.Sound import bufferCmd, callBackCmd, extSH
- import struct
- import MacOS
- if not self._chan:
- from Carbon import Snd
- self._chan = Snd.SndNewChannel(5, 0, self._callback)
- nframes = len(data) / self._nchannels / self._sampwidth
- if len(data) != nframes * self._nchannels * self._sampwidth:
- raise error, 'data is not a whole number of frames'
- while self._gc and \
- self.getfilled() + nframes > \
- self._qsize / self._nchannels / self._sampwidth:
- time.sleep(0.1)
- if self._sampwidth == 1:
- import audioop
- data = audioop.add(data, '\x80'*len(data), 1)
- h1 = struct.pack('llHhllbbl',
- id(data)+MacOS.string_id_to_buffer,
- self._nchannels,
- self._outrate, 0,
- 0,
- 0,
- extSH,
- 60,
- nframes)
- h2 = 22*'\0'
- h3 = struct.pack('hhlll',
- self._sampwidth*8,
- 0,
- 0,
- 0,
- 0)
- header = h1+h2+h3
- self._gc.append((header, data))
- self._chan.SndDoCommand((bufferCmd, 0, header), 0)
- self._chan.SndDoCommand((callBackCmd, 0, 0), 0)
+ def writeframes(self, data):
+ import time
+ from Carbon.Sound import bufferCmd, callBackCmd, extSH
+ import struct
+ import MacOS
+ if not self._chan:
+ from Carbon import Snd
+ self._chan = Snd.SndNewChannel(5, 0, self._callback)
+ nframes = len(data) / self._nchannels / self._sampwidth
+ if len(data) != nframes * self._nchannels * self._sampwidth:
+ raise error, 'data is not a whole number of frames'
+ while self._gc and \
+ self.getfilled() + nframes > \
+ self._qsize / self._nchannels / self._sampwidth:
+ time.sleep(0.1)
+ if self._sampwidth == 1:
+ import audioop
+ data = audioop.add(data, '\x80'*len(data), 1)
+ h1 = struct.pack('llHhllbbl',
+ id(data)+MacOS.string_id_to_buffer,
+ self._nchannels,
+ self._outrate, 0,
+ 0,
+ 0,
+ extSH,
+ 60,
+ nframes)
+ h2 = 22*'\0'
+ h3 = struct.pack('hhlll',
+ self._sampwidth*8,
+ 0,
+ 0,
+ 0,
+ 0)
+ header = h1+h2+h3
+ self._gc.append((header, data))
+ self._chan.SndDoCommand((bufferCmd, 0, header), 0)
+ self._chan.SndDoCommand((callBackCmd, 0, 0), 0)
- def _callback(self, *args):
- del self._gc[0]
- if self._usercallback:
- self._usercallback()
-
- def setcallback(self, callback):
- self._usercallback = callback
+ def _callback(self, *args):
+ del self._gc[0]
+ if self._usercallback:
+ self._usercallback()
+
+ def setcallback(self, callback):
+ self._usercallback = callback
- def getfilled(self):
- filled = 0
- for header, data in self._gc:
- filled = filled + len(data)
- return filled / self._nchannels / self._sampwidth
+ def getfilled(self):
+ filled = 0
+ for header, data in self._gc:
+ filled = filled + len(data)
+ return filled / self._nchannels / self._sampwidth
- def getfillable(self):
- return (self._qsize / self._nchannels / self._sampwidth) - self.getfilled()
+ def getfillable(self):
+ return (self._qsize / self._nchannels / self._sampwidth) - self.getfilled()
- def ulaw2lin(self, data):
- import audioop
- return audioop.ulaw2lin(data, 2)
+ def ulaw2lin(self, data):
+ import audioop
+ return audioop.ulaw2lin(data, 2)
def test():
- import aifc
- import EasyDialogs
- fn = EasyDialogs.AskFileForOpen(message="Select an AIFF soundfile", typeList=("AIFF",))
- if not fn: return
- af = aifc.open(fn, 'r')
- print af.getparams()
- p = Play_Audio_mac()
- p.setoutrate(af.getframerate())
- p.setsampwidth(af.getsampwidth())
- p.setnchannels(af.getnchannels())
- BUFSIZ = 10000
- while 1:
- data = af.readframes(BUFSIZ)
- if not data: break
- p.writeframes(data)
- print 'wrote', len(data), 'space', p.getfillable()
- p.wait()
+ import aifc
+ import EasyDialogs
+ fn = EasyDialogs.AskFileForOpen(message="Select an AIFF soundfile", typeList=("AIFF",))
+ if not fn: return
+ af = aifc.open(fn, 'r')
+ print af.getparams()
+ p = Play_Audio_mac()
+ p.setoutrate(af.getframerate())
+ p.setsampwidth(af.getsampwidth())
+ p.setnchannels(af.getnchannels())
+ BUFSIZ = 10000
+ while 1:
+ data = af.readframes(BUFSIZ)
+ if not data: break
+ p.writeframes(data)
+ print 'wrote', len(data), 'space', p.getfillable()
+ p.wait()
if __name__ == '__main__':
- test()
+ test()
diff --git a/Lib/plat-mac/Carbon/ControlAccessor.py b/Lib/plat-mac/Carbon/ControlAccessor.py
index 20cf414..791544e 100644
--- a/Lib/plat-mac/Carbon/ControlAccessor.py
+++ b/Lib/plat-mac/Carbon/ControlAccessor.py
@@ -5,53 +5,53 @@ import struct
# These needn't go through this module, but are here for completeness
def SetControlData_Handle(control, part, selector, data):
- control.SetControlData_Handle(part, selector, data)
-
+ control.SetControlData_Handle(part, selector, data)
+
def GetControlData_Handle(control, part, selector):
- return control.GetControlData_Handle(part, selector)
-
+ return control.GetControlData_Handle(part, selector)
+
_accessdict = {
- kControlPopupButtonMenuHandleTag: (SetControlData_Handle, GetControlData_Handle),
+ kControlPopupButtonMenuHandleTag: (SetControlData_Handle, GetControlData_Handle),
}
_codingdict = {
- kControlPushButtonDefaultTag : ("b", None, None),
-
- kControlEditTextTextTag: (None, None, None),
- kControlEditTextPasswordTag: (None, None, None),
-
- kControlPopupButtonMenuIDTag: ("h", None, None),
-
- kControlListBoxDoubleClickTag: ("b", None, None),
+ kControlPushButtonDefaultTag : ("b", None, None),
+
+ kControlEditTextTextTag: (None, None, None),
+ kControlEditTextPasswordTag: (None, None, None),
+
+ kControlPopupButtonMenuIDTag: ("h", None, None),
+
+ kControlListBoxDoubleClickTag: ("b", None, None),
}
def SetControlData(control, part, selector, data):
- if _accessdict.has_key(selector):
- setfunc, getfunc = _accessdict[selector]
- setfunc(control, part, selector, data)
- return
- if not _codingdict.has_key(selector):
- raise KeyError, ('Unknown control selector', selector)
- structfmt, coder, decoder = _codingdict[selector]
- if coder:
- data = coder(data)
- if structfmt:
- data = struct.pack(structfmt, data)
- control.SetControlData(part, selector, data)
-
+ if _accessdict.has_key(selector):
+ setfunc, getfunc = _accessdict[selector]
+ setfunc(control, part, selector, data)
+ return
+ if not _codingdict.has_key(selector):
+ raise KeyError, ('Unknown control selector', selector)
+ structfmt, coder, decoder = _codingdict[selector]
+ if coder:
+ data = coder(data)
+ if structfmt:
+ data = struct.pack(structfmt, data)
+ control.SetControlData(part, selector, data)
+
def GetControlData(control, part, selector):
- if _accessdict.has_key(selector):
- setfunc, getfunc = _accessdict[selector]
- return getfunc(control, part, selector, data)
- if not _codingdict.has_key(selector):
- raise KeyError, ('Unknown control selector', selector)
- structfmt, coder, decoder = _codingdict[selector]
- data = control.GetControlData(part, selector)
- if structfmt:
- data = struct.unpack(structfmt, data)
- if decoder:
- data = decoder(data)
- if type(data) == type(()) and len(data) == 1:
- data = data[0]
- return data
-
+ if _accessdict.has_key(selector):
+ setfunc, getfunc = _accessdict[selector]
+ return getfunc(control, part, selector, data)
+ if not _codingdict.has_key(selector):
+ raise KeyError, ('Unknown control selector', selector)
+ structfmt, coder, decoder = _codingdict[selector]
+ data = control.GetControlData(part, selector)
+ if structfmt:
+ data = struct.unpack(structfmt, data)
+ if decoder:
+ data = decoder(data)
+ if type(data) == type(()) and len(data) == 1:
+ data = data[0]
+ return data
+
diff --git a/Lib/plat-mac/Carbon/Res.py b/Lib/plat-mac/Carbon/Res.py
index 8465ab8..8f45d09 100644
--- a/Lib/plat-mac/Carbon/Res.py
+++ b/Lib/plat-mac/Carbon/Res.py
@@ -1,4 +1,4 @@
try:
- from OverrideFrom23._Res import *
+ from OverrideFrom23._Res import *
except ImportError:
- from _Res import *
+ from _Res import *
diff --git a/Lib/plat-mac/PixMapWrapper.py b/Lib/plat-mac/PixMapWrapper.py
index 01973e8..a2d13fe 100644
--- a/Lib/plat-mac/PixMapWrapper.py
+++ b/Lib/plat-mac/PixMapWrapper.py
@@ -14,202 +14,202 @@ import imgformat
# PixMap data structure element format (as used with struct)
_pmElemFormat = {
- 'baseAddr':'l', # address of pixel data
- 'rowBytes':'H', # bytes per row, plus 0x8000
- 'bounds':'hhhh', # coordinates imposed over pixel data
- 'top':'h',
- 'left':'h',
- 'bottom':'h',
- 'right':'h',
- 'pmVersion':'h', # flags for Color QuickDraw
- 'packType':'h', # format of compression algorithm
- 'packSize':'l', # size after compression
- 'hRes':'l', # horizontal pixels per inch
- 'vRes':'l', # vertical pixels per inch
- 'pixelType':'h', # pixel format
- 'pixelSize':'h', # bits per pixel
- 'cmpCount':'h', # color components per pixel
- 'cmpSize':'h', # bits per component
- 'planeBytes':'l', # offset in bytes to next plane
- 'pmTable':'l', # handle to color table
- 'pmReserved':'l' # reserved for future use
+ 'baseAddr':'l', # address of pixel data
+ 'rowBytes':'H', # bytes per row, plus 0x8000
+ 'bounds':'hhhh', # coordinates imposed over pixel data
+ 'top':'h',
+ 'left':'h',
+ 'bottom':'h',
+ 'right':'h',
+ 'pmVersion':'h', # flags for Color QuickDraw
+ 'packType':'h', # format of compression algorithm
+ 'packSize':'l', # size after compression
+ 'hRes':'l', # horizontal pixels per inch
+ 'vRes':'l', # vertical pixels per inch
+ 'pixelType':'h', # pixel format
+ 'pixelSize':'h', # bits per pixel
+ 'cmpCount':'h', # color components per pixel
+ 'cmpSize':'h', # bits per component
+ 'planeBytes':'l', # offset in bytes to next plane
+ 'pmTable':'l', # handle to color table
+ 'pmReserved':'l' # reserved for future use
}
# PixMap data structure element offset
_pmElemOffset = {
- 'baseAddr':0,
- 'rowBytes':4,
- 'bounds':6,
- 'top':6,
- 'left':8,
- 'bottom':10,
- 'right':12,
- 'pmVersion':14,
- 'packType':16,
- 'packSize':18,
- 'hRes':22,
- 'vRes':26,
- 'pixelType':30,
- 'pixelSize':32,
- 'cmpCount':34,
- 'cmpSize':36,
- 'planeBytes':38,
- 'pmTable':42,
- 'pmReserved':46
+ 'baseAddr':0,
+ 'rowBytes':4,
+ 'bounds':6,
+ 'top':6,
+ 'left':8,
+ 'bottom':10,
+ 'right':12,
+ 'pmVersion':14,
+ 'packType':16,
+ 'packSize':18,
+ 'hRes':22,
+ 'vRes':26,
+ 'pixelType':30,
+ 'pixelSize':32,
+ 'cmpCount':34,
+ 'cmpSize':36,
+ 'planeBytes':38,
+ 'pmTable':42,
+ 'pmReserved':46
}
class PixMapWrapper:
- """PixMapWrapper -- wraps the QD PixMap object in a Python class,
- with methods to easily get/set various pixmap fields. Note: Use the
- PixMap() method when passing to QD calls."""
+ """PixMapWrapper -- wraps the QD PixMap object in a Python class,
+ with methods to easily get/set various pixmap fields. Note: Use the
+ PixMap() method when passing to QD calls."""
- def __init__(self):
- self.__dict__['data'] = ''
- self._header = struct.pack("lhhhhhhhlllhhhhlll",
- id(self.data)+MacOS.string_id_to_buffer,
- 0, # rowBytes
- 0, 0, 0, 0, # bounds
- 0, # pmVersion
- 0, 0, # packType, packSize
- 72<<16, 72<<16, # hRes, vRes
- QuickDraw.RGBDirect, # pixelType
- 16, # pixelSize
- 2, 5, # cmpCount, cmpSize,
- 0, 0, 0) # planeBytes, pmTable, pmReserved
- self.__dict__['_pm'] = Qd.RawBitMap(self._header)
-
- def _stuff(self, element, bytes):
- offset = _pmElemOffset[element]
- fmt = _pmElemFormat[element]
- self._header = self._header[:offset] \
- + struct.pack(fmt, bytes) \
- + self._header[offset + struct.calcsize(fmt):]
- self.__dict__['_pm'] = None
-
- def _unstuff(self, element):
- offset = _pmElemOffset[element]
- fmt = _pmElemFormat[element]
- return struct.unpack(fmt, self._header[offset:offset+struct.calcsize(fmt)])[0]
+ def __init__(self):
+ self.__dict__['data'] = ''
+ self._header = struct.pack("lhhhhhhhlllhhhhlll",
+ id(self.data)+MacOS.string_id_to_buffer,
+ 0, # rowBytes
+ 0, 0, 0, 0, # bounds
+ 0, # pmVersion
+ 0, 0, # packType, packSize
+ 72<<16, 72<<16, # hRes, vRes
+ QuickDraw.RGBDirect, # pixelType
+ 16, # pixelSize
+ 2, 5, # cmpCount, cmpSize,
+ 0, 0, 0) # planeBytes, pmTable, pmReserved
+ self.__dict__['_pm'] = Qd.RawBitMap(self._header)
+
+ def _stuff(self, element, bytes):
+ offset = _pmElemOffset[element]
+ fmt = _pmElemFormat[element]
+ self._header = self._header[:offset] \
+ + struct.pack(fmt, bytes) \
+ + self._header[offset + struct.calcsize(fmt):]
+ self.__dict__['_pm'] = None
+
+ def _unstuff(self, element):
+ offset = _pmElemOffset[element]
+ fmt = _pmElemFormat[element]
+ return struct.unpack(fmt, self._header[offset:offset+struct.calcsize(fmt)])[0]
- def __setattr__(self, attr, val):
- if attr == 'baseAddr':
- raise 'UseErr', "don't assign to .baseAddr -- assign to .data instead"
- elif attr == 'data':
- self.__dict__['data'] = val
- self._stuff('baseAddr', id(self.data) + MacOS.string_id_to_buffer)
- elif attr == 'rowBytes':
- # high bit is always set for some odd reason
- self._stuff('rowBytes', val | 0x8000)
- elif attr == 'bounds':
- # assume val is in official Left, Top, Right, Bottom order!
- self._stuff('left',val[0])
- self._stuff('top',val[1])
- self._stuff('right',val[2])
- self._stuff('bottom',val[3])
- elif attr == 'hRes' or attr == 'vRes':
- # 16.16 fixed format, so just shift 16 bits
- self._stuff(attr, int(val) << 16)
- elif attr in _pmElemFormat.keys():
- # any other pm attribute -- just stuff
- self._stuff(attr, val)
- else:
- self.__dict__[attr] = val
+ def __setattr__(self, attr, val):
+ if attr == 'baseAddr':
+ raise 'UseErr', "don't assign to .baseAddr -- assign to .data instead"
+ elif attr == 'data':
+ self.__dict__['data'] = val
+ self._stuff('baseAddr', id(self.data) + MacOS.string_id_to_buffer)
+ elif attr == 'rowBytes':
+ # high bit is always set for some odd reason
+ self._stuff('rowBytes', val | 0x8000)
+ elif attr == 'bounds':
+ # assume val is in official Left, Top, Right, Bottom order!
+ self._stuff('left',val[0])
+ self._stuff('top',val[1])
+ self._stuff('right',val[2])
+ self._stuff('bottom',val[3])
+ elif attr == 'hRes' or attr == 'vRes':
+ # 16.16 fixed format, so just shift 16 bits
+ self._stuff(attr, int(val) << 16)
+ elif attr in _pmElemFormat.keys():
+ # any other pm attribute -- just stuff
+ self._stuff(attr, val)
+ else:
+ self.__dict__[attr] = val
- def __getattr__(self, attr):
- if attr == 'rowBytes':
- # high bit is always set for some odd reason
- return self._unstuff('rowBytes') & 0x7FFF
- elif attr == 'bounds':
- # return bounds in official Left, Top, Right, Bottom order!
- return ( \
- self._unstuff('left'),
- self._unstuff('top'),
- self._unstuff('right'),
- self._unstuff('bottom') )
- elif attr == 'hRes' or attr == 'vRes':
- # 16.16 fixed format, so just shift 16 bits
- return self._unstuff(attr) >> 16
- elif attr in _pmElemFormat.keys():
- # any other pm attribute -- just unstuff
- return self._unstuff(attr)
- else:
- return self.__dict__[attr]
+ def __getattr__(self, attr):
+ if attr == 'rowBytes':
+ # high bit is always set for some odd reason
+ return self._unstuff('rowBytes') & 0x7FFF
+ elif attr == 'bounds':
+ # return bounds in official Left, Top, Right, Bottom order!
+ return ( \
+ self._unstuff('left'),
+ self._unstuff('top'),
+ self._unstuff('right'),
+ self._unstuff('bottom') )
+ elif attr == 'hRes' or attr == 'vRes':
+ # 16.16 fixed format, so just shift 16 bits
+ return self._unstuff(attr) >> 16
+ elif attr in _pmElemFormat.keys():
+ # any other pm attribute -- just unstuff
+ return self._unstuff(attr)
+ else:
+ return self.__dict__[attr]
-
- def PixMap(self):
- "Return a QuickDraw PixMap corresponding to this data."
- if not self.__dict__['_pm']:
- self.__dict__['_pm'] = Qd.RawBitMap(self._header)
- return self.__dict__['_pm']
+
+ def PixMap(self):
+ "Return a QuickDraw PixMap corresponding to this data."
+ if not self.__dict__['_pm']:
+ self.__dict__['_pm'] = Qd.RawBitMap(self._header)
+ return self.__dict__['_pm']
- def blit(self, x1=0,y1=0,x2=None,y2=None, port=None):
- """Draw this pixmap into the given (default current) grafport."""
- src = self.bounds
- dest = [x1,y1,x2,y2]
- if x2 == None:
- dest[2] = x1 + src[2]-src[0]
- if y2 == None:
- dest[3] = y1 + src[3]-src[1]
- if not port: port = Qd.GetPort()
- Qd.CopyBits(self.PixMap(), port.GetPortBitMapForCopyBits(), src, tuple(dest),
- QuickDraw.srcCopy, None)
-
- def fromstring(self,s,width,height,format=imgformat.macrgb):
- """Stuff this pixmap with raw pixel data from a string.
- Supply width, height, and one of the imgformat specifiers."""
- # we only support 16- and 32-bit mac rgb...
- # so convert if necessary
- if format != imgformat.macrgb and format != imgformat.macrgb16:
- # (LATER!)
- raise "NotImplementedError", "conversion to macrgb or macrgb16"
- self.data = s
- self.bounds = (0,0,width,height)
- self.cmpCount = 3
- self.pixelType = QuickDraw.RGBDirect
- if format == imgformat.macrgb:
- self.pixelSize = 32
- self.cmpSize = 8
- else:
- self.pixelSize = 16
- self.cmpSize = 5
- self.rowBytes = width*self.pixelSize/8
+ def blit(self, x1=0,y1=0,x2=None,y2=None, port=None):
+ """Draw this pixmap into the given (default current) grafport."""
+ src = self.bounds
+ dest = [x1,y1,x2,y2]
+ if x2 == None:
+ dest[2] = x1 + src[2]-src[0]
+ if y2 == None:
+ dest[3] = y1 + src[3]-src[1]
+ if not port: port = Qd.GetPort()
+ Qd.CopyBits(self.PixMap(), port.GetPortBitMapForCopyBits(), src, tuple(dest),
+ QuickDraw.srcCopy, None)
+
+ def fromstring(self,s,width,height,format=imgformat.macrgb):
+ """Stuff this pixmap with raw pixel data from a string.
+ Supply width, height, and one of the imgformat specifiers."""
+ # we only support 16- and 32-bit mac rgb...
+ # so convert if necessary
+ if format != imgformat.macrgb and format != imgformat.macrgb16:
+ # (LATER!)
+ raise "NotImplementedError", "conversion to macrgb or macrgb16"
+ self.data = s
+ self.bounds = (0,0,width,height)
+ self.cmpCount = 3
+ self.pixelType = QuickDraw.RGBDirect
+ if format == imgformat.macrgb:
+ self.pixelSize = 32
+ self.cmpSize = 8
+ else:
+ self.pixelSize = 16
+ self.cmpSize = 5
+ self.rowBytes = width*self.pixelSize/8
- def tostring(self, format=imgformat.macrgb):
- """Return raw data as a string in the specified format."""
- # is the native format requested? if so, just return data
- if (format == imgformat.macrgb and self.pixelSize == 32) or \
- (format == imgformat.macrgb16 and self.pixelsize == 16):
- return self.data
- # otherwise, convert to the requested format
- # (LATER!)
- raise "NotImplementedError", "data format conversion"
+ def tostring(self, format=imgformat.macrgb):
+ """Return raw data as a string in the specified format."""
+ # is the native format requested? if so, just return data
+ if (format == imgformat.macrgb and self.pixelSize == 32) or \
+ (format == imgformat.macrgb16 and self.pixelsize == 16):
+ return self.data
+ # otherwise, convert to the requested format
+ # (LATER!)
+ raise "NotImplementedError", "data format conversion"
- def fromImage(self,im):
- """Initialize this PixMap from a PIL Image object."""
- # We need data in ARGB format; PIL can't currently do that,
- # but it can do RGBA, which we can use by inserting one null
- # up frontpm =
- if im.mode != 'RGBA': im = im.convert('RGBA')
- data = chr(0) + im.tostring()
- self.fromstring(data, im.size[0], im.size[1])
+ def fromImage(self,im):
+ """Initialize this PixMap from a PIL Image object."""
+ # We need data in ARGB format; PIL can't currently do that,
+ # but it can do RGBA, which we can use by inserting one null
+ # up frontpm =
+ if im.mode != 'RGBA': im = im.convert('RGBA')
+ data = chr(0) + im.tostring()
+ self.fromstring(data, im.size[0], im.size[1])
- def toImage(self):
- """Return the contents of this PixMap as a PIL Image object."""
- import Image
- # our tostring() method returns data in ARGB format,
- # whereas Image uses RGBA; a bit of slicing fixes this...
- data = self.tostring()[1:] + chr(0)
- bounds = self.bounds
- return Image.fromstring('RGBA',(bounds[2]-bounds[0],bounds[3]-bounds[1]),data)
+ def toImage(self):
+ """Return the contents of this PixMap as a PIL Image object."""
+ import Image
+ # our tostring() method returns data in ARGB format,
+ # whereas Image uses RGBA; a bit of slicing fixes this...
+ data = self.tostring()[1:] + chr(0)
+ bounds = self.bounds
+ return Image.fromstring('RGBA',(bounds[2]-bounds[0],bounds[3]-bounds[1]),data)
def test():
- import MacOS
- import EasyDialogs
- import Image
- path = EasyDialogs.AskFileForOpen("Image File:")
- if not path: return
- pm = PixMapWrapper()
- pm.fromImage( Image.open(path) )
- pm.blit(20,20)
- return pm
+ import MacOS
+ import EasyDialogs
+ import Image
+ path = EasyDialogs.AskFileForOpen("Image File:")
+ if not path: return
+ pm = PixMapWrapper()
+ pm.fromImage( Image.open(path) )
+ pm.blit(20,20)
+ return pm
diff --git a/Lib/plat-mac/aepack.py b/Lib/plat-mac/aepack.py
index 5dd95b8..22dfd21 100644
--- a/Lib/plat-mac/aepack.py
+++ b/Lib/plat-mac/aepack.py
@@ -44,15 +44,15 @@ import os
# we like better (and which is equivalent)
#
unpacker_coercions = {
- typeComp : typeFloat,
- typeColorTable : typeAEList,
- typeDrawingArea : typeAERecord,
- typeFixed : typeFloat,
- typeExtended : typeFloat,
- typePixelMap : typeAERecord,
- typeRotation : typeAERecord,
- typeStyledText : typeAERecord,
- typeTextStyles : typeAERecord,
+ typeComp : typeFloat,
+ typeColorTable : typeAEList,
+ typeDrawingArea : typeAERecord,
+ typeFixed : typeFloat,
+ typeExtended : typeFloat,
+ typePixelMap : typeAERecord,
+ typeRotation : typeAERecord,
+ typeStyledText : typeAERecord,
+ typeTextStyles : typeAERecord,
};
#
@@ -64,303 +64,303 @@ FSRefType = Carbon.File.FSRefType
AliasType = Carbon.File.AliasType
def packkey(ae, key, value):
- if hasattr(key, 'which'):
- keystr = key.which
- elif hasattr(key, 'want'):
- keystr = key.want
- else:
- keystr = key
- ae.AEPutParamDesc(keystr, pack(value))
+ if hasattr(key, 'which'):
+ keystr = key.which
+ elif hasattr(key, 'want'):
+ keystr = key.want
+ else:
+ keystr = key
+ ae.AEPutParamDesc(keystr, pack(value))
def pack(x, forcetype = None):
- """Pack a python object into an AE descriptor"""
-
- if forcetype:
- if type(x) is StringType:
- return AE.AECreateDesc(forcetype, x)
- else:
- return pack(x).AECoerceDesc(forcetype)
-
- if x == None:
- return AE.AECreateDesc('null', '')
-
- if isinstance(x, AEDescType):
- return x
- if isinstance(x, FSSType):
- return AE.AECreateDesc('fss ', x.data)
- if isinstance(x, FSRefType):
- return AE.AECreateDesc('fsrf', x.data)
- if isinstance(x, AliasType):
- return AE.AECreateDesc('alis', x.data)
- if isinstance(x, IntType):
- return AE.AECreateDesc('long', struct.pack('l', x))
- if isinstance(x, FloatType):
- return AE.AECreateDesc('doub', struct.pack('d', x))
- if isinstance(x, StringType):
- return AE.AECreateDesc('TEXT', x)
- if isinstance(x, UnicodeType):
- data = x.encode('utf16')
- if data[:2] == '\xfe\xff':
- data = data[2:]
- return AE.AECreateDesc('utxt', data)
- if isinstance(x, ListType):
- list = AE.AECreateList('', 0)
- for item in x:
- list.AEPutDesc(0, pack(item))
- return list
- if isinstance(x, DictionaryType):
- record = AE.AECreateList('', 1)
- for key, value in x.items():
- packkey(record, key, value)
- #record.AEPutParamDesc(key, pack(value))
- return record
- if type(x) == types.ClassType and issubclass(x, ObjectSpecifier):
- # Note: we are getting a class object here, not an instance
- return AE.AECreateDesc('type', x.want)
- if hasattr(x, '__aepack__'):
- return x.__aepack__()
- if hasattr(x, 'which'):
- return AE.AECreateDesc('TEXT', x.which)
- if hasattr(x, 'want'):
- return AE.AECreateDesc('TEXT', x.want)
- return AE.AECreateDesc('TEXT', repr(x)) # Copout
+ """Pack a python object into an AE descriptor"""
+
+ if forcetype:
+ if type(x) is StringType:
+ return AE.AECreateDesc(forcetype, x)
+ else:
+ return pack(x).AECoerceDesc(forcetype)
+
+ if x == None:
+ return AE.AECreateDesc('null', '')
+
+ if isinstance(x, AEDescType):
+ return x
+ if isinstance(x, FSSType):
+ return AE.AECreateDesc('fss ', x.data)
+ if isinstance(x, FSRefType):
+ return AE.AECreateDesc('fsrf', x.data)
+ if isinstance(x, AliasType):
+ return AE.AECreateDesc('alis', x.data)
+ if isinstance(x, IntType):
+ return AE.AECreateDesc('long', struct.pack('l', x))
+ if isinstance(x, FloatType):
+ return AE.AECreateDesc('doub', struct.pack('d', x))
+ if isinstance(x, StringType):
+ return AE.AECreateDesc('TEXT', x)
+ if isinstance(x, UnicodeType):
+ data = x.encode('utf16')
+ if data[:2] == '\xfe\xff':
+ data = data[2:]
+ return AE.AECreateDesc('utxt', data)
+ if isinstance(x, ListType):
+ list = AE.AECreateList('', 0)
+ for item in x:
+ list.AEPutDesc(0, pack(item))
+ return list
+ if isinstance(x, DictionaryType):
+ record = AE.AECreateList('', 1)
+ for key, value in x.items():
+ packkey(record, key, value)
+ #record.AEPutParamDesc(key, pack(value))
+ return record
+ if type(x) == types.ClassType and issubclass(x, ObjectSpecifier):
+ # Note: we are getting a class object here, not an instance
+ return AE.AECreateDesc('type', x.want)
+ if hasattr(x, '__aepack__'):
+ return x.__aepack__()
+ if hasattr(x, 'which'):
+ return AE.AECreateDesc('TEXT', x.which)
+ if hasattr(x, 'want'):
+ return AE.AECreateDesc('TEXT', x.want)
+ return AE.AECreateDesc('TEXT', repr(x)) # Copout
def unpack(desc, formodulename=""):
- """Unpack an AE descriptor to a python object"""
- t = desc.type
-
- if unpacker_coercions.has_key(t):
- desc = desc.AECoerceDesc(unpacker_coercions[t])
- t = desc.type # This is a guess by Jack....
-
- if t == typeAEList:
- l = []
- for i in range(desc.AECountItems()):
- keyword, item = desc.AEGetNthDesc(i+1, '****')
- l.append(unpack(item, formodulename))
- return l
- if t == typeAERecord:
- d = {}
- for i in range(desc.AECountItems()):
- keyword, item = desc.AEGetNthDesc(i+1, '****')
- d[keyword] = unpack(item, formodulename)
- return d
- if t == typeAEText:
- record = desc.AECoerceDesc('reco')
- return mkaetext(unpack(record, formodulename))
- if t == typeAlias:
- return Carbon.File.Alias(rawdata=desc.data)
- # typeAppleEvent returned as unknown
- if t == typeBoolean:
- return struct.unpack('b', desc.data)[0]
- if t == typeChar:
- return desc.data
- if t == typeUnicodeText:
- return unicode(desc.data, 'utf16')
- # typeColorTable coerced to typeAEList
- # typeComp coerced to extended
- # typeData returned as unknown
- # typeDrawingArea coerced to typeAERecord
- if t == typeEnumeration:
- return mkenum(desc.data)
- # typeEPS returned as unknown
- if t == typeFalse:
- return 0
- if t == typeFloat:
- data = desc.data
- return struct.unpack('d', data)[0]
- if t == typeFSS:
- return Carbon.File.FSSpec(rawdata=desc.data)
- if t == typeFSRef:
- return Carbon.File.FSRef(rawdata=desc.data)
- if t == typeInsertionLoc:
- record = desc.AECoerceDesc('reco')
- return mkinsertionloc(unpack(record, formodulename))
- # typeInteger equal to typeLongInteger
- if t == typeIntlText:
- script, language = struct.unpack('hh', desc.data[:4])
- return aetypes.IntlText(script, language, desc.data[4:])
- if t == typeIntlWritingCode:
- script, language = struct.unpack('hh', desc.data)
- return aetypes.IntlWritingCode(script, language)
- if t == typeKeyword:
- return mkkeyword(desc.data)
- if t == typeLongInteger:
- return struct.unpack('l', desc.data)[0]
- if t == typeLongDateTime:
- a, b = struct.unpack('lL', desc.data)
- return (long(a) << 32) + b
- if t == typeNull:
- return None
- if t == typeMagnitude:
- v = struct.unpack('l', desc.data)
- if v < 0:
- v = 0x100000000L + v
- return v
- if t == typeObjectSpecifier:
- record = desc.AECoerceDesc('reco')
- # If we have been told the name of the module we are unpacking aedescs for,
- # we can attempt to create the right type of python object from that module.
- if formodulename:
- return mkobjectfrommodule(unpack(record, formodulename), formodulename)
- return mkobject(unpack(record, formodulename))
- # typePict returned as unknown
- # typePixelMap coerced to typeAERecord
- # typePixelMapMinus returned as unknown
- # typeProcessSerialNumber returned as unknown
- if t == typeQDPoint:
- v, h = struct.unpack('hh', desc.data)
- return aetypes.QDPoint(v, h)
- if t == typeQDRectangle:
- v0, h0, v1, h1 = struct.unpack('hhhh', desc.data)
- return aetypes.QDRectangle(v0, h0, v1, h1)
- if t == typeRGBColor:
- r, g, b = struct.unpack('hhh', desc.data)
- return aetypes.RGBColor(r, g, b)
- # typeRotation coerced to typeAERecord
- # typeScrapStyles returned as unknown
- # typeSessionID returned as unknown
- if t == typeShortFloat:
- return struct.unpack('f', desc.data)[0]
- if t == typeShortInteger:
- return struct.unpack('h', desc.data)[0]
- # typeSMFloat identical to typeShortFloat
- # typeSMInt indetical to typeShortInt
- # typeStyledText coerced to typeAERecord
- if t == typeTargetID:
- return mktargetid(desc.data)
- # typeTextStyles coerced to typeAERecord
- # typeTIFF returned as unknown
- if t == typeTrue:
- return 1
- if t == typeType:
- return mktype(desc.data, formodulename)
- #
- # The following are special
- #
- if t == 'rang':
- record = desc.AECoerceDesc('reco')
- return mkrange(unpack(record, formodulename))
- if t == 'cmpd':
- record = desc.AECoerceDesc('reco')
- return mkcomparison(unpack(record, formodulename))
- if t == 'logi':
- record = desc.AECoerceDesc('reco')
- return mklogical(unpack(record, formodulename))
- return mkunknown(desc.type, desc.data)
-
+ """Unpack an AE descriptor to a python object"""
+ t = desc.type
+
+ if unpacker_coercions.has_key(t):
+ desc = desc.AECoerceDesc(unpacker_coercions[t])
+ t = desc.type # This is a guess by Jack....
+
+ if t == typeAEList:
+ l = []
+ for i in range(desc.AECountItems()):
+ keyword, item = desc.AEGetNthDesc(i+1, '****')
+ l.append(unpack(item, formodulename))
+ return l
+ if t == typeAERecord:
+ d = {}
+ for i in range(desc.AECountItems()):
+ keyword, item = desc.AEGetNthDesc(i+1, '****')
+ d[keyword] = unpack(item, formodulename)
+ return d
+ if t == typeAEText:
+ record = desc.AECoerceDesc('reco')
+ return mkaetext(unpack(record, formodulename))
+ if t == typeAlias:
+ return Carbon.File.Alias(rawdata=desc.data)
+ # typeAppleEvent returned as unknown
+ if t == typeBoolean:
+ return struct.unpack('b', desc.data)[0]
+ if t == typeChar:
+ return desc.data
+ if t == typeUnicodeText:
+ return unicode(desc.data, 'utf16')
+ # typeColorTable coerced to typeAEList
+ # typeComp coerced to extended
+ # typeData returned as unknown
+ # typeDrawingArea coerced to typeAERecord
+ if t == typeEnumeration:
+ return mkenum(desc.data)
+ # typeEPS returned as unknown
+ if t == typeFalse:
+ return 0
+ if t == typeFloat:
+ data = desc.data
+ return struct.unpack('d', data)[0]
+ if t == typeFSS:
+ return Carbon.File.FSSpec(rawdata=desc.data)
+ if t == typeFSRef:
+ return Carbon.File.FSRef(rawdata=desc.data)
+ if t == typeInsertionLoc:
+ record = desc.AECoerceDesc('reco')
+ return mkinsertionloc(unpack(record, formodulename))
+ # typeInteger equal to typeLongInteger
+ if t == typeIntlText:
+ script, language = struct.unpack('hh', desc.data[:4])
+ return aetypes.IntlText(script, language, desc.data[4:])
+ if t == typeIntlWritingCode:
+ script, language = struct.unpack('hh', desc.data)
+ return aetypes.IntlWritingCode(script, language)
+ if t == typeKeyword:
+ return mkkeyword(desc.data)
+ if t == typeLongInteger:
+ return struct.unpack('l', desc.data)[0]
+ if t == typeLongDateTime:
+ a, b = struct.unpack('lL', desc.data)
+ return (long(a) << 32) + b
+ if t == typeNull:
+ return None
+ if t == typeMagnitude:
+ v = struct.unpack('l', desc.data)
+ if v < 0:
+ v = 0x100000000L + v
+ return v
+ if t == typeObjectSpecifier:
+ record = desc.AECoerceDesc('reco')
+ # If we have been told the name of the module we are unpacking aedescs for,
+ # we can attempt to create the right type of python object from that module.
+ if formodulename:
+ return mkobjectfrommodule(unpack(record, formodulename), formodulename)
+ return mkobject(unpack(record, formodulename))
+ # typePict returned as unknown
+ # typePixelMap coerced to typeAERecord
+ # typePixelMapMinus returned as unknown
+ # typeProcessSerialNumber returned as unknown
+ if t == typeQDPoint:
+ v, h = struct.unpack('hh', desc.data)
+ return aetypes.QDPoint(v, h)
+ if t == typeQDRectangle:
+ v0, h0, v1, h1 = struct.unpack('hhhh', desc.data)
+ return aetypes.QDRectangle(v0, h0, v1, h1)
+ if t == typeRGBColor:
+ r, g, b = struct.unpack('hhh', desc.data)
+ return aetypes.RGBColor(r, g, b)
+ # typeRotation coerced to typeAERecord
+ # typeScrapStyles returned as unknown
+ # typeSessionID returned as unknown
+ if t == typeShortFloat:
+ return struct.unpack('f', desc.data)[0]
+ if t == typeShortInteger:
+ return struct.unpack('h', desc.data)[0]
+ # typeSMFloat identical to typeShortFloat
+ # typeSMInt indetical to typeShortInt
+ # typeStyledText coerced to typeAERecord
+ if t == typeTargetID:
+ return mktargetid(desc.data)
+ # typeTextStyles coerced to typeAERecord
+ # typeTIFF returned as unknown
+ if t == typeTrue:
+ return 1
+ if t == typeType:
+ return mktype(desc.data, formodulename)
+ #
+ # The following are special
+ #
+ if t == 'rang':
+ record = desc.AECoerceDesc('reco')
+ return mkrange(unpack(record, formodulename))
+ if t == 'cmpd':
+ record = desc.AECoerceDesc('reco')
+ return mkcomparison(unpack(record, formodulename))
+ if t == 'logi':
+ record = desc.AECoerceDesc('reco')
+ return mklogical(unpack(record, formodulename))
+ return mkunknown(desc.type, desc.data)
+
def coerce(data, egdata):
- """Coerce a python object to another type using the AE coercers"""
- pdata = pack(data)
- pegdata = pack(egdata)
- pdata = pdata.AECoerceDesc(pegdata.type)
- return unpack(pdata)
+ """Coerce a python object to another type using the AE coercers"""
+ pdata = pack(data)
+ pegdata = pack(egdata)
+ pdata = pdata.AECoerceDesc(pegdata.type)
+ return unpack(pdata)
#
# Helper routines for unpack
#
def mktargetid(data):
- sessionID = getlong(data[:4])
- name = mkppcportrec(data[4:4+72])
- location = mklocationnamerec(data[76:76+36])
- rcvrName = mkppcportrec(data[112:112+72])
- return sessionID, name, location, rcvrName
+ sessionID = getlong(data[:4])
+ name = mkppcportrec(data[4:4+72])
+ location = mklocationnamerec(data[76:76+36])
+ rcvrName = mkppcportrec(data[112:112+72])
+ return sessionID, name, location, rcvrName
def mkppcportrec(rec):
- namescript = getword(rec[:2])
- name = getpstr(rec[2:2+33])
- portkind = getword(rec[36:38])
- if portkind == 1:
- ctor = rec[38:42]
- type = rec[42:46]
- identity = (ctor, type)
- else:
- identity = getpstr(rec[38:38+33])
- return namescript, name, portkind, identity
+ namescript = getword(rec[:2])
+ name = getpstr(rec[2:2+33])
+ portkind = getword(rec[36:38])
+ if portkind == 1:
+ ctor = rec[38:42]
+ type = rec[42:46]
+ identity = (ctor, type)
+ else:
+ identity = getpstr(rec[38:38+33])
+ return namescript, name, portkind, identity
def mklocationnamerec(rec):
- kind = getword(rec[:2])
- stuff = rec[2:]
- if kind == 0: stuff = None
- if kind == 2: stuff = getpstr(stuff)
- return kind, stuff
+ kind = getword(rec[:2])
+ stuff = rec[2:]
+ if kind == 0: stuff = None
+ if kind == 2: stuff = getpstr(stuff)
+ return kind, stuff
def mkunknown(type, data):
- return aetypes.Unknown(type, data)
+ return aetypes.Unknown(type, data)
def getpstr(s):
- return s[1:1+ord(s[0])]
+ return s[1:1+ord(s[0])]
def getlong(s):
- return (ord(s[0])<<24) | (ord(s[1])<<16) | (ord(s[2])<<8) | ord(s[3])
+ return (ord(s[0])<<24) | (ord(s[1])<<16) | (ord(s[2])<<8) | ord(s[3])
def getword(s):
- return (ord(s[0])<<8) | (ord(s[1])<<0)
+ return (ord(s[0])<<8) | (ord(s[1])<<0)
def mkkeyword(keyword):
- return aetypes.Keyword(keyword)
+ return aetypes.Keyword(keyword)
def mkrange(dict):
- return aetypes.Range(dict['star'], dict['stop'])
+ return aetypes.Range(dict['star'], dict['stop'])
def mkcomparison(dict):
- return aetypes.Comparison(dict['obj1'], dict['relo'].enum, dict['obj2'])
+ return aetypes.Comparison(dict['obj1'], dict['relo'].enum, dict['obj2'])
def mklogical(dict):
- return aetypes.Logical(dict['logc'], dict['term'])
+ return aetypes.Logical(dict['logc'], dict['term'])
def mkstyledtext(dict):
- return aetypes.StyledText(dict['ksty'], dict['ktxt'])
-
+ return aetypes.StyledText(dict['ksty'], dict['ktxt'])
+
def mkaetext(dict):
- return aetypes.AEText(dict[keyAEScriptTag], dict[keyAEStyles], dict[keyAEText])
-
+ return aetypes.AEText(dict[keyAEScriptTag], dict[keyAEStyles], dict[keyAEText])
+
def mkinsertionloc(dict):
- return aetypes.InsertionLoc(dict[keyAEObject], dict[keyAEPosition])
+ return aetypes.InsertionLoc(dict[keyAEObject], dict[keyAEPosition])
def mkobject(dict):
- want = dict['want'].type
- form = dict['form'].enum
- seld = dict['seld']
- fr = dict['from']
- if form in ('name', 'indx', 'rang', 'test'):
- if want == 'text': return aetypes.Text(seld, fr)
- if want == 'cha ': return aetypes.Character(seld, fr)
- if want == 'cwor': return aetypes.Word(seld, fr)
- if want == 'clin': return aetypes.Line(seld, fr)
- if want == 'cpar': return aetypes.Paragraph(seld, fr)
- if want == 'cwin': return aetypes.Window(seld, fr)
- if want == 'docu': return aetypes.Document(seld, fr)
- if want == 'file': return aetypes.File(seld, fr)
- if want == 'cins': return aetypes.InsertionPoint(seld, fr)
- if want == 'prop' and form == 'prop' and aetypes.IsType(seld):
- return aetypes.Property(seld.type, fr)
- return aetypes.ObjectSpecifier(want, form, seld, fr)
+ want = dict['want'].type
+ form = dict['form'].enum
+ seld = dict['seld']
+ fr = dict['from']
+ if form in ('name', 'indx', 'rang', 'test'):
+ if want == 'text': return aetypes.Text(seld, fr)
+ if want == 'cha ': return aetypes.Character(seld, fr)
+ if want == 'cwor': return aetypes.Word(seld, fr)
+ if want == 'clin': return aetypes.Line(seld, fr)
+ if want == 'cpar': return aetypes.Paragraph(seld, fr)
+ if want == 'cwin': return aetypes.Window(seld, fr)
+ if want == 'docu': return aetypes.Document(seld, fr)
+ if want == 'file': return aetypes.File(seld, fr)
+ if want == 'cins': return aetypes.InsertionPoint(seld, fr)
+ if want == 'prop' and form == 'prop' and aetypes.IsType(seld):
+ return aetypes.Property(seld.type, fr)
+ return aetypes.ObjectSpecifier(want, form, seld, fr)
# Note by Jack: I'm not 100% sure of the following code. This was
# provided by Donovan Preston, but I wonder whether the assignment
# to __class__ is safe. Moreover, shouldn't there be a better
# initializer for the classes in the suites?
def mkobjectfrommodule(dict, modulename):
- if type(dict['want']) == types.ClassType and issubclass(dict['want'], ObjectSpecifier):
- # The type has already been converted to Python. Convert back:-(
- classtype = dict['want']
- dict['want'] = aetypes.mktype(classtype.want)
- want = dict['want'].type
- module = __import__(modulename)
- codenamemapper = module._classdeclarations
- classtype = codenamemapper.get(want, None)
- newobj = mkobject(dict)
- if classtype:
- assert issubclass(classtype, ObjectSpecifier)
- newobj.__class__ = classtype
- return newobj
-
+ if type(dict['want']) == types.ClassType and issubclass(dict['want'], ObjectSpecifier):
+ # The type has already been converted to Python. Convert back:-(
+ classtype = dict['want']
+ dict['want'] = aetypes.mktype(classtype.want)
+ want = dict['want'].type
+ module = __import__(modulename)
+ codenamemapper = module._classdeclarations
+ classtype = codenamemapper.get(want, None)
+ newobj = mkobject(dict)
+ if classtype:
+ assert issubclass(classtype, ObjectSpecifier)
+ newobj.__class__ = classtype
+ return newobj
+
def mktype(typecode, modulename=None):
- if modulename:
- module = __import__(modulename)
- codenamemapper = module._classdeclarations
- classtype = codenamemapper.get(typecode, None)
- if classtype:
- return classtype
- return aetypes.mktype(typecode)
+ if modulename:
+ module = __import__(modulename)
+ codenamemapper = module._classdeclarations
+ classtype = codenamemapper.get(typecode, None)
+ if classtype:
+ return classtype
+ return aetypes.mktype(typecode)
diff --git a/Lib/plat-mac/aetools.py b/Lib/plat-mac/aetools.py
index ac264ee..79b8069 100644
--- a/Lib/plat-mac/aetools.py
+++ b/Lib/plat-mac/aetools.py
@@ -9,11 +9,11 @@ unpackevent(event) returns the parameters and attributes from an AEAppleEvent re
Plus... Lots of classes and routines that help representing AE objects,
ranges, conditionals, logicals, etc., so you can write, e.g.:
- x = Character(1, Document("foobar"))
+ x = Character(1, Document("foobar"))
and pack(x) will create an AE object reference equivalent to AppleScript's
- character 1 of document "foobar"
+ character 1 of document "foobar"
Some of the stuff that appears to be exported from this module comes from other
files: the pack stuff from aepack, the objects from aetypes.
@@ -41,306 +41,306 @@ LAUNCH_MAX_WAIT_TIME=10
# Note by Jack: No??!? If I read the docs correctly it *is*....
aekeywords = [
- 'tran',
- 'rtid',
- 'evcl',
- 'evid',
- 'addr',
- 'optk',
- 'timo',
- 'inte', # this attribute is read only - will be set in AESend
- 'esrc', # this attribute is read only
- 'miss', # this attribute is read only
- 'from' # new in 1.0.1
+ 'tran',
+ 'rtid',
+ 'evcl',
+ 'evid',
+ 'addr',
+ 'optk',
+ 'timo',
+ 'inte', # this attribute is read only - will be set in AESend
+ 'esrc', # this attribute is read only
+ 'miss', # this attribute is read only
+ 'from' # new in 1.0.1
]
def missed(ae):
- try:
- desc = ae.AEGetAttributeDesc('miss', 'keyw')
- except AE.Error, msg:
- return None
- return desc.data
+ try:
+ desc = ae.AEGetAttributeDesc('miss', 'keyw')
+ except AE.Error, msg:
+ return None
+ return desc.data
def unpackevent(ae, formodulename=""):
- parameters = {}
- try:
- dirobj = ae.AEGetParamDesc('----', '****')
- except AE.Error:
- pass
- else:
- parameters['----'] = unpack(dirobj, formodulename)
- del dirobj
- # Workaround for what I feel is a bug in OSX 10.2: 'errn' won't show up in missed...
- try:
- dirobj = ae.AEGetParamDesc('errn', '****')
- except AE.Error:
- pass
- else:
- parameters['errn'] = unpack(dirobj, formodulename)
- del dirobj
- while 1:
- key = missed(ae)
- if not key: break
- parameters[key] = unpack(ae.AEGetParamDesc(key, '****'), formodulename)
- attributes = {}
- for key in aekeywords:
- try:
- desc = ae.AEGetAttributeDesc(key, '****')
- except (AE.Error, MacOS.Error), msg:
- if msg[0] != -1701 and msg[0] != -1704:
- raise
- continue
- attributes[key] = unpack(desc, formodulename)
- return parameters, attributes
+ parameters = {}
+ try:
+ dirobj = ae.AEGetParamDesc('----', '****')
+ except AE.Error:
+ pass
+ else:
+ parameters['----'] = unpack(dirobj, formodulename)
+ del dirobj
+ # Workaround for what I feel is a bug in OSX 10.2: 'errn' won't show up in missed...
+ try:
+ dirobj = ae.AEGetParamDesc('errn', '****')
+ except AE.Error:
+ pass
+ else:
+ parameters['errn'] = unpack(dirobj, formodulename)
+ del dirobj
+ while 1:
+ key = missed(ae)
+ if not key: break
+ parameters[key] = unpack(ae.AEGetParamDesc(key, '****'), formodulename)
+ attributes = {}
+ for key in aekeywords:
+ try:
+ desc = ae.AEGetAttributeDesc(key, '****')
+ except (AE.Error, MacOS.Error), msg:
+ if msg[0] != -1701 and msg[0] != -1704:
+ raise
+ continue
+ attributes[key] = unpack(desc, formodulename)
+ return parameters, attributes
def packevent(ae, parameters = {}, attributes = {}):
- for key, value in parameters.items():
- packkey(ae, key, value)
- for key, value in attributes.items():
- ae.AEPutAttributeDesc(key, pack(value))
+ for key, value in parameters.items():
+ packkey(ae, key, value)
+ for key, value in attributes.items():
+ ae.AEPutAttributeDesc(key, pack(value))
#
# Support routine for automatically generated Suite interfaces
# These routines are also useable for the reverse function.
#
def keysubst(arguments, keydict):
- """Replace long name keys by their 4-char counterparts, and check"""
- ok = keydict.values()
- for k in arguments.keys():
- if keydict.has_key(k):
- v = arguments[k]
- del arguments[k]
- arguments[keydict[k]] = v
- elif k != '----' and k not in ok:
- raise TypeError, 'Unknown keyword argument: %s'%k
-
+ """Replace long name keys by their 4-char counterparts, and check"""
+ ok = keydict.values()
+ for k in arguments.keys():
+ if keydict.has_key(k):
+ v = arguments[k]
+ del arguments[k]
+ arguments[keydict[k]] = v
+ elif k != '----' and k not in ok:
+ raise TypeError, 'Unknown keyword argument: %s'%k
+
def enumsubst(arguments, key, edict):
- """Substitute a single enum keyword argument, if it occurs"""
- if not arguments.has_key(key) or edict is None:
- return
- v = arguments[key]
- ok = edict.values()
- if edict.has_key(v):
- arguments[key] = Enum(edict[v])
- elif not v in ok:
- raise TypeError, 'Unknown enumerator: %s'%v
-
+ """Substitute a single enum keyword argument, if it occurs"""
+ if not arguments.has_key(key) or edict is None:
+ return
+ v = arguments[key]
+ ok = edict.values()
+ if edict.has_key(v):
+ arguments[key] = Enum(edict[v])
+ elif not v in ok:
+ raise TypeError, 'Unknown enumerator: %s'%v
+
def decodeerror(arguments):
- """Create the 'best' argument for a raise MacOS.Error"""
- errn = arguments['errn']
- err_a1 = errn
- if arguments.has_key('errs'):
- err_a2 = arguments['errs']
- else:
- err_a2 = MacOS.GetErrorString(errn)
- if arguments.has_key('erob'):
- err_a3 = arguments['erob']
- else:
- err_a3 = None
-
- return (err_a1, err_a2, err_a3)
+ """Create the 'best' argument for a raise MacOS.Error"""
+ errn = arguments['errn']
+ err_a1 = errn
+ if arguments.has_key('errs'):
+ err_a2 = arguments['errs']
+ else:
+ err_a2 = MacOS.GetErrorString(errn)
+ if arguments.has_key('erob'):
+ err_a3 = arguments['erob']
+ else:
+ err_a3 = None
+
+ return (err_a1, err_a2, err_a3)
class TalkTo:
- """An AE connection to an application"""
- _signature = None # Can be overridden by subclasses
- _moduleName = None # Can be overridden by subclasses
-
- __eventloop_initialized = 0
- def __ensure_WMAvailable(klass):
- if klass.__eventloop_initialized: return 1
- if not MacOS.WMAvailable(): return 0
- # Workaround for a but in MacOSX 10.2: we must have an event
- # loop before we can call AESend.
- Evt.WaitNextEvent(0,0)
- return 1
- __ensure_WMAvailable = classmethod(__ensure_WMAvailable)
-
- def __init__(self, signature=None, start=0, timeout=0):
- """Create a communication channel with a particular application.
-
- Addressing the application is done by specifying either a
- 4-byte signature, an AEDesc or an object that will __aepack__
- to an AEDesc.
- """
- self.target_signature = None
- if signature is None:
- signature = self._signature
- if type(signature) == AEDescType:
- self.target = signature
- elif type(signature) == InstanceType and hasattr(signature, '__aepack__'):
- self.target = signature.__aepack__()
- elif type(signature) == StringType and len(signature) == 4:
- self.target = AE.AECreateDesc(AppleEvents.typeApplSignature, signature)
- self.target_signature = signature
- else:
- raise TypeError, "signature should be 4-char string or AEDesc"
- self.send_flags = AppleEvents.kAEWaitReply
- self.send_priority = AppleEvents.kAENormalPriority
- if timeout:
- self.send_timeout = timeout
- else:
- self.send_timeout = AppleEvents.kAEDefaultTimeout
- if start:
- self._start()
-
- def _start(self):
- """Start the application, if it is not running yet"""
- try:
- self.send('ascr', 'noop')
- except AE.Error:
- _launch(self.target_signature)
- for i in range(LAUNCH_MAX_WAIT_TIME):
- try:
- self.send('ascr', 'noop')
- except AE.Error:
- pass
- else:
- break
- time.sleep(1)
-
- def start(self):
- """Deprecated, used _start()"""
- self._start()
-
- def newevent(self, code, subcode, parameters = {}, attributes = {}):
- """Create a complete structure for an apple event"""
-
- event = AE.AECreateAppleEvent(code, subcode, self.target,
- AppleEvents.kAutoGenerateReturnID, AppleEvents.kAnyTransactionID)
- packevent(event, parameters, attributes)
- return event
-
- def sendevent(self, event):
- """Send a pre-created appleevent, await the reply and unpack it"""
- if not self.__ensure_WMAvailable():
- raise RuntimeError, "No window manager access, cannot send AppleEvent"
- reply = event.AESend(self.send_flags, self.send_priority,
- self.send_timeout)
- parameters, attributes = unpackevent(reply, self._moduleName)
- return reply, parameters, attributes
-
- def send(self, code, subcode, parameters = {}, attributes = {}):
- """Send an appleevent given code/subcode/pars/attrs and unpack the reply"""
- return self.sendevent(self.newevent(code, subcode, parameters, attributes))
-
- #
- # The following events are somehow "standard" and don't seem to appear in any
- # suite...
- #
- def activate(self):
- """Send 'activate' command"""
- self.send('misc', 'actv')
-
- def _get(self, _object, as=None, _attributes={}):
- """_get: get data from an object
- Required argument: the object
- Keyword argument _attributes: AppleEvent attribute dictionary
- Returns: the data
- """
- _code = 'core'
- _subcode = 'getd'
-
- _arguments = {'----':_object}
- if as:
- _arguments['rtyp'] = mktype(as)
-
- _reply, _arguments, _attributes = self.send(_code, _subcode,
- _arguments, _attributes)
- if _arguments.has_key('errn'):
- raise Error, decodeerror(_arguments)
-
- if _arguments.has_key('----'):
- return _arguments['----']
- if as:
- item.__class__ = as
- return item
-
- get = _get
-
- _argmap_set = {
- 'to' : 'data',
- }
-
- def _set(self, _object, _attributes={}, **_arguments):
- """set: Set an object's data.
- Required argument: the object for the command
- Keyword argument to: The new value.
- Keyword argument _attributes: AppleEvent attribute dictionary
- """
- _code = 'core'
- _subcode = 'setd'
-
- keysubst(_arguments, self._argmap_set)
- _arguments['----'] = _object
-
-
- _reply, _arguments, _attributes = self.send(_code, _subcode,
- _arguments, _attributes)
- if _arguments.get('errn', 0):
- raise Error, decodeerror(_arguments)
- # XXXX Optionally decode result
- if _arguments.has_key('----'):
- return _arguments['----']
-
- set = _set
+ """An AE connection to an application"""
+ _signature = None # Can be overridden by subclasses
+ _moduleName = None # Can be overridden by subclasses
+
+ __eventloop_initialized = 0
+ def __ensure_WMAvailable(klass):
+ if klass.__eventloop_initialized: return 1
+ if not MacOS.WMAvailable(): return 0
+ # Workaround for a but in MacOSX 10.2: we must have an event
+ # loop before we can call AESend.
+ Evt.WaitNextEvent(0,0)
+ return 1
+ __ensure_WMAvailable = classmethod(__ensure_WMAvailable)
+
+ def __init__(self, signature=None, start=0, timeout=0):
+ """Create a communication channel with a particular application.
+
+ Addressing the application is done by specifying either a
+ 4-byte signature, an AEDesc or an object that will __aepack__
+ to an AEDesc.
+ """
+ self.target_signature = None
+ if signature is None:
+ signature = self._signature
+ if type(signature) == AEDescType:
+ self.target = signature
+ elif type(signature) == InstanceType and hasattr(signature, '__aepack__'):
+ self.target = signature.__aepack__()
+ elif type(signature) == StringType and len(signature) == 4:
+ self.target = AE.AECreateDesc(AppleEvents.typeApplSignature, signature)
+ self.target_signature = signature
+ else:
+ raise TypeError, "signature should be 4-char string or AEDesc"
+ self.send_flags = AppleEvents.kAEWaitReply
+ self.send_priority = AppleEvents.kAENormalPriority
+ if timeout:
+ self.send_timeout = timeout
+ else:
+ self.send_timeout = AppleEvents.kAEDefaultTimeout
+ if start:
+ self._start()
+
+ def _start(self):
+ """Start the application, if it is not running yet"""
+ try:
+ self.send('ascr', 'noop')
+ except AE.Error:
+ _launch(self.target_signature)
+ for i in range(LAUNCH_MAX_WAIT_TIME):
+ try:
+ self.send('ascr', 'noop')
+ except AE.Error:
+ pass
+ else:
+ break
+ time.sleep(1)
+
+ def start(self):
+ """Deprecated, used _start()"""
+ self._start()
+
+ def newevent(self, code, subcode, parameters = {}, attributes = {}):
+ """Create a complete structure for an apple event"""
+
+ event = AE.AECreateAppleEvent(code, subcode, self.target,
+ AppleEvents.kAutoGenerateReturnID, AppleEvents.kAnyTransactionID)
+ packevent(event, parameters, attributes)
+ return event
+
+ def sendevent(self, event):
+ """Send a pre-created appleevent, await the reply and unpack it"""
+ if not self.__ensure_WMAvailable():
+ raise RuntimeError, "No window manager access, cannot send AppleEvent"
+ reply = event.AESend(self.send_flags, self.send_priority,
+ self.send_timeout)
+ parameters, attributes = unpackevent(reply, self._moduleName)
+ return reply, parameters, attributes
+
+ def send(self, code, subcode, parameters = {}, attributes = {}):
+ """Send an appleevent given code/subcode/pars/attrs and unpack the reply"""
+ return self.sendevent(self.newevent(code, subcode, parameters, attributes))
+
+ #
+ # The following events are somehow "standard" and don't seem to appear in any
+ # suite...
+ #
+ def activate(self):
+ """Send 'activate' command"""
+ self.send('misc', 'actv')
+
+ def _get(self, _object, as=None, _attributes={}):
+ """_get: get data from an object
+ Required argument: the object
+ Keyword argument _attributes: AppleEvent attribute dictionary
+ Returns: the data
+ """
+ _code = 'core'
+ _subcode = 'getd'
+
+ _arguments = {'----':_object}
+ if as:
+ _arguments['rtyp'] = mktype(as)
+
+ _reply, _arguments, _attributes = self.send(_code, _subcode,
+ _arguments, _attributes)
+ if _arguments.has_key('errn'):
+ raise Error, decodeerror(_arguments)
+
+ if _arguments.has_key('----'):
+ return _arguments['----']
+ if as:
+ item.__class__ = as
+ return item
+
+ get = _get
+
+ _argmap_set = {
+ 'to' : 'data',
+ }
+
+ def _set(self, _object, _attributes={}, **_arguments):
+ """set: Set an object's data.
+ Required argument: the object for the command
+ Keyword argument to: The new value.
+ Keyword argument _attributes: AppleEvent attribute dictionary
+ """
+ _code = 'core'
+ _subcode = 'setd'
+
+ keysubst(_arguments, self._argmap_set)
+ _arguments['----'] = _object
+
+
+ _reply, _arguments, _attributes = self.send(_code, _subcode,
+ _arguments, _attributes)
+ if _arguments.get('errn', 0):
+ raise Error, decodeerror(_arguments)
+ # XXXX Optionally decode result
+ if _arguments.has_key('----'):
+ return _arguments['----']
+
+ set = _set
# Tiny Finder class, for local use only
class _miniFinder(TalkTo):
- def open(self, _object, _attributes={}, **_arguments):
- """open: Open the specified object(s)
- Required argument: list of objects to open
- Keyword argument _attributes: AppleEvent attribute dictionary
- """
- _code = 'aevt'
- _subcode = 'odoc'
-
- if _arguments: raise TypeError, 'No optional args expected'
- _arguments['----'] = _object
-
-
- _reply, _arguments, _attributes = self.send(_code, _subcode,
- _arguments, _attributes)
- if _arguments.has_key('errn'):
- raise Error, decodeerror(_arguments)
- # XXXX Optionally decode result
- if _arguments.has_key('----'):
- return _arguments['----']
+ def open(self, _object, _attributes={}, **_arguments):
+ """open: Open the specified object(s)
+ Required argument: list of objects to open
+ Keyword argument _attributes: AppleEvent attribute dictionary
+ """
+ _code = 'aevt'
+ _subcode = 'odoc'
+
+ if _arguments: raise TypeError, 'No optional args expected'
+ _arguments['----'] = _object
+
+
+ _reply, _arguments, _attributes = self.send(_code, _subcode,
+ _arguments, _attributes)
+ if _arguments.has_key('errn'):
+ raise Error, decodeerror(_arguments)
+ # XXXX Optionally decode result
+ if _arguments.has_key('----'):
+ return _arguments['----']
#pass
-
+
_finder = _miniFinder('MACS')
def _launch(appfile):
- """Open a file thru the finder. Specify file by name or fsspec"""
- _finder.open(_application_file(('ID ', appfile)))
+ """Open a file thru the finder. Specify file by name or fsspec"""
+ _finder.open(_application_file(('ID ', appfile)))
class _application_file(ComponentItem):
- """application file - An application's file on disk"""
- want = 'appf'
-
+ """application file - An application's file on disk"""
+ want = 'appf'
+
_application_file._propdict = {
}
_application_file._elemdict = {
}
-
+
# Test program
# XXXX Should test more, really...
def test():
- target = AE.AECreateDesc('sign', 'quil')
- ae = AE.AECreateAppleEvent('aevt', 'oapp', target, -1, 0)
- print unpackevent(ae)
- raw_input(":")
- ae = AE.AECreateAppleEvent('core', 'getd', target, -1, 0)
- obj = Character(2, Word(1, Document(1)))
- print obj
- print repr(obj)
- packevent(ae, {'----': obj})
- params, attrs = unpackevent(ae)
- print params['----']
- raw_input(":")
+ target = AE.AECreateDesc('sign', 'quil')
+ ae = AE.AECreateAppleEvent('aevt', 'oapp', target, -1, 0)
+ print unpackevent(ae)
+ raw_input(":")
+ ae = AE.AECreateAppleEvent('core', 'getd', target, -1, 0)
+ obj = Character(2, Word(1, Document(1)))
+ print obj
+ print repr(obj)
+ packevent(ae, {'----': obj})
+ params, attrs = unpackevent(ae)
+ print params['----']
+ raw_input(":")
if __name__ == '__main__':
- test()
- sys.exit(1)
+ test()
+ sys.exit(1)
diff --git a/Lib/plat-mac/aetypes.py b/Lib/plat-mac/aetypes.py
index e62e866..538cf14 100644
--- a/Lib/plat-mac/aetypes.py
+++ b/Lib/plat-mac/aetypes.py
@@ -10,549 +10,549 @@ import string
# aetools_convert.
#
def pack(*args, **kwargs):
- from aepack import pack
- return pack( *args, **kwargs)
-
+ from aepack import pack
+ return pack( *args, **kwargs)
+
def nice(s):
- """'nice' representation of an object"""
- if type(s) is StringType: return repr(s)
- else: return str(s)
+ """'nice' representation of an object"""
+ if type(s) is StringType: return repr(s)
+ else: return str(s)
class Unknown:
- """An uninterpreted AE object"""
-
- def __init__(self, type, data):
- self.type = type
- self.data = data
-
- def __repr__(self):
- return "Unknown(%s, %s)" % (`self.type`, `self.data`)
-
- def __aepack__(self):
- return pack(self.data, self.type)
+ """An uninterpreted AE object"""
+
+ def __init__(self, type, data):
+ self.type = type
+ self.data = data
+
+ def __repr__(self):
+ return "Unknown(%s, %s)" % (`self.type`, `self.data`)
+
+ def __aepack__(self):
+ return pack(self.data, self.type)
class Enum:
- """An AE enumeration value"""
-
- def __init__(self, enum):
- self.enum = "%-4.4s" % str(enum)
-
- def __repr__(self):
- return "Enum(%s)" % `self.enum`
-
- def __str__(self):
- return string.strip(self.enum)
-
- def __aepack__(self):
- return pack(self.enum, typeEnumeration)
+ """An AE enumeration value"""
+
+ def __init__(self, enum):
+ self.enum = "%-4.4s" % str(enum)
+
+ def __repr__(self):
+ return "Enum(%s)" % `self.enum`
+
+ def __str__(self):
+ return string.strip(self.enum)
+
+ def __aepack__(self):
+ return pack(self.enum, typeEnumeration)
def IsEnum(x):
- return isinstance(x, Enum)
+ return isinstance(x, Enum)
def mkenum(enum):
- if IsEnum(enum): return enum
- return Enum(enum)
+ if IsEnum(enum): return enum
+ return Enum(enum)
# Jack changed the way this is done
class InsertionLoc:
- def __init__(self, of, pos):
- self.of = of
- self.pos = pos
-
- def __repr__(self):
- return "InsertionLoc(%s, %s)" % (`self.of`, `self.pos`)
-
- def __aepack__(self):
- rec = {'kobj': self.of, 'kpos': self.pos}
- return pack(rec, forcetype='insl')
-
+ def __init__(self, of, pos):
+ self.of = of
+ self.pos = pos
+
+ def __repr__(self):
+ return "InsertionLoc(%s, %s)" % (`self.of`, `self.pos`)
+
+ def __aepack__(self):
+ rec = {'kobj': self.of, 'kpos': self.pos}
+ return pack(rec, forcetype='insl')
+
# Convenience functions for dsp:
def beginning(of):
- return InsertionLoc(of, Enum('bgng'))
-
+ return InsertionLoc(of, Enum('bgng'))
+
def end(of):
- return InsertionLoc(of, Enum('end '))
+ return InsertionLoc(of, Enum('end '))
class Boolean:
- """An AE boolean value"""
-
- def __init__(self, bool):
- self.bool = (not not bool)
-
- def __repr__(self):
- return "Boolean(%s)" % `self.bool`
-
- def __str__(self):
- if self.bool:
- return "True"
- else:
- return "False"
-
- def __aepack__(self):
- return pack(struct.pack('b', self.bool), 'bool')
+ """An AE boolean value"""
+
+ def __init__(self, bool):
+ self.bool = (not not bool)
+
+ def __repr__(self):
+ return "Boolean(%s)" % `self.bool`
+
+ def __str__(self):
+ if self.bool:
+ return "True"
+ else:
+ return "False"
+
+ def __aepack__(self):
+ return pack(struct.pack('b', self.bool), 'bool')
def IsBoolean(x):
- return isinstance(x, Boolean)
+ return isinstance(x, Boolean)
def mkboolean(bool):
- if IsBoolean(bool): return bool
- return Boolean(bool)
+ if IsBoolean(bool): return bool
+ return Boolean(bool)
class Type:
- """An AE 4-char typename object"""
-
- def __init__(self, type):
- self.type = "%-4.4s" % str(type)
-
- def __repr__(self):
- return "Type(%s)" % `self.type`
-
- def __str__(self):
- return string.strip(self.type)
-
- def __aepack__(self):
- return pack(self.type, typeType)
+ """An AE 4-char typename object"""
+
+ def __init__(self, type):
+ self.type = "%-4.4s" % str(type)
+
+ def __repr__(self):
+ return "Type(%s)" % `self.type`
+
+ def __str__(self):
+ return string.strip(self.type)
+
+ def __aepack__(self):
+ return pack(self.type, typeType)
def IsType(x):
- return isinstance(x, Type)
+ return isinstance(x, Type)
def mktype(type):
- if IsType(type): return type
- return Type(type)
+ if IsType(type): return type
+ return Type(type)
class Keyword:
- """An AE 4-char keyword object"""
-
- def __init__(self, keyword):
- self.keyword = "%-4.4s" % str(keyword)
-
- def __repr__(self):
- return "Keyword(%s)" % `self.keyword`
-
- def __str__(self):
- return string.strip(self.keyword)
-
- def __aepack__(self):
- return pack(self.keyword, typeKeyword)
+ """An AE 4-char keyword object"""
+
+ def __init__(self, keyword):
+ self.keyword = "%-4.4s" % str(keyword)
+
+ def __repr__(self):
+ return "Keyword(%s)" % `self.keyword`
+
+ def __str__(self):
+ return string.strip(self.keyword)
+
+ def __aepack__(self):
+ return pack(self.keyword, typeKeyword)
def IsKeyword(x):
- return isinstance(x, Keyword)
+ return isinstance(x, Keyword)
class Range:
- """An AE range object"""
-
- def __init__(self, start, stop):
- self.start = start
- self.stop = stop
-
- def __repr__(self):
- return "Range(%s, %s)" % (`self.start`, `self.stop`)
-
- def __str__(self):
- return "%s thru %s" % (nice(self.start), nice(self.stop))
-
- def __aepack__(self):
- return pack({'star': self.start, 'stop': self.stop}, 'rang')
+ """An AE range object"""
+
+ def __init__(self, start, stop):
+ self.start = start
+ self.stop = stop
+
+ def __repr__(self):
+ return "Range(%s, %s)" % (`self.start`, `self.stop`)
+
+ def __str__(self):
+ return "%s thru %s" % (nice(self.start), nice(self.stop))
+
+ def __aepack__(self):
+ return pack({'star': self.start, 'stop': self.stop}, 'rang')
def IsRange(x):
- return isinstance(x, Range)
+ return isinstance(x, Range)
class Comparison:
- """An AE Comparison"""
-
- def __init__(self, obj1, relo, obj2):
- self.obj1 = obj1
- self.relo = "%-4.4s" % str(relo)
- self.obj2 = obj2
-
- def __repr__(self):
- return "Comparison(%s, %s, %s)" % (`self.obj1`, `self.relo`, `self.obj2`)
-
- def __str__(self):
- return "%s %s %s" % (nice(self.obj1), string.strip(self.relo), nice(self.obj2))
-
- def __aepack__(self):
- return pack({'obj1': self.obj1,
- 'relo': mkenum(self.relo),
- 'obj2': self.obj2},
- 'cmpd')
+ """An AE Comparison"""
+
+ def __init__(self, obj1, relo, obj2):
+ self.obj1 = obj1
+ self.relo = "%-4.4s" % str(relo)
+ self.obj2 = obj2
+
+ def __repr__(self):
+ return "Comparison(%s, %s, %s)" % (`self.obj1`, `self.relo`, `self.obj2`)
+
+ def __str__(self):
+ return "%s %s %s" % (nice(self.obj1), string.strip(self.relo), nice(self.obj2))
+
+ def __aepack__(self):
+ return pack({'obj1': self.obj1,
+ 'relo': mkenum(self.relo),
+ 'obj2': self.obj2},
+ 'cmpd')
def IsComparison(x):
- return isinstance(x, Comparison)
-
+ return isinstance(x, Comparison)
+
class NComparison(Comparison):
- # The class attribute 'relo' must be set in a subclass
-
- def __init__(self, obj1, obj2):
- Comparison.__init__(obj1, self.relo, obj2)
+ # The class attribute 'relo' must be set in a subclass
+
+ def __init__(self, obj1, obj2):
+ Comparison.__init__(obj1, self.relo, obj2)
class Ordinal:
- """An AE Ordinal"""
-
- def __init__(self, abso):
-# self.obj1 = obj1
- self.abso = "%-4.4s" % str(abso)
-
- def __repr__(self):
- return "Ordinal(%s)" % (`self.abso`)
-
- def __str__(self):
- return "%s" % (string.strip(self.abso))
-
- def __aepack__(self):
- return pack(self.abso, 'abso')
+ """An AE Ordinal"""
+
+ def __init__(self, abso):
+# self.obj1 = obj1
+ self.abso = "%-4.4s" % str(abso)
+
+ def __repr__(self):
+ return "Ordinal(%s)" % (`self.abso`)
+
+ def __str__(self):
+ return "%s" % (string.strip(self.abso))
+
+ def __aepack__(self):
+ return pack(self.abso, 'abso')
def IsOrdinal(x):
- return isinstance(x, Ordinal)
-
+ return isinstance(x, Ordinal)
+
class NOrdinal(Ordinal):
- # The class attribute 'abso' must be set in a subclass
-
- def __init__(self):
- Ordinal.__init__(self, self.abso)
+ # The class attribute 'abso' must be set in a subclass
+
+ def __init__(self):
+ Ordinal.__init__(self, self.abso)
class Logical:
- """An AE logical expression object"""
-
- def __init__(self, logc, term):
- self.logc = "%-4.4s" % str(logc)
- self.term = term
-
- def __repr__(self):
- return "Logical(%s, %s)" % (`self.logc`, `self.term`)
-
- def __str__(self):
- if type(self.term) == ListType and len(self.term) == 2:
- return "%s %s %s" % (nice(self.term[0]),
- string.strip(self.logc),
- nice(self.term[1]))
- else:
- return "%s(%s)" % (string.strip(self.logc), nice(self.term))
-
- def __aepack__(self):
- return pack({'logc': mkenum(self.logc), 'term': self.term}, 'logi')
+ """An AE logical expression object"""
+
+ def __init__(self, logc, term):
+ self.logc = "%-4.4s" % str(logc)
+ self.term = term
+
+ def __repr__(self):
+ return "Logical(%s, %s)" % (`self.logc`, `self.term`)
+
+ def __str__(self):
+ if type(self.term) == ListType and len(self.term) == 2:
+ return "%s %s %s" % (nice(self.term[0]),
+ string.strip(self.logc),
+ nice(self.term[1]))
+ else:
+ return "%s(%s)" % (string.strip(self.logc), nice(self.term))
+
+ def __aepack__(self):
+ return pack({'logc': mkenum(self.logc), 'term': self.term}, 'logi')
def IsLogical(x):
- return isinstance(x, Logical)
+ return isinstance(x, Logical)
class StyledText:
- """An AE object respresenting text in a certain style"""
-
- def __init__(self, style, text):
- self.style = style
- self.text = text
-
- def __repr__(self):
- return "StyledText(%s, %s)" % (`self.style`, `self.text`)
-
- def __str__(self):
- return self.text
-
- def __aepack__(self):
- return pack({'ksty': self.style, 'ktxt': self.text}, 'STXT')
+ """An AE object respresenting text in a certain style"""
+
+ def __init__(self, style, text):
+ self.style = style
+ self.text = text
+
+ def __repr__(self):
+ return "StyledText(%s, %s)" % (`self.style`, `self.text`)
+
+ def __str__(self):
+ return self.text
+
+ def __aepack__(self):
+ return pack({'ksty': self.style, 'ktxt': self.text}, 'STXT')
def IsStyledText(x):
- return isinstance(x, StyledText)
+ return isinstance(x, StyledText)
class AEText:
- """An AE text object with style, script and language specified"""
-
- def __init__(self, script, style, text):
- self.script = script
- self.style = style
- self.text = text
-
- def __repr__(self):
- return "AEText(%s, %s, %s)" % (`self.script`, `self.style`, `self.text`)
-
- def __str__(self):
- return self.text
-
- def __aepack__(self):
- return pack({keyAEScriptTag: self.script, keyAEStyles: self.style,
- keyAEText: self.text}, typeAEText)
+ """An AE text object with style, script and language specified"""
+
+ def __init__(self, script, style, text):
+ self.script = script
+ self.style = style
+ self.text = text
+
+ def __repr__(self):
+ return "AEText(%s, %s, %s)" % (`self.script`, `self.style`, `self.text`)
+
+ def __str__(self):
+ return self.text
+
+ def __aepack__(self):
+ return pack({keyAEScriptTag: self.script, keyAEStyles: self.style,
+ keyAEText: self.text}, typeAEText)
def IsAEText(x):
- return isinstance(x, AEText)
+ return isinstance(x, AEText)
class IntlText:
- """A text object with script and language specified"""
-
- def __init__(self, script, language, text):
- self.script = script
- self.language = language
- self.text = text
-
- def __repr__(self):
- return "IntlText(%s, %s, %s)" % (`self.script`, `self.language`, `self.text`)
-
- def __str__(self):
- return self.text
-
- def __aepack__(self):
- return pack(struct.pack('hh', self.script, self.language)+self.text,
- typeIntlText)
+ """A text object with script and language specified"""
+
+ def __init__(self, script, language, text):
+ self.script = script
+ self.language = language
+ self.text = text
+
+ def __repr__(self):
+ return "IntlText(%s, %s, %s)" % (`self.script`, `self.language`, `self.text`)
+
+ def __str__(self):
+ return self.text
+
+ def __aepack__(self):
+ return pack(struct.pack('hh', self.script, self.language)+self.text,
+ typeIntlText)
def IsIntlText(x):
- return isinstance(x, IntlText)
+ return isinstance(x, IntlText)
class IntlWritingCode:
- """An object representing script and language"""
-
- def __init__(self, script, language):
- self.script = script
- self.language = language
-
- def __repr__(self):
- return "IntlWritingCode(%s, %s)" % (`self.script`, `self.language`)
-
- def __str__(self):
- return "script system %d, language %d"%(self.script, self.language)
-
- def __aepack__(self):
- return pack(struct.pack('hh', self.script, self.language),
- typeIntlWritingCode)
+ """An object representing script and language"""
+
+ def __init__(self, script, language):
+ self.script = script
+ self.language = language
+
+ def __repr__(self):
+ return "IntlWritingCode(%s, %s)" % (`self.script`, `self.language`)
+
+ def __str__(self):
+ return "script system %d, language %d"%(self.script, self.language)
+
+ def __aepack__(self):
+ return pack(struct.pack('hh', self.script, self.language),
+ typeIntlWritingCode)
def IsIntlWritingCode(x):
- return isinstance(x, IntlWritingCode)
+ return isinstance(x, IntlWritingCode)
class QDPoint:
- """A point"""
-
- def __init__(self, v, h):
- self.v = v
- self.h = h
-
- def __repr__(self):
- return "QDPoint(%s, %s)" % (`self.v`, `self.h`)
-
- def __str__(self):
- return "(%d, %d)"%(self.v, self.h)
-
- def __aepack__(self):
- return pack(struct.pack('hh', self.v, self.h),
- typeQDPoint)
+ """A point"""
+
+ def __init__(self, v, h):
+ self.v = v
+ self.h = h
+
+ def __repr__(self):
+ return "QDPoint(%s, %s)" % (`self.v`, `self.h`)
+
+ def __str__(self):
+ return "(%d, %d)"%(self.v, self.h)
+
+ def __aepack__(self):
+ return pack(struct.pack('hh', self.v, self.h),
+ typeQDPoint)
def IsQDPoint(x):
- return isinstance(x, QDPoint)
+ return isinstance(x, QDPoint)
class QDRectangle:
- """A rectangle"""
-
- def __init__(self, v0, h0, v1, h1):
- self.v0 = v0
- self.h0 = h0
- self.v1 = v1
- self.h1 = h1
-
- def __repr__(self):
- return "QDRectangle(%s, %s, %s, %s)" % (`self.v0`, `self.h0`,
- `self.v1`, `self.h1`)
-
- def __str__(self):
- return "(%d, %d)-(%d, %d)"%(self.v0, self.h0, self.v1, self.h1)
-
- def __aepack__(self):
- return pack(struct.pack('hhhh', self.v0, self.h0, self.v1, self.h1),
- typeQDRectangle)
+ """A rectangle"""
+
+ def __init__(self, v0, h0, v1, h1):
+ self.v0 = v0
+ self.h0 = h0
+ self.v1 = v1
+ self.h1 = h1
+
+ def __repr__(self):
+ return "QDRectangle(%s, %s, %s, %s)" % (`self.v0`, `self.h0`,
+ `self.v1`, `self.h1`)
+
+ def __str__(self):
+ return "(%d, %d)-(%d, %d)"%(self.v0, self.h0, self.v1, self.h1)
+
+ def __aepack__(self):
+ return pack(struct.pack('hhhh', self.v0, self.h0, self.v1, self.h1),
+ typeQDRectangle)
def IsQDRectangle(x):
- return isinstance(x, QDRectangle)
+ return isinstance(x, QDRectangle)
class RGBColor:
- """An RGB color"""
-
- def __init__(self, r, g, b):
- self.r = r
- self.g = g
- self.b = b
-
- def __repr__(self):
- return "RGBColor(%s, %s, %s)" % (`self.r`, `self.g`, `self.b`)
-
- def __str__(self):
- return "0x%x red, 0x%x green, 0x%x blue"% (self.r, self.g, self.b)
-
- def __aepack__(self):
- return pack(struct.pack('hhh', self.r, self.g, self.b),
- typeRGBColor)
+ """An RGB color"""
+
+ def __init__(self, r, g, b):
+ self.r = r
+ self.g = g
+ self.b = b
+
+ def __repr__(self):
+ return "RGBColor(%s, %s, %s)" % (`self.r`, `self.g`, `self.b`)
+
+ def __str__(self):
+ return "0x%x red, 0x%x green, 0x%x blue"% (self.r, self.g, self.b)
+
+ def __aepack__(self):
+ return pack(struct.pack('hhh', self.r, self.g, self.b),
+ typeRGBColor)
def IsRGBColor(x):
- return isinstance(x, RGBColor)
+ return isinstance(x, RGBColor)
class ObjectSpecifier:
-
- """A class for constructing and manipulation AE object specifiers in python.
-
- An object specifier is actually a record with four fields:
-
- key type description
- --- ---- -----------
-
- 'want' type 4-char class code of thing we want,
- e.g. word, paragraph or property
-
- 'form' enum how we specify which 'want' thing(s) we want,
- e.g. by index, by range, by name, or by property specifier
-
- 'seld' any which thing(s) we want,
- e.g. its index, its name, or its property specifier
-
- 'from' object the object in which it is contained,
- or null, meaning look for it in the application
-
- Note that we don't call this class plain "Object", since that name
- is likely to be used by the application.
- """
-
- def __init__(self, want, form, seld, fr = None):
- self.want = want
- self.form = form
- self.seld = seld
- self.fr = fr
-
- def __repr__(self):
- s = "ObjectSpecifier(%s, %s, %s" % (`self.want`, `self.form`, `self.seld`)
- if self.fr:
- s = s + ", %s)" % `self.fr`
- else:
- s = s + ")"
- return s
-
- def __aepack__(self):
- return pack({'want': mktype(self.want),
- 'form': mkenum(self.form),
- 'seld': self.seld,
- 'from': self.fr},
- 'obj ')
+
+ """A class for constructing and manipulation AE object specifiers in python.
+
+ An object specifier is actually a record with four fields:
+
+ key type description
+ --- ---- -----------
+
+ 'want' type 4-char class code of thing we want,
+ e.g. word, paragraph or property
+
+ 'form' enum how we specify which 'want' thing(s) we want,
+ e.g. by index, by range, by name, or by property specifier
+
+ 'seld' any which thing(s) we want,
+ e.g. its index, its name, or its property specifier
+
+ 'from' object the object in which it is contained,
+ or null, meaning look for it in the application
+
+ Note that we don't call this class plain "Object", since that name
+ is likely to be used by the application.
+ """
+
+ def __init__(self, want, form, seld, fr = None):
+ self.want = want
+ self.form = form
+ self.seld = seld
+ self.fr = fr
+
+ def __repr__(self):
+ s = "ObjectSpecifier(%s, %s, %s" % (`self.want`, `self.form`, `self.seld`)
+ if self.fr:
+ s = s + ", %s)" % `self.fr`
+ else:
+ s = s + ")"
+ return s
+
+ def __aepack__(self):
+ return pack({'want': mktype(self.want),
+ 'form': mkenum(self.form),
+ 'seld': self.seld,
+ 'from': self.fr},
+ 'obj ')
def IsObjectSpecifier(x):
- return isinstance(x, ObjectSpecifier)
+ return isinstance(x, ObjectSpecifier)
# Backwards compatability, sigh...
class Property(ObjectSpecifier):
- def __init__(self, which, fr = None, want='prop'):
- ObjectSpecifier.__init__(self, want, 'prop', mktype(which), fr)
+ def __init__(self, which, fr = None, want='prop'):
+ ObjectSpecifier.__init__(self, want, 'prop', mktype(which), fr)
- def __repr__(self):
- if self.fr:
- return "Property(%s, %s)" % (`self.seld.type`, `self.fr`)
- else:
- return "Property(%s)" % `self.seld.type`
-
- def __str__(self):
- if self.fr:
- return "Property %s of %s" % (str(self.seld), str(self.fr))
- else:
- return "Property %s" % str(self.seld)
+ def __repr__(self):
+ if self.fr:
+ return "Property(%s, %s)" % (`self.seld.type`, `self.fr`)
+ else:
+ return "Property(%s)" % `self.seld.type`
+
+ def __str__(self):
+ if self.fr:
+ return "Property %s of %s" % (str(self.seld), str(self.fr))
+ else:
+ return "Property %s" % str(self.seld)
class NProperty(ObjectSpecifier):
- # Subclasses *must* self baseclass attributes:
- # want is the type of this property
- # which is the property name of this property
-
- def __init__(self, fr = None):
- #try:
- # dummy = self.want
- #except:
- # self.want = 'prop'
- self.want = 'prop'
- ObjectSpecifier.__init__(self, self.want, 'prop',
- mktype(self.which), fr)
-
- def __repr__(self):
- rv = "Property(%s"%`self.seld.type`
- if self.fr:
- rv = rv + ", fr=%s" % `self.fr`
- if self.want != 'prop':
- rv = rv + ", want=%s" % `self.want`
- return rv + ")"
-
- def __str__(self):
- if self.fr:
- return "Property %s of %s" % (str(self.seld), str(self.fr))
- else:
- return "Property %s" % str(self.seld)
+ # Subclasses *must* self baseclass attributes:
+ # want is the type of this property
+ # which is the property name of this property
+
+ def __init__(self, fr = None):
+ #try:
+ # dummy = self.want
+ #except:
+ # self.want = 'prop'
+ self.want = 'prop'
+ ObjectSpecifier.__init__(self, self.want, 'prop',
+ mktype(self.which), fr)
+
+ def __repr__(self):
+ rv = "Property(%s"%`self.seld.type`
+ if self.fr:
+ rv = rv + ", fr=%s" % `self.fr`
+ if self.want != 'prop':
+ rv = rv + ", want=%s" % `self.want`
+ return rv + ")"
+
+ def __str__(self):
+ if self.fr:
+ return "Property %s of %s" % (str(self.seld), str(self.fr))
+ else:
+ return "Property %s" % str(self.seld)
class SelectableItem(ObjectSpecifier):
-
- def __init__(self, want, seld, fr = None):
- t = type(seld)
- if t == StringType:
- form = 'name'
- elif IsRange(seld):
- form = 'rang'
- elif IsComparison(seld) or IsLogical(seld):
- form = 'test'
- elif t == TupleType:
- # Breakout: specify both form and seld in a tuple
- # (if you want ID or rele or somesuch)
- form, seld = seld
- else:
- form = 'indx'
- ObjectSpecifier.__init__(self, want, form, seld, fr)
+
+ def __init__(self, want, seld, fr = None):
+ t = type(seld)
+ if t == StringType:
+ form = 'name'
+ elif IsRange(seld):
+ form = 'rang'
+ elif IsComparison(seld) or IsLogical(seld):
+ form = 'test'
+ elif t == TupleType:
+ # Breakout: specify both form and seld in a tuple
+ # (if you want ID or rele or somesuch)
+ form, seld = seld
+ else:
+ form = 'indx'
+ ObjectSpecifier.__init__(self, want, form, seld, fr)
class ComponentItem(SelectableItem):
- # Derived classes *must* set the *class attribute* 'want' to some constant
- # Also, dictionaries _propdict and _elemdict must be set to map property
- # and element names to the correct classes
-
- _propdict = {}
- _elemdict = {}
- def __init__(self, which, fr = None):
- SelectableItem.__init__(self, self.want, which, fr)
-
- def __repr__(self):
- if not self.fr:
- return "%s(%s)" % (self.__class__.__name__, `self.seld`)
- return "%s(%s, %s)" % (self.__class__.__name__, `self.seld`, `self.fr`)
-
- def __str__(self):
- seld = self.seld
- if type(seld) == StringType:
- ss = repr(seld)
- elif IsRange(seld):
- start, stop = seld.start, seld.stop
- if type(start) == InstanceType == type(stop) and \
- start.__class__ == self.__class__ == stop.__class__:
- ss = str(start.seld) + " thru " + str(stop.seld)
- else:
- ss = str(seld)
- else:
- ss = str(seld)
- s = "%s %s" % (self.__class__.__name__, ss)
- if self.fr: s = s + " of %s" % str(self.fr)
- return s
-
- def __getattr__(self, name):
- if self._elemdict.has_key(name):
- cls = self._elemdict[name]
- return DelayedComponentItem(cls, self)
- if self._propdict.has_key(name):
- cls = self._propdict[name]
- return cls(self)
- raise AttributeError, name
-
-
+ # Derived classes *must* set the *class attribute* 'want' to some constant
+ # Also, dictionaries _propdict and _elemdict must be set to map property
+ # and element names to the correct classes
+
+ _propdict = {}
+ _elemdict = {}
+ def __init__(self, which, fr = None):
+ SelectableItem.__init__(self, self.want, which, fr)
+
+ def __repr__(self):
+ if not self.fr:
+ return "%s(%s)" % (self.__class__.__name__, `self.seld`)
+ return "%s(%s, %s)" % (self.__class__.__name__, `self.seld`, `self.fr`)
+
+ def __str__(self):
+ seld = self.seld
+ if type(seld) == StringType:
+ ss = repr(seld)
+ elif IsRange(seld):
+ start, stop = seld.start, seld.stop
+ if type(start) == InstanceType == type(stop) and \
+ start.__class__ == self.__class__ == stop.__class__:
+ ss = str(start.seld) + " thru " + str(stop.seld)
+ else:
+ ss = str(seld)
+ else:
+ ss = str(seld)
+ s = "%s %s" % (self.__class__.__name__, ss)
+ if self.fr: s = s + " of %s" % str(self.fr)
+ return s
+
+ def __getattr__(self, name):
+ if self._elemdict.has_key(name):
+ cls = self._elemdict[name]
+ return DelayedComponentItem(cls, self)
+ if self._propdict.has_key(name):
+ cls = self._propdict[name]
+ return cls(self)
+ raise AttributeError, name
+
+
class DelayedComponentItem:
- def __init__(self, compclass, fr):
- self.compclass = compclass
- self.fr = fr
-
- def __call__(self, which):
- return self.compclass(which, self.fr)
-
- def __repr__(self):
- return "%s(???, %s)" % (self.__class__.__name__, `self.fr`)
-
- def __str__(self):
- return "selector for element %s of %s"%(self.__class__.__name__, str(self.fr))
+ def __init__(self, compclass, fr):
+ self.compclass = compclass
+ self.fr = fr
+
+ def __call__(self, which):
+ return self.compclass(which, self.fr)
+
+ def __repr__(self):
+ return "%s(???, %s)" % (self.__class__.__name__, `self.fr`)
+
+ def __str__(self):
+ return "selector for element %s of %s"%(self.__class__.__name__, str(self.fr))
template = """
class %s(ComponentItem): want = '%s'
diff --git a/Lib/plat-mac/applesingle.py b/Lib/plat-mac/applesingle.py
index f8be3d2..5b9c2dd 100644
--- a/Lib/plat-mac/applesingle.py
+++ b/Lib/plat-mac/applesingle.py
@@ -24,77 +24,77 @@ AS_RESOURCEFORK=2
AS_IGNORE=(3,4,5,6,8,9,10,11,12,13,14,15)
def decode(input, output, resonly=0):
- if type(input) == type(''):
- input = open(input, 'rb')
- # Should we also test for FSSpecs or FSRefs?
- header = input.read(AS_HEADER_LENGTH)
- try:
- magic, version, dummy, nentry = struct.unpack(AS_HEADER_FORMAT, header)
- except ValueError, arg:
- raise Error, "Unpack header error: %s"%arg
- if verbose:
- print 'Magic: 0x%8.8x'%magic
- print 'Version: 0x%8.8x'%version
- print 'Entries: %d'%nentry
- if magic != AS_MAGIC:
- raise Error, 'Unknown AppleSingle magic number 0x%8.8x'%magic
- if version != AS_VERSION:
- raise Error, 'Unknown AppleSingle version number 0x%8.8x'%version
- if nentry <= 0:
- raise Error, "AppleSingle file contains no forks"
- headers = [input.read(AS_ENTRY_LENGTH) for i in range(nentry)]
- didwork = 0
- for hdr in headers:
- try:
- id, offset, length = struct.unpack(AS_ENTRY_FORMAT, hdr)
- except ValueError, arg:
- raise Error, "Unpack entry error: %s"%arg
- if verbose:
- print 'Fork %d, offset %d, length %d'%(id, offset, length)
- input.seek(offset)
- if length == 0:
- data = ''
- else:
- data = input.read(length)
- if len(data) != length:
- raise Error, 'Short read: expected %d bytes got %d'%(length, len(data))
- if id == AS_DATAFORK:
- if verbose:
- print ' (data fork)'
- if not resonly:
- didwork = 1
- fp = open(output, 'wb')
- fp.write(data)
- fp.close()
- elif id == AS_RESOURCEFORK:
- didwork = 1
- if verbose:
- print ' (resource fork)'
- if resonly:
- fp = open(output, 'wb')
- else:
- fp = MacOS.openrf(output, 'wb')
- fp.write(data)
- fp.close()
- elif id in AS_IGNORE:
- if verbose:
- print ' (ignored)'
- else:
- raise Error, 'Unknown fork type %d'%id
- if not didwork:
- raise Error, 'No useful forks found'
+ if type(input) == type(''):
+ input = open(input, 'rb')
+ # Should we also test for FSSpecs or FSRefs?
+ header = input.read(AS_HEADER_LENGTH)
+ try:
+ magic, version, dummy, nentry = struct.unpack(AS_HEADER_FORMAT, header)
+ except ValueError, arg:
+ raise Error, "Unpack header error: %s"%arg
+ if verbose:
+ print 'Magic: 0x%8.8x'%magic
+ print 'Version: 0x%8.8x'%version
+ print 'Entries: %d'%nentry
+ if magic != AS_MAGIC:
+ raise Error, 'Unknown AppleSingle magic number 0x%8.8x'%magic
+ if version != AS_VERSION:
+ raise Error, 'Unknown AppleSingle version number 0x%8.8x'%version
+ if nentry <= 0:
+ raise Error, "AppleSingle file contains no forks"
+ headers = [input.read(AS_ENTRY_LENGTH) for i in range(nentry)]
+ didwork = 0
+ for hdr in headers:
+ try:
+ id, offset, length = struct.unpack(AS_ENTRY_FORMAT, hdr)
+ except ValueError, arg:
+ raise Error, "Unpack entry error: %s"%arg
+ if verbose:
+ print 'Fork %d, offset %d, length %d'%(id, offset, length)
+ input.seek(offset)
+ if length == 0:
+ data = ''
+ else:
+ data = input.read(length)
+ if len(data) != length:
+ raise Error, 'Short read: expected %d bytes got %d'%(length, len(data))
+ if id == AS_DATAFORK:
+ if verbose:
+ print ' (data fork)'
+ if not resonly:
+ didwork = 1
+ fp = open(output, 'wb')
+ fp.write(data)
+ fp.close()
+ elif id == AS_RESOURCEFORK:
+ didwork = 1
+ if verbose:
+ print ' (resource fork)'
+ if resonly:
+ fp = open(output, 'wb')
+ else:
+ fp = MacOS.openrf(output, 'wb')
+ fp.write(data)
+ fp.close()
+ elif id in AS_IGNORE:
+ if verbose:
+ print ' (ignored)'
+ else:
+ raise Error, 'Unknown fork type %d'%id
+ if not didwork:
+ raise Error, 'No useful forks found'
def _test():
- if len(sys.argv) < 3 or sys.argv[1] == '-r' and len(sys.argv) != 4:
- print 'Usage: applesingle.py [-r] applesinglefile decodedfile'
- sys.exit(1)
- if sys.argv[1] == '-r':
- resonly = 1
- del sys.argv[1]
- else:
- resonly = 0
- decode(sys.argv[1], sys.argv[2], resonly=resonly)
-
+ if len(sys.argv) < 3 or sys.argv[1] == '-r' and len(sys.argv) != 4:
+ print 'Usage: applesingle.py [-r] applesinglefile decodedfile'
+ sys.exit(1)
+ if sys.argv[1] == '-r':
+ resonly = 1
+ del sys.argv[1]
+ else:
+ resonly = 0
+ decode(sys.argv[1], sys.argv[2], resonly=resonly)
+
if __name__ == '__main__':
- _test()
- \ No newline at end of file
+ _test()
+ \ No newline at end of file
diff --git a/Lib/plat-mac/appletrawmain.py b/Lib/plat-mac/appletrawmain.py
index 4771f3c..88259c1 100644
--- a/Lib/plat-mac/appletrawmain.py
+++ b/Lib/plat-mac/appletrawmain.py
@@ -14,13 +14,13 @@ import marshal
# directory.
#
if not sys.argv or sys.argv[0][:1] == '-':
- # Insert our (guessed) name.
- _dir = os.path.split(sys.executable)[0] # removes "python"
- _dir = os.path.split(_dir)[0] # Removes "MacOS"
- _dir = os.path.join(_dir, 'Resources')
- sys.argv.insert(0, '__rawmain__')
+ # Insert our (guessed) name.
+ _dir = os.path.split(sys.executable)[0] # removes "python"
+ _dir = os.path.split(_dir)[0] # Removes "MacOS"
+ _dir = os.path.join(_dir, 'Resources')
+ sys.argv.insert(0, '__rawmain__')
else:
- _dir = os.path.split(sys.argv[0])[0]
+ _dir = os.path.split(sys.argv[0])[0]
#
# Add the Resources directory to the path. This is where files installed
# by BuildApplet.py with the --extra option show up, and if those files are
@@ -36,28 +36,28 @@ argvemulator.ArgvCollector().mainloop()
#
__file__ = os.path.join(_dir, '__main__.py')
if os.path.exists(__file__):
- #
- # Setup something resembling a normal environment and go.
- #
- sys.argv[0] = __file__
- del argvemulator, os, sys, _dir
- execfile(__file__)
+ #
+ # Setup something resembling a normal environment and go.
+ #
+ sys.argv[0] = __file__
+ del argvemulator, os, sys, _dir
+ execfile(__file__)
else:
- __file__ = os.path.join(_dir, '__main__.pyc')
- if os.path.exists(__file__):
- #
- # If we have only a .pyc file we read the code object from that
- #
- sys.argv[0] = __file__
- _fp = open(__file__, 'rb')
- _fp.read(8)
- __code__ = marshal.load(_fp)
- #
- # Again, we create an almost-normal environment (only __code__ is
- # funny) and go.
- #
- del argvemulator, os, sys, marshal, _dir, _fp
- exec __code__
- else:
- sys.stderr.write("%s: neither __main__.py nor __main__.pyc found\n"%sys.argv[0])
- sys.exit(1)
+ __file__ = os.path.join(_dir, '__main__.pyc')
+ if os.path.exists(__file__):
+ #
+ # If we have only a .pyc file we read the code object from that
+ #
+ sys.argv[0] = __file__
+ _fp = open(__file__, 'rb')
+ _fp.read(8)
+ __code__ = marshal.load(_fp)
+ #
+ # Again, we create an almost-normal environment (only __code__ is
+ # funny) and go.
+ #
+ del argvemulator, os, sys, marshal, _dir, _fp
+ exec __code__
+ else:
+ sys.stderr.write("%s: neither __main__.py nor __main__.pyc found\n"%sys.argv[0])
+ sys.exit(1)
diff --git a/Lib/plat-mac/appletrunner.py b/Lib/plat-mac/appletrunner.py
index adda7b1..8d46c2a 100755
--- a/Lib/plat-mac/appletrunner.py
+++ b/Lib/plat-mac/appletrunner.py
@@ -6,12 +6,12 @@
import os
import sys
for name in ["__rawmain__.py", "__rawmain__.pyc", "__main__.py", "__main__.pyc"]:
- realmain = os.path.join(os.path.dirname(os.path.dirname(sys.argv[0])),
- "Resources", name)
- if os.path.exists(realmain):
- break
+ realmain = os.path.join(os.path.dirname(os.path.dirname(sys.argv[0])),
+ "Resources", name)
+ if os.path.exists(realmain):
+ break
else:
- sys.stderr.write("%s: cannot find applet main program\n" % sys.argv[0])
- sys.exit(1)
+ sys.stderr.write("%s: cannot find applet main program\n" % sys.argv[0])
+ sys.exit(1)
sys.argv.insert(1, realmain)
os.execve(sys.executable, sys.argv, os.environ)
diff --git a/Lib/plat-mac/bgenlocations.py b/Lib/plat-mac/bgenlocations.py
index 896861e..418037d 100644
--- a/Lib/plat-mac/bgenlocations.py
+++ b/Lib/plat-mac/bgenlocations.py
@@ -12,12 +12,12 @@ Error = "bgenlocations.Error"
# Where bgen is. For unix-Python bgen isn't installed, so you have to refer to
# the source tree here.
if sys.platform == 'mac':
- # For MacPython we know where it is
- def _pardir(p): return os.path.split(p)[0]
- BGENDIR=os.path.join(sys.prefix, "Tools", "bgen", "bgen")
+ # For MacPython we know where it is
+ def _pardir(p): return os.path.split(p)[0]
+ BGENDIR=os.path.join(sys.prefix, "Tools", "bgen", "bgen")
else:
- # for unix-Python we don't know, please set it yourself.
- BGENDIR="/Users/jack/src/python/Tools/bgen/bgen"
+ # for unix-Python we don't know, please set it yourself.
+ BGENDIR="/Users/jack/src/python/Tools/bgen/bgen"
#
# Where to find the Universal Header include files. If you have CodeWarrior
@@ -26,9 +26,9 @@ else:
# end of lines, so don't worry about that.
#
if sys.platform == 'mac':
- _MWERKSDIR="Sap:Applications (Mac OS 9):Metrowerks CodeWarrior 7.0:Metrowerks CodeWarrior"
+ _MWERKSDIR="Sap:Applications (Mac OS 9):Metrowerks CodeWarrior 7.0:Metrowerks CodeWarrior"
else:
- _MWERKSDIR="/Volumes/Sap/Applications (Mac OS 9)/Metrowerks CodeWarrior 7.0/Metrowerks CodeWarrior/"
+ _MWERKSDIR="/Volumes/Sap/Applications (Mac OS 9)/Metrowerks CodeWarrior 7.0/Metrowerks CodeWarrior/"
INCLUDEDIR=os.path.join(_MWERKSDIR, "MacOS Support", "Universal", "Interfaces", "CIncludes")
#
@@ -37,25 +37,25 @@ INCLUDEDIR=os.path.join(_MWERKSDIR, "MacOS Support", "Universal", "Interfaces",
# your source directory, not your installed directory.
#
if sys.platform == 'mac':
- TOOLBOXDIR=os.path.join(sys.prefix, "Lib", "plat-mac", "Carbon")
+ TOOLBOXDIR=os.path.join(sys.prefix, "Lib", "plat-mac", "Carbon")
else:
- TOOLBOXDIR="/Users/jack/src/python/Lib/plat-mac/Carbon"
+ TOOLBOXDIR="/Users/jack/src/python/Lib/plat-mac/Carbon"
# Creator for C files:
CREATOR="CWIE"
if not os.path.exists(BGENDIR):
- raise Error, "Please fix bgenlocations.py, BGENDIR does not exist: %s" % BGENDIR
+ raise Error, "Please fix bgenlocations.py, BGENDIR does not exist: %s" % BGENDIR
if not os.path.exists(INCLUDEDIR):
- raise Error, "Please fix bgenlocations.py, INCLUDEDIR does not exist: %s" % INCLUDEDIR
+ raise Error, "Please fix bgenlocations.py, INCLUDEDIR does not exist: %s" % INCLUDEDIR
if not os.path.exists(TOOLBOXDIR):
- raise Error, "Please fix bgenlocations.py, TOOLBOXDIR does not exist: %s" % TOOLBOXDIR
-
+ raise Error, "Please fix bgenlocations.py, TOOLBOXDIR does not exist: %s" % TOOLBOXDIR
+
# Sigh, due to the way these are used make sure they end with : or /.
if BGENDIR[-1] != os.sep:
- BGENDIR = BGENDIR + os.sep
+ BGENDIR = BGENDIR + os.sep
if INCLUDEDIR[-1] != os.sep:
- INCLUDEDIR = INCLUDEDIR + os.sep
+ INCLUDEDIR = INCLUDEDIR + os.sep
if TOOLBOXDIR[-1] != os.sep:
- TOOLBOXDIR = TOOLBOXDIR + os.sep
-
+ TOOLBOXDIR = TOOLBOXDIR + os.sep
+
diff --git a/Lib/plat-mac/buildtools.py b/Lib/plat-mac/buildtools.py
index 56f23a4..6e6396d 100644
--- a/Lib/plat-mac/buildtools.py
+++ b/Lib/plat-mac/buildtools.py
@@ -42,375 +42,375 @@ WRITE = 2
RESOURCE_FORK_NAME=Carbon.File.FSGetResourceForkName()
def findtemplate(template=None):
- """Locate the applet template along sys.path"""
- if MacOS.runtimemodel == 'macho':
- return None
- if not template:
- template=TEMPLATE
- for p in sys.path:
- file = os.path.join(p, template)
- try:
- file, d1, d2 = Carbon.File.FSResolveAliasFile(file, 1)
- break
- except (Carbon.File.Error, ValueError):
- continue
- else:
- raise BuildError, "Template %s not found on sys.path" % `template`
- file = file.as_pathname()
- return file
-
+ """Locate the applet template along sys.path"""
+ if MacOS.runtimemodel == 'macho':
+ return None
+ if not template:
+ template=TEMPLATE
+ for p in sys.path:
+ file = os.path.join(p, template)
+ try:
+ file, d1, d2 = Carbon.File.FSResolveAliasFile(file, 1)
+ break
+ except (Carbon.File.Error, ValueError):
+ continue
+ else:
+ raise BuildError, "Template %s not found on sys.path" % `template`
+ file = file.as_pathname()
+ return file
+
def process(template, filename, destname, copy_codefragment=0,
- rsrcname=None, others=[], raw=0, progress="default"):
-
- if progress == "default":
- progress = EasyDialogs.ProgressBar("Processing %s..."%os.path.split(filename)[1], 120)
- progress.label("Compiling...")
- progress.inc(0)
- # check for the script name being longer than 32 chars. This may trigger a bug
- # on OSX that can destroy your sourcefile.
- if '#' in os.path.split(filename)[1]:
- raise BuildError, "BuildApplet could destroy your sourcefile on OSX, please rename: %s" % filename
- # Read the source and compile it
- # (there's no point overwriting the destination if it has a syntax error)
-
- fp = open(filename, 'rU')
- text = fp.read()
- fp.close()
- try:
- code = compile(text + '\n', filename, "exec")
- except SyntaxError, arg:
- raise BuildError, "Syntax error in script %s: %s" % (filename, arg)
- except EOFError:
- raise BuildError, "End-of-file in script %s" % (filename,)
-
- # Set the destination file name. Note that basename
- # does contain the whole filepath, only a .py is stripped.
-
- if string.lower(filename[-3:]) == ".py":
- basename = filename[:-3]
- if MacOS.runtimemodel != 'macho' and not destname:
- destname = basename
- else:
- basename = filename
-
- if not destname:
- if MacOS.runtimemodel == 'macho':
- destname = basename + '.app'
- else:
- destname = basename + '.applet'
- if not rsrcname:
- rsrcname = basename + '.rsrc'
-
- # Try removing the output file. This fails in MachO, but it should
- # do any harm.
- try:
- os.remove(destname)
- except os.error:
- pass
- process_common(template, progress, code, rsrcname, destname, 0,
- copy_codefragment, raw, others, filename)
-
+ rsrcname=None, others=[], raw=0, progress="default"):
+
+ if progress == "default":
+ progress = EasyDialogs.ProgressBar("Processing %s..."%os.path.split(filename)[1], 120)
+ progress.label("Compiling...")
+ progress.inc(0)
+ # check for the script name being longer than 32 chars. This may trigger a bug
+ # on OSX that can destroy your sourcefile.
+ if '#' in os.path.split(filename)[1]:
+ raise BuildError, "BuildApplet could destroy your sourcefile on OSX, please rename: %s" % filename
+ # Read the source and compile it
+ # (there's no point overwriting the destination if it has a syntax error)
+
+ fp = open(filename, 'rU')
+ text = fp.read()
+ fp.close()
+ try:
+ code = compile(text + '\n', filename, "exec")
+ except SyntaxError, arg:
+ raise BuildError, "Syntax error in script %s: %s" % (filename, arg)
+ except EOFError:
+ raise BuildError, "End-of-file in script %s" % (filename,)
+
+ # Set the destination file name. Note that basename
+ # does contain the whole filepath, only a .py is stripped.
+
+ if string.lower(filename[-3:]) == ".py":
+ basename = filename[:-3]
+ if MacOS.runtimemodel != 'macho' and not destname:
+ destname = basename
+ else:
+ basename = filename
+
+ if not destname:
+ if MacOS.runtimemodel == 'macho':
+ destname = basename + '.app'
+ else:
+ destname = basename + '.applet'
+ if not rsrcname:
+ rsrcname = basename + '.rsrc'
+
+ # Try removing the output file. This fails in MachO, but it should
+ # do any harm.
+ try:
+ os.remove(destname)
+ except os.error:
+ pass
+ process_common(template, progress, code, rsrcname, destname, 0,
+ copy_codefragment, raw, others, filename)
+
def update(template, filename, output):
- if MacOS.runtimemodel == 'macho':
- raise BuildError, "No updating yet for MachO applets"
- if progress:
- progress = EasyDialogs.ProgressBar("Updating %s..."%os.path.split(filename)[1], 120)
- else:
- progress = None
- if not output:
- output = filename + ' (updated)'
-
- # Try removing the output file
- try:
- os.remove(output)
- except os.error:
- pass
- process_common(template, progress, None, filename, output, 1, 1)
+ if MacOS.runtimemodel == 'macho':
+ raise BuildError, "No updating yet for MachO applets"
+ if progress:
+ progress = EasyDialogs.ProgressBar("Updating %s..."%os.path.split(filename)[1], 120)
+ else:
+ progress = None
+ if not output:
+ output = filename + ' (updated)'
+
+ # Try removing the output file
+ try:
+ os.remove(output)
+ except os.error:
+ pass
+ process_common(template, progress, None, filename, output, 1, 1)
def process_common(template, progress, code, rsrcname, destname, is_update,
- copy_codefragment, raw=0, others=[], filename=None):
- if MacOS.runtimemodel == 'macho':
- return process_common_macho(template, progress, code, rsrcname, destname,
- is_update, raw, others, filename)
- if others:
- raise BuildError, "Extra files only allowed for MachoPython applets"
- # Create FSSpecs for the various files
- template_fsr, d1, d2 = Carbon.File.FSResolveAliasFile(template, 1)
- template = template_fsr.as_pathname()
-
- # Copy data (not resources, yet) from the template
- if progress:
- progress.label("Copy data fork...")
- progress.set(10)
-
- if copy_codefragment:
- tmpl = open(template, "rb")
- dest = open(destname, "wb")
- data = tmpl.read()
- if data:
- dest.write(data)
- dest.close()
- tmpl.close()
- del dest
- del tmpl
-
- # Open the output resource fork
-
- if progress:
- progress.label("Copy resources...")
- progress.set(20)
- try:
- output = Res.FSOpenResourceFile(destname, RESOURCE_FORK_NAME, WRITE)
- except MacOS.Error:
- destdir, destfile = os.path.split(destname)
- Res.FSCreateResourceFile(destdir, unicode(destfile), RESOURCE_FORK_NAME)
- output = Res.FSOpenResourceFile(destname, RESOURCE_FORK_NAME, WRITE)
-
- # Copy the resources from the target specific resource template, if any
- typesfound, ownertype = [], None
- try:
- input = Res.FSOpenResourceFile(rsrcname, RESOURCE_FORK_NAME, READ)
- except (MacOS.Error, ValueError):
- pass
- if progress:
- progress.inc(50)
- else:
- if is_update:
- skip_oldfile = ['cfrg']
- else:
- skip_oldfile = []
- typesfound, ownertype = copyres(input, output, skip_oldfile, 0, progress)
- Res.CloseResFile(input)
-
- # Check which resource-types we should not copy from the template
- skiptypes = []
- if 'vers' in typesfound: skiptypes.append('vers')
- if 'SIZE' in typesfound: skiptypes.append('SIZE')
- if 'BNDL' in typesfound: skiptypes = skiptypes + ['BNDL', 'FREF', 'icl4',
- 'icl8', 'ics4', 'ics8', 'ICN#', 'ics#']
- if not copy_codefragment:
- skiptypes.append('cfrg')
-## skipowner = (ownertype <> None)
-
- # Copy the resources from the template
-
- input = Res.FSOpenResourceFile(template, RESOURCE_FORK_NAME, READ)
- dummy, tmplowner = copyres(input, output, skiptypes, 1, progress)
-
- Res.CloseResFile(input)
-## if ownertype == None:
-## raise BuildError, "No owner resource found in either resource file or template"
- # Make sure we're manipulating the output resource file now
-
- Res.UseResFile(output)
+ copy_codefragment, raw=0, others=[], filename=None):
+ if MacOS.runtimemodel == 'macho':
+ return process_common_macho(template, progress, code, rsrcname, destname,
+ is_update, raw, others, filename)
+ if others:
+ raise BuildError, "Extra files only allowed for MachoPython applets"
+ # Create FSSpecs for the various files
+ template_fsr, d1, d2 = Carbon.File.FSResolveAliasFile(template, 1)
+ template = template_fsr.as_pathname()
+
+ # Copy data (not resources, yet) from the template
+ if progress:
+ progress.label("Copy data fork...")
+ progress.set(10)
+
+ if copy_codefragment:
+ tmpl = open(template, "rb")
+ dest = open(destname, "wb")
+ data = tmpl.read()
+ if data:
+ dest.write(data)
+ dest.close()
+ tmpl.close()
+ del dest
+ del tmpl
+
+ # Open the output resource fork
+
+ if progress:
+ progress.label("Copy resources...")
+ progress.set(20)
+ try:
+ output = Res.FSOpenResourceFile(destname, RESOURCE_FORK_NAME, WRITE)
+ except MacOS.Error:
+ destdir, destfile = os.path.split(destname)
+ Res.FSCreateResourceFile(destdir, unicode(destfile), RESOURCE_FORK_NAME)
+ output = Res.FSOpenResourceFile(destname, RESOURCE_FORK_NAME, WRITE)
+
+ # Copy the resources from the target specific resource template, if any
+ typesfound, ownertype = [], None
+ try:
+ input = Res.FSOpenResourceFile(rsrcname, RESOURCE_FORK_NAME, READ)
+ except (MacOS.Error, ValueError):
+ pass
+ if progress:
+ progress.inc(50)
+ else:
+ if is_update:
+ skip_oldfile = ['cfrg']
+ else:
+ skip_oldfile = []
+ typesfound, ownertype = copyres(input, output, skip_oldfile, 0, progress)
+ Res.CloseResFile(input)
+
+ # Check which resource-types we should not copy from the template
+ skiptypes = []
+ if 'vers' in typesfound: skiptypes.append('vers')
+ if 'SIZE' in typesfound: skiptypes.append('SIZE')
+ if 'BNDL' in typesfound: skiptypes = skiptypes + ['BNDL', 'FREF', 'icl4',
+ 'icl8', 'ics4', 'ics8', 'ICN#', 'ics#']
+ if not copy_codefragment:
+ skiptypes.append('cfrg')
+## skipowner = (ownertype <> None)
+
+ # Copy the resources from the template
+
+ input = Res.FSOpenResourceFile(template, RESOURCE_FORK_NAME, READ)
+ dummy, tmplowner = copyres(input, output, skiptypes, 1, progress)
+
+ Res.CloseResFile(input)
+## if ownertype == None:
+## raise BuildError, "No owner resource found in either resource file or template"
+ # Make sure we're manipulating the output resource file now
+
+ Res.UseResFile(output)
- if ownertype == None:
- # No owner resource in the template. We have skipped the
- # Python owner resource, so we have to add our own. The relevant
- # bundle stuff is already included in the interpret/applet template.
- newres = Res.Resource('\0')
- newres.AddResource(DEFAULT_APPLET_CREATOR, 0, "Owner resource")
- ownertype = DEFAULT_APPLET_CREATOR
-
- if code:
- # Delete any existing 'PYC ' resource named __main__
-
- try:
- res = Res.Get1NamedResource(RESTYPE, RESNAME)
- res.RemoveResource()
- except Res.Error:
- pass
-
- # Create the raw data for the resource from the code object
- if progress:
- progress.label("Write PYC resource...")
- progress.set(120)
-
- data = marshal.dumps(code)
- del code
- data = (MAGIC + '\0\0\0\0') + data
-
- # Create the resource and write it
-
- id = 0
- while id < 128:
- id = Res.Unique1ID(RESTYPE)
- res = Res.Resource(data)
- res.AddResource(RESTYPE, id, RESNAME)
- attrs = res.GetResAttrs()
- attrs = attrs | 0x04 # set preload
- res.SetResAttrs(attrs)
- res.WriteResource()
- res.ReleaseResource()
-
- # Close the output file
-
- Res.CloseResFile(output)
-
- # Now set the creator, type and bundle bit of the destination.
- # Done with FSSpec's, FSRef FInfo isn't good enough yet (2.3a1+)
- dest_fss = Carbon.File.FSSpec(destname)
- dest_finfo = dest_fss.FSpGetFInfo()
- dest_finfo.Creator = ownertype
- dest_finfo.Type = 'APPL'
- dest_finfo.Flags = dest_finfo.Flags | Carbon.Files.kHasBundle | Carbon.Files.kIsShared
- dest_finfo.Flags = dest_finfo.Flags & ~Carbon.Files.kHasBeenInited
- dest_fss.FSpSetFInfo(dest_finfo)
-
- macostools.touched(destname)
- if progress:
- progress.label("Done.")
- progress.inc(0)
+ if ownertype == None:
+ # No owner resource in the template. We have skipped the
+ # Python owner resource, so we have to add our own. The relevant
+ # bundle stuff is already included in the interpret/applet template.
+ newres = Res.Resource('\0')
+ newres.AddResource(DEFAULT_APPLET_CREATOR, 0, "Owner resource")
+ ownertype = DEFAULT_APPLET_CREATOR
+
+ if code:
+ # Delete any existing 'PYC ' resource named __main__
+
+ try:
+ res = Res.Get1NamedResource(RESTYPE, RESNAME)
+ res.RemoveResource()
+ except Res.Error:
+ pass
+
+ # Create the raw data for the resource from the code object
+ if progress:
+ progress.label("Write PYC resource...")
+ progress.set(120)
+
+ data = marshal.dumps(code)
+ del code
+ data = (MAGIC + '\0\0\0\0') + data
+
+ # Create the resource and write it
+
+ id = 0
+ while id < 128:
+ id = Res.Unique1ID(RESTYPE)
+ res = Res.Resource(data)
+ res.AddResource(RESTYPE, id, RESNAME)
+ attrs = res.GetResAttrs()
+ attrs = attrs | 0x04 # set preload
+ res.SetResAttrs(attrs)
+ res.WriteResource()
+ res.ReleaseResource()
+
+ # Close the output file
+
+ Res.CloseResFile(output)
+
+ # Now set the creator, type and bundle bit of the destination.
+ # Done with FSSpec's, FSRef FInfo isn't good enough yet (2.3a1+)
+ dest_fss = Carbon.File.FSSpec(destname)
+ dest_finfo = dest_fss.FSpGetFInfo()
+ dest_finfo.Creator = ownertype
+ dest_finfo.Type = 'APPL'
+ dest_finfo.Flags = dest_finfo.Flags | Carbon.Files.kHasBundle | Carbon.Files.kIsShared
+ dest_finfo.Flags = dest_finfo.Flags & ~Carbon.Files.kHasBeenInited
+ dest_fss.FSpSetFInfo(dest_finfo)
+
+ macostools.touched(destname)
+ if progress:
+ progress.label("Done.")
+ progress.inc(0)
def process_common_macho(template, progress, code, rsrcname, destname, is_update,
- raw=0, others=[], filename=None):
- # Check that we have a filename
- if filename is None:
- raise BuildError, "Need source filename on MacOSX"
- # First make sure the name ends in ".app"
- if destname[-4:] != '.app':
- destname = destname + '.app'
- # Now deduce the short name
- destdir, shortname = os.path.split(destname)
- if shortname[-4:] == '.app':
- # Strip the .app suffix
- shortname = shortname[:-4]
- # And deduce the .plist and .icns names
- plistname = None
- icnsname = None
- if rsrcname and rsrcname[-5:] == '.rsrc':
- tmp = rsrcname[:-5]
- plistname = tmp + '.plist'
- if os.path.exists(plistname):
- icnsname = tmp + '.icns'
- if not os.path.exists(icnsname):
- icnsname = None
- else:
- plistname = None
- if not os.path.exists(rsrcname):
- rsrcname = None
- if progress:
- progress.label('Creating bundle...')
- import bundlebuilder
- builder = bundlebuilder.AppBuilder(verbosity=0)
- builder.mainprogram = filename
- builder.builddir = destdir
- builder.name = shortname
- if rsrcname:
- realrsrcname = macresource.resource_pathname(rsrcname)
- builder.files.append((realrsrcname,
- os.path.join('Contents/Resources', os.path.basename(rsrcname))))
- for o in others:
- if type(o) == str:
- builder.resources.append(o)
- else:
- builder.files.append(o)
- if plistname:
- import plistlib
- builder.plist = plistlib.Plist.fromFile(plistname)
- if icnsname:
- builder.iconfile = icnsname
- if not raw:
- builder.argv_emulation = 1
- builder.setup()
- builder.build()
- if progress:
- progress.label('Done.')
- progress.inc(0)
-
-## macostools.touched(dest_fss)
+ raw=0, others=[], filename=None):
+ # Check that we have a filename
+ if filename is None:
+ raise BuildError, "Need source filename on MacOSX"
+ # First make sure the name ends in ".app"
+ if destname[-4:] != '.app':
+ destname = destname + '.app'
+ # Now deduce the short name
+ destdir, shortname = os.path.split(destname)
+ if shortname[-4:] == '.app':
+ # Strip the .app suffix
+ shortname = shortname[:-4]
+ # And deduce the .plist and .icns names
+ plistname = None
+ icnsname = None
+ if rsrcname and rsrcname[-5:] == '.rsrc':
+ tmp = rsrcname[:-5]
+ plistname = tmp + '.plist'
+ if os.path.exists(plistname):
+ icnsname = tmp + '.icns'
+ if not os.path.exists(icnsname):
+ icnsname = None
+ else:
+ plistname = None
+ if not os.path.exists(rsrcname):
+ rsrcname = None
+ if progress:
+ progress.label('Creating bundle...')
+ import bundlebuilder
+ builder = bundlebuilder.AppBuilder(verbosity=0)
+ builder.mainprogram = filename
+ builder.builddir = destdir
+ builder.name = shortname
+ if rsrcname:
+ realrsrcname = macresource.resource_pathname(rsrcname)
+ builder.files.append((realrsrcname,
+ os.path.join('Contents/Resources', os.path.basename(rsrcname))))
+ for o in others:
+ if type(o) == str:
+ builder.resources.append(o)
+ else:
+ builder.files.append(o)
+ if plistname:
+ import plistlib
+ builder.plist = plistlib.Plist.fromFile(plistname)
+ if icnsname:
+ builder.iconfile = icnsname
+ if not raw:
+ builder.argv_emulation = 1
+ builder.setup()
+ builder.build()
+ if progress:
+ progress.label('Done.')
+ progress.inc(0)
+
+## macostools.touched(dest_fss)
# Copy resources between two resource file descriptors.
# skip a resource named '__main__' or (if skipowner is set) with ID zero.
# Also skip resources with a type listed in skiptypes.
#
def copyres(input, output, skiptypes, skipowner, progress=None):
- ctor = None
- alltypes = []
- Res.UseResFile(input)
- ntypes = Res.Count1Types()
- progress_type_inc = 50/ntypes
- for itype in range(1, 1+ntypes):
- type = Res.Get1IndType(itype)
- if type in skiptypes:
- continue
- alltypes.append(type)
- nresources = Res.Count1Resources(type)
- progress_cur_inc = progress_type_inc/nresources
- for ires in range(1, 1+nresources):
- res = Res.Get1IndResource(type, ires)
- id, type, name = res.GetResInfo()
- lcname = string.lower(name)
+ ctor = None
+ alltypes = []
+ Res.UseResFile(input)
+ ntypes = Res.Count1Types()
+ progress_type_inc = 50/ntypes
+ for itype in range(1, 1+ntypes):
+ type = Res.Get1IndType(itype)
+ if type in skiptypes:
+ continue
+ alltypes.append(type)
+ nresources = Res.Count1Resources(type)
+ progress_cur_inc = progress_type_inc/nresources
+ for ires in range(1, 1+nresources):
+ res = Res.Get1IndResource(type, ires)
+ id, type, name = res.GetResInfo()
+ lcname = string.lower(name)
- if lcname == OWNERNAME and id == 0:
- if skipowner:
- continue # Skip this one
- else:
- ctor = type
- size = res.size
- attrs = res.GetResAttrs()
- if progress:
- progress.label("Copy %s %d %s"%(type, id, name))
- progress.inc(progress_cur_inc)
- res.LoadResource()
- res.DetachResource()
- Res.UseResFile(output)
- try:
- res2 = Res.Get1Resource(type, id)
- except MacOS.Error:
- res2 = None
- if res2:
- if progress:
- progress.label("Overwrite %s %d %s"%(type, id, name))
- progress.inc(0)
- res2.RemoveResource()
- res.AddResource(type, id, name)
- res.WriteResource()
- attrs = attrs | res.GetResAttrs()
- res.SetResAttrs(attrs)
- Res.UseResFile(input)
- return alltypes, ctor
+ if lcname == OWNERNAME and id == 0:
+ if skipowner:
+ continue # Skip this one
+ else:
+ ctor = type
+ size = res.size
+ attrs = res.GetResAttrs()
+ if progress:
+ progress.label("Copy %s %d %s"%(type, id, name))
+ progress.inc(progress_cur_inc)
+ res.LoadResource()
+ res.DetachResource()
+ Res.UseResFile(output)
+ try:
+ res2 = Res.Get1Resource(type, id)
+ except MacOS.Error:
+ res2 = None
+ if res2:
+ if progress:
+ progress.label("Overwrite %s %d %s"%(type, id, name))
+ progress.inc(0)
+ res2.RemoveResource()
+ res.AddResource(type, id, name)
+ res.WriteResource()
+ attrs = attrs | res.GetResAttrs()
+ res.SetResAttrs(attrs)
+ Res.UseResFile(input)
+ return alltypes, ctor
def copyapptree(srctree, dsttree, exceptlist=[], progress=None):
- names = []
- if os.path.exists(dsttree):
- shutil.rmtree(dsttree)
- os.mkdir(dsttree)
- todo = os.listdir(srctree)
- while todo:
- this, todo = todo[0], todo[1:]
- if this in exceptlist:
- continue
- thispath = os.path.join(srctree, this)
- if os.path.isdir(thispath):
- thiscontent = os.listdir(thispath)
- for t in thiscontent:
- todo.append(os.path.join(this, t))
- names.append(this)
- for this in names:
- srcpath = os.path.join(srctree, this)
- dstpath = os.path.join(dsttree, this)
- if os.path.isdir(srcpath):
- os.mkdir(dstpath)
- elif os.path.islink(srcpath):
- endpoint = os.readlink(srcpath)
- os.symlink(endpoint, dstpath)
- else:
- if progress:
- progress.label('Copy '+this)
- progress.inc(0)
- shutil.copy2(srcpath, dstpath)
-
+ names = []
+ if os.path.exists(dsttree):
+ shutil.rmtree(dsttree)
+ os.mkdir(dsttree)
+ todo = os.listdir(srctree)
+ while todo:
+ this, todo = todo[0], todo[1:]
+ if this in exceptlist:
+ continue
+ thispath = os.path.join(srctree, this)
+ if os.path.isdir(thispath):
+ thiscontent = os.listdir(thispath)
+ for t in thiscontent:
+ todo.append(os.path.join(this, t))
+ names.append(this)
+ for this in names:
+ srcpath = os.path.join(srctree, this)
+ dstpath = os.path.join(dsttree, this)
+ if os.path.isdir(srcpath):
+ os.mkdir(dstpath)
+ elif os.path.islink(srcpath):
+ endpoint = os.readlink(srcpath)
+ os.symlink(endpoint, dstpath)
+ else:
+ if progress:
+ progress.label('Copy '+this)
+ progress.inc(0)
+ shutil.copy2(srcpath, dstpath)
+
def writepycfile(codeobject, cfile):
- import marshal
- fc = open(cfile, 'wb')
- fc.write('\0\0\0\0') # MAGIC placeholder, written later
- fc.write('\0\0\0\0') # Timestap placeholder, not needed
- marshal.dump(codeobject, fc)
- fc.flush()
- fc.seek(0, 0)
- fc.write(MAGIC)
- fc.close()
+ import marshal
+ fc = open(cfile, 'wb')
+ fc.write('\0\0\0\0') # MAGIC placeholder, written later
+ fc.write('\0\0\0\0') # Timestap placeholder, not needed
+ marshal.dump(codeobject, fc)
+ fc.flush()
+ fc.seek(0, 0)
+ fc.write(MAGIC)
+ fc.close()
diff --git a/Lib/plat-mac/bundlebuilder.py b/Lib/plat-mac/bundlebuilder.py
index 28ccbd7..26c3886 100755
--- a/Lib/plat-mac/bundlebuilder.py
+++ b/Lib/plat-mac/bundlebuilder.py
@@ -42,173 +42,173 @@ class BundleBuilderError(Exception): pass
class Defaults:
- """Class attributes that don't start with an underscore and are
- not functions or classmethods are (deep)copied to self.__dict__.
- This allows for mutable default values.
- """
-
- def __init__(self, **kwargs):
- defaults = self._getDefaults()
- defaults.update(kwargs)
- self.__dict__.update(defaults)
-
- def _getDefaults(cls):
- defaults = {}
- for name, value in cls.__dict__.items():
- if name[0] != "_" and not isinstance(value,
- (function, classmethod)):
- defaults[name] = deepcopy(value)
- for base in cls.__bases__:
- if hasattr(base, "_getDefaults"):
- defaults.update(base._getDefaults())
- return defaults
- _getDefaults = classmethod(_getDefaults)
+ """Class attributes that don't start with an underscore and are
+ not functions or classmethods are (deep)copied to self.__dict__.
+ This allows for mutable default values.
+ """
+
+ def __init__(self, **kwargs):
+ defaults = self._getDefaults()
+ defaults.update(kwargs)
+ self.__dict__.update(defaults)
+
+ def _getDefaults(cls):
+ defaults = {}
+ for name, value in cls.__dict__.items():
+ if name[0] != "_" and not isinstance(value,
+ (function, classmethod)):
+ defaults[name] = deepcopy(value)
+ for base in cls.__bases__:
+ if hasattr(base, "_getDefaults"):
+ defaults.update(base._getDefaults())
+ return defaults
+ _getDefaults = classmethod(_getDefaults)
class BundleBuilder(Defaults):
- """BundleBuilder is a barebones class for assembling bundles. It
- knows nothing about executables or icons, it only copies files
- and creates the PkgInfo and Info.plist files.
- """
-
- # (Note that Defaults.__init__ (deep)copies these values to
- # instance variables. Mutable defaults are therefore safe.)
-
- # Name of the bundle, with or without extension.
- name = None
-
- # The property list ("plist")
- plist = Plist(CFBundleDevelopmentRegion = "English",
- CFBundleInfoDictionaryVersion = "6.0")
-
- # The type of the bundle.
- type = "BNDL"
- # The creator code of the bundle.
- creator = None
-
- # List of files that have to be copied to <bundle>/Contents/Resources.
- resources = []
-
- # List of (src, dest) tuples; dest should be a path relative to the bundle
- # (eg. "Contents/Resources/MyStuff/SomeFile.ext).
- files = []
-
- # List of shared libraries (dylibs, Frameworks) to bundle with the app
- # will be placed in Contents/Frameworks
- libs = []
-
- # Directory where the bundle will be assembled.
- builddir = "build"
-
- # Make symlinks instead copying files. This is handy during debugging, but
- # makes the bundle non-distributable.
- symlink = 0
-
- # Verbosity level.
- verbosity = 1
-
- def setup(self):
- # XXX rethink self.name munging, this is brittle.
- self.name, ext = os.path.splitext(self.name)
- if not ext:
- ext = ".bundle"
- bundleextension = ext
- # misc (derived) attributes
- self.bundlepath = pathjoin(self.builddir, self.name + bundleextension)
-
- plist = self.plist
- plist.CFBundleName = self.name
- plist.CFBundlePackageType = self.type
- if self.creator is None:
- if hasattr(plist, "CFBundleSignature"):
- self.creator = plist.CFBundleSignature
- else:
- self.creator = "????"
- plist.CFBundleSignature = self.creator
- if not hasattr(plist, "CFBundleIdentifier"):
- plist.CFBundleIdentifier = self.name
-
- def build(self):
- """Build the bundle."""
- builddir = self.builddir
- if builddir and not os.path.exists(builddir):
- os.mkdir(builddir)
- self.message("Building %s" % repr(self.bundlepath), 1)
- if os.path.exists(self.bundlepath):
- shutil.rmtree(self.bundlepath)
- os.mkdir(self.bundlepath)
- self.preProcess()
- self._copyFiles()
- self._addMetaFiles()
- self.postProcess()
- self.message("Done.", 1)
-
- def preProcess(self):
- """Hook for subclasses."""
- pass
- def postProcess(self):
- """Hook for subclasses."""
- pass
-
- def _addMetaFiles(self):
- contents = pathjoin(self.bundlepath, "Contents")
- makedirs(contents)
- #
- # Write Contents/PkgInfo
- assert len(self.type) == len(self.creator) == 4, \
- "type and creator must be 4-byte strings."
- pkginfo = pathjoin(contents, "PkgInfo")
- f = open(pkginfo, "wb")
- f.write(self.type + self.creator)
- f.close()
- #
- # Write Contents/Info.plist
- infoplist = pathjoin(contents, "Info.plist")
- self.plist.write(infoplist)
-
- def _copyFiles(self):
- files = self.files[:]
- for path in self.resources:
- files.append((path, pathjoin("Contents", "Resources",
- os.path.basename(path))))
- for path in self.libs:
- files.append((path, pathjoin("Contents", "Frameworks",
- os.path.basename(path))))
- if self.symlink:
- self.message("Making symbolic links", 1)
- msg = "Making symlink from"
- else:
- self.message("Copying files", 1)
- msg = "Copying"
- files.sort()
- for src, dst in files:
- if os.path.isdir(src):
- self.message("%s %s/ to %s/" % (msg, src, dst), 2)
- else:
- self.message("%s %s to %s" % (msg, src, dst), 2)
- dst = pathjoin(self.bundlepath, dst)
- if self.symlink:
- symlink(src, dst, mkdirs=1)
- else:
- copy(src, dst, mkdirs=1)
-
- def message(self, msg, level=0):
- if level <= self.verbosity:
- indent = ""
- if level > 1:
- indent = (level - 1) * " "
- sys.stderr.write(indent + msg + "\n")
-
- def report(self):
- # XXX something decent
- pass
+ """BundleBuilder is a barebones class for assembling bundles. It
+ knows nothing about executables or icons, it only copies files
+ and creates the PkgInfo and Info.plist files.
+ """
+
+ # (Note that Defaults.__init__ (deep)copies these values to
+ # instance variables. Mutable defaults are therefore safe.)
+
+ # Name of the bundle, with or without extension.
+ name = None
+
+ # The property list ("plist")
+ plist = Plist(CFBundleDevelopmentRegion = "English",
+ CFBundleInfoDictionaryVersion = "6.0")
+
+ # The type of the bundle.
+ type = "BNDL"
+ # The creator code of the bundle.
+ creator = None
+
+ # List of files that have to be copied to <bundle>/Contents/Resources.
+ resources = []
+
+ # List of (src, dest) tuples; dest should be a path relative to the bundle
+ # (eg. "Contents/Resources/MyStuff/SomeFile.ext).
+ files = []
+
+ # List of shared libraries (dylibs, Frameworks) to bundle with the app
+ # will be placed in Contents/Frameworks
+ libs = []
+
+ # Directory where the bundle will be assembled.
+ builddir = "build"
+
+ # Make symlinks instead copying files. This is handy during debugging, but
+ # makes the bundle non-distributable.
+ symlink = 0
+
+ # Verbosity level.
+ verbosity = 1
+
+ def setup(self):
+ # XXX rethink self.name munging, this is brittle.
+ self.name, ext = os.path.splitext(self.name)
+ if not ext:
+ ext = ".bundle"
+ bundleextension = ext
+ # misc (derived) attributes
+ self.bundlepath = pathjoin(self.builddir, self.name + bundleextension)
+
+ plist = self.plist
+ plist.CFBundleName = self.name
+ plist.CFBundlePackageType = self.type
+ if self.creator is None:
+ if hasattr(plist, "CFBundleSignature"):
+ self.creator = plist.CFBundleSignature
+ else:
+ self.creator = "????"
+ plist.CFBundleSignature = self.creator
+ if not hasattr(plist, "CFBundleIdentifier"):
+ plist.CFBundleIdentifier = self.name
+
+ def build(self):
+ """Build the bundle."""
+ builddir = self.builddir
+ if builddir and not os.path.exists(builddir):
+ os.mkdir(builddir)
+ self.message("Building %s" % repr(self.bundlepath), 1)
+ if os.path.exists(self.bundlepath):
+ shutil.rmtree(self.bundlepath)
+ os.mkdir(self.bundlepath)
+ self.preProcess()
+ self._copyFiles()
+ self._addMetaFiles()
+ self.postProcess()
+ self.message("Done.", 1)
+
+ def preProcess(self):
+ """Hook for subclasses."""
+ pass
+ def postProcess(self):
+ """Hook for subclasses."""
+ pass
+
+ def _addMetaFiles(self):
+ contents = pathjoin(self.bundlepath, "Contents")
+ makedirs(contents)
+ #
+ # Write Contents/PkgInfo
+ assert len(self.type) == len(self.creator) == 4, \
+ "type and creator must be 4-byte strings."
+ pkginfo = pathjoin(contents, "PkgInfo")
+ f = open(pkginfo, "wb")
+ f.write(self.type + self.creator)
+ f.close()
+ #
+ # Write Contents/Info.plist
+ infoplist = pathjoin(contents, "Info.plist")
+ self.plist.write(infoplist)
+
+ def _copyFiles(self):
+ files = self.files[:]
+ for path in self.resources:
+ files.append((path, pathjoin("Contents", "Resources",
+ os.path.basename(path))))
+ for path in self.libs:
+ files.append((path, pathjoin("Contents", "Frameworks",
+ os.path.basename(path))))
+ if self.symlink:
+ self.message("Making symbolic links", 1)
+ msg = "Making symlink from"
+ else:
+ self.message("Copying files", 1)
+ msg = "Copying"
+ files.sort()
+ for src, dst in files:
+ if os.path.isdir(src):
+ self.message("%s %s/ to %s/" % (msg, src, dst), 2)
+ else:
+ self.message("%s %s to %s" % (msg, src, dst), 2)
+ dst = pathjoin(self.bundlepath, dst)
+ if self.symlink:
+ symlink(src, dst, mkdirs=1)
+ else:
+ copy(src, dst, mkdirs=1)
+
+ def message(self, msg, level=0):
+ if level <= self.verbosity:
+ indent = ""
+ if level > 1:
+ indent = (level - 1) * " "
+ sys.stderr.write(indent + msg + "\n")
+
+ def report(self):
+ # XXX something decent
+ pass
if __debug__:
- PYC_EXT = ".pyc"
+ PYC_EXT = ".pyc"
else:
- PYC_EXT = ".pyo"
+ PYC_EXT = ".pyo"
MAGIC = imp.get_magic()
USE_ZIPIMPORT = "zipimport" in sys.builtin_module_names
@@ -221,13 +221,13 @@ del sys.path[1:] # sys.path[0] is Contents/Resources/
"""
if USE_ZIPIMPORT:
- ZIP_ARCHIVE = "Modules.zip"
- SITE_PY += "sys.path.append(sys.path[0] + '/%s')\n" % ZIP_ARCHIVE
- def getPycData(fullname, code, ispkg):
- if ispkg:
- fullname += ".__init__"
- path = fullname.replace(".", os.sep) + PYC_EXT
- return path, MAGIC + '\0\0\0\0' + marshal.dumps(code)
+ ZIP_ARCHIVE = "Modules.zip"
+ SITE_PY += "sys.path.append(sys.path[0] + '/%s')\n" % ZIP_ARCHIVE
+ def getPycData(fullname, code, ispkg):
+ if ispkg:
+ fullname += ".__init__"
+ path = fullname.replace(".", os.sep) + PYC_EXT
+ return path, MAGIC + '\0\0\0\0' + marshal.dumps(code)
SITE_CO = compile(SITE_PY, "<-bundlebuilder.py->", "exec")
@@ -237,22 +237,22 @@ SITE_CO = compile(SITE_PY, "<-bundlebuilder.py->", "exec")
#
EXT_LOADER = """\
def __load():
- import imp, sys, os
- for p in sys.path:
- path = os.path.join(p, "%(filename)s")
- if os.path.exists(path):
- break
- else:
- assert 0, "file not found: %(filename)s"
- mod = imp.load_dynamic("%(name)s", path)
+ import imp, sys, os
+ for p in sys.path:
+ path = os.path.join(p, "%(filename)s")
+ if os.path.exists(path):
+ break
+ else:
+ assert 0, "file not found: %(filename)s"
+ mod = imp.load_dynamic("%(name)s", path)
__load()
del __load
"""
MAYMISS_MODULES = ['mac', 'os2', 'nt', 'ntpath', 'dos', 'dospath',
- 'win32api', 'ce', '_winreg', 'nturl2path', 'sitecustomize',
- 'org.python.core', 'riscos', 'riscosenviron', 'riscospath'
+ 'win32api', 'ce', '_winreg', 'nturl2path', 'sitecustomize',
+ 'org.python.core', 'riscos', 'riscosenviron', 'riscospath'
]
STRIP_EXEC = "/usr/bin/strip"
@@ -281,7 +281,7 @@ mainprogram = os.path.join(resdir, "%(mainprogram)s")
sys.argv.insert(1, mainprogram)
os.environ["PYTHONPATH"] = resdir
if %(standalone)s:
- os.environ["PYTHONHOME"] = resdir
+ os.environ["PYTHONHOME"] = resdir
os.environ["PYTHONEXECUTABLE"] = executable
os.environ["DYLD_LIBRARY_PATH"] = libdir
os.execve(executable, sys.argv, os.environ)
@@ -301,312 +301,312 @@ execfile(os.path.join(os.path.split(__file__)[0], "%(realmainprogram)s"))
class AppBuilder(BundleBuilder):
- # Override type of the bundle.
- type = "APPL"
-
- # platform, name of the subfolder of Contents that contains the executable.
- platform = "MacOS"
-
- # A Python main program. If this argument is given, the main
- # executable in the bundle will be a small wrapper that invokes
- # the main program. (XXX Discuss why.)
- mainprogram = None
-
- # The main executable. If a Python main program is specified
- # the executable will be copied to Resources and be invoked
- # by the wrapper program mentioned above. Otherwise it will
- # simply be used as the main executable.
- executable = None
-
- # The name of the main nib, for Cocoa apps. *Must* be specified
- # when building a Cocoa app.
- nibname = None
-
- # The name of the icon file to be copied to Resources and used for
- # the Finder icon.
- iconfile = None
-
- # Symlink the executable instead of copying it.
- symlink_exec = 0
-
- # If True, build standalone app.
- standalone = 0
-
- # If True, add a real main program that emulates sys.argv before calling
- # mainprogram
- argv_emulation = 0
-
- # The following attributes are only used when building a standalone app.
-
- # Exclude these modules.
- excludeModules = []
-
- # Include these modules.
- includeModules = []
-
- # Include these packages.
- includePackages = []
-
- # Strip binaries.
- strip = 0
-
- # Found Python modules: [(name, codeobject, ispkg), ...]
- pymodules = []
-
- # Modules that modulefinder couldn't find:
- missingModules = []
- maybeMissingModules = []
-
- # List of all binaries (executables or shared libs), for stripping purposes
- binaries = []
-
- def setup(self):
- if self.standalone and self.mainprogram is None:
- raise BundleBuilderError, ("must specify 'mainprogram' when "
- "building a standalone application.")
- if self.mainprogram is None and self.executable is None:
- raise BundleBuilderError, ("must specify either or both of "
- "'executable' and 'mainprogram'")
-
- self.execdir = pathjoin("Contents", self.platform)
-
- if self.name is not None:
- pass
- elif self.mainprogram is not None:
- self.name = os.path.splitext(os.path.basename(self.mainprogram))[0]
- elif executable is not None:
- self.name = os.path.splitext(os.path.basename(self.executable))[0]
- if self.name[-4:] != ".app":
- self.name += ".app"
-
- if self.executable is None:
- if not self.standalone:
- self.symlink_exec = 1
- self.executable = sys.executable
-
- if self.nibname:
- self.plist.NSMainNibFile = self.nibname
- if not hasattr(self.plist, "NSPrincipalClass"):
- self.plist.NSPrincipalClass = "NSApplication"
-
- BundleBuilder.setup(self)
-
- self.plist.CFBundleExecutable = self.name
-
- if self.standalone:
- self.findDependencies()
-
- def preProcess(self):
- resdir = "Contents/Resources"
- if self.executable is not None:
- if self.mainprogram is None:
- execname = self.name
- else:
- execname = os.path.basename(self.executable)
- execpath = pathjoin(self.execdir, execname)
- if not self.symlink_exec:
- self.files.append((self.executable, execpath))
- self.binaries.append(execpath)
- self.execpath = execpath
-
- if self.mainprogram is not None:
- mainprogram = os.path.basename(self.mainprogram)
- self.files.append((self.mainprogram, pathjoin(resdir, mainprogram)))
- if self.argv_emulation:
- # Change the main program, and create the helper main program (which
- # does argv collection and then calls the real main).
- # Also update the included modules (if we're creating a standalone
- # program) and the plist
- realmainprogram = mainprogram
- mainprogram = '__argvemulator_' + mainprogram
- resdirpath = pathjoin(self.bundlepath, resdir)
- mainprogrampath = pathjoin(resdirpath, mainprogram)
- makedirs(resdirpath)
- open(mainprogrampath, "w").write(ARGV_EMULATOR % locals())
- if self.standalone:
- self.includeModules.append("argvemulator")
- self.includeModules.append("os")
- if not self.plist.has_key("CFBundleDocumentTypes"):
- self.plist["CFBundleDocumentTypes"] = [
- { "CFBundleTypeOSTypes" : [
- "****",
- "fold",
- "disk"],
- "CFBundleTypeRole": "Viewer"}]
- # Write bootstrap script
- executable = os.path.basename(self.executable)
- execdir = pathjoin(self.bundlepath, self.execdir)
- bootstrappath = pathjoin(execdir, self.name)
- makedirs(execdir)
- if self.standalone:
- # XXX we're screwed when the end user has deleted
- # /usr/bin/python
- hashbang = "/usr/bin/python"
- else:
- hashbang = os.path.realpath(sys.executable)
- standalone = self.standalone
- open(bootstrappath, "w").write(BOOTSTRAP_SCRIPT % locals())
- os.chmod(bootstrappath, 0775)
-
- if self.iconfile is not None:
- iconbase = os.path.basename(self.iconfile)
- self.plist.CFBundleIconFile = iconbase
- self.files.append((self.iconfile, pathjoin(resdir, iconbase)))
-
- def postProcess(self):
- if self.standalone:
- self.addPythonModules()
- if self.strip and not self.symlink:
- self.stripBinaries()
-
- if self.symlink_exec and self.executable:
- self.message("Symlinking executable %s to %s" % (self.executable,
- self.execpath), 2)
- dst = pathjoin(self.bundlepath, self.execpath)
- makedirs(os.path.dirname(dst))
- os.symlink(os.path.abspath(self.executable), dst)
-
- if self.missingModules or self.maybeMissingModules:
- self.reportMissing()
-
- def addPythonModules(self):
- self.message("Adding Python modules", 1)
-
- if USE_ZIPIMPORT:
- # Create a zip file containing all modules as pyc.
- import zipfile
- relpath = pathjoin("Contents", "Resources", ZIP_ARCHIVE)
- abspath = pathjoin(self.bundlepath, relpath)
- zf = zipfile.ZipFile(abspath, "w", zipfile.ZIP_DEFLATED)
- for name, code, ispkg in self.pymodules:
- self.message("Adding Python module %s" % name, 2)
- path, pyc = getPycData(name, code, ispkg)
- zf.writestr(path, pyc)
- zf.close()
- # add site.pyc
- sitepath = pathjoin(self.bundlepath, "Contents", "Resources",
- "site" + PYC_EXT)
- writePyc(SITE_CO, sitepath)
- else:
- # Create individual .pyc files.
- for name, code, ispkg in self.pymodules:
- if ispkg:
- name += ".__init__"
- path = name.split(".")
- path = pathjoin("Contents", "Resources", *path) + PYC_EXT
-
- if ispkg:
- self.message("Adding Python package %s" % path, 2)
- else:
- self.message("Adding Python module %s" % path, 2)
-
- abspath = pathjoin(self.bundlepath, path)
- makedirs(os.path.dirname(abspath))
- writePyc(code, abspath)
-
- def stripBinaries(self):
- if not os.path.exists(STRIP_EXEC):
- self.message("Error: can't strip binaries: no strip program at "
- "%s" % STRIP_EXEC, 0)
- else:
- self.message("Stripping binaries", 1)
- for relpath in self.binaries:
- self.message("Stripping %s" % relpath, 2)
- abspath = pathjoin(self.bundlepath, relpath)
- assert not os.path.islink(abspath)
- rv = os.system("%s -S \"%s\"" % (STRIP_EXEC, abspath))
-
- def findDependencies(self):
- self.message("Finding module dependencies", 1)
- import modulefinder
- mf = modulefinder.ModuleFinder(excludes=self.excludeModules)
- if USE_ZIPIMPORT:
- # zipimport imports zlib, must add it manually
- mf.import_hook("zlib")
- # manually add our own site.py
- site = mf.add_module("site")
- site.__code__ = SITE_CO
- mf.scan_code(SITE_CO, site)
-
- # warnings.py gets imported implicitly from C
- mf.import_hook("warnings")
-
- includeModules = self.includeModules[:]
- for name in self.includePackages:
- includeModules.extend(findPackageContents(name).keys())
- for name in includeModules:
- try:
- mf.import_hook(name)
- except ImportError:
- self.missingModules.append(name)
-
- mf.run_script(self.mainprogram)
- modules = mf.modules.items()
- modules.sort()
- for name, mod in modules:
- if mod.__file__ and mod.__code__ is None:
- # C extension
- path = mod.__file__
- filename = os.path.basename(path)
- if USE_ZIPIMPORT:
- # Python modules are stored in a Zip archive, but put
- # extensions in Contents/Resources/.a and add a tiny "loader"
- # program in the Zip archive. Due to Thomas Heller.
- dstpath = pathjoin("Contents", "Resources", filename)
- source = EXT_LOADER % {"name": name, "filename": filename}
- code = compile(source, "<dynloader for %s>" % name, "exec")
- mod.__code__ = code
- else:
- # just copy the file
- dstpath = name.split(".")[:-1] + [filename]
- dstpath = pathjoin("Contents", "Resources", *dstpath)
- self.files.append((path, dstpath))
- self.binaries.append(dstpath)
- if mod.__code__ is not None:
- ispkg = mod.__path__ is not None
- if not USE_ZIPIMPORT or name != "site":
- # Our site.py is doing the bootstrapping, so we must
- # include a real .pyc file if USE_ZIPIMPORT is True.
- self.pymodules.append((name, mod.__code__, ispkg))
-
- if hasattr(mf, "any_missing_maybe"):
- missing, maybe = mf.any_missing_maybe()
- else:
- missing = mf.any_missing()
- maybe = []
- self.missingModules.extend(missing)
- self.maybeMissingModules.extend(maybe)
-
- def reportMissing(self):
- missing = [name for name in self.missingModules
- if name not in MAYMISS_MODULES]
- if self.maybeMissingModules:
- maybe = self.maybeMissingModules
- else:
- maybe = [name for name in missing if "." in name]
- missing = [name for name in missing if "." not in name]
- missing.sort()
- maybe.sort()
- if maybe:
- self.message("Warning: couldn't find the following submodules:", 1)
- self.message(" (Note that these could be false alarms -- "
- "it's not always", 1)
- self.message(" possible to distinguish between \"from package "
- "import submodule\" ", 1)
- self.message(" and \"from package import name\")", 1)
- for name in maybe:
- self.message(" ? " + name, 1)
- if missing:
- self.message("Warning: couldn't find the following modules:", 1)
- for name in missing:
- self.message(" ? " + name, 1)
-
- def report(self):
- # XXX something decent
- import pprint
- pprint.pprint(self.__dict__)
- if self.standalone:
- self.reportMissing()
+ # Override type of the bundle.
+ type = "APPL"
+
+ # platform, name of the subfolder of Contents that contains the executable.
+ platform = "MacOS"
+
+ # A Python main program. If this argument is given, the main
+ # executable in the bundle will be a small wrapper that invokes
+ # the main program. (XXX Discuss why.)
+ mainprogram = None
+
+ # The main executable. If a Python main program is specified
+ # the executable will be copied to Resources and be invoked
+ # by the wrapper program mentioned above. Otherwise it will
+ # simply be used as the main executable.
+ executable = None
+
+ # The name of the main nib, for Cocoa apps. *Must* be specified
+ # when building a Cocoa app.
+ nibname = None
+
+ # The name of the icon file to be copied to Resources and used for
+ # the Finder icon.
+ iconfile = None
+
+ # Symlink the executable instead of copying it.
+ symlink_exec = 0
+
+ # If True, build standalone app.
+ standalone = 0
+
+ # If True, add a real main program that emulates sys.argv before calling
+ # mainprogram
+ argv_emulation = 0
+
+ # The following attributes are only used when building a standalone app.
+
+ # Exclude these modules.
+ excludeModules = []
+
+ # Include these modules.
+ includeModules = []
+
+ # Include these packages.
+ includePackages = []
+
+ # Strip binaries.
+ strip = 0
+
+ # Found Python modules: [(name, codeobject, ispkg), ...]
+ pymodules = []
+
+ # Modules that modulefinder couldn't find:
+ missingModules = []
+ maybeMissingModules = []
+
+ # List of all binaries (executables or shared libs), for stripping purposes
+ binaries = []
+
+ def setup(self):
+ if self.standalone and self.mainprogram is None:
+ raise BundleBuilderError, ("must specify 'mainprogram' when "
+ "building a standalone application.")
+ if self.mainprogram is None and self.executable is None:
+ raise BundleBuilderError, ("must specify either or both of "
+ "'executable' and 'mainprogram'")
+
+ self.execdir = pathjoin("Contents", self.platform)
+
+ if self.name is not None:
+ pass
+ elif self.mainprogram is not None:
+ self.name = os.path.splitext(os.path.basename(self.mainprogram))[0]
+ elif executable is not None:
+ self.name = os.path.splitext(os.path.basename(self.executable))[0]
+ if self.name[-4:] != ".app":
+ self.name += ".app"
+
+ if self.executable is None:
+ if not self.standalone:
+ self.symlink_exec = 1
+ self.executable = sys.executable
+
+ if self.nibname:
+ self.plist.NSMainNibFile = self.nibname
+ if not hasattr(self.plist, "NSPrincipalClass"):
+ self.plist.NSPrincipalClass = "NSApplication"
+
+ BundleBuilder.setup(self)
+
+ self.plist.CFBundleExecutable = self.name
+
+ if self.standalone:
+ self.findDependencies()
+
+ def preProcess(self):
+ resdir = "Contents/Resources"
+ if self.executable is not None:
+ if self.mainprogram is None:
+ execname = self.name
+ else:
+ execname = os.path.basename(self.executable)
+ execpath = pathjoin(self.execdir, execname)
+ if not self.symlink_exec:
+ self.files.append((self.executable, execpath))
+ self.binaries.append(execpath)
+ self.execpath = execpath
+
+ if self.mainprogram is not None:
+ mainprogram = os.path.basename(self.mainprogram)
+ self.files.append((self.mainprogram, pathjoin(resdir, mainprogram)))
+ if self.argv_emulation:
+ # Change the main program, and create the helper main program (which
+ # does argv collection and then calls the real main).
+ # Also update the included modules (if we're creating a standalone
+ # program) and the plist
+ realmainprogram = mainprogram
+ mainprogram = '__argvemulator_' + mainprogram
+ resdirpath = pathjoin(self.bundlepath, resdir)
+ mainprogrampath = pathjoin(resdirpath, mainprogram)
+ makedirs(resdirpath)
+ open(mainprogrampath, "w").write(ARGV_EMULATOR % locals())
+ if self.standalone:
+ self.includeModules.append("argvemulator")
+ self.includeModules.append("os")
+ if not self.plist.has_key("CFBundleDocumentTypes"):
+ self.plist["CFBundleDocumentTypes"] = [
+ { "CFBundleTypeOSTypes" : [
+ "****",
+ "fold",
+ "disk"],
+ "CFBundleTypeRole": "Viewer"}]
+ # Write bootstrap script
+ executable = os.path.basename(self.executable)
+ execdir = pathjoin(self.bundlepath, self.execdir)
+ bootstrappath = pathjoin(execdir, self.name)
+ makedirs(execdir)
+ if self.standalone:
+ # XXX we're screwed when the end user has deleted
+ # /usr/bin/python
+ hashbang = "/usr/bin/python"
+ else:
+ hashbang = os.path.realpath(sys.executable)
+ standalone = self.standalone
+ open(bootstrappath, "w").write(BOOTSTRAP_SCRIPT % locals())
+ os.chmod(bootstrappath, 0775)
+
+ if self.iconfile is not None:
+ iconbase = os.path.basename(self.iconfile)
+ self.plist.CFBundleIconFile = iconbase
+ self.files.append((self.iconfile, pathjoin(resdir, iconbase)))
+
+ def postProcess(self):
+ if self.standalone:
+ self.addPythonModules()
+ if self.strip and not self.symlink:
+ self.stripBinaries()
+
+ if self.symlink_exec and self.executable:
+ self.message("Symlinking executable %s to %s" % (self.executable,
+ self.execpath), 2)
+ dst = pathjoin(self.bundlepath, self.execpath)
+ makedirs(os.path.dirname(dst))
+ os.symlink(os.path.abspath(self.executable), dst)
+
+ if self.missingModules or self.maybeMissingModules:
+ self.reportMissing()
+
+ def addPythonModules(self):
+ self.message("Adding Python modules", 1)
+
+ if USE_ZIPIMPORT:
+ # Create a zip file containing all modules as pyc.
+ import zipfile
+ relpath = pathjoin("Contents", "Resources", ZIP_ARCHIVE)
+ abspath = pathjoin(self.bundlepath, relpath)
+ zf = zipfile.ZipFile(abspath, "w", zipfile.ZIP_DEFLATED)
+ for name, code, ispkg in self.pymodules:
+ self.message("Adding Python module %s" % name, 2)
+ path, pyc = getPycData(name, code, ispkg)
+ zf.writestr(path, pyc)
+ zf.close()
+ # add site.pyc
+ sitepath = pathjoin(self.bundlepath, "Contents", "Resources",
+ "site" + PYC_EXT)
+ writePyc(SITE_CO, sitepath)
+ else:
+ # Create individual .pyc files.
+ for name, code, ispkg in self.pymodules:
+ if ispkg:
+ name += ".__init__"
+ path = name.split(".")
+ path = pathjoin("Contents", "Resources", *path) + PYC_EXT
+
+ if ispkg:
+ self.message("Adding Python package %s" % path, 2)
+ else:
+ self.message("Adding Python module %s" % path, 2)
+
+ abspath = pathjoin(self.bundlepath, path)
+ makedirs(os.path.dirname(abspath))
+ writePyc(code, abspath)
+
+ def stripBinaries(self):
+ if not os.path.exists(STRIP_EXEC):
+ self.message("Error: can't strip binaries: no strip program at "
+ "%s" % STRIP_EXEC, 0)
+ else:
+ self.message("Stripping binaries", 1)
+ for relpath in self.binaries:
+ self.message("Stripping %s" % relpath, 2)
+ abspath = pathjoin(self.bundlepath, relpath)
+ assert not os.path.islink(abspath)
+ rv = os.system("%s -S \"%s\"" % (STRIP_EXEC, abspath))
+
+ def findDependencies(self):
+ self.message("Finding module dependencies", 1)
+ import modulefinder
+ mf = modulefinder.ModuleFinder(excludes=self.excludeModules)
+ if USE_ZIPIMPORT:
+ # zipimport imports zlib, must add it manually
+ mf.import_hook("zlib")
+ # manually add our own site.py
+ site = mf.add_module("site")
+ site.__code__ = SITE_CO
+ mf.scan_code(SITE_CO, site)
+
+ # warnings.py gets imported implicitly from C
+ mf.import_hook("warnings")
+
+ includeModules = self.includeModules[:]
+ for name in self.includePackages:
+ includeModules.extend(findPackageContents(name).keys())
+ for name in includeModules:
+ try:
+ mf.import_hook(name)
+ except ImportError:
+ self.missingModules.append(name)
+
+ mf.run_script(self.mainprogram)
+ modules = mf.modules.items()
+ modules.sort()
+ for name, mod in modules:
+ if mod.__file__ and mod.__code__ is None:
+ # C extension
+ path = mod.__file__
+ filename = os.path.basename(path)
+ if USE_ZIPIMPORT:
+ # Python modules are stored in a Zip archive, but put
+ # extensions in Contents/Resources/.a and add a tiny "loader"
+ # program in the Zip archive. Due to Thomas Heller.
+ dstpath = pathjoin("Contents", "Resources", filename)
+ source = EXT_LOADER % {"name": name, "filename": filename}
+ code = compile(source, "<dynloader for %s>" % name, "exec")
+ mod.__code__ = code
+ else:
+ # just copy the file
+ dstpath = name.split(".")[:-1] + [filename]
+ dstpath = pathjoin("Contents", "Resources", *dstpath)
+ self.files.append((path, dstpath))
+ self.binaries.append(dstpath)
+ if mod.__code__ is not None:
+ ispkg = mod.__path__ is not None
+ if not USE_ZIPIMPORT or name != "site":
+ # Our site.py is doing the bootstrapping, so we must
+ # include a real .pyc file if USE_ZIPIMPORT is True.
+ self.pymodules.append((name, mod.__code__, ispkg))
+
+ if hasattr(mf, "any_missing_maybe"):
+ missing, maybe = mf.any_missing_maybe()
+ else:
+ missing = mf.any_missing()
+ maybe = []
+ self.missingModules.extend(missing)
+ self.maybeMissingModules.extend(maybe)
+
+ def reportMissing(self):
+ missing = [name for name in self.missingModules
+ if name not in MAYMISS_MODULES]
+ if self.maybeMissingModules:
+ maybe = self.maybeMissingModules
+ else:
+ maybe = [name for name in missing if "." in name]
+ missing = [name for name in missing if "." not in name]
+ missing.sort()
+ maybe.sort()
+ if maybe:
+ self.message("Warning: couldn't find the following submodules:", 1)
+ self.message(" (Note that these could be false alarms -- "
+ "it's not always", 1)
+ self.message(" possible to distinguish between \"from package "
+ "import submodule\" ", 1)
+ self.message(" and \"from package import name\")", 1)
+ for name in maybe:
+ self.message(" ? " + name, 1)
+ if missing:
+ self.message("Warning: couldn't find the following modules:", 1)
+ for name in missing:
+ self.message(" ? " + name, 1)
+
+ def report(self):
+ # XXX something decent
+ import pprint
+ pprint.pprint(self.__dict__)
+ if self.standalone:
+ self.reportMissing()
#
# Utilities.
@@ -616,67 +616,67 @@ SUFFIXES = [_suf for _suf, _mode, _tp in imp.get_suffixes()]
identifierRE = re.compile(r"[_a-zA-z][_a-zA-Z0-9]*$")
def findPackageContents(name, searchpath=None):
- head = name.split(".")[-1]
- if identifierRE.match(head) is None:
- return {}
- try:
- fp, path, (ext, mode, tp) = imp.find_module(head, searchpath)
- except ImportError:
- return {}
- modules = {name: None}
- if tp == imp.PKG_DIRECTORY and path:
- files = os.listdir(path)
- for sub in files:
- sub, ext = os.path.splitext(sub)
- fullname = name + "." + sub
- if sub != "__init__" and fullname not in modules:
- modules.update(findPackageContents(fullname, [path]))
- return modules
+ head = name.split(".")[-1]
+ if identifierRE.match(head) is None:
+ return {}
+ try:
+ fp, path, (ext, mode, tp) = imp.find_module(head, searchpath)
+ except ImportError:
+ return {}
+ modules = {name: None}
+ if tp == imp.PKG_DIRECTORY and path:
+ files = os.listdir(path)
+ for sub in files:
+ sub, ext = os.path.splitext(sub)
+ fullname = name + "." + sub
+ if sub != "__init__" and fullname not in modules:
+ modules.update(findPackageContents(fullname, [path]))
+ return modules
def writePyc(code, path):
- f = open(path, "wb")
- f.write(MAGIC)
- f.write("\0" * 4) # don't bother about a time stamp
- marshal.dump(code, f)
- f.close()
+ f = open(path, "wb")
+ f.write(MAGIC)
+ f.write("\0" * 4) # don't bother about a time stamp
+ marshal.dump(code, f)
+ f.close()
def copy(src, dst, mkdirs=0):
- """Copy a file or a directory."""
- if mkdirs:
- makedirs(os.path.dirname(dst))
- if os.path.isdir(src):
- shutil.copytree(src, dst)
- else:
- shutil.copy2(src, dst)
+ """Copy a file or a directory."""
+ if mkdirs:
+ makedirs(os.path.dirname(dst))
+ if os.path.isdir(src):
+ shutil.copytree(src, dst)
+ else:
+ shutil.copy2(src, dst)
def copytodir(src, dstdir):
- """Copy a file or a directory to an existing directory."""
- dst = pathjoin(dstdir, os.path.basename(src))
- copy(src, dst)
+ """Copy a file or a directory to an existing directory."""
+ dst = pathjoin(dstdir, os.path.basename(src))
+ copy(src, dst)
def makedirs(dir):
- """Make all directories leading up to 'dir' including the leaf
- directory. Don't moan if any path element already exists."""
- try:
- os.makedirs(dir)
- except OSError, why:
- if why.errno != errno.EEXIST:
- raise
+ """Make all directories leading up to 'dir' including the leaf
+ directory. Don't moan if any path element already exists."""
+ try:
+ os.makedirs(dir)
+ except OSError, why:
+ if why.errno != errno.EEXIST:
+ raise
def symlink(src, dst, mkdirs=0):
- """Copy a file or a directory."""
- if not os.path.exists(src):
- raise IOError, "No such file or directory: '%s'" % src
- if mkdirs:
- makedirs(os.path.dirname(dst))
- os.symlink(os.path.abspath(src), dst)
+ """Copy a file or a directory."""
+ if not os.path.exists(src):
+ raise IOError, "No such file or directory: '%s'" % src
+ if mkdirs:
+ makedirs(os.path.dirname(dst))
+ os.symlink(os.path.abspath(src), dst)
def pathjoin(*args):
- """Safe wrapper for os.path.join: asserts that all but the first
- argument are relative paths."""
- for seg in args[1:]:
- assert seg[0] != "/"
- return os.path.join(*args)
+ """Safe wrapper for os.path.join: asserts that all but the first
+ argument are relative paths."""
+ for seg in args[1:]:
+ assert seg[0] != "/"
+ return os.path.join(*args)
cmdline_doc = """\
@@ -718,97 +718,97 @@ Options:
"""
def usage(msg=None):
- if msg:
- print msg
- print cmdline_doc
- sys.exit(1)
+ if msg:
+ print msg
+ print cmdline_doc
+ sys.exit(1)
def main(builder=None):
- if builder is None:
- builder = AppBuilder(verbosity=1)
-
- shortopts = "b:n:r:f:e:m:c:p:lx:i:hvqa"
- longopts = ("builddir=", "name=", "resource=", "file=", "executable=",
- "mainprogram=", "creator=", "nib=", "plist=", "link",
- "link-exec", "help", "verbose", "quiet", "argv", "standalone",
- "exclude=", "include=", "package=", "strip", "iconfile=",
- "lib=")
-
- try:
- options, args = getopt.getopt(sys.argv[1:], shortopts, longopts)
- except getopt.error:
- usage()
-
- for opt, arg in options:
- if opt in ('-b', '--builddir'):
- builder.builddir = arg
- elif opt in ('-n', '--name'):
- builder.name = arg
- elif opt in ('-r', '--resource'):
- builder.resources.append(arg)
- elif opt in ('-f', '--file'):
- srcdst = arg.split(':')
- if len(srcdst) != 2:
- usage("-f or --file argument must be two paths, "
- "separated by a colon")
- builder.files.append(srcdst)
- elif opt in ('-e', '--executable'):
- builder.executable = arg
- elif opt in ('-m', '--mainprogram'):
- builder.mainprogram = arg
- elif opt in ('-a', '--argv'):
- builder.argv_emulation = 1
- elif opt in ('-c', '--creator'):
- builder.creator = arg
- elif opt == '--iconfile':
- builder.iconfile = arg
- elif opt == "--lib":
- builder.libs.append(arg)
- elif opt == "--nib":
- builder.nibname = arg
- elif opt in ('-p', '--plist'):
- builder.plist = Plist.fromFile(arg)
- elif opt in ('-l', '--link'):
- builder.symlink = 1
- elif opt == '--link-exec':
- builder.symlink_exec = 1
- elif opt in ('-h', '--help'):
- usage()
- elif opt in ('-v', '--verbose'):
- builder.verbosity += 1
- elif opt in ('-q', '--quiet'):
- builder.verbosity -= 1
- elif opt == '--standalone':
- builder.standalone = 1
- elif opt in ('-x', '--exclude'):
- builder.excludeModules.append(arg)
- elif opt in ('-i', '--include'):
- builder.includeModules.append(arg)
- elif opt == '--package':
- builder.includePackages.append(arg)
- elif opt == '--strip':
- builder.strip = 1
-
- if len(args) != 1:
- usage("Must specify one command ('build', 'report' or 'help')")
- command = args[0]
-
- if command == "build":
- builder.setup()
- builder.build()
- elif command == "report":
- builder.setup()
- builder.report()
- elif command == "help":
- usage()
- else:
- usage("Unknown command '%s'" % command)
+ if builder is None:
+ builder = AppBuilder(verbosity=1)
+
+ shortopts = "b:n:r:f:e:m:c:p:lx:i:hvqa"
+ longopts = ("builddir=", "name=", "resource=", "file=", "executable=",
+ "mainprogram=", "creator=", "nib=", "plist=", "link",
+ "link-exec", "help", "verbose", "quiet", "argv", "standalone",
+ "exclude=", "include=", "package=", "strip", "iconfile=",
+ "lib=")
+
+ try:
+ options, args = getopt.getopt(sys.argv[1:], shortopts, longopts)
+ except getopt.error:
+ usage()
+
+ for opt, arg in options:
+ if opt in ('-b', '--builddir'):
+ builder.builddir = arg
+ elif opt in ('-n', '--name'):
+ builder.name = arg
+ elif opt in ('-r', '--resource'):
+ builder.resources.append(arg)
+ elif opt in ('-f', '--file'):
+ srcdst = arg.split(':')
+ if len(srcdst) != 2:
+ usage("-f or --file argument must be two paths, "
+ "separated by a colon")
+ builder.files.append(srcdst)
+ elif opt in ('-e', '--executable'):
+ builder.executable = arg
+ elif opt in ('-m', '--mainprogram'):
+ builder.mainprogram = arg
+ elif opt in ('-a', '--argv'):
+ builder.argv_emulation = 1
+ elif opt in ('-c', '--creator'):
+ builder.creator = arg
+ elif opt == '--iconfile':
+ builder.iconfile = arg
+ elif opt == "--lib":
+ builder.libs.append(arg)
+ elif opt == "--nib":
+ builder.nibname = arg
+ elif opt in ('-p', '--plist'):
+ builder.plist = Plist.fromFile(arg)
+ elif opt in ('-l', '--link'):
+ builder.symlink = 1
+ elif opt == '--link-exec':
+ builder.symlink_exec = 1
+ elif opt in ('-h', '--help'):
+ usage()
+ elif opt in ('-v', '--verbose'):
+ builder.verbosity += 1
+ elif opt in ('-q', '--quiet'):
+ builder.verbosity -= 1
+ elif opt == '--standalone':
+ builder.standalone = 1
+ elif opt in ('-x', '--exclude'):
+ builder.excludeModules.append(arg)
+ elif opt in ('-i', '--include'):
+ builder.includeModules.append(arg)
+ elif opt == '--package':
+ builder.includePackages.append(arg)
+ elif opt == '--strip':
+ builder.strip = 1
+
+ if len(args) != 1:
+ usage("Must specify one command ('build', 'report' or 'help')")
+ command = args[0]
+
+ if command == "build":
+ builder.setup()
+ builder.build()
+ elif command == "report":
+ builder.setup()
+ builder.report()
+ elif command == "help":
+ usage()
+ else:
+ usage("Unknown command '%s'" % command)
def buildapp(**kwargs):
- builder = AppBuilder(**kwargs)
- main(builder)
+ builder = AppBuilder(**kwargs)
+ main(builder)
if __name__ == "__main__":
- main()
+ main()
diff --git a/Lib/plat-mac/cfmfile.py b/Lib/plat-mac/cfmfile.py
index a4eecf2..317046a 100644
--- a/Lib/plat-mac/cfmfile.py
+++ b/Lib/plat-mac/cfmfile.py
@@ -18,167 +18,167 @@ error = "cfm.error"
BUFSIZE = 0x80000
def mergecfmfiles(srclist, dst, architecture = 'fat'):
- """Merge all files in srclist into a new file dst.
-
- If architecture is given, only code fragments of that type will be used:
- "pwpc" for PPC, "m68k" for cfm68k. This does not work for "classic"
- 68k code, since it does not use code fragments to begin with.
- If architecture is None, all fragments will be used, enabling FAT binaries.
- """
-
- srclist = list(srclist)
- for i in range(len(srclist)):
- srclist[i] = Carbon.File.pathname(srclist[i])
- dst = Carbon.File.pathname(dst)
-
- dstfile = open(dst, "wb")
- rf = Res.FSpOpenResFile(dst, 3)
- try:
- dstcfrg = CfrgResource()
- for src in srclist:
- srccfrg = CfrgResource(src)
- for frag in srccfrg.fragments:
- if frag.architecture == 'pwpc' and architecture == 'm68k':
- continue
- if frag.architecture == 'm68k' and architecture == 'pwpc':
- continue
- dstcfrg.append(frag)
-
- frag.copydata(dstfile)
-
- cfrgres = Res.Resource(dstcfrg.build())
- Res.UseResFile(rf)
- cfrgres.AddResource('cfrg', 0, "")
- finally:
- dstfile.close()
- rf = Res.CloseResFile(rf)
+ """Merge all files in srclist into a new file dst.
+
+ If architecture is given, only code fragments of that type will be used:
+ "pwpc" for PPC, "m68k" for cfm68k. This does not work for "classic"
+ 68k code, since it does not use code fragments to begin with.
+ If architecture is None, all fragments will be used, enabling FAT binaries.
+ """
+
+ srclist = list(srclist)
+ for i in range(len(srclist)):
+ srclist[i] = Carbon.File.pathname(srclist[i])
+ dst = Carbon.File.pathname(dst)
+
+ dstfile = open(dst, "wb")
+ rf = Res.FSpOpenResFile(dst, 3)
+ try:
+ dstcfrg = CfrgResource()
+ for src in srclist:
+ srccfrg = CfrgResource(src)
+ for frag in srccfrg.fragments:
+ if frag.architecture == 'pwpc' and architecture == 'm68k':
+ continue
+ if frag.architecture == 'm68k' and architecture == 'pwpc':
+ continue
+ dstcfrg.append(frag)
+
+ frag.copydata(dstfile)
+
+ cfrgres = Res.Resource(dstcfrg.build())
+ Res.UseResFile(rf)
+ cfrgres.AddResource('cfrg', 0, "")
+ finally:
+ dstfile.close()
+ rf = Res.CloseResFile(rf)
class CfrgResource:
-
- def __init__(self, path = None):
- self.version = 1
- self.fragments = []
- self.path = path
- if path is not None and os.path.exists(path):
- currentresref = Res.CurResFile()
- resref = Res.FSpOpenResFile(path, 1)
- Res.UseResFile(resref)
- try:
- try:
- data = Res.Get1Resource('cfrg', 0).data
- except Res.Error:
- raise Res.Error, "no 'cfrg' resource found", sys.exc_traceback
- finally:
- Res.CloseResFile(resref)
- Res.UseResFile(currentresref)
- self.parse(data)
- if self.version <> 1:
- raise error, "unknown 'cfrg' resource format"
-
- def parse(self, data):
- (res1, res2, self.version,
- res3, res4, res5, res6,
- self.memberCount) = struct.unpack("8l", data[:32])
- data = data[32:]
- while data:
- frag = FragmentDescriptor(self.path, data)
- data = data[frag.memberSize:]
- self.fragments.append(frag)
-
- def build(self):
- self.memberCount = len(self.fragments)
- data = struct.pack("8l", 0, 0, self.version, 0, 0, 0, 0, self.memberCount)
- for frag in self.fragments:
- data = data + frag.build()
- return data
-
- def append(self, frag):
- self.fragments.append(frag)
+
+ def __init__(self, path = None):
+ self.version = 1
+ self.fragments = []
+ self.path = path
+ if path is not None and os.path.exists(path):
+ currentresref = Res.CurResFile()
+ resref = Res.FSpOpenResFile(path, 1)
+ Res.UseResFile(resref)
+ try:
+ try:
+ data = Res.Get1Resource('cfrg', 0).data
+ except Res.Error:
+ raise Res.Error, "no 'cfrg' resource found", sys.exc_traceback
+ finally:
+ Res.CloseResFile(resref)
+ Res.UseResFile(currentresref)
+ self.parse(data)
+ if self.version <> 1:
+ raise error, "unknown 'cfrg' resource format"
+
+ def parse(self, data):
+ (res1, res2, self.version,
+ res3, res4, res5, res6,
+ self.memberCount) = struct.unpack("8l", data[:32])
+ data = data[32:]
+ while data:
+ frag = FragmentDescriptor(self.path, data)
+ data = data[frag.memberSize:]
+ self.fragments.append(frag)
+
+ def build(self):
+ self.memberCount = len(self.fragments)
+ data = struct.pack("8l", 0, 0, self.version, 0, 0, 0, 0, self.memberCount)
+ for frag in self.fragments:
+ data = data + frag.build()
+ return data
+
+ def append(self, frag):
+ self.fragments.append(frag)
class FragmentDescriptor:
-
- def __init__(self, path, data = None):
- self.path = path
- if data is not None:
- self.parse(data)
-
- def parse(self, data):
- self.architecture = data[:4]
- ( self.updatelevel,
- self.currentVersion,
- self.oldDefVersion,
- self.stacksize,
- self.applibdir,
- self.fragtype,
- self.where,
- self.offset,
- self.length,
- self.res1, self.res2,
- self.memberSize,) = struct.unpack("4lhBB4lh", data[4:42])
- pname = data[42:self.memberSize]
- self.name = pname[1:1+ord(pname[0])]
-
- def build(self):
- data = self.architecture
- data = data + struct.pack("4lhBB4l",
- self.updatelevel,
- self.currentVersion,
- self.oldDefVersion,
- self.stacksize,
- self.applibdir,
- self.fragtype,
- self.where,
- self.offset,
- self.length,
- self.res1, self.res2)
- self.memberSize = len(data) + 2 + 1 + len(self.name)
- # pad to 4 byte boundaries
- if self.memberSize % 4:
- self.memberSize = self.memberSize + 4 - (self.memberSize % 4)
- data = data + struct.pack("hb", self.memberSize, len(self.name))
- data = data + self.name
- data = data + '\000' * (self.memberSize - len(data))
- return data
-
- def getfragment(self):
- if self.where <> 1:
- raise error, "can't read fragment, unsupported location"
- f = open(self.path, "rb")
- f.seek(self.offset)
- if self.length:
- frag = f.read(self.length)
- else:
- frag = f.read()
- f.close()
- return frag
-
- def copydata(self, outfile):
- if self.where <> 1:
- raise error, "can't read fragment, unsupported location"
- infile = open(self.path, "rb")
- if self.length == 0:
- infile.seek(0, 2)
- self.length = infile.tell()
-
- # Position input file and record new offset from output file
- infile.seek(self.offset)
-
- # pad to 16 byte boundaries
- offset = outfile.tell()
- if offset % 16:
- offset = offset + 16 - (offset % 16)
- outfile.seek(offset)
- self.offset = offset
-
- l = self.length
- while l:
- if l > BUFSIZE:
- outfile.write(infile.read(BUFSIZE))
- l = l - BUFSIZE
- else:
- outfile.write(infile.read(l))
- l = 0
- infile.close()
+
+ def __init__(self, path, data = None):
+ self.path = path
+ if data is not None:
+ self.parse(data)
+
+ def parse(self, data):
+ self.architecture = data[:4]
+ ( self.updatelevel,
+ self.currentVersion,
+ self.oldDefVersion,
+ self.stacksize,
+ self.applibdir,
+ self.fragtype,
+ self.where,
+ self.offset,
+ self.length,
+ self.res1, self.res2,
+ self.memberSize,) = struct.unpack("4lhBB4lh", data[4:42])
+ pname = data[42:self.memberSize]
+ self.name = pname[1:1+ord(pname[0])]
+
+ def build(self):
+ data = self.architecture
+ data = data + struct.pack("4lhBB4l",
+ self.updatelevel,
+ self.currentVersion,
+ self.oldDefVersion,
+ self.stacksize,
+ self.applibdir,
+ self.fragtype,
+ self.where,
+ self.offset,
+ self.length,
+ self.res1, self.res2)
+ self.memberSize = len(data) + 2 + 1 + len(self.name)
+ # pad to 4 byte boundaries
+ if self.memberSize % 4:
+ self.memberSize = self.memberSize + 4 - (self.memberSize % 4)
+ data = data + struct.pack("hb", self.memberSize, len(self.name))
+ data = data + self.name
+ data = data + '\000' * (self.memberSize - len(data))
+ return data
+
+ def getfragment(self):
+ if self.where <> 1:
+ raise error, "can't read fragment, unsupported location"
+ f = open(self.path, "rb")
+ f.seek(self.offset)
+ if self.length:
+ frag = f.read(self.length)
+ else:
+ frag = f.read()
+ f.close()
+ return frag
+
+ def copydata(self, outfile):
+ if self.where <> 1:
+ raise error, "can't read fragment, unsupported location"
+ infile = open(self.path, "rb")
+ if self.length == 0:
+ infile.seek(0, 2)
+ self.length = infile.tell()
+
+ # Position input file and record new offset from output file
+ infile.seek(self.offset)
+
+ # pad to 16 byte boundaries
+ offset = outfile.tell()
+ if offset % 16:
+ offset = offset + 16 - (offset % 16)
+ outfile.seek(offset)
+ self.offset = offset
+
+ l = self.length
+ while l:
+ if l > BUFSIZE:
+ outfile.write(infile.read(BUFSIZE))
+ l = l - BUFSIZE
+ else:
+ outfile.write(infile.read(l))
+ l = 0
+ infile.close()
diff --git a/Lib/plat-mac/findertools.py b/Lib/plat-mac/findertools.py
index 5add05f..b3223bd 100644
--- a/Lib/plat-mac/findertools.py
+++ b/Lib/plat-mac/findertools.py
@@ -30,803 +30,803 @@ Error = 'findertools.Error'
_finder_talker = None
def _getfinder():
- """returns basic (recyclable) Finder AE interface object"""
- global _finder_talker
- if not _finder_talker:
- _finder_talker = Finder.Finder()
- _finder_talker.send_flags = ( _finder_talker.send_flags |
- AppleEvents.kAECanInteract | AppleEvents.kAECanSwitchLayer)
- return _finder_talker
-
+ """returns basic (recyclable) Finder AE interface object"""
+ global _finder_talker
+ if not _finder_talker:
+ _finder_talker = Finder.Finder()
+ _finder_talker.send_flags = ( _finder_talker.send_flags |
+ AppleEvents.kAECanInteract | AppleEvents.kAECanSwitchLayer)
+ return _finder_talker
+
def launch(file):
- """Open a file thru the finder. Specify file by name or fsspec"""
- finder = _getfinder()
- fss = Carbon.File.FSSpec(file)
- return finder.open(fss)
-
+ """Open a file thru the finder. Specify file by name or fsspec"""
+ finder = _getfinder()
+ fss = Carbon.File.FSSpec(file)
+ return finder.open(fss)
+
def Print(file):
- """Print a file thru the finder. Specify file by name or fsspec"""
- finder = _getfinder()
- fss = Carbon.File.FSSpec(file)
- return finder._print(fss)
-
+ """Print a file thru the finder. Specify file by name or fsspec"""
+ finder = _getfinder()
+ fss = Carbon.File.FSSpec(file)
+ return finder._print(fss)
+
def copy(src, dstdir):
- """Copy a file to a folder"""
- finder = _getfinder()
- if type(src) == type([]):
- src_fss = []
- for s in src:
- src_fss.append(Carbon.File.FSSpec(s))
- else:
- src_fss = Carbon.File.FSSpec(src)
- dst_fss = Carbon.File.FSSpec(dstdir)
- return finder.duplicate(src_fss, to=dst_fss)
+ """Copy a file to a folder"""
+ finder = _getfinder()
+ if type(src) == type([]):
+ src_fss = []
+ for s in src:
+ src_fss.append(Carbon.File.FSSpec(s))
+ else:
+ src_fss = Carbon.File.FSSpec(src)
+ dst_fss = Carbon.File.FSSpec(dstdir)
+ return finder.duplicate(src_fss, to=dst_fss)
def move(src, dstdir):
- """Move a file to a folder"""
- finder = _getfinder()
- if type(src) == type([]):
- src_fss = []
- for s in src:
- src_fss.append(Carbon.File.FSSpec(s))
- else:
- src_fss = Carbon.File.FSSpec(src)
- dst_fss = Carbon.File.FSSpec(dstdir)
- return finder.move(src_fss, to=dst_fss)
-
+ """Move a file to a folder"""
+ finder = _getfinder()
+ if type(src) == type([]):
+ src_fss = []
+ for s in src:
+ src_fss.append(Carbon.File.FSSpec(s))
+ else:
+ src_fss = Carbon.File.FSSpec(src)
+ dst_fss = Carbon.File.FSSpec(dstdir)
+ return finder.move(src_fss, to=dst_fss)
+
def sleep():
- """Put the mac to sleep"""
- finder = _getfinder()
- finder.sleep()
-
+ """Put the mac to sleep"""
+ finder = _getfinder()
+ finder.sleep()
+
def shutdown():
- """Shut the mac down"""
- finder = _getfinder()
- finder.shut_down()
-
+ """Shut the mac down"""
+ finder = _getfinder()
+ finder.shut_down()
+
def restart():
- """Restart the mac"""
- finder = _getfinder()
- finder.restart()
+ """Restart the mac"""
+ finder = _getfinder()
+ finder.restart()
#---------------------------------------------------
-# Additional findertools
+# Additional findertools
#
def reveal(file):
- """Reveal a file in the finder. Specify file by name, fsref or fsspec."""
- finder = _getfinder()
- fsr = Carbon.File.FSRef(file)
- file_alias = fsr.FSNewAliasMinimal()
- return finder.reveal(file_alias)
-
+ """Reveal a file in the finder. Specify file by name, fsref or fsspec."""
+ finder = _getfinder()
+ fsr = Carbon.File.FSRef(file)
+ file_alias = fsr.FSNewAliasMinimal()
+ return finder.reveal(file_alias)
+
def select(file):
- """select a file in the finder. Specify file by name, fsref or fsspec."""
- finder = _getfinder()
- fsr = Carbon.File.FSRef(file)
- file_alias = fsr.FSNewAliasMinimal()
- return finder.select(file_alias)
-
+ """select a file in the finder. Specify file by name, fsref or fsspec."""
+ finder = _getfinder()
+ fsr = Carbon.File.FSRef(file)
+ file_alias = fsr.FSNewAliasMinimal()
+ return finder.select(file_alias)
+
def update(file):
- """Update the display of the specified object(s) to match
- their on-disk representation. Specify file by name, fsref or fsspec."""
- finder = _getfinder()
- fsr = Carbon.File.FSRef(file)
- file_alias = fsr.FSNewAliasMinimal()
- return finder.update(file_alias)
+ """Update the display of the specified object(s) to match
+ their on-disk representation. Specify file by name, fsref or fsspec."""
+ finder = _getfinder()
+ fsr = Carbon.File.FSRef(file)
+ file_alias = fsr.FSNewAliasMinimal()
+ return finder.update(file_alias)
#---------------------------------------------------
-# More findertools
+# More findertools
#
def comment(object, comment=None):
- """comment: get or set the Finder-comment of the item, displayed in the 'Get Info' window."""
- object = Carbon.File.FSRef(object)
- object_alias = object.FSNewAliasMonimal()
- if comment == None:
- return _getcomment(object_alias)
- else:
- return _setcomment(object_alias, comment)
-
+ """comment: get or set the Finder-comment of the item, displayed in the 'Get Info' window."""
+ object = Carbon.File.FSRef(object)
+ object_alias = object.FSNewAliasMonimal()
+ if comment == None:
+ return _getcomment(object_alias)
+ else:
+ return _setcomment(object_alias, comment)
+
def _setcomment(object_alias, comment):
- finder = _getfinder()
- args = {}
- attrs = {}
- aeobj_00 = aetypes.ObjectSpecifier(want=aetypes.Type('cobj'), form="alis", seld=object_alias, fr=None)
- aeobj_01 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type('comt'), fr=aeobj_00)
- args['----'] = aeobj_01
- args["data"] = comment
- _reply, args, attrs = finder.send("core", "setd", args, attrs)
- if args.has_key('errn'):
- raise Error, aetools.decodeerror(args)
- if args.has_key('----'):
- return args['----']
+ finder = _getfinder()
+ args = {}
+ attrs = {}
+ aeobj_00 = aetypes.ObjectSpecifier(want=aetypes.Type('cobj'), form="alis", seld=object_alias, fr=None)
+ aeobj_01 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type('comt'), fr=aeobj_00)
+ args['----'] = aeobj_01
+ args["data"] = comment
+ _reply, args, attrs = finder.send("core", "setd", args, attrs)
+ if args.has_key('errn'):
+ raise Error, aetools.decodeerror(args)
+ if args.has_key('----'):
+ return args['----']
def _getcomment(object_alias):
- finder = _getfinder()
- args = {}
- attrs = {}
- aeobj_00 = aetypes.ObjectSpecifier(want=aetypes.Type('cobj'), form="alis", seld=object_alias, fr=None)
- aeobj_01 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type('comt'), fr=aeobj_00)
- args['----'] = aeobj_01
- _reply, args, attrs = finder.send("core", "getd", args, attrs)
- if args.has_key('errn'):
- raise Error, aetools.decodeerror(args)
- if args.has_key('----'):
- return args['----']
+ finder = _getfinder()
+ args = {}
+ attrs = {}
+ aeobj_00 = aetypes.ObjectSpecifier(want=aetypes.Type('cobj'), form="alis", seld=object_alias, fr=None)
+ aeobj_01 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type('comt'), fr=aeobj_00)
+ args['----'] = aeobj_01
+ _reply, args, attrs = finder.send("core", "getd", args, attrs)
+ if args.has_key('errn'):
+ raise Error, aetools.decodeerror(args)
+ if args.has_key('----'):
+ return args['----']
#---------------------------------------------------
-# Get information about current processes in the Finder.
+# Get information about current processes in the Finder.
def processes():
- """processes returns a list of all active processes running on this computer and their creators."""
- finder = _getfinder()
- args = {}
- attrs = {}
- processnames = []
- processnumbers = []
- creators = []
- partitions = []
- used = []
- ## get the processnames or else the processnumbers
- args['----'] = aetypes.ObjectSpecifier(want=aetypes.Type('prcs'), form="indx", seld=aetypes.Unknown('abso', "all "), fr=None)
- _reply, args, attrs = finder.send('core', 'getd', args, attrs)
- if args.has_key('errn'):
- raise Error, aetools.decodeerror(args)
- p = []
- if args.has_key('----'):
- p = args['----']
- for proc in p:
- if hasattr(proc, 'seld'):
- # it has a real name
- processnames.append(proc.seld)
- elif hasattr(proc, 'type'):
- if proc.type == "psn ":
- # it has a process number
- processnumbers.append(proc.data)
- ## get the creators
- args = {}
- attrs = {}
- aeobj_0 = aetypes.ObjectSpecifier(want=aetypes.Type('prcs'), form="indx", seld=aetypes.Unknown('abso', "all "), fr=None)
- args['----'] = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type('fcrt'), fr=aeobj_0)
- _reply, args, attrs = finder.send('core', 'getd', args, attrs)
- if args.has_key('errn'):
- raise Error, aetools.decodeerror(_arg)
- if args.has_key('----'):
- p = args['----']
- creators = p[:]
- ## concatenate in one dict
- result = []
- if len(processnames) > len(processnumbers):
- data = processnames
- else:
- data = processnumbers
- for i in range(len(creators)):
- result.append((data[i], creators[i]))
- return result
+ """processes returns a list of all active processes running on this computer and their creators."""
+ finder = _getfinder()
+ args = {}
+ attrs = {}
+ processnames = []
+ processnumbers = []
+ creators = []
+ partitions = []
+ used = []
+ ## get the processnames or else the processnumbers
+ args['----'] = aetypes.ObjectSpecifier(want=aetypes.Type('prcs'), form="indx", seld=aetypes.Unknown('abso', "all "), fr=None)
+ _reply, args, attrs = finder.send('core', 'getd', args, attrs)
+ if args.has_key('errn'):
+ raise Error, aetools.decodeerror(args)
+ p = []
+ if args.has_key('----'):
+ p = args['----']
+ for proc in p:
+ if hasattr(proc, 'seld'):
+ # it has a real name
+ processnames.append(proc.seld)
+ elif hasattr(proc, 'type'):
+ if proc.type == "psn ":
+ # it has a process number
+ processnumbers.append(proc.data)
+ ## get the creators
+ args = {}
+ attrs = {}
+ aeobj_0 = aetypes.ObjectSpecifier(want=aetypes.Type('prcs'), form="indx", seld=aetypes.Unknown('abso', "all "), fr=None)
+ args['----'] = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type('fcrt'), fr=aeobj_0)
+ _reply, args, attrs = finder.send('core', 'getd', args, attrs)
+ if args.has_key('errn'):
+ raise Error, aetools.decodeerror(_arg)
+ if args.has_key('----'):
+ p = args['----']
+ creators = p[:]
+ ## concatenate in one dict
+ result = []
+ if len(processnames) > len(processnumbers):
+ data = processnames
+ else:
+ data = processnumbers
+ for i in range(len(creators)):
+ result.append((data[i], creators[i]))
+ return result
class _process:
- pass
+ pass
def isactiveprocess(processname):
- """Check of processname is active. MacOS9"""
- all = processes()
- ok = 0
- for n, c in all:
- if n == processname:
- return 1
- return 0
-
+ """Check of processname is active. MacOS9"""
+ all = processes()
+ ok = 0
+ for n, c in all:
+ if n == processname:
+ return 1
+ return 0
+
def processinfo(processname):
- """Return an object with all process properties as attributes for processname. MacOS9"""
- p = _process()
-
- if processname == "Finder":
- p.partition = None
- p.used = None
- else:
- p.partition = _processproperty(processname, 'appt')
- p.used = _processproperty(processname, 'pusd')
- p.visible = _processproperty(processname, 'pvis') #Is the process' layer visible?
- p.frontmost = _processproperty(processname, 'pisf') #Is the process the frontmost process?
- p.file = _processproperty(processname, 'file') #the file from which the process was launched
- p.filetype = _processproperty(processname, 'asty') #the OSType of the file type of the process
- p.creatortype = _processproperty(processname, 'fcrt') #the OSType of the creator of the process (the signature)
- p.accepthighlevel = _processproperty(processname, 'revt') #Is the process high-level event aware (accepts open application, open document, print document, and quit)?
- p.hasscripting = _processproperty(processname, 'hscr') #Does the process have a scripting terminology, i.e., can it be scripted?
- return p
-
+ """Return an object with all process properties as attributes for processname. MacOS9"""
+ p = _process()
+
+ if processname == "Finder":
+ p.partition = None
+ p.used = None
+ else:
+ p.partition = _processproperty(processname, 'appt')
+ p.used = _processproperty(processname, 'pusd')
+ p.visible = _processproperty(processname, 'pvis') #Is the process' layer visible?
+ p.frontmost = _processproperty(processname, 'pisf') #Is the process the frontmost process?
+ p.file = _processproperty(processname, 'file') #the file from which the process was launched
+ p.filetype = _processproperty(processname, 'asty') #the OSType of the file type of the process
+ p.creatortype = _processproperty(processname, 'fcrt') #the OSType of the creator of the process (the signature)
+ p.accepthighlevel = _processproperty(processname, 'revt') #Is the process high-level event aware (accepts open application, open document, print document, and quit)?
+ p.hasscripting = _processproperty(processname, 'hscr') #Does the process have a scripting terminology, i.e., can it be scripted?
+ return p
+
def _processproperty(processname, property):
- """return the partition size and memory used for processname"""
- finder = _getfinder()
- args = {}
- attrs = {}
- aeobj_00 = aetypes.ObjectSpecifier(want=aetypes.Type('prcs'), form="name", seld=processname, fr=None)
- aeobj_01 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type(property), fr=aeobj_00)
- args['----'] = aeobj_01
- _reply, args, attrs = finder.send("core", "getd", args, attrs)
- if args.has_key('errn'):
- raise Error, aetools.decodeerror(args)
- if args.has_key('----'):
- return args['----']
+ """return the partition size and memory used for processname"""
+ finder = _getfinder()
+ args = {}
+ attrs = {}
+ aeobj_00 = aetypes.ObjectSpecifier(want=aetypes.Type('prcs'), form="name", seld=processname, fr=None)
+ aeobj_01 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type(property), fr=aeobj_00)
+ args['----'] = aeobj_01
+ _reply, args, attrs = finder.send("core", "getd", args, attrs)
+ if args.has_key('errn'):
+ raise Error, aetools.decodeerror(args)
+ if args.has_key('----'):
+ return args['----']
#---------------------------------------------------
-# Mess around with Finder windows.
-
+# Mess around with Finder windows.
+
def openwindow(object):
- """Open a Finder window for object, Specify object by name or fsspec."""
- finder = _getfinder()
- object = Carbon.File.FSRef(object)
- object_alias = object.FSNewAliasMinimal()
- args = {}
- attrs = {}
- _code = 'aevt'
- _subcode = 'odoc'
- aeobj_0 = aetypes.ObjectSpecifier(want=aetypes.Type('cfol'), form="alis", seld=object_alias, fr=None)
- args['----'] = aeobj_0
- _reply, args, attrs = finder.send(_code, _subcode, args, attrs)
- if args.has_key('errn'):
- raise Error, aetools.decodeerror(args)
-
+ """Open a Finder window for object, Specify object by name or fsspec."""
+ finder = _getfinder()
+ object = Carbon.File.FSRef(object)
+ object_alias = object.FSNewAliasMinimal()
+ args = {}
+ attrs = {}
+ _code = 'aevt'
+ _subcode = 'odoc'
+ aeobj_0 = aetypes.ObjectSpecifier(want=aetypes.Type('cfol'), form="alis", seld=object_alias, fr=None)
+ args['----'] = aeobj_0
+ _reply, args, attrs = finder.send(_code, _subcode, args, attrs)
+ if args.has_key('errn'):
+ raise Error, aetools.decodeerror(args)
+
def closewindow(object):
- """Close a Finder window for folder, Specify by path."""
- finder = _getfinder()
- object = Carbon.File.FSRef(object)
- object_alias = object.FSNewAliasMinimal()
- args = {}
- attrs = {}
- _code = 'core'
- _subcode = 'clos'
- aeobj_0 = aetypes.ObjectSpecifier(want=aetypes.Type('cfol'), form="alis", seld=object_alias, fr=None)
- args['----'] = aeobj_0
- _reply, args, attrs = finder.send(_code, _subcode, args, attrs)
- if args.has_key('errn'):
- raise Error, aetools.decodeerror(args)
+ """Close a Finder window for folder, Specify by path."""
+ finder = _getfinder()
+ object = Carbon.File.FSRef(object)
+ object_alias = object.FSNewAliasMinimal()
+ args = {}
+ attrs = {}
+ _code = 'core'
+ _subcode = 'clos'
+ aeobj_0 = aetypes.ObjectSpecifier(want=aetypes.Type('cfol'), form="alis", seld=object_alias, fr=None)
+ args['----'] = aeobj_0
+ _reply, args, attrs = finder.send(_code, _subcode, args, attrs)
+ if args.has_key('errn'):
+ raise Error, aetools.decodeerror(args)
def location(object, pos=None):
- """Set the position of a Finder window for folder to pos=(w, h). Specify file by name or fsspec.
- If pos=None, location will return the current position of the object."""
- object = Carbon.File.FSRef(object)
- object_alias = object.FSNewAliasMinimal()
- if not pos:
- return _getlocation(object_alias)
- return _setlocation(object_alias, pos)
-
+ """Set the position of a Finder window for folder to pos=(w, h). Specify file by name or fsspec.
+ If pos=None, location will return the current position of the object."""
+ object = Carbon.File.FSRef(object)
+ object_alias = object.FSNewAliasMinimal()
+ if not pos:
+ return _getlocation(object_alias)
+ return _setlocation(object_alias, pos)
+
def _setlocation(object_alias, (x, y)):
- """_setlocation: Set the location of the icon for the object."""
- finder = _getfinder()
- args = {}
- attrs = {}
- aeobj_00 = aetypes.ObjectSpecifier(want=aetypes.Type('cfol'), form="alis", seld=object_alias, fr=None)
- aeobj_01 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type('posn'), fr=aeobj_00)
- args['----'] = aeobj_01
- args["data"] = [x, y]
- _reply, args, attrs = finder.send("core", "setd", args, attrs)
- if args.has_key('errn'):
- raise Error, aetools.decodeerror(args)
- return (x,y)
-
+ """_setlocation: Set the location of the icon for the object."""
+ finder = _getfinder()
+ args = {}
+ attrs = {}
+ aeobj_00 = aetypes.ObjectSpecifier(want=aetypes.Type('cfol'), form="alis", seld=object_alias, fr=None)
+ aeobj_01 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type('posn'), fr=aeobj_00)
+ args['----'] = aeobj_01
+ args["data"] = [x, y]
+ _reply, args, attrs = finder.send("core", "setd", args, attrs)
+ if args.has_key('errn'):
+ raise Error, aetools.decodeerror(args)
+ return (x,y)
+
def _getlocation(object_alias):
- """_getlocation: get the location of the icon for the object."""
- finder = _getfinder()
- args = {}
- attrs = {}
- aeobj_00 = aetypes.ObjectSpecifier(want=aetypes.Type('cfol'), form="alis", seld=object_alias, fr=None)
- aeobj_01 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type('posn'), fr=aeobj_00)
- args['----'] = aeobj_01
- _reply, args, attrs = finder.send("core", "getd", args, attrs)
- if args.has_key('errn'):
- raise Error, aetools.decodeerror(args)
- if args.has_key('----'):
- pos = args['----']
- return pos.h, pos.v
+ """_getlocation: get the location of the icon for the object."""
+ finder = _getfinder()
+ args = {}
+ attrs = {}
+ aeobj_00 = aetypes.ObjectSpecifier(want=aetypes.Type('cfol'), form="alis", seld=object_alias, fr=None)
+ aeobj_01 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type('posn'), fr=aeobj_00)
+ args['----'] = aeobj_01
+ _reply, args, attrs = finder.send("core", "getd", args, attrs)
+ if args.has_key('errn'):
+ raise Error, aetools.decodeerror(args)
+ if args.has_key('----'):
+ pos = args['----']
+ return pos.h, pos.v
def label(object, index=None):
- """label: set or get the label of the item. Specify file by name or fsspec."""
- object = Carbon.File.FSRef(object)
- object_alias = object.FSNewAliasMinimal()
- if index == None:
- return _getlabel(object_alias)
- if index < 0 or index > 7:
- index = 0
- return _setlabel(object_alias, index)
-
+ """label: set or get the label of the item. Specify file by name or fsspec."""
+ object = Carbon.File.FSRef(object)
+ object_alias = object.FSNewAliasMinimal()
+ if index == None:
+ return _getlabel(object_alias)
+ if index < 0 or index > 7:
+ index = 0
+ return _setlabel(object_alias, index)
+
def _getlabel(object_alias):
- """label: Get the label for the object."""
- finder = _getfinder()
- args = {}
- attrs = {}
- aeobj_00 = aetypes.ObjectSpecifier(want=aetypes.Type('cobj'), form="alis", seld=object_alias, fr=None)
- aeobj_01 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type('labi'), fr=aeobj_00)
- args['----'] = aeobj_01
- _reply, args, attrs = finder.send("core", "getd", args, attrs)
- if args.has_key('errn'):
- raise Error, aetools.decodeerror(args)
- if args.has_key('----'):
- return args['----']
+ """label: Get the label for the object."""
+ finder = _getfinder()
+ args = {}
+ attrs = {}
+ aeobj_00 = aetypes.ObjectSpecifier(want=aetypes.Type('cobj'), form="alis", seld=object_alias, fr=None)
+ aeobj_01 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type('labi'), fr=aeobj_00)
+ args['----'] = aeobj_01
+ _reply, args, attrs = finder.send("core", "getd", args, attrs)
+ if args.has_key('errn'):
+ raise Error, aetools.decodeerror(args)
+ if args.has_key('----'):
+ return args['----']
def _setlabel(object_alias, index):
- """label: Set the label for the object."""
- finder = _getfinder()
- args = {}
- attrs = {}
- _code = 'core'
- _subcode = 'setd'
- aeobj_0 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'),
- form="alis", seld=object_alias, fr=None)
- aeobj_1 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'),
- form="prop", seld=aetypes.Type('labi'), fr=aeobj_0)
- args['----'] = aeobj_1
- args["data"] = index
- _reply, args, attrs = finder.send(_code, _subcode, args, attrs)
- if args.has_key('errn'):
- raise Error, aetools.decodeerror(args)
- return index
+ """label: Set the label for the object."""
+ finder = _getfinder()
+ args = {}
+ attrs = {}
+ _code = 'core'
+ _subcode = 'setd'
+ aeobj_0 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'),
+ form="alis", seld=object_alias, fr=None)
+ aeobj_1 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'),
+ form="prop", seld=aetypes.Type('labi'), fr=aeobj_0)
+ args['----'] = aeobj_1
+ args["data"] = index
+ _reply, args, attrs = finder.send(_code, _subcode, args, attrs)
+ if args.has_key('errn'):
+ raise Error, aetools.decodeerror(args)
+ return index
def windowview(folder, view=None):
- """windowview: Set the view of the window for the folder. Specify file by name or fsspec.
- 0 = by icon (default)
- 1 = by name
- 2 = by button
- """
- fsr = Carbon.File.FSRef(folder)
- folder_alias = fsr.FSNewAliasMinimal()
- if view == None:
- return _getwindowview(folder_alias)
- return _setwindowview(folder_alias, view)
-
+ """windowview: Set the view of the window for the folder. Specify file by name or fsspec.
+ 0 = by icon (default)
+ 1 = by name
+ 2 = by button
+ """
+ fsr = Carbon.File.FSRef(folder)
+ folder_alias = fsr.FSNewAliasMinimal()
+ if view == None:
+ return _getwindowview(folder_alias)
+ return _setwindowview(folder_alias, view)
+
def _setwindowview(folder_alias, view=0):
- """set the windowview"""
- attrs = {}
- args = {}
- if view == 1:
- _v = aetypes.Type('pnam')
- elif view == 2:
- _v = aetypes.Type('lgbu')
- else:
- _v = aetypes.Type('iimg')
- finder = _getfinder()
- aeobj_0 = aetypes.ObjectSpecifier(want = aetypes.Type('cfol'),
- form = 'alis', seld = folder_alias, fr=None)
- aeobj_1 = aetypes.ObjectSpecifier(want = aetypes.Type('prop'),
- form = 'prop', seld = aetypes.Type('cwnd'), fr=aeobj_0)
- aeobj_2 = aetypes.ObjectSpecifier(want = aetypes.Type('prop'),
- form = 'prop', seld = aetypes.Type('pvew'), fr=aeobj_1)
- aeobj_3 = aetypes.ObjectSpecifier(want = aetypes.Type('prop'),
- form = 'prop', seld = _v, fr=None)
- _code = 'core'
- _subcode = 'setd'
- args['----'] = aeobj_2
- args['data'] = aeobj_3
- _reply, args, attrs = finder.send(_code, _subcode, args, attrs)
- if args.has_key('errn'):
- raise Error, aetools.decodeerror(args)
- if args.has_key('----'):
- return args['----']
+ """set the windowview"""
+ attrs = {}
+ args = {}
+ if view == 1:
+ _v = aetypes.Type('pnam')
+ elif view == 2:
+ _v = aetypes.Type('lgbu')
+ else:
+ _v = aetypes.Type('iimg')
+ finder = _getfinder()
+ aeobj_0 = aetypes.ObjectSpecifier(want = aetypes.Type('cfol'),
+ form = 'alis', seld = folder_alias, fr=None)
+ aeobj_1 = aetypes.ObjectSpecifier(want = aetypes.Type('prop'),
+ form = 'prop', seld = aetypes.Type('cwnd'), fr=aeobj_0)
+ aeobj_2 = aetypes.ObjectSpecifier(want = aetypes.Type('prop'),
+ form = 'prop', seld = aetypes.Type('pvew'), fr=aeobj_1)
+ aeobj_3 = aetypes.ObjectSpecifier(want = aetypes.Type('prop'),
+ form = 'prop', seld = _v, fr=None)
+ _code = 'core'
+ _subcode = 'setd'
+ args['----'] = aeobj_2
+ args['data'] = aeobj_3
+ _reply, args, attrs = finder.send(_code, _subcode, args, attrs)
+ if args.has_key('errn'):
+ raise Error, aetools.decodeerror(args)
+ if args.has_key('----'):
+ return args['----']
def _getwindowview(folder_alias):
- """get the windowview"""
- attrs = {}
- args = {}
- finder = _getfinder()
- args = {}
- attrs = {}
- aeobj_00 = aetypes.ObjectSpecifier(want=aetypes.Type('cfol'), form="alis", seld=folder_alias, fr=None)
- aeobj_01 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type('cwnd'), fr=aeobj_00)
- aeobj_02 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type('pvew'), fr=aeobj_01)
- args['----'] = aeobj_02
- _reply, args, attrs = finder.send("core", "getd", args, attrs)
- if args.has_key('errn'):
- raise Error, aetools.decodeerror(args)
- views = {'iimg':0, 'pnam':1, 'lgbu':2}
- if args.has_key('----'):
- return views[args['----'].enum]
+ """get the windowview"""
+ attrs = {}
+ args = {}
+ finder = _getfinder()
+ args = {}
+ attrs = {}
+ aeobj_00 = aetypes.ObjectSpecifier(want=aetypes.Type('cfol'), form="alis", seld=folder_alias, fr=None)
+ aeobj_01 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type('cwnd'), fr=aeobj_00)
+ aeobj_02 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type('pvew'), fr=aeobj_01)
+ args['----'] = aeobj_02
+ _reply, args, attrs = finder.send("core", "getd", args, attrs)
+ if args.has_key('errn'):
+ raise Error, aetools.decodeerror(args)
+ views = {'iimg':0, 'pnam':1, 'lgbu':2}
+ if args.has_key('----'):
+ return views[args['----'].enum]
def windowsize(folder, size=None):
- """Set the size of a Finder window for folder to size=(w, h), Specify by path.
- If size=None, windowsize will return the current size of the window.
- Specify file by name or fsspec.
- """
- fsr = Carbon.File.FSRef(folder)
- folder_alias = fsr.FSNewAliasMinimal()
- openwindow(fsr)
- if not size:
- return _getwindowsize(folder_alias)
- return _setwindowsize(folder_alias, size)
-
+ """Set the size of a Finder window for folder to size=(w, h), Specify by path.
+ If size=None, windowsize will return the current size of the window.
+ Specify file by name or fsspec.
+ """
+ fsr = Carbon.File.FSRef(folder)
+ folder_alias = fsr.FSNewAliasMinimal()
+ openwindow(fsr)
+ if not size:
+ return _getwindowsize(folder_alias)
+ return _setwindowsize(folder_alias, size)
+
def _setwindowsize(folder_alias, (w, h)):
- """Set the size of a Finder window for folder to (w, h)"""
- finder = _getfinder()
- args = {}
- attrs = {}
- _code = 'core'
- _subcode = 'setd'
- aevar00 = [w, h]
- aeobj_0 = aetypes.ObjectSpecifier(want=aetypes.Type('cfol'),
- form="alis", seld=folder_alias, fr=None)
- aeobj_1 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'),
- form="prop", seld=aetypes.Type('cwnd'), fr=aeobj_0)
- aeobj_2 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'),
- form="prop", seld=aetypes.Type('ptsz'), fr=aeobj_1)
- args['----'] = aeobj_2
- args["data"] = aevar00
- _reply, args, attrs = finder.send(_code, _subcode, args, attrs)
- if args.has_key('errn'):
- raise Error, aetools.decodeerror(args)
- return (w, h)
-
+ """Set the size of a Finder window for folder to (w, h)"""
+ finder = _getfinder()
+ args = {}
+ attrs = {}
+ _code = 'core'
+ _subcode = 'setd'
+ aevar00 = [w, h]
+ aeobj_0 = aetypes.ObjectSpecifier(want=aetypes.Type('cfol'),
+ form="alis", seld=folder_alias, fr=None)
+ aeobj_1 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'),
+ form="prop", seld=aetypes.Type('cwnd'), fr=aeobj_0)
+ aeobj_2 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'),
+ form="prop", seld=aetypes.Type('ptsz'), fr=aeobj_1)
+ args['----'] = aeobj_2
+ args["data"] = aevar00
+ _reply, args, attrs = finder.send(_code, _subcode, args, attrs)
+ if args.has_key('errn'):
+ raise Error, aetools.decodeerror(args)
+ return (w, h)
+
def _getwindowsize(folder_alias):
- """Set the size of a Finder window for folder to (w, h)"""
- finder = _getfinder()
- args = {}
- attrs = {}
- aeobj_0 = aetypes.ObjectSpecifier(want=aetypes.Type('cfol'),
- form="alis", seld=folder_alias, fr=None)
- aeobj_1 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'),
- form="prop", seld=aetypes.Type('cwnd'), fr=aeobj_0)
- aeobj_2 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'),
- form="prop", seld=aetypes.Type('posn'), fr=aeobj_1)
- args['----'] = aeobj_2
- _reply, args, attrs = finder.send('core', 'getd', args, attrs)
- if args.has_key('errn'):
- raise Error, aetools.decodeerror(args)
- if args.has_key('----'):
- return args['----']
+ """Set the size of a Finder window for folder to (w, h)"""
+ finder = _getfinder()
+ args = {}
+ attrs = {}
+ aeobj_0 = aetypes.ObjectSpecifier(want=aetypes.Type('cfol'),
+ form="alis", seld=folder_alias, fr=None)
+ aeobj_1 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'),
+ form="prop", seld=aetypes.Type('cwnd'), fr=aeobj_0)
+ aeobj_2 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'),
+ form="prop", seld=aetypes.Type('posn'), fr=aeobj_1)
+ args['----'] = aeobj_2
+ _reply, args, attrs = finder.send('core', 'getd', args, attrs)
+ if args.has_key('errn'):
+ raise Error, aetools.decodeerror(args)
+ if args.has_key('----'):
+ return args['----']
def windowposition(folder, pos=None):
- """Set the position of a Finder window for folder to pos=(w, h)."""
- fsr = Carbon.File.FSRef(folder)
- folder_alias = fsr.FSNewAliasMinimal()
- openwindow(fsr)
- if not pos:
- return _getwindowposition(folder_alias)
- if type(pos) == InstanceType:
- # pos might be a QDPoint object as returned by _getwindowposition
- pos = (pos.h, pos.v)
- return _setwindowposition(folder_alias, pos)
-
+ """Set the position of a Finder window for folder to pos=(w, h)."""
+ fsr = Carbon.File.FSRef(folder)
+ folder_alias = fsr.FSNewAliasMinimal()
+ openwindow(fsr)
+ if not pos:
+ return _getwindowposition(folder_alias)
+ if type(pos) == InstanceType:
+ # pos might be a QDPoint object as returned by _getwindowposition
+ pos = (pos.h, pos.v)
+ return _setwindowposition(folder_alias, pos)
+
def _setwindowposition(folder_alias, (x, y)):
- """Set the size of a Finder window for folder to (w, h)."""
- finder = _getfinder()
- args = {}
- attrs = {}
- aeobj_0 = aetypes.ObjectSpecifier(want=aetypes.Type('cfol'),
- form="alis", seld=folder_alias, fr=None)
- aeobj_1 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'),
- form="prop", seld=aetypes.Type('cwnd'), fr=aeobj_0)
- aeobj_2 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'),
- form="prop", seld=aetypes.Type('posn'), fr=aeobj_1)
- args['----'] = aeobj_2
- args["data"] = [x, y]
- _reply, args, attrs = finder.send('core', 'setd', args, attrs)
- if args.has_key('errn'):
- raise Error, aetools.decodeerror(args)
- if args.has_key('----'):
- return args['----']
+ """Set the size of a Finder window for folder to (w, h)."""
+ finder = _getfinder()
+ args = {}
+ attrs = {}
+ aeobj_0 = aetypes.ObjectSpecifier(want=aetypes.Type('cfol'),
+ form="alis", seld=folder_alias, fr=None)
+ aeobj_1 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'),
+ form="prop", seld=aetypes.Type('cwnd'), fr=aeobj_0)
+ aeobj_2 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'),
+ form="prop", seld=aetypes.Type('posn'), fr=aeobj_1)
+ args['----'] = aeobj_2
+ args["data"] = [x, y]
+ _reply, args, attrs = finder.send('core', 'setd', args, attrs)
+ if args.has_key('errn'):
+ raise Error, aetools.decodeerror(args)
+ if args.has_key('----'):
+ return args['----']
def _getwindowposition(folder_alias):
- """Get the size of a Finder window for folder, Specify by path."""
- finder = _getfinder()
- args = {}
- attrs = {}
- aeobj_0 = aetypes.ObjectSpecifier(want=aetypes.Type('cfol'),
- form="alis", seld=folder_alias, fr=None)
- aeobj_1 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'),
- form="prop", seld=aetypes.Type('cwnd'), fr=aeobj_0)
- aeobj_2 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'),
- form="prop", seld=aetypes.Type('ptsz'), fr=aeobj_1)
- args['----'] = aeobj_2
- _reply, args, attrs = finder.send('core', 'getd', args, attrs)
- if args.has_key('errn'):
- raise Error, aetools.decodeerror(args)
- if args.has_key('----'):
- return args['----']
+ """Get the size of a Finder window for folder, Specify by path."""
+ finder = _getfinder()
+ args = {}
+ attrs = {}
+ aeobj_0 = aetypes.ObjectSpecifier(want=aetypes.Type('cfol'),
+ form="alis", seld=folder_alias, fr=None)
+ aeobj_1 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'),
+ form="prop", seld=aetypes.Type('cwnd'), fr=aeobj_0)
+ aeobj_2 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'),
+ form="prop", seld=aetypes.Type('ptsz'), fr=aeobj_1)
+ args['----'] = aeobj_2
+ _reply, args, attrs = finder.send('core', 'getd', args, attrs)
+ if args.has_key('errn'):
+ raise Error, aetools.decodeerror(args)
+ if args.has_key('----'):
+ return args['----']
def icon(object, icondata=None):
- """icon sets the icon of object, if no icondata is given,
- icon will return an AE object with binary data for the current icon.
- If left untouched, this data can be used to paste the icon on another file.
- Development opportunity: get and set the data as PICT."""
- fsr = Carbon.File.FSRef(object)
- object_alias = fsr.FSNewAliasMinimal()
- if icondata == None:
- return _geticon(object_alias)
- return _seticon(object_alias, icondata)
-
+ """icon sets the icon of object, if no icondata is given,
+ icon will return an AE object with binary data for the current icon.
+ If left untouched, this data can be used to paste the icon on another file.
+ Development opportunity: get and set the data as PICT."""
+ fsr = Carbon.File.FSRef(object)
+ object_alias = fsr.FSNewAliasMinimal()
+ if icondata == None:
+ return _geticon(object_alias)
+ return _seticon(object_alias, icondata)
+
def _geticon(object_alias):
- """get the icondata for object. Binary data of some sort."""
- finder = _getfinder()
- args = {}
- attrs = {}
- aeobj_00 = aetypes.ObjectSpecifier(want=aetypes.Type('cobj'),
- form="alis", seld=object_alias, fr=None)
- aeobj_01 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'),
- form="prop", seld=aetypes.Type('iimg'), fr=aeobj_00)
- args['----'] = aeobj_01
- _reply, args, attrs = finder.send("core", "getd", args, attrs)
- if args.has_key('errn'):
- raise Error, aetools.decodeerror(args)
- if args.has_key('----'):
- return args['----']
+ """get the icondata for object. Binary data of some sort."""
+ finder = _getfinder()
+ args = {}
+ attrs = {}
+ aeobj_00 = aetypes.ObjectSpecifier(want=aetypes.Type('cobj'),
+ form="alis", seld=object_alias, fr=None)
+ aeobj_01 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'),
+ form="prop", seld=aetypes.Type('iimg'), fr=aeobj_00)
+ args['----'] = aeobj_01
+ _reply, args, attrs = finder.send("core", "getd", args, attrs)
+ if args.has_key('errn'):
+ raise Error, aetools.decodeerror(args)
+ if args.has_key('----'):
+ return args['----']
def _seticon(object_alias, icondata):
- """set the icondata for object, formatted as produced by _geticon()"""
- finder = _getfinder()
- args = {}
- attrs = {}
- aeobj_00 = aetypes.ObjectSpecifier(want=aetypes.Type('cobj'),
- form="alis", seld=object_alias, fr=None)
- aeobj_01 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'),
- form="prop", seld=aetypes.Type('iimg'), fr=aeobj_00)
- args['----'] = aeobj_01
- args["data"] = icondata
- _reply, args, attrs = finder.send("core", "setd", args, attrs)
- if args.has_key('errn'):
- raise Error, aetools.decodeerror(args)
- if args.has_key('----'):
- return args['----'].data
+ """set the icondata for object, formatted as produced by _geticon()"""
+ finder = _getfinder()
+ args = {}
+ attrs = {}
+ aeobj_00 = aetypes.ObjectSpecifier(want=aetypes.Type('cobj'),
+ form="alis", seld=object_alias, fr=None)
+ aeobj_01 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'),
+ form="prop", seld=aetypes.Type('iimg'), fr=aeobj_00)
+ args['----'] = aeobj_01
+ args["data"] = icondata
+ _reply, args, attrs = finder.send("core", "setd", args, attrs)
+ if args.has_key('errn'):
+ raise Error, aetools.decodeerror(args)
+ if args.has_key('----'):
+ return args['----'].data
#---------------------------------------------------
-# Volumes and servers.
-
+# Volumes and servers.
+
def mountvolume(volume, server=None, username=None, password=None):
- """mount a volume, local or on a server on AppleTalk.
- Note: mounting a ASIP server requires a different operation.
- server is the name of the server where the volume belongs
- username, password belong to a registered user of the volume."""
- finder = _getfinder()
- args = {}
- attrs = {}
- if password:
- args["PASS"] = password
- if username:
- args["USER"] = username
- if server:
- args["SRVR"] = server
- args['----'] = volume
- _reply, args, attrs = finder.send("aevt", "mvol", args, attrs)
- if args.has_key('errn'):
- raise Error, aetools.decodeerror(args)
- if args.has_key('----'):
- return args['----']
+ """mount a volume, local or on a server on AppleTalk.
+ Note: mounting a ASIP server requires a different operation.
+ server is the name of the server where the volume belongs
+ username, password belong to a registered user of the volume."""
+ finder = _getfinder()
+ args = {}
+ attrs = {}
+ if password:
+ args["PASS"] = password
+ if username:
+ args["USER"] = username
+ if server:
+ args["SRVR"] = server
+ args['----'] = volume
+ _reply, args, attrs = finder.send("aevt", "mvol", args, attrs)
+ if args.has_key('errn'):
+ raise Error, aetools.decodeerror(args)
+ if args.has_key('----'):
+ return args['----']
def unmountvolume(volume):
- """unmount a volume that's on the desktop"""
- putaway(volume)
-
+ """unmount a volume that's on the desktop"""
+ putaway(volume)
+
def putaway(object):
- """puth the object away, whereever it came from."""
- finder = _getfinder()
- args = {}
- attrs = {}
- args['----'] = aetypes.ObjectSpecifier(want=aetypes.Type('cdis'), form="name", seld=object, fr=None)
- _reply, args, attrs = talker.send("fndr", "ptwy", args, attrs)
- if args.has_key('errn'):
- raise Error, aetools.decodeerror(args)
- if args.has_key('----'):
- return args['----']
+ """puth the object away, whereever it came from."""
+ finder = _getfinder()
+ args = {}
+ attrs = {}
+ args['----'] = aetypes.ObjectSpecifier(want=aetypes.Type('cdis'), form="name", seld=object, fr=None)
+ _reply, args, attrs = talker.send("fndr", "ptwy", args, attrs)
+ if args.has_key('errn'):
+ raise Error, aetools.decodeerror(args)
+ if args.has_key('----'):
+ return args['----']
#---------------------------------------------------
-# Miscellaneous functions
+# Miscellaneous functions
#
def volumelevel(level):
- """set the audio output level, parameter between 0 (silent) and 7 (full blast)"""
- finder = _getfinder()
- args = {}
- attrs = {}
- if level < 0:
- level = 0
- elif level > 7:
- level = 7
- args['----'] = level
- _reply, args, attrs = finder.send("aevt", "stvl", args, attrs)
- if args.has_key('errn'):
- raise Error, aetools.decodeerror(args)
- if args.has_key('----'):
- return args['----']
+ """set the audio output level, parameter between 0 (silent) and 7 (full blast)"""
+ finder = _getfinder()
+ args = {}
+ attrs = {}
+ if level < 0:
+ level = 0
+ elif level > 7:
+ level = 7
+ args['----'] = level
+ _reply, args, attrs = finder.send("aevt", "stvl", args, attrs)
+ if args.has_key('errn'):
+ raise Error, aetools.decodeerror(args)
+ if args.has_key('----'):
+ return args['----']
def OSversion():
- """return the version of the system software"""
- finder = _getfinder()
- args = {}
- attrs = {}
- aeobj_00 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type('ver2'), fr=None)
- args['----'] = aeobj_00
- _reply, args, attrs = finder.send("core", "getd", args, attrs)
- if args.has_key('errn'):
- raise Error, aetools.decodeerror(args)
- if args.has_key('----'):
- return args['----']
+ """return the version of the system software"""
+ finder = _getfinder()
+ args = {}
+ attrs = {}
+ aeobj_00 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type('ver2'), fr=None)
+ args['----'] = aeobj_00
+ _reply, args, attrs = finder.send("core", "getd", args, attrs)
+ if args.has_key('errn'):
+ raise Error, aetools.decodeerror(args)
+ if args.has_key('----'):
+ return args['----']
def filesharing():
- """return the current status of filesharing and whether it is starting up or not:
- -1 file sharing is off and not starting up
- 0 file sharing is off and starting up
- 1 file sharing is on"""
- status = -1
- finder = _getfinder()
- # see if it is on
- args = {}
- attrs = {}
- args['----'] = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type('fshr'), fr=None)
- _reply, args, attrs = finder.send("core", "getd", args, attrs)
- if args.has_key('errn'):
- raise Error, aetools.decodeerror(args)
- if args.has_key('----'):
- if args['----'] == 0:
- status = -1
- else:
- status = 1
- # is it starting up perchance?
- args = {}
- attrs = {}
- args['----'] = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type('fsup'), fr=None)
- _reply, args, attrs = finder.send("core", "getd", args, attrs)
- if args.has_key('errn'):
- raise Error, aetools.decodeerror(args)
- if args.has_key('----'):
- if args['----'] == 1:
- status = 0
- return status
-
+ """return the current status of filesharing and whether it is starting up or not:
+ -1 file sharing is off and not starting up
+ 0 file sharing is off and starting up
+ 1 file sharing is on"""
+ status = -1
+ finder = _getfinder()
+ # see if it is on
+ args = {}
+ attrs = {}
+ args['----'] = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type('fshr'), fr=None)
+ _reply, args, attrs = finder.send("core", "getd", args, attrs)
+ if args.has_key('errn'):
+ raise Error, aetools.decodeerror(args)
+ if args.has_key('----'):
+ if args['----'] == 0:
+ status = -1
+ else:
+ status = 1
+ # is it starting up perchance?
+ args = {}
+ attrs = {}
+ args['----'] = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type('fsup'), fr=None)
+ _reply, args, attrs = finder.send("core", "getd", args, attrs)
+ if args.has_key('errn'):
+ raise Error, aetools.decodeerror(args)
+ if args.has_key('----'):
+ if args['----'] == 1:
+ status = 0
+ return status
+
def movetotrash(path):
- """move the object to the trash"""
- fss = Carbon.File.FSSpec(path)
- trashfolder = Carbon.Folder.FSFindFolder(fss.as_tuple()[0], 'trsh', 0)
- move(path, trashfolder)
+ """move the object to the trash"""
+ fss = Carbon.File.FSSpec(path)
+ trashfolder = Carbon.Folder.FSFindFolder(fss.as_tuple()[0], 'trsh', 0)
+ move(path, trashfolder)
def emptytrash():
- """empty the trash"""
- finder = _getfinder()
- args = {}
- attrs = {}
- args['----'] = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type('trsh'), fr=None)
- _reply, args, attrs = finder.send("fndr", "empt", args, attrs)
- if args.has_key('errn'):
- raise aetools.Error, aetools.decodeerror(args)
+ """empty the trash"""
+ finder = _getfinder()
+ args = {}
+ attrs = {}
+ args['----'] = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type('trsh'), fr=None)
+ _reply, args, attrs = finder.send("fndr", "empt", args, attrs)
+ if args.has_key('errn'):
+ raise aetools.Error, aetools.decodeerror(args)
def _test():
- import EasyDialogs
- print 'Original findertools functionality test...'
- print 'Testing launch...'
- pathname = EasyDialogs.AskFileForOpen('File to launch:')
- if pathname:
- result = launch(pathname)
- if result:
- print 'Result: ', result
- print 'Press return-',
- sys.stdin.readline()
- print 'Testing print...'
- pathname = EasyDialogs.AskFileForOpen('File to print:')
- if pathname:
- result = Print(pathname)
- if result:
- print 'Result: ', result
- print 'Press return-',
- sys.stdin.readline()
- print 'Testing copy...'
- pathname = EasyDialogs.AskFileForOpen('File to copy:')
- if pathname:
- destdir = EasyDialogs.AskFolder('Destination:')
- if destdir:
- result = copy(pathname, destdir)
- if result:
- print 'Result:', result
- print 'Press return-',
- sys.stdin.readline()
- print 'Testing move...'
- pathname = EasyDialogs.AskFileForOpen('File to move:')
- if pathname:
- destdir = EasyDialogs.AskFolder('Destination:')
- if destdir:
- result = move(pathname, destdir)
- if result:
- print 'Result:', result
- print 'Press return-',
- sys.stdin.readline()
- print 'Testing sleep...'
- if EasyDialogs.AskYesNoCancel('Sleep?') > 0:
- result = sleep()
- if result:
- print 'Result:', result
- print 'Press return-',
- sys.stdin.readline()
- print 'Testing shutdown...'
- if EasyDialogs.AskYesNoCancel('Shut down?') > 0:
- result = shutdown()
- if result:
- print 'Result:', result
- print 'Press return-',
- sys.stdin.readline()
- print 'Testing restart...'
- if EasyDialogs.AskYesNoCancel('Restart?') > 0:
- result = restart()
- if result:
- print 'Result:', result
- print 'Press return-',
- sys.stdin.readline()
+ import EasyDialogs
+ print 'Original findertools functionality test...'
+ print 'Testing launch...'
+ pathname = EasyDialogs.AskFileForOpen('File to launch:')
+ if pathname:
+ result = launch(pathname)
+ if result:
+ print 'Result: ', result
+ print 'Press return-',
+ sys.stdin.readline()
+ print 'Testing print...'
+ pathname = EasyDialogs.AskFileForOpen('File to print:')
+ if pathname:
+ result = Print(pathname)
+ if result:
+ print 'Result: ', result
+ print 'Press return-',
+ sys.stdin.readline()
+ print 'Testing copy...'
+ pathname = EasyDialogs.AskFileForOpen('File to copy:')
+ if pathname:
+ destdir = EasyDialogs.AskFolder('Destination:')
+ if destdir:
+ result = copy(pathname, destdir)
+ if result:
+ print 'Result:', result
+ print 'Press return-',
+ sys.stdin.readline()
+ print 'Testing move...'
+ pathname = EasyDialogs.AskFileForOpen('File to move:')
+ if pathname:
+ destdir = EasyDialogs.AskFolder('Destination:')
+ if destdir:
+ result = move(pathname, destdir)
+ if result:
+ print 'Result:', result
+ print 'Press return-',
+ sys.stdin.readline()
+ print 'Testing sleep...'
+ if EasyDialogs.AskYesNoCancel('Sleep?') > 0:
+ result = sleep()
+ if result:
+ print 'Result:', result
+ print 'Press return-',
+ sys.stdin.readline()
+ print 'Testing shutdown...'
+ if EasyDialogs.AskYesNoCancel('Shut down?') > 0:
+ result = shutdown()
+ if result:
+ print 'Result:', result
+ print 'Press return-',
+ sys.stdin.readline()
+ print 'Testing restart...'
+ if EasyDialogs.AskYesNoCancel('Restart?') > 0:
+ result = restart()
+ if result:
+ print 'Result:', result
+ print 'Press return-',
+ sys.stdin.readline()
def _test2():
- print '\nmorefindertools version %s\nTests coming up...' %__version__
- import os
- import random
-
- # miscellaneous
- print '\tfilesharing on?', filesharing() # is file sharing on, off, starting up?
- print '\tOS version', OSversion() # the version of the system software
-
- # set the soundvolume in a simple way
- print '\tSystem beep volume'
- for i in range(0, 7):
- volumelevel(i)
- MacOS.SysBeep()
-
- # Finder's windows, file location, file attributes
- open("@findertoolstest", "w")
- f = "@findertoolstest"
- reveal(f) # reveal this file in a Finder window
- select(f) # select this file
-
- base, file = os.path.split(f)
- closewindow(base) # close the window this file is in (opened by reveal)
- openwindow(base) # open it again
- windowview(base, 1) # set the view by list
-
- label(f, 2) # set the label of this file to something orange
- print '\tlabel', label(f) # get the label of this file
-
- # the file location only works in a window with icon view!
- print 'Random locations for an icon'
- windowview(base, 0) # set the view by icon
- windowsize(base, (600, 600))
- for i in range(50):
- location(f, (random.randint(10, 590), random.randint(10, 590)))
-
- windowsize(base, (200, 400))
- windowview(base, 1) # set the view by icon
-
- orgpos = windowposition(base)
- print 'Animated window location'
- for i in range(10):
- pos = (100+i*10, 100+i*10)
- windowposition(base, pos)
- print '\twindow position', pos
- windowposition(base, orgpos) # park it where it was before
-
- print 'Put a comment in file', f, ':'
- print '\t', comment(f) # print the Finder comment this file has
- s = 'This is a comment no one reads!'
- comment(f, s) # set the Finder comment
-
+ print '\nmorefindertools version %s\nTests coming up...' %__version__
+ import os
+ import random
+
+ # miscellaneous
+ print '\tfilesharing on?', filesharing() # is file sharing on, off, starting up?
+ print '\tOS version', OSversion() # the version of the system software
+
+ # set the soundvolume in a simple way
+ print '\tSystem beep volume'
+ for i in range(0, 7):
+ volumelevel(i)
+ MacOS.SysBeep()
+
+ # Finder's windows, file location, file attributes
+ open("@findertoolstest", "w")
+ f = "@findertoolstest"
+ reveal(f) # reveal this file in a Finder window
+ select(f) # select this file
+
+ base, file = os.path.split(f)
+ closewindow(base) # close the window this file is in (opened by reveal)
+ openwindow(base) # open it again
+ windowview(base, 1) # set the view by list
+
+ label(f, 2) # set the label of this file to something orange
+ print '\tlabel', label(f) # get the label of this file
+
+ # the file location only works in a window with icon view!
+ print 'Random locations for an icon'
+ windowview(base, 0) # set the view by icon
+ windowsize(base, (600, 600))
+ for i in range(50):
+ location(f, (random.randint(10, 590), random.randint(10, 590)))
+
+ windowsize(base, (200, 400))
+ windowview(base, 1) # set the view by icon
+
+ orgpos = windowposition(base)
+ print 'Animated window location'
+ for i in range(10):
+ pos = (100+i*10, 100+i*10)
+ windowposition(base, pos)
+ print '\twindow position', pos
+ windowposition(base, orgpos) # park it where it was before
+
+ print 'Put a comment in file', f, ':'
+ print '\t', comment(f) # print the Finder comment this file has
+ s = 'This is a comment no one reads!'
+ comment(f, s) # set the Finder comment
+
def _test3():
- print 'MacOS9 or better specific functions'
- # processes
- pr = processes() # return a list of tuples with (active_processname, creatorcode)
- print 'Return a list of current active processes:'
- for p in pr:
- print '\t', p
-
- # get attributes of the first process in the list
- print 'Attributes of the first process in the list:'
- pinfo = processinfo(pr[0][0])
- print '\t', pr[0][0]
- print '\t\tmemory partition', pinfo.partition # the memory allocated to this process
- print '\t\tmemory used', pinfo.used # the memory actuall used by this process
- print '\t\tis visible', pinfo.visible # is the process visible to the user
- print '\t\tis frontmost', pinfo.frontmost # is the process the front most one?
- print '\t\thas scripting', pinfo.hasscripting # is the process scriptable?
- print '\t\taccepts high level events', pinfo.accepthighlevel # does the process accept high level appleevents?
+ print 'MacOS9 or better specific functions'
+ # processes
+ pr = processes() # return a list of tuples with (active_processname, creatorcode)
+ print 'Return a list of current active processes:'
+ for p in pr:
+ print '\t', p
+
+ # get attributes of the first process in the list
+ print 'Attributes of the first process in the list:'
+ pinfo = processinfo(pr[0][0])
+ print '\t', pr[0][0]
+ print '\t\tmemory partition', pinfo.partition # the memory allocated to this process
+ print '\t\tmemory used', pinfo.used # the memory actuall used by this process
+ print '\t\tis visible', pinfo.visible # is the process visible to the user
+ print '\t\tis frontmost', pinfo.frontmost # is the process the front most one?
+ print '\t\thas scripting', pinfo.hasscripting # is the process scriptable?
+ print '\t\taccepts high level events', pinfo.accepthighlevel # does the process accept high level appleevents?
if __name__ == '__main__':
- _test()
- _test2()
- _test3()
-
+ _test()
+ _test2()
+ _test3()
+
diff --git a/Lib/plat-mac/gensuitemodule.py b/Lib/plat-mac/gensuitemodule.py
index 0fcd1c4..622016e 100644
--- a/Lib/plat-mac/gensuitemodule.py
+++ b/Lib/plat-mac/gensuitemodule.py
@@ -29,8 +29,8 @@ DEFAULT_STANDARD_PACKAGEFOLDER=os.path.join(_MAC_LIB_FOLDER, 'lib-scriptpackages
DEFAULT_USER_PACKAGEFOLDER=distutils.sysconfig.get_python_lib()
def usage():
- sys.stderr.write("Usage: %s [opts] application-or-resource-file\n" % sys.argv[0])
- sys.stderr.write("""Options:
+ sys.stderr.write("Usage: %s [opts] application-or-resource-file\n" % sys.argv[0])
+ sys.stderr.write("""Options:
--output pkgdir Pathname of the output package (short: -o)
--resource Parse resource file in stead of launching application (-r)
--base package Use another base package in stead of default StdSuites (-b)
@@ -39,252 +39,252 @@ def usage():
--dump Dump aete resource to stdout in stead of creating module (-d)
--verbose Tell us what happens (-v)
""")
- sys.exit(1)
+ sys.exit(1)
def main():
- if len(sys.argv) > 1:
- SHORTOPTS = "rb:o:e:c:dv"
- LONGOPTS = ("resource", "base=", "output=", "edit=", "creator=", "dump", "verbose")
- try:
- opts, args = getopt.getopt(sys.argv[1:], SHORTOPTS, LONGOPTS)
- except getopt.GetoptError:
- usage()
-
- process_func = processfile
- basepkgname = 'StdSuites'
- output = None
- edit_modnames = []
- creatorsignature = None
- dump = None
- verbose = None
-
- for o, a in opts:
- if o in ('-r', '--resource'):
- process_func = processfile_fromresource
- if o in ('-b', '--base'):
- basepkgname = a
- if o in ('-o', '--output'):
- output = a
- if o in ('-e', '--edit'):
- split = a.split('=')
- if len(split) != 2:
- usage()
- edit_modnames.append(split)
- if o in ('-c', '--creator'):
- if len(a) != 4:
- sys.stderr.write("creator must be 4-char string\n")
- sys.exit(1)
- creatorsignature = a
- if o in ('-d', '--dump'):
- dump = sys.stdout
- if o in ('-v', '--verbose'):
- verbose = sys.stderr
-
-
- if output and len(args) > 1:
- sys.stderr.write("%s: cannot specify --output with multiple inputs\n" % sys.argv[0])
- sys.exit(1)
-
- for filename in args:
- process_func(filename, output=output, basepkgname=basepkgname,
- edit_modnames=edit_modnames, creatorsignature=creatorsignature,
- dump=dump, verbose=verbose)
- else:
- main_interactive()
-
+ if len(sys.argv) > 1:
+ SHORTOPTS = "rb:o:e:c:dv"
+ LONGOPTS = ("resource", "base=", "output=", "edit=", "creator=", "dump", "verbose")
+ try:
+ opts, args = getopt.getopt(sys.argv[1:], SHORTOPTS, LONGOPTS)
+ except getopt.GetoptError:
+ usage()
+
+ process_func = processfile
+ basepkgname = 'StdSuites'
+ output = None
+ edit_modnames = []
+ creatorsignature = None
+ dump = None
+ verbose = None
+
+ for o, a in opts:
+ if o in ('-r', '--resource'):
+ process_func = processfile_fromresource
+ if o in ('-b', '--base'):
+ basepkgname = a
+ if o in ('-o', '--output'):
+ output = a
+ if o in ('-e', '--edit'):
+ split = a.split('=')
+ if len(split) != 2:
+ usage()
+ edit_modnames.append(split)
+ if o in ('-c', '--creator'):
+ if len(a) != 4:
+ sys.stderr.write("creator must be 4-char string\n")
+ sys.exit(1)
+ creatorsignature = a
+ if o in ('-d', '--dump'):
+ dump = sys.stdout
+ if o in ('-v', '--verbose'):
+ verbose = sys.stderr
+
+
+ if output and len(args) > 1:
+ sys.stderr.write("%s: cannot specify --output with multiple inputs\n" % sys.argv[0])
+ sys.exit(1)
+
+ for filename in args:
+ process_func(filename, output=output, basepkgname=basepkgname,
+ edit_modnames=edit_modnames, creatorsignature=creatorsignature,
+ dump=dump, verbose=verbose)
+ else:
+ main_interactive()
+
def main_interactive(interact=0, basepkgname='StdSuites'):
- if interact:
- # Ask for save-filename for each module
- edit_modnames = None
- else:
- # Use default filenames for each module
- edit_modnames = []
- appsfolder = Carbon.Folder.FSFindFolder(-32765, 'apps', 0)
- filename = EasyDialogs.AskFileForOpen(
- message='Select scriptable application',
- dialogOptionFlags=0x1056, # allow selection of .app bundles
- defaultLocation=appsfolder)
- if not filename:
- return
- if not is_scriptable(filename):
- if EasyDialogs.AskYesNoCancel(
- "Warning: application does not seem scriptable",
- yes="Continue", default=2, no="") <= 0:
- return
- try:
- processfile(filename, edit_modnames=edit_modnames, basepkgname=basepkgname,
- verbose=sys.stderr)
- except MacOS.Error, arg:
- print "Error getting terminology:", arg
- print "Retry, manually parsing resources"
- processfile_fromresource(filename, edit_modnames=edit_modnames,
- basepkgname=basepkgname, verbose=sys.stderr)
-
+ if interact:
+ # Ask for save-filename for each module
+ edit_modnames = None
+ else:
+ # Use default filenames for each module
+ edit_modnames = []
+ appsfolder = Carbon.Folder.FSFindFolder(-32765, 'apps', 0)
+ filename = EasyDialogs.AskFileForOpen(
+ message='Select scriptable application',
+ dialogOptionFlags=0x1056, # allow selection of .app bundles
+ defaultLocation=appsfolder)
+ if not filename:
+ return
+ if not is_scriptable(filename):
+ if EasyDialogs.AskYesNoCancel(
+ "Warning: application does not seem scriptable",
+ yes="Continue", default=2, no="") <= 0:
+ return
+ try:
+ processfile(filename, edit_modnames=edit_modnames, basepkgname=basepkgname,
+ verbose=sys.stderr)
+ except MacOS.Error, arg:
+ print "Error getting terminology:", arg
+ print "Retry, manually parsing resources"
+ processfile_fromresource(filename, edit_modnames=edit_modnames,
+ basepkgname=basepkgname, verbose=sys.stderr)
+
def is_scriptable(application):
- """Return true if the application is scriptable"""
- if os.path.isdir(application):
- plistfile = os.path.join(application, 'Contents', 'Info.plist')
- if not os.path.exists(plistfile):
- return False
- plist = plistlib.Plist.fromFile(plistfile)
- return plist.get('NSAppleScriptEnabled', False)
- # If it is a file test for an aete/aeut resource.
- currf = CurResFile()
- try:
- refno = macresource.open_pathname(application)
- except MacOS.Error:
- return False
- UseResFile(refno)
- n_terminology = Count1Resources('aete') + Count1Resources('aeut') + \
- Count1Resources('scsz') + Count1Resources('osiz')
- CloseResFile(refno)
- UseResFile(currf)
- return n_terminology > 0
+ """Return true if the application is scriptable"""
+ if os.path.isdir(application):
+ plistfile = os.path.join(application, 'Contents', 'Info.plist')
+ if not os.path.exists(plistfile):
+ return False
+ plist = plistlib.Plist.fromFile(plistfile)
+ return plist.get('NSAppleScriptEnabled', False)
+ # If it is a file test for an aete/aeut resource.
+ currf = CurResFile()
+ try:
+ refno = macresource.open_pathname(application)
+ except MacOS.Error:
+ return False
+ UseResFile(refno)
+ n_terminology = Count1Resources('aete') + Count1Resources('aeut') + \
+ Count1Resources('scsz') + Count1Resources('osiz')
+ CloseResFile(refno)
+ UseResFile(currf)
+ return n_terminology > 0
def processfile_fromresource(fullname, output=None, basepkgname=None,
- edit_modnames=None, creatorsignature=None, dump=None, verbose=None):
- """Process all resources in a single file"""
- if not is_scriptable(fullname) and verbose:
- print >>verbose, "Warning: app does not seem scriptable: %s" % fullname
- cur = CurResFile()
- if verbose:
- print >>verbose, "Processing", fullname
- rf = macresource.open_pathname(fullname)
- try:
- UseResFile(rf)
- resources = []
- for i in range(Count1Resources('aete')):
- res = Get1IndResource('aete', 1+i)
- resources.append(res)
- for i in range(Count1Resources('aeut')):
- res = Get1IndResource('aeut', 1+i)
- resources.append(res)
- if verbose:
- print >>verbose, "\nLISTING aete+aeut RESOURCES IN", `fullname`
- aetelist = []
- for res in resources:
- if verbose:
- print >>verbose, "decoding", res.GetResInfo(), "..."
- data = res.data
- aete = decode(data, verbose)
- aetelist.append((aete, res.GetResInfo()))
- finally:
- if rf <> cur:
- CloseResFile(rf)
- UseResFile(cur)
- # switch back (needed for dialogs in Python)
- UseResFile(cur)
- if dump:
- dumpaetelist(aetelist, dump)
- compileaetelist(aetelist, fullname, output=output,
- basepkgname=basepkgname, edit_modnames=edit_modnames,
- creatorsignature=creatorsignature, verbose=verbose)
+ edit_modnames=None, creatorsignature=None, dump=None, verbose=None):
+ """Process all resources in a single file"""
+ if not is_scriptable(fullname) and verbose:
+ print >>verbose, "Warning: app does not seem scriptable: %s" % fullname
+ cur = CurResFile()
+ if verbose:
+ print >>verbose, "Processing", fullname
+ rf = macresource.open_pathname(fullname)
+ try:
+ UseResFile(rf)
+ resources = []
+ for i in range(Count1Resources('aete')):
+ res = Get1IndResource('aete', 1+i)
+ resources.append(res)
+ for i in range(Count1Resources('aeut')):
+ res = Get1IndResource('aeut', 1+i)
+ resources.append(res)
+ if verbose:
+ print >>verbose, "\nLISTING aete+aeut RESOURCES IN", `fullname`
+ aetelist = []
+ for res in resources:
+ if verbose:
+ print >>verbose, "decoding", res.GetResInfo(), "..."
+ data = res.data
+ aete = decode(data, verbose)
+ aetelist.append((aete, res.GetResInfo()))
+ finally:
+ if rf <> cur:
+ CloseResFile(rf)
+ UseResFile(cur)
+ # switch back (needed for dialogs in Python)
+ UseResFile(cur)
+ if dump:
+ dumpaetelist(aetelist, dump)
+ compileaetelist(aetelist, fullname, output=output,
+ basepkgname=basepkgname, edit_modnames=edit_modnames,
+ creatorsignature=creatorsignature, verbose=verbose)
def processfile(fullname, output=None, basepkgname=None,
- edit_modnames=None, creatorsignature=None, dump=None,
- verbose=None):
- """Ask an application for its terminology and process that"""
- if not is_scriptable(fullname) and verbose:
- print >>verbose, "Warning: app does not seem scriptable: %s" % fullname
- if verbose:
- print >>verbose, "\nASKING FOR aete DICTIONARY IN", `fullname`
- try:
- aedescobj, launched = OSATerminology.GetAppTerminology(fullname)
- except MacOS.Error, arg:
- if arg[0] in (-1701, -192): # errAEDescNotFound, resNotFound
- if verbose:
- print >>verbose, "GetAppTerminology failed with errAEDescNotFound/resNotFound, trying manually"
- aedata, sig = getappterminology(fullname, verbose=verbose)
- if not creatorsignature:
- creatorsignature = sig
- else:
- raise
- else:
- if launched:
- if verbose:
- print >>verbose, "Launched", fullname
- raw = aetools.unpack(aedescobj)
- if not raw:
- if verbose:
- print >>verbose, 'Unpack returned empty value:', raw
- return
- if not raw[0].data:
- if verbose:
- print >>verbose, 'Unpack returned value without data:', raw
- return
- aedata = raw[0]
- aete = decode(aedata.data, verbose)
- if dump:
- dumpaetelist([aete], dump)
- return
- compileaete(aete, None, fullname, output=output, basepkgname=basepkgname,
- creatorsignature=creatorsignature, edit_modnames=edit_modnames,
- verbose=verbose)
-
+ edit_modnames=None, creatorsignature=None, dump=None,
+ verbose=None):
+ """Ask an application for its terminology and process that"""
+ if not is_scriptable(fullname) and verbose:
+ print >>verbose, "Warning: app does not seem scriptable: %s" % fullname
+ if verbose:
+ print >>verbose, "\nASKING FOR aete DICTIONARY IN", `fullname`
+ try:
+ aedescobj, launched = OSATerminology.GetAppTerminology(fullname)
+ except MacOS.Error, arg:
+ if arg[0] in (-1701, -192): # errAEDescNotFound, resNotFound
+ if verbose:
+ print >>verbose, "GetAppTerminology failed with errAEDescNotFound/resNotFound, trying manually"
+ aedata, sig = getappterminology(fullname, verbose=verbose)
+ if not creatorsignature:
+ creatorsignature = sig
+ else:
+ raise
+ else:
+ if launched:
+ if verbose:
+ print >>verbose, "Launched", fullname
+ raw = aetools.unpack(aedescobj)
+ if not raw:
+ if verbose:
+ print >>verbose, 'Unpack returned empty value:', raw
+ return
+ if not raw[0].data:
+ if verbose:
+ print >>verbose, 'Unpack returned value without data:', raw
+ return
+ aedata = raw[0]
+ aete = decode(aedata.data, verbose)
+ if dump:
+ dumpaetelist([aete], dump)
+ return
+ compileaete(aete, None, fullname, output=output, basepkgname=basepkgname,
+ creatorsignature=creatorsignature, edit_modnames=edit_modnames,
+ verbose=verbose)
+
def getappterminology(fullname, verbose=None):
- """Get application terminology by sending an AppleEvent"""
- # First check that we actually can send AppleEvents
- if not MacOS.WMAvailable():
- raise RuntimeError, "Cannot send AppleEvents, no access to window manager"
- # Next, a workaround for a bug in MacOS 10.2: sending events will hang unless
- # you have created an event loop first.
- import Carbon.Evt
- Carbon.Evt.WaitNextEvent(0,0)
- if os.path.isdir(fullname):
- # Now get the signature of the application, hoping it is a bundle
- pkginfo = os.path.join(fullname, 'Contents', 'PkgInfo')
- if not os.path.exists(pkginfo):
- raise RuntimeError, "No PkgInfo file found"
- tp_cr = open(pkginfo, 'rb').read()
- cr = tp_cr[4:8]
- else:
- # Assume it is a file
- cr, tp = MacOS.GetCreatorAndType(fullname)
- # Let's talk to it and ask for its AETE
- talker = aetools.TalkTo(cr)
- try:
- talker._start()
- except (MacOS.Error, aetools.Error), arg:
- if verbose:
- print >>verbose, 'Warning: start() failed, continuing anyway:', arg
- reply = talker.send("ascr", "gdte")
- #reply2 = talker.send("ascr", "gdut")
- # Now pick the bits out of the return that we need.
- return reply[1]['----'], cr
-
+ """Get application terminology by sending an AppleEvent"""
+ # First check that we actually can send AppleEvents
+ if not MacOS.WMAvailable():
+ raise RuntimeError, "Cannot send AppleEvents, no access to window manager"
+ # Next, a workaround for a bug in MacOS 10.2: sending events will hang unless
+ # you have created an event loop first.
+ import Carbon.Evt
+ Carbon.Evt.WaitNextEvent(0,0)
+ if os.path.isdir(fullname):
+ # Now get the signature of the application, hoping it is a bundle
+ pkginfo = os.path.join(fullname, 'Contents', 'PkgInfo')
+ if not os.path.exists(pkginfo):
+ raise RuntimeError, "No PkgInfo file found"
+ tp_cr = open(pkginfo, 'rb').read()
+ cr = tp_cr[4:8]
+ else:
+ # Assume it is a file
+ cr, tp = MacOS.GetCreatorAndType(fullname)
+ # Let's talk to it and ask for its AETE
+ talker = aetools.TalkTo(cr)
+ try:
+ talker._start()
+ except (MacOS.Error, aetools.Error), arg:
+ if verbose:
+ print >>verbose, 'Warning: start() failed, continuing anyway:', arg
+ reply = talker.send("ascr", "gdte")
+ #reply2 = talker.send("ascr", "gdut")
+ # Now pick the bits out of the return that we need.
+ return reply[1]['----'], cr
+
def compileaetelist(aetelist, fullname, output=None, basepkgname=None,
- edit_modnames=None, creatorsignature=None, verbose=None):
- for aete, resinfo in aetelist:
- compileaete(aete, resinfo, fullname, output=output,
- basepkgname=basepkgname, edit_modnames=edit_modnames,
- creatorsignature=creatorsignature, verbose=verbose)
+ edit_modnames=None, creatorsignature=None, verbose=None):
+ for aete, resinfo in aetelist:
+ compileaete(aete, resinfo, fullname, output=output,
+ basepkgname=basepkgname, edit_modnames=edit_modnames,
+ creatorsignature=creatorsignature, verbose=verbose)
def dumpaetelist(aetelist, output):
- import pprint
- pprint.pprint(aetelist, output)
-
+ import pprint
+ pprint.pprint(aetelist, output)
+
def decode(data, verbose=None):
- """Decode a resource into a python data structure"""
- f = StringIO.StringIO(data)
- aete = generic(getaete, f)
- aete = simplify(aete)
- processed = f.tell()
- unprocessed = len(f.read())
- total = f.tell()
- if unprocessed and verbose:
- verbose.write("%d processed + %d unprocessed = %d total\n" %
- (processed, unprocessed, total))
- return aete
+ """Decode a resource into a python data structure"""
+ f = StringIO.StringIO(data)
+ aete = generic(getaete, f)
+ aete = simplify(aete)
+ processed = f.tell()
+ unprocessed = len(f.read())
+ total = f.tell()
+ if unprocessed and verbose:
+ verbose.write("%d processed + %d unprocessed = %d total\n" %
+ (processed, unprocessed, total))
+ return aete
def simplify(item):
- """Recursively replace singleton tuples by their constituent item"""
- if type(item) is types.ListType:
- return map(simplify, item)
- elif type(item) == types.TupleType and len(item) == 2:
- return simplify(item[1])
- else:
- return item
+ """Recursively replace singleton tuples by their constituent item"""
+ if type(item) is types.ListType:
+ return map(simplify, item)
+ elif type(item) == types.TupleType and len(item) == 2:
+ return simplify(item[1])
+ else:
+ return item
# Here follows the aete resource decoder.
@@ -292,520 +292,520 @@ def simplify(item):
# references to the lower-level part-decoders from the high-level part-decoders.
def getbyte(f, *args):
- c = f.read(1)
- if not c:
- raise EOFError, 'in getbyte' + str(args)
- return ord(c)
+ c = f.read(1)
+ if not c:
+ raise EOFError, 'in getbyte' + str(args)
+ return ord(c)
def getword(f, *args):
- getalign(f)
- s = f.read(2)
- if len(s) < 2:
- raise EOFError, 'in getword' + str(args)
- return (ord(s[0])<<8) | ord(s[1])
+ getalign(f)
+ s = f.read(2)
+ if len(s) < 2:
+ raise EOFError, 'in getword' + str(args)
+ return (ord(s[0])<<8) | ord(s[1])
def getlong(f, *args):
- getalign(f)
- s = f.read(4)
- if len(s) < 4:
- raise EOFError, 'in getlong' + str(args)
- return (ord(s[0])<<24) | (ord(s[1])<<16) | (ord(s[2])<<8) | ord(s[3])
+ getalign(f)
+ s = f.read(4)
+ if len(s) < 4:
+ raise EOFError, 'in getlong' + str(args)
+ return (ord(s[0])<<24) | (ord(s[1])<<16) | (ord(s[2])<<8) | ord(s[3])
def getostype(f, *args):
- getalign(f)
- s = f.read(4)
- if len(s) < 4:
- raise EOFError, 'in getostype' + str(args)
- return s
+ getalign(f)
+ s = f.read(4)
+ if len(s) < 4:
+ raise EOFError, 'in getostype' + str(args)
+ return s
def getpstr(f, *args):
- c = f.read(1)
- if len(c) < 1:
- raise EOFError, 'in getpstr[1]' + str(args)
- nbytes = ord(c)
- if nbytes == 0: return ''
- s = f.read(nbytes)
- if len(s) < nbytes:
- raise EOFError, 'in getpstr[2]' + str(args)
- return s
+ c = f.read(1)
+ if len(c) < 1:
+ raise EOFError, 'in getpstr[1]' + str(args)
+ nbytes = ord(c)
+ if nbytes == 0: return ''
+ s = f.read(nbytes)
+ if len(s) < nbytes:
+ raise EOFError, 'in getpstr[2]' + str(args)
+ return s
def getalign(f):
- if f.tell() & 1:
- c = f.read(1)
- ##if c <> '\0':
- ## print 'align:', `c`
+ if f.tell() & 1:
+ c = f.read(1)
+ ##if c <> '\0':
+ ## print 'align:', `c`
def getlist(f, description, getitem):
- count = getword(f)
- list = []
- for i in range(count):
- list.append(generic(getitem, f))
- getalign(f)
- return list
+ count = getword(f)
+ list = []
+ for i in range(count):
+ list.append(generic(getitem, f))
+ getalign(f)
+ return list
def alt_generic(what, f, *args):
- print "generic", `what`, args
- res = vageneric(what, f, args)
- print '->', `res`
- return res
+ print "generic", `what`, args
+ res = vageneric(what, f, args)
+ print '->', `res`
+ return res
def generic(what, f, *args):
- if type(what) == types.FunctionType:
- return apply(what, (f,) + args)
- if type(what) == types.ListType:
- record = []
- for thing in what:
- item = apply(generic, thing[:1] + (f,) + thing[1:])
- record.append((thing[1], item))
- return record
- return "BAD GENERIC ARGS: %s" % `what`
+ if type(what) == types.FunctionType:
+ return apply(what, (f,) + args)
+ if type(what) == types.ListType:
+ record = []
+ for thing in what:
+ item = apply(generic, thing[:1] + (f,) + thing[1:])
+ record.append((thing[1], item))
+ return record
+ return "BAD GENERIC ARGS: %s" % `what`
getdata = [
- (getostype, "type"),
- (getpstr, "description"),
- (getword, "flags")
- ]
+ (getostype, "type"),
+ (getpstr, "description"),
+ (getword, "flags")
+ ]
getargument = [
- (getpstr, "name"),
- (getostype, "keyword"),
- (getdata, "what")
- ]
+ (getpstr, "name"),
+ (getostype, "keyword"),
+ (getdata, "what")
+ ]
getevent = [
- (getpstr, "name"),
- (getpstr, "description"),
- (getostype, "suite code"),
- (getostype, "event code"),
- (getdata, "returns"),
- (getdata, "accepts"),
- (getlist, "optional arguments", getargument)
- ]
+ (getpstr, "name"),
+ (getpstr, "description"),
+ (getostype, "suite code"),
+ (getostype, "event code"),
+ (getdata, "returns"),
+ (getdata, "accepts"),
+ (getlist, "optional arguments", getargument)
+ ]
getproperty = [
- (getpstr, "name"),
- (getostype, "code"),
- (getdata, "what")
- ]
+ (getpstr, "name"),
+ (getostype, "code"),
+ (getdata, "what")
+ ]
getelement = [
- (getostype, "type"),
- (getlist, "keyform", getostype)
- ]
+ (getostype, "type"),
+ (getlist, "keyform", getostype)
+ ]
getclass = [
- (getpstr, "name"),
- (getostype, "class code"),
- (getpstr, "description"),
- (getlist, "properties", getproperty),
- (getlist, "elements", getelement)
- ]
+ (getpstr, "name"),
+ (getostype, "class code"),
+ (getpstr, "description"),
+ (getlist, "properties", getproperty),
+ (getlist, "elements", getelement)
+ ]
getcomparison = [
- (getpstr, "operator name"),
- (getostype, "operator ID"),
- (getpstr, "operator comment"),
- ]
+ (getpstr, "operator name"),
+ (getostype, "operator ID"),
+ (getpstr, "operator comment"),
+ ]
getenumerator = [
- (getpstr, "enumerator name"),
- (getostype, "enumerator ID"),
- (getpstr, "enumerator comment")
- ]
+ (getpstr, "enumerator name"),
+ (getostype, "enumerator ID"),
+ (getpstr, "enumerator comment")
+ ]
getenumeration = [
- (getostype, "enumeration ID"),
- (getlist, "enumerator", getenumerator)
- ]
+ (getostype, "enumeration ID"),
+ (getlist, "enumerator", getenumerator)
+ ]
getsuite = [
- (getpstr, "suite name"),
- (getpstr, "suite description"),
- (getostype, "suite ID"),
- (getword, "suite level"),
- (getword, "suite version"),
- (getlist, "events", getevent),
- (getlist, "classes", getclass),
- (getlist, "comparisons", getcomparison),
- (getlist, "enumerations", getenumeration)
- ]
+ (getpstr, "suite name"),
+ (getpstr, "suite description"),
+ (getostype, "suite ID"),
+ (getword, "suite level"),
+ (getword, "suite version"),
+ (getlist, "events", getevent),
+ (getlist, "classes", getclass),
+ (getlist, "comparisons", getcomparison),
+ (getlist, "enumerations", getenumeration)
+ ]
getaete = [
- (getword, "major/minor version in BCD"),
- (getword, "language code"),
- (getword, "script code"),
- (getlist, "suites", getsuite)
- ]
+ (getword, "major/minor version in BCD"),
+ (getword, "language code"),
+ (getword, "script code"),
+ (getlist, "suites", getsuite)
+ ]
def compileaete(aete, resinfo, fname, output=None, basepkgname=None,
- edit_modnames=None, creatorsignature=None, verbose=None):
- """Generate code for a full aete resource. fname passed for doc purposes"""
- [version, language, script, suites] = aete
- major, minor = divmod(version, 256)
- if not creatorsignature:
- creatorsignature, dummy = MacOS.GetCreatorAndType(fname)
- packagename = identify(os.path.splitext(os.path.basename(fname))[0])
- if language:
- packagename = packagename+'_lang%d'%language
- if script:
- packagename = packagename+'_script%d'%script
- if len(packagename) > 27:
- packagename = packagename[:27]
- if output:
- # XXXX Put this in site-packages if it isn't a full pathname?
- if not os.path.exists(output):
- os.mkdir(output)
- pathname = output
- else:
- pathname = EasyDialogs.AskFolder(message='Create and select package folder for %s'%packagename,
- defaultLocation=DEFAULT_USER_PACKAGEFOLDER)
- output = pathname
- if not pathname:
- return
- packagename = os.path.split(os.path.normpath(pathname))[1]
- if not basepkgname:
- basepkgname = EasyDialogs.AskFolder(message='Package folder for base suite (usually StdSuites)',
- defaultLocation=DEFAULT_STANDARD_PACKAGEFOLDER)
- if basepkgname:
- dirname, basepkgname = os.path.split(os.path.normpath(basepkgname))
- if dirname and not dirname in sys.path:
- sys.path.insert(0, dirname)
- basepackage = __import__(basepkgname)
- else:
- basepackage = None
- suitelist = []
- allprecompinfo = []
- allsuites = []
- for suite in suites:
- compiler = SuiteCompiler(suite, basepackage, output, edit_modnames, verbose)
- code, modname, precompinfo = compiler.precompilesuite()
- if not code:
- continue
- allprecompinfo = allprecompinfo + precompinfo
- suiteinfo = suite, pathname, modname
- suitelist.append((code, modname))
- allsuites.append(compiler)
- for compiler in allsuites:
- compiler.compilesuite(major, minor, language, script, fname, allprecompinfo)
- initfilename = os.path.join(output, '__init__.py')
- fp = open(initfilename, 'w')
- MacOS.SetCreatorAndType(initfilename, 'Pyth', 'TEXT')
- fp.write('"""\n')
- fp.write("Package generated from %s\n"%ascii(fname))
- if resinfo:
- fp.write("Resource %s resid %d %s\n"%(ascii(resinfo[1]), resinfo[0], ascii(resinfo[2])))
- fp.write('"""\n')
- fp.write('import aetools\n')
- fp.write('Error = aetools.Error\n')
- suitelist.sort()
- for code, modname in suitelist:
- fp.write("import %s\n" % modname)
- fp.write("\n\n_code_to_module = {\n")
- for code, modname in suitelist:
- fp.write("\t'%s' : %s,\n"%(ascii(code), modname))
- fp.write("}\n\n")
- fp.write("\n\n_code_to_fullname = {\n")
- for code, modname in suitelist:
- fp.write("\t'%s' : ('%s.%s', '%s'),\n"%(ascii(code), packagename, modname, modname))
- fp.write("}\n\n")
- for code, modname in suitelist:
- fp.write("from %s import *\n"%modname)
-
- # Generate property dicts and element dicts for all types declared in this module
- fp.write("\ndef getbaseclasses(v):\n")
- fp.write("\tif not getattr(v, '_propdict', None):\n")
- fp.write("\t\tv._propdict = {}\n")
- fp.write("\t\tv._elemdict = {}\n")
- fp.write("\t\tfor superclassname in getattr(v, '_superclassnames', []):\n")
- fp.write("\t\t\tsuperclass = eval(superclassname)\n")
- fp.write("\t\t\tgetbaseclasses(superclass)\n")
- fp.write("\t\t\tv._propdict.update(getattr(superclass, '_propdict', {}))\n")
- fp.write("\t\t\tv._elemdict.update(getattr(superclass, '_elemdict', {}))\n")
- fp.write("\t\tv._propdict.update(getattr(v, '_privpropdict', {}))\n")
- fp.write("\t\tv._elemdict.update(getattr(v, '_privelemdict', {}))\n")
- fp.write("\n")
- fp.write("import StdSuites\n")
- allprecompinfo.sort()
- if allprecompinfo:
- fp.write("\n#\n# Set property and element dictionaries now that all classes have been defined\n#\n")
- for codenamemapper in allprecompinfo:
- for k, v in codenamemapper.getall('class'):
- fp.write("getbaseclasses(%s)\n" % v)
+ edit_modnames=None, creatorsignature=None, verbose=None):
+ """Generate code for a full aete resource. fname passed for doc purposes"""
+ [version, language, script, suites] = aete
+ major, minor = divmod(version, 256)
+ if not creatorsignature:
+ creatorsignature, dummy = MacOS.GetCreatorAndType(fname)
+ packagename = identify(os.path.splitext(os.path.basename(fname))[0])
+ if language:
+ packagename = packagename+'_lang%d'%language
+ if script:
+ packagename = packagename+'_script%d'%script
+ if len(packagename) > 27:
+ packagename = packagename[:27]
+ if output:
+ # XXXX Put this in site-packages if it isn't a full pathname?
+ if not os.path.exists(output):
+ os.mkdir(output)
+ pathname = output
+ else:
+ pathname = EasyDialogs.AskFolder(message='Create and select package folder for %s'%packagename,
+ defaultLocation=DEFAULT_USER_PACKAGEFOLDER)
+ output = pathname
+ if not pathname:
+ return
+ packagename = os.path.split(os.path.normpath(pathname))[1]
+ if not basepkgname:
+ basepkgname = EasyDialogs.AskFolder(message='Package folder for base suite (usually StdSuites)',
+ defaultLocation=DEFAULT_STANDARD_PACKAGEFOLDER)
+ if basepkgname:
+ dirname, basepkgname = os.path.split(os.path.normpath(basepkgname))
+ if dirname and not dirname in sys.path:
+ sys.path.insert(0, dirname)
+ basepackage = __import__(basepkgname)
+ else:
+ basepackage = None
+ suitelist = []
+ allprecompinfo = []
+ allsuites = []
+ for suite in suites:
+ compiler = SuiteCompiler(suite, basepackage, output, edit_modnames, verbose)
+ code, modname, precompinfo = compiler.precompilesuite()
+ if not code:
+ continue
+ allprecompinfo = allprecompinfo + precompinfo
+ suiteinfo = suite, pathname, modname
+ suitelist.append((code, modname))
+ allsuites.append(compiler)
+ for compiler in allsuites:
+ compiler.compilesuite(major, minor, language, script, fname, allprecompinfo)
+ initfilename = os.path.join(output, '__init__.py')
+ fp = open(initfilename, 'w')
+ MacOS.SetCreatorAndType(initfilename, 'Pyth', 'TEXT')
+ fp.write('"""\n')
+ fp.write("Package generated from %s\n"%ascii(fname))
+ if resinfo:
+ fp.write("Resource %s resid %d %s\n"%(ascii(resinfo[1]), resinfo[0], ascii(resinfo[2])))
+ fp.write('"""\n')
+ fp.write('import aetools\n')
+ fp.write('Error = aetools.Error\n')
+ suitelist.sort()
+ for code, modname in suitelist:
+ fp.write("import %s\n" % modname)
+ fp.write("\n\n_code_to_module = {\n")
+ for code, modname in suitelist:
+ fp.write(" '%s' : %s,\n"%(ascii(code), modname))
+ fp.write("}\n\n")
+ fp.write("\n\n_code_to_fullname = {\n")
+ for code, modname in suitelist:
+ fp.write(" '%s' : ('%s.%s', '%s'),\n"%(ascii(code), packagename, modname, modname))
+ fp.write("}\n\n")
+ for code, modname in suitelist:
+ fp.write("from %s import *\n"%modname)
+
+ # Generate property dicts and element dicts for all types declared in this module
+ fp.write("\ndef getbaseclasses(v):\n")
+ fp.write(" if not getattr(v, '_propdict', None):\n")
+ fp.write(" v._propdict = {}\n")
+ fp.write(" v._elemdict = {}\n")
+ fp.write(" for superclassname in getattr(v, '_superclassnames', []):\n")
+ fp.write(" superclass = eval(superclassname)\n")
+ fp.write(" getbaseclasses(superclass)\n")
+ fp.write(" v._propdict.update(getattr(superclass, '_propdict', {}))\n")
+ fp.write(" v._elemdict.update(getattr(superclass, '_elemdict', {}))\n")
+ fp.write(" v._propdict.update(getattr(v, '_privpropdict', {}))\n")
+ fp.write(" v._elemdict.update(getattr(v, '_privelemdict', {}))\n")
+ fp.write("\n")
+ fp.write("import StdSuites\n")
+ allprecompinfo.sort()
+ if allprecompinfo:
+ fp.write("\n#\n# Set property and element dictionaries now that all classes have been defined\n#\n")
+ for codenamemapper in allprecompinfo:
+ for k, v in codenamemapper.getall('class'):
+ fp.write("getbaseclasses(%s)\n" % v)
- # Generate a code-to-name mapper for all of the types (classes) declared in this module
- if allprecompinfo:
- fp.write("\n#\n# Indices of types declared in this module\n#\n")
- fp.write("_classdeclarations = {\n")
- for codenamemapper in allprecompinfo:
- for k, v in codenamemapper.getall('class'):
- fp.write("\t%s : %s,\n" % (`k`, v))
- fp.write("}\n")
+ # Generate a code-to-name mapper for all of the types (classes) declared in this module
+ if allprecompinfo:
+ fp.write("\n#\n# Indices of types declared in this module\n#\n")
+ fp.write("_classdeclarations = {\n")
+ for codenamemapper in allprecompinfo:
+ for k, v in codenamemapper.getall('class'):
+ fp.write(" %s : %s,\n" % (`k`, v))
+ fp.write("}\n")
- if suitelist:
- fp.write("\n\nclass %s(%s_Events"%(packagename, suitelist[0][1]))
- for code, modname in suitelist[1:]:
- fp.write(",\n\t\t%s_Events"%modname)
- fp.write(",\n\t\taetools.TalkTo):\n")
- fp.write("\t_signature = %s\n\n"%`creatorsignature`)
- fp.write("\t_moduleName = '%s'\n\n"%packagename)
- fp.close()
+ if suitelist:
+ fp.write("\n\nclass %s(%s_Events"%(packagename, suitelist[0][1]))
+ for code, modname in suitelist[1:]:
+ fp.write(",\n %s_Events"%modname)
+ fp.write(",\n aetools.TalkTo):\n")
+ fp.write(" _signature = %s\n\n"%`creatorsignature`)
+ fp.write(" _moduleName = '%s'\n\n"%packagename)
+ fp.close()
class SuiteCompiler:
- def __init__(self, suite, basepackage, output, edit_modnames, verbose):
- self.suite = suite
- self.basepackage = basepackage
- self.edit_modnames = edit_modnames
- self.output = output
- self.verbose = verbose
-
- # Set by precompilesuite
- self.pathname = None
- self.modname = None
-
- # Set by compilesuite
- self.fp = None
- self.basemodule = None
- self.enumsneeded = {}
-
- def precompilesuite(self):
- """Parse a single suite without generating the output. This step is needed
- so we can resolve recursive references by suites to enums/comps/etc declared
- in other suites"""
- [name, desc, code, level, version, events, classes, comps, enums] = self.suite
-
- modname = identify(name)
- if len(modname) > 28:
- modname = modname[:27]
- if self.edit_modnames is None:
- self.pathname = EasyDialogs.AskFileForSave(message='Python output file',
- savedFileName=modname+'.py')
- else:
- for old, new in self.edit_modnames:
- if old == modname:
- modname = new
- if modname:
- self.pathname = os.path.join(self.output, modname + '.py')
- else:
- self.pathname = None
- if not self.pathname:
- return None, None, None
-
- self.modname = os.path.splitext(os.path.split(self.pathname)[1])[0]
-
- if self.basepackage and self.basepackage._code_to_module.has_key(code):
- # We are an extension of a baseclass (usually an application extending
- # Standard_Suite or so). Import everything from our base module
- basemodule = self.basepackage._code_to_module[code]
- else:
- # We are not an extension.
- basemodule = None
-
- self.enumsneeded = {}
- for event in events:
- self.findenumsinevent(event)
-
- objc = ObjectCompiler(None, basemodule, interact=(self.edit_modnames is None),
- verbose=self.verbose)
- for cls in classes:
- objc.compileclass(cls)
- for cls in classes:
- objc.fillclasspropsandelems(cls)
- for comp in comps:
- objc.compilecomparison(comp)
- for enum in enums:
- objc.compileenumeration(enum)
-
- for enum in self.enumsneeded.keys():
- objc.checkforenum(enum)
-
- objc.dumpindex()
-
- precompinfo = objc.getprecompinfo(self.modname)
-
- return code, self.modname, precompinfo
-
- def compilesuite(self, major, minor, language, script, fname, precompinfo):
- """Generate code for a single suite"""
- [name, desc, code, level, version, events, classes, comps, enums] = self.suite
- # Sort various lists, so re-generated source is easier compared
- def class_sorter(k1, k2):
- """Sort classes by code, and make sure main class sorts before synonyms"""
- # [name, code, desc, properties, elements] = cls
- if k1[1] < k2[1]: return -1
- if k1[1] > k2[1]: return 1
- if not k2[3] or k2[3][0][1] == 'c@#!':
- # This is a synonym, the other one is better
- return -1
- if not k1[3] or k1[3][0][1] == 'c@#!':
- # This is a synonym, the other one is better
- return 1
- return 0
-
- events.sort()
- classes.sort(class_sorter)
- comps.sort()
- enums.sort()
-
- self.fp = fp = open(self.pathname, 'w')
- MacOS.SetCreatorAndType(self.pathname, 'Pyth', 'TEXT')
-
- fp.write('"""Suite %s: %s\n' % (ascii(name), ascii(desc)))
- fp.write("Level %d, version %d\n\n" % (level, version))
- fp.write("Generated from %s\n"%ascii(fname))
- fp.write("AETE/AEUT resource version %d/%d, language %d, script %d\n" % \
- (major, minor, language, script))
- fp.write('"""\n\n')
-
- fp.write('import aetools\n')
- fp.write('import MacOS\n\n')
- fp.write("_code = %s\n\n"% `code`)
- if self.basepackage and self.basepackage._code_to_module.has_key(code):
- # We are an extension of a baseclass (usually an application extending
- # Standard_Suite or so). Import everything from our base module
- fp.write('from %s import *\n'%self.basepackage._code_to_fullname[code][0])
- basemodule = self.basepackage._code_to_module[code]
- elif self.basepackage and self.basepackage._code_to_module.has_key(code.lower()):
- # This is needed by CodeWarrior and some others.
- fp.write('from %s import *\n'%self.basepackage._code_to_fullname[code.lower()][0])
- basemodule = self.basepackage._code_to_module[code.lower()]
- else:
- # We are not an extension.
- basemodule = None
- self.basemodule = basemodule
- self.compileclassheader()
-
- self.enumsneeded = {}
- if events:
- for event in events:
- self.compileevent(event)
- else:
- fp.write("\tpass\n\n")
-
- objc = ObjectCompiler(fp, basemodule, precompinfo, interact=(self.edit_modnames is None),
- verbose=self.verbose)
- for cls in classes:
- objc.compileclass(cls)
- for cls in classes:
- objc.fillclasspropsandelems(cls)
- for comp in comps:
- objc.compilecomparison(comp)
- for enum in enums:
- objc.compileenumeration(enum)
-
- for enum in self.enumsneeded.keys():
- objc.checkforenum(enum)
-
- objc.dumpindex()
-
- def compileclassheader(self):
- """Generate class boilerplate"""
- classname = '%s_Events'%self.modname
- if self.basemodule:
- modshortname = string.split(self.basemodule.__name__, '.')[-1]
- baseclassname = '%s_Events'%modshortname
- self.fp.write("class %s(%s):\n\n"%(classname, baseclassname))
- else:
- self.fp.write("class %s:\n\n"%classname)
-
- def compileevent(self, event):
- """Generate code for a single event"""
- [name, desc, code, subcode, returns, accepts, arguments] = event
- fp = self.fp
- funcname = identify(name)
- #
- # generate name->keyword map
- #
- if arguments:
- fp.write("\t_argmap_%s = {\n"%funcname)
- for a in arguments:
- fp.write("\t\t%s : %s,\n"%(`identify(a[0])`, `a[1]`))
- fp.write("\t}\n\n")
-
- #
- # Generate function header
- #
- has_arg = (not is_null(accepts))
- opt_arg = (has_arg and is_optional(accepts))
-
- fp.write("\tdef %s(self, "%funcname)
- if has_arg:
- if not opt_arg:
- fp.write("_object, ") # Include direct object, if it has one
- else:
- fp.write("_object=None, ") # Also include if it is optional
- else:
- fp.write("_no_object=None, ") # For argument checking
- fp.write("_attributes={}, **_arguments):\n") # include attribute dict and args
- #
- # Generate doc string (important, since it may be the only
- # available documentation, due to our name-remaping)
- #
- fp.write('\t\t"""%s: %s\n'%(ascii(name), ascii(desc)))
- if has_arg:
- fp.write("\t\tRequired argument: %s\n"%getdatadoc(accepts))
- elif opt_arg:
- fp.write("\t\tOptional argument: %s\n"%getdatadoc(accepts))
- for arg in arguments:
- fp.write("\t\tKeyword argument %s: %s\n"%(identify(arg[0]),
- getdatadoc(arg[2])))
- fp.write("\t\tKeyword argument _attributes: AppleEvent attribute dictionary\n")
- if not is_null(returns):
- fp.write("\t\tReturns: %s\n"%getdatadoc(returns))
- fp.write('\t\t"""\n')
- #
- # Fiddle the args so everything ends up in 'arguments' dictionary
- #
- fp.write("\t\t_code = %s\n"% `code`)
- fp.write("\t\t_subcode = %s\n\n"% `subcode`)
- #
- # Do keyword name substitution
- #
- if arguments:
- fp.write("\t\taetools.keysubst(_arguments, self._argmap_%s)\n"%funcname)
- else:
- fp.write("\t\tif _arguments: raise TypeError, 'No optional args expected'\n")
- #
- # Stuff required arg (if there is one) into arguments
- #
- if has_arg:
- fp.write("\t\t_arguments['----'] = _object\n")
- elif opt_arg:
- fp.write("\t\tif _object:\n")
- fp.write("\t\t\t_arguments['----'] = _object\n")
- else:
- fp.write("\t\tif _no_object != None: raise TypeError, 'No direct arg expected'\n")
- fp.write("\n")
- #
- # Do enum-name substitution
- #
- for a in arguments:
- if is_enum(a[2]):
- kname = a[1]
- ename = a[2][0]
- if ename <> '****':
- fp.write("\t\taetools.enumsubst(_arguments, %s, _Enum_%s)\n" %
- (`kname`, identify(ename)))
- self.enumsneeded[ename] = 1
- fp.write("\n")
- #
- # Do the transaction
- #
- fp.write("\t\t_reply, _arguments, _attributes = self.send(_code, _subcode,\n")
- fp.write("\t\t\t\t_arguments, _attributes)\n")
- #
- # Error handling
- #
- fp.write("\t\tif _arguments.get('errn', 0):\n")
- fp.write("\t\t\traise aetools.Error, aetools.decodeerror(_arguments)\n")
- fp.write("\t\t# XXXX Optionally decode result\n")
- #
- # Decode result
- #
- fp.write("\t\tif _arguments.has_key('----'):\n")
- if is_enum(returns):
- fp.write("\t\t\t# XXXX Should do enum remapping here...\n")
- fp.write("\t\t\treturn _arguments['----']\n")
- fp.write("\n")
-
- def findenumsinevent(self, event):
- """Find all enums for a single event"""
- [name, desc, code, subcode, returns, accepts, arguments] = event
- for a in arguments:
- if is_enum(a[2]):
- ename = a[2][0]
- if ename <> '****':
- self.enumsneeded[ename] = 1
-
+ def __init__(self, suite, basepackage, output, edit_modnames, verbose):
+ self.suite = suite
+ self.basepackage = basepackage
+ self.edit_modnames = edit_modnames
+ self.output = output
+ self.verbose = verbose
+
+ # Set by precompilesuite
+ self.pathname = None
+ self.modname = None
+
+ # Set by compilesuite
+ self.fp = None
+ self.basemodule = None
+ self.enumsneeded = {}
+
+ def precompilesuite(self):
+ """Parse a single suite without generating the output. This step is needed
+ so we can resolve recursive references by suites to enums/comps/etc declared
+ in other suites"""
+ [name, desc, code, level, version, events, classes, comps, enums] = self.suite
+
+ modname = identify(name)
+ if len(modname) > 28:
+ modname = modname[:27]
+ if self.edit_modnames is None:
+ self.pathname = EasyDialogs.AskFileForSave(message='Python output file',
+ savedFileName=modname+'.py')
+ else:
+ for old, new in self.edit_modnames:
+ if old == modname:
+ modname = new
+ if modname:
+ self.pathname = os.path.join(self.output, modname + '.py')
+ else:
+ self.pathname = None
+ if not self.pathname:
+ return None, None, None
+
+ self.modname = os.path.splitext(os.path.split(self.pathname)[1])[0]
+
+ if self.basepackage and self.basepackage._code_to_module.has_key(code):
+ # We are an extension of a baseclass (usually an application extending
+ # Standard_Suite or so). Import everything from our base module
+ basemodule = self.basepackage._code_to_module[code]
+ else:
+ # We are not an extension.
+ basemodule = None
+
+ self.enumsneeded = {}
+ for event in events:
+ self.findenumsinevent(event)
+
+ objc = ObjectCompiler(None, self.modname, basemodule, interact=(self.edit_modnames is None),
+ verbose=self.verbose)
+ for cls in classes:
+ objc.compileclass(cls)
+ for cls in classes:
+ objc.fillclasspropsandelems(cls)
+ for comp in comps:
+ objc.compilecomparison(comp)
+ for enum in enums:
+ objc.compileenumeration(enum)
+
+ for enum in self.enumsneeded.keys():
+ objc.checkforenum(enum)
+
+ objc.dumpindex()
+
+ precompinfo = objc.getprecompinfo(self.modname)
+
+ return code, self.modname, precompinfo
+
+ def compilesuite(self, major, minor, language, script, fname, precompinfo):
+ """Generate code for a single suite"""
+ [name, desc, code, level, version, events, classes, comps, enums] = self.suite
+ # Sort various lists, so re-generated source is easier compared
+ def class_sorter(k1, k2):
+ """Sort classes by code, and make sure main class sorts before synonyms"""
+ # [name, code, desc, properties, elements] = cls
+ if k1[1] < k2[1]: return -1
+ if k1[1] > k2[1]: return 1
+ if not k2[3] or k2[3][0][1] == 'c@#!':
+ # This is a synonym, the other one is better
+ return -1
+ if not k1[3] or k1[3][0][1] == 'c@#!':
+ # This is a synonym, the other one is better
+ return 1
+ return 0
+
+ events.sort()
+ classes.sort(class_sorter)
+ comps.sort()
+ enums.sort()
+
+ self.fp = fp = open(self.pathname, 'w')
+ MacOS.SetCreatorAndType(self.pathname, 'Pyth', 'TEXT')
+
+ fp.write('"""Suite %s: %s\n' % (ascii(name), ascii(desc)))
+ fp.write("Level %d, version %d\n\n" % (level, version))
+ fp.write("Generated from %s\n"%ascii(fname))
+ fp.write("AETE/AEUT resource version %d/%d, language %d, script %d\n" % \
+ (major, minor, language, script))
+ fp.write('"""\n\n')
+
+ fp.write('import aetools\n')
+ fp.write('import MacOS\n\n')
+ fp.write("_code = %s\n\n"% `code`)
+ if self.basepackage and self.basepackage._code_to_module.has_key(code):
+ # We are an extension of a baseclass (usually an application extending
+ # Standard_Suite or so). Import everything from our base module
+ fp.write('from %s import *\n'%self.basepackage._code_to_fullname[code][0])
+ basemodule = self.basepackage._code_to_module[code]
+ elif self.basepackage and self.basepackage._code_to_module.has_key(code.lower()):
+ # This is needed by CodeWarrior and some others.
+ fp.write('from %s import *\n'%self.basepackage._code_to_fullname[code.lower()][0])
+ basemodule = self.basepackage._code_to_module[code.lower()]
+ else:
+ # We are not an extension.
+ basemodule = None
+ self.basemodule = basemodule
+ self.compileclassheader()
+
+ self.enumsneeded = {}
+ if events:
+ for event in events:
+ self.compileevent(event)
+ else:
+ fp.write(" pass\n\n")
+
+ objc = ObjectCompiler(fp, self.modname, basemodule, precompinfo, interact=(self.edit_modnames is None),
+ verbose=self.verbose)
+ for cls in classes:
+ objc.compileclass(cls)
+ for cls in classes:
+ objc.fillclasspropsandelems(cls)
+ for comp in comps:
+ objc.compilecomparison(comp)
+ for enum in enums:
+ objc.compileenumeration(enum)
+
+ for enum in self.enumsneeded.keys():
+ objc.checkforenum(enum)
+
+ objc.dumpindex()
+
+ def compileclassheader(self):
+ """Generate class boilerplate"""
+ classname = '%s_Events'%self.modname
+ if self.basemodule:
+ modshortname = string.split(self.basemodule.__name__, '.')[-1]
+ baseclassname = '%s_Events'%modshortname
+ self.fp.write("class %s(%s):\n\n"%(classname, baseclassname))
+ else:
+ self.fp.write("class %s:\n\n"%classname)
+
+ def compileevent(self, event):
+ """Generate code for a single event"""
+ [name, desc, code, subcode, returns, accepts, arguments] = event
+ fp = self.fp
+ funcname = identify(name)
+ #
+ # generate name->keyword map
+ #
+ if arguments:
+ fp.write(" _argmap_%s = {\n"%funcname)
+ for a in arguments:
+ fp.write(" %s : %s,\n"%(`identify(a[0])`, `a[1]`))
+ fp.write(" }\n\n")
+
+ #
+ # Generate function header
+ #
+ has_arg = (not is_null(accepts))
+ opt_arg = (has_arg and is_optional(accepts))
+
+ fp.write(" def %s(self, "%funcname)
+ if has_arg:
+ if not opt_arg:
+ fp.write("_object, ") # Include direct object, if it has one
+ else:
+ fp.write("_object=None, ") # Also include if it is optional
+ else:
+ fp.write("_no_object=None, ") # For argument checking
+ fp.write("_attributes={}, **_arguments):\n") # include attribute dict and args
+ #
+ # Generate doc string (important, since it may be the only
+ # available documentation, due to our name-remaping)
+ #
+ fp.write(' """%s: %s\n'%(ascii(name), ascii(desc)))
+ if has_arg:
+ fp.write(" Required argument: %s\n"%getdatadoc(accepts))
+ elif opt_arg:
+ fp.write(" Optional argument: %s\n"%getdatadoc(accepts))
+ for arg in arguments:
+ fp.write(" Keyword argument %s: %s\n"%(identify(arg[0]),
+ getdatadoc(arg[2])))
+ fp.write(" Keyword argument _attributes: AppleEvent attribute dictionary\n")
+ if not is_null(returns):
+ fp.write(" Returns: %s\n"%getdatadoc(returns))
+ fp.write(' """\n')
+ #
+ # Fiddle the args so everything ends up in 'arguments' dictionary
+ #
+ fp.write(" _code = %s\n"% `code`)
+ fp.write(" _subcode = %s\n\n"% `subcode`)
+ #
+ # Do keyword name substitution
+ #
+ if arguments:
+ fp.write(" aetools.keysubst(_arguments, self._argmap_%s)\n"%funcname)
+ else:
+ fp.write(" if _arguments: raise TypeError, 'No optional args expected'\n")
+ #
+ # Stuff required arg (if there is one) into arguments
+ #
+ if has_arg:
+ fp.write(" _arguments['----'] = _object\n")
+ elif opt_arg:
+ fp.write(" if _object:\n")
+ fp.write(" _arguments['----'] = _object\n")
+ else:
+ fp.write(" if _no_object != None: raise TypeError, 'No direct arg expected'\n")
+ fp.write("\n")
+ #
+ # Do enum-name substitution
+ #
+ for a in arguments:
+ if is_enum(a[2]):
+ kname = a[1]
+ ename = a[2][0]
+ if ename <> '****':
+ fp.write(" aetools.enumsubst(_arguments, %s, _Enum_%s)\n" %
+ (`kname`, identify(ename)))
+ self.enumsneeded[ename] = 1
+ fp.write("\n")
+ #
+ # Do the transaction
+ #
+ fp.write(" _reply, _arguments, _attributes = self.send(_code, _subcode,\n")
+ fp.write(" _arguments, _attributes)\n")
+ #
+ # Error handling
+ #
+ fp.write(" if _arguments.get('errn', 0):\n")
+ fp.write(" raise aetools.Error, aetools.decodeerror(_arguments)\n")
+ fp.write(" # XXXX Optionally decode result\n")
+ #
+ # Decode result
+ #
+ fp.write(" if _arguments.has_key('----'):\n")
+ if is_enum(returns):
+ fp.write(" # XXXX Should do enum remapping here...\n")
+ fp.write(" return _arguments['----']\n")
+ fp.write("\n")
+
+ def findenumsinevent(self, event):
+ """Find all enums for a single event"""
+ [name, desc, code, subcode, returns, accepts, arguments] = event
+ for a in arguments:
+ if is_enum(a[2]):
+ ename = a[2][0]
+ if ename <> '****':
+ self.enumsneeded[ename] = 1
+
#
# This class stores the code<->name translations for a single module. It is used
# to keep the information while we're compiling the module, but we also keep these objects
@@ -814,378 +814,392 @@ class SuiteCompiler:
# hand.
#
class CodeNameMapper:
-
- def __init__(self, interact=1, verbose=None):
- self.code2name = {
- "property" : {},
- "class" : {},
- "enum" : {},
- "comparison" : {},
- }
- self.name2code = {
- "property" : {},
- "class" : {},
- "enum" : {},
- "comparison" : {},
- }
- self.modulename = None
- self.star_imported = 0
- self.can_interact = interact
- self.verbose = verbose
-
- def addnamecode(self, type, name, code):
- self.name2code[type][name] = code
- if not self.code2name[type].has_key(code):
- self.code2name[type][code] = name
-
- def hasname(self, type, name):
- return self.name2code[type].has_key(name)
-
- def hascode(self, type, code):
- return self.code2name[type].has_key(code)
-
- def findcodename(self, type, code):
- if not self.hascode(type, code):
- return None, None, None
- name = self.code2name[type][code]
- if self.modulename and not self.star_imported:
- qualname = '%s.%s'%(self.modulename, name)
- else:
- qualname = name
- return name, qualname, self.modulename
-
- def getall(self, type):
- return self.code2name[type].items()
-
- def addmodule(self, module, name, star_imported):
- self.modulename = name
- self.star_imported = star_imported
- for code, name in module._propdeclarations.items():
- self.addnamecode('property', name, code)
- for code, name in module._classdeclarations.items():
- self.addnamecode('class', name, code)
- for code in module._enumdeclarations.keys():
- self.addnamecode('enum', '_Enum_'+identify(code), code)
- for code, name in module._compdeclarations.items():
- self.addnamecode('comparison', name, code)
-
- def prepareforexport(self, name=None):
- if not self.modulename:
- self.modulename = name
- return self
-
+
+ def __init__(self, interact=1, verbose=None):
+ self.code2name = {
+ "property" : {},
+ "class" : {},
+ "enum" : {},
+ "comparison" : {},
+ }
+ self.name2code = {
+ "property" : {},
+ "class" : {},
+ "enum" : {},
+ "comparison" : {},
+ }
+ self.modulename = None
+ self.star_imported = 0
+ self.can_interact = interact
+ self.verbose = verbose
+
+ def addnamecode(self, type, name, code):
+ self.name2code[type][name] = code
+ if not self.code2name[type].has_key(code):
+ self.code2name[type][code] = name
+
+ def hasname(self, name):
+ for dict in self.name2code.values():
+ if dict.has_key(name):
+ return True
+ return False
+
+ def hascode(self, type, code):
+ return self.code2name[type].has_key(code)
+
+ def findcodename(self, type, code):
+ if not self.hascode(type, code):
+ return None, None, None
+ name = self.code2name[type][code]
+ if self.modulename and not self.star_imported:
+ qualname = '%s.%s'%(self.modulename, name)
+ else:
+ qualname = name
+ return name, qualname, self.modulename
+
+ def getall(self, type):
+ return self.code2name[type].items()
+
+ def addmodule(self, module, name, star_imported):
+ self.modulename = name
+ self.star_imported = star_imported
+ for code, name in module._propdeclarations.items():
+ self.addnamecode('property', name, code)
+ for code, name in module._classdeclarations.items():
+ self.addnamecode('class', name, code)
+ for code in module._enumdeclarations.keys():
+ self.addnamecode('enum', '_Enum_'+identify(code), code)
+ for code, name in module._compdeclarations.items():
+ self.addnamecode('comparison', name, code)
+
+ def prepareforexport(self, name=None):
+ if not self.modulename:
+ self.modulename = name
+ return self
+
class ObjectCompiler:
- def __init__(self, fp, basesuite=None, othernamemappers=None, interact=1,
- verbose=None):
- self.fp = fp
- self.verbose = verbose
- self.basesuite = basesuite
- self.can_interact = interact
- self.namemappers = [CodeNameMapper(self.can_interact, self.verbose)]
- if othernamemappers:
- self.othernamemappers = othernamemappers[:]
- else:
- self.othernamemappers = []
- if basesuite:
- basemapper = CodeNameMapper(self.can_interact, self.verbose)
- basemapper.addmodule(basesuite, '', 1)
- self.namemappers.append(basemapper)
-
- def getprecompinfo(self, modname):
- list = []
- for mapper in self.namemappers:
- emapper = mapper.prepareforexport(modname)
- if emapper:
- list.append(emapper)
- return list
-
- def findcodename(self, type, code):
- while 1:
- # First try: check whether we already know about this code.
- for mapper in self.namemappers:
- if mapper.hascode(type, code):
- return mapper.findcodename(type, code)
- # Second try: maybe one of the other modules knows about it.
- for mapper in self.othernamemappers:
- if mapper.hascode(type, code):
- self.othernamemappers.remove(mapper)
- self.namemappers.append(mapper)
- if self.fp:
- self.fp.write("import %s\n"%mapper.modulename)
- break
- else:
- # If all this has failed we ask the user for a guess on where it could
- # be and retry.
- if self.fp:
- m = self.askdefinitionmodule(type, code)
- else:
- m = None
- if not m: return None, None, None
- mapper = CodeNameMapper(self.can_interact, self.verbose)
- mapper.addmodule(m, m.__name__, 0)
- self.namemappers.append(mapper)
-
- def askdefinitionmodule(self, type, code):
- if not self.can_interact:
- if self.verbose:
- print >>self.verbose, "** No definition for %s '%s' found" % (type, code)
- return None
- path = EasyDialogs.AskFileForSave(message='Where is %s %s declared?'%(type, code))
- if not path: return
- path, file = os.path.split(path)
- modname = os.path.splitext(file)[0]
- if not path in sys.path:
- sys.path.insert(0, path)
- m = __import__(modname)
- self.fp.write("import %s\n"%modname)
- return m
-
- def compileclass(self, cls):
- [name, code, desc, properties, elements] = cls
- pname = identify(name)
- if self.namemappers[0].hascode('class', code):
- # plural forms and such
- othername, dummy, dummy = self.namemappers[0].findcodename('class', code)
- if self.fp:
- self.fp.write("\n%s = %s\n"%(pname, othername))
- else:
- if self.fp:
- self.fp.write('\nclass %s(aetools.ComponentItem):\n' % pname)
- self.fp.write('\t"""%s - %s """\n' % (ascii(name), ascii(desc)))
- self.fp.write('\twant = %s\n' % `code`)
- self.namemappers[0].addnamecode('class', pname, code)
- properties.sort()
- for prop in properties:
- self.compileproperty(prop)
- elements.sort()
- for elem in elements:
- self.compileelement(elem)
-
- def compileproperty(self, prop):
- [name, code, what] = prop
- if code == 'c@#!':
- # Something silly with plurals. Skip it.
- return
- pname = identify(name)
- if self.namemappers[0].hascode('property', code):
- # plural forms and such
- othername, dummy, dummy = self.namemappers[0].findcodename('property', code)
- if pname == othername:
- return
- if self.fp:
- self.fp.write("\n_Prop_%s = _Prop_%s\n"%(pname, othername))
- else:
- if self.fp:
- self.fp.write("class _Prop_%s(aetools.NProperty):\n" % pname)
- self.fp.write('\t"""%s - %s """\n' % (ascii(name), ascii(what[1])))
- self.fp.write("\twhich = %s\n" % `code`)
- self.fp.write("\twant = %s\n" % `what[0]`)
- self.namemappers[0].addnamecode('property', pname, code)
-
- def compileelement(self, elem):
- [code, keyform] = elem
- if self.fp:
- self.fp.write("# element %s as %s\n" % (`code`, keyform))
+ def __init__(self, fp, modname, basesuite, othernamemappers=None, interact=1,
+ verbose=None):
+ self.fp = fp
+ self.verbose = verbose
+ self.basesuite = basesuite
+ self.can_interact = interact
+ self.modulename = modname
+ self.namemappers = [CodeNameMapper(self.can_interact, self.verbose)]
+ if othernamemappers:
+ self.othernamemappers = othernamemappers[:]
+ else:
+ self.othernamemappers = []
+ if basesuite:
+ basemapper = CodeNameMapper(self.can_interact, self.verbose)
+ basemapper.addmodule(basesuite, '', 1)
+ self.namemappers.append(basemapper)
+
+ def getprecompinfo(self, modname):
+ list = []
+ for mapper in self.namemappers:
+ emapper = mapper.prepareforexport(modname)
+ if emapper:
+ list.append(emapper)
+ return list
+
+ def findcodename(self, type, code):
+ while 1:
+ # First try: check whether we already know about this code.
+ for mapper in self.namemappers:
+ if mapper.hascode(type, code):
+ return mapper.findcodename(type, code)
+ # Second try: maybe one of the other modules knows about it.
+ for mapper in self.othernamemappers:
+ if mapper.hascode(type, code):
+ self.othernamemappers.remove(mapper)
+ self.namemappers.append(mapper)
+ if self.fp:
+ self.fp.write("import %s\n"%mapper.modulename)
+ break
+ else:
+ # If all this has failed we ask the user for a guess on where it could
+ # be and retry.
+ if self.fp:
+ m = self.askdefinitionmodule(type, code)
+ else:
+ m = None
+ if not m: return None, None, None
+ mapper = CodeNameMapper(self.can_interact, self.verbose)
+ mapper.addmodule(m, m.__name__, 0)
+ self.namemappers.append(mapper)
+
+ def hasname(self, name):
+ for mapper in self.othernamemappers:
+ if mapper.hasname(name) and mapper.modulename != self.modulename:
+ if self.verbose:
+ print >>self.verbose, "Duplicate Python identifier:", name, self.modulename, mapper.modulename
+ return True
+ return False
+
+ def askdefinitionmodule(self, type, code):
+ if not self.can_interact:
+ if self.verbose:
+ print >>self.verbose, "** No definition for %s '%s' found" % (type, code)
+ return None
+ path = EasyDialogs.AskFileForSave(message='Where is %s %s declared?'%(type, code))
+ if not path: return
+ path, file = os.path.split(path)
+ modname = os.path.splitext(file)[0]
+ if not path in sys.path:
+ sys.path.insert(0, path)
+ m = __import__(modname)
+ self.fp.write("import %s\n"%modname)
+ return m
+
+ def compileclass(self, cls):
+ [name, code, desc, properties, elements] = cls
+ pname = identify(name)
+ if self.namemappers[0].hascode('class', code):
+ # plural forms and such
+ othername, dummy, dummy = self.namemappers[0].findcodename('class', code)
+ if self.fp:
+ self.fp.write("\n%s = %s\n"%(pname, othername))
+ else:
+ if self.fp:
+ self.fp.write('\nclass %s(aetools.ComponentItem):\n' % pname)
+ self.fp.write(' """%s - %s """\n' % (ascii(name), ascii(desc)))
+ self.fp.write(' want = %s\n' % `code`)
+ self.namemappers[0].addnamecode('class', pname, code)
+ properties.sort()
+ for prop in properties:
+ self.compileproperty(prop)
+ elements.sort()
+ for elem in elements:
+ self.compileelement(elem)
+
+ def compileproperty(self, prop):
+ [name, code, what] = prop
+ if code == 'c@#!':
+ # Something silly with plurals. Skip it.
+ return
+ pname = identify(name)
+ if self.namemappers[0].hascode('property', code):
+ # plural forms and such
+ othername, dummy, dummy = self.namemappers[0].findcodename('property', code)
+ if pname == othername:
+ return
+ if self.fp:
+ self.fp.write("\n_Prop_%s = _Prop_%s\n"%(pname, othername))
+ else:
+ if self.hasname(pname):
+ pass
+ if self.fp:
+ self.fp.write("class _Prop_%s(aetools.NProperty):\n" % pname)
+ self.fp.write(' """%s - %s """\n' % (ascii(name), ascii(what[1])))
+ self.fp.write(" which = %s\n" % `code`)
+ self.fp.write(" want = %s\n" % `what[0]`)
+ self.namemappers[0].addnamecode('property', pname, code)
+
+ def compileelement(self, elem):
+ [code, keyform] = elem
+ if self.fp:
+ self.fp.write("# element %s as %s\n" % (`code`, keyform))
- def fillclasspropsandelems(self, cls):
- [name, code, desc, properties, elements] = cls
- cname = identify(name)
- if self.namemappers[0].hascode('class', code) and \
- self.namemappers[0].findcodename('class', code)[0] != cname:
- # This is an other name (plural or so) for something else. Skip.
- if self.fp and (elements or len(properties) > 1 or (len(properties) == 1 and
- properties[0][1] != 'c@#!')):
- if self.verbose:
- print >>self.verbose, '** Skip multiple %s of %s (code %s)' % (cname, self.namemappers[0].findcodename('class', code)[0], `code`)
- raise RuntimeError, "About to skip non-empty class"
- return
- plist = []
- elist = []
- superclasses = []
- for prop in properties:
- [pname, pcode, what] = prop
- if pcode == "c@#^":
- superclasses.append(what)
- if pcode == 'c@#!':
- continue
- pname = identify(pname)
- plist.append(pname)
+ def fillclasspropsandelems(self, cls):
+ [name, code, desc, properties, elements] = cls
+ cname = identify(name)
+ if self.namemappers[0].hascode('class', code) and \
+ self.namemappers[0].findcodename('class', code)[0] != cname:
+ # This is an other name (plural or so) for something else. Skip.
+ if self.fp and (elements or len(properties) > 1 or (len(properties) == 1 and
+ properties[0][1] != 'c@#!')):
+ if self.verbose:
+ print >>self.verbose, '** Skip multiple %s of %s (code %s)' % (cname, self.namemappers[0].findcodename('class', code)[0], `code`)
+ raise RuntimeError, "About to skip non-empty class"
+ return
+ plist = []
+ elist = []
+ superclasses = []
+ for prop in properties:
+ [pname, pcode, what] = prop
+ if pcode == "c@#^":
+ superclasses.append(what)
+ if pcode == 'c@#!':
+ continue
+ pname = identify(pname)
+ plist.append(pname)
- superclassnames = []
- for superclass in superclasses:
- superId, superDesc, dummy = superclass
- superclassname, fullyqualifiedname, module = self.findcodename("class", superId)
- # I don't think this is correct:
- if superclassname == cname:
- pass # superclassnames.append(fullyqualifiedname)
- else:
- superclassnames.append(superclassname)
+ superclassnames = []
+ for superclass in superclasses:
+ superId, superDesc, dummy = superclass
+ superclassname, fullyqualifiedname, module = self.findcodename("class", superId)
+ # I don't think this is correct:
+ if superclassname == cname:
+ pass # superclassnames.append(fullyqualifiedname)
+ else:
+ superclassnames.append(superclassname)
- if self.fp:
- self.fp.write("%s._superclassnames = %s\n"%(cname, `superclassnames`))
+ if self.fp:
+ self.fp.write("%s._superclassnames = %s\n"%(cname, `superclassnames`))
- for elem in elements:
- [ecode, keyform] = elem
- if ecode == 'c@#!':
- continue
- name, ename, module = self.findcodename('class', ecode)
- if not name:
- if self.fp:
- self.fp.write("# XXXX %s element %s not found!!\n"%(cname, `ecode`))
- else:
- elist.append((name, ename))
-
- plist.sort()
- elist.sort()
-
- if self.fp:
- self.fp.write("%s._privpropdict = {\n"%cname)
- for n in plist:
- self.fp.write("\t'%s' : _Prop_%s,\n"%(n, n))
- self.fp.write("}\n")
- self.fp.write("%s._privelemdict = {\n"%cname)
- for n, fulln in elist:
- self.fp.write("\t'%s' : %s,\n"%(n, fulln))
- self.fp.write("}\n")
-
- def compilecomparison(self, comp):
- [name, code, comment] = comp
- iname = identify(name)
- self.namemappers[0].addnamecode('comparison', iname, code)
- if self.fp:
- self.fp.write("class %s(aetools.NComparison):\n" % iname)
- self.fp.write('\t"""%s - %s """\n' % (ascii(name), ascii(comment)))
-
- def compileenumeration(self, enum):
- [code, items] = enum
- name = "_Enum_%s" % identify(code)
- if self.fp:
- self.fp.write("%s = {\n" % name)
- for item in items:
- self.compileenumerator(item)
- self.fp.write("}\n\n")
- self.namemappers[0].addnamecode('enum', name, code)
- return code
-
- def compileenumerator(self, item):
- [name, code, desc] = item
- self.fp.write("\t%s : %s,\t# %s\n" % (`identify(name)`, `code`, ascii(desc)))
-
- def checkforenum(self, enum):
- """This enum code is used by an event. Make sure it's available"""
- name, fullname, module = self.findcodename('enum', enum)
- if not name:
- if self.fp:
- self.fp.write("_Enum_%s = None # XXXX enum %s not found!!\n"%(identify(enum), ascii(enum)))
- return
- if module:
- if self.fp:
- self.fp.write("from %s import %s\n"%(module, name))
-
- def dumpindex(self):
- if not self.fp:
- return
- self.fp.write("\n#\n# Indices of types declared in this module\n#\n")
-
- self.fp.write("_classdeclarations = {\n")
- classlist = self.namemappers[0].getall('class')
- classlist.sort()
- for k, v in classlist:
- self.fp.write("\t%s : %s,\n" % (`k`, v))
- self.fp.write("}\n")
-
-## self.fp.write("\n_propdeclarations = {\n")
-## proplist = self.namemappers[0].getall('property')
-## proplist.sort()
-## for k, v in proplist:
-## self.fp.write("\t%s : _Prop_%s,\n" % (`k`, v))
-## self.fp.write("}\n")
-##
-## self.fp.write("\n_compdeclarations = {\n")
-## complist = self.namemappers[0].getall('comparison')
-## complist.sort()
-## for k, v in complist:
-## self.fp.write("\t%s : %s,\n" % (`k`, v))
-## self.fp.write("}\n")
-##
-## self.fp.write("\n_enumdeclarations = {\n")
-## enumlist = self.namemappers[0].getall('enum')
-## enumlist.sort()
-## for k, v in enumlist:
-## self.fp.write("\t%s : %s,\n" % (`k`, v))
-## self.fp.write("}\n")
+ for elem in elements:
+ [ecode, keyform] = elem
+ if ecode == 'c@#!':
+ continue
+ name, ename, module = self.findcodename('class', ecode)
+ if not name:
+ if self.fp:
+ self.fp.write("# XXXX %s element %s not found!!\n"%(cname, `ecode`))
+ else:
+ elist.append((name, ename))
+
+ plist.sort()
+ elist.sort()
+
+ if self.fp:
+ self.fp.write("%s._privpropdict = {\n"%cname)
+ for n in plist:
+ self.fp.write(" '%s' : _Prop_%s,\n"%(n, n))
+ self.fp.write("}\n")
+ self.fp.write("%s._privelemdict = {\n"%cname)
+ for n, fulln in elist:
+ self.fp.write(" '%s' : %s,\n"%(n, fulln))
+ self.fp.write("}\n")
+
+ def compilecomparison(self, comp):
+ [name, code, comment] = comp
+ iname = identify(name)
+ self.namemappers[0].addnamecode('comparison', iname, code)
+ if self.fp:
+ self.fp.write("class %s(aetools.NComparison):\n" % iname)
+ self.fp.write(' """%s - %s """\n' % (ascii(name), ascii(comment)))
+
+ def compileenumeration(self, enum):
+ [code, items] = enum
+ name = "_Enum_%s" % identify(code)
+ if self.fp:
+ self.fp.write("%s = {\n" % name)
+ for item in items:
+ self.compileenumerator(item)
+ self.fp.write("}\n\n")
+ self.namemappers[0].addnamecode('enum', name, code)
+ return code
+
+ def compileenumerator(self, item):
+ [name, code, desc] = item
+ self.fp.write(" %s : %s,\t# %s\n" % (`identify(name)`, `code`, ascii(desc)))
+
+ def checkforenum(self, enum):
+ """This enum code is used by an event. Make sure it's available"""
+ name, fullname, module = self.findcodename('enum', enum)
+ if not name:
+ if self.fp:
+ self.fp.write("_Enum_%s = None # XXXX enum %s not found!!\n"%(identify(enum), ascii(enum)))
+ return
+ if module:
+ if self.fp:
+ self.fp.write("from %s import %s\n"%(module, name))
+
+ def dumpindex(self):
+ if not self.fp:
+ return
+ self.fp.write("\n#\n# Indices of types declared in this module\n#\n")
+
+ self.fp.write("_classdeclarations = {\n")
+ classlist = self.namemappers[0].getall('class')
+ classlist.sort()
+ for k, v in classlist:
+ self.fp.write(" %s : %s,\n" % (`k`, v))
+ self.fp.write("}\n")
+
+## self.fp.write("\n_propdeclarations = {\n")
+## proplist = self.namemappers[0].getall('property')
+## proplist.sort()
+## for k, v in proplist:
+## self.fp.write(" %s : _Prop_%s,\n" % (`k`, v))
+## self.fp.write("}\n")
+##
+## self.fp.write("\n_compdeclarations = {\n")
+## complist = self.namemappers[0].getall('comparison')
+## complist.sort()
+## for k, v in complist:
+## self.fp.write(" %s : %s,\n" % (`k`, v))
+## self.fp.write("}\n")
+##
+## self.fp.write("\n_enumdeclarations = {\n")
+## enumlist = self.namemappers[0].getall('enum')
+## enumlist.sort()
+## for k, v in enumlist:
+## self.fp.write(" %s : %s,\n" % (`k`, v))
+## self.fp.write("}\n")
def compiledata(data):
- [type, description, flags] = data
- return "%s -- %s %s" % (`type`, `description`, compiledataflags(flags))
-
+ [type, description, flags] = data
+ return "%s -- %s %s" % (`type`, `description`, compiledataflags(flags))
+
def is_null(data):
- return data[0] == 'null'
-
+ return data[0] == 'null'
+
def is_optional(data):
- return (data[2] & 0x8000)
-
+ return (data[2] & 0x8000)
+
def is_enum(data):
- return (data[2] & 0x2000)
-
+ return (data[2] & 0x2000)
+
def getdatadoc(data):
- [type, descr, flags] = data
- if descr:
- return ascii(descr)
- if type == '****':
- return 'anything'
- if type == 'obj ':
- return 'an AE object reference'
- return "undocumented, typecode %s"%`type`
+ [type, descr, flags] = data
+ if descr:
+ return ascii(descr)
+ if type == '****':
+ return 'anything'
+ if type == 'obj ':
+ return 'an AE object reference'
+ return "undocumented, typecode %s"%`type`
dataflagdict = {15: "optional", 14: "list", 13: "enum", 12: "mutable"}
def compiledataflags(flags):
- bits = []
- for i in range(16):
- if flags & (1<<i):
- if i in dataflagdict.keys():
- bits.append(dataflagdict[i])
- else:
- bits.append(`i`)
- return '[%s]' % string.join(bits)
-
+ bits = []
+ for i in range(16):
+ if flags & (1<<i):
+ if i in dataflagdict.keys():
+ bits.append(dataflagdict[i])
+ else:
+ bits.append(`i`)
+ return '[%s]' % string.join(bits)
+
def ascii(str):
- """Return a string with all non-ascii characters hex-encoded"""
- if type(str) != type(''):
- return map(ascii, str)
- rv = ''
- for c in str:
- if c in ('\t', '\n', '\r') or ' ' <= c < chr(0x7f):
- rv = rv + c
- else:
- rv = rv + '\\' + 'x%02.2x' % ord(c)
- return rv
-
+ """Return a string with all non-ascii characters hex-encoded"""
+ if type(str) != type(''):
+ return map(ascii, str)
+ rv = ''
+ for c in str:
+ if c in ('\t', '\n', '\r') or ' ' <= c < chr(0x7f):
+ rv = rv + c
+ else:
+ rv = rv + '\\' + 'x%02.2x' % ord(c)
+ return rv
+
def identify(str):
- """Turn any string into an identifier:
- - replace space by _
- - replace other illegal chars by _xx_ (hex code)
- - prepend _ if the result is a python keyword
- """
- if not str:
- return "empty_ae_name_"
- rv = ''
- ok = string.ascii_letters + '_'
- ok2 = ok + string.digits
- for c in str:
- if c in ok:
- rv = rv + c
- elif c == ' ':
- rv = rv + '_'
- else:
- rv = rv + '_%02.2x_'%ord(c)
- ok = ok2
- if keyword.iskeyword(rv):
- rv = rv + '_'
- return rv
+ """Turn any string into an identifier:
+ - replace space by _
+ - replace other illegal chars by _xx_ (hex code)
+ - prepend _ if the result is a python keyword
+ """
+ if not str:
+ return "empty_ae_name_"
+ rv = ''
+ ok = string.ascii_letters + '_'
+ ok2 = ok + string.digits
+ for c in str:
+ if c in ok:
+ rv = rv + c
+ elif c == ' ':
+ rv = rv + '_'
+ else:
+ rv = rv + '_%02.2x_'%ord(c)
+ ok = ok2
+ if keyword.iskeyword(rv):
+ rv = rv + '_'
+ return rv
# Call the main program
if __name__ == '__main__':
- main()
- sys.exit(1)
+ main()
+ sys.exit(1)
diff --git a/Lib/plat-mac/ic.py b/Lib/plat-mac/ic.py
index 33091ff..b90aa75 100644
--- a/Lib/plat-mac/ic.py
+++ b/Lib/plat-mac/ic.py
@@ -11,16 +11,16 @@ import macostools
error=icglue.error
# From ictypes.h:
-icPrefNotFoundErr = -666 # preference not found (duh!)
-icPermErr = -667 # cannot set preference
-icPrefDataErr = -668 # problem with preference data
-icInternalErr = -669 # hmm, this is not good
-icTruncatedErr = -670 # more data was present than was returned
-icNoMoreWritersErr = -671 # you cannot begin a write session because someone else is already doing it */
-icNothingToOverrideErr = -672 # no component for the override component to capture
-icNoURLErr = -673 # no URL found
-icConfigNotFoundErr = -674 # no configuration was found
-icConfigInappropriateErr = -675 # incorrect manufacturer code
+icPrefNotFoundErr = -666 # preference not found (duh!)
+icPermErr = -667 # cannot set preference
+icPrefDataErr = -668 # problem with preference data
+icInternalErr = -669 # hmm, this is not good
+icTruncatedErr = -670 # more data was present than was returned
+icNoMoreWritersErr = -671 # you cannot begin a write session because someone else is already doing it */
+icNothingToOverrideErr = -672 # no component for the override component to capture
+icNoURLErr = -673 # no URL found
+icConfigNotFoundErr = -674 # no configuration was found
+icConfigInappropriateErr = -675 # incorrect manufacturer code
ICattr_no_change = -1
@@ -30,240 +30,240 @@ icReadWritePerm = 2
# End of ictypes.h
class ICOpaqueData:
- """An unparseable IC entry"""
- def __init__(self, data):
- self.data = data
+ """An unparseable IC entry"""
+ def __init__(self, data):
+ self.data = data
- def __repr__(self):
- return "ICOpaqueData(%s)"%`self.data`
+ def __repr__(self):
+ return "ICOpaqueData(%s)"%`self.data`
_ICOpaqueDataType=type(ICOpaqueData(''))
-
+
def _decode_default(data, key):
- if len(data) == 0:
- return data
- if ord(data[0]) == len(data)-1:
- # Assume Pstring
- return data[1:]
- return ICOpaqueData(data)
-
-
+ if len(data) == 0:
+ return data
+ if ord(data[0]) == len(data)-1:
+ # Assume Pstring
+ return data[1:]
+ return ICOpaqueData(data)
+
+
def _decode_multistr(data, key):
- numstr = ord(data[0]) << 8 | ord(data[1])
- rv = []
- ptr = 2
- for i in range(numstr):
- strlen = ord(data[ptr])
- str = data[ptr+1:ptr+strlen+1]
- rv.append(str)
- ptr = ptr + strlen + 1
- return rv
-
+ numstr = ord(data[0]) << 8 | ord(data[1])
+ rv = []
+ ptr = 2
+ for i in range(numstr):
+ strlen = ord(data[ptr])
+ str = data[ptr+1:ptr+strlen+1]
+ rv.append(str)
+ ptr = ptr + strlen + 1
+ return rv
+
def _decode_fontrecord(data, key):
- size = ord(data[0]) << 8 | ord(data[1])
- face = ord(data[2])
- namelen = ord(data[4])
- return size, face, data[5:5+namelen]
-
+ size = ord(data[0]) << 8 | ord(data[1])
+ face = ord(data[2])
+ namelen = ord(data[4])
+ return size, face, data[5:5+namelen]
+
def _decode_boolean(data, key):
- return ord(data[0])
-
+ return ord(data[0])
+
def _decode_text(data, key):
- return data
-
+ return data
+
def _decode_charset(data, key):
- return data[:256], data[256:]
-
+ return data[:256], data[256:]
+
def _decode_appspec(data, key):
- namelen = ord(data[4])
- return data[0:4], data[5:5+namelen]
+ namelen = ord(data[4])
+ return data[0:4], data[5:5+namelen]
def _code_default(data, key):
- return chr(len(data)) + data
-
+ return chr(len(data)) + data
+
def _code_multistr(data, key):
- numstr = len(data)
- rv = chr((numstr>>8) & 0xff) + chr(numstr & 0xff)
- for i in data:
- rv = rv + _code_default(i)
- return rv
-
+ numstr = len(data)
+ rv = chr((numstr>>8) & 0xff) + chr(numstr & 0xff)
+ for i in data:
+ rv = rv + _code_default(i)
+ return rv
+
def _code_fontrecord(data, key):
- size, face, name = data
- return chr((size>>8) & 0xff) + chr(size & 0xff) + chr(face & 0xff) + \
- chr(0) + _code_default(name)
-
+ size, face, name = data
+ return chr((size>>8) & 0xff) + chr(size & 0xff) + chr(face & 0xff) + \
+ chr(0) + _code_default(name)
+
def _code_boolean(data, key):
- print 'XXXX boolean:', `data`
- return chr(data)
-
+ print 'XXXX boolean:', `data`
+ return chr(data)
+
def _code_text(data, key):
- return data
-
+ return data
+
def _code_charset(data, key):
- return data[0] + data[1]
-
+ return data[0] + data[1]
+
def _code_appspec(data, key):
- return data[0] + _code_default(data[1])
-
+ return data[0] + _code_default(data[1])
+
_decoder_table = {
- "ArchieAll" : (_decode_multistr , _code_multistr),
- "UMichAll" : (_decode_multistr , _code_multistr),
- "InfoMacAll" : (_decode_multistr , _code_multistr),
- "ListFont" : (_decode_fontrecord , _code_fontrecord),
- "ScreenFont" : (_decode_fontrecord , _code_fontrecord),
- "PrinterFont" : (_decode_fontrecord , _code_fontrecord),
-# "DownloadFolder" : (_decode_filespec , _code_filespec),
- "Signature": (_decode_text , _code_text),
- "Plan" : (_decode_text , _code_text),
- "MailHeaders" : (_decode_text , _code_text),
- "NewsHeaders" : (_decode_text , _code_text),
-# "Mapping"
- "CharacterSet" : (_decode_charset , _code_charset),
- "Helper\245" : (_decode_appspec , _code_appspec),
-# "Services" : (_decode_services, ????),
- "NewMailFlashIcon" : (_decode_boolean , _code_boolean),
- "NewMailDialog" : (_decode_boolean , _code_boolean),
- "NewMailPlaySound" : (_decode_boolean , _code_boolean),
-# "WebBackgroundColor" : _decode_color,
- "NoProxyDomains" : (_decode_multistr , _code_multistr),
- "UseHTTPProxy" : (_decode_boolean , _code_boolean),
- "UseGopherProxy": (_decode_boolean , _code_boolean),
- "UseFTPProxy" : (_decode_boolean , _code_boolean),
- "UsePassiveFTP" : (_decode_boolean , _code_boolean),
+ "ArchieAll" : (_decode_multistr , _code_multistr),
+ "UMichAll" : (_decode_multistr , _code_multistr),
+ "InfoMacAll" : (_decode_multistr , _code_multistr),
+ "ListFont" : (_decode_fontrecord , _code_fontrecord),
+ "ScreenFont" : (_decode_fontrecord , _code_fontrecord),
+ "PrinterFont" : (_decode_fontrecord , _code_fontrecord),
+# "DownloadFolder" : (_decode_filespec , _code_filespec),
+ "Signature": (_decode_text , _code_text),
+ "Plan" : (_decode_text , _code_text),
+ "MailHeaders" : (_decode_text , _code_text),
+ "NewsHeaders" : (_decode_text , _code_text),
+# "Mapping"
+ "CharacterSet" : (_decode_charset , _code_charset),
+ "Helper\245" : (_decode_appspec , _code_appspec),
+# "Services" : (_decode_services, ????),
+ "NewMailFlashIcon" : (_decode_boolean , _code_boolean),
+ "NewMailDialog" : (_decode_boolean , _code_boolean),
+ "NewMailPlaySound" : (_decode_boolean , _code_boolean),
+# "WebBackgroundColor" : _decode_color,
+ "NoProxyDomains" : (_decode_multistr , _code_multistr),
+ "UseHTTPProxy" : (_decode_boolean , _code_boolean),
+ "UseGopherProxy": (_decode_boolean , _code_boolean),
+ "UseFTPProxy" : (_decode_boolean , _code_boolean),
+ "UsePassiveFTP" : (_decode_boolean , _code_boolean),
}
def _decode(data, key):
- if '\245' in key:
- key2 = key[:string.index(key, '\245')+1]
- else:
- key2 = key
- if _decoder_table.has_key(key2):
- decoder = _decoder_table[key2][0]
- else:
- decoder = _decode_default
- return decoder(data, key)
+ if '\245' in key:
+ key2 = key[:string.index(key, '\245')+1]
+ else:
+ key2 = key
+ if _decoder_table.has_key(key2):
+ decoder = _decoder_table[key2][0]
+ else:
+ decoder = _decode_default
+ return decoder(data, key)
def _code(data, key):
- if type(data) == _ICOpaqueDataType:
- return data.data
- if '\245' in key:
- key2 = key[:string.index(key, '\245')+1]
- else:
- key2 = key
- if _decoder_table.has_key(key2):
- coder = _decoder_table[key2][1]
- else:
- coder = _code_default
- return coder(data, key)
-
+ if type(data) == _ICOpaqueDataType:
+ return data.data
+ if '\245' in key:
+ key2 = key[:string.index(key, '\245')+1]
+ else:
+ key2 = key
+ if _decoder_table.has_key(key2):
+ coder = _decoder_table[key2][1]
+ else:
+ coder = _code_default
+ return coder(data, key)
+
class IC:
- def __init__(self, signature='Pyth', ic=None):
- if ic:
- self.ic = ic
- else:
- self.ic = icglue.ICStart(signature)
- if hasattr(self.ic, 'ICFindConfigFile'):
- self.ic.ICFindConfigFile()
- self.h = Res.Resource('')
-
- def keys(self):
- rv = []
- self.ic.ICBegin(icReadOnlyPerm)
- num = self.ic.ICCountPref()
- for i in range(num):
- rv.append(self.ic.ICGetIndPref(i+1))
- self.ic.ICEnd()
- return rv
-
- def has_key(self, key):
- return self.__contains__(key)
-
- def __contains__(self, key):
- try:
- dummy = self.ic.ICFindPrefHandle(key, self.h)
- except icglue.error:
- return 0
- return 1
-
- def __getitem__(self, key):
- attr = self.ic.ICFindPrefHandle(key, self.h)
- return _decode(self.h.data, key)
-
- def __setitem__(self, key, value):
- value = _code(value, key)
- self.ic.ICSetPref(key, ICattr_no_change, value)
-
- def launchurl(self, url, hint=""):
- # Work around a bug in ICLaunchURL: file:/foo does
- # not work but file:///foo does.
- if url[:6] == 'file:/' and url[6] != '/':
- url = 'file:///' + url[6:]
- self.ic.ICLaunchURL(hint, url, 0, len(url))
-
- def parseurl(self, data, start=None, end=None, hint=""):
- if start == None:
- selStart = 0
- selEnd = len(data)
- else:
- selStart = selEnd = start
- if end != None:
- selEnd = end
- selStart, selEnd = self.ic.ICParseURL(hint, data, selStart, selEnd, self.h)
- return self.h.data, selStart, selEnd
-
- def mapfile(self, file):
- if type(file) != type(''):
- file = file.as_tuple()[2]
- return self.ic.ICMapFilename(file)
-
- def maptypecreator(self, type, creator, filename=""):
- return self.ic.ICMapTypeCreator(type, creator, filename)
-
- def settypecreator(self, file):
- file = Carbon.File.pathname(file)
- record = self.mapfile(os.path.split(file)[1])
- MacOS.SetCreatorAndType(file, record[2], record[1])
- macostools.touched(fss)
-
+ def __init__(self, signature='Pyth', ic=None):
+ if ic:
+ self.ic = ic
+ else:
+ self.ic = icglue.ICStart(signature)
+ if hasattr(self.ic, 'ICFindConfigFile'):
+ self.ic.ICFindConfigFile()
+ self.h = Res.Resource('')
+
+ def keys(self):
+ rv = []
+ self.ic.ICBegin(icReadOnlyPerm)
+ num = self.ic.ICCountPref()
+ for i in range(num):
+ rv.append(self.ic.ICGetIndPref(i+1))
+ self.ic.ICEnd()
+ return rv
+
+ def has_key(self, key):
+ return self.__contains__(key)
+
+ def __contains__(self, key):
+ try:
+ dummy = self.ic.ICFindPrefHandle(key, self.h)
+ except icglue.error:
+ return 0
+ return 1
+
+ def __getitem__(self, key):
+ attr = self.ic.ICFindPrefHandle(key, self.h)
+ return _decode(self.h.data, key)
+
+ def __setitem__(self, key, value):
+ value = _code(value, key)
+ self.ic.ICSetPref(key, ICattr_no_change, value)
+
+ def launchurl(self, url, hint=""):
+ # Work around a bug in ICLaunchURL: file:/foo does
+ # not work but file:///foo does.
+ if url[:6] == 'file:/' and url[6] != '/':
+ url = 'file:///' + url[6:]
+ self.ic.ICLaunchURL(hint, url, 0, len(url))
+
+ def parseurl(self, data, start=None, end=None, hint=""):
+ if start == None:
+ selStart = 0
+ selEnd = len(data)
+ else:
+ selStart = selEnd = start
+ if end != None:
+ selEnd = end
+ selStart, selEnd = self.ic.ICParseURL(hint, data, selStart, selEnd, self.h)
+ return self.h.data, selStart, selEnd
+
+ def mapfile(self, file):
+ if type(file) != type(''):
+ file = file.as_tuple()[2]
+ return self.ic.ICMapFilename(file)
+
+ def maptypecreator(self, type, creator, filename=""):
+ return self.ic.ICMapTypeCreator(type, creator, filename)
+
+ def settypecreator(self, file):
+ file = Carbon.File.pathname(file)
+ record = self.mapfile(os.path.split(file)[1])
+ MacOS.SetCreatorAndType(file, record[2], record[1])
+ macostools.touched(fss)
+
# Convenience routines
_dft_ic = None
def launchurl(url, hint=""):
- global _dft_ic
- if _dft_ic == None: _dft_ic = IC()
- return _dft_ic.launchurl(url, hint)
-
+ global _dft_ic
+ if _dft_ic == None: _dft_ic = IC()
+ return _dft_ic.launchurl(url, hint)
+
def parseurl(data, start=None, end=None, hint=""):
- global _dft_ic
- if _dft_ic == None: _dft_ic = IC()
- return _dft_ic.parseurl(data, start, end, hint)
-
+ global _dft_ic
+ if _dft_ic == None: _dft_ic = IC()
+ return _dft_ic.parseurl(data, start, end, hint)
+
def mapfile(filename):
- global _dft_ic
- if _dft_ic == None: _dft_ic = IC()
- return _dft_ic.mapfile(filename)
-
+ global _dft_ic
+ if _dft_ic == None: _dft_ic = IC()
+ return _dft_ic.mapfile(filename)
+
def maptypecreator(type, creator, filename=""):
- global _dft_ic
- if _dft_ic == None: _dft_ic = IC()
- return _dft_ic.maptypecreator(type, creator, filename)
-
+ global _dft_ic
+ if _dft_ic == None: _dft_ic = IC()
+ return _dft_ic.maptypecreator(type, creator, filename)
+
def settypecreator(file):
- global _dft_ic
- if _dft_ic == None: _dft_ic = IC()
- return _dft_ic.settypecreator(file)
-
+ global _dft_ic
+ if _dft_ic == None: _dft_ic = IC()
+ return _dft_ic.settypecreator(file)
+
def _test():
- ic = IC()
- for k in ic.keys():
- try:
- v = ic[k]
- except error:
- v = '????'
- print k, '\t', v
- sys.exit(1)
-
+ ic = IC()
+ for k in ic.keys():
+ try:
+ v = ic[k]
+ except error:
+ v = '????'
+ print k, '\t', v
+ sys.exit(1)
+
if __name__ == '__main__':
- _test()
-
+ _test()
+
diff --git a/Lib/plat-mac/macerrors.py b/Lib/plat-mac/macerrors.py
index 32f00a1..ce2a118 100644
--- a/Lib/plat-mac/macerrors.py
+++ b/Lib/plat-mac/macerrors.py
@@ -1,1852 +1,1852 @@
-svTempDisable = -32768 #svTempDisable
-svDisabled = -32640 #Reserve range -32640 to -32768 for Apple temp disables.
-fontNotOutlineErr = -32615 #bitmap font passed to routine that does outlines only
-kURL68kNotSupportedError = -30788 #kURL68kNotSupportedError
-kURLAccessNotAvailableError = -30787 #kURLAccessNotAvailableError
-kURLInvalidConfigurationError = -30786 #kURLInvalidConfigurationError
-kURLExtensionFailureError = -30785 #kURLExtensionFailureError
-kURLFileEmptyError = -30783 #kURLFileEmptyError
-kURLInvalidCallError = -30781 #kURLInvalidCallError
-kURLUnsettablePropertyError = -30780 #kURLUnsettablePropertyError
-kURLPropertyBufferTooSmallError = -30779 #kURLPropertyBufferTooSmallError
-kURLUnknownPropertyError = -30778 #kURLUnknownPropertyError
-kURLPropertyNotYetKnownError = -30777 #kURLPropertyNotYetKnownError
-kURLAuthenticationError = -30776 #kURLAuthenticationError
-kURLServerBusyError = -30775 #kURLServerBusyError
-kURLUnsupportedSchemeError = -30774 #kURLUnsupportedSchemeError
-kURLInvalidURLError = -30773 #kURLInvalidURLError
-kURLDestinationExistsError = -30772 #kURLDestinationExistsError
-kURLProgressAlreadyDisplayedError = -30771 #kURLProgressAlreadyDisplayedError
-kURLInvalidURLReferenceError = -30770 #kURLInvalidURLReferenceError
-controlHandleInvalidErr = -30599 #controlHandleInvalidErr
-controlInvalidDataVersionErr = -30597 #controlInvalidDataVersionErr
-errItemNotControl = -30596 #errItemNotControl
-errCantEmbedRoot = -30595 #errCantEmbedRoot
-errCantEmbedIntoSelf = -30594 #errCantEmbedIntoSelf
-errWindowRegionCodeInvalid = -30593 #errWindowRegionCodeInvalid
-errControlHiddenOrDisabled = -30592 #errControlHiddenOrDisabled
-errDataSizeMismatch = -30591 #errDataSizeMismatch
-errControlIsNotEmbedder = -30590 #errControlIsNotEmbedder
-errControlsAlreadyExist = -30589 #errControlsAlreadyExist
-errInvalidPartCode = -30588 #errInvalidPartCode
-errRootAlreadyExists = -30587 #errRootAlreadyExists
-errNoRootControl = -30586 #errNoRootControl
-errCouldntSetFocus = -30585 #errCouldntSetFocus
-errUnknownControl = -30584 #errUnknownControl
-errWindowDoesntSupportFocus = -30583 #errWindowDoesntSupportFocus
-errControlDoesntSupportFocus = -30582 #errControlDoesntSupportFocus
-errDataNotSupported = -30581 #errDataNotSupported
-errMessageNotSupported = -30580 #errMessageNotSupported
-themeMonitorDepthNotSupportedErr = -30567 #theme not supported at monitor depth
-themeScriptFontNotFoundErr = -30566 #theme font requested for uninstalled script system
-themeBadCursorIndexErr = -30565 #themeBadCursorIndexErr
-themeHasNoAccentsErr = -30564 #themeHasNoAccentsErr
-themeBadTextColorErr = -30563 #themeBadTextColorErr
-themeProcessNotRegisteredErr = -30562 #themeProcessNotRegisteredErr
-themeProcessRegisteredErr = -30561 #themeProcessRegisteredErr
-themeInvalidBrushErr = -30560 #pattern index invalid
-qtvrUninitialized = -30555 #qtvrUninitialized
-qtvrLibraryLoadErr = -30554 #qtvrLibraryLoadErr
-streamingNodeNotReadyErr = -30553 #streamingNodeNotReadyErr
-noMemoryNodeFailedInitialize = -30552 #noMemoryNodeFailedInitialize
-invalidHotSpotIDErr = -30551 #invalidHotSpotIDErr
-invalidNodeFormatErr = -30550 #invalidNodeFormatErr
-limitReachedErr = -30549 #limitReachedErr
-settingNotSupportedByNodeErr = -30548 #settingNotSupportedByNodeErr
-propertyNotSupportedByNodeErr = -30547 #propertyNotSupportedByNodeErr
-timeNotInViewErr = -30546 #timeNotInViewErr
-invalidViewStateErr = -30545 #invalidViewStateErr
-invalidNodeIDErr = -30544 #invalidNodeIDErr
-selectorNotSupportedByNodeErr = -30543 #selectorNotSupportedByNodeErr
-callNotSupportedByNodeErr = -30542 #callNotSupportedByNodeErr
-constraintReachedErr = -30541 #constraintReachedErr
-notAQTVRMovieErr = -30540 #notAQTVRMovieErr
-kFBCnoSuchHit = -30532 #kFBCnoSuchHit
-kFBCbadSearchSession = -30531 #kFBCbadSearchSession
-kFBCindexDiskIOFailed = -30530 #kFBCindexDiskIOFailed
-kFBCsummarizationCanceled = -30529 #kFBCsummarizationCanceled
-kFBCbadIndexFileVersion = -30528 #kFBCbadIndexFileVersion
-kFBCanalysisNotAvailable = -30527 #kFBCanalysisNotAvailable
-kFBCillegalSessionChange = -30526 #tried to add/remove vols to a session
-kFBCsomeFilesNotIndexed = -30525 #kFBCsomeFilesNotIndexed
-kFBCsearchFailed = -30524 #kFBCsearchFailed
-kFBCindexNotAvailable = -30523 #kFBCindexNotAvailable
-kFBCindexFileDestroyed = -30522 #kFBCindexFileDestroyed
-kFBCaccessCanceled = -30521 #kFBCaccessCanceled
-kFBCindexingCanceled = -30520 #kFBCindexingCanceled
-kFBCnoSearchSession = -30519 #kFBCnoSearchSession
-kFBCindexNotFound = -30518 #kFBCindexNotFound
-kFBCflushFailed = -30517 #kFBCflushFailed
-kFBCaddDocFailed = -30516 #kFBCaddDocFailed
-kFBCaccessorStoreFailed = -30515 #kFBCaccessorStoreFailed
-kFBCindexCreationFailed = -30514 #couldn't create index
-kFBCmergingFailed = -30513 #couldn't merge index files
-kFBCtokenizationFailed = -30512 #couldn't read from document or query
-kFBCmoveFailed = -30511 #V-Twin exception caught
-kFBCdeletionFailed = -30510 #V-Twin exception caught
-kFBCcommitFailed = -30509 #V-Twin exception caught
-kFBCindexingFailed = -30508 #V-Twin exception caught
-kFBCvalidationFailed = -30507 #V-Twin exception caught
-kFBCcompactionFailed = -30506 #V-Twin exception caught
-kFBCbadIndexFile = -30505 #bad FSSpec, or bad data in file
-kFBCfileNotIndexed = -30504 #kFBCfileNotIndexed
-kFBCbadParam = -30503 #kFBCbadParam
-kFBCallocFailed = -30502 #probably low memory
-kFBCnoIndexesFound = -30501 #kFBCnoIndexesFound
-kFBCvTwinExceptionErr = -30500 #no telling what it was
-kDSpStereoContextErr = -30450 #kDSpStereoContextErr
-kDSpInternalErr = -30449 #kDSpInternalErr
-kDSpConfirmSwitchWarning = -30448 #kDSpConfirmSwitchWarning
-kDSpFrameRateNotReadyErr = -30447 #kDSpFrameRateNotReadyErr
-kDSpContextNotFoundErr = -30446 #kDSpContextNotFoundErr
-kDSpContextNotReservedErr = -30445 #kDSpContextNotReservedErr
-kDSpContextAlreadyReservedErr = -30444 #kDSpContextAlreadyReservedErr
-kDSpInvalidAttributesErr = -30443 #kDSpInvalidAttributesErr
-kDSpInvalidContextErr = -30442 #kDSpInvalidContextErr
-kDSpSystemSWTooOldErr = -30441 #kDSpSystemSWTooOldErr
-kDSpNotInitializedErr = -30440 #kDSpNotInitializedErr
-kISpListBusyErr = -30429 #kISpListBusyErr
-kISpDeviceActiveErr = -30428 #kISpDeviceActiveErr
-kISpSystemActiveErr = -30427 #kISpSystemActiveErr
-kISpDeviceInactiveErr = -30426 #kISpDeviceInactiveErr
-kISpSystemInactiveErr = -30425 #kISpSystemInactiveErr
-kISpElementNotInListErr = -30424 #kISpElementNotInListErr
-kISpElementInListErr = -30423 #kISpElementInListErr
-kISpBufferToSmallErr = -30422 #kISpBufferToSmallErr
-kISpSystemListErr = -30421 #kISpSystemListErr
-kISpInternalErr = -30420 #kISpInternalErr
-kNSpJoinFailedErr = -30399 #kNSpJoinFailedErr
-kNSpCantBlockErr = -30398 #kNSpCantBlockErr
-kNSpMessageTooBigErr = -30397 #kNSpMessageTooBigErr
-kNSpSendFailedErr = -30396 #kNSpSendFailedErr
-kNSpConnectFailedErr = -30395 #kNSpConnectFailedErr
-kNSpGameTerminatedErr = -30394 #kNSpGameTerminatedErr
-kNSpTimeoutErr = -30393 #kNSpTimeoutErr
-kNSpInvalidProtocolListErr = -30392 #kNSpInvalidProtocolListErr
-kNSpInvalidProtocolRefErr = -30391 #kNSpInvalidProtocolRefErr
-kNSpInvalidDefinitionErr = -30390 #kNSpInvalidDefinitionErr
-kNSpAddPlayerFailedErr = -30389 #kNSpAddPlayerFailedErr
-kNSpCreateGroupFailedErr = -30388 #kNSpCreateGroupFailedErr
-kNSpNoHostVolunteersErr = -30387 #kNSpNoHostVolunteersErr
-kNSpNoGroupsErr = -30386 #kNSpNoGroupsErr
-kNSpNoPlayersErr = -30385 #kNSpNoPlayersErr
-kNSpInvalidGroupIDErr = -30384 #kNSpInvalidGroupIDErr
-kNSpInvalidPlayerIDErr = -30383 #kNSpInvalidPlayerIDErr
-kNSpNameRequiredErr = -30382 #kNSpNameRequiredErr
-kNSpFeatureNotImplementedErr = -30381 #kNSpFeatureNotImplementedErr
-kNSpAddressInUseErr = -30380 #kNSpAddressInUseErr
-kNSpRemovePlayerFailedErr = -30379 #kNSpRemovePlayerFailedErr
-kNSpFreeQExhaustedErr = -30378 #kNSpFreeQExhaustedErr
-kNSpInvalidAddressErr = -30377 #kNSpInvalidAddressErr
-kNSpNotAdvertisingErr = -30376 #kNSpNotAdvertisingErr
-kNSpAlreadyAdvertisingErr = -30374 #kNSpAlreadyAdvertisingErr
-kNSpMemAllocationErr = -30373 #kNSpMemAllocationErr
-kNSpOTVersionTooOldErr = -30371 #kNSpOTVersionTooOldErr
-kNSpOTNotPresentErr = -30370 #kNSpOTNotPresentErr
-kNSpInvalidParameterErr = -30369 #kNSpInvalidParameterErr
-kNSpInvalidGameRefErr = -30367 #kNSpInvalidGameRefErr
-kNSpProtocolNotAvailableErr = -30366 #kNSpProtocolNotAvailableErr
-kNSpHostFailedErr = -30365 #kNSpHostFailedErr
-kNSpPipeFullErr = -30364 #kNSpPipeFullErr
-kNSpTopologyNotSupportedErr = -30362 #kNSpTopologyNotSupportedErr
-kNSpAlreadyInitializedErr = -30361 #kNSpAlreadyInitializedErr
-kNSpInitializationFailedErr = -30360 #kNSpInitializationFailedErr
-kSSpScaleToZeroErr = -30344 #kSSpScaleToZeroErr
-kSSpParallelUpVectorErr = -30343 #kSSpParallelUpVectorErr
-kSSpCantInstallErr = -30342 #kSSpCantInstallErr
-kSSpVersionErr = -30341 #kSSpVersionErr
-kSSpInternalErr = -30340 #kSSpInternalErr
-kALMInternalErr = -30049 #kALMInternalErr
-kALMGroupNotFoundErr = -30048 #kALMGroupNotFoundErr
-kALMNoSuchModuleErr = -30047 #kALMNoSuchModuleErr
-kALMModuleCommunicationErr = -30046 #kALMModuleCommunicationErr
-kALMDuplicateModuleErr = -30045 #kALMDuplicateModuleErr
-kALMInstallationErr = -30044 #kALMInstallationErr
-kALMDeferSwitchErr = -30043 #kALMDeferSwitchErr
-kALMRebootFlagsLevelErr = -30042 #kALMRebootFlagsLevelErr
-kLocalesDefaultDisplayStatus = -30029 #Requested display locale unavailable, used default
-kLocalesTableFormatErr = -30002 #kLocalesTableFormatErr
-kLocalesBufferTooSmallErr = -30001 #kLocalesBufferTooSmallErr
-kFNSNameNotFoundErr = -29589 #The name with the requested paramters was not found
-kFNSBadFlattenedSizeErr = -29587 #flattened size didn't match input or was too small
-kFNSInsufficientDataErr = -29586 #insufficient data for the operation
-kFNSMismatchErr = -29585 #reference didn't match or wasn't found in profile
-kFNSDuplicateReferenceErr = -29584 #the ref. being added is already in the profile
-kFNSBadProfileVersionErr = -29583 #profile version is out of known range
-kFNSInvalidProfileErr = -29582 #profile is NULL or otherwise bad
-kFNSBadReferenceVersionErr = -29581 #ref. version is out of known range
-kFNSInvalidReferenceErr = -29580 #ref. was NULL or otherwise bad
-kCollateInvalidCollationRef = -29507 #kCollateInvalidCollationRef
-kCollateBufferTooSmall = -29506 #kCollateBufferTooSmall
-kCollateInvalidChar = -29505 #kCollateInvalidChar
-kCollatePatternNotFoundErr = -29504 #kCollatePatternNotFoundErr
-kCollateUnicodeConvertFailedErr = -29503 #kCollateUnicodeConvertFailedErr
-kCollateMissingUnicodeTableErr = -29502 #kCollateMissingUnicodeTableErr
-kCollateInvalidOptions = -29501 #kCollateInvalidOptions
-kCollateAttributesNotFoundErr = -29500 #kCollateAttributesNotFoundErr
-kMPInvalidIDErr = -29299 #kMPInvalidIDErr
-kMPInsufficientResourcesErr = -29298 #kMPInsufficientResourcesErr
-kMPTaskAbortedErr = -29297 #kMPTaskAbortedErr
-kMPTimeoutErr = -29296 #kMPTimeoutErr
-kMPDeletedErr = -29295 #kMPDeletedErr
-kMPBlueBlockingErr = -29293 #kMPBlueBlockingErr
-kMPTaskStoppedErr = -29292 #A convention used with MPThrowException.
-kMPTaskBlockedErr = -29291 #kMPTaskBlockedErr
-kMPTaskCreatedErr = -29290 #kMPTaskCreatedErr
-kMPProcessTerminatedErr = -29289 #kMPProcessTerminatedErr
-kMPProcessCreatedErr = -29288 #kMPProcessCreatedErr
-kMPPrivilegedErr = -29276 #kMPPrivilegedErr
-kMPIterationEndErr = -29275 #kMPIterationEndErr
-kUCTextBreakLocatorMissingType = -25341 #Unicode text break error
-kUCOutputBufferTooSmall = -25340 #Output buffer too small for Unicode string result
-errKCCreateChainFailed = -25318 #errKCCreateChainFailed
-errKCDataNotModifiable = -25317 #errKCDataNotModifiable
-errKCDataNotAvailable = -25316 #errKCDataNotAvailable
-errKCInteractionRequired = -25315 #errKCInteractionRequired
-errKCNoPolicyModule = -25314 #errKCNoPolicyModule
-errKCNoCertificateModule = -25313 #errKCNoCertificateModule
-errKCNoStorageModule = -25312 #errKCNoStorageModule
-errKCKeySizeNotAllowed = -25311 #errKCKeySizeNotAllowed
-errKCWrongKCVersion = -25310 #errKCWrongKCVersion
-errKCReadOnlyAttr = -25309 #errKCReadOnlyAttr
-errKCInteractionNotAllowed = -25308 #errKCInteractionNotAllowed
-errKCNoDefaultKeychain = -25307 #errKCNoDefaultKeychain
-errKCNoSuchClass = -25306 #errKCNoSuchClass
-errKCInvalidSearchRef = -25305 #errKCInvalidSearchRef
-errKCInvalidItemRef = -25304 #errKCInvalidItemRef
-errKCNoSuchAttr = -25303 #errKCNoSuchAttr
-errKCDataTooLarge = -25302 #errKCDataTooLarge
-errKCBufferTooSmall = -25301 #errKCBufferTooSmall
-errKCItemNotFound = -25300 #errKCItemNotFound
-errKCDuplicateItem = -25299 #errKCDuplicateItem
-errKCInvalidCallback = -25298 #errKCInvalidCallback
-errKCDuplicateCallback = -25297 #errKCDuplicateCallback
-errKCDuplicateKeychain = -25296 #errKCDuplicateKeychain
-errKCInvalidKeychain = -25295 #errKCInvalidKeychain
-errKCNoSuchKeychain = -25294 #errKCNoSuchKeychain
-errKCAuthFailed = -25293 #errKCAuthFailed
-errKCReadOnly = -25292 #errKCReadOnly
-errKCNotAvailable = -25291 #errKCNotAvailable
-printerStatusOpCodeNotSupportedErr = -25280 #printerStatusOpCodeNotSupportedErr
-kTXNOutsideOfFrameErr = -22018 #kTXNOutsideOfFrameErr
-kTXNOutsideOfLineErr = -22017 #kTXNOutsideOfLineErr
-kTXNATSUIIsNotInstalledErr = -22016 #kTXNATSUIIsNotInstalledErr
-kTXNDataTypeNotAllowedErr = -22015 #kTXNDataTypeNotAllowedErr
-kTXNCopyNotAllowedInEchoModeErr = -22014 #kTXNCopyNotAllowedInEchoModeErr
-kTXNCannotTurnTSMOffWhenUsingUnicodeErr = -22013 #kTXNCannotTurnTSMOffWhenUsingUnicodeErr
-kTXNAlreadyInitializedErr = -22012 #kTXNAlreadyInitializedErr
-kTXNInvalidRunIndex = -22011 #kTXNInvalidRunIndex
-kTXNSomeOrAllTagsInvalidForRunErr = -22010 #kTXNSomeOrAllTagsInvalidForRunErr
-kTXNAttributeTagInvalidForRunErr = -22009 #dataValue is set to this per invalid tag
-kTXNNoMatchErr = -22008 #kTXNNoMatchErr
-kTXNRunIndexOutofBoundsErr = -22007 #kTXNRunIndexOutofBoundsErr
-kTXNCannotSetAutoIndentErr = -22006 #kTXNCannotSetAutoIndentErr
-kTXNBadDefaultFileTypeWarning = -22005 #kTXNBadDefaultFileTypeWarning
-kTXNUserCanceledOperationErr = -22004 #kTXNUserCanceledOperationErr
-kTXNIllegalToCrossDataBoundariesErr = -22003 #kTXNIllegalToCrossDataBoundariesErr
-kTXNInvalidFrameIDErr = -22002 #kTXNInvalidFrameIDErr
-kTXNCannotAddFrameErr = -22001 #kTXNCannotAddFrameErr
-kTXNEndIterationErr = -22000 #kTXNEndIterationErr
-invalidIndexErr = -20002 #The recordIndex parameter is not valid.
-recordDataTooBigErr = -20001 #The record data is bigger than buffer size (1024 bytes).
-unknownInsertModeErr = -20000 #There is no such an insert mode.
-kModemScriptMissing = -14002 #kModemScriptMissing
-kModemPreferencesMissing = -14001 #kModemPreferencesMissing
-kModemOutOfMemory = -14000 #kModemOutOfMemory
-kHIDBaseError = -13950 #kHIDBaseError
-kHIDNullStateErr = -13949 #kHIDNullStateErr
-kHIDBufferTooSmallErr = -13948 #kHIDBufferTooSmallErr
-kHIDValueOutOfRangeErr = -13947 #kHIDValueOutOfRangeErr
-kHIDUsageNotFoundErr = -13946 #kHIDUsageNotFoundErr
-kHIDNotValueArrayErr = -13945 #kHIDNotValueArrayErr
-kHIDInvalidPreparsedDataErr = -13944 #kHIDInvalidPreparsedDataErr
-kHIDIncompatibleReportErr = -13943 #kHIDIncompatibleReportErr
-kHIDBadLogPhysValuesErr = -13942 #kHIDBadLogPhysValuesErr
-kHIDInvalidReportTypeErr = -13941 #kHIDInvalidReportTypeErr
-kHIDInvalidReportLengthErr = -13940 #kHIDInvalidReportLengthErr
-kHIDNullPointerErr = -13939 #kHIDNullPointerErr
-kHIDBadParameterErr = -13938 #kHIDBadParameterErr
-kHIDNotEnoughMemoryErr = -13937 #kHIDNotEnoughMemoryErr
-kHIDEndOfDescriptorErr = -13936 #kHIDEndOfDescriptorErr
-kHIDUsagePageZeroErr = -13935 #kHIDUsagePageZeroErr
-kHIDBadLogicalMinimumErr = -13934 #kHIDBadLogicalMinimumErr
-kHIDBadLogicalMaximumErr = -13933 #kHIDBadLogicalMaximumErr
-kHIDInvertedLogicalRangeErr = -13932 #kHIDInvertedLogicalRangeErr
-kHIDInvertedPhysicalRangeErr = -13931 #kHIDInvertedPhysicalRangeErr
-kHIDUnmatchedUsageRangeErr = -13930 #kHIDUnmatchedUsageRangeErr
-kHIDInvertedUsageRangeErr = -13929 #kHIDInvertedUsageRangeErr
-kHIDUnmatchedStringRangeErr = -13928 #kHIDUnmatchedStringRangeErr
-kHIDUnmatchedDesignatorRangeErr = -13927 #kHIDUnmatchedDesignatorRangeErr
-kHIDReportSizeZeroErr = -13926 #kHIDReportSizeZeroErr
-kHIDReportCountZeroErr = -13925 #kHIDReportCountZeroErr
-kHIDReportIDZeroErr = -13924 #kHIDReportIDZeroErr
-kHIDInvalidRangePageErr = -13923 #kHIDInvalidRangePageErr
-kHIDDeviceNotReady = -13910 #The device is still initializing, try again later
-kHIDVersionIncompatibleErr = -13909 #kHIDVersionIncompatibleErr
-debuggingNoMatchErr = -13887 #debugging component or option not found at this index
-debuggingNoCallbackErr = -13886 #debugging component has no callback
-debuggingInvalidNameErr = -13885 #componentName or optionName is invalid (NULL)
-debuggingInvalidOptionErr = -13884 #optionSelectorNum is not registered
-debuggingInvalidSignatureErr = -13883 #componentSignature not registered
-debuggingDuplicateOptionErr = -13882 #optionSelectorNum already registered
-debuggingDuplicateSignatureErr = -13881 #componentSignature already registered
-debuggingExecutionContextErr = -13880 #routine cannot be called at this time
-kBridgeSoftwareRunningCantSleep = -13038 #kBridgeSoftwareRunningCantSleep
-kNoSuchPowerSource = -13020 #kNoSuchPowerSource
-kProcessorTempRoutineRequiresMPLib2 = -13014 #kProcessorTempRoutineRequiresMPLib2
-kCantReportProcessorTemperatureErr = -13013 #kCantReportProcessorTemperatureErr
-kPowerMgtRequestDenied = -13010 #kPowerMgtRequestDenied
-kPowerMgtMessageNotHandled = -13009 #kPowerMgtMessageNotHandled
-kPowerHandlerNotFoundForProcErr = -13008 #kPowerHandlerNotFoundForProcErr
-kPowerHandlerNotFoundForDeviceErr = -13007 #kPowerHandlerNotFoundForDeviceErr
-kPowerHandlerExistsForDeviceErr = -13006 #kPowerHandlerExistsForDeviceErr
-pmRecvEndErr = -13005 #during receive, pmgr did not finish hs configured for this connection
-pmRecvStartErr = -13004 #during receive, pmgr did not start hs
-pmSendEndErr = -13003 #during send, pmgr did not finish hs
-pmSendStartErr = -13002 #during send, pmgr did not start hs
-pmReplyTOErr = -13001 #Timed out waiting for reply
-pmBusyErr = -13000 #Power Mgr never ready to start handshake
-pictureDataErr = -11005 #the picture data was invalid
-colorsRequestedErr = -11004 #the number of colors requested was illegal
-cantLoadPickMethodErr = -11003 #unable to load the custom pick proc
-pictInfoVerbErr = -11002 #the passed verb was invalid
-pictInfoIDErr = -11001 #the internal consistancy check for the PictInfoID is wrong
-pictInfoVersionErr = -11000 #wrong version of the PictInfo structure
-errTaskNotFound = -10780 #no task with that task id exists
-telNotEnoughdspBW = -10116 #not enough real-time for allocation
-telBadSampleRate = -10115 #incompatible sample rate
-telBadSWErr = -10114 #Software not installed properly
-telDetAlreadyOn = -10113 #detection is already turned on
-telAutoAnsNotOn = -10112 #autoAnswer in not turned on
-telValidateFailed = -10111 #telValidate failed
-telBadProcID = -10110 #invalid procID
-telDeviceNotFound = -10109 #device not found
-telBadCodeResource = -10108 #code resource not found
-telInitFailed = -10107 #initialization failed
-telNoCommFolder = -10106 #Communications/Extensions € not found
-telUnknownErr = -10103 #unable to set config
-telNoSuchTool = -10102 #unable to find tool with name specified
-telBadFunction = -10091 #bad msgCode specified
-telPBErr = -10090 #parameter block error, bad format
-telCANotDeflectable = -10082 #CA not "deflectable"
-telCANotRejectable = -10081 #CA not "rejectable"
-telCANotAcceptable = -10080 #CA not "acceptable"
-telTermNotOpen = -10072 #terminal not opened via TELOpenTerm
-telStillNeeded = -10071 #terminal driver still needed by someone else
-telAlreadyOpen = -10070 #terminal already open
-telNoCallbackRef = -10064 #no call back reference was specified, but is required
-telDisplayModeNotSupp = -10063 #display mode not supported by tool
-telBadDisplayMode = -10062 #bad display mode specified
-telFwdTypeNotSupp = -10061 #forward type not supported by tool
-telDNTypeNotSupp = -10060 #DN type not supported by tool
-telBadRate = -10059 #bad rate specified
-telBadBearerType = -10058 #bad bearerType specified
-telBadSelect = -10057 #unable to select or deselect DN
-telBadParkID = -10056 #bad park id specified
-telBadPickupGroupID = -10055 #bad pickup group ID specified
-telBadFwdType = -10054 #bad fwdType specified
-telBadFeatureID = -10053 #bad feature ID specified
-telBadIntercomID = -10052 #bad intercom ID specified
-telBadPageID = -10051 #bad page ID specified
-telBadDNType = -10050 #DN type invalid
-telConfLimitExceeded = -10047 #attempt to exceed switch conference limits
-telCBErr = -10046 #call back feature not set previously
-telTransferRej = -10045 #transfer request rejected
-telTransferErr = -10044 #transfer not prepared
-telConfRej = -10043 #conference request was rejected
-telConfErr = -10042 #conference was not prepared
-telConfNoLimit = -10041 #no limit was specified but required
-telConfLimitErr = -10040 #limit specified is too high for this configuration
-telFeatNotSupp = -10033 #feature program call not supported by this tool
-telFeatActive = -10032 #feature already active
-telFeatNotAvail = -10031 #feature subscribed but not available
-telFeatNotSub = -10030 #feature not subscribed
-errAEPropertiesClash = -10025 #illegal combination of properties settings for Set Data, make new, or duplicate
-errAECantPutThatThere = -10024 #in make new, duplicate, etc. class can't be an element of container
-errAENotAnEnumMember = -10023 #enumerated value in SetData is not allowed for this property
-telIntExtNotSupp = -10022 #internal external type not supported by this tool
-telBadIntExt = -10021 #bad internal external error
-telStateNotSupp = -10020 #device state not supported by tool
-telBadStateErr = -10019 #bad device state specified
-telIndexNotSupp = -10018 #index not supported by this tool
-telBadIndex = -10017 #bad index specified
-telAPattNotSupp = -10016 #alerting pattern not supported by tool
-telBadAPattErr = -10015 #bad alerting pattern specified
-telVTypeNotSupp = -10014 #volume type not supported by this tool
-telBadVTypeErr = -10013 #bad volume type error
-telBadLevelErr = -10012 #bad volume level setting
-telHTypeNotSupp = -10011 #hook type not supported by this tool
-telBadHTypeErr = -10010 #bad hook type specified
-errAECantSupplyType = -10009 #errAECantSupplyType
-telNoOpenErr = -10008 #unable to open terminal
-telNoMemErr = -10007 #no memory to allocate handle
-errOSACantAssign = -10006 #Signaled when an object cannot be set in a container.
-telBadProcErr = -10005 #bad msgProc specified
-telBadHandErr = -10004 #bad handle specified
-OSAIllegalAssign = -10003 #Signaled when an object can never be set in a container
-telBadDNErr = -10002 #TELDNHandle not found or invalid
-telBadTermErr = -10001 #invalid TELHandle or handle not found
-errAEEventFailed = -10000 #errAEEventFailed
-cannotMoveAttachedController = -9999 #cannotMoveAttachedController
-controllerHasFixedHeight = -9998 #controllerHasFixedHeight
-cannotSetWidthOfAttachedController = -9997 #cannotSetWidthOfAttachedController
-controllerBoundsNotExact = -9996 #controllerBoundsNotExact
-editingNotAllowed = -9995 #editingNotAllowed
-badControllerHeight = -9994 #badControllerHeight
-deviceCantMeetRequest = -9408 #deviceCantMeetRequest
-seqGrabInfoNotAvailable = -9407 #seqGrabInfoNotAvailable
-badSGChannel = -9406 #badSGChannel
-couldntGetRequiredComponent = -9405 #couldntGetRequiredComponent
-notEnoughDiskSpaceToGrab = -9404 #notEnoughDiskSpaceToGrab
-notEnoughMemoryToGrab = -9403 #notEnoughMemoryToGrab
-cantDoThatInCurrentMode = -9402 #cantDoThatInCurrentMode
-grabTimeComplete = -9401 #grabTimeComplete
-noDeviceForChannel = -9400 #noDeviceForChannel
-kNoCardBusCISErr = -9109 #No valid CIS exists for this CardBus card
-kNotZVCapableErr = -9108 #This socket does not support Zoomed Video
-kCardPowerOffErr = -9107 #Power to the card has been turned off
-kAttemptDupCardEntryErr = -9106 #The Enabler was asked to create a duplicate card entry
-kAlreadySavedStateErr = -9105 #The state has been saved on previous call
-kTooManyIOWindowsErr = -9104 #device requested more than one I/O window
-kNotReadyErr = -9103 #PC Card failed to go ready
-kClientRequestDenied = -9102 #CS Clients should return this code inorder to
-kNoCompatibleNameErr = -9101 #There is no compatible driver name for this device
-kNoEnablerForCardErr = -9100 #No Enablers were found that can support the card
-kNoCardEnablersFoundErr = -9099 #No Enablers were found
-kUnsupportedCardErr = -9098 #Card not supported by generic enabler
-kNoClientTableErr = -9097 #The client table has not be initialized yet
-kNoMoreInterruptSlotsErr = -9096 #All internal Interrupt slots are in use
-kNoMoreTimerClientsErr = -9095 #All timer callbacks are in use
-kNoIOWindowRequestedErr = -9094 #Request I/O window before calling configuration
-kBadCustomIFIDErr = -9093 #Custom interface ID is invalid
-kBadTupleDataErr = -9092 #Data in tuple is invalid
-kInvalidCSClientErr = -9091 #Card Services ClientID is not registered
-kUnsupportedVsErr = -9090 #Unsupported Voltage Sense
-kInvalidDeviceNumber = -9089 #kInvalidDeviceNumber
-kPostCardEventErr = -9088 #_PCCSLPostCardEvent failed and dropped an event
-kCantConfigureCardErr = -9087 #kCantConfigureCardErr
-kPassCallToChainErr = -9086 #kPassCallToChainErr
-kCardBusCardErr = -9085 #kCardBusCardErr
-k16BitCardErr = -9084 #k16BitCardErr
-kBadDeviceErr = -9083 #kBadDeviceErr
-kBadLinkErr = -9082 #kBadLinkErr
-kInvalidRegEntryErr = -9081 #kInvalidRegEntryErr
-kNoCardSevicesSocketsErr = -9080 #kNoCardSevicesSocketsErr
-kOutOfResourceErr = -9079 #Card Services has exhausted the resource
-kNoMoreItemsErr = -9078 #there are no more of the requested item
-kInUseErr = -9077 #requested resource is being used by a client
-kConfigurationLockedErr = -9076 #a configuration has already been locked
-kWriteProtectedErr = -9075 #media is write-protected
-kBusyErr = -9074 #unable to process request at this time - try later
-kUnsupportedModeErr = -9073 #mode is not supported
-kUnsupportedFunctionErr = -9072 #function is not supported by this implementation
-kNoCardErr = -9071 #no PC card in the socket
-kGeneralFailureErr = -9070 #an undefined error has occurred
-kWriteFailureErr = -9069 #unable to complete write request
-kReadFailureErr = -9068 #unable to complete read request
-kBadSpeedErr = -9067 #specified speed is unavailable
-kBadCISErr = -9066 #CIS on card is invalid
-kBadHandleErr = -9065 #clientHandle is invalid
-kBadArgsErr = -9064 #values in argument packet are invalid
-kBadArgLengthErr = -9063 #ArgLength argument is invalid
-kBadWindowErr = -9062 #specified window is invalid
-kBadVppErr = -9061 #specified Vpp1 or Vpp2 power level index is invalid
-kBadVccErr = -9060 #specified Vcc power level index is invalid
-kBadTypeErr = -9059 #specified window or interface type is invalid
-kBadSocketErr = -9058 #specified logical or physical socket number is invalid
-kBadSizeErr = -9057 #specified size is invalid
-kBadPageErr = -9056 #specified page is invalid
-kBadOffsetErr = -9055 #specified PC card memory array offset is invalid
-kBadIRQErr = -9054 #specified IRQ level is invalid
-kBadEDCErr = -9053 #specified EDC generator specified is invalid
-kBadBaseErr = -9052 #specified base system memory address is invalid
-kBadAttributeErr = -9051 #specified attributes field value is invalid
-kBadAdapterErr = -9050 #invalid adapter number
-codecOffscreenFailedPleaseRetryErr = -8992 #codecOffscreenFailedPleaseRetryErr
-lockPortBitsWrongGDeviceErr = -8991 #lockPortBitsWrongGDeviceErr
-directXObjectAlreadyExists = -8990 #directXObjectAlreadyExists
-codecDroppedFrameErr = -8989 #returned from ImageCodecDrawBand
-codecOffscreenFailedErr = -8988 #codecOffscreenFailedErr
-codecNeedAccessKeyErr = -8987 #codec needs password in order to decompress
-codecParameterDialogConfirm = -8986 #codecParameterDialogConfirm
-lockPortBitsSurfaceLostErr = -8985 #lockPortBitsSurfaceLostErr
-lockPortBitsBadPortErr = -8984 #lockPortBitsBadPortErr
-lockPortBitsWindowClippedErr = -8983 #lockPortBitsWindowClippedErr
-lockPortBitsWindowResizedErr = -8982 #lockPortBitsWindowResizedErr
-lockPortBitsWindowMovedErr = -8981 #lockPortBitsWindowMovedErr
-lockPortBitsBadSurfaceErr = -8980 #lockPortBitsBadSurfaceErr
-codecNeedToFlushChainErr = -8979 #codecNeedToFlushChainErr
-codecDisabledErr = -8978 #codec disabled itself -- pass codecFlagReenable to reset
-codecNoMemoryPleaseWaitErr = -8977 #codecNoMemoryPleaseWaitErr
-codecNothingToBlitErr = -8976 #codecNothingToBlitErr
-codecCantQueueErr = -8975 #codecCantQueueErr
-codecCantWhenErr = -8974 #codecCantWhenErr
-codecOpenErr = -8973 #codecOpenErr
-codecConditionErr = -8972 #codecConditionErr
-codecExtensionNotFoundErr = -8971 #codecExtensionNotFoundErr
-codecDataVersErr = -8970 #codecDataVersErr
-codecBadDataErr = -8969 #codecBadDataErr
-codecWouldOffscreenErr = -8968 #codecWouldOffscreenErr
-codecAbortErr = -8967 #codecAbortErr
-codecSpoolErr = -8966 #codecSpoolErr
-codecImageBufErr = -8965 #codecImageBufErr
-codecScreenBufErr = -8964 #codecScreenBufErr
-codecSizeErr = -8963 #codecSizeErr
-codecUnimpErr = -8962 #codecUnimpErr
-noCodecErr = -8961 #noCodecErr
-codecErr = -8960 #codecErr
-kIllegalClockValueErr = -8852 #kIllegalClockValueErr
-kUTCOverflowErr = -8851 #kUTCOverflowErr
-kUTCUnderflowErr = -8850 #kUTCUnderflowErr
-kATSULastErr = -8809 #The last ATSUI error code.
-kATSULineBreakInWord = -8808 #This is not an error code but is returned by ATSUBreakLine to
-kATSUCoordinateOverflowErr = -8807 #Used to indicate the coordinates provided to an ATSUI routine caused
-kATSUNoFontScalerAvailableErr = -8806 #Used when no font scaler is available for the font passed
-kATSUNoFontCmapAvailableErr = -8805 #Used when no CMAP table can be accessed or synthesized for the
-kATSULowLevelErr = -8804 #Used when an error was encountered within the low level ATS
-kATSUQuickDrawTextErr = -8803 #Used when QuickDraw Text encounters an error rendering or measuring
-kATSUNoStyleRunsAssignedErr = -8802 #Used when an attempt was made to measure, highlight or draw
-kATSUNotSetErr = -8801 #Used when the client attempts to retrieve an attribute,
-kATSUInvalidCacheErr = -8800 #Used when an attempt was made to read in style data
-kATSUInvalidAttributeTagErr = -8799 #Used when an attempt was made to use a tag value that
-kATSUInvalidAttributeSizeErr = -8798 #Used when an attempt was made to use an attribute with a
-kATSUInvalidAttributeValueErr = -8797 #Used when an attempt was made to use an attribute with
-kATSUInvalidFontErr = -8796 #Used when an attempt was made to use an invalid font ID.
-kATSUNoCorrespondingFontErr = -8795 #This value is retrned by font ID conversion
-kATSUFontsNotMatched = -8794 #This value is returned by ATSUMatchFontsToText()
-kATSUFontsMatched = -8793 #This is not an error code but is returned by
-kATSUInvalidTextRangeErr = -8792 #An attempt was made to extract information
-kATSUInvalidStyleErr = -8791 #An attempt was made to use a ATSUStyle which
-kATSUInvalidTextLayoutErr = -8790 #An attempt was made to use a ATSUTextLayout
-kTECOutputBufferFullStatus = -8785 #output buffer has no room for conversion of next input text element (partial conversion)
-kTECNeedFlushStatus = -8784 #kTECNeedFlushStatus
-kTECUsedFallbacksStatus = -8783 #kTECUsedFallbacksStatus
-kTECItemUnavailableErr = -8771 #item (e.g. name) not available for specified region (& encoding if relevant)
-kTECGlobalsUnavailableErr = -8770 #globals have already been deallocated (premature TERM)
-unicodeChecksumErr = -8769 #unicodeChecksumErr
-unicodeNoTableErr = -8768 #unicodeNoTableErr
-unicodeVariantErr = -8767 #unicodeVariantErr
-unicodeFallbacksErr = -8766 #unicodeFallbacksErr
-unicodePartConvertErr = -8765 #unicodePartConvertErr
-unicodeBufErr = -8764 #unicodeBufErr
-unicodeCharErr = -8763 #unicodeCharErr
-unicodeElementErr = -8762 #unicodeElementErr
-unicodeNotFoundErr = -8761 #unicodeNotFoundErr
-unicodeTableFormatErr = -8760 #unicodeTableFormatErr
-unicodeDirectionErr = -8759 #unicodeDirectionErr
-unicodeContextualErr = -8758 #unicodeContextualErr
-unicodeTextEncodingDataErr = -8757 #unicodeTextEncodingDataErr
-kTECDirectionErr = -8756 #direction stack overflow, etc.
-kTECIncompleteElementErr = -8755 #text element may be incomplete or is too long for internal buffers
-kTECUnmappableElementErr = -8754 #kTECUnmappableElementErr
-kTECPartialCharErr = -8753 #input buffer ends in the middle of a multibyte character, conversion stopped
-kTECBadTextRunErr = -8752 #kTECBadTextRunErr
-kTECArrayFullErr = -8751 #supplied name buffer or TextRun, TextEncoding, or UnicodeMapping array is too small
-kTECBufferBelowMinimumSizeErr = -8750 #output buffer too small to allow processing of first input text element
-kTECNoConversionPathErr = -8749 #kTECNoConversionPathErr
-kTECCorruptConverterErr = -8748 #invalid converter object reference
-kTECTableFormatErr = -8747 #kTECTableFormatErr
-kTECTableChecksumErr = -8746 #kTECTableChecksumErr
-kTECMissingTableErr = -8745 #kTECMissingTableErr
-kTextUndefinedElementErr = -8740 #text conversion errors
-kTextMalformedInputErr = -8739 #in DBCS, for example, high byte followed by invalid low byte
-kTextUnsupportedEncodingErr = -8738 #specified encoding not supported for this operation
-kRANotEnabled = -7139 #kRANotEnabled
-kRACallBackFailed = -7138 #kRACallBackFailed
-kRADuplicateIPAddr = -7137 #kRADuplicateIPAddr
-kRANCPRejectedbyPeer = -7136 #kRANCPRejectedbyPeer
-kRAExtAuthenticationFailed = -7135 #kRAExtAuthenticationFailed
-kRAATalkInactive = -7134 #kRAATalkInactive
-kRAPeerNotResponding = -7133 #kRAPeerNotResponding
-kRAPPPPeerDisconnected = -7132 #kRAPPPPeerDisconnected
-kRAPPPUserDisconnected = -7131 #kRAPPPUserDisconnected
-kRAPPPNegotiationFailed = -7130 #kRAPPPNegotiationFailed
-kRAPPPAuthenticationFailed = -7129 #kRAPPPAuthenticationFailed
-kRAPPPProtocolRejected = -7128 #kRAPPPProtocolRejected
-dcmBufferOverflowErr = -7127 #data is larger than buffer size
-kRANotPrimaryInterface = -7126 #when IPCP is not primary TCP/IP intf.
-kRATCPIPNotConfigured = -7125 #TCP/IP not configured, could be loaded
-kRATCPIPInactive = -7124 #TCP/IP inactive, cannot be loaded
-kRARemoteAccessNotReady = -7123 #kRARemoteAccessNotReady
-kRAInitOpenTransportFailed = -7122 #kRAInitOpenTransportFailed
-dcmProtectedErr = -7121 #need keyword to use dictionary
-kRAUserPwdEntryRequired = -7120 #kRAUserPwdEntryRequired
-kRAUserPwdChangeRequired = -7119 #kRAUserPwdChangeRequired
-dcmBadFindMethodErr = -7118 #no such find method supported
-kRAInvalidSerialProtocol = -7117 #kRAInvalidSerialProtocol
-kRAInvalidPortState = -7116 #kRAInvalidPortState
-dcmBadKeyErr = -7115 #bad key information
-kRAPortBusy = -7114 #kRAPortBusy
-kRAInstallationDamaged = -7113 #kRAInstallationDamaged
-dcmBadFieldTypeErr = -7112 #no such field type supported
-dcmBadFieldInfoErr = -7111 #incomplete information
-dcmNecessaryFieldErr = -7110 #lack required/identify field
-dcmDupRecordErr = -7109 #same record already exist
-kRANotConnected = -7108 #kRANotConnected
-dcmBlockFullErr = -7107 #dictionary block full
-kRAMissingResources = -7106 #kRAMissingResources
-dcmDictionaryBusyErr = -7105 #dictionary is busy
-dcmDictionaryNotOpenErr = -7104 #dictionary not opened
-dcmPermissionErr = -7103 #invalid permission
-dcmBadDictionaryErr = -7102 #invalid dictionary
-dcmNotDictionaryErr = -7101 #not dictionary
-kRAInvalidParameter = -7100 #kRAInvalidParameter
-laEngineNotFoundErr = -7000 #can't find the engine
-laPropertyErr = -6999 #Error in properties
-kUSBUnknownDeviceErr = -6998 #device ref not recognised
-laPropertyIsReadOnlyErr = -6997 #the property is read only
-laPropertyUnknownErr = -6996 #the property is unknown to this environment
-laPropertyValueErr = -6995 #Invalid property value
-laDictionaryTooManyErr = -6994 #too many dictionaries
-laDictionaryUnknownErr = -6993 #can't use this dictionary with this environment
-laDictionaryNotOpenedErr = -6992 #the dictionary is not opened
-laTextOverFlowErr = -6991 #text is too long
-laFailAnalysisErr = -6990 #analysis failed
-laNoMoreMorphemeErr = -6989 #nothing to read
-laInvalidPathErr = -6988 #path is not correct
-kUSBNotHandled = -6987 #Notification was not handled (same as NotFound)
-laEnvironmentNotFoundErr = -6986 #can't fint the specified environment
-laEnvironmentBusyErr = -6985 #specified environment is used
-laTooSmallBufferErr = -6984 #output buffer is too small to store any result
-kUSBFlagsError = -6983 #Unused flags not zeroed
-kUSBAbortedError = -6982 #Pipe aborted
-kUSBNoBandwidthError = -6981 #Not enough bandwidth available
-kUSBPipeIdleError = -6980 #Pipe is Idle, it will not accept transactions
-kUSBPipeStalledError = -6979 #Pipe has stalled, error needs to be cleared
-kUSBUnknownInterfaceErr = -6978 #Interface ref not recognised
-kUSBDeviceBusy = -6977 #Device is already being configured
-kUSBDevicePowerProblem = -6976 #Device has a power problem
-kUSBInvalidBuffer = -6975 #bad buffer, usually nil
-kUSBDeviceSuspended = -6974 #Device is suspended
-kUSBDeviceNotSuspended = -6973 #device is not suspended for resume
-kUSBDeviceDisconnected = -6972 #Disconnected during suspend or reset
-kUSBTimedOut = -6971 #Transaction timed out.
-kUSBQueueAborted = -6970 #Pipe zero stall cleared.
-kUSBPortDisabled = -6969 #The port you are attached to is disabled, use USBDeviceReset.
-kUSBBadDispatchTable = -6950 #Improper driver dispatch table
-kUSBUnknownNotification = -6949 #Notification type not defined
-kUSBQueueFull = -6948 #Internal queue maxxed
-kUSBLinkErr = -6916 #kUSBLinkErr
-kUSBCRCErr = -6915 #Pipe stall, bad CRC
-kUSBBitstufErr = -6914 #Pipe stall, bitstuffing
-kUSBDataToggleErr = -6913 #Pipe stall, Bad data toggle
-kUSBEndpointStallErr = -6912 #Device didn't understand
-kUSBNotRespondingErr = -6911 #Pipe stall, No device, device hung
-kUSBPIDCheckErr = -6910 #Pipe stall, PID CRC error
-kUSBWrongPIDErr = -6909 #Pipe stall, Bad or wrong PID
-kUSBOverRunErr = -6908 #Packet too large or more data than buffer
-kUSBUnderRunErr = -6907 #Less data than buffer
-kUSBRes1Err = -6906 #kUSBRes1Err
-kUSBRes2Err = -6905 #kUSBRes2Err
-kUSBBufOvrRunErr = -6904 #Host hardware failure on data in, PCI busy?
-kUSBBufUnderRunErr = -6903 #Host hardware failure on data out, PCI busy?
-kUSBNotSent1Err = -6902 #Transaction not sent
-kUSBNotSent2Err = -6901 #Transaction not sent
-kDMFoundErr = -6232 #Did not proceed because we found an item
-kDMMainDisplayCannotMoveErr = -6231 #Trying to move main display (or a display mirrored to it)
-kDMDisplayAlreadyInstalledErr = -6230 #Attempt to add an already installed display.
-kDMDisplayNotFoundErr = -6229 #Could not find item (will someday remove).
-kDMDriverNotDisplayMgrAwareErr = -6228 #Video Driver does not support display manager.
-kDMSWNotInitializedErr = -6227 #Required software not initialized (eg windowmanager or display mgr).
-kSysSWTooOld = -6226 #Missing critical pieces of System Software.
-kDMMirroringNotOn = -6225 #Returned by all calls that need mirroring to be on to do their thing.
-kDMCantBlock = -6224 #Mirroring is already on, canÕt Block now (call DMUnMirror() first).
-kDMMirroringBlocked = -6223 #DMBlockMirroring() has been called.
-kDMWrongNumberOfDisplays = -6222 #Can only handle 2 displays for now.
-kDMMirroringOnAlready = -6221 #Returned by all calls that need mirroring to be off to do their thing.
-kDMGenErr = -6220 #Unexpected Error
-kQTSSUnknownErr = -6150 #kQTSSUnknownErr
-collectionVersionErr = -5753 #collectionVersionErr
-collectionIndexRangeErr = -5752 #collectionIndexRangeErr
-collectionItemNotFoundErr = -5751 #collectionItemNotFoundErr
-collectionItemLockedErr = -5750 #collectionItemLockedErr
-kNavMissingKindStringErr = -5699 #kNavMissingKindStringErr
-kNavInvalidCustomControlMessageErr = -5698 #kNavInvalidCustomControlMessageErr
-kNavCustomControlMessageFailedErr = -5697 #kNavCustomControlMessageFailedErr
-kNavInvalidSystemConfigErr = -5696 #kNavInvalidSystemConfigErr
-kNavWrongDialogClassErr = -5695 #kNavWrongDialogClassErr
-kNavWrongDialogStateErr = -5694 #kNavWrongDialogStateErr
-dialogNoTimeoutErr = -5640 #dialogNoTimeoutErr
-menuInvalidErr = -5623 #menu is invalid
-menuItemNotFoundErr = -5622 #specified menu item wasn't found
-menuUsesSystemDefErr = -5621 #GetMenuDefinition failed because the menu uses the system MDEF
-menuNotFoundErr = -5620 #specified menu or menu ID wasn't found
-windowWrongStateErr = -5615 #window is not in a state that is valid for the current action
-windowManagerInternalErr = -5614 #something really weird happened inside the window manager
-windowAttributesConflictErr = -5613 #passed some attributes that are mutually exclusive
-windowAttributeImmutableErr = -5612 #tried to change attributes which can't be changed
-errWindowDoesNotFitOnscreen = -5611 #ConstrainWindowToScreen could not make the window fit onscreen
-errWindowNotFound = -5610 #returned from FindWindowOfClass
-errFloatingWindowsNotInitialized = -5609 #called HideFloatingWindows or ShowFloatingWindows without calling InitFloatingWindows
-errWindowsAlreadyInitialized = -5608 #tried to call InitFloatingWindows twice, or called InitWindows and then floating windows
-errUserWantsToDragWindow = -5607 #if returned from TrackWindowProxyDrag, you should call DragWindow on the window
-errCorruptWindowDescription = -5606 #tried to load a corrupt window description (size or version fields incorrect)
-errUnrecognizedWindowClass = -5605 #tried to create a window with a bad WindowClass
-errWindowPropertyNotFound = -5604 #tried to get a nonexistent property
-errInvalidWindowProperty = -5603 #tried to access a property tag with private creator
-errWindowDoesNotHaveProxy = -5602 #tried to do something requiring a proxy to a window which doesnÕt have a proxy
-errUnsupportedWindowAttributesForClass = -5601 #tried to create a window with WindowAttributes not supported by the WindowClass
-errInvalidWindowPtr = -5600 #tried to pass a bad WindowRef argument
-gestaltLocationErr = -5553 #gestalt function ptr wasn't in sysheap
-gestaltDupSelectorErr = -5552 #tried to add an entry that already existed
-gestaltUndefSelectorErr = -5551 #undefined selector was passed to Gestalt
-gestaltUnknownErr = -5550 #value returned if Gestalt doesn't know the answer
-envVersTooBig = -5502 #Version bigger than call can handle
-envBadVers = -5501 #Version non-positive
-envNotPresent = -5500 #returned by glue.
-qtsAddressBusyErr = -5421 #qtsAddressBusyErr
-qtsConnectionFailedErr = -5420 #qtsConnectionFailedErr
-qtsTimeoutErr = -5408 #qtsTimeoutErr
-qtsUnknownValueErr = -5407 #qtsUnknownValueErr
-qtsTooMuchDataErr = -5406 #qtsTooMuchDataErr
-qtsUnsupportedFeatureErr = -5405 #qtsUnsupportedFeatureErr
-qtsUnsupportedRateErr = -5404 #qtsUnsupportedRateErr
-qtsUnsupportedDataTypeErr = -5403 #qtsUnsupportedDataTypeErr
-qtsBadDataErr = -5402 #something is wrong with the data
-qtsBadStateErr = -5401 #qtsBadStateErr
-qtsBadSelectorErr = -5400 #qtsBadSelectorErr
-errIAEndOfTextRun = -5388 #errIAEndOfTextRun
-errIATextExtractionErr = -5387 #errIATextExtractionErr
-errIAInvalidDocument = -5386 #errIAInvalidDocument
-errIACanceled = -5385 #errIACanceled
-errIABufferTooSmall = -5384 #errIABufferTooSmall
-errIANoMoreItems = -5383 #errIANoMoreItems
-errIAParamErr = -5382 #errIAParamErr
-errIAAllocationErr = -5381 #errIAAllocationErr
-errIAUnknownErr = -5380 #errIAUnknownErr
-hrURLNotHandledErr = -5363 #hrURLNotHandledErr
-hrUnableToResizeHandleErr = -5362 #hrUnableToResizeHandleErr
-hrMiscellaneousExceptionErr = -5361 #hrMiscellaneousExceptionErr
-hrHTMLRenderingLibNotInstalledErr = -5360 #hrHTMLRenderingLibNotInstalledErr
-errCannotUndo = -5253 #errCannotUndo
-errNonContiuousAttribute = -5252 #errNonContiuousAttribute
-errUnknownElement = -5251 #errUnknownElement
-errReadOnlyText = -5250 #errReadOnlyText
-errEmptyScrap = -5249 #errEmptyScrap
-errNoHiliteText = -5248 #errNoHiliteText
-errOffsetNotOnElementBounday = -5247 #errOffsetNotOnElementBounday
-errInvalidRange = -5246 #errInvalidRange
-errIteratorReachedEnd = -5245 #errIteratorReachedEnd
-errEngineNotFound = -5244 #errEngineNotFound
-errAlreadyInImagingMode = -5243 #errAlreadyInImagingMode
-errNotInImagingMode = -5242 #errNotInImagingMode
-errMarginWilllNotFit = -5241 #errMarginWilllNotFit
-errUnknownAttributeTag = -5240 #errUnknownAttributeTag
-afpSameNodeErr = -5063 #An Attempt was made to connect to a file server running on the same machine
-afpAlreadyMounted = -5062 #The volume is already mounted
-afpCantMountMoreSrvre = -5061 #The Maximum number of server connections has been reached
-afpBadDirIDType = -5060 #afpBadDirIDType
-afpCallNotAllowed = -5048 #The server knows what you wanted to do, but won't let you do it just now
-afpAlreadyLoggedInErr = -5047 #User has been authenticated but is already logged in from another machine (and that's not allowed on this server)
-afpPwdPolicyErr = -5046 #Password does not conform to servers password policy
-afpPwdNeedsChangeErr = -5045 #The password needs to be changed
-afpInsideTrashErr = -5044 #The folder being shared is inside the trash folder OR the shared folder is being moved into the trash folder
-afpInsideSharedErr = -5043 #The folder being shared is inside a shared folder OR the folder contains a shared folder and is being moved into a shared folder
-afpPwdExpiredErr = -5042 #The password being used is too old: this requires the user to change the password before log-in can continue
-afpPwdTooShortErr = -5041 #The password being set is too short: there is a minimum length that must be met or exceeded
-afpPwdSameErr = -5040 #Someone tried to change their password to the same password on a mantadory password change
-afpBadIDErr = -5039 #afpBadIDErr
-afpSameObjectErr = -5038 #afpSameObjectErr
-afpCatalogChanged = -5037 #afpCatalogChanged
-afpDiffVolErr = -5036 #afpDiffVolErr
-afpIDExists = -5035 #afpIDExists
-afpIDNotFound = -5034 #afpIDNotFound
-afpContainsSharedErr = -5033 #the folder being shared contains a shared folder
-afpObjectLocked = -5032 #Object is M/R/D/W inhibited
-afpVolLocked = -5031 #Volume is Read-Only
-afpIconTypeError = -5030 #Icon size specified different from existing icon size
-afpDirNotFound = -5029 #Unknown directory specified
-afpCantRename = -5028 #AFPRename cannot rename volume
-afpServerGoingDown = -5027 #Server is shutting down
-afpTooManyFilesOpen = -5026 #Maximum open file count reached
-afpObjectTypeErr = -5025 #File/Directory specified where Directory/File expected
-afpCallNotSupported = -5024 #Unsupported AFP call was made
-afpUserNotAuth = -5023 #No AFPLogin call has successfully been made for this session
-afpSessClosed = -5022 #Session closed
-afpRangeOverlap = -5021 #Some or all of range already locked by same user
-afpRangeNotLocked = -5020 #Tried to unlock range that was not locked by user
-afpParmErr = -5019 #A specified parameter was out of allowable range
-afpObjectNotFound = -5018 #Specified file or directory does not exist
-afpObjectExists = -5017 #Specified destination file or directory already exists
-afpNoServer = -5016 #Server not responding
-afpNoMoreLocks = -5015 #Maximum lock limit reached
-afpMiscErr = -5014 #Unexpected error encountered during execution
-afpLockErr = -5013 #Some or all of requested range is locked by another user
-afpItemNotFound = -5012 #Unknown UserName/UserID or missing comment/APPL entry
-afpFlatVol = -5011 #Cannot create directory on specified volume
-afpFileBusy = -5010 #Cannot delete an open file
-afpEofError = -5009 #Read beyond logical end-of-file
-afpDiskFull = -5008 #Insufficient free space on volume for operation
-afpDirNotEmpty = -5007 #Cannot delete non-empty directory
-afpDenyConflict = -5006 #Specified open/deny modes conflict with current open modes
-afpCantMove = -5005 #Move destination is offspring of source, or root was specified
-afpBitmapErr = -5004 #Bitmap contained bits undefined for call
-afpBadVersNum = -5003 #Unknown AFP protocol version number specified
-afpBadUAM = -5002 #Unknown user authentication method specified
-afpAuthContinue = -5001 #Further information required to complete AFPLogin call
-afpAccessDenied = -5000 #Insufficient access privileges for operation
-illegalScrapFlavorSizeErr = -4999 #illegalScrapFlavorSizeErr
-illegalScrapFlavorTypeErr = -4998 #illegalScrapFlavorTypeErr
-illegalScrapFlavorFlagsErr = -4997 #illegalScrapFlavorFlagsErr
-scrapFlavorSizeMismatchErr = -4996 #scrapFlavorSizeMismatchErr
-scrapFlavorFlagsMismatchErr = -4995 #scrapFlavorFlagsMismatchErr
-nilScrapFlavorDataErr = -4994 #nilScrapFlavorDataErr
-noScrapPromiseKeeperErr = -4993 #noScrapPromiseKeeperErr
-scrapPromiseNotKeptErr = -4992 #scrapPromiseNotKeptErr
-processStateIncorrectErr = -4991 #processStateIncorrectErr
-badScrapRefErr = -4990 #badScrapRefErr
-duplicateScrapFlavorErr = -4989 #duplicateScrapFlavorErr
-internalScrapErr = -4988 #internalScrapErr
-coreFoundationUnknownErr = -4960 #coreFoundationUnknownErr
-badRoutingSizeErr = -4276 #badRoutingSizeErr
-routingNotFoundErr = -4275 #routingNotFoundErr
-duplicateRoutingErr = -4274 #duplicateRoutingErr
-invalidFolderTypeErr = -4273 #invalidFolderTypeErr
-noMoreFolderDescErr = -4272 #noMoreFolderDescErr
-duplicateFolderDescErr = -4271 #duplicateFolderDescErr
-badFolderDescErr = -4270 #badFolderDescErr
-cmCantGamutCheckError = -4217 #Gammut checking not supported by this ColorWorld
-cmNamedColorNotFound = -4216 #NamedColor not found
-cmCantCopyModifiedV1Profile = -4215 #Illegal to copy version 1 profiles that have been modified
-cmRangeOverFlow = -4214 #Color conversion warning that some output color values over/underflowed and were clipped
-cmInvalidProfileComment = -4213 #Bad Profile comment during drawpicture
-cmNoGDevicesError = -4212 #Begin/End Matching -- no gdevices available
-cmInvalidDstMap = -4211 #Destination pix/bit map was invalid
-cmInvalidSrcMap = -4210 #Source pix/bit map was invalid
-cmInvalidColorSpace = -4209 #Profile colorspace does not match bitmap type
-cmErrIncompatibleProfile = -4208 #Other ColorSync Errors
-cmSearchError = -4207 #cmSearchError
-cmInvalidSearch = -4206 #Bad Search Handle
-cmInvalidProfileLocation = -4205 #Operation not supported for this profile location
-cmInvalidProfile = -4204 #A Profile must contain a 'cs1 ' tag to be valid
-cmFatalProfileErr = -4203 #cmFatalProfileErr
-cmCantDeleteElement = -4202 #cmCantDeleteElement
-cmIndexRangeErr = -4201 #Tag index out of range
-kNSLInitializationFailed = -4200 #UNABLE TO INITIALIZE THE MANAGER!!!!! DO NOT CONTINUE!!!!
-kNSLNotInitialized = -4199 #kNSLNotInitialized
-kNSLInsufficientSysVer = -4198 #kNSLInsufficientSysVer
-kNSLInsufficientOTVer = -4197 #kNSLInsufficientOTVer
-kNSLNoElementsInList = -4196 #kNSLNoElementsInList
-kNSLBadReferenceErr = -4195 #kNSLBadReferenceErr
-kNSLBadServiceTypeErr = -4194 #kNSLBadServiceTypeErr
-kNSLBadDataTypeErr = -4193 #kNSLBadDataTypeErr
-kNSLBadNetConnection = -4192 #kNSLBadNetConnection
-kNSLNoSupportForService = -4191 #kNSLNoSupportForService
-kNSLInvalidPluginSpec = -4190 #kNSLInvalidPluginSpec
-kNSLRequestBufferAlreadyInList = -4189 #kNSLRequestBufferAlreadyInList
-kNSLNoContextAvailable = -4188 #(ContinueLookup function ptr invalid)
-kNSLBufferTooSmallForData = -4187 #(Client buffer too small for data from plugin)
-kNSLCannotContinueLookup = -4186 #(Can't continue lookup; error or bad state)
-kNSLBadClientInfoPtr = -4185 #(nil ClientAsyncInfoPtr; no reference available)
-kNSLNullListPtr = -4184 #(client is trying to add items to a nil list)
-kNSLBadProtocolTypeErr = -4183 #(client is trying to add a null protocol type)
-kNSLPluginLoadFailed = -4182 #(manager unable to load one of the plugins)
-kNSLNoPluginsFound = -4181 #(manager didn't find any valid plugins to load)
-kNSLSearchAlreadyInProgress = -4180 #(you can only have one ongoing search per clientRef)
-kNSLNoPluginsForSearch = -4179 #(no plugins will respond to search request; bad protocol(s)?)
-kNSLNullNeighborhoodPtr = -4178 #(client passed a null neighborhood ptr)
-kNSLSomePluginsFailedToLoad = -4177 #(one or more plugins failed to load, but at least one did load; this error isn't fatal)
-kNSLErrNullPtrError = -4176 #kNSLErrNullPtrError
-kNSLNotImplementedYet = -4175 #kNSLNotImplementedYet
-kNSLUILibraryNotAvailable = -4174 #The NSL UI Library needs to be in the Extensions Folder
-kNSLNoCarbonLib = -4173 #kNSLNoCarbonLib
-kNSLBadURLSyntax = -4172 #URL contains illegal characters
-kNSLSchedulerError = -4171 #A custom thread routine encountered an error
-kNSL68kContextNotSupported = -4170 #no 68k allowed
-noHelpForItem = -4009 #noHelpForItem
-badProfileError = -4008 #badProfileError
-colorSyncNotInstalled = -4007 #colorSyncNotInstalled
-pickerCantLive = -4006 #pickerCantLive
-cantLoadPackage = -4005 #cantLoadPackage
-cantCreatePickerWindow = -4004 #cantCreatePickerWindow
-cantLoadPicker = -4003 #cantLoadPicker
-pickerResourceError = -4002 #pickerResourceError
-requiredFlagsDontMatch = -4001 #requiredFlagsDontMatch
-firstPickerError = -4000 #firstPickerError
-kOTPortLostConnection = -3285 #
-kOTUserRequestedErr = -3284 #
-kOTConfigurationChangedErr = -3283 #
-kOTBadConfigurationErr = -3282 #
-kOTPortWasEjectedErr = -3281 #
-kOTPortHasDiedErr = -3280 #
-kOTClientNotInittedErr = -3279 #
-kENOMSGErr = -3278 #
-kESRCHErr = -3277 #
-kEINPROGRESSErr = -3276 #
-kENODATAErr = -3275 #
-kENOSTRErr = -3274 #
-kECANCELErr = -3273 #
-kEBADMSGErr = -3272 #
-kENOSRErr = -3271 #
-kETIMEErr = -3270 #
-kEPROTOErr = -3269 #‚‚‚ fill out missing codes ‚‚‚
-kEHOSTUNREACHErr = -3264 #No route to host
-kEHOSTDOWNErr = -3263 #Host is down
-kECONNREFUSEDErr = -3260 #Connection refused
-kETIMEDOUTErr = -3259 #Connection timed out
-kETOOMANYREFSErr = -3258 #Too many references: can't splice
-kESHUTDOWNErr = -3257 #Can't send after socket shutdown
-kENOTCONNErr = -3256 #Socket is not connected
-kEISCONNErr = -3255 #Socket is already connected
-kENOBUFSErr = -3254 #No buffer space available
-kECONNRESETErr = -3253 #Connection reset by peer
-kECONNABORTEDErr = -3252 #Software caused connection abort
-kENETRESETErr = -3251 #Network dropped connection on reset
-kENETUNREACHErr = -3250 #Network is unreachable
-kENETDOWNErr = -3249 #Network is down
-kEADDRNOTAVAILErr = -3248 #Can't assign requested address
-kEADDRINUSEErr = -3247 #Address already in use
-kEOPNOTSUPPErr = -3244 #Operation not supported on socket
-kESOCKTNOSUPPORTErr = -3243 #Socket type not supported
-kEPROTONOSUPPORTErr = -3242 #Protocol not supported
-kENOPROTOOPTErr = -3241 #Protocol not available
-kEPROTOTYPEErr = -3240 #Protocol wrong type for socket
-kEMSGSIZEErr = -3239 #Message too long
-kEDESTADDRREQErr = -3238 #Destination address required
-kENOTSOCKErr = -3237 #Socket operation on non-socket
-kEALREADYErr = -3236 #
-kEWOULDBLOCKErr = -3234 #Call would block, so was aborted
-kERANGEErr = -3233 #Message size too large for STREAM
-kEPIPEErr = -3231 #Broken pipe
-kENOTTYErr = -3224 #Not a character device
-kEINVALErr = -3221 #Invalid argument
-kENODEVErr = -3218 #No such device
-kOTDuplicateFoundErr = -3216 #OT generic duplicate found error
-kEBUSYErr = -3215 #Device or resource busy
-kEFAULTErr = -3213 #Bad address
-kEACCESErr = -3212 #Permission denied
-kOTOutOfMemoryErr = -3211 #OT ran out of memory, may be a temporary
-kEAGAINErr = -3210 #Try operation again later
-kEBADFErr = -3208 #Bad file number
-kENXIOErr = -3205 #No such device or address
-kEIOErr = -3204 #I/O error
-kEINTRErr = -3203 #Interrupted system service
-kENORSRCErr = -3202 #No such resource
-kOTNotFoundErr = -3201 #OT generic not found error
-kEPERMErr = -3200 #Permission denied
-kOTCanceledErr = -3180 #XTI2OSStatus(TCANCELED) The command was cancelled
-kOTBadSyncErr = -3179 #XTI2OSStatus(TBADSYNC) A synchronous call at interrupt time
-kOTProtocolErr = -3178 #XTI2OSStatus(TPROTO) An unspecified provider error occurred
-kOTQFullErr = -3177 #XTI2OSStatus(TQFULL)
-kOTResAddressErr = -3176 #XTI2OSStatus(TRESADDR)
-kOTResQLenErr = -3175 #XTI2OSStatus(TRESQLEN)
-kOTProviderMismatchErr = -3174 #XTI2OSStatus(TPROVMISMATCH) Tried to accept on incompatible endpoint
-kOTIndOutErr = -3173 #XTI2OSStatus(TINDOUT) Accept failed because of pending listen
-kOTAddressBusyErr = -3172 #XTI2OSStatus(TADDRBUSY) Address requested is already in use
-kOTBadQLenErr = -3171 #XTI2OSStatus(TBADQLEN) A Bind to an in-use addr with qlen > 0
-kOTBadNameErr = -3170 #XTI2OSStatus(TBADNAME) A bad endpoint name was supplied
-kOTNoStructureTypeErr = -3169 #XTI2OSStatus(TNOSTRUCTYPE) Bad structure type requested for OTAlloc
-kOTStateChangeErr = -3168 #XTI2OSStatus(TSTATECHNG) State is changing - try again later
-kOTNotSupportedErr = -3167 #XTI2OSStatus(TNOTSUPPORT) Command is not supported
-kOTNoReleaseErr = -3166 #XTI2OSStatus(TNOREL) No orderly release indication available
-kOTBadFlagErr = -3165 #XTI2OSStatus(TBADFLAG) A Bad flag value was supplied
-kOTNoUDErrErr = -3164 #XTI2OSStatus(TNOUDERR) No Unit Data Error indication available
-kOTNoDisconnectErr = -3163 #XTI2OSStatus(TNODIS) No disconnect indication available
-kOTNoDataErr = -3162 #XTI2OSStatus(TNODATA) No data available for reading
-kOTFlowErr = -3161 #XTI2OSStatus(TFLOW) Provider is flow-controlled
-kOTBufferOverflowErr = -3160 #XTI2OSStatus(TBUFOVFLW) Passed buffer not big enough
-kOTBadDataErr = -3159 #XTI2OSStatus(TBADDATA) An illegal amount of data was specified
-kOTLookErr = -3158 #XTI2OSStatus(TLOOK) An event occurred - call Look()
-kOTSysErrorErr = -3157 #XTI2OSStatus(TSYSERR) A system error occurred
-kOTBadSequenceErr = -3156 #XTI2OSStatus(TBADSEQ) Sequence specified does not exist
-kOTOutStateErr = -3155 #XTI2OSStatus(TOUTSTATE) Call issued in wrong state
-kOTNoAddressErr = -3154 #XTI2OSStatus(TNOADDR) No address was specified
-kOTBadReferenceErr = -3153 #XTI2OSStatus(TBADF) Bad provider reference
-kOTAccessErr = -3152 #XTI2OSStatus(TACCES) Missing access permission
-kOTBadOptionErr = -3151 #XTI2OSStatus(TBADOPT) A Bad option was specified
-kOTBadAddressErr = -3150 #XTI2OSStatus(TBADADDR) A Bad address was specified
-sktClosedErr = -3109 #sktClosedErr
-recNotFnd = -3108 #recNotFnd
-atpBadRsp = -3107 #atpBadRsp
-atpLenErr = -3106 #atpLenErr
-readQErr = -3105 #readQErr
-extractErr = -3104 #extractErr
-ckSumErr = -3103 #ckSumErr
-noMPPErr = -3102 #noMPPErr
-buf2SmallErr = -3101 #buf2SmallErr
-noPrefAppErr = -3032 #noPrefAppErr
-badTranslationSpecErr = -3031 #badTranslationSpecErr
-noTranslationPathErr = -3030 #noTranslationPathErr
-couldNotParseSourceFileErr = -3026 #Source document does not contain source type
-invalidTranslationPathErr = -3025 #Source type to destination type not a valid path
-retryComponentRegistrationErr = -3005 #retryComponentRegistrationErr
-unresolvedComponentDLLErr = -3004 #unresolvedComponentDLLErr
-componentDontRegister = -3003 #componentDontRegister
-componentNotCaptured = -3002 #componentNotCaptured
-validInstancesExist = -3001 #validInstancesExist
-invalidComponentID = -3000 #invalidComponentID
-cfragLastErrCode = -2899 #The last value in the range of CFM errors.
-cfragOutputLengthErr = -2831 #An output parameter is too small to hold the value.
-cfragAbortClosureErr = -2830 #Used by notification handlers to abort a closure.
-cfragClosureIDErr = -2829 #The closure ID was not valid.
-cfragContainerIDErr = -2828 #The fragment container ID was not valid.
-cfragNoRegistrationErr = -2827 #The registration name was not found.
-cfragNotClosureErr = -2826 #The closure ID was actually a connection ID.
-cfragFileSizeErr = -2825 #A file was too large to be mapped.
-cfragFragmentUsageErr = -2824 #A semantic error in usage of the fragment.
-cfragArchitectureErr = -2823 #A fragment has an unacceptable architecture.
-cfragNoApplicationErr = -2822 #No application member found in the cfrg resource.
-cfragInitFunctionErr = -2821 #A fragment's initialization routine returned an error.
-cfragFragmentCorruptErr = -2820 #A fragment's container was corrupt (known format).
-cfragCFMInternalErr = -2819 #An internal inconstistancy has been detected.
-cfragCFMStartupErr = -2818 #Internal error during CFM initialization.
-cfragLibConnErr = -2817 #
-cfragInitAtBootErr = -2816 #A boot library has an initialization function. (System 7 only)
-cfragInitLoopErr = -2815 #Circularity in required initialization order.
-cfragImportTooNewErr = -2814 #An import library was too new for a client.
-cfragImportTooOldErr = -2813 #An import library was too old for a client.
-cfragInitOrderErr = -2812 #
-cfragNoIDsErr = -2811 #No more CFM IDs for contexts, connections, etc.
-cfragNoClientMemErr = -2810 #Out of memory for fragment mapping or section instances.
-cfragNoPrivateMemErr = -2809 #Out of memory for internal bookkeeping.
-cfragNoPositionErr = -2808 #The registration insertion point was not found.
-cfragUnresolvedErr = -2807 #A fragment had "hard" unresolved imports.
-cfragFragmentFormatErr = -2806 #A fragment's container format is unknown.
-cfragDupRegistrationErr = -2805 #The registration name was already in use.
-cfragNoLibraryErr = -2804 #The named library was not found.
-cfragNoSectionErr = -2803 #The specified section was not found.
-cfragNoSymbolErr = -2802 #The specified symbol was not found.
-cfragConnectionIDErr = -2801 #The connection ID was not valid.
-cfragFirstErrCode = -2800 #The first value in the range of CFM errors.
-errASInconsistentNames = -2780 #English errors:
-errASNoResultReturned = -2763 #The range -2780 thru -2799 is reserved for dialect specific error codes. (Error codes from different dialects may overlap.)
-errASParameterNotForEvent = -2762 #errASParameterNotForEvent
-errASIllegalFormalParameter = -2761 #errASIllegalFormalParameter
-errASTerminologyNestingTooDeep = -2760 #errASTerminologyNestingTooDeep
-OSAControlFlowError = -2755 #Signaled when illegal control flow occurs in an application (no catcher for throw, non-lexical loop exit, etc.)
-OSAInconsistentDeclarations = -2754 #Signaled when a variable is declared inconsistently in the same scope, such as both local and global
-OSAUndefinedVariable = -2753 #Signaled when a variable is accessed that has no value
-OSADuplicateHandler = -2752 #Signaled when more than one handler is defined with the same name in a scope where the language doesn't allow it
-OSADuplicateProperty = -2751 #Signaled when a formal parameter, local variable, or instance variable is specified more than once.
-OSADuplicateParameter = -2750 #Signaled when a formal parameter, local variable, or instance variable is specified more than once
-OSATokenTooLong = -2742 #Signaled when a name or number is too long to be parsed
-OSASyntaxTypeError = -2741 #Signaled when another form of syntax was expected. (e.g. "expected a <type> but found <this>")
-OSASyntaxError = -2740 #Signaled when a syntax error occurs. (e.g. "Syntax error" or "<this> can't go after <that>")
-errASCantCompareMoreThan32k = -2721 #Parser/Compiler errors:
-errASCantConsiderAndIgnore = -2720 #errASCantConsiderAndIgnore
-errOSACantCreate = -2710 #errOSACantCreate
-errOSACantGetTerminology = -2709 #errOSACantGetTerminology
-errOSADataBlockTooLarge = -2708 #Signaled when an intrinsic limitation is exceeded for the size of a value or data structure.
-errOSAInternalTableOverflow = -2707 #Signaled when a runtime internal data structure overflows
-errOSAStackOverflow = -2706 #Signaled when the runtime stack overflows
-errOSACorruptTerminology = -2705 #Signaled when an application's terminology resource is not readable
-errOSAAppNotHighLevelEventAware = -2704 #Signaled when an application can't respond to AppleEvents
-errOSACantLaunch = -2703 #Signaled when application can't be launched or when it is remote and program linking is not enabled
-errOSANumericOverflow = -2702 #Signaled when integer or real value is too large to be represented
-errOSADivideByZero = -2701 #Signaled when there is an attempt to divide by zero
-errOSAGeneralError = -2700 #Signaled by user scripts or applications when no actual error code is to be returned.
-noIconDataAvailableErr = -2582 #The necessary icon data is not available
-noSuchIconErr = -2581 #The requested icon could not be found
-invalidIconRefErr = -2580 #The icon ref is not valid
-nrCallNotSupported = -2557 #This call is not available or supported on this machine
-nrTransactionAborted = -2556 #transaction was aborted
-nrExitedIteratorScope = -2555 #outer scope of iterator was exited
-nrIterationDone = -2554 #iteration operation is done
-nrPropertyAlreadyExists = -2553 #property already exists
-nrInvalidEntryIterationOp = -2552 #invalid entry iteration operation
-nrPathBufferTooSmall = -2551 #buffer for path is too small
-nrPathNotFound = -2550 #a path component lookup failed
-nrResultCodeBase = -2549 #nrResultCodeBase
-nrOverrunErr = -2548 #nrOverrunErr
-nrNotModifiedErr = -2547 #nrNotModifiedErr
-nrTypeMismatchErr = -2546 #nrTypeMismatchErr
-nrPowerSwitchAbortErr = -2545 #nrPowerSwitchAbortErr
-nrPowerErr = -2544 #nrPowerErr
-nrDataTruncatedErr = -2543 #nrDataTruncatedErr
-nrNotSlotDeviceErr = -2542 #nrNotSlotDeviceErr
-nrNameErr = -2541 #nrNameErr
-nrNotCreatedErr = -2540 #nrNotCreatedErr
-nrNotFoundErr = -2539 #nrNotFoundErr
-nrInvalidNodeErr = -2538 #nrInvalidNodeErr
-nrNotEnoughMemoryErr = -2537 #nrNotEnoughMemoryErr
-nrLockedErr = -2536 #nrLockedErr
-mmInternalError = -2526 #mmInternalError
-tsmDefaultIsNotInputMethodErr = -2524 #Current Input source is KCHR or uchr, not Input Method (GetDefaultInputMethod)
-tsmNoStem = -2523 #No stem exists for the token
-tsmNoMoreTokens = -2522 #No more tokens are available for the source text
-tsmNoHandler = -2521 #No Callback Handler exists for callback
-tsmInvalidContext = -2520 #Invalid TSMContext specified in call
-tsmUnknownErr = -2519 #any other errors
-tsmUnsupportedTypeErr = -2518 #unSupported interface type error
-tsmScriptHasNoIMErr = -2517 #script has no imput method or is using old IM
-tsmInputMethodIsOldErr = -2516 #returned by GetDefaultInputMethod
-tsmComponentAlreadyOpenErr = -2515 #text service already opened for the document
-tsmTSNotOpenErr = -2514 #text service is not open
-tsmTSHasNoMenuErr = -2513 #the text service has no menu
-tsmUseInputWindowErr = -2512 #not TSM aware because we are using input window
-tsmDocumentOpenErr = -2511 #there are open documents
-tsmTextServiceNotFoundErr = -2510 #no text service found
-tsmCantOpenComponentErr = -2509 #canÕt open the component
-tsmNoOpenTSErr = -2508 #no open text service
-tsmDocNotActiveErr = -2507 #document is NOT active
-tsmTSMDocBusyErr = -2506 #document is still active
-tsmInvalidDocIDErr = -2505 #invalid TSM documentation id
-tsmNeverRegisteredErr = -2504 #app never registered error (not TSM aware)
-tsmAlreadyRegisteredErr = -2503 #want to register again error
-tsmNotAnAppErr = -2502 #not an application error
-tsmInputMethodNotFoundErr = -2501 #tsmInputMethodNotFoundErr
-tsmUnsupScriptLanguageErr = -2500 #tsmUnsupScriptLanguageErr
-kernelUnrecoverableErr = -2499 #kernelUnrecoverableErr
-kernelReturnValueErr = -2422 #kernelReturnValueErr
-kernelAlreadyFreeErr = -2421 #kernelAlreadyFreeErr
-kernelIDErr = -2419 #kernelIDErr
-kernelExceptionErr = -2418 #kernelExceptionErr
-kernelTerminatedErr = -2417 #kernelTerminatedErr
-kernelInUseErr = -2416 #kernelInUseErr
-kernelTimeoutErr = -2415 #kernelTimeoutErr
-kernelAsyncReceiveLimitErr = -2414 #kernelAsyncReceiveLimitErr
-kernelAsyncSendLimitErr = -2413 #kernelAsyncSendLimitErr
-kernelAttributeErr = -2412 #kernelAttributeErr
-kernelExecutionLevelErr = -2411 #kernelExecutionLevelErr
-kernelDeletePermissionErr = -2410 #kernelDeletePermissionErr
-kernelExecutePermissionErr = -2409 #kernelExecutePermissionErr
-kernelReadPermissionErr = -2408 #kernelReadPermissionErr
-kernelWritePermissionErr = -2407 #kernelWritePermissionErr
-kernelObjectExistsErr = -2406 #kernelObjectExistsErr
-kernelUnsupportedErr = -2405 #kernelUnsupportedErr
-kernelPrivilegeErr = -2404 #kernelPrivilegeErr
-kernelOptionsErr = -2403 #kernelOptionsErr
-kernelCanceledErr = -2402 #kernelCanceledErr
-kernelIncompleteErr = -2401 #kernelIncompleteErr
-badCallOrderErr = -2209 #Usually due to a status call being called prior to being setup first
-noDMAErr = -2208 #CanÕt do DMA digitizing (i.e. can't go to requested dest
-badDepthErr = -2207 #CanÕt digitize into this depth
-notExactSizeErr = -2206 #CanÕt do exact size requested
-noMoreKeyColorsErr = -2205 #all key indexes in use
-notExactMatrixErr = -2204 #warning of bad matrix, digitizer did its best
-matrixErr = -2203 #bad matrix, digitizer did nothing
-qtParamErr = -2202 #bad input parameter (out of range, etc)
-digiUnimpErr = -2201 #feature unimplemented
-qtXMLApplicationErr = -2159 #qtXMLApplicationErr
-qtXMLParseErr = -2158 #qtXMLParseErr
-qtActionNotHandledErr = -2157 #qtActionNotHandledErr
-notEnoughDataErr = -2149 #notEnoughDataErr
-urlDataHFTPURLErr = -2148 #urlDataHFTPURLErr
-urlDataHFTPServerDisconnectedErr = -2147 #urlDataHFTPServerDisconnectedErr
-urlDataHFTPNoPasswordErr = -2146 #urlDataHFTPNoPasswordErr
-urlDataHFTPNeedPasswordErr = -2145 #urlDataHFTPNeedPasswordErr
-urlDataHFTPBadNameListErr = -2144 #urlDataHFTPBadNameListErr
-urlDataHFTPNoNetDriverErr = -2143 #urlDataHFTPNoNetDriverErr
-urlDataHFTPFilenameErr = -2142 #urlDataHFTPFilenameErr
-urlDataHFTPPermissionsErr = -2141 #urlDataHFTPPermissionsErr
-urlDataHFTPQuotaErr = -2140 #urlDataHFTPQuotaErr
-urlDataHFTPNoDirectoryErr = -2139 #urlDataHFTPNoDirectoryErr
-urlDataHFTPDataConnectionErr = -2138 #urlDataHFTPDataConnectionErr
-urlDataHFTPServerErr = -2137 #urlDataHFTPServerErr
-urlDataHFTPBadPasswordErr = -2136 #urlDataHFTPBadPasswordErr
-urlDataHFTPBadUserErr = -2135 #urlDataHFTPBadUserErr
-urlDataHFTPShutdownErr = -2134 #urlDataHFTPShutdownErr
-urlDataHFTPProtocolErr = -2133 #urlDataHFTPProtocolErr
-urlDataHHTTPRedirectErr = -2132 #urlDataHHTTPRedirectErr
-urlDataHHTTPURLErr = -2131 #urlDataHHTTPURLErr
-urlDataHHTTPNoNetDriverErr = -2130 #urlDataHHTTPNoNetDriverErr
-urlDataHHTTPProtocolErr = -2129 #urlDataHHTTPProtocolErr
-qtNetworkAlreadyAllocatedErr = -2127 #qtNetworkAlreadyAllocatedErr
-notAllowedToSaveMovieErr = -2126 #notAllowedToSaveMovieErr
-fileOffsetTooBigErr = -2125 #fileOffsetTooBigErr
-ASDEntryNotFoundErr = -2124 #ASDEntryNotFoundErr
-ASDBadForkErr = -2123 #ASDBadForkErr
-ASDBadHeaderErr = -2122 #ASDBadHeaderErr
-AAPNotFoundErr = -2121 #AAPNotFoundErr
-AAPNotCreatedErr = -2120 #AAPNotCreatedErr
-qfcbNotCreatedErr = -2119 #qfcbNotCreatedErr
-qfcbNotFoundErr = -2118 #qfcbNotFoundErr
-wackBadMetaDataErr = -2117 #wackBadMetaDataErr
-wackForkNotFoundErr = -2116 #wackForkNotFoundErr
-wackBadFileErr = -2115 #wackBadFileErr
-unknownFormatErr = -2114 #unknownFormatErr
-pathNotVerifiedErr = -2113 #pathNotVerifiedErr
-noPathMappingErr = -2112 #noPathMappingErr
-emptyPathErr = -2111 #emptyPathErr
-pathTooLongErr = -2110 #pathTooLongErr
-cannotBeLeafAtomErr = -2109 #cannotBeLeafAtomErr
-invalidAtomTypeErr = -2108 #invalidAtomTypeErr
-invalidAtomContainerErr = -2107 #invalidAtomContainerErr
-invalidAtomErr = -2106 #invalidAtomErr
-duplicateAtomTypeAndIDErr = -2105 #duplicateAtomTypeAndIDErr
-atomIndexInvalidErr = -2104 #atomIndexInvalidErr
-atomsNotOfSameTypeErr = -2103 #atomsNotOfSameTypeErr
-notLeafAtomErr = -2102 #notLeafAtomErr
-cannotFindAtomErr = -2101 #cannotFindAtomErr
-unsupportedProcessorErr = -2097 #unsupportedProcessorErr
-unsupportedOSErr = -2096 #unsupportedOSErr
-qtmlUninitialized = -2095 #qtmlUninitialized
-qtmlDllEntryNotFoundErr = -2094 #Windows specific errors (when qtml is loading)
-qtmlDllLoadErr = -2093 #Windows specific errors (when qtml is loading)
-componentDllEntryNotFoundErr = -2092 #Windows specific errors (when component is loading)
-componentDllLoadErr = -2091 #Windows specific errors (when component is loading)
-videoOutputInUseErr = -2090 #videoOutputInUseErr
-noExportProcAvailableErr = -2089 #noExportProcAvailableErr
-tuneParseOSErr = -2087 #tuneParseOSErr
-tunePlayerFullOSErr = -2086 #tunePlayerFullOSErr
-noteChannelNotAllocatedOSErr = -2085 #noteChannelNotAllocatedOSErr
-illegalNoteChannelOSErr = -2084 #illegalNoteChannelOSErr
-synthesizerOSErr = -2083 #synthesizerOSErr
-synthesizerNotRespondingOSErr = -2082 #synthesizerNotRespondingOSErr
-midiManagerAbsentOSErr = -2081 #midiManagerAbsentOSErr
-illegalControllerOSErr = -2080 #illegalControllerOSErr
-illegalInstrumentOSErr = -2079 #illegalInstrumentOSErr
-illegalKnobValueOSErr = -2078 #illegalKnobValueOSErr
-illegalKnobOSErr = -2077 #illegalKnobOSErr
-illegalChannelOSErr = -2076 #illegalChannelOSErr
-illegalPartOSErr = -2075 #illegalPartOSErr
-illegalVoiceAllocationOSErr = -2074 #illegalVoiceAllocationOSErr
-cantReceiveFromSynthesizerOSErr = -2073 #cantReceiveFromSynthesizerOSErr
-cantSendToSynthesizerOSErr = -2072 #cantSendToSynthesizerOSErr
-notImplementedMusicOSErr = -2071 #notImplementedMusicOSErr
-internalComponentErr = -2070 #internalComponentErr
-invalidSpriteIDErr = -2069 #invalidSpriteIDErr
-invalidImageIndexErr = -2068 #invalidImageIndexErr
-invalidSpriteIndexErr = -2067 #invalidSpriteIndexErr
-gWorldsNotSameDepthAndSizeErr = -2066 #gWorldsNotSameDepthAndSizeErr
-invalidSpritePropertyErr = -2065 #invalidSpritePropertyErr
-invalidSpriteWorldPropertyErr = -2064 #invalidSpriteWorldPropertyErr
-missingRequiredParameterErr = -2063 #missingRequiredParameterErr
-movieTextNotFoundErr = -2062 #movieTextNotFoundErr
-sourceNotFoundErr = -2061 #sourceNotFoundErr
-noSourceTreeFoundErr = -2060 #noSourceTreeFoundErr
-samplesAlreadyInMediaErr = -2059 #samplesAlreadyInMediaErr
-auxiliaryExportDataUnavailable = -2058 #auxiliaryExportDataUnavailable
-unsupportedAuxiliaryImportData = -2057 #unsupportedAuxiliaryImportData
-soundSupportNotAvailableErr = -2056 #QT for Windows error
-noSoundTrackInMovieErr = -2055 #QT for Windows error
-noVideoTrackInMovieErr = -2054 #QT for Windows error
-featureUnsupported = -2053 #featureUnsupported
-couldNotUseAnExistingSample = -2052 #couldNotUseAnExistingSample
-noDefaultDataRef = -2051 #noDefaultDataRef
-badDataRefIndex = -2050 #badDataRefIndex
-invalidDataRefContainer = -2049 #invalidDataRefContainer
-noMovieFound = -2048 #noMovieFound
-dataNoDataRef = -2047 #dataNoDataRef
-endOfDataReached = -2046 #endOfDataReached
-dataAlreadyClosed = -2045 #dataAlreadyClosed
-dataAlreadyOpenForWrite = -2044 #dataAlreadyOpenForWrite
-dataNotOpenForWrite = -2043 #dataNotOpenForWrite
-dataNotOpenForRead = -2042 #dataNotOpenForRead
-invalidSampleDescription = -2041 #invalidSampleDescription
-invalidChunkCache = -2040 #invalidChunkCache
-invalidSampleDescIndex = -2039 #invalidSampleDescIndex
-invalidChunkNum = -2038 #invalidChunkNum
-invalidSampleNum = -2037 #invalidSampleNum
-invalidRect = -2036 #invalidRect
-cantEnableTrack = -2035 #cantEnableTrack
-internalQuickTimeError = -2034 #internalQuickTimeError
-badEditIndex = -2033 #badEditIndex
-timeNotInMedia = -2032 #timeNotInMedia
-timeNotInTrack = -2031 #timeNotInTrack
-trackNotInMovie = -2030 #trackNotInMovie
-trackIDNotFound = -2029 #trackIDNotFound
-badTrackIndex = -2028 #badTrackIndex
-maxSizeToGrowTooSmall = -2027 #maxSizeToGrowTooSmall
-userDataItemNotFound = -2026 #userDataItemNotFound
-staleEditState = -2025 #staleEditState
-nonMatchingEditState = -2024 #nonMatchingEditState
-invalidEditState = -2023 #invalidEditState
-cantCreateSingleForkFile = -2022 #happens when file already exists
-wfFileNotFound = -2021 #wfFileNotFound
-movieToolboxUninitialized = -2020 #movieToolboxUninitialized
-progressProcAborted = -2019 #progressProcAborted
-mediaTypesDontMatch = -2018 #mediaTypesDontMatch
-badEditList = -2017 #badEditList
-cantPutPublicMovieAtom = -2016 #cantPutPublicMovieAtom
-invalidTime = -2015 #invalidTime
-invalidDuration = -2014 #invalidDuration
-invalidHandler = -2013 #invalidHandler
-invalidDataRef = -2012 #invalidDataRef
-invalidSampleTable = -2011 #invalidSampleTable
-invalidMovie = -2010 #invalidMovie
-invalidTrack = -2009 #invalidTrack
-invalidMedia = -2008 #invalidMedia
-noDataHandler = -2007 #noDataHandler
-noMediaHandler = -2006 #noMediaHandler
-badComponentType = -2005 #badComponentType
-cantOpenHandler = -2004 #cantOpenHandler
-cantFindHandler = -2003 #cantFindHandler
-badPublicMovieAtom = -2002 #badPublicMovieAtom
-badImageDescription = -2001 #badImageDescription
-couldNotResolveDataRef = -2000 #couldNotResolveDataRef
-nonDragOriginatorErr = -1862 #illegal attempt at originator only data
-badImageErr = -1861 #bad translucent image PixMap
-badImageRgnErr = -1860 #bad translucent image region
-noSuitableDisplaysErr = -1859 #no displays support translucency
-unsupportedForPlatformErr = -1858 #call is for PowerPC only
-dragNotAcceptedErr = -1857 #drag was not accepted by receiver
-handlerNotFoundErr = -1856 #handler not found
-duplicateHandlerErr = -1855 #handler already exists
-cantGetFlavorErr = -1854 #error while trying to get flavor data
-duplicateFlavorErr = -1853 #flavor type already exists
-badDragFlavorErr = -1852 #unknown flavor type
-badDragItemErr = -1851 #unknown drag item reference
-badDragRefErr = -1850 #unknown drag reference
-errEndOfBody = -1813 #errEndOfBody
-errEndOfDocument = -1812 #errEndOfDocument
-errTopOfBody = -1811 #errTopOfBody
-errTopOfDocument = -1810 #errTopOfDocument
-errOffsetIsOutsideOfView = -1801 #errOffsetIsOutsideOfView
-errOffsetInvalid = -1800 #errOffsetInvalid
-errOSACantOpenComponent = -1762 #Can't connect to scripting system with that ID
-errOSAComponentMismatch = -1761 #Parameters are from 2 different components
-errOSADataFormatTooNew = -1759 #errOSADataFormatTooNew
-errOSADataFormatObsolete = -1758 #errOSADataFormatObsolete
-errOSANoSuchDialect = -1757 #errOSANoSuchDialect
-errOSASourceNotAvailable = -1756 #errOSASourceNotAvailable
-errOSABadSelector = -1754 #errOSABadSelector
-errOSAScriptError = -1753 #errOSAScriptError
-errOSABadStorageType = -1752 #errOSABadStorageType
-errOSAInvalidID = -1751 #errOSAInvalidID
-errOSASystemError = -1750 #errOSASystemError
-errAEBufferTooSmall = -1741 #buffer for AEFlattenDesc too small
-errAEBuildSyntaxError = -1740 #AEBuildDesc and friends detected a syntax error
-errAEDescIsNull = -1739 #attempting to perform an invalid operation on a null descriptor
-errAEStreamAlreadyConverted = -1738 #attempt to convert a stream that has already been converted
-errAEStreamBadNesting = -1737 #nesting violation while streaming
-errAEDuplicateHandler = -1736 #attempt to install handler in table for identical class and id (1.1 or greater)
-errAEEventFiltered = -1735 #event has been filtered, and should not be propogated (1.1 or greater)
-errAEReceiveEscapeCurrent = -1734 #break out of only lowest level of AEReceive (1.1 or greater)
-errAEReceiveTerminate = -1733 #break out of all levels of AEReceive to the topmost (1.1 or greater)
-errAERecordingIsAlreadyOn = -1732 #available only in version 1.0.1 or greater
-errAEUnknownObjectType = -1731 #available only in version 1.0.1 or greater
-errAEEmptyListContainer = -1730 #Attempt to pass empty list as container to accessor
-errAENegativeCount = -1729 #CountProc returned negative value
-errAENoSuchObject = -1728 #e.g.,: specifier asked for the 3rd, but there are only 2. Basically, this indicates a run-time resolution error.
-errAENotAnObjSpec = -1727 #Param to AEResolve not of type 'obj '
-errAEBadTestKey = -1726 #Test is neither typeLogicalDescriptor nor typeCompDescriptor
-errAENoSuchLogical = -1725 #Something other than AND, OR, or NOT
-errAEAccessorNotFound = -1723 #Accessor proc matching wantClass and containerType or wildcards not found
-errAEWrongNumberArgs = -1721 #Logical op kAENOT used with other than 1 term
-errAEImpossibleRange = -1720 #A range like 3rd to 2nd, or 1st to all.
-errAEIllegalIndex = -1719 #index is out of range in a put operation
-errAEReplyNotArrived = -1718 #the contents of the reply you are accessing have not arrived yet
-errAEHandlerNotFound = -1717 #no handler in the dispatch tables fits the parameters to AEGetEventHandler or AEGetCoercionHandler
-errAEUnknownAddressType = -1716 #the target address type is not known
-errAEParamMissed = -1715 #a required parameter was not accessed
-errAENotASpecialFunction = -1714 #there is no special function for/with this keyword
-errAENoUserInteraction = -1713 #no user interaction is allowed
-errAETimeout = -1712 #the AppleEvent timed out
-errAEWaitCanceled = -1711 #in AESend, the user cancelled out of wait loop for reply or receipt
-errAEUnknownSendMode = -1710 #mode wasn't NoReply, WaitReply, or QueueReply or Interaction level is unknown
-errAEReplyNotValid = -1709 #AEResetTimer was passed an invalid reply parameter
-errAEEventNotHandled = -1708 #the AppleEvent was not handled by any handler
-errAENotAppleEvent = -1707 #the event is not in AppleEvent format
-errAENewerVersion = -1706 #need newer version of the AppleEvent manager
-errAEBadListItem = -1705 #the specified list item does not exist
-errAENotAEDesc = -1704 #errAENotAEDesc
-errAEWrongDataType = -1703 #errAEWrongDataType
-errAECorruptData = -1702 #errAECorruptData
-errAEDescNotFound = -1701 #errAEDescNotFound
-errAECoercionFail = -1700 #bad parameter data or unable to coerce the data supplied
-errFSIteratorNotSupported = -1424 #The iterator's flags or container are not supported by this call
-errFSIteratorNotFound = -1423 #Passed FSIterator is not an open iterator
-errFSBadIteratorFlags = -1422 #Flags passed to FSOpenIterator are bad
-errFSForkExists = -1421 #Named fork already exists.
-errFSRefsDifferent = -1420 #FSCompareFSRefs; refs are for different objects
-errFSBadSearchParams = -1419 #Something wrong with CatalogSearch searchParams
-errFSBadItemCount = -1418 #maximumItems was zero
-errFSNoMoreItems = -1417 #Iteration ran out of items to return
-errFSBadAllocFlags = -1413 #Invalid bits set in allocationFlags
-errFSBadPosMode = -1412 #Newline bits set in positionMode
-errFSMissingName = -1411 #A Unicode name parameter was NULL or nameLength parameter was zero
-errFSNameTooLong = -1410 #File/fork name is too long to create/rename
-errFSForkNotFound = -1409 #Named fork does not exist
-errFSNotAFolder = -1407 #Expected a folder, got a file
-errFSMissingCatInfo = -1406 #A CatalogInfo parameter was NULL
-errFSBadInfoBitmap = -1405 #A CatalogInfoBitmap or VolumeInfoBitmap has reserved or invalid bits set
-errFSBadForkRef = -1404 #A ForkRefNum parameter was bad
-errFSBadBuffer = -1403 #A buffer parameter was bad
-errFSBadForkName = -1402 #Fork name parameter is bad
-errFSBadFSRef = -1401 #FSRef parameter is bad
-errFSUnknownCall = -1400 #selector is not recognized by this filesystem
-badFCBErr = -1327 #FCBRecPtr is not valid
-volVMBusyErr = -1311 #can't eject because volume is in use by VM
-fsDataTooBigErr = -1310 #file or volume is too big for system
-fileBoundsErr = -1309 #file's EOF, offset, mark or size is too big
-notARemountErr = -1308 #when _Mount allows only remounts and doesn't get one
-badFidErr = -1307 #file id is dangling or doesn't match with the file number
-sameFileErr = -1306 #can't exchange a file with itself
-desktopDamagedErr = -1305 #desktop database files are corrupted
-catChangedErr = -1304 #the catalog has been modified
-diffVolErr = -1303 #files on different volumes
-notAFileErr = -1302 #directory specified
-fidExists = -1301 #file id already exists
-fidNotFound = -1300 #no file thread exists.
-errRefNum = -1280 #bad connection refNum
-errAborted = -1279 #control call was aborted
-errState = -1278 #bad connection state for this operation
-errOpening = -1277 #open connection request failed
-errAttention = -1276 #attention message too long
-errFwdReset = -1275 #read terminated by forward reset
-errDSPQueueSize = -1274 #DSP Read/Write Queue Too small
-errOpenDenied = -1273 #open connection request was denied
-reqAborted = -1105 #reqAborted
-noDataArea = -1104 #noDataArea
-noSendResp = -1103 #noSendResp
-cbNotFound = -1102 #cbNotFound
-noRelErr = -1101 #noRelErr
-badBuffNum = -1100 #badBuffNum
-badATPSkt = -1099 #badATPSkt
-tooManySkts = -1098 #tooManySkts
-tooManyReqs = -1097 #tooManyReqs
-reqFailed = -1096 #reqFailed
-aspNoAck = -1075 #No ack on attention request (server err)
-aspTooMany = -1074 #Too many clients (server error)
-aspSizeErr = -1073 #Command block too big
-aspSessClosed = -1072 #Session closed
-aspServerBusy = -1071 #Server cannot open another session
-aspParamErr = -1070 #Parameter error
-aspNoServers = -1069 #No servers at that address
-aspNoMoreSess = -1068 #No more sessions on server
-aspBufTooSmall = -1067 #Buffer too small
-aspBadVersNum = -1066 #Server cannot support this ASP version
-nbpNISErr = -1029 #Error trying to open the NIS
-nbpNotFound = -1028 #Name not found on remove
-nbpDuplicate = -1027 #Duplicate name exists already
-nbpConfDiff = -1026 #Name confirmed at different socket
-nbpNoConfirm = -1025 #nbpNoConfirm
-nbpBuffOvr = -1024 #Buffer overflow in LookupName
-noMaskFoundErr = -1000 #Icon Utilties Error
-kFMFontContainerAccessErr = -985 #kFMFontContainerAccessErr
-kFMFontTableAccessErr = -984 #kFMFontTableAccessErr
-kFMIterationScopeModifiedErr = -983 #kFMIterationScopeModifiedErr
-kFMInvalidFontErr = -982 #kFMInvalidFontErr
-kFMInvalidFontFamilyErr = -981 #kFMInvalidFontFamilyErr
-kFMIterationCompleted = -980 #kFMIterationCompleted
-guestNotAllowedErr = -932 #destination port requires authentication
-badLocNameErr = -931 #location name malformed
-badServiceMethodErr = -930 #illegal service type, or not supported
-noUserRecErr = -928 #Invalid user reference number
-authFailErr = -927 #unable to authenticate user at destination
-noInformErr = -926 #PPCStart failed because destination did not have inform pending
-networkErr = -925 #An error has occurred in the network, not too likely
-noUserRefErr = -924 #unable to create a new userRefNum
-notLoggedInErr = -923 #The default userRefNum does not yet exist
-noDefaultUserErr = -922 #user hasn't typed in owners name in Network Setup Control Pannel
-badPortNameErr = -919 #PPCPortRec malformed
-sessClosedErr = -917 #session was closed
-portClosedErr = -916 #port was closed
-noResponseErr = -915 #unable to contact destination
-noToolboxNameErr = -914 #A system resource is missing, not too likely
-noMachineNameErr = -913 #user hasn't named his Macintosh in the Network Setup Control Panel
-userRejectErr = -912 #Destination rejected the session request
-noUserNameErr = -911 #user name unknown on destination machine
-portNameExistsErr = -910 #port is already open (perhaps in another app)
-badReqErr = -909 #bad parameter or invalid state for operation
-noSessionErr = -908 #Invalid session reference number
-sessTableErr = -907 #Out of session tables, try again later
-destPortErr = -906 #Port does not exist at destination
-localOnlyErr = -905 #Network activity is currently disabled
-noGlobalsErr = -904 #The system is hosed, better re-boot
-noPortErr = -903 #Unable to open port or bad portRefNum. If you're calling
-nameTypeErr = -902 #Invalid or inappropriate locationKindSelector in locationName
-notInitErr = -900 #PPCToolBox not initialized
-notAppropriateForClassic = -877 #This application won't or shouldn't run on Classic (Problem 2481058).
-appVersionTooOld = -876 #The application's creator and version are incompatible with the current version of Mac OS.
-wrongApplicationPlatform = -875 #The application could not launch because the required platform is not available
-hmCloseViewActive = -863 #Returned from HMRemoveBalloon if CloseView was active
-hmNoBalloonUp = -862 #Returned from HMRemoveBalloon if no balloon was visible when call was made
-hmOperationUnsupported = -861 #Returned from HMShowBalloon call if bad method passed to routine
-hmUnknownHelpType = -859 #Returned if help msg record contained a bad type
-hmWrongVersion = -858 #Returned if help mgr resource was the wrong version
-hmSkippedBalloon = -857 #Returned from calls if helpmsg specified a skip balloon
-hmHelpManagerNotInited = -855 #Returned from HMGetHelpMenuHandle if help menu not setup
-hmSameAsLastBalloon = -854 #Returned from HMShowMenuBalloon if menu & item is same as last time
-hmBalloonAborted = -853 #Returned if mouse was moving or mouse wasn't in window port rect
-hmHelpDisabled = -850 #Show Balloons mode was off, call to routine ignored
-rcDBPackNotInited = -813 #attempt to call other routine before InitDBPack
-rcDBWrongVersion = -812 #incompatible versions
-rcDBNoHandler = -811 #no app handler for specified data type
-rcDBBadAsyncPB = -810 #tried to kill a bad pb
-rcDBAsyncNotSupp = -809 #ddev does not support async calls
-rcDBBadDDEV = -808 #bad ddev specified on DBInit
-rcDBBadSessNum = -807 #bad session number for DBGetConnInfo
-rcDBBadSessID = -806 #rcDBBadSessID
-rcDBExec = -805 #rcDBExec
-rcDBBreak = -804 #rcDBBreak
-rcDBBadType = -803 #rcDBBadType
-rcDBError = -802 #rcDBError
-rcDBValue = -801 #rcDBValue
-rcDBNull = -800 #rcDBNull
-icTooManyProfilesErr = -677 #too many profiles in database
-icProfileNotFoundErr = -676 #profile not found
-icConfigInappropriateErr = -675 #incorrect manufacturer code
-icConfigNotFoundErr = -674 #no internet configuration was found
-icNoURLErr = -673 #no URL found
-icNothingToOverrideErr = -672 #no component for the override component to capture
-icNoMoreWritersErr = -671 #you cannot begin a write session because someone else is already doing it
-icTruncatedErr = -670 #more data was present than was returned
-icInternalErr = -669 #Internet Config internal error
-icPrefDataErr = -668 #problem with preference data
-icPermErr = -667 #cannot set preference
-icPrefNotFoundErr = -666 #Internet preference not found
-vmInvalidOwningProcessErr = -648 #current process does not own the BackingFileID or FileViewID
-vmAddressNotInFileViewErr = -647 #address is not in a FileView
-vmNoMoreFileViewsErr = -646 #no more FileViews were found
-vmFileViewAccessErr = -645 #requested FileViewAccess cannot be obtained
-vmInvalidFileViewIDErr = -644 #invalid FileViewID
-vmNoMoreBackingFilesErr = -643 #no more BackingFiles were found
-vmBusyBackingFileErr = -642 #open views found on BackingFile
-vmMappingPrivilegesErr = -641 #requested MappingPrivileges cannot be obtained
-vmInvalidBackingFileIDErr = -640 #invalid BackingFileID
-noMMUErr = -626 #no MMU present
-cannotDeferErr = -625 #unable to defer additional functions
-interruptsMaskedErr = -624 #donÕt call with interrupts masked
-notLockedErr = -623 #specified range of memory is not locked
-cannotMakeContiguousErr = -622 #cannot make specified range contiguous
-notHeldErr = -621 #specified range of memory is not held
-notEnoughMemoryErr = -620 #insufficient physical memory
-threadProtocolErr = -619 #threadProtocolErr
-threadNotFoundErr = -618 #threadNotFoundErr
-threadTooManyReqsErr = -617 #threadTooManyReqsErr
-noUserInteractionAllowed = -610 #no user interaction allowed
-connectionInvalid = -609 #connectionInvalid
-noOutstandingHLE = -608 #noOutstandingHLE
-bufferIsSmall = -607 #error returns from Post and Accept
-appIsDaemon = -606 #app is BG-only, and launch flags disallow this
-appMemFullErr = -605 #application SIZE not big enough for launch
-hardwareConfigErr = -604 #hardware configuration not correct for call
-protocolErr = -603 #app made module calls in improper order
-appModeErr = -602 #memory mode is 32-bit, but app not 32-bit clean
-memFragErr = -601 #not enough room to launch app w/special requirements
-procNotFound = -600 #no eligible process with specified descriptor
-driverHardwareGoneErr = -503 #disk driver's hardware was disconnected
-hwParamErr = -502 #bad selector for _HWPriv
-teScrapSizeErr = -501 #scrap item too big for text edit record
-rgnTooBigErr = -500 #rgnTooBigErr
-exUserBreak = -492 #user debugger break; execute debugger commands on stack
-strUserBreak = -491 #user debugger break; display string on stack
-userBreak = -490 #user debugger break
-notThePublisherWrn = -463 #not the first registered publisher for that container
-containerAlreadyOpenWrn = -462 #container already opened by this section
-containerNotFoundWrn = -461 #could not find editionContainer at this time
-multiplePublisherWrn = -460 #A Publisher is already registered for that container
-badSubPartErr = -454 #can not use sub parts in this release
-badEditionFileErr = -453 #edition file is corrupt
-notRegisteredSectionErr = -452 #not a registered SectionRecord
-badSectionErr = -451 #not a valid SectionRecord
-editionMgrInitErr = -450 #edition manager not inited by this app
-fsmUnknownFSMMessageErr = -438 #unknown message passed to FSM
-fsmNoAlternateStackErr = -437 #no alternate stack for HFS CI
-fsmBadFSDVersionErr = -436 #FSM version incompatible with FSD
-fsmDuplicateFSIDErr = -435 #FSID already exists on InstallFS
-fsmBadFSDLenErr = -434 #FSD size incompatible with current FSM vers
-fsmBadFFSNameErr = -433 #Name length not 1 <= length <= 31
-fsmBusyFFSErr = -432 #File system is busy, cannot be removed
-fsmFFSNotFoundErr = -431 #Foreign File system does not exist - new Pack2 could return this error too
-btKeyAttrErr = -417 #There is no such a key attribute.
-btKeyLenErr = -416 #Maximum key length is too long or equal to zero.
-btRecNotFnd = -415 #Record cannot be found.
-btDupRecErr = -414 #Record already exists.
-btNoSpace = -413 #Can't allocate disk space.
-notBTree = -410 #The file is not a dictionary.
-gcrOnMFMErr = -400 #gcr format on high density media error
-slotNumErr = -360 #invalid slot # error
-smRecNotFnd = -351 #Record not found in the SRT.
-smSRTOvrFlErr = -350 #SRT over flow.
-smNoGoodOpens = -349 #No opens were successfull in the loop.
-smOffsetErr = -348 #Offset was too big (temporary error
-smByteLanesErr = -347 #NumByteLanes was determined to be zero.
-smBadsPtrErr = -346 #Bad pointer was passed to sCalcsPointer
-smsGetDrvrErr = -345 #Error occurred during _sGetDriver.
-smNoMoresRsrcs = -344 #No more sResources
-smDisDrvrNamErr = -343 #Error occurred during _sDisDrvrName.
-smGetDrvrNamErr = -342 #Error occurred during _sGetDrvrName.
-smCkStatusErr = -341 #Status of slot = fail.
-smBlkMoveErr = -340 #_BlockMove error
-smNewPErr = -339 #_NewPtr error
-smSelOOBErr = -338 #Selector out of bounds error
-smSlotOOBErr = -337 #Slot out of bounds error
-smNilsBlockErr = -336 #Nil sBlock error (Dont allocate and try to use a nil sBlock)
-smsPointerNil = -335 #LPointer is nil From sOffsetData. If this error occurs; check sInfo rec for more information.
-smCPUErr = -334 #Code revision is wrong
-smCodeRevErr = -333 #Code revision is wrong
-smReservedErr = -332 #Reserved field not zero
-smBadsList = -331 #Bad sList: Id1 < Id2 < Id3 ...format is not followed.
-smBadRefId = -330 #Reference Id not found in List
-smBusErrTO = -320 #BusError time out.
-smBadBoardId = -319 #BoardId was wrong; re-init the PRAM record.
-smReservedSlot = -318 #slot is reserved, VM should not use this address space.
-smInitTblVErr = -317 #An error occurred while trying to initialize the Slot Resource Table.
-smInitStatVErr = -316 #The InitStatusV field was negative after primary or secondary init.
-smNoBoardId = -315 #No Board Id.
-smGetPRErr = -314 #Error occurred during _sGetPRAMRec (See SIMStatus).
-smNoBoardSRsrc = -313 #No Board sResource.
-smDisposePErr = -312 #_DisposePointer error
-smFHBlkDispErr = -311 #Error occurred during _sDisposePtr (Dispose of FHeader block).
-smFHBlockRdErr = -310 #Error occurred during _sGetFHeader.
-smBLFieldBad = -309 #ByteLanes field was bad.
-smUnExBusErr = -308 #Unexpected BusError
-smResrvErr = -307 #Fatal reserved error. Resreved field <> 0.
-smNosInfoArray = -306 #No sInfoArray. Memory Mgr error.
-smDisabledSlot = -305 #This slot is disabled (-305 use to be smLWTstBad)
-smNoDir = -304 #Directory offset is Nil
-smRevisionErr = -303 #Wrong revison level
-smFormatErr = -302 #FHeader Format is not Apple's
-smCRCFail = -301 #CRC check failed for declaration data
-smEmptySlot = -300 #No card in slot
-nmTypErr = -299 #Notification Manager:wrong queue type
-smPriInitErr = -293 #Error; Cards could not be initialized.
-smPRAMInitErr = -292 #Error; Slot Resource Table could not be initialized.
-smSRTInitErr = -291 #Error; Slot Resource Table could not be initialized.
-smSDMInitErr = -290 #Error; SDM could not be initialized.
-midiInvalidCmdErr = -261 #command not supported for port type
-midiDupIDErr = -260 #duplicate client ID
-midiNameLenErr = -259 #name supplied is longer than 31 characters
-midiWriteErr = -258 #MIDIWritePacket couldn't write to all connected ports
-midiNoConErr = -257 #no connection exists between specified ports
-midiVConnectRmvd = -256 #pending virtual connection removed
-midiVConnectMade = -255 #pending virtual connection resolved
-midiVConnectErr = -254 #pending virtual connection created
-midiTooManyConsErr = -253 #too many connections made
-midiTooManyPortsErr = -252 #too many ports already installed in the system
-midiNoPortErr = -251 #no port with that ID found
-midiNoClientErr = -250 #no client with that ID found
-badInputText = -247 #badInputText
-badDictFormat = -246 #badDictFormat
-incompatibleVoice = -245 #incompatibleVoice
-voiceNotFound = -244 #voiceNotFound
-bufTooSmall = -243 #bufTooSmall
-synthNotReady = -242 #synthNotReady
-synthOpenFailed = -241 #synthOpenFailed
-noSynthFound = -240 #noSynthFound
-siUnknownQuality = -232 #invalid quality selector (returned by driver)
-siUnknownInfoType = -231 #invalid info type selector (returned by driver)
-siInputDeviceErr = -230 #input device hardware failure
-siBadRefNum = -229 #invalid input device reference number
-siBadDeviceName = -228 #input device could not be opened
-siDeviceBusyErr = -227 #input device already in use
-siInvalidSampleSize = -226 #invalid sample size
-siInvalidSampleRate = -225 #invalid sample rate
-siHardDriveTooSlow = -224 #hard drive too slow to record to disk
-siInvalidCompression = -223 #invalid compression type
-siNoBufferSpecified = -222 #returned by synchronous SPBRecord if nil buffer passed
-siBadSoundInDevice = -221 #invalid index passed to SoundInGetIndexedDevice
-siNoSoundInHardware = -220 #no Sound Input hardware
-siVBRCompressionNotSupported = -213 #vbr audio compression not supported for this operation
-noMoreRealTime = -212 #not enough CPU cycles left to add another task
-channelNotBusy = -211 #channelNotBusy
-buffersTooSmall = -210 #can not operate in the memory allowed
-channelBusy = -209 #the Channel is being used for a PFD already
-badFileFormat = -208 #was not type AIFF or was of bad format,corrupt
-notEnoughBufferSpace = -207 #could not allocate enough memory
-badFormat = -206 #Sound Manager Error Returns
-badChannel = -205 #Sound Manager Error Returns
-resProblem = -204 #Sound Manager Error Returns
-queueFull = -203 #Sound Manager Error Returns
-notEnoughHardwareErr = -201 #Sound Manager Error Returns
-noHardwareErr = -200 #Sound Manager Error Returns
-mapReadErr = -199 #map inconsistent with operation
-resAttrErr = -198 #attribute inconsistent with operation
-rmvRefFailed = -197 #RmveReference failed
-rmvResFailed = -196 #RmveResource failed
-addRefFailed = -195 #AddReference failed
-addResFailed = -194 #AddResource failed
-resFNotFound = -193 #Resource file not found
-resNotFound = -192 #Resource not found
-inputOutOfBounds = -190 #Offset of Count out of bounds
-writingPastEnd = -189 #Writing past end of file
-resourceInMemory = -188 #Resource already in memory
-CantDecompress = -186 #resource bent ("the bends") - can't decompress a compressed resource
-badExtResource = -185 #extended resource has a bad format.
-cmNoCurrentProfile = -182 #Responder error
-cmUnsupportedDataType = -181 #Responder error
-cmCantDeleteProfile = -180 #Responder error
-cmCantXYZ = -179 #CMM cant handle XYZ space
-cmCantConcatenateError = -178 #Profile can't be concatenated
-cmProfilesIdentical = -177 #Profiles the same
-cmProfileNotFound = -176 #Responder error
-cmMethodNotFound = -175 #CMM not present
-cmMethodError = -171 #cmMethodError
-cmProfileError = -170 #cmProfileError
-cDepthErr = -157 #invalid pixel depth
-cResErr = -156 #invalid resolution for MakeITable
-cDevErr = -155 #invalid type of graphics device
-cProtectErr = -154 #colorTable entry protection violation
-cRangeErr = -153 #range error on colorTable request
-cNoMemErr = -152 #failed to allocate memory for structure
-cTempMemErr = -151 #failed to allocate memory for temporary structures
-cMatchErr = -150 #Color2Index failed to find an index
-insufficientStackErr = -149 #insufficientStackErr
-pixMapTooDeepErr = -148 #pixMapTooDeepErr
-rgnOverflowErr = -147 #rgnOverflowErr
-noMemForPictPlaybackErr = -145 #noMemForPictPlaybackErr
-userCanceledErr = -128 #userCanceledErr
-hMenuFindErr = -127 #could not find HMenu's parent in MenuKey (wrong error code - obsolete)
-mBarNFnd = -126 #system error code for MBDF not found
-updPixMemErr = -125 #insufficient memory to update a pixmap
-volGoneErr = -124 #Server volume has been disconnected.
-wrgVolTypErr = -123 #Wrong volume type error [operation not supported for MFS]
-badMovErr = -122 #Move into offspring error
-tmwdoErr = -121 #No free WDCB available
-dirNFErr = -120 #Directory not found
-memLockedErr = -117 #trying to move a locked block (MoveHHi)
-memSCErr = -116 #Size Check failed
-memBCErr = -115 #Block Check failed
-memPCErr = -114 #Pointer Check failed
-memAZErr = -113 #Address in zone check failed
-memPurErr = -112 #trying to purge a locked or non-purgeable block
-memWZErr = -111 #WhichZone failed (applied to free block)
-memAdrErr = -110 #address was odd; or out of range
-nilHandleErr = -109 #Master Pointer was NIL in HandleZone or other
-memFullErr = -108 #Not enough room in heap zone
-noTypeErr = -102 #No object of that type in scrap
-noScrapErr = -100 #No scrap exists error
-memROZWarn = -99 #soft error in ROZ
-portNotCf = -98 #driver Open error code (parameter RAM not configured for this connection)
-portInUse = -97 #driver Open error code (port is in use)
-portNotPwr = -96 #serial port not currently powered
-excessCollsns = -95 #excessive collisions on write
-lapProtErr = -94 #error in attaching/detaching protocol
-noBridgeErr = -93 #no network bridge for non-local send
-eLenErr = -92 #Length error ddpLenErr
-eMultiErr = -91 #Multicast address error ddpSktErr
-breakRecd = -90 #Break received (SCC)
-rcvrErr = -89 #SCC receiver error (framing; parity; OR)
-prInitErr = -88 #InitUtil found the parameter ram uninitialized
-prWrErr = -87 #parameter ram written didn't read-verify
-clkWrErr = -86 #time written did not verify
-clkRdErr = -85 #unable to read same clock value twice
-verErr = -84 #track failed to verify
-fmt2Err = -83 #can't get enough sync
-fmt1Err = -82 #can't find sector 0 after track format
-sectNFErr = -81 #sector number never found on a track
-seekErr = -80 #track number wrong on address mark
-spdAdjErr = -79 #unable to correctly adjust disk speed
-twoSideErr = -78 #tried to read 2nd side on a 1-sided drive
-initIWMErr = -77 #unable to initialize IWM
-tk0BadErr = -76 #track 0 detect doesn't change
-cantStepErr = -75 #step handshake failed
-wrUnderrun = -74 #write underrun occurred
-badDBtSlp = -73 #bad data mark bit slip nibbles
-badDCksum = -72 #bad data mark checksum
-noDtaMkErr = -71 #couldn't find a data mark header
-badBtSlpErr = -70 #bad addr mark bit slip nibbles
-badCksmErr = -69 #addr mark checksum didn't check
-dataVerErr = -68 #read verify compare failed
-noAdrMkErr = -67 #couldn't find valid addr mark
-noNybErr = -66 #couldn't find 5 nybbles in 200 tries
-offLinErr = -65 #r/w requested for an off-line drive
-fontDecError = -64 #error during font declaration
-wrPermErr = -61 #write permissions error
-badMDBErr = -60 #bad master directory block
-fsRnErr = -59 #file system internal error:during rename the old entry was deleted but could not be restored.
-extFSErr = -58 #volume in question belongs to an external fs
-noMacDskErr = -57 #not a mac diskette (sig bytes are wrong)
-nsDrvErr = -56 #no such drive (tried to mount a bad drive num)
-volOnLinErr = -55 #drive volume already on-line at MountVol
-permErr = -54 #permissions error (on file open)
-volOffLinErr = -53 #volume not on line error (was Ejected)
-gfpErr = -52 #get file position error
-rfNumErr = -51 #refnum error
-paramErr = -50 #error in user parameter list
-opWrErr = -49 #file already open with with write permission
-dupFNErr = -48 #duplicate filename (rename)
-fBsyErr = -47 #File is busy (delete)
-vLckdErr = -46 #volume is locked
-fLckdErr = -45 #file is locked
-wPrErr = -44 #diskette is write protected.
-fnfErr = -43 #File not found
-tmfoErr = -42 #too many files open
-mFulErr = -41 #memory full (open) or file won't fit (load)
-posErr = -40 #tried to position to before start of file (r/w)
-eofErr = -39 #End of file
-fnOpnErr = -38 #File not open
-bdNamErr = -37 #there may be no bad names in the final system!
-ioErr = -36 #I/O error (bummers)
-nsvErr = -35 #no such volume
-dskFulErr = -34 #disk full
-dirFulErr = -33 #Directory full
-dceExtErr = -30 #dce extension error
-unitTblFullErr = -29 #unit table has no more entries
-notOpenErr = -28 #Couldn't rd/wr/ctl/sts cause driver not opened
-iIOAbortErr = -27 #IO abort error (Printing Manager)
-dInstErr = -26 #DrvrInstall couldn't find driver in resources
-dRemovErr = -25 #tried to remove an open driver
-closErr = -24 #I/O System Errors
-openErr = -23 #I/O System Errors
-unitEmptyErr = -22 #I/O System Errors
-badUnitErr = -21 #I/O System Errors
-writErr = -20 #I/O System Errors
-readErr = -19 #I/O System Errors
-statusErr = -18 #I/O System Errors
-controlErr = -17 #I/O System Errors
-dsExtensionsDisabled = -13 #say –Extensions Disabled”
-dsHD20Installed = -12 #say –HD20 Startup”
-dsDisassemblerInstalled = -11 #say –Disassembler Installed”
-dsMacsBugInstalled = -10 #say –MacsBug Installed”
-seNoDB = -8 #no debugger installed to handle debugger command
-SlpTypeErr = -5 #invalid queue element
-unimpErr = -4 #unimplemented core routine
-corErr = -3 #core routine number out of range
-dsNoExtsDisassembler = -2 #not a SysErr, just a placeholder
-qErr = -1 #queue element not found during deletion
-tsmComponentNoErr = 0 #component result = no error
-EPERM = 1 #Operation not permitted
-ENOENT = 2 #No such file or directory
-ESRCH = 3 #No such process
-EINTR = 4 #Interrupted system call
-EIO = 5 #Input/output error
-ENXIO = 6 #Device not configured
-E2BIG = 7 #Argument list too long
-ENOEXEC = 8 #Exec format error
-EBADF = 9 #Bad file descriptor
-ECHILD = 10 #No child processes
-EDEADLK = 11 #Resource deadlock avoided
-ENOMEM = 12 #Cannot allocate memory
-EACCES = 13 #Permission denied
-EFAULT = 14 #Bad address
-ECANCELED = 15 #Operation cancelled
-EBUSY = 16 #Device busy
-EEXIST = 17 #File exists
-EXDEV = 18 #Cross-device link
-ENODEV = 19 #Operation not supported by device
-ENOTDIR = 20 #Not a directory
-EISDIR = 21 #Is a directory
-EINVAL = 22 #Invalid argument
-ENFILE = 23 #Too many open files in system
-EMFILE = 24 #Too many open files
-ENOTTY = 25 #Inappropriate ioctl for device
-ESIGPARM = 26 #Signal error
-EFBIG = 27 #File too large
-ENOSPC = 28 #No space left on device
-ESPIPE = 29 #Illegal seek
-EROFS = 30 #Read-only file system
-EMLINK = 31 #Too many links
-EPIPE = 32 #Broken pipe
-EDOM = 33 #Numerical argument out of domain
-ERANGE = 34 #Result too large
-EAGAIN = 35 #Resource temporarily unavailable
-EINPROGRESS = 36 #Operation now in progress
-EALREADY = 37 #Operation already in progress
-ENOTSOCK = 38 #Socket operation on non-socket
-EDESTADDRREQ = 39 #Destination address required
-EMSGSIZE = 40 #Message too long
-EPROTOTYPE = 41 #Protocol wrong type for socket
-ENOPROTOOPT = 42 #Protocol not available
-EPROTONOSUPPORT = 43 #Protocol not supported
-ESOCKTNOSUPPORT = 44 #Socket type not supported
-EOPNOTSUPP = 45 #Operation not supported
-EPFNOSUPPORT = 46 #Protocol family not supported
-EAFNOSUPPORT = 47 #Address family not supported by protocol family
-EADDRINUSE = 48 #Address already in use
-EADDRNOTAVAIL = 49 #Can't assign requested address
-ENETDOWN = 50 #Network is down
-ENETUNREACH = 51 #Network is unreachable
-ENETRESET = 52 #Network dropped connection on reset
-ECONNABORTED = 53 #Software caused connection abort
-ECONNRESET = 54 #Connection reset by peer
-ENOBUFS = 55 #No buffer space available
-EISCONN = 56 #Socket is already connected
-ENOTCONN = 57 #Socket is not connected
-ESHUTDOWN = 58 #Can't send after socket shutdown
-ETOOMANYREFS = 59 #Too many references: can't splice
-ETIMEDOUT = 60 #Operation timed out
-ECONNREFUSED = 61 #Connection refused
-ELOOP = 62 #Too many levels of symbolic links
-ENAMETOOLONG = 63 #File name too long
-EHOSTDOWN = 64 #Host is down
-EHOSTUNREACH = 65 #No route to host
-ENOTEMPTY = 66 #Directory not empty
-ELOOK = 67 #Internal mapping for kOTLookErr, don't return to client
-ENOLCK = 77 #No locks available
-ENOSYS = 78 #Function not implemented
-EILSEQ = 88 #Wide character encoding error
-EUNKNOWN = 99 #Unknown error
+svTempDisable = -32768 #svTempDisable
+svDisabled = -32640 #Reserve range -32640 to -32768 for Apple temp disables.
+fontNotOutlineErr = -32615 #bitmap font passed to routine that does outlines only
+kURL68kNotSupportedError = -30788 #kURL68kNotSupportedError
+kURLAccessNotAvailableError = -30787 #kURLAccessNotAvailableError
+kURLInvalidConfigurationError = -30786 #kURLInvalidConfigurationError
+kURLExtensionFailureError = -30785 #kURLExtensionFailureError
+kURLFileEmptyError = -30783 #kURLFileEmptyError
+kURLInvalidCallError = -30781 #kURLInvalidCallError
+kURLUnsettablePropertyError = -30780 #kURLUnsettablePropertyError
+kURLPropertyBufferTooSmallError = -30779 #kURLPropertyBufferTooSmallError
+kURLUnknownPropertyError = -30778 #kURLUnknownPropertyError
+kURLPropertyNotYetKnownError = -30777 #kURLPropertyNotYetKnownError
+kURLAuthenticationError = -30776 #kURLAuthenticationError
+kURLServerBusyError = -30775 #kURLServerBusyError
+kURLUnsupportedSchemeError = -30774 #kURLUnsupportedSchemeError
+kURLInvalidURLError = -30773 #kURLInvalidURLError
+kURLDestinationExistsError = -30772 #kURLDestinationExistsError
+kURLProgressAlreadyDisplayedError = -30771 #kURLProgressAlreadyDisplayedError
+kURLInvalidURLReferenceError = -30770 #kURLInvalidURLReferenceError
+controlHandleInvalidErr = -30599 #controlHandleInvalidErr
+controlInvalidDataVersionErr = -30597 #controlInvalidDataVersionErr
+errItemNotControl = -30596 #errItemNotControl
+errCantEmbedRoot = -30595 #errCantEmbedRoot
+errCantEmbedIntoSelf = -30594 #errCantEmbedIntoSelf
+errWindowRegionCodeInvalid = -30593 #errWindowRegionCodeInvalid
+errControlHiddenOrDisabled = -30592 #errControlHiddenOrDisabled
+errDataSizeMismatch = -30591 #errDataSizeMismatch
+errControlIsNotEmbedder = -30590 #errControlIsNotEmbedder
+errControlsAlreadyExist = -30589 #errControlsAlreadyExist
+errInvalidPartCode = -30588 #errInvalidPartCode
+errRootAlreadyExists = -30587 #errRootAlreadyExists
+errNoRootControl = -30586 #errNoRootControl
+errCouldntSetFocus = -30585 #errCouldntSetFocus
+errUnknownControl = -30584 #errUnknownControl
+errWindowDoesntSupportFocus = -30583 #errWindowDoesntSupportFocus
+errControlDoesntSupportFocus = -30582 #errControlDoesntSupportFocus
+errDataNotSupported = -30581 #errDataNotSupported
+errMessageNotSupported = -30580 #errMessageNotSupported
+themeMonitorDepthNotSupportedErr = -30567 #theme not supported at monitor depth
+themeScriptFontNotFoundErr = -30566 #theme font requested for uninstalled script system
+themeBadCursorIndexErr = -30565 #themeBadCursorIndexErr
+themeHasNoAccentsErr = -30564 #themeHasNoAccentsErr
+themeBadTextColorErr = -30563 #themeBadTextColorErr
+themeProcessNotRegisteredErr = -30562 #themeProcessNotRegisteredErr
+themeProcessRegisteredErr = -30561 #themeProcessRegisteredErr
+themeInvalidBrushErr = -30560 #pattern index invalid
+qtvrUninitialized = -30555 #qtvrUninitialized
+qtvrLibraryLoadErr = -30554 #qtvrLibraryLoadErr
+streamingNodeNotReadyErr = -30553 #streamingNodeNotReadyErr
+noMemoryNodeFailedInitialize = -30552 #noMemoryNodeFailedInitialize
+invalidHotSpotIDErr = -30551 #invalidHotSpotIDErr
+invalidNodeFormatErr = -30550 #invalidNodeFormatErr
+limitReachedErr = -30549 #limitReachedErr
+settingNotSupportedByNodeErr = -30548 #settingNotSupportedByNodeErr
+propertyNotSupportedByNodeErr = -30547 #propertyNotSupportedByNodeErr
+timeNotInViewErr = -30546 #timeNotInViewErr
+invalidViewStateErr = -30545 #invalidViewStateErr
+invalidNodeIDErr = -30544 #invalidNodeIDErr
+selectorNotSupportedByNodeErr = -30543 #selectorNotSupportedByNodeErr
+callNotSupportedByNodeErr = -30542 #callNotSupportedByNodeErr
+constraintReachedErr = -30541 #constraintReachedErr
+notAQTVRMovieErr = -30540 #notAQTVRMovieErr
+kFBCnoSuchHit = -30532 #kFBCnoSuchHit
+kFBCbadSearchSession = -30531 #kFBCbadSearchSession
+kFBCindexDiskIOFailed = -30530 #kFBCindexDiskIOFailed
+kFBCsummarizationCanceled = -30529 #kFBCsummarizationCanceled
+kFBCbadIndexFileVersion = -30528 #kFBCbadIndexFileVersion
+kFBCanalysisNotAvailable = -30527 #kFBCanalysisNotAvailable
+kFBCillegalSessionChange = -30526 #tried to add/remove vols to a session
+kFBCsomeFilesNotIndexed = -30525 #kFBCsomeFilesNotIndexed
+kFBCsearchFailed = -30524 #kFBCsearchFailed
+kFBCindexNotAvailable = -30523 #kFBCindexNotAvailable
+kFBCindexFileDestroyed = -30522 #kFBCindexFileDestroyed
+kFBCaccessCanceled = -30521 #kFBCaccessCanceled
+kFBCindexingCanceled = -30520 #kFBCindexingCanceled
+kFBCnoSearchSession = -30519 #kFBCnoSearchSession
+kFBCindexNotFound = -30518 #kFBCindexNotFound
+kFBCflushFailed = -30517 #kFBCflushFailed
+kFBCaddDocFailed = -30516 #kFBCaddDocFailed
+kFBCaccessorStoreFailed = -30515 #kFBCaccessorStoreFailed
+kFBCindexCreationFailed = -30514 #couldn't create index
+kFBCmergingFailed = -30513 #couldn't merge index files
+kFBCtokenizationFailed = -30512 #couldn't read from document or query
+kFBCmoveFailed = -30511 #V-Twin exception caught
+kFBCdeletionFailed = -30510 #V-Twin exception caught
+kFBCcommitFailed = -30509 #V-Twin exception caught
+kFBCindexingFailed = -30508 #V-Twin exception caught
+kFBCvalidationFailed = -30507 #V-Twin exception caught
+kFBCcompactionFailed = -30506 #V-Twin exception caught
+kFBCbadIndexFile = -30505 #bad FSSpec, or bad data in file
+kFBCfileNotIndexed = -30504 #kFBCfileNotIndexed
+kFBCbadParam = -30503 #kFBCbadParam
+kFBCallocFailed = -30502 #probably low memory
+kFBCnoIndexesFound = -30501 #kFBCnoIndexesFound
+kFBCvTwinExceptionErr = -30500 #no telling what it was
+kDSpStereoContextErr = -30450 #kDSpStereoContextErr
+kDSpInternalErr = -30449 #kDSpInternalErr
+kDSpConfirmSwitchWarning = -30448 #kDSpConfirmSwitchWarning
+kDSpFrameRateNotReadyErr = -30447 #kDSpFrameRateNotReadyErr
+kDSpContextNotFoundErr = -30446 #kDSpContextNotFoundErr
+kDSpContextNotReservedErr = -30445 #kDSpContextNotReservedErr
+kDSpContextAlreadyReservedErr = -30444 #kDSpContextAlreadyReservedErr
+kDSpInvalidAttributesErr = -30443 #kDSpInvalidAttributesErr
+kDSpInvalidContextErr = -30442 #kDSpInvalidContextErr
+kDSpSystemSWTooOldErr = -30441 #kDSpSystemSWTooOldErr
+kDSpNotInitializedErr = -30440 #kDSpNotInitializedErr
+kISpListBusyErr = -30429 #kISpListBusyErr
+kISpDeviceActiveErr = -30428 #kISpDeviceActiveErr
+kISpSystemActiveErr = -30427 #kISpSystemActiveErr
+kISpDeviceInactiveErr = -30426 #kISpDeviceInactiveErr
+kISpSystemInactiveErr = -30425 #kISpSystemInactiveErr
+kISpElementNotInListErr = -30424 #kISpElementNotInListErr
+kISpElementInListErr = -30423 #kISpElementInListErr
+kISpBufferToSmallErr = -30422 #kISpBufferToSmallErr
+kISpSystemListErr = -30421 #kISpSystemListErr
+kISpInternalErr = -30420 #kISpInternalErr
+kNSpJoinFailedErr = -30399 #kNSpJoinFailedErr
+kNSpCantBlockErr = -30398 #kNSpCantBlockErr
+kNSpMessageTooBigErr = -30397 #kNSpMessageTooBigErr
+kNSpSendFailedErr = -30396 #kNSpSendFailedErr
+kNSpConnectFailedErr = -30395 #kNSpConnectFailedErr
+kNSpGameTerminatedErr = -30394 #kNSpGameTerminatedErr
+kNSpTimeoutErr = -30393 #kNSpTimeoutErr
+kNSpInvalidProtocolListErr = -30392 #kNSpInvalidProtocolListErr
+kNSpInvalidProtocolRefErr = -30391 #kNSpInvalidProtocolRefErr
+kNSpInvalidDefinitionErr = -30390 #kNSpInvalidDefinitionErr
+kNSpAddPlayerFailedErr = -30389 #kNSpAddPlayerFailedErr
+kNSpCreateGroupFailedErr = -30388 #kNSpCreateGroupFailedErr
+kNSpNoHostVolunteersErr = -30387 #kNSpNoHostVolunteersErr
+kNSpNoGroupsErr = -30386 #kNSpNoGroupsErr
+kNSpNoPlayersErr = -30385 #kNSpNoPlayersErr
+kNSpInvalidGroupIDErr = -30384 #kNSpInvalidGroupIDErr
+kNSpInvalidPlayerIDErr = -30383 #kNSpInvalidPlayerIDErr
+kNSpNameRequiredErr = -30382 #kNSpNameRequiredErr
+kNSpFeatureNotImplementedErr = -30381 #kNSpFeatureNotImplementedErr
+kNSpAddressInUseErr = -30380 #kNSpAddressInUseErr
+kNSpRemovePlayerFailedErr = -30379 #kNSpRemovePlayerFailedErr
+kNSpFreeQExhaustedErr = -30378 #kNSpFreeQExhaustedErr
+kNSpInvalidAddressErr = -30377 #kNSpInvalidAddressErr
+kNSpNotAdvertisingErr = -30376 #kNSpNotAdvertisingErr
+kNSpAlreadyAdvertisingErr = -30374 #kNSpAlreadyAdvertisingErr
+kNSpMemAllocationErr = -30373 #kNSpMemAllocationErr
+kNSpOTVersionTooOldErr = -30371 #kNSpOTVersionTooOldErr
+kNSpOTNotPresentErr = -30370 #kNSpOTNotPresentErr
+kNSpInvalidParameterErr = -30369 #kNSpInvalidParameterErr
+kNSpInvalidGameRefErr = -30367 #kNSpInvalidGameRefErr
+kNSpProtocolNotAvailableErr = -30366 #kNSpProtocolNotAvailableErr
+kNSpHostFailedErr = -30365 #kNSpHostFailedErr
+kNSpPipeFullErr = -30364 #kNSpPipeFullErr
+kNSpTopologyNotSupportedErr = -30362 #kNSpTopologyNotSupportedErr
+kNSpAlreadyInitializedErr = -30361 #kNSpAlreadyInitializedErr
+kNSpInitializationFailedErr = -30360 #kNSpInitializationFailedErr
+kSSpScaleToZeroErr = -30344 #kSSpScaleToZeroErr
+kSSpParallelUpVectorErr = -30343 #kSSpParallelUpVectorErr
+kSSpCantInstallErr = -30342 #kSSpCantInstallErr
+kSSpVersionErr = -30341 #kSSpVersionErr
+kSSpInternalErr = -30340 #kSSpInternalErr
+kALMInternalErr = -30049 #kALMInternalErr
+kALMGroupNotFoundErr = -30048 #kALMGroupNotFoundErr
+kALMNoSuchModuleErr = -30047 #kALMNoSuchModuleErr
+kALMModuleCommunicationErr = -30046 #kALMModuleCommunicationErr
+kALMDuplicateModuleErr = -30045 #kALMDuplicateModuleErr
+kALMInstallationErr = -30044 #kALMInstallationErr
+kALMDeferSwitchErr = -30043 #kALMDeferSwitchErr
+kALMRebootFlagsLevelErr = -30042 #kALMRebootFlagsLevelErr
+kLocalesDefaultDisplayStatus = -30029 #Requested display locale unavailable, used default
+kLocalesTableFormatErr = -30002 #kLocalesTableFormatErr
+kLocalesBufferTooSmallErr = -30001 #kLocalesBufferTooSmallErr
+kFNSNameNotFoundErr = -29589 #The name with the requested paramters was not found
+kFNSBadFlattenedSizeErr = -29587 #flattened size didn't match input or was too small
+kFNSInsufficientDataErr = -29586 #insufficient data for the operation
+kFNSMismatchErr = -29585 #reference didn't match or wasn't found in profile
+kFNSDuplicateReferenceErr = -29584 #the ref. being added is already in the profile
+kFNSBadProfileVersionErr = -29583 #profile version is out of known range
+kFNSInvalidProfileErr = -29582 #profile is NULL or otherwise bad
+kFNSBadReferenceVersionErr = -29581 #ref. version is out of known range
+kFNSInvalidReferenceErr = -29580 #ref. was NULL or otherwise bad
+kCollateInvalidCollationRef = -29507 #kCollateInvalidCollationRef
+kCollateBufferTooSmall = -29506 #kCollateBufferTooSmall
+kCollateInvalidChar = -29505 #kCollateInvalidChar
+kCollatePatternNotFoundErr = -29504 #kCollatePatternNotFoundErr
+kCollateUnicodeConvertFailedErr = -29503 #kCollateUnicodeConvertFailedErr
+kCollateMissingUnicodeTableErr = -29502 #kCollateMissingUnicodeTableErr
+kCollateInvalidOptions = -29501 #kCollateInvalidOptions
+kCollateAttributesNotFoundErr = -29500 #kCollateAttributesNotFoundErr
+kMPInvalidIDErr = -29299 #kMPInvalidIDErr
+kMPInsufficientResourcesErr = -29298 #kMPInsufficientResourcesErr
+kMPTaskAbortedErr = -29297 #kMPTaskAbortedErr
+kMPTimeoutErr = -29296 #kMPTimeoutErr
+kMPDeletedErr = -29295 #kMPDeletedErr
+kMPBlueBlockingErr = -29293 #kMPBlueBlockingErr
+kMPTaskStoppedErr = -29292 #A convention used with MPThrowException.
+kMPTaskBlockedErr = -29291 #kMPTaskBlockedErr
+kMPTaskCreatedErr = -29290 #kMPTaskCreatedErr
+kMPProcessTerminatedErr = -29289 #kMPProcessTerminatedErr
+kMPProcessCreatedErr = -29288 #kMPProcessCreatedErr
+kMPPrivilegedErr = -29276 #kMPPrivilegedErr
+kMPIterationEndErr = -29275 #kMPIterationEndErr
+kUCTextBreakLocatorMissingType = -25341 #Unicode text break error
+kUCOutputBufferTooSmall = -25340 #Output buffer too small for Unicode string result
+errKCCreateChainFailed = -25318 #errKCCreateChainFailed
+errKCDataNotModifiable = -25317 #errKCDataNotModifiable
+errKCDataNotAvailable = -25316 #errKCDataNotAvailable
+errKCInteractionRequired = -25315 #errKCInteractionRequired
+errKCNoPolicyModule = -25314 #errKCNoPolicyModule
+errKCNoCertificateModule = -25313 #errKCNoCertificateModule
+errKCNoStorageModule = -25312 #errKCNoStorageModule
+errKCKeySizeNotAllowed = -25311 #errKCKeySizeNotAllowed
+errKCWrongKCVersion = -25310 #errKCWrongKCVersion
+errKCReadOnlyAttr = -25309 #errKCReadOnlyAttr
+errKCInteractionNotAllowed = -25308 #errKCInteractionNotAllowed
+errKCNoDefaultKeychain = -25307 #errKCNoDefaultKeychain
+errKCNoSuchClass = -25306 #errKCNoSuchClass
+errKCInvalidSearchRef = -25305 #errKCInvalidSearchRef
+errKCInvalidItemRef = -25304 #errKCInvalidItemRef
+errKCNoSuchAttr = -25303 #errKCNoSuchAttr
+errKCDataTooLarge = -25302 #errKCDataTooLarge
+errKCBufferTooSmall = -25301 #errKCBufferTooSmall
+errKCItemNotFound = -25300 #errKCItemNotFound
+errKCDuplicateItem = -25299 #errKCDuplicateItem
+errKCInvalidCallback = -25298 #errKCInvalidCallback
+errKCDuplicateCallback = -25297 #errKCDuplicateCallback
+errKCDuplicateKeychain = -25296 #errKCDuplicateKeychain
+errKCInvalidKeychain = -25295 #errKCInvalidKeychain
+errKCNoSuchKeychain = -25294 #errKCNoSuchKeychain
+errKCAuthFailed = -25293 #errKCAuthFailed
+errKCReadOnly = -25292 #errKCReadOnly
+errKCNotAvailable = -25291 #errKCNotAvailable
+printerStatusOpCodeNotSupportedErr = -25280 #printerStatusOpCodeNotSupportedErr
+kTXNOutsideOfFrameErr = -22018 #kTXNOutsideOfFrameErr
+kTXNOutsideOfLineErr = -22017 #kTXNOutsideOfLineErr
+kTXNATSUIIsNotInstalledErr = -22016 #kTXNATSUIIsNotInstalledErr
+kTXNDataTypeNotAllowedErr = -22015 #kTXNDataTypeNotAllowedErr
+kTXNCopyNotAllowedInEchoModeErr = -22014 #kTXNCopyNotAllowedInEchoModeErr
+kTXNCannotTurnTSMOffWhenUsingUnicodeErr = -22013 #kTXNCannotTurnTSMOffWhenUsingUnicodeErr
+kTXNAlreadyInitializedErr = -22012 #kTXNAlreadyInitializedErr
+kTXNInvalidRunIndex = -22011 #kTXNInvalidRunIndex
+kTXNSomeOrAllTagsInvalidForRunErr = -22010 #kTXNSomeOrAllTagsInvalidForRunErr
+kTXNAttributeTagInvalidForRunErr = -22009 #dataValue is set to this per invalid tag
+kTXNNoMatchErr = -22008 #kTXNNoMatchErr
+kTXNRunIndexOutofBoundsErr = -22007 #kTXNRunIndexOutofBoundsErr
+kTXNCannotSetAutoIndentErr = -22006 #kTXNCannotSetAutoIndentErr
+kTXNBadDefaultFileTypeWarning = -22005 #kTXNBadDefaultFileTypeWarning
+kTXNUserCanceledOperationErr = -22004 #kTXNUserCanceledOperationErr
+kTXNIllegalToCrossDataBoundariesErr = -22003 #kTXNIllegalToCrossDataBoundariesErr
+kTXNInvalidFrameIDErr = -22002 #kTXNInvalidFrameIDErr
+kTXNCannotAddFrameErr = -22001 #kTXNCannotAddFrameErr
+kTXNEndIterationErr = -22000 #kTXNEndIterationErr
+invalidIndexErr = -20002 #The recordIndex parameter is not valid.
+recordDataTooBigErr = -20001 #The record data is bigger than buffer size (1024 bytes).
+unknownInsertModeErr = -20000 #There is no such an insert mode.
+kModemScriptMissing = -14002 #kModemScriptMissing
+kModemPreferencesMissing = -14001 #kModemPreferencesMissing
+kModemOutOfMemory = -14000 #kModemOutOfMemory
+kHIDBaseError = -13950 #kHIDBaseError
+kHIDNullStateErr = -13949 #kHIDNullStateErr
+kHIDBufferTooSmallErr = -13948 #kHIDBufferTooSmallErr
+kHIDValueOutOfRangeErr = -13947 #kHIDValueOutOfRangeErr
+kHIDUsageNotFoundErr = -13946 #kHIDUsageNotFoundErr
+kHIDNotValueArrayErr = -13945 #kHIDNotValueArrayErr
+kHIDInvalidPreparsedDataErr = -13944 #kHIDInvalidPreparsedDataErr
+kHIDIncompatibleReportErr = -13943 #kHIDIncompatibleReportErr
+kHIDBadLogPhysValuesErr = -13942 #kHIDBadLogPhysValuesErr
+kHIDInvalidReportTypeErr = -13941 #kHIDInvalidReportTypeErr
+kHIDInvalidReportLengthErr = -13940 #kHIDInvalidReportLengthErr
+kHIDNullPointerErr = -13939 #kHIDNullPointerErr
+kHIDBadParameterErr = -13938 #kHIDBadParameterErr
+kHIDNotEnoughMemoryErr = -13937 #kHIDNotEnoughMemoryErr
+kHIDEndOfDescriptorErr = -13936 #kHIDEndOfDescriptorErr
+kHIDUsagePageZeroErr = -13935 #kHIDUsagePageZeroErr
+kHIDBadLogicalMinimumErr = -13934 #kHIDBadLogicalMinimumErr
+kHIDBadLogicalMaximumErr = -13933 #kHIDBadLogicalMaximumErr
+kHIDInvertedLogicalRangeErr = -13932 #kHIDInvertedLogicalRangeErr
+kHIDInvertedPhysicalRangeErr = -13931 #kHIDInvertedPhysicalRangeErr
+kHIDUnmatchedUsageRangeErr = -13930 #kHIDUnmatchedUsageRangeErr
+kHIDInvertedUsageRangeErr = -13929 #kHIDInvertedUsageRangeErr
+kHIDUnmatchedStringRangeErr = -13928 #kHIDUnmatchedStringRangeErr
+kHIDUnmatchedDesignatorRangeErr = -13927 #kHIDUnmatchedDesignatorRangeErr
+kHIDReportSizeZeroErr = -13926 #kHIDReportSizeZeroErr
+kHIDReportCountZeroErr = -13925 #kHIDReportCountZeroErr
+kHIDReportIDZeroErr = -13924 #kHIDReportIDZeroErr
+kHIDInvalidRangePageErr = -13923 #kHIDInvalidRangePageErr
+kHIDDeviceNotReady = -13910 #The device is still initializing, try again later
+kHIDVersionIncompatibleErr = -13909 #kHIDVersionIncompatibleErr
+debuggingNoMatchErr = -13887 #debugging component or option not found at this index
+debuggingNoCallbackErr = -13886 #debugging component has no callback
+debuggingInvalidNameErr = -13885 #componentName or optionName is invalid (NULL)
+debuggingInvalidOptionErr = -13884 #optionSelectorNum is not registered
+debuggingInvalidSignatureErr = -13883 #componentSignature not registered
+debuggingDuplicateOptionErr = -13882 #optionSelectorNum already registered
+debuggingDuplicateSignatureErr = -13881 #componentSignature already registered
+debuggingExecutionContextErr = -13880 #routine cannot be called at this time
+kBridgeSoftwareRunningCantSleep = -13038 #kBridgeSoftwareRunningCantSleep
+kNoSuchPowerSource = -13020 #kNoSuchPowerSource
+kProcessorTempRoutineRequiresMPLib2 = -13014 #kProcessorTempRoutineRequiresMPLib2
+kCantReportProcessorTemperatureErr = -13013 #kCantReportProcessorTemperatureErr
+kPowerMgtRequestDenied = -13010 #kPowerMgtRequestDenied
+kPowerMgtMessageNotHandled = -13009 #kPowerMgtMessageNotHandled
+kPowerHandlerNotFoundForProcErr = -13008 #kPowerHandlerNotFoundForProcErr
+kPowerHandlerNotFoundForDeviceErr = -13007 #kPowerHandlerNotFoundForDeviceErr
+kPowerHandlerExistsForDeviceErr = -13006 #kPowerHandlerExistsForDeviceErr
+pmRecvEndErr = -13005 #during receive, pmgr did not finish hs configured for this connection
+pmRecvStartErr = -13004 #during receive, pmgr did not start hs
+pmSendEndErr = -13003 #during send, pmgr did not finish hs
+pmSendStartErr = -13002 #during send, pmgr did not start hs
+pmReplyTOErr = -13001 #Timed out waiting for reply
+pmBusyErr = -13000 #Power Mgr never ready to start handshake
+pictureDataErr = -11005 #the picture data was invalid
+colorsRequestedErr = -11004 #the number of colors requested was illegal
+cantLoadPickMethodErr = -11003 #unable to load the custom pick proc
+pictInfoVerbErr = -11002 #the passed verb was invalid
+pictInfoIDErr = -11001 #the internal consistancy check for the PictInfoID is wrong
+pictInfoVersionErr = -11000 #wrong version of the PictInfo structure
+errTaskNotFound = -10780 #no task with that task id exists
+telNotEnoughdspBW = -10116 #not enough real-time for allocation
+telBadSampleRate = -10115 #incompatible sample rate
+telBadSWErr = -10114 #Software not installed properly
+telDetAlreadyOn = -10113 #detection is already turned on
+telAutoAnsNotOn = -10112 #autoAnswer in not turned on
+telValidateFailed = -10111 #telValidate failed
+telBadProcID = -10110 #invalid procID
+telDeviceNotFound = -10109 #device not found
+telBadCodeResource = -10108 #code resource not found
+telInitFailed = -10107 #initialization failed
+telNoCommFolder = -10106 #Communications/Extensions € not found
+telUnknownErr = -10103 #unable to set config
+telNoSuchTool = -10102 #unable to find tool with name specified
+telBadFunction = -10091 #bad msgCode specified
+telPBErr = -10090 #parameter block error, bad format
+telCANotDeflectable = -10082 #CA not "deflectable"
+telCANotRejectable = -10081 #CA not "rejectable"
+telCANotAcceptable = -10080 #CA not "acceptable"
+telTermNotOpen = -10072 #terminal not opened via TELOpenTerm
+telStillNeeded = -10071 #terminal driver still needed by someone else
+telAlreadyOpen = -10070 #terminal already open
+telNoCallbackRef = -10064 #no call back reference was specified, but is required
+telDisplayModeNotSupp = -10063 #display mode not supported by tool
+telBadDisplayMode = -10062 #bad display mode specified
+telFwdTypeNotSupp = -10061 #forward type not supported by tool
+telDNTypeNotSupp = -10060 #DN type not supported by tool
+telBadRate = -10059 #bad rate specified
+telBadBearerType = -10058 #bad bearerType specified
+telBadSelect = -10057 #unable to select or deselect DN
+telBadParkID = -10056 #bad park id specified
+telBadPickupGroupID = -10055 #bad pickup group ID specified
+telBadFwdType = -10054 #bad fwdType specified
+telBadFeatureID = -10053 #bad feature ID specified
+telBadIntercomID = -10052 #bad intercom ID specified
+telBadPageID = -10051 #bad page ID specified
+telBadDNType = -10050 #DN type invalid
+telConfLimitExceeded = -10047 #attempt to exceed switch conference limits
+telCBErr = -10046 #call back feature not set previously
+telTransferRej = -10045 #transfer request rejected
+telTransferErr = -10044 #transfer not prepared
+telConfRej = -10043 #conference request was rejected
+telConfErr = -10042 #conference was not prepared
+telConfNoLimit = -10041 #no limit was specified but required
+telConfLimitErr = -10040 #limit specified is too high for this configuration
+telFeatNotSupp = -10033 #feature program call not supported by this tool
+telFeatActive = -10032 #feature already active
+telFeatNotAvail = -10031 #feature subscribed but not available
+telFeatNotSub = -10030 #feature not subscribed
+errAEPropertiesClash = -10025 #illegal combination of properties settings for Set Data, make new, or duplicate
+errAECantPutThatThere = -10024 #in make new, duplicate, etc. class can't be an element of container
+errAENotAnEnumMember = -10023 #enumerated value in SetData is not allowed for this property
+telIntExtNotSupp = -10022 #internal external type not supported by this tool
+telBadIntExt = -10021 #bad internal external error
+telStateNotSupp = -10020 #device state not supported by tool
+telBadStateErr = -10019 #bad device state specified
+telIndexNotSupp = -10018 #index not supported by this tool
+telBadIndex = -10017 #bad index specified
+telAPattNotSupp = -10016 #alerting pattern not supported by tool
+telBadAPattErr = -10015 #bad alerting pattern specified
+telVTypeNotSupp = -10014 #volume type not supported by this tool
+telBadVTypeErr = -10013 #bad volume type error
+telBadLevelErr = -10012 #bad volume level setting
+telHTypeNotSupp = -10011 #hook type not supported by this tool
+telBadHTypeErr = -10010 #bad hook type specified
+errAECantSupplyType = -10009 #errAECantSupplyType
+telNoOpenErr = -10008 #unable to open terminal
+telNoMemErr = -10007 #no memory to allocate handle
+errOSACantAssign = -10006 #Signaled when an object cannot be set in a container.
+telBadProcErr = -10005 #bad msgProc specified
+telBadHandErr = -10004 #bad handle specified
+OSAIllegalAssign = -10003 #Signaled when an object can never be set in a container
+telBadDNErr = -10002 #TELDNHandle not found or invalid
+telBadTermErr = -10001 #invalid TELHandle or handle not found
+errAEEventFailed = -10000 #errAEEventFailed
+cannotMoveAttachedController = -9999 #cannotMoveAttachedController
+controllerHasFixedHeight = -9998 #controllerHasFixedHeight
+cannotSetWidthOfAttachedController = -9997 #cannotSetWidthOfAttachedController
+controllerBoundsNotExact = -9996 #controllerBoundsNotExact
+editingNotAllowed = -9995 #editingNotAllowed
+badControllerHeight = -9994 #badControllerHeight
+deviceCantMeetRequest = -9408 #deviceCantMeetRequest
+seqGrabInfoNotAvailable = -9407 #seqGrabInfoNotAvailable
+badSGChannel = -9406 #badSGChannel
+couldntGetRequiredComponent = -9405 #couldntGetRequiredComponent
+notEnoughDiskSpaceToGrab = -9404 #notEnoughDiskSpaceToGrab
+notEnoughMemoryToGrab = -9403 #notEnoughMemoryToGrab
+cantDoThatInCurrentMode = -9402 #cantDoThatInCurrentMode
+grabTimeComplete = -9401 #grabTimeComplete
+noDeviceForChannel = -9400 #noDeviceForChannel
+kNoCardBusCISErr = -9109 #No valid CIS exists for this CardBus card
+kNotZVCapableErr = -9108 #This socket does not support Zoomed Video
+kCardPowerOffErr = -9107 #Power to the card has been turned off
+kAttemptDupCardEntryErr = -9106 #The Enabler was asked to create a duplicate card entry
+kAlreadySavedStateErr = -9105 #The state has been saved on previous call
+kTooManyIOWindowsErr = -9104 #device requested more than one I/O window
+kNotReadyErr = -9103 #PC Card failed to go ready
+kClientRequestDenied = -9102 #CS Clients should return this code inorder to
+kNoCompatibleNameErr = -9101 #There is no compatible driver name for this device
+kNoEnablerForCardErr = -9100 #No Enablers were found that can support the card
+kNoCardEnablersFoundErr = -9099 #No Enablers were found
+kUnsupportedCardErr = -9098 #Card not supported by generic enabler
+kNoClientTableErr = -9097 #The client table has not be initialized yet
+kNoMoreInterruptSlotsErr = -9096 #All internal Interrupt slots are in use
+kNoMoreTimerClientsErr = -9095 #All timer callbacks are in use
+kNoIOWindowRequestedErr = -9094 #Request I/O window before calling configuration
+kBadCustomIFIDErr = -9093 #Custom interface ID is invalid
+kBadTupleDataErr = -9092 #Data in tuple is invalid
+kInvalidCSClientErr = -9091 #Card Services ClientID is not registered
+kUnsupportedVsErr = -9090 #Unsupported Voltage Sense
+kInvalidDeviceNumber = -9089 #kInvalidDeviceNumber
+kPostCardEventErr = -9088 #_PCCSLPostCardEvent failed and dropped an event
+kCantConfigureCardErr = -9087 #kCantConfigureCardErr
+kPassCallToChainErr = -9086 #kPassCallToChainErr
+kCardBusCardErr = -9085 #kCardBusCardErr
+k16BitCardErr = -9084 #k16BitCardErr
+kBadDeviceErr = -9083 #kBadDeviceErr
+kBadLinkErr = -9082 #kBadLinkErr
+kInvalidRegEntryErr = -9081 #kInvalidRegEntryErr
+kNoCardSevicesSocketsErr = -9080 #kNoCardSevicesSocketsErr
+kOutOfResourceErr = -9079 #Card Services has exhausted the resource
+kNoMoreItemsErr = -9078 #there are no more of the requested item
+kInUseErr = -9077 #requested resource is being used by a client
+kConfigurationLockedErr = -9076 #a configuration has already been locked
+kWriteProtectedErr = -9075 #media is write-protected
+kBusyErr = -9074 #unable to process request at this time - try later
+kUnsupportedModeErr = -9073 #mode is not supported
+kUnsupportedFunctionErr = -9072 #function is not supported by this implementation
+kNoCardErr = -9071 #no PC card in the socket
+kGeneralFailureErr = -9070 #an undefined error has occurred
+kWriteFailureErr = -9069 #unable to complete write request
+kReadFailureErr = -9068 #unable to complete read request
+kBadSpeedErr = -9067 #specified speed is unavailable
+kBadCISErr = -9066 #CIS on card is invalid
+kBadHandleErr = -9065 #clientHandle is invalid
+kBadArgsErr = -9064 #values in argument packet are invalid
+kBadArgLengthErr = -9063 #ArgLength argument is invalid
+kBadWindowErr = -9062 #specified window is invalid
+kBadVppErr = -9061 #specified Vpp1 or Vpp2 power level index is invalid
+kBadVccErr = -9060 #specified Vcc power level index is invalid
+kBadTypeErr = -9059 #specified window or interface type is invalid
+kBadSocketErr = -9058 #specified logical or physical socket number is invalid
+kBadSizeErr = -9057 #specified size is invalid
+kBadPageErr = -9056 #specified page is invalid
+kBadOffsetErr = -9055 #specified PC card memory array offset is invalid
+kBadIRQErr = -9054 #specified IRQ level is invalid
+kBadEDCErr = -9053 #specified EDC generator specified is invalid
+kBadBaseErr = -9052 #specified base system memory address is invalid
+kBadAttributeErr = -9051 #specified attributes field value is invalid
+kBadAdapterErr = -9050 #invalid adapter number
+codecOffscreenFailedPleaseRetryErr = -8992 #codecOffscreenFailedPleaseRetryErr
+lockPortBitsWrongGDeviceErr = -8991 #lockPortBitsWrongGDeviceErr
+directXObjectAlreadyExists = -8990 #directXObjectAlreadyExists
+codecDroppedFrameErr = -8989 #returned from ImageCodecDrawBand
+codecOffscreenFailedErr = -8988 #codecOffscreenFailedErr
+codecNeedAccessKeyErr = -8987 #codec needs password in order to decompress
+codecParameterDialogConfirm = -8986 #codecParameterDialogConfirm
+lockPortBitsSurfaceLostErr = -8985 #lockPortBitsSurfaceLostErr
+lockPortBitsBadPortErr = -8984 #lockPortBitsBadPortErr
+lockPortBitsWindowClippedErr = -8983 #lockPortBitsWindowClippedErr
+lockPortBitsWindowResizedErr = -8982 #lockPortBitsWindowResizedErr
+lockPortBitsWindowMovedErr = -8981 #lockPortBitsWindowMovedErr
+lockPortBitsBadSurfaceErr = -8980 #lockPortBitsBadSurfaceErr
+codecNeedToFlushChainErr = -8979 #codecNeedToFlushChainErr
+codecDisabledErr = -8978 #codec disabled itself -- pass codecFlagReenable to reset
+codecNoMemoryPleaseWaitErr = -8977 #codecNoMemoryPleaseWaitErr
+codecNothingToBlitErr = -8976 #codecNothingToBlitErr
+codecCantQueueErr = -8975 #codecCantQueueErr
+codecCantWhenErr = -8974 #codecCantWhenErr
+codecOpenErr = -8973 #codecOpenErr
+codecConditionErr = -8972 #codecConditionErr
+codecExtensionNotFoundErr = -8971 #codecExtensionNotFoundErr
+codecDataVersErr = -8970 #codecDataVersErr
+codecBadDataErr = -8969 #codecBadDataErr
+codecWouldOffscreenErr = -8968 #codecWouldOffscreenErr
+codecAbortErr = -8967 #codecAbortErr
+codecSpoolErr = -8966 #codecSpoolErr
+codecImageBufErr = -8965 #codecImageBufErr
+codecScreenBufErr = -8964 #codecScreenBufErr
+codecSizeErr = -8963 #codecSizeErr
+codecUnimpErr = -8962 #codecUnimpErr
+noCodecErr = -8961 #noCodecErr
+codecErr = -8960 #codecErr
+kIllegalClockValueErr = -8852 #kIllegalClockValueErr
+kUTCOverflowErr = -8851 #kUTCOverflowErr
+kUTCUnderflowErr = -8850 #kUTCUnderflowErr
+kATSULastErr = -8809 #The last ATSUI error code.
+kATSULineBreakInWord = -8808 #This is not an error code but is returned by ATSUBreakLine to
+kATSUCoordinateOverflowErr = -8807 #Used to indicate the coordinates provided to an ATSUI routine caused
+kATSUNoFontScalerAvailableErr = -8806 #Used when no font scaler is available for the font passed
+kATSUNoFontCmapAvailableErr = -8805 #Used when no CMAP table can be accessed or synthesized for the
+kATSULowLevelErr = -8804 #Used when an error was encountered within the low level ATS
+kATSUQuickDrawTextErr = -8803 #Used when QuickDraw Text encounters an error rendering or measuring
+kATSUNoStyleRunsAssignedErr = -8802 #Used when an attempt was made to measure, highlight or draw
+kATSUNotSetErr = -8801 #Used when the client attempts to retrieve an attribute,
+kATSUInvalidCacheErr = -8800 #Used when an attempt was made to read in style data
+kATSUInvalidAttributeTagErr = -8799 #Used when an attempt was made to use a tag value that
+kATSUInvalidAttributeSizeErr = -8798 #Used when an attempt was made to use an attribute with a
+kATSUInvalidAttributeValueErr = -8797 #Used when an attempt was made to use an attribute with
+kATSUInvalidFontErr = -8796 #Used when an attempt was made to use an invalid font ID.
+kATSUNoCorrespondingFontErr = -8795 #This value is retrned by font ID conversion
+kATSUFontsNotMatched = -8794 #This value is returned by ATSUMatchFontsToText()
+kATSUFontsMatched = -8793 #This is not an error code but is returned by
+kATSUInvalidTextRangeErr = -8792 #An attempt was made to extract information
+kATSUInvalidStyleErr = -8791 #An attempt was made to use a ATSUStyle which
+kATSUInvalidTextLayoutErr = -8790 #An attempt was made to use a ATSUTextLayout
+kTECOutputBufferFullStatus = -8785 #output buffer has no room for conversion of next input text element (partial conversion)
+kTECNeedFlushStatus = -8784 #kTECNeedFlushStatus
+kTECUsedFallbacksStatus = -8783 #kTECUsedFallbacksStatus
+kTECItemUnavailableErr = -8771 #item (e.g. name) not available for specified region (& encoding if relevant)
+kTECGlobalsUnavailableErr = -8770 #globals have already been deallocated (premature TERM)
+unicodeChecksumErr = -8769 #unicodeChecksumErr
+unicodeNoTableErr = -8768 #unicodeNoTableErr
+unicodeVariantErr = -8767 #unicodeVariantErr
+unicodeFallbacksErr = -8766 #unicodeFallbacksErr
+unicodePartConvertErr = -8765 #unicodePartConvertErr
+unicodeBufErr = -8764 #unicodeBufErr
+unicodeCharErr = -8763 #unicodeCharErr
+unicodeElementErr = -8762 #unicodeElementErr
+unicodeNotFoundErr = -8761 #unicodeNotFoundErr
+unicodeTableFormatErr = -8760 #unicodeTableFormatErr
+unicodeDirectionErr = -8759 #unicodeDirectionErr
+unicodeContextualErr = -8758 #unicodeContextualErr
+unicodeTextEncodingDataErr = -8757 #unicodeTextEncodingDataErr
+kTECDirectionErr = -8756 #direction stack overflow, etc.
+kTECIncompleteElementErr = -8755 #text element may be incomplete or is too long for internal buffers
+kTECUnmappableElementErr = -8754 #kTECUnmappableElementErr
+kTECPartialCharErr = -8753 #input buffer ends in the middle of a multibyte character, conversion stopped
+kTECBadTextRunErr = -8752 #kTECBadTextRunErr
+kTECArrayFullErr = -8751 #supplied name buffer or TextRun, TextEncoding, or UnicodeMapping array is too small
+kTECBufferBelowMinimumSizeErr = -8750 #output buffer too small to allow processing of first input text element
+kTECNoConversionPathErr = -8749 #kTECNoConversionPathErr
+kTECCorruptConverterErr = -8748 #invalid converter object reference
+kTECTableFormatErr = -8747 #kTECTableFormatErr
+kTECTableChecksumErr = -8746 #kTECTableChecksumErr
+kTECMissingTableErr = -8745 #kTECMissingTableErr
+kTextUndefinedElementErr = -8740 #text conversion errors
+kTextMalformedInputErr = -8739 #in DBCS, for example, high byte followed by invalid low byte
+kTextUnsupportedEncodingErr = -8738 #specified encoding not supported for this operation
+kRANotEnabled = -7139 #kRANotEnabled
+kRACallBackFailed = -7138 #kRACallBackFailed
+kRADuplicateIPAddr = -7137 #kRADuplicateIPAddr
+kRANCPRejectedbyPeer = -7136 #kRANCPRejectedbyPeer
+kRAExtAuthenticationFailed = -7135 #kRAExtAuthenticationFailed
+kRAATalkInactive = -7134 #kRAATalkInactive
+kRAPeerNotResponding = -7133 #kRAPeerNotResponding
+kRAPPPPeerDisconnected = -7132 #kRAPPPPeerDisconnected
+kRAPPPUserDisconnected = -7131 #kRAPPPUserDisconnected
+kRAPPPNegotiationFailed = -7130 #kRAPPPNegotiationFailed
+kRAPPPAuthenticationFailed = -7129 #kRAPPPAuthenticationFailed
+kRAPPPProtocolRejected = -7128 #kRAPPPProtocolRejected
+dcmBufferOverflowErr = -7127 #data is larger than buffer size
+kRANotPrimaryInterface = -7126 #when IPCP is not primary TCP/IP intf.
+kRATCPIPNotConfigured = -7125 #TCP/IP not configured, could be loaded
+kRATCPIPInactive = -7124 #TCP/IP inactive, cannot be loaded
+kRARemoteAccessNotReady = -7123 #kRARemoteAccessNotReady
+kRAInitOpenTransportFailed = -7122 #kRAInitOpenTransportFailed
+dcmProtectedErr = -7121 #need keyword to use dictionary
+kRAUserPwdEntryRequired = -7120 #kRAUserPwdEntryRequired
+kRAUserPwdChangeRequired = -7119 #kRAUserPwdChangeRequired
+dcmBadFindMethodErr = -7118 #no such find method supported
+kRAInvalidSerialProtocol = -7117 #kRAInvalidSerialProtocol
+kRAInvalidPortState = -7116 #kRAInvalidPortState
+dcmBadKeyErr = -7115 #bad key information
+kRAPortBusy = -7114 #kRAPortBusy
+kRAInstallationDamaged = -7113 #kRAInstallationDamaged
+dcmBadFieldTypeErr = -7112 #no such field type supported
+dcmBadFieldInfoErr = -7111 #incomplete information
+dcmNecessaryFieldErr = -7110 #lack required/identify field
+dcmDupRecordErr = -7109 #same record already exist
+kRANotConnected = -7108 #kRANotConnected
+dcmBlockFullErr = -7107 #dictionary block full
+kRAMissingResources = -7106 #kRAMissingResources
+dcmDictionaryBusyErr = -7105 #dictionary is busy
+dcmDictionaryNotOpenErr = -7104 #dictionary not opened
+dcmPermissionErr = -7103 #invalid permission
+dcmBadDictionaryErr = -7102 #invalid dictionary
+dcmNotDictionaryErr = -7101 #not dictionary
+kRAInvalidParameter = -7100 #kRAInvalidParameter
+laEngineNotFoundErr = -7000 #can't find the engine
+laPropertyErr = -6999 #Error in properties
+kUSBUnknownDeviceErr = -6998 #device ref not recognised
+laPropertyIsReadOnlyErr = -6997 #the property is read only
+laPropertyUnknownErr = -6996 #the property is unknown to this environment
+laPropertyValueErr = -6995 #Invalid property value
+laDictionaryTooManyErr = -6994 #too many dictionaries
+laDictionaryUnknownErr = -6993 #can't use this dictionary with this environment
+laDictionaryNotOpenedErr = -6992 #the dictionary is not opened
+laTextOverFlowErr = -6991 #text is too long
+laFailAnalysisErr = -6990 #analysis failed
+laNoMoreMorphemeErr = -6989 #nothing to read
+laInvalidPathErr = -6988 #path is not correct
+kUSBNotHandled = -6987 #Notification was not handled (same as NotFound)
+laEnvironmentNotFoundErr = -6986 #can't fint the specified environment
+laEnvironmentBusyErr = -6985 #specified environment is used
+laTooSmallBufferErr = -6984 #output buffer is too small to store any result
+kUSBFlagsError = -6983 #Unused flags not zeroed
+kUSBAbortedError = -6982 #Pipe aborted
+kUSBNoBandwidthError = -6981 #Not enough bandwidth available
+kUSBPipeIdleError = -6980 #Pipe is Idle, it will not accept transactions
+kUSBPipeStalledError = -6979 #Pipe has stalled, error needs to be cleared
+kUSBUnknownInterfaceErr = -6978 #Interface ref not recognised
+kUSBDeviceBusy = -6977 #Device is already being configured
+kUSBDevicePowerProblem = -6976 #Device has a power problem
+kUSBInvalidBuffer = -6975 #bad buffer, usually nil
+kUSBDeviceSuspended = -6974 #Device is suspended
+kUSBDeviceNotSuspended = -6973 #device is not suspended for resume
+kUSBDeviceDisconnected = -6972 #Disconnected during suspend or reset
+kUSBTimedOut = -6971 #Transaction timed out.
+kUSBQueueAborted = -6970 #Pipe zero stall cleared.
+kUSBPortDisabled = -6969 #The port you are attached to is disabled, use USBDeviceReset.
+kUSBBadDispatchTable = -6950 #Improper driver dispatch table
+kUSBUnknownNotification = -6949 #Notification type not defined
+kUSBQueueFull = -6948 #Internal queue maxxed
+kUSBLinkErr = -6916 #kUSBLinkErr
+kUSBCRCErr = -6915 #Pipe stall, bad CRC
+kUSBBitstufErr = -6914 #Pipe stall, bitstuffing
+kUSBDataToggleErr = -6913 #Pipe stall, Bad data toggle
+kUSBEndpointStallErr = -6912 #Device didn't understand
+kUSBNotRespondingErr = -6911 #Pipe stall, No device, device hung
+kUSBPIDCheckErr = -6910 #Pipe stall, PID CRC error
+kUSBWrongPIDErr = -6909 #Pipe stall, Bad or wrong PID
+kUSBOverRunErr = -6908 #Packet too large or more data than buffer
+kUSBUnderRunErr = -6907 #Less data than buffer
+kUSBRes1Err = -6906 #kUSBRes1Err
+kUSBRes2Err = -6905 #kUSBRes2Err
+kUSBBufOvrRunErr = -6904 #Host hardware failure on data in, PCI busy?
+kUSBBufUnderRunErr = -6903 #Host hardware failure on data out, PCI busy?
+kUSBNotSent1Err = -6902 #Transaction not sent
+kUSBNotSent2Err = -6901 #Transaction not sent
+kDMFoundErr = -6232 #Did not proceed because we found an item
+kDMMainDisplayCannotMoveErr = -6231 #Trying to move main display (or a display mirrored to it)
+kDMDisplayAlreadyInstalledErr = -6230 #Attempt to add an already installed display.
+kDMDisplayNotFoundErr = -6229 #Could not find item (will someday remove).
+kDMDriverNotDisplayMgrAwareErr = -6228 #Video Driver does not support display manager.
+kDMSWNotInitializedErr = -6227 #Required software not initialized (eg windowmanager or display mgr).
+kSysSWTooOld = -6226 #Missing critical pieces of System Software.
+kDMMirroringNotOn = -6225 #Returned by all calls that need mirroring to be on to do their thing.
+kDMCantBlock = -6224 #Mirroring is already on, canÕt Block now (call DMUnMirror() first).
+kDMMirroringBlocked = -6223 #DMBlockMirroring() has been called.
+kDMWrongNumberOfDisplays = -6222 #Can only handle 2 displays for now.
+kDMMirroringOnAlready = -6221 #Returned by all calls that need mirroring to be off to do their thing.
+kDMGenErr = -6220 #Unexpected Error
+kQTSSUnknownErr = -6150 #kQTSSUnknownErr
+collectionVersionErr = -5753 #collectionVersionErr
+collectionIndexRangeErr = -5752 #collectionIndexRangeErr
+collectionItemNotFoundErr = -5751 #collectionItemNotFoundErr
+collectionItemLockedErr = -5750 #collectionItemLockedErr
+kNavMissingKindStringErr = -5699 #kNavMissingKindStringErr
+kNavInvalidCustomControlMessageErr = -5698 #kNavInvalidCustomControlMessageErr
+kNavCustomControlMessageFailedErr = -5697 #kNavCustomControlMessageFailedErr
+kNavInvalidSystemConfigErr = -5696 #kNavInvalidSystemConfigErr
+kNavWrongDialogClassErr = -5695 #kNavWrongDialogClassErr
+kNavWrongDialogStateErr = -5694 #kNavWrongDialogStateErr
+dialogNoTimeoutErr = -5640 #dialogNoTimeoutErr
+menuInvalidErr = -5623 #menu is invalid
+menuItemNotFoundErr = -5622 #specified menu item wasn't found
+menuUsesSystemDefErr = -5621 #GetMenuDefinition failed because the menu uses the system MDEF
+menuNotFoundErr = -5620 #specified menu or menu ID wasn't found
+windowWrongStateErr = -5615 #window is not in a state that is valid for the current action
+windowManagerInternalErr = -5614 #something really weird happened inside the window manager
+windowAttributesConflictErr = -5613 #passed some attributes that are mutually exclusive
+windowAttributeImmutableErr = -5612 #tried to change attributes which can't be changed
+errWindowDoesNotFitOnscreen = -5611 #ConstrainWindowToScreen could not make the window fit onscreen
+errWindowNotFound = -5610 #returned from FindWindowOfClass
+errFloatingWindowsNotInitialized = -5609 #called HideFloatingWindows or ShowFloatingWindows without calling InitFloatingWindows
+errWindowsAlreadyInitialized = -5608 #tried to call InitFloatingWindows twice, or called InitWindows and then floating windows
+errUserWantsToDragWindow = -5607 #if returned from TrackWindowProxyDrag, you should call DragWindow on the window
+errCorruptWindowDescription = -5606 #tried to load a corrupt window description (size or version fields incorrect)
+errUnrecognizedWindowClass = -5605 #tried to create a window with a bad WindowClass
+errWindowPropertyNotFound = -5604 #tried to get a nonexistent property
+errInvalidWindowProperty = -5603 #tried to access a property tag with private creator
+errWindowDoesNotHaveProxy = -5602 #tried to do something requiring a proxy to a window which doesnÕt have a proxy
+errUnsupportedWindowAttributesForClass = -5601 #tried to create a window with WindowAttributes not supported by the WindowClass
+errInvalidWindowPtr = -5600 #tried to pass a bad WindowRef argument
+gestaltLocationErr = -5553 #gestalt function ptr wasn't in sysheap
+gestaltDupSelectorErr = -5552 #tried to add an entry that already existed
+gestaltUndefSelectorErr = -5551 #undefined selector was passed to Gestalt
+gestaltUnknownErr = -5550 #value returned if Gestalt doesn't know the answer
+envVersTooBig = -5502 #Version bigger than call can handle
+envBadVers = -5501 #Version non-positive
+envNotPresent = -5500 #returned by glue.
+qtsAddressBusyErr = -5421 #qtsAddressBusyErr
+qtsConnectionFailedErr = -5420 #qtsConnectionFailedErr
+qtsTimeoutErr = -5408 #qtsTimeoutErr
+qtsUnknownValueErr = -5407 #qtsUnknownValueErr
+qtsTooMuchDataErr = -5406 #qtsTooMuchDataErr
+qtsUnsupportedFeatureErr = -5405 #qtsUnsupportedFeatureErr
+qtsUnsupportedRateErr = -5404 #qtsUnsupportedRateErr
+qtsUnsupportedDataTypeErr = -5403 #qtsUnsupportedDataTypeErr
+qtsBadDataErr = -5402 #something is wrong with the data
+qtsBadStateErr = -5401 #qtsBadStateErr
+qtsBadSelectorErr = -5400 #qtsBadSelectorErr
+errIAEndOfTextRun = -5388 #errIAEndOfTextRun
+errIATextExtractionErr = -5387 #errIATextExtractionErr
+errIAInvalidDocument = -5386 #errIAInvalidDocument
+errIACanceled = -5385 #errIACanceled
+errIABufferTooSmall = -5384 #errIABufferTooSmall
+errIANoMoreItems = -5383 #errIANoMoreItems
+errIAParamErr = -5382 #errIAParamErr
+errIAAllocationErr = -5381 #errIAAllocationErr
+errIAUnknownErr = -5380 #errIAUnknownErr
+hrURLNotHandledErr = -5363 #hrURLNotHandledErr
+hrUnableToResizeHandleErr = -5362 #hrUnableToResizeHandleErr
+hrMiscellaneousExceptionErr = -5361 #hrMiscellaneousExceptionErr
+hrHTMLRenderingLibNotInstalledErr = -5360 #hrHTMLRenderingLibNotInstalledErr
+errCannotUndo = -5253 #errCannotUndo
+errNonContiuousAttribute = -5252 #errNonContiuousAttribute
+errUnknownElement = -5251 #errUnknownElement
+errReadOnlyText = -5250 #errReadOnlyText
+errEmptyScrap = -5249 #errEmptyScrap
+errNoHiliteText = -5248 #errNoHiliteText
+errOffsetNotOnElementBounday = -5247 #errOffsetNotOnElementBounday
+errInvalidRange = -5246 #errInvalidRange
+errIteratorReachedEnd = -5245 #errIteratorReachedEnd
+errEngineNotFound = -5244 #errEngineNotFound
+errAlreadyInImagingMode = -5243 #errAlreadyInImagingMode
+errNotInImagingMode = -5242 #errNotInImagingMode
+errMarginWilllNotFit = -5241 #errMarginWilllNotFit
+errUnknownAttributeTag = -5240 #errUnknownAttributeTag
+afpSameNodeErr = -5063 #An Attempt was made to connect to a file server running on the same machine
+afpAlreadyMounted = -5062 #The volume is already mounted
+afpCantMountMoreSrvre = -5061 #The Maximum number of server connections has been reached
+afpBadDirIDType = -5060 #afpBadDirIDType
+afpCallNotAllowed = -5048 #The server knows what you wanted to do, but won't let you do it just now
+afpAlreadyLoggedInErr = -5047 #User has been authenticated but is already logged in from another machine (and that's not allowed on this server)
+afpPwdPolicyErr = -5046 #Password does not conform to servers password policy
+afpPwdNeedsChangeErr = -5045 #The password needs to be changed
+afpInsideTrashErr = -5044 #The folder being shared is inside the trash folder OR the shared folder is being moved into the trash folder
+afpInsideSharedErr = -5043 #The folder being shared is inside a shared folder OR the folder contains a shared folder and is being moved into a shared folder
+afpPwdExpiredErr = -5042 #The password being used is too old: this requires the user to change the password before log-in can continue
+afpPwdTooShortErr = -5041 #The password being set is too short: there is a minimum length that must be met or exceeded
+afpPwdSameErr = -5040 #Someone tried to change their password to the same password on a mantadory password change
+afpBadIDErr = -5039 #afpBadIDErr
+afpSameObjectErr = -5038 #afpSameObjectErr
+afpCatalogChanged = -5037 #afpCatalogChanged
+afpDiffVolErr = -5036 #afpDiffVolErr
+afpIDExists = -5035 #afpIDExists
+afpIDNotFound = -5034 #afpIDNotFound
+afpContainsSharedErr = -5033 #the folder being shared contains a shared folder
+afpObjectLocked = -5032 #Object is M/R/D/W inhibited
+afpVolLocked = -5031 #Volume is Read-Only
+afpIconTypeError = -5030 #Icon size specified different from existing icon size
+afpDirNotFound = -5029 #Unknown directory specified
+afpCantRename = -5028 #AFPRename cannot rename volume
+afpServerGoingDown = -5027 #Server is shutting down
+afpTooManyFilesOpen = -5026 #Maximum open file count reached
+afpObjectTypeErr = -5025 #File/Directory specified where Directory/File expected
+afpCallNotSupported = -5024 #Unsupported AFP call was made
+afpUserNotAuth = -5023 #No AFPLogin call has successfully been made for this session
+afpSessClosed = -5022 #Session closed
+afpRangeOverlap = -5021 #Some or all of range already locked by same user
+afpRangeNotLocked = -5020 #Tried to unlock range that was not locked by user
+afpParmErr = -5019 #A specified parameter was out of allowable range
+afpObjectNotFound = -5018 #Specified file or directory does not exist
+afpObjectExists = -5017 #Specified destination file or directory already exists
+afpNoServer = -5016 #Server not responding
+afpNoMoreLocks = -5015 #Maximum lock limit reached
+afpMiscErr = -5014 #Unexpected error encountered during execution
+afpLockErr = -5013 #Some or all of requested range is locked by another user
+afpItemNotFound = -5012 #Unknown UserName/UserID or missing comment/APPL entry
+afpFlatVol = -5011 #Cannot create directory on specified volume
+afpFileBusy = -5010 #Cannot delete an open file
+afpEofError = -5009 #Read beyond logical end-of-file
+afpDiskFull = -5008 #Insufficient free space on volume for operation
+afpDirNotEmpty = -5007 #Cannot delete non-empty directory
+afpDenyConflict = -5006 #Specified open/deny modes conflict with current open modes
+afpCantMove = -5005 #Move destination is offspring of source, or root was specified
+afpBitmapErr = -5004 #Bitmap contained bits undefined for call
+afpBadVersNum = -5003 #Unknown AFP protocol version number specified
+afpBadUAM = -5002 #Unknown user authentication method specified
+afpAuthContinue = -5001 #Further information required to complete AFPLogin call
+afpAccessDenied = -5000 #Insufficient access privileges for operation
+illegalScrapFlavorSizeErr = -4999 #illegalScrapFlavorSizeErr
+illegalScrapFlavorTypeErr = -4998 #illegalScrapFlavorTypeErr
+illegalScrapFlavorFlagsErr = -4997 #illegalScrapFlavorFlagsErr
+scrapFlavorSizeMismatchErr = -4996 #scrapFlavorSizeMismatchErr
+scrapFlavorFlagsMismatchErr = -4995 #scrapFlavorFlagsMismatchErr
+nilScrapFlavorDataErr = -4994 #nilScrapFlavorDataErr
+noScrapPromiseKeeperErr = -4993 #noScrapPromiseKeeperErr
+scrapPromiseNotKeptErr = -4992 #scrapPromiseNotKeptErr
+processStateIncorrectErr = -4991 #processStateIncorrectErr
+badScrapRefErr = -4990 #badScrapRefErr
+duplicateScrapFlavorErr = -4989 #duplicateScrapFlavorErr
+internalScrapErr = -4988 #internalScrapErr
+coreFoundationUnknownErr = -4960 #coreFoundationUnknownErr
+badRoutingSizeErr = -4276 #badRoutingSizeErr
+routingNotFoundErr = -4275 #routingNotFoundErr
+duplicateRoutingErr = -4274 #duplicateRoutingErr
+invalidFolderTypeErr = -4273 #invalidFolderTypeErr
+noMoreFolderDescErr = -4272 #noMoreFolderDescErr
+duplicateFolderDescErr = -4271 #duplicateFolderDescErr
+badFolderDescErr = -4270 #badFolderDescErr
+cmCantGamutCheckError = -4217 #Gammut checking not supported by this ColorWorld
+cmNamedColorNotFound = -4216 #NamedColor not found
+cmCantCopyModifiedV1Profile = -4215 #Illegal to copy version 1 profiles that have been modified
+cmRangeOverFlow = -4214 #Color conversion warning that some output color values over/underflowed and were clipped
+cmInvalidProfileComment = -4213 #Bad Profile comment during drawpicture
+cmNoGDevicesError = -4212 #Begin/End Matching -- no gdevices available
+cmInvalidDstMap = -4211 #Destination pix/bit map was invalid
+cmInvalidSrcMap = -4210 #Source pix/bit map was invalid
+cmInvalidColorSpace = -4209 #Profile colorspace does not match bitmap type
+cmErrIncompatibleProfile = -4208 #Other ColorSync Errors
+cmSearchError = -4207 #cmSearchError
+cmInvalidSearch = -4206 #Bad Search Handle
+cmInvalidProfileLocation = -4205 #Operation not supported for this profile location
+cmInvalidProfile = -4204 #A Profile must contain a 'cs1 ' tag to be valid
+cmFatalProfileErr = -4203 #cmFatalProfileErr
+cmCantDeleteElement = -4202 #cmCantDeleteElement
+cmIndexRangeErr = -4201 #Tag index out of range
+kNSLInitializationFailed = -4200 #UNABLE TO INITIALIZE THE MANAGER!!!!! DO NOT CONTINUE!!!!
+kNSLNotInitialized = -4199 #kNSLNotInitialized
+kNSLInsufficientSysVer = -4198 #kNSLInsufficientSysVer
+kNSLInsufficientOTVer = -4197 #kNSLInsufficientOTVer
+kNSLNoElementsInList = -4196 #kNSLNoElementsInList
+kNSLBadReferenceErr = -4195 #kNSLBadReferenceErr
+kNSLBadServiceTypeErr = -4194 #kNSLBadServiceTypeErr
+kNSLBadDataTypeErr = -4193 #kNSLBadDataTypeErr
+kNSLBadNetConnection = -4192 #kNSLBadNetConnection
+kNSLNoSupportForService = -4191 #kNSLNoSupportForService
+kNSLInvalidPluginSpec = -4190 #kNSLInvalidPluginSpec
+kNSLRequestBufferAlreadyInList = -4189 #kNSLRequestBufferAlreadyInList
+kNSLNoContextAvailable = -4188 #(ContinueLookup function ptr invalid)
+kNSLBufferTooSmallForData = -4187 #(Client buffer too small for data from plugin)
+kNSLCannotContinueLookup = -4186 #(Can't continue lookup; error or bad state)
+kNSLBadClientInfoPtr = -4185 #(nil ClientAsyncInfoPtr; no reference available)
+kNSLNullListPtr = -4184 #(client is trying to add items to a nil list)
+kNSLBadProtocolTypeErr = -4183 #(client is trying to add a null protocol type)
+kNSLPluginLoadFailed = -4182 #(manager unable to load one of the plugins)
+kNSLNoPluginsFound = -4181 #(manager didn't find any valid plugins to load)
+kNSLSearchAlreadyInProgress = -4180 #(you can only have one ongoing search per clientRef)
+kNSLNoPluginsForSearch = -4179 #(no plugins will respond to search request; bad protocol(s)?)
+kNSLNullNeighborhoodPtr = -4178 #(client passed a null neighborhood ptr)
+kNSLSomePluginsFailedToLoad = -4177 #(one or more plugins failed to load, but at least one did load; this error isn't fatal)
+kNSLErrNullPtrError = -4176 #kNSLErrNullPtrError
+kNSLNotImplementedYet = -4175 #kNSLNotImplementedYet
+kNSLUILibraryNotAvailable = -4174 #The NSL UI Library needs to be in the Extensions Folder
+kNSLNoCarbonLib = -4173 #kNSLNoCarbonLib
+kNSLBadURLSyntax = -4172 #URL contains illegal characters
+kNSLSchedulerError = -4171 #A custom thread routine encountered an error
+kNSL68kContextNotSupported = -4170 #no 68k allowed
+noHelpForItem = -4009 #noHelpForItem
+badProfileError = -4008 #badProfileError
+colorSyncNotInstalled = -4007 #colorSyncNotInstalled
+pickerCantLive = -4006 #pickerCantLive
+cantLoadPackage = -4005 #cantLoadPackage
+cantCreatePickerWindow = -4004 #cantCreatePickerWindow
+cantLoadPicker = -4003 #cantLoadPicker
+pickerResourceError = -4002 #pickerResourceError
+requiredFlagsDontMatch = -4001 #requiredFlagsDontMatch
+firstPickerError = -4000 #firstPickerError
+kOTPortLostConnection = -3285 #
+kOTUserRequestedErr = -3284 #
+kOTConfigurationChangedErr = -3283 #
+kOTBadConfigurationErr = -3282 #
+kOTPortWasEjectedErr = -3281 #
+kOTPortHasDiedErr = -3280 #
+kOTClientNotInittedErr = -3279 #
+kENOMSGErr = -3278 #
+kESRCHErr = -3277 #
+kEINPROGRESSErr = -3276 #
+kENODATAErr = -3275 #
+kENOSTRErr = -3274 #
+kECANCELErr = -3273 #
+kEBADMSGErr = -3272 #
+kENOSRErr = -3271 #
+kETIMEErr = -3270 #
+kEPROTOErr = -3269 #‚‚‚ fill out missing codes ‚‚‚
+kEHOSTUNREACHErr = -3264 #No route to host
+kEHOSTDOWNErr = -3263 #Host is down
+kECONNREFUSEDErr = -3260 #Connection refused
+kETIMEDOUTErr = -3259 #Connection timed out
+kETOOMANYREFSErr = -3258 #Too many references: can't splice
+kESHUTDOWNErr = -3257 #Can't send after socket shutdown
+kENOTCONNErr = -3256 #Socket is not connected
+kEISCONNErr = -3255 #Socket is already connected
+kENOBUFSErr = -3254 #No buffer space available
+kECONNRESETErr = -3253 #Connection reset by peer
+kECONNABORTEDErr = -3252 #Software caused connection abort
+kENETRESETErr = -3251 #Network dropped connection on reset
+kENETUNREACHErr = -3250 #Network is unreachable
+kENETDOWNErr = -3249 #Network is down
+kEADDRNOTAVAILErr = -3248 #Can't assign requested address
+kEADDRINUSEErr = -3247 #Address already in use
+kEOPNOTSUPPErr = -3244 #Operation not supported on socket
+kESOCKTNOSUPPORTErr = -3243 #Socket type not supported
+kEPROTONOSUPPORTErr = -3242 #Protocol not supported
+kENOPROTOOPTErr = -3241 #Protocol not available
+kEPROTOTYPEErr = -3240 #Protocol wrong type for socket
+kEMSGSIZEErr = -3239 #Message too long
+kEDESTADDRREQErr = -3238 #Destination address required
+kENOTSOCKErr = -3237 #Socket operation on non-socket
+kEALREADYErr = -3236 #
+kEWOULDBLOCKErr = -3234 #Call would block, so was aborted
+kERANGEErr = -3233 #Message size too large for STREAM
+kEPIPEErr = -3231 #Broken pipe
+kENOTTYErr = -3224 #Not a character device
+kEINVALErr = -3221 #Invalid argument
+kENODEVErr = -3218 #No such device
+kOTDuplicateFoundErr = -3216 #OT generic duplicate found error
+kEBUSYErr = -3215 #Device or resource busy
+kEFAULTErr = -3213 #Bad address
+kEACCESErr = -3212 #Permission denied
+kOTOutOfMemoryErr = -3211 #OT ran out of memory, may be a temporary
+kEAGAINErr = -3210 #Try operation again later
+kEBADFErr = -3208 #Bad file number
+kENXIOErr = -3205 #No such device or address
+kEIOErr = -3204 #I/O error
+kEINTRErr = -3203 #Interrupted system service
+kENORSRCErr = -3202 #No such resource
+kOTNotFoundErr = -3201 #OT generic not found error
+kEPERMErr = -3200 #Permission denied
+kOTCanceledErr = -3180 #XTI2OSStatus(TCANCELED) The command was cancelled
+kOTBadSyncErr = -3179 #XTI2OSStatus(TBADSYNC) A synchronous call at interrupt time
+kOTProtocolErr = -3178 #XTI2OSStatus(TPROTO) An unspecified provider error occurred
+kOTQFullErr = -3177 #XTI2OSStatus(TQFULL)
+kOTResAddressErr = -3176 #XTI2OSStatus(TRESADDR)
+kOTResQLenErr = -3175 #XTI2OSStatus(TRESQLEN)
+kOTProviderMismatchErr = -3174 #XTI2OSStatus(TPROVMISMATCH) Tried to accept on incompatible endpoint
+kOTIndOutErr = -3173 #XTI2OSStatus(TINDOUT) Accept failed because of pending listen
+kOTAddressBusyErr = -3172 #XTI2OSStatus(TADDRBUSY) Address requested is already in use
+kOTBadQLenErr = -3171 #XTI2OSStatus(TBADQLEN) A Bind to an in-use addr with qlen > 0
+kOTBadNameErr = -3170 #XTI2OSStatus(TBADNAME) A bad endpoint name was supplied
+kOTNoStructureTypeErr = -3169 #XTI2OSStatus(TNOSTRUCTYPE) Bad structure type requested for OTAlloc
+kOTStateChangeErr = -3168 #XTI2OSStatus(TSTATECHNG) State is changing - try again later
+kOTNotSupportedErr = -3167 #XTI2OSStatus(TNOTSUPPORT) Command is not supported
+kOTNoReleaseErr = -3166 #XTI2OSStatus(TNOREL) No orderly release indication available
+kOTBadFlagErr = -3165 #XTI2OSStatus(TBADFLAG) A Bad flag value was supplied
+kOTNoUDErrErr = -3164 #XTI2OSStatus(TNOUDERR) No Unit Data Error indication available
+kOTNoDisconnectErr = -3163 #XTI2OSStatus(TNODIS) No disconnect indication available
+kOTNoDataErr = -3162 #XTI2OSStatus(TNODATA) No data available for reading
+kOTFlowErr = -3161 #XTI2OSStatus(TFLOW) Provider is flow-controlled
+kOTBufferOverflowErr = -3160 #XTI2OSStatus(TBUFOVFLW) Passed buffer not big enough
+kOTBadDataErr = -3159 #XTI2OSStatus(TBADDATA) An illegal amount of data was specified
+kOTLookErr = -3158 #XTI2OSStatus(TLOOK) An event occurred - call Look()
+kOTSysErrorErr = -3157 #XTI2OSStatus(TSYSERR) A system error occurred
+kOTBadSequenceErr = -3156 #XTI2OSStatus(TBADSEQ) Sequence specified does not exist
+kOTOutStateErr = -3155 #XTI2OSStatus(TOUTSTATE) Call issued in wrong state
+kOTNoAddressErr = -3154 #XTI2OSStatus(TNOADDR) No address was specified
+kOTBadReferenceErr = -3153 #XTI2OSStatus(TBADF) Bad provider reference
+kOTAccessErr = -3152 #XTI2OSStatus(TACCES) Missing access permission
+kOTBadOptionErr = -3151 #XTI2OSStatus(TBADOPT) A Bad option was specified
+kOTBadAddressErr = -3150 #XTI2OSStatus(TBADADDR) A Bad address was specified
+sktClosedErr = -3109 #sktClosedErr
+recNotFnd = -3108 #recNotFnd
+atpBadRsp = -3107 #atpBadRsp
+atpLenErr = -3106 #atpLenErr
+readQErr = -3105 #readQErr
+extractErr = -3104 #extractErr
+ckSumErr = -3103 #ckSumErr
+noMPPErr = -3102 #noMPPErr
+buf2SmallErr = -3101 #buf2SmallErr
+noPrefAppErr = -3032 #noPrefAppErr
+badTranslationSpecErr = -3031 #badTranslationSpecErr
+noTranslationPathErr = -3030 #noTranslationPathErr
+couldNotParseSourceFileErr = -3026 #Source document does not contain source type
+invalidTranslationPathErr = -3025 #Source type to destination type not a valid path
+retryComponentRegistrationErr = -3005 #retryComponentRegistrationErr
+unresolvedComponentDLLErr = -3004 #unresolvedComponentDLLErr
+componentDontRegister = -3003 #componentDontRegister
+componentNotCaptured = -3002 #componentNotCaptured
+validInstancesExist = -3001 #validInstancesExist
+invalidComponentID = -3000 #invalidComponentID
+cfragLastErrCode = -2899 #The last value in the range of CFM errors.
+cfragOutputLengthErr = -2831 #An output parameter is too small to hold the value.
+cfragAbortClosureErr = -2830 #Used by notification handlers to abort a closure.
+cfragClosureIDErr = -2829 #The closure ID was not valid.
+cfragContainerIDErr = -2828 #The fragment container ID was not valid.
+cfragNoRegistrationErr = -2827 #The registration name was not found.
+cfragNotClosureErr = -2826 #The closure ID was actually a connection ID.
+cfragFileSizeErr = -2825 #A file was too large to be mapped.
+cfragFragmentUsageErr = -2824 #A semantic error in usage of the fragment.
+cfragArchitectureErr = -2823 #A fragment has an unacceptable architecture.
+cfragNoApplicationErr = -2822 #No application member found in the cfrg resource.
+cfragInitFunctionErr = -2821 #A fragment's initialization routine returned an error.
+cfragFragmentCorruptErr = -2820 #A fragment's container was corrupt (known format).
+cfragCFMInternalErr = -2819 #An internal inconstistancy has been detected.
+cfragCFMStartupErr = -2818 #Internal error during CFM initialization.
+cfragLibConnErr = -2817 #
+cfragInitAtBootErr = -2816 #A boot library has an initialization function. (System 7 only)
+cfragInitLoopErr = -2815 #Circularity in required initialization order.
+cfragImportTooNewErr = -2814 #An import library was too new for a client.
+cfragImportTooOldErr = -2813 #An import library was too old for a client.
+cfragInitOrderErr = -2812 #
+cfragNoIDsErr = -2811 #No more CFM IDs for contexts, connections, etc.
+cfragNoClientMemErr = -2810 #Out of memory for fragment mapping or section instances.
+cfragNoPrivateMemErr = -2809 #Out of memory for internal bookkeeping.
+cfragNoPositionErr = -2808 #The registration insertion point was not found.
+cfragUnresolvedErr = -2807 #A fragment had "hard" unresolved imports.
+cfragFragmentFormatErr = -2806 #A fragment's container format is unknown.
+cfragDupRegistrationErr = -2805 #The registration name was already in use.
+cfragNoLibraryErr = -2804 #The named library was not found.
+cfragNoSectionErr = -2803 #The specified section was not found.
+cfragNoSymbolErr = -2802 #The specified symbol was not found.
+cfragConnectionIDErr = -2801 #The connection ID was not valid.
+cfragFirstErrCode = -2800 #The first value in the range of CFM errors.
+errASInconsistentNames = -2780 #English errors:
+errASNoResultReturned = -2763 #The range -2780 thru -2799 is reserved for dialect specific error codes. (Error codes from different dialects may overlap.)
+errASParameterNotForEvent = -2762 #errASParameterNotForEvent
+errASIllegalFormalParameter = -2761 #errASIllegalFormalParameter
+errASTerminologyNestingTooDeep = -2760 #errASTerminologyNestingTooDeep
+OSAControlFlowError = -2755 #Signaled when illegal control flow occurs in an application (no catcher for throw, non-lexical loop exit, etc.)
+OSAInconsistentDeclarations = -2754 #Signaled when a variable is declared inconsistently in the same scope, such as both local and global
+OSAUndefinedVariable = -2753 #Signaled when a variable is accessed that has no value
+OSADuplicateHandler = -2752 #Signaled when more than one handler is defined with the same name in a scope where the language doesn't allow it
+OSADuplicateProperty = -2751 #Signaled when a formal parameter, local variable, or instance variable is specified more than once.
+OSADuplicateParameter = -2750 #Signaled when a formal parameter, local variable, or instance variable is specified more than once
+OSATokenTooLong = -2742 #Signaled when a name or number is too long to be parsed
+OSASyntaxTypeError = -2741 #Signaled when another form of syntax was expected. (e.g. "expected a <type> but found <this>")
+OSASyntaxError = -2740 #Signaled when a syntax error occurs. (e.g. "Syntax error" or "<this> can't go after <that>")
+errASCantCompareMoreThan32k = -2721 #Parser/Compiler errors:
+errASCantConsiderAndIgnore = -2720 #errASCantConsiderAndIgnore
+errOSACantCreate = -2710 #errOSACantCreate
+errOSACantGetTerminology = -2709 #errOSACantGetTerminology
+errOSADataBlockTooLarge = -2708 #Signaled when an intrinsic limitation is exceeded for the size of a value or data structure.
+errOSAInternalTableOverflow = -2707 #Signaled when a runtime internal data structure overflows
+errOSAStackOverflow = -2706 #Signaled when the runtime stack overflows
+errOSACorruptTerminology = -2705 #Signaled when an application's terminology resource is not readable
+errOSAAppNotHighLevelEventAware = -2704 #Signaled when an application can't respond to AppleEvents
+errOSACantLaunch = -2703 #Signaled when application can't be launched or when it is remote and program linking is not enabled
+errOSANumericOverflow = -2702 #Signaled when integer or real value is too large to be represented
+errOSADivideByZero = -2701 #Signaled when there is an attempt to divide by zero
+errOSAGeneralError = -2700 #Signaled by user scripts or applications when no actual error code is to be returned.
+noIconDataAvailableErr = -2582 #The necessary icon data is not available
+noSuchIconErr = -2581 #The requested icon could not be found
+invalidIconRefErr = -2580 #The icon ref is not valid
+nrCallNotSupported = -2557 #This call is not available or supported on this machine
+nrTransactionAborted = -2556 #transaction was aborted
+nrExitedIteratorScope = -2555 #outer scope of iterator was exited
+nrIterationDone = -2554 #iteration operation is done
+nrPropertyAlreadyExists = -2553 #property already exists
+nrInvalidEntryIterationOp = -2552 #invalid entry iteration operation
+nrPathBufferTooSmall = -2551 #buffer for path is too small
+nrPathNotFound = -2550 #a path component lookup failed
+nrResultCodeBase = -2549 #nrResultCodeBase
+nrOverrunErr = -2548 #nrOverrunErr
+nrNotModifiedErr = -2547 #nrNotModifiedErr
+nrTypeMismatchErr = -2546 #nrTypeMismatchErr
+nrPowerSwitchAbortErr = -2545 #nrPowerSwitchAbortErr
+nrPowerErr = -2544 #nrPowerErr
+nrDataTruncatedErr = -2543 #nrDataTruncatedErr
+nrNotSlotDeviceErr = -2542 #nrNotSlotDeviceErr
+nrNameErr = -2541 #nrNameErr
+nrNotCreatedErr = -2540 #nrNotCreatedErr
+nrNotFoundErr = -2539 #nrNotFoundErr
+nrInvalidNodeErr = -2538 #nrInvalidNodeErr
+nrNotEnoughMemoryErr = -2537 #nrNotEnoughMemoryErr
+nrLockedErr = -2536 #nrLockedErr
+mmInternalError = -2526 #mmInternalError
+tsmDefaultIsNotInputMethodErr = -2524 #Current Input source is KCHR or uchr, not Input Method (GetDefaultInputMethod)
+tsmNoStem = -2523 #No stem exists for the token
+tsmNoMoreTokens = -2522 #No more tokens are available for the source text
+tsmNoHandler = -2521 #No Callback Handler exists for callback
+tsmInvalidContext = -2520 #Invalid TSMContext specified in call
+tsmUnknownErr = -2519 #any other errors
+tsmUnsupportedTypeErr = -2518 #unSupported interface type error
+tsmScriptHasNoIMErr = -2517 #script has no imput method or is using old IM
+tsmInputMethodIsOldErr = -2516 #returned by GetDefaultInputMethod
+tsmComponentAlreadyOpenErr = -2515 #text service already opened for the document
+tsmTSNotOpenErr = -2514 #text service is not open
+tsmTSHasNoMenuErr = -2513 #the text service has no menu
+tsmUseInputWindowErr = -2512 #not TSM aware because we are using input window
+tsmDocumentOpenErr = -2511 #there are open documents
+tsmTextServiceNotFoundErr = -2510 #no text service found
+tsmCantOpenComponentErr = -2509 #canÕt open the component
+tsmNoOpenTSErr = -2508 #no open text service
+tsmDocNotActiveErr = -2507 #document is NOT active
+tsmTSMDocBusyErr = -2506 #document is still active
+tsmInvalidDocIDErr = -2505 #invalid TSM documentation id
+tsmNeverRegisteredErr = -2504 #app never registered error (not TSM aware)
+tsmAlreadyRegisteredErr = -2503 #want to register again error
+tsmNotAnAppErr = -2502 #not an application error
+tsmInputMethodNotFoundErr = -2501 #tsmInputMethodNotFoundErr
+tsmUnsupScriptLanguageErr = -2500 #tsmUnsupScriptLanguageErr
+kernelUnrecoverableErr = -2499 #kernelUnrecoverableErr
+kernelReturnValueErr = -2422 #kernelReturnValueErr
+kernelAlreadyFreeErr = -2421 #kernelAlreadyFreeErr
+kernelIDErr = -2419 #kernelIDErr
+kernelExceptionErr = -2418 #kernelExceptionErr
+kernelTerminatedErr = -2417 #kernelTerminatedErr
+kernelInUseErr = -2416 #kernelInUseErr
+kernelTimeoutErr = -2415 #kernelTimeoutErr
+kernelAsyncReceiveLimitErr = -2414 #kernelAsyncReceiveLimitErr
+kernelAsyncSendLimitErr = -2413 #kernelAsyncSendLimitErr
+kernelAttributeErr = -2412 #kernelAttributeErr
+kernelExecutionLevelErr = -2411 #kernelExecutionLevelErr
+kernelDeletePermissionErr = -2410 #kernelDeletePermissionErr
+kernelExecutePermissionErr = -2409 #kernelExecutePermissionErr
+kernelReadPermissionErr = -2408 #kernelReadPermissionErr
+kernelWritePermissionErr = -2407 #kernelWritePermissionErr
+kernelObjectExistsErr = -2406 #kernelObjectExistsErr
+kernelUnsupportedErr = -2405 #kernelUnsupportedErr
+kernelPrivilegeErr = -2404 #kernelPrivilegeErr
+kernelOptionsErr = -2403 #kernelOptionsErr
+kernelCanceledErr = -2402 #kernelCanceledErr
+kernelIncompleteErr = -2401 #kernelIncompleteErr
+badCallOrderErr = -2209 #Usually due to a status call being called prior to being setup first
+noDMAErr = -2208 #CanÕt do DMA digitizing (i.e. can't go to requested dest
+badDepthErr = -2207 #CanÕt digitize into this depth
+notExactSizeErr = -2206 #CanÕt do exact size requested
+noMoreKeyColorsErr = -2205 #all key indexes in use
+notExactMatrixErr = -2204 #warning of bad matrix, digitizer did its best
+matrixErr = -2203 #bad matrix, digitizer did nothing
+qtParamErr = -2202 #bad input parameter (out of range, etc)
+digiUnimpErr = -2201 #feature unimplemented
+qtXMLApplicationErr = -2159 #qtXMLApplicationErr
+qtXMLParseErr = -2158 #qtXMLParseErr
+qtActionNotHandledErr = -2157 #qtActionNotHandledErr
+notEnoughDataErr = -2149 #notEnoughDataErr
+urlDataHFTPURLErr = -2148 #urlDataHFTPURLErr
+urlDataHFTPServerDisconnectedErr = -2147 #urlDataHFTPServerDisconnectedErr
+urlDataHFTPNoPasswordErr = -2146 #urlDataHFTPNoPasswordErr
+urlDataHFTPNeedPasswordErr = -2145 #urlDataHFTPNeedPasswordErr
+urlDataHFTPBadNameListErr = -2144 #urlDataHFTPBadNameListErr
+urlDataHFTPNoNetDriverErr = -2143 #urlDataHFTPNoNetDriverErr
+urlDataHFTPFilenameErr = -2142 #urlDataHFTPFilenameErr
+urlDataHFTPPermissionsErr = -2141 #urlDataHFTPPermissionsErr
+urlDataHFTPQuotaErr = -2140 #urlDataHFTPQuotaErr
+urlDataHFTPNoDirectoryErr = -2139 #urlDataHFTPNoDirectoryErr
+urlDataHFTPDataConnectionErr = -2138 #urlDataHFTPDataConnectionErr
+urlDataHFTPServerErr = -2137 #urlDataHFTPServerErr
+urlDataHFTPBadPasswordErr = -2136 #urlDataHFTPBadPasswordErr
+urlDataHFTPBadUserErr = -2135 #urlDataHFTPBadUserErr
+urlDataHFTPShutdownErr = -2134 #urlDataHFTPShutdownErr
+urlDataHFTPProtocolErr = -2133 #urlDataHFTPProtocolErr
+urlDataHHTTPRedirectErr = -2132 #urlDataHHTTPRedirectErr
+urlDataHHTTPURLErr = -2131 #urlDataHHTTPURLErr
+urlDataHHTTPNoNetDriverErr = -2130 #urlDataHHTTPNoNetDriverErr
+urlDataHHTTPProtocolErr = -2129 #urlDataHHTTPProtocolErr
+qtNetworkAlreadyAllocatedErr = -2127 #qtNetworkAlreadyAllocatedErr
+notAllowedToSaveMovieErr = -2126 #notAllowedToSaveMovieErr
+fileOffsetTooBigErr = -2125 #fileOffsetTooBigErr
+ASDEntryNotFoundErr = -2124 #ASDEntryNotFoundErr
+ASDBadForkErr = -2123 #ASDBadForkErr
+ASDBadHeaderErr = -2122 #ASDBadHeaderErr
+AAPNotFoundErr = -2121 #AAPNotFoundErr
+AAPNotCreatedErr = -2120 #AAPNotCreatedErr
+qfcbNotCreatedErr = -2119 #qfcbNotCreatedErr
+qfcbNotFoundErr = -2118 #qfcbNotFoundErr
+wackBadMetaDataErr = -2117 #wackBadMetaDataErr
+wackForkNotFoundErr = -2116 #wackForkNotFoundErr
+wackBadFileErr = -2115 #wackBadFileErr
+unknownFormatErr = -2114 #unknownFormatErr
+pathNotVerifiedErr = -2113 #pathNotVerifiedErr
+noPathMappingErr = -2112 #noPathMappingErr
+emptyPathErr = -2111 #emptyPathErr
+pathTooLongErr = -2110 #pathTooLongErr
+cannotBeLeafAtomErr = -2109 #cannotBeLeafAtomErr
+invalidAtomTypeErr = -2108 #invalidAtomTypeErr
+invalidAtomContainerErr = -2107 #invalidAtomContainerErr
+invalidAtomErr = -2106 #invalidAtomErr
+duplicateAtomTypeAndIDErr = -2105 #duplicateAtomTypeAndIDErr
+atomIndexInvalidErr = -2104 #atomIndexInvalidErr
+atomsNotOfSameTypeErr = -2103 #atomsNotOfSameTypeErr
+notLeafAtomErr = -2102 #notLeafAtomErr
+cannotFindAtomErr = -2101 #cannotFindAtomErr
+unsupportedProcessorErr = -2097 #unsupportedProcessorErr
+unsupportedOSErr = -2096 #unsupportedOSErr
+qtmlUninitialized = -2095 #qtmlUninitialized
+qtmlDllEntryNotFoundErr = -2094 #Windows specific errors (when qtml is loading)
+qtmlDllLoadErr = -2093 #Windows specific errors (when qtml is loading)
+componentDllEntryNotFoundErr = -2092 #Windows specific errors (when component is loading)
+componentDllLoadErr = -2091 #Windows specific errors (when component is loading)
+videoOutputInUseErr = -2090 #videoOutputInUseErr
+noExportProcAvailableErr = -2089 #noExportProcAvailableErr
+tuneParseOSErr = -2087 #tuneParseOSErr
+tunePlayerFullOSErr = -2086 #tunePlayerFullOSErr
+noteChannelNotAllocatedOSErr = -2085 #noteChannelNotAllocatedOSErr
+illegalNoteChannelOSErr = -2084 #illegalNoteChannelOSErr
+synthesizerOSErr = -2083 #synthesizerOSErr
+synthesizerNotRespondingOSErr = -2082 #synthesizerNotRespondingOSErr
+midiManagerAbsentOSErr = -2081 #midiManagerAbsentOSErr
+illegalControllerOSErr = -2080 #illegalControllerOSErr
+illegalInstrumentOSErr = -2079 #illegalInstrumentOSErr
+illegalKnobValueOSErr = -2078 #illegalKnobValueOSErr
+illegalKnobOSErr = -2077 #illegalKnobOSErr
+illegalChannelOSErr = -2076 #illegalChannelOSErr
+illegalPartOSErr = -2075 #illegalPartOSErr
+illegalVoiceAllocationOSErr = -2074 #illegalVoiceAllocationOSErr
+cantReceiveFromSynthesizerOSErr = -2073 #cantReceiveFromSynthesizerOSErr
+cantSendToSynthesizerOSErr = -2072 #cantSendToSynthesizerOSErr
+notImplementedMusicOSErr = -2071 #notImplementedMusicOSErr
+internalComponentErr = -2070 #internalComponentErr
+invalidSpriteIDErr = -2069 #invalidSpriteIDErr
+invalidImageIndexErr = -2068 #invalidImageIndexErr
+invalidSpriteIndexErr = -2067 #invalidSpriteIndexErr
+gWorldsNotSameDepthAndSizeErr = -2066 #gWorldsNotSameDepthAndSizeErr
+invalidSpritePropertyErr = -2065 #invalidSpritePropertyErr
+invalidSpriteWorldPropertyErr = -2064 #invalidSpriteWorldPropertyErr
+missingRequiredParameterErr = -2063 #missingRequiredParameterErr
+movieTextNotFoundErr = -2062 #movieTextNotFoundErr
+sourceNotFoundErr = -2061 #sourceNotFoundErr
+noSourceTreeFoundErr = -2060 #noSourceTreeFoundErr
+samplesAlreadyInMediaErr = -2059 #samplesAlreadyInMediaErr
+auxiliaryExportDataUnavailable = -2058 #auxiliaryExportDataUnavailable
+unsupportedAuxiliaryImportData = -2057 #unsupportedAuxiliaryImportData
+soundSupportNotAvailableErr = -2056 #QT for Windows error
+noSoundTrackInMovieErr = -2055 #QT for Windows error
+noVideoTrackInMovieErr = -2054 #QT for Windows error
+featureUnsupported = -2053 #featureUnsupported
+couldNotUseAnExistingSample = -2052 #couldNotUseAnExistingSample
+noDefaultDataRef = -2051 #noDefaultDataRef
+badDataRefIndex = -2050 #badDataRefIndex
+invalidDataRefContainer = -2049 #invalidDataRefContainer
+noMovieFound = -2048 #noMovieFound
+dataNoDataRef = -2047 #dataNoDataRef
+endOfDataReached = -2046 #endOfDataReached
+dataAlreadyClosed = -2045 #dataAlreadyClosed
+dataAlreadyOpenForWrite = -2044 #dataAlreadyOpenForWrite
+dataNotOpenForWrite = -2043 #dataNotOpenForWrite
+dataNotOpenForRead = -2042 #dataNotOpenForRead
+invalidSampleDescription = -2041 #invalidSampleDescription
+invalidChunkCache = -2040 #invalidChunkCache
+invalidSampleDescIndex = -2039 #invalidSampleDescIndex
+invalidChunkNum = -2038 #invalidChunkNum
+invalidSampleNum = -2037 #invalidSampleNum
+invalidRect = -2036 #invalidRect
+cantEnableTrack = -2035 #cantEnableTrack
+internalQuickTimeError = -2034 #internalQuickTimeError
+badEditIndex = -2033 #badEditIndex
+timeNotInMedia = -2032 #timeNotInMedia
+timeNotInTrack = -2031 #timeNotInTrack
+trackNotInMovie = -2030 #trackNotInMovie
+trackIDNotFound = -2029 #trackIDNotFound
+badTrackIndex = -2028 #badTrackIndex
+maxSizeToGrowTooSmall = -2027 #maxSizeToGrowTooSmall
+userDataItemNotFound = -2026 #userDataItemNotFound
+staleEditState = -2025 #staleEditState
+nonMatchingEditState = -2024 #nonMatchingEditState
+invalidEditState = -2023 #invalidEditState
+cantCreateSingleForkFile = -2022 #happens when file already exists
+wfFileNotFound = -2021 #wfFileNotFound
+movieToolboxUninitialized = -2020 #movieToolboxUninitialized
+progressProcAborted = -2019 #progressProcAborted
+mediaTypesDontMatch = -2018 #mediaTypesDontMatch
+badEditList = -2017 #badEditList
+cantPutPublicMovieAtom = -2016 #cantPutPublicMovieAtom
+invalidTime = -2015 #invalidTime
+invalidDuration = -2014 #invalidDuration
+invalidHandler = -2013 #invalidHandler
+invalidDataRef = -2012 #invalidDataRef
+invalidSampleTable = -2011 #invalidSampleTable
+invalidMovie = -2010 #invalidMovie
+invalidTrack = -2009 #invalidTrack
+invalidMedia = -2008 #invalidMedia
+noDataHandler = -2007 #noDataHandler
+noMediaHandler = -2006 #noMediaHandler
+badComponentType = -2005 #badComponentType
+cantOpenHandler = -2004 #cantOpenHandler
+cantFindHandler = -2003 #cantFindHandler
+badPublicMovieAtom = -2002 #badPublicMovieAtom
+badImageDescription = -2001 #badImageDescription
+couldNotResolveDataRef = -2000 #couldNotResolveDataRef
+nonDragOriginatorErr = -1862 #illegal attempt at originator only data
+badImageErr = -1861 #bad translucent image PixMap
+badImageRgnErr = -1860 #bad translucent image region
+noSuitableDisplaysErr = -1859 #no displays support translucency
+unsupportedForPlatformErr = -1858 #call is for PowerPC only
+dragNotAcceptedErr = -1857 #drag was not accepted by receiver
+handlerNotFoundErr = -1856 #handler not found
+duplicateHandlerErr = -1855 #handler already exists
+cantGetFlavorErr = -1854 #error while trying to get flavor data
+duplicateFlavorErr = -1853 #flavor type already exists
+badDragFlavorErr = -1852 #unknown flavor type
+badDragItemErr = -1851 #unknown drag item reference
+badDragRefErr = -1850 #unknown drag reference
+errEndOfBody = -1813 #errEndOfBody
+errEndOfDocument = -1812 #errEndOfDocument
+errTopOfBody = -1811 #errTopOfBody
+errTopOfDocument = -1810 #errTopOfDocument
+errOffsetIsOutsideOfView = -1801 #errOffsetIsOutsideOfView
+errOffsetInvalid = -1800 #errOffsetInvalid
+errOSACantOpenComponent = -1762 #Can't connect to scripting system with that ID
+errOSAComponentMismatch = -1761 #Parameters are from 2 different components
+errOSADataFormatTooNew = -1759 #errOSADataFormatTooNew
+errOSADataFormatObsolete = -1758 #errOSADataFormatObsolete
+errOSANoSuchDialect = -1757 #errOSANoSuchDialect
+errOSASourceNotAvailable = -1756 #errOSASourceNotAvailable
+errOSABadSelector = -1754 #errOSABadSelector
+errOSAScriptError = -1753 #errOSAScriptError
+errOSABadStorageType = -1752 #errOSABadStorageType
+errOSAInvalidID = -1751 #errOSAInvalidID
+errOSASystemError = -1750 #errOSASystemError
+errAEBufferTooSmall = -1741 #buffer for AEFlattenDesc too small
+errAEBuildSyntaxError = -1740 #AEBuildDesc and friends detected a syntax error
+errAEDescIsNull = -1739 #attempting to perform an invalid operation on a null descriptor
+errAEStreamAlreadyConverted = -1738 #attempt to convert a stream that has already been converted
+errAEStreamBadNesting = -1737 #nesting violation while streaming
+errAEDuplicateHandler = -1736 #attempt to install handler in table for identical class and id (1.1 or greater)
+errAEEventFiltered = -1735 #event has been filtered, and should not be propogated (1.1 or greater)
+errAEReceiveEscapeCurrent = -1734 #break out of only lowest level of AEReceive (1.1 or greater)
+errAEReceiveTerminate = -1733 #break out of all levels of AEReceive to the topmost (1.1 or greater)
+errAERecordingIsAlreadyOn = -1732 #available only in version 1.0.1 or greater
+errAEUnknownObjectType = -1731 #available only in version 1.0.1 or greater
+errAEEmptyListContainer = -1730 #Attempt to pass empty list as container to accessor
+errAENegativeCount = -1729 #CountProc returned negative value
+errAENoSuchObject = -1728 #e.g.,: specifier asked for the 3rd, but there are only 2. Basically, this indicates a run-time resolution error.
+errAENotAnObjSpec = -1727 #Param to AEResolve not of type 'obj '
+errAEBadTestKey = -1726 #Test is neither typeLogicalDescriptor nor typeCompDescriptor
+errAENoSuchLogical = -1725 #Something other than AND, OR, or NOT
+errAEAccessorNotFound = -1723 #Accessor proc matching wantClass and containerType or wildcards not found
+errAEWrongNumberArgs = -1721 #Logical op kAENOT used with other than 1 term
+errAEImpossibleRange = -1720 #A range like 3rd to 2nd, or 1st to all.
+errAEIllegalIndex = -1719 #index is out of range in a put operation
+errAEReplyNotArrived = -1718 #the contents of the reply you are accessing have not arrived yet
+errAEHandlerNotFound = -1717 #no handler in the dispatch tables fits the parameters to AEGetEventHandler or AEGetCoercionHandler
+errAEUnknownAddressType = -1716 #the target address type is not known
+errAEParamMissed = -1715 #a required parameter was not accessed
+errAENotASpecialFunction = -1714 #there is no special function for/with this keyword
+errAENoUserInteraction = -1713 #no user interaction is allowed
+errAETimeout = -1712 #the AppleEvent timed out
+errAEWaitCanceled = -1711 #in AESend, the user cancelled out of wait loop for reply or receipt
+errAEUnknownSendMode = -1710 #mode wasn't NoReply, WaitReply, or QueueReply or Interaction level is unknown
+errAEReplyNotValid = -1709 #AEResetTimer was passed an invalid reply parameter
+errAEEventNotHandled = -1708 #the AppleEvent was not handled by any handler
+errAENotAppleEvent = -1707 #the event is not in AppleEvent format
+errAENewerVersion = -1706 #need newer version of the AppleEvent manager
+errAEBadListItem = -1705 #the specified list item does not exist
+errAENotAEDesc = -1704 #errAENotAEDesc
+errAEWrongDataType = -1703 #errAEWrongDataType
+errAECorruptData = -1702 #errAECorruptData
+errAEDescNotFound = -1701 #errAEDescNotFound
+errAECoercionFail = -1700 #bad parameter data or unable to coerce the data supplied
+errFSIteratorNotSupported = -1424 #The iterator's flags or container are not supported by this call
+errFSIteratorNotFound = -1423 #Passed FSIterator is not an open iterator
+errFSBadIteratorFlags = -1422 #Flags passed to FSOpenIterator are bad
+errFSForkExists = -1421 #Named fork already exists.
+errFSRefsDifferent = -1420 #FSCompareFSRefs; refs are for different objects
+errFSBadSearchParams = -1419 #Something wrong with CatalogSearch searchParams
+errFSBadItemCount = -1418 #maximumItems was zero
+errFSNoMoreItems = -1417 #Iteration ran out of items to return
+errFSBadAllocFlags = -1413 #Invalid bits set in allocationFlags
+errFSBadPosMode = -1412 #Newline bits set in positionMode
+errFSMissingName = -1411 #A Unicode name parameter was NULL or nameLength parameter was zero
+errFSNameTooLong = -1410 #File/fork name is too long to create/rename
+errFSForkNotFound = -1409 #Named fork does not exist
+errFSNotAFolder = -1407 #Expected a folder, got a file
+errFSMissingCatInfo = -1406 #A CatalogInfo parameter was NULL
+errFSBadInfoBitmap = -1405 #A CatalogInfoBitmap or VolumeInfoBitmap has reserved or invalid bits set
+errFSBadForkRef = -1404 #A ForkRefNum parameter was bad
+errFSBadBuffer = -1403 #A buffer parameter was bad
+errFSBadForkName = -1402 #Fork name parameter is bad
+errFSBadFSRef = -1401 #FSRef parameter is bad
+errFSUnknownCall = -1400 #selector is not recognized by this filesystem
+badFCBErr = -1327 #FCBRecPtr is not valid
+volVMBusyErr = -1311 #can't eject because volume is in use by VM
+fsDataTooBigErr = -1310 #file or volume is too big for system
+fileBoundsErr = -1309 #file's EOF, offset, mark or size is too big
+notARemountErr = -1308 #when _Mount allows only remounts and doesn't get one
+badFidErr = -1307 #file id is dangling or doesn't match with the file number
+sameFileErr = -1306 #can't exchange a file with itself
+desktopDamagedErr = -1305 #desktop database files are corrupted
+catChangedErr = -1304 #the catalog has been modified
+diffVolErr = -1303 #files on different volumes
+notAFileErr = -1302 #directory specified
+fidExists = -1301 #file id already exists
+fidNotFound = -1300 #no file thread exists.
+errRefNum = -1280 #bad connection refNum
+errAborted = -1279 #control call was aborted
+errState = -1278 #bad connection state for this operation
+errOpening = -1277 #open connection request failed
+errAttention = -1276 #attention message too long
+errFwdReset = -1275 #read terminated by forward reset
+errDSPQueueSize = -1274 #DSP Read/Write Queue Too small
+errOpenDenied = -1273 #open connection request was denied
+reqAborted = -1105 #reqAborted
+noDataArea = -1104 #noDataArea
+noSendResp = -1103 #noSendResp
+cbNotFound = -1102 #cbNotFound
+noRelErr = -1101 #noRelErr
+badBuffNum = -1100 #badBuffNum
+badATPSkt = -1099 #badATPSkt
+tooManySkts = -1098 #tooManySkts
+tooManyReqs = -1097 #tooManyReqs
+reqFailed = -1096 #reqFailed
+aspNoAck = -1075 #No ack on attention request (server err)
+aspTooMany = -1074 #Too many clients (server error)
+aspSizeErr = -1073 #Command block too big
+aspSessClosed = -1072 #Session closed
+aspServerBusy = -1071 #Server cannot open another session
+aspParamErr = -1070 #Parameter error
+aspNoServers = -1069 #No servers at that address
+aspNoMoreSess = -1068 #No more sessions on server
+aspBufTooSmall = -1067 #Buffer too small
+aspBadVersNum = -1066 #Server cannot support this ASP version
+nbpNISErr = -1029 #Error trying to open the NIS
+nbpNotFound = -1028 #Name not found on remove
+nbpDuplicate = -1027 #Duplicate name exists already
+nbpConfDiff = -1026 #Name confirmed at different socket
+nbpNoConfirm = -1025 #nbpNoConfirm
+nbpBuffOvr = -1024 #Buffer overflow in LookupName
+noMaskFoundErr = -1000 #Icon Utilties Error
+kFMFontContainerAccessErr = -985 #kFMFontContainerAccessErr
+kFMFontTableAccessErr = -984 #kFMFontTableAccessErr
+kFMIterationScopeModifiedErr = -983 #kFMIterationScopeModifiedErr
+kFMInvalidFontErr = -982 #kFMInvalidFontErr
+kFMInvalidFontFamilyErr = -981 #kFMInvalidFontFamilyErr
+kFMIterationCompleted = -980 #kFMIterationCompleted
+guestNotAllowedErr = -932 #destination port requires authentication
+badLocNameErr = -931 #location name malformed
+badServiceMethodErr = -930 #illegal service type, or not supported
+noUserRecErr = -928 #Invalid user reference number
+authFailErr = -927 #unable to authenticate user at destination
+noInformErr = -926 #PPCStart failed because destination did not have inform pending
+networkErr = -925 #An error has occurred in the network, not too likely
+noUserRefErr = -924 #unable to create a new userRefNum
+notLoggedInErr = -923 #The default userRefNum does not yet exist
+noDefaultUserErr = -922 #user hasn't typed in owners name in Network Setup Control Pannel
+badPortNameErr = -919 #PPCPortRec malformed
+sessClosedErr = -917 #session was closed
+portClosedErr = -916 #port was closed
+noResponseErr = -915 #unable to contact destination
+noToolboxNameErr = -914 #A system resource is missing, not too likely
+noMachineNameErr = -913 #user hasn't named his Macintosh in the Network Setup Control Panel
+userRejectErr = -912 #Destination rejected the session request
+noUserNameErr = -911 #user name unknown on destination machine
+portNameExistsErr = -910 #port is already open (perhaps in another app)
+badReqErr = -909 #bad parameter or invalid state for operation
+noSessionErr = -908 #Invalid session reference number
+sessTableErr = -907 #Out of session tables, try again later
+destPortErr = -906 #Port does not exist at destination
+localOnlyErr = -905 #Network activity is currently disabled
+noGlobalsErr = -904 #The system is hosed, better re-boot
+noPortErr = -903 #Unable to open port or bad portRefNum. If you're calling
+nameTypeErr = -902 #Invalid or inappropriate locationKindSelector in locationName
+notInitErr = -900 #PPCToolBox not initialized
+notAppropriateForClassic = -877 #This application won't or shouldn't run on Classic (Problem 2481058).
+appVersionTooOld = -876 #The application's creator and version are incompatible with the current version of Mac OS.
+wrongApplicationPlatform = -875 #The application could not launch because the required platform is not available
+hmCloseViewActive = -863 #Returned from HMRemoveBalloon if CloseView was active
+hmNoBalloonUp = -862 #Returned from HMRemoveBalloon if no balloon was visible when call was made
+hmOperationUnsupported = -861 #Returned from HMShowBalloon call if bad method passed to routine
+hmUnknownHelpType = -859 #Returned if help msg record contained a bad type
+hmWrongVersion = -858 #Returned if help mgr resource was the wrong version
+hmSkippedBalloon = -857 #Returned from calls if helpmsg specified a skip balloon
+hmHelpManagerNotInited = -855 #Returned from HMGetHelpMenuHandle if help menu not setup
+hmSameAsLastBalloon = -854 #Returned from HMShowMenuBalloon if menu & item is same as last time
+hmBalloonAborted = -853 #Returned if mouse was moving or mouse wasn't in window port rect
+hmHelpDisabled = -850 #Show Balloons mode was off, call to routine ignored
+rcDBPackNotInited = -813 #attempt to call other routine before InitDBPack
+rcDBWrongVersion = -812 #incompatible versions
+rcDBNoHandler = -811 #no app handler for specified data type
+rcDBBadAsyncPB = -810 #tried to kill a bad pb
+rcDBAsyncNotSupp = -809 #ddev does not support async calls
+rcDBBadDDEV = -808 #bad ddev specified on DBInit
+rcDBBadSessNum = -807 #bad session number for DBGetConnInfo
+rcDBBadSessID = -806 #rcDBBadSessID
+rcDBExec = -805 #rcDBExec
+rcDBBreak = -804 #rcDBBreak
+rcDBBadType = -803 #rcDBBadType
+rcDBError = -802 #rcDBError
+rcDBValue = -801 #rcDBValue
+rcDBNull = -800 #rcDBNull
+icTooManyProfilesErr = -677 #too many profiles in database
+icProfileNotFoundErr = -676 #profile not found
+icConfigInappropriateErr = -675 #incorrect manufacturer code
+icConfigNotFoundErr = -674 #no internet configuration was found
+icNoURLErr = -673 #no URL found
+icNothingToOverrideErr = -672 #no component for the override component to capture
+icNoMoreWritersErr = -671 #you cannot begin a write session because someone else is already doing it
+icTruncatedErr = -670 #more data was present than was returned
+icInternalErr = -669 #Internet Config internal error
+icPrefDataErr = -668 #problem with preference data
+icPermErr = -667 #cannot set preference
+icPrefNotFoundErr = -666 #Internet preference not found
+vmInvalidOwningProcessErr = -648 #current process does not own the BackingFileID or FileViewID
+vmAddressNotInFileViewErr = -647 #address is not in a FileView
+vmNoMoreFileViewsErr = -646 #no more FileViews were found
+vmFileViewAccessErr = -645 #requested FileViewAccess cannot be obtained
+vmInvalidFileViewIDErr = -644 #invalid FileViewID
+vmNoMoreBackingFilesErr = -643 #no more BackingFiles were found
+vmBusyBackingFileErr = -642 #open views found on BackingFile
+vmMappingPrivilegesErr = -641 #requested MappingPrivileges cannot be obtained
+vmInvalidBackingFileIDErr = -640 #invalid BackingFileID
+noMMUErr = -626 #no MMU present
+cannotDeferErr = -625 #unable to defer additional functions
+interruptsMaskedErr = -624 #donÕt call with interrupts masked
+notLockedErr = -623 #specified range of memory is not locked
+cannotMakeContiguousErr = -622 #cannot make specified range contiguous
+notHeldErr = -621 #specified range of memory is not held
+notEnoughMemoryErr = -620 #insufficient physical memory
+threadProtocolErr = -619 #threadProtocolErr
+threadNotFoundErr = -618 #threadNotFoundErr
+threadTooManyReqsErr = -617 #threadTooManyReqsErr
+noUserInteractionAllowed = -610 #no user interaction allowed
+connectionInvalid = -609 #connectionInvalid
+noOutstandingHLE = -608 #noOutstandingHLE
+bufferIsSmall = -607 #error returns from Post and Accept
+appIsDaemon = -606 #app is BG-only, and launch flags disallow this
+appMemFullErr = -605 #application SIZE not big enough for launch
+hardwareConfigErr = -604 #hardware configuration not correct for call
+protocolErr = -603 #app made module calls in improper order
+appModeErr = -602 #memory mode is 32-bit, but app not 32-bit clean
+memFragErr = -601 #not enough room to launch app w/special requirements
+procNotFound = -600 #no eligible process with specified descriptor
+driverHardwareGoneErr = -503 #disk driver's hardware was disconnected
+hwParamErr = -502 #bad selector for _HWPriv
+teScrapSizeErr = -501 #scrap item too big for text edit record
+rgnTooBigErr = -500 #rgnTooBigErr
+exUserBreak = -492 #user debugger break; execute debugger commands on stack
+strUserBreak = -491 #user debugger break; display string on stack
+userBreak = -490 #user debugger break
+notThePublisherWrn = -463 #not the first registered publisher for that container
+containerAlreadyOpenWrn = -462 #container already opened by this section
+containerNotFoundWrn = -461 #could not find editionContainer at this time
+multiplePublisherWrn = -460 #A Publisher is already registered for that container
+badSubPartErr = -454 #can not use sub parts in this release
+badEditionFileErr = -453 #edition file is corrupt
+notRegisteredSectionErr = -452 #not a registered SectionRecord
+badSectionErr = -451 #not a valid SectionRecord
+editionMgrInitErr = -450 #edition manager not inited by this app
+fsmUnknownFSMMessageErr = -438 #unknown message passed to FSM
+fsmNoAlternateStackErr = -437 #no alternate stack for HFS CI
+fsmBadFSDVersionErr = -436 #FSM version incompatible with FSD
+fsmDuplicateFSIDErr = -435 #FSID already exists on InstallFS
+fsmBadFSDLenErr = -434 #FSD size incompatible with current FSM vers
+fsmBadFFSNameErr = -433 #Name length not 1 <= length <= 31
+fsmBusyFFSErr = -432 #File system is busy, cannot be removed
+fsmFFSNotFoundErr = -431 #Foreign File system does not exist - new Pack2 could return this error too
+btKeyAttrErr = -417 #There is no such a key attribute.
+btKeyLenErr = -416 #Maximum key length is too long or equal to zero.
+btRecNotFnd = -415 #Record cannot be found.
+btDupRecErr = -414 #Record already exists.
+btNoSpace = -413 #Can't allocate disk space.
+notBTree = -410 #The file is not a dictionary.
+gcrOnMFMErr = -400 #gcr format on high density media error
+slotNumErr = -360 #invalid slot # error
+smRecNotFnd = -351 #Record not found in the SRT.
+smSRTOvrFlErr = -350 #SRT over flow.
+smNoGoodOpens = -349 #No opens were successfull in the loop.
+smOffsetErr = -348 #Offset was too big (temporary error
+smByteLanesErr = -347 #NumByteLanes was determined to be zero.
+smBadsPtrErr = -346 #Bad pointer was passed to sCalcsPointer
+smsGetDrvrErr = -345 #Error occurred during _sGetDriver.
+smNoMoresRsrcs = -344 #No more sResources
+smDisDrvrNamErr = -343 #Error occurred during _sDisDrvrName.
+smGetDrvrNamErr = -342 #Error occurred during _sGetDrvrName.
+smCkStatusErr = -341 #Status of slot = fail.
+smBlkMoveErr = -340 #_BlockMove error
+smNewPErr = -339 #_NewPtr error
+smSelOOBErr = -338 #Selector out of bounds error
+smSlotOOBErr = -337 #Slot out of bounds error
+smNilsBlockErr = -336 #Nil sBlock error (Dont allocate and try to use a nil sBlock)
+smsPointerNil = -335 #LPointer is nil From sOffsetData. If this error occurs; check sInfo rec for more information.
+smCPUErr = -334 #Code revision is wrong
+smCodeRevErr = -333 #Code revision is wrong
+smReservedErr = -332 #Reserved field not zero
+smBadsList = -331 #Bad sList: Id1 < Id2 < Id3 ...format is not followed.
+smBadRefId = -330 #Reference Id not found in List
+smBusErrTO = -320 #BusError time out.
+smBadBoardId = -319 #BoardId was wrong; re-init the PRAM record.
+smReservedSlot = -318 #slot is reserved, VM should not use this address space.
+smInitTblVErr = -317 #An error occurred while trying to initialize the Slot Resource Table.
+smInitStatVErr = -316 #The InitStatusV field was negative after primary or secondary init.
+smNoBoardId = -315 #No Board Id.
+smGetPRErr = -314 #Error occurred during _sGetPRAMRec (See SIMStatus).
+smNoBoardSRsrc = -313 #No Board sResource.
+smDisposePErr = -312 #_DisposePointer error
+smFHBlkDispErr = -311 #Error occurred during _sDisposePtr (Dispose of FHeader block).
+smFHBlockRdErr = -310 #Error occurred during _sGetFHeader.
+smBLFieldBad = -309 #ByteLanes field was bad.
+smUnExBusErr = -308 #Unexpected BusError
+smResrvErr = -307 #Fatal reserved error. Resreved field <> 0.
+smNosInfoArray = -306 #No sInfoArray. Memory Mgr error.
+smDisabledSlot = -305 #This slot is disabled (-305 use to be smLWTstBad)
+smNoDir = -304 #Directory offset is Nil
+smRevisionErr = -303 #Wrong revison level
+smFormatErr = -302 #FHeader Format is not Apple's
+smCRCFail = -301 #CRC check failed for declaration data
+smEmptySlot = -300 #No card in slot
+nmTypErr = -299 #Notification Manager:wrong queue type
+smPriInitErr = -293 #Error; Cards could not be initialized.
+smPRAMInitErr = -292 #Error; Slot Resource Table could not be initialized.
+smSRTInitErr = -291 #Error; Slot Resource Table could not be initialized.
+smSDMInitErr = -290 #Error; SDM could not be initialized.
+midiInvalidCmdErr = -261 #command not supported for port type
+midiDupIDErr = -260 #duplicate client ID
+midiNameLenErr = -259 #name supplied is longer than 31 characters
+midiWriteErr = -258 #MIDIWritePacket couldn't write to all connected ports
+midiNoConErr = -257 #no connection exists between specified ports
+midiVConnectRmvd = -256 #pending virtual connection removed
+midiVConnectMade = -255 #pending virtual connection resolved
+midiVConnectErr = -254 #pending virtual connection created
+midiTooManyConsErr = -253 #too many connections made
+midiTooManyPortsErr = -252 #too many ports already installed in the system
+midiNoPortErr = -251 #no port with that ID found
+midiNoClientErr = -250 #no client with that ID found
+badInputText = -247 #badInputText
+badDictFormat = -246 #badDictFormat
+incompatibleVoice = -245 #incompatibleVoice
+voiceNotFound = -244 #voiceNotFound
+bufTooSmall = -243 #bufTooSmall
+synthNotReady = -242 #synthNotReady
+synthOpenFailed = -241 #synthOpenFailed
+noSynthFound = -240 #noSynthFound
+siUnknownQuality = -232 #invalid quality selector (returned by driver)
+siUnknownInfoType = -231 #invalid info type selector (returned by driver)
+siInputDeviceErr = -230 #input device hardware failure
+siBadRefNum = -229 #invalid input device reference number
+siBadDeviceName = -228 #input device could not be opened
+siDeviceBusyErr = -227 #input device already in use
+siInvalidSampleSize = -226 #invalid sample size
+siInvalidSampleRate = -225 #invalid sample rate
+siHardDriveTooSlow = -224 #hard drive too slow to record to disk
+siInvalidCompression = -223 #invalid compression type
+siNoBufferSpecified = -222 #returned by synchronous SPBRecord if nil buffer passed
+siBadSoundInDevice = -221 #invalid index passed to SoundInGetIndexedDevice
+siNoSoundInHardware = -220 #no Sound Input hardware
+siVBRCompressionNotSupported = -213 #vbr audio compression not supported for this operation
+noMoreRealTime = -212 #not enough CPU cycles left to add another task
+channelNotBusy = -211 #channelNotBusy
+buffersTooSmall = -210 #can not operate in the memory allowed
+channelBusy = -209 #the Channel is being used for a PFD already
+badFileFormat = -208 #was not type AIFF or was of bad format,corrupt
+notEnoughBufferSpace = -207 #could not allocate enough memory
+badFormat = -206 #Sound Manager Error Returns
+badChannel = -205 #Sound Manager Error Returns
+resProblem = -204 #Sound Manager Error Returns
+queueFull = -203 #Sound Manager Error Returns
+notEnoughHardwareErr = -201 #Sound Manager Error Returns
+noHardwareErr = -200 #Sound Manager Error Returns
+mapReadErr = -199 #map inconsistent with operation
+resAttrErr = -198 #attribute inconsistent with operation
+rmvRefFailed = -197 #RmveReference failed
+rmvResFailed = -196 #RmveResource failed
+addRefFailed = -195 #AddReference failed
+addResFailed = -194 #AddResource failed
+resFNotFound = -193 #Resource file not found
+resNotFound = -192 #Resource not found
+inputOutOfBounds = -190 #Offset of Count out of bounds
+writingPastEnd = -189 #Writing past end of file
+resourceInMemory = -188 #Resource already in memory
+CantDecompress = -186 #resource bent ("the bends") - can't decompress a compressed resource
+badExtResource = -185 #extended resource has a bad format.
+cmNoCurrentProfile = -182 #Responder error
+cmUnsupportedDataType = -181 #Responder error
+cmCantDeleteProfile = -180 #Responder error
+cmCantXYZ = -179 #CMM cant handle XYZ space
+cmCantConcatenateError = -178 #Profile can't be concatenated
+cmProfilesIdentical = -177 #Profiles the same
+cmProfileNotFound = -176 #Responder error
+cmMethodNotFound = -175 #CMM not present
+cmMethodError = -171 #cmMethodError
+cmProfileError = -170 #cmProfileError
+cDepthErr = -157 #invalid pixel depth
+cResErr = -156 #invalid resolution for MakeITable
+cDevErr = -155 #invalid type of graphics device
+cProtectErr = -154 #colorTable entry protection violation
+cRangeErr = -153 #range error on colorTable request
+cNoMemErr = -152 #failed to allocate memory for structure
+cTempMemErr = -151 #failed to allocate memory for temporary structures
+cMatchErr = -150 #Color2Index failed to find an index
+insufficientStackErr = -149 #insufficientStackErr
+pixMapTooDeepErr = -148 #pixMapTooDeepErr
+rgnOverflowErr = -147 #rgnOverflowErr
+noMemForPictPlaybackErr = -145 #noMemForPictPlaybackErr
+userCanceledErr = -128 #userCanceledErr
+hMenuFindErr = -127 #could not find HMenu's parent in MenuKey (wrong error code - obsolete)
+mBarNFnd = -126 #system error code for MBDF not found
+updPixMemErr = -125 #insufficient memory to update a pixmap
+volGoneErr = -124 #Server volume has been disconnected.
+wrgVolTypErr = -123 #Wrong volume type error [operation not supported for MFS]
+badMovErr = -122 #Move into offspring error
+tmwdoErr = -121 #No free WDCB available
+dirNFErr = -120 #Directory not found
+memLockedErr = -117 #trying to move a locked block (MoveHHi)
+memSCErr = -116 #Size Check failed
+memBCErr = -115 #Block Check failed
+memPCErr = -114 #Pointer Check failed
+memAZErr = -113 #Address in zone check failed
+memPurErr = -112 #trying to purge a locked or non-purgeable block
+memWZErr = -111 #WhichZone failed (applied to free block)
+memAdrErr = -110 #address was odd; or out of range
+nilHandleErr = -109 #Master Pointer was NIL in HandleZone or other
+memFullErr = -108 #Not enough room in heap zone
+noTypeErr = -102 #No object of that type in scrap
+noScrapErr = -100 #No scrap exists error
+memROZWarn = -99 #soft error in ROZ
+portNotCf = -98 #driver Open error code (parameter RAM not configured for this connection)
+portInUse = -97 #driver Open error code (port is in use)
+portNotPwr = -96 #serial port not currently powered
+excessCollsns = -95 #excessive collisions on write
+lapProtErr = -94 #error in attaching/detaching protocol
+noBridgeErr = -93 #no network bridge for non-local send
+eLenErr = -92 #Length error ddpLenErr
+eMultiErr = -91 #Multicast address error ddpSktErr
+breakRecd = -90 #Break received (SCC)
+rcvrErr = -89 #SCC receiver error (framing; parity; OR)
+prInitErr = -88 #InitUtil found the parameter ram uninitialized
+prWrErr = -87 #parameter ram written didn't read-verify
+clkWrErr = -86 #time written did not verify
+clkRdErr = -85 #unable to read same clock value twice
+verErr = -84 #track failed to verify
+fmt2Err = -83 #can't get enough sync
+fmt1Err = -82 #can't find sector 0 after track format
+sectNFErr = -81 #sector number never found on a track
+seekErr = -80 #track number wrong on address mark
+spdAdjErr = -79 #unable to correctly adjust disk speed
+twoSideErr = -78 #tried to read 2nd side on a 1-sided drive
+initIWMErr = -77 #unable to initialize IWM
+tk0BadErr = -76 #track 0 detect doesn't change
+cantStepErr = -75 #step handshake failed
+wrUnderrun = -74 #write underrun occurred
+badDBtSlp = -73 #bad data mark bit slip nibbles
+badDCksum = -72 #bad data mark checksum
+noDtaMkErr = -71 #couldn't find a data mark header
+badBtSlpErr = -70 #bad addr mark bit slip nibbles
+badCksmErr = -69 #addr mark checksum didn't check
+dataVerErr = -68 #read verify compare failed
+noAdrMkErr = -67 #couldn't find valid addr mark
+noNybErr = -66 #couldn't find 5 nybbles in 200 tries
+offLinErr = -65 #r/w requested for an off-line drive
+fontDecError = -64 #error during font declaration
+wrPermErr = -61 #write permissions error
+badMDBErr = -60 #bad master directory block
+fsRnErr = -59 #file system internal error:during rename the old entry was deleted but could not be restored.
+extFSErr = -58 #volume in question belongs to an external fs
+noMacDskErr = -57 #not a mac diskette (sig bytes are wrong)
+nsDrvErr = -56 #no such drive (tried to mount a bad drive num)
+volOnLinErr = -55 #drive volume already on-line at MountVol
+permErr = -54 #permissions error (on file open)
+volOffLinErr = -53 #volume not on line error (was Ejected)
+gfpErr = -52 #get file position error
+rfNumErr = -51 #refnum error
+paramErr = -50 #error in user parameter list
+opWrErr = -49 #file already open with with write permission
+dupFNErr = -48 #duplicate filename (rename)
+fBsyErr = -47 #File is busy (delete)
+vLckdErr = -46 #volume is locked
+fLckdErr = -45 #file is locked
+wPrErr = -44 #diskette is write protected.
+fnfErr = -43 #File not found
+tmfoErr = -42 #too many files open
+mFulErr = -41 #memory full (open) or file won't fit (load)
+posErr = -40 #tried to position to before start of file (r/w)
+eofErr = -39 #End of file
+fnOpnErr = -38 #File not open
+bdNamErr = -37 #there may be no bad names in the final system!
+ioErr = -36 #I/O error (bummers)
+nsvErr = -35 #no such volume
+dskFulErr = -34 #disk full
+dirFulErr = -33 #Directory full
+dceExtErr = -30 #dce extension error
+unitTblFullErr = -29 #unit table has no more entries
+notOpenErr = -28 #Couldn't rd/wr/ctl/sts cause driver not opened
+iIOAbortErr = -27 #IO abort error (Printing Manager)
+dInstErr = -26 #DrvrInstall couldn't find driver in resources
+dRemovErr = -25 #tried to remove an open driver
+closErr = -24 #I/O System Errors
+openErr = -23 #I/O System Errors
+unitEmptyErr = -22 #I/O System Errors
+badUnitErr = -21 #I/O System Errors
+writErr = -20 #I/O System Errors
+readErr = -19 #I/O System Errors
+statusErr = -18 #I/O System Errors
+controlErr = -17 #I/O System Errors
+dsExtensionsDisabled = -13 #say –Extensions Disabled”
+dsHD20Installed = -12 #say –HD20 Startup”
+dsDisassemblerInstalled = -11 #say –Disassembler Installed”
+dsMacsBugInstalled = -10 #say –MacsBug Installed”
+seNoDB = -8 #no debugger installed to handle debugger command
+SlpTypeErr = -5 #invalid queue element
+unimpErr = -4 #unimplemented core routine
+corErr = -3 #core routine number out of range
+dsNoExtsDisassembler = -2 #not a SysErr, just a placeholder
+qErr = -1 #queue element not found during deletion
+tsmComponentNoErr = 0 #component result = no error
+EPERM = 1 #Operation not permitted
+ENOENT = 2 #No such file or directory
+ESRCH = 3 #No such process
+EINTR = 4 #Interrupted system call
+EIO = 5 #Input/output error
+ENXIO = 6 #Device not configured
+E2BIG = 7 #Argument list too long
+ENOEXEC = 8 #Exec format error
+EBADF = 9 #Bad file descriptor
+ECHILD = 10 #No child processes
+EDEADLK = 11 #Resource deadlock avoided
+ENOMEM = 12 #Cannot allocate memory
+EACCES = 13 #Permission denied
+EFAULT = 14 #Bad address
+ECANCELED = 15 #Operation cancelled
+EBUSY = 16 #Device busy
+EEXIST = 17 #File exists
+EXDEV = 18 #Cross-device link
+ENODEV = 19 #Operation not supported by device
+ENOTDIR = 20 #Not a directory
+EISDIR = 21 #Is a directory
+EINVAL = 22 #Invalid argument
+ENFILE = 23 #Too many open files in system
+EMFILE = 24 #Too many open files
+ENOTTY = 25 #Inappropriate ioctl for device
+ESIGPARM = 26 #Signal error
+EFBIG = 27 #File too large
+ENOSPC = 28 #No space left on device
+ESPIPE = 29 #Illegal seek
+EROFS = 30 #Read-only file system
+EMLINK = 31 #Too many links
+EPIPE = 32 #Broken pipe
+EDOM = 33 #Numerical argument out of domain
+ERANGE = 34 #Result too large
+EAGAIN = 35 #Resource temporarily unavailable
+EINPROGRESS = 36 #Operation now in progress
+EALREADY = 37 #Operation already in progress
+ENOTSOCK = 38 #Socket operation on non-socket
+EDESTADDRREQ = 39 #Destination address required
+EMSGSIZE = 40 #Message too long
+EPROTOTYPE = 41 #Protocol wrong type for socket
+ENOPROTOOPT = 42 #Protocol not available
+EPROTONOSUPPORT = 43 #Protocol not supported
+ESOCKTNOSUPPORT = 44 #Socket type not supported
+EOPNOTSUPP = 45 #Operation not supported
+EPFNOSUPPORT = 46 #Protocol family not supported
+EAFNOSUPPORT = 47 #Address family not supported by protocol family
+EADDRINUSE = 48 #Address already in use
+EADDRNOTAVAIL = 49 #Can't assign requested address
+ENETDOWN = 50 #Network is down
+ENETUNREACH = 51 #Network is unreachable
+ENETRESET = 52 #Network dropped connection on reset
+ECONNABORTED = 53 #Software caused connection abort
+ECONNRESET = 54 #Connection reset by peer
+ENOBUFS = 55 #No buffer space available
+EISCONN = 56 #Socket is already connected
+ENOTCONN = 57 #Socket is not connected
+ESHUTDOWN = 58 #Can't send after socket shutdown
+ETOOMANYREFS = 59 #Too many references: can't splice
+ETIMEDOUT = 60 #Operation timed out
+ECONNREFUSED = 61 #Connection refused
+ELOOP = 62 #Too many levels of symbolic links
+ENAMETOOLONG = 63 #File name too long
+EHOSTDOWN = 64 #Host is down
+EHOSTUNREACH = 65 #No route to host
+ENOTEMPTY = 66 #Directory not empty
+ELOOK = 67 #Internal mapping for kOTLookErr, don't return to client
+ENOLCK = 77 #No locks available
+ENOSYS = 78 #Function not implemented
+EILSEQ = 88 #Wide character encoding error
+EUNKNOWN = 99 #Unknown error
diff --git a/Lib/plat-mac/macfs.py b/Lib/plat-mac/macfs.py
index 8c26dd5..11dbbeb 100644
--- a/Lib/plat-mac/macfs.py
+++ b/Lib/plat-mac/macfs.py
@@ -28,25 +28,25 @@ 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)
+ _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)
+ 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
@@ -56,60 +56,60 @@ error = Carbon.File.Error
# 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)
-
+ 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)
-
+ 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
-
+ 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:
@@ -120,21 +120,21 @@ FInfoType = FInfo
# Global functions:
def ResolveAliasFile(fss, chain=1):
- fss, isdir, isalias = Carbon.File.ResolveAliasFile(fss, chain)
- return FSSpec(fss), isdir, isalias
-
+ fss, isdir, isalias = Carbon.File.ResolveAliasFile(fss, chain)
+ return FSSpec(fss), isdir, isalias
+
def RawFSSpec(data):
- return FSSpec(rawdata=data)
-
+ return FSSpec(rawdata=data)
+
def RawAlias(data):
- return Alias(rawdata=data)
-
+ return Alias(rawdata=data)
+
def FindApplication(*args):
- raise NotImplementedError, "FindApplication no longer implemented"
-
+ raise NotImplementedError, "FindApplication no longer implemented"
+
def NewAliasMinimalFromFullPath(path):
- return Alias(Carbon.File.NewAliasMinimalFromFullPath(path, '', ''))
-
+ return Alias(Carbon.File.NewAliasMinimalFromFullPath(path, '', ''))
+
# Another global function:
from Carbon.Folder import FindFolder
@@ -145,54 +145,54 @@ from Carbon.Folder import FindFolder
_curfolder = None
def StandardGetFile(*typelist):
- """Ask for an input file, optionally specifying 4-char file types that are
- allowable"""
- return PromptGetFile('', *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",
+ """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
+ 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",
+ """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
-
+ 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",
+ 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
-
+ if _curfolder:
+ rv = FSSpec(_curfolder)
+ else:
+ rv = None
+ _curfolder = folder
+ return rv
+
def _handleSetFolder():
- global _curfolder
- rv = _curfolder
- _curfolder = None
- return rv
-
+ 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",
+ """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
+ fss = EasyDialogs.AskFolder(message=prompt, wanted=FSSpec,
+ defaultLocation=_handleSetFolder())
+ return fss, not fss is None
diff --git a/Lib/plat-mac/macresource.py b/Lib/plat-mac/macresource.py
index d8733c2..e4c3f62 100644
--- a/Lib/plat-mac/macresource.py
+++ b/Lib/plat-mac/macresource.py
@@ -10,137 +10,137 @@ class ArgumentError(TypeError): pass
class ResourceFileNotFoundError(ImportError): pass
def need(restype, resid, filename=None, modname=None):
- """Open a resource file, if needed. restype and resid
- are required parameters, and identify the resource for which to test. If it
- is available we are done. If it is not available we look for a file filename
- (default: modname with .rsrc appended) either in the same folder as
- where modname was loaded from, or otherwise across sys.path.
-
- Returns the refno of the resource file opened (or None)"""
+ """Open a resource file, if needed. restype and resid
+ are required parameters, and identify the resource for which to test. If it
+ is available we are done. If it is not available we look for a file filename
+ (default: modname with .rsrc appended) either in the same folder as
+ where modname was loaded from, or otherwise across sys.path.
+
+ Returns the refno of the resource file opened (or None)"""
- if modname is None and filename is None:
- raise ArgumentError, "Either filename or modname argument (or both) must be given"
-
- if type(resid) is type(1):
- try:
- h = Res.GetResource(restype, resid)
- except Res.Error:
- pass
- else:
- return None
- else:
- try:
- h = Res.GetNamedResource(restype, resid)
- except Res.Error:
- pass
- else:
- return None
-
- # Construct a filename if we don't have one
- if not filename:
- if '.' in modname:
- filename = modname.split('.')[-1] + '.rsrc'
- else:
- filename = modname + '.rsrc'
-
- # Now create a list of folders to search
- searchdirs = []
- if modname == '__main__':
- # If we're main we look in the current directory
- searchdirs = [os.curdir]
- if sys.modules.has_key(modname):
- mod = sys.modules[modname]
- if hasattr(mod, '__file__'):
- searchdirs = [os.path.dirname(mod.__file__)]
- searchdirs.extend(sys.path)
-
- # And look for the file
- for dir in searchdirs:
- pathname = os.path.join(dir, filename)
- if os.path.exists(pathname):
- break
- else:
- raise ResourceFileNotFoundError, filename
-
- refno = open_pathname(pathname)
-
- # And check that the resource exists now
- if type(resid) is type(1):
- h = Res.GetResource(restype, resid)
- else:
- h = Res.GetNamedResource(restype, resid)
- return refno
-
+ if modname is None and filename is None:
+ raise ArgumentError, "Either filename or modname argument (or both) must be given"
+
+ if type(resid) is type(1):
+ try:
+ h = Res.GetResource(restype, resid)
+ except Res.Error:
+ pass
+ else:
+ return None
+ else:
+ try:
+ h = Res.GetNamedResource(restype, resid)
+ except Res.Error:
+ pass
+ else:
+ return None
+
+ # Construct a filename if we don't have one
+ if not filename:
+ if '.' in modname:
+ filename = modname.split('.')[-1] + '.rsrc'
+ else:
+ filename = modname + '.rsrc'
+
+ # Now create a list of folders to search
+ searchdirs = []
+ if modname == '__main__':
+ # If we're main we look in the current directory
+ searchdirs = [os.curdir]
+ if sys.modules.has_key(modname):
+ mod = sys.modules[modname]
+ if hasattr(mod, '__file__'):
+ searchdirs = [os.path.dirname(mod.__file__)]
+ searchdirs.extend(sys.path)
+
+ # And look for the file
+ for dir in searchdirs:
+ pathname = os.path.join(dir, filename)
+ if os.path.exists(pathname):
+ break
+ else:
+ raise ResourceFileNotFoundError, filename
+
+ refno = open_pathname(pathname)
+
+ # And check that the resource exists now
+ if type(resid) is type(1):
+ h = Res.GetResource(restype, resid)
+ else:
+ h = Res.GetNamedResource(restype, resid)
+ return refno
+
def open_pathname(pathname, verbose=0):
- """Open a resource file given by pathname, possibly decoding an
- AppleSingle file"""
- try:
- refno = Res.FSpOpenResFile(pathname, 1)
- except Res.Error, arg:
- if arg[0] in (-37, -39):
- # No resource fork. We may be on OSX, and this may be either
- # a data-fork based resource file or a AppleSingle file
- # from the CVS repository.
- try:
- refno = Res.FSOpenResourceFile(pathname, u'', 1)
- except Res.Error, arg:
- if arg[0] != -199:
- # -199 is "bad resource map"
- raise
- else:
- return refno
- # Finally try decoding an AppleSingle file
- pathname = _decode(pathname, verbose=verbose)
- refno = Res.FSOpenResourceFile(pathname, u'', 1)
- else:
- raise
- return refno
-
+ """Open a resource file given by pathname, possibly decoding an
+ AppleSingle file"""
+ try:
+ refno = Res.FSpOpenResFile(pathname, 1)
+ except Res.Error, arg:
+ if arg[0] in (-37, -39):
+ # No resource fork. We may be on OSX, and this may be either
+ # a data-fork based resource file or a AppleSingle file
+ # from the CVS repository.
+ try:
+ refno = Res.FSOpenResourceFile(pathname, u'', 1)
+ except Res.Error, arg:
+ if arg[0] != -199:
+ # -199 is "bad resource map"
+ raise
+ else:
+ return refno
+ # Finally try decoding an AppleSingle file
+ pathname = _decode(pathname, verbose=verbose)
+ refno = Res.FSOpenResourceFile(pathname, u'', 1)
+ else:
+ raise
+ return refno
+
def resource_pathname(pathname, verbose=0):
- """Return the pathname for a resource file (either DF or RF based).
- If the pathname given already refers to such a file simply return it,
- otherwise first decode it."""
- try:
- refno = Res.FSpOpenResFile(pathname, 1)
- Res.CloseResFile(refno)
- except Res.Error, arg:
- if arg[0] in (-37, -39):
- # No resource fork. We may be on OSX, and this may be either
- # a data-fork based resource file or a AppleSingle file
- # from the CVS repository.
- try:
- refno = Res.FSOpenResourceFile(pathname, u'', 1)
- except Res.Error, arg:
- if arg[0] != -199:
- # -199 is "bad resource map"
- raise
- else:
- return refno
- # Finally try decoding an AppleSingle file
- pathname = _decode(pathname, verbose=verbose)
- else:
- raise
- return pathname
-
+ """Return the pathname for a resource file (either DF or RF based).
+ If the pathname given already refers to such a file simply return it,
+ otherwise first decode it."""
+ try:
+ refno = Res.FSpOpenResFile(pathname, 1)
+ Res.CloseResFile(refno)
+ except Res.Error, arg:
+ if arg[0] in (-37, -39):
+ # No resource fork. We may be on OSX, and this may be either
+ # a data-fork based resource file or a AppleSingle file
+ # from the CVS repository.
+ try:
+ refno = Res.FSOpenResourceFile(pathname, u'', 1)
+ except Res.Error, arg:
+ if arg[0] != -199:
+ # -199 is "bad resource map"
+ raise
+ else:
+ return refno
+ # Finally try decoding an AppleSingle file
+ pathname = _decode(pathname, verbose=verbose)
+ else:
+ raise
+ return pathname
+
def open_error_resource():
- """Open the resource file containing the error code to error message
- mapping."""
- need('Estr', 1, filename="errors.rsrc", modname=__name__)
-
+ """Open the resource file containing the error code to error message
+ mapping."""
+ need('Estr', 1, filename="errors.rsrc", modname=__name__)
+
def _decode(pathname, verbose=0):
- # Decode an AppleSingle resource file, return the new pathname.
- newpathname = pathname + '.df.rsrc'
- if os.path.exists(newpathname) and \
- os.stat(newpathname).st_mtime >= os.stat(pathname).st_mtime:
- return newpathname
- if hasattr(os, 'access') and not \
- os.access(os.path.dirname(pathname), os.W_OK|os.X_OK):
- # The destination directory isn't writeable. Create the file in
- # a temporary directory
- import tempfile
- fd, newpathname = tempfile.mkstemp(".rsrc")
- if verbose:
- print 'Decoding', pathname, 'to', newpathname
- import applesingle
- applesingle.decode(pathname, newpathname, resonly=1)
- return newpathname
+ # Decode an AppleSingle resource file, return the new pathname.
+ newpathname = pathname + '.df.rsrc'
+ if os.path.exists(newpathname) and \
+ os.stat(newpathname).st_mtime >= os.stat(pathname).st_mtime:
+ return newpathname
+ if hasattr(os, 'access') and not \
+ os.access(os.path.dirname(pathname), os.W_OK|os.X_OK):
+ # The destination directory isn't writeable. Create the file in
+ # a temporary directory
+ import tempfile
+ fd, newpathname = tempfile.mkstemp(".rsrc")
+ if verbose:
+ print 'Decoding', pathname, 'to', newpathname
+ import applesingle
+ applesingle.decode(pathname, newpathname, resonly=1)
+ return newpathname
diff --git a/Lib/plat-mac/pimp.py b/Lib/plat-mac/pimp.py
index 6664475..786f40a 100644
--- a/Lib/plat-mac/pimp.py
+++ b/Lib/plat-mac/pimp.py
@@ -43,756 +43,756 @@ DEFAULT_INSTALLDIR=distutils.sysconfig.get_python_lib()
DEFAULT_PIMPDATABASE="http://www.cwi.nl/~jack/pimp/pimp-%s.plist" % distutils.util.get_platform()
ARCHIVE_FORMATS = [
- (".tar.Z", "zcat \"%s\" | tar -xf -"),
- (".taz", "zcat \"%s\" | tar -xf -"),
- (".tar.gz", "zcat \"%s\" | tar -xf -"),
- (".tgz", "zcat \"%s\" | tar -xf -"),
- (".tar.bz", "bzcat \"%s\" | tar -xf -"),
- (".zip", "unzip \"%s\""),
+ (".tar.Z", "zcat \"%s\" | tar -xf -"),
+ (".taz", "zcat \"%s\" | tar -xf -"),
+ (".tar.gz", "zcat \"%s\" | tar -xf -"),
+ (".tgz", "zcat \"%s\" | tar -xf -"),
+ (".tar.bz", "bzcat \"%s\" | tar -xf -"),
+ (".zip", "unzip \"%s\""),
]
class PimpPreferences:
- """Container for per-user preferences, such as the database to use
- and where to install packages."""
-
- def __init__(self,
- flavorOrder=None,
- downloadDir=None,
- buildDir=None,
- installDir=None,
- pimpDatabase=None):
- if not flavorOrder:
- flavorOrder = DEFAULT_FLAVORORDER
- if not downloadDir:
- downloadDir = DEFAULT_DOWNLOADDIR
- if not buildDir:
- buildDir = DEFAULT_BUILDDIR
- if not installDir:
- installDir = DEFAULT_INSTALLDIR
- if not pimpDatabase:
- pimpDatabase = DEFAULT_PIMPDATABASE
- self.flavorOrder = flavorOrder
- self.downloadDir = downloadDir
- self.buildDir = buildDir
- self.installDir = installDir
- self.pimpDatabase = pimpDatabase
-
- def check(self):
- """Check that the preferences make sense: directories exist and are
- writable, the install directory is on sys.path, etc."""
-
- rv = ""
- RWX_OK = os.R_OK|os.W_OK|os.X_OK
- if not os.path.exists(self.downloadDir):
- rv += "Warning: Download directory \"%s\" does not exist\n" % self.downloadDir
- elif not os.access(self.downloadDir, RWX_OK):
- rv += "Warning: Download directory \"%s\" is not writable or not readable\n" % self.downloadDir
- if not os.path.exists(self.buildDir):
- rv += "Warning: Build directory \"%s\" does not exist\n" % self.buildDir
- elif not os.access(self.buildDir, RWX_OK):
- rv += "Warning: Build directory \"%s\" is not writable or not readable\n" % self.buildDir
- if not os.path.exists(self.installDir):
- rv += "Warning: Install directory \"%s\" does not exist\n" % self.installDir
- elif not os.access(self.installDir, RWX_OK):
- rv += "Warning: Install directory \"%s\" is not writable or not readable\n" % self.installDir
- else:
- installDir = os.path.realpath(self.installDir)
- for p in sys.path:
- try:
- realpath = os.path.realpath(p)
- except:
- pass
- if installDir == realpath:
- break
- else:
- rv += "Warning: Install directory \"%s\" is not on sys.path\n" % self.installDir
- return rv
-
- def compareFlavors(self, left, right):
- """Compare two flavor strings. This is part of your preferences
- because whether the user prefers installing from source or binary is."""
- if left in self.flavorOrder:
- if right in self.flavorOrder:
- return cmp(self.flavorOrder.index(left), self.flavorOrder.index(right))
- return -1
- if right in self.flavorOrder:
- return 1
- return cmp(left, right)
-
+ """Container for per-user preferences, such as the database to use
+ and where to install packages."""
+
+ def __init__(self,
+ flavorOrder=None,
+ downloadDir=None,
+ buildDir=None,
+ installDir=None,
+ pimpDatabase=None):
+ if not flavorOrder:
+ flavorOrder = DEFAULT_FLAVORORDER
+ if not downloadDir:
+ downloadDir = DEFAULT_DOWNLOADDIR
+ if not buildDir:
+ buildDir = DEFAULT_BUILDDIR
+ if not installDir:
+ installDir = DEFAULT_INSTALLDIR
+ if not pimpDatabase:
+ pimpDatabase = DEFAULT_PIMPDATABASE
+ self.flavorOrder = flavorOrder
+ self.downloadDir = downloadDir
+ self.buildDir = buildDir
+ self.installDir = installDir
+ self.pimpDatabase = pimpDatabase
+
+ def check(self):
+ """Check that the preferences make sense: directories exist and are
+ writable, the install directory is on sys.path, etc."""
+
+ rv = ""
+ RWX_OK = os.R_OK|os.W_OK|os.X_OK
+ if not os.path.exists(self.downloadDir):
+ rv += "Warning: Download directory \"%s\" does not exist\n" % self.downloadDir
+ elif not os.access(self.downloadDir, RWX_OK):
+ rv += "Warning: Download directory \"%s\" is not writable or not readable\n" % self.downloadDir
+ if not os.path.exists(self.buildDir):
+ rv += "Warning: Build directory \"%s\" does not exist\n" % self.buildDir
+ elif not os.access(self.buildDir, RWX_OK):
+ rv += "Warning: Build directory \"%s\" is not writable or not readable\n" % self.buildDir
+ if not os.path.exists(self.installDir):
+ rv += "Warning: Install directory \"%s\" does not exist\n" % self.installDir
+ elif not os.access(self.installDir, RWX_OK):
+ rv += "Warning: Install directory \"%s\" is not writable or not readable\n" % self.installDir
+ else:
+ installDir = os.path.realpath(self.installDir)
+ for p in sys.path:
+ try:
+ realpath = os.path.realpath(p)
+ except:
+ pass
+ if installDir == realpath:
+ break
+ else:
+ rv += "Warning: Install directory \"%s\" is not on sys.path\n" % self.installDir
+ return rv
+
+ def compareFlavors(self, left, right):
+ """Compare two flavor strings. This is part of your preferences
+ because whether the user prefers installing from source or binary is."""
+ if left in self.flavorOrder:
+ if right in self.flavorOrder:
+ return cmp(self.flavorOrder.index(left), self.flavorOrder.index(right))
+ return -1
+ if right in self.flavorOrder:
+ return 1
+ return cmp(left, right)
+
class PimpDatabase:
- """Class representing a pimp database. It can actually contain
- information from multiple databases through inclusion, but the
- toplevel database is considered the master, as its maintainer is
- "responsible" for the contents."""
-
- def __init__(self, prefs):
- self._packages = []
- self.preferences = prefs
- self._urllist = []
- self._version = ""
- self._maintainer = ""
- self._description = ""
-
- def close(self):
- """Clean up"""
- self._packages = []
- self.preferences = None
-
- def appendURL(self, url, included=0):
- """Append packages from the database with the given URL.
- Only the first database should specify included=0, so the
- global information (maintainer, description) get stored."""
-
- if url in self._urllist:
- return
- self._urllist.append(url)
- fp = urllib2.urlopen(url).fp
- dict = plistlib.Plist.fromFile(fp)
- # Test here for Pimp version, etc
- if not included:
- self._version = dict.get('Version', '0.1')
- if self._version != PIMP_VERSION:
- sys.stderr.write("Warning: database version %s does not match %s\n"
- % (self._version, PIMP_VERSION))
- self._maintainer = dict.get('Maintainer', '')
- self._description = dict.get('Description', '')
- self._appendPackages(dict['Packages'])
- others = dict.get('Include', [])
- for url in others:
- self.appendURL(url, included=1)
-
- def _appendPackages(self, packages):
- """Given a list of dictionaries containing package
- descriptions create the PimpPackage objects and append them
- to our internal storage."""
-
- for p in packages:
- p = dict(p)
- flavor = p.get('Flavor')
- if flavor == 'source':
- pkg = PimpPackage_source(self, p)
- elif flavor == 'binary':
- pkg = PimpPackage_binary(self, p)
- else:
- pkg = PimpPackage(self, dict(p))
- self._packages.append(pkg)
-
- def list(self):
- """Return a list of all PimpPackage objects in the database."""
-
- return self._packages
-
- def listnames(self):
- """Return a list of names of all packages in the database."""
-
- rv = []
- for pkg in self._packages:
- rv.append(pkg.fullname())
- rv.sort()
- return rv
-
- def dump(self, pathOrFile):
- """Dump the contents of the database to an XML .plist file.
-
- The file can be passed as either a file object or a pathname.
- All data, including included databases, is dumped."""
-
- packages = []
- for pkg in self._packages:
- packages.append(pkg.dump())
- dict = {
- 'Version': self._version,
- 'Maintainer': self._maintainer,
- 'Description': self._description,
- 'Packages': packages
- }
- plist = plistlib.Plist(**dict)
- plist.write(pathOrFile)
-
- def find(self, ident):
- """Find a package. The package can be specified by name
- or as a dictionary with name, version and flavor entries.
-
- Only name is obligatory. If there are multiple matches the
- best one (higher version number, flavors ordered according to
- users' preference) is returned."""
-
- if type(ident) == str:
- # Remove ( and ) for pseudo-packages
- if ident[0] == '(' and ident[-1] == ')':
- ident = ident[1:-1]
- # Split into name-version-flavor
- fields = ident.split('-')
- if len(fields) < 1 or len(fields) > 3:
- return None
- name = fields[0]
- if len(fields) > 1:
- version = fields[1]
- else:
- version = None
- if len(fields) > 2:
- flavor = fields[2]
- else:
- flavor = None
- else:
- name = ident['Name']
- version = ident.get('Version')
- flavor = ident.get('Flavor')
- found = None
- for p in self._packages:
- if name == p.name() and \
- (not version or version == p.version()) and \
- (not flavor or flavor == p.flavor()):
- if not found or found < p:
- found = p
- return found
-
+ """Class representing a pimp database. It can actually contain
+ information from multiple databases through inclusion, but the
+ toplevel database is considered the master, as its maintainer is
+ "responsible" for the contents."""
+
+ def __init__(self, prefs):
+ self._packages = []
+ self.preferences = prefs
+ self._urllist = []
+ self._version = ""
+ self._maintainer = ""
+ self._description = ""
+
+ def close(self):
+ """Clean up"""
+ self._packages = []
+ self.preferences = None
+
+ def appendURL(self, url, included=0):
+ """Append packages from the database with the given URL.
+ Only the first database should specify included=0, so the
+ global information (maintainer, description) get stored."""
+
+ if url in self._urllist:
+ return
+ self._urllist.append(url)
+ fp = urllib2.urlopen(url).fp
+ dict = plistlib.Plist.fromFile(fp)
+ # Test here for Pimp version, etc
+ if not included:
+ self._version = dict.get('Version', '0.1')
+ if self._version != PIMP_VERSION:
+ sys.stderr.write("Warning: database version %s does not match %s\n"
+ % (self._version, PIMP_VERSION))
+ self._maintainer = dict.get('Maintainer', '')
+ self._description = dict.get('Description', '')
+ self._appendPackages(dict['Packages'])
+ others = dict.get('Include', [])
+ for url in others:
+ self.appendURL(url, included=1)
+
+ def _appendPackages(self, packages):
+ """Given a list of dictionaries containing package
+ descriptions create the PimpPackage objects and append them
+ to our internal storage."""
+
+ for p in packages:
+ p = dict(p)
+ flavor = p.get('Flavor')
+ if flavor == 'source':
+ pkg = PimpPackage_source(self, p)
+ elif flavor == 'binary':
+ pkg = PimpPackage_binary(self, p)
+ else:
+ pkg = PimpPackage(self, dict(p))
+ self._packages.append(pkg)
+
+ def list(self):
+ """Return a list of all PimpPackage objects in the database."""
+
+ return self._packages
+
+ def listnames(self):
+ """Return a list of names of all packages in the database."""
+
+ rv = []
+ for pkg in self._packages:
+ rv.append(pkg.fullname())
+ rv.sort()
+ return rv
+
+ def dump(self, pathOrFile):
+ """Dump the contents of the database to an XML .plist file.
+
+ The file can be passed as either a file object or a pathname.
+ All data, including included databases, is dumped."""
+
+ packages = []
+ for pkg in self._packages:
+ packages.append(pkg.dump())
+ dict = {
+ 'Version': self._version,
+ 'Maintainer': self._maintainer,
+ 'Description': self._description,
+ 'Packages': packages
+ }
+ plist = plistlib.Plist(**dict)
+ plist.write(pathOrFile)
+
+ def find(self, ident):
+ """Find a package. The package can be specified by name
+ or as a dictionary with name, version and flavor entries.
+
+ Only name is obligatory. If there are multiple matches the
+ best one (higher version number, flavors ordered according to
+ users' preference) is returned."""
+
+ if type(ident) == str:
+ # Remove ( and ) for pseudo-packages
+ if ident[0] == '(' and ident[-1] == ')':
+ ident = ident[1:-1]
+ # Split into name-version-flavor
+ fields = ident.split('-')
+ if len(fields) < 1 or len(fields) > 3:
+ return None
+ name = fields[0]
+ if len(fields) > 1:
+ version = fields[1]
+ else:
+ version = None
+ if len(fields) > 2:
+ flavor = fields[2]
+ else:
+ flavor = None
+ else:
+ name = ident['Name']
+ version = ident.get('Version')
+ flavor = ident.get('Flavor')
+ found = None
+ for p in self._packages:
+ if name == p.name() and \
+ (not version or version == p.version()) and \
+ (not flavor or flavor == p.flavor()):
+ if not found or found < p:
+ found = p
+ return found
+
ALLOWED_KEYS = [
- "Name",
- "Version",
- "Flavor",
- "Description",
- "Home-page",
- "Download-URL",
- "Install-test",
- "Install-command",
- "Pre-install-command",
- "Post-install-command",
- "Prerequisites",
- "MD5Sum"
+ "Name",
+ "Version",
+ "Flavor",
+ "Description",
+ "Home-page",
+ "Download-URL",
+ "Install-test",
+ "Install-command",
+ "Pre-install-command",
+ "Post-install-command",
+ "Prerequisites",
+ "MD5Sum"
]
class PimpPackage:
- """Class representing a single package."""
-
- def __init__(self, db, dict):
- self._db = db
- name = dict["Name"]
- for k in dict.keys():
- if not k in ALLOWED_KEYS:
- sys.stderr.write("Warning: %s: unknown key %s\n" % (name, k))
- self._dict = dict
-
- def __getitem__(self, key):
- return self._dict[key]
-
- def name(self): return self._dict['Name']
- def version(self): return self._dict['Version']
- def flavor(self): return self._dict['Flavor']
- def description(self): return self._dict['Description']
- def homepage(self): return self._dict.get('Home-page')
- def downloadURL(self): return self._dict['Download-URL']
-
- def fullname(self):
- """Return the full name "name-version-flavor" of a package.
-
- If the package is a pseudo-package, something that cannot be
- installed through pimp, return the name in (parentheses)."""
-
- rv = self._dict['Name']
- if self._dict.has_key('Version'):
- rv = rv + '-%s' % self._dict['Version']
- if self._dict.has_key('Flavor'):
- rv = rv + '-%s' % self._dict['Flavor']
- if not self._dict.get('Download-URL'):
- # Pseudo-package, show in parentheses
- rv = '(%s)' % rv
- return rv
-
- def dump(self):
- """Return a dict object containing the information on the package."""
- return self._dict
-
- def __cmp__(self, other):
- """Compare two packages, where the "better" package sorts lower."""
-
- if not isinstance(other, PimpPackage):
- return cmp(id(self), id(other))
- if self.name() != other.name():
- return cmp(self.name(), other.name())
- if self.version() != other.version():
- return -cmp(self.version(), other.version())
- return self._db.preferences.compareFlavors(self.flavor(), other.flavor())
-
- def installed(self):
- """Test wheter the package is installed.
-
- Returns two values: a status indicator which is one of
- "yes", "no", "old" (an older version is installed) or "bad"
- (something went wrong during the install test) and a human
- readable string which may contain more details."""
-
- namespace = {
- "NotInstalled": _scriptExc_NotInstalled,
- "OldInstalled": _scriptExc_OldInstalled,
- "BadInstalled": _scriptExc_BadInstalled,
- "os": os,
- "sys": sys,
- }
- installTest = self._dict['Install-test'].strip() + '\n'
- try:
- exec installTest in namespace
- except ImportError, arg:
- return "no", str(arg)
- except _scriptExc_NotInstalled, arg:
- return "no", str(arg)
- except _scriptExc_OldInstalled, arg:
- return "old", str(arg)
- except _scriptExc_BadInstalled, arg:
- return "bad", str(arg)
- except:
- sys.stderr.write("-------------------------------------\n")
- sys.stderr.write("---- %s: install test got exception\n" % self.fullname())
- sys.stderr.write("---- source:\n")
- sys.stderr.write(installTest)
- sys.stderr.write("---- exception:\n")
- import traceback
- traceback.print_exc(file=sys.stderr)
- if self._db._maintainer:
- sys.stderr.write("---- Please copy this and mail to %s\n" % self._db._maintainer)
- sys.stderr.write("-------------------------------------\n")
- return "bad", "Package install test got exception"
- return "yes", ""
-
- def prerequisites(self):
- """Return a list of prerequisites for this package.
-
- The list contains 2-tuples, of which the first item is either
- a PimpPackage object or None, and the second is a descriptive
- string. The first item can be None if this package depends on
- something that isn't pimp-installable, in which case the descriptive
- string should tell the user what to do."""
-
- rv = []
- if not self._dict.get('Download-URL'):
- return [(None,
- "%s: This package needs to be installed manually (no Download-URL field)" %
- self.fullname())]
- if not self._dict.get('Prerequisites'):
- return []
- for item in self._dict['Prerequisites']:
- if type(item) == str:
- pkg = None
- descr = str(item)
- else:
- name = item['Name']
- if item.has_key('Version'):
- name = name + '-' + item['Version']
- if item.has_key('Flavor'):
- name = name + '-' + item['Flavor']
- pkg = self._db.find(name)
- if not pkg:
- descr = "Requires unknown %s"%name
- else:
- descr = pkg.description()
- rv.append((pkg, descr))
- return rv
-
- def _cmd(self, output, dir, *cmditems):
- """Internal routine to run a shell command in a given directory."""
-
- cmd = ("cd \"%s\"; " % dir) + " ".join(cmditems)
- if output:
- output.write("+ %s\n" % cmd)
- if NO_EXECUTE:
- return 0
- child = popen2.Popen4(cmd)
- child.tochild.close()
- while 1:
- line = child.fromchild.readline()
- if not line:
- break
- if output:
- output.write(line)
- return child.wait()
-
- def downloadPackageOnly(self, output=None):
- """Download a single package, if needed.
-
- An MD5 signature is used to determine whether download is needed,
- and to test that we actually downloaded what we expected.
- If output is given it is a file-like object that will receive a log
- of what happens.
-
- If anything unforeseen happened the method returns an error message
- string.
- """
-
- scheme, loc, path, query, frag = urlparse.urlsplit(self._dict['Download-URL'])
- path = urllib.url2pathname(path)
- filename = os.path.split(path)[1]
- self.archiveFilename = os.path.join(self._db.preferences.downloadDir, filename)
- if not self._archiveOK():
- if scheme == 'manual':
- return "Please download package manually and save as %s" % self.archiveFilename
- if self._cmd(output, self._db.preferences.downloadDir,
- "curl",
- "--output", self.archiveFilename,
- self._dict['Download-URL']):
- return "download command failed"
- if not os.path.exists(self.archiveFilename) and not NO_EXECUTE:
- return "archive not found after download"
- if not self._archiveOK():
- return "archive does not have correct MD5 checksum"
-
- def _archiveOK(self):
- """Test an archive. It should exist and the MD5 checksum should be correct."""
-
- if not os.path.exists(self.archiveFilename):
- return 0
- if not self._dict.get('MD5Sum'):
- sys.stderr.write("Warning: no MD5Sum for %s\n" % self.fullname())
- return 1
- data = open(self.archiveFilename, 'rb').read()
- checksum = md5.new(data).hexdigest()
- return checksum == self._dict['MD5Sum']
-
- def unpackPackageOnly(self, output=None):
- """Unpack a downloaded package archive."""
-
- filename = os.path.split(self.archiveFilename)[1]
- for ext, cmd in ARCHIVE_FORMATS:
- if filename[-len(ext):] == ext:
- break
- else:
- return "unknown extension for archive file: %s" % filename
- self.basename = filename[:-len(ext)]
- cmd = cmd % self.archiveFilename
- if self._cmd(output, self._db.preferences.buildDir, cmd):
- return "unpack command failed"
-
- def installPackageOnly(self, output=None):
- """Default install method, to be overridden by subclasses"""
- return "%s: This package needs to be installed manually (no support for flavor=\"%s\")" \
- % (self.fullname(), self._dict.get(flavor, ""))
-
- def installSinglePackage(self, output=None):
- """Download, unpack and install a single package.
-
- If output is given it should be a file-like object and it
- will receive a log of what happened."""
-
- if not self._dict['Download-URL']:
- return "%s: This package needs to be installed manually (no Download-URL field)" % _fmtpackagename(self)
- msg = self.downloadPackageOnly(output)
- if msg:
- return "%s: download: %s" % (self.fullname(), msg)
-
- msg = self.unpackPackageOnly(output)
- if msg:
- return "%s: unpack: %s" % (self.fullname(), msg)
-
- return self.installPackageOnly(output)
-
- def beforeInstall(self):
- """Bookkeeping before installation: remember what we have in site-packages"""
- self._old_contents = os.listdir(self._db.preferences.installDir)
-
- def afterInstall(self):
- """Bookkeeping after installation: interpret any new .pth files that have
- appeared"""
-
- new_contents = os.listdir(self._db.preferences.installDir)
- for fn in new_contents:
- if fn in self._old_contents:
- continue
- if fn[-4:] != '.pth':
- continue
- fullname = os.path.join(self._db.preferences.installDir, fn)
- f = open(fullname)
- for line in f.readlines():
- if not line:
- continue
- if line[0] == '#':
- continue
- if line[:6] == 'import':
- exec line
- continue
- if line[-1] == '\n':
- line = line[:-1]
- if not os.path.isabs(line):
- line = os.path.join(self._db.preferences.installDir, line)
- line = os.path.realpath(line)
- if not line in sys.path:
- sys.path.append(line)
+ """Class representing a single package."""
+
+ def __init__(self, db, dict):
+ self._db = db
+ name = dict["Name"]
+ for k in dict.keys():
+ if not k in ALLOWED_KEYS:
+ sys.stderr.write("Warning: %s: unknown key %s\n" % (name, k))
+ self._dict = dict
+
+ def __getitem__(self, key):
+ return self._dict[key]
+
+ def name(self): return self._dict['Name']
+ def version(self): return self._dict['Version']
+ def flavor(self): return self._dict['Flavor']
+ def description(self): return self._dict['Description']
+ def homepage(self): return self._dict.get('Home-page')
+ def downloadURL(self): return self._dict['Download-URL']
+
+ def fullname(self):
+ """Return the full name "name-version-flavor" of a package.
+
+ If the package is a pseudo-package, something that cannot be
+ installed through pimp, return the name in (parentheses)."""
+
+ rv = self._dict['Name']
+ if self._dict.has_key('Version'):
+ rv = rv + '-%s' % self._dict['Version']
+ if self._dict.has_key('Flavor'):
+ rv = rv + '-%s' % self._dict['Flavor']
+ if not self._dict.get('Download-URL'):
+ # Pseudo-package, show in parentheses
+ rv = '(%s)' % rv
+ return rv
+
+ def dump(self):
+ """Return a dict object containing the information on the package."""
+ return self._dict
+
+ def __cmp__(self, other):
+ """Compare two packages, where the "better" package sorts lower."""
+
+ if not isinstance(other, PimpPackage):
+ return cmp(id(self), id(other))
+ if self.name() != other.name():
+ return cmp(self.name(), other.name())
+ if self.version() != other.version():
+ return -cmp(self.version(), other.version())
+ return self._db.preferences.compareFlavors(self.flavor(), other.flavor())
+
+ def installed(self):
+ """Test wheter the package is installed.
+
+ Returns two values: a status indicator which is one of
+ "yes", "no", "old" (an older version is installed) or "bad"
+ (something went wrong during the install test) and a human
+ readable string which may contain more details."""
+
+ namespace = {
+ "NotInstalled": _scriptExc_NotInstalled,
+ "OldInstalled": _scriptExc_OldInstalled,
+ "BadInstalled": _scriptExc_BadInstalled,
+ "os": os,
+ "sys": sys,
+ }
+ installTest = self._dict['Install-test'].strip() + '\n'
+ try:
+ exec installTest in namespace
+ except ImportError, arg:
+ return "no", str(arg)
+ except _scriptExc_NotInstalled, arg:
+ return "no", str(arg)
+ except _scriptExc_OldInstalled, arg:
+ return "old", str(arg)
+ except _scriptExc_BadInstalled, arg:
+ return "bad", str(arg)
+ except:
+ sys.stderr.write("-------------------------------------\n")
+ sys.stderr.write("---- %s: install test got exception\n" % self.fullname())
+ sys.stderr.write("---- source:\n")
+ sys.stderr.write(installTest)
+ sys.stderr.write("---- exception:\n")
+ import traceback
+ traceback.print_exc(file=sys.stderr)
+ if self._db._maintainer:
+ sys.stderr.write("---- Please copy this and mail to %s\n" % self._db._maintainer)
+ sys.stderr.write("-------------------------------------\n")
+ return "bad", "Package install test got exception"
+ return "yes", ""
+
+ def prerequisites(self):
+ """Return a list of prerequisites for this package.
+
+ The list contains 2-tuples, of which the first item is either
+ a PimpPackage object or None, and the second is a descriptive
+ string. The first item can be None if this package depends on
+ something that isn't pimp-installable, in which case the descriptive
+ string should tell the user what to do."""
+
+ rv = []
+ if not self._dict.get('Download-URL'):
+ return [(None,
+ "%s: This package needs to be installed manually (no Download-URL field)" %
+ self.fullname())]
+ if not self._dict.get('Prerequisites'):
+ return []
+ for item in self._dict['Prerequisites']:
+ if type(item) == str:
+ pkg = None
+ descr = str(item)
+ else:
+ name = item['Name']
+ if item.has_key('Version'):
+ name = name + '-' + item['Version']
+ if item.has_key('Flavor'):
+ name = name + '-' + item['Flavor']
+ pkg = self._db.find(name)
+ if not pkg:
+ descr = "Requires unknown %s"%name
+ else:
+ descr = pkg.description()
+ rv.append((pkg, descr))
+ return rv
+
+ def _cmd(self, output, dir, *cmditems):
+ """Internal routine to run a shell command in a given directory."""
+
+ cmd = ("cd \"%s\"; " % dir) + " ".join(cmditems)
+ if output:
+ output.write("+ %s\n" % cmd)
+ if NO_EXECUTE:
+ return 0
+ child = popen2.Popen4(cmd)
+ child.tochild.close()
+ while 1:
+ line = child.fromchild.readline()
+ if not line:
+ break
+ if output:
+ output.write(line)
+ return child.wait()
+
+ def downloadPackageOnly(self, output=None):
+ """Download a single package, if needed.
+
+ An MD5 signature is used to determine whether download is needed,
+ and to test that we actually downloaded what we expected.
+ If output is given it is a file-like object that will receive a log
+ of what happens.
+
+ If anything unforeseen happened the method returns an error message
+ string.
+ """
+
+ scheme, loc, path, query, frag = urlparse.urlsplit(self._dict['Download-URL'])
+ path = urllib.url2pathname(path)
+ filename = os.path.split(path)[1]
+ self.archiveFilename = os.path.join(self._db.preferences.downloadDir, filename)
+ if not self._archiveOK():
+ if scheme == 'manual':
+ return "Please download package manually and save as %s" % self.archiveFilename
+ if self._cmd(output, self._db.preferences.downloadDir,
+ "curl",
+ "--output", self.archiveFilename,
+ self._dict['Download-URL']):
+ return "download command failed"
+ if not os.path.exists(self.archiveFilename) and not NO_EXECUTE:
+ return "archive not found after download"
+ if not self._archiveOK():
+ return "archive does not have correct MD5 checksum"
+
+ def _archiveOK(self):
+ """Test an archive. It should exist and the MD5 checksum should be correct."""
+
+ if not os.path.exists(self.archiveFilename):
+ return 0
+ if not self._dict.get('MD5Sum'):
+ sys.stderr.write("Warning: no MD5Sum for %s\n" % self.fullname())
+ return 1
+ data = open(self.archiveFilename, 'rb').read()
+ checksum = md5.new(data).hexdigest()
+ return checksum == self._dict['MD5Sum']
+
+ def unpackPackageOnly(self, output=None):
+ """Unpack a downloaded package archive."""
+
+ filename = os.path.split(self.archiveFilename)[1]
+ for ext, cmd in ARCHIVE_FORMATS:
+ if filename[-len(ext):] == ext:
+ break
+ else:
+ return "unknown extension for archive file: %s" % filename
+ self.basename = filename[:-len(ext)]
+ cmd = cmd % self.archiveFilename
+ if self._cmd(output, self._db.preferences.buildDir, cmd):
+ return "unpack command failed"
+
+ def installPackageOnly(self, output=None):
+ """Default install method, to be overridden by subclasses"""
+ return "%s: This package needs to be installed manually (no support for flavor=\"%s\")" \
+ % (self.fullname(), self._dict.get(flavor, ""))
+
+ def installSinglePackage(self, output=None):
+ """Download, unpack and install a single package.
+
+ If output is given it should be a file-like object and it
+ will receive a log of what happened."""
+
+ if not self._dict['Download-URL']:
+ return "%s: This package needs to be installed manually (no Download-URL field)" % _fmtpackagename(self)
+ msg = self.downloadPackageOnly(output)
+ if msg:
+ return "%s: download: %s" % (self.fullname(), msg)
+
+ msg = self.unpackPackageOnly(output)
+ if msg:
+ return "%s: unpack: %s" % (self.fullname(), msg)
+
+ return self.installPackageOnly(output)
+
+ def beforeInstall(self):
+ """Bookkeeping before installation: remember what we have in site-packages"""
+ self._old_contents = os.listdir(self._db.preferences.installDir)
+
+ def afterInstall(self):
+ """Bookkeeping after installation: interpret any new .pth files that have
+ appeared"""
+
+ new_contents = os.listdir(self._db.preferences.installDir)
+ for fn in new_contents:
+ if fn in self._old_contents:
+ continue
+ if fn[-4:] != '.pth':
+ continue
+ fullname = os.path.join(self._db.preferences.installDir, fn)
+ f = open(fullname)
+ for line in f.readlines():
+ if not line:
+ continue
+ if line[0] == '#':
+ continue
+ if line[:6] == 'import':
+ exec line
+ continue
+ if line[-1] == '\n':
+ line = line[:-1]
+ if not os.path.isabs(line):
+ line = os.path.join(self._db.preferences.installDir, line)
+ line = os.path.realpath(line)
+ if not line in sys.path:
+ sys.path.append(line)
class PimpPackage_binary(PimpPackage):
- def unpackPackageOnly(self, output=None):
- """We don't unpack binary packages until installing"""
- pass
-
- def installPackageOnly(self, output=None):
- """Install a single source package.
-
- If output is given it should be a file-like object and it
- will receive a log of what happened."""
- print 'PimpPackage_binary installPackageOnly'
-
- msgs = []
- if self._dict.has_key('Pre-install-command'):
- msg.append("%s: Pre-install-command ignored" % self.fullname())
- if self._dict.has_key('Install-command'):
- msgs.append("%s: Install-command ignored" % self.fullname())
- if self._dict.has_key('Post-install-command'):
- msgs.append("%s: Post-install-command ignored" % self.fullname())
-
- self.beforeInstall()
+ def unpackPackageOnly(self, output=None):
+ """We don't unpack binary packages until installing"""
+ pass
+
+ def installPackageOnly(self, output=None):
+ """Install a single source package.
+
+ If output is given it should be a file-like object and it
+ will receive a log of what happened."""
+ print 'PimpPackage_binary installPackageOnly'
+
+ msgs = []
+ if self._dict.has_key('Pre-install-command'):
+ msg.append("%s: Pre-install-command ignored" % self.fullname())
+ if self._dict.has_key('Install-command'):
+ msgs.append("%s: Install-command ignored" % self.fullname())
+ if self._dict.has_key('Post-install-command'):
+ msgs.append("%s: Post-install-command ignored" % self.fullname())
+
+ self.beforeInstall()
- # Install by unpacking
- filename = os.path.split(self.archiveFilename)[1]
- for ext, cmd in ARCHIVE_FORMATS:
- if filename[-len(ext):] == ext:
- break
- else:
- return "unknown extension for archive file: %s" % filename
-
- # Extract the files in the root folder.
- cmd = cmd % self.archiveFilename
- if self._cmd(output, "/", cmd):
- return "unpack command failed"
-
- self.afterInstall()
-
- if self._dict.has_key('Post-install-command'):
- if self._cmd(output, self._buildDirname, self._dict['Post-install-command']):
- return "post-install %s: running \"%s\" failed" % \
- (self.fullname(), self._dict['Post-install-command'])
- return None
-
-
+ # Install by unpacking
+ filename = os.path.split(self.archiveFilename)[1]
+ for ext, cmd in ARCHIVE_FORMATS:
+ if filename[-len(ext):] == ext:
+ break
+ else:
+ return "unknown extension for archive file: %s" % filename
+
+ # Extract the files in the root folder.
+ cmd = cmd % self.archiveFilename
+ if self._cmd(output, "/", cmd):
+ return "unpack command failed"
+
+ self.afterInstall()
+
+ if self._dict.has_key('Post-install-command'):
+ if self._cmd(output, self._buildDirname, self._dict['Post-install-command']):
+ return "post-install %s: running \"%s\" failed" % \
+ (self.fullname(), self._dict['Post-install-command'])
+ return None
+
+
class PimpPackage_source(PimpPackage):
- def unpackPackageOnly(self, output=None):
- """Unpack a source package and check that setup.py exists"""
- PimpPackage.unpackPackageOnly(self, output)
- # Test that a setup script has been create
- self._buildDirname = os.path.join(self._db.preferences.buildDir, self.basename)
- setupname = os.path.join(self._buildDirname, "setup.py")
- if not os.path.exists(setupname) and not NO_EXECUTE:
- return "no setup.py found after unpack of archive"
+ def unpackPackageOnly(self, output=None):
+ """Unpack a source package and check that setup.py exists"""
+ PimpPackage.unpackPackageOnly(self, output)
+ # Test that a setup script has been create
+ self._buildDirname = os.path.join(self._db.preferences.buildDir, self.basename)
+ setupname = os.path.join(self._buildDirname, "setup.py")
+ if not os.path.exists(setupname) and not NO_EXECUTE:
+ return "no setup.py found after unpack of archive"
- def installPackageOnly(self, output=None):
- """Install a single source package.
-
- If output is given it should be a file-like object and it
- will receive a log of what happened."""
-
- if self._dict.has_key('Pre-install-command'):
- if self._cmd(output, self._buildDirname, self._dict['Pre-install-command']):
- return "pre-install %s: running \"%s\" failed" % \
- (self.fullname(), self._dict['Pre-install-command'])
-
- self.beforeInstall()
- installcmd = self._dict.get('Install-command')
- if not installcmd:
- installcmd = '"%s" setup.py install' % sys.executable
- if self._cmd(output, self._buildDirname, installcmd):
- return "install %s: running \"%s\" failed" % \
- (self.fullname(), installcmd)
-
- self.afterInstall()
-
- if self._dict.has_key('Post-install-command'):
- if self._cmd(output, self._buildDirname, self._dict['Post-install-command']):
- return "post-install %s: running \"%s\" failed" % \
- (self.fullname(), self._dict['Post-install-command'])
- return None
-
-
+ def installPackageOnly(self, output=None):
+ """Install a single source package.
+
+ If output is given it should be a file-like object and it
+ will receive a log of what happened."""
+
+ if self._dict.has_key('Pre-install-command'):
+ if self._cmd(output, self._buildDirname, self._dict['Pre-install-command']):
+ return "pre-install %s: running \"%s\" failed" % \
+ (self.fullname(), self._dict['Pre-install-command'])
+
+ self.beforeInstall()
+ installcmd = self._dict.get('Install-command')
+ if not installcmd:
+ installcmd = '"%s" setup.py install' % sys.executable
+ if self._cmd(output, self._buildDirname, installcmd):
+ return "install %s: running \"%s\" failed" % \
+ (self.fullname(), installcmd)
+
+ self.afterInstall()
+
+ if self._dict.has_key('Post-install-command'):
+ if self._cmd(output, self._buildDirname, self._dict['Post-install-command']):
+ return "post-install %s: running \"%s\" failed" % \
+ (self.fullname(), self._dict['Post-install-command'])
+ return None
+
+
class PimpInstaller:
- """Installer engine: computes dependencies and installs
- packages in the right order."""
-
- def __init__(self, db):
- self._todo = []
- self._db = db
- self._curtodo = []
- self._curmessages = []
-
- def __contains__(self, package):
- return package in self._todo
-
- def _addPackages(self, packages):
- for package in packages:
- if not package in self._todo:
- self._todo.insert(0, package)
-
- def _prepareInstall(self, package, force=0, recursive=1):
- """Internal routine, recursive engine for prepareInstall.
-
- Test whether the package is installed and (if not installed
- or if force==1) prepend it to the temporary todo list and
- call ourselves recursively on all prerequisites."""
-
- if not force:
- status, message = package.installed()
- if status == "yes":
- return
- if package in self._todo or package in self._curtodo:
- return
- self._curtodo.insert(0, package)
- if not recursive:
- return
- prereqs = package.prerequisites()
- for pkg, descr in prereqs:
- if pkg:
- self._prepareInstall(pkg, force, recursive)
- else:
- self._curmessages.append("Requires: %s" % descr)
-
- def prepareInstall(self, package, force=0, recursive=1):
- """Prepare installation of a package.
-
- If the package is already installed and force is false nothing
- is done. If recursive is true prerequisites are installed first.
-
- Returns a list of packages (to be passed to install) and a list
- of messages of any problems encountered.
- """
-
- self._curtodo = []
- self._curmessages = []
- self._prepareInstall(package, force, recursive)
- rv = self._curtodo, self._curmessages
- self._curtodo = []
- self._curmessages = []
- return rv
-
- def install(self, packages, output):
- """Install a list of packages."""
-
- self._addPackages(packages)
- status = []
- for pkg in self._todo:
- msg = pkg.installSinglePackage(output)
- if msg:
- status.append(msg)
- return status
-
-
-
+ """Installer engine: computes dependencies and installs
+ packages in the right order."""
+
+ def __init__(self, db):
+ self._todo = []
+ self._db = db
+ self._curtodo = []
+ self._curmessages = []
+
+ def __contains__(self, package):
+ return package in self._todo
+
+ def _addPackages(self, packages):
+ for package in packages:
+ if not package in self._todo:
+ self._todo.insert(0, package)
+
+ def _prepareInstall(self, package, force=0, recursive=1):
+ """Internal routine, recursive engine for prepareInstall.
+
+ Test whether the package is installed and (if not installed
+ or if force==1) prepend it to the temporary todo list and
+ call ourselves recursively on all prerequisites."""
+
+ if not force:
+ status, message = package.installed()
+ if status == "yes":
+ return
+ if package in self._todo or package in self._curtodo:
+ return
+ self._curtodo.insert(0, package)
+ if not recursive:
+ return
+ prereqs = package.prerequisites()
+ for pkg, descr in prereqs:
+ if pkg:
+ self._prepareInstall(pkg, force, recursive)
+ else:
+ self._curmessages.append("Requires: %s" % descr)
+
+ def prepareInstall(self, package, force=0, recursive=1):
+ """Prepare installation of a package.
+
+ If the package is already installed and force is false nothing
+ is done. If recursive is true prerequisites are installed first.
+
+ Returns a list of packages (to be passed to install) and a list
+ of messages of any problems encountered.
+ """
+
+ self._curtodo = []
+ self._curmessages = []
+ self._prepareInstall(package, force, recursive)
+ rv = self._curtodo, self._curmessages
+ self._curtodo = []
+ self._curmessages = []
+ return rv
+
+ def install(self, packages, output):
+ """Install a list of packages."""
+
+ self._addPackages(packages)
+ status = []
+ for pkg in self._todo:
+ msg = pkg.installSinglePackage(output)
+ if msg:
+ status.append(msg)
+ return status
+
+
+
def _run(mode, verbose, force, args):
- """Engine for the main program"""
-
- prefs = PimpPreferences()
- prefs.check()
- db = PimpDatabase(prefs)
- db.appendURL(prefs.pimpDatabase)
-
- if mode == 'dump':
- db.dump(sys.stdout)
- elif mode =='list':
- if not args:
- args = db.listnames()
- print "%-20.20s\t%s" % ("Package", "Description")
- print
- for pkgname in args:
- pkg = db.find(pkgname)
- if pkg:
- description = pkg.description()
- pkgname = pkg.fullname()
- else:
- description = 'Error: no such package'
- print "%-20.20s\t%s" % (pkgname, description)
- if verbose:
- print "\tHome page:\t", pkg.homepage()
- print "\tDownload URL:\t", pkg.downloadURL()
- elif mode =='status':
- if not args:
- args = db.listnames()
- print "%-20.20s\t%s\t%s" % ("Package", "Installed", "Message")
- print
- for pkgname in args:
- pkg = db.find(pkgname)
- if pkg:
- status, msg = pkg.installed()
- pkgname = pkg.fullname()
- else:
- status = 'error'
- msg = 'No such package'
- print "%-20.20s\t%-9.9s\t%s" % (pkgname, status, msg)
- if verbose and status == "no":
- prereq = pkg.prerequisites()
- for pkg, msg in prereq:
- if not pkg:
- pkg = ''
- else:
- pkg = pkg.fullname()
- print "%-20.20s\tRequirement: %s %s" % ("", pkg, msg)
- elif mode == 'install':
- if not args:
- print 'Please specify packages to install'
- sys.exit(1)
- inst = PimpInstaller(db)
- for pkgname in args:
- pkg = db.find(pkgname)
- if not pkg:
- print '%s: No such package' % pkgname
- continue
- list, messages = inst.prepareInstall(pkg, force)
- if messages and not force:
- print "%s: Not installed:" % pkgname
- for m in messages:
- print "\t", m
- else:
- if verbose:
- output = sys.stdout
- else:
- output = None
- messages = inst.install(list, output)
- if messages:
- print "%s: Not installed:" % pkgname
- for m in messages:
- print "\t", m
+ """Engine for the main program"""
+
+ prefs = PimpPreferences()
+ prefs.check()
+ db = PimpDatabase(prefs)
+ db.appendURL(prefs.pimpDatabase)
+
+ if mode == 'dump':
+ db.dump(sys.stdout)
+ elif mode =='list':
+ if not args:
+ args = db.listnames()
+ print "%-20.20s\t%s" % ("Package", "Description")
+ print
+ for pkgname in args:
+ pkg = db.find(pkgname)
+ if pkg:
+ description = pkg.description()
+ pkgname = pkg.fullname()
+ else:
+ description = 'Error: no such package'
+ print "%-20.20s\t%s" % (pkgname, description)
+ if verbose:
+ print "\tHome page:\t", pkg.homepage()
+ print "\tDownload URL:\t", pkg.downloadURL()
+ elif mode =='status':
+ if not args:
+ args = db.listnames()
+ print "%-20.20s\t%s\t%s" % ("Package", "Installed", "Message")
+ print
+ for pkgname in args:
+ pkg = db.find(pkgname)
+ if pkg:
+ status, msg = pkg.installed()
+ pkgname = pkg.fullname()
+ else:
+ status = 'error'
+ msg = 'No such package'
+ print "%-20.20s\t%-9.9s\t%s" % (pkgname, status, msg)
+ if verbose and status == "no":
+ prereq = pkg.prerequisites()
+ for pkg, msg in prereq:
+ if not pkg:
+ pkg = ''
+ else:
+ pkg = pkg.fullname()
+ print "%-20.20s\tRequirement: %s %s" % ("", pkg, msg)
+ elif mode == 'install':
+ if not args:
+ print 'Please specify packages to install'
+ sys.exit(1)
+ inst = PimpInstaller(db)
+ for pkgname in args:
+ pkg = db.find(pkgname)
+ if not pkg:
+ print '%s: No such package' % pkgname
+ continue
+ list, messages = inst.prepareInstall(pkg, force)
+ if messages and not force:
+ print "%s: Not installed:" % pkgname
+ for m in messages:
+ print "\t", m
+ else:
+ if verbose:
+ output = sys.stdout
+ else:
+ output = None
+ messages = inst.install(list, output)
+ if messages:
+ print "%s: Not installed:" % pkgname
+ for m in messages:
+ print "\t", m
def main():
- """Minimal commandline tool to drive pimp."""
-
- import getopt
- def _help():
- print "Usage: pimp [-v] -s [package ...] List installed status"
- print " pimp [-v] -l [package ...] Show package information"
- print " pimp [-vf] -i package ... Install packages"
- print " pimp -d Dump database to stdout"
- print "Options:"
- print " -v Verbose"
- print " -f Force installation"
- sys.exit(1)
-
- try:
- opts, args = getopt.getopt(sys.argv[1:], "slifvd")
- except getopt.Error:
- _help()
- if not opts and not args:
- _help()
- mode = None
- force = 0
- verbose = 0
- for o, a in opts:
- if o == '-s':
- if mode:
- _help()
- mode = 'status'
- if o == '-l':
- if mode:
- _help()
- mode = 'list'
- if o == '-d':
- if mode:
- _help()
- mode = 'dump'
- if o == '-i':
- mode = 'install'
- if o == '-f':
- force = 1
- if o == '-v':
- verbose = 1
- if not mode:
- _help()
- _run(mode, verbose, force, args)
-
+ """Minimal commandline tool to drive pimp."""
+
+ import getopt
+ def _help():
+ print "Usage: pimp [-v] -s [package ...] List installed status"
+ print " pimp [-v] -l [package ...] Show package information"
+ print " pimp [-vf] -i package ... Install packages"
+ print " pimp -d Dump database to stdout"
+ print "Options:"
+ print " -v Verbose"
+ print " -f Force installation"
+ sys.exit(1)
+
+ try:
+ opts, args = getopt.getopt(sys.argv[1:], "slifvd")
+ except getopt.Error:
+ _help()
+ if not opts and not args:
+ _help()
+ mode = None
+ force = 0
+ verbose = 0
+ for o, a in opts:
+ if o == '-s':
+ if mode:
+ _help()
+ mode = 'status'
+ if o == '-l':
+ if mode:
+ _help()
+ mode = 'list'
+ if o == '-d':
+ if mode:
+ _help()
+ mode = 'dump'
+ if o == '-i':
+ mode = 'install'
+ if o == '-f':
+ force = 1
+ if o == '-v':
+ verbose = 1
+ if not mode:
+ _help()
+ _run(mode, verbose, force, args)
+
if __name__ == '__main__':
- main()
-
-
+ main()
+
+
diff --git a/Lib/plat-mac/plistlib.py b/Lib/plat-mac/plistlib.py
index 9c914d2..40e2675 100644
--- a/Lib/plat-mac/plistlib.py
+++ b/Lib/plat-mac/plistlib.py
@@ -33,29 +33,29 @@ The <date> plist data has (limited) support through the Date class.
Generate Plist example:
- pl = Plist(
- aString="Doodah",
- aList=["A", "B", 12, 32.1, [1, 2, 3]],
- aFloat = 0.1,
- anInt = 728,
- aDict=Dict(
- anotherString="<hello & hi there!>",
- aUnicodeValue=u'M\xe4ssig, Ma\xdf',
- aTrueValue=True,
- aFalseValue=False,
- ),
- someData = Data("<binary gunk>"),
- someMoreData = Data("<lots of binary gunk>" * 10),
- aDate = Date(time.mktime(time.gmtime())),
- )
- # unicode keys are possible, but a little awkward to use:
- pl[u'\xc5benraa'] = "That was a unicode key."
- pl.write(fileName)
+ pl = Plist(
+ aString="Doodah",
+ aList=["A", "B", 12, 32.1, [1, 2, 3]],
+ aFloat = 0.1,
+ anInt = 728,
+ aDict=Dict(
+ anotherString="<hello & hi there!>",
+ aUnicodeValue=u'M\xe4ssig, Ma\xdf',
+ aTrueValue=True,
+ aFalseValue=False,
+ ),
+ someData = Data("<binary gunk>"),
+ someMoreData = Data("<lots of binary gunk>" * 10),
+ aDate = Date(time.mktime(time.gmtime())),
+ )
+ # unicode keys are possible, but a little awkward to use:
+ pl[u'\xc5benraa'] = "That was a unicode key."
+ pl.write(fileName)
Parse Plist example:
- pl = Plist.fromFile(pathOrFile)
- print pl.aKey
+ pl = Plist.fromFile(pathOrFile)
+ print pl.aKey
"""
@@ -71,40 +71,40 @@ INDENT = "\t"
class DumbXMLWriter:
- def __init__(self, file):
- self.file = file
- self.stack = []
- self.indentLevel = 0
+ def __init__(self, file):
+ self.file = file
+ self.stack = []
+ self.indentLevel = 0
- def beginElement(self, element):
- self.stack.append(element)
- self.writeln("<%s>" % element)
- self.indentLevel += 1
+ def beginElement(self, element):
+ self.stack.append(element)
+ self.writeln("<%s>" % element)
+ self.indentLevel += 1
- def endElement(self, element):
- assert self.indentLevel > 0
- assert self.stack.pop() == element
- self.indentLevel -= 1
- self.writeln("</%s>" % element)
+ def endElement(self, element):
+ assert self.indentLevel > 0
+ assert self.stack.pop() == element
+ self.indentLevel -= 1
+ self.writeln("</%s>" % element)
- def simpleElement(self, element, value=None):
- if value:
- value = _encode(value)
- self.writeln("<%s>%s</%s>" % (element, value, element))
- else:
- self.writeln("<%s/>" % element)
+ def simpleElement(self, element, value=None):
+ if value:
+ value = _encode(value)
+ self.writeln("<%s>%s</%s>" % (element, value, element))
+ else:
+ self.writeln("<%s/>" % element)
- def writeln(self, line):
- if line:
- self.file.write(self.indentLevel * INDENT + line + "\n")
- else:
- self.file.write("\n")
+ def writeln(self, line):
+ if line:
+ self.file.write(self.indentLevel * INDENT + line + "\n")
+ else:
+ self.file.write("\n")
def _encode(text):
- text = text.replace("&", "&amp;")
- text = text.replace("<", "&lt;")
- return text.encode("utf-8")
+ text = text.replace("&", "&amp;")
+ text = text.replace("<", "&lt;")
+ return text.encode("utf-8")
PLISTHEADER = """\
@@ -114,323 +114,323 @@ PLISTHEADER = """\
class PlistWriter(DumbXMLWriter):
- def __init__(self, file):
- file.write(PLISTHEADER)
- DumbXMLWriter.__init__(self, file)
-
- def writeValue(self, value):
- if isinstance(value, (str, unicode)):
- self.simpleElement("string", value)
- elif isinstance(value, bool):
- # must switch for bool before int, as bool is a
- # subclass of int...
- if value:
- self.simpleElement("true")
- else:
- self.simpleElement("false")
- elif isinstance(value, int):
- self.simpleElement("integer", str(value))
- elif isinstance(value, float):
- # should perhaps use repr() for better precision?
- self.simpleElement("real", str(value))
- elif isinstance(value, (dict, Dict)):
- self.writeDict(value)
- elif isinstance(value, Data):
- self.writeData(value)
- elif isinstance(value, Date):
- self.simpleElement("date", value.toString())
- elif isinstance(value, (tuple, list)):
- self.writeArray(value)
- else:
- assert 0, "unsuported type: %s" % type(value)
-
- def writeData(self, data):
- self.beginElement("data")
- for line in data.asBase64().split("\n"):
- if line:
- self.writeln(line)
- self.endElement("data")
-
- def writeDict(self, d):
- self.beginElement("dict")
- items = d.items()
- items.sort()
- for key, value in items:
- assert isinstance(key, (str, unicode)), "keys must be strings"
- self.simpleElement("key", key)
- self.writeValue(value)
- self.endElement("dict")
-
- def writeArray(self, array):
- self.beginElement("array")
- for value in array:
- self.writeValue(value)
- self.endElement("array")
+ def __init__(self, file):
+ file.write(PLISTHEADER)
+ DumbXMLWriter.__init__(self, file)
+
+ def writeValue(self, value):
+ if isinstance(value, (str, unicode)):
+ self.simpleElement("string", value)
+ elif isinstance(value, bool):
+ # must switch for bool before int, as bool is a
+ # subclass of int...
+ if value:
+ self.simpleElement("true")
+ else:
+ self.simpleElement("false")
+ elif isinstance(value, int):
+ self.simpleElement("integer", str(value))
+ elif isinstance(value, float):
+ # should perhaps use repr() for better precision?
+ self.simpleElement("real", str(value))
+ elif isinstance(value, (dict, Dict)):
+ self.writeDict(value)
+ elif isinstance(value, Data):
+ self.writeData(value)
+ elif isinstance(value, Date):
+ self.simpleElement("date", value.toString())
+ elif isinstance(value, (tuple, list)):
+ self.writeArray(value)
+ else:
+ assert 0, "unsuported type: %s" % type(value)
+
+ def writeData(self, data):
+ self.beginElement("data")
+ for line in data.asBase64().split("\n"):
+ if line:
+ self.writeln(line)
+ self.endElement("data")
+
+ def writeDict(self, d):
+ self.beginElement("dict")
+ items = d.items()
+ items.sort()
+ for key, value in items:
+ assert isinstance(key, (str, unicode)), "keys must be strings"
+ self.simpleElement("key", key)
+ self.writeValue(value)
+ self.endElement("dict")
+
+ def writeArray(self, array):
+ self.beginElement("array")
+ for value in array:
+ self.writeValue(value)
+ self.endElement("array")
class Dict:
- """Dict wrapper for convenient access of values through attributes."""
+ """Dict wrapper for convenient access of values through attributes."""
- def __init__(self, **kwargs):
- self.__dict__.update(kwargs)
+ def __init__(self, **kwargs):
+ self.__dict__.update(kwargs)
- def __cmp__(self, other):
- if isinstance(other, self.__class__):
- return cmp(self.__dict__, other.__dict__)
- elif isinstance(other, dict):
- return cmp(self.__dict__, other)
- else:
- return cmp(id(self), id(other))
+ def __cmp__(self, other):
+ if isinstance(other, self.__class__):
+ return cmp(self.__dict__, other.__dict__)
+ elif isinstance(other, dict):
+ return cmp(self.__dict__, other)
+ else:
+ return cmp(id(self), id(other))
- def __str__(self):
- return "%s(**%s)" % (self.__class__.__name__, self.__dict__)
- __repr__ = __str__
+ def __str__(self):
+ return "%s(**%s)" % (self.__class__.__name__, self.__dict__)
+ __repr__ = __str__
- def copy(self):
- return self.__class__(**self.__dict__)
+ def copy(self):
+ return self.__class__(**self.__dict__)
- def __getattr__(self, attr):
- """Delegate everything else to the dict object."""
- return getattr(self.__dict__, attr)
+ def __getattr__(self, attr):
+ """Delegate everything else to the dict object."""
+ return getattr(self.__dict__, attr)
class Plist(Dict):
- """The main Plist object. Basically a dict (the toplevel object
- of a plist is a dict) with two additional methods to read from
- and write to files.
- """
-
- def fromFile(cls, pathOrFile):
- didOpen = 0
- if not hasattr(pathOrFile, "write"):
- pathOrFile = open(pathOrFile)
- didOpen = 1
- p = PlistParser()
- plist = p.parse(pathOrFile)
- if didOpen:
- pathOrFile.close()
- return plist
- fromFile = classmethod(fromFile)
-
- def write(self, pathOrFile):
- if not hasattr(pathOrFile, "write"):
- pathOrFile = open(pathOrFile, "w")
- didOpen = 1
- else:
- didOpen = 0
-
- writer = PlistWriter(pathOrFile)
- writer.writeln("<plist version=\"1.0\">")
- writer.writeDict(self.__dict__)
- writer.writeln("</plist>")
-
- if didOpen:
- pathOrFile.close()
+ """The main Plist object. Basically a dict (the toplevel object
+ of a plist is a dict) with two additional methods to read from
+ and write to files.
+ """
+
+ def fromFile(cls, pathOrFile):
+ didOpen = 0
+ if not hasattr(pathOrFile, "write"):
+ pathOrFile = open(pathOrFile)
+ didOpen = 1
+ p = PlistParser()
+ plist = p.parse(pathOrFile)
+ if didOpen:
+ pathOrFile.close()
+ return plist
+ fromFile = classmethod(fromFile)
+
+ def write(self, pathOrFile):
+ if not hasattr(pathOrFile, "write"):
+ pathOrFile = open(pathOrFile, "w")
+ didOpen = 1
+ else:
+ didOpen = 0
+
+ writer = PlistWriter(pathOrFile)
+ writer.writeln("<plist version=\"1.0\">")
+ writer.writeDict(self.__dict__)
+ writer.writeln("</plist>")
+
+ if didOpen:
+ pathOrFile.close()
class Data:
- """Wrapper for binary data."""
+ """Wrapper for binary data."""
- def __init__(self, data):
- self.data = data
+ def __init__(self, data):
+ self.data = data
- def fromBase64(cls, data):
- import base64
- return cls(base64.decodestring(data))
- fromBase64 = classmethod(fromBase64)
+ def fromBase64(cls, data):
+ import base64
+ return cls(base64.decodestring(data))
+ fromBase64 = classmethod(fromBase64)
- def asBase64(self):
- import base64
- return base64.encodestring(self.data)
+ def asBase64(self):
+ import base64
+ return base64.encodestring(self.data)
- def __cmp__(self, other):
- if isinstance(other, self.__class__):
- return cmp(self.data, other.data)
- elif isinstance(other, str):
- return cmp(self.data, other)
- else:
- return cmp(id(self), id(other))
+ def __cmp__(self, other):
+ if isinstance(other, self.__class__):
+ return cmp(self.data, other.data)
+ elif isinstance(other, str):
+ return cmp(self.data, other)
+ else:
+ return cmp(id(self), id(other))
- def __repr__(self):
- return "%s(%s)" % (self.__class__.__name__, repr(self.data))
+ def __repr__(self):
+ return "%s(%s)" % (self.__class__.__name__, repr(self.data))
class Date:
- """Primitive date wrapper, uses time floats internally, is agnostic
- about time zones.
- """
+ """Primitive date wrapper, uses time floats internally, is agnostic
+ about time zones.
+ """
- def __init__(self, date):
- if isinstance(date, str):
- from xml.utils.iso8601 import parse
- date = parse(date)
- self.date = date
+ def __init__(self, date):
+ if isinstance(date, str):
+ from xml.utils.iso8601 import parse
+ date = parse(date)
+ self.date = date
- def toString(self):
- from xml.utils.iso8601 import tostring
- return tostring(self.date)
+ def toString(self):
+ from xml.utils.iso8601 import tostring
+ return tostring(self.date)
- def __cmp__(self, other):
- if isinstance(other, self.__class__):
- return cmp(self.date, other.date)
- elif isinstance(other, (int, float)):
- return cmp(self.date, other)
- else:
- return cmp(id(self), id(other))
+ def __cmp__(self, other):
+ if isinstance(other, self.__class__):
+ return cmp(self.date, other.date)
+ elif isinstance(other, (int, float)):
+ return cmp(self.date, other)
+ else:
+ return cmp(id(self), id(other))
- def __repr__(self):
- return "%s(%s)" % (self.__class__.__name__, repr(self.toString()))
+ def __repr__(self):
+ return "%s(%s)" % (self.__class__.__name__, repr(self.toString()))
class PlistParser:
- def __init__(self):
- self.stack = []
- self.currentKey = None
- self.root = None
-
- def parse(self, file):
- from xml.parsers.expat import ParserCreate
- parser = ParserCreate()
- parser.StartElementHandler = self.handleBeginElement
- parser.EndElementHandler = self.handleEndElement
- parser.CharacterDataHandler = self.handleData
- parser.ParseFile(file)
- return self.root
-
- def handleBeginElement(self, element, attrs):
- self.data = []
- handler = getattr(self, "begin_" + element, None)
- if handler is not None:
- handler(attrs)
-
- def handleEndElement(self, element):
- handler = getattr(self, "end_" + element, None)
- if handler is not None:
- handler()
-
- def handleData(self, data):
- self.data.append(data)
-
- def addObject(self, value):
- if self.currentKey is not None:
- self.stack[-1][self.currentKey] = value
- self.currentKey = None
- elif not self.stack:
- # this is the root object
- assert self.root is value
- else:
- self.stack[-1].append(value)
-
- def getData(self):
- data = "".join(self.data)
- try:
- data = data.encode("ascii")
- except UnicodeError:
- pass
- self.data = []
- return data
-
- # element handlers
-
- def begin_dict(self, attrs):
- if self.root is None:
- self.root = d = Plist()
- else:
- d = Dict()
- self.addObject(d)
- self.stack.append(d)
- def end_dict(self):
- self.stack.pop()
-
- def end_key(self):
- self.currentKey = self.getData()
-
- def begin_array(self, attrs):
- a = []
- self.addObject(a)
- self.stack.append(a)
- def end_array(self):
- self.stack.pop()
-
- def end_true(self):
- self.addObject(True)
- def end_false(self):
- self.addObject(False)
- def end_integer(self):
- self.addObject(int(self.getData()))
- def end_real(self):
- self.addObject(float(self.getData()))
- def end_string(self):
- self.addObject(self.getData())
- def end_data(self):
- self.addObject(Data.fromBase64(self.getData()))
- def end_date(self):
- self.addObject(Date(self.getData()))
+ def __init__(self):
+ self.stack = []
+ self.currentKey = None
+ self.root = None
+
+ def parse(self, file):
+ from xml.parsers.expat import ParserCreate
+ parser = ParserCreate()
+ parser.StartElementHandler = self.handleBeginElement
+ parser.EndElementHandler = self.handleEndElement
+ parser.CharacterDataHandler = self.handleData
+ parser.ParseFile(file)
+ return self.root
+
+ def handleBeginElement(self, element, attrs):
+ self.data = []
+ handler = getattr(self, "begin_" + element, None)
+ if handler is not None:
+ handler(attrs)
+
+ def handleEndElement(self, element):
+ handler = getattr(self, "end_" + element, None)
+ if handler is not None:
+ handler()
+
+ def handleData(self, data):
+ self.data.append(data)
+
+ def addObject(self, value):
+ if self.currentKey is not None:
+ self.stack[-1][self.currentKey] = value
+ self.currentKey = None
+ elif not self.stack:
+ # this is the root object
+ assert self.root is value
+ else:
+ self.stack[-1].append(value)
+
+ def getData(self):
+ data = "".join(self.data)
+ try:
+ data = data.encode("ascii")
+ except UnicodeError:
+ pass
+ self.data = []
+ return data
+
+ # element handlers
+
+ def begin_dict(self, attrs):
+ if self.root is None:
+ self.root = d = Plist()
+ else:
+ d = Dict()
+ self.addObject(d)
+ self.stack.append(d)
+ def end_dict(self):
+ self.stack.pop()
+
+ def end_key(self):
+ self.currentKey = self.getData()
+
+ def begin_array(self, attrs):
+ a = []
+ self.addObject(a)
+ self.stack.append(a)
+ def end_array(self):
+ self.stack.pop()
+
+ def end_true(self):
+ self.addObject(True)
+ def end_false(self):
+ self.addObject(False)
+ def end_integer(self):
+ self.addObject(int(self.getData()))
+ def end_real(self):
+ self.addObject(float(self.getData()))
+ def end_string(self):
+ self.addObject(self.getData())
+ def end_data(self):
+ self.addObject(Data.fromBase64(self.getData()))
+ def end_date(self):
+ self.addObject(Date(self.getData()))
# cruft to support booleans in Python <= 2.3
import sys
if sys.version_info[:2] < (2, 3):
- # Python 2.2 and earlier: no booleans
- # Python 2.2.x: booleans are ints
- class bool(int):
- """Imitation of the Python 2.3 bool object."""
- def __new__(cls, value):
- return int.__new__(cls, not not value)
- def __repr__(self):
- if self:
- return "True"
- else:
- return "False"
- True = bool(1)
- False = bool(0)
+ # Python 2.2 and earlier: no booleans
+ # Python 2.2.x: booleans are ints
+ class bool(int):
+ """Imitation of the Python 2.3 bool object."""
+ def __new__(cls, value):
+ return int.__new__(cls, not not value)
+ def __repr__(self):
+ if self:
+ return "True"
+ else:
+ return "False"
+ True = bool(1)
+ False = bool(0)
else:
- # Bind the boolean builtins to local names
- True = True
- False = False
- bool = bool
+ # Bind the boolean builtins to local names
+ True = True
+ False = False
+ bool = bool
if __name__ == "__main__":
- from StringIO import StringIO
- import time
- if len(sys.argv) == 1:
- pl = Plist(
- aString="Doodah",
- aList=["A", "B", 12, 32.1, [1, 2, 3]],
- aFloat = 0.1,
- anInt = 728,
- aDict=Dict(
- anotherString="<hello & hi there!>",
- aUnicodeValue=u'M\xe4ssig, Ma\xdf',
- aTrueValue=True,
- aFalseValue=False,
- ),
- someData = Data("<binary gunk>"),
- someMoreData = Data("<lots of binary gunk>" * 10),
- aDate = Date(time.mktime(time.gmtime())),
- )
- elif len(sys.argv) == 2:
- pl = Plist.fromFile(sys.argv[1])
- else:
- print "Too many arguments: at most 1 plist file can be given."
- sys.exit(1)
-
- # unicode keys are possible, but a little awkward to use:
- pl[u'\xc5benraa'] = "That was a unicode key."
- f = StringIO()
- pl.write(f)
- xml = f.getvalue()
- print xml
- f.seek(0)
- pl2 = Plist.fromFile(f)
- assert pl == pl2
- f = StringIO()
- pl2.write(f)
- assert xml == f.getvalue()
- #print repr(pl2)
+ from StringIO import StringIO
+ import time
+ if len(sys.argv) == 1:
+ pl = Plist(
+ aString="Doodah",
+ aList=["A", "B", 12, 32.1, [1, 2, 3]],
+ aFloat = 0.1,
+ anInt = 728,
+ aDict=Dict(
+ anotherString="<hello & hi there!>",
+ aUnicodeValue=u'M\xe4ssig, Ma\xdf',
+ aTrueValue=True,
+ aFalseValue=False,
+ ),
+ someData = Data("<binary gunk>"),
+ someMoreData = Data("<lots of binary gunk>" * 10),
+ aDate = Date(time.mktime(time.gmtime())),
+ )
+ elif len(sys.argv) == 2:
+ pl = Plist.fromFile(sys.argv[1])
+ else:
+ print "Too many arguments: at most 1 plist file can be given."
+ sys.exit(1)
+
+ # unicode keys are possible, but a little awkward to use:
+ pl[u'\xc5benraa'] = "That was a unicode key."
+ f = StringIO()
+ pl.write(f)
+ xml = f.getvalue()
+ print xml
+ f.seek(0)
+ pl2 = Plist.fromFile(f)
+ assert pl == pl2
+ f = StringIO()
+ pl2.write(f)
+ assert xml == f.getvalue()
+ #print repr(pl2)
diff --git a/Lib/plat-mac/videoreader.py b/Lib/plat-mac/videoreader.py
index 6153287..646c726 100644
--- a/Lib/plat-mac/videoreader.py
+++ b/Lib/plat-mac/videoreader.py
@@ -13,280 +13,280 @@ from Carbon import Qdoffs
from Carbon import QDOffscreen
from Carbon import Res
try:
- import MediaDescr
+ import MediaDescr
except ImportError:
- def _audiodescr(data):
- return None
+ def _audiodescr(data):
+ return None
else:
- def _audiodescr(data):
- return MediaDescr.SoundDescription.decode(data)
+ def _audiodescr(data):
+ return MediaDescr.SoundDescription.decode(data)
try:
- from imgformat import macrgb
+ from imgformat import macrgb
except ImportError:
- macrgb = "Macintosh RGB format"
+ macrgb = "Macintosh RGB format"
import os
# import audio.format
class VideoFormat:
- def __init__(self, name, descr, width, height, format):
- self.__name = name
- self.__descr = descr
- self.__width = width
- self.__height = height
- self.__format = format
-
- def getname(self):
- return self.__name
-
- def getdescr(self):
- return self.__descr
-
- def getsize(self):
- return self.__width, self.__height
-
- def getformat(self):
- return self.__format
-
+ def __init__(self, name, descr, width, height, format):
+ self.__name = name
+ self.__descr = descr
+ self.__width = width
+ self.__height = height
+ self.__format = format
+
+ def getname(self):
+ return self.__name
+
+ def getdescr(self):
+ return self.__descr
+
+ def getsize(self):
+ return self.__width, self.__height
+
+ def getformat(self):
+ return self.__format
+
class _Reader:
- def __init__(self, path):
- fd = Qt.OpenMovieFile(path, 0)
- self.movie, d1, d2 = Qt.NewMovieFromFile(fd, 0, 0)
- self.movietimescale = self.movie.GetMovieTimeScale()
- try:
- self.audiotrack = self.movie.GetMovieIndTrackType(1,
- QuickTime.AudioMediaCharacteristic, QuickTime.movieTrackCharacteristic)
- self.audiomedia = self.audiotrack.GetTrackMedia()
- except Qt.Error:
- self.audiotrack = self.audiomedia = None
- self.audiodescr = {}
- else:
- handle = Res.Handle('')
- n = self.audiomedia.GetMediaSampleDescriptionCount()
- self.audiomedia.GetMediaSampleDescription(1, handle)
- self.audiodescr = _audiodescr(handle.data)
- self.audiotimescale = self.audiomedia.GetMediaTimeScale()
- del handle
-
- try:
- self.videotrack = self.movie.GetMovieIndTrackType(1,
- QuickTime.VisualMediaCharacteristic, QuickTime.movieTrackCharacteristic)
- self.videomedia = self.videotrack.GetTrackMedia()
- except Qt.Error:
- self.videotrack = self.videomedia = self.videotimescale = None
- if self.videotrack:
- self.videotimescale = self.videomedia.GetMediaTimeScale()
- x0, y0, x1, y1 = self.movie.GetMovieBox()
- self.videodescr = {'width':(x1-x0), 'height':(y1-y0)}
- self._initgworld()
- self.videocurtime = None
- self.audiocurtime = None
+ def __init__(self, path):
+ fd = Qt.OpenMovieFile(path, 0)
+ self.movie, d1, d2 = Qt.NewMovieFromFile(fd, 0, 0)
+ self.movietimescale = self.movie.GetMovieTimeScale()
+ try:
+ self.audiotrack = self.movie.GetMovieIndTrackType(1,
+ QuickTime.AudioMediaCharacteristic, QuickTime.movieTrackCharacteristic)
+ self.audiomedia = self.audiotrack.GetTrackMedia()
+ except Qt.Error:
+ self.audiotrack = self.audiomedia = None
+ self.audiodescr = {}
+ else:
+ handle = Res.Handle('')
+ n = self.audiomedia.GetMediaSampleDescriptionCount()
+ self.audiomedia.GetMediaSampleDescription(1, handle)
+ self.audiodescr = _audiodescr(handle.data)
+ self.audiotimescale = self.audiomedia.GetMediaTimeScale()
+ del handle
+
+ try:
+ self.videotrack = self.movie.GetMovieIndTrackType(1,
+ QuickTime.VisualMediaCharacteristic, QuickTime.movieTrackCharacteristic)
+ self.videomedia = self.videotrack.GetTrackMedia()
+ except Qt.Error:
+ self.videotrack = self.videomedia = self.videotimescale = None
+ if self.videotrack:
+ self.videotimescale = self.videomedia.GetMediaTimeScale()
+ x0, y0, x1, y1 = self.movie.GetMovieBox()
+ self.videodescr = {'width':(x1-x0), 'height':(y1-y0)}
+ self._initgworld()
+ self.videocurtime = None
+ self.audiocurtime = None
-
- def __del__(self):
- self.audiomedia = None
- self.audiotrack = None
- self.videomedia = None
- self.videotrack = None
- self.movie = None
-
- def _initgworld(self):
- old_port, old_dev = Qdoffs.GetGWorld()
- try:
- movie_w = self.videodescr['width']
- movie_h = self.videodescr['height']
- movie_rect = (0, 0, movie_w, movie_h)
- self.gworld = Qdoffs.NewGWorld(32, movie_rect, None, None, QDOffscreen.keepLocal)
- self.pixmap = self.gworld.GetGWorldPixMap()
- Qdoffs.LockPixels(self.pixmap)
- Qdoffs.SetGWorld(self.gworld.as_GrafPtr(), None)
- Qd.EraseRect(movie_rect)
- self.movie.SetMovieGWorld(self.gworld.as_GrafPtr(), None)
- self.movie.SetMovieBox(movie_rect)
- self.movie.SetMovieActive(1)
- self.movie.MoviesTask(0)
- self.movie.SetMoviePlayHints(QuickTime.hintsHighQuality, QuickTime.hintsHighQuality)
- # XXXX framerate
- finally:
- Qdoffs.SetGWorld(old_port, old_dev)
-
- def _gettrackduration_ms(self, track):
- tracktime = track.GetTrackDuration()
- return self._movietime_to_ms(tracktime)
-
- def _movietime_to_ms(self, time):
- value, d1, d2 = Qt.ConvertTimeScale((time, self.movietimescale, None), 1000)
- return value
-
- def _videotime_to_ms(self, time):
- value, d1, d2 = Qt.ConvertTimeScale((time, self.videotimescale, None), 1000)
- return value
-
- def _audiotime_to_ms(self, time):
- value, d1, d2 = Qt.ConvertTimeScale((time, self.audiotimescale, None), 1000)
- return value
-
- def _videotime_to_movietime(self, time):
- value, d1, d2 = Qt.ConvertTimeScale((time, self.videotimescale, None),
- self.movietimescale)
- return value
-
- def HasAudio(self):
- return not self.audiotrack is None
-
- def HasVideo(self):
- return not self.videotrack is None
-
- def GetAudioDuration(self):
- if not self.audiotrack:
- return 0
- return self._gettrackduration_ms(self.audiotrack)
+
+ def __del__(self):
+ self.audiomedia = None
+ self.audiotrack = None
+ self.videomedia = None
+ self.videotrack = None
+ self.movie = None
+
+ def _initgworld(self):
+ old_port, old_dev = Qdoffs.GetGWorld()
+ try:
+ movie_w = self.videodescr['width']
+ movie_h = self.videodescr['height']
+ movie_rect = (0, 0, movie_w, movie_h)
+ self.gworld = Qdoffs.NewGWorld(32, movie_rect, None, None, QDOffscreen.keepLocal)
+ self.pixmap = self.gworld.GetGWorldPixMap()
+ Qdoffs.LockPixels(self.pixmap)
+ Qdoffs.SetGWorld(self.gworld.as_GrafPtr(), None)
+ Qd.EraseRect(movie_rect)
+ self.movie.SetMovieGWorld(self.gworld.as_GrafPtr(), None)
+ self.movie.SetMovieBox(movie_rect)
+ self.movie.SetMovieActive(1)
+ self.movie.MoviesTask(0)
+ self.movie.SetMoviePlayHints(QuickTime.hintsHighQuality, QuickTime.hintsHighQuality)
+ # XXXX framerate
+ finally:
+ Qdoffs.SetGWorld(old_port, old_dev)
+
+ def _gettrackduration_ms(self, track):
+ tracktime = track.GetTrackDuration()
+ return self._movietime_to_ms(tracktime)
+
+ def _movietime_to_ms(self, time):
+ value, d1, d2 = Qt.ConvertTimeScale((time, self.movietimescale, None), 1000)
+ return value
+
+ def _videotime_to_ms(self, time):
+ value, d1, d2 = Qt.ConvertTimeScale((time, self.videotimescale, None), 1000)
+ return value
+
+ def _audiotime_to_ms(self, time):
+ value, d1, d2 = Qt.ConvertTimeScale((time, self.audiotimescale, None), 1000)
+ return value
+
+ def _videotime_to_movietime(self, time):
+ value, d1, d2 = Qt.ConvertTimeScale((time, self.videotimescale, None),
+ self.movietimescale)
+ return value
+
+ def HasAudio(self):
+ return not self.audiotrack is None
+
+ def HasVideo(self):
+ return not self.videotrack is None
+
+ def GetAudioDuration(self):
+ if not self.audiotrack:
+ return 0
+ return self._gettrackduration_ms(self.audiotrack)
- def GetVideoDuration(self):
- if not self.videotrack:
- return 0
- return self._gettrackduration_ms(self.videotrack)
-
- def GetAudioFormat(self):
- if not self.audiodescr:
- return None, None, None, None, None
- bps = self.audiodescr['sampleSize']
- nch = self.audiodescr['numChannels']
- if nch == 1:
- channels = ['mono']
- elif nch == 2:
- channels = ['left', 'right']
- else:
- channels = map(lambda x: str(x+1), range(nch))
- if bps % 8:
- # Funny bits-per sample. We pretend not to understand
- blocksize = 0
- fpb = 0
- else:
- # QuickTime is easy (for as far as we support it): samples are always a whole
- # number of bytes, so frames are nchannels*samplesize, and there's one frame per block.
- blocksize = (bps/8)*nch
- fpb = 1
- if self.audiodescr['dataFormat'] == 'raw ':
- encoding = 'linear-excess'
- elif self.audiodescr['dataFormat'] == 'twos':
- encoding = 'linear-signed'
- else:
- encoding = 'quicktime-coding-%s'%self.audiodescr['dataFormat']
-## return audio.format.AudioFormatLinear('quicktime_audio', 'QuickTime Audio Format',
-## channels, encoding, blocksize=blocksize, fpb=fpb, bps=bps)
- return channels, encoding, blocksize, fpb, bps
-
- def GetAudioFrameRate(self):
- if not self.audiodescr:
- return None
- return int(self.audiodescr['sampleRate'])
-
- def GetVideoFormat(self):
- width = self.videodescr['width']
- height = self.videodescr['height']
- return VideoFormat('dummy_format', 'Dummy Video Format', width, height, macrgb)
-
- def GetVideoFrameRate(self):
- tv = self.videocurtime
- if tv == None:
- tv = 0
- flags = QuickTime.nextTimeStep|QuickTime.nextTimeEdgeOK
- tv, dur = self.videomedia.GetMediaNextInterestingTime(flags, tv, 1.0)
- dur = self._videotime_to_ms(dur)
- return int((1000.0/dur)+0.5)
-
- def ReadAudio(self, nframes, time=None):
- if not time is None:
- self.audiocurtime = time
- flags = QuickTime.nextTimeStep|QuickTime.nextTimeEdgeOK
- if self.audiocurtime == None:
- self.audiocurtime = 0
- tv = self.audiomedia.GetMediaNextInterestingTimeOnly(flags, self.audiocurtime, 1.0)
- if tv < 0 or (self.audiocurtime and tv < self.audiocurtime):
- return self._audiotime_to_ms(self.audiocurtime), None
- h = Res.Handle('')
- desc_h = Res.Handle('')
- size, actualtime, sampleduration, desc_index, actualcount, flags = \
- self.audiomedia.GetMediaSample(h, 0, tv, desc_h, nframes)
- self.audiocurtime = actualtime + actualcount*sampleduration
- return self._audiotime_to_ms(actualtime), h.data
-
- def ReadVideo(self, time=None):
- if not time is None:
- self.videocurtime = time
- flags = QuickTime.nextTimeStep
- if self.videocurtime == None:
- flags = flags | QuickTime.nextTimeEdgeOK
- self.videocurtime = 0
- tv = self.videomedia.GetMediaNextInterestingTimeOnly(flags, self.videocurtime, 1.0)
- if tv < 0 or (self.videocurtime and tv <= self.videocurtime):
- return self._videotime_to_ms(self.videocurtime), None
- self.videocurtime = tv
- moviecurtime = self._videotime_to_movietime(self.videocurtime)
- self.movie.SetMovieTimeValue(moviecurtime)
- self.movie.MoviesTask(0)
- return self._videotime_to_ms(self.videocurtime), self._getpixmapcontent()
-
- def _getpixmapcontent(self):
- """Shuffle the offscreen PixMap data, because it may have funny stride values"""
- rowbytes = Qdoffs.GetPixRowBytes(self.pixmap)
- width = self.videodescr['width']
- height = self.videodescr['height']
- start = 0
- rv = ''
- for i in range(height):
- nextline = Qdoffs.GetPixMapBytes(self.pixmap, start, width*4)
- start = start + rowbytes
- rv = rv + nextline
- return rv
+ def GetVideoDuration(self):
+ if not self.videotrack:
+ return 0
+ return self._gettrackduration_ms(self.videotrack)
+
+ def GetAudioFormat(self):
+ if not self.audiodescr:
+ return None, None, None, None, None
+ bps = self.audiodescr['sampleSize']
+ nch = self.audiodescr['numChannels']
+ if nch == 1:
+ channels = ['mono']
+ elif nch == 2:
+ channels = ['left', 'right']
+ else:
+ channels = map(lambda x: str(x+1), range(nch))
+ if bps % 8:
+ # Funny bits-per sample. We pretend not to understand
+ blocksize = 0
+ fpb = 0
+ else:
+ # QuickTime is easy (for as far as we support it): samples are always a whole
+ # number of bytes, so frames are nchannels*samplesize, and there's one frame per block.
+ blocksize = (bps/8)*nch
+ fpb = 1
+ if self.audiodescr['dataFormat'] == 'raw ':
+ encoding = 'linear-excess'
+ elif self.audiodescr['dataFormat'] == 'twos':
+ encoding = 'linear-signed'
+ else:
+ encoding = 'quicktime-coding-%s'%self.audiodescr['dataFormat']
+## return audio.format.AudioFormatLinear('quicktime_audio', 'QuickTime Audio Format',
+## channels, encoding, blocksize=blocksize, fpb=fpb, bps=bps)
+ return channels, encoding, blocksize, fpb, bps
+
+ def GetAudioFrameRate(self):
+ if not self.audiodescr:
+ return None
+ return int(self.audiodescr['sampleRate'])
+
+ def GetVideoFormat(self):
+ width = self.videodescr['width']
+ height = self.videodescr['height']
+ return VideoFormat('dummy_format', 'Dummy Video Format', width, height, macrgb)
+
+ def GetVideoFrameRate(self):
+ tv = self.videocurtime
+ if tv == None:
+ tv = 0
+ flags = QuickTime.nextTimeStep|QuickTime.nextTimeEdgeOK
+ tv, dur = self.videomedia.GetMediaNextInterestingTime(flags, tv, 1.0)
+ dur = self._videotime_to_ms(dur)
+ return int((1000.0/dur)+0.5)
+
+ def ReadAudio(self, nframes, time=None):
+ if not time is None:
+ self.audiocurtime = time
+ flags = QuickTime.nextTimeStep|QuickTime.nextTimeEdgeOK
+ if self.audiocurtime == None:
+ self.audiocurtime = 0
+ tv = self.audiomedia.GetMediaNextInterestingTimeOnly(flags, self.audiocurtime, 1.0)
+ if tv < 0 or (self.audiocurtime and tv < self.audiocurtime):
+ return self._audiotime_to_ms(self.audiocurtime), None
+ h = Res.Handle('')
+ desc_h = Res.Handle('')
+ size, actualtime, sampleduration, desc_index, actualcount, flags = \
+ self.audiomedia.GetMediaSample(h, 0, tv, desc_h, nframes)
+ self.audiocurtime = actualtime + actualcount*sampleduration
+ return self._audiotime_to_ms(actualtime), h.data
+
+ def ReadVideo(self, time=None):
+ if not time is None:
+ self.videocurtime = time
+ flags = QuickTime.nextTimeStep
+ if self.videocurtime == None:
+ flags = flags | QuickTime.nextTimeEdgeOK
+ self.videocurtime = 0
+ tv = self.videomedia.GetMediaNextInterestingTimeOnly(flags, self.videocurtime, 1.0)
+ if tv < 0 or (self.videocurtime and tv <= self.videocurtime):
+ return self._videotime_to_ms(self.videocurtime), None
+ self.videocurtime = tv
+ moviecurtime = self._videotime_to_movietime(self.videocurtime)
+ self.movie.SetMovieTimeValue(moviecurtime)
+ self.movie.MoviesTask(0)
+ return self._videotime_to_ms(self.videocurtime), self._getpixmapcontent()
+
+ def _getpixmapcontent(self):
+ """Shuffle the offscreen PixMap data, because it may have funny stride values"""
+ rowbytes = Qdoffs.GetPixRowBytes(self.pixmap)
+ width = self.videodescr['width']
+ height = self.videodescr['height']
+ start = 0
+ rv = ''
+ for i in range(height):
+ nextline = Qdoffs.GetPixMapBytes(self.pixmap, start, width*4)
+ start = start + rowbytes
+ rv = rv + nextline
+ return rv
def reader(url):
- try:
- rdr = _Reader(url)
- except IOError:
- return None
- return rdr
+ try:
+ rdr = _Reader(url)
+ except IOError:
+ return None
+ return rdr
def _test():
- import EasyDialogs
- try:
- import img
- except ImportError:
- img = None
- import MacOS
- Qt.EnterMovies()
- path = EasyDialogs.AskFileForOpen(message='Video to convert')
- if not path: sys.exit(0)
- rdr = reader(path)
- if not rdr:
- sys.exit(1)
- dstdir = EasyDialogs.AskFileForSave(message='Name for output folder')
- if not dstdir: sys.exit(0)
- num = 0
- os.mkdir(dstdir)
- videofmt = rdr.GetVideoFormat()
- imgfmt = videofmt.getformat()
- imgw, imgh = videofmt.getsize()
- timestamp, data = rdr.ReadVideo()
- while data:
- fname = 'frame%04.4d.jpg'%num
- num = num+1
- pname = os.path.join(dstdir, fname)
- if not img: print 'Not',
- print 'Writing %s, size %dx%d, %d bytes'%(fname, imgw, imgh, len(data))
- if img:
- wrt = img.writer(imgfmt, pname)
- wrt.width = imgw
- wrt.height = imgh
- wrt.write(data)
- timestamp, data = rdr.ReadVideo()
- MacOS.SetCreatorAndType(pname, 'ogle', 'JPEG')
- if num > 20:
- print 'stopping at 20 frames so your disk does not fill up:-)'
- break
- print 'Total frames:', num
-
+ import EasyDialogs
+ try:
+ import img
+ except ImportError:
+ img = None
+ import MacOS
+ Qt.EnterMovies()
+ path = EasyDialogs.AskFileForOpen(message='Video to convert')
+ if not path: sys.exit(0)
+ rdr = reader(path)
+ if not rdr:
+ sys.exit(1)
+ dstdir = EasyDialogs.AskFileForSave(message='Name for output folder')
+ if not dstdir: sys.exit(0)
+ num = 0
+ os.mkdir(dstdir)
+ videofmt = rdr.GetVideoFormat()
+ imgfmt = videofmt.getformat()
+ imgw, imgh = videofmt.getsize()
+ timestamp, data = rdr.ReadVideo()
+ while data:
+ fname = 'frame%04.4d.jpg'%num
+ num = num+1
+ pname = os.path.join(dstdir, fname)
+ if not img: print 'Not',
+ print 'Writing %s, size %dx%d, %d bytes'%(fname, imgw, imgh, len(data))
+ if img:
+ wrt = img.writer(imgfmt, pname)
+ wrt.width = imgw
+ wrt.height = imgh
+ wrt.write(data)
+ timestamp, data = rdr.ReadVideo()
+ MacOS.SetCreatorAndType(pname, 'ogle', 'JPEG')
+ if num > 20:
+ print 'stopping at 20 frames so your disk does not fill up:-)'
+ break
+ print 'Total frames:', num
+
if __name__ == '__main__':
- _test()
- sys.exit(1)
-
+ _test()
+ sys.exit(1)
+