Adjust this for your system.
~~~:MS (n-) #2000 * [ ] times ;
~~~
Ported from http://thecutecuttlefish.org/tmp/morse.fth
~~~'SPEAKER var
:START-SOUND (--)
'./dev_dsp file:W file:open !SPEAKER ;
:STOP-SOUND (--)
@SPEAKER file:close ;
:BEEP (cycles--)
START-SOUND
[ '----**** [ @SPEAKER file:write ] s:for-each ] times
STOP-SOUND
;
:- #45 c:put #500 BEEP #50 MS ; (Long
:. #46 c:put #100 BEEP #10 MS ; (Short
:P #50 MS ; (Pause
:LP #500 MS sp ; (Long_Pause
:A? dup $A eq? [ . - P ] if ;
:B? dup $B eq? [ - . . . P ] if ;
:C? dup $C eq? [ - . - . P ] if ;
:D? dup $D eq? [ - . . P ] if ;
:E? dup $E eq? [ . P ] if ;
:F? dup $F eq? [ . . - . P ] if ;
:G? dup $G eq? [ - - . P ] if ;
:H? dup $H eq? [ . . . . P ] if ;
:I? dup $I eq? [ . . P ] if ;
:J? dup $J eq? [ . - - - P ] if ;
:K? dup $K eq? [ - . - P ] if ;
:L? dup $L eq? [ . - . . P ] if ;
:M? dup $M eq? [ - - P ] if ;
:N? dup $N eq? [ - . P ] if ;
:O? dup $O eq? [ - - - P ] if ;
:P? dup $P eq? [ . - - . P ] if ;
:Q? dup $Q eq? [ - - . - P ] if ;
:R? dup $R eq? [ . - . P ] if ;
:S? dup $S eq? [ . . . P ] if ;
:T? dup $T eq? [ - P ] if ;
:U? dup $U eq? [ . . - P ] if ;
:V? dup $V eq? [ . . . - P ] if ;
:W? dup $W eq? [ . - - P ] if ;
:X? dup $X eq? [ - . . - P ] if ;
:Y? dup $Y eq? [ - . - - P ] if ;
:Z? dup $Z eq? [ - - . . P ] if ;
:SP? dup #32 eq? [ LP ] if ;
:1? dup $1 eq? [ . - - - - P ] if ;
:2? dup $2 eq? [ . . - - - P ] if ;
:3? dup $3 eq? [ . . . - - P ] if ;
:4? dup $4 eq? [ . . . . - P ] if ;
:5? dup $5 eq? [ . . . . . P ] if ;
:6? dup $6 eq? [ - . . . . P ] if ;
:7? dup $7 eq? [ - - . . . P ] if ;
:8? dup $8 eq? [ - - - . . P ] if ;
:9? dup $9 eq? [ - - - - . P ] if ;
:0? dup $0 eq? [ - - - - - P ] if ;
:MORSE (s--)
nl
[
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?
SP?
1?
2?
3?
4?
5?
6?
7?
8?
9?
0? drop ] s:for-each
;
~~~
A simple test case:
```'SOS_OR_NOT MORSE
```