summaryrefslogtreecommitdiffstats
path: root/cholerab
diff options
context:
space:
mode:
Diffstat (limited to 'cholerab')
-rwxr-xr-xcholerab/live.sh88
-rwxr-xr-xcholerab/max_dirty_hack.sh102
2 files changed, 190 insertions, 0 deletions
diff --git a/cholerab/live.sh b/cholerab/live.sh
new file mode 100755
index 00000000..62a2c3cf
--- /dev/null
+++ b/cholerab/live.sh
@@ -0,0 +1,88 @@
+#! /bin/sh
+set -euf
+stty cbreak -echo
+
+go() {
+ state=$1
+ wr 7
+ wr " " >&2
+ wr "state=$state" >&2
+ wr 8
+ $1
+}
+
+rd() {
+ dd bs=1 count=1 2>/dev/null
+}
+
+bufrd() {
+ buf="`rd`"
+ bufinfowr
+}
+
+bufrda() {
+ buf="$buf`rd`"
+ bufinfowr
+}
+
+bufinfowr() {
+ wr 7
+ wr " " >&2
+ wr " " >&2
+ case "$buf" in
+ () wr '^[' >&2;;
+ (*) wr "$buf" >&2;;
+ esac
+ wr "`wr "$buf" | xxd -p`" >&2
+ wr 8
+}
+
+wr() {
+ echo -n "$1"
+}
+
+C0="`echo C0 | xxd -r -p`"; DF="`echo DF | xxd -r -p`"
+E0="`echo E0 | xxd -r -p`"; EF="`echo EF | xxd -r -p`"
+F0="`echo F0 | xxd -r -p`"; F7="`echo F7 | xxd -r -p`"
+S() {
+ bufrd
+ case "$buf" in
+ () go ESC;;
+ () wr ' '; go S;;
+ ([$C0-$DF]) go U1;;
+ ([$E0-$EF]) go U2;;
+ ([$F0-$F7]) go U3;;
+ (*) wr "$buf"; go S;;
+ esac
+}
+
+U1() { buf="$buf`rd`"; wr "$buf"; go S; }
+U2() { buf="$buf`rd`"; go U1; }
+U3() { buf="$buf`rd`"; go U2; }
+
+
+ESC() {
+ bufrda
+ case "$buf" in
+ ('[') go ESC_OSQRB;;
+ (*)
+ wr '^['
+ go S
+ ;;
+ esac
+}
+
+ESC_OSQRB() {
+ bufrda
+ case "$buf" in
+ (''|''|''|'') wr "$buf"; go S;;
+ (*)
+ wr '^[['
+ go S
+ ;;
+ esac
+}
+
+
+wr 'c'
+go S
diff --git a/cholerab/max_dirty_hack.sh b/cholerab/max_dirty_hack.sh
new file mode 100755
index 00000000..7183a760
--- /dev/null
+++ b/cholerab/max_dirty_hack.sh
@@ -0,0 +1,102 @@
+#!/bin/sh
+stty -echo cbreak -ofdel
+x_max=90
+y_max=10
+x_cur=1
+y_cur=1
+y=
+t=1
+outputfile=/tmp/cholerab_out
+inputfile=/tmp/cholerab_in
+echo -n "c"
+
+while [ $t -lt $(( y_max+2 )) ];do
+ echo -e "[$t;$(( x_max+1 ))Hx"
+ t=$(( t+1 ))
+done
+t=1
+while [ $t -lt $(( x_max+2 )) ];do
+ echo -e "[$(( y_max+1 ));${t}Hx"
+ t=$(( t+1 ))
+done
+
+echo -n "[$y_cur;${x_cur}H"
+#Main Loop
+while x="`dd bs=1 count=1 2>/dev/null`"; do
+ y="$y$x"
+ case "$y" in
+ (*"")
+ if [[ $y_cur -le 1 ]];then
+ y_cur=$y_max
+ echo -n "[$y_cur;${x_cur}H"
+ else
+ echo -n ""
+ y_cur=$(( y_cur-1 ))
+ fi
+ y=
+ ;;
+ (*"")
+ if [[ $y_cur -ge $y_max ]];then
+ y_cur=1
+ echo -n "[$y_cur;${x_cur}H"
+ else
+ echo -n ""
+ y_cur=$(( y_cur+1 ))
+ fi
+ y=
+ ;;
+ (*"")
+ if [[ $x_cur -ge $x_max ]];then
+ x_cur=1
+ echo -n "[$y_cur;${x_cur}H"
+ else
+ echo -n ""
+ x_cur=$(( x_cur+1 ))
+ fi
+ y=
+ ;;
+ (*"")
+ if [[ $x_cur -le 1 ]];then
+ x_cur=$x_max
+ echo -n "[$y_cur;${x_cur}H"
+ else
+ echo -n ""
+ x_cur=$(( x_cur-1 ))
+ fi
+ y=
+ ;;
+ (*"")
+ if [[ $x_cur -le 1 ]];then
+ x_cur=$x_max
+ echo -n "[$y_cur;${x_cur}H"
+ else
+ echo -n " "
+ x_cur=$(( x_cur-1 ))
+ fi
+ y=
+ ;;
+ (|\[)
+ :
+ ;;
+ (*)
+ if [[ $x_cur -ge $x_max ]];then
+ x_cur=1
+ echo -n "[$y_cur;${x_cur}H"
+ else
+ echo -n "$x"
+ echo "<0 $x $x_cur $y_cur>" >> $outputfile
+ x_cur=$(( x_cur+1 ))
+ fi
+ y=
+ ;;
+ esac
+ while [[ -s $inputfile ]]; do
+ cat $inputfile | head -n 1 | sed 's,[<>],,g' | { read MODE CHAR XN YN ; echo -n "7[$YN;${XN}H$CHAR8"; }
+ sed -i -e "1d" $inputfile
+ done
+
+ state=`echo -n "$x" | od -An -tx | tr -d "[$IFS]"`
+ echo -n "7[1;$(( x_max+2 ))H$state8"
+ echo -n "7[2;$(( x_max+2 ))H 8"
+ echo -n "7[2;$(( x_max+2 ))H$x_cur:$y_cur8"
+done