Oops... I Inadvertently lost their cvs files...
diff --git a/Mac/Lib/test/tell.py b/Mac/Lib/test/tell.py
new file mode 100644
index 0000000..74e0ca0
--- /dev/null
+++ b/Mac/Lib/test/tell.py
@@ -0,0 +1,63 @@
+# (Slightly less) primitive operations for sending Apple Events to applications.
+# This could be the basis of a Script Editor like application.
+
+from AE import *
+from AppleEvents import *
+import aetools
+import types
+
+class TalkTo:
+	def __init__(self, signature):
+		"""Create a communication channel with a particular application.
+		
+		For now, the application must be given by its 4-character signature
+		(because I don't know yet how to do other target types).
+		"""
+		if type(signature) != types.StringType or len(signature) != 4:
+			raise TypeError, "signature should be 4-char string"
+		self.target = AECreateDesc(typeApplSignature, signature)
+		self.send_flags = kAEWaitReply
+		self.send_priority = kAENormalPriority
+		self.send_timeout = kAEDefaultTimeout
+	def newevent(self, code, subcode, parameters = {}, attributes = {}):
+		event = AECreateAppleEvent(code, subcode, self.target,
+		                      kAutoGenerateReturnID, kAnyTransactionID)
+		aetools.packevent(event, parameters, attributes)
+		return event
+	def sendevent(self, event):
+		reply = event.AESend(self.send_flags, self.send_priority,
+		                          self.send_timeout)
+		parameters, attributes = aetools.unpackevent(reply)
+		return reply, parameters, attributes
+		
+	def send(self, code, subcode, parameters = {}, attributes = {}):
+		return self.sendevent(self.newevent(code, subcode, parameters, attributes))
+	
+	def activate(self):
+		# Send undocumented but easily reverse engineered 'activate' command
+		self.send('misc', 'actv')
+
+
+# This object is equivalent to "selection" in AppleScript
+# (in the core suite, if that makes a difference):
+get_selection = aetools.Property('sele', None)
+
+# Test program.  You can make it do what you want by passing parameters.
+# The default gets the selection from Quill (Scriptable Text Editor).
+
+def test(app = 'quil', suite = 'core', id = 'getd', arg = get_selection):
+	t = TalkTo(app)
+	t.activate()
+	if arg:
+		dict = {'----': arg}
+	else:
+		dict = {}
+	reply, parameters, attributes = t.send(suite, id, dict)
+	print reply, parameters
+	if parameters.has_key('----'): print "returns:", str(parameters['----'])
+	
+
+test()
+# So we can see it:
+import sys
+sys.exit(1)