summaryrefslogtreecommitdiffstats
path: root/contrib/lukemftp/diffout
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/lukemftp/diffout')
-rw-r--r--contrib/lukemftp/diffout3500
1 files changed, 0 insertions, 3500 deletions
diff --git a/contrib/lukemftp/diffout b/contrib/lukemftp/diffout
deleted file mode 100644
index 932f748..0000000
--- a/contrib/lukemftp/diffout
+++ /dev/null
@@ -1,3500 +0,0 @@
-diff -Nru src/CVS/Entries /home/spock/ftp/CVS/Entries
---- src/CVS/Entries Thu Jan 30 11:00:13 2003
-+++ /home/spock/ftp/CVS/Entries Thu Jun 12 02:02:10 2003
-@@ -1,16 +1,17 @@
--/Makefile.in/1.1.1.1/Thu Jul 19 16:26:12 2001//
--/cmds.c/1.1.1.2/Sat Jun 15 09:40:32 2002//
--/cmdtab.c/1.1.1.2/Sat Jun 15 09:40:33 2002//
--/complete.c/1.1.1.1/Thu Jul 19 16:26:13 2001//
--/domacro.c/1.1.1.2/Sat Jun 15 09:40:33 2002//
--/extern.h/1.1.1.2/Sat Jun 15 09:40:33 2002//
--/fetch.c/1.1.1.3/Sat Jun 15 09:40:34 2002//
--/ftp.1/1.1.1.3/Sat Jun 15 09:40:35 2002//
--/ftp.c/1.1.1.3/Sat Jun 15 09:40:36 2002//
--/ftp.cat1/1.1.1.1/Sat Jun 15 09:40:31 2002//
--/ftp_var.h/1.1.1.3/Sat Jun 15 09:40:36 2002//
--/main.c/1.1.1.3/Sat Jun 15 09:40:36 2002//
--/ruserpass.c/1.1.1.2/Sat Jun 15 09:40:36 2002//
--/util.c/1.1.1.2/Sat Jun 15 09:40:37 2002//
--/version.h/1.1.1.2/Sat Jun 15 09:40:37 2002//
-+/Makefile/1.26/Tue Jan 21 16:08:06 2003//
-+/cmds.c/1.100/Sat Nov 30 03:10:55 2002//
-+/cmdtab.c/1.40/Mon Jul 29 04:24:47 2002//
-+/complete.c/1.38/Mon May 1 10:35:17 2000//
-+/domacro.c/1.19/Fri Feb 1 05:04:43 2002//
-+/extern.h/1.61/Tue Jan 21 16:08:07 2003//
-+/fetch.c/1.141/Wed May 14 14:31:00 2003//
-+/ftp.1/1.94/Wed May 14 14:31:00 2003//
-+/ftp.c/1.120/Wed Jun 5 10:20:49 2002//
-+/ftp_var.h/1.64/Tue Jan 21 16:08:07 2003//
-+/main.c/1.84/Wed May 14 14:31:00 2003//
-+/progressbar.c/1.3/Fri Feb 28 09:53:49 2003//
-+/progressbar.h/1.3/Fri Feb 28 09:53:49 2003//
-+/ruserpass.c/1.28/Wed Nov 15 00:11:04 2000//
-+/util.c/1.111/Fri Feb 28 09:54:51 2003//
-+/version.h/1.30/Fri Feb 28 09:54:20 2003//
- D
-diff -Nru src/CVS/Repository /home/spock/ftp/CVS/Repository
---- src/CVS/Repository Thu Jan 30 11:00:13 2003
-+++ /home/spock/ftp/CVS/Repository Thu Jun 12 02:02:10 2003
-@@ -1 +1 @@
--src/contrib/lukemftp/src
-+src/usr.bin/ftp
-diff -Nru src/CVS/Root /home/spock/ftp/CVS/Root
---- src/CVS/Root Thu Jan 30 11:00:13 2003
-+++ /home/spock/ftp/CVS/Root Thu Jun 12 02:02:09 2003
-@@ -1 +1 @@
--spock@current:/cvs/ncvs
-+:pserver:anoncvs@anoncvs.netbsd.org:/cvsroot
-diff -Nru src/Makefile /home/spock/ftp/Makefile
---- src/Makefile Wed Dec 31 19:00:00 1969
-+++ /home/spock/ftp/Makefile Thu Jun 12 02:02:10 2003
-@@ -0,0 +1,26 @@
-+# $NetBSD: Makefile,v 1.26 2003/01/21 16:08:06 jhawk Exp $
-+# from: @(#)Makefile 8.2 (Berkeley) 4/3/94
-+
-+PROG= ftp
-+SRCS= cmds.c cmdtab.c complete.c domacro.c fetch.c ftp.c main.c \
-+ progressbar.c ruserpass.c util.c
-+
-+# Uncomment the following to provide defaults for gate-ftp operation
-+#
-+#CPPFLAGS+=-DGATE_SERVER=\"ftp-gw.host\" # -DGATE_PORT=21
-+
-+.if defined(SMALLPROG)
-+CPPFLAGS+=-DNO_EDITCOMPLETE -DNO_ABOUT
-+.else
-+LDADD+= -ledit -ltermcap
-+DPADD+= ${LIBEDIT} ${LIBTERMCAP}
-+.endif
-+
-+.if !defined(SMALLPROG) || defined(SMALLPROG_INET6)
-+CPPFLAGS+= -DINET6
-+.endif
-+
-+cmds.o fetch.o: version.h
-+main.o: ftp_var.h
-+
-+.include <bsd.prog.mk>
-diff -Nru src/Makefile.in /home/spock/ftp/Makefile.in
---- src/Makefile.in Thu Jul 19 12:26:12 2001
-+++ /home/spock/ftp/Makefile.in Wed Dec 31 19:00:00 1969
-@@ -1,43 +0,0 @@
--#
--# $Id: Makefile.in,v 1.8 2000/08/08 07:04:27 lukem Exp $
--#
--
--srcdir = @srcdir@
--VPATH = @srcdir@
--SHELL = /bin/sh
--
--prefix = @prefix@
--exec_prefix = @exec_prefix@
--bindir = @bindir@
--mandir = @mandir@
--transform = @program_transform_name@
--
--mandircat1 = ${mandir}/cat1
--
--CC = @CC@
--CFLAGS = -I${srcdir} -I${srcdir}/.. -I. -I.. @INCLUDES@ @CFLAGS@
--LIBS = @LIBS@
--LDFLAGS = @LDFLAGS@
--
--INSTALL = @INSTALL@
--
--PROG = ftp
--OBJS = cmds.o cmdtab.o complete.o domacro.o fetch.o ftp.o main.o \
-- ruserpass.o util.o
--
--all: ${PROG}
--
--install: all
-- -mkdir -p ${bindir}
-- ${INSTALL} -m 555 ${PROG} ${bindir}/`echo ${PROG}|sed '$(transform)'`
-- -mkdir -p ${mandircat1}
-- ${INSTALL} -m 444 ${srcdir}/${PROG}.cat1 ${mandircat1}/`echo ${PROG}|sed '$(transform)'`.1
--
--${PROG}: ${OBJS} @LIBDEPENDS@
-- ${CC} ${CFLAGS} ${LDFLAGS} -o ${PROG} ${OBJS} ${LIBS}
--
--clean:
-- rm -f core ${PROG} ${OBJS}
--
--distclean: clean
-- rm -f Makefile
-diff -Nru src/cmds.c /home/spock/ftp/cmds.c
---- src/cmds.c Sat Jun 15 05:40:32 2002
-+++ /home/spock/ftp/cmds.c Thu Jun 12 02:02:10 2003
-@@ -1,4 +1,4 @@
--/* $NetBSD: cmds.c,v 1.98 2002/06/05 10:20:46 lukem Exp $ */
-+/* $NetBSD: cmds.c,v 1.100 2002/11/30 03:10:55 lukem Exp $ */
-
- /*-
- * Copyright (c) 1996-2002 The NetBSD Foundation, Inc.
-@@ -102,11 +102,35 @@
- * SUCH DAMAGE.
- */
-
-+#include <sys/cdefs.h>
-+#ifndef lint
-+#if 0
-+static char sccsid[] = "@(#)cmds.c 8.6 (Berkeley) 10/9/94";
-+#else
-+__RCSID("$NetBSD: cmds.c,v 1.100 2002/11/30 03:10:55 lukem Exp $");
-+#endif
-+#endif /* not lint */
-+
- /*
- * FTP User Program -- Command Routines.
- */
--
--#include "lukemftp.h"
-+#include <sys/types.h>
-+#include <sys/socket.h>
-+#include <sys/stat.h>
-+#include <sys/wait.h>
-+#include <arpa/ftp.h>
-+
-+#include <ctype.h>
-+#include <err.h>
-+#include <glob.h>
-+#include <limits.h>
-+#include <netdb.h>
-+#include <paths.h>
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <string.h>
-+#include <time.h>
-+#include <unistd.h>
-
- #include "ftp_var.h"
- #include "version.h"
-@@ -1008,7 +1032,7 @@
- gatemode = 0;
- else {
- if (argc == 3)
-- gateport = strdup(argv[2]);
-+ gateport = xstrdup(argv[2]);
- (void)strlcpy(gsbuf, argv[1], sizeof(gsbuf));
- gateserver = gsbuf;
- gatemode = 1;
-diff -Nru src/cmdtab.c /home/spock/ftp/cmdtab.c
---- src/cmdtab.c Sat Jun 15 05:40:33 2002
-+++ /home/spock/ftp/cmdtab.c Thu Jun 12 02:02:10 2003
-@@ -1,4 +1,4 @@
--/* $NetBSD: cmdtab.c,v 1.39 2000/11/15 00:10:59 lukem Exp $ */
-+/* $NetBSD: cmdtab.c,v 1.40 2002/07/29 04:24:47 lukem Exp $ */
-
- /*-
- * Copyright (c) 1996-2000 The NetBSD Foundation, Inc.
-@@ -69,8 +69,16 @@
- * SUCH DAMAGE.
- */
-
--#include "lukemftp.h"
-+#include <sys/cdefs.h>
-+#ifndef lint
-+#if 0
-+static char sccsid[] = "@(#)cmdtab.c 8.4 (Berkeley) 10/9/94";
-+#else
-+__RCSID("$NetBSD: cmdtab.c,v 1.40 2002/07/29 04:24:47 lukem Exp $");
-+#endif
-+#endif /* not lint */
-
-+#include <stdio.h>
- #include "ftp_var.h"
-
- /*
-@@ -123,7 +131,7 @@
- char ntranshelp[] = "set translation table for default file name mapping";
- char optshelp[] = "show or set options for remote commands";
- char pagehelp[] = "view a remote file through your pager";
--char passivehelp[] = "enter passive transfer mode";
-+char passivehelp[] = "toggle use of passive transfer mode";
- char plshelp[] = "list contents of remote path through your pager";
- char pmlsdhelp[] = "list contents of remote directory in a machine "
- "parsable form through your pager";
-diff -Nru src/complete.c /home/spock/ftp/complete.c
---- src/complete.c Thu Jul 19 12:26:13 2001
-+++ /home/spock/ftp/complete.c Thu Jun 12 02:02:10 2003
-@@ -36,11 +36,23 @@
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-+#include <sys/cdefs.h>
-+#ifndef lint
-+__RCSID("$NetBSD: complete.c,v 1.38 2000/05/01 10:35:17 lukem Exp $");
-+#endif /* not lint */
-+
- /*
- * FTP user program - command and file completion routines
- */
-
--#include "lukemftp.h"
-+#include <sys/stat.h>
-+
-+#include <ctype.h>
-+#include <err.h>
-+#include <dirent.h>
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <string.h>
-
- #include "ftp_var.h"
-
-diff -Nru src/domacro.c /home/spock/ftp/domacro.c
---- src/domacro.c Sat Jun 15 05:40:33 2002
-+++ /home/spock/ftp/domacro.c Thu Jun 12 02:02:10 2003
-@@ -33,7 +33,18 @@
- * SUCH DAMAGE.
- */
-
--#include "lukemftp.h"
-+#include <sys/cdefs.h>
-+#ifndef lint
-+#if 0
-+static char sccsid[] = "@(#)domacro.c 8.3 (Berkeley) 4/2/94";
-+#else
-+__RCSID("$NetBSD: domacro.c,v 1.19 2002/02/01 05:04:43 itojun Exp $");
-+#endif
-+#endif /* not lint */
-+
-+#include <ctype.h>
-+#include <stdio.h>
-+#include <string.h>
-
- #include "ftp_var.h"
-
-diff -Nru src/extern.h /home/spock/ftp/extern.h
---- src/extern.h Sat Jun 15 05:40:33 2002
-+++ /home/spock/ftp/extern.h Thu Jun 12 02:02:10 2003
-@@ -1,7 +1,7 @@
--/* $NetBSD: extern.h,v 1.60 2000/10/11 14:46:03 is Exp $ */
-+/* $NetBSD: extern.h,v 1.61 2003/01/21 16:08:07 jhawk Exp $ */
-
- /*-
-- * Copyright (c) 1996-2000 The NetBSD Foundation, Inc.
-+ * Copyright (c) 1996-2003 The NetBSD Foundation, Inc.
- * All rights reserved.
- *
- * This code is derived from software contributed to The NetBSD Foundation
-@@ -110,7 +110,6 @@
- void abortxfer(int);
- void account(int, char **);
- void ai_unmapped(struct addrinfo *);
--void alarmtimer(int);
- int another(int *, char ***, const char *);
- int auto_fetch(int, char **);
- int auto_put(int, char **, const char *);
-@@ -123,7 +122,7 @@
- void cmdtimeout(int);
- void cmdscanner(void);
- int command(const char *, ...)
-- ;
-+ __attribute__((__format__(__printf__, 1, 2)));
- #ifndef NO_EDITCOMPLETE
- unsigned char complete(EditLine *, int);
- void controlediting(void);
-@@ -183,14 +182,11 @@
- void page(int, char **);
- int parseport(const char *, int);
- int parserate(int, char **, int);
--void progressmeter(int);
- char *prompt(void);
- void proxabort(int);
- void proxtrans(const char *, const char *, const char *);
- void psabort(int);
--void psummary(int);
- void pswitch(int);
--void ptransfer(int);
- void put(int, char **);
- void pwd(int, char **);
- void quit(int, char **);
-@@ -263,5 +259,3 @@
- StringList *xsl_init(void);
- void xsl_add(StringList *, char *);
- char *xstrdup(const char *);
--sigfunc xsignal(int, sigfunc);
--sigfunc xsignal_restart(int, sigfunc, int);
-diff -Nru src/fetch.c /home/spock/ftp/fetch.c
---- src/fetch.c Sun Feb 16 14:45:52 2003
-+++ /home/spock/ftp/fetch.c Thu Jun 12 02:02:11 2003
-@@ -1,7 +1,7 @@
--/* $NetBSD: fetch.c,v 1.136 2002/06/05 10:20:48 lukem Exp $ */
-+/* $NetBSD: fetch.c,v 1.141 2003/05/14 14:31:00 wiz Exp $ */
-
- /*-
-- * Copyright (c) 1997-2002 The NetBSD Foundation, Inc.
-+ * Copyright (c) 1997-2003 The NetBSD Foundation, Inc.
- * All rights reserved.
- *
- * This code is derived from software contributed to The NetBSD Foundation
-@@ -39,11 +39,36 @@
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-+#include <sys/cdefs.h>
-+#ifndef lint
-+__RCSID("$NetBSD: fetch.c,v 1.141 2003/05/14 14:31:00 wiz Exp $");
-+#endif /* not lint */
-+
- /*
- * FTP User Program -- Command line file retrieval
- */
-
--#include "lukemftp.h"
-+#include <sys/types.h>
-+#include <sys/param.h>
-+#include <sys/socket.h>
-+#include <sys/stat.h>
-+#include <sys/time.h>
-+
-+#include <netinet/in.h>
-+
-+#include <arpa/ftp.h>
-+#include <arpa/inet.h>
-+
-+#include <ctype.h>
-+#include <err.h>
-+#include <errno.h>
-+#include <netdb.h>
-+#include <fcntl.h>
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <string.h>
-+#include <unistd.h>
-+#include <time.h>
-
- #include "ftp_var.h"
- #include "version.h"
-@@ -155,7 +180,7 @@
- *response = (char *)xmalloc(rlen);
- (void)strlcpy(*response, scheme, rlen);
- len = strlcat(*response, " ", rlen);
-- base64_encode(clear, clen, *response + len);
-+ base64_encode(clear, clen, (u_char *)*response + len);
- memset(clear, 0, clen);
- rval = 0;
-
-@@ -235,12 +260,12 @@
- * XXX: this is not totally RFC 1738 compliant; <path> will have the
- * leading `/' unless it's an ftp:// URL, as this makes things easier
- * for file:// and http:// URLs. ftp:// URLs have the `/' between the
-- * host and the url-path removed, but any additional leading slashes
-- * in the url-path are retained (because they imply that we should
-+ * host and the URL-path removed, but any additional leading slashes
-+ * in the URL-path are retained (because they imply that we should
- * later do "CWD" with a null argument).
- *
- * Examples:
-- * input url output path
-+ * input URL output path
- * --------- -----------
- * "ftp://host" NULL
- * "http://host/" NULL
-@@ -484,7 +509,8 @@
- rval = fetch_ftp(url);
- goto cleanup_fetch_url;
- }
-- warnx("Invalid URL (no file after directory) `%s'", url);
-+ warnx("no file after directory (you must specify an "
-+ "output file) `%s'", url);
- goto cleanup_fetch_url;
- } else {
- if (debug)
-@@ -1372,7 +1398,7 @@
- dir ? dir : "<null>", file ? file : "<null>");
-
- dirhasglob = filehasglob = 0;
-- if (doglob && (urltype == CLASSIC_URL_T || urltype == FTP_URL_T)) {
-+ if (doglob && urltype == CLASSIC_URL_T) {
- if (! EMPTYSTRING(dir) && strpbrk(dir, "*?[]{}") != NULL)
- dirhasglob = 1;
- if (! EMPTYSTRING(file) && strpbrk(file, "*?[]{}") != NULL)
-@@ -1741,7 +1767,7 @@
- }
- }
- if (debug)
-- fprintf(ttyout, "auto_put: url `%s' argv[2] `%s'\n",
-+ fprintf(ttyout, "auto_put: URL `%s' argv[2] `%s'\n",
- path, uargv[2] ? uargv[2] : "<null>");
-
- /* connect and cwd */
-diff -Nru src/ftp.1 /home/spock/ftp/ftp.1
---- src/ftp.1 Sat Jun 15 05:40:35 2002
-+++ /home/spock/ftp/ftp.1 Thu Jun 12 02:02:11 2003
-@@ -1,6 +1,6 @@
--.\" $NetBSD: ftp.1,v 1.83 2002/06/05 10:20:48 lukem Exp $
-+.\" $NetBSD: ftp.1,v 1.94 2003/05/14 14:31:00 wiz Exp $
- .\"
--.\" Copyright (c) 1996-2002 The NetBSD Foundation, Inc.
-+.\" Copyright (c) 1996-2003 The NetBSD Foundation, Inc.
- .\" All rights reserved.
- .\"
- .\" This code is derived from software contributed to The NetBSD Foundation
-@@ -68,7 +68,7 @@
- .\"
- .\" @(#)ftp.1 8.3 (Berkeley) 10/9/94
- .\"
--.Dd May 18, 2002
-+.Dd January 20, 2003
- .Dt FTP 1
- .Os
- .Sh NAME
-@@ -76,7 +76,7 @@
- .Nd
- Internet file transfer program
- .Sh SYNOPSIS
--.Nm ""
-+.Nm
- .Op Fl 46AadefginpRtvV
- .Bk -words
- .Op Fl N Ar netrc
-@@ -88,46 +88,81 @@
- .Op Fl P Ar port
- .Ek
- .Bk -words
-+.Op Fl q Ar quittime
-+.Ek
-+.Bk -words
- .Op Fl r Ar retry
- .Ek
- .Bk -words
-+.\" [-T dir,max[,inc]]
- .Oo
--.Fl T
-+.Fl T Xo
- .Sm off
--.Xo
- .Ar dir ,
- .Ar max
- .Op , Ar inc
--.Xc
- .Sm on
-+.Xc
- .Oc
- .Ek
- .Bk -words
-+.\" [[user@]host [port]]
- .Oo
--[\fIuser\fR@]\fIhost\fR
-+.Oo Ar user Ns Li \&@ Oc Ns Ar host
- .Op Ar port
- .Oc
- .Ek
- .Bk -words
--[\fIuser\fR@]\fIhost\fR:[\fIpath\fR][/]
-+.\" [[user@]host:[path][/]]
-+.Sm off
-+.Oo
-+.Op Ar user Li \&@
-+.Ar host Li \&:
-+.Op Ar path
-+.Op Li /
-+.Oc
-+.Sm on
- .Ek
- .Bk -words
--.Op file:///\fIpath\fR
-+.\" [file:///path]
-+.Sm off
-+.Oo
-+.Li file:/// Ar path
-+.Oc
-+.Sm on
- .Ek
- .Bk -words
--.Op ftp://[\fIuser\fR[:\fIpassword\fR]@]\fIhost\fR[:\fIport\fR]/\fIpath\fR[/]
-+.\" [ftp://[user[:password]@]host[:port]/path[/]]
-+.Sm off
-+.Oo
-+.Li ftp://
-+.Oo Ar user
-+.Op Li \&: Ar password
-+.Li \&@ Oc
-+.Ar host Oo Li \&: Ar port Oc
-+.Li / Ar path
-+.Op Li /
-+.Op Li ;type= Ar X
-+.Oc
-+.Sm on
- .Ek
- .Bk -words
--.Op http://[\fIuser\fR[:\fIpassword\fR]@]\fIhost\fR[:\fIport\fR]/\fIpath\fR
-+.\" [http://[user[:password]@]host[:port]/path]
-+.Sm off
-+.Oo
-+.Li http://
-+.Oo Ar user
-+.Op Li \&: Ar password
-+.Li \&@ Oc
-+.Ar host Oo Li \&: Ar port Oc
-+.Li / Ar path
-+.Oc
-+.Sm on
- .Ek
- .Op Ar \&.\&.\&.
--.Nm ""
--.Fl u Ar url
--.\".Ar ftp://[\fIuser\fR[:\fIpassword\fR]@]\fIhost\fR[:\fIport\fR]/\fIpath\fR[/[file]]
--.\"|
--.\".Ar [\fIuser\fR@]\fIhost\fR:[\fIpath\fR][/[\fIfile\fR]]
-+.Nm
- .Bk -words
--file
-+.Fl u Ar URL Ar file
- .Ek
- .Op Ar \&.\&.\&.
- .Sh DESCRIPTION
-@@ -243,6 +278,10 @@
- Retry the connection attempt if it failed, pausing for
- .Ar wait
- seconds.
-+.It Fl q Ar quittime
-+Quit if the connection has stalled for
-+.Ar quittime
-+seconds.
- .It Fl R
- Restart all non-proxied auto-fetches.
- .It Fl t
-@@ -266,11 +305,11 @@
- Refer to
- .Ic rate
- for more information.
--.It Fl u Ar url file Op \&.\&.\&.
-+.It Fl u Ar URL file Op \&.\&.\&.
- Upload files on the command line to
--.Ar url
-+.Ar URL
- where
--.Ar url
-+.Ar URL
- is one of the ftp URL types as supported by auto-fetch
- (with an optional target filename for single file uploads), and
- .Ar file
-@@ -869,7 +908,7 @@
- .Tn FTP
- server at that port.
- If the
--.Ic auto-login
-+.Ic "set auto-login"
- option is on (default),
- .Nm
- will also attempt to automatically log the user in to
-@@ -882,10 +921,10 @@
- and display with the program specified by the
- .Ic "set pager"
- option.
--.It Ic passive Op Ic auto
-+.It Ic passive Op Cm auto
- Toggle passive mode (if no arguments are given).
- If
--.Ic auto
-+.Cm auto
- is given, act as if
- .Ev FTPMODE
- is set to
-@@ -896,14 +935,17 @@
- .Dv PASV
- command for all data connections instead of a
- .Dv PORT
--command. The
-+command.
-+The
- .Dv PASV
- command requests that the remote server open a port for the data connection
--and return the address of that port. The remote server listens on that
--port and the client connects to it. When using the more traditional
-+and return the address of that port.
-+The remote server listens on that port and the client connects to it.
-+When using the more traditional
- .Dv PORT
- command, the client listens on a port and sends that address to the remote
--server, who connects back to it. Passive mode is useful when using
-+server, who connects back to it.
-+Passive mode is useful when using
- .Nm
- through a gateway router or host that controls the directionality of
- traffic.
-@@ -965,34 +1007,34 @@
- .Pp
- When prompting is on, the following commands are available at a prompt:
- .Bl -tag -width 2n -offset indent
--.It Ic a
-+.It Cm a
- Answer
- .Sq yes
- to the current file, and automatically answer
- .Sq yes
- to any remaining files for the current command.
--.It Ic n
-+.It Cm n
- Answer
- .Sq no ,
- and do not transfer the file.
--.It Ic p
-+.It Cm p
- Answer
- .Sq yes
- to the current file, and turn off prompt mode
- (as is
- .Dq prompt off
- had been given).
--.It Ic q
-+.It Cm q
- Terminate the current operation.
--.It Ic y
-+.It Cm y
- Answer
- .Sq yes ,
- and transfer the file.
--.It Ic ?
-+.It Cm ?
- Display a help message.
- .El
- .Pp
--Any other reponse will answer
-+Any other response will answer
- .Sq yes
- to the current file.
- .It Ic proxy Ar ftp-command
-@@ -1072,11 +1114,11 @@
- .Ar direction
- may be one of:
- .Bl -tag -width "all" -offset indent -compact
--.It Ic all
-+.It Cm all
- Both directions.
--.It Ic get
-+.It Cm get
- Incoming transfers.
--.It Ic put
-+.It Cm put
- Outgoing transfers.
- .El
- .Pp
-@@ -1240,7 +1282,7 @@
- implementations which do ignore
- .Dv PORT
- commands but, incorrectly, indicate they've been accepted.
--.It Ic set Op Ar "option value"
-+.It Ic set Op Ar option Ar value
- Set
- .Ar option
- to
-@@ -1252,25 +1294,25 @@
- are not given, display all of the options and their values.
- The currently supported options are:
- .Bl -tag -width "http_proxy" -offset indent
--.It anonpass
-+.It Cm anonpass
- Defaults to
- .Ev $FTPANONPASS
--.It ftp_proxy
-+.It Cm ftp_proxy
- Defaults to
- .Ev $ftp_proxy .
--.It http_proxy
-+.It Cm http_proxy
- Defaults to
- .Ev $http_proxy .
--.It no_proxy
-+.It Cm no_proxy
- Defaults to
- .Ev $no_proxy .
--.It pager
-+.It Cm pager
- Defaults to
- .Ev $PAGER .
--.It prompt
-+.It Cm prompt
- Defaults to
- .Ev $FTPPROMPT .
--.It rprompt
-+.It Cm rprompt
- Defaults to
- .Ev $FTPRPROMPT .
- .El
-@@ -1415,13 +1457,14 @@
- interpretation of the argument.
- Supported suffixes are:
- .Bl -tag -width 3n -offset indent -compact
--.It b
--Causes no modification. (Optional)
--.It k
-+.It Li b
-+Causes no modification.
-+(Optional)
-+.It Li k
- Kilo; multiply the argument by 1024
--.It m
-+.It Li m
- Mega; multiply the argument by 1048576
--.It g
-+.It Li g
- Giga; multiply the argument by 1073741824
- .El
- .Pp
-@@ -1447,7 +1490,15 @@
- .Pp
- The following formats are valid syntax for an auto-fetch element:
- .Bl -tag -width "FOO "
--.It [user@]host:[path][/]
-+.\" [user@]host:[path][/]
-+.It Xo
-+.Sm off
-+.Op Ar user Li \&@
-+.Ar host Li \&:
-+.Op Ar path
-+.Op Li /
-+.Sm on
-+.Xc
- .Dq Classic
- .Tn FTP
- format.
-@@ -1471,7 +1522,19 @@
- in the current directory.
- Otherwise, the full remote name is used as the local name,
- relative to the local root directory.
--.It ftp://[user[:password]@]host[:port]/path[/][;type=X]
-+.\" ftp://[user[:password]@]host[:port]/path[/][;type=X]
-+.It Xo
-+.Sm off
-+.Li ftp://
-+.Oo Ar user
-+.Op Li \&: Ar password
-+.Li \&@ Oc
-+.Ar host Oo Li \&: Ar port Oc
-+.Li / Ar path
-+.Op Li /
-+.Op Li ;type= Ar X
-+.Sm on
-+.Xc
- An
- .Tn FTP
- URL, retrieved using the
-@@ -1493,15 +1556,94 @@
- .Ar password
- if supplied, otherwise prompt the user for one.
- .Pp
-+If a suffix of
-+.Sq ;type=A
-+or
-+.Sq ;type=I
-+is supplied, then the transfer type will take place as
-+ascii or binary (respectively).
-+The default transfer type is binary.
-+.Pp
- In order to be compliant with
- .Cm RFC 1738 ,
- .Nm
--strips the leading
--.Sq /
--from
-+interprets the
-+.Ar path
-+part of an
-+.Dq ftp://
-+auto-fetch URL as follows:
-+.Bl -bullet
-+.It
-+The
-+.Sq Li /
-+immediately after the
-+.Ar host Ns Oo Li \&: Ns Ar port Oc
-+is interpreted as a separator before the
-+.Ar path ,
-+and not as part of the
-+.Ar path
-+itself.
-+.It
-+The
-+.Ar path
-+is interpreted as a
-+.So Li / Sc Ns -separated
-+list of name components.
-+For all but the last such component,
-+.Nm
-+performs the equivalent of a
-+.Ic cd
-+command.
-+For the last path component,
-+.Nm
-+performs the equivalent of a
-+.Ic get
-+command.
-+.It
-+Empty name components,
-+which result from
-+.Sq Li //
-+within the
-+.Ar path ,
-+or from an extra
-+.Sq Li /
-+at the beginning of the
- .Ar path ,
--resulting in a transfer relative from the default login directory of
--the user.
-+will cause the equivalent of a
-+.Ic cd
-+command without a directory name.
-+This is unlikely to be useful.
-+.It
-+Any
-+.Sq Li \&% Ns Ar XX
-+codes within the path components are decoded, with
-+.Ar XX
-+representing a character code in hexadecimal.
-+This decoding takes place after the
-+.Ar path
-+has been split into components,
-+but before each component is used in the equivalent of a
-+.Ic cd
-+or
-+.Ic get
-+command.
-+Some often-used codes are
-+.Sq Li \&%2F
-+(which represents
-+.Sq Li / )
-+and
-+.Sq Li \&%7E
-+(which represents
-+.Sq Li ~ ) .
-+.El
-+.Pp
-+The above interpretation has the following consequences:
-+.Bl -bullet
-+.It
-+The path is interpreted relative to the
-+default login directory of the specified user or of the
-+.Sq anonymous
-+user.
- If the
- .Pa /
- directory is required, use a leading path of
-@@ -1519,15 +1661,57 @@
- .Sq mypass ,
- use
- .Dq ftp://myname:mypass@localhost/%2fetc/motd
--.Pp
--If a suffix of
--.Sq ;type=A
--or
--.Sq ;type=I
--is supplied, then the transfer type will take place as
--ascii or binary (respectively).
--The default transfer type is binary.
--.It http://[user[:password]@]host[:port]/path
-+.It
-+The exact
-+.Ic cd
-+and
-+.Ic get
-+commands can be controlled by careful choice of
-+where to use
-+.Sq /
-+and where to use
-+.Sq %2F
-+(or
-+.Sq %2f ) .
-+For example, the following URLs correspond to the
-+equivalents of the indicated commands:
-+.Bl -tag -width "ftp://host/%2Fdir1%2Fdir2%2Ffile"
-+.It ftp://host/dir1/dir2/file
-+.Dq "cd dir1" ,
-+.Dq "cd dir2" ,
-+.Dq "get file" .
-+.It ftp://host/%2Fdir1/dir2/file
-+.Dq "cd /dir1" ,
-+.Dq "cd dir2" ,
-+.Dq "get file" .
-+.It ftp://host/dir1%2Fdir2/file
-+.Dq "cd dir1/dir2" ,
-+.Dq "get file" .
-+.It ftp://host/%2Fdir1%2Fdir2/file
-+.Dq "cd /dir1/dir2" ,
-+.Dq "get file" .
-+.It ftp://host/dir1%2Fdir2%2Ffile
-+.Dq "get dir1/dir2/file" .
-+.It ftp://host/%2Fdir1%2Fdir2%2Ffile
-+.Dq "get /dir1/dir2/file" .
-+.El
-+.It
-+You must have appropriate access permission for each of the
-+intermediate directories that is used in the equivalent of a
-+.Ic cd
-+command.
-+.El
-+.\" http://[user[:password]@]host[:port]/path
-+.It Xo
-+.Sm off
-+.Li http://
-+.Oo Ar user
-+.Op Li \&: Ar password
-+.Li \&@ Oc
-+.Ar host Oo Li \&: Ar port Oc
-+.Li / Ar path
-+.Sm on
-+.Xc
- An
- .Tn HTTP
- URL, retrieved using the
-@@ -1540,16 +1724,22 @@
- proxy server.
- If
- .Tn HTTP
--authorisation is required to retrieve
-+authorization is required to retrieve
- .Ar path ,
- and
- .Sq user
- (and optionally
- .Sq password )
- is in the URL, use them for the first attempt to authenticate.
--.It file:///path
-+.\" file:///path
-+.It Xo
-+.Sm off
-+.Li file:/// Ar path
-+.Sm on
-+.Xc
- A local URL, copied from
--.Ar /path .
-+.Pa / Ns Ar path
-+on the local host.
- .El
- .Pp
- Unless noted otherwise above, and
-@@ -1736,7 +1926,7 @@
- .Nm
- supports only the default values for the remaining
- file transfer parameters:
--.Ic mode ,
-+.Ic mode ,
- .Ic form ,
- and
- .Ic struct .
-@@ -1841,6 +2031,14 @@
- .Ic init
- is defined, it is automatically executed as the last step in the
- auto-login process.
-+For example,
-+.Bd -literal -offset indent
-+default
-+macdef init
-+epsv4 off
-+.Ed
-+.Pp
-+followed by a blank line.
- .El
- .Sh COMMAND LINE EDITING
- .Nm
-@@ -1888,9 +2086,20 @@
- The following formatting sequences are replaced by the given
- information:
- .Bl -tag -width "%% " -offset indent
--.It %/
-+.It Li \&%/
- The current remote working directory.
--.It %c[[0]\fIn\fR], %.[[0]\fIn\fR]
-+.\" %c[[0]n], %.[[0]n]
-+.It Xo
-+.Sm off
-+.Li \&%c
-+.Op Oo Li 0 Oc Ar n
-+.Sm on
-+.No ,
-+.Sm off
-+.Li \&%.
-+.Op Oo Li 0 Oc Ar n
-+.Sm on
-+.Xc
- The trailing component of the current remote working directory, or
- .Em n
- trailing components if a digit
-@@ -1902,21 +2111,28 @@
- .Sq 0 ,
- the number of skipped components precede the trailing component(s) in
- the format
--.Dq /\fI\*[Lt]skipped\*[Gt]\fRtrailing
-+.\" ``/<number>trailing''
-+.Do
-+.Sm off
-+.Li / Li \*[Lt] Va number Li \*[Gt]
-+.Va trailing
-+.Sm on
-+.Dc
- (for
--.Sq %c )
-+.Sq \&%c )
- or
--.Dq ...trailing
-+.\" ``...trailing''
-+.Dq Li \&... Ns Va trailing
- (for
--.Sq %. ) .
--.It %M
-+.Sq \&%. ) .
-+.It Li \&%M
- The remote host name.
--.It %m
-+.It Li \&%m
- The remote host name, up to the first
- .Sq \&. .
--.It %n
-+.It Li \&%n
- The remote user name.
--.It %%
-+.It Li \&%%
- A single
- .Sq % .
- .El
-@@ -1934,15 +2150,15 @@
- Overrides the default operation mode.
- Support values are:
- .Bl -tag -width "passive"
--.It active
-+.It Cm active
- active mode
- .Tn FTP
- only
--.It auto
-+.It Cm auto
- automatic determination of passive or active (this is the default)
--.It gate
-+.It Cm gate
- gate-ftp mode
--.It passive
-+.It Cm passive
- passive mode
- .Tn FTP
- only
-@@ -2028,6 +2244,21 @@
- Each entry may have an optional trailing ":port", which restricts
- the matching to connections to that port.
- .El
-+.Sh EXTENDED PASSIVE MODE AND FIREWALLS
-+Some firewall configurations do not allow
-+.Nm
-+to use extended passive mode.
-+If you find that even a simple
-+.Ic ls
-+appears to hang after printing a message such as this:
-+.Pp
-+.Dl 229 Entering Extended Passive Mode (|||58551|)
-+.Pp
-+then you will need to disable extended passive mode with
-+.Ic epsv4 off .
-+See the above section
-+.Sx The .netrc File
-+for an example of how to make this automatic.
- .Sh SEE ALSO
- .Xr getservbyname 3 ,
- .Xr editrc 5 ,
-@@ -2061,7 +2292,9 @@
- were implemented in
- .Nx 1.3
- and later releases
--by Luke Mewburn \*[Lt]lukem@netbsd.org\*[Gt].
-+by
-+.An Luke Mewburn
-+.Aq lukem@NetBSD.org .
- .Pp
- IPv6 support was added by the WIDE/KAME project
- (but may not be present in all non-NetBSD versions of this program, depending
-diff -Nru src/ftp.c /home/spock/ftp/ftp.c
---- src/ftp.c Sat Jun 15 05:40:36 2002
-+++ /home/spock/ftp/ftp.c Thu Jun 12 02:02:11 2003
-@@ -98,9 +98,40 @@
- * SUCH DAMAGE.
- */
-
--#include "lukemftp.h"
-+#include <sys/cdefs.h>
-+#ifndef lint
-+#if 0
-+static char sccsid[] = "@(#)ftp.c 8.6 (Berkeley) 10/27/94";
-+#else
-+__RCSID("$NetBSD: ftp.c,v 1.120 2002/06/05 10:20:49 lukem Exp $");
-+#endif
-+#endif /* not lint */
-
-+#include <sys/types.h>
-+#include <sys/stat.h>
-+#include <sys/socket.h>
-+#include <sys/time.h>
-+
-+#include <netinet/in.h>
-+#include <netinet/in_systm.h>
-+#include <netinet/ip.h>
-+#include <arpa/inet.h>
-+#include <arpa/ftp.h>
- #include <arpa/telnet.h>
-+
-+#include <ctype.h>
-+#include <err.h>
-+#include <errno.h>
-+#include <netdb.h>
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <string.h>
-+#include <time.h>
-+#include <unistd.h>
-+#include <stdarg.h>
-+#ifndef USE_SELECT
-+#include <poll.h>
-+#endif
-
- #include "ftp_var.h"
-
-diff -Nru src/ftp.cat1 /home/spock/ftp/ftp.cat1
---- src/ftp.cat1 Sat Jun 15 05:40:31 2002
-+++ /home/spock/ftp/ftp.cat1 Wed Dec 31 19:00:00 1969
-@@ -1,1055 +0,0 @@
--FTP(1) NetBSD Reference Manual FTP(1)
--
--NNAAMMEE
-- ffttpp - Internet file transfer program
--
--SSYYNNOOPPSSIISS
-- ffttpp [--4466AAaaddeeffggiinnppRRttvvVV] [--NN _n_e_t_r_c] [--oo _o_u_t_p_u_t] [--PP _p_o_r_t] [--rr _r_e_t_r_y] [--TT
-- _d_i_r,_m_a_x[,_i_n_c]] [[_u_s_e_r@]_h_o_s_t [_p_o_r_t]] [_u_s_e_r@]_h_o_s_t:[_p_a_t_h][/]
-- [file:///_p_a_t_h] [ftp://[_u_s_e_r[:_p_a_s_s_w_o_r_d]@]_h_o_s_t[:_p_o_r_t]/_p_a_t_h[/]]
-- [http://[_u_s_e_r[:_p_a_s_s_w_o_r_d]@]_h_o_s_t[:_p_o_r_t]/_p_a_t_h] [_._._.]
-- ffttpp --uu _u_r_l file [_._._.]
--
--DDEESSCCRRIIPPTTIIOONN
-- ffttpp is the user interface to the Internet standard File Transfer Proto-
-- col. The program allows a user to transfer files to and from a remote
-- network site.
--
-- The last five arguments will fetch a file using the FTP or HTTP proto-
-- cols, or by direct copying, into the current directory. This is ideal
-- for scripts. Refer to _A_U_T_O_-_F_E_T_C_H_I_N_G _F_I_L_E_S below for more information.
--
-- Options may be specified at the command line, or to the command inter-
-- preter.
--
-- --44 Forces ffttpp to only use IPv4 addresses.
--
-- --66 Forces ffttpp to only use IPv6 addresses.
--
-- --AA Force active mode ftp. By default, ffttpp will try to use passive
-- mode ftp and fall back to active mode if passive is not support-
-- ed by the server. This option causes ffttpp to always use an ac-
-- tive connection. It is only useful for connecting to very old
-- servers that do not implement passive mode properly.
--
-- --aa Causes ffttpp to bypass normal login procedure, and use an anony-
-- mous login instead.
--
-- --dd Enables debugging.
--
-- --ee Disables command line editing. This is useful for Emacs ange-
-- ftp mode.
--
-- --ff Forces a cache reload for transfers that go through the FTP or
-- HTTP proxies.
--
-- --gg Disables file name globbing.
--
-- --ii Turns off interactive prompting during multiple file transfers.
--
-- --nn Restrains ffttpp from attempting ``auto-login'' upon initial con-
-- nection. If auto-login is enabled, ffttpp will check the _._n_e_t_r_c
-- (see below) file in the user's home directory for an entry de-
-- scribing an account on the remote machine. If no entry exists,
-- ffttpp will prompt for the remote machine login name (default is
-- the user identity on the local machine), and, if necessary,
-- prompt for a password and an account with which to login.
--
-- --NN _n_e_t_r_c
-- Use _n_e_t_r_c instead of _~_/_._n_e_t_r_c. Refer to _T_H_E _._n_e_t_r_c _F_I_L_E for
-- more information.
--
-- --oo _o_u_t_p_u_t
-- When auto-fetching files, save the contents in _o_u_t_p_u_t. _o_u_t_p_u_t
-- is parsed according to the _F_I_L_E _N_A_M_I_N_G _C_O_N_V_E_N_T_I_O_N_S below. If
-- _o_u_t_p_u_t is not `-' or doesn't start with `|', then only the first
-- file specified will be retrieved into _o_u_t_p_u_t; all other files
-- will be retrieved into the basename of their remote name.
--
-- --pp Enable passive mode operation for use behind connection filter-
-- ing firewalls. This option has been deprecated as ffttpp now tries
-- to use passive mode by default, falling back to active mode if
-- the server does not support passive connections.
--
-- --PP _p_o_r_t Sets the port number to _p_o_r_t.
--
-- --rr _w_a_i_t Retry the connection attempt if it failed, pausing for _w_a_i_t sec-
-- onds.
--
-- --RR Restart all non-proxied auto-fetches.
--
-- --tt Enables packet tracing.
--
-- --TT _d_i_r_e_c_t_i_o_n,_m_a_x_i_m_u_m[,_i_n_c_r_e_m_e_n_t]
-- Set the maximum transfer rate for _d_i_r_e_c_t_i_o_n to _m_a_x_i_m_u_m
-- bytes/second, and if specified, the increment to _i_n_c_r_e_m_e_n_t
-- bytes/second. Refer to rraattee for more information.
--
-- --uu _u_r_l _f_i_l_e [...]
-- Upload files on the command line to _u_r_l where _u_r_l is one of the
-- ftp URL types as supported by auto-fetch (with an optional tar-
-- get filename for single file uploads), and _f_i_l_e is one or more
-- local files to be uploaded.
--
-- --vv Enable vveerrbboossee and pprrooggrreessss. This is the default if output is
-- to a terminal (and in the case of pprrooggrreessss, ffttpp is the fore-
-- ground process). Forces ffttpp to show all responses from the re-
-- mote server, as well as report on data transfer statistics.
--
-- --VV Disable vveerrbboossee and pprrooggrreessss, overriding the default of enabled
-- when output is to a terminal.
--
-- The client host with which ffttpp is to communicate may be specified on the
-- command line. If this is done, ffttpp will immediately attempt to establish
-- a connection to an FTP server on that host; otherwise, ffttpp will enter its
-- command interpreter and await instructions from the user. When ffttpp is
-- awaiting commands from the user the prompt `ftp>' is provided to the us-
-- er. The following commands are recognized by ffttpp:
--
-- !! [_c_o_m_m_a_n_d [_a_r_g_s]]
-- Invoke an interactive shell on the local machine. If there
-- are arguments, the first is taken to be a command to execute
-- directly, with the rest of the arguments as its arguments.
--
-- $$ _m_a_c_r_o_-_n_a_m_e [_a_r_g_s]
-- Execute the macro _m_a_c_r_o_-_n_a_m_e that was defined with the mmaaccddeeff
-- command. Arguments are passed to the macro unglobbed.
--
-- aaccccoouunntt [_p_a_s_s_w_d]
-- Supply a supplemental password required by a remote system
-- for access to resources once a login has been successfully
-- completed. If no argument is included, the user will be
-- prompted for an account password in a non-echoing input mode.
--
-- aappppeenndd _l_o_c_a_l_-_f_i_l_e [_r_e_m_o_t_e_-_f_i_l_e]
-- Append a local file to a file on the remote machine. If
-- _r_e_m_o_t_e_-_f_i_l_e is left unspecified, the local file name is used
-- in naming the remote file after being altered by any nnttrraannss
-- or nnmmaapp setting. File transfer uses the current settings for
-- ttyyppee, ffoorrmmaatt, mmooddee, and ssttrruuccttuurree.
--
-- aasscciiii Set the file transfer ttyyppee to network ASCII. This is the de-
-- fault type.
--
-- bbeellll Arrange that a bell be sounded after each file transfer com-
-- mand is completed.
--
-- bbiinnaarryy Set the file transfer ttyyppee to support binary image transfer.
--
-- bbyyee Terminate the FTP session with the remote server and exit
-- ffttpp. An end of file will also terminate the session and ex-
-- it.
--
-- ccaassee Toggle remote computer file name case mapping during ggeett,
-- mmggeett and mmppuutt commands. When ccaassee is on (default is off),
-- remote computer file names with all letters in upper case are
-- written in the local directory with the letters mapped to
-- lower case.
--
-- ccdd _r_e_m_o_t_e_-_d_i_r_e_c_t_o_r_y
-- Change the working directory on the remote machine to _r_e_m_o_t_e_-
-- _d_i_r_e_c_t_o_r_y.
--
-- ccdduupp Change the remote machine working directory to the parent of
-- the current remote machine working directory.
--
-- cchhmmoodd _m_o_d_e _r_e_m_o_t_e_-_f_i_l_e
-- Change the permission modes of the file _r_e_m_o_t_e_-_f_i_l_e on the
-- remote system to _m_o_d_e.
--
-- cclloossee Terminate the FTP session with the remote server, and return
-- to the command interpreter. Any defined macros are erased.
--
-- ccrr Toggle carriage return stripping during ascii type file re-
-- trieval. Records are denoted by a carriage return/linefeed
-- sequence during ascii type file transfer. When ccrr is on (the
-- default), carriage returns are stripped from this sequence to
-- conform with the UNIX single linefeed record delimiter.
-- Records on non-UNIX remote systems may contain single line-
-- feeds; when an ascii type transfer is made, these linefeeds
-- may be distinguished from a record delimiter only when ccrr is
-- off.
--
-- ddeebbuugg [_d_e_b_u_g_-_v_a_l_u_e]
-- Toggle debugging mode. If an optional _d_e_b_u_g_-_v_a_l_u_e is speci-
-- fied it is used to set the debugging level. When debugging
-- is on, ffttpp prints each command sent to the remote machine,
-- preceded by the string `-->'
--
-- ddeelleettee _r_e_m_o_t_e_-_f_i_l_e
-- Delete the file _r_e_m_o_t_e_-_f_i_l_e on the remote machine.
--
-- ddiirr [_r_e_m_o_t_e_-_p_a_t_h [_l_o_c_a_l_-_f_i_l_e]]
-- Print a listing of the contents of a directory on the remote
-- machine. The listing includes any system-dependent informa-
-- tion that the server chooses to include; for example, most
-- UNIX systems will produce output from the command `ls -l'.
-- If _r_e_m_o_t_e_-_p_a_t_h is left unspecified, the current working di-
-- rectory is used. If interactive prompting is on, ffttpp will
-- prompt the user to verify that the last argument is indeed
-- the target local file for receiving ddiirr output. If no local
-- file is specified, or if _l_o_c_a_l_-_f_i_l_e is `--', the output is
-- sent to the terminal.
--
-- ddiissccoonnnneecctt A synonym for cclloossee.
--
-- eeddiitt Toggle command line editing, and context sensitive command
-- and file completion. This is automatically enabled if input
-- is from a terminal, and disabled otherwise.
--
-- eeppssvv44 Toggle the use of the extended EPSV and EPRT commands on IPv4
-- connections; first try EPSV / EPRT, and then PASV / PORT.
-- This is enabled by default. If an extended command fails
-- then this option will be temporarily disabled for the dura-
-- tion of the current connection, or until eeppssvv44 is executed
-- again.
--
-- eexxiitt A synonym for bbyyee.
--
-- ffeeaattuurreess Display what features the remote server supports (using the
-- FEAT command).
--
-- ffggeett _l_o_c_a_l_f_i_l_e
-- Retrieve the files listed in _l_o_c_a_l_f_i_l_e, which has one line
-- per filename.
--
-- ffoorrmm _f_o_r_m_a_t
-- Set the file transfer ffoorrmm to _f_o_r_m_a_t. The default (and only
-- supported) format is ``non-print''.
--
-- ffttpp _h_o_s_t [_p_o_r_t]
-- A synonym for ooppeenn.
--
-- ggaattee [_h_o_s_t [_p_o_r_t]]
-- Toggle gate-ftp mode, which used to connect through the TIS
-- FWTK and Gauntlet ftp proxies. This will not be permitted if
-- the gate-ftp server hasn't been set (either explicitly by the
-- user, or from the FTPSERVER environment variable). If _h_o_s_t
-- is given, then gate-ftp mode will be enabled, and the gate-
-- ftp server will be set to _h_o_s_t. If _p_o_r_t is also given, that
-- will be used as the port to connect to on the gate-ftp serv-
-- er.
--
-- ggeett _r_e_m_o_t_e_-_f_i_l_e [_l_o_c_a_l_-_f_i_l_e]
-- Retrieve the _r_e_m_o_t_e_-_f_i_l_e and store it on the local machine.
-- If the local file name is not specified, it is given the same
-- name it has on the remote machine, subject to alteration by
-- the current ccaassee, nnttrraannss, and nnmmaapp settings. The current
-- settings for ttyyppee, ffoorrmm, mmooddee, and ssttrruuccttuurree are used while
-- transferring the file.
--
-- gglloobb Toggle filename expansion for mmddeelleettee, mmggeett, mmppuutt, and
-- mmrreeggeett. If globbing is turned off with gglloobb, the file name
-- arguments are taken literally and not expanded. Globbing for
-- mmppuutt is done as in csh(1). For mmddeelleettee, mmggeett, and mmrreeggeett,
-- each remote file name is expanded separately on the remote
-- machine and the lists are not merged. Expansion of a direc-
-- tory name is likely to be different from expansion of the
-- name of an ordinary file: the exact result depends on the
-- foreign operating system and ftp server, and can be previewed
-- by doing `mls remote-files -' Note: mmggeett, mmppuutt and mmrreeggeett are
-- not meant to transfer entire directory subtrees of files.
-- That can be done by transferring a tar(1) archive of the sub-
-- tree (in binary mode).
--
-- hhaasshh [_s_i_z_e]
-- Toggle hash-sign (``#'') printing for each data block trans-
-- ferred. The size of a data block defaults to 1024 bytes.
-- This can be changed by specifying _s_i_z_e in bytes. Enabling
-- hhaasshh disables pprrooggrreessss.
--
-- hheellpp [_c_o_m_m_a_n_d]
-- Print an informative message about the meaning of _c_o_m_m_a_n_d.
-- If no argument is given, ffttpp prints a list of the known com-
-- mands.
--
-- iiddllee [_s_e_c_o_n_d_s]
-- Set the inactivity timer on the remote server to _s_e_c_o_n_d_s sec-
-- onds. If _s_e_c_o_n_d_s is omitted, the current inactivity timer is
-- printed.
--
-- iimmaaggee A synonym for bbiinnaarryy.
--
-- llccdd [_d_i_r_e_c_t_o_r_y]
-- Change the working directory on the local machine. If no
-- _d_i_r_e_c_t_o_r_y is specified, the user's home directory is used.
--
-- lleessss _f_i_l_e A synonym for ppaaggee.
--
-- llppaaggee _l_o_c_a_l_-_f_i_l_e
-- Display _l_o_c_a_l_-_f_i_l_e with the program specified by the sseett
-- ppaaggeerr option.
--
-- llppwwdd Print the working directory on the local machine.
--
-- llss [_r_e_m_o_t_e_-_p_a_t_h [_l_o_c_a_l_-_f_i_l_e]]
-- A synonym for ddiirr.
--
-- mmaaccddeeff _m_a_c_r_o_-_n_a_m_e
-- Define a macro. Subsequent lines are stored as the macro
-- _m_a_c_r_o_-_n_a_m_e; a null line (consecutive newline characters in a
-- file or carriage returns from the terminal) terminates macro
-- input mode. There is a limit of 16 macros and 4096 total
-- characters in all defined macros. Macros remain defined un-
-- til a cclloossee command is executed. The macro processor inter-
-- prets `$' and `\' as special characters. A `$' followed by a
-- number (or numbers) is replaced by the corresponding argument
-- on the macro invocation command line. A `$' followed by an
-- `i' signals that macro processor that the executing macro is
-- to be looped. On the first pass `$i' is replaced by the
-- first argument on the macro invocation command line, on the
-- second pass it is replaced by the second argument, and so on.
-- A `\' followed by any character is replaced by that charac-
-- ter. Use the `\' to prevent special treatment of the `$'.
--
-- mmddeelleettee [_r_e_m_o_t_e_-_f_i_l_e_s]
-- Delete the _r_e_m_o_t_e_-_f_i_l_e_s on the remote machine.
--
-- mmddiirr _r_e_m_o_t_e_-_f_i_l_e_s _l_o_c_a_l_-_f_i_l_e
-- Like ddiirr, except multiple remote files may be specified. If
-- interactive prompting is on, ffttpp will prompt the user to ver-
-- ify that the last argument is indeed the target local file
-- for receiving mmddiirr output.
--
-- mmggeett _r_e_m_o_t_e_-_f_i_l_e_s
-- Expand the _r_e_m_o_t_e_-_f_i_l_e_s on the remote machine and do a ggeett
-- for each file name thus produced. See gglloobb for details on
-- the filename expansion. Resulting file names will then be
-- processed according to ccaassee, nnttrraannss, and nnmmaapp settings.
-- Files are transferred into the local working directory, which
-- can be changed with `lcd directory'; new local directories
-- can be created with `! mkdir directory'.
--
-- mmkkddiirr _d_i_r_e_c_t_o_r_y_-_n_a_m_e
-- Make a directory on the remote machine.
--
-- mmllss _r_e_m_o_t_e_-_f_i_l_e_s _l_o_c_a_l_-_f_i_l_e
-- Like llss, except multiple remote files may be specified, and
-- the _l_o_c_a_l_-_f_i_l_e must be specified. If interactive prompting
-- is on, ffttpp will prompt the user to verify that the last argu-
-- ment is indeed the target local file for receiving mmllss out-
-- put.
--
-- mmllssdd [_r_e_m_o_t_e_-_p_a_t_h]
-- Display the contents of _r_e_m_o_t_e_-_p_a_t_h (which should default to
-- the current directory if not given) in a machine-parsable
-- form, using MLSD. The format of display can be changed with
-- `remopts mlst ...'.
--
-- mmllsstt [_r_e_m_o_t_e_-_p_a_t_h]
-- Display the details about _r_e_m_o_t_e_-_p_a_t_h (which should default
-- to the current directory if not given) in a machine-parsable
-- form, using MLST. The format of display can be changed with
-- `remopts mlst ...'.
--
-- mmooddee _m_o_d_e_-_n_a_m_e
-- Set the file transfer mmooddee to _m_o_d_e_-_n_a_m_e. The default (and
-- only supported) mode is ``stream''.
--
-- mmooddttiimmee _r_e_m_o_t_e_-_f_i_l_e
-- Show the last modification time of the file on the remote ma-
-- chine.
--
-- mmoorree _f_i_l_e A synonym for ppaaggee.
--
-- mmppuutt _l_o_c_a_l_-_f_i_l_e_s
-- Expand wild cards in the list of local files given as argu-
-- ments and do a ppuutt for each file in the resulting list. See
-- gglloobb for details of filename expansion. Resulting file names
-- will then be processed according to nnttrraannss and nnmmaapp settings.
--
-- mmrreeggeett _r_e_m_o_t_e_-_f_i_l_e_s
-- As per mmggeett, but performs a rreeggeett instead of ggeett.
--
-- mmsseenndd _l_o_c_a_l_-_f_i_l_e_s
-- A synonym for mmppuutt.
--
-- nneewweerr _r_e_m_o_t_e_-_f_i_l_e [_l_o_c_a_l_-_f_i_l_e]
-- Get the file only if the modification time of the remote file
-- is more recent that the file on the current system. If the
-- file does not exist on the current system, the remote file is
-- considered nneewweerr. Otherwise, this command is identical to
-- _g_e_t.
--
-- nnlliisstt [_r_e_m_o_t_e_-_p_a_t_h [_l_o_c_a_l_-_f_i_l_e]]
-- A synonym for llss.
--
-- nnmmaapp [_i_n_p_a_t_t_e_r_n _o_u_t_p_a_t_t_e_r_n]
-- Set or unset the filename mapping mechanism. If no arguments
-- are specified, the filename mapping mechanism is unset. If
-- arguments are specified, remote filenames are mapped during
-- mmppuutt commands and ppuutt commands issued without a specified re-
-- mote target filename. If arguments are specified, local
-- filenames are mapped during mmggeett commands and ggeett commands
-- issued without a specified local target filename. This com-
-- mand is useful when connecting to a non-UNIX remote computer
-- with different file naming conventions or practices. The
-- mapping follows the pattern set by _i_n_p_a_t_t_e_r_n and _o_u_t_p_a_t_t_e_r_n.
-- [_I_n_p_a_t_t_e_r_n] is a template for incoming filenames (which may
-- have already been processed according to the nnttrraannss and ccaassee
-- settings). Variable templating is accomplished by including
-- the sequences `$1', `$2', ..., `$9' in _i_n_p_a_t_t_e_r_n. Use `\' to
-- prevent this special treatment of the `$' character. All
-- other characters are treated literally, and are used to de-
-- termine the nnmmaapp [_i_n_p_a_t_t_e_r_n] variable values. For example,
-- given _i_n_p_a_t_t_e_r_n $1.$2 and the remote file name "mydata.data",
-- $1 would have the value "mydata", and $2 would have the value
-- "data". The _o_u_t_p_a_t_t_e_r_n determines the resulting mapped file-
-- name. The sequences `$1', `$2', ...., `$9' are replaced by
-- any value resulting from the _i_n_p_a_t_t_e_r_n template. The se-
-- quence `$0' is replace by the original filename. Additional-
-- ly, the sequence `[_s_e_q_1, _s_e_q_2]' is replaced by [_s_e_q_1] if _s_e_q_1
-- is not a null string; otherwise it is replaced by _s_e_q_2. For
-- example, the command
--
-- nmap $1.$2.$3 [$1,$2].[$2,file]
--
-- would yield the output filename "myfile.data" for input file-
-- names "myfile.data" and "myfile.data.old", "myfile.file" for
-- the input filename "myfile", and "myfile.myfile" for the in-
-- put filename ".myfile". Spaces may be included in
-- _o_u_t_p_a_t_t_e_r_n, as in the example: `nmap $1 sed "s/ *$//" > $1'
-- . Use the `\' character to prevent special treatment of the
-- `$','[',']', and `,' characters.
--
-- nnttrraannss [_i_n_c_h_a_r_s [_o_u_t_c_h_a_r_s]]
-- Set or unset the filename character translation mechanism.
-- If no arguments are specified, the filename character trans-
-- lation mechanism is unset. If arguments are specified, char-
-- acters in remote filenames are translated during mmppuutt com-
-- mands and ppuutt commands issued without a specified remote tar-
-- get filename. If arguments are specified, characters in lo-
-- cal filenames are translated during mmggeett commands and ggeett
-- commands issued without a specified local target filename.
-- This command is useful when connecting to a non-UNIX remote
-- computer with different file naming conventions or practices.
-- Characters in a filename matching a character in _i_n_c_h_a_r_s are
-- replaced with the corresponding character in _o_u_t_c_h_a_r_s. If
-- the character's position in _i_n_c_h_a_r_s is longer than the length
-- of _o_u_t_c_h_a_r_s, the character is deleted from the file name.
--
-- ooppeenn _h_o_s_t [_p_o_r_t]
-- Establish a connection to the specified _h_o_s_t FTP server. An
-- optional port number may be supplied, in which case, ffttpp will
-- attempt to contact an FTP server at that port. If the aauuttoo--
-- llooggiinn option is on (default), ffttpp will also attempt to auto-
-- matically log the user in to the FTP server (see below).
--
-- ppaaggee _f_i_l_e Retrieve ffiillee and display with the program specified by the
-- sseett ppaaggeerr option.
--
-- ppaassssiivvee [aauuttoo]
-- Toggle passive mode (if no arguments are given). If aauuttoo is
-- given, act as if FTPMODE is set to `auto'. If passive mode
-- is turned on (default), ffttpp will send a PASV command for all
-- data connections instead of a PORT command. The PASV command
-- requests that the remote server open a port for the data con-
-- nection and return the address of that port. The remote
-- server listens on that port and the client connects to it.
-- When using the more traditional PORT command, the client lis-
-- tens on a port and sends that address to the remote server,
-- who connects back to it. Passive mode is useful when using
-- ffttpp through a gateway router or host that controls the direc-
-- tionality of traffic. (Note that though FTP servers are re-
-- quired to support the PASV command by RFC 1123, some do not.)
--
-- ppddiirr [_r_e_m_o_t_e_-_p_a_t_h]
-- Perform ddiirr [_r_e_m_o_t_e_-_p_a_t_h], and display the result with the
-- program specified by the sseett ppaaggeerr option.
--
-- ppllss [_r_e_m_o_t_e_-_p_a_t_h]
-- Perform llss [_r_e_m_o_t_e_-_p_a_t_h], and display the result with the
-- program specified by the sseett ppaaggeerr option.
--
-- ppmmllssdd [_r_e_m_o_t_e_-_p_a_t_h]
-- Perform mmllssdd [_r_e_m_o_t_e_-_p_a_t_h], and display the result with the
-- program specified by the sseett ppaaggeerr option.
--
-- pprreesseerrvvee Toggle preservation of modification times on retrieved files.
--
-- pprrooggrreessss Toggle display of transfer progress bar. The progress bar
-- will be disabled for a transfer that has _l_o_c_a_l_-_f_i_l_e as `--' or
-- a command that starts with `|'. Refer to _F_I_L_E _N_A_M_I_N_G
-- _C_O_N_V_E_N_T_I_O_N_S for more information. Enabling pprrooggrreessss disables
-- hhaasshh.
--
-- pprroommpptt Toggle interactive prompting. Interactive prompting occurs
-- during multiple file transfers to allow the user to selec-
-- tively retrieve or store files. If prompting is turned off
-- (default is on), any mmggeett or mmppuutt will transfer all files,
-- and any mmddeelleettee will delete all files.
--
-- When prompting is on, the following commands are available at
-- a prompt:
--
-- aa Answer `yes' to the current file, and automatically
-- answer `yes' to any remaining files for the current
-- command.
--
-- nn Answer `no', and do not transfer the file.
--
-- pp Answer `yes' to the current file, and turn off
-- prompt mode (as is ``prompt off'' had been given).
--
-- qq Terminate the current operation.
--
-- yy Answer `yes', and transfer the file.
--
-- ?? Display a help message.
--
-- Any other reponse will answer `yes' to the current file.
--
-- pprrooxxyy _f_t_p_-_c_o_m_m_a_n_d
-- Execute an ftp command on a secondary control connection.
-- This command allows simultaneous connection to two remote FTP
-- servers for transferring files between the two servers. The
-- first pprrooxxyy command should be an ooppeenn, to establish the sec-
-- ondary control connection. Enter the command "proxy ?" to
-- see other FTP commands executable on the secondary connec-
-- tion. The following commands behave differently when pref-
-- aced by pprrooxxyy: ooppeenn will not define new macros during the au-
-- to-login process, cclloossee will not erase existing macro defini-
-- tions, ggeett and mmggeett transfer files from the host on the pri-
-- mary control connection to the host on the secondary control
-- connection, and ppuutt, mmppuutt, and aappppeenndd transfer files from the
-- host on the secondary control connection to the host on the
-- primary control connection. Third party file transfers de-
-- pend upon support of the FTP protocol PASV command by the
-- server on the secondary control connection.
--
-- ppuutt _l_o_c_a_l_-_f_i_l_e [_r_e_m_o_t_e_-_f_i_l_e]
-- Store a local file on the remote machine. If _r_e_m_o_t_e_-_f_i_l_e is
-- left unspecified, the local file name is used after process-
-- ing according to any nnttrraannss or nnmmaapp settings in naming the
-- remote file. File transfer uses the current settings for
-- ttyyppee, ffoorrmmaatt, mmooddee, and ssttrruuccttuurree.
--
-- ppwwdd Print the name of the current working directory on the remote
-- machine.
--
-- qquuiitt A synonym for bbyyee.
--
-- qquuoottee _a_r_g_1 _a_r_g_2 _._._.
-- The arguments specified are sent, verbatim, to the remote FTP
-- server.
--
-- rraattee _d_i_r_e_c_t_i_o_n [_m_a_x_i_m_u_m [_i_n_c_r_e_m_e_n_t]]
-- Throttle the maximum transfer rate to _m_a_x_i_m_u_m bytes/second.
-- If _m_a_x_i_m_u_m is 0, disable the throttle.
--
-- _d_i_r_e_c_t_i_o_n may be one of:
-- aallll Both directions.
-- ggeett Incoming transfers.
-- ppuutt Outgoing transfers.
--
-- _m_a_x_i_m_u_m can by modified on the fly by _i_n_c_r_e_m_e_n_t bytes (de-
-- fault: 1024) each time a given signal is received:
--
-- SIGUSR1 Increment _m_a_x_i_m_u_m by _i_n_c_r_e_m_e_n_t bytes.
--
-- SIGUSR2 Decrement _m_a_x_i_m_u_m by _i_n_c_r_e_m_e_n_t bytes. The re-
-- sult must be a positive number.
--
-- If _m_a_x_i_m_u_m is not supplied, the current throttle rates are
-- displayed.
--
-- Note: rraattee is not yet implemented for ascii mode transfers.
--
-- rrccvvbbuuff _s_i_z_e
-- Set the size of the socket receive buffer to _s_i_z_e.
--
-- rreeccvv _r_e_m_o_t_e_-_f_i_l_e [_l_o_c_a_l_-_f_i_l_e]
-- A synonym for ggeett.
--
-- rreeggeett _r_e_m_o_t_e_-_f_i_l_e [_l_o_c_a_l_-_f_i_l_e]
-- rreeggeett acts like ggeett, except that if _l_o_c_a_l_-_f_i_l_e exists and is
-- smaller than _r_e_m_o_t_e_-_f_i_l_e, _l_o_c_a_l_-_f_i_l_e is presumed to be a par-
-- tially transferred copy of _r_e_m_o_t_e_-_f_i_l_e and the transfer is
-- continued from the apparent point of failure. This command
-- is useful when transferring very large files over networks
-- that are prone to dropping connections.
--
-- rreemmooppttss _c_o_m_m_a_n_d [_c_o_m_m_a_n_d_-_o_p_t_i_o_n_s]
-- Set options on the remote FTP server for _c_o_m_m_a_n_d to _c_o_m_m_a_n_d_-
-- _o_p_t_i_o_n_s (whose absence is handled on a command-specific ba-
-- sis). Remote FTP commands known to support options include:
-- `MLST' (used for MLSD and MLST).
--
-- rreennaammee [_f_r_o_m [_t_o]]
-- Rename the file _f_r_o_m on the remote machine, to the file _t_o.
--
-- rreesseett Clear reply queue. This command re-synchronizes command/re-
-- ply sequencing with the remote FTP server. Resynchronization
-- may be necessary following a violation of the FTP protocol by
-- the remote server.
--
-- rreessttaarrtt _m_a_r_k_e_r
-- Restart the immediately following ggeett or ppuutt at the indicated
-- _m_a_r_k_e_r. On UNIX systems, marker is usually a byte offset in-
-- to the file.
--
-- rrhheellpp [_c_o_m_m_a_n_d_-_n_a_m_e]
-- Request help from the remote FTP server. If a _c_o_m_m_a_n_d_-_n_a_m_e
-- is specified it is supplied to the server as well.
--
-- rrmmddiirr _d_i_r_e_c_t_o_r_y_-_n_a_m_e
-- Delete a directory on the remote machine.
--
-- rrssttaattuuss [_r_e_m_o_t_e_-_f_i_l_e]
-- With no arguments, show status of remote machine. If _r_e_m_o_t_e_-
-- _f_i_l_e is specified, show status of _r_e_m_o_t_e_-_f_i_l_e on remote ma-
-- chine.
--
-- rruunniiqquuee Toggle storing of files on the local system with unique file-
-- names. If a file already exists with a name equal to the
-- target local filename for a ggeett or mmggeett command, a ".1" is
-- appended to the name. If the resulting name matches another
-- existing file, a ".2" is appended to the original name. If
-- this process continues up to ".99", an error message is
-- printed, and the transfer does not take place. The generated
-- unique filename will be reported. Note that rruunniiqquuee will not
-- affect local files generated from a shell command (see be-
-- low). The default value is off.
--
-- sseenndd _l_o_c_a_l_-_f_i_l_e [_r_e_m_o_t_e_-_f_i_l_e]
-- A synonym for ppuutt.
--
-- sseennddppoorrtt Toggle the use of PORT commands. By default, ffttpp will at-
-- tempt to use a PORT command when establishing a connection
-- for each data transfer. The use of PORT commands can prevent
-- delays when performing multiple file transfers. If the PORT
-- command fails, ffttpp will use the default data port. When the
-- use of PORT commands is disabled, no attempt will be made to
-- use PORT commands for each data transfer. This is useful for
-- certain FTP implementations which do ignore PORT commands
-- but, incorrectly, indicate they've been accepted.
--
-- sseett [_o_p_t_i_o_n _v_a_l_u_e]
-- Set _o_p_t_i_o_n to _v_a_l_u_e. If _o_p_t_i_o_n and _v_a_l_u_e are not given, dis-
-- play all of the options and their values. The currently sup-
-- ported options are:
--
-- anonpass Defaults to $FTPANONPASS
--
-- ftp_proxy Defaults to $ftp_proxy.
--
-- http_proxy Defaults to $http_proxy.
--
-- no_proxy Defaults to $no_proxy.
--
-- pager Defaults to $PAGER.
--
-- prompt Defaults to $FTPPROMPT.
--
-- rprompt Defaults to $FTPRPROMPT.
--
-- ssiittee _a_r_g_1 _a_r_g_2 _._._.
-- The arguments specified are sent, verbatim, to the remote FTP
-- server as a SITE command.
--
-- ssiizzee _r_e_m_o_t_e_-_f_i_l_e
-- Return size of _r_e_m_o_t_e_-_f_i_l_e on remote machine.
--
-- ssnnddbbuuff _s_i_z_e
-- Set the size of the socket send buffer to _s_i_z_e.
--
-- ssttaattuuss Show the current status of ffttpp.
--
-- ssttrruucctt _s_t_r_u_c_t_-_n_a_m_e
-- Set the file transfer _s_t_r_u_c_t_u_r_e to _s_t_r_u_c_t_-_n_a_m_e. The default
-- (and only supported) structure is ``file''.
--
-- ssuunniiqquuee Toggle storing of files on remote machine under unique file
-- names. The remote FTP server must support FTP protocol STOU
-- command for successful completion. The remote server will
-- report unique name. Default value is off.
--
-- ssyysstteemm Show the type of operating system running on the remote ma-
-- chine.
--
-- tteenneexx Set the file transfer type to that needed to talk to TENEX
-- machines.
--
-- tthhrroottttllee A synonym for rraattee.
--
-- ttrraaccee Toggle packet tracing.
--
-- ttyyppee [_t_y_p_e_-_n_a_m_e]
-- Set the file transfer ttyyppee to _t_y_p_e_-_n_a_m_e. If no type is spec-
-- ified, the current type is printed. The default type is net-
-- work ASCII.
--
-- uummaasskk [_n_e_w_m_a_s_k]
-- Set the default umask on the remote server to _n_e_w_m_a_s_k. If
-- _n_e_w_m_a_s_k is omitted, the current umask is printed.
--
-- uunnsseett _o_p_t_i_o_n
-- Unset _o_p_t_i_o_n. Refer to sseett for more information.
--
-- uussaaggee _c_o_m_m_a_n_d
-- Print the usage message for _c_o_m_m_a_n_d.
--
-- uusseerr _u_s_e_r_-_n_a_m_e [_p_a_s_s_w_o_r_d [_a_c_c_o_u_n_t]]
-- Identify yourself to the remote FTP server. If the _p_a_s_s_w_o_r_d
-- is not specified and the server requires it, ffttpp will prompt
-- the user for it (after disabling local echo). If an _a_c_c_o_u_n_t
-- field is not specified, and the FTP server requires it, the
-- user will be prompted for it. If an _a_c_c_o_u_n_t field is speci-
-- fied, an account command will be relayed to the remote server
-- after the login sequence is completed if the remote server
-- did not require it for logging in. Unless ffttpp is invoked
-- with ``auto-login'' disabled, this process is done automati-
-- cally on initial connection to the FTP server.
--
-- vveerrbboossee Toggle verbose mode. In verbose mode, all responses from the
-- FTP server are displayed to the user. In addition, if ver-
-- bose is on, when a file transfer completes, statistics re-
-- garding the efficiency of the transfer are reported. By de-
-- fault, verbose is on.
--
-- xxffeerrbbuuff _s_i_z_e
-- Set the size of the socket send and receive buffers to _s_i_z_e.
--
-- ?? [_c_o_m_m_a_n_d]
-- A synonym for hheellpp.
--
-- Command arguments which have embedded spaces may be quoted with quote `"'
-- marks.
--
-- Commands which toggle settings can take an explicit oonn or ooffff argument to
-- force the setting appropriately.
--
-- Commands which take a byte count as an argument (e.g., hhaasshh, rraattee, and
-- xxffeerrbbuuff) support an optional suffix on the argument which changes the in-
-- terpretation of the argument. Supported suffixes are:
-- b Causes no modification. (Optional)
-- k Kilo; multiply the argument by 1024
-- m Mega; multiply the argument by 1048576
-- g Giga; multiply the argument by 1073741824
--
-- If ffttpp receives a SIGINFO (see the ``status'' argument of stty(1)) or
-- SIGQUIT signal whilst a transfer is in progress, the current transfer
-- rate statistics will be written to the standard error output, in the same
-- format as the standard completion message.
--
--AAUUTTOO--FFEETTCCHHIINNGG FFIILLEESS
-- In addition to standard commands, this version of ffttpp supports an auto-
-- fetch feature. To enable auto-fetch, simply pass the list of host-
-- names/files on the command line.
--
-- The following formats are valid syntax for an auto-fetch element:
--
-- [user@]host:[path][/]
-- ``Classic'' FTP format.
--
-- If _p_a_t_h contains a glob character and globbing is enabled, (see
-- gglloobb), then the equivalent of `mget path' is performed.
--
-- If the directory component of _p_a_t_h contains no globbing characters,
-- it is stored locally with the name basename (see basename(1)) of
-- ppaatthh, in the current directory. Otherwise, the full remote name is
-- used as the local name, relative to the local root directory.
--
-- ftp://[user[:password]@]host[:port]/path[/][;type=X]
-- An FTP URL, retrieved using the FTP protocol if sseett ffttpp__pprrooxxyy isn't
-- defined. Otherwise, transfer the URL using HTTP via the proxy de-
-- fined in sseett ffttpp__pprrooxxyy. If sseett ffttpp__pprrooxxyy isn't defined and _u_s_e_r is
-- given, login as _u_s_e_r. In this case, use _p_a_s_s_w_o_r_d if supplied, oth-
-- erwise prompt the user for one.
--
-- In order to be compliant with RRFFCC 11773388, ffttpp strips the leading `/'
-- from _p_a_t_h, resulting in a transfer relative from the default login
-- directory of the user. If the _/ directory is required, use a lead-
-- ing path of ``%2F''. If a user's home directory is required (and
-- the remote server supports the syntax), use a leading path of
-- ``%7Euser/''. For example, to retrieve _/_e_t_c_/_m_o_t_d from `localhost'
-- as the user `myname' with the password `mypass', use
-- ``ftp://myname:mypass@localhost/%2fetc/motd''
--
-- If a suffix of `;type=A' or `;type=I' is supplied, then the trans-
-- fer type will take place as ascii or binary (respectively). The
-- default transfer type is binary.
--
-- http://[user[:password]@]host[:port]/path
-- An HTTP URL, retrieved using the HTTP protocol. If sseett hhttttpp__pprrooxxyy
-- is defined, it is used as a URL to an HTTP proxy server. If HTTP
-- authorisation is required to retrieve _p_a_t_h, and `user' (and option-
-- ally `password') is in the URL, use them for the first attempt to
-- authenticate.
--
-- file:///path
-- A local URL, copied from _/_p_a_t_h.
--
-- Unless noted otherwise above, and --oo _o_u_t_p_u_t is not given, the file is
-- stored in the current directory as the basename(1) of _p_a_t_h.
--
-- If a classic format or an FTP URL format has a trailing `/' or an empty
-- _p_a_t_h component, then ffttpp will connect to the site and ccdd to the directory
-- given as the path, and leave the user in interactive mode ready for fur-
-- ther input. This will not work if sseett ffttpp__pprrooxxyy is being used.
--
-- Direct HTTP transfers use HTTP 1.1. Proxied FTP and HTTP transfers use
-- HTTP 1.0.
--
-- If --RR is given, all auto-fetches that don't go via the FTP or HTTP prox-
-- ies will be restarted. For FTP, this is implemented by using rreeggeett in-
-- stead of ggeett. For HTTP, this is implemented by using the `Range: bytes='
-- HTTP/1.1 directive.
--
-- If WWW or proxy WWW authentication is required, you will be prompted to
-- enter a username and password to authenticate with.
--
-- When specifying IPv6 numeric addresses in a URL, you need to surround the
-- address in square brackets. E.g.: ``ftp://[::1]:21/''. This is because
-- colons are used in IPv6 numeric address as well as being the separator
-- for the port number.
--
--AABBOORRTTIINNGG AA FFIILLEE TTRRAANNSSFFEERR
-- To abort a file transfer, use the terminal interrupt key (usually Ctrl-
-- C). Sending transfers will be immediately halted. Receiving transfers
-- will be halted by sending an FTP protocol ABOR command to the remote
-- server, and discarding any further data received. The speed at which
-- this is accomplished depends upon the remote server's support for ABOR
-- processing. If the remote server does not support the ABOR command, the
-- prompt will not appear until the remote server has completed sending the
-- requested file.
--
-- If the terminal interrupt key sequence is used whilst ffttpp is awaiting a
-- reply from the remote server for the ABOR processing, then the connection
-- will be closed. This is different from the traditional behaviour (which
-- ignores the terminal interrupt during this phase), but is considered more
-- useful.
--
--FFIILLEE NNAAMMIINNGG CCOONNVVEENNTTIIOONNSS
-- Files specified as arguments to ffttpp commands are processed according to
-- the following rules.
--
-- 1. If the file name `--' is specified, the _s_t_d_i_n (for reading) or _s_t_d_o_u_t
-- (for writing) is used.
--
-- 2. If the first character of the file name is `|', the remainder of the
-- argument is interpreted as a shell command. ffttpp then forks a shell,
-- using popen(3) with the argument supplied, and reads (writes) from
-- the stdout (stdin). If the shell command includes spaces, the argu-
-- ment must be quoted; e.g. ``"| ls -lt"''. A particularly useful
-- example of this mechanism is: ``dir "" |more''.
--
-- 3. Failing the above checks, if ``globbing'' is enabled, local file
-- names are expanded according to the rules used in the csh(1); c.f.
-- the gglloobb command. If the ffttpp command expects a single local file
-- (e.g. ppuutt), only the first filename generated by the "globbing" op-
-- eration is used.
--
-- 4. For mmggeett commands and ggeett commands with unspecified local file
-- names, the local filename is the remote filename, which may be al-
-- tered by a ccaassee, nnttrraannss, or nnmmaapp setting. The resulting filename
-- may then be altered if rruunniiqquuee is on.
--
-- 5. For mmppuutt commands and ppuutt commands with unspecified remote file
-- names, the remote filename is the local filename, which may be al-
-- tered by a nnttrraannss or nnmmaapp setting. The resulting filename may then
-- be altered by the remote server if ssuunniiqquuee is on.
--
--FFIILLEE TTRRAANNSSFFEERR PPAARRAAMMEETTEERRSS
-- The FTP specification specifies many parameters which may affect a file
-- transfer. The ttyyppee may be one of ``ascii'', ``image'' (binary),
-- ``ebcdic'', and ``local byte size'' (for PDP-10's and PDP-20's mostly).
-- ffttpp supports the ascii and image types of file transfer, plus local byte
-- size 8 for tteenneexx mode transfers.
--
-- ffttpp supports only the default values for the remaining file transfer pa-
-- rameters: mmooddee, ffoorrmm, and ssttrruucctt.
--
--TTHHEE ..nneettrrcc FFIILLEE
-- The _._n_e_t_r_c file contains login and initialization information used by the
-- auto-login process. It resides in the user's home directory, unless
-- overridden with the --NN _n_e_t_r_c option, or specified in the NETRC environ-
-- ment variable. The following tokens are recognized; they may be separat-
-- ed by spaces, tabs, or new-lines:
--
-- mmaacchhiinnee _n_a_m_e
-- Identify a remote machine _n_a_m_e. The auto-login process search-
-- es the _._n_e_t_r_c file for a mmaacchhiinnee token that matches the remote
-- machine specified on the ffttpp command line or as an ooppeenn command
-- argument. Once a match is made, the subsequent _._n_e_t_r_c tokens
-- are processed, stopping when the end of file is reached or an-
-- other mmaacchhiinnee or a ddeeffaauulltt token is encountered.
--
-- ddeeffaauulltt This is the same as mmaacchhiinnee _n_a_m_e except that ddeeffaauulltt matches
-- any name. There can be only one ddeeffaauulltt token, and it must be
-- after all mmaacchhiinnee tokens. This is normally used as:
--
-- default login anonymous password user@site
--
-- thereby giving the user an automatic anonymous FTP login to ma-
-- chines not specified in _._n_e_t_r_c. This can be overridden by us-
-- ing the --nn flag to disable auto-login.
--
-- llooggiinn _n_a_m_e
-- Identify a user on the remote machine. If this token is pre-
-- sent, the auto-login process will initiate a login using the
-- specified _n_a_m_e.
--
-- ppaasssswwoorrdd _s_t_r_i_n_g
-- Supply a password. If this token is present, the auto-login
-- process will supply the specified string if the remote server
-- requires a password as part of the login process. Note that if
-- this token is present in the _._n_e_t_r_c file for any user other
-- than _a_n_o_n_y_m_o_u_s, ffttpp will abort the auto-login process if the
-- _._n_e_t_r_c is readable by anyone besides the user.
--
-- aaccccoouunntt _s_t_r_i_n_g
-- Supply an additional account password. If this token is pre-
-- sent, the auto-login process will supply the specified string
-- if the remote server requires an additional account password,
-- or the auto-login process will initiate an ACCT command if it
-- does not.
--
-- mmaaccddeeff _n_a_m_e
-- Define a macro. This token functions like the ffttpp mmaaccddeeff com-
-- mand functions. A macro is defined with the specified name;
-- its contents begin with the next _._n_e_t_r_c line and continue until
-- a blank line (consecutive new-line characters) is encountered.
-- If a macro named iinniitt is defined, it is automatically executed
-- as the last step in the auto-login process.
--
--CCOOMMMMAANNDD LLIINNEE EEDDIITTIINNGG
-- ffttpp supports interactive command line editing, via the editline(3) li-
-- brary. It is enabled with the eeddiitt command, and is enabled by default if
-- input is from a tty. Previous lines can be recalled and edited with the
-- arrow keys, and other GNU Emacs-style editing keys may be used as well.
--
-- The editline(3) library is configured with a _._e_d_i_t_r_c file - refer to
-- editrc(5) for more information.
--
-- An extra key binding is available to ffttpp to provide context sensitive
-- command and filename completion (including remote file completion). To
-- use this, bind a key to the editline(3) command ffttpp--ccoommpplleettee. By de-
-- fault, this is bound to the TAB key.
--
--CCOOMMMMAANNDD LLIINNEE PPRROOMMPPTT
-- By default, ffttpp displays a command line prompt of ``ftp>'' to the user.
-- This can be changed with the sseett pprroommpptt command.
--
-- A prompt can be displayed on the right side of the screen (after the com-
-- mand input) with the sseett rrpprroommpptt command.
--
-- The following formatting sequences are replaced by the given information:
--
-- %/ The current remote working directory.
--
-- %c[[0]_n], %.[[0]_n]
-- The trailing component of the current remote working directo-
-- ry, or _n trailing components if a digit _n is given. If _n be-
-- gins with `0', the number of skipped components precede the
-- trailing component(s) in the format ``/_<_s_k_i_p_p_e_d_>trailing''
-- (for `%c') or ``...trailing'' (for `%.').
--
-- %M The remote host name.
--
-- %m The remote host name, up to the first `.'.
--
-- %n The remote user name.
--
-- %% A single `%'.
--
--EENNVVIIRROONNMMEENNTT
-- ffttpp uses the following environment variables.
--
-- FTPANONPASS Password to send in an anonymous FTP transfer. Defaults
-- to ```whoami`@''.
--
-- FTPMODE Overrides the default operation mode. Support values are:
--
-- active active mode FTP only
--
-- auto automatic determination of passive or active
-- (this is the default)
--
-- gate gate-ftp mode
--
-- passive passive mode FTP only
--
-- FTPPROMPT Command-line prompt to use. Defaults to ``ftp>''. Refer
-- to _C_O_M_M_A_N_D _L_I_N_E _P_R_O_M_P_T for more information.
--
-- FTPRPROMPT Command-line right side prompt to use. Defaults to ``''.
-- Refer to _C_O_M_M_A_N_D _L_I_N_E _P_R_O_M_P_T for more information.
--
-- FTPSERVER Host to use as gate-ftp server when ggaattee is enabled.
--
-- FTPSERVERPORT Port to use when connecting to gate-ftp server when ggaattee
-- is enabled. Default is port returned by a ggeettsseerrvvbbyynnaammee()
-- lookup of ``ftpgate/tcp''.
--
-- HOME For default location of a _._n_e_t_r_c file, if one exists.
--
-- NETRC An alternate location of the _._n_e_t_r_c file.
--
-- PAGER Used by various commands to display files. Defaults to
-- more(1) if empty or not set.
--
-- SHELL For default shell.
--
-- ftp_proxy URL of FTP proxy to use when making FTP URL requests (if
-- not defined, use the standard FTP protocol).
--
-- _N_O_T_E: this is not used for interactive sessions, only for
-- command-line fetches.
--
-- http_proxy URL of HTTP proxy to use when making HTTP URL requests.
-- If proxy authentication is required and there is a user-
-- name and password in this URL, they will automatically be
-- used in the first attempt to authenticate to the proxy.
--
-- Note that the use of a username and password in ftp_proxy
-- and http_proxy may be incompatible with other programs
-- that use it (such as lynx(1)).
--
-- _N_O_T_E: this is not used for interactive sessions, only for
-- command-line fetches.
--
-- no_proxy A space or comma separated list of hosts (or domains) for
-- which proxying is not to be used. Each entry may have an
-- optional trailing ":port", which restricts the matching to
-- connections to that port.
--
--SSEEEE AALLSSOO
-- getservbyname(3), editrc(5), services(5), ftpd(8)
--
--SSTTAANNDDAARRDDSS
-- ffttpp attempts to be compliant with RRFFCC 995599, RRFFCC 11112233, RRFFCC 11773388, RRFFCC 22006688,
-- RRFFCC 22338899, RRFFCC 22442288, RRFFCC 22773322, and ddrraafftt--iieettff--ffttppeexxtt--mmllsstt--1111.
--
--HHIISSTTOORRYY
-- The ffttpp command appeared in 4.2BSD.
--
-- Various features such as command line editing, context sensitive command
-- and file completion, dynamic progress bar, automatic fetching of files
-- and URLs, modification time preservation, transfer rate throttling, con-
-- figurable command line prompt, and other enhancements over the standard
-- BSD ffttpp were implemented in NetBSD 1.3 and later releases by Luke Mewburn
-- <lukem@netbsd.org>.
--
-- IPv6 support was added by the WIDE/KAME project (but may not be present
-- in all non-NetBSD versions of this program, depending if the operating
-- system supports IPv6 in a similar manner to KAME).
--
--BBUUGGSS
-- Correct execution of many commands depends upon proper behavior by the
-- remote server.
--
-- An error in the treatment of carriage returns in the 4.2BSD ascii-mode
-- transfer code has been corrected. This correction may result in incor-
-- rect transfers of binary files to and from 4.2BSD servers using the ascii
-- type. Avoid this problem by using the binary image type.
--
-- ffttpp assumes that all IPv4 mapped addresses (IPv6 addresses with a form
-- like ::ffff:10.1.1.1) indicate IPv4 destinations which can be handled by
-- AF_INET sockets. However, in certain IPv6 network configurations, this
-- assumption is not true. In such an environment, IPv4 mapped addresses
-- must be passed to AF_INET6 sockets directly. For example, if your site
-- uses a SIIT translator for IPv6-to-IPv4 translation, ffttpp is unable to
-- support your configuration.
--
--NetBSD 1.6_BETA1 May 18, 2002 16
-diff -Nru src/ftp_var.h /home/spock/ftp/ftp_var.h
---- src/ftp_var.h Sat Jun 15 05:40:36 2002
-+++ /home/spock/ftp/ftp_var.h Thu Jun 12 02:02:11 2003
-@@ -1,7 +1,7 @@
--/* $NetBSD: ftp_var.h,v 1.62 2001/12/26 09:40:16 lukem Exp $ */
-+/* $NetBSD: ftp_var.h,v 1.64 2003/01/21 16:08:07 jhawk Exp $ */
-
- /*-
-- * Copyright (c) 1996-2001 The NetBSD Foundation, Inc.
-+ * Copyright (c) 1996-2003 The NetBSD Foundation, Inc.
- * All rights reserved.
- *
- * This code is derived from software contributed to The NetBSD Foundation
-@@ -111,14 +111,20 @@
- #define NO_PROGRESS
- #endif
-
-+#include <sys/param.h>
-+
-+#include <netinet/in.h>
-+#include <arpa/inet.h>
-+
-+#include <setjmp.h>
-+#include <stringlist.h>
-+
- #ifndef NO_EDITCOMPLETE
- #include <histedit.h>
- #endif /* !NO_EDITCOMPLETE */
-
--typedef void (*sigfunc)(int);
--
- #include "extern.h"
--
-+#include "progressbar.h"
-
- /*
- * Format of command table.
-@@ -175,7 +181,6 @@
-
- #define HASHBYTES 1024 /* default mark for `hash' command */
- #define DEFAULTINCR 1024 /* default increment for `rate' command */
--#define STALLTIME 5 /* # of seconds of no xfer before "stalling" */
-
- #define FTP_PORT 21 /* default if ! getservbyname("ftp/tcp") */
- #define HTTP_PORT 80 /* default if ! getservbyname("http/tcp") */
-@@ -204,9 +209,7 @@
- GLOBAL int hash; /* print # for each buffer transferred */
- GLOBAL int mark; /* number of bytes between hashes */
- GLOBAL int sendport; /* use PORT/LPRT cmd for each data connection */
--GLOBAL int verbose; /* print messages coming back from server */
- GLOBAL int connected; /* 1 = connected to server, -1 = logged in */
--GLOBAL int fromatty; /* input is from a terminal */
- GLOBAL int interactive; /* interactively prompt on m* cmds */
- GLOBAL int confirmrest; /* confirm rest of current m* cmd */
- GLOBAL int debug; /* debugging level */
-@@ -223,7 +226,6 @@
- GLOBAL int ntflag; /* use ntin ntout tables for name translation */
- GLOBAL int mapflag; /* use mapin mapout templates on file names */
- GLOBAL int preserve; /* preserve modification time on files */
--GLOBAL int progress; /* display transfer progress bar */
- GLOBAL int code; /* return/reply code for ftp command */
- GLOBAL int crflag; /* if 1, strip car. rets. on ascii gets */
- GLOBAL int passivemode; /* passive mode enabled */
-@@ -252,9 +254,7 @@
- GLOBAL int rate_put; /* maximum put xfer rate */
- GLOBAL int rate_put_incr; /* increment for put xfer rate */
- GLOBAL int retry_connect; /* seconds between retrying connection */
--GLOBAL int ttywidth; /* width of tty */
- GLOBAL char *tmpdir; /* temporary directory */
--GLOBAL FILE *ttyout; /* stdout, or stderr if retrieving to stdout */
- GLOBAL int epsv4; /* use EPSV/EPRT on IPv4 connections */
- GLOBAL int epsv4bad; /* EPSV doesn't work on the current server */
- GLOBAL int editing; /* command line editing enabled */
-@@ -268,10 +268,7 @@
- GLOBAL size_t cursor_argo; /* offset of cursor in margv[cursor_argc] */
- #endif /* !NO_EDITCOMPLETE */
-
--GLOBAL off_t bytes; /* current # of bytes read */
--GLOBAL off_t filesize; /* size of file being transferred */
- GLOBAL char *direction; /* direction transfer is occurring */
--GLOBAL off_t restart_point; /* offset to restart transfer */
-
- GLOBAL char *hostname; /* name of host connected to */
- GLOBAL int unix_server; /* server is unix, can use binary for ascii */
-@@ -287,8 +284,6 @@
- GLOBAL char *outfile; /* filename to output URLs to */
- GLOBAL int restartautofetch; /* restart auto-fetch */
-
--GLOBAL sigjmp_buf toplevel; /* non-local goto stuff for cmd scanner */
--
- GLOBAL char line[FTPBUFLEN]; /* input line buffer */
- GLOBAL char *stringbase; /* current scan point in line buffer */
- GLOBAL char argbuf[FTPBUFLEN]; /* argument storage buffer */
-@@ -336,29 +331,7 @@
- #endif
-
- #ifdef NO_LONG_LONG
--# define LLF "%ld"
--# define LLFP(x) "%" x "ld"
--# define LLT long
--# define ULLF "%lu"
--# define ULLFP(x) "%" x "lu"
--# define ULLT unsigned long
- # define STRTOLL(x,y,z) strtol(x,y,z)
- #else
--#if HAVE_PRINTF_QD
--# define LLF "%qd"
--# define LLFP(x) "%" x "qd"
--# define LLT long long
--# define ULLF "%qu"
--# define ULLFP(x) "%" x "qu"
--# define ULLT unsigned long long
--# define STRTOLL(x,y,z) strtoll(x,y,z)
--#else
--# define LLF "%lld"
--# define LLFP(x) "%" x "lld"
--# define LLT long long
--# define ULLF "%llu"
--# define ULLFP(x) "%" x "llu"
--# define ULLT unsigned long long
- # define STRTOLL(x,y,z) strtoll(x,y,z)
--#endif
- #endif
-diff -Nru src/main.c /home/spock/ftp/main.c
---- src/main.c Sat Jun 15 05:40:36 2002
-+++ /home/spock/ftp/main.c Thu Jun 12 02:02:11 2003
-@@ -1,4 +1,4 @@
--/* $NetBSD: main.c,v 1.82 2002/06/05 13:51:54 lukem Exp $ */
-+/* $NetBSD: main.c,v 1.84 2003/05/14 14:31:00 wiz Exp $ */
-
- /*-
- * Copyright (c) 1996-2002 The NetBSD Foundation, Inc.
-@@ -98,11 +98,36 @@
- * SUCH DAMAGE.
- */
-
-+#include <sys/cdefs.h>
-+#ifndef lint
-+__COPYRIGHT("@(#) Copyright (c) 1985, 1989, 1993, 1994\n\
-+ The Regents of the University of California. All rights reserved.\n");
-+#endif /* not lint */
-+
-+#ifndef lint
-+#if 0
-+static char sccsid[] = "@(#)main.c 8.6 (Berkeley) 10/9/94";
-+#else
-+__RCSID("$NetBSD: main.c,v 1.84 2003/05/14 14:31:00 wiz Exp $");
-+#endif
-+#endif /* not lint */
-+
- /*
- * FTP User Program -- Command Interface.
- */
-+#include <sys/types.h>
-+#include <sys/socket.h>
-
--#include "lukemftp.h"
-+#include <err.h>
-+#include <errno.h>
-+#include <netdb.h>
-+#include <paths.h>
-+#include <pwd.h>
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <string.h>
-+#include <unistd.h>
-+#include <locale.h>
-
- #define GLOBAL /* force GLOBAL decls in ftp_var.h to be declared */
- #include "ftp_var.h"
-@@ -123,9 +148,7 @@
- char *cp, *ep, *anonuser, *anonpass, *upload_path;
- int dumbterm, s, len, isupload;
-
--#if 0 /* XXX */
- setlocale(LC_ALL, "");
--#endif
- setprogname(argv[0]);
-
- ftpport = "ftp";
-@@ -258,7 +281,7 @@
- }
- }
-
-- while ((ch = getopt(argc, argv, "46AadefginN:o:pP:r:RtT:u:vV")) != -1) {
-+ while ((ch = getopt(argc, argv, "46AadefginN:o:pP:q:r:RtT:u:vV")) != -1) {
- switch (ch) {
- case '4':
- family = AF_INET;
-@@ -330,6 +353,12 @@
- ftpport = optarg;
- break;
-
-+ case 'q':
-+ quit_time = strtol(optarg, &ep, 10);
-+ if (quit_time < 1 || *ep != '\0')
-+ errx(1, "bad quit value: %s", optarg);
-+ break;
-+
- case 'r':
- retry_connect = strtol(optarg, &ep, 10);
- if (retry_connect < 1 || *ep != '\0')
-@@ -1003,6 +1032,6 @@
- " [-T dir,max[,inc][[user@]host [port]]] [host:path[/]]\n"
- " [file:///file] [ftp://[user[:pass]@]host[:port]/path[/]]\n"
- " [http://[user[:pass]@]host[:port]/path] [...]\n"
--" %s -u url file [...]\n", progname, progname);
-+" %s -u URL file [...]\n", progname, progname);
- exit(1);
- }
-diff -Nru src/progressbar.c /home/spock/ftp/progressbar.c
---- src/progressbar.c Wed Dec 31 19:00:00 1969
-+++ /home/spock/ftp/progressbar.c Thu Jun 12 02:02:11 2003
-@@ -0,0 +1,460 @@
-+/* $NetBSD: progressbar.c,v 1.3 2003/02/28 09:53:49 lukem Exp $ */
-+
-+/*-
-+ * Copyright (c) 1997-2003 The NetBSD Foundation, Inc.
-+ * All rights reserved.
-+ *
-+ * This code is derived from software contributed to The NetBSD Foundation
-+ * by Luke Mewburn.
-+ *
-+ * This code is derived from software contributed to The NetBSD Foundation
-+ * by Jason R. Thorpe of the Numerical Aerospace Simulation Facility,
-+ * NASA Ames Research Center.
-+ *
-+ * Redistribution and use in source and binary forms, with or without
-+ * modification, are permitted provided that the following conditions
-+ * are met:
-+ * 1. Redistributions of source code must retain the above copyright
-+ * notice, this list of conditions and the following disclaimer.
-+ * 2. Redistributions in binary form must reproduce the above copyright
-+ * notice, this list of conditions and the following disclaimer in the
-+ * documentation and/or other materials provided with the distribution.
-+ * 3. All advertising materials mentioning features or use of this software
-+ * must display the following acknowledgement:
-+ * This product includes software developed by the NetBSD
-+ * Foundation, Inc. and its contributors.
-+ * 4. Neither the name of The NetBSD Foundation nor the names of its
-+ * contributors may be used to endorse or promote products derived
-+ * from this software without specific prior written permission.
-+ *
-+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
-+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
-+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-+ * POSSIBILITY OF SUCH DAMAGE.
-+ */
-+
-+#include <sys/cdefs.h>
-+#ifndef lint
-+__RCSID("$NetBSD: progressbar.c,v 1.3 2003/02/28 09:53:49 lukem Exp $");
-+#endif /* not lint */
-+
-+/*
-+ * FTP User Program -- Misc support routines
-+ */
-+#include <sys/types.h>
-+#include <sys/param.h>
-+
-+#include <err.h>
-+#include <errno.h>
-+#include <signal.h>
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <time.h>
-+#include <tzfile.h>
-+#include <unistd.h>
-+
-+#include "progressbar.h"
-+
-+#if !defined(NO_PROGRESS)
-+/*
-+ * return non-zero if we're the current foreground process
-+ */
-+int
-+foregroundproc(void)
-+{
-+ static pid_t pgrp = -1;
-+
-+ if (pgrp == -1)
-+ pgrp = getpgrp();
-+
-+ return (tcgetpgrp(fileno(ttyout)) == pgrp);
-+}
-+#endif /* !defined(NO_PROGRESS) */
-+
-+
-+#ifndef NO_PROGRESS
-+static void updateprogressmeter(int);
-+
-+/*
-+ * SIGALRM handler to update the progress meter
-+ */
-+static void
-+updateprogressmeter(int dummy)
-+{
-+ int oerrno = errno;
-+
-+ progressmeter(0);
-+ errno = oerrno;
-+}
-+#endif /* NO_PROGRESS */
-+
-+
-+/*
-+ * List of order of magnitude prefixes.
-+ * The last is `P', as 2^64 = 16384 Petabytes
-+ */
-+static const char prefixes[] = " KMGTP";
-+
-+/*
-+ * Display a transfer progress bar if progress is non-zero.
-+ * SIGALRM is hijacked for use by this function.
-+ * - Before the transfer, set filesize to size of file (or -1 if unknown),
-+ * and call with flag = -1. This starts the once per second timer,
-+ * and a call to updateprogressmeter() upon SIGALRM.
-+ * - During the transfer, updateprogressmeter will call progressmeter
-+ * with flag = 0
-+ * - After the transfer, call with flag = 1
-+ */
-+static struct timeval start;
-+static struct timeval lastupdate;
-+
-+#define BUFLEFT (sizeof(buf) - len)
-+
-+void
-+progressmeter(int flag)
-+{
-+ static off_t lastsize;
-+ off_t cursize;
-+ struct timeval now, wait;
-+#ifndef NO_PROGRESS
-+ struct timeval td;
-+ off_t abbrevsize, bytespersec;
-+ double elapsed;
-+ int ratio, barlength, i, len, remaining;
-+
-+ /*
-+ * Work variables for progress bar.
-+ *
-+ * XXX: if the format of the progress bar changes
-+ * (especially the number of characters in the
-+ * `static' portion of it), be sure to update
-+ * these appropriately.
-+ */
-+ char buf[256]; /* workspace for progress bar */
-+#define BAROVERHEAD 43 /* non `*' portion of progress bar */
-+ /*
-+ * stars should contain at least
-+ * sizeof(buf) - BAROVERHEAD entries
-+ */
-+ static const char stars[] =
-+"*****************************************************************************"
-+"*****************************************************************************"
-+"*****************************************************************************";
-+
-+#endif
-+
-+ if (flag == -1) {
-+ (void)gettimeofday(&start, NULL);
-+ lastupdate = start;
-+ lastsize = restart_point;
-+ }
-+
-+ (void)gettimeofday(&now, NULL);
-+ cursize = bytes + restart_point;
-+ timersub(&now, &lastupdate, &wait);
-+ if (cursize > lastsize) {
-+ lastupdate = now;
-+ lastsize = cursize;
-+ wait.tv_sec = 0;
-+ } else {
-+#ifndef STANDALONE_PROGRESS
-+ if (quit_time > 0 && wait.tv_sec > quit_time) {
-+ len = snprintf(buf, sizeof(buf), "\r\n%s: "
-+ "transfer aborted because stalled for %lu sec.\r\n",
-+ getprogname(), (unsigned long)wait.tv_sec);
-+ (void)write(fileno(ttyout), buf, len);
-+ (void)xsignal(SIGALRM, SIG_DFL);
-+ alarmtimer(0);
-+ siglongjmp(toplevel, 1);
-+ }
-+#endif /* !STANDALONE_PROGRESS */
-+ }
-+ /*
-+ * Always set the handler even if we are not the foreground process.
-+ */
-+#ifdef STANDALONE_PROGRESS
-+ if (progress) {
-+#else
-+ if (quit_time > 0 || progress) {
-+#endif /* !STANDALONE_PROGRESS */
-+ if (flag == -1) {
-+ (void)xsignal_restart(SIGALRM, updateprogressmeter, 1);
-+ alarmtimer(1); /* set alarm timer for 1 Hz */
-+ } else if (flag == 1) {
-+ (void)xsignal(SIGALRM, SIG_DFL);
-+ alarmtimer(0);
-+ }
-+ }
-+#ifndef NO_PROGRESS
-+ if (!progress)
-+ return;
-+ len = 0;
-+
-+ /*
-+ * print progress bar only if we are foreground process.
-+ */
-+ if (! foregroundproc())
-+ return;
-+
-+ len += snprintf(buf + len, BUFLEFT, "\r");
-+ if (filesize > 0) {
-+ ratio = (int)((double)cursize * 100.0 / (double)filesize);
-+ ratio = MAX(ratio, 0);
-+ ratio = MIN(ratio, 100);
-+ len += snprintf(buf + len, BUFLEFT, "%3d%% ", ratio);
-+
-+ /*
-+ * calculate the length of the `*' bar, ensuring that
-+ * the number of stars won't exceed the buffer size
-+ */
-+ barlength = MIN(sizeof(buf) - 1, ttywidth) - BAROVERHEAD;
-+ if (barlength > 0) {
-+ i = barlength * ratio / 100;
-+ len += snprintf(buf + len, BUFLEFT,
-+ "|%.*s%*s|", i, stars, barlength - i, "");
-+ }
-+ }
-+
-+ abbrevsize = cursize;
-+ for (i = 0; abbrevsize >= 100000 && i < sizeof(prefixes); i++)
-+ abbrevsize >>= 10;
-+ len += snprintf(buf + len, BUFLEFT, " " LLFP("5") " %c%c ",
-+ (LLT)abbrevsize,
-+ prefixes[i],
-+ i == 0 ? ' ' : 'B');
-+
-+ timersub(&now, &start, &td);
-+ elapsed = td.tv_sec + (td.tv_usec / 1000000.0);
-+
-+ bytespersec = 0;
-+ if (bytes > 0) {
-+ bytespersec = bytes;
-+ if (elapsed > 0.0)
-+ bytespersec /= elapsed;
-+ }
-+ for (i = 1; bytespersec >= 1024000 && i < sizeof(prefixes); i++)
-+ bytespersec >>= 10;
-+ len += snprintf(buf + len, BUFLEFT,
-+ " " LLFP("3") ".%02d %cB/s ",
-+ (LLT)(bytespersec / 1024),
-+ (int)((bytespersec % 1024) * 100 / 1024),
-+ prefixes[i]);
-+
-+ if (filesize > 0) {
-+ if (bytes <= 0 || elapsed <= 0.0 || cursize > filesize) {
-+ len += snprintf(buf + len, BUFLEFT, " --:-- ETA");
-+ } else if (wait.tv_sec >= STALLTIME) {
-+ len += snprintf(buf + len, BUFLEFT, " - stalled -");
-+ } else {
-+ remaining = (int)
-+ ((filesize - restart_point) / (bytes / elapsed) -
-+ elapsed);
-+ if (remaining >= 100 * SECSPERHOUR)
-+ len += snprintf(buf + len, BUFLEFT,
-+ " --:-- ETA");
-+ else {
-+ i = remaining / SECSPERHOUR;
-+ if (i)
-+ len += snprintf(buf + len, BUFLEFT,
-+ "%2d:", i);
-+ else
-+ len += snprintf(buf + len, BUFLEFT,
-+ " ");
-+ i = remaining % SECSPERHOUR;
-+ len += snprintf(buf + len, BUFLEFT,
-+ "%02d:%02d ETA", i / 60, i % 60);
-+ }
-+ }
-+ }
-+ if (flag == 1)
-+ len += snprintf(buf + len, BUFLEFT, "\n");
-+ (void)write(fileno(ttyout), buf, len);
-+
-+#endif /* !NO_PROGRESS */
-+}
-+
-+#ifndef STANDALONE_PROGRESS
-+/*
-+ * Display transfer statistics.
-+ * Requires start to be initialised by progressmeter(-1),
-+ * direction to be defined by xfer routines, and filesize and bytes
-+ * to be updated by xfer routines
-+ * If siginfo is nonzero, an ETA is displayed, and the output goes to stderr
-+ * instead of ttyout.
-+ */
-+void
-+ptransfer(int siginfo)
-+{
-+ struct timeval now, td, wait;
-+ double elapsed;
-+ off_t bytespersec;
-+ int remaining, hh, i, len;
-+
-+ char buf[256]; /* Work variable for transfer status. */
-+
-+ if (!verbose && !progress && !siginfo)
-+ return;
-+
-+ (void)gettimeofday(&now, NULL);
-+ timersub(&now, &start, &td);
-+ elapsed = td.tv_sec + (td.tv_usec / 1000000.0);
-+ bytespersec = 0;
-+ if (bytes > 0) {
-+ bytespersec = bytes;
-+ if (elapsed > 0.0)
-+ bytespersec /= elapsed;
-+ }
-+ len = 0;
-+ len += snprintf(buf + len, BUFLEFT, LLF " byte%s %s in ",
-+ (LLT)bytes, bytes == 1 ? "" : "s", direction);
-+ remaining = (int)elapsed;
-+ if (remaining > SECSPERDAY) {
-+ int days;
-+
-+ days = remaining / SECSPERDAY;
-+ remaining %= SECSPERDAY;
-+ len += snprintf(buf + len, BUFLEFT,
-+ "%d day%s ", days, days == 1 ? "" : "s");
-+ }
-+ hh = remaining / SECSPERHOUR;
-+ remaining %= SECSPERHOUR;
-+ if (hh)
-+ len += snprintf(buf + len, BUFLEFT, "%2d:", hh);
-+ len += snprintf(buf + len, BUFLEFT,
-+ "%02d:%02d ", remaining / 60, remaining % 60);
-+
-+ for (i = 1; bytespersec >= 1024000 && i < sizeof(prefixes); i++)
-+ bytespersec >>= 10;
-+ len += snprintf(buf + len, BUFLEFT, "(" LLF ".%02d %cB/s)",
-+ (LLT)(bytespersec / 1024),
-+ (int)((bytespersec % 1024) * 100 / 1024),
-+ prefixes[i]);
-+
-+ if (siginfo && bytes > 0 && elapsed > 0.0 && filesize >= 0
-+ && bytes + restart_point <= filesize) {
-+ remaining = (int)((filesize - restart_point) /
-+ (bytes / elapsed) - elapsed);
-+ hh = remaining / SECSPERHOUR;
-+ remaining %= SECSPERHOUR;
-+ len += snprintf(buf + len, BUFLEFT, " ETA: ");
-+ if (hh)
-+ len += snprintf(buf + len, BUFLEFT, "%2d:", hh);
-+ len += snprintf(buf + len, BUFLEFT, "%02d:%02d",
-+ remaining / 60, remaining % 60);
-+ timersub(&now, &lastupdate, &wait);
-+ if (wait.tv_sec >= STALLTIME)
-+ len += snprintf(buf + len, BUFLEFT, " (stalled)");
-+ }
-+ len += snprintf(buf + len, BUFLEFT, "\n");
-+ (void)write(siginfo ? STDERR_FILENO : fileno(ttyout), buf, len);
-+}
-+
-+/*
-+ * SIG{INFO,QUIT} handler to print transfer stats if a transfer is in progress
-+ */
-+void
-+psummary(int notused)
-+{
-+ int oerrno = errno;
-+
-+ if (bytes > 0) {
-+ if (fromatty)
-+ write(fileno(ttyout), "\n", 1);
-+ ptransfer(1);
-+ }
-+ errno = oerrno;
-+}
-+#endif /* !STANDALONE_PROGRESS */
-+
-+
-+/*
-+ * Set the SIGALRM interval timer for wait seconds, 0 to disable.
-+ */
-+void
-+alarmtimer(int wait)
-+{
-+ struct itimerval itv;
-+
-+ itv.it_value.tv_sec = wait;
-+ itv.it_value.tv_usec = 0;
-+ itv.it_interval = itv.it_value;
-+ setitimer(ITIMER_REAL, &itv, NULL);
-+}
-+
-+
-+/*
-+ * Install a POSIX signal handler, allowing the invoker to set whether
-+ * the signal should be restartable or not
-+ */
-+sigfunc
-+xsignal_restart(int sig, sigfunc func, int restartable)
-+{
-+ struct sigaction act, oact;
-+ act.sa_handler = func;
-+
-+ sigemptyset(&act.sa_mask);
-+#if defined(SA_RESTART) /* 4.4BSD, Posix(?), SVR4 */
-+ act.sa_flags = restartable ? SA_RESTART : 0;
-+#elif defined(SA_INTERRUPT) /* SunOS 4.x */
-+ act.sa_flags = restartable ? 0 : SA_INTERRUPT;
-+#else
-+#error "system must have SA_RESTART or SA_INTERRUPT"
-+#endif
-+ if (sigaction(sig, &act, &oact) < 0)
-+ return (SIG_ERR);
-+ return (oact.sa_handler);
-+}
-+
-+/*
-+ * Install a signal handler with the `restartable' flag set dependent upon
-+ * which signal is being set. (This is a wrapper to xsignal_restart())
-+ */
-+sigfunc
-+xsignal(int sig, sigfunc func)
-+{
-+ int restartable;
-+
-+ /*
-+ * Some signals print output or change the state of the process.
-+ * There should be restartable, so that reads and writes are
-+ * not affected. Some signals should cause program flow to change;
-+ * these signals should not be restartable, so that the system call
-+ * will return with EINTR, and the program will go do something
-+ * different. If the signal handler calls longjmp() or siglongjmp(),
-+ * it doesn't matter if it's restartable.
-+ */
-+
-+ switch(sig) {
-+#ifdef SIGINFO
-+ case SIGINFO:
-+#endif
-+ case SIGQUIT:
-+ case SIGUSR1:
-+ case SIGUSR2:
-+ case SIGWINCH:
-+ restartable = 1;
-+ break;
-+
-+ case SIGALRM:
-+ case SIGINT:
-+ case SIGPIPE:
-+ restartable = 0;
-+ break;
-+
-+ default:
-+ /*
-+ * This is unpleasant, but I don't know what would be better.
-+ * Right now, this "can't happen"
-+ */
-+ errx(1, "xsignal_restart called with signal %d", sig);
-+ }
-+
-+ return(xsignal_restart(sig, func, restartable));
-+}
-diff -Nru src/progressbar.h /home/spock/ftp/progressbar.h
---- src/progressbar.h Wed Dec 31 19:00:00 1969
-+++ /home/spock/ftp/progressbar.h Thu Jun 12 02:02:11 2003
-@@ -0,0 +1,99 @@
-+/* $NetBSD: progressbar.h,v 1.3 2003/02/28 09:53:49 lukem Exp $ */
-+
-+/*-
-+ * Copyright (c) 1996-2003 The NetBSD Foundation, Inc.
-+ * All rights reserved.
-+ *
-+ * This code is derived from software contributed to The NetBSD Foundation
-+ * by Luke Mewburn.
-+ *
-+ * Redistribution and use in source and binary forms, with or without
-+ * modification, are permitted provided that the following conditions
-+ * are met:
-+ * 1. Redistributions of source code must retain the above copyright
-+ * notice, this list of conditions and the following disclaimer.
-+ * 2. Redistributions in binary form must reproduce the above copyright
-+ * notice, this list of conditions and the following disclaimer in the
-+ * documentation and/or other materials provided with the distribution.
-+ * 3. All advertising materials mentioning features or use of this software
-+ * must display the following acknowledgement:
-+ * This product includes software developed by the NetBSD
-+ * Foundation, Inc. and its contributors.
-+ * 4. Neither the name of The NetBSD Foundation nor the names of its
-+ * contributors may be used to endorse or promote products derived
-+ * from this software without specific prior written permission.
-+ *
-+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
-+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
-+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-+ * POSSIBILITY OF SUCH DAMAGE.
-+ */
-+
-+#ifndef STANDALONE_PROGRESS
-+#include <setjmp.h>
-+#endif /* !STANDALONE_PROGRESS */
-+
-+#ifndef GLOBAL
-+#define GLOBAL extern
-+#endif
-+
-+
-+#define STALLTIME 5 /* # of seconds of no xfer before "stalling" */
-+
-+typedef void (*sigfunc)(int);
-+
-+
-+GLOBAL FILE *ttyout; /* stdout, or stderr if retrieving to stdout */
-+
-+GLOBAL int progress; /* display transfer progress bar */
-+GLOBAL int ttywidth; /* width of tty */
-+
-+GLOBAL off_t bytes; /* current # of bytes read */
-+GLOBAL off_t filesize; /* size of file being transferred */
-+GLOBAL off_t restart_point; /* offset to restart transfer */
-+
-+
-+#ifndef STANDALONE_PROGRESS
-+GLOBAL int fromatty; /* input is from a terminal */
-+GLOBAL int verbose; /* print messages coming back from server */
-+GLOBAL int quit_time; /* maximum time to wait if stalled */
-+
-+GLOBAL char *direction; /* direction transfer is occurring */
-+
-+GLOBAL sigjmp_buf toplevel; /* non-local goto stuff for cmd scanner */
-+#endif /* !STANDALONE_PROGRESS */
-+
-+int foregroundproc(void);
-+void alarmtimer(int);
-+void progressmeter(int);
-+sigfunc xsignal(int, sigfunc);
-+sigfunc xsignal_restart(int, sigfunc, int);
-+
-+#ifndef STANDALONE_PROGRESS
-+void psummary(int);
-+void ptransfer(int);
-+#endif /* !STANDALONE_PROGRESS */
-+
-+
-+#ifdef NO_LONG_LONG
-+# define LLF "%ld"
-+# define LLFP(x) "%" x "ld"
-+# define LLT long
-+# define ULLF "%lu"
-+# define ULLFP(x) "%" x "lu"
-+# define ULLT unsigned long
-+#else
-+# define LLF "%lld"
-+# define LLFP(x) "%" x "lld"
-+# define LLT long long
-+# define ULLF "%llu"
-+# define ULLFP(x) "%" x "llu"
-+# define ULLT unsigned long long
-+#endif
-diff -Nru src/ruserpass.c /home/spock/ftp/ruserpass.c
---- src/ruserpass.c Sat Jun 15 05:40:36 2002
-+++ /home/spock/ftp/ruserpass.c Thu Jun 12 02:02:11 2003
-@@ -33,7 +33,26 @@
- * SUCH DAMAGE.
- */
-
--#include "lukemftp.h"
-+#include <sys/cdefs.h>
-+#ifndef lint
-+#if 0
-+static char sccsid[] = "@(#)ruserpass.c 8.4 (Berkeley) 4/27/95";
-+#else
-+__RCSID("$NetBSD: ruserpass.c,v 1.28 2000/11/15 00:11:04 lukem Exp $");
-+#endif
-+#endif /* not lint */
-+
-+#include <sys/types.h>
-+#include <sys/stat.h>
-+
-+#include <ctype.h>
-+#include <err.h>
-+#include <errno.h>
-+#include <netdb.h>
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <string.h>
-+#include <unistd.h>
-
- #include "ftp_var.h"
-
-diff -Nru src/util.c /home/spock/ftp/util.c
---- src/util.c Sat Jun 15 05:40:37 2002
-+++ /home/spock/ftp/util.c Thu Jun 12 02:02:11 2003
-@@ -1,7 +1,7 @@
--/* $NetBSD: util.c,v 1.107 2002/06/05 10:20:50 lukem Exp $ */
-+/* $NetBSD: util.c,v 1.111 2003/02/28 09:54:51 lukem Exp $ */
-
- /*-
-- * Copyright (c) 1997-2002 The NetBSD Foundation, Inc.
-+ * Copyright (c) 1997-2003 The NetBSD Foundation, Inc.
- * All rights reserved.
- *
- * This code is derived from software contributed to The NetBSD Foundation
-@@ -73,11 +73,36 @@
- * SUCH DAMAGE.
- */
-
-+#include <sys/cdefs.h>
-+#ifndef lint
-+__RCSID("$NetBSD: util.c,v 1.111 2003/02/28 09:54:51 lukem Exp $");
-+#endif /* not lint */
-+
- /*
- * FTP User Program -- Misc support routines
- */
--
--#include "lukemftp.h"
-+#include <sys/types.h>
-+#include <sys/socket.h>
-+#include <sys/ioctl.h>
-+#include <sys/time.h>
-+#include <netinet/in.h>
-+#include <arpa/ftp.h>
-+
-+#include <ctype.h>
-+#include <err.h>
-+#include <errno.h>
-+#include <fcntl.h>
-+#include <glob.h>
-+#include <signal.h>
-+#include <limits.h>
-+#include <netdb.h>
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <string.h>
-+#include <termios.h>
-+#include <time.h>
-+#include <tzfile.h>
-+#include <unistd.h>
-
- #include "ftp_var.h"
-
-@@ -775,303 +800,6 @@
- code = ocode;
- }
-
--#ifndef NO_PROGRESS
--
--/*
-- * return non-zero if we're the current foreground process
-- */
--int
--foregroundproc(void)
--{
-- static pid_t pgrp = -1;
--
-- if (pgrp == -1)
--#if GETPGRP_VOID
-- pgrp = getpgrp();
--#else /* ! GETPGRP_VOID */
-- pgrp = getpgrp(0);
--#endif /* ! GETPGRP_VOID */
--
-- return (tcgetpgrp(fileno(ttyout)) == pgrp);
--}
--
--
--static void updateprogressmeter(int);
--
--/*
-- * SIGALRM handler to update the progress meter
-- */
--static void
--updateprogressmeter(int dummy)
--{
-- int oerrno = errno;
--
-- progressmeter(0);
-- errno = oerrno;
--}
--#endif /* NO_PROGRESS */
--
--
--/*
-- * List of order of magnitude prefixes.
-- * The last is `P', as 2^64 = 16384 Petabytes
-- */
--static const char prefixes[] = " KMGTP";
--
--/*
-- * Display a transfer progress bar if progress is non-zero.
-- * SIGALRM is hijacked for use by this function.
-- * - Before the transfer, set filesize to size of file (or -1 if unknown),
-- * and call with flag = -1. This starts the once per second timer,
-- * and a call to updateprogressmeter() upon SIGALRM.
-- * - During the transfer, updateprogressmeter will call progressmeter
-- * with flag = 0
-- * - After the transfer, call with flag = 1
-- */
--static struct timeval start;
--static struct timeval lastupdate;
--
--#define BUFLEFT (sizeof(buf) - len)
--
--void
--progressmeter(int flag)
--{
-- static off_t lastsize;
--#ifndef NO_PROGRESS
-- struct timeval now, td, wait;
-- off_t cursize, abbrevsize, bytespersec;
-- double elapsed;
-- int ratio, barlength, i, len, remaining;
--
-- /*
-- * Work variables for progress bar.
-- *
-- * XXX: if the format of the progress bar changes
-- * (especially the number of characters in the
-- * `static' portion of it), be sure to update
-- * these appropriately.
-- */
-- char buf[256]; /* workspace for progress bar */
--#define BAROVERHEAD 43 /* non `*' portion of progress bar */
-- /*
-- * stars should contain at least
-- * sizeof(buf) - BAROVERHEAD entries
-- */
-- const char stars[] =
--"*****************************************************************************"
--"*****************************************************************************"
--"*****************************************************************************";
--
--#endif
--
-- if (flag == -1) {
-- (void)gettimeofday(&start, NULL);
-- lastupdate = start;
-- lastsize = restart_point;
-- }
--#ifndef NO_PROGRESS
-- if (!progress)
-- return;
-- len = 0;
--
-- /*
-- * print progress bar only if we are foreground process.
-- */
-- if (! foregroundproc())
-- return;
--
-- (void)gettimeofday(&now, NULL);
-- cursize = bytes + restart_point;
-- timersub(&now, &lastupdate, &wait);
-- if (cursize > lastsize) {
-- lastupdate = now;
-- lastsize = cursize;
-- wait.tv_sec = 0;
-- }
--
-- len += snprintf(buf + len, BUFLEFT, "\r");
-- if (filesize > 0) {
-- ratio = (int)((double)cursize * 100.0 / (double)filesize);
-- ratio = MAX(ratio, 0);
-- ratio = MIN(ratio, 100);
-- len += snprintf(buf + len, BUFLEFT, "%3d%% ", ratio);
--
-- /*
-- * calculate the length of the `*' bar, ensuring that
-- * the number of stars won't exceed the buffer size
-- */
-- barlength = MIN(sizeof(buf) - 1, ttywidth) - BAROVERHEAD;
-- if (barlength > 0) {
-- i = barlength * ratio / 100;
-- len += snprintf(buf + len, BUFLEFT,
-- "|%.*s%*s|", i, stars, barlength - i, "");
-- }
-- }
--
-- abbrevsize = cursize;
-- for (i = 0; abbrevsize >= 100000 && i < sizeof(prefixes); i++)
-- abbrevsize >>= 10;
-- len += snprintf(buf + len, BUFLEFT, " " LLFP("5") " %c%c ",
-- (LLT)abbrevsize,
-- prefixes[i],
-- i == 0 ? ' ' : 'B');
--
-- timersub(&now, &start, &td);
-- elapsed = td.tv_sec + (td.tv_usec / 1000000.0);
--
-- bytespersec = 0;
-- if (bytes > 0) {
-- bytespersec = bytes;
-- if (elapsed > 0.0)
-- bytespersec /= elapsed;
-- }
-- for (i = 1; bytespersec >= 1024000 && i < sizeof(prefixes); i++)
-- bytespersec >>= 10;
-- len += snprintf(buf + len, BUFLEFT,
-- " " LLFP("3") ".%02d %cB/s ",
-- (LLT)(bytespersec / 1024),
-- (int)((bytespersec % 1024) * 100 / 1024),
-- prefixes[i]);
--
-- if (filesize > 0) {
-- if (bytes <= 0 || elapsed <= 0.0 || cursize > filesize) {
-- len += snprintf(buf + len, BUFLEFT, " --:-- ETA");
-- } else if (flag == 1) {
-- i = elapsed / SECSPERHOUR;
-- if (i)
-- len += snprintf(buf + len, BUFLEFT, "%2d:", i);
-- else
-- len += snprintf(buf + len, BUFLEFT, " ");
-- i = (int)elapsed % SECSPERHOUR;
-- len += snprintf(buf + len, BUFLEFT,
-- "%02d:%02d ", i / 60, i % 60);
-- } else if (wait.tv_sec >= STALLTIME) {
-- len += snprintf(buf + len, BUFLEFT, " - stalled -");
-- } else {
-- remaining = (int)
-- ((filesize - restart_point) / (bytes / elapsed) -
-- elapsed);
-- if (remaining >= 100 * SECSPERHOUR)
-- len += snprintf(buf + len, BUFLEFT,
-- " --:-- ETA");
-- else {
-- i = remaining / SECSPERHOUR;
-- if (i)
-- len += snprintf(buf + len, BUFLEFT,
-- "%2d:", i);
-- else
-- len += snprintf(buf + len, BUFLEFT,
-- " ");
-- i = remaining % SECSPERHOUR;
-- len += snprintf(buf + len, BUFLEFT,
-- "%02d:%02d ETA", i / 60, i % 60);
-- }
-- }
-- }
-- if (flag == 1)
-- len += snprintf(buf + len, BUFLEFT, "\n");
-- (void)write(fileno(ttyout), buf, len);
--
-- if (flag == -1) {
-- (void)xsignal_restart(SIGALRM, updateprogressmeter, 1);
-- alarmtimer(1); /* set alarm timer for 1 Hz */
-- } else if (flag == 1) {
-- (void)xsignal(SIGALRM, SIG_DFL);
-- alarmtimer(0);
-- }
--#endif /* !NO_PROGRESS */
--}
--
--/*
-- * Display transfer statistics.
-- * Requires start to be initialised by progressmeter(-1),
-- * direction to be defined by xfer routines, and filesize and bytes
-- * to be updated by xfer routines
-- * If siginfo is nonzero, an ETA is displayed, and the output goes to stderr
-- * instead of ttyout.
-- */
--void
--ptransfer(int siginfo)
--{
-- struct timeval now, td, wait;
-- double elapsed;
-- off_t bytespersec;
-- int remaining, hh, i, len;
--
-- char buf[256]; /* Work variable for transfer status. */
--
-- if (!verbose && !progress && !siginfo)
-- return;
--
-- (void)gettimeofday(&now, NULL);
-- timersub(&now, &start, &td);
-- elapsed = td.tv_sec + (td.tv_usec / 1000000.0);
-- bytespersec = 0;
-- if (bytes > 0) {
-- bytespersec = bytes;
-- if (elapsed > 0.0)
-- bytespersec /= elapsed;
-- }
-- len = 0;
-- len += snprintf(buf + len, BUFLEFT, LLF " byte%s %s in ",
-- (LLT)bytes, bytes == 1 ? "" : "s", direction);
-- remaining = (int)elapsed;
-- if (remaining > SECSPERDAY) {
-- int days;
--
-- days = remaining / SECSPERDAY;
-- remaining %= SECSPERDAY;
-- len += snprintf(buf + len, BUFLEFT,
-- "%d day%s ", days, days == 1 ? "" : "s");
-- }
-- hh = remaining / SECSPERHOUR;
-- remaining %= SECSPERHOUR;
-- if (hh)
-- len += snprintf(buf + len, BUFLEFT, "%2d:", hh);
-- len += snprintf(buf + len, BUFLEFT,
-- "%02d:%02d ", remaining / 60, remaining % 60);
--
-- for (i = 1; bytespersec >= 1024000 && i < sizeof(prefixes); i++)
-- bytespersec >>= 10;
-- len += snprintf(buf + len, BUFLEFT, "(" LLF ".%02d %cB/s)",
-- (LLT)(bytespersec / 1024),
-- (int)((bytespersec % 1024) * 100 / 1024),
-- prefixes[i]);
--
-- if (siginfo && bytes > 0 && elapsed > 0.0 && filesize >= 0
-- && bytes + restart_point <= filesize) {
-- remaining = (int)((filesize - restart_point) /
-- (bytes / elapsed) - elapsed);
-- hh = remaining / SECSPERHOUR;
-- remaining %= SECSPERHOUR;
-- len += snprintf(buf + len, BUFLEFT, " ETA: ");
-- if (hh)
-- len += snprintf(buf + len, BUFLEFT, "%2d:", hh);
-- len += snprintf(buf + len, BUFLEFT, "%02d:%02d",
-- remaining / 60, remaining % 60);
-- timersub(&now, &lastupdate, &wait);
-- if (wait.tv_sec >= STALLTIME)
-- len += snprintf(buf + len, BUFLEFT, " (stalled)");
-- }
-- len += snprintf(buf + len, BUFLEFT, "\n");
-- (void)write(siginfo ? STDERR_FILENO : fileno(ttyout), buf, len);
--}
--
--/*
-- * SIG{INFO,QUIT} handler to print transfer stats if a transfer is in progress
-- */
--void
--psummary(int notused)
--{
-- int oerrno = errno;
--
-- if (bytes > 0) {
-- if (fromatty)
-- write(fileno(ttyout), "\n", 1);
-- ptransfer(1);
-- }
-- errno = oerrno;
--}
-
- /*
- * List words in stringlist, vertically arranged
-@@ -1158,20 +886,6 @@
-
-
- /*
-- * Set the SIGALRM interval timer for wait seconds, 0 to disable.
-- */
--void
--alarmtimer(int wait)
--{
-- struct itimerval itv;
--
-- itv.it_value.tv_sec = wait;
-- itv.it_value.tv_usec = 0;
-- itv.it_interval = itv.it_value;
-- setitimer(ITIMER_REAL, &itv, NULL);
--}
--
--/*
- * Setup or cleanup EditLine structures
- */
- #ifndef NO_EDITCOMPLETE
-@@ -1552,85 +1266,4 @@
- if (s == NULL)
- err(1, "Unable to allocate memory for string copy");
- return (s);
--}
--
--/*
-- * Install a POSIX signal handler, allowing the invoker to set whether
-- * the signal should be restartable or not
-- */
--sigfunc
--xsignal_restart(int sig, sigfunc func, int restartable)
--{
--#ifdef ultrix /* XXX: this is lame - how do we test sigvec vs. sigaction? */
-- struct sigvec vec, ovec;
--
-- vec.sv_handler = func;
-- sigemptyset(&vec.sv_mask);
-- vec.sv_flags = 0;
-- if (sigvec(sig, &vec, &ovec) < 0)
-- return (SIG_ERR);
-- return (ovec.sv_handler);
--#else /* ! ultrix */
-- struct sigaction act, oact;
-- act.sa_handler = func;
--
-- sigemptyset(&act.sa_mask);
--#if defined(SA_RESTART) /* 4.4BSD, Posix(?), SVR4 */
-- act.sa_flags = restartable ? SA_RESTART : 0;
--#elif defined(SA_INTERRUPT) /* SunOS 4.x */
-- act.sa_flags = restartable ? 0 : SA_INTERRUPT;
--#else
--#error "system must have SA_RESTART or SA_INTERRUPT"
--#endif
-- if (sigaction(sig, &act, &oact) < 0)
-- return (SIG_ERR);
-- return (oact.sa_handler);
--#endif /* ! ultrix */
--}
--
--/*
-- * Install a signal handler with the `restartable' flag set dependent upon
-- * which signal is being set. (This is a wrapper to xsignal_restart())
-- */
--sigfunc
--xsignal(int sig, sigfunc func)
--{
-- int restartable;
--
-- /*
-- * Some signals print output or change the state of the process.
-- * There should be restartable, so that reads and writes are
-- * not affected. Some signals should cause program flow to change;
-- * these signals should not be restartable, so that the system call
-- * will return with EINTR, and the program will go do something
-- * different. If the signal handler calls longjmp() or siglongjmp(),
-- * it doesn't matter if it's restartable.
-- */
--
-- switch(sig) {
--#ifdef SIGINFO
-- case SIGINFO:
--#endif
-- case SIGQUIT:
-- case SIGUSR1:
-- case SIGUSR2:
-- case SIGWINCH:
-- restartable = 1;
-- break;
--
-- case SIGALRM:
-- case SIGINT:
-- case SIGPIPE:
-- restartable = 0;
-- break;
--
-- default:
-- /*
-- * This is unpleasant, but I don't know what would be better.
-- * Right now, this "can't happen"
-- */
-- errx(1, "xsignal_restart called with signal %d", sig);
-- }
--
-- return(xsignal_restart(sig, func, restartable));
- }
-diff -Nru src/version.h /home/spock/ftp/version.h
---- src/version.h Sat Jun 15 05:40:37 2002
-+++ /home/spock/ftp/version.h Thu Jun 12 02:02:11 2003
-@@ -1,6 +1,6 @@
--/* $NetBSD: version.h,v 1.29 2002/06/05 10:20:51 lukem Exp $ */
-+/* $NetBSD: version.h,v 1.30 2003/02/28 09:54:20 lukem Exp $ */
- /*-
-- * Copyright (c) 1999-2002 The NetBSD Foundation, Inc.
-+ * Copyright (c) 1999-2003 The NetBSD Foundation, Inc.
- * All rights reserved.
- *
- * This code is derived from software contributed to The NetBSD Foundation
-@@ -40,5 +40,5 @@
- #endif
-
- #ifndef FTP_VERSION
--#define FTP_VERSION "20020605"
-+#define FTP_VERSION "20030228"
- #endif
OpenPOWER on IntegriCloud