The Perforce RCS implementation
-------------------------------

An overview of the implementation is in rcstest.cc.

This README discusses the ifdefs and system dependencies herein.


ifdefs
------

	USE_CRLF - used to control whether LF or CRLF separate lines
		in RCS files.  Normally set by Jamrules for NT.

	USE_MMAP - if set, uses the mmap() system call for read access
		to RCS files.  Otherwise, uses stdio.  By an large, you
		want this set if mmap is available.  Normally set by
		Jamrules.

	HAVE_FSYNC - if set, calls fsync() before closing the RCS file
		(after writing it), so that it is sure to hit the disk.
		Set by stdhdrs.h based on what OS you're on.

	OS_NT - used to control some NT specific filesystem operations,
		like the different call to access() and setting O_NOINHERIT
		to keep file handles private across subprocess creation.
		(RCS formerly used an external diff but now does everything
		inprocess, and so O_NOINHERIT is unneeded. )

	OS_BEOS - BeOS specific interface changes.

	OS_MAC - Macintosh MPW specific interface changes.  

External Code Dependencies.

	support/error.h - for the Error class, a layered error reporting
		mechanism.  It's used throughout, but is the only component
		of 'support' that is needed for RCS.

	sys/stdhdrs.h - included standard system headers needed by everything,
		plus special headers as controlled by #define NEED_XXX flags.
		The headers used are:

		    NEED_ACCESS
		    NEED_FCNTL
		    NEED_FILE
		    NEED_FSYNC
		    NEED_MKDIR
		    NEED_MMAP
		    NEED_OPENDIR
		    NEED_TIME
		    NEED_TYPES

		See stdhdrs.h for what these control.