; -*-Emacs-Lisp-*- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; File: dos-mode.el ; RCS: $Header: dos-mode.el,v 1.3 92/05/07 15:39:11 ange Exp $ ; Description: MSDOS minor mode for GNU Emacs ; Author: Andy Norman, Hplabs ; Created: Wed May 6 16:42:29 1992 ; Modified: Thu May 7 15:38:55 1992 (Ange) ange@anorman ; Language: Emacs-Lisp ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (provide 'dos-mode) (defvar dos-mode-distance 200 "Number of characters to search for RETURN when looking for a DOS file.") (defvar dos-mode nil "This buffer is to be converted to/from DOS format when read/written.") (make-variable-buffer-local 'dos-mode) (setq-default dos-mode nil) (or (assq 'dos-mode minor-mode-alist) (setq minor-mode-alist (cons '(dos-mode " DOS") minor-mode-alist))) (defun dos-convert-buffer () "Converts the current buffer from DOS format to UNIX format." (if (or dos-mode (save-excursion (goto-char (point-min)) (re-search-forward "\r\n" (min (point-max) dos-mode-distance) t))) (progn (let ((mod-p (buffer-modified-p)) (buffer-read-only nil)) (save-excursion (goto-char (point-min)) (while (re-search-forward "\r" nil t) (replace-match ""))) (set-buffer-modified-p mod-p) (setq dos-mode t))))) (defun dos-write-buffer () "Write the buffer as a DOS format buffer." (if dos-mode (save-excursion (let ((buffer-read-only nil)) (goto-char (point-min)) (while (re-search-forward "\n" nil t) (replace-match "\r\n")) (unwind-protect (write-region (point-min) (point-max) buffer-file-name nil t) (dos-convert-buffer))) ;convert back again! t))) (or (memq 'dos-write-buffer write-file-hooks) (setq write-file-hooks (append write-file-hooks (list 'dos-write-buffer)))) ;stick it on the end (or (memq 'dos-convert-buffer find-file-hooks) (setq find-file-hooks (append find-file-hooks (list 'dos-convert-buffer))))