diff options
Diffstat (limited to 'morse')
| -rw-r--r-- | morse/COPYING | 14 | ||||
| -rw-r--r-- | morse/README | 32 | ||||
| -rwxr-xr-x | morse/morse.sh | 160 | 
3 files changed, 206 insertions, 0 deletions
| diff --git a/morse/COPYING b/morse/COPYING new file mode 100644 index 00000000..d28e4178 --- /dev/null +++ b/morse/COPYING @@ -0,0 +1,14 @@ +            DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE +                    Version 23, December 1984 + + Copyright (C) 2011 tv@shackspace + + Everyone is permitted to copy and distribute verbatim or modified + copies of this license document, and changing it is allowed as long + as the name is changed. + +            DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE +   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + +  0. You just DO WHAT THE FUCK YOU WANT TO. + diff --git a/morse/README b/morse/README new file mode 100644 index 00000000..67951c00 --- /dev/null +++ b/morse/README @@ -0,0 +1,32 @@ +MORSE(1)                                                              MORSE(1) + +NAME +       morse.sh - morse code generator + +SYNOPSIS +       morse [-l N] [-f N] [-c|-x] [text...] + +DESCRIPTION +       Generate visible or audible from text or stdin. + +OPTIONS +       -l N   use N milliseconds as length of dit.  Default: 60 ms + +       -f N   beep at N Hz.  Default: 2000 Hz + +       -c     compile only.  Morse will output morse-executable morse code. + +       -x     execute only.  Interpret text as morse code, i.e. do not try +              to convert text or stdin. + +BUGS +       None.^_^ + +REPORTING BUGS +       Please use Github's issue tracking system. + +AUTHOR +       This program was written by tv@shackspace and is distributed under the +       Do What The Fuck You Want To Public License. + +                                   April 2011                         MORSE(1) diff --git a/morse/morse.sh b/morse/morse.sh new file mode 100755 index 00000000..c84538ca --- /dev/null +++ b/morse/morse.sh @@ -0,0 +1,160 @@ +#! /bin/sh +set -euf + +freq=2000 +dit=60 +mode=compile+execute + +## plain stupid options "parser" +while test $# -gt 0; do +  case "$1" in +    (-l) dit=$2; shift 2;; +    (-f) freq=$2; shift 2;; +    (-c) mode=compile; shift 1;; +    (-x) mode=execute; shift 1;; +    (*) break 2;; +  esac +done + +# Ein Dah ist dreimal so lang wie ein Dit. +dah=`echo "$dit * 3" | bc` + +## Convert a character to the corresponting morse code. +## Note: any unknown characters are left unaltered. +char2morse() { +tr [a-z] [A-Z] | +sed ' +  # Die Pause zwischen Wörtern beträgt sieben Dits. (1/2) +  s:[[:space:]]\+::g + +  # Zwischen Buchstaben in einem Wort wird eine Pause von Dah eingeschoben. +  s:[^ ]:&   :g + +  # Die Pause zwischen Wörtern beträgt sieben Dits. (2/2) +  s:   :       :g +' | +sed ' +  # Lateinische Buchstaben +  # Die Pause zwischen zwei gesendeten Symbolen ist ein Dit lang. +  s:A:· −:g +  s:B:− · · ·:g +  s:C:− · − ·:g +  s:D:− · ·:g +  s:E:·:g +  s:F:· · − ·:g +  s:G:− − ·:g +  s:H:· · · ·:g +  s:I:· ·:g +  s:J:· − − −:g +  s:K:− · −:g +  s:L:· − · ·:g +  s:M:− −:g +  s:N:− ·:g +  s:O:− − −:g +  s:P:· − − ·:g +  s:Q:− − · −:g +  s:R:· − ·:g +  s:S:· · ·:g +  s:T:−:g +  s:U:· · −:g +  s:V:· · · −:g +  s:W:· − −:g +  s:X:− · · −:g +  s:Y:− · − −:g +  s:Z:− − · ·:g +' | +sed ' +  # Ziffern +  # Die Pause zwischen zwei gesendeten Symbolen ist ein Dit lang. +  s:0:− − − − −:g +  s:1:· − − − −:g +  s:2:· · − − −:g +  s:3:· · · − −:g +  s:4:· · · · −:g +  s:5:· · · · ·:g +  s:6:− · · · ·:g +  s:7:− − · · ·:g +  s:8:− − − · ·:g +  s:9:− − − − ·:g +' | +sed ' +  # TODO Sonder- und Satzzeichen +  #s:À, Å:· − − · − +  #s:Ä:· − · − +  #s:È:· − · · − +  #s:É:· · − · · +  #s:Ö:− − − · +  #s:Ü:· · − − +  #s:ß:· · · − − · · +  #s:CH:− − − − +  #s:Ñ:− − · − − +  #s:. (AAA)	· − · − · − +  #s:, (MIM)	− − · · − − +  #s::	− − − · · · +  #s:;	− · − · − · +  #s:? (IMI)	· · − − · · +  #s:-	− · · · · − +  #s:_	· · − − · − +  #s:(	− · − − · +  #s:)	− · − − · − +  #s:'\''	· − − − − · +  #s:=	− · · · − +  #s:+	· − · − · +  #s:/	− · · − · +  #s:@ (AC)	· − − · − · +' | +sed ' +  # TODO Signale +  # KA +  # (Spruchanfang)	− · − · − +  # BT +  # (Pause)	− · · · − +  # AR +  # (Spruchende)	· − · − · +  # VE +  # (verstanden)	· · · − · +  # SK +  # (Verkehrsende)	· · · − · − +  # SOS +  # (internationaler +  # (See-)Notruf)	· · · − − − · · · +  # HH +  # (Fehler; Irrung; +  # Wiederholung +  # ab letztem +  # vollständigen Wort)	· · · · · · · · +' +} + +## Convert morse code to beep(1) arguments. +morse2beeparg() { +sed " +  s: : -n -f 1 -l $dit:g +  s:·: -n -f $freq -l $dit:g +  s:−: -n -f $freq -l $dah:g +" | + sed ' +  1s:^:beep -f 1 -l 1: +' +} + +compile() { +  char2morse +} + +execute() { +  `morse2beeparg` +} + +## main - process either [any non-option] arguments or stdin. +if test $# -gt 0; then +  echo "$*" +else +  cat +fi | +case "$mode" in +  (compile) compile;; +  (execute) execute;; +  (compile+execute) compile | execute;; +  (*) echo bad mode: $mode >&2; exit 23;; +esac | 
