New features of SCCS-5.1:

Please note that this SCCS version and all our earlier versions are based on
what Sun/AT&T called SCCS-5.0.

	This is why the final version of this release is called SCCS-5.1.

SCCS-5.1 is a mature and highly portable variant created from the original AT&T
SCCS sources as supplied by Sun Microsystems in December 2006 on my request.
SCCS-5.1 introduces a few enhancements to the SCCS history file format that are
all compatible with other SCCS implementations (SCCS from SCO implements a clash
with the 'x' history file flag and may cause related SCCS-5.1 files to be
extracted with the executabl bit on). I recommend to replace SCO SCCS by this
current SCCS as SCO SCCS is based on older source code versions that is known
to have other bugs.

There has been a SCCS history file format change when switching from SCCS-3.0
to SCCS-4.0 on February 22 1977. Since then, the file format was kept the same.

The upcoming SCCS-6.0 will introduce a new SCCS history file format that
intentionally causes historic SCCS implementations to abort (to prevent file
corruption) but that can be easily converted back into a SCCS-5.x compliant 
history file using a conversion program. This conversion will not cause a loss
of information as the new information will be encoded as special comment that
is accepted by all other SCCS implementations except for currently "CSSC". 

See the file TODO_V6 for more information.

Please join the discussion mainling list for the development of enhancements on:

	http://lists.berlios.de/mailman/listinfo/sccs-devel
	sccs-devel@lists.berlios.de


Overview of new features included with SCS-5.1:

-	All date related limits have been removed for 64 bit versions of the programs

-	32 bit programs work until year 2068 if the OS supports time and file time
	stamps to 2068.

-	SCCS performance has been enhanced to fix the performance problems that
	appeared pas 1986.

-	SCCS admin now supports fast mass entering of files.


New features included with SCS-5.1:

-	Several enhancements to the makefile system.

-	The makefile system now supports to compile using Sun Studio on Linux

-	-I. removed from the makefile system

-	The makefile system now better handles the LD_RUN_PATH property

-	Support for HAIKU was added

-	Support for AIX was added

-	Support for IRIX was added

-	Support for VMS was added

-	Floating point support for AIX now supports newer versions of AIX

-	libgetopt separated from libschily

-	libschily is now delivered complete

-	New library libfind to support sccs -R

-	sccs(1) now correctly calls readdir(3) to skip "." and ".."

-	sccs(1) now uses strsignal(3) where available

-	sccs(1) now supports a flag -R for recursive operation on most
	commands.

	Most subcommands now support the -R option (before the subcommand).

	sccs -R tell		Lists all currently edited files
	sccs -R get		Get's everytrhing from SCCS/s. files
	sccs -R diffs		shows the diffs for all edited files
	sccs -R diffs ` sccs -R tell -U ` shows the diffs for all files edited by you
	sccs -R delget		performs a "delta" and a "get" on all files
				currently edited
	sccs -R unedit		removed _all_ edited files be careful!
	sccs -R val		Lists all corrupted SCCS history files
	sccs -R val -T		Gives more information on all corrupted 
				SCCS history files, to help to fix them.

	There are more sub-commands that support -R

	For sub-commands that (currently) do not support recursion, the
	following message is printed:

	sccs -R admin
	sccs: Recursion not supported for "admin"

	*** Please test and report!

-	SCCS get and SCCS delta implement a (hidden) option -Cdir to
	support recursive operation with sccs(1).

-	SCCS get -k now works correctly even if someone previously called
	sccs admin -fy...

-	SCCS get(1) now has new keywords %d% %e% %g% %h% with
	4 digit year strings

	sccs get ... only expands the new four digit-year keywords
	%d% %e% %g% %h% if the 'x' flag has been set with sccs admin or
	if the related keyword has been exlicitely enabled via the 'y'
	flag.

	This has been done because the probabiltiy thar lower case characters
	from printf() format strings incorrectly match sccs keywords is too high.

-	SCCS get(1) now implements the BSD-4.x keyword %sccs.include.filename%
	use sccs admin -fy* for selectively enabling/disabling this feature
	The file "filename" is searched in the path from the environment
	SCCS_INCLUDEPATH

-	On platforms without strftime(3), sccs get now correctly creates
	2 digit strings for Month and Day according to the man page

-	SCCS prs(1) now has new keywords :d: :DY: with 4 digit year strings

-	sccs help now supports new help target "get_keywds" for a list with
	get(1) keywords

-	sccs help now includes help for the sccs(1) command

-	SCCS commands now all support -V/--version to verify the
	current version.

-	All commands now use vfork() if available in order to speed things
	up and in order to permit to support VMS.

-	SCCS now installs a "sccs" symlink to /opt/schily/bin
	of to $INS_BASE/bin in case INS_BASE differs from /opt/schily

-	The sccs-admin man page is now complete

-	Many small enhancements of all man pages

-	All SCCS commands now open files using O_BINARY on platforms where
	this is needed

-	SCCS admin now supports a new flag 'x' to enable Schily specific enhancements

-	All SCCS code is now 64 bit clean.

-	All SCCS programs now link to libintl for localized strings.

-	SCCS "val" now supports directory type command line arguments that
	result in scanning the related directory for s. files.

-	The val(1) cmmand now includes a -T (debug) option that allows to get 
	much better mesages when a SCCS history file is corrupted. Use:
	sccs val -T filename

-	The SCCS man pages have been enhanced in order to include the -V (retrieve
	program version) option.

-	The man page sccsfile.1 now mentiones the new 'x' flag for the enhanced SCCS
	keywords.

-	The man page for sccs.1 and val.1 now mention the -T option

-	Added missing directories to the SCCS package description file.

-	The included diff(1) command now supports wide chars

-	The included diff(1) command now supports the -N option

-	sccslog(1) now detects currupted history files

-	sccslog(1) now deals with very old SCCS history files (from 1980 and before)
	that may have no delta comment at all. This also helps to support history
	files that have been created with CSSC.

-	sccslog(1) now implements a (hidden) option -Cdir to
	support recursive operation with sccs(1).

-	sccs(1) now supports a new subcommand "ldiffs" to call the platform local
	diff(1) implementation instead of the diff implementation delivered with
	SCCS.

-	A compile variant of the SCCS system (use "smake COPTX=-DGMT_TIME")
	that results is a SCCS system that archives GMT based times inside
	the SCCS history files has been made more more robust and more correct.

	This compile variant has been introduced by Sun a while ago, but it
	was not cleanly portable and it did not work correctly when close to
	a DST switch time, as it abused the function localtime(), introduced
	math based on "timezone" and assumed that all DST variants add one
	hour to the winter time.

	The new code is based on a new function mkgmtime() that only needs
	to know the Gregorian calendar and based on correct usage of the POSIX
	time functions. 

	The change is a preparation for a future enhancement to SCCS that
	will make it time zone independent.

-	SCCS now checks whether the 'x' flag in the SCCS history files has the
	tag "SCHILY", as the SCO sccs implementation uses the x flag for setting
	the executable permission on files.

-	SCCS now warns if currently unsupported uppercase flags are present in
	a history file.

-	sccs help now includes help for all help codes

-	The sccsfile.4 man page now mentiones that year numbers may be 4 digit
	numbers also.

-	The sccslog(1) command now implements a new option -a to control the way
	sccslog collects deltas with the same delta comment in case they happen 
	within 24 hours. Not collecting such deltas makes it easier to understand
	the exact time line in changes for many files that belong to a common
	project.

	sccslog -a will still collect time stamps that differ less than a minute
	sccslog -aa will not collect time stamps if they differ more than a
	second

-	The diff(1) command delivered with SCCS now outputs the correct time stamp
	format for unified diffs (-u) as required by POSIX. This is needed in order
	to be able to automatically remove removed files by patch(1).

-	The SCCS commands now switch to 4 digit year numbers in SCCS files when
	the year 2038 starts. This makes it easier to write shell scripts that
	work on SCCS files.

	This is no problem as all relevant SCCS implementations have been
	enhanced to understand and to silently accept 4 digit year numbers in 1999.

	This is useful, as you need 64 bit SCCS binaries anyway in order to deal
	with later dates.

-	Since SCCS no longer uses the libc variable "timezone", a call to tzset()
	is no longer required. Since SCCS now switches to a 4 digit year format
	at the beginning of Y2038 local time, we need to call tzset() again, but
	we now do it in main() for each related tool.

-	The leap year functions from SCCS previously did not correctly know that
	February 2000 has 29 days. This was a result from switching to a correct
	Gregorian leap year algorithm but using year-1900 as a parameter to the
	mosize() function.

-	SCCS comb now writes a shell script that has $(INS_BASE)/ccs/bin in
	front of PATH.

-	SCCS sccsdiff now has $(INS_BASE)/ccs/bin in front of PATH.

-	The string parsing functions now stop when encountering a null byte at
	the end of a line and thus no longer cause core dumps with corrupted
	SCCS history files.

-	SCCS val -T now checks for defective statistics lines in the SCCS
	history file.

-	SCCS val now checks for missing usernames in delta table lines. Missing
	usernames have been a frequent problem with SCCS releases until
	around 1982. Recent SCCS versions abort before modifying files when the
	username appears to be empty.

-	SCCS val now checks for various missing fields in delta table lines.
	Missing fields may cause SCCS to incorrectly interpret the weave data
	part and result in modified checkouts.

-	SCCS val now can check for non-monotone time stamps in SCCS history
	files. SCCS creates time stamps but never really uses them except when
	a cut-off time has been specified. Call val -T to enable this check.
	The exit code will not change and only a warning will be emmited in case
	of a non-monotonic time.

-	The SCCS admin command now supports a new option -o that uses the
	original file time for the initial delta instead of using the current
	time.

-	The SCCS delta command now supports a new option -o that uses the
	original file time for the delta instead of using the current time.

-	The sccs command now avoids a GCC warning related to array of struct
	initialization.

-	The SCCS admin and delta man pages now mention -o

-	The SCCS val man page now includes a better description for the debug
	option -T.

-	The sccs.1 man page now contains an overview on the subcommands

-	The sccs.1 man page now mentions the new option -o for "admin" and
	"delta" and for related pseudo commands.

-	SCCS admin no longer silently removes flags from the range 'A'..'Z'
	from the SCCS history file. SCCS admin now aborts in case that there
	is a flag in the range 'A'..'Z'. This is not a problem, as there is
	no known SCCS implementation that currently uses uppercase flags.
	Extremely outdated BitKeeper versions from before 1998 did.... but they
	do no longer exist.

-	SCCS "admin -fy s.foo" now not only turns off keyword expansion but also
	turns off the "No iy keyword" warning for "admin", "delta" and "get".

-	SCCS "admin" and "delta" now correctly check for expanded keywords the
	same way as the enhanced "get" command does.

-	SCCS get now implements a new -o (original file date) option for
	orthogonality with the -o flag already introduced in "admin" and
	"delta".

-	The sccsfile.4 and sccs-admin.1 man pages now mention the optional
	parameter to the 'i' flag in the SCCS history file introduced by Sun.
	This parameter permits to require a specific SCCS keyword string
	to be expanded in order to prevent to deny the related "admin",
	"delta" or "get" command.
	The parameter to the 'i' flag was introduced by Sun but it is also
	available on HP-UX and AIX.

-	The sccs-get.1 man page now mentions the -L option introduced by Sun.

-	The diff(1) man page has been added

-	The SCCS prt command now correctly adds a newline when printing the
	"encoded" ('e') flag via prt -f ...

-	The SCCS prt command now prints labels for the 's', 'x' and 'y' flags
	with prt -f. The label for 'x' is "extensions", the labels for 's'
	and 'y' are the same labels as used by the "prs" program.

-	All SCCS programs are now able to deal with time stamps in the range
	2038 .. 2068 in history-files even with 32 bit programs that use a
	signed int for time_t. This however does not affect problems caused
	by the OS on such platforms.

-	The switch to 4-digit year numbers is done at January 1 2038 for the
	s-file and at January 1 2069 for all files that are mentioned in
	POSIX (e.g. the l-file and the p-file). The latter is done to follow
	the POSIX standard. The first is possible al POSIX does not define
	the file format for the s-file.

-	date_ab() now supports reading dates < 1969 in 4-digit mode from
	delta entries in SCCS history files.

-	date_ba() now always prints 2-digit year numbers even for e.g. 2120.

-	SCCS now supports to specify cutoff dates using 4-digit year numbers
	by specifying something like:

	yyyy/[mm[dd[hh[mm[ss]]]]]

-	The man pages sccs-get.1 and sccs-prs.1 now mention how to specify
	a 4-digit year with a cutoff date.

-	The SCCS admin program now permits to specify binary mode via -b
	and -n even in case that the new SCCS history file is not initialized
	with -i. A history file created with "admin -n s.foo" will still
	not include the 'e' flag at all. James Youngman promised to permit
	"admin -r2 -n s.foo" with CSSC in return for doing this change
	in SCCS....let's see when this happenes...

-	The SCCS commands now switches to 4 digit year numbers in SCCS files
	when the year is < 1969 or if the year is > 2068. This switch is
	done for all files, as this is outside the time range mentioned by
	POSIX.

-	The SCCS prs command now prints "extensions" for the 'x' flag

-	SCCS "sccs unedit" now also works on Linux. The problem was
	caused by using /tmp/sccsXXXXX instead of /tmp/sccsXXXXXX for mkstemp()

-	A test suite has been added in directory "sccs/tests".
	The test suite contains two parts:

	-	1188 tests taken from CSSC (James Youngman)
		The related tests are in "sccs/tests/cssctests"

	-	Additional tests from the SCCS project (Joerg Schilling).
		The related tests are in "sccs/tests/sccstests"

	The tests have recently been run with success on SunOS, AIX, CYGWIN,
	HP-UX, Linux, Mac OS X.

	Please run tests on the other OS and report.

	To run the test, just type:

		smake

	from the directory "sccs/tests" after you compiled SCCS at top level.
	For more information, have a look at: sccs/tests/README

	Check the output for problems that are flagged by the word FAIL or XFAIL.

	Please report any problems!

	Note that some operating systems do not support everything that is
	supported by SCCS and part of the test suite:

	-	HP-UX will e.g. fail on some tests with "Arg list too long".

	-	AIX will fail with all dates before 1970 January 1
		as the time functions in libc return -1 or such dates
		and this will lead to dates like: 69/12/31 23:59:59


-	All SCCS commands now remember upper case option letters in the
	extended had[] array.

-	A new help text for the new admin error message (ad35) was added.

-	SCCS admin and rmchg now use gpkt.p_file instead of the hacky
	(char *)&gpkt

-	The function mkgmtime() has been moved to libschily

-	The SCCS prs command now supports two new keywords:

	:G:	The base name of the file. This is "file" for a history
		file name "s.file"

	:D_:	yyyy-mm-dd for a delta

-	The diff command now includes the nanosecond value for the time
	stamp with "diff -u" in case it is run on an OS that supports
	sub-second file time stamps.

-	Several SCCS man pages have been updated to include a better and more
	complete description of the various files and their prefixes.

-	The sccs-delta.1 man page now tries to avoid a confusion with the 
	exit code when using -d

-	The bugs in the lock file mechanism introduced by Sun have been
	removed. SCCS is now again able to automatically recover from
	a sccs program killed by a signal during the creation of a lock
	file.

-	A bug (introduced by Sun while introducing automated binary file
	support around 1986) was fixed. SCCS no longer incorrectly asumes
	a binary file in case that a long line (longer than BUFSIZ) contains
	a ^A character at BUFSIZ offset.

-	SCCS no longer calls link() and thus is now portable to platforms
	that do not support hard links (such as BeOS).

-	The SCCS performance has been enhanced. This includes fixing
	some oddities that caused SCCS to call read(2)/write(2) with
	a bytecount of 1016 on Solaris.

	-	SCCS "admin -n -ifile" (to create a new SCCS history file)
		is now typically 4x faster than "Sun SCCS" admin.

	-	A typical edit chain "get -e" followed by "delta" is now
		typically 50% faster than "Sun SCCS".

	-	SCCS is now typically 4x-6x faster than GNU CSSC
		As CSSC slows down by ndeltas**2, this difference may become
		_much_ larger with a high number of deltas.

	Some data to compare with other systems:

	-	SCCS is now typically 3x faster than RCS

	-	SCCS is now typically aprox. 6x-12x faster than mercurial

	-	SCCS is now typically 8x-15x faster than CVS


-	Some changes to make GCC quiet with new code

-	New autoconf tests on whether printf suports %lld and %jd

-	bdiff and the SCCS basic command now try to avoid to link against printf
	from libschily in case that the lical libc supports printf("%lld") and
	printf("%jd")

-	SCCS delta is now able using a faster method to close open files before
	calling "diff". This is important on AIX that by default support 65536
	open files.

-	The Makefile System is now able to switch gmake-3.82 into a more POSIX 
	compliant mode to tell the shell to report problems back to gmake.

-	A new rule RULES/profiled.lnk allows to call:

	smake COPTX=-pg LDOPTX=-pg LINKMODE=profiled

	to create binaries that use gprof.

-	libmpw now has a new funktion zrealloc() that calls malloc()
	when the first realloc() parameter is NULL. This is needed on
	platforms that do not support realloc(NULL, size)

-	A work-around for the performance problems from the baroque Linux
	stdio implementaion was introduced.

-	A workaround for the performance problems in DST support from
	libc::mktime() on platforms (like AIX. Linux and SunOS-4.x) has been
	introduced. SCCS now converts the ASCII time notation from the history
	file into a GMT based time_t in case that get(1) does not need to 
	deal with time stamps.

-	For the same reason as before, delta(1) now also tries to avoid to do
	local time conversions.

	We are now able to confirm that claims that RCS is supposed to be faster
	than SCCS are no more than a myth - SCCS now is faster than RCS regardless
	on the OS platform in use.

	With these optimzations in effect, we are now again able to prove that
	SCCS is always faster than RCS or CVS regardless of what OS is being
	used. The most frequently used SCCS command is get(1) and get(1) is
	typically 3 times faster than RCS co(1) when retrieving the most recent
	version and up to 6 times faster than co(1) when retrieving older
	revisions.

	Note that all optimizations affect only parts of SCCS that have been 
	introduced past 1986. So we did just allow to see how fast SCCS has 
	been in 1980 already. 

-	SCCS admin no longer creates left over files with admin -n a.xx
	as a.xx is recognized as illegal name early.

-	SCCS admin no longer depends on a lucky side effect when creating
	SCCS history files that keep archived uuenoded version from binary
	files. This fixes a bug that most likely has been introduced in
	1987 while adding binary file support for SunOS-4.0.

-	SCCS admin now checks for the executable permissioons on the right
	file when using admin -ibar s.foo. Before it did check foo instead
	of bar.

-	SCCS admin now uses the same fast algorithm for detecting binary
	files as SCCS delta does. This speeds up mass enters of files.

-	The new fast algorithm that checks for binary files now correctly
	reports 
		"file '%s' contains illegal data..."
	instead of
		"No newline at end of file..."

	if there is binary data that is not folowed by a new line.

-	Reset the internal variable "Encoded" in SCCS admin in case a pure
	text file was found. This permits to enter pure text files after a
	binary file has been entered.

-	SCCS admin now supports a new option -N for efficient mass entering
	of files.

        The following option types are supported:

          -N        The file name parameters to the admin command
                    are not s.filename files but the names of the
                    g-files.  The s.filename names are  automati-
                    cally   derived  from  the  g-file  names  by
                    prepending s. to  the  last  path  name  com-
                    ponent.

          -Ns.      The file name parameters to the admin command
                    are  s.filename files.  The the g-files names
                    are automatically derived by removing s. from
                    the  beginning of last path name component of
                    the s.filename.

          -Ndir     The file name parameters to the admin command
                    are not s.filename files but the names of the
                    g-files.  The s.filename names are  put  into
                    directory  dir,  the  names are automatically
                    derived from the g-file names  by  prepending
                    dir/s.  to the last path name component.

          -Ndir/s.  The file name parameters to the admin command
                    are  s.filename  files in directory dir.  The
                    the g-files names are  automatically  derived
                    by  removing  dir/s.   from  the beginning of
                    last path name component of the s.filename.

        A typical value for dir is SCCS.

	To enter all files below usr/src, call:

		find usr/src -type f | admin -NSCCS -

	This tells admin to read file names of g-files from stdin
	and to automatically place related new s.files into corresponding
	SCCS directories. If the SCCS directories are missing, they are
	created.

	This new method is very fast. Entering the whole OpenSolaris base OS
	(500 MB in > 46000 files) takes 17 seconds on tmpfs on a 6 year old
	2.4 Ghz Opteron system. This is 2700 files per second and 30 MB/s.

-	SCCS get now implements compatibility support for the SCO 'x' flag
	in history files. There is no support to set this flag in history files
	and calling "admin -fx s.file" will set up the history file for
	supporting extended SCCS get keywords.

	The recommended method to set the executable bit in files is to
	start with an executable g-file or to set the executable bit in the
	related s. history file.

-	The sccs speudo command "branch" has been documented in the sccs.1
	man page

-	Several missing commend descriptions have been added to the SCCS help
	for cmds.

-	The Makefile system now links dynamic libraries on Mac OS X against
	libgcc_s.1 instead of libgcc.

-	libschily/fexec.c moved the workaround against the Mac OS X linker
	for "environ" upwards to cover the new code also.

-	SCCS vc man page added



SCCS now has been tested to compile and work on the following platforms:

-	SunOS-4.x

-	SunOS-5.x (Solaris 2.x, 7, 8, 9, 10, 11)

-	FreeBSD

-	HP-UX

-	Linux

-	Mac OS X

-	AIX

-	IRIX

-	VMS

-	Cygwin

The portability now reached a state that should allow SCCS to compile 
and run on other platforms too. SCCS compiles and has been verified
on all major platforms.