From 8f55d7b86a5fea0e121780ddcd4b4dc46da50980 Mon Sep 17 00:00:00 2001 From: tv Date: Thu, 21 Jul 2011 00:19:52 +0200 Subject: cholerab live.sh: initial commit --- cholerab/live.sh | 76 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100755 cholerab/live.sh diff --git a/cholerab/live.sh b/cholerab/live.sh new file mode 100755 index 00000000..8328ea07 --- /dev/null +++ b/cholerab/live.sh @@ -0,0 +1,76 @@ +#! /bin/sh +set -euf +stty cbreak -echo + +getc() { + echo -n "7 8" >&2 + echo -n "7state=$state8" >&2 + set -- "`dd bs=1 count=1 2>/dev/null`" + set -- "$1" "`echo -n "$1" | od -An -tx | tr -d "[$IFS]"`" + char="$1" + odchar="$2" + echo -n "$1" +} + +state() { + state="$1" + echo -n "7 8" >&2 + echo -n "7state=$state8" >&2 + char="`dd bs=1 count=1 2>/dev/null`" + odchar="`echo -n "$char" | od -An -tx | tr -d "[$IFS]"`" + history="$odchar ${history-}" + echo -n "7 8" >&2 + echo -n "7 8" >&2 + echo -n "7`echo -n "$history"`8" >&2 +} + + +S() { + state S + case "$char" in + () ESC "$char";; + () echo -n ' '; S;; + (*) + echo -n "$char" + S + ;; + esac +} + +ESC() { + state ESC + case "$char" in + ('[') ESC_OSQRB "$1$char";; + (*) + echo -n '^[' + S + ;; + esac +} + +ESC_OSQRB() { + state ESC_OSQRB + case "$char" in + (A|B|C|D) echo -n "$1$char"; S;; + ('[') ESC_OSQRB2 "$1$char";; + (*) + echo -n '^[[' + S + ;; + esac +} + +ESC_OSQRB2() { + state ESC_OSQRB2 + case "$char" in + (A|B|C|D) echo -n "$1$char"; S;; + (*) + echo -n '^[[[' + S + ;; + esac +} + + +echo -n 'c' +S -- cgit v1.2.3