mirror of
https://github.com/python/cpython.git
synced 2025-08-04 17:08:35 +00:00
Committed a more or less working version.
This commit is contained in:
parent
80ffd6683c
commit
17448e2408
56 changed files with 12110 additions and 0 deletions
103
Mac/Lib/toolbox/AppleEvents.py
Normal file
103
Mac/Lib/toolbox/AppleEvents.py
Normal file
|
@ -0,0 +1,103 @@
|
|||
# Generated from 'D:Development:THINK C:Mac #includes:Apple #includes:AppleEvents.h'
|
||||
typeBoolean = 'bool'
|
||||
typeChar = 'TEXT'
|
||||
typeSMInt = 'shor'
|
||||
typeInteger = 'long'
|
||||
typeSMFloat = 'sing'
|
||||
typeFloat = 'doub'
|
||||
typeLongInteger = 'long'
|
||||
typeShortInteger = 'shor'
|
||||
typeLongFloat = 'doub'
|
||||
typeShortFloat = 'sing'
|
||||
typeExtended = 'exte'
|
||||
typeComp = 'comp'
|
||||
typeMagnitude = 'magn'
|
||||
typeAEList = 'list'
|
||||
typeAERecord = 'reco'
|
||||
typeAppleEvent = 'aevt'
|
||||
typeTrue = 'true'
|
||||
typeFalse = 'fals'
|
||||
typeAlias = 'alis'
|
||||
typeEnumerated = 'enum'
|
||||
typeType = 'type'
|
||||
typeAppParameters = 'appa'
|
||||
typeProperty = 'prop'
|
||||
typeFSS = 'fss '
|
||||
typeKeyword = 'keyw'
|
||||
typeSectionH = 'sect'
|
||||
typeWildCard = '****'
|
||||
typeApplSignature = 'sign'
|
||||
typeSessionID = 'ssid'
|
||||
typeTargetID = 'targ'
|
||||
typeProcessSerialNumber = 'psn '
|
||||
typeNull = 'null'
|
||||
keyDirectObject = '----'
|
||||
keyErrorNumber = 'errn'
|
||||
keyErrorString = 'errs'
|
||||
keyProcessSerialNumber = 'psn '
|
||||
keyTransactionIDAttr = 'tran'
|
||||
keyReturnIDAttr = 'rtid'
|
||||
keyEventClassAttr = 'evcl'
|
||||
keyEventIDAttr = 'evid'
|
||||
keyAddressAttr = 'addr'
|
||||
keyOptionalKeywordAttr = 'optk'
|
||||
keyTimeoutAttr = 'timo'
|
||||
keyInteractLevelAttr = 'inte'
|
||||
keyEventSourceAttr = 'esrc'
|
||||
keyMissedKeywordAttr = 'miss'
|
||||
keyOriginalAddressAttr = 'from'
|
||||
keyPreDispatch = 'phac'
|
||||
keySelectProc = 'selh'
|
||||
keyAERecorderCount = 'recr'
|
||||
keyAEVersion = 'vers'
|
||||
kCoreEventClass = 'aevt'
|
||||
kAEOpenApplication = 'oapp'
|
||||
kAEOpenDocuments = 'odoc'
|
||||
kAEPrintDocuments = 'pdoc'
|
||||
kAEQuitApplication = 'quit'
|
||||
kAEAnswer = 'ansr'
|
||||
kAEApplicationDied = 'obit'
|
||||
kAENoReply = 0x00000001
|
||||
kAEQueueReply = 0x00000002
|
||||
kAEWaitReply = 0x00000003
|
||||
kAENeverInteract = 0x00000010
|
||||
kAECanInteract = 0x00000020
|
||||
kAEAlwaysInteract = 0x00000030
|
||||
kAECanSwitchLayer = 0x00000040
|
||||
kAEDontReconnect = 0x00000080
|
||||
kAEDontRecord = 0x00001000
|
||||
kAEDontExecute = 0x00002000
|
||||
kAENormalPriority = 0x00000000
|
||||
kAEStartRecording = 'reca'
|
||||
kAEStopRecording = 'recc'
|
||||
kAENotifyStartRecording = 'rec1'
|
||||
kAENotifyStopRecording = 'rec0'
|
||||
kAENotifyRecording = 'recr'
|
||||
kAutoGenerateReturnID = -1
|
||||
kAnyTransactionID = 0
|
||||
kAEDefaultTimeout = -1
|
||||
kNoTimeOut = -2
|
||||
kAENoDispatch = 0
|
||||
kAEUseStandardDispatch = -1
|
||||
errAECoercionFail = -1700
|
||||
errAEDescNotFound = -1701
|
||||
errAECorruptData = -1702
|
||||
errAEWrongDataType = -1703
|
||||
errAENotAEDesc = -1704
|
||||
errAEBadListItem = -1705
|
||||
errAENewerVersion = -1706
|
||||
errAENotAppleEvent = -1707
|
||||
errAEEventNotHandled = -1708
|
||||
errAEReplyNotValid = -1709
|
||||
errAEUnknownSendMode = -1710
|
||||
errAEWaitCanceled = -1711
|
||||
errAETimeout = -1712
|
||||
errAENoUserInteraction = -1713
|
||||
errAENotASpecialFunction = -1714
|
||||
errAEParamMissed = -1715
|
||||
errAEUnknownAddressType = -1716
|
||||
errAEHandlerNotFound = -1717
|
||||
errAEReplyNotArrived = -1718
|
||||
errAEIllegalIndex = -1719
|
||||
errAEUnknownObjectType = -1731
|
||||
errAERecordingIsAlreadyOn = -1732
|
41
Mac/Lib/toolbox/Controls.py
Normal file
41
Mac/Lib/toolbox/Controls.py
Normal file
|
@ -0,0 +1,41 @@
|
|||
# Generated from 'D:Development:THINK C:Mac #includes:Apple #includes:Controls.h'
|
||||
pushButProc = 0
|
||||
checkBoxProc = 1
|
||||
radioButProc = 2
|
||||
useWFont = 8
|
||||
scrollBarProc = 16
|
||||
inButton = 10
|
||||
inCheckBox = 11
|
||||
inUpButton = 20
|
||||
inDownButton = 21
|
||||
inPageUp = 22
|
||||
inPageDown = 23
|
||||
inThumb = 129
|
||||
popupMenuProc = 1008
|
||||
inLabel = 1
|
||||
inMenu = 2
|
||||
inTriangle = 4
|
||||
popupUseWFont = 1 << 3
|
||||
popupTitleOutline = 1 << 11
|
||||
popupTitleExtend = 1 << 14
|
||||
popupTitleLeftJust = 0x00000000
|
||||
popupTitleCenterJust = 0x00000001
|
||||
popupTitleRightJust = 0x000000FF
|
||||
noConstraint = 0
|
||||
hAxisOnly = 1
|
||||
vAxisOnly = 2
|
||||
drawCntl = 0
|
||||
testCntl = 1
|
||||
calcCRgns = 2
|
||||
initCntl = 3
|
||||
dispCntl = 4
|
||||
posCntl = 5
|
||||
thumbCntl = 6
|
||||
dragCntl = 7
|
||||
autoTrack = 8
|
||||
calcCntlRgn = 10
|
||||
calcThumbRgn = 11
|
||||
cFrameColor = 0
|
||||
cBodyColor = 1
|
||||
cTextColor = 2
|
||||
cThumbColor = 3
|
20
Mac/Lib/toolbox/Dialogs.py
Normal file
20
Mac/Lib/toolbox/Dialogs.py
Normal file
|
@ -0,0 +1,20 @@
|
|||
# Generated from 'D:Development:THINK C:Mac #includes:Apple #includes:Dialogs.h'
|
||||
ctrlItem = 4
|
||||
btnCtrl = 0
|
||||
chkCtrl = 1
|
||||
radCtrl = 2
|
||||
resCtrl = 3
|
||||
statText = 8
|
||||
editText = 16
|
||||
iconItem = 32
|
||||
picItem = 64
|
||||
userItem = 0
|
||||
itemDisable = 128
|
||||
ok = 1
|
||||
cancel = 2
|
||||
stopIcon = 0
|
||||
noteIcon = 1
|
||||
cautionIcon = 2
|
||||
overlayDITL = 0
|
||||
appendDITLRight = 1
|
||||
appendDITLBottom = 2
|
49
Mac/Lib/toolbox/Events.py
Normal file
49
Mac/Lib/toolbox/Events.py
Normal file
|
@ -0,0 +1,49 @@
|
|||
# Generated from 'D:Development:THINK C:Mac #includes:Apple #includes:Events.h'
|
||||
nullEvent = 0
|
||||
mouseDown = 1
|
||||
mouseUp = 2
|
||||
keyDown = 3
|
||||
keyUp = 4
|
||||
autoKey = 5
|
||||
updateEvt = 6
|
||||
diskEvt = 7
|
||||
activateEvt = 8
|
||||
osEvt = 15
|
||||
mDownMask = 2
|
||||
mUpMask = 4
|
||||
keyDownMask = 8
|
||||
keyUpMask = 16
|
||||
autoKeyMask = 32
|
||||
updateMask = 64
|
||||
diskMask = 128
|
||||
activMask = 256
|
||||
highLevelEventMask = 1024
|
||||
osMask = -32768
|
||||
everyEvent = -1
|
||||
charCodeMask = 0x000000FF
|
||||
keyCodeMask = 0x0000FF00
|
||||
adbAddrMask = 0x00FF0000
|
||||
osEvtMessageMask = 0xFF000000
|
||||
mouseMovedMessage = 0xFA
|
||||
suspendResumeMessage = 0x01
|
||||
resumeFlag = 1
|
||||
convertClipboardFlag = 2
|
||||
activeFlag = 1
|
||||
btnState = 128
|
||||
cmdKey = 256
|
||||
shiftKey = 512
|
||||
alphaLock = 1024
|
||||
optionKey = 2048
|
||||
controlKey = 4096
|
||||
networkEvt = 10
|
||||
driverEvt = 11
|
||||
app1Evt = 12
|
||||
app2Evt = 13
|
||||
app3Evt = 14
|
||||
app4Evt = 15
|
||||
networkMask = 1024
|
||||
driverMask = 2048
|
||||
app1Mask = 4096
|
||||
app2Mask = 8192
|
||||
app3Mask = 16384
|
||||
app4Mask = -32768
|
12
Mac/Lib/toolbox/Menus.py
Normal file
12
Mac/Lib/toolbox/Menus.py
Normal file
|
@ -0,0 +1,12 @@
|
|||
# Generated from 'D:Development:THINK C:Mac #includes:Apple #includes:Menus.h'
|
||||
mDrawMsg = 0
|
||||
mChooseMsg = 1
|
||||
mSizeMsg = 2
|
||||
mDrawItemMsg = 4
|
||||
mCalcItemMsg = 5
|
||||
textMenuProc = 0
|
||||
hMenuCmd = 27
|
||||
hierMenu = -1
|
||||
mPopUpMsg = 3
|
||||
mctAllItems = -98
|
||||
mctLastIDIndic = -99 /*last color table entry has this in ID field*/
|
12
Mac/Lib/toolbox/Resources.py
Normal file
12
Mac/Lib/toolbox/Resources.py
Normal file
|
@ -0,0 +1,12 @@
|
|||
# Generated from 'D:Development:THINK C:Mac #includes:Apple #includes:Resources.h'
|
||||
resSysHeap = 64
|
||||
resPurgeable = 32
|
||||
resLocked = 16
|
||||
resProtected = 8
|
||||
resPreload = 4
|
||||
resChanged = 2
|
||||
mapReadOnly = 128
|
||||
mapCompact = 64
|
||||
mapChanged = 32
|
||||
mapTrue = 0xFFFF
|
||||
mapFalse = 0xFF00
|
101
Mac/Lib/toolbox/Sound.py
Normal file
101
Mac/Lib/toolbox/Sound.py
Normal file
|
@ -0,0 +1,101 @@
|
|||
# Generated from 'D:Development:THINK C:Mac #includes:Apple #includes:Sound.h'
|
||||
swMode = -1
|
||||
ftMode = 1
|
||||
ffMode = 0
|
||||
rate22khz = 0x56EE8BA3
|
||||
rate11khz = 0x2B7745D1
|
||||
squareWaveSynth = 1
|
||||
waveTableSynth = 3
|
||||
sampledSynth = 5
|
||||
MACE3snthID = 11
|
||||
MACE6snthID = 13
|
||||
nullCmd = 0
|
||||
initCmd = 1
|
||||
freeCmd = 2
|
||||
quietCmd = 3
|
||||
flushCmd = 4
|
||||
reInitCmd = 5
|
||||
waitCmd = 10
|
||||
pauseCmd = 11
|
||||
resumeCmd = 12
|
||||
callBackCmd = 13
|
||||
syncCmd = 14
|
||||
emptyCmd = 15
|
||||
tickleCmd = 20
|
||||
requestNextCmd = 21
|
||||
howOftenCmd = 22
|
||||
wakeUpCmd = 23
|
||||
availableCmd = 24
|
||||
versionCmd = 25
|
||||
totalLoadCmd = 26
|
||||
loadCmd = 27
|
||||
scaleCmd = 30
|
||||
tempoCmd = 31
|
||||
freqDurationCmd = 40
|
||||
restCmd = 41
|
||||
freqCmd = 42
|
||||
ampCmd = 43
|
||||
timbreCmd = 44
|
||||
getAmpCmd = 45
|
||||
waveTableCmd = 60
|
||||
phaseCmd = 61
|
||||
soundCmd = 80
|
||||
bufferCmd = 81
|
||||
rateCmd = 82
|
||||
continueCmd = 83
|
||||
doubleBufferCmd = 84
|
||||
getRateCmd = 85
|
||||
sizeCmd = 90
|
||||
convertCmd = 91
|
||||
stdQLength = 128
|
||||
dataOffsetFlag = 0x8000
|
||||
waveInitChannelMask = 0x07
|
||||
waveInitChannel0 = 0x04
|
||||
waveInitChannel1 = 0x05
|
||||
waveInitChannel2 = 0x06
|
||||
waveInitChannel3 = 0x07
|
||||
initPanMask = 0x0003
|
||||
initSRateMask = 0x0030
|
||||
initStereoMask = 0x00C0
|
||||
initCompMask = 0xFF00
|
||||
initChanLeft = 0x0002
|
||||
initChanRight = 0x0003
|
||||
initNoInterp = 0x0004
|
||||
initNoDrop = 0x0008
|
||||
initMono = 0x0080
|
||||
initStereo = 0x00C0
|
||||
initMACE3 = 0x0300
|
||||
initMACE6 = 0x0400
|
||||
initChan0 = 0x0004
|
||||
initChan1 = 0x0005
|
||||
initChan2 = 0x0006
|
||||
initChan3 = 0x0007
|
||||
stdSH = 0x00
|
||||
extSH = 0xFF
|
||||
cmpSH = 0xFE
|
||||
notCompressed = 0
|
||||
twoToOne = 1
|
||||
eightToThree = 2
|
||||
threeToOne = 3
|
||||
sixToOne = 4
|
||||
outsideCmpSH = 0
|
||||
insideCmpSH = 1
|
||||
aceSuccess = 0
|
||||
aceMemFull = 1
|
||||
aceNilBlock = 2
|
||||
aceBadComp = 3
|
||||
aceBadEncode = 4
|
||||
aceBadDest = 5
|
||||
aceBadCmd = 6
|
||||
sixToOnePacketSize = 8
|
||||
threeToOnePacketSize = 16
|
||||
stateBlockSize = 64
|
||||
leftOverBlockSize = 32
|
||||
firstSoundFormat = 0x0001
|
||||
secondSoundFormat = 0x0002
|
||||
dbBufferReady = 0x00000001
|
||||
dbLastBuffer = 0x00000004
|
||||
sysBeepDisable = 0x0000
|
||||
sysBeepEnable = 0x0001
|
||||
unitTypeNoSelection = 0xFFFF
|
||||
unitTypeSeconds = 0x0000
|
41
Mac/Lib/toolbox/Windows.py
Normal file
41
Mac/Lib/toolbox/Windows.py
Normal file
|
@ -0,0 +1,41 @@
|
|||
# Generated from 'D:Development:THINK C:Mac #includes:Apple #includes:Windows.h'
|
||||
documentProc = 0
|
||||
dBoxProc = 1
|
||||
plainDBox = 2
|
||||
altDBoxProc = 3
|
||||
noGrowDocProc = 4
|
||||
movableDBoxProc = 5
|
||||
zoomDocProc = 8
|
||||
zoomNoGrow = 12
|
||||
rDocProc = 16
|
||||
dialogKind = 2
|
||||
userKind = 8
|
||||
inDesk = 0
|
||||
inMenuBar = 1
|
||||
inSysWindow = 2
|
||||
inContent = 3
|
||||
inDrag = 4
|
||||
inGrow = 5
|
||||
inGoAway = 6
|
||||
inZoomIn = 7
|
||||
inZoomOut = 8
|
||||
wDraw = 0
|
||||
wHit = 1
|
||||
wCalcRgns = 2
|
||||
wNew = 3
|
||||
wDispose = 4
|
||||
wGrow = 5
|
||||
wDrawGIcon = 6
|
||||
wNoHit = 0
|
||||
wInContent = 1
|
||||
wInDrag = 2
|
||||
wInGrow = 3
|
||||
wInGoAway = 4
|
||||
wInZoomIn = 5
|
||||
wInZoomOut = 6
|
||||
deskPatID = 16
|
||||
wContentColor = 0
|
||||
wFrameColor = 1
|
||||
wTextColor = 2
|
||||
wHiliteColor = 3
|
||||
wTitleBarColor = 4
|
296
Mac/Lib/toolbox/aetools.py
Normal file
296
Mac/Lib/toolbox/aetools.py
Normal file
|
@ -0,0 +1,296 @@
|
|||
import struct
|
||||
import types
|
||||
import AE
|
||||
import MacOS
|
||||
import StringIO
|
||||
|
||||
AEDescType = type(AE.AECreateDesc('TEXT', ''))
|
||||
|
||||
def pack(x):
|
||||
if x == None:
|
||||
return AE.AECreateDesc('null', '')
|
||||
t = type(x)
|
||||
if t == AEDescType:
|
||||
return x
|
||||
if t == types.IntType:
|
||||
return AE.AECreateDesc('long', struct.pack('l', x))
|
||||
if t == types.FloatType:
|
||||
return AE.AECreateDesc('exte', struct.pack('d', x)[2:])
|
||||
if t == types.StringType:
|
||||
return AE.AECreateDesc('TEXT', x)
|
||||
if t == types.ListType:
|
||||
list = AE.AECreateList('', 0)
|
||||
for item in x:
|
||||
list.AEPutDesc(0, pack(item))
|
||||
return list
|
||||
if t == types.TupleType:
|
||||
t, d = x
|
||||
return AE.AECreateDesc(t, d)
|
||||
if t == types.DictionaryType:
|
||||
record = AE.AECreateList('', 1)
|
||||
for key, value in x.items():
|
||||
record.AEPutKeyDesc(key, pack(value))
|
||||
if t == types.InstanceType and hasattr(x, '__aepack__'):
|
||||
return x.__aepack__()
|
||||
return AE.AECreateDesc('TEXT', repr(x)) # Copout
|
||||
|
||||
def unpack(desc):
|
||||
t = desc.type
|
||||
if t == 'TEXT':
|
||||
return desc.data
|
||||
if t == 'fals':
|
||||
return 0
|
||||
if t == 'true':
|
||||
return 1
|
||||
if t == 'long':
|
||||
return struct.unpack('l', desc.data)[0]
|
||||
if t == 'shor':
|
||||
return struct.unpack('h', desc.data)[0]
|
||||
if t == 'sing':
|
||||
return struct.unpack('f', desc.data)[0]
|
||||
if t == 'exte':
|
||||
data = desc.data
|
||||
return struct.unpack('d', data[:2] + data)[0]
|
||||
if t in ('doub', 'comp', 'magn'):
|
||||
return unpack(desc.AECoerceDesc('exte'))
|
||||
if t == 'enum':
|
||||
return ('enum', desc.data)
|
||||
if t == 'null':
|
||||
return None
|
||||
if t == 'list':
|
||||
l = []
|
||||
for i in range(desc.AECountItems()):
|
||||
keyword, item = desc.AEGetNthDesc(i+1, '****')
|
||||
l.append(unpack(item))
|
||||
return l
|
||||
if t == 'reco':
|
||||
d = {}
|
||||
for i in range(desc.AECountItems()):
|
||||
keyword, item = desc.AEGetNthDesc(i+1, '****')
|
||||
d[keyword] = unpack(item)
|
||||
return d
|
||||
if t == 'obj ':
|
||||
return unpackobject(desc.data)
|
||||
return desc.type, desc.data # Copout
|
||||
|
||||
class Object:
|
||||
def __init__(self, dict = {}):
|
||||
self.dict = dict
|
||||
for key, value in dict.items():
|
||||
self.dict[key] = value
|
||||
def __repr__(self):
|
||||
return "Object(%s)" % `self.dict`
|
||||
def __str__(self):
|
||||
want = self.dict['want']
|
||||
form = self.dict['form']
|
||||
seld = self.dict['seld']
|
||||
s = "%s %s %s" % (nicewant(want), niceform(form), niceseld(seld))
|
||||
fr = self.dict['from']
|
||||
if fr:
|
||||
s = s + " of " + str(fr)
|
||||
return s
|
||||
def __aepack__(self):
|
||||
f = StringIO.StringIO()
|
||||
putlong(f, len(self.dict))
|
||||
putlong(f, 0)
|
||||
for key, value in self.dict.items():
|
||||
putcode(f, key)
|
||||
desc = pack(value)
|
||||
putcode(f, desc.type)
|
||||
data = desc.data
|
||||
putlong(f, len(data))
|
||||
f.write(data)
|
||||
return AE.AECreateDesc('obj ', f.getvalue())
|
||||
|
||||
def nicewant(want):
|
||||
if type(want) == types.TupleType and len(want) == 2:
|
||||
return reallynicewant(want)
|
||||
else:
|
||||
return `want`
|
||||
|
||||
def reallynicewant((t, w)):
|
||||
if t != 'type': return `t, w`
|
||||
# These should be taken from the "elements" of the 'aete' resource
|
||||
if w == 'cins': return 'insertion point'
|
||||
if w == 'cha ': return 'character'
|
||||
if w == 'word': return 'word'
|
||||
if w == 'para': return 'paragraph'
|
||||
if w == 'ccel': return 'cell'
|
||||
if w == 'ccol': return 'column'
|
||||
if w == 'crow': return 'row'
|
||||
if w == 'crng': return 'range'
|
||||
if w == 'wind': return 'window'
|
||||
if w == 'docu': return 'document'
|
||||
return `w`
|
||||
|
||||
def niceform(form):
|
||||
if type(form) == types.TupleType and len(form) == 2:
|
||||
return reallyniceform(form)
|
||||
else:
|
||||
return `form`
|
||||
|
||||
def reallyniceform((t, f)):
|
||||
if t <> 'enum': return `t, f`
|
||||
if f == 'indx': return ''
|
||||
if f == 'name': return ''
|
||||
if f == 'rele': return ''
|
||||
return `f`
|
||||
|
||||
def niceseld(seld):
|
||||
if type(seld) == types.TupleType and len(seld) == 2:
|
||||
return reallyniceseld(seld)
|
||||
else:
|
||||
return `seld`
|
||||
|
||||
def reallyniceseld((t, s)):
|
||||
if t == 'long': return `s`
|
||||
if t == 'TEXT': return `s`
|
||||
if t == 'enum':
|
||||
if s == 'next': return 'after'
|
||||
if s == 'prev': return 'before'
|
||||
return `t, s`
|
||||
|
||||
def unpackobject(data):
|
||||
f = StringIO.StringIO(data)
|
||||
nkey = getlong(f)
|
||||
dumm = getlong(f)
|
||||
dict = {}
|
||||
for i in range(nkey):
|
||||
keyw = getcode(f)
|
||||
type = getcode(f)
|
||||
size = getlong(f)
|
||||
if size:
|
||||
data = f.read(size)
|
||||
else:
|
||||
data = ''
|
||||
desc = AE.AECreateDesc(type, data)
|
||||
dict[keyw] = unpack(desc)
|
||||
return Object(dict)
|
||||
|
||||
|
||||
# --- get various data types from a "file"
|
||||
|
||||
def getword(f, *args):
|
||||
getalgn(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):
|
||||
getalgn(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 getcode(f, *args):
|
||||
getalgn(f)
|
||||
s = f.read(4)
|
||||
if len(s) < 4:
|
||||
raise EOFError, 'in getcode' + 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
|
||||
|
||||
def getalgn(f):
|
||||
if f.tell() & 1:
|
||||
c = f.read(1)
|
||||
##if c <> '\0':
|
||||
## print 'align:', `c`
|
||||
|
||||
# ---- end get routines
|
||||
|
||||
|
||||
# ---- put various data types to a "file"
|
||||
|
||||
def putlong(f, value):
|
||||
putalgn(f)
|
||||
f.write(chr((value>>24)&0xff))
|
||||
f.write(chr((value>>16)&0xff))
|
||||
f.write(chr((value>>8)&0xff))
|
||||
f.write(chr(value&0xff))
|
||||
|
||||
def putword(f, value):
|
||||
putalgn(f)
|
||||
f.write(chr((value>>8)&0xff))
|
||||
f.write(chr(value&0xff))
|
||||
|
||||
def putcode(f, value):
|
||||
if type(value) != types.StringType or len(value) != 4:
|
||||
raise TypeError, "ostype must be 4-char string"
|
||||
putalgn(f)
|
||||
f.write(value)
|
||||
|
||||
def putpstr(f, value):
|
||||
if type(value) != types.StringType or len(value) > 255:
|
||||
raise TypeError, "pstr must be string <= 255 chars"
|
||||
f.write(chr(len(value)) + value)
|
||||
|
||||
def putalgn(f):
|
||||
if f.tell() & 1:
|
||||
f.write('\0')
|
||||
|
||||
# ---- end put routines
|
||||
|
||||
|
||||
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
|
||||
]
|
||||
|
||||
def missed(ae):
|
||||
try:
|
||||
desc = ae.AEGetAttributeDesc('miss', 'keyw')
|
||||
except AE.Error, msg:
|
||||
return None
|
||||
return desc.data
|
||||
|
||||
def unpackevent(ae):
|
||||
parameters = {}
|
||||
while 1:
|
||||
key = missed(ae)
|
||||
if not key: break
|
||||
parameters[key] = unpack(ae.AEGetParamDesc(key, '****'))
|
||||
attributes = {}
|
||||
for key in aekeywords:
|
||||
try:
|
||||
desc = ae.AEGetAttributeDesc(key, '****')
|
||||
except (AE.Error, MacOS.Error), msg:
|
||||
if msg[0] != -1701:
|
||||
raise sys.exc_type, sys.exc_value
|
||||
continue
|
||||
attributes[key] = unpack(desc)
|
||||
return parameters, attributes
|
||||
|
||||
def packevent(ae, parameters = {}, attributes = {}):
|
||||
for key, value in parameters.items():
|
||||
ae.AEPutParamDesc(key, pack(value))
|
||||
for key, value in attributes.items():
|
||||
ae.AEPutAttributeDesc(key, pack(value))
|
||||
|
||||
def test():
|
||||
target = AE.AECreateDesc('sign', 'KAHL')
|
||||
ae = AE.AECreateAppleEvent('aevt', 'oapp', target, -1, 0)
|
||||
print unpackevent(ae)
|
||||
|
||||
if __name__ == '__main__':
|
||||
test()
|
Loading…
Add table
Add a link
Reference in a new issue