summaryrefslogtreecommitdiff
path: root/example/expectd.proto
diff options
context:
space:
mode:
Diffstat (limited to 'example/expectd.proto')
-rw-r--r--example/expectd.proto80
1 files changed, 80 insertions, 0 deletions
diff --git a/example/expectd.proto b/example/expectd.proto
new file mode 100644
index 0000000..a26ca80
--- /dev/null
+++ b/example/expectd.proto
@@ -0,0 +1,80 @@
+#!/depot/tcl/src/expect/e --
+# Description: Simple fragment to begin a telnet daemon
+# For more information, see Chapter 17 of "Exploring Expect"
+# Author: Don Libes, NIST
+
+set IAC "\xff"
+set DONT "\xfe"
+set DO "\xfd"
+set WONT "\xfc"
+set WILL "\xfb"
+set SB "\xfa" ;# subnegotation begin
+set SE "\xf0" ;# subnegotation end
+set TTYPE "\x18"
+set SGA "\x03"
+set ECHO "\x01"
+set SEND "\x01"
+
+send "$IAC$WILL$ECHO"
+send "$IAC$WILL$SGA"
+send "$IAC$DO$TTYPE"
+
+remove_nulls 0
+
+expect_before {
+ -re "^$IAC$DO$ECHO" {
+ # treat as acknowledgement and ignore
+ exp_continue
+ }
+ -re "^$IAC$DO$SGA" {
+ # treat as acknowledgement and ignore
+ exp_continue
+ }
+ -re "^$IAC$DO\(.)" {
+ # refuse anything else
+ send_user "$IAC$WONT$expect_out(1,string)"
+ exp_continue
+ }
+ -re "^$IAC$WILL$TTYPE" {
+ # respond to acknowledgement
+ send_user "$IAC$SB$TTYPE$SEND$IAC$SE"
+ exp_continue
+ }
+ -re "^$IAC$WILL$SGA" {
+ send_user "$IAC$DO$SGA"
+ exp_continue
+ }
+ -re "^$IAC$WILL\(.)" {
+ # refuse anything else
+ send_user "$IAC$DONT$expect_out(1,string)"
+ exp_continue
+ }
+ -re "^$IAC$SB$TTYPE" {
+ expect_user null
+ expect_user -re "(.*)$IAC$SE"
+ set env(TERM) [string tolower $expect_out(1,string)]
+ # no continue!
+ }
+ -re "^$IAC$WONT$TTYPE" {
+ # treat as acknowledgement and ignore
+ set env(TERM) vt100
+ # no continue!
+ }
+}
+
+# do negotations up to terminal type
+# expect
+
+##############################
+# your code goes after this point here
+
+# spawn something ;# typically spawn something
+# expect ... ;# typically do some expects, sends, etc.
+# send ...
+# expect ...
+# send ...
+
+# expect_before ;# remove all protocol nonsense
+
+# let user interact
+# interact -re "\r" {send "\r"; expect_user \n {} null}