summaryrefslogtreecommitdiff
path: root/lisp/dos-fns.el
diff options
context:
space:
mode:
authorRichard M. Stallman <rms@gnu.org>1996-01-26 19:49:01 +0000
committerRichard M. Stallman <rms@gnu.org>1996-01-26 19:49:01 +0000
commit706629741ff40e65834172eff85a8cb1301b31be (patch)
treee82732239184ef4fd914db1e84f9e163dfa98767 /lisp/dos-fns.el
parentb5e89ed1d70dfec2b857466ec3980ca63ce52e23 (diff)
downloademacs-706629741ff40e65834172eff85a8cb1301b31be.tar.gz
(mode25): Moved from `src/dosfns.c' for backward compatibility.
(mode4350): Moved from `src/dosfns.c' for backward compatibility. (convert-standard-filename): Preserve ~ as last char. (convert-standard-filename): Don't do anything if the argument is empty, or isn't a string; leave alone characters with ASCII codes above 127 and special characters legal in DOS filenames.
Diffstat (limited to 'lisp/dos-fns.el')
-rw-r--r--lisp/dos-fns.el96
1 files changed, 64 insertions, 32 deletions
diff --git a/lisp/dos-fns.el b/lisp/dos-fns.el
index b7202d9c2c7..9032e64ef5e 100644
--- a/lisp/dos-fns.el
+++ b/lisp/dos-fns.el
@@ -49,38 +49,51 @@
This function's standard definition is trivial; it just returns the argument.
However, on some systems, the function is redefined
with a definition that really does change some file names."
- (let ((dir (file-name-directory filename))
- (string (copy-sequence (file-name-nondirectory filename)))
- i firstdot)
- ;; Change a leading period to a leading underscore.
- (if (= (aref string 0) ?.)
- (aset string 0 ?_))
- ;; Get rid of invalid characters.
- (while (setq i (string-match "[^a-zA-Z0-9_.%~]" string))
- (aset string i ?_))
- ;; If we don't have a period,
- ;; and we have a dash or underscore that isn't the first char,
- ;; change that to a period.
- (if (and (not (string-match "\\." string))
- (setq i (string-match "[-_]" string 1)))
- (aset string i ?\.))
- ;; If we don't have a period in the first 8 chars, insert one.
- (if (> (or (string-match "\\." string)
- (length string))
- 8)
- (setq string
- (concat (substring string 0 8)
- "."
- (substring string 8))))
- (setq firstdot (or (string-match "\\." string) (1- (length string))))
- ;; Truncate to 3 chars after the first period.
- (if (> (length string) (+ firstdot 4))
- (setq string (substring string 0 (+ firstdot 4))))
- ;; Change all periods except the first one into underscores.
- (while (string-match "\\." string (1+ firstdot))
- (setq i (string-match "\\." string (1+ firstdot)))
- (aset string i ?_))
- (concat dir string)))
+ (let* ((dir (file-name-directory filename))
+ (string (copy-sequence (file-name-nondirectory filename)))
+ (lastchar (aref string (1- (length string))))
+ i firstdot)
+ ;; If the argument is empty, just return it.
+ (if (or (not (stringp filename))
+ (string= filename "")
+ (string= string ""))
+ filename
+ (progn
+ ;; Change a leading period to a leading underscore.
+ (if (= (aref string 0) ?.)
+ (aset string 0 ?_))
+ ;; Get rid of invalid characters.
+ (while (setq i (string-match
+ "[^-a-zA-Z0-9_.%~^$!#&{}@`'()\200-\376]"
+ string))
+ (aset string i ?_))
+ ;; If we don't have a period,
+ ;; and we have a dash or underscore that isn't the first char,
+ ;; change that to a period.
+ (if (and (not (string-match "\\." string))
+ (setq i (string-match "[-_]" string 1)))
+ (aset string i ?\.))
+ ;; If we don't have a period in the first 8 chars, insert one.
+ (if (> (or (string-match "\\." string)
+ (length string))
+ 8)
+ (setq string
+ (concat (substring string 0 8)
+ "."
+ (substring string 8))))
+ (setq firstdot (or (string-match "\\." string) (1- (length string))))
+ ;; Truncate to 3 chars after the first period.
+ (if (> (length string) (+ firstdot 4))
+ (setq string (substring string 0 (+ firstdot 4))))
+ ;; Change all periods except the first one into underscores.
+ (while (string-match "\\." string (1+ firstdot))
+ (setq i (string-match "\\." string (1+ firstdot)))
+ (aset string i ?_))
+ ;; If the last character of the original filename was `~',
+ ;; make sure the munged name ends with it also.
+ (if (equal lastchar ?~)
+ (aset string (1- (length string)) lastchar))
+ (concat dir string)))))
(defvar file-name-buffer-file-type-alist
'(
@@ -257,6 +270,25 @@ given by `ps-lpr-switches', which see.")
(setq ps-lpr-switches '("-q" "-dNOPAUSE" "-sDEVICE=epson" "-r240x60"
"-sOutputFile=LPT1" "-"))
+;; Backward compatibility for obsolescent functions which
+;; set screen size.
+
+(defun mode25 ()
+ "Changes the number of screen rows to 25."
+ (interactive)
+ (set-frame-size (selected-frame) 80 25))
+
+(defun mode4350 ()
+ "Changes the number of rows to 43 or 50.
+Emacs always tries to set the screen height to 50 rows first.
+If this fails, it will try to set it to 43 rows, on the assumption
+that your video hardware might not support 50-line mode."
+ (interactive)
+ (set-frame-size (selected-frame) 80 50)
+ (if (eq (frame-height (selected-frame)) 50)
+ nil ; the original built-in function returned nil
+ (set-frame-size (selected-frame) 80 43)))
+
(provide 'dos-fns)
; dos-fns.el ends here