New features with AN-2019-05-28:

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 new smake
	*** to compile this source. If your smake is too old and aborts, ensure this
	*** 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.3

	*** Due to the fact that schily-tools 2014-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.


	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 to Linux distributions as they
		usually do not forward these bug reports upstream and as 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 and since the problem that (on Linux) occurred once
		every 6000-10000 tries did not happen on Solaris after
		10 million tries, it was not known otherwise.


-	Schily Makefilesystem: configure now checks for the presence of
	"ed" and "red".

	Note that this does not yet work when doing cross compilations.

	This test is needed as OpenBSD does not provide "red" and "patch"
	would otherwise fail.

-	Unit test subsystem: The environment variables "expect_fail" and
	"EXPECT_FAIL" are now documented

-	Unit test subsystem: The environment variable "EXPECT_FAIL" now walways
	overwrites the variable "expect_fail" if set to "true.

-	cal: The UNIX calendar program has been added.

-	cal: The UNIX calendar program is now able to deal with all switch
	dates from the Julian to the Gregorian calendar. The switch date is
	controlled with the GREGORIAN environment variable that holds the
	first day that uses the Gregorian calendar, but written in the
	Julian calendar notation.

	The switch date in general depends on how much people distrust the pope.
	So catholic areas did switch earlier to the new calendar then the
	areas with a reformed church.

	Note that this switch date cannot be derived from the locale of a user
	since e.g. Germany did use at least four different switch dates.

		GREGORIAN=1582/10/5 cal

	tells cal(1) to use the date that was used to switch to the
	Gregorian calendar in the catholic parts of the Holy Roman Empire.
	This is the correct date for e.g. Cologne and Rome.

		GREGORIAN=1612/8/23 cal

	tells cal(1) to use the date that was used to switch to the
	Gregorian calendar in Prussia. This is the correct date for e.g. Berlin
	and the switch affects two months.

	In the C locale and when there is no GREGORIAN environment, cal(1)
	still uses the date for England and it's colonies (e.g. the USA)
	as this is required by POSIX. In our notation, this is 1752/9/3.

	Here are interesting switch dates that for the definitions for
	GREGORIAN:

	1582/10/5	Catholic parts of the HRE
			This includes Venice, Spain, Portugal and the eastern
			parts of today's Poland and colonies, and Lithuania

	1582/12/10	Kingdom of France and colonies

	1582/12/21	Spanish Netherlands (today, this is a part of Belgium)

	1583/1/2	United republic of the Netherlands

	1584/1/7	Kingdom of Bohemia (Böhmen), Kanton Unterwalden

	1584/1/13	Silesia (Schlesien)

	1584/10/4	Moravia (Mähren)

	1585/12/22	Lithuania

	1587/10/22	Hungaria

	1590/12/15	Transsilvania

	1612/8/23	Prussia

	1656/3/1	Wallis

	1700/2/19	Danmark-Norway and protestantic parts of the HRE

	1700/12/1	Northeast Netherlands

	1701/1/1	reformed parts of Switzerland

	1752/9/3	Kingdom of England and colonies (USA)

	1753/2/18	Sweden

	1760/2/17	Lorraine (Lothringen)

	1872/12/20	Japan

	1915/5/12	Kurland

	1916/4/1	Bulgaria

	1917/2/16	Osmanic Empire

	1918/2/1	Russia, Estaland

	1918/2/16	Ukrainia

	1918/4/18	Transcausasia

	1919/1/15	Serbia, Croatia Slowenia

	1923/2/16	Greece

	1911/12/19	China, also 1928/12/19, 1949/9/18

	To explain how complex this swich is, both William Shakespeare and 
	Miguel de Cervantes died 23. April 1616 but Shakespeare survived 
	Cervantes by 10 days.

-	The binary package CSWschilybase now includes "cal".

-	patch: In order to make patch useful with "ed" type patches on OpenBSD,
	it now uses the test results for ed/red and falls back to ed in case
	that red is missing. This is not a problem for the currently known
	attacks like "beep", since POSIX requires ed to abort when stdin is
	not a TTY and a command fails, but there may be other attacks that
	cannot be prevented on OpenBSD because of the missing "red" binary.

-	Bourne Shell: Similar to what ksh88 does, scripts are now checked
		before they are run. If there is a nul byte before a newline
		in the first 256 bytes, a file is rejected as alien binary
		instead of trying to interpret it as a script.

-	SCCS: The admin man page now better documents how to suppress the
		"No id keywords (cm7)" warning.

-	SCCS: The "sccs help cm7" text now includes a hint on how to suppress 
		the "No id keywords (cm7)" warning.

-	SCCS: The help function sccsfatalhelp() now tolerates new lines at the
		end of the string when scanning for the SCCS help ID (something
		like "(cm7)").

-	SCCS: The unit tests added a new variable TESTING_SCCS_V5 that is set
		to true, when a SCCS implementation is compatible to SCCS v5
		which is true for e.g. the Solaris SCCS variant.

-	SCCS: The unit test scripts now have better comment for the various
		SCCS version specific variables.

-	SCCS: The unit tests now distinct between POSIX compliant SCCS versions
		like the Schily SCCS and nonPOSIX variants like Solaris SCCS
		or CSSC. This is important when checking "prs -d:DI:" as AT&T
		did introduce a bug around 1984 related to the "/" separators
		for the :DI: output.

-	SCCS: Some unit tests for prs now allow a failure since not all platform
		come with correctly working date conversion routines in libc.

-	SCCS: The "non text file" warnings in admin(1) that only use
		fprintf(stderr, ... now also call sccsfatalhelp() to include a
		more helpful detailed explanation. Since these warnings
		also appear frequently with get(1) and delta(1), the related
		similar messages from get(1) and delta(1) have not been
		enhanced in order to avoid unneeded output.

-	SCCS: libcomobj now checks all calls to localtime()/gmtime()/mktime()
		for errors and aborts the programs with the new error text:

			"time stamp conversion error (cm19)"

-	SCCS The man pages for prt and prs now mention that prt only does a
		textual scan for the delta table while prs first converts
		everything to binary data and later back to text. This is
		important for platforms with defective date conversion
		routines.

-	SCCS: prt.c now has a better comment for a #ifdef part that helps
		to understand that binary conversion only happens when SCCS
		has been compiled for the (Sun) GMT mode.

-	SCCS: val.c now avoids a GCC warning.

-	SCCS TODO:

	-	Convert sccs.c to use -NSCCS in the back end programs 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. Doing it this way allows us to have the SCCS
		history files "off tree" in a separate directory tree starting
		with ".sccs/" at the "project root" directory, as the related
		code to convert path names is in libcomobj::bulkprepare().

	-	Add code to admin(1) and delta(1) to retrieve the list of
		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) and get(1) to maintain/understand
		the changeset file.

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

	-	Add code to all programs to maintain a lock (for the file
		$PROJECTHOME/.sccs/SCCS/s.changeset, that would be in the file
		$PROJECTHOME/.sccs/SCCS/z.changeset) to maintain a project
		global lock.

	-	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 way to decide when to use SCCS v6 type history files.
		For the project mode, this is needed in order to prevent 
		historic SCCS implementations to believe they could modify
		files without knowing about project global locks.





-	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, joerg.schilling@fokus.fraunhofer.de

Please mail bugs and suggestions to me.