;ELC ;;; compiled by kwzh@hal.gnu.ai.mit.edu on Tue May 2 20:12:11 1995 ;;; from file /gd/gnu/emacs/19.0/lisp/ange-ftp.el ;;; emacs version 19.28.90.69. ;;; bytecomp version FSF 2.10 ;;; optimization is on. ;;; this file uses opcodes which do not exist in Emacs 18. (if (and (boundp 'emacs-version) (or (and (boundp 'epoch::version) epoch::version) (string-lessp emacs-version "19"))) (error "`/gd/gnu/emacs/19.0/lisp/ange-ftp.el' was compiled for Emacs 19")) (require (quote comint)) #@283 *Format of a fully expanded remote file name. This is a list of the form (REGEXP HOST USER NAME), where REGEXP is a regular expression matching the full remote name, and HOST, USER, and NAME are the numbers of parenthesized expressions in REGEXP for the components (in that order). (defvar ange-ftp-name-format (quote ("^/\\(\\([^@/:]*\\)@\\)?\\([^@/:]*\\):\\(.*\\)" 3 2 4)) (#$ . -511)) #@66 *Regular expression matching the start of a multiline ftp reply. (defvar ange-ftp-multi-msgs "^220-\\|^230-\\|^226\\|^25.-\\|^221-\\|^200-\\|^331-\\|^4[25]1-\\|^530-" (#$ . -905)) #@54 *Regular expression matching ftp "success" messages. (defvar ange-ftp-good-msgs "^220 \\|^230 \\|^226 \\|^25. \\|^221 \\|^200 \\|^[Hh]ash mark" (#$ . -1091)) #@64 *Regular expression matching ftp messages that can be ignored. (defvar ange-ftp-skip-msgs (concat "^200 \\(PORT\\|Port\\) \\|^331 \\|^150 \\|^350 \\|^[0-9]+ bytes \\|" "^Connected \\|^$\\|^Remote system\\|^Using\\|^ \\|Password:\\|" "^local:\\|^Trying\\|^125 \\|^550-\\|^221 .*oodbye") (#$ . -1255)) #@142 *Regular expression matching ftp messages that indicate serious errors. These mean that the FTP process should (or already has) been killed. (defvar ange-ftp-fatal-msgs (concat "^ftp: \\|^Not connected\\|^530 \\|^4[25]1 \\|rcmd: \\|" "^No control connection\\|unknown host\\|^lost connection") (#$ . -1562)) #@73 *Regular expression matching login failure messages from rlogin/telnet. (defvar ange-ftp-gateway-fatal-msgs "No route to host\\|Connection closed\\|No such host\\|Login incorrect" (#$ . -1876)) #@78 *Regular expression used to determine the number of bytes in a FTP transfer. (defvar ange-ftp-xfer-size-msgs "^150 .* connection for .* (\\([0-9]+\\) bytes)" (#$ . -2076)) #@43 *Template used to create temporary files. (defvar ange-ftp-tmp-name-template "/tmp/ange-ftp" (#$ . -2254)) #@311 *Template used to create temporary files when ftp-ing through a gateway. Files starting with this prefix need to be accessible from BOTH the local machine and the gateway machine, and need to have the SAME name on both machines, that is, /tmp is probably NOT what you want, since that is rarely cross-mounted. (defvar ange-ftp-gateway-tmp-name-template "/tmp/ange-ftp" (#$ . -2368)) #@49 *File in .netrc format to search for passwords. (defvar ange-ftp-netrc-filename "~/.netrc" (#$ . -2757)) #@60 *If non-nil avoid checking permissions on the .netrc file. (defvar ange-ftp-disable-netrc-security-check nil (#$ . -2868)) #@185 *User name to use when none is specied in a file name. If nil, then the name under which the user is logged in is used. If non-nil but not a string, the user is prompted for the name. (defvar ange-ftp-default-user nil (#$ . -2998)) #@70 *Password to use when the user is the same as ange-ftp-default-user. (defvar ange-ftp-default-password nil (#$ . -3236)) #@78 *Account password to use when the user is the same as ange-ftp-default-user. (defvar ange-ftp-default-account nil (#$ . -3363)) #@163 *If t, use value of `user-mail-address' as password for anonymous ftp. If a string, then use that string as the password. If nil, prompt the user for a password. (defvar ange-ftp-generate-anonymous-password t (#$ . -3498)) #@76 *If non-nil, regexp matching hosts on which `dir' command lists directory. (defvar ange-ftp-dumb-unix-host-regexp nil (#$ . -3727)) #@71 *If a file matches this regexp then it is transferred in binary mode. (defvar ange-ftp-binary-file-name-regexp (concat "\\.[zZ]$\\|\\.lzh$\\|\\.arc$\\|\\.zip$\\|\\.zoo$\\|\\.tar$\\|" "\\.dvi$\\|\\.ps$\\|\\.elc$\\|TAGS$\\|\\.gif$\\|" "\\.EXE\\(;[0-9]+\\)?$\\|\\.[zZ]-part-..$\\|\\.gz$\\|" "\\.taz$\\|\\.tgz$") (#$ . -3865)) #@72 *Name of host to use as gateway machine when local FTP isn't possible. (defvar ange-ftp-gateway-host nil (#$ . -4194)) #@200 *Regexp selecting hosts which can be reached directly with ftp. For other hosts the FTP process is started on `ange-ftp-gateway-host' instead, and/or reached via `ange-ftp-gateway-ftp-program-name'. (defvar ange-ftp-local-host-regexp ".*" (#$ . -4320)) #@114 *If non-nil then the gateway program should give a shell prompt. Both telnet and rlogin do something like this. (defvar ange-ftp-gateway-program-interactive nil (#$ . -4580)) #@166 *Name of program to spawn a shell on the gateway machine. Valid candidates are rsh (remsh on some systems), telnet and rlogin. See also the gateway variable above. (defvar ange-ftp-gateway-program remote-shell-program (#$ . -4763)) #@325 *Regexp matching prompt after complete login sequence on gateway machine. A match for this means the shell is now awaiting input. Make this regexp as strict as possible; it shouldn't match *anything* at all except the user's initial prompt. The above string will fail under most SUN-3's since it matches the login banner. (defvar ange-ftp-gateway-prompt-pattern "^[^#$%>;\n]*[#$%>;] *" (#$ . -5003)) #@173 *Set up terminal after logging in to the gateway machine. This command should stop the terminal from echoing each command, and arrange to strip out trailing ^M characters. (defvar ange-ftp-gateway-setup-term-command (byte-code "=‡Ç" [system-type hpux "stty -onlcr -echo\n" "stty -echo nl\n"] 2) (#$ . -5412)) #@231 *Non-nil means the ftp gateway and/or the gateway ftp program is smart. Don't bother telnetting, etc., already connected to desired host transparently, or just issue a user@host command in case `ange-ftp-gateway-host' is non-nil. (defvar ange-ftp-smart-gateway nil (#$ . -5735)) #@69 *Port on gateway machine to use when smart gateway is in operation. (defvar ange-ftp-smart-gateway-port "21" (#$ . -6020)) #@55 *If non-nil, send the HASH command to the FTP client. (defvar ange-ftp-send-hash t (#$ . -6149)) #@261 *Default size, in bytes, between hash-marks when transferring a binary file. If NIL, this variable will be locally overridden if the FTP client outputs a suitable response to the HASH command. If non-NIL then this value takes precedence over the local value. (defvar ange-ftp-binary-hash-mark-size nil (#$ . -6253)) #@206 *Default size, in bytes, between hash-marks when transferring an ASCII file. This variable is buffer-local and will be locally overridden if the FTP client outputs a suitable response to the HASH command. (defvar ange-ftp-ascii-hash-mark-size 1024 (#$ . -6577)) #@68 *If non-NIL then be chatty about interaction with the FTP process. (defvar ange-ftp-process-verbose t (#$ . -6845)) #@30 *Name of FTP program to run. (defvar ange-ftp-ftp-program-name "ftp" (#$ . -6967)) #@120 *Name of FTP program to run when accessing non-local hosts. Some AT&T folks claim to use something called `pftp' here. (defvar ange-ftp-gateway-ftp-program-name "ftp" (#$ . -7057)) #@62 *A list of arguments passed to the FTP program when started. (defvar ange-ftp-ftp-program-args (quote ("-i" "-n" "-g" "-v")) (#$ . -7244)) #@52 *If non-NIL then a string naming nslookup program. (defvar ange-ftp-nslookup-program nil (#$ . -7389)) #@60 *Non-nil means make backup files for "magic" remote files. (defvar ange-ftp-make-backup-files nil (#$ . -7498)) #@135 *Number of seconds to wait before retry if file or listing doesn't arrive. This might need to be increased for very slow connections. (defvar ange-ftp-retry-time 5 (#$ . -7617)) #@122 If 1, allows ange-ftp files to be auto-saved. If 0, suppresses auto-saving of ange-ftp files. Don't use any other value. (defvar ange-ftp-auto-save 0 (#$ . 7802)) (require (quote backquote)) #@95 Make an obarray suitable for use as a hashtable. SIZE, if supplied, should be a prime number. (defalias 'ange-ftp-make-hashtable #[(&optional size) " \"" [make-vector size 31 0] 3 (#$ . 7999)]) #@51 Call FUNCTION on each key and value in HASHTABLE. (defalias 'ange-ftp-map-hashtable #[(fun tbl) "\n\"" [mapatoms #[(sym) " N N\"" [fun sym key val] 4] tbl] 3 (#$ . 8206)]) #@50 Convert KEY into a suitable key for a hashtable. (defalias 'ange-ftp-make-hash-key '(macro . #[(key) "\nD\n\nDF" [if stringp key prin1-to-string] 5 (#$ . 8391)])) #@52 Return the value associated with KEY in HASHTABLE. (defalias 'ange-ftp-get-hash-entry #[(key tbl) " ;\n ! \"\fN)" [intern-soft key prin1-to-string tbl sym val] 4 (#$ . 8564)]) #@59 Record an association between KEY and VALUE in HASHTABLE. (defalias 'ange-ftp-put-hash-entry #[(key val tbl) " ;\n ! \"\f#\f #)" [intern key prin1-to-string tbl sym put val] 4 (#$ . 8761)]) #@73 Copy all symbols except KEY in HASHTABLE and return modified hashtable. (defalias 'ange-ftp-del-hash-entry #[(key tbl) "G ! S\"\fY#\f \fHI\fS+" [tbl len ange-ftp-make-hashtable new-tbl i ange-ftp-map-hashtable #[(k v) "  \f#" [k key ange-ftp-put-hash-entry v new-tbl] 4] 0] 5 (#$ . 8974)]) #@58 Return whether there is an association for KEY in TABLE. (defalias 'ange-ftp-hash-entry-exists-p #[(key tbl) " ;\n ! \"" [intern-soft key prin1-to-string tbl] 3 (#$ . 9299)]) #@67 Return a sorted list of all the active keys in TABLE, as strings. (defalias 'ange-ftp-hash-table-keys #[(tbl) " \"\"" [sort all-completions "" tbl string-lessp] 4 (#$ . 9489)]) #@71 Buffer name to hold directory listing data received from ftp process. (defvar ange-ftp-data-buffer-name " *ftp data*" (#$ . 9677)) #@60 Last modified time of the netrc file from file-attributes. (defvar ange-ftp-netrc-modtime nil (#$ . 9814)) #@59 Hash table holding associations between HOST, USER pairs. (defvar ange-ftp-user-hashtable (ange-ftp-make-hashtable) (#$ . 9927)) #@60 Mapping between a HOST, USER pair and a PASSWORD for them. (defvar ange-ftp-passwd-hashtable (ange-ftp-make-hashtable) (#$ . 10062)) #@68 Mapping between a HOST, USER pair and a ACCOUNT password for them. (defvar ange-ftp-account-hashtable (ange-ftp-make-hashtable) (#$ . 10201)) #@64 Hash table for storing directories and their respective files. (defvar ange-ftp-files-hashtable (ange-ftp-make-hashtable 97) (#$ . 10349)) #@39 Last set of args used by ange-ftp-ls. (defvar ange-ftp-ls-cache-lsargs nil (#$ . 10494)) #@34 Last file passed to ange-ftp-ls. (defvar ange-ftp-ls-cache-file nil (#$ . 10589)) #@40 Last result returned from ange-ftp-ls. (defvar ange-ftp-ls-cache-res nil (#$ . 10677)) (byte-code " \nB\nB!\nB!#\nB!0 \nB!=\n\nB!J \nB!W\f\nB!d \nB!q\nB!~\nB!\nB!\nB\nB\nB\nB\nB\nB\nB\nB#" [ange-ftp-make-hashtable ange-ftp-expand-dir-hashtable current-load-list "^5.0 \\([^: ]+\\):" ange-ftp-expand-dir-regexp boundp ange-ftp-hash-mark-unit nil ange-ftp-hash-mark-count ange-ftp-xfer-size ange-ftp-process-string ange-ftp-process-result-line ange-ftp-process-busy ange-ftp-process-result ange-ftp-process-multi-skip ange-ftp-process-msg ange-ftp-process-continue ange-ftp-last-percent ange-ftp-this-file ange-ftp-this-dir ange-ftp-this-user ange-ftp-this-host ange-ftp-this-msg ange-ftp-completion-ignored-pattern ange-ftp-trample-marker put ftp-error error-conditions (ftp-error file-error error)] 4) #@133 Display message in echo area, but indicate if truncated. Args are as in `message': a format string, plus arguments to be formatted. (defalias 'ange-ftp-message #[(fmt &rest args) "\n # !1GY,ZOP\"*" [apply format fmt args window-width minibuffer-window max msg noninteractive "> " 3 nil message "%s"] 4 (#$ . 11610)]) #@180 Abbreviate the file name FILE relative to the default-directory. If the optional parameter NEW is given and the non-directory parts match, only return the directory part of FILE. (defalias 'ange-ftp-abbreviate-filename #[(file &optional new) " Ž  !Q\"ɕSO 6! !6!<*" [match-data match-data ((store-match-data match-data)) default-directory string-match "^" regexp-quote "." file 0 nil new file-name-nondirectory file-name-directory "./"] 4 (#$ . 11971)]) #@51 For a given HOST, set or change the default USER. (defalias 'ange-ftp-set-user #[(host user) " \n #" [ange-ftp-put-hash-entry host user ange-ftp-user-hashtable] 4 (#$ . 12473) "sHost: \nsUser: "]) #@40 Given a HOST, return the default USER. (defalias 'ange-ftp-get-user #[(host) " \n \"1 ; * (\n\" \")* \n\f\")" [ange-ftp-parse-netrc ange-ftp-get-hash-entry host ange-ftp-user-hashtable user ange-ftp-default-user t enable-recursive-minibuffers read-string format "User for %s: " user-login-name ange-ftp-set-user] 5 (#$ . 12678)]) #@166 Read a password, echoing `.' for each character typed. End with RET, LFD, or ESC. DEL or C-h rubs out. C-u kills line. Optional DEFAULT is password to start with. (defalias 'ange-ftp-read-passwd #[(prompt &optional default) " ‰\nG\"# UoUoUoUCU]U]!PGVO! ," [default "" 0 t cursor-in-echo-area echo-keystrokes c pass message "%s%s" prompt make-string 46 read-char 13 10 27 21 8 127 char-to-string -1 ange-ftp-repaint-minibuffer] 7 (#$ . 13044)]) (defalias 'ange-ftp-generate-passwd-key '(macro . #[(host user) " F" [concat host "/" user] 4])) (defalias 'ange-ftp-lookup-passwd '(macro . #[(host user) "\n EBB" [ange-ftp-get-hash-entry ange-ftp-generate-passwd-key host user (ange-ftp-passwd-hashtable)] 4])) #@67 For a given HOST and USER, set or change the associated PASSWORD. (defalias 'ange-ftp-set-passwd #[(host user passwd) " Q\f #" [ange-ftp-put-hash-entry host "/" user passwd ange-ftp-passwd-hashtable] 4 (#$ . 13861) (list (read-string "Host: ") (read-string "User: ") (ange-ftp-read-passwd "Password: "))]) #@55 Given a USER, return a host we know the password for. (defalias 'ange-ftp-get-host-with-passwd #[(user) " " [ange-ftp-parse-netrc found-one (byte-code "\n\" Ŏ\"*ȇ" [ange-ftp-map-hashtable #[(host val) " Q\f\" \"" [ange-ftp-get-hash-entry host "/" user ange-ftp-passwd-hashtable throw found-one] 4] ange-ftp-user-hashtable match-data match-data ((store-match-data match-data)) #[(key value) "\n\"\"\nĔO\nĕO!! \")" [string-match "^[^/]*\\(/\\).*$" key 0 1 host user nil value throw found-one] 4] ange-ftp-passwd-hashtable nil] 3)] 2 (#$ . 14177)]) #@76 Return the password for specified HOST and USER, asking user if necessary. (defalias 'ange-ftp-get-passwd #[(host user) " \n\fQ \"p;\"\"\f\"\fȘ.\fɘ?\n?\n;<\n \f! ]\f\n\f % \fQ \"\"d\f\n#!\n\f#*" [ange-ftp-parse-netrc ange-ftp-get-hash-entry host "/" user ange-ftp-passwd-hashtable ange-ftp-default-user ange-ftp-default-password "anonymous" "ftp" ange-ftp-generate-anonymous-password user-mail-address ange-ftp-get-host-with-passwd other ange-ftp-read-passwd format "passwd for %s@%s (same as %s@%s): " "Password for %s@%s: " passwd ange-ftp-set-passwd] 8 (#$ . 14777)]) #@75 For a given HOST and USER, set or change the associated ACCOUNT password. (defalias 'ange-ftp-set-account #[(host user account) " Q\f #" [ange-ftp-put-hash-entry host "/" user account ange-ftp-account-hashtable] 4 (#$ . 15418) (list (read-string "Host: ") (read-string "User: ") (ange-ftp-read-passwd "Account password: "))]) #@48 Given a HOST and USER, return the FTP account. (defalias 'ange-ftp-get-account #[(host user) " \n\fQ \";\f" [ange-ftp-parse-netrc ange-ftp-get-hash-entry host "/" user ange-ftp-account-hashtable ange-ftp-default-user ange-ftp-default-account] 4 (#$ . 15754)]) #@73 Return the filename that FILE references, following all symbolic links. (defalias 'ange-ftp-chase-symlinks #[(file) " ! !  ! P) " [nil temp ange-ftp-real-file-symlink-p file file-name-absolute-p file-name-directory] 2 (#$ . 16041)]) (defalias 'ange-ftp-parse-netrc-token #[(token limit) " \n#1\nwg='u`\nwu `S{0`\nw `{)" [search-forward token limit t nil beg ", \n" 34 1 "^\"" "^, \n"] 4]) (defalias 'ange-ftp-parse-netrc-group #[nil "`!wwww#(Ȕ)d)É \n \f  \"\f \"  \"\n \" \f \f \"\f \n# \f  #b # \"  \"\n \"   \n\n   b." [looking-at "machine\\>" "^ \n" nil " \n" re-search-forward "machine\\>\\|default\\>" t 0 account password login machine end start ange-ftp-parse-netrc-token "machine" "login" "password" "account" ange-ftp-set-user ange-ftp-set-passwd ange-ftp-set-account search-forward "default" ange-ftp-default-user ange-ftp-default-password ange-ftp-default-account] 6]) (defalias 'ange-ftp-parse-netrc #[nil "!!\n!) 8\n? \f͎= 8 =t 8\"t!q\n!\n\n!!\"ebwml bp!)~\"! 8\n**" [nil attr file "/" default-directory ange-ftp-chase-symlinks ange-ftp-real-expand-file-name ange-ftp-netrc-filename ange-ftp-real-file-attributes 5 ange-ftp-netrc-modtime match-data match-data ((store-match-data match-data)) ange-ftp-disable-netrc-security-check 2 user-uid string-match ".r..------" 8 generate-new-buffer "*ftp-.netrc*" ange-ftp-real-insert-file-contents buffer-file-name file-name-directory normal-mode t mapcar funcall find-file-hooks " \n" ange-ftp-parse-netrc-group kill-buffer ange-ftp-message "%s either not owned by you or badly protected." sit-for 1] 4 nil nil]) (defalias 'ange-ftp-generate-root-prefixes #[nil " Î\"\n\" C+" [ange-ftp-parse-netrc match-data match-data ((store-match-data match-data)) nil res ange-ftp-map-hashtable #[(key value) "\n\"$\nĔO\nĕORC\nB\n*" [string-match "^[^/]*\\(/\\).*$" key 0 1 nil user host "@" ":" res] 4] ange-ftp-passwd-hashtable #[(host user) "PC\nB" [host ":" res] 2] ange-ftp-user-hashtable] 3]) #@50 Extract the Nth ftp file name component from NS. (defalias 'ange-ftp-ftp-name-component '(macro . #[(n ns name) " \fEDCBBEE" [let elt nth n ns if (match-beginning elt) substring name ((match-beginning elt) (match-end elt))] 7 (#$ . 18307)])) (byte-code "! B! BŇ" [boundp ange-ftp-ftp-name-arg "" current-load-list ange-ftp-ftp-name-res nil] 2) (defalias 'ange-ftp-ftp-name #[(name) " \n Ŏ@\"qA@ .  O)\nA@ D  O) 8 Z  O) GUj\n! \n E,*" [name ange-ftp-ftp-name-arg ange-ftp-ftp-name-res match-data match-data ((store-match-data match-data)) string-match ange-ftp-name-format ns elt host user 2 0 ange-ftp-get-user] 4]) (defalias 'ange-ftp-replace-name-component #[(fullname name) " Ž\f@ \"'\fA8 O\n OQ**" [match-data match-data ((store-match-data match-data)) string-match ange-ftp-name-format fullname ns 2 elt 0 name nil] 5]) #@74 Clear any existing minibuffer message; let the minibuffer contents show. (defalias 'ange-ftp-repaint-minibuffer #[nil "!" [message nil] 2 (#$ . 19263)]) (defalias 'ange-ftp-ftp-process-buffer #[(host user) " İ" ["*ftp " user "@" host "*"] 5]) (defalias 'ange-ftp-error #[(host user msg) " \"!!db !*\"C\"" [selected-window t pop-up-windows cur pop-to-buffer get-buffer-create ange-ftp-ftp-process-buffer host user select-window signal ftp-error format "FTP Error: %s" msg] 5]) #@69 Set correct modes for the current buffer if visiting a remote file. (defalias 'ange-ftp-set-buffer-mode #[nil ";! !" [buffer-file-name ange-ftp-ftp-name auto-save-mode ange-ftp-auto-save] 2 (#$ . 19776)]) #@154 Kill the FTP process associated with BUFFER. If the BUFFER's visited filename or default-directory is an ftp filename then kill the related ftp process. (defalias 'ange-ftp-kill-ftp-process #[(buffer) "p \f\n1 !!0@A@\"!*))" [buffer buffer-file-name default-directory file ange-ftp-ftp-name expand-file-name parsed user host kill-buffer ange-ftp-ftp-process-buffer] 5 (#$ . 19999) "bKill FTP process associated with buffer: "]) #@66 Quote any characters in STRING that may confuse the ftp process. (defalias 'ange-ftp-quote-string #[(string) "\f\"\"" [apply concat mapcar #[(char) "XVUU\"!" [char 32 126 34 92 vector] 3] string] 5 (#$ . 20466)]) (defalias 'ange-ftp-barf-if-not-directory #[(directory) " ! !Ƃ E\"" [file-directory-p directory signal file-error "Opening directory" file-exists-p "not a directory" "no such file or directory"] 5]) #@132 Look at the given LINE from the ftp process PROC. Try to categorize it into one of four categories: good, skip, fatal, or unknown. (defalias 'ange-ftp-process-handle-line #[(line proc) " \n\"\nŔŕO!\"\n\" ɇ\n\n\"3\f \n\n\"@ɉ\n\"U!\f\n\\ɇ\f\n" [string-match ange-ftp-xfer-size-msgs line ash string-to-int 1 -10 ange-ftp-xfer-size ange-ftp-skip-msgs t ange-ftp-good-msgs nil ange-ftp-process-busy ange-ftp-process-result ange-ftp-process-result-line ange-ftp-multi-msgs ange-ftp-process-multi-skip ange-ftp-fatal-msgs delete-process proc] 5 (#$ . 20933)]) #@49 Set the size of the next FTP transfer in bytes. (defalias 'ange-ftp-set-xfer-size #[(host user bytes) " \n\" ! q\" )))" [ange-ftp-get-process host user proc process-buffer buf ash bytes -10 ange-ftp-xfer-size] 4 (#$ . 21558)]) #@57 Remove hash marks from STRING and display count so far. (defalias 'ange-ftp-process-handle-hash #[(str) "OOPZ \\\ff f =f!f\nf\f _\"UI\f#e_=d\f#))" [str 0 nil ange-ftp-hash-mark-count ange-ftp-process-msg ange-ftp-process-verbose selected-window minibuffer-window boundp search-message cursor-in-echo-area ash ange-ftp-hash-mark-unit -6 kbytes ange-ftp-xfer-size ange-ftp-message "%s...%dk" 100 percent ange-ftp-last-percent "%s...%d%%"] 5 (#$ . 21812)]) (defalias 'ange-ftp-call-cont #[(cont result line) "<@=@ \fA$ \f\"" [cont lambda apply result line] 5]) (defalias 'ange-ftp-process-filter #[(proc str) " !p !Ŏ !q++\n\"+\n!\n \n\" !{\nR\nP\"R \"\"ӉOӕO\"ӕOo \")R?\"   \"#))*" [process-buffer proc old-buffer buffer buffer-name ((set-buffer old-buffer)) ange-ftp-hash-mark-unit ange-ftp-process-busy string-match "^#+$" str ange-ftp-process-handle-hash comint-output-filter comint-last-output-start process-mark ange-ftp-process-string "Password: *$" send-string "\n" 0 line nil "^ftp> *" ange-ftp-process-handle-line ange-ftp-xfer-size ange-ftp-process-msg ange-ftp-process-verbose ange-ftp-process-result ange-ftp-message "%s...done" ange-ftp-repaint-minibuffer ange-ftp-process-continue cont ange-ftp-call-cont ange-ftp-process-result-line] 4]) #@65 When ftp process changes state, nuke all file-entries in cache. (defalias 'ange-ftp-process-sentinel #[(proc str) " !\n\"#\nŔŕO\nƔƕO\"*)ʉ " [process-name proc name string-match "\\*ftp \\([^@]+\\)@\\([^*]+\\)*" 1 2 host user ange-ftp-wipe-file-entries nil ange-ftp-ls-cache-file] 4 (#$ . 23303)]) #@71 Returns whether to access this host via a normal (non-smart) gateway. (defalias 'ange-ftp-use-gateway-p #[(host) "? Î \"*?" [ange-ftp-smart-gateway match-data match-data ((store-match-data match-data)) string-match ange-ftp-local-host-regexp host] 3 (#$ . 23629)]) #@58 Returns whether to access this host via a smart gateway. (defalias 'ange-ftp-use-smart-gateway-p #[(host) " Î \"*?" [ange-ftp-smart-gateway match-data match-data ((store-match-data match-data)) string-match ange-ftp-local-host-regexp host] 3 (#$ . 23911)]) (byte-code "! B!! B!# B‡" [boundp ange-ftp-tmp-name-files nil current-load-list ange-ftp-tmp-name-hashtable ange-ftp-make-hashtable 10 ange-ftp-pid] 2) #@55 Half-hearted attempt to get the current process's id. (defalias 'ange-ftp-get-pid #[nil "!O" [make-temp-name "" 1 nil ange-ftp-pid] 3 (#$ . 24366)]) #@50 This routine will return the name of a new file. (defalias 'ange-ftp-make-tmp-name #[(host) " !\n\n     \f\f $  \"\f>= !R T V\fP \fB -" [ange-ftp-use-gateway-p host ange-ftp-gateway-tmp-name-template ange-ftp-tmp-name-template template ange-ftp-pid ange-ftp-get-pid pid 97 start nil file entry format "%s%c%s" intern ange-ftp-tmp-name-hashtable ange-ftp-tmp-name-files ange-ftp-real-file-exists-p 122 "X"] 6 (#$ . 24528)]) (defalias 'ange-ftp-del-tmp-name #[(temp) "\n \"\f\"Ǐ" [delq intern temp ange-ftp-tmp-name-hashtable ange-ftp-tmp-name-files nil (ange-ftp-real-delete-file temp) ((error))] 4]) (byte-code "! B! BŇ" [boundp ange-ftp-gwp-running t current-load-list ange-ftp-gwp-status nil] 2) (defalias 'ange-ftp-gwp-sentinel #[(proc str) "" [nil ange-ftp-gwp-running] 2]) (defalias 'ange-ftp-gwp-filter #[(proc str) " \n\" !{\n\"   !)P\"\n\"5   !\"P\"\n\"F !щ\n\"Uȉ" [comint-output-filter proc str comint-last-output-start process-mark string-match "login: *$" send-string t ange-ftp-default-user ange-ftp-get-user ange-ftp-gateway-host "\n" "Password: *$" ange-ftp-get-passwd ange-ftp-gateway-fatal-msgs delete-process nil ange-ftp-gwp-running ange-ftp-gateway-prompt-pattern ange-ftp-gwp-status] 6]) #@58 Login to the gateway machine and fire up an ftp process. (defalias 'ange-ftp-gwp-start #[(host user name args) " ! $) # !\"\"!q !`֓) \"U!Hb# \"\"\"!t# Q\"+" [ange-ftp-get-user ange-ftp-gateway-host gw-user t process-connection-type start-process name ange-ftp-gateway-program proc mapconcat identity args " " ftp process-kill-without-query set-process-sentinel ange-ftp-gwp-sentinel set-process-filter ange-ftp-gwp-filter process-buffer internal-ange-ftp-mode process-mark nil ange-ftp-gwp-running ange-ftp-gwp-status ange-ftp-message "Connecting to gateway %s..." accept-process-output ange-ftp-error host user "unable to login to gateway" "Connecting to gateway %s...done" process-send-string ange-ftp-gateway-setup-term-command "unable to set terminal modes on gateway" "exec " "\n"] 5 (#$ . 25883)]) #@622 Low-level routine to send the given ftp CMD to the ftp PROCESS. MSG is an optional message to output before and after the command. If CONT is non-NIL then it is either a function or a list of function and some arguments. The function will be called when the ftp command has completed. If CONT is NIL then this routine will return ( RESULT . LINE ) where RESULT is whether the command was successful, and LINE is the line from the FTP process that caused the command to complete. If NOWAIT is given then the routine will return immediately the command has been queued with no result. CONT will still be called, however. (defalias 'ange-ftp-raw-send-cmd #[(proc cmd &optional msg cont nowait) " !> !q\fʼn *\n  PQQ\"db`œ ߎ\"uӉOyc*#`œ \" !`œ&?\fʼn !*?  B)" [process-status proc (run open) process-buffer ange-ftp-process-busy nil inhibit-quit quit-flag accept-process-output "" ange-ftp-process-string ange-ftp-process-result-line t ange-ftp-process-result ange-ftp-process-multi-skip msg ange-ftp-process-msg cont ange-ftp-process-continue 0 ange-ftp-hash-mark-count -1 ange-ftp-last-percent cmd "\n" ange-ftp-process-verbose ange-ftp-message "%s..." comint-last-input-start match-data match-data ((store-match-data match-data)) string-match "^user \"[^\"]*\"" " Turtle Power!\n" comint-last-input-end send-string process-mark nowait] 3 (#$ . 26820)]) #@67 Attempt to resolve the given HOSTNAME using nslookup if possible. (defalias 'ange-ftp-nslookup-host #[(host) "X\n!\n lj$) \n\n!\n!q\n!>=\n!,eb#OӔӕ{ p!) +" [ange-ftp-nslookup-program file-accessible-directory-p default-directory exec-directory t process-connection-type start-process " *nslookup*" host res proc process-kill-without-query process-buffer process-status (run open) accept-process-output re-search-forward "Name:.*\nAddress: *\\(.*\\)$" nil 1 kill-buffer] 6 (#$ . 28302) "sHost: "]) #@192 Spawn a new ftp process ready to connect to machine HOST and give it NAME. If HOST is only ftp-able through a gateway machine then spawn a shell on the gateway machine to do the ftp instead. (defalias 'ange-ftp-start-process #[(host user name) " ! ?\f !\n C\n\"  !68\njW  $t D \"$t $)!!q )\"\"!." [ange-ftp-use-gateway-p host use-gateway ange-ftp-gateway-host ange-ftp-use-smart-gateway-p use-smart-ftp ange-ftp-gateway-ftp-program-name ange-ftp-ftp-program-name ftp-prog append ange-ftp-ftp-program-args args nil file-name-handler-alist file-accessible-directory-p default-directory exec-directory proc t process-connection-type ange-ftp-gateway-program-interactive ange-ftp-gwp-start user name apply start-process ange-ftp-gateway-program process-kill-without-query process-buffer internal-ange-ftp-mode set-process-sentinel ange-ftp-process-sentinel set-process-filter ange-ftp-process-filter accept-process-output] 7 (#$ . 28861)]) #@70 Major mode for interacting with the FTP process. \{comint-mode-map} (defalias 'internal-ange-ftp-mode #[nil " p!db!`ȓ!\n!!!!!!!!!!!!!)" [comint-mode internal-ange-ftp-mode major-mode "Internal Ange-ftp" mode-name get-buffer-process proc process-mark nil make-local-variable ange-ftp-process-string "" ange-ftp-process-busy ange-ftp-process-result ange-ftp-process-msg ange-ftp-process-multi-skip ange-ftp-process-result-line ange-ftp-process-continue ange-ftp-hash-mark-count ange-ftp-binary-hash-mark-size ange-ftp-ascii-hash-mark-size ange-ftp-hash-mark-unit ange-ftp-xfer-size ange-ftp-last-percent 0 "^ftp> " comint-prompt-regexp paragraph-start] 3 (#$ . 29916) nil]) #@187 Connect to the FTP-server on HOST as USER using PASSWORD and ACCOUNT. PROC is the FTP-client's process. This routine uses the smart-gateway host specified in ``ange-ftp-gateway-host''. (defalias 'ange-ftp-smart-login #[(host user pass account proc) " !# ## @$  AP#  !% ## @] # #  AP#)" [ange-ftp-raw-send-cmd proc format "open %s %s" ange-ftp-nslookup-host ange-ftp-gateway-host ange-ftp-smart-gateway-port "Opening FTP connection to %s via %s" host result ange-ftp-error user "OPEN request failed: " "user \"%s\"@%s %s %s" pass account "Logging in as user %s@%s" ange-ftp-set-passwd nil ange-ftp-set-account "USER request failed: "] 9 (#$ . 30673)]) #@110 Connect to the FTP-server on HOST as USER using PASSWORD and ACCOUNT. PROC is the process to the FTP-client. (defalias 'ange-ftp-normal-login #[(host user pass account proc) " !\" \"#@  AP#  \f $ ##@P  #  #  AP#)" [ange-ftp-raw-send-cmd proc format "open %s" ange-ftp-nslookup-host host "Opening FTP connection to %s" result ange-ftp-error user "OPEN request failed: " "user \"%s\" %s %s" pass account "Logging in as user %s@%s" ange-ftp-set-passwd nil ange-ftp-set-account "USER request failed: "] 8 (#$ . 31393)]) #@69 *Regexp matching the FTP client's output upon doing a HASH command. (defvar ange-ftp-hash-mark-msgs "[hH]ash mark [^0-9]*\\([0-9]+\\)" (#$ . -31963)) (defalias 'ange-ftp-guess-hash-mark-size #[(proc) "H\n!q\n\"@ A  ʎ\f\"FΔΕO!\"E)." [ange-ftp-send-hash process-buffer proc ange-ftp-raw-send-cmd "hash" status result line match-data match-data ((store-match-data match-data)) string-match ange-ftp-hash-mark-msgs string-to-int 1 size ange-ftp-ascii-hash-mark-size ash -4 ange-ftp-hash-mark-unit ange-ftp-binary-hash-mark-size] 5]) #@99 Return an FTP subprocess connected to HOST and logged in as USER. Create a new process if needed. (defalias 'ange-ftp-get-process #[(host user) " \n\" ! !> ` \n\"! \n\"! \f \n # !GG \n\f %Q \n\f % ! \n\"!* *" [ange-ftp-ftp-process-buffer host user name get-process proc process-status (run open) ange-ftp-quote-string ange-ftp-get-passwd ange-ftp-get-account account pass ange-ftp-start-process ange-ftp-use-smart-gateway-p ange-ftp-gateway-host ange-ftp-smart-login ange-ftp-normal-login ange-ftp-guess-hash-mark-size ange-ftp-guess-host-type run-hooks ange-ftp-process-startup-hook] 7 (#$ . 32548)]) (byte-code "! B! B‡" [boundp ange-ftp-host-cache nil current-load-list ange-ftp-host-type-cache] 2) #@157 Return a symbol which represents the type of the HOST given. If the optional argument USER is given, attempts to guess the host-type by logging in as USER. (defalias 'ange-ftp-host-type #[(host &optional user) " =\n  \" =\n!'ƂX!7!7ɂX!G!G˂X!W!W͂XΉ" [host ange-ftp-host-cache ange-ftp-host-type-cache user ange-ftp-get-process ange-ftp-dumb-unix-host dumb-unix fboundp ange-ftp-vms-host vms ange-ftp-mts-host mts ange-ftp-cms-host cms unix] 3 (#$ . 33326)]) #@213 Alist saying how to convert file name to the host's syntax. Association list of ( TYPE . FUNC ) pairs, where FUNC is a routine which can change a UNIX file name into a name more suitable for a host of type TYPE. (defvar ange-ftp-fix-name-func-alist nil (#$ . 33848)) #@231 Alist saying how to convert directory name to the host's syntax. Association list of ( TYPE . FUNC ) pairs, where FUNC is a routine which can change UNIX directory name into a directory name more suitable for a host of type TYPE. (defvar ange-ftp-fix-dir-name-func-alist nil (#$ . 34122)) #@67 List of host types that can't take UNIX ls-style listing options. (defvar ange-ftp-dumb-host-types (quote (dumb-unix)) (#$ . 34417)) #@245 Find an ftp process connected to HOST logged in as USER and send it CMD. MSG is an optional status message to be output before and after issuing the command. See the documentation for ange-ftp-raw-send-cmd for a description of CONT and NOWAIT. (defalias 'ange-ftp-send-cmd #[(host user cmd &optional msg cont nowait) "@A@ \n ĉ \n \f \f8\n \" =|A>\f!\f8=e\f\"e\"e\fP\f> \f#\fA > \f!\f > ! = \f!\f ! ! \f\fPPQĉ#$\n \" \n  ())%)?(?$#B. " [cmd user host msg nil fix-name-func host-type cmd3 cmd2 ange-ftp-this-msg ange-ftp-this-host ange-ftp-this-user cmd1 cmd0 2 ange-ftp-host-type dir ange-ftp-fix-dir-name-func-alist identity 3 unix string-match "/$" "R" "." ange-ftp-dumb-host-types ls format "\"%s %s\"" ange-ftp-fix-name-func-alist (get delete mkdir rmdir cd) (append put chmod) rename symbol-name " " afsc-line afsc-result ange-ftp-raw-send-cmd ange-ftp-get-process #[(result line host user cmd msg cont nowait) "    # \"\n D %" [cont result afsc-result line afsc-line ange-ftp-call-cont ange-ftp-raw-send-cmd ange-ftp-get-process host user cmd msg #[(result line cont) "   #" [cont result afsc-result line afsc-line ange-ftp-call-cont] 4] nowait] 6] cont nowait] 12 (#$ . 34557)]) (byte-code "P B B B‡" ["^[-A-Z0-9$*][-A-Z0-9$*]?[-A-Z0-9$*]?[-A-Z0-9$*]?[-A-Z0-9$*]?" "[-A-Z0-9$*]?[-A-Z0-9$*]?[-A-Z0-9$*]?\\.[0-9][0-9][0-9A-Z]$" ange-ftp-cms-name-template current-load-list "^[-A-Z0-9_$]+:\\[[-A-Z0-9_$]+\\(\\.[-A-Z0-9_$]+\\)*\\]$" ange-ftp-vms-name-template "^[A-Z0-9._][A-Z0-9._][A-Z0-9._][A-Z0-9._]:$" ange-ftp-mts-name-template] 2) #@94 Guess at the the host type of HOST. Works by doing a pwd and examining the directory syntax. (defalias 'ange-ftp-guess-host-type #[(host user) " ! R=  ʎ \"\f@  G!!\fA\" !  \"] !  \"s !   \" !   !\"#A \" *  &#-= &\"? \"@  P&#!!)*" [ange-ftp-host-type host "/" user "/~" key host-type unix match-data match-data ((store-match-data match-data)) ange-ftp-get-pwd result dir nil fix-name-func message "Warning! Unable to get home directory" sit-for 1 string-match "^450 No current working directory defined$" ange-ftp-add-cms-host ange-ftp-host-cache cms ange-ftp-host-type-cache ange-ftp-vms-name-template ange-ftp-add-vms-host vms ange-ftp-mts-name-template ange-ftp-add-mts-host mts ange-ftp-cms-name-template ange-ftp-this-host ange-ftp-this-user ange-ftp-fix-name-func-alist reverse ange-ftp-put-hash-entry ange-ftp-expand-dir-hashtable ange-ftp-hash-entry-exists-p] 6 (#$ . 36321)]) (defalias 'ange-ftp-dumb-unix-host #[(host) " Î \"*" [ange-ftp-dumb-unix-host-regexp match-data match-data ((store-match-data match-data)) string-match host] 3]) #@68 Interactively adds a given HOST to ange-ftp-dumb-unix-host-regexp. (defalias 'ange-ftp-add-dumb-unix-host #[(host) " !? !  lj" [ange-ftp-dumb-unix-host host "^" regexp-quote "$" ange-ftp-dumb-unix-host-regexp "\\|" nil ange-ftp-host-cache] 5 (#$ . 37538) (list (read-string "Host: " (let ((name (or (buffer-file-name) default-directory))) (and name (car (ange-ftp-ftp-name name))))))]) #@205 Alist saying how to parse directory listings for certain OS types. Association list of ( TYPE . FUNC ) pairs. The FUNC is a routine which can parse the output from a DIR listing for a host of type TYPE. (defvar ange-ftp-parse-list-func-alist nil (#$ . 37948)) #@244 Return the output of an `DIR' or `ls' command done over ftp. FILE is the full name of the remote file, LSARGS is any args to pass to the `ls' command, and PARSE specifies that the output should be parsed and stored away in the internal cache. (defalias 'ange-ftp-ls #[(file lsargs parse &optional no-error wildcard) " !\n!'\f@\fA@\f8! \n! \" > ՘J #! i idi\" !  !# F F \n!\"$@(!q !!-!!! \"#0\n 2A !\"  )!5?! AP#).\n*!*" [ange-ftp-expand-file-name file ange-ftp-this-file ange-ftp-ftp-name parsed host user ange-ftp-quote-string 2 name directory-file-name key ange-ftp-host-type host-type ange-ftp-dumb-host-types dumb nil result temp lscmd parse-func "" ange-ftp-real-file-name-as-directory ange-ftp-expand-dir "~" ange-ftp-ls-cache-file lsargs ange-ftp-ls-cache-lsargs ange-ftp-ls-cache-res ange-ftp-make-tmp-name wildcard ange-ftp-cd file-name-directory dir ((ange-ftp-del-tmp-name temp)) ange-ftp-send-cmd format "Listing %s" ange-ftp-abbreviate-filename get-buffer-create ange-ftp-data-buffer-name erase-buffer ange-ftp-real-file-readable-p ange-ftp-real-insert-file-contents sleep-for ange-ftp-retry-time ange-ftp-error "list data file %s not readable" parse ange-ftp-set-files ange-ftp-parse-list-func-alist ange-ftp-parse-dired-listing buffer-string no-error "DIR failed: " error "Should never happen. Please report. Bug ref. no.: 1"] 9 (#$ . 38216)]) (byte-code "P B‡" [" \\(Jan\\|Feb\\|Mar\\|Apr\\|May\\|Jun\\|Jul\\|Aug\\|Sep\\|Oct" "\\|Nov\\|Dec\\) +[0-3]?[0-9] " ange-ftp-date-regexp current-load-list] 2) #@244 Alist saying how to add file entries on certain OS types. Association list of pairs ( TYPE . FUNC ), where FUNC is a function to be used to add a file entry for the OS TYPE. The main reason for this alist is to deal with file versions in VMS. (defvar ange-ftp-add-file-entry-alist nil (#$ . 39958)) #@243 Alist saying how to delete files on certain OS types. Association list of pairs ( TYPE . FUNC ), where FUNC is a function to be used to delete a file entry for the OS TYPE. The main reason for this alist is to deal with file versions in VMS. (defvar ange-ftp-delete-file-entry-alist nil (#$ . 40264)) #@63 Add a file entry for file NAME, if its directory info exists. (defalias 'ange-ftp-add-file-entry #[(name &optional dir-p) "\n!@! A \n \"Ɖ" [ange-ftp-host-type ange-ftp-ftp-name name ange-ftp-add-file-entry-alist ange-ftp-internal-add-file-entry dir-p nil ange-ftp-ls-cache-file] 3 (#$ . 40571)]) #@68 Delete the file entry for file NAME, if its directory info exists. (defalias 'ange-ftp-delete-file-entry #[(name &optional dir-p) "\n!@! A \n \"Ɖ" [ange-ftp-host-type ange-ftp-ftp-name name ange-ftp-delete-file-entry-alist ange-ftp-internal-delete-file-entry dir-p nil ange-ftp-ls-cache-file] 3 (#$ . 40884)]) (defalias 'ange-ftp-parse-filename '(macro . #[nil "" [(let ((eol (progn (end-of-line) (point)))) (beginning-of-line) (if (re-search-forward ange-ftp-date-regexp eol t) (progn (skip-chars-forward " ") (skip-chars-forward "^ " eol) (skip-chars-forward " " eol) (buffer-substring (point) eol))))] 1])) (defalias 'ange-ftp-ls-parser '(macro . #[nil "" [(let ((tbl (ange-ftp-make-hashtable)) (used-F (and (stringp switches) (string-match "F" switches))) file-type symlink directory file) (while (setq file (ange-ftp-parse-filename)) (beginning-of-line) (skip-chars-forward " 0-9") (setq file-type (following-char) directory (eq file-type 100)) (if (eq file-type 108) (if (string-match " -> " file) (setq symlink (substring file (match-end 0)) file (substring file 0 (match-beginning 0))) (setq symlink "")) (setq symlink nil)) (if (and used-F (not (string-equal file "")) (looking-at ".[-r][-w]\\([^ ]\\)[-r][-w]\\([^ ]\\)[-r][-w]\\([^ ]\\)")) (let ((socket (eq file-type 115)) (executable (and (not symlink) (string-match "[xst]" (concat (buffer-substring (match-beginning 1) (match-end 1)) (buffer-substring (match-beginning 2) (match-end 2)) (buffer-substring (match-beginning 3) (match-end 3))))))) (if (or (and symlink (string-match "@$" file)) (and directory (string-match "/$" file)) (and executable (string-match "*$" file)) (and socket (string-match "=$" file))) (setq file (substring file 0 -1))))) (ange-ftp-put-hash-entry file (or symlink directory) tbl) (forward-line 1)) (ange-ftp-put-hash-entry "." t tbl) (ange-ftp-put-hash-entry ".." t tbl) tbl)] 1])) #@164 Regexp matching directories which are listed in dl format. This regexp should not be anchored with a trailing `$', because it should match subdirectories as well. (defvar ange-ftp-dl-dir-regexp nil (#$ . 42782)) #@53 Interactively adds a DIR to ange-ftp-dl-dir-regexp. (defalias 'ange-ftp-add-dl-dir #[(dir) "\n\"?\n!R" [ange-ftp-dl-dir-regexp string-match dir "^" regexp-quote "\\|"] 4 (#$ . 43000) (list (read-string "Directory: " (let ((name (or (buffer-file-name) default-directory))) (and name (ange-ftp-ftp-name name) (file-name-directory name)))))]) (defalias 'ange-ftp-dl-parser '(macro . #[nil "" [(let ((tbl (ange-ftp-make-hashtable))) (while (not (eobp)) (ange-ftp-put-hash-entry (buffer-substring (point) (progn (skip-chars-forward "^ /\n") (point))) (eq (following-char) 47) tbl) (forward-line 1)) (ange-ftp-put-hash-entry "." t tbl) (ange-ftp-put-hash-entry ".." t tbl) tbl)] 1])) (defalias 'ange-ftp-parse-dired-listing #[(&optional switches) " Ž!0yly ;\"\"ʉ \f `y#Wwww`{) ywg=\f= \" ҕO  ҉O    ܘ!= ?Ŕŕ{{{Q\"\"#  \"\f \"\" \"# \" O *  \f#y2##.!:ʂmBʂ#iy ;[\"ʉ \f `y#www`{) Tywg=\f= \" ҕO  ҉O   @ ܘ@!@= ?Ŕŕ{{{Q\"\"#  \"8\f \"8\"+ \"8#? \"? O *  J\f#yk##.#/!y m`w`{g=#y}##)*" [match-data match-data ((store-match-data match-data)) looking-at "^total [0-9]+$" 1 ange-ftp-make-hashtable switches string-match "F" nil file directory symlink file-type used-F tbl eol 0 re-search-forward ange-ftp-date-regexp t " " "^ " " 0-9" 100 108 " -> " "" ".[-r][-w]\\([^ ]\\)[-r][-w]\\([^ ]\\)[-r][-w]\\([^ ]\\)" 115 "[xst]" 2 3 executable socket "@$" "/$" "*$" "=$" -1 ange-ftp-put-hash-entry "." ".." "[^\n]+\\( not found\\|: Not a directory\\)\n\\'" "^[^ \n ]+ +\\([0-9]+\\|-\\|=\\) " ange-ftp-add-dl-dir ange-ftp-this-file "^ /\n" 47] 8]) #@70 For a given DIRECTORY, set or change the associated FILES hashtable. (defalias 'ange-ftp-set-files #[(directory files) " !\f#" [files ange-ftp-put-hash-entry file-name-as-directory directory ange-ftp-files-hashtable] 4 (#$ . 45037)]) #@184 Given a given DIRECTORY, return a hashtable of file entries. This will give an error or return nil, depending on the value of NO-ERROR, if a listing for DIRECTORY cannot be obtained. (defalias 'ange-ftp-get-files #[(directory &optional no-error) " ! \"q Ǝ !; ;; \"; \"; \"; e!d;d\"d\"d\"de$p \"*" [file-name-as-directory directory ange-ftp-get-hash-entry ange-ftp-files-hashtable match-data match-data ((store-match-data match-data)) ange-ftp-ls boundp dired-actual-switches string-match "[aA]" "l" "R" dired-listing-switches "-al" t no-error] 5 (#$ . 45286)]) (defalias 'ange-ftp-get-file-part '(macro . #[(name) " DDCBB" [let file file-name-nondirectory name ((if (string-equal file "") "." file))] 4])) (defalias 'ange-ftp-allow-child-lookup '(macro . #[(dir file) " D DBBBBD" [not let* efile file edir dir ((parsed (ange-ftp-ftp-name edir)) (host-type (ange-ftp-host-type (car parsed)))) ((or (and (eq host-type (quote vms)) (string-match "\\." efile)) (and (memq host-type (quote (mts cms))) (not (string-equal "/" (nth 2 parsed))))))] 5])) #@58 Given NAME, return whether there is a file entry for it. (defalias 'ange-ftp-file-entry-p #[(name) " ! ! \" !ɘʂ)0\"}\f   !@!=R\f\"`>`8ט?,v \"v\"} !\"," [directory-file-name name file-name-directory dir ange-ftp-get-hash-entry ange-ftp-files-hashtable ent file-name-nondirectory file "" "." ange-ftp-hash-entry-exists-p efile edir ange-ftp-ftp-name parsed ange-ftp-host-type host-type vms string-match "\\." (mts cms) 2 "/" ange-ftp-get-files t] 5 (#$ . 46424)]) #@195 Given NAME, return the given file entry. The entry will be either t for a directory, nil for a normal file, or a string for a symlink. If the file isn't in the hashtable, this also returns nil. (defalias 'ange-ftp-get-file-entry #[(name) " ! ! \" !ɘʂ)0\"} \f\f!@!=R \"`>`8֘?,v \"v\"} !\"," [directory-file-name name file-name-directory dir ange-ftp-get-hash-entry ange-ftp-files-hashtable ent file-name-nondirectory file "" "." efile edir ange-ftp-ftp-name parsed ange-ftp-host-type host-type vms string-match "\\." (mts cms) 2 "/" ange-ftp-get-files t] 5 (#$ . 46978)]) (defalias 'ange-ftp-internal-delete-file-entry #[(name &optional dir-p) "\n!\n\f\"\n!\n!\f\"3\n!\n˘-̂/\n)\")" [dir-p file-name-as-directory name ange-ftp-del-hash-entry ange-ftp-files-hashtable directory-file-name ange-ftp-get-hash-entry file-name-directory files file-name-nondirectory file "" "."] 4]) (defalias 'ange-ftp-internal-add-file-entry #[(name &optional dir-p) "\n!\n! \"+\n! ʘ$˂& )#)" [dir-p directory-file-name name ange-ftp-get-hash-entry file-name-directory ange-ftp-files-hashtable files ange-ftp-put-hash-entry file-name-nondirectory file "" "."] 5]) #@77 Get rid of entry for HOST, USER pair from file entry information hashtable. (defalias 'ange-ftp-wipe-file-entries #[(host user) " G! \"\n)" [ange-ftp-make-hashtable ange-ftp-files-hashtable new-tbl ange-ftp-map-hashtable #[(key val) " !$\n@\nA@ \f #  #*)" [ange-ftp-ftp-name key parsed u h host user ange-ftp-put-hash-entry val new-tbl] 5]] 3 (#$ . 48267)]) #@74 Tell the ftp process for the given HOST & USER to switch to binary mode. (defalias 'ange-ftp-set-binary-mode #[(host user) " \n#@ \n\fAP#- \n\"!q , \"\f))" [ange-ftp-send-cmd host user (type "binary") result ange-ftp-error "BINARY failed: " process-buffer ange-ftp-get-process ange-ftp-binary-hash-mark-size ash -4 ange-ftp-hash-mark-unit] 6 (#$ . 48660)]) #@73 Tell the ftp process for the given HOST & USER to switch to ascii mode. (defalias 'ange-ftp-set-ascii-mode #[(host user) " \n#@ \n\fAP#- \n\"!q , \"\f))" [ange-ftp-send-cmd host user (type "ascii") result ange-ftp-error "ASCII failed: " process-buffer ange-ftp-get-process ange-ftp-ascii-hash-mark-size ash -4 ange-ftp-hash-mark-unit] 6 (#$ . 49047)]) (defalias 'ange-ftp-cd #[(host user dir) " \n\fD$@ \nAP#)" [ange-ftp-send-cmd host user cd dir "Doing CD" result ange-ftp-error "CD failed: "] 6]) #@222 Attempts to get the current working directory for the given HOST/USER pair. Returns ( DIR . LINE ) where DIR is either the directory or NIL if not found, and LINE is the relevant success or fail line from the FTP-client. (defalias 'ange-ftp-get-pwd #[(host user) " \n$A @3 \nˎ\")\"2ϔϕO*+B" [ange-ftp-send-cmd host user (pwd) "Getting PWD" result line nil dir match-data match-data ((store-match-data match-data)) string-match "\"\\([^\"]*\\)\"" " \\([^ ]+\\) " 1] 6 (#$ . 49591)]) #@147 Return the result of doing a PWD in the current FTP session. Use the connection to machine HOST logged in as user USER and cd'd to directory DIR. (defalias 'ange-ftp-expand-dir #[(host user dir) " \n\"\fA \n\n\" \n̘a\n͘a =aQ \nE\"$A\"^ڔڕO + ۘw \n\"@ \n#ߎ \n# \n\"@ * \n !\"  \"  \n#* ," [ange-ftp-host-type host user host-type ange-ftp-fix-name-func-alist fix-name-func "/" dir key ange-ftp-get-hash-entry ange-ftp-expand-dir-hashtable res "anonymous" "ftp" unix ange-ftp-expand-dir-regexp "\\|" ange-ftp-good-msgs ange-ftp-send-cmd get "/dev/null" format "expanding %s" result line string-match 1 "~" ange-ftp-get-pwd ange-ftp-expand-dir home ((ange-ftp-cd host user home)) ange-ftp-cd ange-ftp-this-host ange-ftp-this-user reverse ange-ftp-put-hash-entry] 8 (#$ . 50117)]) #@48 Take a string and short-circuit //, /. and /.. (defalias 'ange-ftp-canonize-filename #[(n) "\n\"\nÕSO\n!@A@8 \n\"\"nÔÕO ÕO\n  #aPj O\"+\n #!P!)\"!\"O\n\"+\n!=\n!\n!\n!\")" [string-match "[^:]+//" n 0 nil ange-ftp-ftp-name parsed 2 name user host "^/" "^~[^/]*" tilda rest ange-ftp-expand-dir dir error "User \"%s\" is not known" 1 "~" ange-ftp-real-file-name-as-directory "Unable to obtain CWD" "^//" ange-ftp-real-expand-file-name ange-ftp-replace-name-component string-to-char 47 ange-ftp-real-file-name-nondirectory ange-ftp-real-file-name-directory] 6 (#$ . 51011)]) #@25 Documented as original. (defalias 'ange-ftp-expand-file-name #[(name &optional default) " Ž\f!=1\f\"\fȕSO.\f\"1\fȕSO \f!=?\f!m\f!=M\f!m\fGU`\\!mi!\fP!*" [match-data match-data ((store-match-data match-data)) string-to-char name 47 string-match "[^:]+//" 0 nil "/~" 126 ange-ftp-real-expand-file-name ange-ftp-canonize-filename default default-directory file-name-as-directory] 3 (#$ . 51731)]) #@120 Association list of ( TYPE . FUNC ) pairs. FUNC converts a filename to a directory name for the operating system TYPE. (defvar ange-ftp-file-name-as-directory-alist nil (#$ . 52195)) #@25 Documented as original. (defalias 'ange-ftp-file-name-as-directory #[(name) " !%\n8Ę (\n@!A !( !)" [ange-ftp-ftp-name name parsed 2 "" ange-ftp-host-type ange-ftp-file-name-as-directory-alist ange-ftp-real-file-name-as-directory] 3 (#$ . 52384)]) #@25 Documented as original. (defalias 'ange-ftp-file-name-directory #[(name) " !(\n8 ǎ\f\"* $ \f!\")+ !)" [ange-ftp-ftp-name name parsed 2 filename match-data match-data ((store-match-data match-data)) string-match "^~[^/]*$" ange-ftp-replace-name-component ange-ftp-real-file-name-directory] 5 (#$ . 52661)]) #@25 Documented as original. (defalias 'ange-ftp-file-name-nondirectory #[(name) " !%\n8 ǎ\f\"*ʂ! !)( !)" [ange-ftp-ftp-name name parsed 2 filename match-data match-data ((store-match-data match-data)) string-match "^~[^/]*$" "" ange-ftp-real-file-name-nondirectory] 4 (#$ . 52997)]) #@25 Documented as original. (defalias 'ange-ftp-directory-file-name #[(dir) " ! \n8!\" !)" [ange-ftp-ftp-name dir parsed ange-ftp-replace-name-component ange-ftp-real-directory-file-name 2] 6 (#$ . 53305)]) (defalias 'ange-ftp-binary-file #[(file) " Ž\f \"*" [match-data match-data ((store-match-data match-data)) string-match ange-ftp-binary-file-name-regexp file] 3]) (defalias 'ange-ftp-write-region #[(start end filename &optional append visit) " ! ! @ A@ 8!\f!\n !+\f \"=6ς7 !Ԏ ڎ\n%,c\f \"\n!\"v\f \"8#)\f \nE\"$(@(A\" E\"*=! !\" !. %)" [expand-file-name filename ange-ftp-ftp-name parsed host user ange-ftp-quote-string 2 name ange-ftp-make-tmp-name temp ange-ftp-binary-file ange-ftp-host-type unix binary append put cmd ange-ftp-abbreviate-filename abbr ((byte-code " !\n \f \"" [ange-ftp-del-tmp-name temp binary ange-ftp-set-ascii-mode host user] 3)) t buffer-file-name buffer-modified-p mod-p executing-macro ((byte-code " !" [filename buffer-file-name set-buffer-modified-p mod-p] 2)) ange-ftp-real-write-region start end nil visit ange-ftp-set-binary-mode file-attributes attr ange-ftp-set-xfer-size 7 ange-ftp-send-cmd format "Writing %s" result signal ftp-error "Opening output file" "FTP Error: \"%s\"" set-visited-file-modtime (0 0) ange-ftp-set-buffer-mode set-buffer-modified-p ange-ftp-message "Wrote %s" ange-ftp-add-file-entry] 8]) (defalias 'ange-ftp-insert-file-contents #[(filename &optional visit beg end replace) " \n!\n! \n\n!- \n!\f\"\n!\f@ \fA@\f8! !\n!Q \"=\n!ێi \" E\"$!@!A\"\nE\")!(!! *+,%A@\n\"D\") !\n\n.D\nD\"\n *+,%)" [barf-if-buffer-read-only expand-file-name filename ange-ftp-ftp-name parsed visit buffer-file-name file-exists-p nil ange-ftp-ls-cache-file ange-ftp-del-hash-entry file-name-directory ange-ftp-files-hashtable host user ange-ftp-quote-string 2 name ange-ftp-make-tmp-name temp ange-ftp-binary-file ange-ftp-host-type unix binary ange-ftp-abbreviate-filename abbr size ((byte-code " \n \" !" [binary ange-ftp-set-ascii-mode host user ange-ftp-del-tmp-name temp] 3)) ange-ftp-set-binary-mode ange-ftp-send-cmd get format "Retrieving %s" result signal ftp-error "Opening input file" "FTP Error: \"%s\"" ange-ftp-real-file-readable-p sleep-for ange-ftp-retry-time ange-ftp-real-insert-file-contents beg end replace "Opening input file:" "FTP Error: %s not arrived or readable" set-visited-file-modtime (0 0) file-error] 8]) (defalias 'ange-ftp-expand-symlink #[(file dir) " ! \" \"" [file-name-absolute-p file ange-ftp-replace-name-component dir expand-file-name] 3]) (defalias 'ange-ftp-file-symlink-p #[(file) " ! != !ŘƂ ) !!\" ;; !9 ! \"; ) !" [ange-ftp-expand-file-name file ange-ftp-ftp-name ange-ftp-get-hash-entry file-name-nondirectory "" "." ange-ftp-get-files file-name-directory file-ent file-name-absolute-p ange-ftp-replace-name-component ange-ftp-real-file-symlink-p] 6]) (defalias 'ange-ftp-file-exists-p #[(name) " ! !) !, !;& !!\"!') !" [expand-file-name name ange-ftp-ftp-name ange-ftp-file-entry-p ange-ftp-get-file-entry file-ent file-exists-p ange-ftp-expand-symlink file-name-directory directory-file-name t ange-ftp-real-file-exists-p] 7]) (defalias 'ange-ftp-file-directory-p #[(name) " ! !% !!;\" !!\"!# ) !" [expand-file-name name ange-ftp-ftp-name ange-ftp-get-file-entry ange-ftp-file-name-as-directory file-ent file-directory-p ange-ftp-expand-symlink file-name-directory directory-file-name ange-ftp-real-file-directory-p] 7]) (defalias 'ange-ftp-directory-files #[(directory &optional full match &rest v19-args) " ! !^ ! !!Ɖ ! \f͎ X @ A B\"%N PPB%*+ %" [expand-file-name directory ange-ftp-ftp-name ange-ftp-barf-if-not-directory ange-ftp-hash-table-keys ange-ftp-get-files nil f files tail file-name-as-directory match-data match-data ((store-match-data match-data)) match string-match full apply ange-ftp-real-directory-files v19-args] 6]) (defalias 'ange-ftp-file-attributes #[(file) " ! ! !ŘƂ ) !! \n\n \" @ A@ 8\n \";[![ !\"]ԉ;n؂xwقxP\"\"!\"\"ԯ\f,* !)" [expand-file-name file ange-ftp-ftp-name parsed file-name-nondirectory "" "." ange-ftp-get-files file-name-directory files part ange-ftp-hash-entry-exists-p 2 ange-ftp-get-hash-entry dirp name user host file-name-absolute-p ange-ftp-expand-symlink -1 (0 0) (0 0) (0 0) "l" "d" "-" "?????????" nil apply + mapcar identity directory-file-name ange-ftp-real-file-attributes] 18]) (defalias 'ange-ftp-file-writable-p #[(file) " ! ! ! !! !" [expand-file-name file ange-ftp-ftp-name file-exists-p file-directory-p file-name-directory ange-ftp-real-file-writable-p] 3]) (defalias 'ange-ftp-file-readable-p #[(file) " ! ! ! !" [expand-file-name file ange-ftp-ftp-name file-exists-p ange-ftp-real-file-readable-p] 2]) (defalias 'ange-ftp-file-executable-p #[(file) " ! ! ! !" [expand-file-name file ange-ftp-ftp-name file-exists-p ange-ftp-real-file-executable-p] 2]) (defalias 'ange-ftp-delete-file #[(file) " ! !G @ A@ 8! !\n\f D\n\"$@@A\" E\" !-J !)" [expand-file-name file ange-ftp-ftp-name parsed host user ange-ftp-quote-string 2 name ange-ftp-abbreviate-filename abbr ange-ftp-send-cmd delete format "Deleting %s" result signal ftp-error "Removing old name" "FTP Error: \"%s\"" ange-ftp-delete-file-entry ange-ftp-real-delete-file] 8 nil "fDelete file: "]) (defalias 'ange-ftp-verify-visited-file-modtime #[(buf) " !;\n!Ă !)" [buffer-file-name buf name ange-ftp-ftp-name t ange-ftp-real-verify-visited-file-modtime] 3]) (defalias 'ange-ftp-barf-or-query-if-file-exists #[(absname querystring interactive) " !!\n C\" #!?! C\"" [file-exists-p absname interactive signal file-already-exists yes-or-no-p format "File %s already exists; %s anyway? " querystring] 5]) (defalias 'ange-ftp-copy-file-internal #[(filename newname ok-if-already-exists keep-date &optional msg cont nowait) " !\n!\n! !\n\" !\n!?? \n \n$ k #kG@RA@_8! !n@yA@8!\n \" !\n!\"=\"=   \n #D!!\"\nE(\"# \n(  --&i \n(މ -&. *" [expand-file-name filename newname file-directory-p file-name-nondirectory ange-ftp-ftp-name t-parsed f-parsed ange-ftp-real-copy-file ok-if-already-exists keep-date cont ange-ftp-call-cont t "Copied locally" f-host f-user ange-ftp-quote-string 2 f-name ange-ftp-abbreviate-filename f-abbr t-host t-user t-name t-abbr ange-ftp-binary-file ange-ftp-host-type unix binary nil temp1 temp2 ange-ftp-barf-or-query-if-file-exists "copy to it" ange-ftp-use-gateway-p ange-ftp-make-tmp-name ange-ftp-set-binary-mode ange-ftp-send-cmd get msg format "Getting %s" "Copying %s to %s" ange-ftp-cf1 nowait] 25]) (defalias 'ange-ftp-cf1 #[(result line filename newname binary msg f-parsed f-host f-user f-name f-abbr t-parsed t-host t-user t-name t-abbr temp1 temp2 cont nowait) "#\n\"  ! \"\" E\")\n\f!9! `X Nm #m mm #y\" !8#) E!\"#$#!  &&!  & \n#" [line ((byte-code " \n \"" [binary ange-ftp-set-ascii-mode f-host f-user] 3)) result temp1 ange-ftp-del-tmp-name cont signal ftp-error "Opening input file" format "FTP Error: \"%s\"" filename t-parsed ange-ftp-use-gateway-p t-host ange-ftp-make-tmp-name temp2 nil ange-ftp-real-copy-file t binary ange-ftp-set-binary-mode t-user file-attributes attr ange-ftp-set-xfer-size 7 ange-ftp-send-cmd put t-name msg f-parsed "Putting %s" newname "Copying %s to %s" f-abbr t-abbr ange-ftp-cf2 nowait ange-ftp-call-cont] 14]) (defalias 'ange-ftp-cf2 #[(result line newname t-host t-user binary temp1 temp2 cont) " $Ž \f \"\nE\"\n!)0\f0\f\n#)" [((byte-code "!\n\n!\f #" [temp1 ange-ftp-del-tmp-name temp2 ange-ftp-call-cont cont result line] 4)) line ((byte-code " \n \"" [binary ange-ftp-set-ascii-mode t-host t-user] 3)) result cont signal ftp-error "Opening output file" format "FTP Error: \"%s\"" newname ange-ftp-add-file-entry temp1 ange-ftp-real-copy-file t] 6]) (defalias 'ange-ftp-copy-file #[(filename newname &optional ok-if-already-exists keep-date) " \n \fʼnt&" [ange-ftp-copy-file-internal filename newname ok-if-already-exists keep-date nil] 8 nil "fCopy file: \nFCopy %s to file: \np"]) #@49 Rename remote file FILE to remote file NEWNAME. (defalias 'ange-ftp-rename-remote-to-remote #[(filename newname f-parsed t-parsed) "@A@ @ A@ p\f\np8! 8!  E  ! \" \f #$@bA\" F\"! !.} $ !," [f-parsed t-parsed t-user t-host f-user f-host ange-ftp-quote-string 2 f-name t-name rename cmd ange-ftp-abbreviate-filename filename fabbr newname nabbr ange-ftp-send-cmd format "Renaming %s to %s" result signal ftp-error "Renaming" "FTP Error: \"%s\"" ange-ftp-add-file-entry ange-ftp-delete-file-entry ange-ftp-copy-file-internal t nil delete-file] 9 (#$ . 62368)]) #@47 Rename local FILENAME to remote file NEWNAME. (defalias 'ange-ftp-rename-local-to-remote #[(filename newname) " ! \"\n\f# % !," [ange-ftp-abbreviate-filename filename fabbr newname nabbr format "Renaming %s to %s" msg ange-ftp-copy-file-internal t nil ange-ftp-process-verbose delete-file] 6 (#$ . 63010)]) #@52 Rename remote file FILENAME to local file NEWNAME. (defalias 'ange-ftp-rename-remote-to-local #[(filename newname) " ! \"\n\f# % !," [ange-ftp-abbreviate-filename filename fabbr newname nabbr format "Renaming %s to %s" msg ange-ftp-copy-file-internal t nil ange-ftp-process-verbose delete-file] 6 (#$ . 63344)]) (defalias 'ange-ftp-rename-file #[(filename newname &optional ok-if-already-exists) " !\n! !\n!\f +#+\n#\fC < \n\f $T \n\"T N \n\"T \n#*" [expand-file-name filename newname ange-ftp-ftp-name f-parsed t-parsed ok-if-already-exists ange-ftp-barf-or-query-if-file-exists "rename to it" ange-ftp-rename-remote-to-remote ange-ftp-rename-remote-to-local ange-ftp-rename-local-to-remote ange-ftp-real-rename-file] 5 nil "fRename file: \nFRename %s to file: \np"]) (defalias 'ange-ftp-file-entry-active-p #[(sym) "N;? \f\"!)" [sym val file-exists-p ange-ftp-expand-symlink ange-ftp-this-dir] 5]) (defalias 'ange-ftp-file-entry-not-ignored-p #[(sym) "N!;+ \"!'!'\n \"?)5 5\n \"?*" [sym val symbol-name symname ange-ftp-expand-symlink ange-ftp-this-dir file file-directory-p file-exists-p string-match ange-ftp-completion-ignored-pattern] 4]) (defalias 'ange-ftp-file-name-all-completions #[(file dir) " !\n!)\n!\n!\n! #  \"*C\nΘ> \" \n\"C \n\")" [expand-file-name dir ange-ftp-this-dir ange-ftp-ftp-name ange-ftp-barf-if-not-directory ange-ftp-real-file-name-as-directory ange-ftp-get-files tbl all-completions file ange-ftp-file-entry-active-p completions mapcar #[(file) " \n\" ; \"! P )" [ange-ftp-get-hash-entry file tbl ent file-directory-p ange-ftp-expand-symlink ange-ftp-this-dir "/"] 5] "/" ange-ftp-generate-root-prefixes ange-ftp-real-file-name-all-completions] 4]) (defalias 'ange-ftp-file-name-completion #[(file dir) " !\n!D\n! ƚƂ^\n!\n! \f# ю  \n$@  \n$,^\n՘Z \"\"\"^ \n\")" [expand-file-name dir ange-ftp-this-dir ange-ftp-ftp-name ange-ftp-barf-if-not-directory file "" ange-ftp-real-file-name-as-directory ange-ftp-get-files tbl mapconcat #[(s) "; !PÇ" [s regexp-quote "$" "/"] 2] completion-ignored-extensions "\\|" ange-ftp-completion-ignored-pattern match-data match-data ((store-match-data match-data)) ange-ftp-file-name-completion-1 ange-ftp-file-entry-not-ignored-p ange-ftp-file-entry-active-p "/" try-completion ange-ftp-generate-root-prefixes mapcar list ange-ftp-real-file-name-all-completions ange-ftp-real-file-name-completion] 8]) (defalias 'ange-ftp-file-name-completion-1 #[(file tbl dir predicate) " \n #?\f=$ \"! P?ł?\f\n #=>\f\"!>\fP?\f)" [try-completion file tbl predicate bestmatch t file-directory-p expand-file-name dir "/"] 5]) (defalias 'ange-ftp-re-read-dir #[(&optional dir) " ! !!!%\"\"" [dir expand-file-name file-name-directory buffer-string ange-ftp-ftp-name nil ange-ftp-ls-cache-file ange-ftp-del-hash-entry ange-ftp-files-hashtable ange-ftp-get-files t] 3 nil nil]) (defalias 'ange-ftp-make-directory #[(dir &optional parents) " !!\f!\f\") !! \" !\n\n@ \nA@\f !=H\n8!N\n8!! ! \fD\"$@z \f A## \"- !)" [parents file-name-directory directory-file-name dir parent file-exists-p ange-ftp-make-directory error "Cannot make directory %s: file already exists" ange-ftp-ftp-name parsed host user ange-ftp-quote-string ange-ftp-host-type unix ange-ftp-real-directory-file-name 2 ange-ftp-real-file-name-as-directory name ange-ftp-abbreviate-filename abbr ange-ftp-send-cmd mkdir format "Making directory %s" result ange-ftp-error "Could not make directory %s: %s" ange-ftp-add-file-entry t ange-ftp-real-make-directory] 8 nil (list (expand-file-name (read-file-name "Make directory: ")))]) (defalias 'ange-ftp-delete-directory #[(dir) " !` ![ @ A@\f!=& 8!+ 8!!\f !\f \fD\"$@S\f A## \"-^ !) \"" [file-directory-p dir ange-ftp-ftp-name parsed host user ange-ftp-quote-string ange-ftp-host-type unix ange-ftp-real-directory-file-name 2 ange-ftp-real-file-name-as-directory name ange-ftp-abbreviate-filename abbr ange-ftp-send-cmd rmdir format "Removing directory %s" result ange-ftp-error "Could not remove directory %s: %s" ange-ftp-delete-file-entry t ange-ftp-real-delete-directory error "Not a directory: %s"] 8]) (defalias 'ange-ftp-file-local-copy #[(file) " !\n!!\f@!\n\n\"%)*" [expand-file-name file fn1 ange-ftp-ftp-name pa1 ange-ftp-make-tmp-name tmp1 ange-ftp-copy-file-internal t nil format "Getting %s"] 9]) (defalias 'ange-ftp-load #[(file &optional noerror nomessage nosuffix) " !O\n C P P E..ʏBˎ \n$)M M D\"*  \n$" [ange-ftp-ftp-name file nosuffix ".elc" ".el" nil copy tryfiles error (byte-code " @!" [ange-ftp-file-local-copy tryfiles copy] 2) ((ftp-error)) ((delete-file copy)) load noerror nomessage signal file-error "Cannot open load file" ange-ftp-real-load] 5]) (defalias 'ange-ftp-unhandled-file-name-directory #[(filename) " !" [file-name-directory ange-ftp-tmp-name-template] 2]) #@437 Alist of host-type-specific functions to process file names for compression. Each element has the form (TYPE . FUNC). FUNC should take one argument, a file name, and return a list of the form (COMPRESSING NEWNAME). COMPRESSING should be t if the specified file should be compressed, and nil if it should be uncompressed (that is, if it is a compressed file). NEWNAME should be the name to give the new compressed or uncompressed file. (defvar ange-ftp-make-compressed-filename-alist nil (#$ . 68608)) (defalias 'ange-ftp-dired-compress-file #[(name) " !C\f@!AC Ɏ !*\n@ \nA@\f : \f\"? \f\"+J !)*" [ange-ftp-ftp-name name nil conversion-func parsed ange-ftp-host-type ange-ftp-make-compressed-filename-alist match-data match-data ((store-match-data match-data)) decision compressing newfile ange-ftp-compress ange-ftp-uncompress file-name-handler-alist dired-compress-file] 4]) (defalias 'ange-ftp-compress #[(file nfile) " !\n@!\n@! !! \"\f \"ώ \f\f%=\"``\f #&Y\" Uq !) %." [ange-ftp-ftp-name file parsed ange-ftp-make-tmp-name tmp1 tmp2 ange-ftp-abbreviate-filename abbr nfile nabbr format "Getting %s" msg1 "Putting %s" msg2 ((byte-code " !\n!" [ange-ftp-del-tmp-name tmp1 tmp2] 2)) ange-ftp-copy-file-internal t nil ange-ftp-process-verbose ange-ftp-message "Compressing %s..." call-process-region shell-file-name "-c" "compress -f -c < %s > %s" "Compressing %s...done" buffer-size 0 delete-file] 12]) (defalias 'ange-ftp-uncompress #[(file nfile) " !\n@!\n@! !! \"\f \"ώ \f\f%=\"``\f #&Y\" Uq !) %." [ange-ftp-ftp-name file parsed ange-ftp-make-tmp-name tmp1 tmp2 ange-ftp-abbreviate-filename abbr nfile nabbr format "Getting %s" msg1 "Putting %s" msg2 ((byte-code " !\n!" [ange-ftp-del-tmp-name tmp1 tmp2] 2)) ange-ftp-copy-file-internal t nil ange-ftp-process-verbose ange-ftp-message "Uncompressing %s..." call-process-region shell-file-name "-c" "uncompress -c < %s > %s" "Uncompressing %s...done" buffer-size 0 delete-file] 12]) (defalias 'ange-ftp-find-backup-file-name #[(fn) "\n!" [ange-ftp-make-backup-files ange-ftp-real-find-backup-file-name fn] 2]) (defalias 'ange-ftp-hook-function #[(operation &rest args) "N\n\f\"\f\")" [operation ange-ftp fn apply args ange-ftp-run-real-handler] 4]) (byte-code "\n\" \nB\n\"\nB>#B###########################ȁ@ʁA#ȁBʁC#ȁDʁE#ȁFʁG#ȁHʁI#ȁJʁK#ȁLʁM#ȁNʁO#" [assoc "^/[^/:]*[^/:]:" file-name-handler-alist ("^/[^/:]*[^/:]:" . ange-ftp-hook-function) "^/[^/:]*\\'" ("^/[^/:]*\\'" . ange-ftp-completion-hook-function) ange-ftp-set-buffer-mode find-file-hooks put file-name-directory ange-ftp ange-ftp-file-name-directory file-name-nondirectory ange-ftp-file-name-nondirectory file-name-as-directory ange-ftp-file-name-as-directory directory-file-name ange-ftp-directory-file-name expand-file-name ange-ftp-expand-file-name make-directory ange-ftp-make-directory delete-directory ange-ftp-delete-directory insert-file-contents ange-ftp-insert-file-contents directory-files ange-ftp-directory-files file-directory-p ange-ftp-file-directory-p file-writable-p ange-ftp-file-writable-p file-readable-p ange-ftp-file-readable-p file-executable-p ange-ftp-file-executable-p file-symlink-p ange-ftp-file-symlink-p delete-file ange-ftp-delete-file read-file-name-internal ange-ftp-read-file-name-internal verify-visited-file-modtime ange-ftp-verify-visited-file-modtime file-exists-p ange-ftp-file-exists-p write-region ange-ftp-write-region backup-buffer ange-ftp-backup-buffer copy-file ange-ftp-copy-file rename-file ange-ftp-rename-file file-attributes ange-ftp-file-attributes file-name-all-completions ange-ftp-file-name-all-completions file-name-completion ange-ftp-file-name-completion insert-directory ange-ftp-insert-directory file-local-copy ange-ftp-file-local-copy unhandled-file-name-directory ange-ftp-unhandled-file-name-directory file-name-sans-versions ange-ftp-file-name-sans-versions dired-uncache ange-ftp-dired-uncache dired-compress-file ange-ftp-dired-compress-file load ange-ftp-load find-backup-file-name ange-ftp-find-backup-file-name file-truename identity vc-registered null] 4) (defalias 'ange-ftp-run-real-handler #[(operation args) "\n = \fBB  \"*" [ange-ftp-hook-function ange-ftp-completion-hook-function inhibit-file-name-operation operation inhibit-file-name-handlers apply args] 4]) (defalias 'ange-ftp-real-file-name-directory #[(&rest args) "\n\"" [ange-ftp-run-real-handler file-name-directory args] 3]) (defalias 'ange-ftp-real-file-name-nondirectory #[(&rest args) "\n\"" [ange-ftp-run-real-handler file-name-nondirectory args] 3]) (defalias 'ange-ftp-real-file-name-as-directory #[(&rest args) "\n\"" [ange-ftp-run-real-handler file-name-as-directory args] 3]) (defalias 'ange-ftp-real-directory-file-name #[(&rest args) "\n\"" [ange-ftp-run-real-handler directory-file-name args] 3]) (defalias 'ange-ftp-real-expand-file-name #[(&rest args) "\n\"" [ange-ftp-run-real-handler expand-file-name args] 3]) (defalias 'ange-ftp-real-make-directory #[(&rest args) "\n\"" [ange-ftp-run-real-handler make-directory args] 3]) (defalias 'ange-ftp-real-delete-directory #[(&rest args) "\n\"" [ange-ftp-run-real-handler delete-directory args] 3]) (defalias 'ange-ftp-real-insert-file-contents #[(&rest args) "\n\"" [ange-ftp-run-real-handler insert-file-contents args] 3]) (defalias 'ange-ftp-real-directory-files #[(&rest args) "\n\"" [ange-ftp-run-real-handler directory-files args] 3]) (defalias 'ange-ftp-real-file-directory-p #[(&rest args) "\n\"" [ange-ftp-run-real-handler file-directory-p args] 3]) (defalias 'ange-ftp-real-file-writable-p #[(&rest args) "\n\"" [ange-ftp-run-real-handler file-writable-p args] 3]) (defalias 'ange-ftp-real-file-readable-p #[(&rest args) "\n\"" [ange-ftp-run-real-handler file-readable-p args] 3]) (defalias 'ange-ftp-real-file-executable-p #[(&rest args) "\n\"" [ange-ftp-run-real-handler file-executable-p args] 3]) (defalias 'ange-ftp-real-file-symlink-p #[(&rest args) "\n\"" [ange-ftp-run-real-handler file-symlink-p args] 3]) (defalias 'ange-ftp-real-delete-file #[(&rest args) "\n\"" [ange-ftp-run-real-handler delete-file args] 3]) (defalias 'ange-ftp-real-read-file-name-internal #[(&rest args) "\n\"" [ange-ftp-run-real-handler read-file-name-internal args] 3]) (defalias 'ange-ftp-real-verify-visited-file-modtime #[(&rest args) "\n\"" [ange-ftp-run-real-handler verify-visited-file-modtime args] 3]) (defalias 'ange-ftp-real-file-exists-p #[(&rest args) "\n\"" [ange-ftp-run-real-handler file-exists-p args] 3]) (defalias 'ange-ftp-real-write-region #[(&rest args) "\n\"" [ange-ftp-run-real-handler write-region args] 3]) (defalias 'ange-ftp-real-backup-buffer #[(&rest args) "\n\"" [ange-ftp-run-real-handler backup-buffer args] 3]) (defalias 'ange-ftp-real-copy-file #[(&rest args) "\n\"" [ange-ftp-run-real-handler copy-file args] 3]) (defalias 'ange-ftp-real-rename-file #[(&rest args) "\n\"" [ange-ftp-run-real-handler rename-file args] 3]) (defalias 'ange-ftp-real-file-attributes #[(&rest args) "\n\"" [ange-ftp-run-real-handler file-attributes args] 3]) (defalias 'ange-ftp-real-file-name-all-completions #[(&rest args) "\n\"" [ange-ftp-run-real-handler file-name-all-completions args] 3]) (defalias 'ange-ftp-real-file-name-completion #[(&rest args) "\n\"" [ange-ftp-run-real-handler file-name-completion args] 3]) (defalias 'ange-ftp-real-insert-directory #[(&rest args) "\n\"" [ange-ftp-run-real-handler insert-directory args] 3]) (defalias 'ange-ftp-real-file-name-sans-versions #[(&rest args) "\n\"" [ange-ftp-run-real-handler file-name-sans-versions args] 3]) (defalias 'ange-ftp-real-shell-command #[(&rest args) "\n\"" [ange-ftp-run-real-handler shell-command args] 3]) (defalias 'ange-ftp-real-load #[(&rest args) "\n\"" [ange-ftp-run-real-handler load args] 3]) (defalias 'ange-ftp-real-find-backup-file-name #[(&rest args) "\n\"" [ange-ftp-run-real-handler find-backup-file-name args] 3]) (defalias 'ange-ftp-insert-directory #[(file switches &optional wildcard full) " ! !!\f1& ! ! ̉%)-  #c:  $*" [ange-ftp-abbreviate-filename file ange-ftp-ftp-name expand-file-name parsed short wildcard file-name-directory default-directory ange-ftp-ls file-name-nondirectory switches nil t full ange-ftp-real-insert-directory] 6]) (defalias 'ange-ftp-dired-uncache #[(dir) "\n!! É" [ange-ftp-ftp-name expand-file-name dir nil ange-ftp-ls-cache-file] 3]) #@74 Alist of mapping host type into function to remove file version numbers. (defvar ange-ftp-sans-version-alist nil (#$ . 77453)) (defalias 'ange-ftp-file-name-sans-versions #[(file keep-backup-version) " ! !É!@!@!A\f-\f  \"2  \"+" [ange-ftp-abbreviate-filename file ange-ftp-ftp-name nil func host-type parsed ange-ftp-host-type ange-ftp-sans-version-alist keep-backup-version ange-ftp-real-file-name-sans-versions] 4]) (defalias 'ange-ftp-shell-command #[(command) " !@\nA@\n8\n!@GV,R $\"!," [ange-ftp-ftp-name default-directory parsed host user 2 name ange-ftp-real-shell-command command 0 "cd " "; " format "%s %s \"%s\"" remote-shell-program ange-ftp-message "Remote command '%s' ..."] 6]) (defalias 'ange-ftp-dired-call-process #[(program discard &rest arguments) " ! ď ?\n&" [ange-ftp-ftp-name default-directory oops (byte-code "\n !\"" [program "chmod" ange-ftp-call-chmod arguments error "Unknown remote command: %s"] 3) ((ftp-error (byte-code "\nA@\n8\n8$c" [format "%s: %s, %s\n" oops 2 3] 6)) (error (byte-code "\nA@\"c" [format "%s\n" oops] 3))) apply call-process program nil discard arguments] 7]) (defalias 'ange-ftp-call-chmod #[(args) "GW\f\"@A\")lj" [args 2 error "ange-ftp-call-chmod: missing mode and/or filename: %s" mode mapcar #[(file) " ! !A @ A@ 8! !\n\f  E\n\"$@@\f A##-)" [expand-file-name file ange-ftp-ftp-name parsed host user ange-ftp-quote-string 2 name ange-ftp-abbreviate-filename abbr ange-ftp-send-cmd chmod mode format "doing chmod %s" result ange-ftp-error "chmod: %s: \"%s\""] 8] nil ange-ftp-ls-cache-file] 3]) (defalias 'ange-ftp-fix-name-for-vms #[(name &optional reverse) " Ž v\"nlj \n˔(˔˕O\n̔6̔̕O ͔D͔͕O V O\"\" \n`\nQ gR+\"lj \n\"ؕSO\nؕO!O\"\" !\n \n? RQ,*" [match-data match-data ((store-match-data match-data)) reverse string-match "^\\([^:]+:\\)?\\(\\[.*\\]\\)?\\([^][]*\\)$" name nil file dir drive 1 2 3 apply concat mapcar #[(char) "U\n!!" [char 46 vector 47] 2] -1 "/" error "name %s didn't match" tmp "^/[^:]+:/" 0 file-name-directory #[(char) "U\n!!" [char 47 vector 46] 2] file-name-nondirectory "[" "." "]"] 8]) (byte-code " \n B > B" [vms ange-ftp-fix-name-func-alist (vms . ange-ftp-fix-name-for-vms) ange-ftp-dumb-host-types] 2) (defalias 'ange-ftp-fix-dir-name-for-vms #[(dir-name) "\n!\"!!" [dir-name "/" error "Cannot get listing for fictitious \"/\" directory." string-match "^/[-A-Z0-9_$]+:/$" "Cannot get listing for device." ange-ftp-fix-name-for-vms] 3]) (byte-code " \n B!BŇ" [vms ange-ftp-fix-dir-name-func-alist (vms . ange-ftp-fix-dir-name-for-vms) boundp ange-ftp-vms-host-regexp nil current-load-list] 2) (defalias 'ange-ftp-vms-host #[(host) " Î \"*" [ange-ftp-vms-host-regexp match-data match-data ((store-match-data match-data)) string-match host] 3]) #@271 Regular expression to match for a valid VMS file name in Dired buffer. Stupid freaking bug! Position of _ and $ shouldn't matter but they do. Having [A-Z0-9$_] bombs on filename _$$CHANGE_LOG$.TXT$ and $CHANGE_LOG$.TX Other orders of $ and _ seem to all work just fine. (defconst ange-ftp-vms-filename-regexp (concat "\\(\\([_A-Za-z0-9$]?\\|[_A-Za-z0-9$][-_A-Za-z0-9$]*\\)\\." "[-_A-Za-z0-9$]*;+[0-9]*\\)") (#$ . 80572)) (defalias 'ange-ftp-parse-vms-filename #[nil " # Ĕĕ{" [re-search-forward ange-ftp-vms-filename-regexp nil t 0] 4]) (defalias 'ange-ftp-parse-vms-listing #[nil " eb Ǝ E\n\"(\nˉO #?\n #\n\"?\nˉO #y # #* *" [ange-ftp-make-hashtable nil file tbl match-data match-data ((store-match-data match-data)) ange-ftp-parse-vms-filename string-match "\\.\\(DIR\\|dir\\);[0-9]+" ange-ftp-put-hash-entry 0 t ";[0-9]+$" 1 "." ".."] 4]) (byte-code " \n B" [vms ange-ftp-parse-list-func-alist (vms . ange-ftp-parse-vms-listing)] 2) (defalias 'ange-ftp-vms-delete-file-entry #[(name &optional dir-p) " \n\" Ǝ\n!ɘʂ)\"e\n!\"dщO!Q\"\"c\"+)+" [dir-p ange-ftp-internal-delete-file-entry name t match-data match-data ((store-match-data match-data)) file-name-nondirectory file "" "." string-match ";[0-9]+$" ange-ftp-get-hash-entry file-name-directory ange-ftp-files-hashtable files 0 root "^" regexp-quote regexp nil versions ange-ftp-del-hash-entry mapatoms #[(sym) " \nN\"\fĉ" [string-match regexp sym key t versions] 4]] 4]) (byte-code " \n B" [vms ange-ftp-delete-file-entry-alist (vms . ange-ftp-vms-delete-file-entry)] 2) (defalias 'ange-ftp-vms-add-file-entry #[(name &optional dir-p) " \n\"\n!\"v\n! ʘ%˂' )  Ύ \"G ҉O#m !Q\"T !Q#** #))" [dir-p ange-ftp-internal-add-file-entry name t ange-ftp-get-hash-entry file-name-directory ange-ftp-files-hashtable files file-name-nondirectory file "" "." match-data match-data ((store-match-data match-data)) string-match ";[0-9]+$" ange-ftp-put-hash-entry 0 nil "^" regexp-quote ";\\([0-9]+\\)$" version regexp mapatoms #[(sym) "N\f\n\" \nǔǕO!])" [sym key name string-match regexp version string-to-int 1] 5] ";" int-to-string] 6]) (byte-code " \n B" [vms ange-ftp-add-file-entry-alist (vms . ange-ftp-vms-add-file-entry)] 2) #@49 Mark HOST as the name of a machine running VMS. (defalias 'ange-ftp-add-vms-host #[(host) " !? !  lj" [ange-ftp-vms-host host "^" regexp-quote "$" ange-ftp-vms-host-regexp "\\|" nil ange-ftp-host-cache] 5 (#$ . 83004) (list (read-string "Host: " (let ((name (or (buffer-file-name) default-directory))) (and name (car (ange-ftp-ftp-name name))))))]) (defalias 'ange-ftp-vms-file-name-as-directory #[(name) " Ž \" ƉO !*" [match-data match-data ((store-match-data match-data)) string-match "\\.\\(DIR\\|dir\\)\\(;[0-9]+\\)?$" name 0 ange-ftp-real-file-name-as-directory] 3]) (byte-code " \n B" [vms ange-ftp-file-name-as-directory-alist (vms . ange-ftp-vms-file-name-as-directory)] 2) (defalias 'ange-ftp-vms-make-compressed-filename #[(name &optional reverse) "\n\"\nĉOD\n\"\nĉOD\n\",\nOD\n\">\nĉOPA\nPD" [string-match "-Z;[0-9]+$" name nil 0 ";[0-9]+$" "-Z$" -2 t "-Z"] 4]) (byte-code " \n B" [vms ange-ftp-make-compressed-filename-alist (vms . ange-ftp-vms-make-compressed-filename)] 2) (defalias 'ange-ftp-vms-sans-version #[(name) " Ž \" ƉO *" [match-data match-data ((store-match-data match-data)) string-match ";[0-9]+$" name 0] 3]) (byte-code " \n B" [vms ange-ftp-sans-version-alist (vms . ange-ftp-vms-sans-version)] 2) (defalias 'ange-ftp-fix-name-for-mts #[(name &optional reverse) " Ž K\"Clj ʔ$ʕO ̔2̔̕O < QP*f\"f\"dʉO̔̕OPf*" [match-data match-data ((store-match-data match-data)) reverse string-match "^\\([^:]+:\\)?\\(.*\\)$" name nil file acct 1 0 2 "/" error "name %s didn't match" "^/\\([^:]+:\\)/\\(.*\\)$"] 4]) (byte-code " \n B" [mts ange-ftp-fix-name-func-alist (mts . ange-ftp-fix-name-for-mts)] 2) (defalias 'ange-ftp-fix-dir-name-for-mts #[(dir-name) "\n!!ŘƂ&\"%P&)" [dir-name "/" error "Cannot get listing for fictitious \"/\" directory." ange-ftp-fix-name-for-mts "" "?" string-match ":$"] 4]) (byte-code " \n B > B!BƇ" [mts ange-ftp-fix-dir-name-func-alist (mts . ange-ftp-fix-dir-name-for-mts) ange-ftp-dumb-host-types boundp ange-ftp-mts-host-regexp nil current-load-list] 2) (defalias 'ange-ftp-mts-host #[(host) " Î \"*" [ange-ftp-mts-host-regexp match-data match-data ((store-match-data match-data)) string-match host] 3]) (defalias 'ange-ftp-parse-mts-listing #[nil " eb Ď#2x`\nx`\n{ #)y * # )" [ange-ftp-make-hashtable tbl match-data match-data ((store-match-data match-data)) re-search-forward ange-ftp-date-regexp nil t " " end "-A-Z0-9_.!" ange-ftp-put-hash-entry 1 "."] 4]) (byte-code " \n B" [mts ange-ftp-parse-list-func-alist (mts . ange-ftp-parse-mts-listing)] 2) #@49 Mark HOST as the name of a machine running MTS. (defalias 'ange-ftp-add-mts-host #[(host) " !? !  lj" [ange-ftp-mts-host host "^" regexp-quote "$" ange-ftp-mts-host-regexp "\\|" nil ange-ftp-host-cache] 5 (#$ . 85801) (list (read-string "Host: " (let ((name (or (buffer-file-name) default-directory))) (and name (car (ange-ftp-ftp-name name))))))]) (defalias 'ange-ftp-fix-name-for-cms #[(name &optional reverse) " Ž  P \"~ ȉO ʔx ʔʕO P \"#@It \"#@es  A##)+z )!*" [match-data match-data ((store-match-data match-data)) reverse "/" name string-match "^/\\([-A-Z0-9$*._]+\\)/\\([-A-Z0-9$._]+\\)?$" 1 minidisk 2 "cd " ange-ftp-get-process ange-ftp-this-host ange-ftp-this-user proc cmd file ange-ftp-raw-send-cmd ange-ftp-this-msg result ange-ftp-error format "cd to minidisk %s failed: %s" error "Invalid CMS filename"] 8]) (byte-code " \n B > B" [cms ange-ftp-fix-name-func-alist (cms . ange-ftp-fix-name-for-cms) ange-ftp-dumb-host-types] 2) (defalias 'ange-ftp-fix-dir-name-for-cms #[(dir-name) "\n!\"rƔƕO \n\" P Δ5ΔΕO6  \"@Gp \n\"   \"@ao \nA##),!" [dir-name "/" error "Cannot get listing for fictitious \"/\" directory." string-match "^/\\([-A-Z0-9$*._]+\\)/\\([-A-Z0-9$._]+\\)?$" 1 minidisk ange-ftp-get-process ange-ftp-this-host ange-ftp-this-user proc "cd " cmd 2 "*" file ange-ftp-raw-send-cmd result ange-ftp-error format "cd to minidisk %s failed: " "Invalid CMS file name"] 8]) (byte-code " \n B" [cms ange-ftp-fix-dir-name-func-alist (cms . ange-ftp-fix-dir-name-for-cms)] 2) #@69 Regular expression to match hosts running the CMS operating system. (defvar ange-ftp-cms-host-regexp nil (#$ . 87495)) (defalias 'ange-ftp-cms-host #[(host) " Î \"*" [ange-ftp-cms-host-regexp match-data match-data ((store-match-data match-data)) string-match host] 3]) #@38 Mark HOST as the name of a CMS host. (defalias 'ange-ftp-add-cms-host #[(host) " !? !  lj" [ange-ftp-cms-host host "^" regexp-quote "$" ange-ftp-cms-host-regexp "\\|" nil ange-ftp-host-cache] 5 (#$ . 87780) (list (read-string "Host: " (let ((name (or (buffer-file-name) default-directory))) (and name (car (ange-ftp-ftp-name name))))))]) (defalias 'ange-ftp-parse-cms-listing #[nil " eb Ď#*ʔʕ{̔̕{Q #y #* )" [ange-ftp-make-hashtable tbl match-data match-data ((store-match-data match-data)) re-search-forward "^\\([-A-Z0-9$_]+\\) +\\([-A-Z0-9$_]+\\) +[VF] +[0-9]+ " nil t ange-ftp-put-hash-entry 1 "." 2] 5]) (byte-code " \n B" [cms ange-ftp-parse-list-func-alist (cms . ange-ftp-parse-cms-listing)] 2) (defalias 'ange-ftp-cms-make-compressed-filename #[(name &optional reverse) "\n\"\nOD\nPD" [string-match "-Z$" name nil 0 -2 t "-Z"] 4]) (byte-code " \n B!" [cms ange-ftp-make-compressed-filename-alist (cms . ange-ftp-cms-make-compressed-filename) provide ange-ftp] 2)