4.4BSD/usr/src/contrib/nvi/nvi/PORT/README

#	@(#)README	8.1 (Berkeley) 6/9/93

This is the directory to use for building nvi/nex.  The Makefile and the
PORT/include/compat.h files should be all that needs to be modified to
make nvi/nex run on a new system.  The Makefile will build an executable
of nvi/nex using the source code in the main directories as well as the
following:

	The directory PORT/db is a copy of the 4.4BSD version of the
	dbopen(3) routines.  This is a complete database access methods
	package that is used as the interface to the underlying file by
	nex/nvi.

	The directory PORT/curses is a copy of the 4.4BSD version of the
	curses(3) routines.  This is an updated implementation of the
	traditional BSD curses package.  This is only if you don't have
	your own version of the curses library, or, if your version is
	too old to have scrolling support.  (Older versions of BSD curses
	didn't, and some System V versions don't do it right, and this
	makes nvi intolerably slow, since it ends up repainting the entire
	screen on every update.)

	The directory PORT/regex is a copy of the 4.4BSD version of the
	regular expression routines.  This is an implementation of the
	POSIX 1003.2 standard regular expression interfaces.  (The files
	and functions have similar names to historic RE packages, but they
	often aren't the same, so be careful.)

	The directory PORT/clib and PORT/include are various portability
	source modules and include files.  PORT/sys is a symlink to the
	PORT/include directory.

The directory PORT/nvi.recover is the source code for the nvi recovery
program.  See the man page in that directory for more information.  It's
much less complex than nvi, and should build fairly trivially.  The only
things that you're like to have to change is to add err.o, snprintf.o,
and strerror.o to the MISC line in the Makefile.

The curses code has NOT been ported to other systems, yet.  The dbopen
code is running on lots of systems and is pretty portable.  Please send
me back whatever fixes you have to make to get nvi and curses to run, and
I'll integrate them into the package so that you don't have to do it
twice!

Some knobs you may have to turn:

In the Makefile:
	If you have an old (4.3BSD) version of curses, uncomment the
	inclusion of the curses library in the Makefile.

	There are lots of subroutines that are POSIX 1003.2, or ANSI C,
	or 4.4BSD.  Once you get nvi to link, go through the list of
	undefined routines and add entries to the MISC line in the
	Makefile as necessary.

In include/compat.h:
	Before attempting to build nvi, you might want to skim through
	the compat.h file, and adjust it as necessary for your system.
	It's possible to use the #ifndef construct to figure out if a
	#ifdef has been set, but C provides no similar method to figure
	out if a typedef has been done.  All of the typedef's are grouped
	at the top of compat.h; your compile errors will tell you which
	ones you need.

Some other issues:
	You may see warning messages about illegal pointer combinations.
	Nvi currently uses u_char's to represent characters, and there
	are some places where it uses C library routines that expect
	char *'s.  This inconsistency will be resolved with nvi is made
	8-bit clean.  Additionally, systems prototype malloc, calloc
	and realloc in different places, and the missing prototypes
	will produce such warnings.

	One interesting bit of functionality that nvi needs is the ability
	to replace the underlying read/write routines in a stdio stream
	with its own.  The way this works is that when vi wants to use an
	ex routine, it sets it up so that the output of ex goes to an nvi
	function which knows how to display the stuff on the screen.  This
	way vi never has to leave curses (resulting in much nicer screen
	displays) and ex can simply use printf and friends without regard
	for what's really going on.  4.4BSD has a stdio function
	(fwopen(3)) which provides this functionality.  If you don't have
	fwopen or similar functionality, read the comment in vi/v_init.c
	and #define FWOPEN_NOT_AVAILABLE.  Note, you have to select one
	of two ways to do the write(2) system calls in the
	vi/v_init.c:v_init() function.

Comments for SunOS 4.1.2:
	The file vi/v_init.c needs to have FWOPEN_NOT_AVAILABLE
	#defined.

	The MISC line in the Makefile needs:
		glob.o Xaddnstr.o cfmakeraw.o err.o memmove.o
		realloc.o snprintf.o strerror.o strsep.o strtoul.o

	Some revisions also need memset.o, and the VSPRINTF_CHARSTAR
	hack in include/compat.h.

	The realloc(3) hack in the include/compat.h file is
	necessary.