2001-10-14  MK 2.4.1    Custom-extended TclKit, and threading

   Minor kitInit.c change allows wrapping apps as a "custom-extended"
   version of TclKit.  Enable threaded Tcl build on Unix.

   This release consolidates the most recent fixes and code tweaks.

2001-09-27              Fix temp storage open in Mk4tcl

   A recent change made it impossible to open temporary storages
   from Tcl ("mk::file open db") - <blush> - now fixed again.

2001-09-19              Bug fixes

   Fixed a problem during commit, when memo's are modified, causing 
   them to be stored inline again.  This caused a late reference to
   mapped memory - leading to intermittent crashes on commit.

   Changes/fixes in mk4tcl.cpp, to prevent a problem when a datafile
   is re-opened again under the same name later on.  Old references
   could in some cases end up stale - leading to crashes much later.

2001-09-05              Bug fixes

   Hashing bug fixed: failed to terminate when looking for a missing
   key after a hash collision.  The fill count was not being tracked
   properly to enforce that there is always at least one unused slot.

   Fixed bug when setting a string from a higher row: the data gets
   trashed, because too little copying was done while creating a gap.
   This bug may have led to some other cases of "damaged" datafiles.
   Solved by copying input data in c4_FormatB::SetOne().

   Fixed long-standing bug with commit-after-load, by now doing a full
   view/subview copy.  This is inefficient, but it avoids all sorts of
   mapping/strategy problems.  This also fixes test s33 (at last!).

   Added regression tests b27, c21, m01, and s36 to check above fixes.

2001-06-29  MK 2.4.0    More changes to the Mk4py interface

    - allow setting a row to a value if the row has a single property
    - there is an unexplained crash when setting slices with wrong type

2001-06-22              Changes to the Mk4py interface

    Modifications and fixes gratefuly accepted from John Barnard:
    - c4_LongProp support ('L' datatype)
    - row.__attrs__ returns the list of all properties
    - row.__view__ returns the container view of the row
    - row.__index__ returns current position in view
    - view.setsize(n) added, extends/truncates number of rows
    - generalized makerow to allow any sequence, not just lists
    
    Changed PyRowRef to inc/dec the reference it has to the underlying
    view.  Should prevent dangling pointer problems, such as deleting a
    storage while rows are still in use.  This adds a little overhead.

    Fixed a PyErr_Clear issue when accessing non-existent properties.

2001-06-12              Close DB filedesc on exec

    Added an fcntl call to fileio.cpp, so that on Unix database file
    decriptors are closed on exec (relevant when doing "exec ... &").

2001-05-30              Fixed mem-leak in Mk4tcl

    A long-standing bug, in TclSelector::ExactKeyProps.

2001-05-28              Security fix in TclKit

    See end of the tcl/kit/README file for deatils.

2001-03-30              Fixed long-standing commit bug

    There was an intermittent bug in c4_Persist::Commit,
    when properties were "restructured away" (dropped).
    The bug was hard to track down, because it depended
    on what address ranges the O/S assigned to mem-maps.
    Might also fix other spurious commit/exit crashes.

2001-03-29  MK 2.3.4    The "last" release candidate

    Now checked into its *new* CVS home at equi4.com.
    Mailings list(s) have also been moved to this site.

2001-03-28              Fix Win build, broken on Mar 27

    Dropped kBufMax from mk4.h, it caused compiler errors
    in MSVC6 - switched to "sizeof" in a couple of places.
    This error was introduced by the double-fix of 3/27.

2001-03-28              Allow builds of TclKit with Sun CC

    Integrated a few changes provided by D.J. Hagberg. 
    Note: the M-solaris.sh and M-dyn.sh scripts need to
    be manually edited when choosing between CC and gcc.

2001-03-27              Double-alignment bug on Solaris

    Two changes (c4_Bytes in mk4.h and src/column.h) to
    fix an alignment problem for 8-byte doubles on Solaris.
    This caused tests b17, b23, b24, s22, and s28 to fail.

2001-03-26              Fixed cross-platform commit bug

    There was a nasty bug in the 2.3.x code, which wrote
    incorrect field sizes when committing to a datafile
    with a different byte order (i.e. created on a machine
    using different endian-ness from the one doing commit).

2001-02-14              Removed file events from TclKit

    Changed kit/rechan.cpp to not generate file events.
    This avoids a bug in TclKit whereby an open file can
    generate a continuous stream of file events as long
    as the file is open - the console will seem to be
    frozen, though "close $file" does work and fixes it.

2000-12-13              Added missing c4_LongRef export

    Added a line in mk4dll.h to resolve references to
    the new c4_LongProp/c4_LongRef datatype on Windows.

2000-12-04              Fixed conversion bug

    There was a bug in c4_FormatV::OldDefine, causing MK
    to crash when trying to convert an old-format file
    with empty subviews in it.  Bug introduced on 14 Nov.

2000-12-02              Fixes in TclKit code

    Fixed a Tcl-level bug causing memory leaks for all
    compressed files stored with MK opened for reading.

    Disabled event sources (mk4tcl.cpp and rechan.cpp)
    to avoid a GUI freeze-up while a fake file is open.

2000-11-16              Simplified c4_Storage

    Made some changes so that a c4_Storage no longer has
    a separate c4_Persist* copy.  As a result, a storage 
    can now be reconstructed from any root-level view.
    This generalizes views, and prepares for a merge.

2000-11-14              Fixed mem leak in conversion code

    The conversion code from pre 2.3 files had a memory
    leak in c4_FormatV::OldDefine, causing f06 to leak,
    as well as several subsequent erroneous leak reports.
    Changed a few "new" to "d4_new" calls along the way.

    Remove FlipBytes members, they are no longer needed.

2000-11-08              TclKit now in the distribution

    The "TclKit" project has been merged into MetaKit.
    Details and updated build info at "tcl/kit/README".
    The SourceForge CVS repository is up to date again.

    Mk4py: improved number conversion and error handling.
    
2000-11-03  MK 2.3.3    First final release candidate

    Yes, there will probably be a second one as well...

2000-10-31              Improved error handling

    More logic added to catch errors in flush and streams.
    This affects the C++ core as well as Mk4py and Mk4tcl.
    API of c4_Stream::Write changed to return success flag.

2000-10-30              Added autocommit call to Mk4tcl

    To better support VFS, Mk4tcl now has a new command
    "mk::file autocommit <db>" to force commit on close.

2000-10-26              Changes to compile with Borland C++

    Minor tweaks to compile with Borland C++ Builder 4.0,
    which does not support "long long".  A new KitViewer
    has been built (new code to replace c4_View::Describe).

2000-10-03              Fixes for Alpha Unix

    Moved _item in column.h up to fix alignment sensitivity.
    Config.h did not get SIZE_LONG right on Alpha Unix (0?).

2000-09-27              Contributed fixes and Python 2.0b2

    Adjusted makefile to build with Python 2.0b2 release.

    Source code tweaks to avoid DEC CXX 5.7 compiler errors.
    Add no-inherit flags for Win32 to not leak file handles.
    
2000-08-27              Allow derived row deletes in Mk4py

    Added code to PyView.cpp to handle deletes (and slice
    deletes) in derived views, see "examples/derived.py".

2000-07-30              Major auto-convert 1.8.6 file bug

    Bug in on-the-fly conversion of bytes properties ('B')
    in pre-2.0 datafiles (i.e. 1.8.6 and earlier) resolved.

    Unfortunately, this bug can not be 100% unambiguously
    fixed.  The new code *will* properly detect most cases,
    and convert both 1.8.6 and 2.0 datafiles on the fly, but
    especially for views with only a few rows and at most a
    few bytes of data per row - the conversion *might* fail.

    In this case, MK will have to be compiled with a define
    to force it to either assume all old datafiles are 1.8.6
    (-Dq4_OLD_IS_PRE_V2), or to assume that they are always
    2.0 (-Dq4_OLD_IS_ALWAYS_V2).  If you are currently using
    MK 1.8.6, then you should *skip* the update to 2.01, and
    consider updating to 2.3.x.  This way you never have any
    2.0 files around, and can force all your code to handle
    1.8.6 files properly (by using "-Dq4_OLD_IS_PRE_V2").

    See src/format.cpp, c4_FormatB::OldDefine for details.

    This bug *only* applies to bytes properties in pre-2.0
    data files.  Conversion of 2.0x files is unaffected.
    
2000-07-25              Fixed new self-referential views

    The new recursive / self-referential view definition
    style has been fixed, e.g. "view[data:S,self[^]]" will
    now let you store a tree of arbitrary depth, with each
    'self' subview having data and self properties.  See the
    demo in "examples/selfref.py" to see how this all works.

2000-07-22              Fixed bug in double restructuring

    Solved a very long-standing bug in restructuring, which
    caused incorrect (non-zero, small) default values when a
    c4_DoubleProp was added to a view which already had rows.  

2000-07-18              Added remapwith and pair to Mk4py

    Exposed C++'s c4_View::RemapWith as v1.remapwith(v2), and
    c4_View::Pair as v1.pair(v2) in the Mk4py Python binding.
    Added pair.py, remap.py, and wrap.py in "examples/" dir.

2000-07-12              Added metakit.py wrapper

    Added "metakit.py" script to wrap Mk4py, including a new
    metakit.dump() to pretty-print views.  More utility code
    will be added over time.  The preferred way to use MetaKit
    from Python is now "import metakit".

2000-07-06              Conversion fix, warning cleanup

    Fixed on-the fly conversion of old datafiles.  The free
    space was not managed properly - changed to never touch
    any data inside the file during conversion.

    Some source code change to get the compile through gcc
    flags "-fguiding-decls -Wall -pedantic -Wno-unused".
    The only remaining complaint is about using "long long".

2000-07-04              MkSQL subtree, "indexed" mapped viewer

    Added the sql and mksql subtrees to the distribution, with
    Gordon McMillan's MkSQL engine, written in Python.  The
    "isql.py" script is a simple interactive shell around it.

    Started work on a new viewer which maintains a persistent
    index (as a one-int-prop permutation), see src/remap.cpp.

2000-07-03              Mk4tcl fixes

    Fixed view rename problem and "delete end" (Matt Newman).
    Adjusted the tests in tcl/test/mk5object.tcl accordingly.

2000-06-30              Tequila fixes

    Close fix and failure handler (Steve Landers).

2000-06-29  MK 2.3.2    First beta release

    The new release is 99% feature-complete.  What remains is
    to further document C++/Python/Tcl use and to fix bugs.

    Python sample code in "python/aside.py" and "python/find.py".
    Tcl samples in "tcl/test/mk5object.tcl" and "tcl/mapped.tcl".

2000-06-28              Hash/blocked/ordered: changes and fixes

    Changed hash insertion to insert at specified position.
    This makes it possible to use hashes "under" ordered views.
    For best performance, insert rows at end of hash views.

2000-06-26              Documentation, example, Mk4tcl OO fixes

    Moved C++ member documentation out of "mk4.h" header.
    Added examples/ directory, with a find.py timing example.
    Fixed bugs in new Mk4tcl: "$vw find" and "$vw delete end".
    Added tests for new Mk4tcl OO interface: ":mk5object.test".

2000-06-16              Improved modifiable custom viewers

    The Pair and Slice viewers now support set/insert/remove,
    while RemapWith/Concat/Rename support setting values.  

2000-06-15              Many changes to the Tcl code, hashing

    Contributed by Matt Newman, it adds support for most custom
    viewers, including the new hash etc.  Added a fast find.
    Caveat: most old custom viewers are still not modifiable.

    Hash calculation improved, far less collisions than before.

    Blocked viewer seems to work.  Ordered on top is sub-optimal.

2000-06-12              GetUpperLimit, Blocked, Ordered, mk4too

    Removed c4_View::GetUpperLimit (it's equivalent to GetSize-1
    and was not being used anywhere).

    Start implementing c4_BlockedViewer, a simple balanced/blocked
    nested data structure.  Also started on a c4_OrderedViewer,
    which keeps the underlying view sorted during changes.  These
    two can be combined to implement an efficient 2-level btree.

    Adopted code by Matt Newman for oo-cmd's for Mk4tcl views.
    First trials work, started to extend with new custom viewers.

2000-06-09              Change case of a few Mk4py members

    Changed all top-level members in the Python interface to lower
    case: storage, property, view, wrap (will break existing code).

    Fix bounds check in Mk4tcl.cpp for commit/rollback (new code).

    Whoops, forgot to add new src/remap.{h,cpp} to the cvs tree.

2000-06-08              Implemented hash lookup

    Added a new virtual c4_Sequence::RestrictSearch, which lets a
    view take over searching (used by c4_View::Find).  The result
    is that the new hash viewer gives a huge speedup for finds.
    Find requests which require linear scanning are unaffected.

2000-06-07              Documentation extraction based on Doxygen

    The automatically generated output from Doxygen is working out
    well and looking pretty, added "src/doxy.h" with more comments.

2000-06-05              Started hash and btree custom viewers

    The hash implementation is nearly done, also usable from Python.
    Btrees are being implemented as fixed 2-level for now.

2000-06-01              Fixes

    Fixed crash when opening missing file r/o new in 2.3.1 alpha.
    Fixed incorrect on-the-fly-conversion of 2.0 format subviews.
    Added "storage.aside(storage)" to the Python interface.

2000-05-30              Fixed commit-aside

    The new commit-aside code was botched by recent changes.  Fixed
    SetAside to pick up new root seq, changed by implicit rollback.
    Note that a commit-aside is not finished until you *also* commit
    the secondary file containing all newly generated changes.

    Fixed bug in c4_BytesRef::Access, introduced in 2.3.1 alpha.

2000-05-29              Added new 64-bit long datatype

    Added support for 64-bit longs (type 'L'), and c4_LongProp, etc.
    This type is not autosizing, it always uses 8 bytes per entry.
    Uses "long long" or "__int64", else defines struct with 2 longs.
    This is not yet correct for platforms which have no 64b ints.
    No regression tests or Python/Tcl interfaces yet.

2000-05-28              Better file mark scanning

    Added c4_Strategy::EndOfData, to determine the logical end of a
    MetaKit datafile.  This call can be used to check whether a file
    contains any data, and whether a commit-extend has been performed.
    Old-style scripted documents (with preamble) can now be opened.
    Changed strategy class, DataSeek has been merged with read/write.
    Removed c4_LoadContext, LoadIt member moved to c4_Persist.

2000-05-27              Tweaked configuration define's

    Make the release build the default (no assertions, use inlines).
    Enable booleans for gnuc by default (it's pretty standard by now).
    Added extra include path to better find Python's includes.

2000-05-26              Fixed Tcl dependency

    Changed configure script to no longer look for Tcl if the
    "--with-tcl=..." parameter is not specified.

2000-05-25  MK 2.3.1    First alpha release

    Officially, this is "MetaKit 2.3.1 alpha" (ignore "2.3.0" in mk4.h).
    All alpha's are 2.3.1 (beta's will be 2.3.2, finals start at 2.3.5).
    Builds on Linux/Mac/Win appear ok - as do Mk4py, Mk4tcl, and TclKit.

2000-05-06              Massive changes to the core

    To summarize the main issues: management info is now stored in such
    a way that it need not be read in right away - file open is now
    instant.  The S(tring) datatype is now stored as B, making it far
    more scalable (API/use is unchanged).  Storage objects now derived
    from views, both can be initialized from a stream (data will be kept
    in a buffer, beware of potentially large memory use).

    Several file format changes are "for future expansion".

2000-05-05              Fixed builds without Tcl

    In 2.0.1, the make would fail if there was no Tcl to build with, or
    not an appropriate release.  Changed Makefile to report and skip Tcl
    builds in that case.

2000-04-06              Fixed a nasty restructure/mmap bug

    When a property is deleted by a restructure, then committed, then
    later committed again, a problem can cause MK to crash.  It has only
    been detected in debug builds, but the problem turns out to be a
    fundamental one (only happens with memory-mapped files, if the file
    is resized).  Fix in next rel (c4_HandlerSeq::DetachFromStorage).

2000-04-02              Memo properties are no longer needed

    The M datatype is gone from the public API (and now illegal).
    Everything binary should now be stored in B(ytes) properties, which
    then adaptively decide which internal format to use, based on a
    simple heuristic (which will be refined later).  Existing datafiles
    will automatically convert from M to B.  The partial Access and
    Modify calls now also work on B items.

2000-03-30              Minor change in c4_Strategy

    Dropped the _keepAfterCommit flag in c4_Strategy, it probably has
    never been used and it interferes with new features.

2000-03-27              Change in API for creating storages

    It is no longer possible to create a storage and define its
    structure with a single call.  Instead, open a storage in r/w mode
    (i.e. "1") and then call the (now public) SetStructure member to
    define the structure of all views.  This change is necessary to
    prepare for the upcoming "commit-aside" logic.

2000-03-23              File format changes (in progress)

    The new file format has an incompatible header, so old code will not
    recognize new datafiles.  Major changes are: added a file tail
    marker, the serialized format is now a very good way to compress
    datafiles, since it can be efficiently opened in on-demand/mmap'ed
    mode.  The new format supports several planned features.  Code to
    convert existing files on-the-fly will be added before this change
    is released.

2000-03-19              Added c4_Strategy::FileSize

    The Strategy::FileSize call is used for a file format change.

2000-03-18              Added c4_View::Locate

    Locate returns the number of matching rows, and optionally the
    position of the first one, using binary search.  Like the
    c4_View::Search function, it requires the view to be sorted.

2000-03-17  MK 2.01     Maintenance release, it's solid

    Updated MK version number to 2.01, this maintenance release
    represents a very stable version.

    Small change to b07 test to avoid evaluation order problems.

    Added unix/metakit.spec file for RPM, thanks to Sean Summers.

2000-03-16              Drop Store, fix deep copy, drop segments

    c4_Storage::Store never worked properly under all conditions.  It's
    been deprecated for some time and has now been removed.  Made a
    handful of changes to test- and demo code to drop it.

    Duplicating a view with deep copy never worked, because it used the
    buggy Store call as well.  Changed to use recursion.

    Dropped support for segmented tree-walk storage, which hasn't been
    used since 1.5 (use a commit with 2.0 to convert files).  This is
    necessary to prepare for some file format changes.

2000-03-15              Modifiable custom viewers, other tweaks

    A start has been made with making custom viewers updatable.  The new
    methods are Set, InsertAt, RemoveAt, and Move, but the number of
    viewers which implement this is still limited.  Mk4py has been
    adjusted to allow "set" on wrapped views.

    Removed c4_Strategy::DataLoad, it was only used in one place.  Small
    optimization of the 2 calls to c4_Streamer::NextByte.  Get rid of /
    disallow read calls on memory mapped files.

2000-03-14              Makefile tweaks, non-commits smarter

    Changed from --enable-tcl to --with-tcl=DIR, because the old
    approach only worked with Tcl installed in a standard place.

    Commits of a R/O file now fail.  Also, if no changes have been made,
    a commit will no longer write anything to file.

2000-03-13              Several new commands added to Mk4py

    Several changes were submitted by Gordon McMillan, which add better
    support for his upcoming SQL engine.

2000-03-12              Allow embedding MK datafile at end of EXE

    Mk4tcl was changed to look for an optional trailer for quick access
    to the start offset.  This makes it possible to append datafiles to
    executables, even if they are larger than 4 Kb.

2000-02-29              Fixed rare bug with lots of memo fields

    There was a bug in free space management (persist.cpp), which can
    only occur when exactly 7500 free space gaps are present, and a
    commit crosses the threshold.  There was also a small mistake in
    that same code causing a bit of free space waste.

2000-02-24              Added proxy support to Tequila

    Tequila can now be used as basic client/server setup for Tcl
    scripts.  See tcl/tequila/README for details and an example.

2000-02-04              Fixed mk::views (Mk4tcl)

    The mk::views command failed to list the first view in the file
    (this bug was introduced by changes in MK 1.99).

2000-01-02              Adjusted y2k

    Copyright and license dates adjusted.

1999-12-26              More Mk4py changes

    Added sortrev, and fixed "select(low,high)".  Docs updated.

1999-12-23              New view operators in Mk4py

    Added rename, project, groupby, and counts operators to Mk4py.
    These were already part of the C++ core.

1999-12-22              Avoid GetId inline warning

    Reordered GetId in "mk4.inl" to avoid (harmless) inline warning.

1999-12-21              Checked-in CatFish and KitViewer sources

    Added win/catfish and win/kitviewer areas.  CatFish was built with
    MSVC 1.52, so the win/msvc152 area has also been added.

    KitViewer requires Borland C++ Builder 4.0 to build (using VCL), it
    has been adjusted to now also recognize scripted documents.

1999-12-20              Bug fix in set-after-get situations

    A bug has surfaced when setting string/byte/memo values which span a
    4 Kb block boundary.  The bug can only happen if data is first
    fetched and subsequently changed.  The affected code is in
    src/format.cpp (3x).  Added Tcl test 5.5 to catch this.

1999-12-19              Mac tweaks

    Changes to make the Mac versions build from the CVS repository.  The
    Mac can also cross-compile Windows libraries using MWCW 5.

1999-12-17              Add the Tequila example

    Added the Tequila global Tcl array data server, see tcl/tequila/.

1999-12-15  MK 2.0      Official Open Source release

    Removed a bad assertion from FormatX::Compare.

    Several new services set up on the excellent SourceForge.com site.

1999-12-14              Documentation added

    The C++ API documentation has been added to the distribution, as
    well as a document describing the file format details of MetaKit.

1999-12-13              Bug fix affecting c4_View::Description

    There was a problem with c4_ViewScanner::Describe, due to a change
    from c4_String to (const char*).  Now c4_View::Store works again.

1999-12-12  MK 1.99     New release, as open source software

    The major change is that MetaKit has been released as open source
    software, based on the liberal X/MIT-style license.  Commercial
    support remains unchanged for all recent commercial customers, and
    for those who purchase the Enterprise License.  The Universal Source
    license has been terminated, because full source code is now freely
    downloadable by anyone from the website.

    Sources and documentation files have been adjusted accordingly.

1999-12-08  MK 1.9h     Bool support for gcc/egcs, minor fix

    Clear _field after delete in c4_HandlerSeq::DefineRoot.  This
    triggered an assertion on Linux, when compiled in debug mode.

    Added pre-processor logic to detect whether gcc supports bools.

    Removed all indentation from #define's, #ifdef's, etc.  This was
    done after a report that some compilers can get confused by this.

1999-12-06              Derived view row copy fix

    There was a problem when using SetAt with derived views as source,
    due to a remapping problem.  Fixed viewx.cpp, added new test b25.

1999-11-25  MK 1.9g     Makefile changes, thread-safe Mk4tcl

    Renamed options to --enable-python and --enable-tcl, both now off by
    default, since most people probably don't want to enable both.

    The new "-shared" changes to make Mk4tcl thread-safe have been
    folded into the main source code.

1999-11-22              Channel improvements Mk4tcl

    There was a close conflict in mk::channel, also several changes to
    improve mk::channel fileevent handling.

1999-11-19              Bug fix in Mk4tcl

    There was an array overrun when mk::get was called without fields.
    Added code to avoid this.

1999-11-11              Mk4tcl exit handling

    Simplified Mk4tcl exit handling, fixes "interp delete" crash.  Added
    new mk5fixed.4 test to catch this case.

1999-11-10              Mk4tcl shared and multi-threaded access

    Made a first experimental version of Mk4tcl (1.2.1, not announced)
    which allows sharing a database between interpreters and threads.

1999-11-09              STL, MkWrap, compare caching

    Tweaked the makefile to support STL builds (also adjusted README).

    Fixed bug in MkWrap, calling storage.description() without args.

    Yet more fixes in comparisons, this is all one problem, caused by
    changes in caching for ints, floats, and doubles.  Added B24 test.
    These (last?) problems occured in custom / compound views.

1999-11-08  MK 1.9f     Fixed sort comparisons

    There was a cache problem with comparisons of int / float / double
    sorts.  Fixed, also added new B23 regression test to check for it.

1999-11-07              Little nasty details

    Tweaked some make/project files.  All regress tests and Tcl tests
    now reported to really work on Solaris, Linux, Windows, and Mac.
    Regression tests required more memory on Mac to get past L03 case.

1999-11-06  MK 1.9e     Big oops: Mk4tcl and MkWrap were broken!

    Fixed a c4_Strategy / c4_FileStrategy mixup in Mk4tcl and MkWrap.

1999-11-05              Simplify c4_Storage

    Moved state out of c4_Storage and into c4_Persist, to prepare for
    multi-thread wrappers.  Made a new, simpler design to achieve that.

1999-11-04  MK 1.9d     Factor out stdio dependencies

    Moved all stdio dependencies out of core into new "fileio.cpp" src.
    The mk4.h header no longer includes <stdio.h>, added new "mk4io.h"
    header with a c4_FileStrategy class, derived from c4_Strategy.

    Also factored c4_Stream/c4_FileStream out of the c4_Strategy class.
    This alters the API slightly, but makes it 100% portable/embeddable.

    Added "tcl/iohan.tcl", a simple wrapper for generic storage access:
    locally, on a FTP server, in a local MK datafile, or using a remote
    Tequila server (see http://www.equi4.com/tclkit/tequila.html).

1999-11-03              Improved detach/restructure handling

    Changed detach to drop all persistent formathandlers, but leave the
    number of rows intact.  It will be much faster to destroy columns
    than to delete (and propagate) rows.  The result is that a pointer
    to a view of which the underlying storage object goes away will end
    up with the same number of rows as before, but no properties at all.

    Fixed a problem which would have occured when properties are being
    "restructured away" and then committed.  The solution is to check
    for this and delete all such properties at commit time.

    Moved Buffer() out of c4_HandlerSeq and c4_CustomSeq, and made the
    new version in c4_Sequence allocate the c4_Bytes object lazily.
    Faster, and decreases sequence object size (for lots of subviews).

    Mk4tcl, mk::layout now returns the proper layout even if the views
    are empty.  Solved by adding extra arg to c4_Storage::Description,
    to return structure of a single top-level view.  Fixes "mk8basic.1",
    and the returned string now has one bogus list layer stripped off.

    MkWrap also adjusted with optional arg for storage.description().

1999-11-02              New Wrap code in MkWrap

    MkWrap, added new Wrap(seq,props,byPos) member, a c4_CustomViewer
    which wraps any Python sequence as MK view (for use in joins, etc).

1999-11-01  MK 1.9c     Mk4tcl changes

    Mk4tcl, several changes: added "-size" option to mk::get to return
    the size of prop value without fetching it (see new basic.9 test).
    Added "-globnc" for case-insensitive globbing (for regexp, this is
    available through the new (?i) metasytnax of Tcl 8.2 (see basic.10).

1999-10-31  MK 1.9b     Solved shared lib unload with Tcl 8.2

    Changed property symbol table setup to avoid static initializers, to
    work around a problem with shared library cleanup from Tcl 8.2.
    Added new c4_Property::CleanupInternalData call to clean up 100%
    (this code need not usually be called, only if memory is tracked).
    This fixes the crash-on-exit bug in Mk4tcl (Linux and Solaris).

1999-10-29              Make support for MkWrap and Mk4tcl

    Both MSVC and MWCW now also build Mk4tcl and MkWrap extensions.  The
    MWCW project compiles for Win and Mac *on* either Win or Mac.
    Makefile extended to build Mk4tcl and MkWrap, added dist target.
    Updated to latest Perceps 3.5 beta, started generating docs again.

1999-10-27  MK 1.9a     New build / directory structure

    Completely reworked the directory structure to simplify all builds.
    Created new "builds/" area for all intermediate and output files.
    New MSVC 6.0 project structure created in "win/msvc60/".

    Moved Mk4tcl to the "tcl/" top-level directory, and MkWrap to the
    "python/" dir.  The MkWrap code has been removed from the project.

    Removed c4_View::Match and the regular expression package, since it
    can just as efficiently be done with a wrapper around MK, now that
    string results no longer allocate a temporary copy.

    Started writing a Tcl-based test suite for use with Mk4tcl.

MAJOR CHANGE SINCE 1.8.6

    Merge handler.cpp and format.cpp classes to get rid of special-cased
    in-memory version of handlers.  This has major effects on how data
    is kept for unattached views (they still exist, but no longer
    special).  The code is leaner and meaner, it passes all regression
    tests.

ALSO LISTED IN THE RELEASE HISTORY

    Added c4_MemoRef::Access and c4_Memoref::Modify for partial access
    to memo fields.  Avoids copying and allows inserts/deletes anywhere.
    MkWrap and Mk4tcl have both been extended to allow using Memo fields
    for simulated file IO (mk::channel for Tcl, MkMemoIO.py for Python).

    Added c4_Reference::GetSize to determine the size of a value without
    accessing it.  For ints, returns negated bit width if 1/2/4 bits.

    Added experimental c4_View::RelocateRows to move rows from one view
    to another (both must be in same storage, with the same structure).
    Moves do not involve any data copying w.r.t. subviews and memo's.

The old release history is at http://www.equi4.com/metakit/history.html

# vim: tw=72
