New features of SCCS-5.02:

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


New features included with SCCS-5.02:

This is the first step towards the upcoming SCCS v6, as this version of SCCS 
starts to support features that cannot be implemented in a way that is
understood by earlier versions of SCCS.

As the SCCS v6 file format is not yet fully defined and we don't like to create
files by accident that are not understood by older versions, you need to set
the environment variable "SCCS_VERSION" to enable the new features. This is
a temporary hack to make the transition to SCCS v6 more smoothly. When SCCS v6
is ready, the environment variable will go away and there will be a program
to convert SCCS v4 history files to SCCS v6 history files and vice versa.
SCCS v6 features then will not be permitted to be added in case the SCCS history
file is in SCCS v4 form.


SCCS was changed to now have the same idea of what is a "text file" as diff(1).
There are no longer limitations on text files that are caused by SCCS.
If the environment variable "SCCS_VERSION" is set, SCCS will only create
uuencoded non-text archives in case a file contains one or more null byte.

-	SCCS now supports to archive files as text files even when they contain
	lines that start with ^A. This is a SCCS Version 6 feature.
	If you like to use this feature now, you need to set the environment
	variable "SCCS_VERSION".

	To implement support for text lines that start with ^A, SCCS now
	checks for "^A^A" at the beginning of a line in the history file and
	extracts "^A^Atext" it as "^Atext".

-	SCCS now supports to archive files as text files even when their last
	line does not end in a newline character. This is a SCCS Version 6
	feature. If you like to use this feature now, you need to set the
	environment variable "SCCS_VERSION".

	To implement support for text lines at the end of a file that do not end
	in a newline, SCCS now checks for "^AN" at the beginning of a line in
	the history file and extracts "^ANtext" it as "text" without a trailing
	newline. The text "^AN^Atext" is extracted as "^Atext" without a need
	for an additional quoting.

-	SCCS now supports to archive files as text files even when they do not
	end in a newline character. This is SCCS Version 6 feature.
	If you like to use this feature now, you need to set the environment
	variable "SCCS_VERSION".

This need to set "SCCS_VERSION" applies to admin(1), delta(1) and
val(1). The latter will flag a file as "corrupted" in case "SCCS_VERSION"
is not set and the file uses SCCS version 6 features. The first two will not
introduce SCCS v6 features unless "SCCS_VERSION" is set.

-	SCCS bdiff bow is compatible to diff(1) and outputs a newline even after
	files that do not end in a newline
	


NOTE: Several changes have been made in order to make code code compile with
the Microsoft C compiler. SCCS does however not yet fully compile with MSC
and the code that compiles may not yet work. Microsoft ignores nearly any
standard in OS and compiler environments, this makes it hard to support code
on that platform.

SCCS compiles and works fine with Cygwin. The test suite is passed fine with
SCCS cygwin binaries.

-	A new environment variable MKLINKS_COPY allows to tell all
	MKLINS scripts to generate file copies rather than symlinks.
	Call:
		MKLINKS_COPY=true
		export MKLINKS_COPY
	to enable this feature

-	Run an additional test -h command in MKLNKS to verify whether mingw
	supports symlinks

-	MKLINKS now creates copies instead of symlink when we use MSC
	as MSC does not support to read symlinks files


-	Changed the default Microsoft compiler version to VC9

-	Fixed the vc9-setup files to make VC9 work.

-	Newer Cygwin "tail" versions do no longer support UNIX syntax.
	change tail +2 to tail -n +2 in RULES/cc-mcs.rul to allow to use
	the Microsoft compiler again

-	Let include/schily/archdefs.h define the standard processor #defines
	when compiling with MSC.

-	New include file include/schily/windows.h works around the oddities
	from the MSC include file windows.h

-	include/schily/stdio.h now defines popen()/pclose() to _popen()/_pclose()
	if on WIN-DOS

-	include/schily/limits.h now defines PIPE_BUF

-	include/schily/utsname.h now defines struct utsname for our MSC uname()
	emulation.

-	New autoconf tests for memcmp() and memccpy()

-	New autoconf tests for spawn*(), cwait() process.h

-	New autoconf tests for pipe() / _pipe()

-	include/schily/unistd.h now defines pipe() via _pipe() on WIN-DOS

-	Many rewritten autoconf tests in order to work around the oddities
	from MSC (cl).

-	New functions zerobytes() and cmpmbytes() added to libschily.

-	libschily/gettimeofday.c now supports MinGW

-	New functions zerobytes() and cmpmbytes() added to libschily.

-	Fixed libschily/gettimeofday.c to compile with MSC

-	Fixed libschily/sleep.c to compile with MSC

-	Fixed libschily/usleep.c to be empty with MSC as sleep.c includes
	a working usleep()

-	libschily/gethostname.c enhanced to support Win-DOS with cl.exe

-	libschily/uname.c New function to support Win-DOS with cl.exe

-	libschily/dirent.c New functions: opendir()/closedir()/readdir()
				to support Win-DOS with cl.exe

-	libschily/kill.c New function to support Win-DOS with cl.exe

-	libfind/find.c disables -exec in case there is no fork().
	This is in order to support MINGW

-	New autoconf tests for:
	getpwnam getpwent getpwuid setpwent endpwent
	getgrnam getgrent getgrgid setgrent endgrent
	This is in order to support MINGW

-	libschily now supports fallback implementations for:
	getpwnam getpwent getpwuid setpwent endpwent
	getgrnam getgrent getgrgid setgrent endgrent
	This is in order to support MINGW

-	libschily now supports fallback implementations for:
	getuid geteuid setuid seteuid
	getgid getegid setgid setegid
	This is in order to support MINGW

-	SCCS delta no longer exists in a separate version under /usr/xpg4/bin
	as the POSIX definition for delta(1) has been fixed to match the actual
	behavior of the vanilla delta(1) program.

-	The SCCS delta man page has been updated to reflect the removal of
	/usr/xpg4/bin/delta

-	The SVR4 package description file has been updated to reflect the
	removal of /usr/xpg4/bin/delta

-	The SCCS get man page has been updated to mention that -x works
	not only with /usr/xpg4/bin/get

-	The SCCS admin man page metter mentions the POSIX aspects for the
	'i' and 'l' flags in the SCCS history files.

-	The SCCS admin page and the sccsfile man page now have a better 
	description for the 'j' flag (Joint Editing).

-	The sccsfile man page now has a complete description on how the
	checksum is computed

-	The sccs man page now mentions that only the statisctics numbers
	in the SCCS history files are limted in range from 00000 to 99999.
	Other numbers are not limited to allow an arbitrary number of
	deltas.
	
-	A variable "dirname" in admin.c has renamed to "dir_name" to avoid
	a problem with the function dirname() and K&R compilers.

-	Struct "apply" was reduced in size from 3xint to 3xchar. This is 
	important with hundreds of thousands of deltas in order to limit
	the SCCS memory footprint.

-	A bug in fmalloc.c (introduced by Sun in the past 20 years) has been
	fixed: fmalloc() no longer mallocs sizeof (int) (typically 4) times
	more memory than needed. This is important with hundreds of thousands
	of deltas in order to limit the SCCS memory footprint.

-	Copying SCCS history now gives better performance as it no longer
	calls a path name manipulation function for each written line in
	a history file.

-	strchr() is used instead of the local function any() to speed up
	things.

-	The zero() function was speed up with code from fillbytes.c to
	speed up clearing large chunks of data.

-	The diff program now reads bigger chunks of data and uses memcmp()
	to speed up operation.

All speed ups indroduced in the past 6 months cause that this version
of SCCS only consumes aprox. 1/3 of the CPU time from Sun SCCS.


-	Android is not POSIX (by not defining various functions as functions 
	in libc as required by POSIX) because it tries to define many 
	functions that are part of the standard as inline macros in
	include files only. This breaks autoconf, so we needed to rewrite
	some tests (e.g for getpagesize, tcgetpgrp, tcsetpgrp)

-	The Schily autoconf system has been enhanced to support cross
	compilation. Schily autoconf is based on GNU autoconf and
	GNU autoconf does not support cross compilation because it needs
	to run scripts on the target system for some of the tests.

	The "configure" script that is delivered with the Schily makefile
	system runs 718 tests and 68 of them need to be run on the target
	system.

	The Schily autoconf system now supports a method to run these 65
	tests natively on a target system. You either need a machine with
	remote login features or you need an emulator with a method to
	copy files into the emulated system and to run binaries on the
	emulated system as e.g. the Android emulator.

	We currently deliver three scripts for "remote" execution of
	programs on the target system:

	runrmt_ssh		runs the commands remove via ssh
	runrmt_rsh		runs the commands remove via rsh
	runrmt_android		runs the commands remove via the debug bridge

	If you need to remotely run programs on a system that is not
	supported by one of there three scripts, you need to modify one
	of them to match your needs.

	To enable Cross Compilation use the following environment variables:

	CONFIG_RMTCALL=		Set up to point to a script that does
				the remote execution, e.g.:

				CONFIG_RMTCALL=`pwd`/conf/runrmt_ssh

	CONFIG_RMTHOST=		Set up to point to your remote host, e.g.:

				CONFIG_RMTHOST=hostname 
				or
				CONFIG_RMTHOST=user@hostname

				use a dummy if you like to use something
				like to the Android emulator.

	CONFIG_RMTDEBUG=	Set to something non-null in order to 
				let the remote execution script mark
				remote comands. This will result in
				configure messages like:

				checking bits in minor device number... REMOTE 8

	Note that smake includes automake features that automatically
	retrieve system ID information. For this reason, you need to overwrite 
	related macros from the command line if you like to do a
	cross compilation.

	Related make macros:

	K_ARCH=			# (sun4v) Kernel ARCH filled from uname -m / arch -k
	M_ARCH=			# (sun4)  Machine filled from arch
	P_ARCH=			# (sparc) CPU ARCH filled from uname -p / mach
	OSNAME=			# sunos, linux, ....
	OSREL=			# 5.11
	OSVERSION=		# snv_130
	CCOM=			# generic compiler name (e.g. "gcc")
	CC_COM=			# compiler to call (name + basic args)

	ARCH=			overwrites M_ARCH and P_ARCH

	It is usually suffucient to set ARCH and OSNAME.

	In order to use a cross compiler environment instead of a native compiler,
	set the make macro CC_COM to something different than "cc".

	If you are on Linux and like to compile for Android, do the following:

	1) 	set up CC acording to the instructions from the cross compiler
		tool chain

	2)	set environment variables CONFIG_RMTCALL / CONFIG_RMTHOST, e.g.:
		setenv CONFIG_RMTCALL `pwd`/conf/runrmt_android
		setenv CONFIG_RMTHOST NONE

	3)	call smake:

		smake ARCH=armv5 OSNAME=linux CCOM=gcc "CC_COM=$CC"
	

-	Several programs no longer test for HAVE_DEV_* but for HAVE__DEV_*
	as we did switch from hand written tests for /dev/tty, /dev/null 
	and similar to  AC_CHECK_FILES(/dev/tty /dev/null /dev/zero)

-	The setup for the PATHs needed by Visual Studio 9 has been
	corrected.

-	autoconf has been modified to avoid optimizing away code that 
	is intended for testing. This help to work against a problem
	with detecting mbrtowc() on MinGW

-	autoconf now tests for mbtowc() and wctomb()

-	RULES/i*86-mingw32_nt-gcc.rul now link against -lmingw32 instead
	of -lmgw32.

-	include/schily/stat.h now defines S_IREAD/S_IWRITE/S_IEXEC
	These macros are available on typical UNIX systems but not
	on Android. The definition comes from UNIX V7 and is not in
	POSIX. Needed by SCCS and the Bourne Shell

-	include/schily/wait.h now defines WIFCONTINUED() if needed

-	include/schily/wchar.h now defines mbtowc() to mbrtowc() if
	needed (e.g. on Android)

-	include/schily/ccomdefs.h now correctly knows about the GCC
	release that introduced __attribute__ (used).

-	Fixed a cplusplus bug in schily/stdlib.h

-	Fixed wrong bracketing for C++ in include/schily/utypes.h

-	Added a workaround for MSC to include/schily/utypes.h
	MSC believes that a 32 bit int and a 32 bit long are incompatible
	and cannot even be casted, so we need to make uint32_t a n unsigned long

-	SCCS help2 now ignores LC_MESSAGES with MSC as MS does not support
	localized message strings.


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.