<# .SYNOPSIS Writes text in Morse code .DESCRIPTION This PowerShell script writes text in Morse code. .PARAMETER text Specifies the text to write .PARAMETER speed Specifies the speed of one time unit (100 ms per default) .EXAMPLE PS> ./write-morse-code "Hello World" .NOTES Author: Markus Fleschutz / License: CC0 .LINK https://github.com/fleschutz/PowerShell #> param([string]$text = "", [int]$speed = 100) # one time unit in milliseconds function gap { param([int]$Length) for ([int]$i = 1; $i -lt $Length; $i++) { write-host " " -nonewline } start-sleep -milliseconds ($Length * $speed) } function dot { write-host "." -nonewline start-sleep -milliseconds $speed # signal } function dash { write-host "_" -nonewline start-sleep -milliseconds (3 * $speed) # signal } function Char2MorseCode { param([string]$Char) switch($Char) { 'A' { dot; gap 1; dash; gap 3 } 'B' { dash; gap 1; dot; gap 1; dot; gap 1; dot; gap 3 } 'C' { dash; gap 1; dot; gap 1; dash; gap 1; dot; gap 3 } 'D' { dash; gap 1; dot; gap 1; dot; gap 3 } 'E' { dot; gap 3 } 'F' { dot; gap 1; dot; gap 1; dash; gap 1; dot; gap 3 } 'G' { dash; gap 1; dash; gap 1; dot; gap 3 } 'H' { dot; gap 1; dot; gap 1; dot; gap 1; dot; gap 3 } 'I' { dot; gap 1; dot; gap 3 } 'J' { dot; gap 1; dash; gap 1; dash; gap 1; dash; gap 3 } 'K' { dash; gap 1; dot; gap 1; dash; gap 3 } 'L' { dot; gap 1; dash; gap 1; dot; gap 1; dot; gap 3 } 'M' { dash; gap 1; dash; gap 3 } 'N' { dash; gap 1; dot; gap 3 } 'O' { dash; gap 1; dash; gap 1; dash; gap 3 } 'P' { dot; gap 1; dash; gap 1; dash; gap 1; dot; gap 3 } 'Q' { dash; gap 1; dash; gap 1; dot; gap 1; dash; gap 3 } 'R' { dot; gap 1; dash; gap 1; dot; gap 3 } 'S' { dot; gap 1; dot; gap 1; dot; gap 3 } 'T' { dash; gap 3 } 'U' { dot; gap 1; dot; gap 1; dash; gap 3 } 'V' { dot; gap 1; dot; gap 1; dot; gap 1; dash; gap 3 } 'W' { dot; gap 1; dash; gap 1; dash; gap 3 } 'X' { dash; gap 1; dot; gap 1; dot; gap 1; dash; gap 3 } 'Y' { dash; gap 1; dot; gap 1; dash; gap 1; dash; gap 3 } 'Z' { dash; gap 1; dash; gap 1; dot; gap 1; dot; gap 3 } '1' { dot; gap 1; dash; gap 1; dash; gap 1; dash; gap 1; dash; gap 3 } '2' { dot; gap 1; dot; gap 1; dash; gap 1; dash; gap 1; dash; gap 3 } '3' { dot; gap 1; dot; gap 1; dot; gap 1; dash; gap 1; dash; gap 3 } '4' { dot; gap 1; dot; gap 1; dot; gap 1; dot; gap 1; dash; gap 3 } '5' { dot; gap 1; dot; gap 1; dot; gap 1; dot; gap 1; dot; gap 3 } '6' { dash; gap 1; dot; gap 1; dot; gap 1; dot; gap 1; dot; gap 3 } '7' { dash; gap 1; dash; gap 1; dot; gap 1; dot; gap 1; dot; gap 3 } '8' { dash; gap 1; dash; gap 1; dash; gap 1; dot; gap 1; dot; gap 3 } '9' { dash; gap 1; dash; gap 1; dash; gap 1; dash; gap 1; dot; gap 3 } '0' { dash; gap 1; dash; gap 1; dash; gap 1; dash; gap 1; dash; gap 3 } default { gap 7 } # medium gap (between words) } } try { if ($text -eq "" ) { [string]$text = read-host "Enter text to write" } [char[]]$ArrayOfChars = $text.ToUpper() foreach($Char in $ArrayOfChars) { Char2MorseCode $Char } write-host "" write-host "" exit 0 # success } catch { "⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])" exit 1 }