bobcat (5.09.01) 

  * DateTime::Zone::initialize was called to initialize a static data member
    which is used by DateTime constructors. When a DateTime object is
    statically constructed initialize may not yet have been called. Fixed in
    this release

  * The -q option was removed from the 'build' script.

  * Leftover .tar.gz extensions were removed from the man-pages

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Thu, 01 Jul 2021 08:46:33 +0200

bobcat (5.09.00) 

  * unreleased: DateTime fixes (see 5.09.01) were incorrect.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Mon, 28 Jun 2021 15:32:14 +0200

bobcat (5.08.01) 

  * Fixed missing assignment of argv[0] to Arg__'s d_argv0 data member

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Mon, 17 May 2021 10:17:20 +0200

bobcat (5.08.00) 

  * Added new members to Arg and ArgConfig, optionally handling non-options as
    arguments and accessors returning arguments as iterators or as vectors of
    strings.

  * The member DateTime::Zone::thisZoneShift was not implemented: added to
    this release.

  * Minor changes to the DateTime man-page.

  * Changed A2x calls to corresponding std::string calls, updated man-pages
    accordingly.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Sat, 15 May 2021 12:10:47 +0200

bobcat (5.07.03)

  * The 'build light' command failed to complete because of a missing
    -pthread compiler flag: fixed in this release.

  * The concept Insertable in fmt/fmt still causes issues, and is for the time
    being no longer used.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Thu, 12 Mar 2021 10:48:16 +0100

bobcat (5.07.02)

  * The concept Insertable, defined in fmt/fmt, is temporarily not used:
    g++-11's version 11.0.0 doesn't handle it correctly, but the next release
    (g++ 11.0.1, cf. https://godbolt.org/z/P6hxcv) does (Thanks, Wiebe-Marten
    Wijnja, you saved my day ;-)

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Thu, 04 Mar 2021 13:42:38 +0100

bobcat (5.07.01)

  * Cosmetic changes required by g++-11, among which a redefinition of
    the Insertable concept in fmt/fmt

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Wed, 03 Mar 2021 20:33:17 +0100

bobcat (5.07.00)

  * Arg::argPointers() can also be used with Arg const & reference variables.

  * Updated the Arg man-page's description of Arg::argPointers() and
    Arg::versionHelp() (thows 0 when the help or version flags are specified,
    and throws 1 if fewer than the required number of arguments are
    specified).

  * Updated the Process and Pipe man-pages.

  * Added a description of the member `ostream &stream()' to CSVTable's
    man-page.

  * Added  constructor CSVTable(std::ofstream &&tmp, std::string const &sep)
    and member void stream(std::ofstream &&tmp) to CSVTable.

  * Removed -x.tar.gz from the last lines of the man-pages

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Thu, 24 Dec 2020 14:38:06 +0100

bobcat (5.06.01)

  * Extended the facilities of CSVTable

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Fri, 11 Dec 2020 15:16:31 +0100

bobcat (5.06.00)

  * Added the class CSVTable constructing tables row-by-row

  * Added the move constructor and the move assignment operator to BigInt

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Mon, 07 Dec 2020 20:10:31 +0100

bobcat (5.05.00)

  * Redefined FBB::binary_search, and updated its man-page

  * Added the class FBB::Config, deprecating FBB::ConfigFile.

  * Added the class template FBB::Field allowing retrieval and modifications
    of offset-based fields in numeric values of configurable number systems.

  * Added descriptions of the members Arg::LongOption::longName and
    Arg::LongOption::optionChar to the FBB::Arg man-page

  * Fixed a bug in DateTime that broke rfc2822() and rfc3329() when DST was
    acitve.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Sat, 23 May 2020 15:25:17 +0200

bobcat (5.04.01)

  * Stupid mistake: forgot to remove the Process header file included
    ../pipe/pipe

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Wed, 04 Mar 2020 14:39:28 +0100

bobcat (5.04.00)

  * The Stat and Glob classes received new members and constructors allowing
    its objects to distinguish file types (like regular files and symbolic
    links) that cannot be distinguished when merely applying the `bitor'
    operator to their Type values. Their man-pages were updated accordingly.

  * The build-scripts (in the <classname>/driver directories) use the C++
    standard that is defined int the file ./c++std

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Tue, 03 Mar 2020 21:28:54 +0100

bobcat (5.03.00)

  * Simplfied the  PerlSetFSA s_stateTransitions FSA used by Pattern to a mere
    five states.

  * Updated the Stat, Pipe, and Process man-pages.

  * Pipe has several new members (e.g., for closing pipes); its d_fd array of
    file descriptors is now a private data member.

  * Process defines its own 'waitForChild' instead of simply calling the
    member inherited from 'Fork'.

  * Process avoids open pipes after completing child-processes.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Fri, 28 Feb 2020 17:51:53 +0100

bobcat (5.02.00)

  * Added the member 'on' to the class 'Log'.

  * The member Log::off suppresses logging. Suppression can be undone by
    calling 'on'. The member 'setLevel' cannot be used anymore to reactivate
    logging.

  * Added the enumeration 'Active' to 'LogBuf' allowing derived
    classes to deactivate or suppress logging information.

  * Added the member 'LogBuf::empty' returning 'true' if the object's buffer
    is empty.

  * Added the member 'LogBuf::setActive(Active)'.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Wed, 11 Dec 2019 11:06:34 +0100

bobcat (5.01.00)

  * Fixed a bug in the conversion mode recognition in BigInt::fromText

  * Added User(size_t uid) and User(string const &name) constructors to the
    class User.

  * Added the missing copy constructor and copy assignment operator to the
    class User.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Sat, 30 Nov 2019 09:06:43 +0100

bobcat (5.00.03)

  * Suppressed SF cerr stmnt in digestbuf/eoi.cc

  * Added missing ; to [[fallthrough]] attributes

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Sun, 08 Sep 2019 17:00:50 +0200

bobcat (5.00.02)

  * Fixed an error in SyslogBuf's constructor: it now correctly defines the
    logged message head as SyslogBuf's first argument.

  * LogBuf's member `active' now (de)activates logging until another `active'
    call.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Mon, 03 Jun 2019 16:35:26 +0200

bobcat (5.00.01)

  * Changed overlooked references to ...bobcat4 into ...bobcat5

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Wed, 01 May 2019 20:38:19 +0200

bobcat (5.00.00)

  * All classes derived from std::streambuf are now called ...Buf:
        Base64StreambufBase         -> Base64BufBase
        IBase64Streambuf            -> IBase64Buf
        IFdStreambuf                -> IFdBuf
        IFilterStreambuf            -> IFilterBuf
        IOStreambuf                 -> IOBuf
        IQuotedPrintableStreambuf   -> IQuotedPrintableBuf
        LogBuffer                   -> LogBuf
        MultiStreambuf              -> MultiBuf
        OFdStreambuf                -> OFdBuf
        OFilterStreambuf            -> OFilterBuf
        OFoldStreambuf              -> OFoldBuf
        OHexStreambuf               -> OHexBuf
        QPStreambufBase             -> QPBufBase
        Randbuffer                  -> RandBuf
        SharedStreambuf             -> SharedBuf
        Syslogbuf                   -> SyslogBuf

  * New members replacing old ones:
        - in all classes previously offering a pSync member:
            - pSync() is replaced by sync()

  * ConfigFile:
        - removed deprecated members:
            beginRE(std::string const &re);
            endRE() const;
        - fixed a (potentially occurring) segfault in ConfigFile

  * CSV: removed, use CSV4180 instead.

  * DateTime:
      - The TriVal type is not used anymore. Instead, `true' (DST is used for
            the object's time) and `false' (DST is not used) are used.
      - DateTime(int zoneMinutes) is replaced by
            DateTime(std::chrono::minutes zoneMinutes)

        operator@(DateTime const &obj, time_t seconds) is replaced by
            operator@(DateTime const &obj, std::chrono::seconds seconds)
            (where @ is + or -)
        operator@(time_t seconds) is replaced by
            operator@(std::chrono::seconds seconds)
            (where @ is += or -=)
      - setTime() is replaced by setUTCseconds()
      - time() is replaced by utcSeconds()
      - setFields(tm const &ts, int fields) is replaced by
            setFields(tm const &ts, TimeFields fields)

      - Members expecting or returning size_t values now expect or return
            unsigned values
      - Members returning bool values are now void members
      - Discontinued:
            The TriVal enum
            DateTime(int zoneMinutes, DSTSpec const &dstSpec)
            DateTime(time_t time, int zoneMinutes, DSTSpec const &dstSpec)
            DateTime(tm const &ts, int zoneMinutes)
            DateTime(tm const &ts, int zoneMinutes, DSTSpec const &dstSpec)
            DateTime(std::string const &timeStr, int zoneMinutes)
            DateTime(std::string const &timeStr, int zoneMinutes,
                     DSTSpec const &dstSpec)
            DateTime(std::istream &in, int zoneMinutes)
            DateTime(std::istream &in, int zoneMinutes, DSTSpec const
                     &dstSpec)
            localTime()
            to()
            displayZoneShift()
            valid()
            operator bool()
            error()
            setValid()
       - Discontinued static members:
            zoneMinutes,
            addZone,
            defaultZoneMinutes,
            minutes,
            readZones
            zoneTxt

  * DecryptBuf:
        - Discontinued:
            done()
            setIV()
        - Discontinued static member:
            lastOK()
        - done() is replaced by eoi(), alternatively the eoi manipulator can
            be inserted into DecryptBuf's std::ostream

  * DigestBuf:
        - open() is replaced by reset()
        - close() is replaced by eoi(), alternatively the eoi manipulator can
            be inserted into DigestBuf's std::ostream

  * EncryptBuf:
        - Discontinued:
            setKey()
            setIV()

  * Glob:
        - verify(): discontinued

  * HMacBuf:
        - open() is replaced by reset()
        - close() is replaced by eoi(), alternatively the eoi manipulator can
            be inserted into HMacBuf's std::ostream

  * IFdBuf:
        - open() is replaced by reset()

  * IFilterBuf:
        - overriding members no longer are declared `final'
        - pbackfail()  inserts (if storage space is available) a character at
            the beginning of the object's internally used buffer.

  * IOBuf:
        - pXsputn() is replaced by xsputn()
        - open() is replaced by reset()

  * IRandStream expects a size_t seed (used to be: long seed);

  * OFdBuf:
        - open() is replaced by reset()
        - close() is replaced by eoi(), alternatively the eoi manipulator can
            be inserted into OFdStreambuf's std::ostream

  * OFilterBuf:
        - open() is replaced by reset()
        - close(): discontinued

  * OFoldStream:
        - constructor parameter `char const *fname' is replaced by
            `std::string const &fname'
        - open() is replaced by reset()
        - close() discontinued

  * OFoldBuf:
        - constructor parameter `char const *fname' is replaced by
            `std::string const &fname'

  * OHexBuf:
        - added an extra parameter to its constructor: std::string const
            &separator, by default initialized to an empty string. It
            defines the separator inserted between hexadecimal character
            values.
        - added members `separator' to redefine or reset the currently used
            separator.
        - added member `setWidth' to modify the maximum width of lines written
            to the ostream initialized with an OHexStreambuf object.
        - close() is replaced by eoi(), alternatively the eoi manipulator can
            be inserted into OHexStreambuf's std::ostream

  * OMutexStream:
        new class offering mutex protected ostream operations.

  * ProcessData:
        Internal class previously used by Process to store the Pimpl-data. Now
        discontinued.

  * Process:
        - The class was redesigned so the pimpl idiom (implemented in bobcat
            3.19.00) is no longer required.
        - The mode parameter defined for the second through fourth constructor
            must be a Process::IOMode value. The same applies to the function
            call operator previously accespting a size_t argument.
        - cerr() is replaced by childErrStream()
        - the eoi() member calls eoi_(). Alternatively the eoi manipulator can
            be inserted into Process objects to indicate the process's
            end-of-information.
        - the eoi manipulator, defined for Process only, is superfluous and is
            discontinued. Existing code now uses the Eoi-manipulator after
            recompilation. Changes to the source code are not required.
        - the std::ostream &operator<<(std::ostream &(*pf)(std::ostream &))
            is superfluous and is discontinued.

  * RandBuf:
        - expects a size_t seed (used to be: long seed);
        - fixed a memory leak

  * Selector:
        - wait() returns 0 when its read, write and except file descriptor
            sets are empty.

  * SyslogBuf:
        - disontinued the Syslogbuf(char const *, ... ) constructor
        - open() is replaced by reset()
        - close() is replaced by eoi(), alternatively the eoi manipulator can
            be inserted into Syslogbuf's std::ostream

  * SyslogStream:
        - disontinued the SyslogStream(char const *, ... ) constructor

  * Fixed flaw in Log's FBB::fnl handling

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Fri, 26 Apr 2019 15:30:50 +0200

bobcat (4.09.00)

  * The class Log unconditionally inserts level-free messages; level
    objects may be inserted anywhere in insertion statements.

  * The Log and level man pages were updated accordingly.

  * The class DateTime was completely rewritten, using a Pimpl approach using
    the this-pointer instead of a separate data member.

  * The members 'int pSync()', defined in IOStreambuf, LogBuffer,
    MultiStreambuf, OFdStreambuf, OFoldStreambuf, OHexStreambuf, Syslogbuf,
    and TableBuf are superfluous. They still exists (as private members), but
    throw an FBB::Exception{ 1 } when called, and are removed at the next
    major bobcat release. Man-pages were updated accordingly.

  * The member `std::streamsize pXsputn(...)' defined in IOStreambuf is
    superfluous.

  * Overridding members declared as 'virtual' are now declared as 'override'.

  * Added the overriding members `xsputn' to OfdStreambuf and Syslogbuf

  * Updated the Pattern man-page

  * Internal headers include bobcat headers using "../classname/classname"
    instead of <bobcat/classname>.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Tue, 22 Jan 2019 20:59:27 +0100

bobcat (4.08.06)

  * Added Exception::factory members returning stream objects, added
    Exception::open members accepting two ios::openmode arguments.

  * Repaired flaws in man-pages.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Mon, 17 Dec 2018 09:44:20 +0100

bobcat (4.08.05)

  * [[fallthrough]] requires a final semicolon (cf. C++ std 20, 10.6.5).
    Bobcat's code is fixed accordingly.

  * The BigInt::diophantus members do not require a BigInt object, and are now
    defined as static members.

  * Stat declares a default copy constructor, as it defines a move
    constructor.

  * Superfluous 'return 0;' statements removed from source files and
    man-pages.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Wed, 26 Sep 2018 13:33:52 +0200

bobcat (4.08.04)

  * Migrated from Github to Gitlab.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Sun, 17 Jun 2018 14:16:16 +0530

bobcat (4.08.03)

  * Compilation requires c++17

  * LinearMap does not define the Alloc template parameter anymore: no longer
    required and producing a compilation error with g++8

  * Various cosmetic changes

  * The `build' script has new options: `test', building one class only
    (align) and `mantest', building a subset of the man-pages. These options
    were added for (internal) testing purposes only to test Debian package
    construction

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Sat, 05 May 2018 07:09:00 +0200

bobcat (4.08.02)

  * CSV4180 supports configurable field separator characters.

  * Fixed a flaw in the CSV4180 man-page.

  * Added new member 'release()' to the class CSV4180.

  * CSV4180's member clear by default resets the number of required fields to
    0.

  * Members in ConfigFile received const modifiers according to the ConfigFile
    man-page.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Sun, 16 Sep 2017 10:14:41 +0200

bobcat (4.08.01)

  * Fixed a bug in fswap due to which fswap could not swap plain pointers.

  * The String class header file now includes cstring instead of strings.h

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Thu, 31 Aug 2017 11:14:11 +0200

bobcat (4.08.00)

  * Added new classes IQuotedPrintableStream and IQuotedPrintableStreambuf.

  * Added new class CSV4180, the class CSV is now deprecated and should no
    longer be used. Use CSV4180 instead.

  * Added new variants of the split members, as well as new members join,
    unescape, urlEncode and urlDecode to the class String.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Fri, 25 Aug 2017 14:15:46 +0200

bobcat (4.07.00)

  * The 'build' script now supports a command 'build select [strip] class ...'
    where 'class ...' is a set of bobcat class names. 'build select' creates a
    reduced bobcat library only containing the classes (and the classes on
    which they recursively depend) specified after 'build select [strip]. See
    also the file INSTALL.

  * The class 'BinopsBase' as defined in version 4.06.01 was rewritten and
    further simplified, following suggestions offered by Wiebe-Marten Wijnja.

  * The file exception/protection.cc no longer uses bobcat/stat, removing
    a circular dependency.

  * Dependencies on A2x and X2a were removed, as their facilities are by now
    provided by std::string.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Sun, 12 Feb 2017 13:58:03 +0100

bobcat (4.06.01)

  * The class BinopsBase was simplified. Operator-specifications must now be
    provided to make the requested overloaded operators available.

  * The class BinopsBase now also accepts operator specifications 'i'
    (implementing the insertion operator) and 'e' (implementing the extraction
    operator.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Tue, 31 Jan 2017 19:53:19 +0100

bobcat (4.06.00)

  * The support classes Mul, Div, Mod, ..., Xor, used by BinopsBase declared a
    Binops parameter, which was nowhere used. This parameter has been removed
    from BinopsBase's support classes.

  * All html man-pages were rebuilt by Yodl 3.08.02 (fixing cosmetic errors).

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Sun, 29 Jan 2017 14:43:28 +0100

bobcat (4.05.00)

  * Added classes Exec, CinInserter, CerrExtractor, CoutExtractor, and
    StdExtractor, executing child processes. These classes are simplified
    specializations of Process. Exec simply executes a child process, and
    waits until its completion; CinInserter acts similarly, but insertions
    into a CinInserter object are forwarded to the child process; extractions
    from CerrExtractor read the information that is written to the child
    process's standard error stream, extractions from CoutExtractor read
    the information that is written to the child process's standard output
    stream while extractions from StdExtractor read
    the information that is written to the child process's standard output and
    standard error streams.

  * The fwap function was redesigned, to allow fast swapping for classes of
    which some members (or their base class(es)) cannot be fast-swapped.
    Thus far, this only involves classes having std::string members.

  * All Bobcat classes using fswap have been updated where necessary. They
    are: CGI, Cidr, CmdFinderBase, CmdFinder, Glob, Hostent, MailHeaders,
    Pattern, SharedMemory, Stat, TableSupport, and User.

  * A member `swap' was added to the classes CGI, Cidr, CmdFinder, and
    CmdFinderBase.

  * -lpthread was removed from INSTALL.im: it is already available for
    required classes (see icmake/special), and causes problems on some
    operating systems/distributions when it is additionally specified in
    INSTALL.im.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Sat, 17 Dec 2016 11:17:00 +0100

bobcat (4.04.00)

  * Added new class template 'BinopsBase' implementing binary operators. The
    class Binops can also be used, but sometimes causes namespace problems
    which do not occur when using BinopsBase.

  * Added missing 'inline' declarations to the definitions in
    ibase64streabuf1.f and ibase64streabuf2.f.

  * Replaced return *gptr() by return static_cast<unsigned char>(*gptr())
    in underflow members of (i)streambuf classes to prevent promotions of
    characters 0xff to -1, which is EOF.

  * Added missing DateTime::timeStruct (inline) implementation to DateTime.

  * Since the global errno variable is used by too much code, Exception{x}
    constructors now also store x in a thread_local int FBB::g_errno variable.

  * GetHostent was rebuilt using getaddrinfo and getnameinfo.

  * Glob received two new flags: NO_FLAG and NOMATCH (refer to its man-page
    for details).

  * Added member Arg::help() calling the usage function that was passed to
    Arg::versionHelp (refer to its man-page for details).

  * Added member int exitStatus() to Process returning the child process's
    exit status after calling eoi() or inserting the eoi manipulator. The
    eoi() member now also returns the child process's exit status.

  * Removed 'class' from 'friend class' where possible

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Thu, 24 Nov 2016 16:59:06 +0100

bobcat (4.03.00)

  * Prepared all classes depending on the OpenSSL libraries for OpenSSL1.1.0
    Note that the new library requires linking to the crypto library as well
    (refer to the man-pages for details). Bobcat's release 4.03.00 also
    compiles OK with the current (1.0.2) OpenSSL version.

  * Programs using DiffieHellman should be recompiled.

  * The class Signal now uses 'sigaction' instead of the (deprecated) function
    'signal'

  * IRandStream uses type 'long' for its seed argument to match time(0)'s
    return type

  * Various cosmetic code cleanups were performed (e.g., changing Exception()
    constructions into Exception{} constructions)

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Wed, 17 Aug 2016 07:56:10 +0200


bobcat (4.02.00)

  * Added the member template
        template <typename Fun, typename ...Args>
        void wait(Fun fun, Args &&...args);        // wait # available
    to the class Semaphore. See 'man -e bobcat semaphore' for details.

  * Updated documentation for yodl 3.07.01

  * Updated 'required': yodl >= 3.07.01, icmake >= 8.01.00

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Tue, 26 Apr 2016 10:38:48 +0530

bobcat (4.01.04)

  * build script updated to icmake >= 8.00.04

  * 'build install' supports an optional LOG: argument: the (relative or
    absolute) path to an installation log file. The environment variable
    BOBCAT is no longer used.

  * Modified the procedure to install files at their final destinations.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Sat, 12 Dec 2015 13:21:43 +0100

bobcat (4.01.03)

  * Kevin Brodsky observed that the installation scripts used 'chdir' rather
    than 'cd'. Fixed in this release.

  * Kevin Brodsky also observed that the combined size of all precompiled
    headers might exceed some disks capacities. The option -P was added to the
    ./build script to prevent the use of precompiled headers.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Mon, 05 Oct 2015 20:42:08 +0200

bobcat (4.01.02)

  * Classes pf_iterator and pf_iteratorstream are BigInt dependent, and are
    now ignored when running 'build light'.

  * The arguments and working of './build install' and './build uninstall' was
    changed. Call ./build for a short description, or read INSTALL.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Wed, 30 Sep 2015 22.05:58 +0200

bobcat (4.01.01)

  * Reverted back to using .ih header files again. No additional changes.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Thu, 24 Sep 2015 13:29:19 +0200

bobcat (4.01.00)

  * Moved primefactors from CLASSES to SSLCLASSES as the class PrimeFactors
    depends on BigInt, which in turn depends on the SSL library.

  * Added 'build uninstall'. This command only works if, when calling one of
    the 'build install' alternatives and when calling 'build uninstall' the
    environment variable BOBCAT contains the (preferably absolute) filename
    of a file on which installed files and directories are logged.
    Note that 'build (dist)clean' does not remove the file pointed at by the
    BOBCAT environment variable, unless that file happpens to be in a
    directory removed by 'build (dist)clean'. See also the file INSTALL.
    Defining the BOBCAT environment variable as ~/.bobcat usually works
    well.

  * In addition to the classes mentioned at 4.00.00 the struct LC (bobcat/lc)
    was also removed, as it is now superfluous because of the availability of
    lambda functions:
        LC          (lambda functions)

  * The .ih internal headers were renamed to .hh, allowing g++ to
    autimatically recognize them as header files, so they could be converted
    to precompiled headers, following a suggestion by Bram Neijt. The build
    script now creates the precompiled headers. They are removed again at the
    end of the library construction process unless the option -p is provided
    with 'build libraries'. They are also removed by './build distclean'.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Wed, 23 Sep 2015 12:11:09 +0200

bobcat (4.00.00)

  * Major release upgrade needed because of the ABI change of the libc++
    libraries introduced by the upgrade to g++ 5.*

  * Classes, deprecated for quite some time, were removed from Bobcat. The
    following classes were removed (alternatives are provided between
    parentheses):
        AutoPtr     (std::shared_ptr, std::unique_ptr)
        Errno       (FBB::Exception)
        FnWrap      (lambda functions)
        for_each    (lambda functions)
        Msg         (FBB::Mstream)
        RefCount    (std::shared_ptr, std::unique_ptr)

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Mon, 03 Aug 2015 15:58:34 +0200

bobcat (3.25.02)

  * Added the missing implementation of the member function BigInt::ulong()

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Thu, 11 Jun 2015 11:45:05 +0200

bobcat (3.25.01)

  * Fixed overlooked minor bug in Mbuf

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Sun, 15 Feb 2015 08:08:09 +0100

bobcat (3.25.00)

  * Added new member 'size()' and 'remove()' to MultiStreambuf

  * Defined manipulators 'noid' and 'noidl' for Mstream objects which do not
    show the objects' IDs when throwing exceptions.

  * Cosmetic changes to several man-pages

  * Fixed compilation errors that emerged with g++-5, reported by Matthias
    Klose.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Thu, 12 Feb 2015 17:00:57 +0100

bobcat (3.24.01)

  * Added missing 'throw' clause to log/open.cc

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Mon, 09 Feb 2015 13:03:37 +0100

bobcat (3.24.00)

  * Added new class Semaphore, implementing Dijkstra's (1962) Semaphore data
    type.

  * Added the file 'required' to the source distribution summarizing the
    required software for building bobcat.

  * LocalServerSocket objects now by default unlink their unix domain sockets.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Thu, 29 Jan 2015 09:13:35 +0100

bobcat (3.23.01)

  * Using (s)random instead of (s)rand in Randbuffer

  * Log(Buffer) now also supports FBB::UTCTIMESTAMPS to show timestamps in
    UTC.

  * Fixed several flaws in man-pages

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Sun, 24 Aug 2014 11:42:38 +0200

bobcat (3.23.00)

  * Added class SharedCondition, which is used to define a condition variable
    inside a shared memory segment.

  * Added class Tty, controlling echoing of characters entered at the terminal
    (/dev/tty).

  * Log objects are now active by default (except for the Log object
    constructed by its default constructor)

  * The default Log constructor no longer has a default argument, as providing
    an explicit argument may be confused with the constructor expecting a
    std::string as its first argument.

  * Added new member
    `prepareDaemon(string const &out, string const &err, mode_t mode) const'
    to the class Fork, allowing automatic redirection of stdandard output and
    standard error messages to files.

  * Added new member `install' to the class SharedMemory, using placement new
    to construct an object in shared memory.

  * Added the description of the enum SizeUnit to the man-pages of all classes
    using FBB::SharedEnum::SizeUnit.

  * SharedStreambuf: extractions (also insertions ?) sometimes failed to
    operate correctly. Fixed by adding setg() and setp() calls to constructors
    and underflow. Also added sharedstreambuf/driver.

  * Added SharedReadme (7bobcat) and associated figures describing how the
    Shared Memory classes were implemented.

  * Fixed incomplete deletion of shared memory segments by
    SharedMemory::kill() and SharedMemory::clear()

  * Fixed unbalanced parentheses in the man-pages

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Wed, 04 Jun 2014 17:38:42 +0200

bobcat (3.22.01)

  * Hurd-i386 architectures do not (completely?) implement the POSIX standard,
    requiring the definition of some specific macro definitions. These macros
    are now added where required: to stat/path.cc and signal/verify.cc

  * Iterator's implementation now follows the design described in the C++
    Annotations

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Mon, 03 Mar 2014 21:28:03 +0100

bobcat (3.22.00)

  * Added new class CSV, handling comma separated values

  * Learned something new: in order to define a const reverse iterator, define
    Type const &reference in the iterator class, and define Type const
    &operator*() const. The use of shared_ptr (see git commit
    1215566b78...) is not required.

  * Applied several cosmetic changes

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Fri, 28 Feb 2014 19:44:52 +0100

bobcat (3.21.01)

  * Oops, 3.21.00 lacked the 'iterator' header file that provides Iterator and
    ReverseIterator.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Sat, 15 Feb 2014 15:25:58 +0100

bobcat (3.21.00)

  * Added the class templates Iterator and ReverseIterator

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Sat, 15 Feb 2014 12:25:07 +0100

bobcat (3.20.01)

  * Added the LinearMap(initializer_list<value_type>) constructor to the
    class template LinearMap.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Sat, 18 Jan 2014 16:55:32 +0100

bobcat (3.20.00)

  * Added the class template LinearMap implementing an associative array using
    linear searching.

  * Fixed a bug in ArgConfig's option(string *dest, char const *key). The
    current version conforms to ArgConfig's man-page, stating that a key's
    trailing colon (:) in a configuration file is ignored if a key without a
    colon is passed as an argument to this member.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Sat, 18 Jan 2014 12:40:13 +0100

bobcat (3.19.01)

  * Fixed Process's d_closedByChild initialization (used by FreeBSD systems).

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Mon, 30 Dec 2013 11:17:50 +0100

bobcat (3.19.00)

  * Added Signal::remove, removing a previously added signal handling object.

  * Redesigned Process so that it (partially) uses the pimpl idiom. Also added
    the eoi manipulator and several new member functions.

  * Updated man-pages for Pipe, Redirector, Process, and Signal,

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Sat, 28 Dec 2013 11:16:20 +0100

bobcat (3.18.01)

  * Fixed a mismatch between SharedMemory::read's declared and defined return
    type.

  * Fixed erroneous #include directives in several Shared* class headers

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Fri, 22 Nov 2013 09:15:24 +0100

bobcat (3.18.00)

  * Added several new classes handling shared memory: ISharedStream,
    OSharedStream, SharedBlock, SharedMemory, SharedMutex, SharedPos,
    SharedSegment, SharedStream, and SharedStreambuf

  * Moved, where possible, nested struct/class  definitions not required in
    the public interface to the internal headers.

  * The nested class MailHeaders::const_hdr_iterator is used in the public
    interface: it is now declared in the public interface as well.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Mon, 18 Nov 2013 12:26:47 +0100

bobcat (3.17.00)

  * New split members added to the String class, removing the private split
    facility from Process, which are now superfluous, as they are covered by
    String's split facilities.

  * The class BigInt has received several new members and defines a type:
        - BigInt::Word, is equal to the OpenSSL BN_ULONG type, defining the
          unsigned long type that is used for storing BIGNUM values;
        - sizeOfWord() returning the size in bytes of a BigInt::Word;
        - nWords() returning the number of Words used by the current BigInt
          value;
          new at() member;
        - Word at(size_t index) returns the Word at 'index'.

  * The source header file of classes defining function templates and
    inline-members now have their template definitions in .f files, one .f
    file per function.
    This change was implemented to simplify function template and inline
    function maintenance, and to have source clas header files representing
    class interfaces as cleanly as possible.

  * Removed the man-page of the deprecated class Errno

  * All class-specific icmconf files were standardized (and cleaned)

  * NOTE:
        the way the linker handles required libraries has changed
        See, e.g.,

            http://fedoraproject.org/wiki/UnderstandingDSOLinkChange

        Due to this change programs depending on the bobcat may now require
        explicit specifications of libraries. Most likely the linke will come
        with a suggestion. The library libcrypto is a likely candidate for
        explicit inclusion. If so, use -lcrypto when linking such
        depending programs.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Wed, 09 Oct 2013 17:50:04 +0200

bobcat (3.16.00)

  * Re-implemented process/analyzecommand.cc, improving the wait it handles
    escaped characters and quoted and double quoted strings.

  * Added additional demos to the process man-page.

  * Added the static member Exception::protection to the Exception class.

  * Gzipped files in the provided documentation no longer contain internal
    time-stamps.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Fri, 13 Sep 2013 15:53:51 +0200

bobcat (3.15.00)

  * Added class IFilterStreambuf, implementing filtering like, e.g., openSSL
    BIOs.

  * Added class ISymCryptStreambuf and its base class
    SymCryptStreambufBase, implementing SSL-provided symmetric encryption and
    decryption using the IFilterStreambuf design pattern.

  * Added class IBase64Streambuf and its base class Base64StreambufBase,
    implementing base64 encoding and decoding, using the IFilterStreambuf
    design pattern.

  * Added class IBase64Stream, using a IBase64Streambuf for its
    std::streambuf.

  * Added class ISymCryptStream, using a ISymCryptStreambuf for its
    std::streambuf.

  * Added class DiffieHellman, implementing Diffie-Hellman shared key
    computations.

  * Added the internal use only class FBB, to contain structs, enums, etc.
    that are used by other Bobcat classes.

  * Added new constructors to BigInt initializing BigInt values from a series
    of characters or from a std::string.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Mon, 26 Aug 2013 15:16:13 +0200

bobcat (3.14.00)

  * Syslogbuf and SyslogStream received an overhaul, adding several new
    members.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Fri, 10 May 2013 11:30:50 +0200

bobcat (3.13.00)

  * Added new member CGI::param1

  * Updated CGI documentation

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Thu, 25 Apr 2013 16:42:05 +0200

bobcat (3.12.00)

  * Added class Exception, obsoleting class Errno.

  * All occurrences of Errno in Bobcat were replaced by Exception

  * The class tt(BigInt) received several new member diophantus (for long long
    values and BigInt values). See the bigint(3bobcat) man page for details.

  * Added new class PrimeFactors, factorizing BigInt values.

  * Added missing OFdStreambuf::pSync member.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Sun, 24 Feb 2013 13:09:38 +0100

bobcat (3.11.01)

  * Repaired incorrect #include "../gs/gs" in glob/glob

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Sat, 27 Oct 2012 16:02:58 +0200

bobcat (3.11.00)

  * Added OFdStreambuf constructor and open member expecting a std::string
    const & defining the name of the stream to receive the filtered
    information.

  * Glob offers an additional constructor allowing users to specify the type
    of directory entries they are interested in (e.g., DIRECTORY,
    REGULAR_FILE, or any bitor-ed combination. The flags defined in Bobcat's
    Stat class are identical to those that are available in Glob.

  * Glob now uses the pimpl design with all its public members.

  * Several man-pages were updated, mostly textual corrections.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Sat, 27 Oct 2012 12:14:35 +0200

bobcat (3.10.01)

  * Library constrction scripts cleanup so it supports environment variables:
    LDFLAGS, CPPFLAGS, CXXFLAGS and CXX

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Sun, 22 Jul 2012 13:58:01 +0200

bobcat (3.10.00)

  * Added class Signal, allowing context to be used by programs receiving
    signals.

  * Added to the class User members (egroupid, euserid) to retrieve the
    effective group and user-ids and a member (inGroup) to determine whether
    the user is a member of a specified group.

  * Added to the class Stat a member (access) returning true if specified
    read, write and/or execute permissions are granted for a provided
    FBB::User object.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Thu, 28 Jun 2012 22:29:46 +0200

bobcat (3.01.00)

  * Repaired a bug in DateTime: its dstCorrection(bool *ok) member failed to
    set the ok boolean to true if the localime_r performed correctly.

  * According to the man-page localtime_r does not assume that tzset(3) has
    been called, but leaves this to the calling program. Localtime_r's
    man-page states:
        For  portable  code  tzset  should  be  called before localtime_r().
    DateTime::dstCorrection(bool *) now calls tzset before calling
    localtime_r.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Mon, 14 May 2012 11:43:08 +0200

bobcat (3.00.02)

  * Cosmetic split of configile/beginre.cc into two sources, one holding the
    deprecated member ConfigFile::begin, the other one holding
    ConfigFile__::begin.

  * All classes that may throw Bobcat's Errno exceptions now include
    bobcat/errno in their class-level header files.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Thu, 10 May 2012 13:50:36 +0200

bobcat (3.00.01)

  * Re-added deprecated classes and members that were removed in 3.00.00

  * Old references to ...bobcat2 in icmake files replaced by references to
    ...bobcat3

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Mon, 07 May 2012 17:08:51 +0200

bobcat (3.00.00)

  * Functionality deprecated in Bobcat < 3.00.00 has been removed. This
    includes the classes Msg (Use Mstream or Errno), the FnWrap* and ForEach
    templates (use lamda functions), and AutoPtr / RefCount (use
    std::shared_ptr or std::unique_ptr)

  * Arg/ConfigFile/ArgConfig now use the Bridge Design Pattern. Note that this
    requires (only once) all programs using Arg, ConfigFile or ArgConfig to be
    recompiled.

  * Added member int Arg::beyondDashes() returning the index of the first
    argument beyond a -- argument (or -1)

  * The 'repeat' function template was improved, now perfectly forwarding
    arguments to (member) functions repeatedly called by `repeat'.

  * Replaced climits constants by limits const-expressions

  * Added TempStream creating a temporary fstream

  * NOTE: programs depending on the Bobcat shared library most likely must be
    recompiled. Minor code modifications may be necessary if a program still
    used Bobcat's deprecated facilities, which are now removed from Bobcat.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Sat, 05 May 2012 16:50:58 +0200

bobcat (2.22.00)

  * Repaired bug in ArgConfig: following load() options in the config. file
    were (sometimes) not found.

  * ArgConfig option specifications may now have an optional : appended to
    them.

  * ConfigFile (and ArgConfig) may use \# in configuration files to specify a
    literal #. The \ is removed from the configuration line.

  * Code-cleanup of ArgConfig, adapted argconfig/driver's build script and
    provided an example config file.

  * Added missing parameters to ArgConfig's constructors in its man-page.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Mon, 16 Apr 2012 11:50:40 +0200

bobcat (2.21.01)

  * Replaced for_each calls by range-based for-loops

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Sat, 21 Jan 2012 16:52:00 +0100

bobcat (2.21.00)

  * Added new classes: Ranger and PtrIter, see their man-pages for details

  * Repaired a flaw in hash/hash, appearing with g++-4.7

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Sat, 07 Jan 2012 13:27:57 +0100

bobcat (2.20.02)

  * Using rang-based for loops where appropriate; minor cosmetic code changes

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Wed, 04 Jan 2012 13:20:29 +0100

bobcat (2.20.01)

  * Repaired bug in ReadLineBuf: object was incompletely initialized
    resulting in intermittendly occurring segfaults.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Sun, 04 Dec 2011 21:31:12 +0100

bobcat (2.20.00)

  * Redefined the implementations of the templates in bobcat/binops.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Thu, 03 Nov 2011 18:42:27 +0100

bobcat (2.19.01)

  * Repaired bug in BigInt::isqrt

  * BigInt's destructor called BN_clear, but should have called BN_free.
    Now repaired.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Mon, 10 Oct 2011 10:29:08 +0200

bobcat (2.19.00)

  * The 'BigInt' man-page was adapted to match the actual member and function
    prototypes mentioned in <bobcat/bigint>

  * Repaired a bug in size-test in BigInt::fromText

  * The 'binary_search' template was inadvertently dropped from Bobcat's
    classes and has been added again.

  * Environment variable name CPPFLAGS changed to CXXFLAGS

  * Updated README.class-setup overview of classes

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Thu, 22 Sep 2011 20:57:58 +0200

bobcat (2.18.00)

  * Added missing Stat::operator=(Stat const &other) member.

  * FnWrap* calls removed from the bobcat library: they are now superfluous as
    compilers support lambda functions. The FnWrap* classes remain available.

  * George Danchev observed that static const numeric datamembers (e.g.,
    size_t) using in-class initialization values cause compilation errors when
    all optimizations are switched off (-O0). These static const data members
    were replaced by enum values.

  * Added IfElse<bool, TrueType, FalseType> and LpromotesR<LeftType,
    RightType> class templates to bobcat/typetrait

  * The arithmetic operator function templates defined in bobcat/binops now
    support promotions for classes defining constructors allowing
    promotions.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Fri, 17 Jun 2011 10:32:38 +0200

bobcat (2.17.00)

  * In accordance with C++0x's prototype of move members Bobcat's move
    constructors and move assignment operators now all use 'Class &&tmp'
    parameter definitions (where Class should be replaced by the actual
    class name). Previously defined members specifying 'Class const &&tmp'
    were retained for backward compatibility, but also generate a `deprecated'
    warning when used from, e.g., a dynamic library. If such a warning is
    generated the program dynamically linking to the bobcat library only needs
    to be recompiled to get rid of the message.

  * Added new series of function templates in the bobcat/binops header file,
    making available all binary arithmetic operators for classes already
    defining (a subset of) the binary assignment operators. The command `man
    -e bobcat binops' provides the details.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Mon, 06 Jun 2011 14:35:52 +0200

bobcat (2.16.00)

  * Removed obsolete bobcatlcgen

  * All previously inline implemented virtual members are now defined as
    non-inline members, which should solve an issue with compilers on armel
    architecture which don't handle inline virtual members correctly.

  * The 'build' script now uses the -g option by default (set in
    INSTALL.im). To modify the g++ compilation options change the #define
    CPPOPT in INSTALL.im. By default it is set to "-O2 -g". To modify the
    flags `on the fly' set the environment variable CPPFLAGS to the compiler
    options to use. The options "-isystem tmp -Wall" are always used and
    should not be altered.

bobcat (2.15.02)

  * Replaced the auto_ptr in Log by a unique_ptr. Since both have equal sizes
    and are only used in compiled sources (not in inline functions) no
    recompilation of programs dynamically linking to bobcat is required wrt
    this change.

  * The Pattern static data members in the class Cidr are in some situations
    not properly initialized with g++-4.6. This, e.g., already happens when an
    empty main() function is linked against the Bobcat library. Although the
    Pattern objects are not properly initialized, their destructors are
    nonetheless called when the program ends, causing a segfault.  Static
    object initialization is a known protential source of problems, see, e.g.,
    to cause problem. See also
        http://www.parashift.com/c++-faq-lite/ctors.html#faq-10.15
    In the case of Cidr the problem was easily solved. Each of the two static
    Pattern members is only used in a single Cidr-member. Removing the static
    data members from the interface and defining them as static local objects
    in the member functions using them solves the problem.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Wed, 11 May 2011 14:26:49 +0200

bobcat (2.15.01)

  * Repaired flaw in fnwrap, emerging while compiling bisonc++

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Thu, 05 May 2011 09:35:15 +0200

bobcat (2.15.00)

  * New version repairs some flaws that became apparent with g++ 4.6.

  * Re-implemented FnWrap: its size has been halved, FnWrap::unary and
    FnWrap::binary act identically and are now in fact superseded by the
    function  FBB::context().

  * Added README.fnwrap to the set of README files, explaining the FnWrap's
    inner workings

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Mon, 02 May 2011 19:53:04 +0200

bobcat (2.14.00)

  * New class: Cidr verifying whether an IP4 address belongs to an IP4
    Classless Inter-Domain Routing (CIDR) address block.

  * New class: StringLine doing line instead of word extraction with
    operator>>.

  * Repaired bug in ConfigLine detected by Kees Visser on amd64 architectures
    causing string to throw an exeption with empty configuration file lines

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Sat, 05 Feb 2011 12:02:08 +0100

bobcat (2.13.00)

  * Repaired bug in Arg detected by George Danchev sometimes causing segfaults
    when an undefined long option is specified.

  * This line added after tagging, but part of 2.13.00: using
    std::unordered_map instead of std::map with Arg.

  * Moved public MailHeaders::const_hdr_iterator members from mailheaders.ih
    back to mailheaders

  * Cosmetic corrections to man-pages

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Wed, 02 Feb 2011 18:39:50 +0100

bobcat (2.12.00)

  * FreeBSD flavors lack the fntl flag F_DUPFD_CLOEXEC, so Process::operator|
    must use a work-around for that flag. The work-around is compiled into
    Process objects/code when the BOBCAT_DIY_CLOEXEC_ identifier has been
    defined. It is defined by default in process/process when the identifiers
    __FreeBSD_kernel__ or __FreeBSD__ are defined.
    As F_DUPFD_CLOEXEC has been defined by POSIX since 2008 it is possible
    that it will soon be defined by FreeBSD systems as well. The work-around
    adds an additional data member to the Process class. Since the data member
    is the last data member of Process objects it can easily be removed at a
    later stage when F_DUPFD_CLOEXEX becomes available for FreeBSD systems.

  * Lacking descriptions of some FBB::CGI members were added to the
    cgi(3bobcat) man-page.

  * The CGI class now uses a std::unordered_map, rather than a std::map

  * Process now supports IOMode::DIRECT

  * The file README.process-pipe (and support files process-pipe.odp and
    process-pipe.pdf) were added tot Bobcat's root direcory, describing the
    inner workings of Process's operator|.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Sun, 30 Jan 2011 14:51:48 +0100

bobcat (2.11.00)

  * Repaired bug in Process due to which single quoted process arguments
    were not correctly passed on to the child process

  * When using Process::IGNORE_ALL in combination with other Process:IOMode
    flags an std::invalid_argument exception is thrown

  * Removed all Errno insertable/throwable manipulator calls from Bobcat

  * Removed empty source file bigint/checked5.cc

  * IOStream(istream &, ostream &)'s constructor now also opens the IOStream
    object (as it always should have done)

  * OFdStreambuf and IFdStreambuf have a new member (int fd()) returning the
    File Descriptor. Their descructors are not defined inline anymore (but
    their implementations have not changed) and they have a new member
    (close()) closing the streambuf. Closed OFdStreambuf and IFdStreambuf
    objects can again be opened using open()

  * Updated several man-pages

bobcat (2.10.03)

  * Matthias Klose detected several bugs/omissions in Bobcat's  shared library
    construction. Now fixed.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Wed, 29 Dec 2010 17:14:06 +0100

bobcat (2.10.02)

  * ConfigFile's size() member was missing. Now repaired.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Sat, 25 Dec 2010 11:02:02 +0100

bobcat (2.10.01)

  * TableLines' default and move constructor and move assignment operator
    were accidentally put in the private section of their class. Now public.

  * Configfile's overloaded assignment operator used non const &
    argument. Repaired.

  * CmdFinderBase's overloaded assignment operator cannot be defaulted as it
    lives in the class's protected section. Added explicit implementation of
    the overloaded assignment operator.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Sun, 19 Dec 2010 21:29:26 +0100

bobcat (2.10.00)

  * Reorganized the class ConfigFile. It used inheritance the wrong way (it
    inherited to reuse its base class rather than the base class being reused
    (cf. Herb Sutter's Exceptional C++)) and it suffered from several other
    flaws. ConfigFile now also supports a move constructor and move overloaded
    assignment operator.

  * Repaired ArgConfig::longConfigOpt(string const &longOpt). It checked for
    the longOpt\b pattern, but \b matches also the - character as a word
    delimiter. Therefore, pattern xyz-pqr is matched when looking for pattern
    xyz. It's now using (\s|$) rather than \b.

  * Reorganized the class MailHeaders. It used inheritance the wrong way (see
    ConfigFile above).

  * In addition to the classes that have already been made move-aware, the
    following classes are now also move-aware: CmdFinderBase, CmdFinder,
    CGI. Hash, MailHeaders, Stat, TableSupport, TableLines, User (see also
    README.immovable).

  * The hash-containers (defined in bobcat/hash) now also support
    initialization by initializer lists.

  * The class Milter now uses an unordered_map instead of a map.

  * The -O3 compilation optimization flag is changed to -O2. G++ for the armel
    architecture produces an incomplete symbol table when -O3 is used.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Fri, 17 Dec 2010 14:18:33 +0100

bobcat (2.09.04)

  * Repaired ArgConfig::option(string *value, ...) members which didn't check
    for 0-pointers to the string receiving the option's value.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Mon, 06 Dec 2010 23:38:44 +0100

bobcat (2.09.03)

  * Repaired Arg::firstNonEmpty which didn't check for 0-pointers to the
    string receiving the option's value.

  * Reorganized man-pages to comply with include requirements of Yodl 3.00.0

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Sun, 05 Dec 2010 19:20:46 +0100

bobcat (2.09.02)

  * No 'virtual ~Mbuf() = default': destructor removed from Mbuf.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Thu, 04 Nov 2010 12:45:40 +0100

bobcat (2.09.01)

  * Mstream::id() now returns a long, rather than an int. See
    http://developers.sun.com/solaris/articles/ILP32toLP64Issues.html

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Wed, 03 Nov 2010 11:55:17 +0100

bobcat (2.09.00)

  * Added new classes ReadLineBuf and ReadLineStream reading the standard
    input using the Gnu readline library, wrapped inside, respectively, a
    streambuf and an istream. These classes require linkage to libreadline.
    The class ReadLineBuf is a singleton class.

  * Added new class ReadLineHistory allowing easy handling of the history
    accumulated by the ReadLineBuf class.  The class ReadLineHistory is a
    singleton class.

  * Virtual members of classes derived from std::streambuf were move to the
    the private section of the classes, making these classes more compliant
    with Liskov's Substitution Principle.

  * The 'sync' members of classes derived from std::streambuf can be called
    from derived classes using a protected 'pSync' member. The IOStreambuf
    class offers comparable protected 'pSeekoff' and 'pSeekpos' and 'pXsputn',
    allowing the seek and put operations to be performed on request
    by classes derived from IOStreambuf.

  * NOTE: Errno's virtual member what() will be moved to Errno's private
          section in a future release. The new public member 'why' should be
          used instead, or std::exception::what() should be used.

  * The class Msg is now deprecated. Classes Mstream (Message stream) and Mbuf
    (Message buf) have replaced Msg, and Msg's open members have moved to
    Errno. Msg will remain in Bobcat for a while, but will eventualy be
    removed. An error message is displayed (once) if Msg::msg() and
    Msg::open() are used.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Thu, 28 Oct 2010 20:17:50 +0200

bobcat (2.08.01)

  * Checked in overlooked repairs of hostent/destroy.cc and
    TableSupport::setCols.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Wed, 05 May 2010 11:13:47 +0200

bobcat (2.08.00)

  * >>>NOTE<<<: Due to a changed organization of the Table classes all
    software using the 2.07.04 shared library's Table and TableSupport classes
    needs to be recompiled.

  * Added new class TableBuf. A streambuf class allowing table constructions
    using std::ostream objects

  * Added new class (only used internally by Bobcat): TableBase, containing
    the common to TableBuf and Table

  * Added new class TableLines derived from TableSupport setting separating
    lines across rows/columns of tables

  * Reorganized the class TableSupport, moving members erroneously placed in
    in tablesupport.ih back to the tablesupport header file

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Tue, 04 May 2010 12:14:30 +0200

bobcat (2.07.04)

  * Virtual destructors cannot have default implementations. Added
    Fork::~Fork and TableSupport::~TableSupport

  * Repaired compilation problem in fnwrap/fnwrap appearing  with g++-4.5
    (using Debian 4.5-20100404-1)

  * fnwrap/fnwrap needs std::move calls where lvalue references are passed to
    rvalue references, as templates do not automatically perform the
    conversion from lvalue refs to rvalue refs.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Fri, 09 Apr 2010 08:58:49 +0200

bobcat (2.07.03)

  * Repaired additional bugs in String::unescape; unescape only allows \x, \X
    is no longer accepted (and was not according to the standard), \0 not
    followed by octal numbers is now recognized as a 0-byte.

  * Multi-parameter constructors of Arg::LongOption no longer use default
    arguments to allow the use of initializer lists, added the explicit
    constructor Arg::LongOption(char const *name)

  * Added missing #include<cstring> to localsocketbase/localsocketbase.ih

  * Pattern now defines the default end pattern (pattern/pattern0.cc) as
    "\\b" for the benefit of MAC users who otherwise suffer from the `empty
    sub-expression' error. This affects ConfigFile and (by implication)
    programs like XD. It has no known effect on Debian systems.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Fri, 19 Mar 2010 15:37:02 +0100

bobcat (2.07.02)

  * Repaired a bug in converting escaped hexadecimal characters in
    String::unescape, reported by Richard Berendsen.

  * The FnWrap example is now about FnWrap, not anymore about FnWrap2c

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Wed, 24 Feb 2010 08:33:51 +0100

bobcat (2.07.01)

  * Minimized class FnWrap's member access rights. FnWrap's inner organization
    improved. Instead of creating nested FnWrap1 and FnWrap2 objects
    inheritance is used. Also, all function template implementations were
    moved to below the class interface.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Mon, 15 Feb 2010 12:42:49 +0100

bobcat (2.07.00)

  * TypeTrait now supports tests for rvalue reference types.
  * FBB::insertable and FBB::throwable are no longer required when using Errno
  * The gptr() < egptr() checks in underflow() functions (IFdStreambuf and
    Randbuffer) are superfluous and have been removed.
  * DateTime's man-page contains a caveat for setMonth.
  * Fswap's man-page BUGS section is augmented with a warning against swapping
    streams.
  * Bobcat's main man-page received an entry referring to the TypeTrait class
    template.
  * Repaired cgi/push.cc and cgi/accept.cc
  * New class: FBB::FnWrap, easier to use than and providing all the features
    of FnWrap[12]c?. See its man-page for details.
  * Not-implemented constructors and functions, previously flagged with the
    // NI comment, are now using '= delete'. Likewise, implementaitions of
    explicitly implemented empty default constructors were removed and
    replaced by '= default'. Some con- and destructors were kept due to
    non-public access. The added destructors were defined in source files, and
    not in-line to localize the class's Vtables with the destructor's source
    files.
  * Compilation of, e.g., Glob::operatorassign.cc produces a warning in
    g++-4.4. This warning disappears with g++-4.5 and is therefore ignored.
  * Sources also compile fine with g++-4.5

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Sat, 13 Feb 2010 15:30:43 +0100

bobcat (2.06.00)

  * Added BigInt::isqrt (integral sqrt computation)
  * Added BigInt::swap (swapping the current BigInt object's value with
    another BigInt object's value
  * BigInt's members not modifying the current object are now const-correct.
  * In addition to members modifying a BigInt object new members were added
    not modifying the current object but returning a temporary BigInt const
    object holding the result of the computation. All members returning a
    BigInt const object have an additional c added to their names (e.g. `div'
    modifies the current object, `divc' does not).
    As a result of this name standardization the names of several members were
    modified:
        `gcd' now modifies the current object, `gcdc' returns a BigInt const.
        `inverseMod' now modifies the current object, `inverseModc' returns
                                                               a BigInt const.
  * Added template function fswap, performing fast swapping operations.
  * The class Glob is now move-aware (offers move constructor and move
    assignment operator. In addition it offers a swap member.
  * Move members in Pattern expect 'Pattern const &&', Pattern offers swap.
  * Hostent now is now move-aware and offers a member swap.
    Included Hostent in the namespace FBB.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Fri, 27 Nov 2009 08:49:24 +0100

bobcat (2.05.00)

  * BigInt values inserted into streams do not show leading zeroes anymore,
    except for octal values.
  * BigInt values can be assigned a value from a textual representation
  * BigInt values can be extracted from std::istream objects.
  * BigInt::inverseMod() and BigInt::gcd() are now member functions rather
    than free functions.
  * BigInt::setBigEndian() is now a static member function. In general: all
    members returning a BigInt computed from a set of arguments and not
    requiring an existing BigInt object are defined as static members.
  * Added MD_CTX initialization and cleanup calls to DigestBuf
  * Added MD_CTX initialization call to HMacBuf

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Wed, 23 Sep 2009 15:32:48 +0200

bobcat (2.04.02)

  * DateTime: DST updated by setXXX() members as well.
  * EncryptBuf/DecryptBuf now correctly set keylength
  * EncryptBuf's manpage shows key/block sizes in bytes and provides an
    illustration showing how to discard initial bytes (commonly used with RC4)
  * DecryptBuf's requirement of non-empty IV vector has been dropped
  * Repaired Debian bug #546374, reported by Stefan Ebner

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Sun, 13 Sep 2009 11:38:18 +0200

bobcat (2.04.01)

  * Some OpenSSL functions (HMAC, Digest) needed unsigned 'int *'s. They got
'size_t *s' causing problems on 64-bit archs (e.g. amd64). Now fixed.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Fri, 04 Sep 2009 23:48:22 +0200

bobcat (2.04.00)

  * BigInt has been enhanced and extended. Many members have received new
    prototypes.
  * New Class: OHexStreambuf, streambuf derived class writing characters
    received by it as hex numbers to a specified std::ostream.
  * New Class: DigestBuf, streambuf derived class computing various types of
    message digests of the characters received by it.
  * New Class: HMacBuf, streambuf derived class computing a HMAC hashvalue
    of the characters received by it.
  * New Class: EncryptBuf, streambuf derived class encrypting the characters
    received by it, writing the encrypted information to a specified
    std::ostream.
  * New Class: DecryptBuf, streambuf derived class decrypting the encrypted
    information received by it, writing the decrypted information to a
    specified std::ostream.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Wed, 02 Sep 2009 20:41:06 +0200

bobcat (2.03.00)

  * Bobcat is compiled by g++ --std=c++0x.
  * Stat::modeStr() bug repaired due to which it always showed rwxrwxrwx
  * Removed deprecated getPid() member from Fork
  * Removed deprecated get...Fd() members from Pipe
  * Removed deprecated get...Fd() members from Selector
  * Selector's setAlarm() member performs a validity check on the specified
    alarm time
  * Selector's wait() member handles no-alarm specifications correctly (i.e.,
    according to the description in the select(2) man-page.
  * Redirector has a new member: through()
  * IFdStreambuf::xsgetn() was reimplemented to allow unformated reads from
    std::istream (and IFdStream) objects without referring to underflow.
  * InetAddress has new members sockaddr_inPtr() returning pointers to its
    sockaddr_in data member.
  * Repaired bugs in DateTime constructors accepting strings, redefined many
    of DateTime's functionality, see its man page.
  * (Almost) all unary argument constructors now `explicit'
  * Constructors that can safely throw exceptions, rather than using `verify'
    do so from now on. The `verify' member remains, albeit empty,  available
    in the class interfaces.
    Affected classes: Glob, OneKey, User, Pipe, SocketBase, XPointer
  * Classes for which a move constructor is useful received a move
    constructor. Currently: AutoPtr, Glob, Pattern,
  * insert and extraction operators (operator<<, operator>>) are now defined
    within the namespace FBB and no longer in the std namespace (except for
    operator<< defined int msg/msg which is in std::)
  * Added BigInt as the first (optionally added) class depending on OpenSSL.
    The plan is to add more openssl-based classes in the (near) future. BigInt
    wraps OpenSSL's unlimited precision number feature implemented by
    OpenSSL's BN_ functions.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Wed, 22 Jul 2009 17:37:27 +0200

bobcat (2.02.03)

  * Missed another EOF in MultiStreambuf. Now repaired.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Wed, 06 May 2009 10:36:22 +0200

bobcat (2.02.02)

  * Repaired incomplete initialization bug in SocketBase

  * Added Fork::prepareDaemon() performing common actions when starting a
    daemon child process.

  * Repaired DST and extraction bugs in DateTime

  * OFoldStreambuf's inheritance tree now places the OFilterStreambuf ahead of
    the std::ostream class to prevent strange run-time problems on Macs.

  * New (static) members: OFoldStream(buf)::leftMargin(),
    OFoldStream(buf)::rightMargin()

  * OFoldStream::open() members do not close the foldstream (actually,
    they didn't do that, but the man-page wrongly suggested they did close the
    stream).

  * Cosmetic changes to INSTALL, INSTALL.im and icmake/install

  * Replaces and extends intermediate release 2.02.01 only made available at
    SourceForge

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Fri, 03 Apr 2009 16:29:47 +0200

bobcat (2.01.1)

  * The manipulator FBB::FATAL (cf. man -e bobcat log) now throws an
    Errno exception (Errno(1)) as per the log man-page, and doesn't call
    exit(1) anymore.

bobcat (2.01.0)

  * Included  cstdio in all .ih files of classes using EOF (required for g++
    4.4)

  * Moved Table::Element's constructor back to the <table> header file
    (required for Table::push_back()).

  * Added Log member level() retrieving the currently set loglevel.

  * Added Log member instance() as a (preferred) alternative for
    getInstance().

  * LogBuffer::overflow() now has protected access rights.

  * Stat's lastAccess(), lastChange(), and lastModification() members now
    return DateTime objects representing the times in UTC.

  * New class: LC, template class to define and/or declare Local Context
               structs to be used with the FnWrap[12]c classes (cf man -e
               bobcat lc as well as the FnWrap[12]c man pages)

  * Added program `bobcatlcgen' generating a file defining the template class
               LC for a configurable maximum number of fields of the local
               context structs (cf. man -e bobcatlcgen)

  * New class: OFilterStreambuf, std::streambuf specialization implementing an
               ostream filtering design pattern (cf man -e bobcat
               ofilterstreambuf)

  * New class: OFoldStreambuf, OFilterStreambuf specialization folding long
               lines to lines having configurable left and right margins (cf
               man -e bobcat ofoldstreambuf)

  * New class: OFoldStream, wrapper class around OFoldStreambuf (cf man -e
               bobcat ofoldstream)

  * New class: lm, implementing a manipulator for OFoldStreams setting their
               left margin (number of indented blanks) (cf. man -e bobcat lm)

  * New class: mlm, implementing a manipulator for OFoldStreams modifying their
               left margin (cf. man -e bobcat mlm)

bobcat (2.00.1)

  * George Danchev detected a compilation problem in ArgConfig's option3.cc:
    On amd64 size_t doesn't match the U postfix for numeric constants
    (e.g. 0U) It was repaired by defining a static size_t const zero = 0;

bobcat (2.00.0)

  * Upgrading to version 2.00.0 as many classes have over time received API
    and ABI changes.

  * Repaired flaws in and extended/rebuilt the class DateTime. Consult its
    man-page for the current API.

  * Deprecated members from other classes (see bobcat's 1.21.1 changelog)
    were removed.

  * `build install' no longer zip-compresses the html versions of the man
    pages, as per the Debian debhelper dh_compress man page.

  * Hm.... ArgConfig was added to the source tree in 1.21.1, but apparently
    I forgot to add it to the library. Now repaired.

bobcat (1.21.1)

  * Several man-pages were updated/modified (Config, Log, Process, User, X2a)

  * ConfigFile:
        added `std::string const &operator[](size_t idx) const' to the
    interface offering a basic protection against accidentally modifying
    the configuration file's lines by clients;
       added member std::string findKeyTail(std::string key, size_t idx = 1)
    returning the contents beyond key of the idx-th line containing key.

  * Process: this class received an extensive overhaul resulting in multiple
    new members. See the Process man-page for details. Several of its former
    constructors and members are now deprecated and will be removed in a
    future release. Existing sources defining Process objects and the shared
    Bobcat library must be recompiled as the data member organization of
    Process has substantially been changed. Again consult the Process man-page
    for details.

  * Msg: added member open(ofstream &out, std::string const &name, size_t
    protection) opening an ofstream using a specified protection mode.

  * DateTime: TriVal's UNKNOWN value was changed; rfc2822() now correctly
    represents the difference between UTC and local time, allowing for DST.

  * The deprecated Arg::getInstance() member was removed. Arg::instance()
    should be used instead.

  * Added the new class ArgConfig combining the facilities of the Arg and
    Config classes.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Sun, 26 Oct 2008 15:46:42 +0100

bobcat (1.20.1)

  * Removed left-over cout stmnts from DateTime members

bobcat (1.20.0)

  * Removed deprecated members from String, removed the std::string base class
    from String

  * Moved inline private members to their internal header files where
    possible. Users of those classes will never need these inline members, so
    they can be used from the class interface, thus speeding up compilations.

  * Removed exception thrown from constructors of the following classes:
    Arg, Glob, OneKey, Pipe, ServerSocket, SocketBase, User, Xpointer

    Except for the classes Arg and ServerSocket these classes now define a
    public member 'verify()' which should be called following the construction
    of objects of these classes before using any other of their members. The
    verify() member throws the Errno exception if the object could not
    properly be constructed. As a safeguard verify() is also called from the
    classes' destructors, but in some programs that might be rather late,
    causing surprise for the program's users.

    The man-pages are updated accordingly.

    EXISTING PROGRAMS using the classes Arg, Glob, OneKey, Pipe, SocketBase,
                      or User should be recompiled, as the data-organization
                      of objects of these classes has changed. Xpointer's data
                      organization was not altered.
    To find all source (text) files using the above classes the script
    scripts/check1.20.0 could be used.

  * Added missing namespace declarations to glob/driver/driver.cc

  * Repaired reporting the argv-argument before an undefined option instead of
    the undefined option itself as in, e.g.,
        tmp/bin/xd --verbose -tm
        ArgData::ArgData(): unknown option: --verbose
    or:
        tmp/bin/xd -tm
        ArgData::ArgData(): unknown option: tmp/bin/xd

  * Removed 'throw()' lists from various functions and man-pages (except
    from several Errno members, as their throw() lists are required
    by Errno's std::exception base class

  * Removed inline in inline virtual ~Errno() (needed because of a previous
    bug in g++, which has now been repaired)

  * Added missing mode() and specialMode() functions to Stat, and added info
    to the stat manpage indicating what fields of the 'struct stat' are
    returned by specific accessor members.

  * Added DayTime::setWeekday() member to DateTime to alter dates based on the
    day of the week. DateTime's man-page adapted accordingly.

bobcat (1.19.0)

  * Added the template function binary_search that returning iterator to the
    location of a found element rather than a bool value (as returned by the
    std::binary_search algorithm) telling its caller whether the searched for
    element is present or not

  * The Process class was given additional functionality allowing better
    control over the way child processes are started and the Process man-page
    was updated accordingly

  * The description of the member `header()' in the man-page of the class
    Milter was improved

  * CGI's man-page now contains a common organization of a program using
    a CGI object

bobcat (1.18.1)

  * Repaired a flaw in Pattern due to which a segfault could occur becasue of
    a failure to initialize the Finite State Automaton processing Perl-like
    character-set abbreviations. Also the HANDLING OF BACKSLASHES by Pattern
    objects was modified: to specify a literal backslash is must now be
    specified twice.
    NOTE that this change *may* require some maintenance of patterns that were
    hard-coded in programs already using the Pattern class. See the `pattern'
    man-page for details.

  * Removed all left-over redundant include guards

  * Renamed all identifiers (macro defines, etc.) that started with _ into
    names not starting with _. This only affects include-guard identifiers and
    symbols used internally, so programs using Bobcat should not be affected
    by this modification.

  * Added the files README.X11 and README.milter

  * Several members of FBB::State were not documented in the bobcat/stat
    man-page: missing documentation is now included (TODO).

  * Added the class CGI processing forms submitted using the Common Gateway
    Interface

  * Added for_each() and repeat() function templates (and their man-pages)

  * Reorganized the main bobcat man-page, adding a categorization of Bobcat's
    classes

bobcat (1.17.2)

  * Arg's constructors changed in accordance with the new (?) getopt()
    function: missing option arguments are now properly recognized and no
    longer confused with `unknown options'

  * The Table man-page incorrectly listed `Table const &' as its second
    argument. The modifier `const' is incorrect as the insertion may imply
    the addition of empty elements to the table in order to make it
    rectangular. The `const' modifier was removed from the man-page.

bobcat (1.17.1)

  * Removed Wrap* wrappers from Bisonc++. Use FnWrap* instead.

  * Added member rfc2822() to DateTime returning the time according to
    RFC 2822 (e.g., as displayed by the `date -R' command.

  * Partial construction and installation of the Bobcat library is now
    supported via #defines in INSTALL.im

  * Minor modifications to satify g++4-3's #include requirements

  * TEMPORARILY suppressed the `deprecated header warning' resulting from
    using ext/hash_map in bobcat/hash. The fix is a kludge: the warning is
    suppressed by defining the backward warning include guard identifier just
    prior to including ext/hash_map and by undefining it thereafter.

bobcat (1.17.0)

  * Repaired double free bug in Pattern

  * Changed the implementation and interface of MailHeaders. See 'man -e
    bobcat mailheaders' for details

  * Process::init() member removed. setCommand() added, and constructors no
    longer call the process start() member. They shouldn't as start() forks,
    and forking an object that isn't constructed yet seems to be
    inappropriate. The open() call in init() is now placed in
    start(). Therefore the correct sequence becomes:
    Process(), start(), ...(insert/extract)..., stop(). Process::operator=()
    now performs: stop(), setCommand(), start(). Multiple stops() could be
    given, so ... stop(), operator=(), ... is acceptable.
    The Process man-page is updated accordingly.

  * The DateTime class has been enlarged. It now contains members to reassign
    individual time components as well as members to compare the (in)equality
    of the times represented by two DateTime objects. Trailing \n is not
    inserted anymore if a DateTime object is inserted into an
    ostream. Operators +, -, += and -= for DateTime rvalues removed, since a
    date is an interval scaled data type. It is, however, possible to add or
    subtract seconds (or even struct tm structs) and to add/set values to
    individual DateTime components.

  * Implemented lastFail() members in A2x and X2a. See the respective
    man-pages.

bobcat (1.16.1)

  * The `build' script `library' command bow has an additional optional
    argument `strip' to strip the shared library. By default the library is
    not stripped.

bobcat (1.16.0)

  * Leftover `String' in string/unescape replaced by `std::string'.

  * Added missing A2x.to<Type>() member template to A2x (cf. C++ Annotations).

bobcat (1.15.0)

  * The Glob constructor no longer requires a static_cast when multiple flags
    are specified for its second argument.

  * The TableSupport class's vline(col) member now writes separator[col] to
    the output stream if it is available. If it is not available, no action is
    performed. Similarly, vline() now writes the trailing separator as well as
    a newline character. This is a more natural default behavior of
    TableSupport.

  * The Milter class interface  was adapted to libmilter-dev 8.14.1-2,
    affecting milter/milter and milter/initialize.cc.

bobcat (1.14.2)

  * Added (still) missing headers to glob.ih, log.ih and tablesupport.ih
    required for proper compilation with g++ 4.3

  * The ServerSocket is created with the option SO_REUSEADDR, allowing servers
    to be restarted immediately following a shutdown of the server.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Fri, 13 Apr 2007 12:05:11 +0200

bobcat (1.14.1)

  * Member function template implementations consisting of a single line of
    code were given the `inline' specification.

  * The classes Table and TableSupport were redesigned. Their public and
    protected interfaces changed substantially.

  * Classes TableSpec, EqualWidth and ColumnWidth were developed for use with
    the Table class only. They are obsolete and were removed from the Bobcat
    library.

  * Added a new class Align allowing users to specify alignment of columns or
    elements of Table objects.

  * Added a support script contrib/c_conf contributed by Karel Kubat
    (karel at e dash unity dot org)

  * Included several missing header files fixing gcc/g++ 4.3 problems

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Wed, 28 Mar 2007 14:22:16 +0200

bobcat (1.13.1)

  * All function/member/constructor throw() specifications removed, following
    Sutter & Alexandrescu's suggestions (except where required by external
    classes, like std::exception.

  * RefCount's header missed `public:'. Repaired, thus making relase() et
    al. public members, conform the RefCount manual page.

  * Added template class `AutoPtr'

  * Added template classes FnWrap1, FnWrap1c, FnWrap2, FnWrap2c, obsoleting
    Wrap1, Wrap1c, Wrap2, Wrap2c. Classes previously depending on the Wrap*
    classes were modified accordingly: they now use FnWrap*

bobcat (1.12.1)

  * inline virtual destructors have an explicit `inline' mentioned in their
    class interfaces to prevent compilation problems caused by a small g++
    (4.1.2) bug.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Thu, 30 Nov 2006 13:26:52 +0100

bobcat (1.12.0)

  * All classes have their inline-functions moved out of the interface. They
    are now implemented inline below the interface itself.

    X2a now has a copy constructor and an overloaded assignment operator

    A2x now has a copy constructor (which was announced in the man-page, but
    was never implemented).

    Table's functionality has been enlarged. Consult its manpage for details

    Redirector's `accessVia' member is now deprecated. Instead `swallow'
    should be used.

    The String class's object member functions are now deprecated. Instead
    static member functions have been defined offering the same
    functionality.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Wed, 15 Nov 2006 19:25:49 +0100

bobcat (1.11.0)

  * The classes Wrap1c, Wrap2 and Wrap2c were fully generalized, now accepting
    any combination of reference, pointer, const reference or const pointer
    argument types for both the function called from their operator()()
    function call operator and (with Wrap1c and Wrap2c) the local context
    struct. Since this results in an extension of the class's API, I upgraded
    to the next subversion. Since the Wrap* classes are templated classes, the
    library hasn't changed, and all programes previously compiled against
    libbobcat1 should continue to run without any required maintenance.

    The man-pages were updated accordingly.

    The icmake-script was updated so that it runs on both icmake 6.xx and the
    upcoming icmake 7.xx release.

    Started to move inline definitions of members to below the class
    interface. Done for a2x and datetime.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Sat, 14 Oct 2006 14:47:37 +0200

bobcat (1.10.2)

  *  Andreas Jochens noted a build-problem for xpointer/get.cc on amd
    architectures and kindly provided a patch changing the definition
        size_t keys
    into
        unsigned int keys.
    His patch was applied to this bobcat version.

  *  Added the file README.optimization describing why the compiler option
    -O3 is used.

  *  INSTALL.im redefines default DOC and DEVDOC locations to, resp.

        BASE  = "/usr";
        DOC  =      BASE + "/share/doc/libbobcat1";
        DOCDEV  =   BASE + "/share/doc/libbobcat1-dev";

  * Removed installation of `lintian overrides' from icmake/install

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Thu, 31 Aug 2006 15:18:45 +0200

bobcat (1.10.1)

  *  Some leftover Academic Free License references were replaced by GPL
     references.

    The previously used scripts below make/ are obsolete and were removed from
    this and future distributions. Icmake should be used instead, for which a
    top-level script (build) and support scripts in the ./icmake/ directory
    are available. Icmake is available on a great many architectures. See the
    file INSTALL (and INSTALL.im, replacing the previously used INSTALL.cf)
    for further details.

    Various source adaptations were realized (SF: superfluous):
        All plain `unsigned' variables were changed to `size_t'
        datetime: changed include time.h into include ctime
              removed SF include iostream from
                    datetime/operatorminusis2.cc
                    datetime/operatorminusis3.cc
                    datetime/operatorminusis.cc
                    datetime/operatorplusis2.cc
                    datetime/operatorplusis3.cc
        fork: changed int d_pid into pid_t pid, various files, manpage adapted
        gethostent: changed `hostent *' into `struct hostent *' in
                    gethostent.cc
        iostream: removed SF #include iostream from clear1.cc
        localclientsocket/localclientsocket: datamember SF
        localclientsocket/localclientsocket.ih: added includes for connect(2)
        localserversocket/localserversocket.ih: updated required includes
        mailheaders/read.cc: removed SF include iostream
        multistreambuf/multistreambuf: removed SF include iostream
        pattern/convert.cc: removed SF includes iostream and iomanip
        process/parentredirections.cc,stop.cc: removed SF include iostream
        selector/selector: including sys/select.h according to POSIX rather
                            than includes using earlier standards.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Tue, 26 Jul 2006 18:16:42 -0800

bobcat (1.10.0-1) unstable; urgency=low

  *  License changed to the GNU GENERAL PUBLIC LICENSE. See the file
    `copyright'.

    Introduced George Danchev <danchev@spnet.net> as uploader

    CmdFinder now properly clears beyond() when using mode USE_FIRST

    From now on this file will contain the `upstream' changes. The Debian
    related changes are in changelog.Debian.gz

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Tue, 18 Jul 2006 21:38:21 +0200

bobcat (1.9.0) unstable; urgency=low

  * Following suggestions made by George Danchev, this version was compiled by
    the unstable's g++ compiler (version >= 4.1), which unveiled several flaws
    in the library's class header files. These flaws were removed (i.e.,
    repaired).

    In order to facilitate compiler selection, the compiler to use is defined
    in the INSTALL.cf file.

    The debian control-files (i.e., all files under the debian subdirectory)
    were removed from the source distribution, which is now also named in
    accordance with the Debian policy. A diff.gz file was added.

    At the contents level: the class ConfigFile was extended with two
    overloaded members index(), returning line offset of the original
    configuration file associated with a particular line that may be retrieved
    from the ConfigFile object itself.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Tue,  4 Jul 2006 21:17:56 +0200

bobcat (1.8.0) unstable; urgency=low

  * make/install script slightly modified: header files are copied before the
            compilation starts to prevent unavailable header files.
    Added the following classes:
        * CmdFinder and CmdFinderBase: CmdFinder is a class handling
                command-lookup and command-function associations
        * OneKey: Objects of the class OneKey allow single-keystroke input (not
                requiring `Enter' to be pressed.
        * RefCount: Base class allowing its derived classes to share their
                memory, using reference counting.
    Modified the layout and contents of the file README.class-setup to improve
    the current class organization's representation.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Mon, 26 Jun 2006 08:42:18 +0200

bobcat (1.7.1) unstable; urgency=low

  * Bobcat now `lintianized'. The libraries are now in the libbobcat1 and
    libbocat1-dev packages. The package's info has been upgraded. Note that
    packages depending on bobcat (e.g., stealth and bisonc++) require an
    upgrade as well.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Fri, 26 May 2006 15:02:22 +0200

bobcat (1.7.0) unstable; urgency=low

  * milter and xpointer are included optionally. `make/library all' includes
    them automatically

    New class Indent and associated manipulators implementing indentation
    defined.

    ofdstreambuf and ifdstreambuf constructors have additional parameters to
    either close or keep open the file descriptor that is passed to the
    constructor. The default situation is for ofdstreambuf to close the file
    descriptor and for ifdstreambuf to keep de file descriptor open. Thus the
    new implementation is backward compatible with earlier bobcat versions.

    Msg has a new free function msgstream() returning the not-cleared msg()
    stream. This allows certain STL algorithms to be used, see `man -e bobcat
    msg'

    wrap1c and wrap2c now also accept const contexts; see, e.g., `man -e
    bobcat wrap1c'. Errors in wrap2c's template definition repaired.

    ConfigFile now has additional members beginRE() and endRE(), allowing
    iterators to produce all lines matching a RE.
    Repaired ConfigFile in accordance with the man-page:
        initial ws are now removed from the stored lines,
        find(target): `target' may be found anywhere within a configuration
                      line.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Tue,  2 May 2006 19:31:02 +0200

bobcat (1.6.0) unstable; urgency=low

  * minor repair in Pattern- and Selector manpages

    added MultiStrambuf, IOStreambuf, IOStream: see the manpages for details.

    redesigned Process: insertions insert to the child process, extractions
    extract from the child process. STDOUT and STDERR can or cannot be
    merged. See the man-page for details.

    redesigned Arg: same functionality as before, but allows for multiple
    specifications of options, also those having arguments. When multiple
    options having arguments are specified, each individual argument is
    retrievable.

    added string::escape()

    `get...' accessors removed from all classes, (Arg, Fork and Pipe)
    Old names are kept for the time being.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Mon, 26 Dec 2005 19:04:24 +0100

bobcat (1.5.0) unstable; urgency=low

  * The general bobcat manpage did not have links to wrap1c and wrap2c. Now
    Repaired.

    The Log-class interface is modified. See the man -e bobcat log manpage for
    details. The main difference is that a static initialize() member is now
    used to define the static Log-object. Also, logs may be written to stdout
    using a simpler specification than before. The Log class also supports an
    open() member, allowing you to open a local Log object after its
    construction.

    Added the class Milter, offering a C++ interface to the (sendmail)
    libmilter API. This class uses the `virtual constructor' Design Pattern to
    prevent the need for saving and accessing private connection based data
    using the libmilter api smfi_setpriv() and smfi_getpriv(). See `man -e
    bobcat milter' for details.

    Added the class Xpointer, setting and retrieving the X-windows pointer
    coordinates.

    With the shared object library, functions from both libmilter and libX11
    must be available before a program can be fully linked. To prevent
    unnessary linking to these libraries, required dummy C functions were
    added to the bobcat library. When using libmilter and/or libX11, that
    these libraries should be mentioned to the linker before libbobcat.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Thu,  8 Dec 2005 20:52:44 +0100

bobcat (1.4.0) unstable; urgency=low

  * 1.4.0 and beyond: compiled with g++-4.0 compiler series.
    Minor modifications in the log/log and level/level header files:
        ::operator<<() changed into operator<<()

    Further support of the 1.2.x series is discontinued

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Fri, 18 Nov 2005 21:44:13 +0100

bobcat (1.2.1) unstable; urgency=low

  * added missing constructor description in the Pattern manpage
    removed leftover cerr insertion from localserversocket::listen()

    defined default localsocketbase constructor.
    added /bobcat/localsocketbase/open.cc

    defined default localserversocket constructor.
    removed /bobcat/localserversocket/localserversocket1.cc
    added /bobcat/localserversocket/open.cc

    defined default localclientsocket constructor.
    defined LocalClientSocket::open()

    Pattern missed some throwlists in its implementations. Repaired.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Thu, 17 Nov 2005 14:05:26 +0100

bobcat (1.2.0) unstable; urgency=low

  * Added the following classes:
    localsocketbase     - base class for unix domain sockets
    localserversocket   - defines server for unix domain sockets
    localclientsocket   - defined client for unix domain sockets
    randbuffer          - std::streambuf producing random numbers
    irandstream         - istream producing random numbers
    mailheaders         - handles SMTP mail message headers

    Repaired incorrect header inclusion in datetime.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Fri, 11 Nov 2005 16:47:31 +0100

bobcat (1.1.2) unstable; urgency=low

  * Repaired -I statement in make/parameters, and changed tmp/inc into
    tmp/bobcat (repairs resulting from feedback by Vincent Hecht)
    Changed the ordering of the classes tablesupport and tablespec
    in CLASSES

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Thu,  8 Sep 2005 19:40:43 +0200

bobcat (1.1.1) unstable; urgency=low

  * Removed the compilation dependency on `icmake'. See INSTALL for
    instructions about how to compile and install bobcat yourself, rather than
    using the binary distribution

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Sat,  3 Sep 2005 16:47:24 +0200

bobcat (1.1.0) unstable; urgency=low

  * Added the following classes:

       FBB::ClientSocket: a socket for tcp-communication with a server.
       FBB::columnWidth: Manipulator class for the class Table.
       FBB::DateTime: Manipulations with date and time values.
       FBB::equalWidth: Manipulator class for the class Table.
       FBB::GetHostent: Obtains hostent struct from hostname or -address.
       FBB::Glob: Obtain a list of files matching a certain pattern.
       FBB::Hostent: Wrapper around the hostent struct.
       FBB::Hostname:  Derived  from Hostent, allows the initialization from a
       FBB::IFdStream: stream extracting information from a device whose  file
       FBB::IFdStreambuf:  Input  stream buffer initialized by a file descrip-
       FBB::InetAddress: Base class (no public constructor) for objects repre-
       FBB::level: Manipulator setting the log-level of FBB::Log objects.
       FBB::Log: std::ostream handling log messages.
       FBB::LogBuffer: std::streambuf handling log messages.
       FBB::OFdStream: stream inserting information into a device  whose  file
       FBB::OFdStreambuf: Output stream buffer initialized by a file descrip-
                          tor.
       FBB::Process: Runs child processes, piping output to parents.
       FBB::ServerSocket: defines a socket to which clients can connect.
       FBB::SocketBase: Base class for ClientSocket and ServerSocket.
       FBB::Stat:   Determines file characteristics.
       FBB::Syslogbuf: streambuf to Buffer generating syslog(3) messages.
       FBB::SyslogStream: stream to Output  stream  inserting  syslog(3)  mes-
                          sages.
       FBB::Table:  Display tables row- or column-wise.
       FBB::TableSpec: Base class for the class Table.
       FBB::TableSupport: Support class for the class Table.
       FBB::User:   Determines the current user's parameters from /etc/passwd.

    Added an examples directory under /usr/share/doc/bobcat-dev
    Added a contrib directory under /usr/share/doc/bobcat-dev, currently
          containing the `solib' script making shared libraries

    o   The minor release number will be incremented when new information
            (classes, documentation, etc.) is added,
    o   The subrelease number will be incremented at bugfixes.
    o   I don't know yet when I'll upgrade the major release number

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Wed, 31 Aug 2005 12:57:03 +0200

bobcat (1.0.0-1) unstable; urgency=low

  * Initial Release.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Mon, 15 Aug 2005 11:32:09 +0200
