#!/bin/sh
[ $# -eq 1 ] || {
echo 1>&2 "usage: socat TCP-LISTEN:44322,fork EXEC:'$0 <DBFILE>'"
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