[rec.ham-radio] Morse code program for PC .. here is

spcecdt@deeptht.UUCP (John DuBois) (12/25/90)

     Here's an awk text-to-Morse translator that will work on SCO consoles...

	John DuBois
	spcecdt@deeptht.santa-cruz.ca.us

:
# Morse to ascii translator
# John H. DuBois III    11/90
# Written for XENIX console; depends on SYSV tty modes (cr2)
# and SCO ANSI set-beep-length escape code
# Stuck at max ~8 wpm by shortest console beep & length of cr2 delay

# save tty mode so it can be reset
ttymode=`stty -g < /dev/tty`
# reset tty mode if program aborted
trap "stty $ttymode < /dev/tty" INT QUIT
# set cr2 so that cr delays can be used for timing
stty cr2 < /dev/tty
# set bell to 1/(1487*840.3ns) Hz (800 Hz), 100 mS duration
# note: bell is *not* reset at end of script, 
# since there's no way to tell what it was set to from a script
echo -n "\033[=1487;1B"

tr '[A-Z]' '[a-z]' | awk '
BEGIN {
	split("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--.."\
" ,--..-- ..-.-.- --...- =-...- /-..-. E.-.-."\
" 0----- 1.---- 2..--- 3...-- 4....- 5..... 6-.... 7--... 8---.. 9----.",
	Data," ")
	Delay = "\015"
	S["."] = "\07" Delay
	S["-"] = "\07\07\07" Delay Delay
	Char = Delay Delay
	Word = Char Char Char
	for (i in Data) {
		Letter = substr(Data[i],1,1)
		Morse = substr(Data[i],2)
		len = length(Morse);
		for (j = 1; j <= len; j++)
			L[Letter] = L[Letter] S[substr(Morse,j,1)]
	}
	L[" "] = Word
	L["\t"] = Word
}

{
	# translate entire line before outputting to minimize effects of
	# load on timing
	Line = ""
	len = length($0);
	for (i = 1; i <= len; i++)
		Line = Line L[substr($0,i,1)] Char
	Line = Line Word
	printf("%s",Line);
}

END {
	printf L["E"]
}
'

stty $ttymode < /dev/tty