From 5c1f3b65a6f5abeae8459f41adb8fd2316971515 Mon Sep 17 00:00:00 2001 From: Peter Stephenson Date: Thu, 6 Feb 2003 12:21:49 +0000 Subject: 18202: New TCP function system plus small error message change in ztcp. --- Functions/TCP/tcp_output | 65 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 Functions/TCP/tcp_output (limited to 'Functions/TCP/tcp_output') 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 -- cgit 1.4.1