%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /usr/local/share/emacs/27.2/lisp/net/
Upload File :
Create Path :
Current File : //usr/local/share/emacs/27.2/lisp/net/ange-ftp.elc

;ELC
;;; Compiled
;;; in Emacs version 27.2
;;; 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\317DD\320\306\303\321\322&\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 funcall function #[0 "\300\207" [("\\`/\\(\\([^/:]*\\)@\\)?\\([^@/:]*[^@/:.]\\):\\(.*\\)" 3 2 4)] 1] "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-" (#$ . 1234))
#@53 Regular expression matching FTP "success" messages.
(defvar ange-ftp-good-msgs "^220 \\|^230 \\|^226 \\|^25. \\|^221 \\|^200 \\|^[Hh]ash mark\\|^Remote directory:" (#$ . 1427))
(byte-code "\300\301\302\303\304DD\305\306\307\310\311\312\313&	\210\300\314\302\303\315DD\316\306\307\312\313&\210\300\317\302\303\320DD\321\306\307\312\313&\210\300\322\302\303\323DD\324\306\307\312\313&\210\300\325\302\303\326DD\327\306\307\312\313&\210\300\330\302\303\331DD\332\306\307\312\333&\210\300\334\302\303\335DD\336\306\307\312\333&\210\300\337\302\303\340DD\341\306\307\312\342&\210\300\343\302\303\344DD\345\306\307\312\346&\210\300\347\302\303\350DD\351\306\307\312\352&\210\300\353\302\303\354DD\355\306\307\312\356&\210\300\357\302\303\360DD\361\306\307\312\362&\210\300\363\302\303\364DD\365\306\307\312\366&\210\300\367\302\303\370DD\371\306\307\312\372&\210\300\373\302\303\374DD\375\306\307\312\376&\210\300\377\302\303\201@DD\201A\306\307\312\201B&\210\300\201C\302\303\201DDD\201E\306\307\312\201F&\210\300\201G\302\303\201HDD\201I\306\307\312\313\310\201J&	\210\300\201K\302\303\201LDD\201M\306\307\312\201N&\210\300\201O\302\303\201PDD\201Q\306\307\312\313&\210\300\201R\302\303\201SDD\201T\306\307\312\346&\210\300\201U\302\303\201VDD\201W\306\307\312\201X&\210\300\201Y\302\303\201ZDD\201[\306\307\312\313&\207" [custom-declare-variable ange-ftp-skip-msgs funcall function #[0 "\300\207" ["^200 \\(PORT\\|Port\\) \\|^331 \\|^150 \\|^350 \\|^[0-9]+ bytes \\|^Connected \\|^$\\|^Remote system\\|^Using\\|^ \\|Password:\\|^Data connection \\|^200 PBSZ\\|^200 Protection set to Private\\|^234 AUTH TLS successful\\|^SSL not available\\|^\\[SSL Cipher .+\\]\\|^\\[Encrypted data transfer\\.\\]\\|^local:\\|^Trying\\|^125 \\|^550-\\|^221 .*oodbye\\|^500 .*AUTH\\|^KERBEROS\\|^500 This security scheme is not implemented\\|^504 Unknown security mechanism\\|^530 Please login with USER and PASS\\|^534 Kerberos Authentication not enabled\\|^22[789] .*[Pp]assive\\|^200 EPRT\\|^500 .*EPRT\\|^500 .*EPSV"] 1] "Regular expression matching FTP messages that can be ignored." :group ange-ftp :version "26.1" :type regexp ange-ftp-fatal-msgs #[0 "\300\207" ["^ftp: \\|^Not connected\\|^530 \\|^4[25]1 \\|rcmd: \\|^No control connection\\|unknown host\\|^lost connection"] 1] "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 #[0 "\300\207" [#1="^ftp: connect to address .*: No route to host"] 1 #1#] "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 #[0 "\300\207" [#2="No route to host\\|Connection closed\\|No such host\\|Login incorrect"] 1 #2#] "Regular expression matching login failure messages from rlogin/telnet." ange-ftp-xfer-size-msgs #[0 "\300\207" [#3="^150 .* connection for .* (\\([0-9]+\\) bytes)"] 1 #3#] "Regular expression used to determine the number of bytes in a FTP transfer." ange-ftp-tmp-name-template #[0 "\301\302\"\207" [temporary-file-directory expand-file-name "ange-ftp"] 3] "Template used to create temporary files." directory ange-ftp-gateway-tmp-name-template #[0 "\300\207" [#4="/tmp/ange-ftp"] 1 #4#] "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 #[0 "\300\207" [#5="~/.netrc"] 1 #5#] "File in .netrc format to search for passwords." file ange-ftp-disable-netrc-security-check #[0 "\301=\207" [system-type windows-nt] 2] "If non-nil avoid checking permissions on the .netrc file." boolean ange-ftp-default-user #[0 "\300\207" [nil] 1] "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 #[0 "\300\207" [nil] 1] "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 #[0 "\300\207" [nil] 1] "Password to use when the user name equals `ange-ftp-default-user'." (choice (const :tag "Default" nil) string) ange-ftp-default-account #[0 "\300\207" [nil] 1] "Account to use when the user name equals `ange-ftp-default-user'." (choice (const :tag "Default" nil) string) ange-ftp-netrc-default-password #[0 "\300\207" [nil] 1] "Password to use when the user name equals `ange-ftp-netrc-default-user'." (choice (const :tag "Default" nil) string) ange-ftp-netrc-default-account #[0 "\300\207" [nil] 1] "Account to use when the user name equals `ange-ftp-netrc-default-user'." (choice (const :tag "Default" nil) string) ange-ftp-generate-anonymous-password #[0 "\300\207" [t] 1] "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 #[0 "\300\207" [nil] 1] "If non-nil, regexp matching hosts on which `dir' command lists directory." (choice (const :tag "Default" nil) string) ange-ftp-binary-file-name-regexp #[0 "\300\207" [#6=""] 1 #6#] "If a file matches this regexp then it is transferred in binary mode." "24.1" ange-ftp-gateway-host #[0 "\300\207" [nil] 1] "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 #[0 "\300\207" [#7=".*"] 1 #7#] "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 #[0 "\300\207" [nil] 1] "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 #[0 "\207" [remote-shell-program] 1] "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 #[0 "\300\207" [#8="^[^#$%>;\n]*[#$%>;] *"] 1 #8#] "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) (#$ . 8895))
(byte-code "\300\301\302\303\304DD\305\306\307\310\311&\210\300\312\302\303\313DD\314\306\307\310\315&\210\300\316\302\303\317DD\320\306\307\310\311&\210\300\321\302\303\322DD\323\306\307\310\324&\210\300\325\302\303\326DD\327\306\307\310\330&\210\300\331\302\303\332DD\333\306\307\310\311&\210\300\334\302\303\335DD\336\306\307\310\315&\210\300\337\302\303\340DD\341\306\307\310\315&\210\300\342\302\303\343DD\344\306\307\310\345&\210\300\346\302\303\347DD\350\306\307\310\351&\210\300\352\302\303\353DD\354\306\307\310\311&\210\300\355\302\303\356DD\357\306\307\310\330&\210\300\360\302\303\361DD\362\306\307\310\363&\210\300\364\302\303\365DD\366\306\307\310\311\367\370&	\210\300\371\302\303\372DD\373\306\307\310\374\367\375&	\210\376\377!\207" [custom-declare-variable ange-ftp-smart-gateway funcall function #[0 "\300\207" [nil] 1] "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 #[0 "\300\207" [#1="21"] 1 #1#] "Port on gateway machine to use when smart gateway is in operation." string ange-ftp-send-hash #[0 "\300\207" [t] 1] "If non-nil, send the HASH command to the FTP client." ange-ftp-binary-hash-mark-size #[0 "\300\207" [nil] 1] "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 #[0 "\300\207" [1024] 1] "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 #[0 "\300\207" [t] 1] "If non-nil then be chatty about interaction with the FTP process." ange-ftp-ftp-program-name #[0 "\300\207" [#2="ftp"] 1 #2#] "Name of FTP program to run." ange-ftp-gateway-ftp-program-name #[0 "\300\207" [#3="ftp"] 1 #3#] "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 #[0 "\300\207" [("-i" "-n" "-g" "-v")] 1] "A list of arguments passed to the FTP program when started." (repeat string) ange-ftp-nslookup-program #[0 "\300\207" [nil] 1] "If non-nil, this is a string naming the nslookup program." (choice (const :tag "None" nil) string) ange-ftp-make-backup-files #[0 "\300\207" [nil] 1] "Non-nil means make backup files for \"magic\" remote files." ange-ftp-retry-time #[0 "\300\207" [5] 1] "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 "\300\207" [0] 1] "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 #[0 "\300\207" [nil] 1] "If t, try to use passive mode in FTP, if the client program supports it." :version "21.1" ange-ftp-passive-host-alist #[0 "\300\207" [nil] 1] "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)
#@76 Return whether there is an association for KEY in table TBL.

(fn KEY TBL)
(defalias 'ange-ftp-hash-entry-exists-p #[514 "\211\205\f\300\301#\301=?\207" [gethash unknown] 6 (#$ . 13066)])
#@81 Return a sorted list of all the active keys in table TBL, as strings.

(fn TBL)
(defalias 'ange-ftp-hash-table-keys #[257 "\300\301\302\"\303\"\207" [sort all-completions "" string-lessp] 5 (#$ . 13263)])
#@71 Buffer name to hold directory listing data received from FTP process.
(defvar ange-ftp-data-buffer-name " *ftp data*" (#$ . 13475))
#@60 Last modified time of the netrc file from file-attributes.
(defvar ange-ftp-netrc-modtime nil (#$ . 13613))
#@59 Hash table holding associations between HOST, USER pairs.
(defvar ange-ftp-user-hashtable (make-hash-table :test 'equal) (#$ . 13727))
#@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) (#$ . 13869))
#@69 Mapping between a HOST, USER pair and an ACCOUNT password for them.
(defvar ange-ftp-account-hashtable (make-hash-table :test 'equal) (#$ . 14054))
#@64 Hash table for storing directories and their respective files.
(defvar ange-ftp-files-hashtable (make-hash-table :test 'equal :size 97) (#$ . 14208))
#@62 Hash table for storing file names and their "inode numbers".
(defvar ange-ftp-inodes-hashtable (make-hash-table :test 'equal :size 97) (#$ . 14364))
#@69 Next "inode number" value.  We give each file name a unique number.
(defvar ange-ftp-next-inode-number 1 (#$ . 14519))
#@41 Last set of args used by `ange-ftp-ls'.
(defvar ange-ftp-ls-cache-lsargs nil (#$ . 14644))
#@36 Last file passed to `ange-ftp-ls'.
(defvar ange-ftp-ls-cache-file nil (#$ . 14741))
#@42 Last result returned from `ange-ftp-ls'.
(defvar ange-ftp-ls-cache-res nil (#$ . 14831))
(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)
(define-error 'ftp-error nil 'file-error)
#@154 Display message in echo area, but indicate if truncated.
Args are as in `message': a format string, plus arguments to be formatted.

(fn FMT &rest ARGS)
(defalias 'ange-ftp-message #[385 "\301\302#\303\304 !\203\202&GY\203\"\305\306\307Z\"P\262\310\311\"\207" [noninteractive apply format-message window-width minibuffer-window "> " substring 3 message "%s"] 9 (#$ . 15548)])
#@207 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.

(fn FILE &optional NEW)
(defalias 'ange-ftp-abbreviate-filename #[513 "\301 \302\303\304\305\306!\307\"\310$\216\203&\311\312\313!\314Q\"\203&\315\303\225S\"\262\2039\316!\316!\230\2039\317!\262\206>\320)\207" [default-directory match-data make-byte-code 0 "\301\300\302\"\207" vconcat vector [set-match-data evaporate] 3 string-match "\\`" regexp-quote "." substring file-name-nondirectory file-name-directory "./"] 9 (#$ . 15945)])
#@67 For a given HOST, set or change the default USER.

(fn HOST USER)
(defalias 'ange-ftp-set-user #[514 "\301#\207" [ange-ftp-user-hashtable puthash] 6 (#$ . 16584) "sHost: \nsUser: "])
#@51 Given a HOST, return the default user.

(fn HOST)
(defalias 'ange-ftp-get-user #[257 "\304 \210\305\"\211\2064	;\203	\202,	\203&\306\307\310\311\"\312 \")\202,\206,\312 \211\262\313\"\210\207" [ange-ftp-user-hashtable 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] 6 (#$ . 16776)])
#@18 

(fn HOST USER)
(defalias 'ange-ftp-generate-passwd-key '(macro . #[514 "\300\301D\301D\302\303D\304FF\207" [and stringp concat downcase "/"] 9 (#$ . 17212)]))
#@18 

(fn HOST USER)
(defalias 'ange-ftp-lookup-passwd '(macro . #[514 "\300\301E\302BB\207" [gethash ange-ftp-generate-passwd-key (ange-ftp-passwd-hashtable)] 6 (#$ . 17385)]))
#@92 For a given HOST and USER, set or change the associated PASSWORD.

(fn HOST USER PASSWORD)
(defalias 'ange-ftp-set-passwd #[771 "\301;\205;\205\227\302Q#\207" [ange-ftp-passwd-hashtable puthash "/"] 7 (#$ . 17567) (byte-code "\300\301!\300\302!\303\304!E\207" [read-string "Host: " "User: " read-passwd "Password: "] 4)])
#@66 Given a USER, return a host we know the password for.

(fn USER)
(defalias 'ange-ftp-get-host-with-passwd #[257 "\302 \210\3032;\304\305\306\307\310\311!\312\"\313\314%\"\210\315 \305\316\317\310\311!\320\"\321$\216\304\305\306\322\310\311!\323\"\324\325%	\"\210)\210\3260\207" [ange-ftp-user-hashtable ange-ftp-passwd-hashtable ange-ftp-parse-netrc found-one maphash make-byte-code 514 "\302;\205\300;\205\227\303\300Q	\"\205\304\305\"\207" vconcat vector [ange-ftp-passwd-hashtable gethash "/" throw found-one] 6 "\n\n(fn HOST VAL)" match-data 0 "\301\300\302\"\207" [set-match-data evaporate] 3 "\301\302\"\205!\303\304\305\224#\300\303\305\225\"\230\205\205\306\307\"\262\207" [string-match "\\`[^/]*\\(/\\).*\\'" substring 0 1 throw found-one] 7 "\n\n(fn KEY VALUE)" nil] 9 (#$ . 17905)])
#@92 Return the password for specified HOST and USER, asking user if necessary.

(fn HOST USER)
(defalias 'ange-ftp-get-passwd #[514 "\203	\306\300\211\"\210\307 \210\310;\205;\205\227\311Q	\"\206\236\n;\2032\2032\211\n\230\2032\207\f;\203C
\203C\211\f\230\203C
\207\211\312\230\204O\211\313\230\203`\203`;\203]\207\207\314\315!\211\203\215\316\317\320%\321\310;\205\207;\205\207\227\311Q	\"#\202\225\316\317\322#!\323#\210)\262\207" [non-essential ange-ftp-passwd-hashtable ange-ftp-default-user ange-ftp-default-password ange-ftp-netrc-default-user ange-ftp-netrc-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-generate-anonymous-password user-mail-address enable-recursive-minibuffers] 10 (#$ . 18732)])
#@99 For a given HOST and USER, set or change the associated ACCOUNT password.

(fn HOST USER ACCOUNT)
(defalias 'ange-ftp-set-account #[771 "\301;\205;\205\227\302Q#\207" [ange-ftp-account-hashtable puthash "/"] 7 (#$ . 19676) (byte-code "\300\301!\300\302!\303\304!E\207" [read-string "Host: " "User: " read-passwd "Account password: "] 4)])
#@64 Given a HOST and USER, return the FTP account.

(fn HOST USER)
(defalias 'ange-ftp-get-account #[514 "\305 \210\306;\205;\205\227\307Q\"\2063	;\203'\211	\230\203'\n\2063;\2053\211\230\2053\f\207" [ange-ftp-account-hashtable ange-ftp-default-user ange-ftp-default-account ange-ftp-netrc-default-user ange-ftp-netrc-default-account ange-ftp-parse-netrc gethash "/"] 6 (#$ . 20031)])
#@84 Return the filename that FILE references, following all symbolic links.

(fn FILE)
(defalias 'ange-ftp-chase-symlinks #[257 "\300\301!\211\262\203\302!\203\211\202\303!P\262\202\210\207" [nil ange-ftp-real-file-symlink-p file-name-absolute-p file-name-directory] 4 (#$ . 20435)])
#@20 

(fn TOKEN LIMIT)
(defalias 'ange-ftp-parse-netrc-token #[514 "\300\301#\2053\302\303w\210g\304=\203'\305u\210`\262\306w\210\305u\210\211`S{\2021`\262\307w\210\211`{\262\207" [search-forward t nil ", 	
\n" 34 1 "^\"" "^, 	
\n"] 6 (#$ . 20735)])
(defalias 'ange-ftp-parse-netrc-group #[0 "`\212\303\304!\203\305\306w\210\307\306w\210\305\306w\210\202\305\306w\210\310\311\306\312#\203(\313\224\202)d)\306\211\211\211\314\315\"\262\314\316\"\262\314\317\"\262\314\320\"\262\203j\203j\321\"\210\322#\210\211\203\235\323#\210\202\235b\210\324\325\312#\203\235\314\316\"\262\314\317\"\262\314\320\"\262\203\221\203\227\211\203\235\211b\207" [ange-ftp-netrc-default-user ange-ftp-netrc-default-password ange-ftp-netrc-default-account 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"] 10])
(defalias 'ange-ftp-parse-netrc #[0 "\305\211\306\307\310	!!\262\311!\262)\211\205\244\211\3128\262\n\232?\205\244\313 \314\315\316\317\320!\321\"\322$\216\204K\3238\262\324 =\203\220\325\326\3278\262\"\203\220r\330\331!q\210\332!\210\333!\334\335!\210\336\337!\210\305eb\210\340\341\305\335#\203w\342\343!\210\202heb\210\344\305w\210m\204\210\345 \210\202~\346p!\210)\202\231\347\350	\"\210\351\352!\210\3128\262\211)\262\207" [default-directory ange-ftp-netrc-filename ange-ftp-netrc-modtime ange-ftp-disable-netrc-security-check buffer-file-name nil "/" ange-ftp-chase-symlinks ange-ftp-real-expand-file-name ange-ftp-real-file-attributes 5 match-data make-byte-code 0 "\301\300\302\"\207" vconcat vector [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] 9 nil nil])
(defalias 'ange-ftp-generate-root-prefixes #[0 "\302 \210\303 \304\305\306\307\310!\311\"\312$\216\313C\314\304\315\316\307\310!\317\"\320\321%\"\210\314\304\315\322\307\310!\323\"\324\325%	\"\210\211\242\206<\313C\262)\207" [ange-ftp-passwd-hashtable ange-ftp-user-hashtable ange-ftp-parse-netrc match-data make-byte-code 0 "\301\300\302\"\207" vconcat vector [set-match-data evaporate] 3 nil maphash 514 "\301\302\"\205\303\304\305\224#\303\305\225\"\300\306\307R\300\242B\240\266\202\207" [string-match "\\`[^/]*\\(/\\).*\\'" substring 0 1 "@" ":"] 9 "\n\n(fn KEY VALUE)" "\300\301P\300\242B\240\207" [":"] 5 "\n\n(fn HOST USER)"] 9])
#@66 Extract the Nth FTP file name component from NS.

(fn N NS NAME)
(defalias 'ange-ftp-ftp-name-component '(macro . #[771 "\300\301\302EDC\303\301EE\207" [let elt nth match-string] 8 (#$ . 23568)]))
(defvar ange-ftp-ftp-name-arg "")
(defvar ange-ftp-ftp-name-res nil)
#@13 

(fn NAME)
(defalias 'ange-ftp-ftp-name #[257 "\211\230\203	\207\211\303 \304\305\306\307\310!\311\"\312$\216\313\n@\"\205P\nA\211@\314\"\262A@\314\"\262\3158\314\"\262G\305U\203J\316!\262E\266\204)\262\211\207" [ange-ftp-ftp-name-arg ange-ftp-ftp-name-res ange-ftp-name-format match-data make-byte-code 0 "\301\300\302\"\207" vconcat vector [set-match-data evaporate] 3 posix-string-match match-string 2 ange-ftp-get-user] 9 (#$ . 23843)])
#@22 

(fn FULLNAME NAME)
(defalias 'ange-ftp-replace-name-component #[514 "\301 \302\303\304\305\306!\307\"\310$\216\311@\"\205+A\3128\313\303\224#\313\225\"Q\266\202)\207" [ange-ftp-name-format match-data make-byte-code 0 "\301\300\302\"\207" vconcat vector [set-match-data evaporate] 3 posix-string-match 2 substring] 10 (#$ . 24320)])
#@74 Clear any existing minibuffer message; let the minibuffer contents show.
(defalias 'ange-ftp-repaint-minibuffer #[0 "\300\301!\207" [message ""] 2 (#$ . 24672)])
#@18 

(fn HOST USER)
(defalias 'ange-ftp-ftp-process-buffer #[514 "\300\301\302\260\207" ["*ftp " "@" "*"] 7 (#$ . 24840)])
#@22 

(fn HOST USER MSG)
(defalias 'ange-ftp-error #[771 "\212\301 \302\303\304\305\"!!\210db\210\306!\210)\210\307\310\311\312\"C\")\207" [pop-up-windows selected-window t pop-to-buffer get-buffer-create ange-ftp-ftp-process-buffer select-window signal ftp-error format "FTP Error: %s"] 9 (#$ . 24969)])
#@69 Set correct modes for the current buffer if visiting a remote file.
(defalias 'ange-ftp-set-buffer-mode #[0 ";\205\302!\205\303	!\207" [buffer-file-name ange-ftp-auto-save ange-ftp-ftp-name auto-save-mode] 2 (#$ . 25283)])
#@208 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.

(fn &optional BUFFER)
(defalias 'ange-ftp-kill-ftp-process #[256 "\211\204\np\262\202\301!\262\302!\206r\211q\210)\211\2059\303\304!!\211\2057\211@A@\305\301\306\"!!\266\202\262\207" [default-directory get-buffer buffer-file-name ange-ftp-ftp-name expand-file-name kill-buffer ange-ftp-ftp-process-buffer] 10 (#$ . 25519) "bKill FTP process associated with buffer: "])
#@79 Quote any characters in STRING that may confuse the FTP process.

(fn STRING)
(defalias 'ange-ftp-quote-string #[257 "\211;\203B\301\302\211?\205\303!\211\211?\205\304\305\303!\")\266\202\2038\211G\306U\2032\307\2026\310\306\"\262\311!P)\266\203!\207\312\207" [file-name-handler-alist shell-quote-argument nil file-local-name string-prefix-p "/:" 2 "/" substring file-remote-p ""] 11 (#$ . 26096)])
#@18 

(fn DIRECTORY)
(defalias 'ange-ftp-barf-if-not-directory #[257 "\300!\206\"\301!\302\203\303\202\304\305\203\306\202\307E\"\262\207" [file-directory-p file-exists-p signal file-error file-missing "Opening directory" "Not a directory" "No such file or directory"] 7 (#$ . 26521)])
#@148 Look at the given LINE from the FTP process PROC.
Try to categorize it into one of four categories:
good, skip, fatal, or unknown.

(fn LINE PROC)
(defalias 'ange-ftp-process-handle-line #[514 "\306\"\203\307\310\311\"!\312\245\211\207\306\n\"\203\313\207\306\"\203.\314\313\314\211\207\306\"\203;\313\211\207\306\"\203L\315\316!\210\313\207\306\"\203_\317!\210\314\211\207\203f\313\207\314\211\207" [ange-ftp-xfer-size-msgs ange-ftp-xfer-size ange-ftp-skip-msgs ange-ftp-good-msgs ange-ftp-process-busy ange-ftp-process-result 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-line ange-ftp-multi-msgs ange-ftp-process-multi-skip ange-ftp-potential-error-msgs ange-ftp-fatal-msgs] 6 (#$ . 26825)])
#@71 Set the size of the next FTP transfer in bytes.

(fn HOST USER BYTES)
(defalias 'ange-ftp-set-xfer-size #[771 "\301\"\211\205'\302!\211\205%r\211q\210\250\203\303\304\"\202\"\305\245\211)\262\207" [ange-ftp-xfer-size ange-ftp-get-process process-buffer ash -10 1024] 8 (#$ . 27671)])
#@70 Remove hash marks from STRING and display count so far.

(fn STRING)
(defalias 'ange-ftp-process-handle-hash #[257 "\306\307\211\224#\306\307\225\"P\262\307\225\307\224Z\\	\203a\n\203a\203a\310 \311 =\204a\312\313!\204a\f\204a\314	_\315\"
\307U\203I\316\317\n#\210\202`\320\321_
\"\211=\204_\211\316\322\n#\210\210\210\207" [ange-ftp-hash-mark-count ange-ftp-hash-mark-unit ange-ftp-process-msg ange-ftp-process-verbose cursor-in-echo-area ange-ftp-xfer-size substring 0 selected-window minibuffer-window boundp search-message ash -6 ange-ftp-message "%s...%dk" floor 100.0 "%s...%d%%" ange-ftp-last-percent] 7 (#$ . 27974)])
#@25 

(fn CONT RESULT LINE)
(defalias 'ange-ftp-call-cont #[771 "\205<\203@\300=\204\301@A$\207\"\207" [lambda apply] 8 (#$ . 28629)])
#@17 

(fn PROC STR)
(defalias 'ange-ftp-process-filter #[514 "\306\307\"\203\310\311\312\211$\262\202\313\314!!\205\316r\314!q\210\2030\306\315\"\2030\316!\262\317\"\210	\320!{\262\203P\nP\306\321\n\"\203P\322\323\"\210\203\231\306\323\n\"\203\231\324\n\325\211\224#\312\324\n\325\225\"\306\326\"\203|\327\262\324\325\225\"\262\202h\211\203\204\204\214\330\"\210\202\224\331!\210\312\266\202P?\205\315\325\203\273\203\273 \203\273\332\333\"\210\334 \210\312!\205\315!\312!\335 \f#\262)\207" [ange-ftp-process-busy comint-last-output-start ange-ftp-process-string ange-ftp-pending-error-line ange-ftp-process-result-line ange-ftp-xfer-size 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" substring 0 "\\`ftp> *" t ange-ftp-process-handle-line delete-process ange-ftp-message "%s...done" ange-ftp-repaint-minibuffer ange-ftp-call-cont ange-ftp-process-msg ange-ftp-process-verbose ange-ftp-process-result ange-ftp-process-continue] 7 (#$ . 28783)])
#@80 When FTP process changes state, nuke all file-entries in cache.

(fn PROC STR)
(defalias 'ange-ftp-process-sentinel #[514 "\301!\302\303\"\203\304\305\"\304\306\"\307\"\266\210\310\211\207" [ange-ftp-ls-cache-file process-name string-match "\\*ftp \\([^@]+\\)@\\([^*]+\\)\\*" match-string 1 2 ange-ftp-wipe-file-entries nil] 8 (#$ . 29932)])
#@81 Return whether to access this HOST via a normal (non-smart) gateway.

(fn HOST)
(defalias 'ange-ftp-use-gateway-p #[257 "?\205	\303\304\305#)\266\203?\207" [ange-ftp-smart-gateway ange-ftp-local-host-regexp inhibit-changing-match-data nil t string-match] 8 (#$ . 30290)])
#@68 Return whether to access this HOST via a smart gateway.

(fn HOST)
(defalias 'ange-ftp-use-smart-gateway-p #[257 "\205	\303\304\305#)\266\203?\207" [ange-ftp-smart-gateway ange-ftp-local-host-regexp inhibit-changing-match-data nil t string-match] 8 (#$ . 30576)])
#@78 This routine will return the name of a new file.

(fn HOST &optional SUFFIX)
(defalias 'ange-ftp-make-tmp-name #[513 "\302\303!\203\202\f	\304#\207" [ange-ftp-gateway-tmp-name-template ange-ftp-tmp-name-template make-temp-file ange-ftp-use-gateway-p nil] 6 (#$ . 30854)])
#@48 Force to delete temporary file.

(fn FILENAME)
(defalias 'ange-ftp-del-tmp-name #[257 "\300!\207" [delete-file] 3 (#$ . 31138)])
(defvar ange-ftp-gwp-running t)
(defvar ange-ftp-gwp-status nil)
#@17 

(fn PROC STR)
(defalias 'ange-ftp-gwp-sentinel #[514 "\301\211\207" [ange-ftp-gwp-running nil] 4 (#$ . 31339)])
#@17 

(fn PROC STR)
(defalias 'ange-ftp-gwp-filter #[514 "\306\"\210r\307!q\210\310!{\262)\311\312\"\203&\313\314\315\n!)\316P\"\207\311\317\"\2039\313\320\n\315\n!\"\316P\"\207\311\"\203H\321!\210\322\211\207\311
\"\205U\322\314\211\207" [comint-last-output-start ange-ftp-default-user ange-ftp-gateway-host ange-ftp-gateway-fatal-msgs ange-ftp-gwp-running ange-ftp-gateway-prompt-pattern 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-status] 8 (#$ . 31460)])
#@84 Login to the gateway machine and fire up an FTP process.

(fn HOST USER NAME ARGS)
(defalias 'ange-ftp-gwp-start #[1028 "\203	\306\300\211\"\210\307\310\211\n$)\311\312\313#\314\315\"\210\316\317\"\210\320\321\"\210r\322!q\210db\210\323!`\315\223\210)\307\315\324\325\"\210\f\203K\326!\210\202@
\204W\327\330#\210\324\331\"\210\307\315\332\"\210\f\203q\326!\210\202f
\204}\327\333#\210\307\315\332\334\335Q\"\210\207" [non-essential process-connection-type ange-ftp-gateway-program ange-ftp-gateway-host ange-ftp-gwp-running ange-ftp-gwp-status 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" ange-ftp-gateway-setup-term-command] 11 (#$ . 32086)])
#@666 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.

(fn PROC CMD &optional MSG CONT NOWAIT)
(defalias 'ange-ftp-raw-send-cmd #[1282 "\306!\307>\205\217r\310!q\210\311!\210\312\211\313\314\211\315 \316!\317P\262\203:\"\203:\320\321\"\210db\210#`\314\223\210\322 \323\315\324\325\326!\327\"\330$\216\331\332\"\203f\333\315\211\225#\334\261\210\202ic\210)\210$`\314\223\210\335\"\210\336!`\314\223\210\211?\205\216\311!\210?\205\216	B)\207" [ange-ftp-process-string ange-ftp-process-result-line ange-ftp-process-busy ange-ftp-process-result ange-ftp-process-multi-skip ange-ftp-process-msg process-status (run open) process-buffer ange-ftp-wait-not-busy "" t nil 0 -1 "\n" ange-ftp-message "%s..." match-data make-byte-code "\301\300\302\"\207" vconcat vector [set-match-data evaporate] 3 string-match "\\`user \"[^\"]*\"" substring " Turtle Power!\n" process-send-string process-mark ange-ftp-process-continue ange-ftp-hash-mark-count ange-ftp-last-percent ange-ftp-process-verbose comint-last-input-start comint-last-input-end] 13 (#$ . 33146)])
#@13 

(fn PROC)
(defalias 'ange-ftp-wait-not-busy #[257 "r\303!q\210\3041\305\211\n\205\306!\210\202*0\202'\210\307!\210\310\311\305\")\207" [inhibit-quit quit-flag ange-ftp-process-busy process-buffer (quit) nil accept-process-output delete-process signal quit] 4 (#$ . 34811)])
#@82 Attempt to resolve the given HOSTNAME using nslookup if possible.

(fn HOSTNAME)
(defalias 'ange-ftp-nslookup-host #[257 "\203K\304	!\203	\202\n\305\306\307\211$)\310\311\"\210r\312!q\210\313!\314>\2035\315!\210\202&eb\210\316\317\311\305#\203E\320\321!\262\322p!\210*\207\207" [ange-ftp-nslookup-program default-directory exec-directory process-connection-type ange-ftp-real-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] 8 (#$ . 35105) "sHost:  "])
#@213 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.

(fn HOST USER NAME)
(defalias 'ange-ftp-start-process #[771 "\203	\306\300\211\"\210\307!	?\205\310!\204\211\203 \n\202!\311C\f\"\312\313#!\2034#\2026$#\312\314\315%!\316!%&r\211q\210\317 \210)\320\321\322\"\210\203\201'\203n\323$\262\202\213\324\325\n\211\311(	D\n\"$\262\202\213\324\325\n\211$\262*\266r\326!q\210db\210\327!`\312\223\210)\330\312\"\210\331\332\"\210\333\334\"\210)\335=\203\277\336\337\"\210\340\341\"\210\342!\210*\207" [non-essential ange-ftp-gateway-host ange-ftp-gateway-ftp-program-name ange-ftp-ftp-program-name ange-ftp-ftp-program-args file-name-handler-alist throw ange-ftp-use-gateway-p ange-ftp-use-smart-gateway-p append nil ange-ftp-real-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 default-directory exec-directory process-environment process-connection-type ange-ftp-gateway-program-interactive ange-ftp-gateway-program system-type] 18 (#$ . 35769)])
(defvar internal-ange-ftp-mode-hook nil)
(byte-code "\300\301N\204\f\302\300\301\303#\210\304\305!\204\302\305\306\307#\210\300\207" [internal-ange-ftp-mode-hook variable-documentation put "Hook run after 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] 4)
(defvar internal-ange-ftp-mode-map (make-sparse-keymap))
(byte-code "\301\302N\204\303\301\302\304\305!#\210\306\307!\204\303\307\310\311#\210\312\313 !\210\307\302N\204-\303\307\302\304\314!#\210\306\300!\204B\303\300\310\311#\210\315\316\300\317\"\210!\210\300\302N\204P\303\300\302\304\320!#\210\303\311\321\322#\207" [internal-ange-ftp-mode-abbrev-table 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 (lambda (#1=#:def-tmp-var) (defvar internal-ange-ftp-mode-syntax-table #1#)) make-syntax-table "Syntax table for `internal-ange-ftp-mode'." (lambda (#1#) (defvar internal-ange-ftp-mode-abbrev-table #1#)) define-abbrev-table nil "Abbrev table for `internal-ange-ftp-mode'." derived-mode-parent comint-mode] 5)
#@253 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 or penultimate step
during initialization.
(defalias 'internal-ange-ftp-mode #[0 "\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\2035\211\321 =\203;\322\f\323 \"\210\210\324
\325\"\204R
-=\204R\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\350.\306\351!\210/)\306\352!\210.*)\353\354!\207" [delay-mode-hooks major-mode mode-name internal-ange-ftp-mode-map internal-ange-ftp-mode-syntax-table internal-ange-ftp-mode-abbrev-table 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 paragraph-start run-mode-hooks internal-ange-ftp-mode-hook local-abbrev-table comint-prompt-regexp regexp-unmatchable] 6 (#$ . 38570) nil])
(byte-code "\300\301\302\303\304DD\305\306\307\310\311\312\313&	\207" [custom-declare-variable ange-ftp-raw-login funcall function #[0 "\300\207" [nil] 1] "Use raw FTP commands for login, if account password is not nil.\nSome FTP implementations need this, e.g. ftp in NT 4.0." :group ange-ftp :version "21.3" :type boolean] 10)
#@223 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'.

(fn HOST USER PASSWORD ACCOUNT PROC)
(defalias 'ange-ftp-smart-login #[1285 "\302\303\304\305!	#\303\306	##\211@\204 \307\310AP#\210\302\303\311\305!		%\303\312	##\262\211@\206X\313\314#\210\315\314#\210\307\316AP#\207" [ange-ftp-gateway-host ange-ftp-smart-gateway-port 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: "] 14 (#$ . 40612)])
#@231 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.

(fn HOST USER PASSWORD ACCOUNT PROC)
(defalias 'ange-ftp-normal-login #[1285 "\304 \305\306\307\310\311!\312\"\313$\216\314\315\"\210\316\317\320\"!\317\313\"\321\203.\322\323#\2022\322\324\"\322\325\f\"#\211@\204H\326		\327AP#\210\203S\330\231\204\204\321\331!\203n	\203n\322\332\f\f%\202w\322\333$\322\334\f##\262\202\356\n\n\335P\314\336\"\203\230\337\330\340\211$\314\341\"\203\246\337\330\340\211$\321\322\342
\"\322\334##\262@\203\352\321\322\343\f\"\322\334##\211\262\203\352@\203\352\321\322\344\"\322\334##\262\210\211@\206
\345		\346#\210\347		\346#\210\326		\350AP#\266\203)\207" [ange-ftp-raw-login ange-ftp-gateway-host ange-ftp-good-msgs ange-ftp-skip-msgs match-data make-byte-code 0 "\301\300\302\"\207" vconcat vector [set-match-data evaporate] 3 string-match "\\`\\([^#]+\\)\\(#\\([0-9]+\\)\\)?\\'" ange-ftp-nslookup-host match-string 1 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: "] 18 (#$ . 41390)])
#@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]+\\)" (#$ . 42979))
#@13 

(fn PROC)
(defalias 'ange-ftp-guess-hash-mark-size #[257 "\205Ar\305!q\210\306\307\"\211A\310 \311\312\313\314\315!\316\"\317$\216\320	\"\205;\321\322\323\"!\211\324\325\"\f\2069\211\211\262)\262\266\202)\207" [ange-ftp-send-hash ange-ftp-hash-mark-msgs ange-ftp-ascii-hash-mark-size ange-ftp-hash-mark-unit ange-ftp-binary-hash-mark-size process-buffer ange-ftp-raw-send-cmd "hash" match-data make-byte-code 0 "\301\300\302\"\207" vconcat vector [set-match-data evaporate] 3 string-match string-to-number match-string 1 ash -4] 10 (#$ . 43133)])
(defvar ange-ftp-process-startup-hook nil)
#@115 Return an FTP subprocess connected to HOST and logged in as USER.
Create a new process if needed.

(fn HOST USER)
(defalias 'ange-ftp-get-process #[514 "\306\"\307!\211\203\310!\311>\203\211\202\230\203 \312\300\211\"\210\211\203(\313!\210\314\315\"!\314\316\"!\317#\262\320!\203Y	\203Y\321%\210\202d\322%\210\323!\210\324\"\210\325\326\327#\206\f\205\330\211\203\210\331\"\210)\210\332\333!\210*\266\211\207" [non-essential ange-ftp-gateway-host case-fold-search ange-ftp-passive-host-alist ange-ftp-try-passive-mode ange-ftp-this-host 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 ange-ftp-this-user] 12 (#$ . 43747)])
#@23 

(fn PROC ON-OR-OFF)
(defalias 'ange-ftp-passive-mode #[514 "\300\301P\302\303P\304\305$A\"\203\306\304P!\207\307\310!\207" [string-match "Passive mode " ange-ftp-raw-send-cmd "passive " "Trying passive mode..." nil ange-ftp-message error "Trying passive mode...failed"] 9 (#$ . 44794)])
(defvar ange-ftp-host-cache nil)
(defvar ange-ftp-host-type-cache nil)
#@183 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.

(fn HOST &optional USER)
(defalias 'ange-ftp-host-type #[513 "\204\302\207=\203	\207\211\203!\303\"\203!=\203!	\207\304!\203-\305\202~\306\307!\203=\307!\203=\310\202~\306\311!\203M\311!\203M\312\202~\306\313!\203]\313!\203]\314\202~\306\315!\203m\315!\203m\316\202~\306\317!\203}\317!\203}\320\202~\302\211\207" [ange-ftp-host-cache ange-ftp-host-type-cache 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] 5 (#$ . 45167)])
#@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 (#$ . 45947))
#@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 (#$ . 46219))
#@67 List of host types that can't take UNIX ls-style listing options.
(defvar ange-ftp-dumb-host-types '(dumb-unix) (#$ . 46512))
#@293 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.

(fn HOST USER CMD &optional MSG CONT NOWAIT)
(defalias 'ange-ftp-send-cmd #[1539 "@A@\306\211\211\211\211\203\344\3078\262\310\"\262	\311=\203\233\236A\206:\312	!\262	\3138\262\314=\203`\315\316\n\"\203`\315\317\"\204`\320P\262	\315\321\n\"\203x\322A@\323$\262\320\262	\f>\204\344\324\262\n\320\232\204\225\322A@\323$\262\262	\202\344
\236A\206\243\312\262	\325>\203\265	!\262	\202\344	\326>\204\312	\327=\203\322\330\235\203\322!\262\202\344	\331=\203\344	!\262	!\262\332\n!\262\n		\205\365\321\nP\205\376\321PQ\262\211:\203\211@\204\211\202R\306C\306C\333\334\"\335\336\337\340\341\n\n\"\342\"\343\344%\257%\210\f?\205P
?\205P\242\242B\266\202+\207" [ange-ftp-this-msg ange-ftp-this-host ange-ftp-this-user ange-ftp-fix-dir-name-func-alist ange-ftp-dumb-host-types ange-ftp-fix-name-func-alist 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 make-byte-code 2056 "\204\300\240\210\301\240\210\203\302		#\207\303\304\"\305\306\307\310\311\300\301\"\312\"\313\314%D%\207" vconcat vector [ange-ftp-call-cont ange-ftp-raw-send-cmd ange-ftp-get-process make-byte-code 771 "\211\204\f\300\240\210\301\240\210\302#\207" vconcat vector [ange-ftp-call-cont] 7 "\n\n(fn RESULT LINE CONT)"] 19 "\n\n(fn RESULT LINE HOST USER CMD MSG CONT NOWAIT)"] 29 (#$ . 46645)])
(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]+:" (#$ . 48845))
#@41 Valid username for an BS2000 file name.
(defconst ange-ftp-bs2000-filename-username-regexp "\\$[A-Z0-9]*\\." (#$ . 48966))
#@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) (#$ . 49095))
(defconst ange-ftp-bs2000-name-template (concat "^" ange-ftp-bs2000-filename-prefix-regexp "$"))
#@103 Guess the host type of HOST.
Works by doing a pwd and examining the directory syntax.

(fn HOST USER)
(defalias 'ange-ftp-guess-host-type #[514 "\306!\307\310R\311=\203\330\312 \313\314\315\316\317!\320\"\321$\216\322\"\211@\323\204D\324\325!\210\326\327!\210\330\331A\"\203\264\332!\210\333\202\264\330\n\"\203X\334!\210\335\202\264\330\"\203l\336!\210\337\202\264\330\f\"\203\200\332!\210\333\202\264\340!\203\224\341!\210\342\202\264\330
\"\203\257\340!\204\257\341!\210\343\202\264\311'(	)\236A\262\211\203\315\211\344\"\262*\345*#\266)\210\333=\205\346*\"?\205\322\"@\211\203\373\345\307P*#\202\324\325!\210\326\327!\262\207" [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-host-type "/" "/~" unix match-data make-byte-code 0 "\301\300\302\"\207" vconcat vector [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 ange-ftp-this-host ange-ftp-this-user ange-ftp-fix-name-func-alist ange-ftp-expand-dir-hashtable] 12 (#$ . 49407)])
#@13 

(fn HOST)
(defalias 'ange-ftp-dumb-unix-host #[257 "\211\205\205\302\303\304#)\266\203\207" [ange-ftp-dumb-unix-host-regexp inhibit-changing-match-data nil t string-match] 8 (#$ . 50876)])
#@80 Interactively add a given HOST to `ange-ftp-dumb-unix-host-regexp'.

(fn HOST)
(defalias 'ange-ftp-add-dumb-unix-host #[257 "\302!?\205\303\304!\305\205\306\260\307\211\207" [ange-ftp-dumb-unix-host-regexp ange-ftp-host-cache ange-ftp-dumb-unix-host "^" regexp-quote "$" "\\|" nil] 6 (#$ . 51084) (byte-code "\301\302\303 \206\211\205\304!@\262\"C\207" [default-directory read-string "Host: " buffer-file-name ange-ftp-ftp-name] 5)])
#@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 (#$ . 51543))
#@70 Normal hook run before parsing the text of an FTP directory listing.
(defvar ange-ftp-before-parse-ls-hook nil (#$ . 51808))
#@69 Normal hook run after parsing the text of an FTP directory listing.
(defvar ange-ftp-after-parse-ls-hook nil (#$ . 51939))
#@295 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.

(fn FILE LSARGS PARSE &optional NO-ERROR WILDCARD)
(defalias 'ange-ftp-ls #[1283 "\306\307\"\203\310\311\312\313$\262\314!\315!\211\203L\211@A@\316\3178!\320!\321\"\211	>\312\211C\312\211\311\230\203F\322\323\324#!\262\n\203`\n\230\203`\204\\\230\203`\f\202G\325!\240\210\203\204\326\n\n\327!#\210\330\242F\262\202\216\331\242F\262\332\333\334\335\336!\337\"\317$\216\340\n\n\341\342\343!\"$\211\262@\2035r\344
!q\210\345 \210\346\242!\203\307\347\242!\210\202\350\3508!\210\346\242!\203\333\347\242!\210\202\350\351\n\n\341\352\242\"#\210\353\354\312\313#\203\367\310\311!\210\202\350\355b\210\356\357!\210
\203\3609\236A\211\262\203 \202\361!\"\210\356\362!\210\363 \211\364\232?\2051\f)\202F\f?\205F\351\n\n\365AP#)\266\212\202O\366\367!)\207" [ange-ftp-this-file ange-ftp-dumb-host-types ange-ftp-ls-cache-file ange-ftp-ls-cache-lsargs ange-ftp-ls-cache-res ange-ftp-data-buffer-name 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 make-byte-code 0 "\301\300\242!\207" vconcat vector [ange-ftp-del-tmp-name] 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" ange-ftp-retry-time ange-ftp-parse-list-func-alist] 25 (#$ . 52069)])
#@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 (#$ . 54210))
#@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 (#$ . 54514))
#@90 Add a file entry for file NAME, if its directory info exists.

(fn NAME &optional DIR-P)
(defalias 'ange-ftp-add-file-entry #[513 "\302\303!@!\236A\206
\304\"\210\305\211\207" [ange-ftp-add-file-entry-alist ange-ftp-ls-cache-file ange-ftp-host-type ange-ftp-ftp-name ange-ftp-internal-add-file-entry nil] 5 (#$ . 54819)])
#@95 Delete the file entry for file NAME, if its directory info exists.

(fn NAME &optional DIR-P)
(defalias 'ange-ftp-delete-file-entry #[513 "\302\303!@!\236A\206
\304\"\210\305\211\207" [ange-ftp-delete-file-entry-alist ange-ftp-ls-cache-file ange-ftp-host-type ange-ftp-ftp-name ange-ftp-internal-delete-file-entry nil] 5 (#$ . 55153)])
(defalias 'ange-ftp-parse-filename '(macro . #[0 "\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]))
#@17 

(fn SWITCHES)
(defalias 'ange-ftp-ls-parser #[257 "\301\302\303\";\205
\304\305\"\306\211\211\211\307 \310\311\312\313\314!\315\"\316$\216\306\210`\317 \210\320\321#\2051`{\262)\262\211\262\203\344\317 \210\322\306w\210g\262\323=\262\324=\203v\304\325\"\211\203o\326\311\225\304\327\"#\262\326\311#\262\202r\330\262\210\202y\306\262\203\323\211\330\230\204\323\331\332!\203\323\333=?\205\236\304\334\335\336!\335\337!\335\316!Q\"\203\251\304\327\"\204\312\203\264\304\340\"\204\312\211\203\277\304\341\"\204\312\203\321\304\342\"\203\321\326\311\343#\262\266\344\206\332#\210\336y\210\202\344\345\321#\210\344\346\321#\210\207" [directory-listing-before-filename-regexp make-hash-table :test equal string-match "F" nil match-data make-byte-code 0 "\301\300\302\"\207" vconcat vector [set-match-data evaporate] 3 beginning-of-line re-search-forward t "	 0-9" 100 108 " -> " substring "@\\'" "" looking-at ".[-r][-w]\\([^ ]\\)[-r][-w]\\([^ ]\\)[-r][-w]\\([^ ]\\)" 115 "[xst]" match-string 1 2 "/\\'" "\\*\\'" "=\\'" -1 puthash "." ".."] 14 (#$ . 55753)])
#@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 (#$ . 56884))
#@64 Interactively add a DIR to `ange-ftp-dl-dir-regexp'.

(fn DIR)
(defalias 'ange-ftp-add-dl-dir #[257 "\205\301\"?\205\302\303!\205\304R\211\207" [ange-ftp-dl-dir-regexp string-match "^" regexp-quote "\\|"] 5 (#$ . 57102) (byte-code "\301\302\303 \206\211\205\304!\205\305!\262\"C\207" [default-directory read-string "Directory: " buffer-file-name ange-ftp-ftp-name file-name-directory] 5)])
(defalias 'ange-ftp-dl-parser '(macro . #[0 "\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]))
#@27 

(fn &optional SWITCHES)
(defalias 'ange-ftp-parse-dired-listing #[256 "\302 \303\304\305\306\307!\310\"\311$\216\312\313!\203$\314y\210l\203\314y\210\315!\202\205\312\316!\203.\317\202\205m\2036\317\202\205\320\317\321#\203G\322 \210\315!\202\205\320\323\317\321#\203\204\324	!\210\322 \210\325\326\327\"m\204r\330`\331\317w\210`{g\332=#\210\314y\210\202Z\330\333\321#\210\330\334\321#\210\211\262\202\205\317)\207" [directory-listing-before-filename-regexp ange-ftp-this-file match-data make-byte-code 0 "\301\300\302\"\207" vconcat vector [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 "." ".."] 8 (#$ . 57822)])
#@92 For a given DIRECTORY, set or change the associated FILES hashtable.

(fn DIRECTORY FILES)
(defalias 'ange-ftp-set-files #[514 "\211\205\301\302!#\207" [ange-ftp-files-hashtable puthash file-name-as-directory] 6 (#$ . 58692)])
#@81 Return SWITCHES (a string) if suitable for use with ls over ftp.

(fn SWITCHES)
(defalias 'ange-ftp-switches-ok #[257 "\211;\205(\300\301\"\205(\300\302\303\304\305#\"?\205(\300\306\"\205(\300\307\"?\205(\211\207" [string-match "--\\(almost-\\)?all\\>\\|\\(\\`\\| \\)-[[:alpha:]]*[aA]" "\\(\\`\\| \\)--\\w+" replace-regexp-in-string "--\\(almost-\\)?all\\>" "" "\\(\\`\\| \\)-[[:alpha:]]*l" "\\(\\`\\| \\)-[[:alpha:]]*R"] 7 (#$ . 58930)])
#@213 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.

(fn DIRECTORY &optional NO-ERROR)
(defalias 'ange-ftp-get-files #[513 "\303!\262\304\"\206B\305 \306\307\310\311\312!\313\"\314$\216\315\316\301!\203(\317	!\2065\316\302!\2034\317\n!\2065\320\321$\205?\304\")\262\207" [ange-ftp-files-hashtable dired-actual-switches dired-listing-switches file-name-as-directory gethash match-data make-byte-code 0 "\301\300\302\"\207" vconcat vector [set-match-data evaporate] 3 ange-ftp-ls boundp ange-ftp-switches-ok "-al" t] 9 (#$ . 59385)])
#@13 

(fn NAME)
(defalias 'ange-ftp-get-file-part '(macro . #[257 "\300\301\302DDC\303BB\207" [let file file-name-nondirectory ((if (string-equal file "") "." file))] 5 (#$ . 60064)]))
#@17 

(fn DIR FILE)
(defalias 'ange-ftp-allow-child-lookup '(macro . #[514 "\300\301\302D\303D\304BB\305BBD\207" [not let* efile edir ((parsed (ange-ftp-ftp-name edir)) (host-type (ange-ftp-host-type (car parsed)))) ((or (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))))] 7 (#$ . 60252)]))
#@69 Given NAME, return whether there is a file entry for it.

(fn NAME)
(defalias 'ange-ftp-file-entry-p #[257 "\301!\302!\303\"\304!\211\305\230\203\306\202\211\262\203%\307\"\202q\211\310!\311@!\211\312=\203;\313\314\"\206T\211\315>\203J\3168\317\230?\206T\211\320=\205T\313\314\"\266\204\204j\321\322\"\211\262\203j\303\306\"\206q\307\321\323\"\"\207" [ange-ftp-files-hashtable directory-file-name file-name-directory gethash file-name-nondirectory "" "." ange-ftp-hash-entry-exists-p ange-ftp-ftp-name ange-ftp-host-type vms string-match "\\." (mts cms) 2 "/" bs2000 ange-ftp-get-files t no-error] 12 (#$ . 60681)])
#@207 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.

(fn NAME)
(defalias 'ange-ftp-get-file-entry #[257 "\301!\302!\303\"\304!\211\305\230\203\306\202\211\262\203%\303\"\202x\211\307!\310@!\211\311=\203;\312\313\"\206T\211\314>\203J\3158\316\230?\206T\211\317=\205T\312\313\"\266\204\204j\320\321\"\211\262\203j\303\306\"\206x\320\321\"\211\262\205x\303\"\207" [ange-ftp-files-hashtable directory-file-name file-name-directory gethash file-name-nondirectory "" "." ange-ftp-ftp-name ange-ftp-host-type vms string-match "\\." (mts cms) 2 "/" bs2000 ange-ftp-get-files t] 12 (#$ . 61338)])
#@29 

(fn NAME &optional DIR-P)
(defalias 'ange-ftp-internal-delete-file-entry #[513 "\211\203\301!\262\302\"\210\303!\262\304\305!\"\211\2050\302\306!\211\307\230\203+\310\202,\211\262\"\207" [ange-ftp-files-hashtable file-name-as-directory remhash directory-file-name gethash file-name-directory file-name-nondirectory "" "."] 7 (#$ . 62112)])
#@29 

(fn NAME &optional DIR-P)
(defalias 'ange-ftp-internal-add-file-entry #[513 "\211\203	\301!\262\302\303!\"\211\205'\304\305!\211\306\230\203!\307\202\"\211\262#\207" [ange-ftp-files-hashtable directory-file-name gethash file-name-directory puthash file-name-nondirectory "" "."] 7 (#$ . 62476)])
#@93 Get rid of entry for HOST, USER pair from file entry information hashtable.

(fn HOST USER)
(defalias 'ange-ftp-wipe-file-entries #[514 "\301\302\303\304\305!$\306\307\310\311\312\313#\314\"\315\316%\"\210\211\211\207" [ange-ftp-files-hashtable make-hash-table :test equal :size hash-table-size maphash make-byte-code 514 "\303!\211\205\211@A@\300\232\203\301\232\206\304\302#\266\202\207" vconcat vector [ange-ftp-ftp-name puthash] 9 "\n\n(fn KEY VAL)"] 12 (#$ . 62792)])
#@90 Tell the FTP process for the given HOST & USER to switch to binary mode.

(fn HOST USER)
(defalias 'ange-ftp-set-binary-mode #[514 "\302\303#\211@\204\304\305AP#\202)r\306\307\"!q\210\205(\310\311\"\211)\207" [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] 8 (#$ . 63292)])
#@89 Tell the FTP process for the given HOST & USER to switch to ASCII mode.

(fn HOST USER)
(defalias 'ange-ftp-set-ascii-mode #[514 "\302\303#\211@\204\304\305AP#\202)r\306\307\"!q\210\205(\310\311\"\211)\207" [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] 8 (#$ . 63705)])
#@40 

(fn HOST USER DIR &optional NOERROR)
(defalias 'ange-ftp-cd #[1027 "\300\301D\302$\203\211\202\211@\206\303\304AP#\207" [ange-ftp-send-cmd cd "Doing CD" ange-ftp-error "CD failed: "] 10 (#$ . 64113)])
#@235 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.

(fn HOST USER)
(defalias 'ange-ftp-get-pwd #[514 "\300\301\302$\211A\303@\2039\304 \305\306\307\310\311!\312\"\313$\216\314\315\"\2041\314\316\"\2041\314\317\"\2037\320\321\"\262)\210\211B\207" [ange-ftp-send-cmd (pwd) "Getting PWD" nil match-data make-byte-code 0 "\301\300\302\"\207" vconcat vector [set-match-data evaporate] 3 string-match "\"\\([^\"]*\\)\"" "^Remote directory: \\(.*\\)" " \\([^ ]+\\) " match-string 1] 12 (#$ . 64336)])
#@167 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.

(fn HOST USER DIR)
(defalias 'ange-ftp-expand-dir #[771 "\306\"\211\236A\307\307\260\310	\"\211\206\261\311\230\204Q\312\230\204Q\313=\203Q\n\314Q\315\316\fE\317\320\n\"$\211A\321\n\"\205L\322\323\"\262)\266\211\204\225\324\230\203g\325\"@\262\202\225\326\324#\327\330\331\332\333\f\f#\334\"\335$\216\336#\203\223\325\"@\262)\210\211\203\260!\203\251\337\"\262\340	#\210*\211\207" [ange-ftp-fix-name-func-alist ange-ftp-expand-dir-hashtable ange-ftp-expand-dir-regexp ange-ftp-good-msgs null-device ange-ftp-this-host 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 make-byte-code 0 "\303\300\301\302#\207" vconcat vector [ange-ftp-cd] 4 ange-ftp-cd reverse puthash ange-ftp-this-user] 16 (#$ . 65018)])
#@58 Take a string N and short-circuit //, /. and /..

(fn N)
(defalias 'ange-ftp-canonize-filename #[257 "\302\303\"\203\304\305\225S\"\262\306!\211\203\316\211@A@\3078\302\310\"\204\302\311\"\203g\312\305\"\304\305\225\"\313#\211\203Z\314\230\203H\211\202U\211\315\230\203R\202U\211P\262\202b\316\317\304\320\"\"\210\266\202\313\321#\211\203z\322!P\262\202~\316\323!\210\210\302\324\"\204\305\325=\204\224\326!\262\202\270	\203\246\302\324	\"\203\246\326\327\"\202\251\326!\262\302\330\"\203\270\304\307\"\262\302\324\"\203\305\304\320\"\262\331\"\266\203\202\344\332!\333=\203\334\326!\202\344\326\334!\335!\"\207" [system-type default-directory string-match "[^:]+//" substring 0 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] 13 (#$ . 66072)])
#@64 Documented as `expand-file-name'.

(fn NAME &optional DEFAULT)
(defalias 'ange-ftp-expand-file-name #[513 "\301 \302\303\304\305\306!\307\"\310$\216\206\262\311!\203!\312!\2025\313!\203.\314\315\"\2025\312\316!P!)\207" [default-directory match-data make-byte-code 0 "\301\300\302\"\207" vconcat vector [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] 9 (#$ . 67216)])
#@57 Documented as `substitute-in-file-name'.

(fn FILENAME)
(defalias 'ange-ftp-substitute-in-file-name #[257 "\211\301\211?\205\302\303\304!\")\266\202\203\207\305!\207" [file-name-handler-alist nil string-prefix-p "/:" file-local-name ange-ftp-real-substitute-in-file-name] 7 (#$ . 67711)])
#@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 (#$ . 68015))
#@52 Documented as `file-name-as-directory'.

(fn NAME)
(defalias 'ange-ftp-file-name-as-directory #[257 "\302!\211\203'\203\3038\304\230\203\202*\305@!	\236A\206\"\306!\202*\306!\207" [non-essential ange-ftp-file-name-as-directory-alist ange-ftp-ftp-name 2 "" ange-ftp-host-type ange-ftp-real-file-name-as-directory] 4 (#$ . 68202)])
#@49 Documented as `file-name-directory'.

(fn NAME)
(defalias 'ange-ftp-file-name-directory #[257 "\301!\211\203)\3028\303\304\305\306#)\266\203\203\202$\307\310!\"\262\202,\310!\207" [inhibit-changing-match-data ange-ftp-ftp-name 2 "\\`~[^/]*\\'" nil t string-match ange-ftp-replace-name-component ange-ftp-real-file-name-directory] 10 (#$ . 68553)])
#@52 Documented as `file-name-nondirectory'.

(fn NAME)
(defalias 'ange-ftp-file-name-nondirectory #[257 "\301!\211\203&\3028\303\304\305\306#)\266\203\203\307\202!\310!\262\202)\310!\207" [inhibit-changing-match-data ange-ftp-ftp-name 2 "\\`~[^/]*\\'" nil t string-match "" ange-ftp-real-file-name-nondirectory] 10 (#$ . 68924)])
#@48 Documented as `directory-file-name'.

(fn DIR)
(defalias 'ange-ftp-directory-file-name #[257 "\300!\211\203\301\302\3038!\"\202\302!\207" [ange-ftp-ftp-name ange-ftp-replace-name-component ange-ftp-real-directory-file-name 2] 7 (#$ . 69271)])
#@13 

(fn FILE)
(defalias 'ange-ftp-binary-file #[257 "\302\303\304#)\207" [ange-ftp-binary-file-name-regexp inhibit-changing-match-data nil t string-match] 8 (#$ . 69528)])
#@69 

(fn START END FILENAME &optional APPEND VISIT LOCKNAME MUSTBENEW)
(defalias 'ange-ftp-write-region #[1795 "\302!\262\211\203\303\304\305=?#\210\306!\211\203\347\211@A@\307\3108!\311!\312\n!	\2033\313\2024\314\315\f!C\316\317\320\321\322\f\f$\323\"\324$\216\301 \325 \316\317\326\321\322#\327\"\310$\216\330	\331\206p\332%\210\240\210)\266\203\204\333\"\210\334!\211\203\230\335		\3368\262#\210\210\337\nE\340\341\"$\211@\204\274\342\343\344\340\345A\"E\"\210\210)\346=\203\326\347\350!!\210\351 \210
\352\331!\210\211\242\353\354\"\210\355!\266\210\202\363\330%\207" [last-coding-system-used buffer-file-name expand-file-name ange-ftp-barf-or-query-if-file-exists "overwrite" excl ange-ftp-ftp-name ange-ftp-quote-string 2 ange-ftp-make-tmp-name ange-ftp-binary-file append put ange-ftp-abbreviate-filename make-byte-code 0 "\304\302!\210\303\205\f\305\300\301\"\207" vconcat vector [ange-ftp-del-tmp-name ange-ftp-set-ascii-mode] 3 buffer-modified-p "\300\240\210\301\305\302!\207" [last-coding-system-used buffer-file-name restore-buffer-modified-p] 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] 26 (#$ . 69710)])
#@49 

(fn FILENAME &optional VISIT BEG END REPLACE)
(defalias 'ange-ftp-insert-file-contents #[1281 "\305 \210\306!\262\307!\211\203\336\203\310!\204-\311\312\313!\n\"\210\310!\203\323\211@A@\314\3158!\316!\317\n!\320!\311\321\322\323\324\325\f\f$\326\"\327$\216\203b\330\"\210\331\332		E\333\334\"$\211@\204\205\335\336\337\333\340A\"E\"\210\210\341!\204\230\342\f!\204\230\341!\203\255\343%A@\262\262\202\270\335\336\344\333\345\"D\"\210)\f\203\310\346\347!!\210

D\266\210\202\352\335\350\337\351	E\"\202\352\343%\207" [buffer-file-name ange-ftp-ls-cache-file ange-ftp-files-hashtable last-coding-system-used ange-ftp-retry-time 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 make-byte-code 0 "\303\203\f\305\306\300\301\"\210)\307\302!\207" vconcat vector [last-coding-system-used 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-missing "No such file or directory"] 23 (#$ . 71229)])
#@17 

(fn FILE DIR)
(defalias 'ange-ftp-expand-symlink #[514 "\300!\203
\301\"\202\302\"\303!\203$\304\305!\306\307!!\"\202%\211\207" [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] 8 (#$ . 72691)])
#@13 

(fn FILE)
(defalias 'ange-ftp-file-symlink-p #[257 "\300!\262\301!\203:\30217\303\304!!\211\2053\305\306!\211\307\230\203&\310\202'\211\262\"\211\262;\2053\211\2620\207\210\311\207\312!\207" [ange-ftp-expand-file-name ange-ftp-ftp-name (file-error) ange-ftp-get-files file-name-directory gethash file-name-nondirectory "" "." nil ange-ftp-real-file-symlink-p] 6 (#$ . 73032)])
#@13 

(fn FILE)
(defalias 'ange-ftp-file-regular-p #[257 "\300!\203\301!\205\302!\3038\262\304H\305=\207\306!\207" [ange-ftp-ftp-name file-exists-p file-attributes 8 0 45 ange-ftp-real-file-regular-p] 4 (#$ . 73433)])
#@13 

(fn NAME)
(defalias 'ange-ftp-file-exists-p #[257 "\300!\262\301!\203)\302!\205,\303!\211;\203'\304\305\306\307!!\"!\202(\310\207\311!\207" [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] 8 (#$ . 73663)])
#@24 

(fn FILENAME STRING)
(defalias 'ange-ftp-access-file #[514 "\300\301!!?\205\302\303\304E\"\207" [file-readable-p file-truename signal file-missing "%s: No such file or directory %s"] 7 (#$ . 74041)])
#@13 

(fn NAME)
(defalias 'ange-ftp-file-directory-p #[257 "\300!\262\301!\203%\302\303!!\211;\203#\304\305\306\307!!\"!\202$\211\207\310!\207" [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] 8 (#$ . 74254)])
#@13 

(fn NAME)
(defalias 'ange-ftp-file-accessible-directory-p #[257 "\300!\205	\301!\207" [file-directory-p file-readable-p] 3 (#$ . 74642)])
#@54 

(fn DIRECTORY &optional FULL MATCH &rest V19-ARGS)
(defalias 'ange-ftp-directory-files #[897 "\301!\262\302!\203R\303!\210\304\305!!\306\211\307!\262\203O@\262A\262\203<\306\310\311#)\266\203\203\203GP\202H\211B\262\202\237\207\312\313%\207" [inhibit-changing-match-data 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] 14 (#$ . 74791)])
#@56 

(fn DIRECTORY &optional FULL MATCH NOSORT ID-FORMAT)
(defalias 'ange-ftp-directory-files-and-attributes #[1281 "C\211\300\242!\240\210\301\242!\203,\302\303\304\305\306\307!\310\"\311\312%\313\242$\"\2028\314\242%\207" [expand-file-name ange-ftp-ftp-name mapcar make-byte-code 257 "\211\301\302\300\242\"!B\207" vconcat vector [file-attributes expand-file-name] 6 "\n\n(fn FILE)" ange-ftp-directory-files ange-ftp-real-directory-files-and-attributes] 13 (#$ . 75317)])
#@33 

(fn FILE &optional ID-FORMAT)
(defalias 'ange-ftp-file-attributes #[513 "\302!\262\303!\211\203\236\304!\211\305\230\203\306\202\211\262\307\310!!\311\"\205\231\312\"\312\"\211\204B	\262\211T\313#\210;\203W\314!\203W\315\310	!\"\202X\316\317=\203d\320\202e\316\317=\203p\320\202q\316\321\322\f!\323\324!	;\203\205\325\202\217	\203\216\326\202\217\327\330P\331\n\316\257\f\266\202\266\202\202\254\203\251\332\"\202\254\332!\207" [ange-ftp-inodes-hashtable ange-ftp-next-inode-number expand-file-name ange-ftp-ftp-name file-name-nondirectory "" "." ange-ftp-get-files file-name-directory ange-ftp-hash-entry-exists-p gethash puthash file-name-absolute-p ange-ftp-expand-symlink -1 string "nobody" (0 0) ange-ftp-file-modtime (0 0) ange-ftp-file-size "l" "d" "-" "?????????" nil ange-ftp-real-file-attributes] 19 (#$ . 75818)])
#@14 

(fn F1 F2)
(defalias 'ange-ftp-file-newer-than-file-p #[514 "\300!\300!\204\211\2037\301!\3028\262\301!\3028\262\204&\303\2022\211\204.\304\2022\305\"\266\202\202;\306\"\207" [ange-ftp-ftp-name file-attributes 5 nil t time-less-p ange-ftp-real-file-newer-than-file-p] 9 (#$ . 76710)])
#@13 

(fn FILE)
(defalias 'ange-ftp-file-writable-p #[257 "\301\302!\262\303!\203\304!\206\305\306!!\202\307!)\207" [ange-ftp-process-verbose nil expand-file-name ange-ftp-ftp-name file-exists-p file-directory-p file-name-directory ange-ftp-real-file-writable-p] 4 (#$ . 77025)])
#@13 

(fn FILE)
(defalias 'ange-ftp-file-readable-p #[257 "\301\302!\262\303!\203\304!\202\305!)\207" [ange-ftp-process-verbose nil expand-file-name ange-ftp-ftp-name file-exists-p ange-ftp-real-file-readable-p] 3 (#$ . 77320)])
#@13 

(fn FILE)
(defalias 'ange-ftp-file-executable-p #[257 "\301\302!\262\303!\203\304!\202\305!)\207" [ange-ftp-process-verbose nil expand-file-name ange-ftp-ftp-name file-exists-p ange-ftp-real-file-executable-p] 3 (#$ . 77561)])
#@29 

(fn FILE &optional TRASH)
(defalias 'ange-ftp-delete-file #[513 "\300!\262\301!\211\203A\211@A@\302\3038!\304!\305\306D\307\310\"$\211@\2048\311\312\313\307\314A\"E\"\210\315!\266\205\202E\316\"\207" [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] 14 (#$ . 77806) (byte-code "\302\303\304#	?D\207" [default-directory current-prefix-arg read-file-name "Delete file: " nil] 4)])
#@124 Return the modification time of remote file FILE.
Value is (0 0) if the modification time cannot be determined.

(fn FILE)
(defalias 'ange-ftp-file-modtime #[257 "\302!\303P\304@A@\305\306AA@E#\211A\307\310\311\312\313#)\266\203\203\\\314\315\316\317\320#!\315\316\321\317#!\315\316\322\321#!\315\316\323\322#!\315\316\324\323#!\315\316	\325\324#!\326&\262)\207" [ange-ftp-skip-msgs inhibit-changing-match-data 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 substring 16 18 14 12 10 8 4 0] 16 (#$ . 78413)])
#@12 

(fn BUF)
(defalias 'ange-ftp-verify-visited-file-modtime #[257 "\300!\211;\203)\301!\203)\302!rq\210\303 )@\304U\206$\305\"?\266\202\202,\306!\207" [buffer-file-name ange-ftp-ftp-name ange-ftp-file-modtime visited-file-modtime 0 time-less-p ange-ftp-real-verify-visited-file-modtime] 7 (#$ . 79038)])
#@367 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.

(fn FILE &optional ASCII-MODE)
(defalias 'ange-ftp-file-size #[513 "\301!\211@A@\302\3038!\304P\305\306\307\310\311	#\312\"\313$\216\204+\314\"\210\315\316\317E#)\211A\320\321\"\203F\322\323\324\"!\202G\325)\207" [ange-ftp-skip-msgs ange-ftp-ftp-name ange-ftp-quote-string 2 "\\|^226" make-byte-code 0 "\300?\205	\303\301\302\"\207" vconcat vector [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] 14 (#$ . 79360)])
#@40 

(fn ABSNAME QUERYSTRING INTERACTIVE)
(defalias 'ange-ftp-barf-or-query-if-file-exists #[771 "\300!\205 \211\204\301\302C\"\207\303\304\305#!?\205 \301\302C\"\207" [file-exists-p signal file-already-exists yes-or-no-p format "File %s already exists; %s anyway? "] 8 (#$ . 80243)])
#@68 

(fn DIRECTORY NEWNAME &optional KEEP-DATE PARENTS COPY-CONTENTS)
(defalias 'ange-ftp-copy-directory #[1282 "\300!\204\301\302\303D\"\210\304%\207" [file-exists-p signal file-missing "No such file or directory" ange-ftp-real-copy-directory] 11 (#$ . 80540)])
#@82 

(fn FILENAME NEWNAME OK-IF-ALREADY-EXISTS KEEP-DATE &optional MSG CONT NOWAIT)
(defalias 'ange-ftp-copy-file-internal #[1796 "\300!\262\300!\262\301!\204\302\303\304\305\nE\"\210\204.\301!\203.\302\306C\"\210\307!\203D\310!\204D\302\311\312D\"\210\307!\203U\300\313!\"\262\314!\314!\204|\211\204|\315				$\210\205}\316\317\320#\202}\205\202@\205\211A@\205\222\321\3228!\323\f!\205\234@\205\243A@\205\256\321\3228!\323\"\324!\206\277\324!\325\211\203\314\247\203\325\326\327\247#\210\f\203T\330!\204\346\203\354\331!\262\203\367\332\"\210\333\334\f\206\321!E\206&\203\203\335\336
\"\202&\335\337
\n#\340\n$$\257&\202{\340\317\325\325\211!!&\266\213\207" [expand-file-name file-exists-p signal file-missing "Copy file" "No such file or directory" file-already-exists file-directory-p directory-name-p file-error "File is a directory %s" 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] 44 (#$ . 80816)])
(defvar ange-ftp-waiting-flag nil)
#@146 

(fn 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)
(defalias 'ange-ftp-cf1 #[5140 "\203A\301\302\303\304\305#\306\"\307$\216\204@\203#\310!\210\204@\2033\311\312\313\"\210\202@\314\312\315\316\317\"E\"\210)\203\203\372\320!\203X\321!\262\203~\203u\230\203l\322\262\202\211\323\313#\210\202\211\262\322\262\202\211\203\211\323\313#\210\203\225\324\"\210\325\206\234!\211\203\256\326		\3278\262#\210\210\330\331\206\276\332!\nE\206\337\203\330\203\330\316\333\"\202\337\316\334#\335


\257&\210\336!\207\335\313\322\n\n\n&	\207\337#\207" [ange-ftp-waiting-flag make-byte-code 0 "\300\205\303\301\302\"\207" vconcat vector [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] 33 (#$ . 82291)])
#@66 

(fn RESULT LINE NEWNAME T-HOST T-USER BINARY TEMP1 TEMP2 CONT)
(defalias 'ange-ftp-cf2 #[2313 "\301\302\303\304\305

			%\306\"\307$\216\203U\301\302\310\304\305\n\n\n#\311\"\312$\216\204M\211\204M\203@\313\314\315\"\210\202M\316\314\317\320\321\f\"\nE\"\210\322!)\202_\205_\323\315#)\207" [ange-ftp-waiting-flag make-byte-code 0 "\302\203\305\302!\210\303\203\305\303!\210\306\304\300\301#\207" vconcat vector [ange-ftp-del-tmp-name ange-ftp-call-cont] 4 "\302\205\303\300\301\"\207" [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] 19 (#$ . 83561)])
#@108 

(fn FILENAME NEWNAME &optional OK-IF-ALREADY-EXISTS KEEP-DATE PRESERVE-UID-GID PRESERVE-SELINUX-CONTEXT)
(defalias 'ange-ftp-copy-file #[1538 "\300\301\211\302\303!&\207" [ange-ftp-copy-file-internal nil called-interactively-p interactive] 15 (#$ . 84258) "fCopy file: \nFCopy %s to file: \np"])
#@516 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)))

(fn OKAY-P LINE VERBOSE-P FILES)
(defalias 'ange-ftp-copy-files-async #[1028 "\204\n\300\301\302#\210\211\2037\211@\211@A@\3038\3048\305\205,\306\307\n\n#\302

AE\310&\207\311\312\302\"\207" [error "%s: %s" ange-ftp-copy-files-async 2 3 ange-ftp-copy-file-internal format "%s --> %s" t message "%s: done"] 18 (#$ . 84572)])
#@94 Rename remote file FILENAME to remote file NEWNAME.

(fn FILENAME NEWNAME F-PARSED T-PARSED)
(defalias 'ange-ftp-rename-remote-to-remote #[1028 "@A@@A@\230\203`\230\203`\300\3018!\300\3018!\302E\303!\303
\"\304		\305\306#$\211@\204R\307\310\311\305\312A\"F\"\210\313
!\210\314!\266\206\202m\315\316\317$\210\320!\207" [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] 21 (#$ . 85403)])
#@75 Rename local file FILENAME to remote file NEWNAME.

(fn FILENAME NEWNAME)
(defalias 'ange-ftp-rename-local-to-remote #[514 "\301!\301\"\302\303#\304\305\306%\210\306\307!)\207" [ange-ftp-process-verbose ange-ftp-abbreviate-filename format "Renaming %s to %s" ange-ftp-copy-file-internal t nil delete-file] 11 (#$ . 86041)])
#@75 Rename remote file FILENAME to local file NEWNAME.

(fn FILENAME NEWNAME)
(defalias 'ange-ftp-rename-remote-to-local #[514 "\301!\301\"\302\303#\304\305\306%\210\306\307!)\207" [ange-ftp-process-verbose ange-ftp-abbreviate-filename format "Renaming %s to %s" ange-ftp-copy-file-internal t nil delete-file] 11 (#$ . 86381)])
#@56 

(fn FILENAME NEWNAME &optional OK-IF-ALREADY-EXISTS)
(defalias 'ange-ftp-rename-file #[770 "\300!\204\301\302\303\304E\"\210\305!\262\305!\262\306!\306!\204'\211\2037\2030\247\2037\307\310\247#\210\203O\211\203H\311$\202_\312\"\202_\211\203Z\313\"\202_\314#\207" [file-exists-p signal file-missing "Copy file" "No such file or directory" 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] 10 (#$ . 86721) "fRename file: \nFRename %s to file: \np"])
#@20 

(fn SYMNAME VAL)
(defalias 'ange-ftp-file-entry-not-ignored-p #[514 "\211;\203\302\"\303!\206\304!\205\305	\"?\207\211\206$\305	\"?\207" [ange-ftp-this-dir ange-ftp-completion-ignored-pattern ange-ftp-expand-symlink file-directory-p file-exists-p string-match] 6 (#$ . 87377)])
#@12 

(fn DIR)
(defalias 'ange-ftp-root-dir-p #[257 "\301=\203
\302\303\"\206\211\304\230\207" [system-type windows-nt string-match "\\`[a-zA-Z]:[/\\]\\'" "/"] 4 (#$ . 87676)])
#@19 

(fn &rest BODY)
(defalias 'ange-ftp-ignore-errors-if-non-essential '(macro . #[128 "\300\301\302B\303BF\207" [if non-essential ignore-errors progn] 6 (#$ . 87860)]))
#@17 

(fn FILE DIR)
(defalias 'ange-ftp-file-name-all-completions #[514 "\302!\303!\203`	\203<\30417\305!\210\306!\307!\310\"\311\312\313\314\315\316!\317\"\320\321%\"\266\2020\202w\210\322\202w\305!\210\306!\307!\310\"\311\312\313\314\315\316!\323\"\320\321%\"\266\202\202w\324!\203s\310\325 \"\326\"\244\202w\326\")\207" [ange-ftp-this-dir non-essential expand-file-name ange-ftp-ftp-name (error) ange-ftp-barf-if-not-directory ange-ftp-real-file-name-as-directory ange-ftp-get-files all-completions mapcar make-byte-code 257 "\302\300\"\211\203\211;\203\303\304	\"!\203\305P\202\207" vconcat vector [ange-ftp-this-dir gethash file-directory-p ange-ftp-expand-symlink #1="/"] 6 "\n\n(fn FILE)" nil [ange-ftp-this-dir gethash file-directory-p ange-ftp-expand-symlink #1#] ange-ftp-root-dir-p ange-ftp-generate-root-prefixes ange-ftp-real-file-name-all-completions] 11 (#$ . 88036)])
#@37 

(fn FILE DIR &optional PREDICATE)
(defalias 'ange-ftp-file-name-completion #[770 "\303!\304!\203J\305!\210\306\232\203\306\202o\307!\310!\311\312	\313#\314 \315\316\317\320\321!\322\"\323$\216\324\325$\206A\324#)\262)\262\202o\326!\203_\327\330 \331\"\244#\202o\211\203k\332#\202o\332\")\207" [ange-ftp-this-dir 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 #[257 "\211;\203\300!\301P\207\302\207" [regexp-quote "$" "/"] 3 "\n\n(fn S)"] "\\|" match-data make-byte-code 0 "\301\300\302\"\207" vconcat vector [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] 11 (#$ . 88969)])
#@41 

(fn FILE TBL DIR &optional PREDICATE)
(defalias 'ange-ftp-file-name-completion-1 #[1027 "\300#\211\205=\211\301=\203#\302\303\"!\203\304P\202=\301\202=\300#\301=\203<\302\303\"!\203<\211\304P\202=\211\207" [try-completion t file-directory-p expand-file-name "/"] 9 (#$ . 89937)])
(defalias 'ange-ftp-re-read-dir 'ange-ftp-reread-dir)
#@343 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.

(fn &optional DIR)
(defalias 'ange-ftp-reread-dir #[256 "\211\203\f\302!\262\202\303\302\304 !!\262\305!\205%\306\307	\"\210\310\311\"\207" [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] 4 (#$ . 90301) nil])
#@30 

(fn DIR &optional PARENTS)
(defalias 'ange-ftp-make-directory #[513 "\211\203\300\301!!\302!\204\303\"\210\210\302!\203'\211?\205{\304\305\306D\"\207\307!\211\203v\211@A@\310\311!\312=\203D\313\3148!\202I\315\3148!!\316!\317\320D\321\322\"$\211@\204l\323\321\324\fA##\210\325\326\"\266\205\202y\327!\262\207" [file-name-directory directory-file-name file-exists-p ange-ftp-make-directory signal file-already-exists "Cannot make directory: 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] 15 (#$ . 90954) (byte-code "\300\301\302!!C\207" [expand-file-name read-directory-name "Make directory: "] 3)])
#@38 

(fn DIR &optional RECURSIVE TRASH)
(defalias 'ange-ftp-delete-directory #[769 "\300!\203~\301!\203%\302\303\304\305\306\307\"\310\"\311\312%\313\314\315#\"\210\211\203x\211@A@\316\317!\320=\203?\321\3228!\202D\323\3228!!\324!\325\326\327$\210\330\331D\332\333\"$\211@\204n\334\332\335
A##\210\336	\337\"\266\205\202}\340#\207\341\342\"\207" [file-directory-p ange-ftp-ftp-name mapc make-byte-code 257 "\302!\203\f\303\300\301#\207\304\301\"\207" vconcat vector [file-directory-p ange-ftp-delete-directory delete-file] 5 "\n\n(fn FILE)" 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"] 16 (#$ . 91896)])
#@13 

(fn FILE)
(defalias 'ange-ftp-file-local-copy #[257 "\300!\301!\211\205!\302@\303\304\"\"\305\304\306\307\310	\"%\210\211\262\207" [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"] 12 (#$ . 92908)])
#@48 

(fn FILE &optional IDENTIFICATION CONNECTED)
(defalias 'ange-ftp-file-remote-p #[769 "\300!\211@A@\3018\203)\302\303\"!\211\205$\304!\205$\305!\306>\262\205H\307\267\202C\205H\310\202H\202H\202H\211\202H\311\312\"\207" [ange-ftp-ftp-name 2 get-process ange-ftp-ftp-process-buffer processp process-status (run open) #s(hash-table size 4 test eq rehash-size 1.5 rehash-threshold 0.8125 purecopy t data (method 47 user 55 host 59 localname 63)) "ftp" ange-ftp-replace-name-component ""] 11 (#$ . 93208)])
#@50 

(fn FILE &optional NOERROR NOMESSAGE NOSUFFIX)
(defalias 'ange-ftp-load #[1025 "\302!\203s\211\203C\202\303P\304PE\305\306C\203E\211\242\204E\3072=\305\31019\211\311@!\2400\202;\210\306)0\210A\262\202\211\242\203d\312\313\314\315\316!\317\"\320$\216\321\242$)\202q\204p\322\323\324	D\"\210\306)\207\325$\207" [load-force-doc-strings ange-ftp-waiting-flag ange-ftp-ftp-name ".elc" ".el" t nil ftp-error (ftp-error) ange-ftp-file-local-copy make-byte-code 0 "\301\300\242!\207" vconcat vector [delete-file] 2 load signal file-error "Cannot open load file" ange-ftp-real-load] 13 (#$ . 93743)])
#@17 

(fn FILENAME)
(defalias 'ange-ftp-unhandled-file-name-directory #[257 "\300\207" [nil] 2 (#$ . 94384)])
#@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 (#$ . 94497))
#@51 Handler used by `dired-compress-file'.

(fn NAME)
(defalias 'ange-ftp-dired-compress-file #[257 "\302!\303\203D\304@!\236A\211\262\203D\305 \306\307\310\311\312!\313\"\314$\216!)\262\211@A@\203:\315\"\202?\316\"\266\203\202J\303\317!)\207" [ange-ftp-make-compressed-filename-alist file-name-handler-alist ange-ftp-ftp-name nil ange-ftp-host-type match-data make-byte-code 0 "\301\300\302\"\207" vconcat vector [set-match-data evaporate] 3 ange-ftp-compress ange-ftp-uncompress dired-compress-file] 10 (#$ . 95004)])
#@19 

(fn FILE NFILE)
(defalias 'ange-ftp-compress #[514 "\303!\304@!\304@!\305!\305!\306\307\"\306\310\"\311\312\313\314\315\n\n\"\316\"\317$\216\320	\321\322%\210\203<\323\324\"\210\325``	\322\321\322\n\306\326#&\210\203W\323\327\"\210\330 \312U\205n\322\331	!\210)\320	\321\322%)\207" [ange-ftp-process-verbose shell-file-name shell-command-switch ange-ftp-ftp-name ange-ftp-make-tmp-name ange-ftp-abbreviate-filename format "Getting %s" "Putting %s" make-byte-code 0 "\302\300!\210\302\301!\207" vconcat vector [ange-ftp-del-tmp-name] 2 ange-ftp-copy-file-internal t nil ange-ftp-message "Compressing %s..." call-process-region "compress -f -c < %s > %s" "Compressing %s...done" buffer-size delete-file] 21 (#$ . 95550)])
#@19 

(fn FILE NFILE)
(defalias 'ange-ftp-uncompress #[514 "\303!\304@!\304@!\305!\305!\306\307\"\306\310\"\311\312\313\314\315\n\n\"\316\"\317$\216\320	\321\322%\210\203<\323\324\"\210\325``	\322\321\322\n\306\326#&\210\203W\323\327\"\210\330 \312U\205n\322\331	!\210)\320	\321\322%)\207" [ange-ftp-process-verbose shell-file-name shell-command-switch ange-ftp-ftp-name ange-ftp-make-tmp-name ange-ftp-abbreviate-filename format "Getting %s" "Putting %s" make-byte-code 0 "\302\300!\210\302\301!\207" vconcat vector [ange-ftp-del-tmp-name] 2 ange-ftp-copy-file-internal t nil ange-ftp-message "Uncompressing %s..." call-process-region "uncompress -c < %s > %s" "Uncompressing %s...done" buffer-size delete-file] 21 (#$ . 96309)])
#@11 

(fn FN)
(defalias 'ange-ftp-find-backup-file-name #[257 "\205\301!\207" [ange-ftp-make-backup-files ange-ftp-real-find-backup-file-name] 3 (#$ . 97073)])
#@29 

(fn OPERATION &rest ARGS)
(defalias 'ange-ftp-hook-function #[385 "\301N\211\2032\3021'\303\304 \305\306\307\310\311!\312\"\313$\216\314\")\262)0\2026\315@A\"\262\2026\316\"\207" [debug-on-error ange-ftp (error) t match-data make-byte-code 0 "\301\300\302\"\207" vconcat vector [set-match-data evaporate] 3 apply signal ange-ftp-run-real-handler] 10 (#$ . 97239)])
(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\201T#\210\303\201U\305\201V#\210\303\201W\305\201X#\210\303\201Y\305\201Z#\210\303\201[\305\201\\#\210\303\201]\305\201^#\210\303\201_\305\201\\#\210\303\201`\305\201\\#\210\303\201a\305\201b#\210\303\201c\305\201\\#\210\303\201d\305\201e#\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 substitute-in-file-name ange-ftp-substitute-in-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-accessible-directory-p ange-ftp-file-accessible-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 file-regular-p ange-ftp-file-regular-p access-file ange-ftp-access-file 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-directory ange-ftp-copy-directory 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 make-symbolic-link ange-ftp-make-symbolic-link add-name-to-file ange-ftp-add-name-to-file file-truename identity set-file-times ignore vc-registered null exec-path make-process process-file ange-ftp-process-file start-file-process shell-command ange-ftp-shell-command] 4)
#@23 

(fn OPERATION ARGS)
(defalias 'ange-ftp-run-real-handler-orig #[514 "\302\303=\205		BB\304\"*\207" [inhibit-file-name-operation inhibit-file-name-handlers ange-ftp-hook-function ange-ftp-completion-hook-function apply] 6 (#$ . 100952)])
(byte-code "\300\301\302\303!\203\f\303\202
\304\"\207" [defalias ange-ftp-run-real-handler fboundp tramp-run-real-handler ange-ftp-run-real-handler-orig] 4)
#@19 

(fn &rest ARGS)
(defalias 'ange-ftp-real-file-name-directory #[128 "\300\301\"\207" [ange-ftp-run-real-handler file-name-directory] 4 (#$ . 101365)])
#@19 

(fn &rest ARGS)
(defalias 'ange-ftp-real-file-name-nondirectory #[128 "\300\301\"\207" [ange-ftp-run-real-handler file-name-nondirectory] 4 (#$ . 101524)])
#@19 

(fn &rest ARGS)
(defalias 'ange-ftp-real-file-name-as-directory #[128 "\300\301\"\207" [ange-ftp-run-real-handler file-name-as-directory] 4 (#$ . 101689)])
#@19 

(fn &rest ARGS)
(defalias 'ange-ftp-real-directory-file-name #[128 "\300\301\"\207" [ange-ftp-run-real-handler directory-file-name] 4 (#$ . 101854)])
#@19 

(fn &rest ARGS)
(defalias 'ange-ftp-real-expand-file-name #[128 "\300\301\"\207" [ange-ftp-run-real-handler expand-file-name] 4 (#$ . 102013)])
#@19 

(fn &rest ARGS)
(defalias 'ange-ftp-real-substitute-in-file-name #[128 "\300\301\"\207" [ange-ftp-run-real-handler substitute-in-file-name] 4 (#$ . 102166)])
#@19 

(fn &rest ARGS)
(defalias 'ange-ftp-real-make-directory #[128 "\300\301\"\207" [ange-ftp-run-real-handler make-directory] 4 (#$ . 102333)])
#@19 

(fn &rest ARGS)
(defalias 'ange-ftp-real-delete-directory #[128 "\300\301\"\207" [ange-ftp-run-real-handler delete-directory] 4 (#$ . 102482)])
#@19 

(fn &rest ARGS)
(defalias 'ange-ftp-real-insert-file-contents #[128 "\300\301\"\207" [ange-ftp-run-real-handler insert-file-contents] 4 (#$ . 102635)])
#@19 

(fn &rest ARGS)
(defalias 'ange-ftp-real-directory-files #[128 "\300\301\"\207" [ange-ftp-run-real-handler directory-files] 4 (#$ . 102796)])
#@19 

(fn &rest ARGS)
(defalias 'ange-ftp-real-directory-files-and-attributes #[128 "\300\301\"\207" [ange-ftp-run-real-handler directory-files-and-attributes] 4 (#$ . 102947)])
#@19 

(fn &rest ARGS)
(defalias 'ange-ftp-real-file-directory-p #[128 "\300\301\"\207" [ange-ftp-run-real-handler file-directory-p] 4 (#$ . 103128)])
#@19 

(fn &rest ARGS)
(defalias 'ange-ftp-real-file-accessible-directory-p #[128 "\300\301\"\207" [ange-ftp-run-real-handler file-accessible-directory-p] 4 (#$ . 103281)])
#@19 

(fn &rest ARGS)
(defalias 'ange-ftp-real-file-writable-p #[128 "\300\301\"\207" [ange-ftp-run-real-handler file-writable-p] 4 (#$ . 103456)])
#@19 

(fn &rest ARGS)
(defalias 'ange-ftp-real-file-readable-p #[128 "\300\301\"\207" [ange-ftp-run-real-handler file-readable-p] 4 (#$ . 103607)])
#@19 

(fn &rest ARGS)
(defalias 'ange-ftp-real-file-executable-p #[128 "\300\301\"\207" [ange-ftp-run-real-handler file-executable-p] 4 (#$ . 103758)])
#@19 

(fn &rest ARGS)
(defalias 'ange-ftp-real-file-symlink-p #[128 "\300\301\"\207" [ange-ftp-run-real-handler file-symlink-p] 4 (#$ . 103913)])
#@19 

(fn &rest ARGS)
(defalias 'ange-ftp-real-file-regular-p #[128 "\300\301\"\207" [ange-ftp-run-real-handler file-regular-p] 4 (#$ . 104062)])
#@19 

(fn &rest ARGS)
(defalias 'ange-ftp-real-delete-file #[128 "\300\301\"\207" [ange-ftp-run-real-handler delete-file] 4 (#$ . 104211)])
#@19 

(fn &rest ARGS)
(defalias 'ange-ftp-real-verify-visited-file-modtime #[128 "\300\301\"\207" [ange-ftp-run-real-handler verify-visited-file-modtime] 4 (#$ . 104354)])
#@19 

(fn &rest ARGS)
(defalias 'ange-ftp-real-file-exists-p #[128 "\300\301\"\207" [ange-ftp-run-real-handler file-exists-p] 4 (#$ . 104529)])
#@19 

(fn &rest ARGS)
(defalias 'ange-ftp-real-write-region #[128 "\300\301\"\207" [ange-ftp-run-real-handler write-region] 4 (#$ . 104676)])
#@19 

(fn &rest ARGS)
(defalias 'ange-ftp-real-backup-buffer #[128 "\300\301\"\207" [ange-ftp-run-real-handler backup-buffer] 4 (#$ . 104821)])
#@19 

(fn &rest ARGS)
(defalias 'ange-ftp-real-copy-directory #[128 "\300\301\"\207" [ange-ftp-run-real-handler copy-directory] 4 (#$ . 104968)])
#@19 

(fn &rest ARGS)
(defalias 'ange-ftp-real-copy-file #[128 "\300\301\"\207" [ange-ftp-run-real-handler copy-file] 4 (#$ . 105117)])
#@19 

(fn &rest ARGS)
(defalias 'ange-ftp-real-rename-file #[128 "\300\301\"\207" [ange-ftp-run-real-handler rename-file] 4 (#$ . 105256)])
#@19 

(fn &rest ARGS)
(defalias 'ange-ftp-real-file-attributes #[128 "\300\301\"\207" [ange-ftp-run-real-handler file-attributes] 4 (#$ . 105399)])
#@19 

(fn &rest ARGS)
(defalias 'ange-ftp-real-file-newer-than-file-p #[128 "\300\301\"\207" [ange-ftp-run-real-handler file-newer-than-file-p] 4 (#$ . 105550)])
#@19 

(fn &rest ARGS)
(defalias 'ange-ftp-real-file-name-all-completions #[128 "\300\301\"\207" [ange-ftp-run-real-handler file-name-all-completions] 4 (#$ . 105715)])
#@19 

(fn &rest ARGS)
(defalias 'ange-ftp-real-file-name-completion #[128 "\300\301\"\207" [ange-ftp-run-real-handler file-name-completion] 4 (#$ . 105886)])
#@19 

(fn &rest ARGS)
(defalias 'ange-ftp-real-insert-directory #[128 "\300\301\"\207" [ange-ftp-run-real-handler insert-directory] 4 (#$ . 106047)])
#@19 

(fn &rest ARGS)
(defalias 'ange-ftp-real-file-name-sans-versions #[128 "\300\301\"\207" [ange-ftp-run-real-handler file-name-sans-versions] 4 (#$ . 106200)])
#@19 

(fn &rest ARGS)
(defalias 'ange-ftp-real-shell-command #[128 "\300\301\"\207" [ange-ftp-run-real-handler shell-command] 4 (#$ . 106367)])
#@19 

(fn &rest ARGS)
(defalias 'ange-ftp-real-load #[128 "\300\301\"\207" [ange-ftp-run-real-handler load] 4 (#$ . 106514)])
#@19 

(fn &rest ARGS)
(defalias 'ange-ftp-real-find-backup-file-name #[128 "\300\301\"\207" [ange-ftp-run-real-handler find-backup-file-name] 4 (#$ . 106643)])
#@46 

(fn FILE SWITCHES &optional WILDCARD FULL)
(defalias 'ange-ftp-insert-directory #[1026 "\302\303!!\204\304$\207\204\305\262`\306 \307\310\"\210\2036\311!\312\313!\314\211\310%)\202\204\203D\312\315#\202\204\316\317\"\203T\320\321\211\224#\262\322!\262\312\311!\206c\323\315#\313!\314\316\324\325!\326Q\"\203\200\327\321\"\202\201\330)\266\202c\210b\210\331\332\333#\203\230\334\335!\210\202\211\204\310\204\310\336\313\303!!G\321U\203\261\323\202\265\313!\314\337#\203\310\334\340\303!!\310\"\210\211b\210\211\314\211\223\207" [default-directory case-fold-search 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\\'" substring 0 directory-file-name "." "^.+[^ ] " regexp-quote "\\( -> .*\\)?[@/*=]?\n" match-string "" re-search-forward "^\\(\\S-\\)" move replace-match "  \\1" search-backward noerror file-relative-name] 12 (#$ . 106806)])
#@12 

(fn DIR)
(defalias 'ange-ftp-dired-uncache #[257 "\301\302!!\205\303\211\207" [ange-ftp-ls-cache-file ange-ftp-ftp-name expand-file-name nil] 4 (#$ . 107866)])
#@74 Alist of mapping host type into function to remove file version numbers.
(defvar ange-ftp-sans-version-alist nil (#$ . 108038))
#@33 

(fn FILE KEEP-BACKUP-VERSION)
(defalias 'ange-ftp-file-name-sans-versions #[514 "\301!\302!\211\205\303@!\236A\211\203\211\"\202 \304\"\207" [ange-ftp-sans-version-alist ange-ftp-abbreviate-filename ange-ftp-ftp-name ange-ftp-host-type ange-ftp-real-file-name-sans-versions] 8 (#$ . 108172)])
#@53 

(fn COMMAND &optional OUTPUT-BUFFER ERROR-BUFFER)
(defalias 'ange-ftp-shell-command #[769 "\302!\211@\3038\204\304#\202J\211G\305V\203&\306\307R\262\310\311\"\2033\312\313\"\262\314\315		$\262\316\317\"\210\304#\207" [default-directory remote-shell-program 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' ..."] 11 (#$ . 108486)])
#@54 

(fn PROGRAM INFILE BUFFER DISPLAY &rest ARGUMENTS)
(defalias 'ange-ftp-process-file #[1156 "\302!\203G\3031=\3041,\305\301!\203	\206\306\232\203$\307!\202)\310\311\"00\2070\312\313A@\3148\3158$c\210\316\207\312\317A@\"c\210\316\207\320\321&\207" [default-directory dired-chmod-program ange-ftp-ftp-name (error) (ftp-error) boundp "chmod" ange-ftp-call-chmod error "Unknown remote command: %s" format "%s: %s, %s\n" 2 3 1 "%s\n" apply call-process] 12 (#$ . 108969)])
#@13 

(fn ARGS)
(defalias 'ange-ftp-call-chmod #[257 "\211G\301W\203\f\302\303\"\210\211@A\211@\304\232\203\211A\262\305\306\307\310\311\312!\313\"\314\315%\"\266\316\317\207" [ange-ftp-ls-cache-file 2 error "ange-ftp-call-chmod: missing mode and/or filename: %s" "--" mapc make-byte-code 257 "\301!\262\302!\211\2056\211@A@\303\3048!\305!\306\307\300E\310\311\"$\211@\2064\312\313AP#\266\205\207" vconcat vector [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: "] 13 "\n\n(fn FILE)" nil 0] 10 (#$ . 109473)])
#@22 

(fn FILENAME MODE)
(defalias 'ange-ftp-set-file-modes #[514 "\300\301\302\"D!\207" [ange-ftp-call-chmod format "%o"] 6 (#$ . 110131)])
#@24 

(fn &rest ARGUMENTS)
(defalias 'ange-ftp-make-symbolic-link #[128 "\300\301\302C\"\207" [signal file-error "make-symbolic-link not supported"] 4 (#$ . 110276)])
#@56 

(fn FILENAME NEWNAME &optional OK-IF-ALREADY-EXISTS)
(defalias 'ange-ftp-add-name-to-file #[770 "\300!\300!@@\230\203A@A@\230\204\301\302\303C\"\210\304!\203E\2038\247\203A\305\306\307\3108\"!\204A\301\311C\"\210\202E\312!\210\313\314\315\316\317&\207" [ange-ftp-ftp-name signal file-error "add-name-to-file: only implemented for same user, same host" file-exists-p yes-or-no-p format "File %s already exists; make it a link anyway? " 2 file-already-exists delete-file copy-file ok-if-already-exists keep-time preserve-uid-gid preserve-permissions] 12 (#$ . 110445)])
#@31 

(fn NAME &optional REVERSE)
(defalias 'ange-ftp-fix-name-for-vms #[513 "\300 \301\302\303\304\305!\306\"\307$\216\203]\310\311\"\203V\312\211\211\313\314\"\262\313\315\"\262\313\307\"\262\203A\316\317\320\321\314\322#\323$\262\205I\324\324Q\211\205O\324R\266\203\202\311\325\326\"\202\311\312\211\211\211\211\310\327	\"\203x\321\314\322#\262\330\262\202{\331\262\310\332	\"\203\225\321\314\302\225S#\262\321\302\225\"\262\333!\262\203\253\316\317\320\321\302\322#\323$\262\334!\262\211\205\303\335?\205\277\336\337R\260\266\205)\207" [match-data make-byte-code 0 "\301\300\302\"\207" vconcat vector [set-match-data evaporate] 3 string-match "\\`\\([^:]+:\\)?\\(\\[.*\\]\\)?\\([^][]*\\)\\'" nil match-string 1 2 subst-char-in-string 47 46 substring -1 t "/" error "name %s didn't match" "\\`\".+\"\\'" "\"" "" "\\`/[^:]+:/" file-name-directory file-name-nondirectory "[" "." "]"] 15 (#$ . 111045)])
(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)
#@17 

(fn DIR-NAME)
(defalias 'ange-ftp-fix-dir-name-for-vms #[257 "\211\300\230\203\n\301\302!\207\303\304\"\203\301\305!\207\306!\207" ["/" error "Cannot get listing for fictitious \"/\" directory" string-match "\\`/[-A-Z0-9_$]+:/\\'" "Cannot get listing for device" ange-ftp-fix-name-for-vms] 4 (#$ . 112176)])
(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)
#@13 

(fn HOST)
(defalias 'ange-ftp-vms-host #[257 "\205\302\303\304#)\266\203\207" [ange-ftp-vms-host-regexp inhibit-changing-match-data nil t string-match] 8 (#$ . 112660)])
#@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]*\\)" (#$ . 112848))
(defalias 'ange-ftp-parse-vms-filename #[0 "\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 #[0 "\300\301\302\"\303eb\210\304 \305\306\307\310\311!\312\"\313$\216\314 \211\262\203Q\315\316\"\2033\317\320\306\211\224#\321#\210\202K\317\303#\210\315\322\"\203K\317\320\306\211\224#\303#\210\323y\210\202\317\324\321#\210\317\325\321#\210)\210\207" [make-hash-table :test equal nil match-data make-byte-code 0 "\301\300\302\"\207" vconcat vector [set-match-data evaporate] 3 ange-ftp-parse-vms-filename string-match "\\.\\(DIR\\|dir\\);[0-9]+" puthash substring t ";[0-9]+\\'" 1 "." ".."] 9])
(byte-code "\301\235\203\210\202\301B\302\207" [ange-ftp-parse-list-func-alist (vms . ange-ftp-parse-vms-listing) nil] 2)
#@29 

(fn NAME &optional DIR-P)
(defalias 'ange-ftp-vms-delete-file-entry #[513 "\211\203	\301\302\"\207\303 \304\305\306\307\310!\311\"\312$\216\313!\211\314\230\203$\315\202%\211\262\316\317\"\205k\320\321!\"\211\205i\322\305\211\224#\323\324!\325Q\326C\327\"\210\330\304\331\332\307\310\"\333\"\334\335%\"\210\211\242\206g\327\"\266\203\262\262)\207" [ange-ftp-files-hashtable ange-ftp-internal-delete-file-entry t match-data make-byte-code 0 "\301\300\302\"\207" vconcat vector [set-match-data evaporate] 3 file-name-nondirectory "" "." string-match ";[0-9]+\\'" gethash file-name-directory substring "^" regexp-quote ";[0-9]+$" nil remhash maphash 514 "\302\300\"\205\n\301\303\240\207" [string-match t] 5 "\n\n(fn KEY VAL)"] 16 (#$ . 114104)])
(byte-code "\301\236\204\n\302B\301\207" [ange-ftp-delete-file-entry-alist vms (vms . ange-ftp-vms-delete-file-entry)] 2)
#@29 

(fn NAME &optional DIR-P)
(defalias 'ange-ftp-vms-add-file-entry #[513 "\211\203	\301\302\"\207\303\304!\"\211\205\305!\211\306\230\203 \307\202!\211\262\310 \311\312\313\314\315!\316\"\317$\216\320\321\"\203F\322\323\312\211\224#\324#\210\202v\325\326!\327Q\312C\330\311\331\332\314\315\"\333\"\334\335%\"\210\211\242T\240\210\322\336\337\242!Q\324#\266)\210\322\324#\262\207" [ange-ftp-files-hashtable ange-ftp-internal-add-file-entry t gethash file-name-directory file-name-nondirectory "" "." match-data make-byte-code 0 "\301\300\302\"\207" vconcat vector [set-match-data evaporate] 3 string-match ";[0-9]+\\'" puthash substring nil "^" regexp-quote ";\\([0-9]+\\)$" maphash 514 "\302\300\"\205\301\211\242\303\304\305\"!]\240\207" [string-match string-to-number match-string 1] 8 "\n\n(fn NAME VAL)" ";" int-to-string] 15 (#$ . 115010)])
(byte-code "\301\236\204\n\302B\301\207" [ange-ftp-add-file-entry-alist vms (vms . ange-ftp-vms-add-file-entry)] 2)
#@60 Mark HOST as the name of a machine running VMS.

(fn HOST)
(defalias 'ange-ftp-add-vms-host #[257 "\302!?\205\303\304!\305\205\306\260\307\211\207" [ange-ftp-vms-host-regexp ange-ftp-host-cache ange-ftp-vms-host "^" regexp-quote "$" "\\|" nil] 6 (#$ . 116019) (byte-code "\301\302\303 \206\211\205\304!@\262\"C\207" [default-directory read-string "Host: " buffer-file-name ange-ftp-ftp-name] 5)])
#@13 

(fn NAME)
(defalias 'ange-ftp-vms-file-name-as-directory #[257 "\300 \301\302\303\304\305!\306\"\307$\216\310\311\"\203\312\302\211\224#\262\313!)\207" [match-data make-byte-code 0 "\301\300\302\"\207" vconcat vector [set-match-data evaporate] 3 string-match "\\.\\(DIR\\|dir\\)\\(;[0-9]+\\)?\\'" substring ange-ftp-real-file-name-as-directory] 8 (#$ . 116440)])
(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)
#@31 

(fn NAME &optional REVERSE)
(defalias 'ange-ftp-vms-make-compressed-filename #[513 "\300\301\"\203\302\303\304\211\224#D\207\300\305\"\203 \302\303\304\211\224#D\207\300\306\"\203/\302\303\304\307#D\207\310\300\305\"\203B\303\304\211\224#\311P\202E\311PD\207" [string-match "-Z;[0-9]+\\'" nil substring 0 ";[0-9]+\\'" "-Z\\'" -2 t "-Z"] 7 (#$ . 116954)])
(byte-code "\301\236\204\n\302B\301\207" [ange-ftp-make-compressed-filename-alist vms (vms . ange-ftp-vms-make-compressed-filename)] 2)
#@24 

(fn NAME &rest ARGS)
(defalias 'ange-ftp-vms-sans-version #[385 "\300 \301\302\303\304\305!\306\"\307$\216\310\311\"\203\312\302\211\224#\202)\207" [match-data make-byte-code 0 "\301\300\302\"\207" vconcat vector [set-match-data evaporate] 3 string-match ";[0-9]+\\'" substring] 9 (#$ . 117472)])
(byte-code "\301\236\204\n\302B\301\207" [ange-ftp-sans-version-alist vms (vms . ange-ftp-vms-sans-version)] 2)
#@31 

(fn NAME &optional REVERSE)
(defalias 'ange-ftp-fix-name-for-mts #[513 "\300 \301\302\303\304\305!\306\"\307$\216\203?\310\311\"\2038\312\211\313\314\"\262\313\315\"\262\2051\316\316QP\266\202\202S\317\320\"\202S\310\321\"\203R\313\314\"\313\315\"P\202S)\207" [match-data make-byte-code 0 "\301\300\302\"\207" vconcat vector [set-match-data evaporate] 3 string-match "\\`\\([^:]+:\\)?\\(.*\\)\\'" nil match-string 1 2 "/" error "name %s didn't match" "\\`/\\([^:]+:\\)/\\(.*\\)\\'"] 9 (#$ . 117901)])
(byte-code "\301\236\204\n\302B\301\207" [ange-ftp-fix-name-func-alist mts (mts . ange-ftp-fix-name-for-mts)] 2)
#@17 

(fn DIR-NAME)
(defalias 'ange-ftp-fix-dir-name-for-mts #[257 "\211\300\230\203\n\301\302!\207\303!\211\304\230\203\305\202%\306\307\"\203$\211\305P\202%\211\207" ["/" error "Cannot get listing for fictitious \"/\" directory" ange-ftp-fix-name-for-mts "" "?" string-match ":\\'"] 5 (#$ . 118551)])
(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)
#@13 

(fn HOST)
(defalias 'ange-ftp-mts-host #[257 "\205\302\303\304#)\266\203\207" [ange-ftp-mts-host-regexp inhibit-changing-match-data nil t string-match] 8 (#$ . 119071)])
(defalias 'ange-ftp-parse-mts-listing #[0 "\301\302\303\"eb\210\304 \305\306\307\310\311!\312\"\313$\216\314\315\316#\2038\315\210\317\315x\210`\320\315x\210\321`{\315#\266\322y\210\202)\210\321\323\316#\210\211\207" [directory-listing-before-filename-regexp make-hash-table :test equal match-data make-byte-code 0 "\301\300\302\"\207" vconcat vector [set-match-data evaporate] 3 re-search-forward nil t " " "-A-Z0-9_.!" puthash 1 "."] 8])
(byte-code "\301\235\203\210\202\301B\302\207" [ange-ftp-parse-list-func-alist (mts . ange-ftp-parse-mts-listing) nil] 2)
#@60 Mark HOST as the name of a machine running MTS.

(fn HOST)
(defalias 'ange-ftp-add-mts-host #[257 "\302!?\205\303\304!\305\205\306\260\307\211\207" [ange-ftp-mts-host-regexp ange-ftp-host-cache ange-ftp-mts-host "^" regexp-quote "$" "\\|" nil] 6 (#$ . 119838) (byte-code "\301\302\303 \206\211\205\304!@\262\"C\207" [default-directory read-string "Host: " buffer-file-name ange-ftp-ftp-name] 5)])
#@31 

(fn NAME &optional REVERSE)
(defalias 'ange-ftp-fix-name-for-cms #[513 "\303 \304\305\306\307\310!\311\"\312$\216\203\313P\202p\314\315\"\203m\316\317\"\320\224\203g\316\320\"\321P\322	\"\323\n#@\203@\202b\322	\"\262\323\n#\211@\203T\202`\324	\325\326	A##\262\266\203\202h\211\262\202p\327\330!)\207" [ange-ftp-this-host ange-ftp-this-user ange-ftp-this-msg match-data make-byte-code 0 "\301\300\302\"\207" vconcat vector [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"] 15 (#$ . 120259)])
(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)
#@17 

(fn DIR-NAME)
(defalias 'ange-ftp-fix-dir-name-for-cms #[257 "\211\302\230\203\n\303\304!\207\305\306\"\203W\307\310\"\311	\"\312P\313\224\203(\307\313\"\202)\314\315\"@\2035\211\202V\311	\"\262\315\"\211@\203H\202T\316	\317\320	A##\262\207\303\321!\207" [ange-ftp-this-host ange-ftp-this-user "/" 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"] 13 (#$ . 121148)])
(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 (#$ . 121893))
#@13 

(fn HOST)
(defalias 'ange-ftp-cms-host #[257 "\205\302\303\304#)\266\203\207" [ange-ftp-cms-host-regexp inhibit-changing-match-data nil t string-match] 8 (#$ . 122019)])
#@49 Mark HOST as the name of a CMS host.

(fn HOST)
(defalias 'ange-ftp-add-cms-host #[257 "\302!?\205\303\304!\305\205\306\260\307\211\207" [ange-ftp-cms-host-regexp ange-ftp-host-cache ange-ftp-cms-host "^" regexp-quote "$" "\\|" nil] 6 (#$ . 122206) (byte-code "\301\302\303 \206\211\205\304!@\262\"C\207" [default-directory read-string "Host: " buffer-file-name ange-ftp-ftp-name] 5)])
(defalias 'ange-ftp-parse-cms-listing #[0 "\300\301\302\"eb\210\303 \304\305\306\307\310!\311\"\312$\216\313\314\315\316#\2030\317\320\321!\322\320\323!Q\315#\210\321y\210\202\317\322\316#\210)\210\211\207" [make-hash-table :test equal match-data make-byte-code 0 "\301\300\302\"\207" vconcat vector [set-match-data evaporate] 3 re-search-forward "^\\([-A-Z0-9$_]+\\) +\\([-A-Z0-9$_]+\\) +[VF] +[0-9]+ " nil t puthash match-string 1 "." 2] 8])
(byte-code "\301\235\203\210\202\301B\302\207" [ange-ftp-parse-list-func-alist (cms . ange-ftp-parse-cms-listing) nil] 2)
#@31 

(fn NAME &optional REVERSE)
(defalias 'ange-ftp-cms-make-compressed-filename #[513 "\300\301\"\203\302\303\304\305#D\207\306\307PD\207" [string-match "-Z\\'" nil substring 0 -2 t "-Z"] 7 (#$ . 123196)])
(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$#@.]*" (#$ . 123552))
#@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="\\)?\\(" ange-ftp-bs2000-filename-username-regexp #1# ange-ftp-bs2000-short-filename-regexp "\\)?") (#$ . 123721))
#@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 "\\)?") (#$ . 124009))
(byte-code "\300\301\302\303\304DD\305\306\307\310\311&\207" [custom-declare-variable ange-ftp-bs2000-special-prefix funcall function #[0 "\300\207" [#1="X"] 1 #1#] "Prefix used for filenames starting with `#' or `@'." :group ange-ftp :type string] 8)
#@31 

(fn NAME &optional REVERSE)
(defalias 'ange-ftp-fix-name-for-bs2000 #[513 "\303 \304\305\306\307\310!\311\"\312$\216\203Y\313\"\203R\314\224\205$\315\305\314\225#\316\224\2051\315\316\224\316\225S#\312\224\205;\315\312\224\"\317\205D\320\317Q\205K\317PR\266\203\202\304\321\322\"\202\304\313\323\"\203f\315\316\"\262\313	\"\203\303\314\224\205z\315\314\224\314\225S#\316\224\205\207\315\316\224\316\225S#\312\224\205\221\315\312\224\"\324\325!\203\253\211;\203\253\313\326\"\203\253\n\315\314\"P\262\205\263\327P\205\274\330\331\332#Q\226\266\203\202\304)\207" [ange-ftp-bs2000-fix-name-regexp-reverse ange-ftp-bs2000-fix-name-regexp ange-ftp-bs2000-special-prefix match-data make-byte-code 0 "\301\300\302\"\207" vconcat vector [set-match-data evaporate] 3 string-match 1 substring 2 "/" "_/" error "name %s didn't match" "^/_/" boundp filename "[#@].+" "." subst-char-in-string 47 46] 12 (#$ . 124516)])
(byte-code "\301\236\204\n\302B\301\207" [ange-ftp-fix-name-func-alist bs2000 (bs2000 . ange-ftp-fix-name-for-bs2000)] 2)
#@17 

(fn DIR-NAME)
(defalias 'ange-ftp-fix-dir-name-for-bs2000 #[257 "\211\300\230\203\301\207\302!\207" ["/" "*" ange-ftp-fix-name-for-bs2000] 3 (#$ . 125605)])
(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)
#@13 

(fn HOST)
(defalias 'ange-ftp-bs2000-host #[257 "\205\302\303\304#)\266\203\207" [ange-ftp-bs2000-host-regexp inhibit-changing-match-data nil t string-match] 8 (#$ . 126039)])
#@13 

(fn HOST)
(defalias 'ange-ftp-bs2000-posix-host #[257 "\205\302\303\304#)\266\203\207" [ange-ftp-bs2000-posix-host-regexp inhibit-changing-match-data nil t string-match] 8 (#$ . 126232)])
#@63 Mark HOST as the name of a machine running BS2000.

(fn HOST)
(defalias 'ange-ftp-add-bs2000-host #[257 "\302!?\205\303\304!\305\205\306\260\307\211\207" [ange-ftp-bs2000-host-regexp ange-ftp-host-cache ange-ftp-bs2000-host "^" regexp-quote "$" "\\|" nil] 6 (#$ . 126437) (byte-code "\301\302\303 \206\211\205\304!@\262\"C\207" [default-directory read-string "Host: " buffer-file-name ange-ftp-ftp-name] 5)])
#@84 Mark HOST as the name of a machine running BS2000 with POSIX subsystem.

(fn HOST)
(defalias 'ange-ftp-add-bs2000-posix-host #[257 "\302!\204\303\304!\305\205\306\260\307\310\311\312\"\210\207" [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] 6 (#$ . 126870) (byte-code "\301\302\303 \206\211\205\304!@\262\"C\207" [default-directory read-string "Host: " buffer-file-name ange-ftp-ftp-name] 5)])
#@59 Regular expression to match for a valid BS2000 file name.
(defconst ange-ftp-bs2000-filename-regexp (concat "\\(" ange-ftp-bs2000-filename-prefix-regexp "\\)?\\(" ange-ftp-bs2000-short-filename-regexp "\\)") (#$ . 127422))
(byte-code "\300\301\302\303\304DD\305\306\307\310\311&\207" [custom-declare-variable ange-ftp-bs2000-additional-pubsets funcall function #[0 "\300\207" [nil] 1] "List of additional pubsets available to all users." :group ange-ftp :type (repeat string)] 8)
(defalias 'ange-ftp-parse-bs2000-filename #[0 "\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 #[0 "\302\303\304\"\305\211eb\210\306\305\307#\203\310\311!\262eb\210\312 \313\311\314\315\316!\317\"\320$\216\321 \211\262\2039\322\305#\210\202')\210\322\323\307#\210\322\324\307#\210	\235\204^\325\313\326\327\315\316!\330\"\331\332%	\"\210\207" [ange-ftp-bs2000-filename-pubset-regexp ange-ftp-bs2000-additional-pubsets make-hash-table :test equal nil re-search-forward t match-string 0 match-data make-byte-code "\301\300\302\"\207" vconcat vector [set-match-data evaporate] 3 ange-ftp-parse-bs2000-filename puthash "." ".." mapc 257 "\301\302\300#\207" [puthash t] 5 "\n\n(fn PUBSET)"] 10])
(byte-code "\301\235\203\210\202\301B\302\207" [ange-ftp-parse-list-func-alist (bs2000 . ange-ftp-parse-bs2000-listing) nil] 2)
#@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 #[0 "\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 (#$ . 128861)])
(provide 'ange-ftp)

Zerion Mini Shell 1.0