#!/bin/sh [ $# -eq 1 ] || { echo 1>&2 "usage: socat TCP-LISTEN:44322,fork EXEC:'$0 '" exit -1 } DBFILE="$1" touch $DBFILE numlines() { wc -l <"$DBFILE"; } while read line; do case "$line" in (SEND\ *) echo "${line##SEND\ }" >>"$DBFILE" echo $(numlines) ;; (SKIP\ *) num="${line##SKIP\ }" len=$(numlines) slen=$((len - num)) slen=$((slen < 0 ? 0 : slen)) echo "$slen" head -n "$len" <"$DBFILE" | tail -n "$slen" echo "$len" ;; (LAST\ *) num="${line##LAST\ }" len=$(numlines) slen=$((len > num ? num : len)) echo "$slen" head -n "$len" <"$DBFILE" | tail -n "$slen" echo "$len" ;; (POLL\ *) len=$(($(numlines) - ${line##POLL\ })) echo $((len < 0 ? 0 : len)) ;; (HIST) len=$(numlines) echo "$len" head -n "$len" <"$DBFILE" echo "$len" ;; (QUIT) exit 0 ;; esac done