Control InterSLIP using a modal dialog
diff --git a/Mac/Demo/example1/InterslipControl-1.py b/Mac/Demo/example1/InterslipControl-1.py
new file mode 100644
index 0000000..14fc59c
--- /dev/null
+++ b/Mac/Demo/example1/InterslipControl-1.py
@@ -0,0 +1,92 @@
+"""Sample program handling InterSLIP control and showing off EasyDialogs,
+Res and Dlg in the process"""
+
+import EasyDialogs
+import Res
+import Dlg
+import sys
+import interslip
+#
+# Definitions for our resources
+ID_MAIN=512
+
+ITEM_CONNECT=1
+ITEM_DISCONNECT=2
+ITEM_UPDATE=3
+ITEM_QUIT=4
+ITEM_STATUS=5
+ITEM_MESSAGE=6
+
+status2text = ["<idle>", "<wait-modem>", "<dialling>", "<logging in>", 
+	"<connected>", "<disconnecting>"]
+	
+			
+def main():
+	"""Main routine: open resourcefile, open interslip, call dialog handler"""
+	try:
+		Res.OpenResFile("InterslipControl-1.rsrc")
+	except Res.Error, arg:
+		EasyDialogs.Message("Cannot open resource file InterslipControl-1.rsrc: "+
+			arg[1])
+		sys.exit(1)
+	try:
+		interslip.open()
+	except interslip.error, arg:
+		EasyDialogs.Message("Cannot open interslip: "+arg[1])
+		sys.exit(1)
+	do_dialog()
+
+def do_dialog():
+	"""Post dialog and handle user interaction until quit"""
+	my_dlg = Dlg.GetNewDialog(ID_MAIN, -1)
+	while 1:
+		n = Dlg.ModalDialog(None)
+		if n == ITEM_CONNECT:
+			do_connect()
+		elif n == ITEM_DISCONNECT:
+			do_disconnect()
+		elif n == ITEM_UPDATE:
+			status, msg = do_status()
+
+			# Convert status number to a text string
+			try:
+				txt = status2text[status]
+			except IndexError:
+				txt = "<unknown state %d>"%status
+
+			# Set the status text field
+			tp, h, rect = my_dlg.GetDialogItem(ITEM_STATUS)
+			Dlg.SetDialogItemText(h, txt)
+			
+			# Set the message text field
+			tp, h, rect = my_dlg.GetDialogItem(ITEM_MESSAGE)
+			Dlg.SetDialogItemText(h, msg)
+		elif n == ITEM_QUIT:
+			break
+
+def do_connect():
+	"""Connect, posting error message in case of failure"""
+	try:
+		interslip.connect()
+	except interslip.error, arg:
+		EasyDialogs.Message("Cannot connect: "+arg[1])
+
+def do_disconnect():
+	"""Disconnect, posting error message in case of failure"""
+	try:
+		interslip.disconnect()
+	except interslip.error, arg:
+		EasyDialogs.Message("Cannot disconnect: "+arg[1])
+		
+def do_status():
+	"""Get status as (state_index, message),
+	posting error message in case of failure"""
+	try:
+		status, msgnum, msg = interslip.status()
+	except interslip.error, arg:
+		EasyDialogs.Message("Cannot get status: "+arg[1])
+		return 0, ''
+	return status, msg
+		
+
+main()