v4.2.1 01jan2022 Updated internal documentation to refer to new website; Cosmetic fix to the internal post2pdf script; Cosmetic fixes to 7history.txt (typos, etc); Updated to the MJS Configure toolset version 3.3; Renamed the licence file to make it more prominent in the source distribution. v4.2 01jan2017 Added support for building with the following win32 C compilers: Orange C Pelles C Tiny C Compiler MinGW LCC-WIN32 and the following dos compilers: Turbo C 2.01 Turbo C++ 1.0 and the following unix-hosted compilers: CLang Cosmetic fixes to manpages for remark(), warning() and mbm. Portability fix in routine that computes the short process- name on VERSAdos/VMS/RSX-11/etc. Culled redundant duplicated #includes to speed-up build-time. Improved binary version-tracking via mjsuimpl.h. Minor fixes to a few source files to improve compatibility with some compiler variations (ie: compiler bugs) regarding the C ref/def semantics for global variables - library is now compatible with *all* of: C89/C99 "initialised-else-relaxed ref/def" semantics C11 "strict ref/def" semantics non-standard "common-allocation" semantics non-standard "relaxed ref/def" semantics Revised build-system for win32/pcdos hosts: many portability and usability fixes, to accomodate WoW64 and also very old versions of PCDOS/MSDOS/DRDOS/FreeDOS/etc. Revised build-system for UNIX hosts: more accurate detection of discovered C compilers. v4.1 25dec2016 Completely reworked build-system for win32; added full support for Borland C++ 5.x, Digital Mars & Watcom/OpenWatcom compilers. Reworded build-instructions for win32. Added user-installable "display" callback for use by error(), warning(), remark(), panic() and usage(), to better support GUI application programs and other cases - applications can now dynamically install a callback function to eg: display the formatted message as a popup messagebox, instead of to standard-error. New function to install/reset the necessary callback: notifier(), and a manpage for it. Updated manpages for error(), remark(), warning(), usage(), et al, to qualify the "to standard-error" as a *default* with a reference to notifier() for how to override that default, and better EXAMPLEs. *** IMPORTANT *** Fixed a missing *explicit* NUL-terminator in the internal function called by getflags() when an invalid flag is encountered; was previously erroneously relying on zeroed memory from first malloc() call. That could have, in principle, been "used" on some platforms in some circumstances to read beyond the end of a string, thus a potential unintended information-disclosure vulnerability. Thus all users of previous versions should upgrade to at least version 4.1 and rebuild the programs that make use of this library. v4.0.2 27nov2016 Fixed typos in Win32 build-configuration script: (1) was missing the instruction to compile cpystr.c (2) wrong builder filename for bld_w32.c with VC2010 (3) missing builder filename for bld_w32.c with WATCOM Fixed config.in to make "long long" support optional. Minor README tidyup, and fleshed-out build instructions for Windows platforms. Added Android/GCC to the list of Tested Platforms. Added Borland & Digital-Mars compilers to the Windows section of Tested Platforms. Configure now automatically recognises the PathScale EKOpath 5.x/6.x C compilers. UNIX Configure probe-programs adjusted for 100% *strict* ANSI compliance - type of first argument to main(). Portability fix for the "HAS_LONGLONG" Configure probe script, to properly handle even a crazy C compiler that has 32-bit unsigned-long but 64-bit size_t...! Previously, on such a platform/compiler, the probe could errorneously indicate a lack of long-long support. No actual library code changes. v4.0.1 28may2015 cosmetic fix to computed process-name on Windows/DOS targets; now shows only the filename, ie: without the leading path. This now matches the behaviour on other target systems. Removed harmless but redundant definition of mem_free from mem_buy.c Added build-configuration script/program for Win32 host/target, supporting several C compiler toolsets. v4.0 07feb2015 further tuning to the rtw hash function IV to provide more dispersion even with extremely short keys. v3.4 26aug2013 fixed non-uniform output distribution in the rtw_hash functions. 1/49000th of the intended output range for rtw_long_hash() was never output for any 4-byte input; bug was the overly-complex generation of the RTW initialisation vector - too much feedback. speeded-up the random-table-walk functions, tested with 48-hour random-input runs on: HyperSPARC-133, Solaris 2.6, GCC 3.4 and SunPro 6.1 Pentium-II/233, MSDOS 7.1, Turbo C++ 1.0 Core 2 Duo E6600, Windows XP, MSVC 2010 MIPS R3000/33, Irix 5.3, IDO 5.3 and GCC 2.93 averaged 311% faster on very-short inputs averaged 9% faster on arbitrary inputs per input-size Added basic alias types for "long long", and a long-long version of the random-table-walk hash function. Tidyup of the rtw_hash manpages. Reworked verstr.c generation to ensure always up-to-date. v3.3.1 16mar2013 updated Configure tools; no code/documentation changes. v3.3 17jun2012 split large modules into smaller pieces, to optimise size of executables linked with this library. compatibility with the most restrictive linkage allowed by C89 (ANSI X3.159-1989) - external symbols must be distinct in the first six characters; however, need to provide full source-compatability with users of the library: achieved by transparently mapping source-code-level symbols into shorter link-level symbols at compile time. changed type of first arg to getflags() from pointer-to-UINT into pointer-to-INT, for castless compatibility with the ANSI C standard. added strtos() function. v3.2 18mar2012 made the RTW-hash table constant, rather than being differently regenerated for every build: this was needed to be able to provide a proper library ABI. updated to the MJS Configure toolset version 3.2 - is now Cygwin-compatible. added manpages for the rtw-hash functions. v3.1 10mar2005 added "random-table walk" fast hashing functions. v3.0.1 27oct1999 added "API" manpage changed template makefile and Configure script to adapt installed location for manpages to local system conventions (eg: file-format manpages are in section 4 on System V, but are in section 5 on BSD and Linux). fixed namespace pollution bug in mjsu.h: made the function alias names ltols, stols, lstol, lstos hideable under control of MJS_FUNCTIONS (as was already the case for all the other function-name aliases). tidied up manpages so that cross-referenced HTML versions could be generated mechanically for the MJSulib website. added history of changes (this document) to the distribution. 18dec1998 packaged for publication on the 'net, alongside "slap". Put more heuristics and more automatic adaptability into the configure scripts. added a few missing manpages, fixed typo's in some of the others. v3.0 30jun1997 bitmap functions, originally needed for the rendering engine of "slap". v2.2 17sep1995 general-purpose byte-order conversion functions (originally for a BOOTP server, but generally useful). added auto-configure scripts to generate makefiles for some common UNIX platforms. v2.1 04dec1993 pulled previous strdup() into the library, renamed as str_dup(), to avoid conflicts with those compilers that actually DO provide strdup()... changed BOOL from an integer to an enumerated type. v2.0 21apr1993 getting fed up of copying functions between programs, decided to gather all the general-purpose self-contained ones together - the MJSulib library was born. wrote full manpages, too! started version number at 2.0 to distinguish from earlier partial libraries and bits of fluff. a fair amount of tidyup to existing programs was required to remove "private" code and headers and to use the MJSulib API instead (eg: unified symbolic constants, unified types, the mjsu.h header file). Even though many of the programs were using the library only for getflags() and the memory-allocation routines... ------------------------------------------------------------------------------ Pre-Civilisation: when functions were written for specific programs and copied around as needed...must have been crazy... 03sep1992 made the regular-expression routines properly portable (encoded patterns made up of USHORT elements, rather than "signed char"). 05may1992 wrote trivial strdup() to port a UNIX program to MSDOS. 12jun1991 noticed that all the programs using getflags had almost identical surrounding code to report invalid command-lines and other errors. Saw that such reporting should be part of getflags itself (eg: production of "usage" message). Added the "usagetail" and return-value semantics to getflags. 28jan1991 functions to handle generic string-vectors, and unified formatted messaging functions, and regular-expression handling (for globbing), as part of a new UNIX shell. The regexp functions were based on ideas expounded in "Software Tools in Pascal" by Kernighan and Plauger, although the actual interfaces were written to match the old Whitesmiths' manpages, with adjustments for portability and ANSI C. 29dec1989 programmer-friendly memory-allocation functions: was getting tired of typing long-winded conditional tests and fprintf() calls around every invocation of malloc(), realloc() et al. 12jun1989 wrote a fully ANSI C (and portable) version of "getflags" for use in a suite of MSDOS programs. This is where it all really began. wrote an ANSI C (and portable) version of Whitesmiths' trivial but handy "cpystr" function. ------------------------------------------------------------------------------- Pre-history: fell in love with the Whitesmiths' C Library "getflags" routine. Non-standard, non-portable (as implemented by WSL), but incredibly flexible and simple to use. Vastly superior to available equivalents of that era (1983-1989), such as "getopt".