1994-09-23 01:45:37 +02:00
|
|
|
If you are a novice user, and don't know how to compile things, try
|
|
|
|
contacting your local guru first (get them to do it for you :-). Please
|
|
|
|
understand that I don't have time to walk newbies through the whole
|
|
|
|
installation procedure.
|
|
|
|
|
|
|
|
One of these months, I will write a Configure script that does all this for
|
|
|
|
you. I just don't have time to learn another language (dist-3.0) just to
|
|
|
|
write the script! Perhaps for 2.0.
|
|
|
|
|
|
|
|
1. READ this entire file. Part A, below, tells what to do if you want to
|
|
|
|
use NcFTP with a command-line editor. Part B tells you how to configure
|
|
|
|
the Makefile to compile the program for your system. Part C tells you
|
|
|
|
how to configure NcFTP's optional features. Part D tells you how to
|
|
|
|
contact me if you want to report a bug or submit new code to the
|
|
|
|
program.
|
|
|
|
|
|
|
|
2. EDIT the Makefile, making any necessary changes described in parts
|
|
|
|
A, B, or C. Don't forget to read the directions in the Makefile,
|
|
|
|
so you don't forget any needed libraries, etcetera.
|
|
|
|
|
|
|
|
3. You can also change the program's default behavior by editing defaults.h.
|
|
|
|
99% of the time you don't need to do this, so you can skip this step.
|
|
|
|
|
|
|
|
If you have problems, you can mail me, but please try your best to install
|
|
|
|
it without my help. I'm quite tired of responding to lazy SunOS users
|
|
|
|
because they didn't bother reading the directions so that they would have
|
|
|
|
known that they needed to use GCC.
|
|
|
|
|
|
|
|
I _do_ want to hear from you if you have comments or bug reports/fixes. I
|
|
|
|
would also like to hear from you if you had a system that wasn't covered
|
|
|
|
in sys.h, so I can add an entry for other users of your system.
|
|
|
|
|
|
|
|
The latest version of ncftp is available in the directory:
|
|
|
|
cse.unl.edu:/pub/mgleason
|
|
|
|
This machine is heavily used by students and faculty alike, so please
|
|
|
|
do not call during working hours (9AM - 5PM American Central time). In fact,
|
|
|
|
I have a cron entry that changes all the file permissions to public
|
|
|
|
unreadable during that period, so you won't be able to download anyway.
|
|
|
|
|
|
|
|
I am grateful to Shari Deiana and the University of Nebraska for making this
|
|
|
|
possible!
|
|
|
|
|
|
|
|
|
|
|
|
Part A. Installing with a command line editor:
|
|
|
|
----------------------------------------------
|
|
|
|
|
|
|
|
As of this release, GNU Readline and Chris Thewalt's Getline command-line
|
|
|
|
editing and history facilities are supported. Neither are included with the
|
|
|
|
ncftp sources. You can find Getline at:
|
|
|
|
ce.berkeley.edu:/pub/thewalt/getline.tar.Z (note: use 'ls', not 'dir!')
|
|
|
|
and Readline is in the directory:
|
|
|
|
prep.ai.mit.edu:/pub/gnu
|
|
|
|
|
|
|
|
To install Readline, you will need to know where libreadline.a and the
|
|
|
|
header <readline/readline.h> are. You will need to link libreadline.a and
|
|
|
|
libcurses.a (or libtermcap.a) with ncftp (see the Makefile). Good luck on
|
|
|
|
trying to compile it. It is not an easy thing to do! In the Makefile, you
|
|
|
|
will need to add -DREADLINE to PDEFS, add -lreadline -lcurses to LIBS, and
|
|
|
|
edit the HDRDIRS and LIBDIRS lines. This stuff is already in the Makefile,
|
|
|
|
so you can just uncomment it.
|
|
|
|
|
|
|
|
To install Getline, you need to know where libgetline.a and it's header
|
|
|
|
(getline.h) are. In the Makefile, you'll need to add -lgetline to LIBS and
|
|
|
|
edit the HDRDIRS and LIBDIRS lines. This stuff is already in the Makefile,
|
|
|
|
so you can just uncomment it.
|
|
|
|
|
|
|
|
DO NOT bug me if you can't figure out how to compile Getline or Readline.
|
|
|
|
Contact their respective authors instead. It is not essential that you use
|
|
|
|
them.
|
|
|
|
|
|
|
|
|
|
|
|
Part B. System Dependencies:
|
|
|
|
----------------------------
|
|
|
|
|
|
|
|
NcFTP may need work-arounds for some things due to the differences
|
|
|
|
in implementations of unix. The following systems are taken care
|
|
|
|
of automatically. For these systems, you should just be able to type
|
|
|
|
'make' (but proceed to part C):
|
|
|
|
|
|
|
|
Silicon Graphics IRIX
|
|
|
|
IBM's AIX
|
|
|
|
SINIX
|
|
|
|
DEC's Ultrix (well, might need to use -lcursesX instead of -lcurses)
|
|
|
|
NeXT
|
|
|
|
Pyramid OSx
|
|
|
|
Berkley Software Design, Inc.'s BSDi
|
|
|
|
|
|
|
|
Otherwise you will have to configure ncftp manually.
|
|
|
|
|
|
|
|
Important for "Yellow Pages" users: Don't forget to link the library
|
|
|
|
that includes the YP/NIS version of getpwuid(), etc. Otherwise the program
|
|
|
|
won't be able to expand ~username/path/name type pathnames, and maybe even
|
|
|
|
~/path/name types of pathnames. If you're wondering why the program isn't
|
|
|
|
opening your rc file, this could be the cause.
|
|
|
|
|
|
|
|
You will need to add these things to the SDEFS line in the Makefile
|
|
|
|
as applicable. As an example, if I say 'add -DFoobar to SDEFS,' find
|
|
|
|
the line in the Makefile that reads 'SDEFS=' (or 'SDEFS=-DFoo2') and
|
|
|
|
change it to 'SDEFS=-DFoobar' (or 'SDEFS=-DFoo2 -DFoobar). If your
|
|
|
|
system is listed below, follow the directions and then you ready to
|
|
|
|
go to part C, below.
|
|
|
|
|
|
|
|
Sun Microsystems' SunOS/Solaris: Use an ANSI compiler such as
|
|
|
|
gcc (set CC=gcc in the Makefile), or acc (set CC=acc).
|
|
|
|
The regular 'cc' is not an ANSI compiler. You could also run
|
|
|
|
something like 'ansi2knr' on the sources and hope it works.
|
|
|
|
You will probably need to link both the curses and termcap
|
|
|
|
libraries if you use -DCURSES (see below). If you're running
|
|
|
|
Solaris (SunOS 5.x or greater) add -DSolaris to SDEFS.
|
|
|
|
I also needed to add -lnsl -lsocket to LIBS.
|
|
|
|
|
|
|
|
Hewlett-Packard HP-UX: If you have 7.0, you'll need to find
|
|
|
|
a copy of <ftp.h> from somewhere (8.0 has it though). Then
|
|
|
|
set CFLAGS= -Aa. You may also need to use gcc if your
|
|
|
|
compiler is non-ANSI. Note that for HP-UX, the default
|
|
|
|
terminal escape codes are for HP terminals, so you should
|
|
|
|
probably link termcap/curses in so it will get the ANSI
|
|
|
|
sequences if you're on a vt100, etc., terminal connected
|
|
|
|
to your HP-UX machine.
|
|
|
|
|
|
|
|
Linux: For 'term' support, from what I can tell just add
|
|
|
|
the path of 'client.a' to LIBS, and add -DTERM_FTP to SDEFS,
|
|
|
|
to turn on the term specific ftp code. May need to link
|
|
|
|
-lcurses and -ltermcap.
|
|
|
|
|
|
|
|
SCO Unix: Add -DSCO324 or -DSCO322 (as appropriate) to SDEFS,
|
|
|
|
and -lsocket to LIBS.
|
|
|
|
|
|
|
|
SCO Xenix 2.3.4: Add -DSCOXNX to SDEFS;
|
|
|
|
Try adding -DLINGER if puts don't work.
|
|
|
|
Add "-lsocket -ldir" to LIBS.
|
|
|
|
|
|
|
|
Bull DPX/2: Add -DBULL to SDEFS, add -linet to LIBS, and
|
|
|
|
use gcc.
|
|
|
|
|
|
|
|
Sequent's DYNIX: Use gcc and add -DDYNIX (if necessary) to SDEFS.
|
|
|
|
You may also be short several string functions which you will
|
|
|
|
have to get elsewhere, and perhaps mktime and strftime.
|
|
|
|
You can get all that stuff from the BSD sources (like ftp.uu.net).
|
|
|
|
Please bug Sequent to update their libc library!
|
|
|
|
|
|
|
|
Sequent's Dynix/PTX: Add -DDYNIXPTX to SDEFS.
|
|
|
|
Add -lsocket -linet -lnsl -lseq to LIBS.
|
|
|
|
|
|
|
|
DEC OSF1/1.3: Use gcc, Add -DGETCWDSIZET to SDEFS. cc might work,
|
|
|
|
though. Try cc if gcc chokes.
|
|
|
|
|
|
|
|
If your system doesn't fit any of those, things will be trickier. Answer
|
|
|
|
all these questions and add to the SDEFS line. You may want to try
|
|
|
|
each option one at a time until everything works.
|
|
|
|
|
|
|
|
* Is your system closer to System V or BSD? Your SDEFS line should have
|
|
|
|
either -DBSD or -DSYSV. If you don't know, try leaving it blank first;
|
|
|
|
some compilers automatically define it for you.
|
|
|
|
|
|
|
|
* Add -DNO_CONST if your compiler chokes on the const directive. You
|
|
|
|
will know if you need to add this if the compiler spits out errors saying
|
|
|
|
it doesn't know what 'const' is.
|
|
|
|
|
|
|
|
* As I said above, you will need to link special libraries if your system
|
|
|
|
is running Yellow Pages.
|
|
|
|
|
|
|
|
* Add -DSYSSELECTH if you need <sys/select.h> included for definitions
|
|
|
|
of fd_set, etc.
|
|
|
|
|
|
|
|
* Add -DNO_UNISTDH if you don't have <unistd.h>. If the compiler complains
|
|
|
|
about not being able to open <unistd.h> add this.
|
|
|
|
|
|
|
|
* Add -DNO_STDLIBH if you don't have <stdlib.h>. If the compiler complains
|
|
|
|
about not being able to open <stdlib.h> add this.
|
|
|
|
|
|
|
|
* Add -DNO_UTIMEH if you don't have <utime.h>. If the compiler complains
|
|
|
|
about not being able to open <utime.h> add this.
|
|
|
|
|
|
|
|
* Add -DNO_MKTIME if you don't have the mktime() system call, and don't
|
|
|
|
feel like getting the source for it and compiling it in with the program.
|
|
|
|
If you define this, the program will not set the file modification times
|
|
|
|
to match the ones on the remote host (no big deal).
|
|
|
|
|
|
|
|
* Add -DGETPASS if you would rather use the standard getpass() system
|
|
|
|
call, instead of our version, Getpass(), which takes more than 8
|
|
|
|
characters. You may want to define this if you are having problems
|
|
|
|
compiling getpass.c.
|
|
|
|
|
|
|
|
If you haven't given up on our Getpass(), you can try adding -DSGTTYB
|
|
|
|
if you want to use a struct sgttyb instead of a struct termio. By default,
|
|
|
|
BSD systems define SGTTYB automatically. You can also try adding -DTERMIOS
|
|
|
|
to use a POSIX compliant struct termios instead. Don't pull your hair out
|
|
|
|
trying to get the Getpass code to compile; if it gives you problems just
|
|
|
|
define -DGETPASS and hope your system's getpass can handle passwords
|
|
|
|
longer than 8 characters.
|
|
|
|
|
|
|
|
* Add -DBAD_INETADDR if your inet_addr() function returns a struct in_addr
|
|
|
|
instead of a u_long, as it should (in DG/UX 5.4.1).
|
|
|
|
|
|
|
|
* Add -DBROKEN_MEMCPY if ncftp mysteriously dumps core when trying to open
|
|
|
|
a remote host. I'm told that this happens because of some problem in System
|
|
|
|
V's sockets don't like fprintf (and memcpy).
|
|
|
|
|
|
|
|
* Add -DPTRTYPE=char if your pre-ANSI compiler complains about the
|
|
|
|
way malloc() or free() are used, and in general does not like (void *)
|
|
|
|
as a generic pointer type.
|
|
|
|
|
|
|
|
* Add -DNO_STRFTIME if your system does not have strftime(). If you do,
|
|
|
|
we won't try to use it. This means, however, you cannot use ``%'' values
|
|
|
|
in your prompt.
|
|
|
|
|
|
|
|
* Add -DNO_RENAME if your system does not have rename() (or the one it
|
|
|
|
has is broken). If you do, we will use our own.
|
|
|
|
|
|
|
|
* Add -DNO_STRSTR if your system does not have strstr(). If you do, we
|
|
|
|
will use our own.
|
|
|
|
|
|
|
|
* Add -DLINGER if puts to the remote system are incomplete.
|
|
|
|
|
|
|
|
* Add -DNET_ERRNO_H if you need to include <net/errno.h> for definitions
|
|
|
|
of ECONNREFUSED, etcetera.
|
|
|
|
|
|
|
|
* (Optional) Add -DGETCWDSIZET if your system's getcwd() takes a size_t
|
|
|
|
as the second parameter instead of an int.
|
|
|
|
|
|
|
|
* (Optional) Add -DHERROR if you know you have the herror() system
|
|
|
|
call.
|
|
|
|
|
|
|
|
* (Optional) Add -DU_WAIT if you know your wait system call takes
|
|
|
|
a pointer to a 'union wait.' Defined automatically if you define
|
|
|
|
BSD.
|
|
|
|
|
|
|
|
* (Optional) Add -DHOSTNAME=\"machine.domain.nam\" if your system
|
|
|
|
doesn't generate it's own hostname. To check this, compile ncftp
|
|
|
|
then run it and type 'set.' Look at the variable anon-password.
|
|
|
|
If the hostname is wrong, or if it is in the form of 'yourlogin' or
|
|
|
|
'yourlogin@machine' instead of 'yourlogin@machine.xxx.yyy,'
|
|
|
|
re-compile it with HOSTNAME set to your machine's address, in the
|
|
|
|
form of 'machine.xxx.yyy.'
|
|
|
|
|
|
|
|
* (Optional) Add -DHAS_DOMAINNAME if you have the getdomainname()
|
|
|
|
function.
|
|
|
|
|
|
|
|
* (Optional) If you're having problems with your hostname not being
|
|
|
|
full (i.e you have 'yourlogin@machine') all is not lost. First of all,
|
|
|
|
define HAS_DOMAINNAME if you can. But sometimes getdomainname() doesn't
|
|
|
|
work -- instead of giving you the domain name, it returns an empty
|
|
|
|
string. So you can hardcode the domain name by defining DOMAIN_NAME to
|
|
|
|
be the domain (i.e. add -DDOMAIN_NAME=\"domain.nam\"). That way, if
|
|
|
|
getdomainname doesn't work, the program will have something to fall back
|
|
|
|
on. This problem is common on SunOS/Solaris.
|
|
|
|
|
|
|
|
* (Optional) Add -DSTRICT_PROTOS if your compiler wants function prototypes
|
|
|
|
for all functions, not just non-int-returning ones. This is really just
|
|
|
|
handy for debugging during development, so this is not recommended.
|
|
|
|
|
|
|
|
|
|
|
|
Part C. Program Options:
|
|
|
|
------------------------
|
|
|
|
|
|
|
|
Add these as applicable to the PDEFS line in the Makefile.
|
|
|
|
|
|
|
|
* -DGZCAT=\"path\": If you have the GNU gzip package installed on your system,
|
|
|
|
the program can try paging remote files compressed with gzip _and_
|
|
|
|
compress (instead of just compress). Add -DGZCAT=\"/full/path/to/zcat\"
|
|
|
|
with GZCAT set to the path name of GNU's zcat/gzcat.
|
|
|
|
|
|
|
|
* -DCURSES: Uses curses library to display boldface, underline, etc.
|
|
|
|
By default ncftp uses hard-coded ANSI escapes (^[[1m etc.) to
|
|
|
|
save the 100k or so the curses library adds. You will also need
|
|
|
|
to edit the LIBS line in the Makefile to add -lcurses. You may
|
|
|
|
need to add -ltermcap instead, or both -lcurses and -ltermcap.
|
|
|
|
If you choose to use the termcap library, you may want to also add
|
|
|
|
-DNO_CURSES_H so it does not try to include <curses.h>.
|
|
|
|
|
|
|
|
* -DSYSLOG: Define this to have ncftp log connections and transfers
|
|
|
|
to the syslog.
|
|
|
|
|
|
|
|
* -DNO_TIPS: Define if you want to cut a little fat at the expense of
|
|
|
|
novice users.
|
|
|
|
|
|
|
|
* -DGETLINE: If you want to use Chris Thewalt's getline input line editor
|
|
|
|
and history facility, add this (and see below).
|
|
|
|
|
|
|
|
* -DREADLINE: If you want to use GNU's readline input line editor and
|
|
|
|
history facility, add this (and see the Makefile). If you do this, you
|
|
|
|
also need to add -DCURSES (see above).
|
|
|
|
|
|
|
|
* -DSOCKS: NcFTP is now compatible with the Socks library by David Koblas,
|
|
|
|
at koblas@sgi.com. This lets you use NcFTP with a "firewall" gateway
|
1995-03-09 18:28:46 +01:00
|
|
|
for enhanced site security. You can get the latest version from...
|
|
|
|
ftp://ftp.netcom.com/pub/ko/koblas/
|
|
|
|
|
|
|
|
After you have compiled it, compile NcFTP
|
1994-09-23 01:45:37 +02:00
|
|
|
with -DSOCKS added to PDEFS, and the pathname of the Rconnect.o file
|
|
|
|
added to LIBS.
|
|
|
|
|
|
|
|
* -DTRY_ABOR: Define if you want to try the 'ABOR' command from ncftp;
|
|
|
|
The aborting code has had some problems, so by default the program
|
|
|
|
'aborts' by continuing to read input but not echoing output.
|
|
|
|
|
|
|
|
* -DDB_ERRS: Define this if you want my Perror() function to be more
|
|
|
|
verbose. You may want to do this if you are a programmer examining this
|
|
|
|
code, and want to know where in the source the Perror's are coming
|
|
|
|
from.
|
|
|
|
|
|
|
|
Part D. Sending me patches:
|
|
|
|
---------------------------
|
|
|
|
|
|
|
|
I apologize in advance for problems that my coding style may cause. The code
|
|
|
|
itself is formatted such that each indent-level is a tab (intended to be
|
|
|
|
equivalent to 4 spaces), and not spaces nor a combination of tabs and spaces.
|
|
|
|
The reason for this, besides being more logical to me, is that I use a
|
|
|
|
Macintosh editor to compose the code and I prefer it's indenting method.
|
|
|
|
Another problem in my coding-style is that I write C-code intended for ANSI
|
|
|
|
C compilers. This means that I will use the new-style function declarations
|
|
|
|
and function prototypes, like:
|
|
|
|
|
|
|
|
|
|
|
|
long Foobar(long, long, char *);
|
|
|
|
long Foobar(long t0, long t1, char *str)
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
as opposed to:
|
|
|
|
|
|
|
|
long Foobar();
|
|
|
|
long Foobar(t0, t1, str)
|
|
|
|
long t0, t1;
|
|
|
|
char *str;
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
Another thing may annoy you is that I always use function prototypes for any
|
|
|
|
function I call, including functions that return an int. This is a good
|
|
|
|
practice that I learned from the Macintosh programming world.
|
|
|
|
|
|
|
|
So if you send me patches, please conform to my coding style so that 'patch'
|
|
|
|
won't screw up, and also that some continuity will be preserved.
|
|
|
|
|
|
|
|
Before you make your patch, you should be sure that you are using the most
|
|
|
|
current version of the program. This is especially important if you are
|
|
|
|
reporting a bug; I may have already fixed it! See the above info to get it
|
|
|
|
via ftp. Major versions are always posted to comp.sources.misc. Bug reports
|
|
|
|
are posted to comp.sources.bugs. Patches that need to be posted ASAP are
|
|
|
|
posted to this group first, so it is advisable that you check this group.
|
|
|
|
|
|
|
|
If you make changes to the code, surround your code in #ifdef/#endif blocks.
|
|
|
|
Instead of doing things like #ifdef SunOS, use a name that describes the
|
|
|
|
bug fix or feature, and not your system type, like #ifdef NO_UNISTDH,
|
|
|
|
or #ifdef GETLINE. That way in case another system has the same problem,
|
|
|
|
it can be added to sys.h without cluttering up the source code. Then, add
|
|
|
|
the symbol you used to the end of cmds.c, in the 'CPP Hell' part of the
|
|
|
|
version() command. You'll see a list of CPP symbols, so just add yours in
|
|
|
|
a similar fashion, like #ifdef GETLINE/DStrs[nDStrs++] = "GETLINE";/#endif.
|
|
|
|
|
|
|
|
If you don't know how to make a patch, here's how to do it. Things are easy
|
|
|
|
if you've only changed one file. Then all you need to do pipe the output of
|
|
|
|
diff -c into a file and send it to me, i.e. "diff -c cmds.c cmds.c.hack >pch."
|
|
|
|
If you've hacked several files, the way I do it is to keep the originals in
|
|
|
|
one directory (you did make a copy of everything first didn't you?) and the
|
|
|
|
revisions in another directory. Then you change directory to the one with the
|
|
|
|
originals and do "diff -c . ../revisions > ../pch."
|
|
|
|
|
|
|
|
--mg (mgleason@cse.unl.edu)
|