MMCT TEAM
Server IP : 111.118.215.189  /  Your IP : 18.188.23.45
Web Server : Apache
System : Linux md-in-83.webhostbox.net 4.19.286-203.ELK.el7.x86_64 #1 SMP Wed Jun 14 04:33:55 CDT 2023 x86_64
User : a1673wkz ( 2475)
PHP Version : 8.2.25
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON
Directory (0755) :  /usr/share/emacs/24.3/lisp/net/

[  Home  ][  C0mmand  ][  Upload File  ]

Current File : //usr/share/emacs/24.3/lisp/net/ange-ftp.elc
;ELC
;;; Compiled by mockbuild@buildfarm06-new.corp.cloudlinux.com on Fri Oct 11 10:10:29 2024
;;; from file /builddir/build/BUILD/emacs-24.3/lisp/net/ange-ftp.el
;;; in Emacs version 24.3.1
;;; with all optimizations.

;;; This file uses dynamic docstrings, first added in Emacs 19.29.

;;; This file does not contain utf-8 non-ASCII characters,
;;; and so can be loaded in Emacs versions earlier than 23.

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


(byte-code "\300\301!\210\302\303\304\305\306\307\306\310\311\312&	\210\313\314\315\316\306\303\317\320&\207" [require comint custom-declare-group ange-ftp nil "Accessing remote files and directories using FTP." :group files comm :prefix "ange-ftp-" custom-declare-variable ange-ftp-name-format '("\\`/\\(\\([^/:]*\\)@\\)?\\([^@/:]*[^@/:.]\\):\\(.*\\)" 3 2 4) "Format of a fully expanded remote file name.\n\nThis is a list of the form (REGEXP HOST USER NAME),\nwhere REGEXP is a regular expression matching\nthe full remote name, and HOST, USER, and NAME are the numbers of\nparenthesized expressions in REGEXP for the components (in that order)." :type (list (regexp :tag "Name regexp") (integer :tag "Host group") (integer :tag "User group") (integer :tag "Name group"))] 10)
#@65 Regular expression matching the start of a multiline FTP reply.
(defvar ange-ftp-multi-msgs "^150-\\|^220-\\|^230-\\|^226\\|^25.-\\|^221-\\|^200-\\|^331-\\|^4[25]1-\\|^530-" (#$ . 1335))
#@53 Regular expression matching FTP "success" messages.
(defvar ange-ftp-good-msgs "^220 \\|^230 \\|^226 \\|^25. \\|^221 \\|^200 \\|^[Hh]ash mark" (#$ . 1528))
(byte-code "\300\301\302\303\304\305\306\307&\210\300\310\311\312\304\305\306\307&\210\300\313\314\315\304\305\306\307&\210\300\316\317\320\304\305\306\307&\210\300\321\322\323\304\305\306\307&\210\300\324\325\326\304\305\306\327&\210\300\330\331\332\304\305\306\327&\210\300\333\334\335\304\305\306\336&\210\300\337\340\341\304\305\306\342&\210\300\343\344\345\304\305\306\346&\210\300\347\344\350\304\305\306\351&\210\300\352\344\353\304\305\306\354&\210\300\355\344\356\304\305\306\357&\210\300\360\344\361\304\305\306\362&\210\300\363\344\364\304\305\306\365&\210\300\366\367\370\304\305\306\371&\210\300\372\344\373\304\305\306\374&\210\300\375\376\377\304\305\306\307\201@\201A&	\210\300\201B\344\201C\304\305\306\201D&\210\300\201E\201F\201G\304\305\306\307&\210\300\201H\344\201I\304\305\306\342&\210\300\201J\201K\201L\304\305\306\201M&\210\300\201N\201O\201P\304\305\306\307&\207" [custom-declare-variable ange-ftp-skip-msgs (concat "^200 \\(PORT\\|Port\\) \\|^331 \\|^150 \\|^350 \\|^[0-9]+ bytes \\|" "^Connected \\|^$\\|^Remote system\\|^Using\\|^ \\|Password:\\|" "^Data connection \\|" "^local:\\|^Trying\\|^125 \\|^550-\\|^221 .*oodbye\\|" "^500 .*AUTH\\|^KERBEROS\\|" "^504 Unknown security mechanism\\|" "^530 Please login with USER and PASS\\|" "^534 Kerberos Authentication not enabled\\|" "^22[789] .*[Pp]assive\\|^200 EPRT\\|^500 .*EPRT") "Regular expression matching FTP messages that can be ignored." :group ange-ftp :type regexp ange-ftp-fatal-msgs (concat "^ftp: \\|^Not connected\\|^530 \\|^4[25]1 \\|rcmd: \\|" "^No control connection\\|unknown host\\|^lost connection") "Regular expression matching FTP messages that indicate serious errors.\n\nThese mean that the FTP process should be (or already has been) killed." ange-ftp-potential-error-msgs "^ftp: connect to address .*: No route to host" "Regular expression matching FTP messages that can indicate serious errors.\nThese mean that something went wrong, but they may be followed by more\nmessages indicating that the error was somehow corrected." ange-ftp-gateway-fatal-msgs "No route to host\\|Connection closed\\|No such host\\|Login incorrect" "Regular expression matching login failure messages from rlogin/telnet." ange-ftp-xfer-size-msgs "^150 .* connection for .* (\\([0-9]+\\) bytes)" "Regular expression used to determine the number of bytes in a FTP transfer." ange-ftp-tmp-name-template (expand-file-name "ange-ftp" temporary-file-directory) "Template used to create temporary files." directory ange-ftp-gateway-tmp-name-template "/tmp/ange-ftp" "Template used to create temporary files when FTP-ing through a gateway.\n\nFiles starting with this prefix need to be accessible from BOTH the local\nmachine and the gateway machine, and need to have the SAME name on both\nmachines, that is, /tmp is probably NOT what you want, since that is rarely\ncross-mounted." ange-ftp-netrc-filename "~/.netrc" "File in .netrc format to search for passwords." file ange-ftp-disable-netrc-security-check (eq system-type 'windows-nt) "If non-nil avoid checking permissions on the .netrc file." boolean ange-ftp-default-user nil "User name to use when none is specified in a file name.\n\nIf non-nil but not a string, you are prompted for the name.\nIf nil, the value of `ange-ftp-netrc-default-user' is used.\nIf that is nil too, then your login name is used.\n\nOnce a connection to a given host has been initiated, the user name\nand password information for that host are cached and re-used by\nange-ftp.  Use \\[ange-ftp-set-user] to change the cached values,\nsince setting `ange-ftp-default-user' directly does not affect\nthe cached information." (choice (const :tag "Default" nil) string (other :tag "Prompt" t)) ange-ftp-netrc-default-user "Alternate default user name to use when none is specified.\n\nThis variable is set from the `default' command in your `.netrc' file,\nif there is one." (choice (const :tag "Default" nil) string) ange-ftp-default-password "Password to use when the user name equals `ange-ftp-default-user'." (choice (const :tag "Default" nil) string) ange-ftp-default-account "Account to use when the user name equals `ange-ftp-default-user'." (choice (const :tag "Default" nil) string) ange-ftp-netrc-default-password "Password to use when the user name equals `ange-ftp-netrc-default-user'." (choice (const :tag "Default" nil) string) ange-ftp-netrc-default-account "Account to use when the user name equals `ange-ftp-netrc-default-user'." (choice (const :tag "Default" nil) string) ange-ftp-generate-anonymous-password t "If t, use value of `user-mail-address' as password for anonymous FTP.\n\nIf a string, then use that string as the password.\nIf nil, prompt the user for a password." (choice (const :tag "Prompt" nil) string (other :tag "User address" t)) ange-ftp-dumb-unix-host-regexp "If non-nil, regexp matching hosts on which `dir' command lists directory." (choice (const :tag "Default" nil) string) ange-ftp-binary-file-name-regexp "" "If a file matches this regexp then it is transferred in binary mode." :version "24.1" ange-ftp-gateway-host "Name of host to use as gateway machine when local FTP isn't possible." (choice (const :tag "Default" nil) string) ange-ftp-local-host-regexp ".*" "Regexp selecting hosts which can be reached directly with FTP.\n\nFor other hosts the FTP process is started on `ange-ftp-gateway-host'\ninstead, and/or reached via `ange-ftp-gateway-ftp-program-name'." ange-ftp-gateway-program-interactive "If non-nil then the gateway program should give a shell prompt.\n\nBoth telnet and rlogin do something like this." ange-ftp-gateway-program remote-shell-program "Name of program to spawn a shell on the gateway machine.\n\nValid candidates are rsh (remsh on some systems), telnet and rlogin.\nSee also the gateway variable above." (choice (const "rsh") (const "telnet") (const "rlogin") string) ange-ftp-gateway-prompt-pattern "^[^#$%>;\n]*[#$%>;] *" "Regexp matching prompt after complete login sequence on gateway machine.\n\nA match for this means the shell is now awaiting input.  Make this regexp as\nstrict as possible; it shouldn't match *anything* at all except the user's\ninitial prompt.  The above string will fail under most SUN-3's since it\nmatches the login banner."] 10)
#@172 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 "\301=\203\302\207\303\207" [system-type hpux "stty -onlcr -echo\n" "stty -echo nl\n"] 2) (#$ . 7977))
(byte-code "\300\301\302\303\304\305\306\307&\210\300\310\311\312\304\305\306\313&\210\300\314\315\316\304\305\306\307&\210\300\317\302\320\304\305\306\321&\210\300\322\323\324\304\305\306\325&\210\300\326\315\327\304\305\306\307&\210\300\330\331\332\304\305\306\313&\210\300\333\331\334\304\305\306\313&\210\300\335\336\337\304\305\306\340&\210\300\341\302\342\304\305\306\343&\210\300\344\302\345\304\305\306\307&\210\300\346\347\350\304\305\306\325&\210\300\351\352\353\304\305\306\354&\210\300\355\302\356\304\305\306\307\357\360&	\210\300\361\302\362\304\305\306\363\357\364&	\210\365\366!\207" [custom-declare-variable ange-ftp-smart-gateway nil "Non-nil says the FTP gateway (proxy) or gateway FTP program is smart.\n\nDon't bother telnetting, etc., already connected to desired host transparently,\nor just issue a user@host command in case `ange-ftp-gateway-host' is non-nil.\nSee also `ange-ftp-smart-gateway-port'." :group ange-ftp :type boolean ange-ftp-smart-gateway-port "21" "Port on gateway machine to use when smart gateway is in operation." string ange-ftp-send-hash t "If non-nil, send the HASH command to the FTP client." ange-ftp-binary-hash-mark-size "Default size, in bytes, between hash-marks when transferring a binary file.\nIf nil, this variable will be locally overridden if the FTP client outputs a\nsuitable response to the HASH command.  If non-nil, this value takes\nprecedence over the local value." (choice (const :tag "Overridden" nil) integer) ange-ftp-ascii-hash-mark-size 1024 "Default size, in bytes, between hash-marks when transferring an ASCII file.\nThis variable is buffer-local and will be locally overridden if the FTP client\noutputs a suitable response to the HASH command." integer ange-ftp-process-verbose "If non-nil then be chatty about interaction with the FTP process." ange-ftp-ftp-program-name "ftp" "Name of FTP program to run." ange-ftp-gateway-ftp-program-name "Name of FTP program to run when accessing non-local hosts.\n\nSome AT&T folks claim to use something called `pftp' here." ange-ftp-ftp-program-args '("-i" "-n" "-g" "-v") "A list of arguments passed to the FTP program when started." (repeat string) ange-ftp-nslookup-program "If non-nil, this is a string naming the nslookup program." (choice (const :tag "None" nil) string) ange-ftp-make-backup-files "Non-nil means make backup files for \"magic\" remote files." ange-ftp-retry-time 5 "Number of seconds to wait before retry if file or listing doesn't arrive.\nThis might need to be increased for very slow connections." ange-ftp-auto-save 0 "If 1, allow ange-ftp files to be auto-saved.\nIf 0, inhibit auto-saving of ange-ftp files.\nDon't use any other value." (choice (const :tag "Suppress" 0) (const :tag "Allow" 1)) ange-ftp-try-passive-mode "If t, try to use passive mode in FTP, if the client program supports it." :version "21.1" ange-ftp-passive-host-alist "Alist of FTP servers that need \"passive\" mode.\nEach element is of the form (HOSTNAME . SETTING).\nHOSTNAME is a regular expression to match the FTP server host name(s).\nSETTING is \"on\" to turn passive mode on, \"off\" to turn it off,\nor nil meaning don't change it." (repeat (cons regexp (choice (const :tag "On" "on") (const :tag "Off" "off") (const :tag "Don't change" nil)))) "22.1" require backquote] 10)
#@62 Return whether there is an association for KEY in table TBL.
(defalias 'ange-ftp-hash-entry-exists-p #[(key tbl) "\205\f\302	\303#\303=?\207" [tbl key gethash unknown] 4 (#$ . 11633)])
#@71 Return a sorted list of all the active keys in table TBL, as strings.
(defalias 'ange-ftp-hash-table-keys #[(tbl) "\301\302\303\"\304\"\207" [tbl sort all-completions "" string-lessp] 4 (#$ . 11827)])
#@71 Buffer name to hold directory listing data received from FTP process.
(defvar ange-ftp-data-buffer-name " *ftp data*" (#$ . 12035))
#@60 Last modified time of the netrc file from file-attributes.
(defvar ange-ftp-netrc-modtime nil (#$ . 12173))
#@59 Hash table holding associations between HOST, USER pairs.
(defvar ange-ftp-user-hashtable (make-hash-table :test 'equal) (#$ . 12287))
#@101 Mapping between a HOST, USER pair and a PASSWORD for them.
All HOST values should be in lower case.
(defvar ange-ftp-passwd-hashtable (make-hash-table :test 'equal) (#$ . 12429))
#@69 Mapping between a HOST, USER pair and an ACCOUNT password for them.
(defvar ange-ftp-account-hashtable (make-hash-table :test 'equal) (#$ . 12614))
#@64 Hash table for storing directories and their respective files.
(defvar ange-ftp-files-hashtable (make-hash-table :test 'equal :size 97) (#$ . 12768))
#@62 Hash table for storing file names and their "inode numbers".
(defvar ange-ftp-inodes-hashtable (make-hash-table :test 'equal :size 97) (#$ . 12924))
#@69 Next "inode number" value.  We give each file name a unique number.
(defvar ange-ftp-next-inode-number 1 (#$ . 13079))
#@41 Last set of args used by `ange-ftp-ls'.
(defvar ange-ftp-ls-cache-lsargs nil (#$ . 13204))
#@36 Last file passed to `ange-ftp-ls'.
(defvar ange-ftp-ls-cache-file nil (#$ . 13301))
#@42 Last result returned from `ange-ftp-ls'.
(defvar ange-ftp-ls-cache-res nil (#$ . 13391))
(defconst ange-ftp-expand-dir-hashtable (make-hash-table :test 'equal))
(defconst ange-ftp-expand-dir-regexp "^5.0 \\([^: ]+\\):")
(defvar ange-ftp-hash-mark-unit nil)
(defvar ange-ftp-hash-mark-count nil)
(defvar ange-ftp-xfer-size nil)
(defvar ange-ftp-process-string nil)
(defvar ange-ftp-process-result-line nil)
(defvar ange-ftp-pending-error-line nil)
(defvar ange-ftp-process-busy nil)
(defvar ange-ftp-process-result nil)
(defvar ange-ftp-process-multi-skip nil)
(defvar ange-ftp-process-msg nil)
(defvar ange-ftp-process-continue nil)
(defvar ange-ftp-last-percent nil)
(put 'ftp-error 'error-conditions '(ftp-error file-error error))
#@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) "\305\306	#\307\310 !\f\203\202'G\nY\203#\311\312\nZ\313OP\314\315\"*\207" [fmt args max msg noninteractive apply format window-width minibuffer-window "> " 3 nil message "%s"] 4 (#$ . 14131)])
#@182 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) "\304 \305\216	\203\306\307\310	!\311Q\n\"\203\n\312\225S\313O\203.\314\n!\314!\230\203.\315\n!\n\2063\316*\207" [save-match-data-internal default-directory file new match-data ((byte-code "\301\302\"\207" [save-match-data-internal set-match-data evaporate] 3)) string-match "\\`" regexp-quote "." 0 nil file-name-nondirectory file-name-directory "./"] 4 (#$ . 14523)])
#@51 For a given HOST, set or change the default USER.
(defalias 'ange-ftp-set-user #[(host user) "\303	\n#\207" [host user ange-ftp-user-hashtable puthash] 4 (#$ . 15156) "sHost: \nsUser: "])
#@40 Given a HOST, return the default user.
(defalias 'ange-ftp-get-user #[(host) "\306 \210\307	\"\211\2064;\203\202-\203'\310\311\312\313\"\314 \")\202-
\206-\314 \211\315\n\"\210)\207" [host ange-ftp-user-hashtable user ange-ftp-default-user enable-recursive-minibuffers ange-ftp-netrc-default-user ange-ftp-parse-netrc gethash t read-string format "User for %s: " user-login-name ange-ftp-set-user] 5 (#$ . 15351)])
(defalias 'ange-ftp-generate-passwd-key '(macro . #[(host user) "\302\303D\303	D\304\305D\306	FF\207" [host user and stringp concat downcase "/"] 7]))
(defalias 'ange-ftp-lookup-passwd '(macro . #[(host user) "\302\303	E\304BB\207" [host user gethash ange-ftp-generate-passwd-key (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 password) "\304;\205	;\205\227\305	Q\n#\207" [host user password ange-ftp-passwd-hashtable puthash "/"] 4 (#$ . 16105) (list (read-string "Host: ") (read-string "User: ") (read-passwd "Password: "))])
#@55 Given a USER, return a host we know the password for.
(defalias 'ange-ftp-get-host-with-passwd #[(user) "\300 \210\301\302\215\207" [ange-ftp-parse-netrc found-one (byte-code "\303\304\"\210\305 \306\216\303\307\n\"\210*\310\207" [ange-ftp-user-hashtable save-match-data-internal ange-ftp-passwd-hashtable maphash #[(host val) "\303;\205	;\205\227\304	Q\n\"\205\305\306\"\207" [host user ange-ftp-passwd-hashtable gethash "/" throw found-one] 4] match-data ((byte-code "\301\302\"\207" [save-match-data-internal set-match-data evaporate] 3)) #[(key value) "\304\305\"\205 \306\307\224O\n\307\225\310O\230\205\205\311\312	\")\207" [key host user value string-match "\\`[^/]*\\(/\\).*\\'" 0 1 nil throw found-one] 4] nil] 3)] 2 (#$ . 16429)])
#@76 Return the password for specified HOST and USER, asking user if necessary.
(defalias 'ange-ftp-get-passwd #[(host user) "\203	\306\300\211\"\210\307 \210\310	;\205\n;\205	\227\311\nQ\"\206\245\f;\2032
\2032\n\f\230\2032
\207;\203G\203G\n\230\203G\207\n\312\230\204S\n\313\230\203d\203d;\203a\207\207\314\315\n!\211\203\222\316\317\320\n	\n%\321\310;\205\214\n;\205\214\227\311\nQ\"#\202\231\316\317\322\n	#!\323	\n#\210+\207" [non-essential host user ange-ftp-passwd-hashtable ange-ftp-default-user ange-ftp-default-password throw ange-ftp-parse-netrc gethash "/" "anonymous" "ftp" t ange-ftp-get-host-with-passwd read-passwd format "passwd for %s@%s (default same as %s@%s): " nil "Password for %s@%s: " ange-ftp-set-passwd ange-ftp-netrc-default-user ange-ftp-netrc-default-password ange-ftp-generate-anonymous-password user-mail-address enable-recursive-minibuffers other passwd] 8 (#$ . 17198)])
#@75 For a given HOST and USER, set or change the associated ACCOUNT password.
(defalias 'ange-ftp-set-account #[(host user account) "\304;\205	;\205\227\305	Q\n#\207" [host user account ange-ftp-account-hashtable puthash "/"] 4 (#$ . 18159) (list (read-string "Host: ") (read-string "User: ") (read-passwd "Account password: "))])
#@48 Given a HOST and USER, return the FTP account.
(defalias 'ange-ftp-get-account #[(host user) "\306 \210\307;\205	;\205\227\310	Q\n\"\2064;\203'	\230\203'\f\2064
;\2054	
\230\2054	\207" [host user ange-ftp-account-hashtable ange-ftp-default-user ange-ftp-default-account ange-ftp-netrc-default-user ange-ftp-parse-netrc gethash "/" ange-ftp-netrc-default-account] 4 (#$ . 18499)])
#@73 Return the filename that FILE references, following all symbolic links.
(defalias 'ange-ftp-chase-symlinks #[(file) "\302\303	!\211\203\304!\203\202\305	!P\202)	\207" [temp file nil ange-ftp-real-file-symlink-p file-name-absolute-p file-name-directory] 2 (#$ . 18900)])
(defalias 'ange-ftp-parse-netrc-token #[(token limit) "\303	\304#\2051\305\306	w\210g\307=\203'\310u\210`\311	w\210\310u\210\n`S{\2020`\312	w\210\n`{)\207" [token limit beg search-forward t nil ", 	
\n" 34 1 "^\"" "^, 	
\n"] 4])
(defalias 'ange-ftp-parse-netrc-group #[nil "`\212\306\307!\203\310\311w\210\312\311w\210\310\311w\210\202\310\311w\210\313\314\311\315#\203(\316\224\202)d)\311\211\211\211\317\320\f\"\317\321\f\"\317\322\f\"\317\323\f\"\203h\n\203h\324\n\"\210\325\n	#\210\203\227\326\n#\210\202\227
b\210\327\330\f\315#\203\227\317\321\f\"\317\322\f\"\317\323\f\"\n\203\211\n	\203\220	\203\227\fb.\207" [account password login machine end start looking-at "machine\\>" "^ 	
\n" nil " 	
\n" re-search-forward "machine\\>\\|default\\>" t 0 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-netrc-default-user ange-ftp-netrc-default-password ange-ftp-netrc-default-account] 6])
(defalias 'ange-ftp-parse-netrc #[nil "\306\211\307\310\311!!\312	!)\205\220\3138\f\232?\205\220\314 \315\216&\204:\3168\317 =\203\201\320\321\3228\"\203\201r\323\324!q\210\325	!\210	'\326	!\327\330!\210\331\332!\210\306'eb\210\333\334\306\330#\203h\335\336!\210\202Yeb\210\337\306w\210m\204y\340 \210\202o\341p!\210)\202\212\342\343\"\210\344\345!\210\3138\211**\207" [attr file default-directory ange-ftp-netrc-filename ange-ftp-netrc-modtime save-match-data-internal nil "/" ange-ftp-chase-symlinks ange-ftp-real-expand-file-name ange-ftp-real-file-attributes 5 match-data ((byte-code "\301\302\"\207" [save-match-data-internal set-match-data evaporate] 3)) 2 user-uid string-match ".r..------" 8 generate-new-buffer "*ftp-.netrc*" ange-ftp-real-insert-file-contents file-name-directory normal-mode t run-hooks find-file-hook search-forward-regexp "^[ 	]*#.*$" replace-match "" " 	
\n" ange-ftp-parse-netrc-group kill-buffer ange-ftp-message "%s either not owned by you or badly protected." sit-for 1 ange-ftp-disable-netrc-security-check buffer-file-name] 4 nil nil])
(defalias 'ange-ftp-generate-root-prefixes #[nil "\304 \210\305 \306\216\307\310\311\n\"\210\310\312\"\210	\206\307C+\207" [save-match-data-internal res ange-ftp-passwd-hashtable ange-ftp-user-hashtable ange-ftp-parse-netrc match-data ((byte-code "\301\302\"\207" [save-match-data-internal set-match-data evaporate] 3)) nil maphash #[(key value) "\304\305\"\205\306\307\224O\307\225\310O	\311\n\312RB\211*\207" [key user host res string-match "\\`[^/]*\\(/\\).*\\'" 0 1 nil "@" ":"] 4] #[(host user) "\302P	B\211\207" [host res ":"] 2]] 3])
#@50 Extract the Nth FTP file name component from NS.
(defalias 'ange-ftp-ftp-name-component '(macro . #[(n ns name) "\303\304\305	EDC\306\304\nEE\207" [n ns name let elt nth match-string] 5 (#$ . 21896)]))
(defvar ange-ftp-ftp-name-arg "")
(defvar ange-ftp-ftp-name-res nil)
(defalias 'ange-ftp-ftp-name #[(name) "	\230\203\n\207\306 \307\216\310\f@\"\205T\fA\211@
\311
\")
A@
\311
\")\312
8
\311
\")\313G!\203M\314!E,*\211\207" [name ange-ftp-ftp-name-arg ange-ftp-ftp-name-res save-match-data-internal ange-ftp-name-format ns match-data ((byte-code "\301\302\"\207" [save-match-data-internal set-match-data evaporate] 3)) posix-string-match match-string 2 zerop ange-ftp-get-user elt host user] 4])
(defalias 'ange-ftp-replace-name-component #[(fullname name) "\306 \307\216\310	@\n\"\205!	A\3118\n\312\f\224O
\n\f\225\313OQ**\207" [save-match-data-internal ange-ftp-name-format fullname ns elt name match-data ((byte-code "\301\302\"\207" [save-match-data-internal set-match-data evaporate] 3)) posix-string-match 2 0 nil] 5])
#@74 Clear any existing minibuffer message; let the minibuffer contents show.
(defalias 'ange-ftp-repaint-minibuffer #[nil "\300\301!\207" [message nil] 2 (#$ . 22972)])
(defalias 'ange-ftp-ftp-process-buffer #[(host user) "\302\303	\304\260\207" [user host "*ftp " "@" "*"] 5])
(defalias 'ange-ftp-error #[(host user msg) "\212\305 \306\307\310\311\n\"!!\210db\210\312	!\210*\313\314\315\316\f\"C\")\207" [pop-up-windows cur host user msg selected-window t pop-to-buffer get-buffer-create ange-ftp-ftp-process-buffer select-window signal ftp-error format "FTP Error: %s"] 5])
#@69 Set correct modes for the current buffer if visiting a remote file.
(defalias 'ange-ftp-set-buffer-mode #[nil ";\205\302!\205\303	!\207" [buffer-file-name ange-ftp-auto-save ange-ftp-ftp-name auto-save-mode] 2 (#$ . 23555)])
#@185 Kill the FTP process associated with BUFFER (the current buffer, if nil).
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 #[(&optional buffer) "\204	p\202
\306!\307!\206rq\210	)\211\2059\310\311\n!!\211\2058@A@\312\306\313
\f\"!!*))\207" [buffer default-directory file parsed user host get-buffer buffer-file-name ange-ftp-ftp-name expand-file-name kill-buffer ange-ftp-ftp-process-buffer] 6 (#$ . 23793) "bKill FTP process associated with buffer: "])
#@66 Quote any characters in STRING that may confuse the FTP process.
(defalias 'ange-ftp-quote-string #[(string) ";\203	\301!\207\302\207" [string shell-quote-argument ""] 2 (#$ . 24368)])
(defalias 'ange-ftp-barf-if-not-directory #[(directory) "\301!\206\302\303\304\305!\203\306\202\307E\"\207" [directory file-directory-p 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) "\306	\"\203\307\310\311	\"!\312\245\211\207\306	\"\203\313\207\306\f	\"\203/\314\313\314	\211\207\306	\"\203<\313\211\207\306	\"\203M\315\316!\210	\313\207\306	\"\203a\317!\210\314	\211\207\203h\313\207\314	\211\207" [ange-ftp-xfer-size-msgs line ange-ftp-xfer-size ange-ftp-skip-msgs ange-ftp-good-msgs ange-ftp-process-busy string-match string-to-number match-string 1 1024 t nil make-local-variable ange-ftp-pending-error-line delete-process ange-ftp-process-result ange-ftp-process-result-line ange-ftp-multi-msgs ange-ftp-process-multi-skip ange-ftp-potential-error-msgs ange-ftp-fatal-msgs proc] 4 (#$ . 24811)])
#@49 Set the size of the next FTP transfer in bytes.
(defalias 'ange-ftp-set-xfer-size #[(host user bytes) "\306	\"\211\205(\307\n!\211\205'rq\210\f\250\203!\310\f\311\"\202$\f\312\245\211)))\207" [host user proc buf bytes ange-ftp-xfer-size ange-ftp-get-process process-buffer ash -10 1024] 4 (#$ . 25661)])
#@57 Remove hash marks from STRING and display count so far.
(defalias 'ange-ftp-process-handle-hash #[(string) "\306\211\224O\306\225\307OP\306\225\306\224Z	\\\n\203h\203h\f\203h\310 \311 =\204h\312\313!\204h
\204h\314\n	_\315\"\316!\203K\317\320#\210\202g\321_\245\211=\204f\317\322#\210))\207" [string ange-ftp-hash-mark-count ange-ftp-hash-mark-unit ange-ftp-process-msg ange-ftp-process-verbose cursor-in-echo-area 0 nil selected-window minibuffer-window boundp search-message ash -6 zerop ange-ftp-message "%s...%dk" 100 "%s...%d%%" kbytes ange-ftp-xfer-size percent ange-ftp-last-percent] 5 (#$ . 25980)])
(defalias 'ange-ftp-call-cont #[(cont result line) "\205<\203@\303=\204\304@	\nA$\207	\n\"\207" [cont result line lambda apply] 5])
(defalias 'ange-ftp-process-filter #[(proc str) "\306\307\"\203\310\311\312\211$\202\313\314	!!\205\325r\314	!q\210\n\203.\306\315\"\203.\316!\317	\"\210\320	!{\n\203M\fP\306\321\f\"\203M\322	\323\"\210\n\203\234\306\323\f\"\203\234\f\324\211\224O\312\f\324\225\312O\306\325\"\203|\326\324\225\312O\202g
\203\205\204\216\327	\"\210\202\230\330	!\210\312*\202M\n?\205\324\324 !\203\277\"\203\277#\203\277\331\332!\"\210\333 \210\312!$\205\324$%\312$\334%##))\207" [str proc ange-ftp-process-busy comint-last-output-start ange-ftp-process-string seen-prompt string-match "+" replace-match "" nil buffer-live-p process-buffer "^#+$" ange-ftp-process-handle-hash comint-output-filter process-mark "Password: *$" process-send-string "\n" 0 "\\`ftp> *" t ange-ftp-process-handle-line delete-process ange-ftp-message "%s...done" ange-ftp-repaint-minibuffer ange-ftp-call-cont line ange-ftp-pending-error-line ange-ftp-process-result-line ange-ftp-xfer-size ange-ftp-process-msg ange-ftp-process-verbose ange-ftp-process-result ange-ftp-process-continue cont] 5])
#@65 When FTP process changes state, nuke all file-entries in cache.
(defalias 'ange-ftp-process-sentinel #[(proc str) "\305!\306\307	\"\203\310\311	\"\310\312	\"\313\n\"\210*)\314\211\207" [proc name host user ange-ftp-ls-cache-file process-name string-match "\\*ftp \\([^@]+\\)@\\([^*]+\\)\\*" match-string 1 2 ange-ftp-wipe-file-entries nil] 4 (#$ . 27899)])
#@70 Return whether to access this HOST via a normal (non-smart) gateway.
(defalias 'ange-ftp-use-gateway-p #[(host) "?\205	\n\306\307	\310
\f#,?\207" [ange-ftp-smart-gateway ange-ftp-local-host-regexp host start string regexp nil t string-match inhibit-changing-match-data] 4 (#$ . 28270)])
#@58 Returns whether to access this HOST via a smart gateway.
(defalias 'ange-ftp-use-smart-gateway-p #[(host) "\205	\n\306\307	\310
\f#,?\207" [ange-ftp-smart-gateway ange-ftp-local-host-regexp host start string regexp nil t string-match inhibit-changing-match-data] 4 (#$ . 28571)])
#@50 This routine will return the name of a new file.
(defalias 'ange-ftp-make-tmp-name #[(host &optional suffix) "\304\305!\203	\202\f\n\306#\207" [host ange-ftp-gateway-tmp-name-template ange-ftp-tmp-name-template suffix make-temp-file ange-ftp-use-gateway-p nil] 4 (#$ . 28865)])
#@33 Force to delete temporary file.
(defalias 'ange-ftp-del-tmp-name #[(filename) "\301!\207" [filename delete-file] 2 (#$ . 29154)])
(defvar ange-ftp-gwp-running t)
(defvar ange-ftp-gwp-status nil)
(defalias 'ange-ftp-gwp-sentinel #[(proc str) "\301\211\207" [ange-ftp-gwp-running nil] 2])
(defalias 'ange-ftp-gwp-filter #[(proc str) "\306	\"\210r\307!q\210\n\310!{)\311\312	\"\203%\313\314\315\f!)\316P\"\207\311\317	\"\2038\313\320\f\315\f!\"\316P\"\207\311
	\"\203H\321!\210\322\211\207\311	\"\205W\322\314\211\207" [proc str comint-last-output-start ange-ftp-default-user ange-ftp-gateway-host ange-ftp-gateway-fatal-msgs comint-output-filter process-buffer process-mark string-match "login: *$" process-send-string t ange-ftp-get-user "\n" "Password: *$" ange-ftp-get-passwd 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) "\203	\306\300\211\"\210\307\310\n\211\f$)\311\312
\313#\314\315\"\210\316\317\"\210\320\321\"\210r\322!q\210db\210\323!`\315\223\210)\307 \315!\324\325\f\"\210 \203X\326!\210\202K!\204e\327\"#\330#\210\324\331\f\"\210\307 \315!\332$\"\210 \203\204\326!\210\202w!\204\221\327\"#\333#\210\307 \315!\332\334\335Q\"\210*\207" [non-essential process-connection-type name ange-ftp-gateway-program ange-ftp-gateway-host args throw t start-process mapconcat identity " " set-process-query-on-exit-flag nil set-process-sentinel ange-ftp-gwp-sentinel set-process-filter ange-ftp-gwp-filter process-buffer process-mark ange-ftp-message "Connecting to gateway %s..." accept-process-output ange-ftp-error "unable to login to gateway" "Connecting to gateway %s...done" process-send-string "unable to set terminal modes on gateway" "exec " "\n" ftp proc ange-ftp-gwp-running ange-ftp-gwp-status host user ange-ftp-gateway-setup-term-command] 5 (#$ . 30056)])
#@625 Low-level routine to send the given FTP CMD to the FTP process PROC.
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) "\306!\307>\205\220r\310!q\210\311!\210\312\211\313\314\211\315\316\317P\203@ \203@\320\321\"\210db\210!`\314\223\210\322 \"\323\216\324\325\"\203d\315\211\225O\326\261\210\202hc\210*#`\314\223\210\327\"\210\330!`\314\223\210$?\205\217\311!\210?\205\217\f\nB)\207" [proc ange-ftp-process-string ange-ftp-process-result-line ange-ftp-process-busy ange-ftp-process-result ange-ftp-process-multi-skip process-status (run open) process-buffer ange-ftp-wait-not-busy "" t nil 0 -1 "\n" ange-ftp-message "%s..." match-data ((byte-code "\301\302\"\207" [save-match-data-internal set-match-data evaporate] 3)) string-match "\\`user \"[^\"]*\"" " Turtle Power!\n" process-send-string process-mark msg ange-ftp-process-msg cont ange-ftp-process-continue ange-ftp-hash-mark-count ange-ftp-last-percent cmd ange-ftp-process-verbose comint-last-input-start save-match-data-internal comint-last-input-end nowait] 4 (#$ . 31170)])
(defalias 'ange-ftp-wait-not-busy #[(proc) "r\301!q\210\302\303\304\217)\207" [proc process-buffer nil (byte-code "\304\211\n\205\305!\210\202*\207" [inhibit-quit quit-flag ange-ftp-process-busy proc nil accept-process-output] 2) ((quit (byte-code "\301!\210\302\303\304\"\207" [proc delete-process signal quit nil] 3)))] 3])
#@67 Attempt to resolve the given HOSTNAME using nslookup if possible.
(defalias 'ange-ftp-nslookup-host #[(hostname) "\203R\306	!\203	\202\n\307\310\311\211\f$)\f\312\313\"\210r\314!q\210\315!\316>\203;\317!\210\202*eb\210\320\321\313\307#\203J\322\323!\324p!\210)
+\207\f\207" [ange-ftp-nslookup-program default-directory exec-directory process-connection-type hostname res file-accessible-directory-p t start-process " *nslookup*" set-process-query-on-exit-flag nil process-buffer process-status (run open) accept-process-output re-search-forward "Name:.*\nAddress: *\\(.*\\)$" match-string 1 kill-buffer proc] 6 (#$ . 33178) "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) "\203	\306\300\211\"\210\307	!?\205\310	!\n\204\f\203\"
\202$#$\311$C%\"&\312'\313(!\203>(\202@)(\312*\314\315+!\316,!-+.r-q\210\317 \210)\320\321\322\"\210\n\203\214/\203y\323	0,&$*\202\226\324\325,\211\3111D&\"$*\202\226\324\325,\211&$*+r\326*!q\210db\210\327*!`\312\223\210)\330*\312\"\210\331*\332\"\210\333*\334\"\2102\335=\203\317\336*\337\"\210\340*\341\"\210\342*!\210*.\207" [non-essential host use-gateway ange-ftp-gateway-host use-smart-ftp ange-ftp-gateway-ftp-program-name throw ange-ftp-use-gateway-p ange-ftp-use-smart-gateway-p append nil file-accessible-directory-p t copy-tree get-buffer-create internal-ange-ftp-mode setenv "TERM" "dumb" ange-ftp-gwp-start apply start-process process-buffer process-mark set-process-query-on-exit-flag set-process-sentinel ange-ftp-process-sentinel set-process-filter ange-ftp-process-filter windows-nt set-process-coding-system raw-text-dos process-send-string "help foo\n" accept-process-output ange-ftp-ftp-program-name ftp-prog ange-ftp-ftp-program-args args file-name-handler-alist default-directory exec-directory proc process-environment name buffer process-connection-type ange-ftp-gateway-program-interactive user ange-ftp-gateway-program system-type] 7 (#$ . 33846)])
(byte-code "\300\301N\204\302\300\301\303\304!#\210\305\306!\204\302\306\307\310#\210\300\207" [internal-ange-ftp-mode-hook variable-documentation put purecopy "Hook run when entering Internal Ange-ftp mode.\nNo problems result if this variable is not bound.\n`add-hook' automatically binds it.  (This is true for all hook variables.)" boundp internal-ange-ftp-mode-map definition-name internal-ange-ftp-mode] 5)
(defvar internal-ange-ftp-mode-map (make-sparse-keymap))
(byte-code "\300\301N\204\302\300\301\303\304!#\210\305\306!\204\302\306\307\310#\210\300\207" [internal-ange-ftp-mode-map variable-documentation put purecopy "Keymap for `internal-ange-ftp-mode'." boundp internal-ange-ftp-mode-syntax-table definition-name internal-ange-ftp-mode] 5)
(defvar internal-ange-ftp-mode-syntax-table (make-syntax-table))
(byte-code "\300\301N\204\302\300\301\303\304!#\210\302\305\306\307#\207" [internal-ange-ftp-mode-syntax-table variable-documentation put purecopy "Syntax table for `internal-ange-ftp-mode'." internal-ange-ftp-mode-abbrev-table definition-name internal-ange-ftp-mode] 5)
(defvar internal-ange-ftp-mode-abbrev-table (progn (define-abbrev-table 'internal-ange-ftp-mode-abbrev-table nil) internal-ange-ftp-mode-abbrev-table))
(byte-code "\300\301N\204\302\300\301\303\304!#\210\302\305\306\307#\207" [internal-ange-ftp-mode-abbrev-table variable-documentation put purecopy "Abbrev table for `internal-ange-ftp-mode'." internal-ange-ftp-mode derived-mode-parent comint-mode] 5)
#@238 Major mode for interacting with the FTP process.

\{comint-mode-map}

In addition to any hooks its parent mode `comint-mode' might have run,
this mode runs the hook `internal-ange-ftp-mode-hook', as the final step
during initialization.
(defalias 'internal-ange-ftp-mode #[nil "\306\300!\210\307\310 \210\311\312\310\313N\203\314\311\313\310\313N#\210\315!\204'\316\317 \"\210\320\f!\211\2036
\321 =\203<\322\f\323 \"\210)\324.\325\"\204V./=\204V\326.\325/C#\210\327!\210\330\f!\210./\306\331!\210\332\306\333!\210\306\334!\210\306\335!\210\306\336!\210\306\337!\210\306\340!\210\306\341!\210\306\342!\210\306\343!\210\306\344!\210\306\345!\210\306\346!\210\347\211!%\332\3500\306\351!\210\352)\306\353!\2100+)\354\355!\207" [delay-mode-hooks major-mode mode-name internal-ange-ftp-mode-map internal-ange-ftp-mode-syntax-table parent make-local-variable t comint-mode internal-ange-ftp-mode "Internal Ange-ftp" mode-class put keymap-parent set-keymap-parent current-local-map char-table-parent standard-syntax-table set-char-table-parent syntax-table abbrev-table-get :parents abbrev-table-put use-local-map set-syntax-table 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-password-prompt-regexp "\\`a\\`" paragraph-start run-mode-hooks internal-ange-ftp-mode-hook internal-ange-ftp-mode-abbrev-table local-abbrev-table comint-prompt-regexp] 6 (#$ . 36892) nil])
#@121 Use raw FTP commands for login, if account password is not nil.
Some FTP implementations need this, e.g. ftp in NT 4.0.
(custom-declare-variable 'ange-ftp-raw-login nil '(#$ . 38591) :group 'ange-ftp :version "21.3" :type 'boolean)
#@185 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 password account proc) "\306\307\310\311	!\n#\307\312	##\211@\204\313
\314\fAP#\210\306\307\315
\311!%\307\316
##\211@\206K\317
\320#\210\321
\320#\210\313
\322\fAP#)\207" [proc ange-ftp-gateway-host ange-ftp-smart-gateway-port host result user ange-ftp-raw-send-cmd format "open %s %s" ange-ftp-nslookup-host "Opening FTP connection to %s via %s" ange-ftp-error "OPEN request failed: " "user \"%s\"@%s %s %s" "Logging in as user %s@%s" ange-ftp-set-passwd nil ange-ftp-set-account "USER request failed: " password account] 9 (#$ . 38830)])
#@193 Connect to the FTP-server on HOST as USER using PASSWORD and ACCOUNT.
PROC is the process to the FTP-client.  HOST may have an optional
suffix of the form #PORT to specify a non-default port.
(defalias 'ange-ftp-normal-login #[(host user password account proc) "\306 \307\216\310\311	\"\210\312\313\314	\"!\313\315	\"\316\f\203$\317\320\n#\202(\317\321\n\"\317\322	\"#\211@\204=\323	&\324
AP#\210'\203I\325(\231\204w\316\f\326	!\203c)\203c\317\327&\n*(%\202l\317\330&*($\317\331&	##\202\353+,-.+\332P+\310\333,\"\203\226\334\325\335\211,$,\310\336,\"\203\247\334\325\335\211,$,\316\f\317\337&\"\317\331&	##\211@\203\342\316\f\317\340*\"\317\331&	##\211\203\342
@\203\342\316\f\317\341(\"\317\331&	##.+-,*
@\206\342	&\343#\210\344	&\343#\210\323	&\345
AP#-\207" [save-match-data-internal host nshost port proc result match-data ((byte-code "\301\302\"\207" [save-match-data-internal set-match-data evaporate] 3)) string-match "\\`\\([^#]+\\)\\(#\\([0-9]+\\)\\)?\\'" ange-ftp-nslookup-host match-string 1 3 ange-ftp-raw-send-cmd format "open %s %s" "open %s" "Opening FTP connection to %s" ange-ftp-error "OPEN request failed: " "" ange-ftp-use-smart-gateway-p "user \"%s\"@%s %s %s" "user \"%s\" %s %s" "Logging in as user %s@%s" "\\|^331 \\|^332 " "\\\\|\\^331 " replace-match t "\\\\|\\^332 " "quote \"USER %s\"" "quote \"PASS %s\"" "quote \"ACCT %s\"" ange-ftp-set-passwd nil ange-ftp-set-account "USER request failed: " user ange-ftp-raw-login account ange-ftp-gateway-host password ange-ftp-good-msgs ange-ftp-skip-msgs skip good] 9 (#$ . 39625)])
#@68 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]+\\)" (#$ . 41246))
(defalias 'ange-ftp-guess-hash-mark-size #[(proc) "\205<r\306	!q\210\307	\310\"\211A\311 \312\216\313
\"\205;\314\315\316\"!\211\317\320\"\206:\211)-\207" [ange-ftp-send-hash proc status line save-match-data-internal ange-ftp-hash-mark-msgs process-buffer ange-ftp-raw-send-cmd "hash" match-data ((byte-code "\301\302\"\207" [save-match-data-internal set-match-data evaporate] 3)) string-match string-to-number match-string 1 ash -4 size ange-ftp-ascii-hash-mark-size ange-ftp-hash-mark-unit ange-ftp-binary-hash-mark-size] 5])
(defvar ange-ftp-process-startup-hook nil)
#@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) "\306	\"\307\n!\211\203\310!\311>\203\202\223\f\203\"\312\304\211\"\210\203*\313!\210\314\315	\"!\314\316	\"!\317	\n#\320!\203V\203V\321	
%\210\202_\322	
%\210\323!\210\324	\"\210\325\326\327#\206z \205z\330\211!\203\206\331!\"\210*	\"#\332\333!\210,*\207" [host user name proc non-essential account ange-ftp-ftp-process-buffer get-process process-status (run open) throw delete-process ange-ftp-quote-string ange-ftp-get-passwd ange-ftp-get-account ange-ftp-start-process ange-ftp-use-smart-gateway-p ange-ftp-smart-login ange-ftp-normal-login ange-ftp-guess-hash-mark-size ange-ftp-guess-host-type t assoc-default string-match "on" ange-ftp-passive-mode run-hooks ange-ftp-process-startup-hook pass ange-ftp-gateway-host case-fold-search ange-ftp-passive-host-alist ange-ftp-try-passive-mode passive ange-ftp-this-host ange-ftp-this-user] 7 (#$ . 41995)])
(defalias 'ange-ftp-passive-mode #[(proc on-or-off) "\302\303P\304	\305P\306\307$A\"\203\310\306P!\207\311\312!\207" [on-or-off proc string-match "Passive mode " ange-ftp-raw-send-cmd "passive " "Trying passive mode..." nil ange-ftp-message error "Trying passive mode...failed"] 7])
(defvar ange-ftp-host-cache nil)
(defvar ange-ftp-host-type-cache nil)
#@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) "\204\304\207	=\203\n\207\203!\305\"\203!	=\203!\n\207\306!\203-\307\202~\310\311!\203=\311!\203=\312\202~\310\313!\203M\313!\203M\314\202~\310\315!\203]\315!\203]\316\202~\310\317!\203m\317!\203m\320\202~\310\321!\203}\321!\203}\322\202~\304\211\207" [host ange-ftp-host-cache ange-ftp-host-type-cache user unix 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 ange-ftp-bs2000-posix-host text-unix ange-ftp-bs2000-host bs2000] 3 (#$ . 43416)])
#@211 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 (#$ . 44197))
#@229 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 (#$ . 44469))
#@67 List of host types that can't take UNIX ls-style listing options.
(defvar ange-ftp-dumb-host-types '(dumb-unix) (#$ . 44762))
#@247 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\306\211\211\211\211 !\"#$%$\203\351\3078 \310\n	\"%\311=\203\235&\236A\206@\312$!$\3138\314=\203g\315\316$\"\203g\315\317\"\204g$\320P$\315\321$\"\203{\322\n	A@\323$\320$'>\204\351\324%$\320\232\204\226\322\n	A@\323$$\202\351(\236A\206\247\312%\325>\203\270
$!$\202\351%\326>\204\315%\327=\203\326$\330\235\203\326
 ! \202\351%\331=\203\351
$!$
 ! \332%!\211%$\205\371\321$P \205\321 PQ\f:\203\f@\204\f\202@\306\211)*\333\334\n	\"\335\n	+,\257,%\210,?\205?+?\205?*)B*.\n\207" [cmd user host msg result fix-name-func nil 2 ange-ftp-host-type dir identity 3 unix string-match "/\\'" "R" "." " " ange-ftp-cd noerror ls (get delete mkdir rmdir cd) (append put chmod) quote ("mdtm" "size") rename symbol-name ange-ftp-raw-send-cmd ange-ftp-get-process #[(result line host user cmd msg cont nowait) "\204		\203\306	#\207\307\310
\n\"\f\311D
%\207" [cont result afsc-result line afsc-line host ange-ftp-call-cont ange-ftp-raw-send-cmd ange-ftp-get-process #[(result line cont) "\204	\305	#\207" [cont result afsc-result line afsc-line ange-ftp-call-cont] 4] user cmd msg nowait] 6] host-type cmd3 cmd2 ange-ftp-this-msg ange-ftp-this-host ange-ftp-this-user cmd1 cmd0 ange-ftp-fix-dir-name-func-alist ange-ftp-dumb-host-types ange-ftp-fix-name-func-alist afsc-line afsc-result cont nowait] 12 (#$ . 44895)])
(defconst ange-ftp-cms-name-template "^[-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]$")
(defconst ange-ftp-vms-name-template "^[-A-Z0-9_$]+:\\[[-A-Z0-9_$]+\\(\\.[-A-Z0-9_$]+\\)*\\]$")
(defconst ange-ftp-mts-name-template "^[A-Z0-9._][A-Z0-9._][A-Z0-9._][A-Z0-9._]:$")
#@39 Valid pubset for an BS2000 file name.
(defconst ange-ftp-bs2000-filename-pubset-regexp ":[A-Z0-9]+:" (#$ . 47008))
#@41 Valid username for an BS2000 file name.
(defconst ange-ftp-bs2000-filename-username-regexp "\\$[A-Z0-9]*\\." (#$ . 47129))
#@57 Valid prefix for an BS2000 file name (pubset and user).
(defconst ange-ftp-bs2000-filename-prefix-regexp (concat ange-ftp-bs2000-filename-pubset-regexp ange-ftp-bs2000-filename-username-regexp) (#$ . 47258))
(defconst ange-ftp-bs2000-name-template (concat "^" ange-ftp-bs2000-filename-prefix-regexp "$"))
#@87 Guess the host type of HOST.
Works by doing a pwd and examining the directory syntax.
(defalias 'ange-ftp-guess-host-type #[(host user) "\306!\307	\310R\211\311=\203\336\312 \313\216\314	\"\211@!\315\"!\204C\316\317!\210\320\321!\210\322\323
A\"\203\272\324!\210#\325$\202\272\322%!\"\203Y\326!\210#\327$\202\272\322&!\"\203o\330!\210#\331$\202\272\322'!\"\203\205\324!\210#\325$\202\272\332!\203\230\333!\210#\334$\202\272\322(!\"\203\264\332!\204\264\333!\210#\335$\202\272#\311$	)*$+\236A\211\"\203\324\"!\336\"!*\337\n!,#\210-\325=\205\f\340\n,\"?\205\f\314	\"@\211!\203\337\n\307!P,#\202\316\317!\210\320\321!)*\207" [host user key host-type save-match-data-internal result ange-ftp-host-type "/" "/~" unix match-data ((byte-code "\301\302\"\207" [save-match-data-internal set-match-data evaporate] 3)) ange-ftp-get-pwd nil message "Warning! Unable to get home directory" sit-for 1 string-match "^450 No current working directory defined$" ange-ftp-add-cms-host cms ange-ftp-add-vms-host vms ange-ftp-add-mts-host mts ange-ftp-bs2000-posix-host ange-ftp-add-bs2000-host text-unix bs2000 reverse puthash ange-ftp-hash-entry-exists-p dir fix-name-func ange-ftp-host-cache ange-ftp-host-type-cache ange-ftp-vms-name-template ange-ftp-mts-name-template ange-ftp-cms-name-template ange-ftp-bs2000-name-template ange-ftp-this-host ange-ftp-this-user ange-ftp-fix-name-func-alist ange-ftp-expand-dir-hashtable] 6 (#$ . 47569)])
(defalias 'ange-ftp-dumb-unix-host #[(host) "\205	\205	\306\307\310\f\n#,\207" [host ange-ftp-dumb-unix-host-regexp start string regexp inhibit-changing-match-data nil t string-match] 4])
#@69 Interactively add a given HOST to `ange-ftp-dumb-unix-host-regexp'.
(defalias 'ange-ftp-add-dumb-unix-host #[(host) "\303!?\205\304\305!\306	\205\307	\260\310\211\207" [host ange-ftp-dumb-unix-host-regexp ange-ftp-host-cache ange-ftp-dumb-unix-host "^" regexp-quote "$" "\\|" nil] 5 (#$ . 49287) (list (read-string "Host: " (let ((name (or (buffer-file-name) default-directory))) (and name (car (ange-ftp-ftp-name name))))))])
#@203 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 (#$ . 49730))
#@70 Normal hook run before parsing the text of an FTP directory listing.
(defvar ange-ftp-before-parse-ls-hook nil (#$ . 49995))
#@69 Normal hook run after parsing the text of an FTP directory listing.
(defvar ange-ftp-after-parse-ls-hook nil (#$ . 50126))
#@243 Return the output of a `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) "\306\307\"\203\310\311\312\313$\314	!\315\n!\211\203K@A@\316\3178!3\320\n!4\321\f
\"\21156>7\312\21189\312\211:;3\311\230\203U\322\323\f
\324#!3<\203s4<\230\203s7\204n=\230\203s>\202F\325\f!9?\203\221\326\f
\3273!#\210\330	9F:\202\232\33139F:\332\216\333\f
:\334\335\336\n!\"$\2118@\2036r\337@!q\210\340 \210\3419!\203\310\3429!\210\202\346\343A!\210\3419!\203\334\3429!\210\202\346\344\f
\334\3459\"#\210\346\347\312\313#\203\365\310\311!\210\202\346\350b\210\351\352!\210B\203\353\n5C\236A\211;\203; \202\354!\"\210\351\355!\2104<=\356 \211>\357\232?\2052>)\202ED?\205E\344\f
\3608AP#).\n\202N\361\362!*\207" [lsargs file ange-ftp-this-file parsed host user string-match "^--dired\\s-+" replace-match "" nil t ange-ftp-expand-file-name ange-ftp-ftp-name ange-ftp-quote-string 2 directory-file-name ange-ftp-host-type ange-ftp-real-file-name-as-directory ange-ftp-expand-dir "~" ange-ftp-make-tmp-name ange-ftp-cd file-name-directory ls dir ((ange-ftp-del-tmp-name temp)) ange-ftp-send-cmd format "Listing %s" ange-ftp-abbreviate-filename get-buffer-create erase-buffer ange-ftp-real-file-readable-p ange-ftp-real-insert-file-contents sleep-for ange-ftp-error "list data file %s not readable" re-search-forward "
$" 1 run-hooks ange-ftp-before-parse-ls-hook ange-ftp-set-files ange-ftp-parse-dired-listing ange-ftp-after-parse-ls-hook buffer-string "total 0\n" "DIR failed: " error "Should never happen. Please report. Bug ref. no.: 1" name key host-type ange-ftp-dumb-host-types dumb result temp lscmd parse-func ange-ftp-ls-cache-file ange-ftp-ls-cache-lsargs ange-ftp-ls-cache-res wildcard ange-ftp-data-buffer-name ange-ftp-retry-time parse ange-ftp-parse-list-func-alist no-error] 9 (#$ . 50256)])
#@242 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 (#$ . 52372))
#@241 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 (#$ . 52676))
#@63 Add a file entry for file NAME, if its directory info exists.
(defalias 'ange-ftp-add-file-entry #[(name &optional dir-p) "\304\305!@!	\236A\206
\306\n\"\210\307\211\207" [name ange-ftp-add-file-entry-alist dir-p ange-ftp-ls-cache-file ange-ftp-host-type ange-ftp-ftp-name ange-ftp-internal-add-file-entry nil] 3 (#$ . 52981)])
#@68 Delete the file entry for file NAME, if its directory info exists.
(defalias 'ange-ftp-delete-file-entry #[(name &optional dir-p) "\304\305!@!	\236A\206
\306\n\"\210\307\211\207" [name ange-ftp-delete-file-entry-alist dir-p ange-ftp-ls-cache-file ange-ftp-host-type ange-ftp-ftp-name ange-ftp-internal-delete-file-entry nil] 3 (#$ . 53319)])
(defalias 'ange-ftp-parse-filename '(macro . #[nil "\300\207" [(save-match-data (let ((eol (progn (end-of-line) (point)))) (beginning-of-line) (if (re-search-forward directory-listing-before-filename-regexp eol t) (buffer-substring (point) eol))))] 1]))
(defalias 'ange-ftp-ls-parser #[(switches) "\306\307\310\";\205
\311\312\"\313\211\211\211'\314 (\315\216\313\210`)\316 \210\317*)\320#\2055`){+\211\203\340\316 \210\321\313w\210g\211\322=\f\323=\203p\311\324	\"\211+\203j	\325\225\311\326	\"O	\325+O\202l\327)\202r\313
\203\317	\327\230\204\317\330\331!\203\317\f\332=?\205\227\311\333\334\335!\334\336!\334\337!Q\",-\203\246\311\326	\"\204\311\n\203\261\311\340	\"\204\311,\203\275\311\341	\"\204\311-\203\316\311\342	\"\203\316	\325\343O*\344	\206\326\n'#\210\335y\210\202\344\345\320'#\210\344\346\320'#\210'.\207" [switches file directory symlink file-type used-F make-hash-table :test equal string-match "F" nil match-data ((byte-code "\301\302\"\207" [save-match-data-internal set-match-data evaporate] 3)) beginning-of-line re-search-forward t "	 0-9" 100 108 " -> " 0 "@\\'" "" looking-at ".[-r][-w]\\([^ ]\\)[-r][-w]\\([^ ]\\)[-r][-w]\\([^ ]\\)" 115 "[xst]" match-string 1 2 3 "/\\'" "*\\'" "=\\'" -1 puthash "." ".." tbl save-match-data-internal eol directory-listing-before-filename-regexp end executable socket] 8])
#@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 (#$ . 55063))
#@54 Interactively add a DIR to `ange-ftp-dl-dir-regexp'.
(defalias 'ange-ftp-add-dl-dir #[(dir) "\205\302	\"?\205\303\304	!\205\305R\211\207" [ange-ftp-dl-dir-regexp dir string-match "^" regexp-quote "\\|"] 4 (#$ . 55281) (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 "\300\207" [(let ((tbl (make-hash-table :test 'equal))) (while (not (eobp)) (puthash (buffer-substring (point) (progn (skip-chars-forward "^ /\n") (point))) (eq (following-char) 47) tbl) (forward-line 1)) (puthash "." t tbl) (puthash ".." t tbl) tbl)] 1]))
(defalias 'ange-ftp-parse-dired-listing #[(&optional switches) "\305 \306\216\307\310!\203\311y\210l\203\311y\210\312	!\202|\307\313!\203%\314\202|m\203-\314\202|\315\n\314\316#\203>\317 \210\312	!\202|\315\320\314\316#\203{\321!\210\317 \210\322\323\324\"m\204j\325`\326\314w\210`{g\327=\f#\210\311y\210\202R\325\330\316\f#\210\325\331\316\f#\210\f)\202|\314*\207" [save-match-data-internal switches directory-listing-before-filename-regexp ange-ftp-this-file tbl match-data ((byte-code "\301\302\"\207" [save-match-data-internal set-match-data evaporate] 3)) looking-at "^total [0-9]+$" 1 ange-ftp-ls-parser "[^\n]+\\( not found\\|: Not a directory\\)\n\\'" nil re-search-forward t beginning-of-line "^[^ \n	]+ +\\([0-9]+\\|-\\|=\\) " ange-ftp-add-dl-dir make-hash-table :test equal puthash "^ /\n" 47 "." ".."] 4])
#@70 For a given DIRECTORY, set or change the associated FILES hashtable.
(defalias 'ange-ftp-set-files #[(directory files) "\205\303\304	!\n#\207" [files directory ange-ftp-files-hashtable puthash file-name-as-directory] 4 (#$ . 56813)])
#@53 Return SWITCHES (a string) if suitable for our use.
(defalias 'ange-ftp-switches-ok #[(switches) ";\205\301\302\"\205\301\303\"\205\301\304\"?\205\207" [switches string-match "--\\(almost-\\)?all\\>\\|\\(\\`\\| \\)-[[:alpha:]]*[aA]" "\\(\\`\\| \\)-[[:alpha:]]*l" "--recursive\\>\\|\\(\\`\\| \\)-[[:alpha:]]*R"] 3 (#$ . 57057)])
#@178 Given a 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) "\306!\307	\"\2066\310 \311\216\312\313\303!\203\314!\206+\313\304!\203*\314\f!\206+\315\316
$\2055\307	\"*\207" [directory ange-ftp-files-hashtable save-match-data-internal dired-actual-switches dired-listing-switches no-error file-name-as-directory gethash match-data ((byte-code "\301\302\"\207" [save-match-data-internal set-match-data evaporate] 3)) ange-ftp-ls boundp ange-ftp-switches-ok "-al" t] 5 (#$ . 57405)])
(defalias 'ange-ftp-get-file-part '(macro . #[(name) "\301\302\303DDC\304BB\207" [name let file file-name-nondirectory ((if (string-equal file "") "." file))] 4]))
(defalias 'ange-ftp-allow-child-lookup '(macro . #[(dir file) "\302\303\304D\305	D\306BB\307BBD\207" [file dir not let* efile edir ((parsed (ange-ftp-ftp-name edir)) (host-type (ange-ftp-host-type (car parsed)))) ((or (and (boundp 'dired-local-variables-file) (stringp dired-local-variables-file) (string-equal dired-local-variables-file efile)) (and (eq host-type 'vms) (string-match "\\." efile)) (and (memq host-type '(mts cms)) (not (string-equal "/" (nth 2 parsed)))) (and (eq host-type 'bs2000) (string-match "\\." efile))))] 5]))
#@58 Given NAME, return whether there is a file entry for it.
(defalias 'ange-ftp-file-entry-p #[(name) "\306!\307!\310	\n\"\311!\211\312\230\203\313\202\f)\203)\314\f\"\202\223\f	\315!\316@!\317\320!\203N;\203N
\230\206x\321=\203\\\322\323
\"\206x\324>\203m\3258\326\230?\206x\327=\205x\322\323
\",\204\214\330\331\"\211\203\214\310\313\"\206\223\314\f\330	\332\"\",\207" [name dir ange-ftp-files-hashtable ent file efile directory-file-name file-name-directory gethash file-name-nondirectory "" "." ange-ftp-hash-entry-exists-p ange-ftp-ftp-name ange-ftp-host-type boundp dired-local-variables-file vms string-match "\\." (mts cms) 2 "/" bs2000 ange-ftp-get-files t no-error edir parsed host-type] 6 (#$ . 58790)])
#@196 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) "\306!\307!\310	\n\"\311!\211\312\230\203\313\202\f)\203)\310\f\"\202\231\f	\314!\315@!\316\317!\203N;\203N
\230\206x\320=\203\\\321\322
\"\206x\323>\203m\3248\325\230?\206x\326=\205x\321\322
\",\204\214\327\330\"\211\203\214\310\313\"\206\231\327	\330\"\211\205\231\310\f\",\207" [name dir ange-ftp-files-hashtable ent file efile directory-file-name file-name-directory gethash file-name-nondirectory "" "." ange-ftp-ftp-name ange-ftp-host-type boundp dired-local-variables-file vms string-match "\\." (mts cms) 2 "/" bs2000 ange-ftp-get-files t edir parsed host-type] 4 (#$ . 59562)])
(defalias 'ange-ftp-internal-delete-file-entry #[(name &optional dir-p) "\203\305	!\306	\n\"\210\307	!\310\311	!\n\"\211\205/\306\312	!\211\313\230\203+\314\202,\f)\")\207" [dir-p name ange-ftp-files-hashtable files file file-name-as-directory remhash directory-file-name gethash file-name-directory file-name-nondirectory "" "."] 4])
(defalias 'ange-ftp-internal-add-file-entry #[(name &optional dir-p) "\203\305	!\306\307	!\n\"\211\205'\310\311	!\211\312\230\203\"\313\202#\f)#)\207" [dir-p name ange-ftp-files-hashtable files file directory-file-name gethash file-name-directory puthash file-name-nondirectory "" "."] 5])
#@77 Get rid of entry for HOST, USER pair from file entry information hashtable.
(defalias 'ange-ftp-wipe-file-entries #[(host user) "\302\303\304\305\306!$\307\310\"\210	\211)\207" [ange-ftp-files-hashtable new-tbl make-hash-table :test equal :size hash-table-size maphash #[(key val) "\306!\211\205#	@	A@\f\232\203
\n\232\206\"\307	#*)\207" [key parsed u h host user ange-ftp-ftp-name puthash val new-tbl] 5]] 6 (#$ . 61097)])
#@74 Tell the FTP process for the given HOST & USER to switch to binary mode.
(defalias 'ange-ftp-set-binary-mode #[(host user) "\305	\306#\211@\204\307	\310\nAP#\202*r\311\312	\"!q\210\205)\313\314\"\211))\207" [host user result ange-ftp-binary-hash-mark-size ange-ftp-hash-mark-unit ange-ftp-send-cmd (type "binary") ange-ftp-error "BINARY failed: " process-buffer ange-ftp-get-process ash -4] 6 (#$ . 61544)])
#@73 Tell the FTP process for the given HOST & USER to switch to ASCII mode.
(defalias 'ange-ftp-set-ascii-mode #[(host user) "\305	\306#\211@\204\307	\310\nAP#\202*r\311\312	\"!q\210\205)\313\314\"\211))\207" [host user result ange-ftp-ascii-hash-mark-size ange-ftp-hash-mark-unit ange-ftp-send-cmd (type "ascii") ange-ftp-error "ASCII failed: " process-buffer ange-ftp-get-process ash -4] 6 (#$ . 61969)])
(defalias 'ange-ftp-cd #[(host user dir &optional noerror) "\305	\306\nD\307$\f\203\202@\206\310	\311AP#)\207" [host user dir result noerror ange-ftp-send-cmd cd "Doing CD" ange-ftp-error "CD failed: "] 5])
#@219 Attempt 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) "\306	\307\310$\211A\311\n@\203*\312 \313\216\314\315\"\204$\314\316\"\203)\317\320\"*\f+B\207" [host user result line dir save-match-data-internal ange-ftp-send-cmd (pwd) "Getting PWD" nil match-data ((byte-code "\301\302\"\207" [save-match-data-internal set-match-data evaporate] 3)) string-match "\"\\([^\"]*\\)\"" " \\([^ ]+\\) " match-string 1] 6 (#$ . 62609)])
#@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) "\306	\"\211\236A\307	\307
\260\310\"\211\206\255	\311\230\204]	\312\230\204]\n\313=\203]\314Q\315	\316
 E\317\320
\"$\211!A\"\321\"\"\205Z\322\323\"\"+\204\213
\324\230\203r\325	\"@\202\213\326	\324##\327\216\330	
#\203\212\325	\"@*\203\253	$%\f\203\241\f\331\"\332#\210*,\207" [host user host-type ange-ftp-fix-name-func-alist fix-name-func dir ange-ftp-host-type "/" gethash "anonymous" "ftp" unix "\\|" ange-ftp-send-cmd get format "expanding %s" string-match match-string 1 "~" ange-ftp-get-pwd ange-ftp-expand-dir ((ange-ftp-cd host user home)) ange-ftp-cd reverse puthash key ange-ftp-expand-dir-hashtable res ange-ftp-expand-dir-regexp ange-ftp-good-msgs null-device result line home ange-ftp-this-host ange-ftp-this-user] 8 (#$ . 63257)])
#@50 Take a string N and short-circuit //, /. and /..
(defalias 'ange-ftp-canonize-filename #[(n) "\306\307\"\203\310\225S\311O\312!\211\203\337	@	A@\313	8\306\314\n\"\203-\n\210\202\222\306\315\n\"\203x\316\310\n\"\n\310\225\311O\"\317\f
#\211#\203l\"\320\230\203W#\202h#\321\230\203c\"\202h#\"P\202t\322\323
\324\311O\"\210+\202\222\317\f\325#\211#\203\215\326#!\nP\202\221\322\327!\210)\306\330\n\"\204\327$\331=\204\247\332\n!\202\313%\203\273\306\330%\"\203\273\332\n\333\"\202\276\332\n!\306\334\n\"\203\313\n\313\311O\306\330\n\"\203\327\n\324\311O\335\n\"+\202\365\336!\337=\203\355\332!\202\365\332\340!\341!\")\207" [n parsed name user host tilda string-match "[^:]+//" 0 nil ange-ftp-ftp-name 2 "\\`/" "\\`~[^/]*" match-string ange-ftp-expand-dir "" "/" error "User \"%s\" is not known" 1 "~" ange-ftp-real-file-name-as-directory "Unable to obtain CWD" "\\`//" windows-nt ange-ftp-real-expand-file-name "c:/" "\\`[a-zA-Z]:" ange-ftp-replace-name-component string-to-char 47 ange-ftp-real-file-name-nondirectory ange-ftp-real-file-name-directory rest dir system-type default-directory] 6 (#$ . 64275)])
#@35 Documented as `expand-file-name'.
(defalias 'ange-ftp-expand-file-name #[(name &optional default) "\304 \305\216	\206\n\n\306!\203\307!\202+\310!\203$\311\312\"\202+\307\313	!P!*\207" [save-match-data-internal default default-directory name match-data ((byte-code "\301\302\"\207" [save-match-data-internal set-match-data evaporate] 3)) ange-ftp-ftp-name ange-ftp-canonize-filename file-name-absolute-p ange-ftp-real-expand-file-name "/" file-name-as-directory] 3 (#$ . 65450)])
#@118 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 (#$ . 65950))
#@41 Documented as `file-name-as-directory'.
(defalias 'ange-ftp-file-name-as-directory #[(name) "\303!\211\203$\304	8\305\230\203\202'\306	@!\n\236A\206\307!\202'\307!)\207" [name parsed ange-ftp-file-name-as-directory-alist ange-ftp-ftp-name 2 "" ange-ftp-host-type ange-ftp-real-file-name-as-directory] 3 (#$ . 66137)])
#@38 Documented as `file-name-directory'.
(defalias 'ange-ftp-file-name-directory #[(name) "\306!\211\203,\307	8\310\n\311\312\313
\f#,\203\"\202(\314\315\n!\")\202/\315!)\207" [name parsed filename start string regexp ange-ftp-ftp-name 2 "\\`~[^/]*\\'" nil t string-match ange-ftp-replace-name-component ange-ftp-real-file-name-directory inhibit-changing-match-data] 5 (#$ . 66473)])
#@41 Documented as `file-name-nondirectory'.
(defalias 'ange-ftp-file-name-nondirectory #[(name) "\306!\211\203)\307	8\310\n\311\312\313
\f#,\203\"\314\202%\315\n!)\202,\315!)\207" [name parsed filename start string regexp ange-ftp-ftp-name 2 "\\`~[^/]*\\'" nil t string-match "" ange-ftp-real-file-name-nondirectory inhibit-changing-match-data] 5 (#$ . 66875)])
#@38 Documented as `directory-file-name'.
(defalias 'ange-ftp-directory-file-name #[(dir) "\302!\211\203\303\304\305	8!\"\202\304!)\207" [dir parsed ange-ftp-ftp-name ange-ftp-replace-name-component ange-ftp-real-directory-file-name 2] 6 (#$ . 67253)])
(defalias 'ange-ftp-binary-file #[(file) "	\306\307\310\f\n#,\207" [ange-ftp-binary-file-name-regexp file start string regexp inhibit-changing-match-data nil t string-match] 4])
(defalias 'ange-ftp-write-region #[(start end filename &optional append visit) "\306!\307!\211\203\277	@	A@\310\311	8!\312\n!\313!)\f\203+\314\202,\315*\316!+,-\317\216\320 \321 .\322\216\323/0
\3241\206O\325%\210,-+)\203`\326\n\"\210\327
!\2112\203r\330\n\33128#\210)\332\n*
\fE\333\334+\"$\2113@\204\225\335\336\337\333\3403A\"E\"\210*1\341=\203\255\342\343!!\210\344 \210\345\324!\210-,\346\347+\"\210\350!.\202\312\323/0\f1%)\207" [filename parsed host user name temp expand-file-name ange-ftp-ftp-name ange-ftp-quote-string 2 ange-ftp-make-tmp-name ange-ftp-binary-file append put ange-ftp-abbreviate-filename ((byte-code "\304!\210	\203
\305\n\"\210\304\207" [temp binary host user ange-ftp-del-tmp-name ange-ftp-set-ascii-mode] 3)) buffer-file-name buffer-modified-p ((byte-code "\n\305\f!\207" [last-coding-system-used coding-system-used filename buffer-file-name mod-p restore-buffer-modified-p] 2)) ange-ftp-real-write-region nil quiet ange-ftp-set-binary-mode file-attributes ange-ftp-set-xfer-size 7 ange-ftp-send-cmd format "Writing %s" signal ftp-error "Opening output file" "FTP Error: \"%s\"" t set-visited-file-modtime ange-ftp-file-modtime ange-ftp-set-buffer-mode set-buffer-modified-p ange-ftp-message "Wrote %s" ange-ftp-add-file-entry binary cmd abbr last-coding-system-used coding-system-used mod-p start end visit attr result] 8])
(defalias 'ange-ftp-insert-file-contents #[(filename &optional visit beg end replace) "\306 \210\307!\310!\211\203\345\n\203\311!\204*\312\313\314!
\"\210\311!\203\334	@$	A@%\315\316	8!&\317$!'\320!())\321!*+,\312-\322\216(\203c\323$%\"\210\324$%\325&'E\326\327*\"$\211.@\204\210\330\331\332\326\333.A\"E\"\210)\334'!\204\236\335/!\204\236\334'!\203\270\336'\n012%A@-+,()\202\302\330\331\337\326\340\"D\"\210)\n\203\317\341\342!!\210,+-.	D\202\357\330\343\332D\"\202\357\336\n012%)\207" [filename parsed visit buffer-file-name ange-ftp-ls-cache-file ange-ftp-files-hashtable barf-if-buffer-read-only expand-file-name ange-ftp-ftp-name file-exists-p nil remhash file-name-directory ange-ftp-quote-string 2 ange-ftp-make-tmp-name ange-ftp-binary-file ange-ftp-abbreviate-filename ((byte-code "\203\f\305\306\n\"\210)\307\f!\207" [binary last-coding-system-used host user temp nil ange-ftp-set-ascii-mode ange-ftp-del-tmp-name] 3)) ange-ftp-set-binary-mode ange-ftp-send-cmd get format "Retrieving %s" signal ftp-error "Opening input file" "FTP Error: \"%s\"" ange-ftp-real-file-readable-p sleep-for ange-ftp-real-insert-file-contents "Opening input file:" "FTP Error: %s not arrived or readable" set-visited-file-modtime ange-ftp-file-modtime file-error host user name temp binary buffer-file-type abbr last-coding-system-used coding-system-used size result ange-ftp-retry-time beg end replace] 8])
(defalias 'ange-ftp-expand-symlink #[(file dir) "\303!\203
\304	\"\202\305	\"\306\n!\203%\307\310\n!\311\312\n!!\"\202&\n)\207" [file dir res file-name-absolute-p ange-ftp-replace-name-component expand-file-name file-symlink-p ange-ftp-expand-symlink ange-ftp-get-file-entry file-name-directory directory-file-name] 5])
(defalias 'ange-ftp-file-symlink-p #[(file) "\301!\302!\203\303\304\305\217\207\306!\207" [file ange-ftp-expand-file-name ange-ftp-ftp-name nil (byte-code "\302\303!!\211\205$\304\305!\211\306\230\203\307\202)	\"\211;\205$	)\207" [file ent ange-ftp-get-files file-name-directory gethash file-name-nondirectory "" "."] 4) ((file-error)) ange-ftp-real-file-symlink-p] 3])
(defalias 'ange-ftp-file-exists-p #[(name) "\302!\303!\203)\304!\205,\305!\211;\203&\306\307	\310\311!!\"!\202'\312)\207\313!\207" [name file-ent expand-file-name ange-ftp-ftp-name ange-ftp-file-entry-p ange-ftp-get-file-entry ange-ftp-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) "\302!\303!\203%\304\305!!\211;\203\"\306\307	\310\311!!\"!\202#	)\207\312!\207" [name file-ent expand-file-name ange-ftp-ftp-name ange-ftp-get-file-entry ange-ftp-file-name-as-directory ange-ftp-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) "\306!\307!\203V\310!\210\311\312!!\313\211\314!\203R@A\f\203@\f	\313\315\316
#,\203\203K	P\202L	\nB\202\n\237+\207\317\320\f%\207" [directory f files tail match start expand-file-name ange-ftp-ftp-name ange-ftp-barf-if-not-directory ange-ftp-hash-table-keys ange-ftp-get-files nil file-name-as-directory t string-match apply ange-ftp-real-directory-files string regexp inhibit-changing-match-data full v19-args] 6])
(defalias 'ange-ftp-directory-files-and-attributes #[(directory &optional full match nosort id-format) "\305!\306!\203\307\310\311	\n$\"\207\312	\n\f%\207" [directory full match nosort id-format expand-file-name ange-ftp-ftp-name mapcar #[(file) "\302\303	\"!B\207" [file directory file-attributes expand-file-name] 5] ange-ftp-directory-files ange-ftp-real-directory-files-and-attributes] 7])
(defalias 'ange-ftp-file-attributes #[(file &optional id-format) "\306!\307!\211\203\230\310!\211\311\230\203\312\202)\313\314!!\315\n\"\205\224	@	A@\316	8\317\n\"\317\f\" !
\204T\"\211T\"\320
\f#\210;\203k\321!\203k\322\314!\"\202m\323\211\211\324\325!\326\327!;\203\202\330\202\214\203\213\331\202\214\332\333P\334
\323\257\f-*\202\250#\203\245\335#\"\202\250\335!)\207" [file parsed files part ange-ftp-inodes-hashtable inode expand-file-name ange-ftp-ftp-name file-name-nondirectory "" "." ange-ftp-get-files file-name-directory ange-ftp-hash-entry-exists-p 2 gethash puthash file-name-absolute-p ange-ftp-expand-symlink -1 (0 0) ange-ftp-file-modtime (0 0) ange-ftp-file-size "l" "d" "-" "?????????" nil ange-ftp-real-file-attributes dirp name user host ange-ftp-next-inode-number id-format] 13])
(defalias 'ange-ftp-file-newer-than-file-p #[(f1 f2) "\306!\306	!\211\204\n\2037\307\310!8\307\310	!8\211\204$\311\2023\f\204,\312\2023\313
!\313\f!V*\202;\314	\"*\207" [f1 f2 f2-parsed f1-parsed f2-mt f1-mt ange-ftp-ftp-name 5 file-attributes nil t float-time ange-ftp-real-file-newer-than-file-p] 5])
(defalias 'ange-ftp-file-writable-p #[(file) "\302\303	!\304	!\203\305	!\206\306\307	!!\202\310	!)\207" [ange-ftp-process-verbose file nil expand-file-name 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) "\302\303	!\304	!\203\305	!\202\306	!)\207" [ange-ftp-process-verbose file nil expand-file-name ange-ftp-ftp-name file-exists-p ange-ftp-real-file-readable-p] 2])
(defalias 'ange-ftp-file-executable-p #[(file) "\302\303	!\304	!\203\305	!\202\306	!)\207" [ange-ftp-process-verbose file nil expand-file-name ange-ftp-ftp-name file-exists-p ange-ftp-real-file-executable-p] 2])
(defalias 'ange-ftp-delete-file #[(file &optional trash) "\306!\307!\211\203C	@	A@\310\311	8!\312!\313\n\314\fD\315\316
\"$\211@\204<\317\320\321\315\322A\"E\"\210\323!-\202H\324\")\207" [file parsed host user name abbr expand-file-name ange-ftp-ftp-name ange-ftp-quote-string 2 ange-ftp-abbreviate-filename ange-ftp-send-cmd delete format "Deleting %s" signal ftp-error "Removing old name" "FTP Error: \"%s\"" ange-ftp-delete-file-entry ange-ftp-real-delete-file result trash] 8 nil (list (read-file-name "Delete file: " nil default-directory) (null current-prefix-arg))])
#@113 Return the modification time of remote file FILE.
Value is (0 0) if the modification time cannot be determined.
(defalias 'ange-ftp-file-modtime #[(file) "\306!\n\307P\310	@	\211A@)\311\312	A\211A@)E#\211A\313\314
\315\316\317#,\203e\320\321
\322\323O!\321
\324\322O!\321
\325\324O!\321
\326\325O!\321
\327\326O!\321
\330\327O!\331&-\207" [file parsed ange-ftp-skip-msgs x res line ange-ftp-ftp-name "\\|^226" ange-ftp-send-cmd quote "mdtm" (0 0) "^213 [0-9]\\{14\\}$" nil t string-match encode-time string-to-number 16 18 14 12 10 8 4 0 modtime start string regexp inhibit-changing-match-data] 11 (#$ . 75469)])
(defalias 'ange-ftp-verify-visited-file-modtime #[(buf) "\304!\211;\203-\305	!\203-\306	!rq\210\307 )\310@!\206)\311!\311\n!X*\2020\312!)\207" [buf name buf-mdtm file-mdtm buffer-file-name ange-ftp-ftp-name ange-ftp-file-modtime visited-file-modtime zerop float-time ange-ftp-real-verify-visited-file-modtime] 4])
#@335 Return the size of remote file FILE. Return -1 if can't get it.
If ascii-mode is non-nil, return the size with the extra octets that
need to be inserted, one at the end of each line, to provide correct
end-of-line semantics for a transfer using TYPE=A. The default is nil,
so return the size on the remote host exactly. See RFC 3659.
(defalias 'ange-ftp-file-size #[(file &optional ascii-mode) "\306!\211@	A@\307\310	8!
\311P\312\216\204!\313\n\"\210\314\n\315\316\fE#)\211A\317\320\"\203B\321\322\323\"!\202C\324.\207" [file parsed host user name ange-ftp-skip-msgs ange-ftp-ftp-name ange-ftp-quote-string 2 "\\|^226" ((byte-code "\204	\303	\n\"\210\303\207" [ascii-mode host user ange-ftp-set-ascii-mode] 3)) ange-ftp-set-binary-mode ange-ftp-send-cmd quote "size" string-match "^213 \\([0-9]+\\)$" string-to-number match-string 1 -1 ascii-mode res line] 7 (#$ . 76444)])
(defalias 'ange-ftp-barf-or-query-if-file-exists #[(absname querystring interactive) "\303!\205 	\204\304\305C\"\207\306\307\310\n#!?\205 \304\305C\"\207" [absname interactive querystring file-exists-p signal file-already-exists yes-or-no-p format "File %s already exists; %s anyway? "] 5])
(defalias 'ange-ftp-copy-file-internal #[(filename newname ok-if-already-exists keep-date &optional msg cont nowait) "\306!\306	!\307!\204\310\311\312\313E\"\210\314	!\203#\306\315!	\"\316!\316	!\211\204H\n\204H\317	\f
$\210#\205J\320#\321\322#\202J\205N@$\205WA@%\205b\323\3248!&\325!'\n\205o\n@(\n\205x\nA@)\n\205\203\323\324\n8!*\325	\"+\326!\206\224\326	!,\327\211-.\f\203\245\f\247\203\254\330	\331\f\247#\210\203%\332$!\204\273\n\203\301\333$!-,\203\315\334$%\"\210\335$%\336&-\206\335\323	!E/\206\373-\203\364\n\203\364\337\340'\"\202\373\337\341'+#\342	,/$%&'\n()*+-.#0\2570&\202H\342\321\327	,/$%&'\n()*+\327\211#0&.*\207" [filename newname t-parsed f-parsed ok-if-already-exists keep-date expand-file-name file-exists-p signal file-error "Copy file" "no such file or directory" file-directory-p file-name-nondirectory ange-ftp-ftp-name ange-ftp-real-copy-file ange-ftp-call-cont t "Copied locally" ange-ftp-quote-string 2 ange-ftp-abbreviate-filename ange-ftp-binary-file nil 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 format "Getting %s" "Copying %s to %s" ange-ftp-cf1 cont f-host f-user f-name f-abbr t-host t-user t-name t-abbr binary temp1 temp2 msg nowait] 25])
(defvar ange-ftp-waiting-flag nil)
(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) "\203.\306\216	\204-\n\203\307\n!\210\204-\f\203\"\310\311\312\"\210\202-\313\311\314\315\316\"
E\"\210)	\203\367\203\345\317 !\203D\320 !!\n\203k!\203c\n!\230\203Y\321\202w\322\n!\312#\210\202w\n!\321\202w!\203w\322
!\312#\210\"\203\203\323 #\"\210\324!\206\212
!\211$\203\234\325 #\326$8#\210)\327 #\330!\206\253\331
!%E&\206\314!\203\305'\203\305\315\332(\"\202\314\315\333)*#\334( #\"\n!\257+&\210\335(!\207\334\312\321( #\"\n!&	\207\336	#\207" [line result temp1 cont ange-ftp-waiting-flag filename ((byte-code "\203	\303	\n\"\210\303\207" [binary f-host f-user ange-ftp-set-ascii-mode] 3)) ange-ftp-del-tmp-name throw ftp-error t signal "Opening input file" format "FTP Error: \"%s\"" ange-ftp-use-gateway-p ange-ftp-make-tmp-name nil ange-ftp-real-copy-file ange-ftp-set-binary-mode file-attributes ange-ftp-set-xfer-size 7 ange-ftp-send-cmd put ange-ftp-quote-string "Putting %s" "Copying %s to %s" ange-ftp-cf2 ange-ftp-add-file-entry ange-ftp-call-cont t-parsed t-host temp2 binary t-user attr t-name msg f-parsed newname f-abbr t-abbr nowait] 14])
(defalias 'ange-ftp-cf2 #[(result line newname t-host t-user binary temp1 temp2 cont) "\306\216\203.\307\216	\204'\n\204'\203\310\311\312\"\210\202'\313\311\314\315\316\"\fE\"\210\317\f!)\2027
\2057\320
\f\312#)\207" [line result cont ange-ftp-waiting-flag newname temp1 ((byte-code "\203\305!\210	\203\305	!\210\306\n\f#\207" [temp1 temp2 cont result line ange-ftp-del-tmp-name ange-ftp-call-cont] 4)) ((byte-code "\203	\303	\n\"\210\303\207" [binary t-host t-user ange-ftp-set-ascii-mode] 3)) throw ftp-error t signal "Opening output file" format "FTP Error: \"%s\"" ange-ftp-add-file-entry ange-ftp-real-copy-file] 6])
(defalias 'ange-ftp-copy-file #[(filename newname &optional ok-if-already-exists keep-date preserve-uid-gid preserve-selinux-context) "\304	\n\305\211\306\307!&\207" [filename newname ok-if-already-exists keep-date ange-ftp-copy-file-internal nil called-interactively-p interactive] 9 nil "fCopy file: \nFCopy %s to file: \np"])
#@480 Copy some files in the background.
OKAY-P must be t, and LINE does not matter.  They are here to make this
 function a valid CONT argument for `ange-ftp-raw-send-cmd'.
If VERBOSE-P is non-nil, print progress report in the echo area.
 When all the files have been copied already, a message is shown anyway.
FILES is a list of files to copy in the form
  (from-file to-file ok-if-already-exists keep-date)
E.g.,
  (ange-ftp-copy-files-async t nil t '(("a" "b" t t) ("c" "d" t t)))
(defalias 'ange-ftp-copy-files-async #[(okay-p line verbose-p files) "\204\n\306\307\310	#\210\n\203>\n@\211@A@\3118\3128\313\f
\2053\314\315\f
#\310\nAE\316&-\207\317\320\310\"\207" [okay-p line files ff from-file to-file error "%s: %s" ange-ftp-copy-files-async 2 3 ange-ftp-copy-file-internal format "%s --> %s" t message "%s: done" ok-if-exists keep-date verbose-p] 10 (#$ . 81350)])
#@53 Rename remote file FILENAME to remote file NEWNAME.
(defalias 'ange-ftp-rename-remote-to-remote #[(filename newname f-parsed t-parsed) "@A@	@	A@\211\230\203p\f\n\230\203p\306\3078!\306\307	8!\310E\311!\311\"\312
\f\313\314#$\211@\204b\315\316\317\313\320A\"F\"\210\321!\210\322!.\202}\323\324\325$\210\326!,\207" [f-parsed t-parsed t-user t-host f-user f-host ange-ftp-quote-string 2 rename ange-ftp-abbreviate-filename ange-ftp-send-cmd format "Renaming %s to %s" 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 f-name t-name cmd filename fabbr newname nabbr result] 9 (#$ . 82246)])
#@52 Rename local file FILENAME to remote file NEWNAME.
(defalias 'ange-ftp-rename-local-to-remote #[(filename newname) "\306!\306\n\"\307\310	#\311\n\312\313\f%\210\313\314!,\207" [filename fabbr newname nabbr msg ange-ftp-process-verbose ange-ftp-abbreviate-filename format "Renaming %s to %s" ange-ftp-copy-file-internal t nil delete-file] 6 (#$ . 82991)])
#@52 Rename remote file FILENAME to local file NEWNAME.
(defalias 'ange-ftp-rename-remote-to-local #[(filename newname) "\306!\306\n\"\307\310	#\311\n\312\313\f%\210\313\314!,\207" [filename fabbr newname nabbr msg ange-ftp-process-verbose ange-ftp-abbreviate-filename format "Renaming %s to %s" ange-ftp-copy-file-internal t nil delete-file] 6 (#$ . 83361)])
(defalias 'ange-ftp-rename-file #[(filename newname &optional ok-if-already-exists) "\305!\305	!\306!\306	!\n\204\203(\f\203!\f\247\203(\307	\310\f\247#\210\n\203@\2039\311	\n$\202P\312	\"\202P\203K\313	\"\202P\314	\f#*\207" [filename newname f-parsed t-parsed ok-if-already-exists expand-file-name ange-ftp-ftp-name 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-not-ignored-p #[(symname val) ";\203\305	\"\306\n!\206\307\n!\205\310\f\"?)\207\206&\310\f\"?\207" [val ange-ftp-this-dir file ange-ftp-completion-ignored-pattern symname ange-ftp-expand-symlink file-directory-p file-exists-p string-match] 3])
(defalias 'ange-ftp-root-dir-p #[(dir) "\302=\203
\303\304	\"\206	\305\230\207" [system-type dir windows-nt string-match "\\`[a-zA-Z]:[/\\]\\'" "/"] 3])
(defalias 'ange-ftp-ignore-errors-if-non-essential '(macro . #[(&rest body) "\301\302\303B\304BF\207" [body if non-essential ignore-errors progn] 5]))
(defalias 'ange-ftp-file-name-all-completions #[(file dir) "\306!\307	!\203.\n\203\310\311\312\217\202E\313	!\210\314	!\315	!\316\f\"\317\320
\"*\202E\321	!\203A\316\f\322 \"\323\f	\"\244\202E\323\f	\")\207" [dir ange-ftp-this-dir non-essential tbl file completions expand-file-name ange-ftp-ftp-name nil (byte-code "\304!\210\305!\306!\307\n	\"\310\311\"*\207" [ange-ftp-this-dir tbl file completions ange-ftp-barf-if-not-directory ange-ftp-real-file-name-as-directory ange-ftp-get-files all-completions mapcar #[#1=(file) "\304	\"\211\203\n;\203\305\306\n\"!\203\307P\202)\207" [file tbl ent ange-ftp-this-dir gethash file-directory-p ange-ftp-expand-symlink #2="/"] 5]] 3) ((error)) ange-ftp-barf-if-not-directory ange-ftp-real-file-name-as-directory ange-ftp-get-files all-completions mapcar #[#1# "\304	\"\211\203\n;\203\305\306\n\"!\203\307P\202)\207" [file tbl ent ange-ftp-this-dir gethash file-directory-p ange-ftp-expand-symlink #2#] 5] ange-ftp-root-dir-p ange-ftp-generate-root-prefixes ange-ftp-real-file-name-all-completions] 4])
(defalias 'ange-ftp-file-name-completion #[(file dir &optional predicate) "\306!\307	!\203>\310	!\210\n\311\232\203\311\202e\312	!\313	!\314\315\f\316#\317 \320\216\321\n	\322$\206:\321\n	#,\202e\323	!\203S\324\n\325 \326\n	\"\244#\202e\203a\327\n	#\202e\327\n	\")\207" [dir ange-ftp-this-dir file tbl completion-ignored-extensions ange-ftp-completion-ignored-pattern expand-file-name ange-ftp-ftp-name ange-ftp-barf-if-not-directory "" ange-ftp-real-file-name-as-directory ange-ftp-get-files mapconcat #[(s) ";\203\301!\302P\207\303\207" [s regexp-quote "$" "/"] 2] "\\|" match-data ((byte-code "\301\302\"\207" [save-match-data-internal set-match-data evaporate] 3)) ange-ftp-file-name-completion-1 ange-ftp-file-entry-not-ignored-p ange-ftp-root-dir-p try-completion ange-ftp-generate-root-prefixes ange-ftp-real-file-name-all-completions ange-ftp-real-file-name-completion save-match-data-internal predicate] 6])
(defalias 'ange-ftp-file-name-completion-1 #[(file tbl dir &optional predicate) "\305	\n#\211\205=\306=\203#\307\310\f\"!\203\311P\202=\306\202=\305	\n#\306=\203<\307\310\f\"!\203<\311P\202=)\207" [file tbl predicate bestmatch dir try-completion t file-directory-p expand-file-name "/"] 5])
(defalias 'ange-ftp-re-read-dir 'ange-ftp-reread-dir)
#@323 Reread remote directory DIR to update the directory cache.
The implementation of remote FTP file names caches directory contents
for speed.  Therefore, when new remote files are created, Emacs
may not know they exist.  You can use this command to reread a specific
directory, so that Emacs will know its current contents.
(defalias 'ange-ftp-reread-dir #[(&optional dir) "\203\303!\202\304\303\305 !!\306!\205#\307\310\n\"\210\311\312\"\207" [dir ange-ftp-ls-cache-file ange-ftp-files-hashtable expand-file-name file-name-directory buffer-string ange-ftp-ftp-name nil remhash ange-ftp-get-files t] 3 (#$ . 87299) nil])
(defalias 'ange-ftp-make-directory #[(dir &optional parents) "\203\306\307	!!\310\n!\204\311\n\"\210)\310	!\203&?\205\312\313	\"\207\314	!\211\203{@A@\315\316\f!\317=\203F\320\3218!\202K\322\3218!!\323	!\324\f
\325D\326\327\"$\211@\204s\330\f
\326\331	A##\210\332	\333\"-\202~\334	!)\207" [parents dir parent parsed host user file-name-directory directory-file-name file-exists-p ange-ftp-make-directory error "Cannot make directory %s: file already exists" ange-ftp-ftp-name ange-ftp-quote-string ange-ftp-host-type unix ange-ftp-real-directory-file-name 2 ange-ftp-real-file-name-as-directory ange-ftp-abbreviate-filename ange-ftp-send-cmd mkdir format "Making directory %s" ange-ftp-error "Could not make directory %s: %s" ange-ftp-add-file-entry t ange-ftp-real-make-directory name abbr result] 8 nil (list (expand-file-name (read-directory-name "Make directory: ")))])
(defalias 'ange-ftp-delete-directory #[(dir &optional recursive) "\306!\203s\307!\n\203\310\311\312\313\314#\"\210	\203m	@	A@\315\316!\317=\2033\320\321	8!\2028\322\321	8!!\323!\"\324\f\325\326$\210\327\f\330
D\331\332\"\"$\211#@\204e\333\f\331\334#A##\210\335\336\"-\202q\337\n\")\207\340\341\"\207" [dir parsed recursive host user name file-directory-p ange-ftp-ftp-name mapc #[(file) "\302!\203\303	\"\207\304!\207" [file recursive file-directory-p ange-ftp-delete-directory delete-file] 3] directory-files full "^\\([^.]\\|\\.\\([^.]\\|\\..\\)\\).*" ange-ftp-quote-string ange-ftp-host-type unix ange-ftp-real-directory-file-name 2 ange-ftp-real-file-name-as-directory ange-ftp-abbreviate-filename ange-ftp-cd "/" noerror ange-ftp-send-cmd rmdir format "Removing directory %s" 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" abbr result] 8])
(defalias 'ange-ftp-file-local-copy #[(file) "\304!\305	!\211\205\"\306\n@\307\310\"\"\311	\310\312\313\314	\"%\210)*\207" [file fn1 pa1 tmp1 expand-file-name ange-ftp-ftp-name ange-ftp-make-tmp-name file-name-extension t ange-ftp-copy-file-internal nil format "Getting %s"] 9])
(defalias 'ange-ftp-file-remote-p #[(file &optional identification connected) "\306!\211@	A@\307	8
\2030\310\311\n\"!\211\205,\312!\205,\313!\314>)\205d\315=\203?	\205d\316\202d\303=\203J\202d\302=\203U\n\202d\304=\203`\f\202d\317\320\",\207" [file parsed host user localname connected ange-ftp-ftp-name 2 get-process ange-ftp-ftp-process-buffer processp process-status (run open) method "ftp" ange-ftp-replace-name-component "" proc identification] 5])
(defalias 'ange-ftp-load #[(file &optional noerror nomessage nosuffix) "\306!\203N	\203C\202\307P\310PE\311\312\211\203/\n\204/\313\314\215\210\fA\211\204 \n\203@\315\216\316\n
	$)\202L
\204K\317\320\321D\"\210\312+\207\322
	$\207" [file nosuffix copy load-force-doc-strings tryfiles noerror ange-ftp-ftp-name ".elc" ".el" t nil ftp-error (byte-code "\301\302\303\304\217\210)\301\207" [ange-ftp-waiting-flag t error (byte-code "\302@!\302\207" [tryfiles copy ange-ftp-file-local-copy] 2) ((ftp-error))] 3) ((delete-file copy)) load signal file-error "Cannot open load file" ange-ftp-real-load nomessage] 6])
(defalias 'ange-ftp-unhandled-file-name-directory #[(filename) "\300\207" [nil] 1])
#@436 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 (#$ . 91315))
#@40 Handler used by `dired-compress-file'.
(defalias 'ange-ftp-dired-compress-file #[(name) "\306!\307\211\203?\310\n@!\236A\211\203?\311 \312\216	!*\211@
A@\2036\313\"\202;\314\"+\202F\307\315!)*\207" [name conversion-func parsed ange-ftp-make-compressed-filename-alist save-match-data-internal decision ange-ftp-ftp-name nil ange-ftp-host-type match-data ((byte-code "\301\302\"\207" [save-match-data-internal set-match-data evaporate] 3)) ange-ftp-compress ange-ftp-uncompress dired-compress-file compressing newfile file-name-handler-alist] 4 (#$ . 91822)])
(defalias 'ange-ftp-compress #[(file nfile) "\306!\307	@!\307	@!\310!\310
!\311\312\f\"\311\313\"\314\216\315\n\316\317%\210\2039\320\321\f\"\210\322``\317\316\317\323\311\324\n#&\210\203T\320\325\f\"\210\326\327 !\205k\317\330!\210)\315
\316\317%.\207" [file parsed tmp1 tmp2 abbr nfile ange-ftp-ftp-name ange-ftp-make-tmp-name ange-ftp-abbreviate-filename format "Getting %s" "Putting %s" ((byte-code "\302!\210\302	!\207" [tmp1 tmp2 ange-ftp-del-tmp-name] 2)) ange-ftp-copy-file-internal t nil ange-ftp-message "Compressing %s..." call-process-region "-c" "compress -f -c < %s > %s" "Compressing %s...done" zerop buffer-size delete-file nabbr msg1 msg2 ange-ftp-process-verbose shell-file-name] 12])
(defalias 'ange-ftp-uncompress #[(file nfile) "\306!\307	@!\307	@!\310!\310
!\311\312\f\"\311\313\"\314\216\315\n\316\317%\210\2039\320\321\f\"\210\322``\317\316\317\323\311\324\n#&\210\203T\320\325\f\"\210\326\327 !\205k\317\330!\210)\315
\316\317%.\207" [file parsed tmp1 tmp2 abbr nfile ange-ftp-ftp-name ange-ftp-make-tmp-name ange-ftp-abbreviate-filename format "Getting %s" "Putting %s" ((byte-code "\302!\210\302	!\207" [tmp1 tmp2 ange-ftp-del-tmp-name] 2)) ange-ftp-copy-file-internal t nil ange-ftp-message "Uncompressing %s..." call-process-region "-c" "uncompress -c < %s > %s" "Uncompressing %s...done" zerop buffer-size delete-file nabbr msg1 msg2 ange-ftp-process-verbose shell-file-name] 12])
(defalias 'ange-ftp-find-backup-file-name #[(fn) "\205\302	!\207" [ange-ftp-make-backup-files fn ange-ftp-real-find-backup-file-name] 2])
(defalias 'ange-ftp-hook-function #[(operation &rest args) "\303N\211\203\304\305\306\217\202\307\n\")\207" [operation fn args ange-ftp err (byte-code "\304\305 \306\216\307\n\"+\207" [debug-on-error save-match-data-internal fn args t match-data ((byte-code "\301\302\"\207" [save-match-data-internal set-match-data evaporate] 3)) apply] 3) ((error (byte-code "\301@A\"\207" [err signal] 3))) ange-ftp-run-real-handler] 4])
(byte-code "\300\301\302\"\210\303\304\305\306#\210\303\307\305\310#\210\303\311\305\312#\210\303\313\305\314#\210\303\315\305\316#\210\303\317\305\320#\210\303\321\305\322#\210\303\323\305\324#\210\303\325\305\326#\210\303\327\305\330#\210\303\331\305\332#\210\303\333\305\334#\210\303\335\305\336#\210\303\337\305\340#\210\303\341\305\342#\210\303\343\305\344#\210\303\345\305\346#\210\303\347\305\350#\210\303\351\305\352#\210\303\353\305\354#\210\303\355\305\356#\210\303\357\305\360#\210\303\361\305\362#\210\303\363\305\364#\210\303\365\305\366#\210\303\367\305\370#\210\303\371\305\372#\210\303\373\305\374#\210\303\375\305\376#\210\303\377\305\201@#\210\303\201A\305\201B#\210\303\201C\305\201D#\210\303\201E\305\201F#\210\303\201G\305\201H#\210\303\201I\305\201J#\210\303\201K\305\201L#\210\303\201M\305\201N#\210\303\201O\305\201P#\210\303\201Q\305\201R#\210\303\201S\305\201N#\210\303\201T\305\201U#\210\201V\201W\201X\"\207" [add-hook find-file-hook ange-ftp-set-buffer-mode 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 directory-files-and-attributes ange-ftp-directory-files-and-attributes 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 verify-visited-file-modtime ange-ftp-verify-visited-file-modtime file-exists-p ange-ftp-file-exists-p write-region ange-ftp-write-region copy-file ange-ftp-copy-file rename-file ange-ftp-rename-file file-attributes ange-ftp-file-attributes file-newer-than-file-p ange-ftp-file-newer-than-file-p 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 file-remote-p ange-ftp-file-remote-p 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 set-file-modes ange-ftp-set-file-modes file-truename identity set-file-times ignore vc-registered null process-file ange-ftp-process-file start-file-process shell-command ange-ftp-shell-command defalias ange-ftp-run-real-handler tramp-run-real-handler] 4)
(defalias 'ange-ftp-real-file-name-directory #[(&rest args) "\301\302\"\207" [args ange-ftp-run-real-handler file-name-directory] 3])
(defalias 'ange-ftp-real-file-name-nondirectory #[(&rest args) "\301\302\"\207" [args ange-ftp-run-real-handler file-name-nondirectory] 3])
(defalias 'ange-ftp-real-file-name-as-directory #[(&rest args) "\301\302\"\207" [args ange-ftp-run-real-handler file-name-as-directory] 3])
(defalias 'ange-ftp-real-directory-file-name #[(&rest args) "\301\302\"\207" [args ange-ftp-run-real-handler directory-file-name] 3])
(defalias 'ange-ftp-real-expand-file-name #[(&rest args) "\301\302\"\207" [args ange-ftp-run-real-handler expand-file-name] 3])
(defalias 'ange-ftp-real-make-directory #[(&rest args) "\301\302\"\207" [args ange-ftp-run-real-handler make-directory] 3])
(defalias 'ange-ftp-real-delete-directory #[(&rest args) "\301\302\"\207" [args ange-ftp-run-real-handler delete-directory] 3])
(defalias 'ange-ftp-real-insert-file-contents #[(&rest args) "\301\302\"\207" [args ange-ftp-run-real-handler insert-file-contents] 3])
(defalias 'ange-ftp-real-directory-files #[(&rest args) "\301\302\"\207" [args ange-ftp-run-real-handler directory-files] 3])
(defalias 'ange-ftp-real-directory-files-and-attributes #[(&rest args) "\301\302\"\207" [args ange-ftp-run-real-handler directory-files-and-attributes] 3])
(defalias 'ange-ftp-real-file-directory-p #[(&rest args) "\301\302\"\207" [args ange-ftp-run-real-handler file-directory-p] 3])
(defalias 'ange-ftp-real-file-writable-p #[(&rest args) "\301\302\"\207" [args ange-ftp-run-real-handler file-writable-p] 3])
(defalias 'ange-ftp-real-file-readable-p #[(&rest args) "\301\302\"\207" [args ange-ftp-run-real-handler file-readable-p] 3])
(defalias 'ange-ftp-real-file-executable-p #[(&rest args) "\301\302\"\207" [args ange-ftp-run-real-handler file-executable-p] 3])
(defalias 'ange-ftp-real-file-symlink-p #[(&rest args) "\301\302\"\207" [args ange-ftp-run-real-handler file-symlink-p] 3])
(defalias 'ange-ftp-real-delete-file #[(&rest args) "\301\302\"\207" [args ange-ftp-run-real-handler delete-file] 3])
(defalias 'ange-ftp-real-verify-visited-file-modtime #[(&rest args) "\301\302\"\207" [args ange-ftp-run-real-handler verify-visited-file-modtime] 3])
(defalias 'ange-ftp-real-file-exists-p #[(&rest args) "\301\302\"\207" [args ange-ftp-run-real-handler file-exists-p] 3])
(defalias 'ange-ftp-real-write-region #[(&rest args) "\301\302\"\207" [args ange-ftp-run-real-handler write-region] 3])
(defalias 'ange-ftp-real-backup-buffer #[(&rest args) "\301\302\"\207" [args ange-ftp-run-real-handler backup-buffer] 3])
(defalias 'ange-ftp-real-copy-file #[(&rest args) "\301\302\"\207" [args ange-ftp-run-real-handler copy-file] 3])
(defalias 'ange-ftp-real-rename-file #[(&rest args) "\301\302\"\207" [args ange-ftp-run-real-handler rename-file] 3])
(defalias 'ange-ftp-real-file-attributes #[(&rest args) "\301\302\"\207" [args ange-ftp-run-real-handler file-attributes] 3])
(defalias 'ange-ftp-real-file-newer-than-file-p #[(&rest args) "\301\302\"\207" [args ange-ftp-run-real-handler file-newer-than-file-p] 3])
(defalias 'ange-ftp-real-file-name-all-completions #[(&rest args) "\301\302\"\207" [args ange-ftp-run-real-handler file-name-all-completions] 3])
(defalias 'ange-ftp-real-file-name-completion #[(&rest args) "\301\302\"\207" [args ange-ftp-run-real-handler file-name-completion] 3])
(defalias 'ange-ftp-real-insert-directory #[(&rest args) "\301\302\"\207" [args ange-ftp-run-real-handler insert-directory] 3])
(defalias 'ange-ftp-real-file-name-sans-versions #[(&rest args) "\301\302\"\207" [args ange-ftp-run-real-handler file-name-sans-versions] 3])
(defalias 'ange-ftp-real-shell-command #[(&rest args) "\301\302\"\207" [args ange-ftp-run-real-handler shell-command] 3])
(defalias 'ange-ftp-real-load #[(&rest args) "\301\302\"\207" [args ange-ftp-run-real-handler load] 3])
(defalias 'ange-ftp-real-find-backup-file-name #[(&rest args) "\301\302\"\207" [args ange-ftp-run-real-handler find-backup-file-name] 3])
(defalias 'ange-ftp-insert-directory #[(file switches &optional wildcard full) "\306\307!!\204\310	\n$\207`\311 \312\f\313\"\210\n\203/\314!$\315\316!	\317\211\313%)\202y\203;\315	\320#\202y\321\322	\"\203H	\323\211\224O\324!\315\314!\206T\325	\320#%\316!&\317'\321\326\327&!\330Q%\"\203w\331\323%\"\202x\332+c\210
b\210\333\334\f\335#\203\215\336\337!\210\202~\n\204\272\204\272\340\341\316\307!!G!\203\245\325\202\250\316!\317\342#\203\272\336\343\307!!\313\"\210\fb\210\f\317\211\223*\207" [file switches wildcard full end beg ange-ftp-ftp-name expand-file-name ange-ftp-real-insert-directory point-marker set-marker-insertion-type t file-name-directory ange-ftp-ls file-name-nondirectory nil parse string-match "-?d\\'" 0 directory-file-name "." "^.+[^ ] " regexp-quote "\\( -> .*\\)?[@/*=]?\n" match-string "" re-search-forward "^\\(\\S-\\)" move replace-match "  \\1" search-backward zerop noerror file-relative-name default-directory dirlist filename case-fold-search] 6])
(defalias 'ange-ftp-dired-uncache #[(dir) "\302\303!!\205\304\211\207" [dir ange-ftp-ls-cache-file ange-ftp-ftp-name expand-file-name nil] 3])
#@74 Alist of mapping host type into function to remove file version numbers.
(defvar ange-ftp-sans-version-alist nil (#$ . 102534))
(defalias 'ange-ftp-file-name-sans-versions #[(file keep-backup-version) "\306!\307	!\211\205\310\n@!\236A\211\203\f
\"\202#\311
\"+\207" [file short parsed ange-ftp-sans-version-alist func keep-backup-version ange-ftp-abbreviate-filename ange-ftp-ftp-name ange-ftp-host-type ange-ftp-real-file-name-sans-versions] 4])
(defalias 'ange-ftp-shell-command #[(command &optional output-buffer error-buffer) "\306!\211@	A@\307	8	\204\310
#\202J\fG\311V\203*\312\f\313
R\314\315\n\"\2036\316\317\n\"\320\321\n
$\322\323
\"\210\310
#,\207" [default-directory parsed host user name command ange-ftp-ftp-name 2 ange-ftp-real-shell-command 0 "cd " "; " string-match "\\(.*\\)#" match-string 1 format "%s %s \"%s\"" ange-ftp-message "Remote command '%s' ..." output-buffer error-buffer remote-shell-program] 6])
(defalias 'ange-ftp-process-file #[(program infile buffer display &rest arguments) "\306!\203\307\310\311\217\207\312\313	\n\f
&\207" [default-directory program infile buffer display arguments ange-ftp-ftp-name oops (byte-code "\303\300!\203\n\206\304	\232\203\305\n!\207\306\307	\"\207" [dired-chmod-program program arguments boundp "chmod" ange-ftp-call-chmod error "Unknown remote command: %s"] 3) ((ftp-error (byte-code "\301\302A@\3038\3048$c\210\305\207" [oops format "%s: %s, %s\n" 2 3 1] 6)) (error (byte-code "\301\302A@\"c\210\303\207" [oops format "%s\n" 1] 3))) apply call-process] 7])
(defalias 'ange-ftp-call-chmod #[(args) "G\304W\203\f\305\306\"\210@A	@\307\232\203	A\310\311	\"\210*\312\313\207" [args rest mode ange-ftp-ls-cache-file 2 error "ange-ftp-call-chmod: missing mode and/or filename: %s" "--" mapc #[(file) "\306!\307!\211\205;	@	A@\310\311	8!\312!\313\n\314\fE\315\316
\"$\211@\206:\317\n\320AP#-)\207" [file parsed host user name abbr expand-file-name ange-ftp-ftp-name ange-ftp-quote-string 2 ange-ftp-abbreviate-filename ange-ftp-send-cmd chmod format "doing chmod %s" ange-ftp-error "CHMOD failed: " mode result] 8] nil 0] 3])
(defalias 'ange-ftp-set-file-modes #[(filename mode) "\302\303\304\"	D!\207" [mode filename ange-ftp-call-chmod format "%o"] 4])
(defalias 'ange-ftp-fix-name-for-vms #[(name &optional reverse) "\306 \307\216	\203N\310\311\n\"\203G\312\211\211\313\314\n\"\313\315\n\"\313\316\n\"\f\2033\317\320\321\f\314\322O\323$
\205;\324
\324Q\f\211\205A\324R+\202\262\325\326\n\"\202\262\312\211\211\211\211!\"\310\327\n\"\203l\n\314\322O\330!\202o\331!\310\332\n\"\203\203\n\314\333\225SO\n\333\225\312O\334\n!\211\"\203\227\317\320\321\"\333\322O\323$\335\n!!
\f\205\254\336
?\205\251\337\f\340R!\260-*\207" [save-match-data-internal reverse name file dir drive match-data ((byte-code "\301\302\"\207" [save-match-data-internal set-match-data evaporate] 3)) string-match "\\`\\([^:]+:\\)?\\(\\[.*\\]\\)?\\([^][]*\\)\\'" nil match-string 1 2 3 subst-char-in-string 47 46 -1 t "/" error "name %s didn't match" "\\`\".+\"\\'" "\"" "" "\\`/[^:]+:/" 0 file-name-directory file-name-nondirectory "[" "." "]" quote tmp] 7])
(byte-code "\302\236\204\n\303B\302	>\204\302	B\302\207" [ange-ftp-fix-name-func-alist ange-ftp-dumb-host-types vms (vms . ange-ftp-fix-name-for-vms)] 2)
(defalias 'ange-ftp-fix-dir-name-for-vms #[(dir-name) "\301\230\203\n\302\303!\207\304\305\"\203\302\306!\207\307!\207" [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 "\301\236\204\n\302B\301\207" [ange-ftp-fix-dir-name-func-alist vms (vms . ange-ftp-fix-dir-name-for-vms)] 2)
(defvar ange-ftp-vms-host-regexp nil)
(defalias 'ange-ftp-vms-host #[(host) "\205	\306\307\310\f\n#,\207" [ange-ftp-vms-host-regexp host start string regexp inhibit-changing-match-data nil t string-match] 4])
#@273 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 "\\(\\([_A-Za-z0-9$]?\\|[_A-Za-z0-9$][-_A-Za-z0-9$]*\\)\\.[-_A-Za-z0-9$]*;+[0-9]*\\)" (#$ . 106559))
(defalias 'ange-ftp-parse-vms-filename #[nil "\301\302\303#\205\304\305!\207" [ange-ftp-vms-filename-regexp re-search-forward nil t match-string 0] 4])
(defalias 'ange-ftp-parse-vms-listing #[nil "\303\304\305\"\306eb\210\307 \310\216\311 \211\203G\312\313\"\203*\314\315\211\224O\316	#\210\202A\314\306	#\210\312\317\"\203A\314\315\211\224O\306	#\210\320y\210\202\314\321\316	#\210\314\322\316	#\210*	*\207" [file tbl save-match-data-internal make-hash-table :test equal nil match-data ((byte-code "\301\302\"\207" [save-match-data-internal set-match-data evaporate] 3)) ange-ftp-parse-vms-filename string-match "\\.\\(DIR\\|dir\\);[0-9]+" puthash 0 t ";[0-9]+\\'" 1 "." ".."] 4])
(add-to-list 'ange-ftp-parse-list-func-alist '(vms . ange-ftp-parse-vms-listing))
(defalias 'ange-ftp-vms-delete-file-entry #[(name &optional dir-p) "\203	\306	\307\"\207\310 \311\216\312	!\211\313\230\203\314\202)\315\316\"\205Z\317\320	!\f\"\211\205Y\321\211\224O\322\323!\324Q\325\326
\"\210\327\330
\"\210\206X\326
\"+)+\207" [dir-p name save-match-data-internal file ange-ftp-files-hashtable files ange-ftp-internal-delete-file-entry t match-data ((byte-code "\301\302\"\207" [save-match-data-internal set-match-data evaporate] 3)) file-name-nondirectory "" "." string-match ";[0-9]+\\'" gethash file-name-directory 0 "^" regexp-quote ";[0-9]+$" nil remhash maphash #[(key val) "\303	\"\205\n\304\211\207" [regexp key versions string-match t] 3] root regexp versions] 4])
(byte-code "\301\236\204\n\302B\301\207" [ange-ftp-delete-file-entry-alist vms (vms . ange-ftp-vms-delete-file-entry)] 2)
(defalias 'ange-ftp-vms-add-file-entry #[(name &optional dir-p) "\203	\306	\307\"\207\310\311	!\n\"\211\205g\312	!\211\313\230\203\"\314\202#\f)\315 \316\216\317\320\f\"\203>\321\f\322\211\224O\323#\210\202`\324\325\f!\326Q\322\327\330\"\210T\321\f\331\332!Q\323#\210**\321\f\323#))\207" [dir-p name ange-ftp-files-hashtable files file save-match-data-internal ange-ftp-internal-add-file-entry t gethash file-name-directory file-name-nondirectory "" "." match-data ((byte-code "\301\302\"\207" [save-match-data-internal set-match-data evaporate] 3)) string-match ";[0-9]+\\'" puthash 0 nil "^" regexp-quote ";\\([0-9]+\\)$" maphash #[(name val) "\303	\"\205\n\304\305\306	\"!]\211\207" [regexp name version string-match string-to-number match-string 1] 5] ";" int-to-string version regexp] 6])
(byte-code "\301\236\204\n\302B\301\207" [ange-ftp-add-file-entry-alist vms (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) "\303!?\205\304\305!\306	\205\307	\260\310\211\207" [host ange-ftp-vms-host-regexp ange-ftp-host-cache ange-ftp-vms-host "^" regexp-quote "$" "\\|" nil] 5 (#$ . 109558) (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) "\302 \303\216\304\305	\"\203	\306\211\224O\307	!*\207" [save-match-data-internal name match-data ((byte-code "\301\302\"\207" [save-match-data-internal set-match-data evaporate] 3)) string-match "\\.\\(DIR\\|dir\\)\\(;[0-9]+\\)?\\'" 0 ange-ftp-real-file-name-as-directory] 3])
(byte-code "\301\236\204\n\302B\301\207" [ange-ftp-file-name-as-directory-alist vms (vms . ange-ftp-vms-file-name-as-directory)] 2)
(defalias 'ange-ftp-vms-make-compressed-filename #[(name &optional reverse) "\301\302\"\203\303\304\211\224OD\207\301\305\"\203\303\304\211\224OD\207\301\306\"\203,\303\304\307OD\207\310\301\305\"\203>\304\211\224O\311P\202A\311PD\207" [name string-match "-Z;[0-9]+\\'" nil 0 ";[0-9]+\\'" "-Z\\'" -2 t "-Z"] 4])
(byte-code "\301\236\204\n\302B\301\207" [ange-ftp-make-compressed-filename-alist vms (vms . ange-ftp-vms-make-compressed-filename)] 2)
(defalias 'ange-ftp-vms-sans-version #[(name &rest args) "\302 \303\216\304\305	\"\203	\306\211\224O\202	*\207" [save-match-data-internal name match-data ((byte-code "\301\302\"\207" [save-match-data-internal set-match-data evaporate] 3)) string-match ";[0-9]+\\'" 0] 3])
(byte-code "\301\236\204\n\302B\301\207" [ange-ftp-sans-version-alist vms (vms . ange-ftp-vms-sans-version)] 2)
(defalias 'ange-ftp-fix-name-for-mts #[(name &optional reverse) "\305 \306\216	\2033\307\310\n\"\203,\311\211\312\313\n\"\312\314\n\"\f\205&\315\f\315QP*\202G\316\317\n\"\202G\307\320\n\"\203F\312\313\n\"\312\314\n\"P\202G\n*\207" [save-match-data-internal reverse name file acct match-data ((byte-code "\301\302\"\207" [save-match-data-internal set-match-data evaporate] 3)) string-match "\\`\\([^:]+:\\)?\\(.*\\)\\'" nil match-string 1 2 "/" error "name %s didn't match" "\\`/\\([^:]+:\\)/\\(.*\\)\\'"] 4])
(byte-code "\301\236\204\n\302B\301\207" [ange-ftp-fix-name-func-alist mts (mts . ange-ftp-fix-name-for-mts)] 2)
(defalias 'ange-ftp-fix-dir-name-for-mts #[(dir-name) "\301\230\203\n\302\303!\207\304!\211\305\230\203\306\202&\307\310\"\203%\306P\202&)\207" [dir-name "/" error "Cannot get listing for fictitious \"/\" directory" ange-ftp-fix-name-for-mts "" "?" string-match ":\\'"] 4])
(byte-code "\302\236\204\n\303B\302	>\204\302	B\302\207" [ange-ftp-fix-dir-name-func-alist ange-ftp-dumb-host-types mts (mts . ange-ftp-fix-dir-name-for-mts)] 2)
(defvar ange-ftp-mts-host-regexp nil)
(defalias 'ange-ftp-mts-host #[(host) "\205	\306\307\310\f\n#,\207" [ange-ftp-mts-host-regexp host start string regexp inhibit-changing-match-data nil t string-match] 4])
(defalias 'ange-ftp-parse-mts-listing #[nil "\304\305\306\"eb\210\307 \310\216\311\n\312\313#\2031\312\210\314\312x\210`\315\312x\210\316`{\312#\210)\317y\210\202
*\316\320\313#\210)\207" [tbl save-match-data-internal directory-listing-before-filename-regexp end make-hash-table :test equal match-data ((byte-code "\301\302\"\207" [save-match-data-internal set-match-data evaporate] 3)) re-search-forward nil t " " "-A-Z0-9_.!" puthash 1 "."] 4])
(add-to-list 'ange-ftp-parse-list-func-alist '(mts . ange-ftp-parse-mts-listing))
#@49 Mark HOST as the name of a machine running MTS.
(defalias 'ange-ftp-add-mts-host #[(host) "\303!?\205\304\305!\306	\205\307	\260\310\211\207" [host ange-ftp-mts-host-regexp ange-ftp-host-cache ange-ftp-mts-host "^" regexp-quote "$" "\\|" nil] 5 (#$ . 113153) (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) "\306 \307\216	\203\310\nP\202t\311\312\n\"\203q\313\314\n\"\315\224\203l\313\315\n\"\316P\317\f
\"\320#@\203B\202h\317\f
\"\320#\211@\203\\\202g\321\f
\322\323A##)+\202m)\202t\324\325!*\207" [save-match-data-internal reverse name minidisk ange-ftp-this-host ange-ftp-this-user match-data ((byte-code "\301\302\"\207" [save-match-data-internal set-match-data evaporate] 3)) "/" string-match "\\`/\\([-A-Z0-9$*._]+\\)/\\([-A-Z0-9$._]+\\)?\\'" match-string 1 2 "cd " ange-ftp-get-process ange-ftp-raw-send-cmd ange-ftp-error format "cd to minidisk %s failed: %s" error "Invalid CMS filename" proc cmd file ange-ftp-this-msg result] 8])
(byte-code "\302\236\204\n\303B\302	>\204\302	B\302\207" [ange-ftp-fix-name-func-alist ange-ftp-dumb-host-types cms (cms . ange-ftp-fix-name-for-cms)] 2)
(defalias 'ange-ftp-fix-dir-name-for-cms #[(dir-name) "\306\230\203\n\307\310!\207\311\312\"\203^\313\314\"\315\n\"\316	P\317\224\203+\313\317\"\202,\320\321\f
\"@\203;\202\\\315\n\"\321\f
\"\211@\203P\202[\322\n\323\324	A##),\207\307\325!\207" [dir-name minidisk ange-ftp-this-host ange-ftp-this-user proc cmd "/" error "Cannot get listing for fictitious \"/\" directory" string-match "\\`/\\([-A-Z0-9$*._]+\\)/\\([-A-Z0-9$._]+\\)?\\'" match-string 1 ange-ftp-get-process "cd " 2 "*" ange-ftp-raw-send-cmd ange-ftp-error format "cd to minidisk %s failed: %s" "Invalid CMS file name" file result] 8])
(byte-code "\301\236\204\n\302B\301\207" [ange-ftp-fix-dir-name-func-alist cms (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 (#$ . 115217))
(defalias 'ange-ftp-cms-host #[(host) "\205	\306\307\310\f\n#,\207" [ange-ftp-cms-host-regexp host start string regexp inhibit-changing-match-data nil t string-match] 4])
#@38 Mark HOST as the name of a CMS host.
(defalias 'ange-ftp-add-cms-host #[(host) "\303!?\205\304\305!\306	\205\307	\260\310\211\207" [host ange-ftp-cms-host-regexp ange-ftp-host-cache ange-ftp-cms-host "^" regexp-quote "$" "\\|" nil] 5 (#$ . 115523) (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 "\302\303\304\"eb\210\305 \306\216\307\310\311\312#\203(\313\314\315!\316\314\317!Q\311#\210\315y\210\202
\313\316\312#\210*)\207" [tbl save-match-data-internal make-hash-table :test equal match-data ((byte-code "\301\302\"\207" [save-match-data-internal set-match-data evaporate] 3)) re-search-forward "^\\([-A-Z0-9$_]+\\) +\\([-A-Z0-9$_]+\\) +[VF] +[0-9]+ " nil t puthash match-string 1 "." 2] 5])
(add-to-list 'ange-ftp-parse-list-func-alist '(cms . ange-ftp-parse-cms-listing))
(defalias 'ange-ftp-cms-make-compressed-filename #[(name &optional reverse) "\301\302\"\203\303\304\305OD\207\306\307PD\207" [name string-match "-Z\\'" nil 0 -2 t "-Z"] 4])
(byte-code "\301\236\204\n\302B\301\207" [ange-ftp-make-compressed-filename-alist cms (cms . ange-ftp-cms-make-compressed-filename)] 2)
#@65 Regular expression to match for a valid short BS2000 file name.
(defconst ange-ftp-bs2000-short-filename-regexp "[-A-Z0-9$#@.]*[A-Z][-A-Z0-9$#@.]*" (#$ . 116769))
#@60 Regular expression used in `ange-ftp-fix-name-for-bs2000'.
(defconst ange-ftp-bs2000-fix-name-regexp-reverse (concat "^\\(" ange-ftp-bs2000-filename-pubset-regexp #1="\\)?" #2="\\(" ange-ftp-bs2000-filename-username-regexp #1# #2# ange-ftp-bs2000-short-filename-regexp #1#) (#$ . 116938))
#@60 Regular expression used in `ange-ftp-fix-name-for-bs2000'.
(defconst ange-ftp-bs2000-fix-name-regexp (concat "/?\\(" ange-ftp-bs2000-filename-pubset-regexp "/\\)?" "\\(\\$[A-Z0-9]*/\\)?" "\\(" ange-ftp-bs2000-short-filename-regexp "\\)?") (#$ . 117233))
#@53 Prefix used for filenames starting with '#' or '@'.
(custom-declare-variable 'ange-ftp-bs2000-special-prefix "X" '(#$ . 117493) :group 'ange-ftp :type 'string)
(defalias 'ange-ftp-fix-name-for-bs2000 #[(name &optional reverse) "\306 \307\216	\203S\310\n\"\203L\311\224\205\312\311\225O\313\224\205&\313\224\313\225SO\314\224\2050\314\224\315O\316\205?\317\316Q
\205F
\316P\fR+\202\300\320\321\"\202\300\310\322\"\203_\313\315O\310\"\203\277\311\224\205s\311\224\311\225SO\313\224\205\313\224\313\225SO\314\224\205\211\314\224\315O\323\304!\203\247\f;\203\247\310\324\f\"\203\247\f\311\315OP
\205\260
\325P\f\205\271\326\327\330\f#Q\226+\202\300*\207" [save-match-data-internal reverse ange-ftp-bs2000-fix-name-regexp-reverse name filename userid match-data ((byte-code "\301\302\"\207" [save-match-data-internal set-match-data evaporate] 3)) string-match 1 0 2 3 nil "/" "_/" error "name %s didn't match" "^/_/" boundp "[#@].+" "." subst-char-in-string 47 46 pubset ange-ftp-bs2000-fix-name-regexp ange-ftp-bs2000-special-prefix] 6])
(byte-code "\301\236\204\n\302B\301\207" [ange-ftp-fix-name-func-alist bs2000 (bs2000 . ange-ftp-fix-name-for-bs2000)] 2)
(defalias 'ange-ftp-fix-dir-name-for-bs2000 #[(dir-name) "\301\230\203\302\207\303!\207" [dir-name "/" "*" ange-ftp-fix-name-for-bs2000] 2])
(byte-code "\302\236\204\n\303B\302	>\204\302	B\302\207" [ange-ftp-fix-dir-name-func-alist ange-ftp-dumb-host-types bs2000 (bs2000 . ange-ftp-fix-dir-name-for-bs2000)] 2)
(defvar ange-ftp-bs2000-host-regexp nil)
(defvar ange-ftp-bs2000-posix-host-regexp nil)
(defalias 'ange-ftp-bs2000-host #[(host) "\205	\306\307\310\f\n#,\207" [ange-ftp-bs2000-host-regexp host start string regexp inhibit-changing-match-data nil t string-match] 4])
(defalias 'ange-ftp-bs2000-posix-host #[(host) "\205	\306\307\310\f\n#,\207" [ange-ftp-bs2000-posix-host-regexp host start string regexp inhibit-changing-match-data nil t string-match] 4])
#@52 Mark HOST as the name of a machine running BS2000.
(defalias 'ange-ftp-add-bs2000-host #[(host) "\303!?\205\304\305!\306	\205\307	\260\310\211\207" [host ange-ftp-bs2000-host-regexp ange-ftp-host-cache ange-ftp-bs2000-host "^" regexp-quote "$" "\\|" nil] 5 (#$ . 119510) (list (read-string "Host: " (let ((name (or (buffer-file-name) default-directory))) (and name (car (ange-ftp-ftp-name name))))))])
#@73 Mark HOST as the name of a machine running BS2000 with POSIX subsystem.
(defalias 'ange-ftp-add-bs2000-posix-host #[(host) "\303!\204\304\305!\306	\205\307	\260\310\311\312\313\"\210\207" [host ange-ftp-bs2000-posix-host-regexp ange-ftp-host-cache ange-ftp-bs2000-posix-host "^" regexp-quote "$" "\\|" nil add-hook ange-ftp-process-startup-hook ange-ftp-bs2000-cd-to-posix] 5 (#$ . 119927) (list (read-string "Host: " (let ((name (or (buffer-file-name) default-directory))) (and name (car (ange-ftp-ftp-name name))))))])
#@59 Regular expression to match for a valid BS2000 file name.
(defconst ange-ftp-bs2000-filename-regexp (concat #1="\\(" ange-ftp-bs2000-filename-prefix-regexp "\\)?" #1# ange-ftp-bs2000-short-filename-regexp "\\)") (#$ . 120464))
#@52 List of additional pubsets available to all users.
(custom-declare-variable 'ange-ftp-bs2000-additional-pubsets nil '(#$ . 120697) :group 'ange-ftp :type '(repeat string))
(defalias 'ange-ftp-parse-bs2000-filename #[nil "\301\302\303#\205\304\305!\207" [ange-ftp-bs2000-filename-regexp re-search-forward nil t match-string 2] 4])
(defalias 'ange-ftp-parse-bs2000-listing #[nil "\306\307\310\"\311\211eb\210\312\311\313#\203\314\315!eb\210\316 \317\216\320 \211\2030\321\311\n#\210\202 *\321\322\313\n#\210\321\323\313\n#\210	
\235\204H\324\325
\"\210\n+\207" [file pubset tbl ange-ftp-bs2000-filename-pubset-regexp save-match-data-internal ange-ftp-bs2000-additional-pubsets make-hash-table :test equal nil re-search-forward t match-string 0 match-data ((byte-code "\301\302\"\207" [save-match-data-internal set-match-data evaporate] 3)) ange-ftp-parse-bs2000-filename puthash "." ".." mapc #[(pubset) "\302\303	#\207" [pubset tbl puthash t] 4]] 4])
(add-to-list 'ange-ftp-parse-list-func-alist '(bs2000 . ange-ftp-parse-bs2000-listing))
#@271 cd to POSIX subsystem if the current host matches
`ange-ftp-bs2000-posix-host-regexp'.  All BS2000 hosts with POSIX subsystem
MUST BE EXPLICITLY SET with `ange-ftp-add-bs2000-posix-host' for they cannot
be recognized automatically (they are all valid BS2000 hosts too).
(defalias 'ange-ftp-bs2000-cd-to-posix #[nil "\205\303!\205\304	\305#\210\306\307	\310R\311	\"@\n#\207" [ange-ftp-this-host ange-ftp-this-user ange-ftp-expand-dir-hashtable ange-ftp-bs2000-posix-host ange-ftp-cd "%POSIX" puthash "/" "/~" ange-ftp-get-pwd] 5 (#$ . 121760)])
(provide 'ange-ftp)

MMCT - 2023