summaryrefslogtreecommitdiff
path: root/Lib/plat-mac/argvemulator.py
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/plat-mac/argvemulator.py')
-rw-r--r--Lib/plat-mac/argvemulator.py89
1 files changed, 0 insertions, 89 deletions
diff --git a/Lib/plat-mac/argvemulator.py b/Lib/plat-mac/argvemulator.py
deleted file mode 100644
index 676e80ac5c..0000000000
--- a/Lib/plat-mac/argvemulator.py
+++ /dev/null
@@ -1,89 +0,0 @@
-"""argvemulator - create sys.argv from OSA events. Used by applets that
-want unix-style arguments.
-"""
-
-import sys
-import traceback
-from Carbon import AE
-from Carbon.AppleEvents import *
-from Carbon import Evt
-from Carbon import File
-from Carbon.Events import *
-import aetools
-
-class ArgvCollector:
-
- """A minimal FrameWork.Application-like class"""
-
- def __init__(self):
- self.quitting = 0
- # Remove the funny -psn_xxx_xxx argument
- if len(sys.argv) > 1 and sys.argv[1][:4] == '-psn':
- del sys.argv[1]
-
- AE.AEInstallEventHandler(kCoreEventClass, kAEOpenApplication, self.__runapp)
- AE.AEInstallEventHandler(kCoreEventClass, kAEOpenDocuments, self.__openfiles)
-
- def close(self):
- AE.AERemoveEventHandler(kCoreEventClass, kAEOpenApplication)
- AE.AERemoveEventHandler(kCoreEventClass, kAEOpenDocuments)
-
- def mainloop(self, mask = highLevelEventMask, timeout = 1*60):
- # Note: this is not the right way to run an event loop in OSX or even
- # "recent" versions of MacOS9. This is however code that has proven
- # itself.
- stoptime = Evt.TickCount() + timeout
- while not self.quitting and Evt.TickCount() < stoptime:
- self._dooneevent(mask, timeout)
-
- if not self.quitting:
- print("argvemulator: timeout waiting for arguments")
-
- self.close()
-
- def _dooneevent(self, mask = highLevelEventMask, timeout = 1*60):
- got, event = Evt.WaitNextEvent(mask, timeout)
- if got:
- self._lowlevelhandler(event)
-
- def _lowlevelhandler(self, event):
- what, message, when, where, modifiers = event
- h, v = where
- if what == kHighLevelEvent:
- try:
- AE.AEProcessAppleEvent(event)
- except AE.Error as err:
- msg = "High Level Event: %r %r" % (hex(message), hex(h | (v<<16)))
- print('AE error: ', err)
- print('in', msg)
- traceback.print_exc()
- return
- else:
- print("Unhandled event:", event)
-
-
- def _quit(self):
- self.quitting = 1
-
- def __runapp(self, requestevent, replyevent):
- self._quit()
-
- def __openfiles(self, requestevent, replyevent):
- try:
- listdesc = requestevent.AEGetParamDesc(keyDirectObject, typeAEList)
- for i in range(listdesc.AECountItems()):
- aliasdesc = listdesc.AEGetNthDesc(i+1, typeAlias)[1]
- alias = File.Alias(rawdata=aliasdesc.data)
- fsref = alias.FSResolveAlias(None)[0]
- pathname = fsref.as_pathname()
- sys.argv.append(pathname)
- except Exception as e:
- print("argvemulator.py warning: can't unpack an open document event")
- import traceback
- traceback.print_exc()
-
- self._quit()
-
-if __name__ == '__main__':
- ArgvCollector().mainloop()
- print("sys.argv=", sys.argv)