Created
February 4, 2019 17:24
-
-
Save wsgac/04b707cff51289e77fc2f7bc883728a3 to your computer and use it in GitHub Desktop.
StumpWM utilities for Morse code encoding/decoding
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| ;; -*- lisp -*- | |
| ;; Morse code decoder | |
| (defparameter *morse-code-decoder* (make-hash-table :test #'equal)) | |
| (setf (gethash ".-" *morse-code-decoder*) "a") | |
| (setf (gethash "-..." *morse-code-decoder*) "b") | |
| (setf (gethash "-.-." *morse-code-decoder*) "c") | |
| (setf (gethash "-.." *morse-code-decoder*) "d") | |
| (setf (gethash "." *morse-code-decoder*) "e") | |
| (setf (gethash "..-." *morse-code-decoder*) "f") | |
| (setf (gethash "--." *morse-code-decoder*) "g") | |
| (setf (gethash "...." *morse-code-decoder*) "h") | |
| (setf (gethash ".." *morse-code-decoder*) "i") | |
| (setf (gethash ".---" *morse-code-decoder*) "j") | |
| (setf (gethash ".-" *morse-code-decoder*) "k") | |
| (setf (gethash ".-.." *morse-code-decoder*) "l") | |
| (setf (gethash "--" *morse-code-decoder*) "m") | |
| (setf (gethash "-." *morse-code-decoder*) "n") | |
| (setf (gethash "---" *morse-code-decoder*) "o") | |
| (setf (gethash ".--." *morse-code-decoder*) "p") | |
| (setf (gethash "--.-" *morse-code-decoder*) "q") | |
| (setf (gethash ".-." *morse-code-decoder*) "r") | |
| (setf (gethash "..." *morse-code-decoder*) "s") | |
| (setf (gethash "-" *morse-code-decoder*) "t") | |
| (setf (gethash "..-" *morse-code-decoder*) "u") | |
| (setf (gethash "...-" *morse-code-decoder*) "v") | |
| (setf (gethash ".--" *morse-code-decoder*) "w") | |
| (setf (gethash "-..-" *morse-code-decoder*) "x") | |
| (setf (gethash "-.--" *morse-code-decoder*) "y") | |
| (setf (gethash "--.." *morse-code-decoder*) "z") | |
| (setf (gethash "-----" *morse-code-decoder*) "0") | |
| (setf (gethash ".----" *morse-code-decoder*) "1") | |
| (setf (gethash "..---" *morse-code-decoder*) "2") | |
| (setf (gethash "...--" *morse-code-decoder*) "3") | |
| (setf (gethash "....-" *morse-code-decoder*) "4") | |
| (setf (gethash "....." *morse-code-decoder*) "5") | |
| (setf (gethash "-...." *morse-code-decoder*) "6") | |
| (setf (gethash "--..." *morse-code-decoder*) "7") | |
| (setf (gethash "---.." *morse-code-decoder*) "8") | |
| (setf (gethash "----." *morse-code-decoder*) "9") | |
| (setf (gethash ".-.-.-" *morse-code-decoder*) ".") | |
| (setf (gethash "--..--" *morse-code-decoder*) ",") | |
| (setf (gethash "..--.." *morse-code-decoder*) "?") | |
| (setf (gethash ".----." *morse-code-decoder*) "'") | |
| (setf (gethash "-.-.--" *morse-code-decoder*) "!") | |
| (setf (gethash "-..-." *morse-code-decoder*) "/") | |
| (setf (gethash "-.--." *morse-code-decoder*) "(") | |
| (setf (gethash "-.--.-" *morse-code-decoder*) ")") | |
| (setf (gethash ".-..." *morse-code-decoder*) "&") | |
| (setf (gethash "---..." *morse-code-decoder*) ":") | |
| (setf (gethash ".-.-." *morse-code-decoder*) ";") | |
| (setf (gethash "-...-" *morse-code-decoder*) "=") | |
| (setf (gethash ".-.-." *morse-code-decoder*) "+") | |
| (setf (gethash "-....-" *morse-code-decoder*) "-") | |
| (setf (gethash ".--.-" *morse-code-decoder*) "_") | |
| (setf (gethash ".-..-." *morse-code-decoder*) "\"") | |
| (setf (gethash "..-..-" *morse-code-decoder*) "$") | |
| (setf (gethash ".--.-." *morse-code-decoder*) "@") | |
| (defun %decode-morse () | |
| (let* ((phrase (read-one-line (current-screen) "Text to decode: " | |
| :initial-input (get-x-selection)))) | |
| (when phrase | |
| (loop | |
| for code in (split-string phrase '(#\space #\tab #\newline)) | |
| collect (gethash code *morse-code-decoder* code) into parts | |
| finally (message "Decoded: ~a" (apply #'concat parts)))))) | |
| (defcommand decode-morse () () | |
| (%decode-morse)) | |
| ;; Morse code encoder | |
| (defparameter *morse-code-encoder* (make-hash-table :test #'equal)) | |
| (setf (gethash #\a *morse-code-encoder*) ".-") | |
| (setf (gethash #\b *morse-code-encoder*) "-...") | |
| (setf (gethash #\c *morse-code-encoder*) "-.-.") | |
| (setf (gethash #\d *morse-code-encoder*) "-..") | |
| (setf (gethash #\e *morse-code-encoder*) ".") | |
| (setf (gethash #\f *morse-code-encoder*) "..-.") | |
| (setf (gethash #\g *morse-code-encoder*) "--.") | |
| (setf (gethash #\h *morse-code-encoder*) "....") | |
| (setf (gethash #\i *morse-code-encoder*) "..") | |
| (setf (gethash #\j *morse-code-encoder*) ".---") | |
| (setf (gethash #\k *morse-code-encoder*) ".-") | |
| (setf (gethash #\l *morse-code-encoder*) ".-..") | |
| (setf (gethash #\m *morse-code-encoder*) "--") | |
| (setf (gethash #\n *morse-code-encoder*) "-.") | |
| (setf (gethash #\o *morse-code-encoder*) "---") | |
| (setf (gethash #\p *morse-code-encoder*) ".--.") | |
| (setf (gethash #\q *morse-code-encoder*) "--.-") | |
| (setf (gethash #\r *morse-code-encoder*) ".-.") | |
| (setf (gethash #\s *morse-code-encoder*) "...") | |
| (setf (gethash #\t *morse-code-encoder*) "-") | |
| (setf (gethash #\u *morse-code-encoder*) "..-") | |
| (setf (gethash #\v *morse-code-encoder*) "...-") | |
| (setf (gethash #\w *morse-code-encoder*) ".--") | |
| (setf (gethash #\x *morse-code-encoder*) "-..-") | |
| (setf (gethash #\y *morse-code-encoder*) "-.--") | |
| (setf (gethash #\z *morse-code-encoder*) "--..") | |
| (setf (gethash #\0 *morse-code-encoder*) "-----") | |
| (setf (gethash #\1 *morse-code-encoder*) ".----") | |
| (setf (gethash #\2 *morse-code-encoder*) "..---") | |
| (setf (gethash #\3 *morse-code-encoder*) "...--") | |
| (setf (gethash #\4 *morse-code-encoder*) "....-") | |
| (setf (gethash #\5 *morse-code-encoder*) ".....") | |
| (setf (gethash #\6 *morse-code-encoder*) "-....") | |
| (setf (gethash #\7 *morse-code-encoder*) "--...") | |
| (setf (gethash #\8 *morse-code-encoder*) "---..") | |
| (setf (gethash #\9 *morse-code-encoder*) "----.") | |
| (setf (gethash #\. *morse-code-encoder*) ".-.-.-") | |
| (setf (gethash #\, *morse-code-encoder*) "--..--") | |
| (setf (gethash #\? *morse-code-encoder*) "..--..") | |
| (setf (gethash #\' *morse-code-encoder*) ".----.") | |
| (setf (gethash #\! *morse-code-encoder*) "-.-.--") | |
| (setf (gethash #\/ *morse-code-encoder*) "-..-.") | |
| (setf (gethash #\( *morse-code-encoder*) "-.--.") | |
| (setf (gethash #\) *morse-code-encoder*) "-.--.-") | |
| (setf (gethash #\& *morse-code-encoder*) ".-...") | |
| (setf (gethash #\: *morse-code-encoder*) "---...") | |
| (setf (gethash #\; *morse-code-encoder*) ".-.-.") | |
| (setf (gethash #\= *morse-code-encoder*) "-...-") | |
| (setf (gethash #\+ *morse-code-encoder*) ".-.-.") | |
| (setf (gethash #\- *morse-code-encoder*) "-....-") | |
| (setf (gethash #\_ *morse-code-encoder*) ".--.-") | |
| (setf (gethash #\\ *morse-code-encoder*) ".-..-.") | |
| (setf (gethash #\$ *morse-code-encoder*) "..-..-") | |
| (setf (gethash #\@ *morse-code-encoder*) ".--.-.") | |
| (defun %encode-morse () | |
| (let* ((phrase (read-one-line (current-screen) "Text to encode: " | |
| :initial-input (get-x-selection)))) | |
| (when phrase | |
| (loop | |
| for char across phrase | |
| collect (gethash char *morse-code-encoder* char) into parts | |
| finally (message "Encoded: ~{~a~^ ~}" parts))))) | |
| (defcommand encode-morse () () | |
| (%encode-morse)) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment