Commits

Anonymous committed 5439ca9

add morse.el, rot13.el

  • Participants
  • Parent commits c495a8c

Comments (0)

Files changed (5)

+1998-03-22  SL Baur  <steve@altair.xemacs.org>
+
+	* morse.el and (broken) rot13.el: imported from FSF Emacs 20.2.
+
 1998-01-24  SL Baur  <steve@altair.xemacs.org>
 
 	* Makefile (VERSION): Update to package standard 1.0.
 
 # This XEmacs package contains independent single file lisp packages
 
-VERSION = 1.05
+VERSION = 1.06
 AUTHOR_VERSION =
 MAINTAINER = XEmacs Development Team <xemacs-beta@xemacs.org>
 PACKAGE = misc-games
 
 ELCS = NeXTify.elc advocacy.elc blackbox.elc conx.elc decipher.elc \
 	dissociate.elc doctor.elc dunnet.elc flame.elc gomoku.elc \
-	hanoi.elc life.elc mpuz.elc studly.elc
+	hanoi.elc life.elc morse.elc mpuz.elc rot13.elc studly.elc
 
 include ../../XEmacs.rules
 
+;;; morse.el --- Convert text to morse code and back.
+
+;; Copyright (C) 1995 Free Software Foundation, Inc.
+
+;; Author: Rick Farnbach <rick_farnbach@MENTORG.COM>
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+
+;;; Code:
+
+(defvar morse-code '(("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" . "--..")
+		     ;; Punctuation
+		     ("=" . "-...-")
+		     ("?" . "..--..")
+		     ("/" . "-..-.")
+		     ("," . "--..--")
+		     ("." . ".-.-.-")
+		     (":" . "---...")
+		     ("'" . ".----.")
+		     ("-" . "-....-")
+		     ("(" . "-.--.-")
+		     (")" . "-.--.-")
+		     ;; Numbers
+		     ("0" . "-----")
+		     ("1" . ".----")
+		     ("2" . "..---")
+		     ("3" . "...--")
+		     ("4" . "....-")
+		     ("5" . ".....")
+		     ("6" . "-....")
+		     ("7" . "--...")
+		     ("8" . "---..")
+		     ("9" . "----."))
+  "Morse code character set.")
+
+(defun morse-region (beg end)
+  "Convert all text in a given region to morse code."
+  (interactive "r")
+  (if (integerp end)
+      (setq end (copy-marker end)))
+  (save-excursion
+    (let ((sep "")
+	  str morse)
+      (goto-char beg)
+      (while (< (point) end)
+	(setq str (downcase (buffer-substring (point) (1+ (point)))))
+	(cond ((looking-at "\\s-+")
+	       (goto-char (match-end 0))
+	       (setq sep ""))
+	      ((setq morse (assoc str morse-code))
+	       (delete-char 1)
+	       (insert sep (cdr morse))
+	       (setq sep "/"))
+	      (t
+	       (forward-char 1)
+	       (setq sep "")))))))
+
+(defun unmorse-region (beg end)
+  "Convert morse coded text in region to ordinary ASCII text."
+  (interactive "r")
+  (if (integerp end)
+      (setq end (copy-marker end)))
+  (save-excursion
+    (let (str paren morse)
+      (goto-char beg)
+      (while (< (point) end)
+	(if (null (looking-at "[-.]+"))
+	    (forward-char 1)
+	  (setq str (buffer-substring (match-beginning 0) (match-end 0)))
+	  (if (null (setq morse (rassoc str morse-code)))
+	      (goto-char (match-end 0))
+	    (replace-match
+		  (if (string-equal "(" (car morse))
+		      (if (setq paren (null paren)) "(" ")")
+		    (car morse)) t)
+	    (if (looking-at "/")
+		(delete-char 1))))))))
+
+(provide 'morse)
+
+;;; morse.el ends here

File package-info.in

    filename FILENAME
    md5sum MD5SUM
    size SIZE
-   provides (decipher gomoku hanoi life)
+   provides (decipher gomoku hanoi life morse rot13)
    requires (REQUIRES)
    type single
 ))
+;;; rot13.el --- display a buffer in rot13.
+
+;; Copyright (C) 1988 Free Software Foundation, Inc.
+
+;; Author: Howard Gayle:
+;; Maintainer: FSF
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+
+;;; Commentary:
+
+;; The single entry point, `rot13-other-window', performs a Caesar cipher
+;; encrypt/decrypt on the current buffer and displays the result in another 
+;; window.  Rot13 encryption is sometimes used on USENET as a read-at-your-
+;; own-risk wrapper for material some might consider offensive, such as
+;; ethnic humor.
+;;
+;; Written by Howard Gayle.
+;; This hack is mainly to show off the char table stuff.
+
+;;; Code:
+
+(defvar rot13-display-table
+  (let ((table (make-display-table))
+	(i 0))
+    (while (< i 26)
+      (aset table (+ i ?a) (vector (+ (% (+ i 13) 26) ?a)))
+      (aset table (+ i ?A) (vector (+ (% (+ i 13) 26) ?A)))
+      (setq i (1+ i)))
+    table)
+  "Char table for rot 13 display.")
+
+;;;###autoload
+(defun rot13-other-window ()
+  "Display current buffer in rot 13 in another window.
+To terminate the rot13 display, delete that window."
+  (interactive)
+  (let ((w (display-buffer (current-buffer) t)))
+    (set-window-display-table w rot13-display-table)))
+
+;;;###autoload
+(defun toggle-rot13-mode ()
+  "Toggle the use of rot 13 encoding for the current window."
+  (interactive)
+  (if (eq (window-display-table (selected-window)) rot13-display-table)
+      (set-window-display-table (selected-window) nil)
+    (if (null (window-display-table (selected-window)))
+	(set-window-display-table (selected-window) rot13-display-table))))
+
+(provide 'rot13)
+
+;;; rot13.el ends here