Mercurial > emacs
annotate lisp/dos-fns.el @ 61453:9e9819183ce3
*** empty log message ***
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Sun, 10 Apr 2005 23:38:37 +0000 |
parents | ccd8cdf69359 |
children | 6fb026ad601f 4c90ffeb71c5 |
rev | line source |
---|---|
38436
b174db545cfd
Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents:
37262
diff
changeset
|
1 ;;; dos-fns.el --- MS-Dos specific functions |
5443 | 2 |
14734 | 3 ;; Copyright (C) 1991, 1993, 1995, 1996 Free Software Foundation, Inc. |
5443 | 4 |
17977 | 5 ;; Maintainer: Morten Welinder <terra@diku.dk> |
5443 | 6 ;; Keywords: internal |
7 | |
8 ;; This file is part of GNU Emacs. | |
9 | |
10 ;; GNU Emacs is free software; you can redistribute it and/or modify | |
11 ;; it under the terms of the GNU General Public License as published by | |
12 ;; the Free Software Foundation; either version 2, or (at your option) | |
13 ;; any later version. | |
14 | |
15 ;; GNU Emacs is distributed in the hope that it will be useful, | |
16 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
18 ;; GNU General Public License for more details. | |
19 | |
20 ;; You should have received a copy of the GNU General Public License | |
14169 | 21 ;; along with GNU Emacs; see the file COPYING. If not, write to the |
22 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
23 ;; Boston, MA 02111-1307, USA. | |
5443 | 24 |
25 ;;; Commentary: | |
26 | |
27 ;; Part of this code is taken from (or derived from) demacs. | |
28 | |
29 ;;; Code: | |
30 | |
13913
4e4201bcea5d
(convert-standard-filename): New alternate definition.
Richard M. Stallman <rms@gnu.org>
parents:
13487
diff
changeset
|
31 ;; This overrides a trivial definition in files.el. |
4e4201bcea5d
(convert-standard-filename): New alternate definition.
Richard M. Stallman <rms@gnu.org>
parents:
13487
diff
changeset
|
32 (defun convert-standard-filename (filename) |
4e4201bcea5d
(convert-standard-filename): New alternate definition.
Richard M. Stallman <rms@gnu.org>
parents:
13487
diff
changeset
|
33 "Convert a standard file's name to something suitable for the current OS. |
55865
ccd8cdf69359
Rework docstring (wording by Eli Zaretskii and Kai Grossjohann).
Juanma Barranquero <lekktu@gmail.com>
parents:
52401
diff
changeset
|
34 This means to guarantee valid names and perhaps to canonicalize |
ccd8cdf69359
Rework docstring (wording by Eli Zaretskii and Kai Grossjohann).
Juanma Barranquero <lekktu@gmail.com>
parents:
52401
diff
changeset
|
35 certain patterns. |
ccd8cdf69359
Rework docstring (wording by Eli Zaretskii and Kai Grossjohann).
Juanma Barranquero <lekktu@gmail.com>
parents:
52401
diff
changeset
|
36 |
ccd8cdf69359
Rework docstring (wording by Eli Zaretskii and Kai Grossjohann).
Juanma Barranquero <lekktu@gmail.com>
parents:
52401
diff
changeset
|
37 On Windows and DOS, replace invalid characters. On DOS, make |
ccd8cdf69359
Rework docstring (wording by Eli Zaretskii and Kai Grossjohann).
Juanma Barranquero <lekktu@gmail.com>
parents:
52401
diff
changeset
|
38 sure to obey the 8.3 limitations. On Windows, turn Cygwin names |
ccd8cdf69359
Rework docstring (wording by Eli Zaretskii and Kai Grossjohann).
Juanma Barranquero <lekktu@gmail.com>
parents:
52401
diff
changeset
|
39 into native names, and also turn slashes into backslashes if the |
ccd8cdf69359
Rework docstring (wording by Eli Zaretskii and Kai Grossjohann).
Juanma Barranquero <lekktu@gmail.com>
parents:
52401
diff
changeset
|
40 shell requires it (see `w32-shell-dos-semantics')." |
29855
4a37c3f4cb29
(convert-standard-filename): Convert leading
Eli Zaretskii <eliz@gnu.org>
parents:
24515
diff
changeset
|
41 (if (or (not (stringp filename)) |
29966
cf435e74e3ee
(convert-standard-filename): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents:
29855
diff
changeset
|
42 ;; This catches the case where FILENAME is "x:" or "x:/" or |
cf435e74e3ee
(convert-standard-filename): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents:
29855
diff
changeset
|
43 ;; "/", thus preventing infinite recursion. |
cf435e74e3ee
(convert-standard-filename): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents:
29855
diff
changeset
|
44 (string-match "\\`\\([a-zA-Z]:\\)?[/\\]?\\'" filename)) |
15187
d46c1e8bdb0d
(convert-standard-filename): Test msdos-long-file-names.
Richard M. Stallman <rms@gnu.org>
parents:
14734
diff
changeset
|
45 filename |
29966
cf435e74e3ee
(convert-standard-filename): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents:
29855
diff
changeset
|
46 (let ((flen (length filename))) |
cf435e74e3ee
(convert-standard-filename): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents:
29855
diff
changeset
|
47 ;; If FILENAME has a trailing slash, remove it and recurse. |
cf435e74e3ee
(convert-standard-filename): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents:
29855
diff
changeset
|
48 (if (memq (aref filename (1- flen)) '(?/ ?\\)) |
49588
37645a051842
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
43756
diff
changeset
|
49 (concat (convert-standard-filename |
29966
cf435e74e3ee
(convert-standard-filename): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents:
29855
diff
changeset
|
50 (substring filename 0 (1- flen))) |
cf435e74e3ee
(convert-standard-filename): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents:
29855
diff
changeset
|
51 "/") |
cf435e74e3ee
(convert-standard-filename): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents:
29855
diff
changeset
|
52 (let* (;; ange-ftp gets in the way for names like "/foo:bar". |
cf435e74e3ee
(convert-standard-filename): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents:
29855
diff
changeset
|
53 ;; We need to inhibit all magic file names, because |
cf435e74e3ee
(convert-standard-filename): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents:
29855
diff
changeset
|
54 ;; remote file names should never be passed through |
cf435e74e3ee
(convert-standard-filename): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents:
29855
diff
changeset
|
55 ;; this function, as they are not meant for the local |
cf435e74e3ee
(convert-standard-filename): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents:
29855
diff
changeset
|
56 ;; filesystem! |
cf435e74e3ee
(convert-standard-filename): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents:
29855
diff
changeset
|
57 (file-name-handler-alist nil) |
cf435e74e3ee
(convert-standard-filename): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents:
29855
diff
changeset
|
58 (dir |
cf435e74e3ee
(convert-standard-filename): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents:
29855
diff
changeset
|
59 ;; If FILENAME is "x:foo", file-name-directory returns |
cf435e74e3ee
(convert-standard-filename): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents:
29855
diff
changeset
|
60 ;; "x:/bar/baz", substituting the current working |
cf435e74e3ee
(convert-standard-filename): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents:
29855
diff
changeset
|
61 ;; directory on drive x:. We want to be left with "x:" |
cf435e74e3ee
(convert-standard-filename): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents:
29855
diff
changeset
|
62 ;; instead. |
cf435e74e3ee
(convert-standard-filename): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents:
29855
diff
changeset
|
63 (if (and (< 1 flen) |
cf435e74e3ee
(convert-standard-filename): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents:
29855
diff
changeset
|
64 (eq (aref filename 1) ?:) |
cf435e74e3ee
(convert-standard-filename): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents:
29855
diff
changeset
|
65 (null (string-match "[/\\]" filename))) |
cf435e74e3ee
(convert-standard-filename): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents:
29855
diff
changeset
|
66 (substring filename 0 2) |
cf435e74e3ee
(convert-standard-filename): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents:
29855
diff
changeset
|
67 (file-name-directory filename))) |
cf435e74e3ee
(convert-standard-filename): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents:
29855
diff
changeset
|
68 (dlen-m-1 (1- (length dir))) |
cf435e74e3ee
(convert-standard-filename): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents:
29855
diff
changeset
|
69 (string (copy-sequence (file-name-nondirectory filename))) |
cf435e74e3ee
(convert-standard-filename): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents:
29855
diff
changeset
|
70 (lastchar (aref string (1- (length string)))) |
cf435e74e3ee
(convert-standard-filename): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents:
29855
diff
changeset
|
71 i firstdot) |
cf435e74e3ee
(convert-standard-filename): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents:
29855
diff
changeset
|
72 (cond |
cf435e74e3ee
(convert-standard-filename): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents:
29855
diff
changeset
|
73 ((msdos-long-file-names) |
29855
4a37c3f4cb29
(convert-standard-filename): Convert leading
Eli Zaretskii <eliz@gnu.org>
parents:
24515
diff
changeset
|
74 ;; Replace characters that are invalid even on Windows. |
4a37c3f4cb29
(convert-standard-filename): Convert leading
Eli Zaretskii <eliz@gnu.org>
parents:
24515
diff
changeset
|
75 (while (setq i (string-match "[?*:<>|\"\000-\037]" string)) |
29966
cf435e74e3ee
(convert-standard-filename): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents:
29855
diff
changeset
|
76 (aset string i ?!))) |
cf435e74e3ee
(convert-standard-filename): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents:
29855
diff
changeset
|
77 ((not (member string '("" "." ".."))) |
cf435e74e3ee
(convert-standard-filename): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents:
29855
diff
changeset
|
78 ;; Change a leading period to a leading underscore. |
cf435e74e3ee
(convert-standard-filename): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents:
29855
diff
changeset
|
79 (if (= (aref string 0) ?.) |
cf435e74e3ee
(convert-standard-filename): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents:
29855
diff
changeset
|
80 (aset string 0 ?_)) |
39305
22c925655e32
(convert-standard-filename): Replace invalid
Eli Zaretskii <eliz@gnu.org>
parents:
39301
diff
changeset
|
81 ;; If the name is longer than 8 chars, and doesn't have a |
22c925655e32
(convert-standard-filename): Replace invalid
Eli Zaretskii <eliz@gnu.org>
parents:
39301
diff
changeset
|
82 ;; period, and we have a dash or underscore that isn't too |
22c925655e32
(convert-standard-filename): Replace invalid
Eli Zaretskii <eliz@gnu.org>
parents:
39301
diff
changeset
|
83 ;; close to the beginning, change that to a period. This |
22c925655e32
(convert-standard-filename): Replace invalid
Eli Zaretskii <eliz@gnu.org>
parents:
39301
diff
changeset
|
84 ;; is so we could salvage more characters of the original |
22c925655e32
(convert-standard-filename): Replace invalid
Eli Zaretskii <eliz@gnu.org>
parents:
39301
diff
changeset
|
85 ;; name by pushing them into the extension. |
22c925655e32
(convert-standard-filename): Replace invalid
Eli Zaretskii <eliz@gnu.org>
parents:
39301
diff
changeset
|
86 (if (and (not (string-match "\\." string)) |
22c925655e32
(convert-standard-filename): Replace invalid
Eli Zaretskii <eliz@gnu.org>
parents:
39301
diff
changeset
|
87 (> (length string) 8) |
22c925655e32
(convert-standard-filename): Replace invalid
Eli Zaretskii <eliz@gnu.org>
parents:
39301
diff
changeset
|
88 ;; We don't gain anything if we put the period closer |
22c925655e32
(convert-standard-filename): Replace invalid
Eli Zaretskii <eliz@gnu.org>
parents:
39301
diff
changeset
|
89 ;; than 5 chars from the beginning (5 + 3 = 8). |
22c925655e32
(convert-standard-filename): Replace invalid
Eli Zaretskii <eliz@gnu.org>
parents:
39301
diff
changeset
|
90 (setq i (string-match "[-_]" string 5))) |
22c925655e32
(convert-standard-filename): Replace invalid
Eli Zaretskii <eliz@gnu.org>
parents:
39301
diff
changeset
|
91 (aset string i ?\.)) |
29966
cf435e74e3ee
(convert-standard-filename): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents:
29855
diff
changeset
|
92 ;; Get rid of invalid characters. |
cf435e74e3ee
(convert-standard-filename): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents:
29855
diff
changeset
|
93 (while (setq i (string-match |
cf435e74e3ee
(convert-standard-filename): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents:
29855
diff
changeset
|
94 "[^-a-zA-Z0-9_.%~^$!#&{}@`'()\200-\376]" |
cf435e74e3ee
(convert-standard-filename): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents:
29855
diff
changeset
|
95 string)) |
cf435e74e3ee
(convert-standard-filename): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents:
29855
diff
changeset
|
96 (aset string i ?_)) |
cf435e74e3ee
(convert-standard-filename): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents:
29855
diff
changeset
|
97 ;; If we don't have a period in the first 8 chars, insert one. |
39305
22c925655e32
(convert-standard-filename): Replace invalid
Eli Zaretskii <eliz@gnu.org>
parents:
39301
diff
changeset
|
98 ;; This enables to have 3 more characters from the original |
22c925655e32
(convert-standard-filename): Replace invalid
Eli Zaretskii <eliz@gnu.org>
parents:
39301
diff
changeset
|
99 ;; name in the extension. |
29966
cf435e74e3ee
(convert-standard-filename): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents:
29855
diff
changeset
|
100 (if (> (or (string-match "\\." string) (length string)) |
cf435e74e3ee
(convert-standard-filename): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents:
29855
diff
changeset
|
101 8) |
cf435e74e3ee
(convert-standard-filename): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents:
29855
diff
changeset
|
102 (setq string |
cf435e74e3ee
(convert-standard-filename): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents:
29855
diff
changeset
|
103 (concat (substring string 0 8) |
cf435e74e3ee
(convert-standard-filename): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents:
29855
diff
changeset
|
104 "." |
cf435e74e3ee
(convert-standard-filename): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents:
29855
diff
changeset
|
105 (substring string 8)))) |
cf435e74e3ee
(convert-standard-filename): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents:
29855
diff
changeset
|
106 (setq firstdot (or (string-match "\\." string) |
cf435e74e3ee
(convert-standard-filename): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents:
29855
diff
changeset
|
107 (1- (length string)))) |
cf435e74e3ee
(convert-standard-filename): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents:
29855
diff
changeset
|
108 ;; Truncate to 3 chars after the first period. |
cf435e74e3ee
(convert-standard-filename): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents:
29855
diff
changeset
|
109 (if (> (length string) (+ firstdot 4)) |
cf435e74e3ee
(convert-standard-filename): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents:
29855
diff
changeset
|
110 (setq string (substring string 0 (+ firstdot 4)))) |
cf435e74e3ee
(convert-standard-filename): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents:
29855
diff
changeset
|
111 ;; Change all periods except the first one into underscores. |
39305
22c925655e32
(convert-standard-filename): Replace invalid
Eli Zaretskii <eliz@gnu.org>
parents:
39301
diff
changeset
|
112 ;; (DOS doesn't allow more than one period.) |
29966
cf435e74e3ee
(convert-standard-filename): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents:
29855
diff
changeset
|
113 (while (string-match "\\." string (1+ firstdot)) |
cf435e74e3ee
(convert-standard-filename): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents:
29855
diff
changeset
|
114 (setq i (string-match "\\." string (1+ firstdot))) |
cf435e74e3ee
(convert-standard-filename): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents:
29855
diff
changeset
|
115 (aset string i ?_)) |
39305
22c925655e32
(convert-standard-filename): Replace invalid
Eli Zaretskii <eliz@gnu.org>
parents:
39301
diff
changeset
|
116 ;; If the last character of the original filename was `~' or `#', |
22c925655e32
(convert-standard-filename): Replace invalid
Eli Zaretskii <eliz@gnu.org>
parents:
39301
diff
changeset
|
117 ;; make sure the munged name ends with it also. This is so that |
22c925655e32
(convert-standard-filename): Replace invalid
Eli Zaretskii <eliz@gnu.org>
parents:
39301
diff
changeset
|
118 ;; backup and auto-save files retain their telltale form. |
22c925655e32
(convert-standard-filename): Replace invalid
Eli Zaretskii <eliz@gnu.org>
parents:
39301
diff
changeset
|
119 (if (memq lastchar '(?~ ?#)) |
29966
cf435e74e3ee
(convert-standard-filename): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents:
29855
diff
changeset
|
120 (aset string (1- (length string)) lastchar)))) |
cf435e74e3ee
(convert-standard-filename): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents:
29855
diff
changeset
|
121 (concat (if (and (stringp dir) |
cf435e74e3ee
(convert-standard-filename): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents:
29855
diff
changeset
|
122 (memq (aref dir dlen-m-1) '(?/ ?\\))) |
cf435e74e3ee
(convert-standard-filename): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents:
29855
diff
changeset
|
123 (concat (convert-standard-filename |
cf435e74e3ee
(convert-standard-filename): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents:
29855
diff
changeset
|
124 (substring dir 0 dlen-m-1)) |
cf435e74e3ee
(convert-standard-filename): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents:
29855
diff
changeset
|
125 "/") |
cf435e74e3ee
(convert-standard-filename): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents:
29855
diff
changeset
|
126 (convert-standard-filename dir)) |
cf435e74e3ee
(convert-standard-filename): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents:
29855
diff
changeset
|
127 string)))))) |
13913
4e4201bcea5d
(convert-standard-filename): New alternate definition.
Richard M. Stallman <rms@gnu.org>
parents:
13487
diff
changeset
|
128 |
37262
3e478bb3f389
(dos-8+3-filename): Rename from dos-truncate-to-8+3.
Eli Zaretskii <eliz@gnu.org>
parents:
37257
diff
changeset
|
129 (defun dos-8+3-filename (filename) |
37257
6bbf8e77d787
(dos-truncate-to-8+3): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
29966
diff
changeset
|
130 "Truncate FILENAME to DOS 8+3 limits." |
6bbf8e77d787
(dos-truncate-to-8+3): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
29966
diff
changeset
|
131 (if (or (not (stringp filename)) |
6bbf8e77d787
(dos-truncate-to-8+3): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
29966
diff
changeset
|
132 (< (length filename) 5)) ; too short to give any trouble |
6bbf8e77d787
(dos-truncate-to-8+3): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
29966
diff
changeset
|
133 filename |
6bbf8e77d787
(dos-truncate-to-8+3): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
29966
diff
changeset
|
134 (let ((flen (length filename))) |
6bbf8e77d787
(dos-truncate-to-8+3): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
29966
diff
changeset
|
135 ;; If FILENAME has a trailing slash, remove it and recurse. |
6bbf8e77d787
(dos-truncate-to-8+3): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
29966
diff
changeset
|
136 (if (memq (aref filename (1- flen)) '(?/ ?\\)) |
37262
3e478bb3f389
(dos-8+3-filename): Rename from dos-truncate-to-8+3.
Eli Zaretskii <eliz@gnu.org>
parents:
37257
diff
changeset
|
137 (concat (dos-8+3-filename (substring filename 0 (1- flen))) |
37257
6bbf8e77d787
(dos-truncate-to-8+3): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
29966
diff
changeset
|
138 "/") |
6bbf8e77d787
(dos-truncate-to-8+3): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
29966
diff
changeset
|
139 (let* (;; ange-ftp gets in the way for names like "/foo:bar". |
6bbf8e77d787
(dos-truncate-to-8+3): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
29966
diff
changeset
|
140 ;; We need to inhibit all magic file names, because |
6bbf8e77d787
(dos-truncate-to-8+3): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
29966
diff
changeset
|
141 ;; remote file names should never be passed through |
6bbf8e77d787
(dos-truncate-to-8+3): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
29966
diff
changeset
|
142 ;; this function, as they are not meant for the local |
6bbf8e77d787
(dos-truncate-to-8+3): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
29966
diff
changeset
|
143 ;; filesystem! |
6bbf8e77d787
(dos-truncate-to-8+3): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
29966
diff
changeset
|
144 (file-name-handler-alist nil) |
6bbf8e77d787
(dos-truncate-to-8+3): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
29966
diff
changeset
|
145 (dir |
6bbf8e77d787
(dos-truncate-to-8+3): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
29966
diff
changeset
|
146 ;; If FILENAME is "x:foo", file-name-directory returns |
6bbf8e77d787
(dos-truncate-to-8+3): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
29966
diff
changeset
|
147 ;; "x:/bar/baz", substituting the current working |
6bbf8e77d787
(dos-truncate-to-8+3): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
29966
diff
changeset
|
148 ;; directory on drive x:. We want to be left with "x:" |
6bbf8e77d787
(dos-truncate-to-8+3): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
29966
diff
changeset
|
149 ;; instead. |
6bbf8e77d787
(dos-truncate-to-8+3): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
29966
diff
changeset
|
150 (if (and (< 1 flen) |
6bbf8e77d787
(dos-truncate-to-8+3): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
29966
diff
changeset
|
151 (eq (aref filename 1) ?:) |
6bbf8e77d787
(dos-truncate-to-8+3): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
29966
diff
changeset
|
152 (null (string-match "[/\\]" filename))) |
6bbf8e77d787
(dos-truncate-to-8+3): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
29966
diff
changeset
|
153 (substring filename 0 2) |
6bbf8e77d787
(dos-truncate-to-8+3): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
29966
diff
changeset
|
154 (file-name-directory filename))) |
6bbf8e77d787
(dos-truncate-to-8+3): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
29966
diff
changeset
|
155 (dlen-m-1 (1- (length dir))) |
6bbf8e77d787
(dos-truncate-to-8+3): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
29966
diff
changeset
|
156 (string (copy-sequence (file-name-nondirectory filename))) |
6bbf8e77d787
(dos-truncate-to-8+3): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
29966
diff
changeset
|
157 (strlen (length string)) |
6bbf8e77d787
(dos-truncate-to-8+3): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
29966
diff
changeset
|
158 (lastchar (aref string (1- strlen))) |
6bbf8e77d787
(dos-truncate-to-8+3): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
29966
diff
changeset
|
159 i firstdot) |
6bbf8e77d787
(dos-truncate-to-8+3): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
29966
diff
changeset
|
160 (setq firstdot (string-match "\\." string)) |
6bbf8e77d787
(dos-truncate-to-8+3): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
29966
diff
changeset
|
161 (cond |
6bbf8e77d787
(dos-truncate-to-8+3): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
29966
diff
changeset
|
162 (firstdot |
6bbf8e77d787
(dos-truncate-to-8+3): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
29966
diff
changeset
|
163 ;; Truncate the extension to 3 characters. |
6bbf8e77d787
(dos-truncate-to-8+3): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
29966
diff
changeset
|
164 (if (> strlen (+ firstdot 4)) |
6bbf8e77d787
(dos-truncate-to-8+3): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
29966
diff
changeset
|
165 (setq string (substring string 0 (+ firstdot 4)))) |
6bbf8e77d787
(dos-truncate-to-8+3): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
29966
diff
changeset
|
166 ;; Truncate the basename to 8 characters. |
6bbf8e77d787
(dos-truncate-to-8+3): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
29966
diff
changeset
|
167 (if (> firstdot 8) |
6bbf8e77d787
(dos-truncate-to-8+3): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
29966
diff
changeset
|
168 (setq string (concat (substring string 0 8) |
6bbf8e77d787
(dos-truncate-to-8+3): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
29966
diff
changeset
|
169 "." |
6bbf8e77d787
(dos-truncate-to-8+3): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
29966
diff
changeset
|
170 (substring string (1+ firstdot)))))) |
6bbf8e77d787
(dos-truncate-to-8+3): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
29966
diff
changeset
|
171 ((> strlen 8) |
6bbf8e77d787
(dos-truncate-to-8+3): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
29966
diff
changeset
|
172 ;; No dot; truncate file name to 8 characters. |
6bbf8e77d787
(dos-truncate-to-8+3): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
29966
diff
changeset
|
173 (setq string (substring string 0 8)))) |
6bbf8e77d787
(dos-truncate-to-8+3): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
29966
diff
changeset
|
174 ;; If the last character of the original filename was `~', |
6bbf8e77d787
(dos-truncate-to-8+3): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
29966
diff
changeset
|
175 ;; make sure the munged name ends with it also. This is so |
6bbf8e77d787
(dos-truncate-to-8+3): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
29966
diff
changeset
|
176 ;; a backup file retains its final `~'. |
6bbf8e77d787
(dos-truncate-to-8+3): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
29966
diff
changeset
|
177 (if (equal lastchar ?~) |
6bbf8e77d787
(dos-truncate-to-8+3): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
29966
diff
changeset
|
178 (aset string (1- (length string)) lastchar)) |
6bbf8e77d787
(dos-truncate-to-8+3): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
29966
diff
changeset
|
179 (concat (if (and (stringp dir) |
6bbf8e77d787
(dos-truncate-to-8+3): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
29966
diff
changeset
|
180 (memq (aref dir dlen-m-1) '(?/ ?\\))) |
37262
3e478bb3f389
(dos-8+3-filename): Rename from dos-truncate-to-8+3.
Eli Zaretskii <eliz@gnu.org>
parents:
37257
diff
changeset
|
181 (concat (dos-8+3-filename (substring dir 0 dlen-m-1)) |
37257
6bbf8e77d787
(dos-truncate-to-8+3): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
29966
diff
changeset
|
182 "/") |
6bbf8e77d787
(dos-truncate-to-8+3): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
29966
diff
changeset
|
183 ;; Recurse to truncate the leading directories. |
37262
3e478bb3f389
(dos-8+3-filename): Rename from dos-truncate-to-8+3.
Eli Zaretskii <eliz@gnu.org>
parents:
37257
diff
changeset
|
184 (dos-8+3-filename dir)) |
37257
6bbf8e77d787
(dos-truncate-to-8+3): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
29966
diff
changeset
|
185 string)))))) |
6bbf8e77d787
(dos-truncate-to-8+3): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
29966
diff
changeset
|
186 |
22070
d8e53123116c
(dos-ps-printer, dos-printer, msdos-shells):
Richard M. Stallman <rms@gnu.org>
parents:
21568
diff
changeset
|
187 ;; See dos-vars.el for defcustom. |
d8e53123116c
(dos-ps-printer, dos-printer, msdos-shells):
Richard M. Stallman <rms@gnu.org>
parents:
21568
diff
changeset
|
188 (defvar msdos-shells) |
5443 | 189 |
24515
ef4a540c34ff
(set-default-process-coding-system): Copied from dos-w32.el.
Andrew Innes <andrewi@gnu.org>
parents:
22676
diff
changeset
|
190 ;;; Override setting chosen at startup. |
ef4a540c34ff
(set-default-process-coding-system): Copied from dos-w32.el.
Andrew Innes <andrewi@gnu.org>
parents:
22676
diff
changeset
|
191 (defun set-default-process-coding-system () |
ef4a540c34ff
(set-default-process-coding-system): Copied from dos-w32.el.
Andrew Innes <andrewi@gnu.org>
parents:
22676
diff
changeset
|
192 (setq default-process-coding-system |
ef4a540c34ff
(set-default-process-coding-system): Copied from dos-w32.el.
Andrew Innes <andrewi@gnu.org>
parents:
22676
diff
changeset
|
193 (if default-enable-multibyte-characters |
ef4a540c34ff
(set-default-process-coding-system): Copied from dos-w32.el.
Andrew Innes <andrewi@gnu.org>
parents:
22676
diff
changeset
|
194 '(undecided-dos . undecided-dos) |
ef4a540c34ff
(set-default-process-coding-system): Copied from dos-w32.el.
Andrew Innes <andrewi@gnu.org>
parents:
22676
diff
changeset
|
195 '(raw-text-dos . raw-text-dos)))) |
ef4a540c34ff
(set-default-process-coding-system): Copied from dos-w32.el.
Andrew Innes <andrewi@gnu.org>
parents:
22676
diff
changeset
|
196 |
ef4a540c34ff
(set-default-process-coding-system): Copied from dos-w32.el.
Andrew Innes <andrewi@gnu.org>
parents:
22676
diff
changeset
|
197 (add-hook 'before-init-hook 'set-default-process-coding-system) |
ef4a540c34ff
(set-default-process-coding-system): Copied from dos-w32.el.
Andrew Innes <andrewi@gnu.org>
parents:
22676
diff
changeset
|
198 |
16690
97029c2699a7
(register-name-alist): Use defvar.
Richard M. Stallman <rms@gnu.org>
parents:
16027
diff
changeset
|
199 (defvar register-name-alist |
5443 | 200 '((ax . 0) (bx . 1) (cx . 2) (dx . 3) (si . 4) (di . 5) |
7256
0f06f87f3c3b
(set-register-value): Setting the high byte of a
Richard M. Stallman <rms@gnu.org>
parents:
7087
diff
changeset
|
201 (cflag . 6) (flags . 7) |
0f06f87f3c3b
(set-register-value): Setting the high byte of a
Richard M. Stallman <rms@gnu.org>
parents:
7087
diff
changeset
|
202 (al . (0 . 0)) (bl . (1 . 0)) (cl . (2 . 0)) (dl . (3 . 0)) |
0f06f87f3c3b
(set-register-value): Setting the high byte of a
Richard M. Stallman <rms@gnu.org>
parents:
7087
diff
changeset
|
203 (ah . (0 . 1)) (bh . (1 . 1)) (ch . (2 . 1)) (dh . (3 . 1)))) |
5443 | 204 |
205 (defun make-register () | |
206 (make-vector 8 0)) | |
207 | |
208 (defun register-value (regs name) | |
7256
0f06f87f3c3b
(set-register-value): Setting the high byte of a
Richard M. Stallman <rms@gnu.org>
parents:
7087
diff
changeset
|
209 (let ((where (cdr (assoc name register-name-alist)))) |
5443 | 210 (cond ((consp where) |
211 (let ((tem (aref regs (car where)))) | |
212 (if (zerop (cdr where)) | |
213 (% tem 256) | |
214 (/ tem 256)))) | |
215 ((numberp where) | |
216 (aref regs where)) | |
217 (t nil)))) | |
218 | |
219 (defun set-register-value (regs name value) | |
220 (and (numberp value) | |
7256
0f06f87f3c3b
(set-register-value): Setting the high byte of a
Richard M. Stallman <rms@gnu.org>
parents:
7087
diff
changeset
|
221 (>= value 0) |
0f06f87f3c3b
(set-register-value): Setting the high byte of a
Richard M. Stallman <rms@gnu.org>
parents:
7087
diff
changeset
|
222 (let ((where (cdr (assoc name register-name-alist)))) |
5443 | 223 (cond ((consp where) |
7256
0f06f87f3c3b
(set-register-value): Setting the high byte of a
Richard M. Stallman <rms@gnu.org>
parents:
7087
diff
changeset
|
224 (let ((tem (aref regs (car where))) |
0f06f87f3c3b
(set-register-value): Setting the high byte of a
Richard M. Stallman <rms@gnu.org>
parents:
7087
diff
changeset
|
225 (value (logand value 255))) |
0f06f87f3c3b
(set-register-value): Setting the high byte of a
Richard M. Stallman <rms@gnu.org>
parents:
7087
diff
changeset
|
226 (aset regs |
0f06f87f3c3b
(set-register-value): Setting the high byte of a
Richard M. Stallman <rms@gnu.org>
parents:
7087
diff
changeset
|
227 (car where) |
0f06f87f3c3b
(set-register-value): Setting the high byte of a
Richard M. Stallman <rms@gnu.org>
parents:
7087
diff
changeset
|
228 (if (zerop (cdr where)) |
0f06f87f3c3b
(set-register-value): Setting the high byte of a
Richard M. Stallman <rms@gnu.org>
parents:
7087
diff
changeset
|
229 (logior (logand tem 65280) value) |
0f06f87f3c3b
(set-register-value): Setting the high byte of a
Richard M. Stallman <rms@gnu.org>
parents:
7087
diff
changeset
|
230 (logior (logand tem 255) (lsh value 8)))))) |
5443 | 231 ((numberp where) |
7256
0f06f87f3c3b
(set-register-value): Setting the high byte of a
Richard M. Stallman <rms@gnu.org>
parents:
7087
diff
changeset
|
232 (aset regs where (logand value 65535)))))) |
5443 | 233 regs) |
234 | |
235 (defsubst intdos (regs) | |
236 (int86 33 regs)) | |
237 | |
14380
874cd82cd2b4
(mode25): Moved from `src/dosfns.c' for backward compatibility.
Richard M. Stallman <rms@gnu.org>
parents:
14189
diff
changeset
|
238 ;; Backward compatibility for obsolescent functions which |
874cd82cd2b4
(mode25): Moved from `src/dosfns.c' for backward compatibility.
Richard M. Stallman <rms@gnu.org>
parents:
14189
diff
changeset
|
239 ;; set screen size. |
874cd82cd2b4
(mode25): Moved from `src/dosfns.c' for backward compatibility.
Richard M. Stallman <rms@gnu.org>
parents:
14189
diff
changeset
|
240 |
874cd82cd2b4
(mode25): Moved from `src/dosfns.c' for backward compatibility.
Richard M. Stallman <rms@gnu.org>
parents:
14189
diff
changeset
|
241 (defun mode25 () |
874cd82cd2b4
(mode25): Moved from `src/dosfns.c' for backward compatibility.
Richard M. Stallman <rms@gnu.org>
parents:
14189
diff
changeset
|
242 "Changes the number of screen rows to 25." |
874cd82cd2b4
(mode25): Moved from `src/dosfns.c' for backward compatibility.
Richard M. Stallman <rms@gnu.org>
parents:
14189
diff
changeset
|
243 (interactive) |
874cd82cd2b4
(mode25): Moved from `src/dosfns.c' for backward compatibility.
Richard M. Stallman <rms@gnu.org>
parents:
14189
diff
changeset
|
244 (set-frame-size (selected-frame) 80 25)) |
874cd82cd2b4
(mode25): Moved from `src/dosfns.c' for backward compatibility.
Richard M. Stallman <rms@gnu.org>
parents:
14189
diff
changeset
|
245 |
874cd82cd2b4
(mode25): Moved from `src/dosfns.c' for backward compatibility.
Richard M. Stallman <rms@gnu.org>
parents:
14189
diff
changeset
|
246 (defun mode4350 () |
874cd82cd2b4
(mode25): Moved from `src/dosfns.c' for backward compatibility.
Richard M. Stallman <rms@gnu.org>
parents:
14189
diff
changeset
|
247 "Changes the number of rows to 43 or 50. |
874cd82cd2b4
(mode25): Moved from `src/dosfns.c' for backward compatibility.
Richard M. Stallman <rms@gnu.org>
parents:
14189
diff
changeset
|
248 Emacs always tries to set the screen height to 50 rows first. |
874cd82cd2b4
(mode25): Moved from `src/dosfns.c' for backward compatibility.
Richard M. Stallman <rms@gnu.org>
parents:
14189
diff
changeset
|
249 If this fails, it will try to set it to 43 rows, on the assumption |
874cd82cd2b4
(mode25): Moved from `src/dosfns.c' for backward compatibility.
Richard M. Stallman <rms@gnu.org>
parents:
14189
diff
changeset
|
250 that your video hardware might not support 50-line mode." |
874cd82cd2b4
(mode25): Moved from `src/dosfns.c' for backward compatibility.
Richard M. Stallman <rms@gnu.org>
parents:
14189
diff
changeset
|
251 (interactive) |
874cd82cd2b4
(mode25): Moved from `src/dosfns.c' for backward compatibility.
Richard M. Stallman <rms@gnu.org>
parents:
14189
diff
changeset
|
252 (set-frame-size (selected-frame) 80 50) |
874cd82cd2b4
(mode25): Moved from `src/dosfns.c' for backward compatibility.
Richard M. Stallman <rms@gnu.org>
parents:
14189
diff
changeset
|
253 (if (eq (frame-height (selected-frame)) 50) |
874cd82cd2b4
(mode25): Moved from `src/dosfns.c' for backward compatibility.
Richard M. Stallman <rms@gnu.org>
parents:
14189
diff
changeset
|
254 nil ; the original built-in function returned nil |
874cd82cd2b4
(mode25): Moved from `src/dosfns.c' for backward compatibility.
Richard M. Stallman <rms@gnu.org>
parents:
14189
diff
changeset
|
255 (set-frame-size (selected-frame) 80 43))) |
874cd82cd2b4
(mode25): Moved from `src/dosfns.c' for backward compatibility.
Richard M. Stallman <rms@gnu.org>
parents:
14189
diff
changeset
|
256 |
14189
557b3d11a381
(ps-lpr-switches, ps-lpr-command): Just setq them;
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
257 (provide 'dos-fns) |
557b3d11a381
(ps-lpr-switches, ps-lpr-command): Just setq them;
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
258 |
52401 | 259 ;;; arch-tag: 00b03579-8ebb-4a02-8762-5c5a929774ad |
38436
b174db545cfd
Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents:
37262
diff
changeset
|
260 ;;; dos-fns.el ends here |