; -*-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))))

