summaryrefslogtreecommitdiff
path: root/Functions/TCP/tcp_output
diff options
context:
space:
mode:
authorPeter Stephenson <pws@users.sourceforge.net>2003-02-06 12:21:49 +0000
committerPeter Stephenson <pws@users.sourceforge.net>2003-02-06 12:21:49 +0000
commit5c1f3b65a6f5abeae8459f41adb8fd2316971515 (patch)
tree21a82daa1abab96c967d731c7afe2a3a2bd07fff /Functions/TCP/tcp_output
parent809ab19dff75185a805b4cbb31a6b89f225167f4 (diff)
downloadzsh-5c1f3b65a6f5abeae8459f41adb8fd2316971515.tar.gz
zsh-5c1f3b65a6f5abeae8459f41adb8fd2316971515.zip
18202: New TCP function system plus small error message change in ztcp.
Diffstat (limited to 'Functions/TCP/tcp_output')
-rw-r--r--Functions/TCP/tcp_output65
1 files changed, 65 insertions, 0 deletions
diff --git a/Functions/TCP/tcp_output b/Functions/TCP/tcp_output
new file mode 100644
index 000000000..b22b79412
--- /dev/null
+++ b/Functions/TCP/tcp_output
@@ -0,0 +1,65 @@
+emulate -L zsh
+setopt extendedglob
+
+local opt tprompt sess read_fd tpat quiet
+
+while getopts "F:P:qS:" opt; do
+ case $opt in
+ (F) read_fd=$OPTARG
+ ;;
+ (P) tprompt=$OPTARG
+ ;;
+ (q) quiet=1
+ ;;
+ (S) sess=$OPTARG
+ ;;
+ (*) [[ $opt != \? ]] && print -r "Can't handle option $opt" >&2
+ return 1
+ ;;
+ esac
+done
+(( OPTIND > 1 )) && shift $(( OPTIND - 1 ))
+
+# Per-session logs don't have the session discriminator in front.
+if [[ -n $TCP_LOG_SESS ]]; then
+ print -r -- "$*" >>${TCP_LOG_SESS}.$sess
+fi
+# Always add the TCP prompt. We used only to do this with
+# multiple sessions, but it seems always to be useful to know
+# where data is coming from; also, it allows more predictable
+# behaviour in tcp_expect.
+if [[ -n $tprompt ]]; then
+ zgprintf -R -%s=$sess -%f=$read_fd -- $tprompt
+ # We will pass this back up.
+ REPLY="$REPLY$*"
+else
+ REPLY="$*"
+fi
+if [[ -n $TCP_LOG ]]; then
+ print -r -- $REPLY >>${TCP_LOG}
+fi
+
+if [[ -z $quiet ]]; then
+ local skip=
+ if [[ ${#tcp_filter} -ne 0 ]]; then
+ # Allow tcp_filter to be an associative array, though
+ # it doesn't *need* to be.
+ for tpat in ${(v)tcp_filter}; do
+ [[ $REPLY = ${~tpat} ]] && skip=1 && break
+ done
+ fi
+ if [[ -z $skip ]]; then
+ # Check flag passed down probably from tcp_fd_handler:
+ # if we have output, we are in zle and need to fix the display first.
+ # (The shell is supposed to be smart enough that you can replace
+ # all the following with
+ # [[ -o zle ]] && zle -I
+ # but I haven't dared try it yet.)
+ if [[ -n $TCP_INVALIDATE_ZLE ]]; then
+ zle -I
+ # Only do this the first time.
+ unset TCP_INVALIDATE_ZLE
+ fi
+ print -r -- $REPLY
+ fi
+fi