New features with AN-2021-07-29:

This is the first localization step for the schily source consolidation. Many
programs now (hopefully) call gettext() for all strings that need localization.

-	The next step will include dgettext() calls for the libraries and the
	missing programs

-	The following step will include the extracted strings

-	The last step will include German translations and install support
	for the resulting binary message object files.

----------> Please test and report compilation problems! <---------

***** NOTE: As mentioned since 2004, frontends to the tools should *****
*****		call all programs in the "C" locale		   *****
*****		by e.g. calling: LC_ALL=C cdrecord ....		   *****
*****		unless these frontends support localized strings   *****
*****		used by the cdrtools with NLS support.		   *****

		*** WARNING        ***
		*** Need new smake ***

	*** Due to the fact that schily-tools 2014-04-03 introduced to use new macro
	*** expansions and a related bug fix in smake, you need a newer smake
	*** to compile this source. If your smake is too old and aborts, ensure to
	*** use the recent smake by calling:

	cd ./psmake
	./MAKE-all
	cd ..
	psmake/smake
	psmake/smake install

	The new smake version mentioned above is smake-1.2.4
	The recent smake version is smake-1.5

	*** Due to the fact that schily-tools 2018-01-26 introduced
	*** optimizations for the Schily version of SunPro Make, you
	*** need at least the dmake version from 2018/01/11 with support
	*** for the "export" directive to compile with this makefile system.

For the beginning of the list of new features of the software in this tarball, 
please scroll down to "NEW FEATURES"

	WARNING: the new version of the isoinfo program makes use of the 
		*at() series of functions that have been introduced by Sun
		in August 2001 and added to POSIX.1-2008. For older platforms,
		libschily now includes emulations for these functions but
		these emulations have not yet been tested thoroughly.
		Please report problems!

	BUG WARNING: Please never report bugs only to Linux distributions as
		they usually do not forward these bug reports upstream and
		the Linux distributions typically do not let skilled people
		check the bugs. We did not hear about a FIFO problem in star
		for a long time. Then a problem on Linux occurred once
		every 6000-10000 tries but it did not happen on Solaris after
		even 10 million tries, so it was not known besides Linux and
		not reported to the project.

	BUG WARNING: *** GNU make *** starts too early with parallel
		execution (when reading Makefiles and evaluating rules for
		"include" statements already). Since GNU make does not
		support a concept for a correct ordering of such actions,
		you need to be prepared to see GNU make fail in parallel
		mode. If you try to compile a maiden unpacked schilytools
		tarball in parallel mode using GNU make, this will definitely
		fail as a result of the GNU make timestamp caching bug. See
		below for more information.

		If you are interested in reliable parallel execution,
		it is recommended to use the included "dmake" program with
		a command line like:

			dmake -j10 -r -f SMakefile

		from the top level directory. Note that if you are on Linux,
		you need the dmake version from schilytools 2021-06-07 or
		newer, since that version introduced a solution for a kernel
		caused performance problem with filesystems on Linux. Older
		dmake versions will not be faster in parallel mode on Linux.

		The "dmake" program included in the schilytools tarball is the
		current version of the "new" SunOS make program that has been
		introduced in January 1986 by Sun Microsystems. It also
		introduced new features like the "include" directive that
		3 years later have been copied by gmake in a partially buggy
		way. As gmake does not fix showstopper bugs, it cannot be
		supported. Current showstoppers are: 1) gmake executes
		"include" related rules in the inverse order, causing rules
		to fail if they depend on files created by an "earlier" action
		2) gmake caches an outdated state of the directory and aborts
		with a wrong complain about allegedly missing files that in
		fact exist already, because they just have been remade.

NEW FEATURES:

	This is a new version with an exceptional amount of changes as a 
	result of porting attempts to z/OS that uses EBCDIC in a POSIX 
	(SUSv2) environment.

	No other updated version of the schilytools did ever introduce so 
	many changes at the same time, so please report if you see any new
	problems on your preferred platform. If that is Solaris, Linux or
	FreeBSD, there should be no such problems, since schilytools have
	been compiled without problems on these platforms already.
	

-	z/OS (OS/390) Porting has begun...
	z/OS Porting status:

	-	Compilation on the z/OS emulator that claims a machine type
		of "1090" basically works.

	-	More than half of the binaries from /opt/schily/bin compile
		already.

	-	All of the remaining compilation problems seem to be related 
		to the EBCDIC encoding, that prevents editors and history 
		editors from working or compiling. The compile problems may 
		typically be caused by duplicate case labels as a result from
		different character encodings in special for the EBCDIC 
		control characters.

	-	SCCS expects history files with ASCII content (at least with
		respect to meta data). This is why SCCS for now does not 
		compile. SCCS in special does not compile because there is an
		array index overflow since the character range in EBCDIC 
		includes holes.

	-	star and strar also depend on ASCII meta data that would need
		new code to translate the EBCDIC code from z/OS to ASCII and
		vice versa before creating archive headers or interpreting
		archive headers that have been read.

	-	SunPro Make compiles on z/OS, but it dumps core if it is told
		to read the Makefiles from the schily makefile system.

-	configure: config.sub now supports FreeBSD running on riscv CPUs

	Thanks to Robert Clausecker for reporting.

-	configure: The bits in minor_t are now correctly computed even in case
	that dev_t has more than 32 bits and the macro minor() spreads bits 
	in a double non-contiguous way from the incoming dev_t value.

	Previously, this incorrectly computed 40 Minor bits for FreeBSD and 
	44 Minor bits on a 64 bit Linux, even though there are only 32 bits 
	in the minor device number on both systems.

	Thanks to Robert Clausecker for reporting.

-	configure: aclocal.m4 had a typo and used #ifdef TIME_WITH_SYS_TIME_H
	instead of the correct #ifdef TIME_WITH_SYS_TIME

	On Linux, this resulted to miss the "extern timezone" definition in the
	related autoconf test. On z/OS, this prevented compilation.

	Thanks to a report from Matthew R. Wilson

-	configure: many changes to avoid C-compiler warnings from the test 
	programs.

	-	"main()" programs now are called "int main()" to have a 
		correct return type.

	-	printf("%d", sizeof... is now printf("%d", (int)sizeof...
		to avoid incorrect format warnings.

	-	non-void functions of type "int" now have a return statement.

	-	If "uname -s" return "OS/390", LDFLAGS are now issued before
		source file names on the command line. This is because the
		z/OS compiler otherwise would abort.

	-	before running configure, libs/<arch-dir>/ is created as
		the z/OS compiler does not like missing directories from
		linker flags.

	These changes have been initiated by the warnings from the z/OS 
	compiler.

-	configure: The autoconf tests for the withdrawn POSIX draft ACL
	implementation did believe that z/OS is implementing the withdrawn
	POSIX draft ACL, because interface functions with the same name as
	that withdrawn POSIX draft ACL interface are present. Since the data
	structures are different, we currently cannot support that and we 
	for now do not #define HAVE_POSI_ACL on z/OS.

	Thanks to a report from Matthew R. Wilson

-	configure: Added a test for te availability pf pw_passwd in struct 
	passwd. The struct member pw_passwd is not required to exist by POSIX
	and not present on z/OS.

	Thanks to a report from Matthew R. Wilson

-	configure: Added a new test for sys/dbx_plugin.h on z/OS.
	This file contains a #define for RLIM_NLIMITS on z/OS.
	We later discovered that we cannot use this file but we keep the
	test...

-	config.guess and config.sub now support the IBM z/OS emulator.

	We currently however only accept z/OS running on the emulator.
	For being able to support real hardware, we would need to get
	hardware names for the real hardware. The emulator returns
	"1090" for uname -m.

	Thanks to a report from Matthew R. Wilson

-	RULES/MKLINKS: Support for FreeBSD on riscv CPUs was added

	Thanks to Robert Clausecker for reporting.

-	RULES/rules.cmd and RULES/rules.inc: Now specify linker options from
	$(LDFLAGS) before $(POFILES) in the command line because the compiler
	from z/OS does not like the usual order.

	WARNING: This change has currently only been tested with Solaris, 
	Linux and FreeBSD, so please test whether you have problems on your
	platform.

	*** If you find a platform where this does not work, please report! ***

	Thanks to a report from Matthew R. Wilson

-	RULES/os-os_390.def, RULES/os-os_390.id: New files to support z/OS hve been
	added.

	Thanks to a report from Matthew R. Wilson

-	RULES/1090-os_390-cc.rul: New platform configuration z/OS, 1st guess

	This #defines -D_XOPEN_SOURCE=600 -DOS390 

	We did try to -D__SUSV3_WITHDRAWN to get a valloc() prototype but this
	turned out to be wrong. We would need to
	-D__UU -D__TARGET_LIB__=0x20000000 wich does not look to be a good 
	idea since __TARGET_LIB__ is predefined by the compiler and not 
	permitted to be changed by the z/OS compiler from IBM.

-	RULES/cc-ibm_os_390.rul: New compiler configuration z/OS, 1st guess

	The first attempt to support C++ has been made and C++ compilation
	is no longer supressed.

	Later we added C++ support and the C++ compiler from z/OS needs
	the option -qlonglong

	Later we also added -qlanglvl=extended for C++ to make alloca()
	usable.

-	DEFAULTS/Defaults.os_390: New configuration for z/OS, 1st guess

-	DEFAULTS_ENG/Defaults.os_390: New configuration z/OS, 1st guess

-	TEMPLATES/temp-clang.rul, TEMPLATES/temp-gcc.rul, TEMPLATES/temp-xcc.rul:
	Now use OSDEFS += instead of OSDEFS= since OSDEFS may be already 
	predefined with definitions that need to be kept at that time.

-	RULES/rules.cnf and RULES/local.cnf started to clear LDFLAGS instead of
	passing LDFLAGS="$(LDOPTS)" to configure. This was deemed to be needed 
	because the c-compiler from z/OS does not like -L /dir with a 
	non-existent directory.

	IMPORTANT: This has then been reverted again after it turned out that 
	this would cause compilation to fail on FreeBSD in case that 
	-L/usr/local/lib is needed for libraries like e.g. -liconv

	Later, we changed

	LDFLAGS="$(LDOPTS)" -> LDFLAGS="$(LDOPTS:%$(OLIBSDIR)=%../../$(OLIBSDIRR))"

	since LDFLAGS="$(LDOPTS)" was relative to the directory where the
	Makefile is located but the configure script runs in "incs/<arch-dir>/"
	which differs from the working directory of the current "make" 
	instance.

	*** The last change was something that does not only affect z/OS but
	*** all supported platforms.

	Thanks to a report from Matthew R. Wilson

-	RULES/rules.cnf now creates $(OLIBSDIR) before calling "configure".
	See compiler notes above...

	This was needed because the c-compiler from z/OS does not like -L/dir
	with a non-existent directory while doing the actual compilation
	before $(OLIBSDIR) would have been created from a regular rule.

	Thanks to a report from Matthew R. Wilson

-	conf/install-sh: We try to work around the problem that user "root" on
	z/OS is called "OMVSKERN" instead of "root".

	Thanks to a report from Matthew R. Wilson

-	incs/<arch-dir>/xconfig.h: now contains either a #define HAVE_EBCDIC
	or a #define HAVE_ASCII, based on the charset used by the compiler.

	This #define is not yet used, but when we later add support for EBCDIC
	to the sources that currently do not compile, it will be used.

-	include/schily/libport.h: changed __times to __times__ to avoid problems
	on IBM z/OS.

	Thanks to a report from Matthew R. Wilson

-	include/schily/signal.h: We now provide NSIG, that is missing on IBM z/OS.
	The NSIG, we provide is based on the numerical value of SIGDUMP that 
	is the highest signal number from the IBM z/OS documentation.

	Thanks to a report from Matthew R. Wilson

-	include/schily/utypes.h: Now uses the AIX specific typedef for
	packed bitfields for z/OS as well. This is based on a test "#ifdef OS390"
	or based on the default predefined #define __MVS__ from the compiler.

	Thanks to a report from Matthew R. Wilson

-	include/schily/ioctl.h: A workaround for an inconsistency on z/OS
	related to u_int was introduced. sys/types.h from z/OS defines u_int
	only when _ALL_SOURCE is #defined, but sys/ioctl.h defines it
	unconditionally.

	Thanks to a report from Matthew R. Wilson

-	include/schily/device.h: Added a workaround for the missing major()
	minor() makedev() macros on z/OS.

	Thanks to a report from Matthew R. Wilson

-	include/schily/stdlib.h: Added a valloc() prototype for z/OS.
	This prototype is missing by default even though the function is 
	present in libc.

	Thanks to a report from Matthew R. Wilson

-	include/schily/resource.h: Did start to #include sys/dbx_plugin.h
	on Z/OS to get a definition for RLIM_NLIMITS.

	This turned out to be not usable since it causes compilation to abort
	with

		Identifier suseconds_t has already been defined

	As a result, we now #define RLIM_NLIMITS to be either
	(RLIMIT_MEMLIMIT+1) or 8 by our own.

	Thanks to a report from Matthew R. Wilson

-	include/schily/maxpath.h: now also defines MAXPATHLEN, since this is
	needed for programs like SuPro Make.

	Thanks to a report from Matthew R. Wilson

-	libedc: changed open(..., 0) -> open(..., O_RDONLY) for z/OS

	!!! Note that O_RDONLY is != 0 on z/OS !!!

	Thanks to a report from Matthew R. Wilson

-	libstreamar: changed open(..., 0) -> open(..., O_RDONLY) for z/OS

	Thanks to a report from Matthew R. Wilson

-	libstreamar: z/OS does not #define PATH_MAX, so we #define it to
	be 1024 by default.

	Thanks to a report from Matthew R. Wilson

-	libxtermcap: changed open(..., 0) -> open(..., O_RDONLY) for z/OS

	Thanks to a report from Matthew R. Wilson

-	smake: changed open(..., 0) -> open(..., O_RDONLY) for z/OS

	Thanks to a report from Matthew R. Wilson

-	smake: z/OS is using EBCDIC and for this reason, smake cannot continue
	to #define NWARN 0x4000, as this bit would be in conflict with bits
	needed by the "short int" computed from characters used by macro
	assignment operator characters. e.g. "'=' | '+' << 8"

	smake now uses #define NWARN 0x8000 as this bit is only in use by
	EBCDIC digits that do not appear in the 16 bit values used as macro
	assignment operators inside smake.

	Thanks to a report from Matthew R. Wilson

-	smake: A .POSIX: line in the Makefile is now correctly detected
	immediately and switches immediately into POSIX mode. This is
	important in case that the parser needs to behave different already,
	depending on whether it is in POSIX mode or not.

-	smake: Since the GNU assignment operator := that has been adopted
	by POSIX as ::= causes unpredictable behavior, in case that += is
	used, it is now only supported when smake is in "POSIX mode", e.g.
	by putting .POSIX: into the Makefile. As this results in modifying
	the parser based on the current POSIX state, this needs the extension
	mentioned above.

-	smake: now uses a new version date to mark the new version.

-	smake/psmake: MAKE-sh now automatically sets up c99 -D_XOPEN_SOURCE=600
	for the $CC default on z/OS.

	Thanks to a report from Matthew R. Wilson

-	copy: changed open(..., 0) -> open(..., O_RDONLY) for z/OS

	Thanks to a report from Matthew R. Wilson

-	p: changed open(..., 0) -> open(..., O_RDONLY) for z/OS

	Thanks to a report from Matthew R. Wilson

-	patch: changed open(..., 0) -> open(..., O_RDONLY) for z/OS

	Thanks to a report from Matthew R. Wilson

-	sformat: changed open(..., 0) -> open(..., O_RDONLY) for z/OS

	Thanks to a report from Matthew R. Wilson

-	sformat:checkmount.c: did use HAVE_SYS_MNTENT_H instead of
	HAVE_SYS_MNTTAB_H as a result of a typo that was introduced with
	the code to #include <sys/mnttab.h>.

	Thanks to a report from Matthew R. Wilson

-	Bourne Shell: "cd -" now prints the new directory. POSIX requires this.

	Thanks to a report from Robert Elz.

-	Bourne Shell: "make install" now works wit SuPro Make as well.
	Previously, the target /opt/schily/xpg4/bin/bosh (a symlink) was not
	installed because of a missing rule that caused SuPro Make to complain 
	about a target with no existing rule to make.

-	Bourne Shell: z/OS only supports the minimum fields from struct rusage
	that are required by POSIX. We need the same hack as for HAIKU to
	be able to compile.

	Thanks to a report from Matthew R. Wilson

-	Bourne Shell: z/OS does not #define MAXPATHLEN, so we #define it
	to be 1024 by default

	Thanks to a report from Matthew R. Wilson

-	bsh: z/OS only supports the minimum fields from struct rusage
	that are required by POSIX.

	Thanks to a report from Matthew R. Wilson

-	bsh: z/OS does not support the field pw_passwd in struct passed.
	We now partially disable idops.c in that case, to make it compile.

-	bsh: changed open(..., 0) -> open(..., O_RDONLY) for z/OS

	Thanks to a report from Matthew R. Wilson

-	star: A single Linux xattr entry with a zero length value did disable
	all Linux xattrs for the related file. This is now handled correctly.

	Note that setfattr(1) on some Linux versions does not support to set
	empty xattr entries, but star on the same system can extract files
	with empty xattr entries.

	Thanks to a report from Dennis Katsonis

-	star: star -version now prints a new version date 

-	ved: ctags: we added #undef index and #undef rindex to make it compile
	on z/OS

-	ved: ved maxll=79 did sometimes fail to introduce automatic line
	wrapping past column 79. The computing method has been corrected and
	now even works correctly if the last character was inserted with a
	multiplicator > 1. So this fixes more than a +-1 problem.

-	ved: ved maxll=79 now checks whether the cursor is > column 79
	before entering a new line character. If this is the case, an automatic
	line wrapping is now introduced, before entering the newline.

-	ved: ved no longer tries to setup default values for pagesize and
	linelength. This helps to avoid a startup on an unsuitable terminal.

	Thanks to a report from Robert Clausecker

-	ved: ved now aborts the startup if it turns out to be connected to
	a hardcopy terminal.

	Thanks to a report from Robert Clausecker

-	ved: changed open(..., 0) -> open(..., O_RDONLY) for z/OS

-	termcap: changed open(..., 0) -> open(..., O_RDONLY) for z/OS

-	SunPro Make: The man pages dmake.1 and make.1s now better document the 
	handling of the maximum number of jobs when called e.g. as "make -j4 ..."

	The description for the -j option now has a direct relation to the
	environment variable DMAKE_ADJUST_MAX_JOBS

	The documentation now explains that the default handling method is 
	"method M1" that limits the system load via getloadavg().

	The documentation now explains that DMAKE_ADJUST_MAX_JOBS=M2 switches
	to "method M2" that limits the total number of jobs used in a group
	of nested "make" calls. This is what the next POSIX version may define
	to be the official default.

	If that new POSIX standard has passed, we may need to switch
	to method M2 in case .POSIX: has been seen in the Makefile.

-	SunPro Make: the man page make.1s now also mentions
	DMAKE_ADJUST_MAX_JOBS

-	SunPro Make: the man page make.1s now also mentions
	DMAKE_MAX_JOBS DMAKE_MODE DMAKE_OUTPUT_MODE 

-	SunPro Make: DMAKE_STATISTICS has been enabled. Set the 
	DMAKE_STATISTICS environment in order to tell make to print
	allocation statistics.

-	SunPro Make: DMAKE_STATISTICS has been documented in the make.1s
	man page.

-	SunPro Make: The __DMAKE_M2_FILE__ environment has been documented
	in the man page. This is the environment that forwards the handle for
	the shared memory data pool to sub-makes to allow a common handling
	of the job pool. The content is always a temporary path name. If
	SYSv shared memory is used, the SYSv memory handle ID is computed 
	from that name. If mmap() is used, the path name holds the shared 
	memory.

-	SunPro Make: The top level README has been enhanced and some typos
	have been fixed.

-	SunPro Make: A new file "sunpro/Make/bin/make/common/README.ifdef"
	has been added to document some #ifdefs that are used to create
	compile variants from the files in the directory 
	"sunpro/Make/bin/make/common/".

-	SunPro Make: The parser (while working on :=, ::=, :::=) is now a bit
	more precise if the current state is "two_colon" or "three_colon" 
	and a syntax error follows. Before, two fall-through cases in a 
	switch() could result to strange behavior with incorrect syntax in
	a Makefile.

-	SunPro Make: Since the GNU assignment operator := (that has been 
	adopted by POSIX as ::=) causes unpredictable behavior, in case 
	that += is used, it is now only supported when make is in 
	"GNU compatibility" mode or in "POSIX mode".

-	SunPro Make: sunpro/Make/lib/makestate/src/lock.c, 
	sunpro//Make/lib/vroot/src/lock.cc,
	sunpro/Make/lib/vroot/src/vroot.cc and 
	sunpro/Make/bin/make/common/misc.cc are now using the portable 
	<schily/*.h> #includes, in order to be prepared for platforms with
	missing include files, like sys/param.h that is missing on z/OS.

	Thanks to a report from Matthew R. Wilson

-	SunPro Make: sunpro/Make/lib/makestate/src/lock.c and
	sunpro/Make/lib/vroot/src/vroot.cc now 

		#include <schily/maxpath.h>

	since the default MAXPATHLEN #define from that file is needed
	on z/OS.

	Thanks to a report from Matthew R. Wilson

-	SunPro Make: sunpro/Make/include/bsd/bsd.h is now using the
	typedef:

		extern "C" typedef void SIG_FUNC_TYP(int);

	for C++ since the C++ compiler for z/OS does not like to auto-cast
	a mangled C++ function pointer type to an equivalent C type.

	Thanks to a report from Matthew R. Wilson

-	SunPro Make: Is now using a new versions date.

	*** SunPro Make TODO: 
	*** The dmake man page mentions -x SUN_MAKE_COMPAT_MODE=value
	*** but this does not work.
	*** Sun at some point seem to have believed that it works but
	*** later disabled the code since the check would need to appear
	*** earlier in the code to become usable.


SCCS THOUGHTS:

-	SCCS: The current idea for converting a historic SCCS project into
	a project oriented SCCS history bundle is the following:

	-	Create a user map file for "sccslog" by calling:

		mkdir $HOME/.sccs
		$EDITOR $HOME/.sccs/usermap

		Enter the UNIX login names followed by a TAB, followed
		by an E-mail notation. Use one line per user, e.g.

			joerg	J. Schilling <joerg@mail.com>

	-	Create a copy of the whole project to work on for this test.
		Do not do this conversion on the original project until
		sccs-6.0 is ready.

	-	chdir to the project home directory of the just created copy.

	-	Call "sccs init -i ." to make the project using an in-tree
		project oriented repository.

	-	Call:

		find * -path '*SCCS/s.*' | /opt/schily/ccs/bin/sccscvt -NSCCS/s. -k -ooo -V6 -

		for the CSRG BSD project use:

		find * -path '*SCCS/s.*' | TZ=US/Pacific /opt/schily/ccs/bin/sccscvt -NSCCS/s. -k -ooo -V6 -

		to convert all history files into SCCSv6 history files. The
		TZ=US/Pacific is important for the UCB conversion since SCCSv6
		uses timezones but SCCSv4 does not and we need to have the 
		correct timezone entries in the SCCSv6 history files.

		For the complete "schilytools" project with 4200 SCCS history
		files in 55 Mbytes, this takes 12 seconds for the SCCS history
		from 1984 .. 2020, but note that most of the edits from the
		1980s are lost, so there are few entries from the time
		before 1989.

		An alternate example: the SCCS history from the BSD-4.4 project
		from December 1979 up to June 1995 is in 12600 SCCS history
		files that take up 125 MB.
		The conversion time to the SCCSv6 history file format is
		18 seconds.

	-	Call:

		find * -path '*SCCS/s.*' | /opt/schily/ccs/bin/sccslog -changeset -

		to populate the changeset file from the existing deltas.

		For the complete "schilytools" project with 19600 commits,
		this takes 8 minutes. The resulting file .sccs/SCCS/s.changeset
		has a size of approx. 7 MBytes.

		An alternate example: the SCCS history from the BSD-4.4 project
		from December 1979 up to June 1995 has approx. 47000 commits.
		The conversion time is approx. 40 minutes.
		The size of the resulting changeset file is approx. 14 MBytes.

	-	convert the in-tree repository into an off-tree repository.
		This final step is not yet needed and there is currently no
		code to do that automatically.

	-	If you like to check the resulting changeset file, there is
		currently only one way to look at it, by calling:

		sccs -O get -p -A -m .sccs/SCCS/s.changeset | more

		This prints an annotated version of the changeset file.
		The next task is to develop an enhancement to "sccs log"
		that prints the changeset in a way similar to what "hg log -v"
		prints.

	-	NOTE: Normal filesystems on Linux are slow, it is advised to
		make the conversions on tmpfs for performance reasons in case
		you are using Linux.

	Please however keep in mind that this is still experimental and there is
	absolutely no grant that a changelog created with current experimental
	software will work correctly with the final SCCS version. The procedure
	is just an example to check how it may look like.

	The final conversion method will be more automated... most likely
	by a command similar to "sccs import ..."

	IMPORTANT: This is not yet the time to finally convert a project into
	the project mode, because the project would be stuck in the current 
	state. What we need to continue work in that repository state in the
	project mode is at least a working "sccs commit". Be prepared to remove
	the changeset history file once "sccs commit" works and to re-create
	the changeset file for that time.

 

-	SCCS TODO:

	-	Activate "fsdiff" as a "bdiff" replacement in delta(1)
		to speed up delta(1) and to reduce the size of the SCCS
		history files.

	-	Implement something that outputs similar information from
		the changeset file as printed with "hg log -v".

		This would be the next key feature.

	-	verify whether sccs.c uses -NSCCS in the back end programs
		correctly, instead of converting g-file names from the command
		line into s.file names in the frontend in order to forward 
		s.file names to the backend programs. This is needed for an
		off-tree repository.

		The related unit tests are already passed.

	-	Add code to to sccs(1) to send a list of files to admin(1) and
		delta(1) with new or modified files in order to have all
		important code for a "sccs commit" in a single program that
		does not need to deal with ARG_MAX limitations.

	-	Add code to admin(1), delta(1), sccs-log(1) and get(1) to 
		maintain/understand the changeset file.

		This is mainly writing out the sccschangeset(4) entries to an
		intermediate store if a single file has been treated
		successfully. For sccs-log(1), see below.

	-	Finish the work to allow normal line based diffs in SCCS even
		for binary files. This are files that include nul bytes and
		this needs to completely avoid fputs() and this needs an 
		initialized member p_line_length in struct packet even for 
		all content that does not result from a previous getline() call.

	-	sccs -R tell (and probably other subcommands?) does not yet
		work in NewMode

	-	Add code to libcomobj to understand the changeset file.
		This is needed in order to e.g. know the file names and file
		specific SIDs/state that corresponds to a project global SID.

	-	Find/verify a complete transactional model that allows to repair
		complex changes to the set of files for a project that have
		been aborted in the middle. The current idea is to create the
		file $PROJECTHOME/.sccs/changeset with the deltas to the
		changeset during a complex update operation.

	-	Find a decision on how to deal with the admin flags that are
		currently implemented as global flags and thus do not depend on
		the SID (version) if the history file.

	-	Aborting a transaction via ^C currently requires a manual
		removal of the global lock file. Find a way to avoid this in
		case that a commit has been aborted while being prompted for
		a commit message (which is before any real action happened).

	-	Implement a fully automated method to convert a SCCSv4 based
		history with unrelated history files into a new SCCSv6 based
		project mode history with a populated changeset history file.

		This will most likely be done as a variant of the to be defined
		new command "sccs sccsimport" that imports a whole existing old
		SCCS project.

	-	Implement this "sccs sccsimport" based conversion in a way where
		sccs(1) holds the global changeset lock for the whole time
		of the conversion.




-	Bourne Shell Missing features for POSIX compliance:

	- Support for $'...' quoting (this is not needed for the current
					version of POSIX but for the next POSIX
					version that will be named SUSv8).
					The development of SUSv8 will start in
					late 2016.

	We are now expecting the Bourne Shell to be fully POSIX compliant.

-	Bourne Shell further TODO list:

	-	Finish loadable builtin support.

	-	POSIX does not allow us to implement ". -h", so we will
		add a "source" builtin to be able to implement "source -h"

-	The following builtins (that are available in bsh) are still missing in
	the Bourne Shell:

	err			echo with output going to stderr
	glob			echo with '\0' instead of ' ' between args
	env			a builtin version of /usr/bin/env

	The following bsh intrinsics are still missing in the Bourne Shell:

	-			the restricted bsh has restriction features that
				are missing in the Bourne shell.

	-	source -h	read file into history but do not execute

	and probably more features not yet identified to be bsh unique.



Author:

Joerg Schilling
D-13353 Berlin
Germany

Email: 	joerg@schily.net

Please mail bugs and suggestions to me.
