                              ___                     _____      _____
        |  |     |        |  |   )                   /          /    /
        |`'|  _ -|-  _   ||  |  '_   _   .-.  _     /          /    /
        |  | ( ) |  ( \  `|  |    ) ( \  `-. ( )   `---.      /    /
           | -'--`-- - `-' \/ ---' - - `-`- --'--      /  <> /    /
___________________________/\_____________________`.__/_____/____/_____________

                              Please read the dox  /
                                                  '


WHAT'S NEW IN THIS RELEASE:

    o SPEED
         MetalBase 5.0 destroys even 4.1a speed-wise; queries are the same
         speed, but adds/updates/deletes are always at least twice as fast, and
         often over three times as fast!  Internal caching of index pointers
         just makes the whole world turn 'round better...

    o CONVERSION
         The utility MBCONV will convert 4.0 and 4.1a relations to 5.0 format.
         It is absolutely perfectly safe, but requires that you have enough
         free space to essentially make a copy of the relation.

    o LOCKING
         Previously, unless you compiled with -DUNIX_LOCKS (and had a *nix
         machine), bad things would happen if a program shut down while
         something was being changed.  Now, since all indices are written at
         once (caching is so nice), chances of corruption are much smaller; and
         if a process does shut down with a system-placed lock in place, the
         next process will detect the condition and remove the lock, and
         decrement the number of users.  A request queue has also been built
         in, so that processes will always get equal timeshares.

    o CREATE ON-THE-FLY
         You can now design and create a relation at run-time:
            rel = mb_new();
            mb_addfield (rel, "Customer's last name",  T_CHAR,   15);
            mb_addfield (rel, "Customer's first name", T_CHAR,   10);
            mb_addfield (rel, "Customer's number",     T_SERIAL, 40);
            mb_addindex (rel, "ix_name",   1, "0,1");
            mb_addindex (rel, "ix_number", 1, "2");
            mb_create (rel, "/usr/joe/simple.rel", 0);
         Check out the code for BUILD and MBCONV; they both use it.

    o SIMPLE PHONE NUMBERS
         The schema type "phone" (C typedef == "mb_phone") has been added to
         5.0 to make handling of phone numbers easier; phone types accept area
         codes (of course), and extensions up to x99999.  The routines
         scn_phone() and fmt_phone() are included for quick handling of phone
         numbers, just as scn_ and fmt_ are provided for date and time!

    o ENCRYPTION
         Encryption is now working for everyone, even MS-DOS users.  Be
         careful, though--I'm haphazard enough with encryption that, for
         example, a bad encryption key passed to VR under DOS will usually
         make you reboot your machine; under *nix it'll usually cause a seg
         violation.  Now THAT's encryption.  :)

    o DOCUMENTATION
         The documentation, though still not perfect, is much more up to date
         than it was for the 4.0 release.  Included here are:

            dox/mbase.dox   -- General documentation (the important stuff)

            dox/author.dox  -- Information on where the hell I can be reached
            dox/build.dox   -- Information on schema and their compiler, build
            dox/crypt.dox   -- Information on MetalBase's encryption technique
            dox/flow.dox    -- Pseudocode for MetalBase's AVL-tree algorithms
            dox/format.dox  -- Character-by-character format for relations
            dox/lock.dox    -- Information on MetalBase's locking algorithms
            dox/struct.dox  -- Information on C structure interface
            dox/report.dox  -- Incomplete documentation on the report writer
            dox/trouble.dox -- Troubleshooting ideas (not too many--sorry)

    o NO DAMNED DEBUGGING TRAILS
         If you got this release hoping I'd leave some debugging trails in the
         code again, BZZZZZT!  Sorry, but I'm only allowed to fuck up like that
         once a year.  I really, really feel stupid about that...




HOW TO BUILD THE STUPID THING:

    o Go to the SRC directory.

    o If you're using *nix.............type "MAKE"
      If you're using Microsoft C......type "NMAKE -f makefile.dos"
      If you're using something else...pick either makefile and modify it.

    o It'll compile and run STRUCT (or STRUCT.EXE), which will tell you that
      you're either screwed, or what to change in the makefile to make the
      library appropriately for your compiler.  If you're screwed, send me
      mail (see dox/author.dox).  If you're not, do as it says.

    o Check the makefile to make sure it's going to put the headers, library
      and executables wherever you want it to.

    o Type "MAKE INSTALL" (or "NMAKE -f makefile.dos INSTALL" for Microsoft C).

    o It'll compile the library and executables, and put them where you said
      to.

    o If you have any relations from MetalBase 4.0 or MetalBase 4.1a, go to
      where they are and type "MBCONV relationname".  It'll convert them to
      5.0 (and hopefully the final) format and tell you it's done (it's really
      quick, but IRREVERSABLE).




WHAT TOYS YOU GET:

    o BLAST.EXE - Removes locks accidentally left around on a relation; sets
      the internal number-of-users-on-this-relation to zero.

    o BUILD.EXE - Compiles relations from schema files; erases all records
      in a relation.

    o FORM.EXE - Builds header files from data-entry templates; the DE
      interface is really, really easy to program.  It's not perfect, but
      it's nice.

    o MBCONV.EXE - Converts pre-5.0 relations to 5.0 format.  Works great!

    o REPORT.EXE - Generates reports from template files, interpereted at
      run-time.

    o VR.EXE - View Relation--one of my favorite toys.  4.0 users, NON-VI
      emulation is now the default; it's much, MUCH easier to add and change
      records.  The basics of the new DE keys are:
            CTRL-A, CTRL-return - Accept a transaction
            CTRL-Q, CTRL-C      - Abort a transaction
            CTRL-U,             - Undo a change within a field
            Arrows, End, Home   - As expected




HOW TO PLAY WITH THE STUPID THING:

   I've included two programs with this; SAMPLE and BENCH.  BENCH is just a
   benchmark utility (see sample/readme), but SAMPLE is meant to be example
   code, for hooking up the (suggested) data-entry interface, for adding/
   deleting/changing records, etc.

   Go to the directory SAMPLE and pick-n-edit a makefile.  Note that you
   don't need -DSTRUCT_ in these; that's just for building the library.  But
   you WILL need -DNEED_USHORT if your compiler doesn't contain ushort, etc.




-------------------------------------------------------------------------------
                                                               Richid
-------------------------------------------------------------------------------

