#!/bin/sh
#
#	Cheap and dirty std-in morser
#	herrold@owlriver.com
#	public domain
#
#	Requires:  beep   from:
#		http://www.johnath.com/beep/
#
#	echo "73 de wb8sky" | ./morse-it
#
MYNAME=`basename $0`
[ "x" = "x-h" ] && {
	echo "Usage: $MYNAME  sends morse of the stream on std in" 1>&2
	exit 1
	}
#
PID="$$"
#
BEEP="/usr/local/bin/beep"
TONE=440
DUR=100
DURTWO=`echo "$DUR + $DUR + $DUR" | bc `
DURTHREE=`echo "$DUR + $DUR + $DUR" | bc `
#
[ ! -d ~/.$MYNAME ] && {
	mkdir ~/.$MYNAME
	}
#	Make the lookup table
cat - << END > ~/.$MYNAME/translate
a:.-
b:-...
c:-.-.
d:-..
e:.
f:..-.
g:--.
h:....
i:..
j:.---
k:-.-
l:-.--
m:--
n:-.
o:---
p:.--.
q:--.-
r.-.
s:...
t:-
u:..-
v:...-
w:.--
x:-..-
y:-.--
z:--..
0:-----
1:.----
2:..---
3:...--
4:....-
5:.....
6:-....
7:--...
8:---..
9:----.
.:.-.-.-
-:-...-
_:+
END
#	Make it all lower, strip CR
cat - | tr 'A-Z' 'a-z' | tr '\r\n' '  ' | tr ' ' '_' > ~/.$MYNAME/$PID
# cat - | tr 'A-Z' 'a-z' | tr '\r\n' '  ' > ~/.$MYNAME/$PID
echo "#" >>  ~/.$MYNAME/$PID
#
SIZE=`wc -c ~/.$MYNAME/$PID | awk {'print $1'}`
#
#	Step through the content
[ "$SIZE" -lt "1" ] && rm ~/.$MYNAME/$PID
while [ -e ~/.$MYNAME/$PID ] ; do
	NEXT=`cat ~/.$MYNAME/$PID | cut -c 1`
	[ "x$NEXT" = "x#" ] && {
		echo " "
		rm -rf ~/.$MYNAME
		exit 0
		}
	cat ~/.$MYNAME/$PID | cut -c 2- | grep -v ^$ >  ~/.$MYNAME/$PID.tmp
	mv ~/.$MYNAME/$PID.tmp  ~/.$MYNAME/$PID 
	CODE=`grep $NEXT:  ~/.$MYNAME/translate | awk -F ":" {'print $2'}`
	export CODE
echo
[  "x$NEXT" != "x_" ] && echo -n "         $NEXT   $CODE            "
[  "x$NEXT" = "x_" ] && echo " "
	while [ "x$CODE" != "x" ] ; do
		ELEM=`echo "$CODE" | cut -c 1`
		NEXTELE=`echo "$CODE" | cut -c 2-`
[  "x$ELEM" != "x+" ] && echo -n "$ELEM"
		FREQ=` echo "$TONE"`
		export FREQ
		LEN=` echo "$DUR" `
		export LEN
		[ "x$ELEM" = "x+" ] && {
			$BEEP -f 1 -l $DUR
			}
		[ "x$ELEM" = "x-" ] && {
			$BEEP -f $FREQ -l $DURTHREE
			}
		[ "x$ELEM" = "x." ] && {
			$BEEP -f $FREQ -l $DUR
			}
		CODE=`echo "$NEXTELE"`
		export CODE
	done
#	inter element gap
	$BEEP -f 1 -l $DUR
done
#
#	We should never hit here, but ...
echo " "
rm -rf ~/.$MYNAME
exit 0
#