123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317 |
- (declare-function int86 "dosfns.c")
- (declare-function msdos-long-file-names "msdos.c")
- (defun dos-convert-standard-filename (filename)
- "Convert a standard file's name to something suitable for MS-DOS.
- This means to guarantee valid names and perhaps to canonicalize
- certain patterns.
- This function is called by `convert-standard-filename'.
- On Windows and DOS, replace invalid characters. On DOS, make
- sure to obey the 8.3 limitations."
- (if (or (not (stringp filename))
-
-
- (string-match "\\`\\([a-zA-Z]:\\)?[/\\]?\\'" filename))
- filename
- (let ((flen (length filename)))
-
- (if (memq (aref filename (1- flen)) '(?/ ?\\))
- (concat (dos-convert-standard-filename
- (substring filename 0 (1- flen)))
- "/")
- (let* (
-
-
-
-
- (file-name-handler-alist nil)
- (dir
-
-
-
-
- (if (and (< 1 flen)
- (eq (aref filename 1) ?:)
- (null (string-match "[/\\]" filename)))
- (substring filename 0 2)
- (file-name-directory filename)))
- (dlen-m-1 (1- (length dir)))
- (string (copy-sequence (file-name-nondirectory filename)))
- (lastchar (aref string (1- (length string))))
- i firstdot)
- (cond
- ((msdos-long-file-names)
-
- (while (setq i (string-match "[?*:<>|\"\000-\037]" string))
- (aset string i ?!)))
- ((not (member string '("" "." "..")))
-
- (if (= (aref string 0) ?.)
- (aset string 0 ?_))
-
-
-
-
-
- (if (and (not (string-match "\\." string))
- (> (length string) 8)
-
-
- (setq i (string-match "[-_]" string 5)))
- (aset string i ?\.))
-
- (while (setq i (string-match
- "[^-a-zA-Z0-9_.%~^$!#&{}@`'()\200-\376]"
- string))
- (aset string i ?_))
-
-
-
- (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))))
-
- (if (> (length string) (+ firstdot 4))
- (setq string (substring string 0 (+ firstdot 4))))
-
-
- (while (string-match "\\." string (1+ firstdot))
- (setq i (string-match "\\." string (1+ firstdot)))
- (aset string i ?_))
-
-
-
- (if (memq lastchar '(?~ ?#))
- (aset string (1- (length string)) lastchar))))
- (concat (if (and (stringp dir)
- (memq (aref dir dlen-m-1) '(?/ ?\\)))
- (concat (dos-convert-standard-filename
- (substring dir 0 dlen-m-1))
- "/")
- (dos-convert-standard-filename dir))
- string))))))
- (defun dos-8+3-filename (filename)
- "Truncate FILENAME to DOS 8+3 limits."
- (if (or (not (stringp filename))
- (< (length filename) 5))
- filename
- (let ((flen (length filename)))
-
- (if (memq (aref filename (1- flen)) '(?/ ?\\))
- (concat (dos-8+3-filename (substring filename 0 (1- flen)))
- "/")
- (let* (
-
-
-
-
- (file-name-handler-alist nil)
- (dir
-
-
-
-
- (if (and (< 1 flen)
- (eq (aref filename 1) ?:)
- (null (string-match "[/\\]" filename)))
- (substring filename 0 2)
- (file-name-directory filename)))
- (dlen-m-1 (1- (length dir)))
- (string (copy-sequence (file-name-nondirectory filename)))
- (strlen (length string))
- (lastchar (aref string (1- strlen)))
- firstdot)
- (setq firstdot (string-match "\\." string))
- (cond
- (firstdot
-
- (if (> strlen (+ firstdot 4))
- (setq string (substring string 0 (+ firstdot 4))))
-
- (if (> firstdot 8)
- (setq string (concat (substring string 0 8)
- "."
- (substring string (1+ firstdot))))))
- ((> strlen 8)
-
- (setq string (substring string 0 8))))
-
-
-
- (if (equal lastchar ?~)
- (aset string (1- (length string)) lastchar))
- (concat (if (and (stringp dir)
- (memq (aref dir dlen-m-1) '(?/ ?\\)))
- (concat (dos-8+3-filename (substring dir 0 dlen-m-1))
- "/")
-
- (dos-8+3-filename dir))
- string))))))
- (defun dosified-file-name (file-name)
- "Return a variant of FILE-NAME that is valid on MS-DOS filesystems.
- This function is for those rare cases where `dos-convert-standard-filename'
- does not do a job that is good enough, e.g. if you need to preserve the
- file-name extension. It recognizes only certain specific file names
- that are used in Emacs Lisp sources; any other file name will be
- returned unaltered."
- (cond
-
- ((string= file-name ".dir-locals.el")
- "_dir-locals.el")
- (t
- file-name)))
- (defvar msdos-shells)
- (defun dos-set-default-process-coding-system ()
- (setq default-process-coding-system
- (if (default-value 'enable-multibyte-characters)
- '(undecided-dos . undecided-dos)
- '(raw-text-dos . raw-text-dos))))
- (add-hook 'before-init-hook 'dos-set-default-process-coding-system)
- (defun dos-reevaluate-defcustoms ()
-
-
-
-
- )
- (add-hook 'before-init-hook 'dos-reevaluate-defcustoms)
- (defvar dos-register-name-alist
- '((ax . 0) (bx . 1) (cx . 2) (dx . 3) (si . 4) (di . 5)
- (cflag . 6) (flags . 7)
- (al . (0 . 0)) (bl . (1 . 0)) (cl . (2 . 0)) (dl . (3 . 0))
- (ah . (0 . 1)) (bh . (1 . 1)) (ch . (2 . 1)) (dh . (3 . 1))))
- (define-obsolete-variable-alias
- 'register-name-alist 'dos-register-name-alist "24.1")
- (defun dos-make-register ()
- (make-vector 8 0))
- (define-obsolete-function-alias 'make-register 'dos-make-register "24.1")
- (defun dos-register-value (regs name)
- (let ((where (cdr (assoc name dos-register-name-alist))))
- (cond ((consp where)
- (let ((tem (aref regs (car where))))
- (if (zerop (cdr where))
- (% tem 256)
- (/ tem 256))))
- ((numberp where)
- (aref regs where))
- (t nil))))
- (define-obsolete-function-alias 'register-value 'dos-register-value "24.1")
- (defun dos-set-register-value (regs name value)
- (and (numberp value)
- (>= value 0)
- (let ((where (cdr (assoc name dos-register-name-alist))))
- (cond ((consp where)
- (let ((tem (aref regs (car where)))
- (value (logand value 255)))
- (aset regs
- (car where)
- (if (zerop (cdr where))
- (logior (logand tem 65280) value)
- (logior (logand tem 255) (lsh value 8))))))
- ((numberp where)
- (aset regs where (logand value 65535))))))
- regs)
- (define-obsolete-function-alias
- 'set-register-value 'dos-set-register-value "24.1")
- (defsubst dos-intdos (regs)
- "Issue the DOS Int 21h with registers REGS.
- REGS should be a vector produced by `dos-make-register'
- and `dos-set-register-value', which see."
- (int86 33 regs))
- (define-obsolete-function-alias 'intdos 'dos-intdos "24.1")
- (defun dos-mode25 ()
- "Changes the number of screen rows to 25."
- (interactive)
- (set-frame-size (selected-frame) 80 25))
- (define-obsolete-function-alias 'mode25 'dos-mode25 "24.1")
- (defun dos-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
- (set-frame-size (selected-frame) 80 43)))
- (define-obsolete-function-alias 'mode4350 'dos-mode4350 "24.1")
- (provide 'dos-fns)
|