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