Burton Systems Software logo  
Burton Home Page
Overview of TLIB
Features of TLIB
See our great reviews!
Latest Notes
Support, FAQ, Downloads
Helpful Links
Site Map

TLIB Version Control - release notes

For a plain text (printable) version of this page, see RELEASE.TXT.

I. TLIB 5.54k  (19-May-2004)
II. TLIB 5.54j  (29-Apr-2004)
III. TLIB 5.54i  (4-Mar-2004)
IV. TLIB 5.54h  (6-Feb-2004)
V. TLIB 5.54g  (23-Oct-2003)
VI. TLIB 5.54f  (23-Sep-2003)
VII. TLIB 5.54e  (18-Jul-2003)
VIII.earlier versions



Our telephone and fax numbers have changed:
The voice telephone number is 1-919-481-0149 (formerly 233-8128).
The fax number is 1-919-481-3787 (formerly 233-0716).

Please take a moment to pencil in the corrections in your TLIB
reference manual.


Our BBS is no longer kept up to date.  Instead, please visit
our Web site at:


            Bug fixes and other changes to date in TLIB 5.xx
                   (in reverse-chronological order)

5.54k        19-May-2004

1) Improved: the MSCCI DLL.  It now works properly with CodeWright and
   other client applications which do not use the SccOpenProject
   entrypoint to select a working directory.

   Also, we added the "Suppress banner" checkbox on the per-client
   tabs at:  File -> Configuration Options -> Scc Provider Options
   for clients which do not provide a callback for the version
   control client to display routine status messages.
   [Adrian N.]

2) Fixed: a bug in the handling of native project files with
   spaces in the names.
   [Adrian N.]

3) Fixed: a bug in the GUI versions of TLIB, which caused an
   "hourglass" mouse pointer while displaying new user hints.

4) Improved: first-time startup behavior (when there's no TLIB.INI
   file) in the 32-bit GUI version of TLIB, when TREEDIRS Y is
   configured.  It now starts with C:\ as the initial "current
   directory," and it thus avoids that annoying "Enter the depth
   of the main work directory" question (until you actually
   change to your real work directory).

5) Improved: the 32-bit GUI in other minor ways.

6) Created: a time-limited demo version.  We'll put it on our web
   server soon; in the meantime, you can get it by asking for it.

5.54j        29-Apr-2004

1) Added: a Microsoft Source Code Control Interface (MSCCI) DLL,
   for integrating TLIB with Microsoft Visual Studio and with
   many non-Microsoft products.

   This feature is tested with Microsoft Visual Basic 6.0 and
   Microsoft Visual C++ 6.0, and lightly tested with VB.NET.
   However, many other products also use this API to interface
   to version control systems.  Please let us know how well your
   favorite tool works with it.

   To use this feature, simply select the "MS SCC Interface DLL
   for DevStudio etc" choice in the "Integration" component
   details while installing TLIB.

   Note: a tool called REGMSCC.EXE is included, to "register"
   and "unregister" TLIB's MSCCI DLL (and do configure VB 6.0
   to use it, of you have VB 6.0 installed).  TLIB's NETSETUP
   program will run "regmscc -install" automatically, so you
   probably won't need to run it manually.  However, if you
   install Microsoft Visual Basic 6.0 after installing TLIB,
   you can run REGMSCC to configure it to use TLIB's MSCCI
   DLL, so that TLIB will appear in the VB IDE's menus.
   For detailed instructions, run "RegMSCC" with no options.

2) Removed: the old Visual Basic and Visual C++ Add-Ins from
   the TLIB setup dialogs, because the MSCCI approach is better.

   However, the old Add-Ins are still available, archived in the
   MSDEVOLD.ZIP file.  For more information unzip the contents
   of MSDEVOLD.ZIP, and examine MSDEVOLD.TXT.

3) Fixed: a bug which could cause "ERR: ndL" failures when
   extracting the second-to-last trunk version of a file by
   using the "*-1" syntax for the version number specification.

4) Fixed: a bug in 32-bit TLIB's visual compare when using an
   extremely wide display.  If the comparison window was dragged
   to more then 2184 pixels wide, it caused the following error:
       ERROR: #0, frmCMP_Resize_pt1,
   This was seen by a customer who was using dual monitors.
   [Andy P.]

5) Fixed: a problem which prevented TLIB Visual Compare from
   appearing in the Windows task bar when it was invoked via
   the command-line TLIBCOMP utility.

6) Increased: the maximum size of a version number string from
   40 characters to aproximately 80 characters, in 32-bit
   versions of TLIB.

   The actual limit is imposed by the 126-characters of usable
   space on a line in the TLIBWORK.TRK file, which must be long
   enough for the version number, the source file name (and
   perhaps its subdirectory relative to the main work directory),
   and a couple of other small fields.  So if the file name is
   very long, then the version number may be limited to less
   than 80 characters.

   TLIB's version numbers are also constrained to contain no
   more than 9 dots.  This limit has not changed.  To the best
   of our knowledge, no customer has ever run up against it.
   [John B.]

Note: the 16-bit TLIB is still version 5.54h in thls release.

5.54i        4-Mar-2004

1) Fixed: a minor bug introduced in 5.54h, which caused the
   following normal message to not pop up:

      Note: snapshot file '...' contains nn source file records

2) Added: in the Win32 GUI version of TLIB, in Native Project Mode
   you can now search for "All known project types" instead of
   having to pick a project type.

   TLIB currently understands 21 different kinds of "native"
   project files.  If yours is not among them, please tell us,
   and we might be able to add support for it.

3) Improved: in the Win32 GUI version of TLIB, the "Mode" button
   now works better for switching back and forth between normal
   file-oriented mode and Native Project mode.  There were many
   subtle changes, but the general theme is that now when you
   switch from one mode to the other TLIB "respects" where you
   were in the old mode and initializes the new mode to be as
   nearly equivalent as possible.

   It is kind of hard to explain why, but the usability is much

4) Added: an "Open Native Project" menu choice on the main
   screen.  This is most conveniently used by right-clicking on
   a native project file that is listed in the main file list.
   It will switch into TLIB's Native Project Mode, and open
   the file as a project file, displaying the list of source
   files which that project references.

5) Added: support for the "lowsrc=" field of the of the HTML
   <img> tag, when parsing HTML files in Native Project mode.
   When an <img> tag contained both a "lowsrc=..." field and
   a "src=..." field, TLIB was recognizing the first one but
   ignoring the second.  Now it finds both.

6) Improved the Win32 GUI user interface in other subtle ways.

Note: the 16-bit TLIBs are still version 5.54h in thls release.

5.54h        6-Feb-2004

1) Fixed: a bug which caused the TLIB GUI to hang or abort with a
   protection exception when taking a Snapshot (or creating a plain
   file list) with a large number of source files.

   When taking a snapshot of source files with short names and no
   subdirectory prefixes, 12,000 or more were necessary to trigger
   the bug.  But for source files with long names, and/or with
   long relative paths, a smaller number of files could trigger
   the error.

   This bug did not affect command-line versions of TLIB.
   [Paula P.]

3) Improved: performance in the 32-bit TLIB GUI.  When processing
   small numbers of source files, the improvement might not be
   noticable.  But when processing thousands of source files,
   this version of TLIB is dramatically faster.

3) Improved: the 32-bit TLIB Version Control GUI in subtle ways.

4) Fixed: When you do an Update/check-in to store a new version of
   your source file into TLIB Version Control, TLIB might need to
   then extract your source file from the newly updated TLIB
   library, to update revision history log or keyword information,
   or to create a "reference copy" in a project level reference
   directory.  If the extract fails (perhaps because the source
   file is open by a text editor and can't be modified by TLIB),
   then TLIB will give you an opportunity to correct the problem
   and retry.  However (and this was the bug), TLIB was not
   clearing the errorlevel status from the first failed attempt
   when the 2nd attempt succeeded.  The main symptom was that
   the source file wasn't deselected in the main file list window
   in the GUI versions of TLIB.  This is now fixed.

5) Fixed: the CMTEXT configuration parameter did not work correctly
   if configured to more than three characters.
   [Robert A.]

5.54g        23-Oct-2003
              (Note: the GUI is still version 5.54f)

1) Added: native project mode support for Borland C++ Builder 6.0
   project files, *.bpr.

   C++ Builder 6.0 project files are similar in in format to C++
   Builder 5.0 project files (which TLIB already supported).  The
   good news is that with version 6.0, Borland/Inprise has added
   a <FILELIST></FILELIST> section to the .bpr file, which should
   usually obviate the need to use TLIB's slow "scan for includes"
   option to find all the source files.

   This feature is only lightly tested; please let us know about any
   [Mark E.]

2) Changed: TLIB's snapshot command to no longer return errorlevel 1
   (failure) if some, but not all, of the specified files could not
   be recorded in the snapshot.

   This is so that the 'N' or 'U' (create or update library) command
   will work after a snapshot command on the same command line, when
   some, but not all, of the specified files were successfully
   recorded in the snapshot.  This is mainly so that the "immediate
   store in library" option will work in the GUI even if there were
   errors while taking the snapshot, but it also means that command-line
   TLIB will no longer return errorlevel 1 if a snapshot is taken and
   some of the source files failed (e.g., because they were never
   stored into TLIB libraries).

3) Plus other minor improvements, mostly in diagnostic messages.

5.54f        23-Sep-2003

1) Fixed: a subtle problem with TLIB.CFG processing.

   Normally, while processing the TLIB.CFG file (and any include files
   that it references), TLIB defers determination of the current work
   directory until it is needed.  This allows you to write TLIB.CFG
   files which adjust parameters (such as WORKDIR, WORKDEPTH, and
   TREEDIRS) that affect determination of the current work directory,
   without triggering superflous warnings or errors about it being

   Referencing the %tlibcfg:workdir% pseudo-environment variable in
   TLIB.CFG usually requires TLIB to determine what the work directory
   is.  The exception is when the reference occurs within a false
   'iff' block, since configuration parameters within such a block
   are ignored.  However, prior to version 5.54f, TLIB was always
   calculating the work directory when the first reference to
   %tlibcfg:workdir% was seen, even if that reference was within a
   false 'iff' block.

   The following is an excerpt from a TLIB.CFG file that would not
   work correctly because of this problem, since TLIB had already
   determined the work directory by the time it encountered the
   "workdir" configuration parameter that was supposed to override it:

     iff (('%LEVEL%' eqi 'dev') or ('%LEVEL%' eqi 'tst') or ('%LEVEL%' eqi 'rel'))
        REM -- LEVEL was set via PERSONAL.CFG, so leave it alone
        REM -- This first reference to %tlibcfg:workdir% caused TLIB to go
        REM -- ahead and determine the main work directory:
        set wkdir1=%tlibcfg:workdir:-1%
        REM  %wkdir1% is name of main work directory -- should be DEV or TST or REL
        iff ('%wkdir1%' eqi 'dev') or ('%wkdir1%' eqi 'tst') or ('%wkdir1%' eqi 'rel')
           say Note: LEVEL overridden in '%pname%'.  %LEVEL% (instead of %wkdir1%)
        REM This code looks for a directory named 'DEV' or 'TST' or 'REL' and if found sets WORKDIR to that directory:
        let curpath=unq nam '.'
        let dir1=unq '%curpath%' spl -1
        iff ('%dir1%' eqi 'dev') or ('%dir1%' eqi 'tst') or ('%dir1%' eqi 'rel')
           workdir .
           set LEVEL=%dir1%
           let dir2=unq '%curpath%' spl -1
           iff ('%dir2%' eqi 'dev') or ('%dir2%' eqi 'tst') or ('%dir2%' eqi 'rel')
              workdir ..
              set LEVEL=%dir2%
              let dir3=unq '%curpath%' spl -1
              iff ('%dir3%' eqi 'dev') or ('%dir3%' eqi 'tst') or ('%dir3%' eqi 'rel')
                 workdir ..\..
                 set LEVEL=%dir3%

   This is now fixed.
   [Bob S.]

2) Fixed: a bug in the Migrate command, which caused it to generate an
   incorrect migrate2.bat file if the current directory was not the same
   as the work directory.

3) Fixed: a problem with TLIB's visual compare, which caused it to
   improperly handle a situation in which one of the files being compared
   could not be opened because it was open/locked by another program.
   Instead of reporting a "sharing error," TLIB's visual compare would
   pause for about 80 seconds, and then report "ERROR: No such file...".

   It now correctly reports the cause of the problem, and gives the
   user an opportunity to retry (presumably after closing the other
   [[Laura G.]

4) Added: an "unlist" button to the main TLIB GUI screen, for removing
   file names from the list.  (Only in the 32-bit GUI.)

5) Improved: the preliminary PDF version of the TLIB reference manual.

6) Plus other minor improvements.

5.54e        18-Jul-2003

1) Changed: check-in/out locking behavior slightly, for better
   handling of a situation in which one programmer works alternately
   at two or more different project levels.

   When LOCKING Y is configured, and you already have a file
   checked-out/locked (checked-out for modification), if you
   extract/check-out the same file again TLIB will normally
   just display a warning message, and let you do it:

      Note: myfile.ext was already checked out to you

   That's convenient when you are working on a problem and want to
   start over with a fresh copy of the source file.

   But if you are using TLIB's named project level feature, for
   managing multiple variants of the same project, then trying to
   check out the file again but at a different project level is
   probably a mistake.  Previous versions of TLIB nevertheless
   permitted you to do so.  However, TLIB 5.54e will report an error
   in this situation:

      ERROR: myfile.ext is checked out at a different project level
   [David P.]

2) Fixed: a bug in the 32-bit GUI version of TLIB, which caused
   the little TLIB logo icon to disappear next to source file
   names after a Reclassify-share ("R") command was done.

   The TLIB logo icon indicates that a source file is under version
   control (i.e., that a corresponding TLIB library file exists).
   If there is a TLIB logo icon next to a source file name, then
   you can double-click on the source file name to see a version
   history for that file.

   The workaround for this problem was to refresh the display
   after the Reclassify-share ("R") command.  The display can
   be refreshed by pressing F5, or in file-oriented mode by
   clicking the "Expand Wildcard" button.
   [Jim C.]

3) Fixed: a bug which could cause an "ERR: cnN" if you cancel
   from the TLIB question that asks, "Enter the depth of the main
   work directory..."
   [Jim C.]

4) Added: code to work around a bug in some network software which
   prevented MAKEDIRS M or MAKEDIRS Y from working correctly on
   a network path when creating a TLIB library or project level
   tracking file.  Symptom was

      ERROR: Could not create "some_file.ext" ...  Err=80, errno=17

   This problem was seen when the network file server wsa a Mars-NWE
   Netware Emulator (which emulates a Novell Netware server with a
   Linux machine).

5) Fixed: an install script bug which caused SETUP to report an
   error while copying POKETK32.EXE, if DOS Components (which are
   installed by default) were not installed.
   [Phil H.]

6) Fixed: a bug which caused the TLIB GUI front end to erroneously
   try to use project-level search modes when "PROJLEV =" was
   [Russell V.]

5.54d         3-Jun-2003

1) Added: a PDF version of the TLIB reference manual (and
   removed the old HTML version).

   We finally got the TLIB Reference Manual converted to a modern
   word processor, and exported to a reasonable PDF file.  The
   tlib_doc.pdf file replaces the older and uglier tlib_doc.htm
   (HTML) version.

   This version of the Reference Manual is still badly out of date,
   because we've only just begun to update the content to match the
   current version of TLIB.  But the new tlib_doc.pdf electronic
   version is improved over the printed reference manual, and all
   the page number references in the index, table of contents, and
   cross references are working hyperlinks in the electronic version
   (click on a page number to go to that page).

   You'll need Adobe Acrobat Reader version 3.0 or later to read
   the tlib_doc.pdf file.  It is a free download from Adobe's web
   site, here: http://www.adobe.com/products/acrobat/alternate.html

2) Added: the ability to configure:
        if *.snp
          replace y
        if *.snp
          deletesrc y
        if *.snp
          replace y
          deletesrc y
   to prevent the "myfile.snp exists, overwrite?" question from
   TLIB when creating Snapshot version labels.

   If you configure "replace y" for .snp snapshot files, then the
   question is always prevented.  If you configure "deletesrc y"
   for .snp files, then when you create a snapshot and check
   "Immediate Store in Library," TLIB will delete the snapshot
   file after storing it (or even after you cancel the Update),
   so that the snapshot file is not left in your work directory.
   [Stewart K.]

3) Improved: the 32-bit GUI in minor ways.

4) Improved: 32-bit versions of TLIB, to permit the use of longer
   strings in "LET" and "IFF" expressions in the TLIB.CFG file.

   The limit was 81 characters (and still is, for 16-bit versions
   of TLIB).  But in the Win32 console mode and GUI versions of
   TLIB, strings are now only limited by the 255-character line
   length limit of TLIB.CFG.
   [Scott B.]

5.54c         25-Apr-2003

1) Fixed: a bug which prevented TLIB from correctly parsing native
   project files if the file names or paths named within them
   contained blanks.  This bug was reported for CodeWright project
   files, but affected several other types of native project files,
   too.  The symptom was that TLIB would either simply ignore the
   source files which contained blanks in their names, or else it
   would incorrectly identify them with a partial name (ignoring
   the part of the name after the space).
   [Adrian N.]

2) Fixed: a bug which affected the recording of comments for
   new versions of a file, if the file name was very long (e.g.,
   more than 40-50 characters).  The symptoms were that part of
   the entered comment could be missing, or the first word of the
   comment could be split into two half-words with a line break.
   [Hardo B.]

3) Bug fix: If a damaged tlibwork.trk file contained a quoted file
   name with no close quote, TLIB crashed with a protection exception.
   [Andy P.]

4) Partial fix: If a Unicode (Korean) comment was entered when
   storing a new version, the 32-bit GUI TLIB could fail with a
   series of error pop-ups:

     "Huh! Reducing StatusLimit again!"


     "Argh!  Text box can't even hold 4900 bytes!"
     (where the number of bytes could vary)

   This has been fixed.  However, unfortunately, TLIB cannot handle
   unicode comments (nor unicode file names).  However, at least
   when you enter a unicode comment, it now displays a reasonable
   error message:
     "ERROR: TLIB does not currently support Unicode comments."
   [J. Lee]

5) Added: Native project file support for CodeWright "project space
   files" (*.psp).  A CodeWright project space file contains a list
   of CodeWright project files (*.pjt).
   [Adrian N.]

6) Added: Native project file support for Microsoft Visual Studio
   .NET project files, for the following languages:

      Visual Basic .NET  (*.vbproj)
      Visual C/C++ .NET  (*.vcproj)
      C# .NET  (*.csproj)

   Also, added native project file support for Microsoft Visual
   Studio "Solution files" (*.sln), which are similar to the
   workspace files of earlier versions of Visual Studio.

   For Visual C/C++ .NET, one option is available, to specify the
   handling of #include file references.  In the 32-bit TLIB for
   Windows GUI, the option is selected via a checkbox.  In the Win32
   command-line version of TLIB, you can add [2] to the wildcard
   specification to tell TLIB to scan for include files.  For
   example, to list the source files referenced by a VC++ .NET
   project called acme.vcproj, you could do this:

      TLIB G1LW @@acme.vcproj[2]

   Microsoft Visual Studio Solution files (*.sln) can contain
   references to any of the three kinds of Visual Studio .NET project
   files.  So TLIB lets you specify the "scan for #includes" option
   for .sln files, too.  However, it will have no effect for .sln
   files that do not contain references to .vcproj files.

   Note: Because these Microsoft language products are only usable
   on Win32 platforms, we only added support for them to the Win32
   versions of TLIB.

7) Changed: the REPLROBR W configuration setting to work regardless
   of how READONLYB is configured.  Also, added a helpful suggeston
   to the "ERROR: Browse mode extract can't be used to replace a
   writable file" message, telling the user that the problem can be
   circumvented by configuring REPLROBR Q or REPLROBR W.
   [Stewart K.]

8) Improved: a few messages, here and there, to make them more
   helpful and informative, or less verbose.

5.54b         3-Dec-2002

1) Fixed: a bug in TLIBCO32.EXE, the 32-bit version of TLIBCOMP,
   the command-line Visual Compare program.

   The problem was that it wasn't always correctly finding its own
   path, from which it determines the path of WTLIB32.EXE (to do
   the visual compare).  The symptom was that it would exit with
   the cryptic message, "rc=-1".  A workaround was to specify the
   program path on the command line.  For example:

     c:\tlib\tlibcomp myoldfile mynewfile

   Or, you could use the 16-bit version:

     tlibco16 myoldfile mynewfile

2) Added: TLIBCOPY, a tool for safely & quickly backing up and
   restoring TLIB libraries and journal files, or synchronizing
   two directories of TLIB libraries.

   Though it can be used for other things, it is especially intended
   for copying files which are only modified by appending, such as
   TLIB library and journal files.

   Tlibcopy is totally safe.  It cannot destroy any of your data,
   no matter what you do with it, because (like TLIB) it only
   appends, never replaces, existing files.  If both "source" and
   "target" file already exist, tlibcopy will copy the source file
   to the target only after first verifying that the target file
   is both shorter than the source file, and identical to the first
   part of the source file.

   Tlibcopy has options for automatic directory creation, recursive
   subdirectory traversal, and bidirectional directory synchronization.

   See DOC\TLIBCOPY.TXT for details, or run TLIBCOPY with no

3) Fixed: a minor bug which caused a spurious warning message to be
   displayed when TLIB was creating a directory on a network volume
   specified with a UNC name ("\\server\vol\directory").  In Win32
   versions of TLIB, the warning was:

     Note: mkdir(\\server\vol) failed with "already exists" error,
     yet FindFirst can't find it.  Could be due to a hidden directory,
     or a network ideosyncrasy.

   In 16-bit versions of TLIB, the warning message was:

     ERROR: mkdir(\\server\vol)

4) Added: diagnostic code to detect a strange but dangerous network

   The situation was that one of our customers was using an old
   OS/2 version of TLIB, running on Windows 2000, with his work
   directory on a different Windows 2000 machine that was serving
   as a network file server.  During an Update command, TLIB read
   only the first 4 KB or 8 KB of a source file before encountering
   an end-of-file condition, with the result that only part of the
   source file was stored in its TLIB library.

   To detect this problem, TLIB now checks the size of the source
   file before reading it, and then compares that size with the
   actual amount read.  If it encounters an end-of-file condition
   before reading the entire file, it aborts the Update operation
   with this error message:

     ERROR: Incomplete file, possible disk error, only nnn of mmm bytes read

   Unfortunately, the customer cannot reproduce this problem, and
   neither can we, so the testing of this change was necessarily

   Also, we have no way of knowing what combination of conditions
   contributed to the problem, e.g., whether or not it was specific
   to the OS/2 subsystem of Windows 2000.  So, to be safe, we added
   this test to all six TLIB executables.

   If you encounter this error message, please call us, and do not
   delete your source file!  We would very much like your help
   isolating the circumstances which cause this problem.
   [Sean F.]

5) Fixed: POKETRAK, to handle source file names with blanks in them.

   You can specify file names with blanks by putting quotes around
   them.  For example:

     poketrak tlibwork.trk "c:\dir with blanks\file with blanks.txt" v=3

   There are now two functionally equivalent versions of POKETRAK.
   POKETR16.EXE is a 16-bit "bound family-mode" OS/2+DOS version.
   POKETR32.EXE is a Win32 console-mode version.  SETUP will also
   copy one or the other to POKETRAK.EXE, depending on how you
   answer the questions that SETUP asks you.
   [John B.]

6) Fixed: the A=Add/alter project level command, to properly add
   quotes around source file names with blanks in them, when adding
   new source file names to a named project level.
   [John B.]

5.54a         4-Oct-2002

1) Added: Little status icons to the main file list display in the
   32-bit TLIB for Windows GUI:
   A tiny TLIB icon is shown for source files that are under
      version control (i.e., for which a corresponding TLIB library
      file exists).

   A red check-mark is superimposed for files that you have checked
      out for modification.

   A red backslash is superimposed for files that someone else
      has checked out for modification (locked), so that if you were
      to try to Extract/check-out for modification it would fail.
      (A blue backslash is similar, but you can still check-out the
      file for modification; this is only possible if "weak" or
      "branch/project-level" locking is being used instead of "full"
      locking -- see the "LOCKING" configuration parameter.)

   A black circle and slash means that the source file is missing
      from your work directory.

   These icons may be combined in various ways, too.  For example, a
   a black circle and slash superimposed over a TLIB icon means that
   the source file is missing from your work directory, but the
   corresponding TLIB library file exists (so you can extract the
   missing file from TLIB if you need it).

2) Changed: the default AATTR parameter setting.  The default used to
   be "AATTR SET".  Now it is "AATTR RESET".  With this change, TLIB
   will now clear the "Archive attribute" for your source files when
   it has successfully completed an Update or New-library command.

3) Added: display of the "Archive attribute" for source files to the
   "Attrib" column in both 16-bit and 32-bit TLIB GUIs.  This lets
   you see at a glance which source files you have modified but not
   yet stored/checked-in into TLIB.

   (There was also a very minor associated change in the API for the
   TLIB DLL engines; see TLIBDLL.H.)

   In combination with the little status icons (in the 32-bit GUI),
   this makes the display much more informative.

   Note that you can click on the "Attrib" column header (in the
   32-bit GUI) or the "Attrib" button (in the 16-bit GUI) to sort the
   list of source files by file attributes.

4) Changed: the Mailslot API, in minor ways.

5) Improved: command-line versions of TLIB, to display the version,
   file-date, and user-ID for a new version before prompting for

6) Fixed: a bug which caused TLIB to record the current date/time
   instead of the original date/time when storing the first version
   of an RLE-compressed (usually binary) file, regardless of the
   TOUCHSOUR setting.

7) Fixed: a bug in the TLIB GUIs which made TLIB's

       Snapshot -> "plain file list"

   command fail to record source files which had not been stored
   in TLIB.  That is, it skipped source files for which the
   corresponding TLIB library files did not exist.

   It now includes them in the file list regardless of whether or
   not their TLIB library files exist.

8) Fixed: When creating a snapshot, if it failed for some files
   because of errors, previous versions of TLIB erroneously reported:

      Note: snapshot file '{myfile}.snp' contains xxx source file

   where xxx was the number of files attempted, rather than the
   number actually recorded in the snapshot.  That is now fixed.
   Now if there are errors TLIB reports:

      Note: snapshot file '{myfile}.snp' contains xxx source file
      records (yyy others failed).

   where yyy is the number of files not recorded in the snapshot
   due to errors.

9) Fixed: In GUI versions of TLIB, the "immediate store in library"
   checkbox-option for the Snapshot command now works even if you
   have disabled the "C" (configure) command via the "commands"
   configuration parameter, and even when creating & storing the
   first version of a snapshot.

   Previously, if you disabled the "C" command by removing it from
   the list of commands in the "commands" configuration parameter
   in TLIB.CFG, then checking the "immediate store in library"
   checkbox would not work for the first version of the snapshot
   unless you also configured at least:

      updatenew y

   or (better):

      if *.snp
        updatenew y
        forceu y

   This problem occurred because the GUI front-end uses
   "c updatenew_y" and "c forceu_y" to temporarily adjust those
   two configuration parameters while storing the new version of
   a snapshot file into its TLIB library.

   To avoid this problem, the TLIB DLL engine now permits these
   two particular configuration changes even when the "C" command
   is disabled.
   [Tuyen N. & Frode N.]

10) Fixed: in command-line versions of TLIB, if you specified the
   "S" (specify version number) suffix with the "S" (snapshot)
   command, but you did not put the version specification on the
   command line, TLIB would properly prompt for the version
   specification (e.g., "*" for latest trunk versions), but it
   only used the entered version specification for the first
   source file.  For all the other source files it complained,
   "ERROR: No such version."

   Now it correctly uses the entered version specification for
   all of the source files.

11) Changed: the default setting/behavior of the SlickEpsi
   configuration parameter for TLIB32C, only.

   This makes console input a bit nicer, and avoids peculiar
   behavior seen when, while doing an Update, the user entered
   a comment line that was the maximum allowed length.  (TLIB32C
   saw a non-existant empty 2nd input line, and aborted the update.)

   That behavior was due to an old (but never fixed) Microsoft
   Windows bug in the Win32 Console I/O console functions
   ("Q137195").  The new default (like "SlickEpsi Y") causes
   TLIB32C to use reads from "standard input" instead of console
   input when requesting input from the user.

   If you prefer the old behavior, you can configure SLICKEPSI N.

12) Fixed: an obscure bug that could cause the TLIB DLL engine
   to abort with a protection exception if the DLL engine was
   sent a command requiring a file name, but no file name, so
   that the DLL engine had to ask the GUI front end to prompt
   the user for the file name.

   Since TLIB's GUIs do not do this, no users reported this bug.
   However, the bug could conceivably be encountered by users of
   TLIB's APIs.

13) Added: a new entrypoint to the low-level API to TLIB's DLL
   engines.  GET_TLIB_ANSWER_KIND_DETAIL() is similar to
   GET_TLIB_ANSWER_KIND(), but gives more detailed information
   about the purpose of a single-line or multi-line user query.
   See TLIBDLL.H for details.

14) Added: "Inspect" button to comment-entry screen, when creating
   a new library (storing the first version of a source file).

15) Improved: The handling of "interactive" commands given to
   TLIB's GUIs via "Run manual command" or via TLIB's APIs,
   instead of via the usual menus and buttons.

   For example, in earlier versions of TLIB, if you entered "N"
   via "Run manual command," TLIB would handle it as a create
   New-library command, and properly prompt you for the source
   file name.  But the comment-entry window would be the one that
   should be used for Update commands; e.g, the "History" button
   was enabled instead disabled.  Now the TLIB GUI correctly
   displays the proper New-library comment entry window, with
   the History button disabled, and with an "Inspect" button
   instead of a "Visual Compare" button.

16) Changed: the appearance of the vertical "drag-bar" in Visual
   Compare, to make it more obvious that it can be dragged side
   to side to resize the two panes.
   [Jesse D.]

17) Fixed: When the current TLIB configuration file was in a
   directory that had blanks in the path, the "Edit TLIB.CFG"
   button in WinTLIB didn't work, because TLIB failed to put
   quote marks around the path when passing it to your editor
   (or Notepad).
   [Jesse D.]

18) Fixed: A misleading error message.

   TLIB library files always begin with a ".V".  When TLIB opens
   a library file and finds no ".V" at the beginning, it now
   says "ERROR: Not a TLIB library file..." instead of saying
   "ERROR: Could not open library file...", which was misleading.
   [Jesse D.]

19) Fixed: a bug which caused incorrect captions above the visual
   compare panes if you clicked on the "Visual Compare" button
   (or "Delta" in the 16-bit GUI) in the comment-entry window
   while storing a new snapshot with the "Immediate Store in
   Library" option checked.

5.53L/m       27-Jun-2002/7-Aug-2002
              (Note: the 16-bit GUI is still version 5.53k/g1)

1) Fixed: a bug which caused a missing field #7 (source file
   path\name) in the journal file.

   This caused the journal file records to have only 12 fields
   instead of 13, and caused the 6 subsequent fields to be in the
   wrong positions: lock file path, version number, source file
   "key" (name), current and "other" project level names, and
   Update comments.

   This bug was introduced in version 5.53a (actually in version

   The workaround for this bug is to examine the number of fields
   in each journal file entry, and if there are only 12 fields
   insert a copy of the source file "key" (name) as a substitute
   for the missing source path\filename field.

   We have created a tool to make this repair to your journal
   files; look for JOURFIX.ZIP in the "downloads" section of our
   web site.

2) Fixed: a bug which caused the version number to be omitted from
   the journal file for A and AP commands.
   [Jeff Y.]

3) Fixed: a bug which caused the "Inspect" button to not work
   in the 32-bit GUI version of TLIB.  (This bug was introduced in
   version 5.53k.)

4) Fixed: It was truncating the configured PATH at the first
   embedded blank if you took a snapshot with "immediate store
   in library" checked.
   [Ken L.]

5) Added: another API, similar to the WM_SETTEXT Windows Messaging
   and DDE-based APIs, but utilizing Windows Mailslots for
   interprocess communication.  This API is the "glue" connecting
   our (still incomplete) Microsoft SCC API DLL to TLIB.  Mailslots
   are similar to named pipes, but, unlike named pipes, they are
   supported under Win-95/98/Me as well as under Win-NT/2K/XP.

5.53k         8-May-2002

1) Fixed: a bug in the TLIB Visual Compare which could cause a region
   of differences to be omitted from the display.

   In the 32-bit version, it could happen if a single region of
   differences exceeded 10,000 characters but was less then 200 lines.
   In the 16-bit version, it could happen if the region of differences
   was more than 5000 characters but less than 100 lines.

   The symptom was that at first glance the two versions of the file
   appeared to have no differences in that region, but if you looked
   closely you would notice that a large block of line numbers were
   skipped without a "divider" (elide-indicator) line.
   [Krys B.]

2) Improved: The 32-bit TLIB Visual Compare display of differences
   between certain files, especially when large ranges of lines are
   all changed but only in minor ways.

3) Fixed: A bug which could cause 16-bit protected mode versions of
   TLIB to GPF when doing a Native Project Mode "open" of a web site
   which had an "href=" reference to a file name with no extension.

4) Added: code to TLIB work around a Novell 4.83 client bug which causes
   "ERR: putrec write failed" errors.  The bug causes a write to fail
   if it is to a locked region when both lock and write use the same
   file handle.  This code works around the problem by unlocking the
   region and retrying the write, but it still displays the error
   message one time, followed by a message saying, "Novell 4.83 client
   bug detected; workaround successful."

   This bug is detected by TESTLOCK as a failure of Test #8:
   Test #8  FAILED!  (Adjacent region locks, and lock/write conflicts)

   The bug was observed under Windows 2000 with the latest Novell
   4.83 client.  It did not happen with an earlier (4.90?) client
   circa Sept. 2001, a/k/a 4p90p20000717.

5) Added: to command-line versions of TLIB, an informative message
   that says "Aborted!" when you abort a multi-page version history
   listing by pressing Enter instead of Spacebar.
   [Rich H.]

6) Added: a 32-bit version of TLIBCOMP.EXE, the command-line visual
   compare utility.  The 16-bit version is now named TLIBCO16.EXE,
   the 32-bit version is named TLIBCO32.EXE, and SETUP will also copy
   one or the other to TLIBCOMP.EXE, depending on how you answer
   the questions that SETUP asks you.

   The two versions are very similar, but the 32-bit version avoids
   long file name restrictions.  You can run either of them without
   any parameters for a "help" screen.

5.53j         28-Feb-2002

1) Improved:  TLIB's handling of non-relative URLs when traversing a web
   site to find all its files, when you "open" your index.html file (or
   another HTML file) in TLIB as a "native project file."

   If you have a copy of your web site on a local hard disk or network
   drive, with "drive letter" access, TLIB can use the initial/main web
   site file as a "native project file," so that you can just "open" it
   in native project mode.  TLIB can read it and find all the references
   to other web pages, read those web pages, etc., to find all the files
   in your web site.

   This is very handy.  It lets you simply open an index.html file in
   TLIB, and immediately see the complete list of files that make up
   your web site.

   Note that this works only with links to other pages on your own web
   site.  TLIB doesn't actually fetch pages across the Internet with
   the HTTP protocol.  (If it did, then you couldn't do version control
   on sites with server-side includes, CGI scripts, etc.)

   The process of following the links is quite simple if the links
   are "relative" to the initial page.  For example, a link like
   <a href="xyz/anotherpage.html"> is obviously in the "xyz" subdirectory
   of the page containing the link.  (It is a little more complicated
   than that if you are using server-side includes, but you get the idea.)

   However, a link like <a href="http://www.xyz.com/abc.html"> is
   harder to handle.  First, TLIB must to decide whether it is on
   your web site or not, and if it is part of your web site then TLIB
   must find the file on your hard disk.  The problem is that the link
   gives a web address, and TLIB needs a way to translate the web
   address into a local disk location.

   Links like <a href="/def.html"> present a similar problem.  In this
   case, we know that the file def.html is on our web site, but where
   is it on the local hard disk or network drive?

   To solve these problems, HTML provides the <BASE href=...> tag, which
   can be placed in the <head></head> section of an HTML file.  This tag
   specifies the web address for a file, which tells TLIB two important
   things: the domain for your web site, and the way that web locations
   correspond to local hard disk locations.  A <BASE href=...> tag
   tells TLIB all it needs to know to properly translate the non-relative
   links on your web site into local hard disk locations, so that it
   can find all your web site files.

   Note that you need not add <base href=...> tags in all of your
   HTML files.  If you have one in just your initial page, TLIB can use
   that information when traversing the links and finding all the rest
   of the files that comprise your web site.

   To handle links like <a href="http://www.xyz.com/abc.html"> requires
   a <BASE href=...> tag.  Without a <BASE href=...> tag, TLIB must
   assume that all such links point to other web sites.

   However, TLIB can often handle links like <a href="/def.html"> even
   without a base tag.  To do so, TLIB makes a reasonable guess about
   the location of your initial web page file: that its web location
   is in the top/root directory.  So TLIB looks in that directory for
   the def.html file, too.

   2) Fixed:  File redirection in the Win32 GUI version of TLIB.

   This obscure feature lets you "redirect output" in the GUI versions
   of TLIB, to create a status log file.  Simply use the "Run"
   manual command window and enter something like ">c:\tliblog.txt"
   and your status log messages will be written to c:\tliblog.txt.
   You can enter ">" (with no file name> to close the log file.

   This is useful if you need to record more status log lines than
   TLIB preserves in memory and displays in the "View Log" window.

   3) Fixed: a bug which could cause a "ERR: m_ov" error when debug
   prints were enabled via the "-d" command-line option, and an HTML
   file with extremely long lines was being parsed.

5.53i         26-Dec-2001 & 16-Jan-2002 & 7-Feb-2002
              (Note: the GUI is still version 5.53h)

1) Fixed:  TLIB's built-in tables of file extensions which it uses
   to implement two options that are available when "opening" an
   HTML file (e.g., index.html) as the "project file" for a web site:

   [1] "include binary files (image, sound, etc.)", and
   [8] "skip links to non-displayable files"

   The problem which this solves was seen when both of these options
   were selected together (i.e., [9] or [11] was specified).  In this
   case, TLIB was ignoring href= links to non-text displayable files
   (and audio files) such as .jpeg, .gif, .pdf, .mid & .mp3, because
   it incorrectly considered them to be "non-displayable."  Now TLIB
   correctly finds these file names.

   To implement these two options, TLIB looks up file extensions in
   three built-in case-insensitive lists of file extensions:

     binary displayable:  .gif .jpg .jpeg .mpg .mpeg .bmp .dib .png
     .ico .pcx .wmf .tif .tiff .pict .pdf .mid .wav .mp3 .ra .ram .swf
     .doc .xls .xlw .wri

     nonbinary displayable:  .html .htm .shtml .txt .rtf .ini

     binary nondisplayable:  .exe .com .pif .ace .arc .arj .bh .bz2
     .cab .gz .ish .jar .lha .lzh .pak .pwc .rar .sit .tar .taz .tgz
     .z .zip .zoo

   Note that these lists are ONLY used for implementing these 2 options
   while parsing HTML files to "open" them as "native project files."

   The lists are not used to determine the storage format (text vs.
   binary) which TLIB chooses when creating TLIB library files.  That
   is based on the "FILETYPE" configuration parameter and, when
   FILETYPE AUTO is configured, on an examination of the actual file
   contents.  (See CONFIG.TXT and look for "FILETYPE")

   By the way, if you think these lists of file extensions need
   adjusting, please tell us.

2) Changed: a dire-sounding "Warning" message which really didn't
   indicate a problem into a milder "Note" message.
   [Stacey G.]

3) Fixed: The 7-Feb-2002 re-release corrects an error in the
   installation program (SETUP.EXE), which caused the command-line
   executable, TLIB.EXE, to be a copy of the DOS-only version,
   TLIBDOS.EXE, rather than the requested Win32 console mode
   version, TLIB32C.EXE.  There was no change to TLIB itself.

   The workaround for this problem was simple: just go to the
   TLIB installation directory and copy TLIB32C.EXE to TLIB.EXE.

5.53h         14-Nov-2001

1) Fixed: a bug which could cause the TLIB GUI to hang with a flickering
   hourglass mouse cursor (busy indicator) while displaing the initial
   "splash screen," if you ran it after a fresh install without first
   creating a TLIB.CFG file with the TLIB Configuration Wizard.
   [Joe L.]

2) Improved: the usability of the standalone visual compare, in several
   subtle but significant ways.  For example, when you close the visual
   compare screen, it now returns to the file and version selection
   screen, rather than exiting completely, in case you want to do
   another comparison.

3) Fixed: a bug in the "native project mode" feature of the GUI
   versions of TLIB, which caused the name of the project file being
   opened to be translated to all upper-case.  This was generally
   inconsequential, except when the project was a Web site and the
   "project file" being opened was index.html.

4) Added: instructions in TLIB\DOC\READ_ME.TOO for how to run TLIB
   under Linux using the WINE Windows Emulator.

5.53g      [never released]

5.53f         23-Oct-2001

1) Added: support for parsing .shtml files (HTML w/ Server Side
   Includes), to discover the #include directives and recursively
   discover what files comprise the web site.

   (This feature, of course, only works in the versions of TLIB
   which support long file names.)

   2) Added: the "Diagnose" button when opening a web site in
   native project mode, from GUI versions of TLIB.  Clicking the
   Diagnose button lets you see exactly how TLIB processed your
   web site, including the file and line number where each file name
   was found.

   Command-line versions of TLIB can access this feature via the
   "-d256" command-line option, e.g., like this:

      tlib32c -d256 g1lw @@c:\webdir\index.html[3] >tmp.tmp

   The diagnostic lines in the output begin with the word "Found".

   The "[3]" options encode three options in a bit-sensitive integer.
   In GUI versions of TLIB, these options are selected by checkboxes.
   In command-line versions of TLIB, you can select the three options
   by adding 1, 2, and/or 8 together to make an integer from 0 to 11:

       1 = include binary files (image, sound, etc.)
       2 = recursively scan for file names
       8 = skip links to non-displayable files

   In the example above, we used "[3]" for the options.  3 = 1+2,
   so [3] selects the first two options but not the third.

3) Fixed: a bug, introduced in TLIB 5.53e, which caused improper
   handling of checkable options in the Open Named Project File
   dialogue of GUI versions of TLIB for Windows.  The most obvious
   symptom was project file specs with the options set to "[10]"
   or "[11]".

4) Fixed: a bug that caused duplicate entries in the MRU (Most
   Recently Used) drop-down list in the Open Named Project File

5) Fixed: a bug in the handling of Microsoft Visual Developer
   Studio .mak files, which caused TLIB to fail to find the
   "external dependencies" (header files).

6) Improved: compiler-native project file support for Microsoft
   Visual Developer Studio, so that TLIB can now find .def files
   which are used in link or lib steps.

7) Fixed: a bug which caused the 32-bit GUI version of TLIB, when
   creating a snapshot or file list with the Snapshot command in
   native project mode for a .html or .shtml file, to miscalculate
   the default snapshot or list file name.

5.53e         9-Oct-2001

1) Added: support for parsing HTML files in Native project mode.

   This lets you "open" your index.html or index.htm file in TLIB
   as if it were a named project files.  TLIB will read and parse
   the HTML files, recursively scanning for src= and href=, to
   find all the files that comprise your web site.

   This simplifies keeping your web site under TLIB Version Control,
   especially if there are a lot of extraneous files in the same
   directory, so that simple wild-card specifications would find
   too many unrelated files.

   Several options can be used to adjust which files are included
   in the list:

     __ include binary files (image, sound, etc.)
     __ recursively scan for file names
     __ skip links to non-displayable files

   TLIB 5.53e finds files indicated by all the standard src= and
   href= HTML tag fields, and also attempts to find files referenced
   in javascript, though that isn't always possible.

   [10/23/01 - Note: The ability to handle .shtml files with server-side
   include directives was added in TLIB 5.53f.]

2) Converted: The 32-bit versions of TLIB are now built with version 6
   Microsoft compilers (VC++ and Visual Basic), instead of version 5.
   This should not result in any functional change.

3) Improved: some diagnostic messages.

4) Changed: The behavior of the ".mak optimization" feature of TLIB's
   compiler-native project file support for Microsoft Visual Developer
   Studio project files.

   This features enables TLIB to read the generated .MAK file instead
   of the corresponding .DSP (Developer Studio Project) file, to
   obtain the dependency information, which avoids the need to read
   all your source files and scan for #include directives.

   In TLIB 5.53c and earlier, TLIB would only read the .MAK file
   in lieu of the .DSP file if the two files had near-identical
   dates.  However, if you do an explicit "Export Makefile" command
   in Visual Developer Studio, then the resulting .MAK file will
   have the current date/time, but the corresponding .DSP file may
   have a much older date/time.  So, TLIB 5.53e now reads the .MAK
   file in lieu of the .DSP file if the .MAK file is newer than the
   .DSP file.

5) Fixed: a subtle heap-management bug in 16-bit command-line
   versions of TLIB.  Oddly enough, no symptoms of this bug were
   ever observed.

5.53d      [never released]

5.53c         29-Jun-2001

1) Fixed: a netsetup bug, which caused part II of the installation
   process to fail, when installing under Windows 2000 with a user ID
   in the "power user" group.  Symptom was that netsetup forced a
   premature re-boot at the 23% complete point.

   The workaround was to install as "Administrator."
   [Pier Y.]

5.53b         29-May-2001

1) Fixed: a bug in the 32-bit GUI version of TLIB which could cause
   a hang (infinite loop) or "Run-time error '35600'" under some
   circumstances while doing an Extract with "S - Specify Version #"

   This bug was introduced in TLIB 5.53a.

2) Fixed: a bug in both the 16-bit and 32-bit GUI versions of TLIB,
   which occurred if you entered an all-blank comment while doing
   an Update or New library command.

   Entering such a comment erroneously enabled the "OK" button
   just like entering a non-blank comment does.  But clicking OK
   would cause the file to be skipped, like clicking the "Skip"
   button, except that the only indication that the file had been
   skipped was in the status log (click "View Log").  Also, the
   status column erroneously showed "0" (success) instead of "1".
   [Chad C.]

3) Changed: the installation program so that the default name of the
   Start Menu folder for TLIB is now "TLIB Version Control" instead
   of "TLIB for Windows," unless you already have a "TLIB for Windows"
   start menu folder.  We also moved some less-frequently used
   shortcuts into subfolders: "16-bit" and "Add-Ins."

5.53a         2-May-2001

1) Fixed: a bug introduced in both the 16-bit and 32-bit versions
   of the GUI TLIB in 5.52i/beta.

   The main symptom was an error which occurred after switching
   directories from one in which a named project level was used to
   one in which it was not.  When an "expand wildcard" was attempted,
   an error occurred:

      ERROR: The A and T search modes cannot be used because PROJLEV
      is not set to a named level.

   Workaround was to exit TLIB and restart it.

2) Fixed: an obscure bug in the 16-bit TLIB DLL engine API: calling
   GET_TLIB_CONFIG_VAL() or GET_TLIB_CONFIG_VAL_P() to look up the
   value of a numeric configuration parameter returned garbage.

   Workaround was to use a "G2parametername" command to look up
   numeric configuration parameters.

3) Improved: both 32-bit and 16-bit GUIs, to "grey-out" (disable) the
   R-share command when TLIB is not configured to selectively share
   files (i.e., when NUMLIBDIR=1).

4) Fixed: a problem with running a beta 5.52i or 5.52j 16-bit GUI
   version of TLIB under Win-OS/2, which could cause the following
   error message to pop up:

      Error, GetObjectAPI returned rc=30 (should be 50)

   (This bug was not present in any non-beta version.)

5) Added: support for scanning Borland Delphi projects for {$I...}
   include file references.

   In the GUI versions of TLIB, you can just check the "scan for
   includes" checkbox when openning the .DPR project file, in
   compiler-native project mode.

   In command-line versions of TLIB, you should add [2] to the
   wildcard specification to tell TLIB to scan for include files.
   For example, to list the source files referenced by Dephi
   project called acme.dpr, you could do this:

      TLIB G1LW @@acme.dpr[2]

   Also, the [1] option now adds the .CFG and .DOF files to the list,
   instead of just the .OPT and .RES files.  Note that the [option]
   number is bit-sensitive, so [3] is the combination of [1] and [2].
   Thus, the following TLIB command will list the acme.dpr source
   files, plus acme.opt, acme.res, acme.cfg, and acme.dof:

      TLIB G1LW @@acme.dpr[3]

6) Added: extended wild-card syntax to let you tell TLIB to recursively
   scan individual C, C++, and Pascal source files for include

   To use this feature, instead of specifying the source file name to
   TLIB, simply pretend that it is a compiler-native project file:
   prefix the file name with "@@" and add the "[2]" option to the end.

   For example, instead of specifying MYFILE.C, you can specify
   @@MYFILE.C[2] to make TLIB scan for include files (header files).
   Thus, the following command will list myfile.c plus the non-system
   include files that it references:

      TLIB G1LW @@myfile.c[2]

   Contrast that command with this one, which lists only one file,

      TLIB G1LW myfile.c

   Currently, this feature is supported for C, C++, and Pascal, only.
   For C/C++ files, it displays include files referenced in "quotes",
   but not include files reference in <angle-brackets>, since those are
   normally standard compiler or system header files.

   For Pascal files, only the Borland include directive syntax is
   supported:  {$I filename}, {$INCLUDE filename}, etc..

   Note: the C, C++, or Pascal source file must already be present
   in your work directory for TLIB to be able to scan it for include

7) Improved: the TLIB GUIs in subtle ways.  For example, command menu
   choices are more verbose/descriptive.

8) Released: TLIB 5.53a, including TLMERGE, which is a 32-bit version
   of our DIFF3 merge tool.

9) Discontinued: TLIB for DOS as a separate product, because nobody
   was buying it.

   TLIB for DOS is still included as part the TLIB Combo Edition,
   but to install it you'll need to be able to run Windows.  If you
   need to put the MS-DOS version of TLIB onto a DOS-only computer,
   you'll have to first install it on a computer that has some
   version of Windows running (by running Setup and then the TLIB
   Configuration Wizard).  Then you can copy the TLIB for DOS
   executables (TLIBDOS.EXE, TLIBX.EXE, etc.) and TLIB.CFG from the
   Windows computer onto the DOS computer.

5.52j/beta    22-Apr-2001

1) Fixed: a bug in the beta version of TLMERGE.EXE, which caused
   it to identify extraneous "collision" areas.  The fixed version
   displays the version number 5.52b.  [Joev D.]

2) Fixed: a bug which caused TLIB to insert an incorrect revision
   history comment block in an extracted file if it was extracted
   by specifying a version number of "*-1" and if the last version
   in the TLIB library had multiple lines of comments stored with it.
   [Joev D.]

3) Added: a vertical divider bar to the Visual Compare screen, which
   you can drag left or right to resize the two panes, in the Win32
   GUI version of TLIB, only.

4) Fixed: a bug which prevented the right mouse button menu from
   popping up (for copying to clipboard) on the Visual Compare
   screen of TLIB.  (Note: this feature is only available in the
   Win32 GUI version of TLIB.)

5) Added: an "Inspect" button to the version history list, in the
   the 32-bit GUI version of TLIB, only.

   The Inspect button allows you to take a quick peek at a selected
   version of a source file, without extracting / checking it out.

6) Fixed: A bug in the Configuration Wizard which was included with
   the previous beta TLIB, in which the generated TLIB.CFG file
   lacked a CR/LF after the NUMHELP line.  The fixed Configuration
   Wizard identifies itself as version 5.52j.
   [Ashim J.]

7) Improved: several subtle user interface issues.

5.52i/beta    18-Apr-2001

1) Added: a beta-test version of TLMERGE.EXE, which is a 32-bit
   version of our venerable DIFF3 merge utility.

   TLMERGE has several advantages over DIFF3, including the ability
   to handle long file names, and the ability to use more memory so
   that it can process large files with fewer passes.  Using TLMERGE
   instead of DIFF3 also permits passing longer command lines (as
   is sometimes required when TLIB's M/migrate command generates
   TLMERGE or DIFF3 commands in a migrate2.bat), and it avoids a
   strange hang which one of our customers encountered when running
   DIFF3 under Windows 2000.
   [Joev D.]

2) Added: enhancements to the version history list which is displayed
   in the Win32 GUI version of TLIB when you double-click on the
   name of a source file, and in certain other contexts.  There are
   now extract and compare command buttons, and an option to let
   you select and copy to clipboard.

3) Added: enhancements to the Run Manual Command dialogue, including
   a handy "Command help" button, in both 16-bit and 32-bit GUI
   versions of TLIB.

4) Fixed: a minor bug which caused the "current version" flag lines
   to be shown twice in an LX command's version history display if
   there was only one version in the TLIB library.

5) Fixed: a bug which crashed the 32-bit GUI version of TLIB if you
   tried to execute a 0-length command in the Run Manual Command

6) Changed: to using a newer version of Wise InstallBuilder (v8.13)
   for making our installation package.  (This change should not
   affect anyone.)

5.52h/beta    30-Mar-2001

1) Improved: Right mouse button behavior in the main window of
   both 16-bit and 32-bit GUIs.

   If no files are already selected, and you press the right mouse
   button over the main file list on the main TLIB window, it
   now selects the source file that is under the mouse cursor
   and then pops up the menu.  Earlier versions required you
   to first press the left mouse button to select the file, then
   press the right mouse button to pop up the menu.

   (This was actually added in TLIB 5.52g/beta, 1/19/2001.)
   [Dan H.]

2) Improved: TLIB's support for sharing files between projects.

   You can now more easily use a single work directory with a mixture
   of source files, some private and some sharable.  TLIB can now
   be configured to ask you, wen you create a new TLIB library,
   whether the source file is non-shared or sharable, to determine
   where the TLIB library file should be stored.

   A pair of new TLIB configuration parameters is provided for this

       NUMLIBDIR <number,1-5>
       LIBDIRQ <number,1-5>,<quoted-string>

   The default is "NUMLIBDIR 1" and no LIBDIRQ parameters (meaning
   that users will not be asked where TLIB library files should be

   Our assumption is that you will configure TLIB's PATH parameter
   with two different directories: one for private files, the other
   for sharable files.  (The PATH configuration parameter tells TLIB
   where to put its library files.)

   Most of your source files will probably be PRIVATE to particular
   program/projects.  The TLIB libraries for these files will be kept
   in separate directories (or directory trees), hidden from all other
   projects/programs.  To keep them separate, TLIB normally uses the
   name of your work directory as a part of the path to the TLIB
   library files (though it is also possible to configure TLIB to use
   other approaches).

   Source files which need to be SHARED with another project/program
   will have their TLIB libraries stored in a shared, common
   directory (or directory tree), visible to your other projects/

   The new Configuration Wizard included with TLIB 5.52h/beta can
   configure the PATH, NUMLIBDIR, and LIBDIRQ parameters for you, for
   a mixture of shared and private files.  The PATH parameter will be
   similar to one of these:

       path "\\Server\vol\TLIB\LIBS\%wdir%;\\Server\vol\TLIB\SHAREDLIBS\"

       path "\\Server\vol\TLIB\LIBS\%wdir%*\;\\Server\vol\TLIB\SHAREDLIBS\*\"

   (In this example, we configured TLIB to keep sharable library
   files in or under the \TLIB\SHAREDLIBS\ directory on the server.
   Note: keep the line under 254 characters long!)

   If there's an asterisk in the path (as in the 2nd example above),
   then you are using tree-structured work directories.  If so, then
   you will probably want TLIB to keep track of subdirectories for the
   shared files, too, so the Configuration Wizard includes an asterisk
   in the path for the shared library files, as in the second example
   above.  However, this is optional, and you can delete the second
   asterisk, like this:

       path "\\Server\vol\TLIB\LIBS\%wdir%*\;\\Server\vol\TLIB\SHAREDLIBS\"

   If you do so, then your shared source files need not reside in
   subdirectories with matching names, to be visible to other projects.
   E.g., you could have a shared IOSTUFF.H file in the main work
   directory for one program/project, but put it in a subdirectory
   of the main work directory for another program/project.

   (However, this works best if you are using a named project level,
   because the named project level can keep track of where the source
   file belongs.)

   The NUMLIBDIR and LIBDIRQ parameters are used to describe the paths
   in the the PATH configuration parameter.  For example:

       numlibdir 2
       libdirq 1,"Regular location for TLIB libraries (\\Server\vol\TLIB\LIBS\%wdir%*\)"
       libdirq 2,"Location of libraries for sharable files (\\Server\vol\TLIB\SHAREDLIBS\)"

   (Note: feel free to change the messages, if you wish.)

   These parameters define the choices that will be displayed to users
   when creating new TLIB libraries (i.e., when adding new source
   files to your program/project), or reclassifying them with the "R"

   If you are working on a program/project which needs to share a
   sharable source file that was first created for a different
   program/project, there are two scenarios:

     1) You are not using TLIB's named project levels.

     In this case, you can simply extract (check out or browse) the
     source file like any other.

     2) You are using TLIB's named project levels.

     In this case, you can add the file to your project's named
     project level.  In command line versions of TLIB, use the "AL"
     command.  In GUI versions of TLIB, check the "Library" search
     mode, then Expand wildcards, the select the file, and then click
     the "Add/alt" command ("Add/Alter project level").

   Note: you will only be able to share files which have libraries
   in the SHAREDLIBS directory.  If you have a file that was first
   stored under TLIB as non-shared, but now you wish to share it
   with another program/project, you'll need to move the TLIB library
   file from its original location to the location used for the
   libraries for sharable files.  That's what the new "R" (reclassify)
   command does; see below.
   [Ram M.]

3) Added: the "R" (Reclassify-shared) command, to reclassify source
   files as "sharable" with other projects, by moving their TLIB
   libraries into a shared directory/folder.

   Use this command when you have a source file that was "private"
   for a particular project, but you now need to share it with
   one or more nother projects.  The "R" command makes the TLIB
   library available to the other projects.  Then you will need to
   change to the new project (i.e., change your current directory
   to the other project's work directory), and (if you wish) extract
   the source file.

   If you are using TLIB's named project levels, you'll also need
   to add the file to the current project level for the other
   project.  Use the "L" (libraries) search mode to find it, and
   then use the "A" (Add/alter project level) command to add the
   newly shared file to the project level.

   For the "R" command to work, the NUMLIBDIR, LIBDIRQ, and PATH
   parameters must be appropriately configured; see v5.52g, below,
   or use the new TLIB Configuration Wizard to configure them.

   In this beta release, the "R" command is available in the
   command-line versions of TLIB, only.  It is not available in
   the GUI versions of TLIB (except via "Run Manual Command").  It
   will be added to the two GUI versions of TLIB before release.

4) Improved: The TLIB Configuration Wizard.

   We added support for the new "R" (Reclassify-shared) command to
   the TLIB Configuration Wizard.  The Configuration Wizard will
   now give you the option of choosing BOTH shared and private
   locations for your source files, instead of just one of the
   other.  The will cause the Configuration Wizard to generate
   a TLIB.CFG file that properly configures the NUMLIBDIR, LIBDIRQ,
   and PATH parameters to support sharing some, but not all, of
   your files between projects.

   Also, the Configuration Wizard now does a better (more complete)
   job of configuring named project levels.

   Also, we changed the release numbers we use for the Configuration
   Wizard, to be more consistent with TLIB's release numbers.  This
   version of the Configuration Wizard now identifies itself as
   version 5.52.

5) Fixed: a bug which caused TLIB to incorrectly deduce source
   file directories from the locations at which the corresponding
   library files were found, in a particular set of circumstances.

   In GUI TLIBs, the symptom was that the directories shown in the
   "Path" column on the main screen were incorrect.  Also, if you
   tried to do a TLIB operation (for example, if you double-clicked
   on a file name to get a version history listing in the GUI),
   then TLIB displayed an error similar to this one:

      ERROR: No such library file: "C:\tlibs\abc\..\xyz\myfile.c_$".

   The problem occurred when two (or more) semicolon-separated
   library/lock file directories were specified by the PATH
   configuration parameter in TLIB.CFG, and TREEDIRS_Y was also
   configured, and "\*\" was configured as part of the second
   library files path (that is, after the semicolon), and
   "Include SubDirs" was checked in the TLIB GUI (or the "I" search
   mode suffix was used in a command-line version of TLIB), and the
   library or lock file was found in a subdirectory.
   [Ram M.]

6) Added: support for right-clicking on a file or directory name
   in any of TLIB's most-recently-used (MRU) dropdown lists, to
   remove that file name or directory name from the MRU.
   (This is in only in the 32-bit TLIB GUI.)
   [Ram M.]

7) Added: "Open with..." to the Command and right-mouse menus in
   the 32-bit TLIB GUI.

   Also, ordered these menus a bit more logically, in both 16-bit
   and 32-bit TLIB GUIs.

8) Fixed: a minor anomoly in TLIB32C.EXE, the Win32 console mode
   version of TLIB, which caused an extra blank line to be displayed
   after it prompted for input.  It no longer does.

   However, TLIB2.EXE also does this when run under Windows
   NT/2000.  We did not change it, because, due to operating system
   differences, TLIB2.EXE only displays the extra blank line when
   run under Windows NT/2K, not under OS/2.)  [Joev D.]

9) Fixed: A bug which could cause a protection exception if you
   entered a command with no file name in the TLIB GUI's "Run
   Manual Command" window.

10) Fixed: A bug in the Win32 GUI and console mode (command-line) versions
   of TLIB which could cause TLIB to fail to reopen a project-level
   tracking file or journal file due to concurrent access by other
   TLIB users.  A typical symptom was error messages like these:

     ERROR: Cannot open "T:\TLIB\PRJS\DEV\TLIBWORK.TRK", error = 5,13,5.
      Err=5, errno=13 (access denied)

   Or these:

     ERROR: Could not open journal file: "T:\TLIB\LIBS\JOURNAL.DAT"
     Err=80, errno=17
     err #5, attrib=33 ro=1
     Retry? y
     ERROR: Could not create journal file: "retry?"
     Err=123, errno=22
     Retry? n

   The circumstances under which this problem could be seen were
   that two or more users were trying to process massive numbers of
   files at the same time, using a Win32 version of TLIB.  (The
   problem with accessing the journal file was equally likely with
   both the GUI and Console mode versions of TLIB; the problem
   with accessing the project level tracking file was much more
   likely to be seen in the GUI version.)

   This bug affected only 32-bit versions of TLIB.
   [Ram M. and Joev D.]

11) Fixed: A bug which caused command-line TLIBs to fail to recover
   after prompting the user to "Retry?" file access, if the user
   answered "Y".

   One way to reproduce the problem was to open the TLIB journal
   file "exclusively" with another program, then do a TLIB operation
   that would be recorded in the journal file.  TLIB would display
   "awaiting access..." for a couple of minutes, then "gave up!"
   and display a "Retry?" prompt.  If you answered "y" (yes), then
   TLIB should have resumed awaiting access.  Instead, however,
   it displayed strange errors and quit.  For example:

     ERROR: file length check failed: retry? (ff=-1,op=450903,1).
     Try configuring DATAPATH Y

   (The "Try configuring DATAPATH Y" message could be displayed even
   if DATAPATH Y was already configured.)

   This bug has now been fixed.  [Joev D.]

12) Documented: The IFC/ENDIF configuration conditional block, which
   allows you to condition TLIB's configuration parameters on what
   command is being performed.

   This feature has existed in TLIB for quite a while, but until now
   we hadn't figured out a good use for it.  Now we have.  See

13) Increased: the maximum command line length from 130 characters to
   274 characters in 32-bit versions of TLIB.

5.52f        13-Feb-2001  (32-bit GUI 5.52f/g2 & 16-bit GUI 5.52e/g1)

1) Fixed: Under some operating systems (e.g., NT 4.0), the 32-bit
   TLIB visual compare was malfunctioning rather badly: displaying the
   wrong font, text not lined up with line numbers, extra vertical
   scroll bars, etc..  This bug was introduced in 5.52a/beta.
   It has now been fixed.
   [Julian W.]

2) Fixed: Under some operating systems, the 32-bit GUI visual
   compare wasn't displaying whitespace differences correctly (with
   the "shaded box" character), with the Terminal font default (which
   is normally the best font for visual compares.  We think we have
   this fixed now, but if you you find that whitespace differences are
   not properly highlighted using the Terminal font on your system,
   please tell us.

3) Changed: the release numbers we use for the GUI TLIBs, to be
   more nearly consistent with the product version number.

4) Improved: The 32-bit GUI TLIB now memorizes the main listbox
   column widths and the window sizes for the main and visual
   compare windows, saving/restoring them to/from TLIB.INI.
   [Julian W.]

5) Improved: got rid of that annoying blinking scroll bar on the
   visual compare screen.  Also improved the tab and arrow key behavior.
   Also, we now usually call it "Visual Compare" instead of "Delta."

6) Improved: the way that the main window "stretches" when the
   window is resized in the 32-bit GUI TLIB, to accomodate longer
   file names & paths.

7) Added: ability to customize the colors used by the Visual Compare
   (see the Compare Options screen).  This is especially useful
   for folks who are partially colorblind.
   [Julian W.]

8) Fixed: a minor problem selecting version numbers from the
   version list in the GUI versions of TLIB, if the current WORKDIR
   or PROJLEV versions were flagged in the list.  (But was introduced
   in 5.52b/beta.)

9) Added: jour2snp.pl, a small Perl program to create TLIB snapshot
   version label files "after the fact" by examining the TLIB journal
   file.  With this tool, you can create a snapshot version label
   for any desired date and time, for either the latest trunk
   versions or any named project level.  This can be a real help
   if you need to retrieve an old version of a program, but didn't
   remember to make a version label for that old version.
   (Download it from our Web site if you need it.)

5.52d/beta    5-Feb-2001  (Win32 TLIB 1.109s & 16-bit WinTLIB 1.105y)

1) Fixed: "ERR: fl0t"
   [Jonny W.]

3) Improved: Migrate command, to reduce the chance of this error:

      ERROR: one or more lines in MIGRATE2.BAT are longer than 127 characters,
      so it won't run correctly!  Try to shorten your CMTFLAG configuration
      parameter, and/or shorten or eliminate your CMTSUFFIX configuration
      parameter.  Then re-do the migrate.

3) Alphabetized the list of compiler-native project file formats (in the
   "open" dialogue in TLIB for Windows).

5.52c/beta     2-Feb-2001

1) Incorporated 5.52b enhancements into the 16-bit TLIBX.EXE, and
   made some efficiency improvements.

5.52b/beta     1-Feb-2001 (Win32 TLIB 1.109r & 16-bit WinTLIB 1.105x)

1) Fixed: a subtle bug in the 5.51i Migrate command improvements (the
   bug was related to automatic base version determination when
   migrating from a version that was, itself, the result of a migrate).

2) Added: ability to show the current WORKDIR and PROJLEV version
   numbers in a version history listing, by adding an "X" suffix to
   the "L" (list versions) command.

   In the GUI versions of TLIB, this is the default for listing
   version histories (e.g. when you double-click on a file name).
   In command-line TLIBs, this feature can be utilized via the new LX
   (List eXtended) command.  The output looks something like this:

     TLIB LX f\foo.c (library=\\server\sys\tlibs\foo.c$)
      1 FOO.C 25-Jan-2001,16:18:32,`DAVE' Created foo.c, module for
          interfacing to bar.c
      2 FOO.C 27-Jan-2001,11:24:26,`DAVE' Fixed buffer overflow bug.
       -- (Current WORKDIR version is 2) --
       -- (Current PROJLEV version is 2 in level DEV) --
   [Joe G.]

3) Added: compiler-native project support for Visual SlickEdit
   project files (*.VPJ) and workspace files (*.VPW).
   [John B., Harry N.]

5.52a/beta    19-Dec-00   (Win32 TLIB 1.109q & 16-bit WinTLIB 1.105w)

1) Fixed: a stray "debug print" Message Box that was accidentally left
   in the the Win32 GUI version of TLIB:

      "dbg: key=myfile.ext was in already in list at lpos=nn" or
      "dbg: key=myfile.ext was not already in list; adding..."

2) Fixed: a subtle bug which could cause TLIB for Windows to
   temporarily "forget" which files were recorded in a tracking file.
   This could result in duplicate tracking file entries, and a warning
   message from TLIB:

      Warning: duplicate tracking file entry for myfile.ext in tlibwork.trk

   Another manifestation of this bug was that the "EBF" search
   mode option might find one or more extra "out of date" files
   which actually were not out of date.

   The problem occurred when TREEDIRS Y and FNAMECASE A were both
   configured, and when source files which resided in the same
   subdirectory were specified with different directory name "case"
   (upper-case, lower-case, or mixed-case).  If this resulted in
   a tracking file with adjacent source file records for source
   files residing in the same subdirectory, but with differing
   subdirectory name case, then the problem could occur.

   A workaround was to configure "FNAMECASE U" or "FNAMECASE L"
   (forcing all file and directory names to all-upper or all-lower

3) Added: support for EOF-tolerant text files.

   EOF-tolerant text format is just like regular "FILETYPE TEXT"
   except that it treats "EOF characters" (Ctrl-Zs) as regular text,
   rather than as end-of-file indicators.

   To use this new format instead of the regular (Ctrl-Z-sensitive)
   TEXT format, configure:


   Or you can configure:

      EOFTOLER Y  ("EOFtoler" is short for "EOF-tolerant")
      FILETYPE AUTO  (or just "FILETYPE A") and

   ...which has the advantage of also automatically using BINARY
   format when creating TLIB libraries for most non-text files.

   By default, FILETYPE AUTO will choose between FILETYPE TEXT,
   FILETYPE BINARY, and FILETYPE RUNLEN.  But if you prefer for
   your text files to be stored in the new EOF-Tolerant format
   instead of the old "TEXT" (Ctrl-Z as End-File) format, then you
   may add the new "EOFTOLER Y" configuration parameter.

   IMPORTANT NOTE:  The format of a TLIB library file is PERMANENTLY
   determined when you store the FIRST version of your source file.
   So the FILETYPE setting has no effect except when you first create
   your TLIB libraries.

   WARNING:  "FILETYPE E" libraries, if they contain ctrl-Z characters,
   may NOT be readable by some third-party vendor tools, such as
   Opus Make.
   [John L.]

4) Added: support for CRC-checked, run-length-compressed binary files.

   Run-length-compression greatly improves TLIB's performance, both
   speed and library file size, when storing some kinds of binary
   files, especially "sparse" database files.

   This format also adds a CRC check-word, stored with each version
   of the source file, and verified during extracts.

   To use this new format, configure:


   Or, better yet, configure:

      FILETYPE AUTO  (or just "FILETYPE A")

   ...which has the advantage of only using the run-length-compressed
   format when your initial source file is discovered to be both
   non-ASCII and run-length-compressible.  TLIB analyzes the first
   version of your source file, to pick the format.  If it is a binary
   file, and if run-length-compression can shrink the file size, then
   TLIB will automatically create a run-length-compressed library.

   By default, when creating a new library, if FILETYPE AUTO is
   configured and the file is found to be binary (non-text), then TLIB
   will choose RUNLEN format instead of plain BINARY format if the file
   is even slightly compressible.  If you wish to change that rule,
   you can configure the new THRESHOLD parameter:

      THRESHOLD 1    (default: use RUNLEN if file is at all compressible)
      THRESHOLD nn   (use RUNLEN if file is at least nn% compressible)
      THRESHOLD 100  (never use RUNLEN format, use uncompressed BINARY)
      THRESHOLD 0    (always use RUNLEN, even if it makes files bigger)

   IMPORTANT NOTE:  The format of a TLIB library file is PERMANENTLY
   determined when you store the FIRST version of your source file.
   So the FILETYPE setting has no effect except when you first create
   your TLIB libraries.

   Note that run-length-compressed is a binary storage format, so the
   TLIB features which only work with text files, such as keywords and
   revision history logging, are unavailable for files stored using
   FILETYPE RUNLEN, just as they are unavailable for FILETYPE BINARY.

   IMPORTANT NOTE: Run-length-compression requires TLIB to create a
   temporary file to briefly store the compressed version of your source
   file, during Updates and Extracts.  TLIB looks for a TMP or TEMP
   environment variable to specify the location in which temporary files
   should be created; if neither is found, TLIB uses the current
   directory, or (rarely) the root of the C: drive.

   Note: Although run-length-compression does not usually reduce file
   size as much as more sophisticated compression techniques, it has
   a very important property, which is essential for use with delta-
   based storage systems like TLIB.  That property is that run-length-
   compression preserves "locality of differences."  In other words,
   if two uncompressed files contain only minor, localized differences,
   then the compressed versions will, likewise, contain only minor,
   localized differences.  Thus TLIB's delta-based storage is still able
   to efficiently store just the changes from one version to the next.
   [Nick R.]

5) Fixed: the Visual Compare ("Delta") feature in the 32-bit GUI
   version of TLIB was not "showing" whitespace changes in the default
   "Terminal" font.  Now it does.
   [John L.]

6) Fixed: Unfortunately, under the DOS/Windows family of operating
   systems, it is not possible to have a "current directory" (folder)
   without a drive letter.  GUI versions of TLIB depends upon being
   able to set the operating system's "current directory" to the
   "Current Dir" that you specify on the main TLIB screen.  Thus,
   you should not set your Current Dir to a UNC network path, of
   the form \\servername\volume\folder\

   Earlier versions of TLIB for Windows were not checking for
   this problem.  They permitted selecting such a directory as the
   Current Dir, and they didn't warn the user that it wouldn't
   work right.  This has been corrected.
   [John L.]

7) Fixed??  The Win32 GUI version of TLIB's Visual Compare (Delta)
   could start up with empty screen panels, instead of showing the
   side-by-side differences.  If you closed the compare windown
   and tried again, it would work correctly on the second try.
   This behavior was rare and very hard to reproduce.  But we think
   that we might have fixed it.

   Please tell us if you encounter this malfunction (or any other!)
   with TLIB for Windows version 1.109q or later.
   [John L.]

8) Fixed:  A bug which caused the "Edit TLIB.CFG" menu choice in GUI
   versions of TLIB to do nothing the first time it was tried, if no
   other TLIB operation had been done yet.  (It always worked the
   second time.)

5.51i         21-Nov-00   (Win32 TLIB 1.109p & 16-bit WinTLIB 1.105v)

1) Fixed: positioning of the EBF checkbox in GUI versions of TLIB (which
   we broke in TLIB 5.51h).  The problem occurred when the button bar
   was enabled or disabled in the Configuration Options window; the
   workaround was to exit and restart TLIB for Windows after changing
   the button bar option.  [Chris E.]

2) Improved: in compiler-native project mode, we now automatically
   refresh/update the list of displayed files when you check or un-check
   the EBF checkbox (so that you don't need to press F5 to refresh).

3) Fixed: you can now "extract contents of snapshot file" without
   having to first select a source file in the main file list.

4) Improved: added and improved some "help-bar" messages.  (Those
   are the explanatory messages that display at the bottom of the
   main TLIB for Windows window when you move your mouse over
   buttons and other controls.)  [Mary D.]

5) Improved: some subtle usability issues with Extract, Snapshot, and
   Migrate commands in TLIB for Windows.  [Mary D. and others]

6) Fixed: a bug in the handling of file lists and snapshots containing
   file names or subdirectory names with blanks in them.  [Mary D.]

7) Improved: TLIB for Windows now displays an informative note after
   creating a snapshot.

8) Fixed: In Win32 versions of TLIB (both GUI and command-line),
   mixed-case and lower-case Environment variable names (which are
   possible with recent versions of Windows) were not being found
   when referenced with the %EnvName% syntax in a TLIB configuration
   file.  This has now been fixed: TLIB's environment variable lookup
   is now case-insensitive.

   Another manifestation of this problem was that TLIB would ignore
   the TLIBCFG environment variable, if it was not specified as all

   The workaround was to always use upper-case when specifying
   environment variables.

   Note: if you have defined a Windows environment variable as
   lower-case or mixed-case, then to change it to upper-case you
   must first delete it (by defining it to nothing).  Then you can
   redefine it.  E.g.,

     set tlibcfg=
     set TLIBCFG=!c:\mydir\special.cfg

   Just doing the second "set" command won't change it to upper-case.
   [Elspeth J., Frode N.]

9) Improved: Error message popped-up in GUI versions of TLIB when it
   can't write a source file to update keyword and/or revision history
   information, due to a file access error such as "sharing violation."

5.51h         27-Oct-00   (Win32 TLIB 1.109n & 16-bit WinTLIB 1.105u)

1) Improved: The operation of the "Add" button in TLIB for Windows,
   for adding file names to the list of viewed source files.

   In 16-bit versions of TLIB for Windows, and in earlier 32-bit
   versions, you can have the same source file name listed two
   or more times, by clicking the "Add" button to add file names
   to the list.

   The 32-bit TLIB for Windows version 1.109m adds logic to eliminate
   the duplicate names.

2) Added: Compiler-native project file support for Microsoft
   Developer Studio 5.0 and 6.0 "Workspace Files" (*.WSP), which
   are basically just groupings of Microsoft Developer Studio
   Projects (*.DSP).

3) Added: a little utility called JourJoin.exe (or JJoin32.exe,
   for the Win-32 version).  Unpack it from JOURJOIN.ZIP.

   JourJoin adjusts the format of a TLIB journal file, to make it
   easier to import into some database systems, for making custom
   reports and that sort of thing.  JourJoin combines the comment
   lines in the TLIB Journal File, appending the additional comment
   lines to the comment field in the main record for U (Update)
   and N (New library) commands.

   Run JourJoin.exe (or JJoin32.exe) with no parameters for help.

   JOURJOIN.ZIP is now included with TLIB Combo Edition, but it is
   also available on our Web site, for download by customers who
   own earlier versions of TLIB Version Control.
   [Joe G.]

4) Fixed: TLIB's handling of "file list" files with MacIntosh-style
   (carriage-return-only) line endings.
   [Frank B.]

5) Fixed: When reading Microsoft Developer Studio Project Files (*.DSP)
   in compiler-native project mode, TLIB can display a suggestion:

      Note: For better performance, in Developer Studio select
      Tools -> Options -> Build -> Export makefile when saving project file

   This suggestion is correct advice only if "scan source for
   includes" is checked in the Open Project File ("...") dialogue.
   However, TLIB was displaying the suggestion even if "scan source
   for includes" was not checked.

6) Enabled: the EBF checkbox in compiler-native project mode.

   This is the box you can check to make TLIB display only out-of-date
   source files.  In previous versions of TLIB, it was visible only
   in file-oriented mode.  There really was no good reason for hiding
   it in compiler-native project mode, so we've unhidden it.

7) Added: compiler-native project mode support for Borland C++
   Builder project file (*.BPR).

8) Changed: the TLIB Windows Help to not stay "on top" all the time.
   [Stewart K.]

9) Changed: the real-mode DOS version of TLIB, tlibdos.exe, to work
   on 8088-based HP 200LX palmtops.
   [Chris L.]

5.51g         27-Aug-00

1) Improved: TLIB's logic for deducing source file names from library
   file names.  Now, if you configure LIBEXE ??????$ and LOKEXT ??????^
   then TLIB can correctly deduce all source file names that have
   extensions of 5 characters or less, except those with "_" in the
   extension, without use of the EXTENSION configuration parameter.

   Note: TLIB does not support source file names with blanks in the
   extension.  Also, a file name with an extension that is 8 characters
   or more in length will be handled by TLIB as if the "." was part of
   the base file name and there is no extension.  Please let us know
   if you need better support for such files.

2) Improved: Configuration Wizard, enabling it to configure TLIB
   using the new LIBEXT ??????$ feature (above), and also to configure
   needed quote marks around the PATH parameter when there might be
   blanks in the work directory path, and also to correct and improve
   some of the prose.

   This is version 1.4 of the Configuration Wizard, TLIBCWIZ.EXE.

5.51f         26-Jul-00

1) Fixed: a bug that could cause this error.
     ERR: snbld() buffer overflow
   [Joev D.]

5.51e          2-Mar-00

1) Fixed:  When a compiler project file was in a network directory
   containing spaces, TLIB wouldn't open the compiler-native project
   file.  The error message displayed was:
     ERROR: Could not read compiler-native project file {filename}
   [Bryan S.]

5.51d         11-Jan-00

1) Added: solution for a Y2K interaction problem with Opus Make.
   Opus Make has the capability of reading TLIB library files and
   checking the date/time-stamps of particular versions.  However,
   it was interpreting embedded dates with a "00" year as 1900
   instead of 2000.

   So, we changed TLIB to store its file dates in dd-mmm-yyyy format
   in TLIB libraries when the year is 2000 or later.

   To avoid overflowing keyword string variables, the %d and %f
   keywords still store the year as two digits, by default.  However,
   starting with TLIB 5.51d, you can force TLIB to store the year
   as four digits for years 2000 or later, by specifying a sufficiently
   large "field width."  For the %d keyword, you must specify a field
   width of 11 or greater to make TLIB store the year with 4 digits
   (since "dd-mmm-yyyy" is 11 characters long).  For the %f keyword,
   you must specify a field width of 20 or greater to make TLIB
   store the year with 4 digits (since "dd-mmm-yyyy,hh:mm:ss" is
   20 characters long).  For example:

   Assume that TLIB is configured for:
      keyflag 3,"-=>keyflag<=--"

   Consider a source file with a date of January 1, 2000, and a TLIB
   version number of 22, and this embedded keyword:
      /*-=>keyflag<=-- "version %v, date %d, long date %11d" */
      char verdate[] = "";

   Then after TLIB expands the keywords, it will look like this:
      /*-=>keyflag<=-- "version %v, date %d, long date %11d" */
      char verdate[] = "version 22, date 01-Jan-00, long date 01-Jan-2000";
   [Aleksandar S.]

5.51c         8-Dec-99    (Win32 TLIB 1.109k)

1) Fixed: a bug which caused TLIB to always convert the WORKDIR to
   upper-case, regardless of the FNAMECASE configuration parameter.
   This caused a problem for a customer who was using a case-sensitive
   network file system under NT.  The problem was that (because of
   the MAKEDIRS parameter) TLIB created the work directory with an
   all upper-case directory name.
   [Gary S.]

2) Fixed: a bug which caused the 32-bit visual compare to occasionally
   show lines missing the final character.  The cause was a bug in
   CMPR32D.DLL's tab/blank-conversions when "ENTABU Y" was configured.
   The fix is in CMPR32D.DLL version

3) Improved: a couple of error and warning messages.

4) Added: support for the SUPPRESS 16 configuration parameter, to
   suppress display of the warning message, "TREEDIRS_N configured
   but xxx isn't in workdir... the entry for xxx in tlibwork.trk
   will be misleading."  This was needed for a particular customer
   with an unusual development environment in which source files were
   "staged" from the work directory to another location before being
   stored in TLIB.
   [Mark M.]

5) Fixed: a subtle bug with the use of the CP command in command-line
   versions of TLIB to override the TLIB library file, when "FIND1FILE Y"
   was configured.  If the forced TLIB library file's extension was not
   consistent with the configured LIBEXT parameter, then TLIB would not
   process the file.

5.51b         23-Aug-99

1) Fixed: a bug in the parsing of TLIB.CFG.

   TLIB was mishandling an if{wildcards}/endif block nested within an
   iff{expression}/endif or iff{expression}/else/endif block.  The
   symptom was an error message on the outer "endif".
   [Leslie S.]

5.51a         11-Aug-99   (Win32 TLIB 1.109j)

1) Improved: the error diagnostic message when the GUI Win32 version of
   TLIB failed due to out-of-date versions of Microsoft DLLs or OCXs
   being installed in the Windows system directories.  The symptom
   was error number 50003, "unexpected error."  The new, improved
   error message now recommends running NETSETUP.EXE to solve the

   Since TLIB's NETSETUP install program installs up-to-date versions
   of the needed Microsoft DLLs and OCXs, this problem usually only
   occurs when an attempt is made to run WTLIB32.EXE without first
   running TLIB's SETUP.EXE or NETSETUP.EXE, or else when another
   program has been installed with defective installation procedure
   that fails to preserve already-existing newer versions of Microsoft
   DLLs or OCXs.
   [Jeff Y., Tuyen N.]

2) Added: support for configuring FILETYPE AUTOMATIC (or FILETYPE AUTO,
   or just FILETYPE A).

   When FILETYPE AUTO is configured, and you store the first version
   of a source file using the N (New Library) command, or using U
   (Update) when UPDATENEW Y is configured, TLIB will examine the
   file to determine whether or not it is a plain ASCII text file.
   If so, then FILETYPE AUTO is equivalent to FILETYPE TEXT.  If not,
   then FILETYPE AUTO is equivalent to FILETYPE BINARY.

   This determination is quite reliable.  However, if you are storing
   an unusual binary file type under TLIB which contains mostly ASCII
   text, or a special text file for which you do not want TLIB to
   adjust your end-of-line delimiters (CR vs. LF vs. CR+LF), then
   you should configure FILETYPE BINARY for that file.  For example,
   if you had .DBF database files containing only text fields, you
   could configure:

      IF *.DBF

   FILETYPE AUTO is now the default.
   [Roger C.]

3) Changed: the "FILETYPE" question in the TLIB Configuration Wizard,
   to use the new FILETYPE AUTO setting instead of FILETYPE TEXT.

4) Added: a beta-test TLIB Add-In module for MS Visual Basic 6.0,
   called TLIBVB6.EXE.

5) Released: the 32-bit versions of TLIB (command-line and GUI).

5.50z.3       3-Aug-99

1) Fixed: Another problem with looking up Novell NetWare user IDs in
   the beta Win32 GUI version of TLIB.  Symptom was a Stack Fault error
   if "ID *NOVELL*" was configured.
   [Tuyen N.]

2) Fixed: TLIB was truncating journal file entries to 255 characters.
   With long file names, it was possible to exceed this limit.  TLIB now
   permits journal lines longer than 255 characters in versions of TLIB
   that support long file names.  We allow up to 349 characters in 16-bit
   protected-mode versions (TLIBX, TLIB2 and TLIBDLL.DLL), and up to 1023
   characters in 32-bit versions (TLIB32C and TLIB32D.DLL).  [David A.]

5.50z.2       27-Jul-99

1) Fixed: The beta Win32 versions of TLIB 5.50z were failing to load
   with a "File not found" error if you did not have Novell Netware.
   (The problems was that we had accidentally built them in such a way
   that they were "implicitly linked" to the Novell DLLs.)

   By the way, Matt Pietrek's wonderful little 9216-byte DEPENDS.EXE
   utility is indispensable for diagnosing this kind of problem.
   Just type "depends /p {exe_or_dll_name}" and it will display a
   full list of the implicitly linked DLLs upon which {exe_or_dll_name}
   depends, where they were found on your system, and which ones were
   NOT found.  Get it at http://www.microsoft.com/MSJ/code/depends.htm
   [Peng L. and Eddy V.]

5.50z         24-Jul-99

1) Fixed: a bug which caused directory names to be converted to all
   upper-case under some circumstances, even when "FNAMECASE AUTO"
   was configured and the file system supported mixed-case file

2) Added: support for quoted paths and file names in some configuration
   parameters.  In particular, the PATH parameter now permits a quoted
   path containing blanks, in versions of TLIB which support long file
   names.  You may use either apostrophes (') or double-quote marks (")
   to quote paths or file names which may contain blanks.

   Note that the "PATH" keyword cannot be quoted, just the text to
   the right of it.  Also, note that environment variable and pseudo-
   environment variable references are still expanded, even when

   For example, if %wdir% is the name of your work directory, with a
   slash at the end, but the work directory name might contain blanks,
   then you can configure:
       PATH 'z:\libs\%wdir%*\'
   [Paul M.]

3) Added: support Novell Login Name lookup in 32-bit versions of TLIB.
   You can now configure "ID *NOVELL*" to make TLIB use your Novell
   Login ID for the TLIB user ID.  (This feature is lightly tested;
   please tell us if it does not work with your combination of server
   and Win-9x or Win-NT client software.)

5.50y         22-Jun-99   (TLIB for Windows 1.105s & Beta Win32 TLIB 1.109h)

1) Fixed: a bug which could cause the following error:
   when you click the Delta button on the "Enter Comment" screen.

   The problem was caused by a bug in CMPR32D.DLL that was triggered
   when "ENTABU Y" is configured.

   The previous version of CMPR32D.DLL showed as "<no version>" on
   the TLIB for Windows "About" screen.  The fixed version shows
   version number

2) Added: native project file support for MultiEdit for Windows .PRJ
   files.  (Note: this is the same file extension used by Symantec
   Visual Cafe for its project files, but TLIB can tell the difference
   and handle them both.)

5.50x         11-Jun-99

1) Fixed: a bug which caused "tracking cache failure" warnings in
   the beta Win32 versions of TLIB.  The error was innocuous, but

   This bug only affected Win32 versions of TLIB.  It was most likely to
   be seen in the Win32 GUI version, but you could also make it happen
   in the Win32 console-mode version, by removing a source file from a
   named project level and then adding it back, all on one command line,
   like this:
      tlib32c adn myfile.c an myfile.c
   [Craig M.]

2) Fixed: a bug with extracting 0-length files; the previous, non-zero-length
   version would be extracted, instead of the correct (0-length) version.
   [Mike K.]

3) Fixed: a bug in the long file name support in TLIBX.EXE and the 16-bit
   TLIB for Windows, which caused "Warning: couldn't reopen myfile.exten
   to adjust its date/time" or similar.  This bug did not affect 32-bit
   versions of TLIB.
   [Tom W.]

4) Improved: NETSETUP.EXE (which also serves as part II of the SETUP
   program) to not install shortcuts/icons for missing components.  This
   is primarily so that TLIB administrators can install TLIB to a network
   directory and then prune out unneeded components (such as uninteresting
   documentation files), so that users who set up TLIB on their systems
   with NETSETUP will not have a lot of useless extra shortcuts installed.
   [Urs W.]

5) Improved: some error and warning messages.

5.50w         25-Feb-99   (TLIB for Windows 1.105r & Beta Win32 TLIB 1.109g)

1) Fixed: problems with handling long filenames with blanks in them.
   [everyone and his brother]

5.50v         17-Feb-99   (TLIB for Windows 1.105q & Beta Win32 TLIB 1.109f)

1) Added: support for the new REFNEWLN configuration parameter, which
   can be used to control the end-of-line delimiters used when writing
   "reference copies" of source files.  (Reference copies are created by
   TLIB in a project level reference directory when the "r=Y" option is
   configured for a LEVEL.)   These four settings are possible:


   The first setting (i.e., "REFNEWLN" with nothing following it) is the
   default.  It means that the REFNEWLN setting is the same as the NEWLINE
   setting (which defaults to CRLF).

   If you configure "REFNEWLN CRLF" then reference copies of source files
   will always have carriage-return+linefeed end-of-line delimiters.  If
   you configure "REFNEWLN CR" then reference copies of source files will
   have only carriage-returns as end-of-line delimiters; this is mostly
   used for Apple Macintosh text files.  If you configure "REFNEWLN LF"
   then reference copies of source files will have only linefeed ("newline")
   characters as end-of-line delimiters; this is mostly used for Unix text

   See also: NEWLINE.
   [Paul V.]

2) Fixed: a bug in the beta 32-bit versions of TLIB, which occurred when
   updating (checking-in) source files of more than 32,767 lines.  There
   was an error in the stored delta format which caused it to be readable
   only with 32-bit versions of TLIB.  The 16-bit versions would display
   "ERROR: bad .C command" when trying to process the library file.
   [Paul V.]

3) Fixed: support for colorized error/warning/note messages in TLIB32C.EXE,
   the beta Win32 console mode version of TLIB.
   [Joev D.]

4) Added: an error message that is displayed when the Migrate command
   creates a MIGRATE2.BAT file with lines that are too long to run.
   [Craig M.]

5) Fixed: a bug which prevented the user from entering his TLIB serial
   number if TLIB for Windows was started the first time via the
   "TLIB Visual Compare" shortcut.
   [Tuomas S.]

6) Changed: the way that we distribute the conversion utilities (the
   tools for automating conversion from other version control systems
   to TLIB, and also for reformatting/rebuilding TLIB libraries).

   We now double-compress them, using TLIB and PKZIP, into one very
   compact archive, CONVERT.ZIP.  This saves several hundred KB of
   space on the distribution diskettes, but it also means that before
   you can use any of the conversion utilities you must first unpack
   them.  See CONVERT.TXT for details.

7) Added: a SourceSafe-to-TLIB conversion utility for customers who are
   switching from Microsoft or OneTree/Icarus SourceSafe to TLIB.

8) Improved: several of the other conversion utilities, especially the
   PVCS-to-TLIB converter.  We now have tools to automate conversion
   from:  PVCS, SourceSafe, RCS (both MKS and GNU/Unix variants),
   MS Delta, and Sourcer's Apprentice.

5.50u         28-Jan-99   (TLIB for Windows is unchanged)

1) Fixed: a bug which caused various errors (mostly GPFs) when using TLIB
   comment files of more than 245 characters in length.  The problem was
   only observed in 32-bit TLIBs, but it could have also affected other
   [Paul V.]

5.50t         19-Jan-99   (TLIB for Windows 1.105p & Beta Win32 TLIB 1.109e)

1) Fixed: a bug which caused spurious automatic branching under some
   circumstances when using named project levels.  The bug caused "c=N"
   fields to be stored in the project level tracking file, and when a
   subsequent Update command was done on those files, TLIB would try to
   create a new branch, even though there was no need to do so.  (The
   workaround was to use the "S" suffix in command line TLIB, or the
   "S - Specify version" checkbox in GUI TLIB, to override TLIB's choice
   of version numbers.)
   [Bill M. and Jeff Y.]

2) Added: an informative message telling when the "b=1" option on the LEVEL
   configuration parameter is the cause for a new branch (i.e., a ".1"
   version) being created.

3) Improved: TLIBCOMP, the Win95/98/NT command-line visual compare tool.
   It will now preferentially run the Win32 version of TLIB to do the
   compare, if WTLIB32.EXE is found.  (Otherwise, it'll revert to using
   the 16-bit version, WTLIB16.EXE.)

4) Changed: where WinTLIB (both 16-bit and 32-bit) looks for (or creates)
   the TLIB.INI "preferences" file in the absence of a TLIBINI environment

   Prior to this version, if you didn't set TLIBINI, then the TLIB.INI
   file would reside in the TLIB installation directory.  That caused
   problems when two or more users of TLIB ran a multi-user TLIB from
   a network installation directory.

   So we've changed the default TLIB.INI location to be the root of
   the C: drive, to ensure that each TLIB user has his own TLIB.INI file.
   In other words, the default behavior is now as if you set the TLIBINI
   environment variable like this:

      set TLIBINI=C:\

   To ease the transition, if there is no TLIBINI environment variable
   and this version finds a TLIB.INI file in the installation directory
   but not in the root of the C: drive, then the old TLIB.INI will be
   copied from the installation directory into the root of the C: drive.

5) Fixed: the DDE API in WTLIB32.EXE (the beta Win32 version of WinTLIB).
   Both DDE and Windows-Messaging APIs now work.

6) Updated: the DDE and Windows-Messaging API sample/test applications,
   ADVDDE32.* and APIWMS*.*, respectively, and for use with WTLIB32.EXE
   (the Win32 GUI TLIB).  APIWMSG now works with either WTLIB32.EXE or
   WTLIB16.EXE, for exercising the Windows-Messaging API.  To exercise the
   DDE API, use ADVDDE32 with WTLIB32.EXE or use ADVDDE with WTLIB16.EXE.
   See ADVDDE32.* and APIWM*.* in the \TLIB\API\ subdirectory.

7) Updated: the TLIB Add-Ins for Microsoft Visual Basic 5.0 and Visual
   Developer Studio 5.0 (VC++, VJ++, etc.).  They now use WTLIB32.EXE
   instead of WTLIB16.EXE to implement the version control functionality.
   Also, TLIBVS97.INI is now obsolete; the current TLIB Add-In for
   MS Visual Developer Studio 5.0 uses TLIB.INI, instead.

8) Improved:  the command-line versions of TLIB so that they now check
   the TLIB.INI file for a user ID override.  If you choose "always"
   override in the WinTLIB "Change User ID" dialog (Under the File
   menu), then command-line versions of TLIB will also use that user
   ID.  Previously, only the GUI versions of TLIB read TLIB.INI.

   (Exception: disabling the CW command by removing it from the
   configured the COMMANDS parameter also disables user ID overrides
   via TLIB.INI, in both command-line and GUI versions of TLIB.)

   This change ensures that the GUI and command-line versions of TLIB
   are consistent in what they determine to be current TLIB user ID.
   This also makes the GUI TLIB's "change User ID" dialog a very
   convenient way to set the user ID for all versions of TLIB.

   Also, the way that the user ID override works was subtly changed
   even in the GUI versions of TLIB, so that you can reference and
   test the user ID as %tlibcfg:id% in your TLIB.CFG file.

9) Converted: the TLIB Add-Ins for Microsoft Visual Basic 5.0 and
   for Microsoft Developer Studio 5.0 (VC++, VJ++, etc.) to use the
   beta 32-bit WinTLIB (WTLIB32.EXE) instead of the 16-bit WinTLIB

   The two Add-In modules are TLIBVS97.DLL and TLIBVB5.EXE, respectively.

10) Redesigned: the install programs, SETUP and NETSETUP.  SETUP now
   just copies files into the TLIB installation directory, and then
   invokes NETSETUP to create shortcuts/icons, update system files,
   etc..  However, you can also use NETSETUP by itself to install
   TLIB on another workstation, or under another operating system on
   the same workstation, etc., without having to do a full re-install.

   Also, under 95/98 and NT, NETSETUP now groups documentation shortcuts
   into a sub-folder.  Also, SETUP & NETSETUP now customarily install
   both 16-bit and 32-bit versions of TLIB.

11) Fixed: the message displayed when EBF (extract/browse-mode/freshen)
   results in all files being excluded because none are out-of-date, and
   named project levels are not in use.  The message is now merely a
   note, not an error.

12) Added: support for extracting multiple files to a temporary directory,
   instead of just extracting a single temporary file.

   In WinTLIB (both 16-bit and 32-bit GUI versions), use the "As Temporary
   File(s)" checkbox on the Extract options screen.  In command-line
   versions of TLIB, use the "-t" and "-n" options, and with the -n option
   specify a directory ending in a backslash rather than a filename.
   For example:
      tlib32c -t -nc:\tempdir\ e *.c
   Be sure that you do not omit the trailing backslash.
   [Joe G. and Gordan E.]

5.50s         17-Dec-98   (TLIB for Windows 1.105m)  (Beta Win32 TLIB 1.109d)

1) Fixed: a bug in WinTLIB (both 16-bit and beta 32-bit versions) which
   caused the first "Yes All" answer to a Yes/Yes-all/No question to act
   as "Yes" instead of "Yes All".

2) Fixed: a bug in the beta Win32 GUI version of TLIB that prevented
   cancelling a compare or extract under some circumstances.
   [Al B.]

3) Added: compiler-native project support for Premia Codewright Editor
   project files (*.PJT).
   [Joe G.]

4) Added: "..." (browse to select version number) button to the Extract
   options window.  This improvement is in both the 16-bit and beta 32-bit
   versions of WinTLIB.

5) Fixed: some display anomolies in the beta Win32 visual compare.
   [Mark P., Al B., and others]

6) Added: support for copying to the clipboard from the Win32 visual
   compare.  The display speed is also a bit snappier.

7) Fixed: several incorrect menu shortcuts in WinTLIB (both 16-bit and
   beta 32-bit versions).

              04-Dec-98                              (Beta Win32 TLIB 1.109c)

1) Fixed: a bug in the beta Win32 GUI TLIB v1.109b, which caused
   double-clicking on a file to not display the version history unless
   the file was in the work directory.
   [Mark P.]

5.50r         27-Nov-98   (TLIB for Windows 1.105k)

1) Fixed: a bug that prevented the "EBF" ("show only out-of-date files")
   checkbox from working unless you had configured TLIB to use named
   project levels.
   [Paul C.]

2) Added the "base" TLIB version number (e.g., "5.50r") to the WinTLIB
   About/splash screen.  Also, improved some error diagnostics.

3) Fixed: removing "ER" from the COMMANDS configuration parameter didn't
   disable the ER (check-out/reserve) command.
   [Urs W.]

4) Enhanced: Removing "ER" from the COMMANDS configuration parameter now
   disables the "'R' - Reserve Lock [don't extract]" checkbox in WinTLIB.
   [Urs W.]

5) Updated: the Blinker DOS Extender used by TLIBX.EXE is now at version
   4.10.  (This is probably of no consequence.)

**** Both command-line and GUI Win32 versions of TLIB are now in beta
   test.  The current Win32 TLIB is mostly just a 32-bit version of the
   same old TLIB 5.50 that you are used to (though with longer file name
   support under NT), but we have great plans for enhancements in TLIB 6.0.
     If you own TLIB Combo Edition 5.04 or later, and if you can accept
   gigantic (several megabyte) emailed file attachments, then you can be
   a beta tester of the Win32 TLIBs.  Email us at support@burtonsys.com.

5.50q         15-Oct-98   (TLIB for Windows 1.105j)

1) Fixed: a bug which showed up when using the 'I' (include subdirs)
   option in combination with the 'L' or 'C' or 'O' search mode, when the
   subdirectories went more than one deep, and when the current directory
   was beneath the work directory.  The bug resulted in incorrect
   deduction of the source file path from the library or lock file path
   (it appeared to 'move up' a level).  Also, when the subdirectories went
   more than one deep, and the current directory was the work directory,
   but the wildcard spec had a partial path on it and the 'I' (Include
   SubDirs) suffix was specified, the same thing happened.
   [Dan F.]

2) Fixed: some problems in the WinTLIB GUI which occurred when the COMMANDS
   configuration parameter was configured to disable some of TLIB's
   [Tuyen N.]

3) Fixed: a bug in the WinTLIB GUI which could cause:
     "ERROR: #423, extract/click, Property or control not found"
   The problem occurred when an attempt is made to extract without selecting
   any files but with 'S' ("specify version") checked and a version
   specification entered.

4) Added: better diagnostic error messages when MAKEDIRS_M (or MAKEDIRS_Y)
   is configured but TLIB cannot create a needed subdirectory.
   [David A.]

5) Changed: WinTLIB to make the "Include SubDirs" checkbox "sticky" when
   TREEDIRS_Y is configured.
   [Dan F.]

5.50p         29-Sep-98   (TLIB for Windows 1.105i)

1) Added: support for three new keywords: %m, %i, and %b.  These keywords
   expand into three parts of the version number:
      %m  Major (trunk) version number
      %i  mInor version number (or 0)
      %b  Branch version specification (or 0)
   [Joe G.]

2) Changed: TLIB for Windows to automatically un-check the other wild-card
   search modes when a user checks "Owned" or "Checked Out", since that is
   usually what you will want to do.  You can still use the Owned or Checked
   Out search mode in combination with one or more other search modes, but
   you will have to first check Owned or Checked Out, and then check the
   other mode(s).
   [Andy G.]

3) Fixed: a bug in TLIB for Windows which could cause you to have to click
   "Ignore All" twice instead of just once, to make it ignore all occurances
   of an error or warning pop-up message.

4) Fixed: a bug in TLIB for Windows which could cause a sequence of errors
   including the message, "dbg: 2nd tcl, tcmd='g2cfgfile', prev='g2workdir',
   cfgfile=''", and then "Form already displayed can't show modally."
   [Jeff Y.]

5) Added: support for an alternate method of Novell user ID lookup.  You
   may configure "ID *NOVELL2*" to use the alternative method.  It should
   produce the same result as the older "ID *NOVELL*" user ID lookup, but
   we have reports of that method failing on some systems.

   If you want to use your Novell login ID as your TLIB user ID, but the
   configuring "ID *NOVELL*" produces incorrect or inconsistent results,
   then try configuring "ID *NOVELL2*".

   We would be interested in reports from users of circumstances under
   which one of these methods works but the other does not.
   [Tuyen N.]

6) Fixed: a bug which caused spurious error messages if a multi-line
   configuration parameter (e.g., COMMANDS) was configured within an IFF/
   ENDIF block.
   [Tuyen N.]

7) Changed: WinTLIB to grey-out the button and menu item for changing
   your user ID if the "CW" command is not configured in the COMMANDS
   configuration parameter, and a few related changes.  (This is for
   installations in which it is necessary to prevent users from
   impersonating one another.)
   [Tuyen N.]

5.50m         17-Jul-98   (TLIB for Windows 1.105g)

1) Fixed:  A bug which caused TLIB to display the error message:
      ERROR: Illegal command: "ASFL" ("AFLS")
   or similar.

   In TLIB for Windows, this error occurred when using Add/Alt (Add/Alter
   Project Level), and checking both the "S" and "F" options.  In command
   line versions of TLIB, the error occurred when using the AFS command.

   Fixing this bug required changes to both the TLIB engine and the
   Configuration Wizard, since the Configuration Wizard was generating a
   COMMANDS configuration parameter in TLIB.CFG which lacked the needed AFS
   command.  Configuration Wizard version 1.3c now fixes this, but you'll
   still need to change older TLIB.CFG files by adding "AFS/T," to the
   list of enabled commands if you need to use the "F" and "S" options in
   [Ed J.]

2) Fixed: a bug in WinTLIB, in the handling of the special "PROJLEV ="
   configuration setting.  Using this setting caused WinTLIB to default to
   using the A search mode, which is inappropriate, since there is no
   named project level when "PROJLEV =" is configured.
   [Bill H.]

3) Fixed: a subtle problem in TLIB's handling of %!name% and %!!name%
   references within IFF/ENDIF blocks.  The following no longer results
   in an error:
     IFF 0
        REM -- this should NOT cause an error
        SET x=%!!never_defined%
   However, you can still do tricky things like this:
     SET xxx=endif
     IFF 0
             SAY Note: this should not display
     SAY Note: this SHOULD display!
   [Bill H.]

4) Improved: handling of an obscure error condition.

   If the UD (discard changes) command thinks that your old source file has
   been edited, it renames it to *.TM0 before extracting an unmodified copy,
   and it displays a message telling you what has been done.  This is
   intended to prevent accidental loss of your work.  If the .TM0 file
   already exists, then TLIB renames your old source file to *.TM1, instead.
   It can also try *.TM2 through *.TM9.  But if all ten *.TM? files already
   exist, then the rename attempt fails.

   Starting with this version of TLIB, if all ten *.TM? files already
   exist, then TLIB offers to delete the oldest of them, to permit the
   rename to succeed.
   [Craig M.]

5.50L         30-Jun-98   (TLIB for Windows 1.105f)

1) Improved: The Configuration Wizard, in how it configures the ID and
   LOKEXT parameters for some networks.  This is version 1.3b of the
   Configuration Wizard.
   [Gary S.]

2) Added: A "new user hint" about the use of the "Owned" wild-card search
   [Gary S.]

3) Increased: the maximum length of the EXTENSION configuration parameter,
   from 500 characters to 750 characters.

   You must use "continuation" lines to configure a long EXTENSION list.
   A continuation line is indicated by ending the preceeding (incomplete)
   line with a backslash character (\).  By using continuation lines, you
   can now configure a list of source file extensions that is up to 750
   characters long.

   Note #1: each line must still be less than 254 characters in length.

   Note #2: you still must ensure that each source file extension maps
   to a unique library file extension.

   These three examples are equivalent:

      extension c,h,asm,bat,pas,,cmd,me,__m,__l,frm,bas,ico,doc,txt,frx

      extension c,h,asm,bat,pas,,cmd,me,__m,__l,frm,bas,ico,\

      extension c,h,asm,bat,pas,,cmd,me,__m,__l,frm,bas,ico\
   [Cal V.]

5.50k         11-Jun-98   (TLIB for Windows 1.105e)

1) Fixed: in TLIB for Windows, the default snapshot name sometimes
   had an incorrect file extension when using compiler-native project
   mode and taking a snapshot.

2) Fixed: in compiler-native project mode for Visual Basic (.VBP project
   files), .CTL/.CTX files were not being listed.
   [Thomas D. and Mike H.]

3) Improved: message text in a few places, for clarity.

5.50j         11-May-98

1) Fixed: a bug which could cause TLIB's wild-card specs to sometimes
   find files that they didn't really match.  For example, if there
   existed a TLIB library file called INDEX.H$ML, corresponding to a
   source file called INDEX.HTML, then it would be found by a wild-card
   spec of "I*.HTM".  The problem was due to the Win-95 and NT short
   file names, which causes INDEX.HTML to also have the name INDEX~1.HTM
   or similar.

   The same thing could be seen with the DIR command, at a MS-DOS box
   command prompt:  "dir *.htm" would find INDEX.HTML.

   At the same time, we fixed a closely-related bug in TLIB's support
   for multiple and embedded asterisks in wild-card specs under
   operating systems (such as DOS) which do not handle them properly.
   E.g., "ABC*DEF.C" should match only files that end in DEF.C.  This
   was working in TLIB 5.02, but broken in TLIB 5.03; now it works again.
   [Blair W.]

5.50i          1-May-98

1) Fixed: a bug in the compiler-native project support for MS VC++ / Developer
   Studio compiler-native project file support (*.DSP), which could cause
   TLIB to find a garbled directory name for one or more files.

2) The Win32 console mode version of TLIB is now in beta test.  Let us know
   if you'd like to be a beta-tester.

5.50h.1       13-Apr-98

1) Fixed: an apparent wildcard-expansion logic error in the Win95 Long
   Filename support.  We never saw a symptom for this one.  Only TLIBX.EXE
   and TLIBDLL.DLL were affected, the other TLIB executables are still
   at version 5.50h.

5.50h         25-Mar-98   (TLIB for Windows 1.105d)

1) Fixed: a bug which could cause TLIB for Windows to fail with an
   "Out of Stack Space" error while listing versions.  (Only WTLIB16.EXE
   was affected by this fix.)
   [John D.]

5.50h         20-Mar-98

1) Added: support for continuation lines for the EXTENSION configuration
   parameter.  As with the COMMANDS parameter, a continuation line is
   indicated by ending the preceeding (incomplete) line with a backslash
   character (\).  By using continuation lines, you can now configure a
   list of source file extensions that is up to 500 characters long.

   Note #1: each line must still be less than 254 characters in length.

   Note #2: you still must ensure that each source file extension maps
   to a unique library file extension.

   These three examples are equivalent:

      extension c,h,asm,bat,pas,,cmd,me,__m,__l,frm,bas,ico,doc,txt,frx

      extension c,h,asm,bat,pas,,cmd,me,__m,__l,frm,bas,ico,\

      extension c,h,asm,bat,pas,,cmd,me,__m,__l,frm,bas,ico\

   [James H. (and several others)]

2) Fixed: several bugs in the TLIB Add-In for Visual Basic 5.0, mostly
   related to the use of project groups.

   IMPORTANT NOTE:  To install the fixed Add-In module requires several
   manual steps, to ensure that the Win-95 or NT registry is correctly

     [If this is the first time you've installed the VB 5.0 Add-In, then
     skip steps a-c.]

     a) Manually delete the old TLIBVB5.EXE from the TLIB installation
        directory (possibly C:\TLIB\).

     b) Start VB 5.0.  When it starts, it will complain that:

          'TLIB Version Control for Visual Basic 5.0' could not be loaded.
          Remove it from the list of available Add-Ins?

        Click "Yes".

     c) Shut down VB 5.0.

     d) Copy the new TLIBVB5.EXE into the TLIB installation directory.

     e) Run the new TLIBVB5.EXE (from the TLIB installation directory),
        as if it were a stand-alone program.  You might see the message:
           "TLIB add-in installed..."
        Click OK.
        Note that no message will appear if TLIB/VB was already listed
        in the 'vbaddin.ini' file.

     f) Start VB 5.0 again.

     g) Click Add-Ins.  Click Add-In Manager.  Click on "TLIB Version
        Control for Visual Basic 5.0", to make the check mark appear.
        Click OK.  You should see the TLIB/VB progress window appear and
        begin to check your project.  (If you do not have locking enabled,
        this will happen so fast you will only briefly see this window.)
        TLIB for VB 5.0 is installed!

        TLIB/VB will automatically start whenever you run VB as long as
        it is enabled (checked) in the add-ins menu.
   [Tom M.]

5.50g         28-Jan-98   (TLIB for Windows 1.105c)

1) Fixed: a misleading message.

2) Fixed: a bug which caused a bogus Warning message.

   The problem occurred when extracting a source file that had no
   extension (e.g., "makefile") using the "L" (libraries) or "C" (checked-
   out and locked) or "O" (owned) wild-card search mode.

   The problem was due to inconsistent handling of the optional trailing
   "." in the file name; additionally, the message showed an extra
   backslash in the path, to further confuse you.  The bogus warning
   looked something like this:

       Warning: TREEDIRS N configured but makefile. isn't in workdir,
       and C:\MYWORK\\makefile also exists; the entry for makefile in
       C:\MYWORK\TLIBWORK.TRK will be misleading.

   This problem has been corrected.
   [Kevin H.]

3) Added:  In WinTLIB, the ability to suppress multiple pop-ups of "Note:"
   and "Warning:" and "ERROR:" messages which were generated via the "say"
   configuration parameter.

   You can make TLIB display a message when it reads its configuration
   file by adding a "say" (or "warn") statement to the configuration file.
   In command-line versions of TLIB, the message will be displayed on the
   console.  In TLIB for Windows, the message will be written to the "view
   status log" (which you can examine via the "View Log" button or "Run
   Manual Command"), just like one of TLIB's own messages.

   If the message begins with "Note: " or "Warning: " or "ERROR: " then
   it will also be popped-up in a message box, just like one of TLIB's
   built-in warning messages.  However, since TLIB for Windows rereads
   the TLIB configuration files under various conditions (e.g., whenever
   you set the current directory), the message box may pop up repeatedly.
   This would not have been much of a problem, except that, prior to this
   version of TLIB, the "Ignore For all commands" button would not suppress
   repetitions of popped-up user-configured messages.

   This has been changed.  You can now click "Ignore For all commands" to
   prevent a user-configured message from being popped-up again, just as
   you can for TLIB's built-in warning messages.  (Note, however, that the
   message will still be recorded in the "view status log.")

   There is one minor unavoidable difference between how this feature is
   implemented for TLIB's built-in messages, and how it is implemented for
   user-configured messages that are displayed via the "say" or "warn"
   configuration parameter.  With TLIB's built-in messages, if the message
   is "parameterized," that is, if it contains a file name or similar
   "parameter," and the file name changes from one instance of the message
   to another, that difference is considered to be insignificant, and the
   second pop-up of the message will still be suppressed.  However, this
   can't be done for user-configured messages.
   [Urs W.]

5.50f         12-Jan-98   (TLIB for Windows 1.105b)

1) Fixed: a bug which caused a bogus error message when a file was checked
   out for modification at two project levels (either to you and to another
   person, or both to you) with LOCKING B configured, and you did an Update
   to check in the file.  This problem was present at least as far back as
   version 5.02d.
   [Joe K.]

2) Improved: the TLIB Configuration Wizard user interface in several
   details, and fixed a bug that could cause an "Illegal function call"
   error if you added a blank wild-card spec to the list of tracked files
   on question 9.  The configuration wizard is now version 1.2b.
   [Keith R.]

3) Fixed: a minor bug in TLIB for Windows which caused it to upper-case
   manually-entered commands ("Run Manual Command").

4) Added: a menu command in TLIB for Windows (under the Help menu) to
   Display your TLIB serial number(s).

   The following command can be used to do the same thing with command-line
   versions of TLIB:

       TLIB c "say serialno %tlibcfg:serialno%" q

5) Added: a menu command in TLIB for Windows (under the File menu) to
   display dumped TLIB configuration data.  (The configuration data is
   written to a temporary file and then inspected with your editor or

   The following commands can be used to do aproximately the same thing
   with command-line versions of TLIB:

       TLIB -ctmp.tmp q
       EDIT tmp.tmp

6) Improved: the temporary filename dialog in TLIB for Windows.
   [Tom Z.]

7) Fixed: a bug (introduced in TLIB 5.03) in the operation of the
   "O" (owned) wild-card search mode, which caused commands like
   "tlib to @tlibwork.trk" and "tlib to @snapshot.snp" to list all files
   named in the snapshot or tracking file, rather than just those that
   were checked-out/locked by the current user ID.

   A workaround for this bug was to strip the version number info from
   the file list and configure "FIND1FILE Y".  E.g., instead of:


   ...in TLIB 5.50e and earlier you could do:

       REM - First, create TLIBWORK.LIS, a plain file list containing the
       REM   same list of files that TLIBWORK.TRK contains:
       REM - Then configure "FIND1FILE_Y", and use @TLIBWORK.LIS instead
       REM   of @TLIBWORK.TRK to specify the files:

   ...or, combine it into one long TLIB command line:


   The same bug was also present in TLIB for Windows: if you checked only
   the "Owned" search mode checkbox, and specified @tlibwork.trk as a
   wildcard specification, and clicked "Expand Wildcard," then WinTLIB
   would list all the files named in TLIBWORK.TRK instead of just those
   "owned by" (checked-out for modification to) the current user ID.
   [Willie D.]

8) Improved: error message displayed when WORKDEPTH is configured too late
   in the TLIB.CFG file (because the work directory has already been
   determined at that point).

9) Fixed: a bug which, under some circumstances, caused TLIB's snapshot
   command to fail when trying to modify an existing snapshot file.  The
   problem affected commands like this one:

      tlib s temp.snp myfile.c,@temp.snp

    This command is supposed to update the entry for "myfile.c" in snapshot
    file temp.snp.  However, prior to TLIB 5.50f it would fail with error
    messages similar to these:

      DOS 6.22, Err=6, Extd=6 Clas=7 Lcs=1 Act=4
      ERROR: writing at offset 0, only 0 of 16 bytes written.
       . . .
      ERROR: Could not write "temp.snp"; snapshot is in "D:\TEMP\$TLIB_TM.2".

   (However, the named temporary file, D:\TEMP\$TLIB_TM.2 in this example,
   was missing.)

   The workaround was to use a second file name, like this:

      tlib s temp2.snp myfile.c,@temp.snp
      del temp.snp
      ren temp2.snp temp.*

   The workaround is no longer necessary.

10) Fixed: a bug which prevented TLIB from extracting files to a
   user-specified directory when TREEDIRS_N was configured and a
   project-level search mode ("A" or "T") was used.

   If TREEDIRS_N is configured, then you are supposed to be able to
   extract files to alternative directories simply by specifying the
   desired location.  For example,

      TLIB E xyz\myfile.c

   However, this wasn't working with the A and T search modes.  The
   symptom was an error message similar to this:

      ERROR: No files matching "xyz\myfile.c" found in project level DEV.

   This bug has been fixed.  However, there are pitfalls to be aware of
   when extracting files to directories other than your work directory.

   The pitfalls arise because TLIB records in your work directory tracking
   file, TLIBWORK.TRK, the current version number (and some related
   information) for each extracted source file.  Therefore, if you extract
   the files into another directory, TLIB's record of the version numbers
   will be misleading, since the version numbers won't necessarily match
   the files that are actually in the work directory.

   TLIB depends upon this information for two features:  EBF (extract
   browse-mode freshen), for refreshing out-of-date files in the work
   directory; and automatic branching on Updates (which causes a version
   of a source file to be stored as a branch version if you weren't working
   on the latest trunk version).

   Therefore, if you have TREEDIRS_N configured and extract files to
   somewhere other than the work directory, you should be very sure to be
   consistent and always extract the files into the same location, or else
   never use a TLIB command (EBF or U) which depends upon the information
   in the work directory tracking file.
   [Mark W. and Rich W.]

11) Fixed: a pair of Win-95 Long File Name (LFN) problems which could
   occur when TREEDIRS Y was configured.  These problems affected TLIBX.EXE
   and WinTLIB.

   One problem was with error handling when LONGNAMES Y was configured and
   the network directory path for the work directory tracking file could
   not be resolved to canonical form using the LFN protocol (perhaps due
   to the length of the path).  The symptom was improper automatic
   determination of WORKDIR, and no informative error message explaining
   the cause.  (The workaround was to explicitly set the work directory
   via the WORKDIR configuration parameter.)

   The other problem was a bug which prevented proper wild-card file name
   matching with the A and T ("All level" and "This level") wild-card
   search modes when the current directory was a subdirectory beneath the
   main work directory.  (The workaround was to change the current directory
   to be the main work directory.)
   [James C.]

5.50e     14-Nov-97       (TLIB for Windows 1.104c)

1) Fixed: a bug that caused a debug message box to pop up when the user
   chose Configuration Options or Edit Configuration File from the File
   menu in WinTLIB.  (The message box said, "dbg: tcl, tcmd='G2CFGFILE'...".
   It was innocuous, but annoying.)
   [Steve H.]

2) Changed: some internal debug message boxes to use the usual Warning
   message dialogue.  This allows you to suppress them with the "Ignore
   For all commands" button, in the event that something goes wrong which
   causes one of those messages to be displayed repeatedly.  (That may
   make the problem only mildly annoying instead of severely annoying.)
   [Fabio V.]

3) Added: compiler-native project file support for Symantec Visual Cafe
   .PRJ files.  (This is only lightly tested; please tell us whether it
   is working well for you!)

4) Fixed: a bug that could cause a GPF during an Snapshot (S) command
   with a named project level search mode (A or T) if the project level's
   TLIBWORK.TRK file was empty.

5) Fixed: a bug in the real-mode TLIB.EXE (but not in any other version of
   TLIB) that could cause files to be processed multiple times if specified
   multiple times on the command line and one of the times was via a
   snapshot or tracking file that was being used as a file list.  The
   symptom seen was that the command:

        tlib s newsnap.snp myfile.c,@oldsnap.snp

   ...resulted in a newsnap.snp snapshot file that contained two myfile.c
   lines if myfile.c was already listed in oldsnap.snp.

   The workaround was to use TLIBX.EXE or TLIB2.EXE instead of TLIB.EXE.
   [Craig M.]

6) Added "-HINTS" option to WTLIB16.EXE (WinTLIB), to make it start with
   new user hints reenabled; and added an icon/shortcut to start it that
   way for new users.
   [Shmuel W.]

7) Fixed: If TREEDIRS_N is configured, then you can extract files into
   a particular subdirectory simply by specifying the desired destination
   location as part of the wild-card specification, e.g.,


   However, when using a project-level wild-card search mode (A or T), this
   feature was not working.  Instead of finding the desired file(s), TLIB
   would display an error message, like:

      ERROR: No files matching "TEMPDIR\MYFILE.*" found in project level DEV.

   This bug has now been corrected.

   However, beware that using this capability has pitfalls.  The problem is
   that it updates the work directory tracking file to reflect the newly
   extracted version number, but the extracted files are not actually in
   the work directory!  This means that the work directory tracking file
   entries are misleading, which means that TLIB will have an incorrect
   record of which versions of the source files are in the work directory.
   This can cause malfunctions of the EBF (extract/browse/freshen) and
   automatic branching features.

5.50d     24-Oct-97       (and TLIB for Windows 1.104b)

1) Added: an option to the Extract screen in WinTLIB, to simplify
   extracting entire snapshot contents.

2) Fixed: a problem in WinTLIB that could cause it to appear to "hang" for
   1.5-2 minutes while retrying attempts to open a file, if the file could
   not be opened due to "sharing errors."

   One symptom (seen under Win-95), was that if the user clicked Delta
   when prompted for comments when TLIB was creating a new library file
   (because UpdateNew Y was configured), WinTLIB would seem to just hang.
   Now it pops up a message box letting the user retry or cancel.

3) Fixed: a bug in the TLIBDLL engine that could cause WinTLIB to crash
   with a GPF with CS:EIP=F2,AE,F7,D1,75,01,49,91,8B,FA,5D,CB.
   The "About" screen shows TLIBDLL version for the fixed version.
   [Stewart K.]

5.50c     23-Sep-97       (and TLIB for Windows 1.103)

1) Fixed: several problems related to the FNAMECASE configuration
   parameter and the preservation/restoration of the capitalization
   or "case" (upper, lower, or mixed) of filenames when FNAMECASE AUTO
   is configured under an operating system that supports mixed-case
   file names.

   Note that the case of an extracted file name may depend upon the
   current wild-card search mode.  For instance, if a file was
   extracted using the "A" or "T" search mode, then (since those
   search modes find file names by looking in project level tracking
   files) the case of the name of the extracted file will be as it
   was found in the project level tracking file (TLIBWORK.TRK).

   If the wild-card search mode used was "L" (libraries) then the
   case of the name of the extracted source file will be determined
   by the case of the library file (except that if TLIB needs to
   determine the case of a letter in the file extension, for which a
   "$" has been substituted in the library file, then TLIB will
   consult first the given wild-card specification and then the
   EXTENSION configuration parameter).

   If you want to extract a file with a particular case which is
   different from that which it would normally have, you must bypass
   TLIB's wild-card expansion.  To do this:

     1) specify the file name without wildcards, and

     2) either configure FIND1FILE N or else (in command-line versions
        of TLIB) add the "N" (no search mode) suffix to the command
        instead of one of the six normal wild-card search modes.

   Note: Win-95 (or at least Win-95 OSR2) does some strange things with
   mixed-case filenames.  In particular, if you replace an already-
   existing file with one that has the same name but different case,
   Win-95 may give the new file the old name case.  Stranger yet, even
   if you delete the old file before replacing it, the file name
   sometimes seems to reaquire the old case, though not if you deleted
   the old file using a wild-card specification.  Weird!
   [James C. and Dave K.]

2) Fixed: a misleading error message which occurred when WinTLIB tried
   to update a read-only library file but READONLY N was configured.
   [Mark T.]

3) Fixed: a misleading error message which occurred when TLIB read a
   bad-format version number from a file list, or when a "comment line"
   in a file list lacked the required space after the leading "!"
   [Keith R.]

4) Fixed: a bug in WinTLIB which caused the following message to pop up:
      ERROR: tcl('G2WORKDIR',), you must first complete the
      previous operation: tcl('G2WORKDIR',)
   or similar, with the window caption, "TLIB for Windows: tcl called
   recursively".  Also, fixed a related bug in the TLIBDLL.DLL engine
   used by TLIB, which caused the GET_TLIB_CONFIG_VAL() API function
   to fail under some circumstances.
   [Tim O.]

5.50b         22-Aug-97

1) Fixed: a bug that could cause command-line versions of TLIB to not
   find their TLIB.SER file if:
   a) TLIB was started by being shelled-to from another program; and
   b) TLIB was located in the current directory; and
   c) TLIB was run without an explicit path being specified for the
      program location.
   The workaround was to specfify an explicit path for the program
   location (e.g., run ".\tlib" instead of just "tlib").

5.50a     20-Aug-97       (and TLIB for Windows 1.102j)

1) We decided that it was finally time to bump the version number.
   So, this is now officially TLIB version 5.5.

2) Fixed: a bug that could cause path information to be be omitted from
   WinTLIB's list of source files, for source files not in the regular
   work directory, if a file list or compiler-native project file
   listed such files, and if TREEDIRS Y wasn't configured.

3) Fixed: a subtle bug that caused occasional strange behavior when the
   %t or %f keyword was used.  The symptom reported was a file that
   extracted incorrectly when a particular version of TLIB was used,
   but which extracted properly with all other versions.  It is also
   possible that this bug could have caused occasional GPF or protection
   exception errors in protected-mode versions of TLIB.
   [Mike T.]

4) Updated: the version of the Blinker DOS Extender used in TLIBX.EXE.
   You'll probably notice no difference, except that the %TLIBX%
   environment variable (for controlling DOS extender features) now
   works as documented.

5) A beta-test version the of TLIB Add-In for Microsoft Developer Studio
   (Visual C++ 5.0, Visual Interdev, Visual J++) is now available for
   download from our Web site (www.burtonsys.com), and from our BBS:
      line 1, 28.8 kbps: 1-919-481-3787
      line 2, 28.8 kbps: 1-919-481-4792

5.04u     24-Jul-97       (and TLIB for Windows 1.102i)

1) Fixed: a bug introduced in TLIB 5.04t which caused "ERR: mdl3" and
   "ERR: bhm" errors.

5.04t     14-Jul-97       (and TLIB for Windows 1.102g)

1) Fixed: a bug that could cause various failures under low-memory
   conditions (or when processing large TLIB libraries) with command-line
   TLIBs running in "real mode" (that is, TLIB.EXE, or TLIB2.EXE when
   not run under OS/2 or NT, or TLIBX.EXE when extended memory is
   unavailable).  Symptoms included hangs and OS crashes.

   The workaround was to configure "USEUMBS N" in TLIB.CFG.

2) Fixed: the DEFEXT (default extension) configuration parameter, which
   was broken.  (This feature must not be very heavily used, because it
   hasn't worked since version 5.04c, seven months ago!)
   [Robert N.]

3) Fixed: "EBF" (extract-browse-freshen) will no longer find source files
   for which there are no corresponding TLIB libraries.  This mainly
   affects the behavior of WinTLIB's "EBF" checkbox option, since the
   default wild-card search mode for command-line versions of TLIB is
   "L" (library files), anyhow.

4) Added: compiler-native project support in WinTLIB for Microsoft
   Visual/Developer Studio projects (*.DSP), and for opening plain file
   lists (*.LIS) as project files.

   The Microsoft Developer Studio supports three development languages:
   Visual C++, J++, and Visual InterDev.  So far, we've only tested our
   compiler-native project file support with VC++ 5.0.

5) Added: compiler-native project file support for Microsoft Visual C++
   5.0 (Developer Studio) .DSP files to command-line versions of TLIB.
   The syntax is:
       TLIB {command} @@myproj.dsp
       TLIB {command} @@myproj.dsp[2]
       TLIB {command} @@myproj.dsp[6]

   With no [bracketed] option, TLIB reads the .DSP project file and
   finds only the source file names actually mentioned within it (plus
   the name of the project file, itself).  This is very fast.

   The [2] option tells TLIB to also find "external dependency" header
   files.  TLIB looks first for a matching .MAK file, and if it is found
   then TLIB reads that instead of the .DSP file, and uses the source and
   dependency information in the .MAK file to enumerate both source and
   header files.  This is also a reasonably fast operation.  However, if
   there is no matching .MAK file, then the [2] option is equivalent to
   the much slower [6] option.  (The .MAK file is generated by the
   "Export Makefile" command in Developer Studio.)

   Like the [2] option, the [6] option tells TLIB to find both the .C or
   .CPP source files that are listed in the .DSP file and the header (.H
   and .HPP) files that they reference.  However,the [6] option tells
   TLIB to find the header files "the hard way," by reading all the source
   files and scanning them for #include directives.  This process is not
   fast.  It may a minute or more for a large project; for an extremely
   large project, it may take several minutes.

   Note: only #include directives in which the header file name is within
   "quote-marks" are found; #include directives that use <angle-brackets>
   are ignored.

6) Added: a WinTLIB option for listing Delphi .OPT and .RES files in
   compiler-native project mode along with the normal source files.

7) Added: support for the "-t1" command-line switch, which is a variant
   of the existing "-t" command-line switch.  The "-t1" switch overrides
   only two of the five configuration parameters which "-t" (or "-t0")
   overrides.  "-T1" is equivalent to "C locking_n C readonlyb_n".
   "-T" or "-t0" is equivalent to "-t1 C track_n C keyflag C logflag".

   In other words, "-t" or "-t0" is equivalent to temporarily disabling
   parameters; "-t1" temporarily disables only LOCKING and READONLYB.

   We needed the "-t1" command-line switch so that WinTLIB would not need
   to use the "C" (configure) command, since some TLIB users disable the
   "C" command for security reasons.
   [Frode N.]

8) Changed: TLIB for Windows, to use the new "-t1" switch instead of the
   "C" command, when extracting to a temporary file.
   [Frode N.]

9) Improved: wildcard expansion, to make it faster under some
   circumstances in which there are a great many source files.

10) Fixed: a bug in WinTLIB which prevented the "Yes All" button from
   suppressing repetition of the same Yes/No question for each file, while
   processing multiple files.
   [Bob W.]

11) Fixed: a bug introduced in the (unreleased) version 5.04s which could
   cause garbled file names under some circumstances when paths were
   specified along with the file names in a wild-card spec.

5.04r     17-Jun-97       (and TLIB for Windows 1.102d)

1) Fixed: a bug that could cause an "ERR: stQ" failure under some very
   unusual circumstances:  when TLIB was creating a new library file,
   yet the module was already listed in an inherited-from project level
   tracking file, and s=Q was configured for the current project level.
   [Joe K.]

2) Improved: TLIB's handling of nested #include files in Watcom C/C++
   compiler-native project file mode, particularly in TLIBX.EXE (the
   DOS-extended command-line version).

   Watcom's "target" files only list the "main" source files, not the
   needed header files, so TLIB can scan the source code for #include
   directives.  However, TLIB's ability to handle deeply nested #include
   files is limited by its stack, because of a recursive call which it
   makes for each level of #include nesting.  TLIB checks the available
   stack space before each recursive call, and thereby limits the depth
   to which it can process nested #includes.  However, TLIB is (currently)
   a 16-bit program, with a 64K main data segment, which includes the
   stack (and many other things), so the stack cannot be arbitrarily
   large.  As it happens, some versions of TLIB necessarily have smaller
   stacks than do other versions, and the version with the smallest stack
   is the DOS-extended command-line version, TLIBX.EXE.

   By moving some data out of the main data segment, we've managed to
   increase the stack sizes, so that even TLIBX.EXE can now process
   nested #include directives to several levels deep (though still not
   as deeply as TLIB.EXE and TLIB for Windows).

3) Added: another API (Application Program Interface) to TLIB for Windows.
   This one uses Windows messaging instead of DDE.  It is simpler and
   faster, and it works in some circumstances in which DDE does not.
   We're using it in the Add-In for Microsoft Developer Studio (VC++, VJ++,
   etc.), which will be available soon.  See APIWMSG.TXT for details.

4) Improved: some error checking and reporting in WinTLIB, mostly related
   to updating the TLIB.INI file.
   [Mike K.]

5.04q     23-May-97       (and TLIB for Windows 1.101b)

1) Added: a new program, NETSETUP.EXE, to make it easier to set up TLIB
   on multiple workstations on a network without having to do full
   reinstallations on each computer.  It also makes it easy to set up
   TLIB for Windows again under additional copies/versions of Windows,
   or after you have reinstalled Windows.

   If you have already installed TLIB into an existing directory (perhaps
   on a network volume), but the TLIB for Windows folder or group doesn't
   exist in the currently-running copy of Windows, then just run
   NETSETUP.EXE to create your icons/shortcuts, folder/group, AUTOEXEC
   and registry additions, etc..

   Note that your TLIB license limits the number of computers that can
   have TLIB installed on them at the same time.  Please respect our

2) Improved: User ID dialogues in WinTLIB.

3) Fixed: a bug in WinTLIB that could cause erroneous compiler-native
   project display (the right files, but listed in the wrong directory)
   when switching from normal mode to compiler-native project mode and
   the initial project is in a directory other than the normal mode's
   current directory.  (Workaround: press F5 to refresh the file list.)

4) Added: to WinTLIB's Snapshot dialogue the ability to write plain file
   lists (with or without full paths) instead of TLIB snapshots.

5) Improved: SETUP in several ways.  Most importantly, if you are
   installing to a network drive, SETUP can add a "SET TLIBINI" to your
   autoexec.bat file, to help prevent multiple users from inadvertantly
   sharing the same TLIB.INI file.

5.04p     21-May-97       (and TLIB for Windows 1.100b)

1) Changed: the CMTFLAG configuration parameter, so that "<" and ">" can
   be used in the flag string.  This is needed for HTML files, because
   they use "<!--" and "-->" to surround comments.  (The CMTFLAG
   parameter is mainly used in conjunction with TLIB's Migrate command.)

2) Added: code to detect "shrunken" library files.  Since TLIB Version
   Control only appends to library files, and never deletes any existing
   data, it should not be possible for a TLIB library file to shrink.
   So, TLIB now compares the last known length of each TLIB library file
   (from the "l=" field of the work directory's TLIBWORK.TRK file) with
   the actual length of the TLIB library file at the time of an extract
   or update command.  If the TLIB library file is shorter than expected,
   TLIB emits a error message similar to the following:

      ERROR: d:\tlibs\myfile.c$ is only nnnnnn bytes long, but l=mmmmmm
      in d:\workpath\TLIBWORK.TRK.  myfile.c$ appears to have shrunk!
      One possible cause is that someone restored myfile.c$ from an old
      backup set.

   For Extract commands, TLIB then asks you:

      Abort the Extract?

   If you answer "N" then the extract will proceed normally; if you
   answer "Y" then TLIB will skip the extract of this file and continue
   with the next one.

   Note that if you edit your TLIB libraries with a text editor (perhaps
   to change the comments), you may see this error message.  If that is
   a problem for you, contact us, and we'll add a configuration parameter
   to disable the feature.
   [Arkady B.]

3) Added: more minor usability improvements to TLIB for Windows, mostly
   in compiler-native project mode, and a couple of minor bug fixes.

4) Improved: TLIBTLIB.PL, for better memory efficiency when processing
   extremely large TLIB libraries.  (The previous one broke when processing
   a 700-version TLIB library file using a real-mode version of Perl.)

5) Fixed: a bug in the command-line versions of TLIB which interferred
   with wild-card expansion in interactive mode (i.e., when you run TLIB
   without parameters and let it prompt for commands and file names) unless
   FIND1FILE Y was configured.
   [George P.]

6) Added: pop-up "Hints for New Users" in WinTLIB.

5.04n          8-May-97   (and TLIB for Windows 1.97)

1) Fixed: a bug which caused MAKEDIRS Y and MAKEDIRS M to fail for long
   directory names under Windows-95.
   [Fred G.]

2) Fixed: a bug which could cause bogus "Warning: Temporary license
   expires..." messages.
   [Fred G.]

3) Added: code to work around a Windows-NT bug, which causes NT to return
   the wrong error code when a program tries to create a file in a non-
   existent directory.  The symptom was that, when running under NT,
   configuring MAKEDIRS M would not allow TLIB to create directories as
   needed.  The workaround was to configure MAKEDIRS Y.

   Fortunately, the "extended error info" is correct, so we changed TLIB
   to now check both the regular error code and the extended error code.
   [Frode N.]

4) Updated: PCOM, our parallel-port-based file transfer and remote-control
   utility for DOS.  The new version is 5.00r/s.  This is the first update
   to PCOM since 1994.  It includes bug fixes, enhancements for better
   reliability on modern fast machines, and several arcane new features.
   Run it without parameters for help.

5) Added: improved error diagnostics to DIFF3 v5.04.
   [Ed J.]

6) Fixed: a bug in TLIB for Windows, which prevented the Delta (visual
   compare) command from working with files that had Win-95 long file names,
   unless comparing versions that were already stored in the TLIB library.

7) Fixed: a bug which could cause an "ERR: lkT" failure if the locking
   configuration parameter was changed from "LOCKING B" to "LOCKING N".
   [Larry T.]

8) Added: substantial new functionality to the TLIB Add-In for Micrsoft
   Visual Basic 5.0.  It now has a "Run WinTLIB" menu item, for easy access
   to TLIB functions that are not directly available in the VB IDE, and
   project file check-in/out, and better handling of read-only files,
   and several other improvements.

9) Added: commands to write lists of file names (or paths\names) to a
   plain file list file.

   The new SP command writes a list of file names with full paths.  (The "P"
   suffix stands for "Path.")  E.g.,

        TLIB SPL CFILES.LIS *.c,*.h

   ...creates a file list named CFILES.LIS containing a list of the files
   with .C or .H suffixes for which TLIB libraries already exist.  Note
   that you can use TLIB's wild-card search modes to control which files
   are listed.  For example, to write a list of the files that you have
   currently checked-out/locked, you could use:


   The new SM command is similar, but writes only Minimal (relative) path
   information instead of fully-qualified paths.  (The "M" stands for
   "minimal.")  If TREEDIRS N is configured, then only file names are
   written to the output file (with no directory information at all).

   Because of the similarity to the existing Snapshot command, these new
   commands were implemented as suffix-options to the S (snapshot) command.
   (The S command is just like the SM command except that the S command
   includes version number information along with the file names, and the
   SM command does not.)

   Note: For the convenience of those who are converting from earlier
   versions of TLIB, this version of TLIB allows the use of the 'SM' and
   'SP' commands even if they are not listed in the COMMANDS configuration
   parameter.  So, you cannot disable these commands.  (Tell us if this
   is a problem for you.)

   Note that, in combination with TLIB's compiler-native project file
   support, this feature lets you use TLIB to easily extract a list of
   source files from your compiler's native-format project file (for those
   compiler project files that we support).  For example, to produce a
   list of the source files used by a Visual Basic 4.0 project, you could
   use a command like this:


   The list of files is created in MYPROJ.LIS.

   Similarly, to list them to the console, you could use:


   For another example, the following command would list the source files
   in a Watcom C/C++ project, plus the application's #include files:


10) Fixed: a bug in TLIB.EXE, TLIBX.EXE, and TLIB for Windows which could
   cause grossly bloated TLIB library files.  The bug was present in
   versions 5.03 and 5.04 through 5.04m, except that the bug did not
   affect TLIB2.EXE.

   The symptom of the bug was that if PASSSIZE (a/k/a MAXLINES) was
   configured to greater than 8192, and if a version of your source file
   contained more than 8192 lines (or binary "records," for binary
   files), then the next version after that would be stored in its
   entirety instead of as a concise delta.  The resulting bloated TLIB
   library is still usable, but it could easily grow to truly enormous
   size (we noticed the problem when we ran out of disk space on a
   machine that should have had plenty, and we found that several TLIB
   libraries were over 10 megabytes in size).

   (In case you are curious, the reason the bug did not affect TLIB2.EXE
   is that we use a different C compiler when building TLIB2.EXE than
   when building other versions of TLIB, and the problem was caused by
   a compiler bug in the compiler which we use to build the other
   versions of TLIB.)

   For binary files, it may not be obvious whether or not the TLIB
   libraries contain any versions with more than 8192 "binary records."
   However, the problem is unlikely to affect binary files of less than
   about 120KB in size.

   The only way to trim down your bloated TLIB libraries is to rebuild
   them with a version of TLIB that does not have the bug (i.e., TLIB
   5.04n or later, or any version of TLIB2.EXE, or an old TLIB 5.02d).
   You can use the "TLIB-to-TLIB converter" to automate this chore.
   The converter came with your copy of TLIB.  It works by repeatedly
   running the command-line version of TLIB.

   The TLIB-to-TLIB converter is called TLIBCVR2.EXE or TLIBCVRT.EXE
   (or TLIBTLIB.AWK for the AWK source code).  Using the TLIB-to-TLIB
   converter, you can rebuild your TLIB libraries all at once.  However,
   it is a slow process, so you may want to start it in the evening
   before you go home from work.

   If you have TLIB for DOS, an old version of the converter is in
   CONVERT.ZIP or CONVERT2.ZIP.  If you have TLIB for Windows, then it is
   one of the optionally-installed components, and it is installed in
   the CONVERT subdirectory (probably C:\TLIB\CONVERT\).  However, we've
   also fixed a bug in the converter, so you'll need an updated version;
   see item 11, below.

   Note: You should (at least temporarily) replace TLIB.EXE with a copy
   of TLIBX.EXE (or, under OS/2 or NT, TLIB2.EXE) while running the
   TLIB-to-TLIB converter.

11) Fixed: a bug in the TLIB-to-TLIB converter, TLIBTLIB.AWK,

   We also created a new, improved TLIB-to-TLIB converter, TLIBTLIB.PL,
   written in Perl instead of AWK.  The new converter performs better
   than the old one on big conversion jobs, because it uses multiple
   temporary directories to store its temporary comment files (since DOS
   slows down severely if you try to put thousands of files into the
   same directory).

   We also include a small (150K), free Perl 4.036 for DOS, PERL4S.EXE
   (the source code for which is available upon request).  It works
   well with TLIBTLIB.PL.  However, if you have Perl 5, you can use it,
   instead, to run TLIBTLIB.PL.

   See TLIBTLIB.TXT (or TLIBTLIB.DOC) for instructions, and call or email
   us if you need help.

5.04m          4-Apr-97

1) Fixed: a bug which caused protected mode versions of TLIB to fail
   with an "ERR: heap" message when processing extremely large TLIB
   library files (it was seen with a 27 MB TLIB library file).
   [John D.]

2) Added: a TLIB Add-In for Visual Basic 5.0 Professional.  A version
   for VB 5.0 Learning Edition will be available soon.

still 5.04L  21-Mar-97  (but TLIB for Windows 1.96b)

1) Fixed: a bug in WinTLIB's compiler native project mode which caused
   the list of files to be unnecessarily cleared and refilled during
   wild-card operations if no files were initially selected.

2) Updated: the Installation system we use (Wise Install) to a new
   version, for compatibility with the latest Windows-NT 4.0 service

   However, there may be a problem with installing to Windows 3.1x
   under OS/2 2.1 (WIN-OS2) with this version of Wise-Install.  If you
   are using OS/2 2.1, please tell us whether it works properly for you.
   (If necessary, we can use an earlier version of Wise Install to make
   a TLIB setup.exe that will work for you).
   [Mike O.]

3) Improved: error recovery when reading a TLIB.INI that has been damaged.

5.04L         12-Mar-97   (and TLIB for Windows 1.95)

1) Fixed: a bug in WinTLIB which caused the Delta (visual compare)
   to refuse to subsequently run (until WinTLIB was restarted) after
   it had once failed or been cancelled.

2) Fixed: several problems with the WinTLIB Add-In for VB 4.0.

3) Improved: WinTLIB's handling of compiler-native project options.
   They are now "sticky," and they are saved and restored along with
   the compiler-native project file names in the MRU list.

5.04k         19-Feb-97

1) Fixed: a bug which caused duplicate file names in the WinTLIB main
   file list when the wildcard specified was of the form "@snapshot".
   [Sid P.]

5.04j         12-Feb-97   (and TLIB for Windows 1.94d)

1) Fixed: a bug which caused 'ERROR: invalid version number: "V=...'
   errors (note the upper-case "V") when extracting an entire old release
   via the "@snapshotfile" syntax.
   [Neil M.]

2) Fixed: when the "@snapshot" syntax was used in a TLIB command, the
   version number last read from the snapshot file wasn't being properly
   reset before the next command.  The result was that it could affect
   the operation of subsequent TLIB commands.

   The problem was most likely to be seen in TLIB for Windows.  The
   symptom was usually one of several possible errors, most commonly
   "ERROR: invalid version number...".  However, in its worst possible
   effect, if the subsequent command was an Extract, this bug could cause
   extraction of the wrong version of a source file.
   [Neil M.]

3) Fixed in WinTLIB: removed a "dbg:" message box that popped-up when
   taking a snapshot of less than five files.  (It was a "debug print"
   that was inadvertently left in place.)

4) Improved: the REPLROBR configuration parameter, so that it won't apply
   to TLIB's tracking file, and added a special warning.  These changes
   are intended to prevent damaging a TLIBWORK.TRK file by accidentally
   extracting it from a TLIB library.
   [Neil M.]

5) Fixed in WinTLIB: if an Extract Specified version was attempted, but
   no version was specified, and a warning (such as "Note: myfile.ext
   was already checked out to you...") was generated, the version history
   could be displayed in the pop-up message box along with the warning

5.04i         30-Jan-97   (and TLIB for Windows 1.94c)

1) Fixed: In WinTLIB, when a check-out failed because the file was
   locked by someone else, the name of the person who had it out wasn't
   shown in the pop-up window.  It was necessary to click Ignore, then
   click View Log to see the person's ID.
   [Bob W.]

2) Improved: some error handling logic.

5.04h         28-Jan-97   (and TLIB for Windows 1.94b)

1) Added: support for Borland Delphi compiler-native project files.

   In command-line versions of TLIB, use the syntax "@@path\progname.dpr"
   to specify the files in a Delphi project file.

   In TLIB for Windows, click the Mode button to enter compiler-native
   project mode, then click on "..." and then click the down-arrow on
   the "Open Project File" screen to bring up the list of supported
   compiler-native project types.  Click on "Borland Delphi (*.DPR)".

   Note that we depend on the "Uses" list being in the usual form, with
   the customary comments compiler-generated comments, and we do not
   currently scan for Include files.

   To include .RES and .OPT files in the list of source files, add "[1]"
   to the file specification, e.g., "@@path\progname.dpr[1]".

   We're grateful to Mr. Craig Tomita for the code which parses Delphi
   project files.

2) Enhanced: WHEREIS.EXE v1.9, to handle long file names under Win-95
   as well as under OS/2 and NT.

   Also, added a new option, "-a", to select an output format more
   appropriate for the display of long file names.  Under Win-95, the
   short-form file names are displayed unless you specify the -a option.

   For instructions, run WHEREIS with no parameters.

3) Fixed in TLIB for Windows: a problem that occurred when using TLIB
   with a Win-95 TCP/IP networking product called Maestro.  The symptom
   was TLIB for Windows failing at start up with an error message saying
   that it could not change directories.
   [Steve K.]

4) Fixed in TLIB for Windows: a bug which caused "ERROR: check in/out
   locking not enabled" when, in fact, it was already enabled.  The
   error happened when another command (like Test or Update) was
   attempted after an Extract to temporary file.
   [Joe G.]

5) Fixed in TLIB for Windows: When "PROJLEV *" is configured, the
   default wild-card search modes are now W+L instead of W+A.

6) Added: support in the TLIB for Windows "invisible DDE" mode for a
   the new special start-up option, "-LZ", which tells WinTLIB to start
   in "invisible DDE" mode but not to shut down when the link is closed,
   but rather to stay resident until the new "SHUTDOWN" command is
   [Dan H.]

7) Fixed: When "LOCKING B" is configured (so that check-in/out locking
   is "local" to the current project level), the "O" ("Owned") search
   mode now finds only those files which the user has checked out at
   the current project level.  This differs from TLIB 5.04g, which
   found all the files that the user had checked out at any level.
   This change makes TLIB 5.04h behave like 5.02.

   Note that this change only affects users who've configured "LOCKING B".

   If you've configured "LOCKING B" but want to make the "O" search mode
   find all your checked-out files instead of just those checked out at
   the current project level (in other words, if you want the behavior
   of TLIB 5.04g), you can temporarily configure "LOCKING Y".  In
   non-Windows versions of TLIB, this can be done via a command-line
   override, e.g.:

      tlib c locking_y t *.c,*.h

   It is also possible to do this in TLIB for Windows, by manually
   overriding the LOCKING configuration parameter via the "Run" (manual
   command) button:

   a) Temporarily configure "LOCKING Y":  Click on the "Run" button
      (or select Run Manual Command from the "File" menu).  Then enter
      the command:

      c locking_y

      Then click "Execute" and "Close" to return to the main screen.

   b) Use the "Owned" search mode and "Expand Wildcard":  First, check
      "Owned", and un-check the other search modes.  Then enter a wild-
      card spec (perhaps *.*), and click the "Expand Wildcard" button.

   c) Then restore the proper locking mode:  Click on the "Run" button
      (or select Run Manual Command).  Then enter the command:

      c locking_b

      Then click "Execute" and "Close" to return to the main screen.

   Note that temporary configuration changes made via "Run" (Run Manual
   Command) only persist until the next time you set the TLIB for Windows
   current directory, since at that time TLIB for Windows reloads all
   configuration information from its configuration file(s).
   [Larry T.]

8) Fixed: a bug that could cause TLIB's "S" (Snapshot) command to fail
   with a false "bad dot command" error with a text-format TLIB library
   created by TLIB 5.02 or earlier that contained linefeeds without
   carriage-returns in the stored text file.
   [Jerome T.]

5.04g         20-Dec-96   (and TLIB for Windows version 1.93)

1) Fixed: a bug which could cause "ERR: adQ" when "a=q" (the default)
   was configured and a file was being added to a project level via the
   U (update) command.
   [Joev D. and John D.]

2) Fixed: a problem with TLIB for Windows, which caused it to try to
   use the Windows registry association instead of the configured text
   editor to edit tlib.cfg.

3) Fixed: an error-handling bug which could cause protection exceptions
   (GPFs) in TLIB for Windows when there was a syntax error in a LET or
   IFF expression in the TLIB configuration file.
   [Jim M.]

4) Fixed: a bug which caused the %tlibcfg:workdir:n:m% syntax in a
   TLIB configuration file to not work.  The workaround for the problem
   (needed in TLIB 5.04f) was like this:
      REM - Instead of %TLIBCFG:WORKDIR:1:-1% do this and use %LWRKPAT%
      LET LWRKPAT=UNQ ('%LWRKPAT%' SPL '1:-1')
   [Jim M.]

5) Fixed: a bug which prevented a snapshot file from being used with the
   recommended syntax to retrieve an old version; the current versions
   were being retrieved instead of the versions named in the snapshot
   file.  This syntax once again works correctly:
      tlib eb @snapfile.snp
   In TLIB 5.04f, that didn't work.  The workaround was to use the
   following (slower) form:
      tlib ebs @snapfile.snp @snapfile.snp
   [Paul V. and Peter S.]

6) Fixed: when an EBF (extract/browse-mode/freshen) command is done
   and no files are extracted because all matching files are already
   up-to-date, TLIB just displays a "Note: No out-of-date files..."
   message and exits.  However, it was exiting with errorlevel 1.
   Since this is not an error condition, it now returns errorlevel 0
   for this situation.
   [Paul V.]

7) Fixed: an error which occurred when extracting a file to replace an
   existing 0-length read-only file (the REPLROBR Y configuration
   parameter was being ignored if the read-only file to be replaced was
   0-bytes in length).
   [Paul V.]

8) Changed the informative message that is displayed when weak or
   branch/level locking is enabled, and a file is check out which
   someone else is already working on.  The message was:
      Warning: {sourcefile.ext} is checked out to...
   However, a user suggested that "Warning" is a bit strident for a
   message about what is, after all, a non-error condition.  So, at
   his suggestion, we've changed the message to the less severe:
      Note: {sourcefile.ext} is checked out to...
   [Paul V.]

9) Added: the new AUTOBRNCH configuration parameter:


   This parameter controls TLIB's automatic branch creation feature, in
   which TLIB will automatically create a new branch when you update a
   library with a new version of a file, but (according to the record
   in the work directory tracking file) you didn't start with what is
   now the latest version.

   Traditionally, TLIB would just just go ahead and create the new
   branch version.  Configure AUTOBRNCH Y to restore TLIB to this

   If you want TLIB to ask you before creating a new branch version,
   then leave it configured to the default, AUTOBRNCH Q.

   If you want TLIB to issue an error message and skip the file, then
   configure AUTOBRNCH N.

   Note that this configuration parameter will not force everything to
   be stored as trunk versions.  If that is the behavior you want,
   then you probably should just disable version tracking altogether.
   [Paul V.]

10) Extended the temporary serial number expiry to 7-Feb-97.

5.04f         18-Nov-96   (and TLIB for Windows version 1.90b)

1) Fixed: a bug that could cause TLIB's "L" (List Versions) command to
   fail with a false "bad dot command" error when LOCKING was enabled
   and a U (update) command was attempted with a text-format TLIB library
   created by TLIB 5.02 or earlier that contained linefeeds without
   carriage-returns in the stored text file.
   [Steve K.]

2) Fixed: a bug that could cause protected mode command-line versions
   of TLIB to fail with a protection exception if Enter was pressed
   when TLIB prompted for a file name or wild-card spec.
   [Peter S.]

3) Added: the COLOROFF configuration parameter, to let you tell TLIB what
   ANSI escape sequence to use to resets your console color to "normal"
   after displaying a colorized error or warning message.

   This configuration parameter does nothing in TLIB for Windows, and
   does nothing if COLORIZE N is configured (which is the default under
   DOS if ANSI.SYS is not loaded).

   The default is "COLOROFF ".
   [Peter S.]

4) Fixed: a bug in TLIB for Windows which caused it to crash when run
   in 32-bit color mode.

5) Extended the temporary serial number expiry to 31-Dec-96.

5.04e          6-Nov-96   (and TLIB for Windows version 1.88b)

1) Fixed: a bug in the TLIB for Windows "Extract" command:  When both
   "As Temporary File" and "Specify Version" were selected, but the
   version number wasn't filled in, it wasn't prompting for the version

2) Fixed: a bug which could crash TLIB for Windows if an invalid "context
   size" was entered on the compare options screen.
   [Tom Z.]

3) Increased: the maximum configuration include file nesting depth, to 3
   (or 4, if you count the main configuration file).

4) Changed: some colors and fonts in TLIB for Windows, for better appearance
   when using unusual Windows color schemes.

4) Fixed: bug which could cause the two captions to be swapped in the
   visual compare when invoked via TLIBCOMP or by dropping files on the
   icon with Norton Desktop.

5) Added: "CD" and "CONFIG" commands to the "Invisible DDE" interface.

6) Added: "Compare" and "History" submenu choices to the TLIB Add-In for
   Visual Basic 4.0.

5.04d         16-Oct-96   (and TLIB for Windows version 1.84b)

1) Added: an Add-In for Visual Basic 4.0 (32-bit version), to hook into
   the VB 4.0 IDE.  Thanks to Mike's wizardry, it even works with VB 4.0
   Standard Edition (the cheap version).  Very cool!

   This is brand-new beta-level code, currently tested only under Win-95,
   not under NT.  (It'll probably work under NT, as long as you ensure
   that you use only short directory and file names.)

2) Improved: handling of Win-95 long subdirectory names that include
   blanks.  We needed to be able to handle these because the default
   install directory for VB 4.0 under Win-95 is "C:\Program Files\vb4\".
   If there's a blank in the directory name, we just use the short form
   of the directory name (e.g., "C:\PROGRA~1\VB4\").

   This change only affects TLIBX.EXE and TLIB for Windows, because those
   are the only versions of TLIB that handle Win-95 long file names.

5.04c         13-Oct-96

1) Fixed: a bug in the Win-95 long filename support of TLIBX and TLIB
   for Windows.  The symptom was incorrect handling of file attributes
   (e.g., the read-only attribute) on files with long names, or failure
   of the UD (check-in discarding changes) command.

2) Increased: the length limit for WORKDIR from 39 characters to 68
   characters, and added an error diagnostic which is displayed when the
   limit is exceeded.  Note, however, that the total path+name length
   for files is still limited to 80 characters, so having a very long
   WORKDIR will restrict your ability to use long file names under Win-95
   (or, with TLIB2.EXE, under OS/2 or NT).
   [Steve K.]

3) Fixed: a couple of bugs in the Windows stand-alone compare.
   [Neil M.]

5.04b/       30-Sep-96

1) Fixed: a bug in the LONGNAMES N implementation which could cause DOS
   and Windows versions of TLIB to be unable to find files which have
   no extension, using some of TLIB's wild-card search modes.
   [Steve K.]

5.04a/       25-Sep-96

1) Added: support for configuring READONLYB W ("read-only browse mode
   files only in Work directory"), to make browse-mode files
   read-only in your work directories, but leave reference copies in
   project level reference directories writable:

         READONLYB <Y/N/W>

   This is for users who have a network that does not permit them to
   make files on the server read-only (or which does not allow other
   users to make them writable again).  The most common example is a
   Unix-based file server, but one user reports having this problem
   with an NT 4.00 server and NT 3.51 workstations.
   [Peter S.]


2) Changed: the "temporary" serial numbers (for evaluators of TLIB).

3) If you would like to have TLIB integrated with Visual Basic 4.0 or
   Borland Delphi, please send email to support@burtonsys.com.
   You too can be a Guinea Pig!

5.03x/  18-Sep-96 (and TLIB for Windows Beta 1.75c)

1) Changed: default is now ERRORPAUS 2 instead of ERRORPAUS 1.  This
   means that, by default, command-line versions of TLIB will not allow
   "Warning:..." messages to scroll off the screen.

2) Fixed: a bug that could cause spurious error messages when when the
   "O" ("owned-by-me") wild-card search mode was specified in combination
   with another search mode.  Symptom was:
        ERROR: Open failed for "(null)", No such file or directory

3) Fixed: some problems that could result if LONGNAMES was configured
   inappropriately or DEBUGMODE was enabled, and a bug under Windows-95
   which could cause TLIB to report erroneously that the work directory
   and current directory were different, when they were actually
   identical (as well as other symptoms); the workaround was to configure
   LONGNAMES N (to disable long file name support).
   [Joe G.]

4) Improved: some error diagnostics, including warnings if TREEDIRS N
   is configured but WORKDIR is set to something other than the current

5) Improved: compare screen resizing and some help-status-bar text in
   TLIB for Windows.

6) Fixed: bugs in the Snapshot command in TLIB for Windows.

7) Improved: error handling in some circumstances, especially when
   TLIB is unable to open a file due to "sharing errors."

8) Eliminated: the not-very-useful filename-only first column in the
   main file list of TLIB for Windows.  By placing the path\name in the
   rightmost column, we avoid problems with long filenames fouling up
   the columnarity of the list box.

5.03w/  30-Aug-96 (beta)

0) Sped up: In TLIB for Windows Beta 1.74c, sluggish scrolling of the
   delta/compare screen.

1) Fixed: A bug in the Win-95 long filename support, which could cause
   wild-card specs matching lower-case or mixed-case filenames to find
   the same file twice.  (This bug affected only TLIBX.EXE and TLIB for

2) Added: WATCOM.TXT, GEN_CI.* and GEN_CO.*, for hooking TLIB into the
   Watcom IDE.

3) Updated: TESTLOCK to version 1.17.  (TESTLOCK is our tool for testing
   network and OS file-sharing/locking support.)  This version adds some
   additional test cases, mostly for AUTO2 mode, the dual-machine test.

   It also adds three new versions of the TESTLOCK executable.  There
   are now five:

      TESTLOKR.EXE  -- real-mode DOS
      TESTLOKP.EXE  -- 16-bit OS/2+NT+DOS ("bound" family-mode)
      TESTLOK2.EXE  -- 32-bit OS/2
      TESTLK95.EXE  -- real-mode Win-95 (uses Int 21H LFN functions)
      TESTLK32.EXE  -- Win-32 (for Windows-NT and Win-95)

   This table shows which versions of TESTLOCK can be run under each
   of several common PC operating systems:

               | TESTLOKR | TESTLOKP | TESTLOK2 | TESTLK95 | TESTLK32 |
   MS-DOS      | Yes/8.3  | Yes/8.3  |   No     |   No     |   No     |
   Windows 3.1 | Yes/8.3  | Yes/8.3  |   No     |   No     |   No     |
   Windows 95  |   8.3    |   8.3    |   No     |   Yes    |   Yes    |
   Windows NT  |   8.3    |   Yes    |   No     |   No     |   Yes    |
   OS/2 1.3    |   8.3    |   Yes    |   No     |   No     |   No     |
   OS/2 2.x    |   8.3    |   Yes    |   Yes    |   No     |   No     |
   OS/2 Warp   |   8.3    |   Yes    |   Yes    |   No     |   No     |

   Where: "Yes" means that it runs
          "8.3" means that it runs, but only using short file names
          "No"  means that it won't run

5.03v/  15-Aug-96 (beta)

(Note: command-line TLIB 5.03v/ is the same fix-level as TLIB-for-Windows
Beta 1.73b.)

1) Added: "Invisible DDE" support to TLIB for Windows Beta 1.73b, which
   allows other applications to easily integrate with TLIB for Windows
   via DDE Execute commands.  Using DDE can be a simpler alternative to
   calling the API (Application Programming Interface) provided by
   TLIBDLL.DLL.  See TLIBDDE.* for more information.

2) Added: Limited support for Windows 95 long file names in TLIBX.EXE (the
   DOS-extended command-line TLIB), and TLIB for Windows Beta 1.73.

   We still don't have full support for long file names, because:

     - Paths and names are still limited to 80 characters total length,
       rather than 259.  Also, if your filenames are very long, they will
       foul up the columnarity of the main file list box in TLIB for

     - We don't allow blanks and other special characters (except dots)
       within file names, and you can't enclose filenames in quote marks.

     - Directory names should still be in 8.3 format.

     - File extensions are limited to 7 characters in most contexts (up
       from the 3-character limit in TLIB for DOS).

     - TLIB for Windows and TLIBX only support long file names under
       Windows 95, not under OS/2 or Windows-NT.  You can use TLIB2 to
       handle long file names under OS/2 or NT, but it is command-line

     - Some network software does not support the mechanism that we use
       to handle Win-95 long file names.  In particular, we've beem told
       that current versions of PCNFS and older versions of Novell's VLM
       drivers both fail.

     - Only TLIB itself supports long file names; the auxiliary programs
       that come with TLIB do not (yet).

3) Added: the new LONGNAMES configuration parameter.  You can use it to
   prevent TLIB for Windows and TLIBX from handling long file names under
   Windows 95, or to prevent TLIB2 from handling long file names under
   OS/2 and Windows-NT.


   The three possible settings are:

      LONGNAMES No      Disables use of long file names by TLIBX and TLIB
                        for Windows under Windows-95, and by TLIB2 under
                        OS/2 or Windows-NT.  This is the default for all
                        versions of TLIB when running under DOS 6.xx and
                        Windows 3.1 or 3.11.

      LONGNAMES Maybe   Enables use of long file names under Win-95, with
                        automatic fallback to conventional (8.3) file
                        access if long name access fails.  This is the
                        default setting for TLIB for Windows and TLIBX
                        when running under Windows-95.  For TLIB2, this
                        is equivalent to LONGNAMES Y.

      LONGNAMES Yes     Enables use of long file names under Win-95, and
                        disables fallback to the alternative/old (8.3)
                        file access methods.  This is the default for
                        TLIB2 when running under OS/2 or Windows-NT.

   The LONGNAMES parameter is permitted but ignored by TLIB for DOS.

   Here is a table summarizing long file name support by various versions
   of TLIB under various operating systems:

                                OS/2  OS/2 Win 3.1x,             
               LONGNAMES MS-DOSnativeDosBoxWin-OS/2 Win-95 Win-NT
   TLIBDLL.DLL  default   n/a   n/a   n/a    8.3     long   8.3  
   & TLIB for      N      n/a   n/a   n/a    8.3     8.3    8.3  
     Windows       M      n/a   n/a   n/a    8.3*    long   8.3* 
   (API & GUI)     Y*     n/a   n/a   n/a    n/a     long*  n/a  
    TLIB2.EXE   default   8.3*  long  8.3*   8.3*    8.3*   long 
    (TLIB for      N      8.3*  8.3   8.3*   8.3*    8.3*   8.3  
     OS/2+NT)   M or Y    8.3*  long  8.3*   8.3*    8.3*   long 
    TLIBX.EXE   default   8.3   n/a   8.3    8.3     long   8.3  
    (DOS-          N      8.3   n/a   8.3    8.3     8.3    8.3  
    extended)      M      8.3*  n/a   8.3*   8.3*    long   8.3* 
                   Y*     n/a   n/a   n/a    n/a     long*  n/a  
    TLIB.EXE     (any)    8.3   n/a   8.3    8.3     8.3    8.3* 
   (real mode)                                                   


     8.3    supports short file names only

     8.3*   supports short file names, but this is not the best version
            of TLIB to run in this operating environment, or it is not the
            recommended setting for LONGNAMES in this operating environment.

     long   supports long file names (80 chars maximum, no spaces)

     long*  supports long file names, but we do not recommend configuring
            "LONGNAMES Y" under normal circumstances.

     n/a    not supported

   Note that you can use IFF/ELSE/ENDIF directives with the %TLIBNAME%
   symbol to set configuration parameters which apply only to certain
   versions of TLIB.  For example, the following would disable support
   by TLIBX and TLIB for Windows for Win-95 long file names, without
   disabling TLIB2.EXE's OS/2 and NT long file name support:

      iff ('%TLIBNAME%' eqi 'TLIBX') or ('%TLIBNAME%' eqi 'TLIBDLL')
         REM  Disable Win-95 long file names:
         longnames n
      iff '%TLIBNAME%' eqi 'TLIB2'
         REM  This really is not needed, because it is the default:
         longnames y

   See also: FNAMECASE, which determines whether file names are translated
   to upper-case (or lower-case).

4) Fixed: a bug in the handling of non-wildcard file specifications when
   the current directory is beneath the main work directory.  [Clark M.]

5.03u/  2-Aug-96 (beta)

1) Improved: a few messages and usability deficiencies.

2) Pre-released TLIB for Windows, in "open beta."

5.03t/  29-Jul-96 (beta)

(Note: command-line TLIB 5.03t/ is the same fix-level as TLIB-for-Windows
Beta 1.64b.)

1) Added: limited support for long file names in the OS/2+NT commmand-line
   version of TLIB, TLIB2.EXE.

   We still don't have full support for long file names, because:

     - Paths and names are still limited to 80 characters total length
       in TLIB2, rather than 254.

     - We don't allow blanks and other special characters (except dots)
       within file names, and you can't enclose filenames in quote marks.

     - File extensions are limited to 7 characters in most contexts (up
       from the 3-character limit in TLIB for DOS).

   If you expect to have file extensions that are 4-7 characters long
   (like ".html"), you might want to change your LIBEXT and LOKEXT
   configuration parameters, e.g.:

      LIBEXT ?$?????
      LOKEXT ?^?????

   Also, don't forget to add your long source extensions to TLIB's
   EXTENSION parameter, e.g.:


   Also, you may want to configure the FNAMECASE parameter, to force
   mixed-case filenames to upper-case.

   Versions of TLIB that don't support long filenames will simply ignore
   the extra characters in the LIBEXT, LOKEXT parameters.  Thus, they'll
   be unable to access TLIB library files with 4-7 character extensions,
   or with base file names of more than 8 characters.  But they'll still
   be able to use the same TLIB configuration file, since for files
   with "8.3" names all versions of TLIB will still compute the same
   library and lock file extensions.

2) Fixed: a bug that caused TLIB to abort when the current directory
   was a project level reference directory.  The error message displayed
        ERROR: in configuration, levels (WORKDIR) and YOURLEVEL have
        same directory...
   [Gary K.]

5.03s/  26-Jul-96 (beta)

1) Changed: Default is now "MULTIPASS Y" (for supporting large files).

2) Added: support for checksummed serial numbers, and the new SERIALNO
   configuration parameter, and the TLIB.SER file.

   The new checksummed serial numbers are based on the old serial numbers,
   but longer.  For example, if your old serial number was 500-01234(5),
   meaning that you have TLIB 5.00, yours was the 1234-th TLIB sold, and
   you bought a 5-user license, then your new serial number might be
   something like 500-01234-5-123456789012.

   The SERIALNO configuration parameter is how you tell TLIB what your
   serial number is.  For example, if 500-01234-5-123456789012 were your
   serial number, you would configure:

     serialno 500-01234-5-123456789012

   From then on, TLIB's copyright banner would say something like:

     TLIB 5.03s/, 5 user license. Copyright 1985-1996 Burton Systems Software.

   If you have more than one serial number, just configure them repeatedly,
   like this:

     serialno 500-01233-1-123456789012
     serialno 500-01234-5-234567890123

   TLIB will sum the number of user licenses:

     TLIB 5.03s/, 6 user license. Copyright 1985-1996 Burton Systems Software.

   The TLIB.SER file is an optional TLIB configuration file which, if
   it exists, must reside in the same directory as the TLIB executable
   (TLIB.EXE, TLIBX.EXE, TLIB2.EXE, or TLIBDLL.DLL), and is read before
   the regular TLIB.CFG file.  TLIB.SER is primarily intended to contain
   your TLIB serial number(s).

   To find out your checksummed TLIB serial number, or to purchase an
   upgrade, you should contact Burton, preferably by email to:


   Please mention your existing TLIB serial number in your email.  If you
   telephone us, please have your old TLIB serial number ready when you
   call.  In the meantime (through September), you can use a special,
   temporary serial number:


   ...where your current TLIB serial number is vvv-sssss(nn).  (Note that
   this temporary serial number will not work for TLIB for Windows; if
   you are a beta tester of TLIB for Windows, please contact us for a
   serial number.)

3) Added and fixed: A few more nits in TLIB for Windows beta, and added
   a Windows installation program (implemented with Wise Install).

5.03n/  16-Jul-96 (beta)

1) Fixed: a bug which caused a false "bad dot command" error when LOCKING
   was enabled and a U (update) command was attempted with a text-format
   TLIB library created by TLIB 5.02 or earlier that contained linefeeds
   without carriage-returns in the stored text file.  (TLIB 5.03 converts
   lone linefeeds to carriage-return + linefeed pairs, so this bug did
   never affected TLIB libraries created by TLIB 5.03/.)  [Steve K.]

2) Fixed: wild-card search mode defaults didn't work at all for the EF
   and EBF commands, and a search mode default specified in the COMMANDS
   configuration parameter for any other command didn't work if the command
   listed in the COMMANDS parameter without the "I" (include subdirectories)
   suffix, but the user specified the command with the "I" suffix.

   This bug had no effect when the user specified an explicit wild-card
   search mode as part of the command.  (As it happens, the GUI "front
   end" of TLIB for Windows always specifies an explicit search mode
   when calling the TLIB DLL engine, so this bug did not affect TLIB for

   With this fix, if a command is listed in the COMMANDS parameter
   without an "I" suffix, any default search mode that you specify with it
   will work for commands specified both with and without the "I" suffix,
   except that you can still list a command both ways in the COMMANDS
   configuration parameter if (for some strange reason) you want different
   default search modes depending upon whether or not the user specified
   the "I" suffix.   [Steve K.]

3) Fixed: a bug that caused hideously slow operation of the EBF command
   under some circumstances.

4) Fixed: a bug that caused TLIB.EXE and TLIB2.EXE (but not TLIBX.EXE nor
   TLIB for Windows) to give garbled error messages (or a protection
   exception under OS/2) when an "@filelist" reference was made but the
   "filelist" file did not exist.

5) Fixed: a couple of other minor bugs that nobody had noticed.

6) Changed: the names of most .DOC files to .TXT, for the convenience of
   Windows users (who expect .DOC files to be in Microsoft Word format).

7) Fixed: a bug that could cause TLIB to drop the last character in a
   timestamp (e.g., "11:15:06" could become "11:15:0").  [Steve F.]

8) Added: a feature so that the user is asked whether to "Retry?" when
   TLIB can't write a source file that needs to be refreshed (e.g., to
   update keywords, or a reference copy).

5.03m/   9-Jul-96 (beta)

1) Added: compiler-native project file support for Help Magician Pro
   (lightly tested).

2) Added: to TLIB's support for Watcom C/C++ compiler-native project
   files, code to mimic most of the include file searching strategy
   used by the Watcom C/C++ compilers.

   TLIB's include file searching algorithm for Watcom C/C++ projects
   is now just like that of the Watcom compiler, except that:

     - TLIB ignores system header files (files referenced with an
       "#include" directive that uses <angle brackets> to quote the
       header file name.  (This is because it is rarely useful to
       store the system header files under TLIB.)

     - TLIB honors the "-i" include directory list(s) that are stored
       in each target (.tgt) file, except that TLIB ignores any include
       directories that reference Make macros, such as "$(%watcom)"
       or "$[:".

     - TLIB ignores the %{os}_INCLUDE% and %INCLUDE% environment

     - Watcom's description of their include search algorithm specifies
       that the first place looked is the "current" directory, followed
       by the directory containing the "parent" file (that is, the
       including file, the file with the "#include" directive),
       followed by the parent file's parent file's directory, etc..
       TLIB follows this algorithm exactly, but note that the "current"
       directory in this context is assumed by TLIB to be the directory
       that contains the target (.tgt) file.

5.03L/   4-Jul-96 (beta)

1) The following predefined pseudo-environment variables can now be
   referenced within your TLIB.CFG file:

      %TLIBOS%         (may be: DOS, OS2, or WINDOWS)
      %TLIBMODE%       (may be: REAL or PROT)
      %TLIBNAME%       (may be: TLIB, TLIBX, TLIB2, or TLIBDLL)
      %TLIBPROG%       (may be: EXE or DLL)
      %TLIBWORDSIZE%   (may be: 16 or 32)

   Example (try adding these 2 lines to your tlib.cfg file):

      Say %TLIBNAME%.%TLIBPROG% is running
      Say in %TLIBMODE% mode (%TLIBWORDSIZE%-bit).

2) TLIB now has special built-in support for the compiler-native project
   files of some programming languages.

   To access this feature from within TLIB-for-Windows, click the "Mode"
   toggle button.

   To access this feature from the command-line versions of TLIB, reference
   the compiler's "project file" as if it were a TLIB file list, except
   that you should specify "@@" (two "@"s) before the name of the project
   file.  For example, you could store all the source files in a VB 4.0
   program called "myproj" with this command:

      tlib nf @@myproj.vbp

   Currently we support Microsoft Visual Basic 3.0 (*.mak) and 4.0 (*.vbp)
   projects, and Watcom C/C++ 10.5 project (*.wpj) and target files (*.tgt).

   You can also specify a bit-sensitive options value, within square
   brackets at the end of the project file name.  Currently, there are
   two possible bit-values supported: Bit 0 set to '1' means that certain
   kinds of binary files found in the project are subject to version
   control; bit 1 set to '1' means that TLIB should scan for C/C++ #include
   directives so that the list of files returned includes the header files.

   For example, to store the initial version of a Watcom C/C++ project
   into TLIB, scanning for #includes, you could type:

      tlib nf @@myproj.wpj[2]

   This stuff is not yet perfect.  There are some problems with projects
   that contain files in multiple directories, and there's a known
   deficiency in the Watcom C/C++ include file scanning: we don't yet
   utilize the Watcom -i and %xx_INCLUDE% and %INCLUDE% mechanisms for
   finding included files.  That's planned for the next version.

|  Also, TLIBX.EXE (the DOS-extended version) has a smaller stack than
|  do other versions of TLIB, so it is unable to handle deeply-nested
|  source file includes with the [2] option.  One workaround is to use
|  the real-mode TLIB (5.04s or later) to create a file list, and then
|  use the DOS-extended TLIB to use the file list, like this:
|     TLIB spn myproj.lis @@myproj.wpj[2]
|     TLIBX {any-command} @myproj.lis . . .
|  (You can also save some stack space by specifying the Watcom .TGT file
|  instead if the .WPJ file.)

   We plan to add support for other languages, as well.  If your favorite
   language uses project files that are not supported by TLIB, please give
   us a call (better: send us email to support@burtonsys.com), and perhaps
   we can add support for it.

3) Added support for the SST ("substring") operator; see below (in the
   notes for TLIB 5.03a/).

5.03h/   16-Jun-96 (beta)

1) Improved: the wild-card handling in TLIB when TREEDIRS Y is
   configured (to handle a tree of directories rather than a single
   work directory):

    o  With earlier versions of TLIB, only the T and A search modes
       were capable of processing subdirectories, and whether they
       did so or not was determined by whether or not you specified
       a specific directory.

       Neither of these statements is true of TLIB 5.03h/beta.  All
       TLIB commands operate on a just a single directory, regardless
       of the search mode(s), unless you add the the new "I" ("Include
       subdirectories") option letter to the TLIB command, to make it
       process subdirectories (if you've configured TREEDIRS Y).  This
       behavior is now consistent regardless of what search mode(s)
       you use.

    o  TLIB now fully determines the list of files that a command will
       operate upon before it processes the first file.  (Earlier
       versions of TLIB processed the files as the names were determined.)
       This means that if you have a lot of files there may sometimes
       be a noticable pause before the first file is processed,
       expecially if you use the "i" suffix to process subdirectories,
       and especially if you use several wild-card search modes in

    o  You can now combine two or more search mode suffixes to make TLIB
       find all files that would be found by any of the search modes.
       For example, if you have work files for abc.c and def.c, and
       there are TLIB libraries for def.c and ghi.c, you can use "LW"
       as the wild-card search mode to select all three files (the "W"
       makes TLIB find finds abc.c and def.c, the "L" finds makes TLIB
       find def.c and ghi.c, so "LW" makes if find all three).  When you
       specify more than one search mode, TLIB simply handles each
       search mode in turn and merges the resulting lists of files.

       (We mainly added the multiple-search-mode support so that TLIB
       for Windows could have a default search mode that would be
       reasonable regardless of which command was to be used.  This
       was needed because the GUI front end of TLIB for Windows uses
       a paradigm in which the user first selects the files to be
       processed, then selects the operation to be done.)

    o  You can now ask TLIB to tell you what files it would operate
       upon, without actually doing the operation.  Simply preceed
       the command in question with "G1".  Thus, "TLIB G1EBFL *.C" will
       list the files that would be extracted by the "TLIB EBFL *.C"
       command (Extract Browse-mode Freshen with the "L" search mode).

   Note that this change represents a major overhaul of the guts of
   TLIB, and a lot of new code.  Please let us know if you encounter
   any ideosyncracies!

2) Improved: The EBF (extract browse-mode freshen) commands are now
   enormously faster, when TLIB is configured for project-oriented
   operation.  FASTEBFT is now (finally) obsolete!

   In earlier versions of TLIB, the EBF commands were painfully slow
   if you had a lot of files, and we had a separate program called
   FASTEBFT.BAT/FASTEBFT.AWK to speed it up.  That is no longer necessary.

3) Fixed: a bug in the handling of nested IF/ENDIF blocks in the TLIB
   configuration file.  This bug was introduced in a beta version of
   TLIB; you could demonstrate it by making TLIB dump its configuration
   information into a file, like this:
      tlib -ctemp.tmp q
   Then examine the contents of temp.tmp, looking for missing ENDIF's.

4) Changed: the display format when processing multiple files; the echoed
   "fake command line" (that shows the file being processed) is now
   preceeded by a blank line, instead of followed by one.  This makes
   the "L" (List versions) output look nicer.  [Bill H.]

5.03b/   26-Apr-96 (beta)

1) Fixed: a bug in 5.03a/ which broke the %tlibcfg:workdir:...% syntax
   in the tlib.cfg file.  [Joe G.]

2) Improved: a few messages.

5.03a/   4-Apr-96 (beta)

1) Added: a variant of the SET configuration parameter, called LET,
   which evaluates the right hand side of the assignment as an
   expression before assigning it.  The syntax is:

      LET name=<expression>

   where <expression> is a expression consisting of literal integers,
   short literal strings, operators, and parentheses.   Literal strings
   can be surrounded by either 'single' (apostrophe) or "double" quote
   marks, and can be up to 80 characters long (including the quote marks).

   The following unary operators are supported:

     -        integer       negate an integer
     NOT      0 or 1        true if operand is zero
     LC       string        convert a string to lower-case
     UC       string        convert a string to upper-case
     UNQ      string        "unquote" - remove the quotes from a string
     LEN      integer       length of a string (including quotes, if any)
     SIZ      integer       size of a file, or -1 if missing
     NAM      string        "truename" - expand file name into full path

   The following binary operators are supported:

     +        integer       addition of two integers
     -        integer       subtraction
     *        integer       multiplication
     /        integer       division
     MOD      integer       remainder
     AND      0 or 1        "1" if both operands are non-zero
     OR       0 or 1        "1" if either operand is non-zero
     <        0 or 1        numeric "less than" test
     <=       0 or 1        numeric "less than or equal" test
     >        0 or 1        numeric "greater than" test
     >=       0 or 1        numeric "greater than or equal" test
     ==       0 or 1        numeric equality test
     <>       0 or 1        numeric inequality test
     EQI      0 or 1        string equality test (case-insensitive)
     EQ       0 or 1        string equality test (case-sensitive)
     NEI      0 or 1        string inequality test (case-insensitive)
     NE       0 or 1        string inequality test (case-sensitive)
     .        string        string concatination
    SST      string        substring
     SPL      string        "split" - get specified part(s) of a path\name

   Evaluation of binary operators is strictly left-to-right, and all
   binary operators have the same precedence.  All unary operators have
   the same precedence, too, but unary operators have higher precedence
   than binary operators.

   Note that multiplication and division do NOT have higher precedence
   than addition, subtraction, and the compare operators.  Thus, for

     1+2*3       (1+2)*3       9 (not 7)
     1 < 2*3     (1<2)*3       3 (not 1)
     - 1 + 2     (-1)+2        1 (not -3)

   Strings and integers are generally interchangable.  You can, for
   instance, concatinate an integer to a string, and if a string
   contains all numeric characters (and perhaps a leading minus sign)
   then you can use the string in arithmetic expressions as an integer.
   TLIB will convert automatically between strings and integers, as

   To force conversion of a number to a string, concatinate the number
   to a 0-length string, like this:

      let quoted120= '' . (12*10)

   The result of the concatination has the quote-type of the left-hand
   operand (apostrophes, in this example).  To force conversion of a
   string to a number, add zero to it or multiply it by 1, as in this

      let numeric120= 0 + ('12' . '0')

   To include a quote mark in a string, quote it with the other kind
   of quote mark.  For example, the following example prints the same
   line twice.  Note that the expression assigned to MOTTO contains
   both an apostrophe and two double quote marks.  (The UNQ operator
   and the SAY configuration parameter are explained below.)

      let motto=UNQ ("Picard/Riker in '96." . ' "Make it so!"')
      say %motto%
      say Picard/Riker in '96. "Make it so!"

   Most of the operators have obvious functions.  However, a few of
   the operators need some explanation.

   The UNQ operator "unquotes" a string.  The result is still a string,
   but without the quote marks.  Since every literal string includes the
   surrounding quote marks as part of the string, if you want a string
   without the quote marks then you must use the UNQ operator.

   The LEN operator returns the length of a string, including the quote
   marks, if any.  If you want the length without the quote marks,
   then use LEN UNQ (expression).  For example:

      let x=12345
      let y=(len unq '%x%') - 1
      say x=%x%, Log10(x)=%y%.something

  The SST ("substring") operator returns a specified portion of a string.

  The left operand of SST is the input string.  The right operand is a
  string containing a pair of integers, separated by a colon, like "0:1",
  or else a single integer.  The first (or only) number is the subscript
  of the first character to be returned; the characters are numbered from
  the left starting with 0, and also from the right starting with -1.
  The second number (if any) is the desired maximum length of the result.

  Quote marks are not automatically included in the result.  Beware of
  the fact that, using the SST operator, you can easily create strings
  that have a quote mark at only one end of the string.


     "abcdef" SST '1:2'               = ab
     "abcdef" SST '-7:2'              = ab
     "abcdef" SST '0:3'               = "ab
     (UNQ "abcdef") SST '0:2'         = ab
     '' . ("abcdef" SST '1:2')        = 'ab'
     (UNQ "abcdef") SST '1:2'         = bc
     (UNQ "abcdef") SST 1             = bcdef
     (UNQ "abcdef") SST '2:2'         = cd
     (UNQ "abcdef") SST 2             = cdef
     (UNQ "abcdef") SST '2:999'       = cdef
     (UNQ "abcdef") SST -2            = ef
     (UNQ "abcdef") SST '-2:1'        = e

   The NAM ("truename") operator expands a file name into fully-
   qualified path and name.  For example, if your current directory is
   c:\work\hdr\ then:

      NAM "myfile.x"                   = "c:\work\hdr\myfile.x"
      nam "..\myfile.x"                = "c:\work\myfile.x"

   Beware that some network software has bugs that prevent the NAM
   operator from working correctly for files on network drives.

   The SPL (split path\filename) operator splits a DOS or OS/2 directory
   path into parts, at the "\"s, and returns the specified parts.  The
   drive letter or "\\server\volume\" part is part number 0.  The rest
   of the parts are numbered two ways: with negative numbers, from right
   to left; and with positive numbers, from left to right.  Leading and
   trailing slashes are removed, except on part 0.  If a range of parts
   is specified, then the intervening slashes are included.

   The left operand of SPL is a string containing the path to be split.
   The right operand is a string containing a pair of integers, separated
   by a colon, like "0:1".  As a shorthand, if both numbers are the same
   (only one part of the path\filename is desired), you can just specify
   a single integer for the right operand.  E.g., specifying '0' for the
   right operand is the same as specifying '0:0'.


      "d:\aaa\bbb\ccc" SPL '0:0'               = "d:\"
      "d:\aaa\bbb\ccc" SPL '0'                 = "d:\"
      "d:\aaa\bbb\ccc" SPL 0                   = "d:\"
      "d:\aaa\bbb\ccc" SPL "-1:-1"             = "ccc"
      "d:\aaa\bbb\ccc" SPL -1                  = "ccc"
      "d:\aaa\bbb\ccc" SPL 3                   = "ccc"
      'd:\aaa\bbb\ccc' SPL 3                   = 'ccc'
      UNQ ('d:\aaa\bbb\ccc' SPL 3)             = ccc
      (UNQ 'd:\aaa\bbb\ccc') SPL 3             = ccc
      (UC UNQ 'd:\aaa\bbb\ccc') SPL 3          = CCC
      "d:\aaa\bbb\ccc" SPL -3                  = "aaa"
      "\aaa\bbb\ccc" SPL "0"                   = "\"
      "aaa\bbb\ccc" SPL 0                      = ""
      "d:\aaa\bbb\ccc\" SPL 1                  = "aaa"
      "d:\aaa\bbb\ccc\" SPL -2                 = "bbb"
      "d:\aaa\bbb\ccc\" SPL 2                  = "bbb"
      "d:\aaa\bbb\ccc\" SPL '2:1'              = ""
      "d:\aaa\bbb\ccc\" SPL '1:2'              = "aaa\bbb"
      "d:\aaa\bbb\ccc\" SPL '-1:-2'            = ""
      "d:\aaa\bbb\ccc\" SPL '-2:-1'            = "bbb\ccc"
      "\\servr\sys\aaa\bbb\ccc\" SPL '-2:-1'   = "bbb\ccc"
      "d:\aaa\bbb\ccc\" SPL '0:-1'             = "d:\aaa\bbb\ccc"
      "d:\aaa\bbb\ccc\" SPL '0:-2'             = "d:\aaa\bbb"
      "d:\aaa\bbb\ccc\" SPL '0:1'              = "d:\aaa"
      "\\servr\sys\aaa\bbb\ccc\" SPL 0         = "\\servr\sys\"
      "\\servr\sys\aaa\bbb\ccc\" SPL '0:-3'    = "\\servr\sys\aaa"
      "\\servr\sys\aaa\bbb\ccc\" SPL -3        = "aaa"
      "\\servr\sys\aaa\bbb\ccc\" SPL -1        = "ccc"
      "d:\aaa\bbb\ccc\" SPL '2:-1'             = "bbb\ccc"
      "d:\aaa\bbb\ccc\ddd" SPL '2:-1'          = "bbb\ccc\ddd"
      "d:\aaa\bbb\" SPL '2:-1'                 = "bbb"
      "d:\aaa" SPL '2:-1'                      = ""

2) Added: support for user-generated warnings, via three new configuration
   directives in TLIB.CFG:

      SAY <message>
      WARN <message>
      ABORT <message>

   Use the SAY parameter to display a message to the console (in the
   Windows version of TLIB, the message goes in the Status Log).  For

      say Please don't keep modules checked-out/locked for weeks at a time!

   WARN is similar to SAY, except that a TLIB "ERROR: in configuration
   file" message will also be displayed.

   ABORT is just like WARN, except that TLIB will halt after displaying
   the error message, rather than continuing.

   Note that if you make your tlib.cfg SAY a message that begins with
   "Note: ", "Warning: ", or "ERROR: " then command-line versions of TLIB
   will colorize it and/or prevent it from scrolling off the screen
   (according to how the COLORIZE and ERRORPAUS parameters are configured),
   and Windows versions of TLIB will pop up the message in a dialogue
   box for the user (as well as putting it in the status log).

   For example:

      say Note: Please don't keep files locked for weeks at a time!

3) Added: support for load-time conditionals in TLIB.CFG.  The following
   new configuration directives are provided:

      IFF <expression>

      IFF <expression>

   Note that the IFF/ENDIF and IFF/ELSE/ENDIF directives are quite
   different from the IF/ENDIF construct.  IF/ENDIF is used to specify
   configuration parameters which pertain to files that match one or
   more wild-card specs.  An IF parameter's wild-card specification
   is re-tested for each file that TLIB processes.

   In contrast, the IFF/ENDIF and IFF/ELSE/ENDIF directives are processed
   only as TLIB.CFG is being read.  (For command-line versions of TLIB,
   that means they are processed only when TLIB loads; however, TLIB for
   Windows re-reads TLIB.CFG every time you change the current directory.)

   In addition, IFF tests are conditioned upon Boolean expressions,
   rather than upon wild-card specifications.  Boolean expressions
   are expressions of the sort used in a LET assignment, but with the
   added constraint that the result must be numeric.  Zero is taken as
   "false" and non-zero means "true".


      iff '%NECESSARY%'==''
         warn Oh, dear!  Environment variable %%NECESSARY%% is undefined!


      let ONE=5-4
      iff %ONE%==1
         say Hey, it works!
         abort This is impossible!


     REM  This example displays the current directory's path.
     REM  First, get "truename" of current directory:
     Let currentdir=UNQ NAM ".\"
     REM  It may not have a trailing slash, so add one:
     Let lastch= '%currentdir%' SST '-2:1'
     iff ('%lastch%' NE '\') AND ('%lastch%' NE ':')
        Let currentdir = UNQ ('%currentdir%' . '\')
     REM  Display the result (and also workdir)
     Say currentdir=%currentdir%, workdir=%tlibcfg:workdir%

   Useful example:

     REM  Pull in "personal.cfg" from current or parent directory,
     REM  0-3 levels up.  First, find the personal.cfg.  (If the file
     REM  does not exist, then the SIZ operator returns -1 for its.)
     set pname='personal.cfg'
     iff (SIZ %pname%) == -1
        let pname='..\' . %pname%
        iff (SIZ %pname%) == -1
           let pname='..\' . %pname%
           iff (SIZ %pname%) == -1
              let pname='..\' . %pname%
              iff (SIZ %pname%) == -1
                 set pname=''
     iff '' eq %pname%
        say Warning: personal.cfg not found, default config used.
        let psize=siz %pname%
        let fullpname=uc unq nam %pname%
        let pname=unq %pname%
        include %pname%
        say Note: a %psize%-byte %pname% (full path %fullpname%) was loaded.

   Or, for something really obscure:

      Rem  Set %X% to any integer value:
      let x=-46
      Rem  Then test the MOD operator:
      let easyway= %x% mod 3
      let hardway= %x% - (3*(%x% / 3))
      iff %hardway% <> %easyway%
         abort This is impossible!
         say (%x% MOD 3) = %EasyWay%   (the remainder left after %x%/3)

4) Fixed: a bug that was introduced in TLIB 5.02f/2 (beta), which could
   cause false "bad dot command" errors during U (update) commands when
   locking was enabled.  [Rich W.]

5.02g/2  26-Mar-96 (beta)

1) Added: support for the new NT351BUG configuration parameter.

   When an application either closes a file or do a "file commit," the
   operating system is supposed to update the directory information to
   reflect an changes in file size and date.  However, Windows-NT 3.51
   has a bug which causes directory information to be incorrectly
   reported for a varying period of time (typically 1-15 seconds)
   after the file close or file-commit operation.

   We paid Microsoft $150 for the privilage of reporting this bug, and
   their response was that they had disabled file-commits for 16-bit
   applications, as an "optimization," and they do not intend to fix
   it in any NT 3.51 service pack.  Believe it or not!

   (Please, don't anybody tell them that they could optimize NT even
   more, and make it go even faster, if they disabled writes, too.)

   So, we have an experimental workaround now built into TLIB, to
   use an open/lseek/close sequence to look up file lengths, rather
   than the normal (and much faster) findfirst (directory look-up)

   If you need to configure this option, TLIB will tell you so.
   Otherwise, don't, since it adds significant overhead to some
   operations.  (This is in contrast to the NTFS35BUG parameter, which
   adds very little overhead.)

   To work around the bug in Windows-NT 3.51, and also a bug that was
   present in NT 3.5, configure these two parameters:

      NT351BUG Y
      NTFS35BUG Y

   The defaults are NT351BUG N and NTFS35BUG N.

2) This version also has some debug code in it that causes odd-looking
   extra lines to be added to the journal file.


1) Changed: the order in which TLIB opens files during a U (update)
   command, so that it will abort the update if a reference copy of the
   source file needs to be created but we can't open the reference copy
   for writing.

   The most common cause of this is that someone at another network
   workstation is running a program (such as an editor or debugger)
   that is keeping the reference copy open.
   [Rob W.]

2) Added: Better diagnostics for some network errors.


1) Added: support for transparently handling DOS, Unix, and Mac-format
   ASCII text files.  As input to TLIB (for updates), any of the three
   formats are now handled equivalently.  For output (extracts), the
   default is DOS format (CR+LF), but you can control this with the new
   NEWLINE configuration parameter:

      NEWLINE CRLF    The default, DOS format (carriage return + line feed)
      NEWLINE CR      Mac format (carriage returns only)
      NEWLINE LF      Unix format (line feeds only)

   Note: this only affects the operation of TLIB in FILETYPE TEXT mode.
   If your TLIB library is in FILETYPE BINARY format, then the NEWLINE
   configuration parameter is ignored, and no end-of-line translations
   are done.  Also, this only affects the handling of your text files;
   TLIB's library files are still stored in DOS format (with CRLF after
   each line).

   There is one small side-effect to this new feature that may affect
   some users of older versions of TLIB.  TLIB now handles CR/LF,
   LF alone, or CR alone in your text file as all being equivalent.
   Earlier versions of TLIB handled CR/LF or CR alone as being
   equivalent, but LF alone was handled as a plain text character.

   So, if you had a file that contained a spurious line-feed character
   somewhere, you may notice this difference in behavior, because if
   you extract the file (TLIB E) and then immediately update (TLIB U)
   TLIB will report that the file has changed!  What happened is that
   the line containing the lone LF character was seen as a single line
   in the TLIB library and during the extract, but was split into two
   lines during the update.  If you let TLIB store the new "changed"
   file, and then extract it again, you will find that your text file
   now has a CR+LF (or whatever you configured for the NEWLINE parameter)
   in place of the LF that it had there before.

   Caveat: Ctrl-Z is still recognized as an end-of-file character, even
   in Unix-format files.  Ctrl-D is not recognized as special in any
   way.  So, if you have a file that contains a ctrl-Z character and
   you don't want TLIB to truncate the file at that point, you must
   configure FILETYPE BINARY for that file when you create the TLIB
   library for it.
   [several people]

2) Changed: some internals, for compatibility with the new Windows
   version (currently in beta-test).


1) Changed: when -n{filename} on the command line is used with an E
   command to extract into a temporary file, TLIB no longer changes
   the work directory tracking file.

2) Changed: Increased the maximum possible length of the echoed
   pseudo-command line that is shown when multiple files are being
   processed (via wild-cards and/or file lists).  This will prevent
   truncation of the line when work directories and/or library file
   directories are deeply nested.

3) Improved: several error and warning messages.


1) Changed: the behavior of TLIB when "QUERIES N" is configured, to
   suppress a "Create a new branch?" question when a 2nd-level branch
   version is about to be created.
   [Richard B.]

2) Added: the ability to get the path\name of the tlib configuration
   file(s), as if they were environment variables, from within the
   configuration file(s), via the %tlibcfg:...% syntax.  Two forms
   are allowed: %tlibcfg:cfgfile% and %tlibcfg:curfile%.

   For example, to display the path\name of the main configuration
   file whenever TLIB starts, you could could configure:

      numbanner 1
      banner 1,"config file='%TLIBCFG:CFGFILE%'"

   Even if you are using include directives, %TLIBCFG:CFGFILE% is
   the name of the first/main configuration file, not the included
   configuration file.  To get the name of the current configuration
   file, use %TLIBCFG:CURFILE%.  For example, in a "master" tlib.cfg
   intended to be included from other tlib.cfg files, you might
   configure this:

      numbanner 2
      banner 1,"main/first config file='%TLIBCFG:CFGFILE%'"
      set masterfile=%TLIBCFG:curfile%
      banner 2,"master config file='%MASTERFILE%'"

   Note the use of a temporary SET variable to store a copy of
   %tlibcfg:curfile%.  It is needed because by the time that TLIB
   displays the BANNER, it is no longer reading configuration files,
   so there is no "current" configuration file.

3) Added: additional "TREEDIRS Y" diagnostics to detect and report
   situations in which a TLIBWORK.TRK file in the wrong directory
   could otherwise cause TLIB to deduce an incorrect work directory.
   E.g., if both the current directory and a parent directory contain
   tlibwork.trk files, then TLIB will report an error (unless you
   constrain where TLIB looks via the WORKDEPTH parameter, below).

4) Added: a new configuration parameter, WORKDEPTH nn, which can
   be used to specify the minimum subdirectory depth for a work
   directory.  For example:

       WORKDEPTH 0   (the default: work directories can be in or
                      below the root directory)
       WORKDEPTH 1   (work directories must be at least 1 level below
                      the root directory)
       WORKDEPTH 2   (work directories must be at least 2 levels below
                      the root directory)


1) Added: another option suffix for the U (update) command.  You can now
   force creation of a branch version by adding a "B" suffix.

   Obviously, it would make no sense to combine the "B" suffix (create
   branch) with either the "S" suffix (specify new version) or the "M"
   suffix (increment minor trunk version).  So, that means there are
   now four new TLIB commands:

      UB   - Update, forcing creation of a new branch version
      UBK  - Update, creating a new branch, and keep locked/checked-out
      UBF  - If source newer than library, then Update creating a new branch
      UBFK - If source newer, then update to a new branch and keep locked

   However, before you can use the new commands you must add them to
   the "COMMANDS" configuration parameter in TLIB.CFG.  The new version
   of TLIBCONF (5.02e or later) will insert these automatically, but
   if you are already using TLIB then it will be simpler for you to
   just edit your TLIB.CFG file and add ",UB,UBF,UBK,UBFK" or
   ",UB/A,UBF/A,UBK/A,UBFK/A" to the end of the COMMANDS parameter.
   (The "/A"s are overrides for the wild-card search modes, and are
   recommended for the U commands if you use named project levels.)
   [Randy L.]

2) Added: better diagnostics for a PC-NFS 5.01a network ideosyncracy.
   [Steve K.]

3) Changed: TLIBX.EXE (the DOS-extended version of TLIB) is now using
   version 3.2 of the Blinker DOS Extender.

4) Changed: the default for the ONETHREAD configuration parameter is
   now ONETHREAD Y, to work around a severe performance problem in
   Windows NT.

   If you use TLIB2.EXE under OS/2 version 1.3, you'll probably find
   that performance is improved if you configure "ONETHREAD N" in
   TLIB.CFG.  For OS/2 versions 2.0 and later, it doesn't usually seem
   to make much difference which way it is set.

6) Changed: the way that TLIB parses a date/time string, to let you
   optionally use a slash instead of a comma to separate the date
   from the time.  This is useful if you use the ES command with a
   specified date/time in lieu of a version number, and you want to
   pass the date/time to TLIB indirectly, as a parameter to a batch
   file which invokes TLIB.

   The problem is that DOS's obnoxious command.com converts commas
   (and semicolons and equal signs) into spaces, so that (for example)
   a date/time like "25-Dec-94,12:00:00" turns into two parameters,
   "25-Dec-94" and "12:00:00" when you pass it to a .bat file.

   So, if you need to do this, we now let you specify the date/time
   as "25-Dec-94/12:00:00", so that command.com won't mangle it when
   you pass it as a parameter to a .bat file.
   [Steve D.]

7) Added: support for the new "-r" command-line option, to force
   "TOPRELATI Y" for the remainder of the current command-line, only.
   The -r option should be specified before the command you wish it
   to affect.  But if you use it in combination with the -q ("quiet")
   or -d ("debug") option, then specify the -r after the -q or -d.

   You can specify "-r" or "-r1" to force "TOPRELATI Y", when source
   file paths are relative to the main work directory (instead of
   relative to the current directory).

   You can also specify "-r0" to force "TOPRELATI N", if the source
   file paths are relative to the current directory rather than to
   the work directory.

   (Like the TOPRELATI configuration parameter, the "-r" option does
   not affect the operation of TLIB unless the current directory is
   unequal to the work directory.)

   Note: The -r option is intended only for use with individual file
   names, not with wild-card specifications.

Q: Do you run TLIB from another program under Windows or OS/2?  Ask us
   about beta-testing our new TLIB API, which is a version of TLIB that
   is incorporated into a Windows or OS/2 DLL, with a simple API defined
   so that your program can efficiently call it to do TLIB commands!

5.02d  30-Jan-95

1) Fixed: a bug which could prevent you from halting output by pressing
   something other than a space at a "...press [spacebar] to continue..."
   prompt, during display of a large delta (after you entered "?" to
   the "Comment line?" prompt), or during the display of a long list of
   version numbers.

2) Added: the "SMOOTH" option to CMPR 5.02, so that it can generate
   more concise deltas for large (multi-pass) files in the ONEPASS,

   The SMOOTH option tells CMPR to "resynchronize" between passes, so
   that the output does not show a bogus edit for lines that have
   moved across the DIFFLINES-long line buffer boundary.  This
   effectively makes DIFFLINES vary from pass to pass, according to
   the contents of the files, for files that are longer than the
   configured DIFFLINES number of lines.  The default DIFFLINES size
   is 3000, so the SMOOTH option does not affect operation with files
   that are smaller than that.

   If you are using CMPR to generate TLIB-compatible deltas ("NORMAL"
   mode), then you should not specify the SMOOTH option, since TLIB
   uses only fixed-length pass sizes, and cannot handle the variable-
   length pass sizes which result from the SMOOTH option.

   Run CMPR with no parameters for help.

3) Fixed: a bug which could cause TLIB to hang if your file contained
   a keyword flag followed by a format string that lacked a terminating
   delimiter character, and we improved some related error diagnostics.
   [Greg H.]

5.02c  23-Jan-95

1) Added: support for two new variants of the M (migrate) command, to
   allow the user to override TLIB's determination of the most recent
   common ancestor of the two versions to be merged.

   The MSS (and MFSS) commands take four parameters:

      TLIB MSS filename.ext toVer baseVer fromVer

   For example, suppose that version 7 of myfile.prg is the latest
   "standard" version, and version 7.(5)3 is a customized variant
   of it.  Now, suppose that you fix a bug in version 7.(5)3, and
   store it as version 7.(5)4, but the bug was also present in the
   standard version.

   Of course, the problem would have been simpler if you'd put the
   bug fix onto the standard version first, instead of the customized
   version.  Then you could have simply migrated all improvements to
   date into from the standard version into the customized version.
   Unfortunately, sometimes you may not have the luxury of making
   that choice; if the customer has a "sev 1" problem, you may have
   no choice but to first implement the fix in his customized version.

   In that case you cannot use the old M or MS command to merge the
   bug fix into version 7, because TLIB has no way of knowing that only
   the last revision to this customized variant is applicable to the
   standard version.  If you were to do "TLIB MS myfile.prg * 7.(5)4"
   then TLIB would add all the changes between versions 7 and 7.(5)4 to
   the latest trunk version, with the result that the customizations
   would also become part of the standard version (which is not what
   you want).

   Instead, you should use the MSS command, to tell TLIB that you
   want only the changes between versions 7.(5)4 and 7.(5)5 added
   to the standard version:

      TLIB MSS myfile.prg * 7.(5)3 7.(5)4

   The MFSS command is just like the MSS command, except that TLIB
   will silently skip files for which no action was needed.  That
   doesn't do any good for the example above, but is can be useful
   when the changes must be made to many files.

   Suppose, for example, that lastweek.snp is a snapshot taken (with
   the S command) of your customized project level before you made
   an elaborate set of changes to many of the source files in the
   customized level, to fix a complex bug.  Also, assume that the
   standard level's project level tracking file is f:\std\tlibwork.trk
   and the customized level's project level tracking file is

   You need to migrate that bug fix into the standard project level.
   To do so, you would do the following command (while working at
   the standard level):

      TLIB MFSS *.* @f:\std\tlibwork.trk @lastweek.snp @f:\cus\tlibwork.trk

   Or, if the standard version is always the latest trunk versions,
   this does the same thing:

      TLIB MFSS *.* * @lastweek.snp @f:\cus\tlibwork.trk

   That tells TLIB to migrate into the current (standard) level all
   changes made to the customization level since the lastweek.snp
   snapshot was taken.

   As with all of the Migrate commands, the result is a batch script,
   MIGRATE2.BAT, which you must run to finish the migration.  After
   you have done so, you will be left with a set of checked-out files
   which have had the needed changes made to them.  If there were any
   "conflicts" which TLIB's DIFF3 utility was unable to resolve (i.e.,
   if your fix changed lines that were specific to the customized
   version), then you'll have to resolve the conflicts manually.  They
   will be flagged in the source files with distinctive text lines,
   "###Change collision detected" (or whatever you have configured for
   the D3COLLIDE configuration parameter), so that you can easily find
   them with TLIBSCAN or your favorite GREP utility.

   A comparison between the M, MS, and MSS commands may be instructive.
   They all do the same thing, except that with the MSS command you
   must specify all three version numbers for the merge, but the MS
   and M commands determine one or two of the versions for you

   With the MSS command, you specify a total of three versions, and
   what is to be merged into the first of them is specified by a
   pair of versions (baseVer and fromVer):

      TLIB MSS filename.ext toVer baseVer fromVer

   But with the MS command, you do not specifiy the base version; it is
   determined automatically by TLIB as the most recent common ancestor
   of the other two versions:

      TLIB MS filename.ext toVer fromVer

   The M command is similar to the MS command except that the version
   into which the changes are to be added is not specified, either.
   It is taken as being whatever version is current at the current
   project level:

      TLIB MSS filename.ext fromVer

2) Fixed: a bug related to the RELAXVERS parameter.  If RELAXVERS Y
   is configured, then you are allowed to skip version numbers.  So
   you could, for example, have a TLIB library containing a sequence
   of versions like 1, 2, 4, 5, 5:1, 5:2, 7, etc. (in this example,
   versions 3 and 6 have been skipped).

   However, if you tried to extract version 5:* or 2:* (the most
   recent minor revision of version 5 or version 2, respectively),
   then previous releases of TLIB would fail with the following error
   message, even when RELAXVERS Y was configured:

      ERROR: No such version...

   This is corrected in TLIB 5.02c, if RELAXVERS Y is configured.
   [Ron S.]

3) Fixed: the broken "REPLROBR Q" configuration parameter.
   [Matt H.]

4) Fixed: READONLYB Y was broken in the 1-user versions of TLIB 5.02b.
   One symptom was the error:

      ERROR: Could not replace myfile.ext because it is read-only.
   [Greg A.]

5) Refined: the ERRORPAUS parameter.  It can now cause a pause just
   before TLIB exits, to give you time to read error messages, for
   users who run TLIB from a batch file (since the next command in the
   batch file could otherwise cause the error message to scroll off
   the screen and be missed).

   Also, if you configure QUERIES N but leave ERRORPAUS unconfigured,
   the default is now ERRORPAUS 0 (pauses disabled).  This will avoid
   breaking some front-end programs and editor macros which configure
   TLIB with QUERIES N because they depend upon TLIB never prompting
   for user input.

6) Added: the EXITPAUSE parameter.  If you want TLIB to always pause
   before exiting, you can configure:


   The default is:


7) Added: "colorized" error and warning messages, and the COLORIZE
   configuration parameter.  By default, if ANSI.SYS support is
   available, TLIB will now attempt to highlight error and warning
   messages through the use of ANSI escape seqences to selecting the
   colors.  To disable this, you can configure:


   To force TLIB to colorize error and warning messages, without
   testing whether ANSI.SYS support is available, you can configure:


   The default is to check for ANSI.SYS support, and colorize only
   if ANSI.SYS is loaded; this can be explicitly configured as:

      COLORIZE Maybe

   Note #1: TLIB also suppresses the ANSI escape sequences when in
   SLICKEPSI mode; that is, when running in the "concurrent process
   buffer" of the SlickEdit and Epsilon editors.  So, an alternate
   way to prevent colorization is to configure SLICKEPSI Y.  This will
   avoid warnings with older versions of TLIB that don't support the
   new COLORIZE configuration parameter.  However, this also affects
   some other aspects of console I/O, since the SlickEdit and Epsilon
   concurrent process buffers cannot support some operations (such
   as single-character-at-a-time keyboard input).

   Note #2: if you want a colored DOS prompt, but TLIB's ANSI escape
   sequences interfere with it, there are two things you can do to
   solve the problem:

   a) You can simply disable TLIB's ANSI escape sequences, by
      configuring COLORIZE N.  Unfortunately, this will prevent
      colorization of TLIB's error and warning messages.

   b) To have colorized TLIB error and warning messages, and also
      retain your colorful DOS prompt, you can set your DOS prompt
      environment variable to select the prompt color of your choice,
      use TLIB's BANNER configuration parameter to reset the screen
      color to white when TLIB starts up.

      Thus, your PROMPT setting in AUTOEXEC.BAT (and in CONFIG.SYS,
      under OS/2) might be, for example:

         Rem - bright, light blue prompt
         PROMPT=$e[1;36m$d $t $p]

      To your TLIB.CFG, add:

         Rem - reset screen color to normal (white) at TLIB start-up:
         numbanner 1
         banner 1,""
         Rem - (where "" is the escape character, ASCII 27)

     Or, (with TLIB 5.04f and later) you can use TLIB's COLOROFF parameter
     to reset your screen color to whatever you wish; the COLOROFF
     string will be output immediately following every colorized "ERROR:",
     "Warning:" or "Note:".  For example:


     The default is:


5.02b    9-Jan-95

1) Added: a warning for when the TRACK Y is configured, and "a=y" is
   specified for the current project level, and the NF command skips a
   file because the library already exists, and yet the file is not
   already listed in the current project level.  (This situation may
   result from a new library creation being aborted before TLIB gets a
   chance to update the project level tracking file.)
   [Tina L.]

2) Added: the ability to pause if an error or warning message has been
   displayed, and the ERRORPAUS configuration parameter, which controls
   this feature.  Pausing after errors or warnings is intended to
   prevent important messages from being overlooked because they
   scrolled off the screen before being read.

   To control this feature, configure ERRORPAUS to one of these four

      ERRORPAUS 0   (disable pauses except in interactive mode;
                    this is the default if QUERIES N is configured)
      ERRORPAUS 1   (pause if "ERROR" was displayed, but not for
|                   "Warning" or "Note"; was default until TLIB 5.03x)
      ERRORPAUS 2   (pause if "ERROR" or "Warning" was displayed,
|                   but not for "Note"; this is the usual default)
      ERRORPAUS 3   (pause for "ERROR", "Warning" or "Note")
      ERRORPAUS 4   (pause after every screenfull of text, as in
                    interactive mode)

   If you want to start a long job and return later to see whether
   there were any errors, then you may prefer to configure ERRORPAUS 0
   and simply redirect output into a file, for later inspection.  TLIB
   will detect the fact that output has been redirected, and error and
   warning messages will be written to both "stderr" (usually the
   console) and "stdout" (the file to which you have redirected output).
   If, when you return, you see error messages on the screen, you can
   inspect the file with your redirected TLIB output.

   Note that the ERRORPAUS parameter only affects operation in "non-
   interactive mode" (i.e., when all TLIB commands and parameters were
   specified on the command line).

   If you don't specify the TLIB commands and parameters on the command
   line, then TLIB will operate in "interactive mode," and prompt you for
   them.  In this mode, TLIB always pauses after each screen of text,
   even if there are no errors, and regardless of the ERRORPAUS setting.

   The default is "ERRORPAUS 1", which pauses only for "ERROR" messages.

5.02a    6-Jan-95

1) Added: the MAKEDIRS configuration parameter, through which you can
   tell TLIB to automatically create missing directories, as necessary,
   in most circumstances.

   To tell TLIB to create directories, configure:

      MAKEDIRS Maybe

   A few networks and operating systems may have bugs which cause
   incorrect error codes to be returned under various circumstances,
   such as when a file cannot be created because the directory is
   missing.  If "MAKEDIRS M" does not work for you, and you suspect
   that this might be the reason, then you can try configuring:


   Configuring MAKEDIRS Y causes TLIB to assume that a missing directory
   could be the true cause for a file-create to fail, even if an error
   code was returned indicating some other cause.  Do not configure
   MAKEDIRS Y unless you suspect that your network or operating system
   has this bug.

   The default behavior for TLIB is not to create missing directories,
   but to give an error message, instead.  This is similar to what happens
   if you configure:


   The only difference between configuring MAKEDIRS N and leaving the
   MAKEDIRS parameter unconfigured is that if MAKEDIRS is not configured
   then TLIB can also display a "hint" when a file create fails due to
   a missing directory.  The hint suggests that configuring MAKEDIRS M
   might solve the problem.
   [Woody D., Mark V.]

2) TLIBX, the DOS-extended TLIB, is (finally) out of beta!

5.01p/9 21-Dec-94 (beta)

1) Fixed: a bug which caused TLIB to get stuck in "interactive" mode
   (i.e., with "...press [spacebar] to continue..." prompts) if, during
   an update ("U" or "N") command with wild-cards,  the user viewed
   a delta by typing "?" at the "Comment line?" prompt, and the delta
   was more than one screen in length. Thus, a "tlib u *.c" command
   would scroll continuously for files with no changes, until the first
   "...press [spacebar] to continue..." prompt during display of a
   delta, and from then on TLIB would pause after every screenful.

5.01p/8 19-Dec-94 (beta)

1) Fixed: a problem with "-d" debug output, which could cause a stack
   overflow due to runaway recursion.  Also, reduced stack usage a bit
   in some circumstances, and increased the available stack slightly.

2) Fixed: a problem with interactive mode (with "press [spacebar]" prompts
   every sheight lines) in the network versions of TLIB.  This bug could
   cause the L command to emit a bogus "bad dot command" error if you
   pressed something other than the spacebar.
   [Tina L.]

5.01p/7 15-Dec-94 (beta)

1) Fixed: a confusing error message.

   The situation is that READONLYB Y was configured, so "browse mode"
   files (files that are not checked-out/locked) should be read-only.
   Suppose that someone else has a file checked-out/locked, and you
   attempt a browse-mode extract of the file, but for some reason your
   existing copy of the file was not read-only (perhaps you did an
   "attrib -r").

   The misleading error message which TLIB used to give was:

      ERROR: Browse mode extract can't be used to replace a
      checked-out file.

   The error message has been corrected to be:

      ERROR: Browse mode extract can't be used to replace a
      read/write file.
   [David Br.]

5.01p/6 9-Dec-94 (beta)

1) Updated: the DOS extender version used in TLIBX (the DOS-extended
   TLIB).  This fixes the problem with VCPI & XMS support.
   [Adam V., Bob W.]

5.01p/5 8-Dec-94 (beta)

1) Better diagnostics for the Windows-NT 3.5 problem which
   configuring "NTFS35BUG Y" works around.

5.01p/4 19-Nov-94 (beta)

1) Added: You can now configure "PROJLEV EQUALS" as the equivalent
   of "PROJLEV =".

   Why would you want to?  Because you might want to configure
   "PROJLEV %X%" and use a DOS environment variable to set X, but
   DOS will not allow you to set an environment variable to "=".
   You can put "set X==" in your TLIB autoset file, but you cannot
   set a regular DOS environment variable that way.  So, we now
   allow you to configure "PROJLEV EQUALS", instead.  [Erik R.]

2) Added: a configuration option, NTFS35BUG, to tell TLIB to work
   around a bug in Windows-NT 3.5's NTFS file system.  If you are
   running Windows NT with an NTFS file system, either on your
   workstation PC or your network file server, you should configure:

      NTFS35BUG Y

   This tells TLIB to do an explicit file-commit after appending
   additional data to a file, such as a TLIB library.  If this is
   not done, then directory look-ups (find-first) sometimes report
   the wrong file sizes for recently-closed files.

   Note: do not configure both "NTFS35BUG Y" and "USEDUPHAN Y".
   [Tim M., Larry F., Dean S., Mike L., Nina B., Brent H.]

3) Added: minor improvements to TLIBCONF.

5.01p/3 27-Oct-94 (beta)

1) Improved: flexibility of allowed responses when asking whether to add
   a module to a project level.  You can now also press Enter (or Esc)
   to skip the file entirely.

2) Fixed: another TLIBCONF bug that could cause "Out of memory" errors.
   This is now TLIBCONF 5.01n/3.
   [Steve H., Michelle W.]

3) Clarified: a misleading warning message (the "was changed" warning
   that can be displayed by the UD command).
   [Diana C. & Gary J.]

4) Added: The SHOWLNAME ("SHOW Library NAME") configuration parameter.
   For more concise messages, you can now configure:


   This inhibits display of library & lock file names in most common
   TLIB messages.  The default is still SHOWLNAME Y.
   (See also the QUIET Y configuration parameter.)
   [Diana C. & Gary J.]

5) Fixed: Changes in the status of files as the result of A, AX, and
   AD commands were not always reflected in the set of files found by
   subsequent commands that utilized the "T" and "A" search modes
   (which search project levels), until you exited TLIB and then
   restarted it.

   For example, if you did an AX command to eXclude a file from
   the current project level, and then did an LT command to list
   the versions of files in the current project level, the excluded
   file could be (incorrectly) found as one of the files in the
   project level.  For example, the following should not list the
   versions of myfile.c, but it could do so in previous versions
   of TLIB:
      tlib ax myfile.c al myfil*.c
   [Diana C. & Gary J.]

5.01p/ 3-Oct-94 (beta)

1) Improved: TLIB's configuration process for the LEVEL parameter, so
   that you can override it with a later LEVEL for the same n=name.
   This was done for a customer who needed a generic multi-level
   TLIB configuration, which would be configured properly regardless
   of whether the current directory was a "standard" directory or
   a "customization" directory.

   This customer has a half-dozen or so different products, each of
   which gets slightly customized for each of perhaps as many as 50
   or 60 customers.  A particular developer may work on several
   products, and on both standard and customized variants of each.

   Warning: the following description of how we set up TLIB for this
   customer assumes an intimate familiarity with TLIB's named project
   level mechanisms.  If you're new to TLIB, you'll probably find it

   He has a work directory for each variant of each product, in a
   tree like this:

      c:\work\product1\std\     "standard" directory for product 1
      c:\work\product1\cust1\   1st customized directory for  "  "
      c:\work\product1\cust2\   2nd customized directory for  "  "
      c:\work\product2\std\     "standard" directory for product 2
      c:\work\product2\cust1\   1st customized directory for  "  "
      c:\work\product2\cust2\   2nd customized directory for  "  "

   The goal was to configure TLIB so that the current project level,
   library path, etc. would all be deduced by TLIB automatically from
   the current work directory, all with a single TLIB.CFG file.  Here's
   an excerpt from the TLIB.CFG file:

      !   Get the name of the current directory, and of the directory
      ! above it.  The current directory is the customer name, and the
      ! directory above it is the product name:
      set CUST=%tlibcfg:workdir:-1%
      set PROD=%tlibcfg:workdir:-2%
      !   There must be an "ordinal.inc" file in each project level
      ! reference directory, which includes a single line like this one:
      !       set ORD=20
      !   That will set the branch number for customized versions of each
      ! module stored at that level.  In effect, the ordinal is a customer
      ! number.  We recommend that the ordinals NOT be adjacent integers.
      ! Instead, space them by 5 or 10 (e.g., use 5, 10, 15, 20, etc.)
      !   In the "standard" (%PROD%_std) levels, the ordinal should be:
      !       set ORD=1
      include \\acme\sys\levls\%PROD%\%CUST%\ordinal.inc
      !   There is just one set of library files for all the customized
      ! (and std) variants of each product, of course:
      path \\acme\sys\libs\%PROD%\
      !   The current project level is determined by the current directory:
      projlev %PROD%_%CUST%
      !   The LEVEL line is very long.  (In case it got truncated on your
      ! screen or print-out, it ends in "b=1 c=%!ORD% a=y")
      level n=%PROD%_%CUST% d=\\acme\sys\levls\%PROD%\%CUST%\ i=%PROD%_std b=1 c=%!ORD% a=y
      !   Here's the tricky part.  When the current directory is for one of
      ! the standard levels (i.e., %CUST%==std), the following LEVEL parameter
      ! replaces the previous level, and thus it avoids the circularity of
      ! "level n=xyz_std i=xyz_std ...", but if the current directory is any
      ! other level, the following LEVEL parameter just defines the standard
      ! level from which the current level inherits.
      level n=%PROD%_std d=\\acme\sys\levls\%PROD%\std\ b=0 c=1 a=y
   [Jeff M.]

2) Added: the "-s" option to WHEREIS v1.7, plus useful errorlevels.  If it
   finds one or more files, it returns errorlevel 0.  If it finds no files,
   it returns errorlevel 1.

   Run WHEREIS with no parameters for help.

5.01n  29-Sep-94

1) Fixed: If, when you run TLIBCONF, you select "project-oriented"
   or ISO 9001-style mode, TLIBCONF 5.01n/2 will configure the APX
   command as "APX/L" (default search mode "L") rather than "APX/T".
   The "T" search mode is not useful for the APX command, since it
   would not find excluded files.

5.01n/2 17-Aug-94 (beta)

1) Fixed: a bug which showed up if your work directory was a project level
   reference directory.  When updating a module which was not listed in
   the current project level, but was listed in a parent level, the wrong
   project level tracking file was being updated.  The parent project
   level tracking file was updated instead of the current one, even if
   s=New was configured for the current project level.  This has been
   [Gary K.]

2) Fixed: TLIBX 5.01n/ (the DOS-extended TLIB 5.01n/) generated a stack
   overflow error (or even re-booted the computer, in some environments).
   [Bob W., et al]

   However, there is still a problem in TLIBX.EXE, which (very rarely)
   causes the computer to re-boot if used with a VCPI or XMS memory
   manager.  However, if it is used with a DPMI memory manager (such
   as Windows or QEMM) then the problem does not occur.  We've traced
   the problem to a vendor library that we're using, and they've managed
   to reproduce it, and we expect that they will correct it soon.  Until
   they do, however, we're still calling TLIBX a "beta" version.

   Note that this problem will NOT affect you if you are using a DPMI
   memory manager, such as Windows or QEMM.

3) Improved: TLIBCONF 5.01n, with improved messages and better tlib.cfg
   output when ISO-9001 style project levels are picked.

4) Changed: the banner for the OS/2 & NT protected mode TLIBs, to show
   the version number with a "/P" to distinguish them from the DOS TLIBs.

5.01n/ 28-Jul-94 (beta)

1) Improved: TLIB's "|more" functionality, in which output pauses after
   every screen-full of text, when in interactive mode (i.e., when the
   user has been prompted for input).

   As before, if all the needed parameters are specified on the command
   line, then this feature is disabled, so that you can use TLIB as a
   strictly command line-driven program, such as in batch files, without
   being prompted to "press [spacebar] to continue."

   However, now TLIB has better handling of situations in which, for
   example, a long menu-style prompt could cause an error message from
   the previous command to scroll off the screen before the user had time
   to read it.
   [Gary J. & Diana C.]

2) Added: the ability to specify the command arguments along with the
   command, when you are prompted by TLIB for a command.  So, for instance,
   you could enter "L myprog.c" to list the versions of myprog.c, instead
   of just entering "L" and then responding to the "List versions of what
   source file?" prompt.
   [Gary J., Diana C.]

5.01m  06-Jul-94

1) Added: a feature which allows you to use pieces of your work directory
   path at other places in your TLIB configuration file, in other
   configuration parameters.  (Note: your work directory path is usually
   set automatically to be your current directory at the time you start
   TLIB, though if TREEDIRS Y and/or WORKDIR is configured, there are
   exceptions, as explained elsewhere in this document and the TLIB User

   Thus, for example, if you have a large number of projects, you can
   configure TLIB with a "generic" project level that is named the same
   as whatever your current work directory is.

   The syntax is an extension of the existing %TLIBCFG:WORKDIR% construct,
   which lets you specify one or two numbers to select which parts of the
   path you want.

   Suppose that %TLIBCFG:WORKDIR% is "C:\WORK\ABOMB\".  This path is
   considered to have three parts: part #0 is the drive/root ("C:\"),
   part #1 is the top subdirectory ("WORK"), and part #2 is the lower
   subdirectory ("ABOMB").

   The syntax to get specific parts of the path is: %TLIBCFG:WORKDIR:nn:mm%,
   where nn is the number of the left-most part, and mm is the number of
   the right-most part.  (Also, if mm=nn, that is if you only want one
   part of the path, you can leave out the ":mm".)

   For example, if %TLIBCFG:WORKDIR% is "C:\WORK\ABOMB\" then:

      %TLIBCFG:WORKDIR:0:0% = "C:\"
      %TLIBCFG:WORKDIR:0%   = "C:\"
      %TLIBCFG:WORKDIR:1%   = "WORK"
      %TLIBCFG:WORKDIR:0:1% = "C:\WORK"

   You can also count the parts from the right-most, by specifying
   negative numbers.  The right-most (lowest level) directory is part -1.
   This is useful when you want the current directory name, but don't
   know how "deep" it is.

   So for the example above, part 2 can also be specified as part -1,
   and part 1 as part -2:

      %TLIBCFG:WORKDIR:-2%   = "WORK"
      %TLIBCFG:WORKDIR:-1%   = "ABOMB"

   To experiment with this feature, use the BANNER or PROMPT to display
   the results, like this:

      set xxx=%tlibcfg:workdir:2:-1%
      set yyy=%tlibcfg:workdir:-1%
      numbanner 1
      banner 1,"xxx=`%xxx%'  yyy=`%yyy%'"

   Then run TLIB to see what values xxx and yyy get.

   WARNING: be sure that if you configure either TREEDIRS Y or WORKDIR,
   you do so BEFORE any reference to %tlibcfg:workdir%, to ensure that
   TLIB deduces the correct work directory!

   Here's an example of how you might use this feature to set up a generic
   project level, whose name was deduced from the name of your current
   work directory:

      set dir=%tlibcfg:workdir:-1%
      level n=%dir% d=\\server\sys\levels\%dir% a=Y
      projlev %dir%
      ! createtf y  <-- this is optional

   Here's a similar, but fancier configuration, which defines a generic
   ISO-9001-style 3-level "promote" structure:

      set dir=%tlibcfg:workdir:-1%
      level n=%dir%_DEV d=x:\levs\%dir%\dev\ a=y f=y p=%dir%_TST i=%dir%_REL
      level n=%dir%_TST d=x:\levs\%dir%\tst\ w=n f=y p=%dir%_REL
      level n=%dir%_REL d=x:\levs\%dir%\tst\ w=n
      ! Developers set projlev like this:
      projlev %dir%_DEV
      ! Testers should configure:
      ! projlev %dir%_TST

   [Diana C., Gary J., David M.]

5.01L  17-Jun-94

1) Fixed: "ERROR: Out of memory." from TLIBCONF.  The fixed TLIBCONF
   displays version number 5.01L/2.  The bug was present in TLIBCONF
   5.01L, which shipped 6/14 through 6/16/94.


2) Added: a new option for the LEVEL parameter.  You can now configure
   "w=N" to tell TLIB that this is a "non-writable" project level, at
   which the U (update) and E (check-out for modification) commands are

   This is provided for the convenience of users who must comply with
   ISO 9001, which mandates a 3-level promote structure, and prohibits
   direct updates to the upper levels.  Under the ISO 9001 scheme, all
   work must be done at the lowest project level, and then promoted to
   the upper levels with the AP command.

   The default, when w= is not specified, is w=Y (the level is writable).


      TLIB.CFG contains:

        LEVEL n=REL d=H:\TLIBLEVS\REL\ w=N
        LEVEL n=DEV d=H:\TLIBLEVS\DEV\ p=TEST i=REL f=Y a=Y

      In this example, DEV (the development level) is the "lowest" level
      (with the highest version numbers), which is where the development
      work is done.  All Updates must be done at the DEV level.  It
      promotes to TEST and inherits from REL.

      The "upper" levels (REL and TEST) are non-writable, because "w=N"
      had been configured.

      The "f=Y" used in this example means that the levels are "fully-
      populated" (not sparse).  See the manual for details about why you
      might prefer sparse vs. fully-populated levels.  Look in the index
      under "sparse."

3) Added: TLIBCONF 5.01L can now configure TLIB for ISO-9001 behavior,
   with a three-project-level promote structure, and with w=N configured
   for the test and release levels.

4) Fixed: When a U (update) command is done but there are no changes, the
   source file is normally changed from checked-out-for-modification/locked
   to browse-mode (and set to read-only if READONLYB Y is configured).
   This means that if there is a %l (lock status) keyword in the source
   file, the source file needs to be refreshed so that the %l keyword
   information reflects the changed lock status (unless you've configured
   FIXKEYWD N).  However, TLIB was not doing this.  Now it does.
   [Joe G.]

5) Changed: TLIB now opens the journal file in deny-write mode, rather
   than deny-all (exclusive) mode.  This should allow SCOPY to copy the
   journal file even as TLIB is appending to it, and vice-versa.

5.01k  26-May-94

1) Fixed: a bug which caused incomplete lock status information to be
   echoed to "standard error" if output was redirected.  You can now get
   a fairly concise lock status report from TLIB by redirecting output to
   NUL, as in this example:
       tlib t *.c,*.h >nul

2) Fixed: a bug in the LOGPREFIX configuration parameter, which caused
   it to pad with garbage characters instead of blanks if the configured
   column number was greater than 1.

   This example will only work correctly in TLIB 5.01k and later:
      logprefix 2,"{"

   A workaround was to configure with leading blanks, and specify column 1.
   This example is equivalent to the previous one, but it works correctly
   in all versions of TLIB:
      logprefix 1," {"
   [Jason F.]

3) Fixed: a bug in the network version of TLIBX 5.01j/1 (the beta DOS-
   extended version of TLIB) which caused Novell Netware user ID lookup
   to fail ("ID *NOVELL*").  We also probably fixed Artisoft Lantastic
   user ID lookup ("ID *LANTASTIC*"), but that has not yet been tested.

   Also, the beta DOS-extended version of TLIB now displays the amount
   of available RAM.

   The fixed version is TLIBX 5.01k/1.
   [Tom C.]

4) Improved: error reporting, for a strange network problem reported by
   [Alain H.]

5) Fixed: a bug which caused "ERR: svLbSt" or "ERR: p2veF" when extracting
   a specified version by date/time from a multi-pass library file.
   [David R.]

5.01j  25-Apr-94

1) Fixed: A couple of subtle bugs caught by PC-LINT.  Obviously, we'd not
   been using PC-LINT frequently enough.

   a) "AATTR S" and "AATTR R" configuration settings didn't work in 5.01i.

   b) a possible bug in the c= option of the LEVEL configuration parameter.

   PC-LINT is from Gimpel Software, Tel: 215-584-4261.
   Address: 3207 Hogarth Lane, Collegeville, PA 19426.

   PC-LINT is a superb product, a genuine must-have for every serious C
   programmer.  Plus, they now have a C++ version available (which we've
   not tried).

5.01i  19-Apr-94

1) Added: code to work around a Netware 3.12 bug which prevented the
   CREATETF Y configuration setting from working; instead, it displayed
   "ERROR: Cannot open path\tlibwork.trk, error -30299,22,-30299".
   [John W.]

2) Fixed: a bug which caused TLIB to exit after displaying the message,
   "ERROR: truncation failed...".  This problem was discovered by someone
   running a beta-level Novell Netware requester with Windows-NT, under
   which the standard file-truncation function, DOSNEWSIZE(), apparently
   doesn't work.

   This would not have been a serious problem, however, were it not for
   the TLIB bug which caused TLIB to exit when this happened.  This bug
   has been corrected in TLIB 5.01i.

   Before deleting lock files, TLIB truncates them to 0-length.  This is
   in case the user doesn't have file-delete permissions for the network
   directory containing the lock files.  So, if you do have delete
   permission, it really doesn't matter if the file-truncate function
   [Brian D.]

3) We've built a beta-test version of a DOS-extended TLIB, called
   TLIBX.EXE, which is available to authorized TLIB beta testers for
   download from our BBS, in the file TLIB501X.ZIP.  (Call us if you
   want to be a beta tester.)

   TLIBX should work well in an environment in which there is at least
   one megabyte of extended memory, and a DPMI, VCPI or XMS host (such
   as under Windows, or with QEMM or 386MAX, or under plain DOS if
   HIMEM.SYS is loaded).

   Because it is a protected-mode program, TLIBX.EXE is better than
   TLIB.EXE for handling very large files, without the possibility of
   running out of memory.

   Currently, TLIBX.EXE may be as much as 15-20% slower than TLIB.EXE
   for some operations, except that with TLIBX.EXE you may be able to
   avoid the use of MULTIPASS mode for large files (which slows TLIB.EXE).
   We hope to resolve the performance problem soon, which will make
   TLIBX.EXE more suitable for use as a general replacement for TLIB.EXE,
   for people who need to manage very large files.

4) Added: Another new configuration parameter, FNAMECASE <U/L/A>, to
   control the "case" (upper-case vs. lower-case) of file names.  The 3
   choices are:

      FNAMECASE Upper    - Force all file names to upper-case
      FNAMECASE Lower    - Force all file names to lower-case
      FNAMECASE Auto     - Behavior depends upon operating system

   This affects the case of file names recorded in the journal file, and
   the "%n" keyword, as well as the actual names used when creating files.

   The default is FNAMECASE A.

   If you have a case-sensitive network server (e.g., a Unix machine),
   you may want to configure FNAMECASE U.
   [Bob W.]

5) Fixed: A bug in the network version (only) of TLIB, which prevented
   sharing error retries under some circumstances when doing an N or U
   command.  Instead, TLIB would just give an immediate "ERROR:" message,
   such as:

      ERROR: Cannot open "filename", error = 32,13,32.
      ERROR: Cannot open "filename", error = 5,13,5.

   The file that the open failed upon could be almost any file that TLIB
   uses, including library files, lock files, reference copies of source
   files, tracking files, and the journal file.  This bug was introduced
   with TLIB 5.01a, 9-Nov-93.
   [David A.]

6) Changed: some error handling logic, so that the N and U commands will
   abort without storing a new version if an error occurs while TLIB is
   trying to open a tracking file.  Also, improved some error messages.
   [David A.]

7) Added: A new configuration parameter, USEUMBS <Y/N>, which controls
   whether or not TLIB will attempt to "link" and use "UMBs" (Upper
   Memory Blocks), if available, under DOS 5.0 and later.  Upper Memory
   Blocks are conventional memory areas between 640K and 1024K, which
   are commonly provided on 80386 or better computers by programs such
   as EMM386, 386MAX and QEMM.

   There are two possible settings:

      USEUMBS Yes      - TLIB will link Upper Memory Blocks if they
                         are available.  This is the default.
      USEUMBS No       - TLIB will not link upper memory blocks.

   Note: Our CTMAP memory manager can also provide upper memory blocks
   on some 80286 and 80386 computers which use Chips & Technologies
   chipsets; see CTMAP09C.ZIP.  However, CTMAP's UMBs are always
   "linked" and available, so they are unaffected by the TLIB "USEUMBS"
   configuration parameter.

   The USEUMBS parameter is ignored in protected mode: by OS2TLIB under
   OS/2 or Windows-NT, and by TLIBX (the DOS Extended TLIB) when DPMI,
   VCPI or XMS extended memory is available.

   By default, if TLIB runs low on memory under DOS 5.0 or later, it will
   ask DOS to "link" any available upper memory blocks, thereby making
   them available as normal DOS memory to programs like TLIB.  When TLIB
   does this, it displays a message:

       *** UMBs linked ***

   For most users, this is good: it means that TLIB has additional memory
   that it can use when processing large files.

   However, if you have a problem with badly interacting programs, that
   you suspect might be a memory usage conflict, especially when running
   a DOS "task switcher" or similar program, you may wish to configure:

       UseUMBs N

   This will prevent TLIB from attempting to use Upper Memory Blocks.
   (You can also accomplish the same thing by using DOS's SETVER command
   to make TLIB think it is running under DOS 4.)
   [Bobby P.]

5.01h    7-Mar-94

1) Added: A new configuration parameter, READONLYT <Y/N/W>, to control
   whether or not TLIB will set tracking files (tlibwork.trk) to read-only.
   There are three possible settings:

      READONLYT Yes      - TLIB sets all tracking files to read-only
                           when not open.  This is the default.
      READONLYT No       - TLIB does not set tracking files to read-only.
      READONLYT Workdir  - Only work directory tracking files will be
                           marked read-only.  Project level tracking files
                           will be left writable.

   This parameter is intended for use with the network edition of TLIB
   when used with Sun PC-NFS, since apparently with PC-NFS only the
   "owner" of a file can change the file from read-only to read-write.

   {Note: if you configure READONLYT W, then you may also need to
   configure READONLYB W, a new option added in TLIB 5.04.  9/25/96}

   This parameter can also be used to work around a bug in some versions
   of Novell Netware.  This Netware bug causes files to lose their
   "sharable" attribute (which you set with Novell's FILER utility)
   whenever a program (such as TLIB or DOS's ATTRIB command) changes the
   read-only attribute.  See READ_ME.TOO for details (READ_ME.TOO is
   included with the network editions of TLIB).
   [Bob W.]

2) Changed: TLIB's U (update) command.  Formerly, the U command could,
   when no new version needed to be created (because there were no changes),
   close the library file and then immediately reopen it to change the
   date/time stamp, unless TOUCHU N was configured.

   Aside from a miniscule performance degredation, this didn't cause any
   problems, except that we suspected that it uncovered what may be a bug
   in Microsoft's alpha pre-release "Chicago" operating system, that
   caused the protected-mode TLIB (when run under NT and accessing the
   library files over a network) to display a dire-looking message similar
   to this:

       ERR: 0020h=DOSSETFILEINFO(3,1,4027:F940,12)

   ...which just meant that TLIB could not adjust the date/time of your
   library file.

   TLIB 5.01h has been changed to avoid the extraneous close/reopen
   (and also to provide a better error message if DOSSETFILEINFO failed).
   Unfortunately, this change apparently doesn't avoid the "Chicago" bug.
   [Martin H.]

3) Added: the new SETFTIMEW configuration parameter, mainly for use when
   running TLIB under MS-DOS in an OS/2 VDM.  Configuring SETFTIMEW Y
   tells TLIB that a file must be open with write access if its date/time
   is to be changed.

      SETFTIMEW N  - normal
      SETFTIMEW Y  - write access is required to set a file's date/time

   Note: TLIB will tell you if you should configure this parameter.
   [Kurt W.]

4) Changed: the way that TLIB parses configuration parameters, so that
   you can have an "_" (or "=") following the parameter name, instead of
   a blank, if you wish.

   This adds convenience when specifying configuration parameters on the
   command line, so that you needn't put simple configuration parameters
   in quotes.  For example, the following are now equivalent:

      TLIB c filetype_binary n myfile.dat
      TLIB c "filetype binary" n myfile.dat

   Using "_" to avoid typing a blank and quote marks only saves a couple
   of keystrokes when typing.  However, it avoids problems when passing
   TLIB configuration parameters to .bat files, since DOS's command
   processor strips off quote marks in .bat file parameters.

   The "=" (as a third alternative to a blank or "_") is allowed because
   we've observed a tendency for users to get confused and use "=" instead
   of a blank.  However, it has the same problem that quote marks have:
   when passed as a .bat file parameter, "=" gets stripped off by the DOS
   command processor.

5) Added: a new option for the SLASHCONT configuration parameter:

      SLASHCONT Maybe

   You can configure "SLASHCONT Maybe" (or just "SLASHCONT M") if you
   don't want to have to enter a backslash at the end of to-be-continued
   comments, except for comments specified on the command line.

   Like SLASHCONT Y (the default), this lets you run "TLIB U" or "TLIB N"
   with a comment on the DOS (or OS/2 or NT) command line, and not be
   prompted for additional comments for each file (unless the command-line
   comment ends in "\").

   However, like SLASHCONT N, this lets you interactively enter multi-line
   comments which are terminated by a blank line rather than needing
   backslashes at the ends of every line except the last one.

   There are three cases:

     1) You specified a comment on the command line, with no backslash
        at the end.

        You'll be prompted for additional comments only if SLASHCONT N
        is configured.

     2) You specified a comment on the command line, with a backslash at
        the end.

        You'll be prompted for additional comments regardless of how
        SLASHCONT is configured.  (But if SLASHCONT N is configured, the
        backslash becomes part of the first comment line.)

     3) You did not specify a comment on the command line.

        You'll be prompted for additional comments regardless of how
        SLASHCONT is configured.

   Similarly, there are three cases when entering additional comments:

     1) You entered a comment line with no backslash at the end.

        If SLASHCONT N or SLASHCONT M is configured, then you'll be prompted
        for additional comment lines.  But if SLASHCONT Y (the default) is
        configured, this will be taken as the last comment line, and the
        U or N command will finish.

     2) You entered a comment line with a backslash at the end.

        You'll be prompted for additional comments regardless of how
        SLASHCONT is configured.  (But if SLASHCONT N or SLASHCONT M is
        configured, the backslash will become part of the comment line.)

     3) You entered a blank line.

        If SLASHCONT Y (the default) is configured, this aborts the update.
        If SLASHCONT N or SLASHCONT M is configured, then this aborts the
        update only if this is the first/only comment line; otherwise, it
        terminates comment-entry, and causes the U or N command to finish.

   SLASHCONT <Y/N/M>                               |  Yes  |  No  |  Maybe
   Requires "\" to continue interactive comments?  |  yes  |  no  |  no
   Allows mass wild-card updates w/o prompts?      |  yes  |  no  |  yes

   We suspect that most users will prefer SLASHCONT Y (the default, "yes")
   or SLASHCONT M ("maybe"), rather than the old SLASHCONT N ("no").
   [Bob W.]

6) Changed: TLIB's errorlevel return value when processing multiple files
   (via wild-cards and/or file lists) to the the maximum of the errorlevels
   which would have been reported for any of the individual files, had such
   a file been processed by itself (without wild-cards).

   This has the effect of ensuring that if an error occurred for any of
   the processed files (and the error was severe enough to have caused a
   non-zero error level), then the errorlevel will be non-zero.

   In previous versions of TLIB, except for the "T" (test lock) command,
   the errorlevel was not meaningful unless only one file was specified.
   [Kurt W.]

7) Changed: the way that TLIB "deletes" lock files when the network does
   not allow delete permission.  This should now result in 0-length lock
   files instead of lock files containing the special name, "anyone".
   Also, we changed the "C" (checked-out) and "O" (own checked-out) wild-
   card search modes to ignore 0-length lock files.

8) Improved: error messages when an illegal LEVEL configuration parameter
   is specified in tlib.cfg.

9) Added: support for two new options on the REPLROBR ("replace read-only
   browse") configuration parameter, to allow replacement of read/write
   source files if they aren't checked-out/locked by the current user ID:

       REPLROBR Querywritable
       REPLROBR Writable

   Normally, for silent replacement of browse-mode files, you would
   configure READONLYB Y and REPLROBR Y, and then TLIB's "E" (and "EBF")
   commands will silently replace those files that have the read-only
   attribute set, and that are not checked out to the current user ID.

   "REPLROBR Querywritable" (or "REPLROBR Q") is similar to REPLROBR Y,
   but if a source file that the user doesn't have checked-out/locked is
   writable, the user is asked whether or not he wants to replace a
   read/write source file.  READONLYB Y must be configured to use this
   option.  Read-only source files are silently replaced, just as when
   REPLROBR Y is configured.

   "REPLROBR Writable" (or just "REPLROBR W") now lets TLIB replace
   writable browse-mode files without complaint, when READONLYB N is also

   (It is also possible to force silent replacement when extracting if
   you configure REPLACE Y or REPLACE A, but that is dangerous and we
   strongly recommend against it.)

   If for some reason you don't wish to configure READONLYB Y, you can
   configure REPLROBR W ("writable"), and TLIB's extract commands will
   silently replace files that you don't have checked out, even if those
   files are not read-only.

   BEWARE: if you configure REPLROBR W, then TLIB's determination of
   whether or not it can silently replace a file is made solely on the
   basis of whether or not YOU have the file checked out.  Plus, if you
   have configured LOCKING B (per-project-level locking), then the
   determination only considers locks at the current project level.
   TLIB's check-in/out locking mechanism does not keep track of which
   computer or directory the files have been extracted into, so if you
   configure REPLROBR W and you use a different user ID, or if you've
   configured LOCKING B and have a file checked out at a different project
   level, you may accidentally replace checked-out files!  Therefor, if
   you configure REPLROBR W, it is CRITICALLY IMPORTANT that you only
   use one user ID when working in a given work directory, and that
   you also use a different work directory for each project level if you
   configure LOCKING B (per-project-level locking).

   The allowed REPLROBR and READONLYB parameter settings are now:

         REPLROBR <Y/N/Q/W>
         READONLYB <Y/N>

   This table relates the REPLROBR and READONLYB setting combinations
   that make sense together:

   REPLROBR setting    READONLYB must be    Silent replacement?
     N                   either              No
     Y                   Y                   if read-only & not locked by you
     Q                   Y                   if read-only & not locked by you
     W                   N                   if not locked by you

   For most network edition users, REPLROBR Y and READONLYB Y are still
   the best choices.
   [David A., Mike C.]

10) Added: a facility to "dump" most of TLIB's configuration data into
   a file, so that you can see the result of the environment variable
   substitutions, include directives, etc..

   The "-cfilename" option writes the configuration information to filename.


      tlib -cmyfile.txt q

   ...runs TLIB, writes the configuration data to myfile.txt, and then
   exits to the operating system.  ("Q" is "quit").

   Note: The configuration parameters that TLIB dumps are the ones that
   you can reference as pseudo-environment variables in the configuration
   file via the %tlibcfg:parametername% syntax.

   Note that empty/do-nothing if/endif blocks in your configuration file
   will not appear in the dumped configuration data.  For example, if you

       if *.c,*.h
          track y
       track n

   ...then the if/endif block does nothing, so TLIB ignores it.
   [Kurt W.]

11) Fixed: a misleading message.  When the T command was used with the
   default "C" (checked-out files) wild-card search mode, and none of
   the specified files were checked out (so that no lock files were
   found), it is not an error condition; it just means that none of the
   specified files were checked-out and locked.  However, TLIB was
   displaying the following error message:

       ERROR: No lock files found for: "filespec".

   This was especially confusing for file lists:

       ERROR: No lock files found for: "@myfiles.lis".

   Beginning with version 5.01h, TLIB no longer displays the word "ERROR"
   under this circumstance.
   [David T.]

5.01g   24-Jan-94

1) Fixed: a bug which could cause an "ERR: ddvdl" when doing a U (update)
   command when there were no changes to the source file, and tracking was
   enabled, and the current version was not the last version in the TLIB
   library.  [Jeff D.]

2) Added: a helpful display of the old and new file dates when TLIB asks
   if you want to replace an already-existing source file during an E
   (extract) command, and a warning if you are about to replace a newer
   file with an older one.  However, this feature is disabled if you
   configure OLDDATE N (since the dates are of little significance then).
   [Tom L.]

2) Fixed: bugs in TLIBCONF 5.01e.  One bug caused it to fail with an "Out
   of memory" error if, in answer to question 10, you specified a libraries
   directory on drive "D:".  Another could cause protection exceptions
   under OS/2 or NT, or hangs under DOS, if you specified a libraries
   directory with no drive letter.  The fixed version is TLIBCONF 5.01f.
   [Russ VZ.]

3) Improved: error handling in TESTLOCK, when a directory was specified with
   no trailing backslash.  The improved version is TESTLOCK 1.06.

5.01f   12-Jan-94

1) Fixed: a bug in the 1-user versions of TLIB 5.01d and 5.01e, which broke
   the "S" (snapshot) command.  Symptoms were protection exceptions (in
   protected mode), "ERROR: invalid version number" messages, and bad
   snapshot files.

   This bug only affected the 1-user versions; the network versions were
   fine.  Consequently, the network versions of TLIB 5.01e and TLIB 5.01f
   are identical except for the version number displayed.
   [Russ VZ., Dov]

5.01e    7-Jan-94

1) Fixed: TLIB was allowing users to enter comments containing ctrl-Z
   characters, and TLIB stored them along with the rest of the comment.
   However, ctrl-Z is the DOS end-of-text-file character, and so if there
   is a ctrl-Z in a text-format TLIB library, TLIB stops reading it at
   that point.  The user sees the following error:

      ERROR: The TLIB library (junk.tlb) may be damaged.  It contains a
      ctrl-Z at offset nnnn (mmmm bytes before end-of-file).

   ...where nnnn is the file-offset of the ctrl-Z character.

   If you encounter this problem, you can solve it by editing your TLIB
   library file with a text editor, and deleting the ctrl-Z character from
   the .V or .N comment line.

   TLIB 5.01e avoids the problem by checking for and removing ctrl-Z
   characters from the comments that you enter.

5.01d         21-Dec-93

1) Fixed: a rare but very nasty bug that could result in two ".1" branch
   versions being created with identical version numbers.  This is a very
   severe problem because the second version cannot be retrieved (except
   by patching the library file)!

   Although this was (in its effects) the worst TLIB bug we'd seen in a
   long, long time, it was also very unusual, because of the combination
   of events necessary to trigger it:

   The problem occurred only for large files, when the library file was
   2 or more "passes" (e.g., a text file of more than MAXLINES/PASSSIZE
   lines); and only when the first pass had no changes (i.e., the first
   change in the file was at or after the MAXLINE-th line); and TLIB was
   automatically creating a new ".1" branch; and another ".1" branch
   already existed.

   This bug has been fixed (and if anyone encounters it and needs help
   recovering their data, they can call us for how to patch up the library
   files.)  [John M.]

2) Fixed: a message with an embedded  (ASCII 1) character in it.

3) Added: a new option for the LEVEL parameter.  You can now configure
   "c=nnn" (where nnn is an integer) to tell TLIB what branch number you
   prefer be used when TLIB is creating a new branch version.  The "branch
   number" is the (parenthesized) number of the branch, not the number of
   the version within the branch.

   If TLIB creates a new branch to store a new version of any file for
   this project level, TLIB will try to use nnn as the branch number (or,
   if branch nnn already exists, TLIB will create the next-higher unused
   branch version number).

   This is for aesthetics; by using the c= option, you can make all the
   branch versions for a particular level share the same branch number
   (though the branches may still sprout from different trunk versions).

   You may want to use this in combination with the b= option (which
   forces branch creation).


      TLIB.CFG contains:

        LEVEL n=STD d=H:\TLIBLEVS\STD\ a=Y
        LEVEL n=CUST1 d=H:TLIBLEVS\CUST1\ i=STD b=1 c=10
        LEVEL n=CUST2 d=H:TLIBLEVS\CUST2\ i=STD b=1 c=20

      If the current version of FOO.C is 7, and you customize it for
      level CUST1, then the new version created by the "U" (update)
      command would (by default) be 7.(10)1, instead of 7.1 [which is
      equivalent to 7.(1)1, since the default branch number is "1"].

5.01c         15-Dec-93

1) Improved: a slightly confusing TLIB error message.

2) Improved: TLIBCONF 5.01e.  It now offers to configure TLIB to use a
   project-oriented mode, in which most commands default to using the
   project-level search modes for file names and wild-card specs.

   Also, TLIBCONF now checks whether or not your specified library file
   PATH is to an existing directory, and if not then TLIBCONF will offer
   to create the directory for you.

   Also, if you have an Artisoft Lantastic network, TLIBCONF will offer
   to configure "ID *LANTASTIC*", so that TLIB will look up your user
   name from your Lantastic log-in name.

3) Added: a program called TESTLOCK (or TESTLOKR) 1.04, to test your
   network's file-sharing, region-locking, and file-commit support.
   Although this is pretty basic stuff, TESTLOCK uncovers network or
   Operating System bugs on quite a few systems!  See TESTLOCK.TXT or
   TESTLOCK.DOC (in the TESTLOCK.ZIP archive) for more information.

4) Added: COMPAR.BAT, to compare 2 versions within a TLIB library, or to
   compare a file with an old version.

5) Improved: COPYTRAK 5.01a, to enable it to read a tracking file which
   TLIB has open.

6) Improved: COPYTRAK 5.01a, by adding the -q option (which suppresses
   the copyright banner).

7) Added: FASTEBFT.BAT and FASTEBFT.AWK (pronounced "Fast E B F T"), which
   can be used to dramatically speed up the "TLIB EBFT *.*" command.

   The EBFT command is used in networked environments when a fully-populated
   named project level is in use, to refresh any out-of-date browse-mode
   files that you may have:

      TLIB EBFT *.*

   You might want to do this, for example, when you are about to run MAKE
   to rebuild your programs.

   Unfortunately, the current implementation of TLIB's EBFT command is
   rather sluggish when there are a lot of files (it spends about 60
   milliseconds per source file on a 33 MHz 80486).  So, if you have 1000
   source files, it could take a full minute to run the EBFT command -
   even if no files needed to be refreshed.

   To speed up the process, use the following sequence, instead:

      FASTEBFT d:\leveldir\TLIBWORK.TRK

   For large numbers of files, this is 5-8 times faster!


     a) This only works if you are using named project levels (a.k.a.
        "advanced version tracking").

     b) The d:\leveldir\TLIBWORK.TRK specified should be the tracking file
        for the current project level, as specified in your PROJLEV
        configuration parameter.  FASTEBFT.BAT doesn't read your TLIB.CFG
        file, and so doesn't know what the current project level is.

     c) You need AWK.  The Duff AWK that you got with TLIB will work fine,
        but Thompson AWK is even faster.

     d) OS/2 users can rename FASTEBFT.BAT to FASTEBFT.CMD.  However, if
        you run a DOS version of AWK (such as Duff AWK), then you won't
        see the output messages from FASTEBFT.AWK.  To rectify this, you
        can use .bat script tricks:

          i)   Create a RUNDOS.BAT file containng this one line:

                  %1 %2 %3 %4 %5 %6 %7 %8 %9 >stdout.tmp

          ii)  Copy FASTEBFT.BAT to FASTEBFT.CMD

          iii) Edit FASTEBFT.CMD, changing the "AWK" command line to run
               "RUNDOS AWK" instead instead of just "AWK", and adding the
               following 2 lines after the "RUNDOS AWK" line:

                  type stdout.tmp
                  del stdout.tmp

     e) FASTEBFT won't work if your current project level is "sparse"
        (i.e., if some of the files in the current project level are just
        inherited from another project level, rather than actually being
        listed in the current level's tlibwork.trk file).

     f) FASTEBFT needs the new 5.01a (or later) version of COPYTRAK.EXE.

   Note: It is our hope to eventually make FASTEBFT obsolete, by speeding
   up TLIB's EBFT command.  [Rob R.]

5.01c/2 07-Dec-93 (beta)

1) Added: a "critical error" handler, to avoid Abort/Retry/Fail errors.

5.01c/  22-Nov-93 (beta)

1) Fixed: a bug which could cause:

     ERROR: couldn't determine full path of ".\\mydir\subdir\myfile.ext"
     (followed by several other error messages)

   The problem occurred when using wild-card specifications with the L
   (library files) search mode, when TREEDIRS Y was configured and the
   current directory was a subdirectory of the main work directory, and
   a full source file path was specified.

2) Fixed: a bug in wild-card handling when TREEDIRS Y was configured
   and the current directory was a main (top) project level reference

   In this situation, the A and T search modes (which search against the
   project level) should have been able to find all files in the tree of
   subdirectories unless a specific directory was specified.

   Thus, for example, if the current directory is the main/top directory
   in the project level's directory tree, then:

      TLIB EBFT *.*     (should refresh all directories in the tree)
      TLIB EBFT .\*.*   (should refresh only the top directory)

   However, this was broken; both forms found only the files in the
   top/current directory.

   This bug has been fixed.

3) Added: the new FIND1FILE configuration parameter.  If you configure:


   then TLIB will handle even exact file names as if they were wild-card

   This means that if you are using TREEDIRS Y and a named project level,
   and the file is listed in the project level tracking file as belonging
   in a subdirectory, and the current directory is the main (top) work
   directory, then with every wild-card search mode except W (work file),
   TLIB will translate the file name according to the current project
   level, adding a subdirectory specification if necessary.

   Thus, as long as the current project level tracking file lists
   "SUBDIR\MYFILE.C", it is not necessary to specify the subdirectory
   when extracting SUBDIR\MYFILE.C:

     TLIB E MYFILE.C   (extracts .\SUBDIR\MYFILE.C)

   Examples, with FIND1FILE Y configured:

     TLIB E MYFILE.C         (extracts .\SUBDIR\MYFILE.C)
     TLIB E .\MYFILE.C       (extracts .\MYFILE.C)

   Examples, with FIND1FILE N (the default) configured:

     TLIB E MYFILE.C         (extracts .\SUBDIR\MYFILE.C)
     TLIB E SUBDIR\MYFILE.C  (extracts .\MYFILE.C)
     TLIB E .\MYFILE.C       (extracts .\MYFILE.C)

   Warning: if the current project level contains several files of the
   same name (in different subdirectories), the L, C and O search modes
   will retrieve only one of them.
   [Jim S.]

4) Added: the ability to configure the default wild-card search mode for
   any TLIB command, via an extension to the COMMANDS parameter syntax.

   To override the default wild-card search mode for a command, simply
   edit the COMMANDS parameter in tlib.cfg, adding "/x" to the command,
   where "x" is one of the six legal wild-card search modes.

   For example, if your configured COMMANDS was:


   Then you could change the default wild-card search mode for the various
   U (update) commands to "O" ("owned" files) by adding "/O" to each
   command, like this:


   A future TLIBCONF will utilize this facility to optionally configure
   TLIB to be more "project oriented."  That is, it will make the default
   search mode for most commands be "T" or "A" (to search the project
   level), and you'll need to first add your source files to the project
   level via the "A" command before you can extract and/or update them
   (unless you override the search mode).

5) Added: the ability to continue the COMMANDS configuration parameter
   onto additional lines in the configuration file, by adding a trailing
   backslash ("\") character.

   COMMANDS is the only configuration parameter which can be continued
   in this way.

   Input lines in TLIB's configuration file should never exceed 254
   characters in length.  However, it is possible for a COMMANDS parameter
   to be too long to fit on a 254-character line, so we've added a way
   to extend it to the desired length.

   For example, these two COMMANDS parameters are equivalent:



   Note that leading whitespace (tabs and/or blanks) is ignored on the
   continuation lines.

   Important: as listed in the COMMANDS configuration parameter, the TLIB
   commands must have their suffix characters in alphabetical order.
   Thus, this is okay:


   but this is in error:


   because UMK should be UKM, and ESB should be EBS.

   Unfortunately, the current edition of TLIB doesn't do much validity
   checking of the COMMANDS parameter, and so will not detect this error.

6) Added: code to look-up a Lantastic user name for utilization as a TLIB
   user ID.

   To try this out, use the CW (configure WHO) command:


   Or configure:


   Caveat #1: If you are logged into two different servers with two
   different user names, there currently is no way to predict which user
   name will be returned.  Please tell us if you'd like a way to do this.
   We think we know how to do it, but we'll need a Guinea pig to test it.

   Caveat #2: Lantastic does not (currently) support OS/2 or Windows-NT,
   so this feature is for DOS (real-mode) only.
   [David D., Ron T.]

7) Fixed: a bug which could cause "ERR: insr".
   [Ronald C.]

5.01b         17-Nov-93

1) Fixed: a bug in TLIB 5.01a which caused:

     ERROR: No such version in path\libfile.ext: "1".

   This could also be followed by either or both of the following error

     ERROR: keyword and/or logflag info in myfile.ext was not updated
     because it could not be written.

     ERR: OpenInp(path\libfile.ext) w/ old handle=nn.

   This happened when a new TLIB library file was created for a large
   (multipass) source file, if the source file contained keywords and/or
   a revision history block, or if TLIB needed to create a reference copy
   of the source file in a project level reference directory.

   The error occurred after TLIB had updated the library file, while TLIB
   was preparing to refresh the source file (to update the keywords or
   revision history), or to create the reference copy of the source file.

2) Changed: the date,time format in a TLIB library to pad the hours and the
   day-of-the-month to be two digits, so that listed versions line up better.
   [Rob R., etc.]

3) Fixed: an obscure bug in the UD (discard changes) command, which could
   cause the wrong message to be generated if for some reason TLIB was
   unable to extract the previous version for comparison purposes.

   These two warning messages were interchanged:

     ERROR: source.ext has been renamed to "source.tm0"

     Warning: source.ext is not read-only.

   (Note that the UD command needs to extract the previous version of your
   source file to determine whether you've made changes to the source file;
   if you've changed it, then your changes are saved in a temporary file.)

   Also, clarified the message displayed if a UD is done when the library
   file does not exist.

4) Fixed: several bugs having to do with archived (PKZIP'd) library and
   lock files.

    a) Checking-out/locking could result in a temporary copy of the lock
       file erroneously being left in the ARCTEMP directory in the event
       of the following warning:
         Note: file.ext was already checked out to you

    b) The UD command did not work with archived library files.

    c) The N and U commands did not work correctly with multi-pass files
       under some circumstances when either a reference copy needed to
       be updated (due to r=y being configured on the LEVEL parameter
       for the current named project level), or the source file needed
       to be refreshed (to update keywords and/or a revision history log).
       Creating a new library erroneously left a copy of the library file
       in the ARCTEMP directory, and when updating an existing library
       with a new version, the temporary copy of the library in the ARCTEMP
       directory was being prematurely deleted, which caused the source
       and/or reference files to not be extracted.  This could cause
       any or all of the following errors:
         ERROR: Could not reopen library file "path\libfile.ext", error #2.
         ERROR: keyword and/or logflag info in source.ext was not updated
         because it could not be written.
         ERROR: reference copy path\source.ext could not be refreshed.
    [Peter C.]

5) Added: the new TOUCHSOUR N/Y/M/R ("touch source") configuration
   parameter, to control the file date with which a source file is left
   after an update (U or N command).

   (To "touch" the source file is to set its last-modified date/time stamp
   to "now.")

   There are four choices:  TOUCHSOUR N/Y/M/R

     TOUCHSOUR No       -- Never touch the source file; preserve its
                           date/time stamp even if TLIB modified it to
                           update keywords or a revision history log.
                           (This is the default.)

     TOUCHSOUR Yes      -- Touch the source file iff the library was
                           successfully updated, regardless of whether or
                           not TLIB modified the source file.

     TOUCHSOUR Modified -- Touch the source file only if TLIB modified it
                           to update keywords or a revision history log
                           (with FIXKEYWD Y configured), or to remove an
                           embedded comment line (with CMTFLAG configured).

     TOUCHSOUR Revhist  -- Touch source only if a revision history log was
                           inserted (due to FIXKEYWD Y) or a comment line
                           was removed (with CMTFLAG configured); i.e., if
                           the line numbers changed.  (This is useful for
                           keeping source files "in synch" with debugger
                           line numbers).

   Note that this affects the date/time stored in the TLIB library file,
   as well as the date/time of the actual source file.  However, it does
   not affect the date/time of any reference copy of the source file
   which TLIB creates due to the r=y option on the LEVEL configuration
   parameter; reference copies are always created with the current date/
   time (which may be a few seconds newer than that of the source file
   in your work directory, even if TOUCHSOUR Y is configured).

   Related parameters:
     AATTR Set/Preserve/Reset
     FIXKEYWD Yes/No
   [Rob R., Steve K., Bob F., Phil A., Joshua G., Joe M., Phil H.]

6) Fixed: LISTBLD 5.00c, to find indented C-language #include directives.

7) Enhanced: LISTBLD 5.00c, to recognize Baily Controls' "Batch90" language
   include directives.
   [Les H.]

5.01a    9-Nov-93

1) Fixed: an embarassing bug in TLIBCONF 5.01b which caused it to get
   "stuck" on question #10, refusing to accept any answer.  The fixed
   version is TLIBCONF 5.01c.

5.01a    1-Nov-93
  (real-mode network version is 122010 bytes, CRC16=56EC)

1) Fixed: a problem that could cause "awaiting access..." hangs when
   processing multiple files via a file list, and removed the debug code
   that was added in 5.01a/4 to help track down this problem.  [Kevin H.]

2) Fixed: a bug in the keyword expansion algorithm, which caused TLIB to
   improperly parse a keyword flag line in your source file unless there
   was at least one character of white-space (blank or tab) after the
   keyword flag and before the quoted format string.

   Thus, if you had configured:
     keyflag 3,"--keyflag--"
   and your source file contained:
     /*--keyflag--"Version %f, date %d"*/
     /* "" */
   then the keyword information would not be inserted.

   However, if your source file contained:
     /*--keyflag-- "Version %f, date %d"*/
     /* "" */
   then it worked fine (due to the blank after --keyflag--).

   This bug was introduced in TLIB 5.0 (TLIB 4.12 did not have this
   problem), and is now fixed.  [Michael M.]

3) Expanded and improved: TLIBCONF.

   This is TLIBCONF 5.01b.  It now asks a couple of additional questions,
   and configures several additional common parameters.  We also clarified
   some of the existing questions.

   This should be helpful to new users of TLIB.

5.01a/4   28-Oct-93 (beta)
  (real-mode network version is 121898 bytes, CRC16=46C5)

1) New: PVCS-to-TLIB, RCS-to-TLIB, and TLIB-to-TLIB conversion utilities!

   The purpose of the PVCS-to-TLIB and RCS-to-TLIB conversion utilities
   is to aid customers who are upgrading to TLIB from these products.

   Since TLIB 5.01 directly supports all possible version numbers that
   can be generated by PVCS and MKS RCS (except for punctuation
   differences), the PVCS-to-TLIB and RCS-to-TLIB conversion utilites
   are able to convert all PVCS or RCS versions (including branches)
   into TLIB versions.  Also, all version labels are automatically
   converted into TLIB snapshot files.

   If you are converting from a variant of RCS other than the one sold
   by Mortice Kern, the RCS-to-TLIB conversion utility might still work,
   but we've only tested it with Mortice Kern's RCS.  Please call us
   and tell us about your success or problems converting from other RCS
   variants.  If you have trouble, we may be able to help.

   The purpose of the TLIB-to-TLIB conversion utility is to assist users
   who need to convert TLIB libraries from one format to another.  For
   example, if you had accidentally stored text files in binary-format
   TLIB libaries, then you might want to convert those libraries to text
   format, so that TLIB's "delta review" and keyword features would be
   available.  Similarly, if you have TLIB libaries which require too
   much RAM for TLIB to process in your preferred DOS environment, then
   you could convert them to a smaller MAXLINES setting, to conserve
   RAM memory.

   See CONVERT.TXT for details.

2) Added: support for the "-q2" command-line option, which is just like
   the "-q" (or "-q1") option except that it also suppresses display
   of any user-configured BANNER lines (see the BANNER and NUMBANNER
   configuration parameters).

3) Changed: TLIB's algorithm for determining the current work directory
   when TREEDIRS Y is configured but WORKDIR is not configured.

   As in earlier releases, TLIB searches the current and parent
   directories for a TLIBWORK.  However, if no TLIBWORK.TRK file is
   found, TLIB will no longer simply assume that the current directory
   is the work directory; instead, TLIB prompts the user to specify
   which directory is the work directory, and creates the TLIBWORK.TRK
   file there.

   The question asked is similar to the following:

      TREEDIRS Y was configured but the main/top work directory could
      not be deduced, because TLIBWORK.TRK was not found in or above
      the current directory, `C:\WORK\CURRENT\'.

      Enter the depth of the main work directory, 0-2, where 0 is `C:\',
      and 2 is `E:\WORK\CURRENT\':

   This should prevent problems that some users have experienced with
   TLIB choosing the wrong directory as the main work directory, if
   that was not the current directory the first time they ran TLIB
   in that work directory tree.

   Note: If you configure QUERIES N (to prevent TLIB from asking questions
   of the user), and TLIB cannot determine the main work directory, then
   TLIB aborts rather than allowing the user to specify the work directory.

4) Improved: the way that TLIB determines the case (upper vs. lower) of
   the file name inserted via the %n keyword into an extracted file.

   In earlier versions of TLIB 5, the file name might be inserted as lower-
   case even with an upper-case-only file system, if the user had specified
   the the file name as lower-case and the file did not already exist.

   Now, however, the DOS (real mode) TLIB always forces the inserted %n
   keyword's file name to upper-case, and the protected mode (OS/2 & WinNT)
   TLIB does a "find-first" directory look-up of the source file to
   determine the correct case for the name.
   [Ken W.]

5) Fixed: an error-handling bug which could cause any of several symptoms
   if a command specifying a specific version number was done with a
   snapshot or tracking file used to specify the version number, but
   the source file was not listed in the snapshot or tracking file.

      tlib ebs myfile.c @tlibwork.trk
      (where myfile.c isn't listed in tlibwork.trk)

   In each case, a proper error message was generated:

      ERROR: Version number for "MYFILE.C" isn't specified in "tlibwork.trk".

   However, there were several possibilities for what happened next,
   depending upon the circumstances:

      ERR: spv   (internal error)

      ERR: spv2  (internal error)

      TLIB could prompt for the missing version number, then complete the
      command successfully (if you entered a proper version number).

      TLIB could abort the command, but exit with errorlevel 0 instead of
      errorlevel > 0.

   This has been fixed to ensure that TLIB will simply abort the command.
   If only one file was specified on the command line, then TLIB will
   exit with errorlevel > 0 to indicate an error.

   (Note, however, that if several files are specified, or a wild-card
   spec or file-list is used to specify the files, the errorlevel is
   still unpredictable.)  [Rob R.]

6) TLIB no longer retries file-open sharing errors when reading input
   files for an N or U command, since those files should not be subject to
   contention by other TLIB users.  This prevents the annoying 1-3 minutes
   of "awaiting access..." retry attempts when, for example, the following
   command finds TLIB's own $TLIB_TM.0 temporary file but cannot read it
   because TLIB itself has the file open in an exclusive SHAREing mode:

     tlib n *.* initial version

   Note that this particular case (of TLIB's N or U command finding the
   $TLIB_TM.0 file) can be avoided by setting your TEMP or TMP environment
   variable to point to another directory.  [Mike S.]

7) Fixed: Tabs are now acceptable in lieu of blanks in the LEVEL
   configuration parameter.  [Karl H.]

8) Added: some debug code for tracking down an unresolved problem that
   can cause "awaiting access..." hangs when processing multiple files
   via a file list.  [Kevin H.]

9) Clarified: a couple of TLIBCONF's questions (slightly).  This is
   TLIBCONF 5.01a.

5.01a/3   14-Sep-93 (beta)
  (real-mode network version is 120890 bytes, CRC16=0DAA)

1) Fixed: an innocuous bug that sometimes caused the following message
   when TLIB was analyzing a binary file for the N (create New library)
      Warning: d_stats != chk_stats
   [Tim M. and others]

2) Fixed: a bug in TLIBSMP which caused it to fail in various ways when
   wild-cards were used to process multiple binary-format TLIB libraries.
   The most common symptom was the message:
      Format error
   The fixed program is TLIBSMP 5.00c.  [Starry C.]

3) Fixed: a bug in TLIB which caused the "t=" and "l=" fields in the
   tracking files to not be stored during a U (update) command in which
   no new version was created because there were no changes.  The effect
   of this was to cause an unnecessary re-extract of the source file the
   next time an EBF command was done.  This bug only affected users who
   had tracking enabled ("TRACK Y") but no named project level (PROJLEV
   and LEVEL not configured, or PROJLEV configured to "*").
   [Greg G.]

4) Fixed: an innocuous bug in TLIB which could cause an extra error
   message if an error occurred during certain commands which take a
   specified version number as a parameter.  For instance, an error in
   the command:
      TLIB EBFS @X.LIS *
   could (after the proper error message was displayed) result in the
   following spurrious message also being displayed:
      ERROR: Illegal command: "*"

5.01a/2   (unreleased)

1) Fixed: a bug in 5.00m which caused all TLIB commands to fail if WORKDIR
   was configured to a path that lacked a trailing backslash.

   For example:

      WORDIR  C:\MYWORK          (broken in TLIB 5.00m)

   Workaround is to configure it in the supposedly-equivalent way, with
   the trailing backslash specified:

      WORDIR  C:\MYWORK\         (works in all versions of TLIB 5)

2) Improved: scanning for keyflags and logflags in source files that are
   stored in tab-compressed libraries.  This is of consequence only if
   you have configured keyflag or logflag at column 9 or greater, or if
   you have used embedded white-space in the keyflag or logflag string
   (neither of which is recommended).

   In earlier version of TLIB, the examination of each source and library
   line for a keyflag and/or logflag was done after the tab-to-blank
   expansion during an extract, and after the blank-to-tab compression
   on an update.  This led to some rather weird behavior when the keyflag
   or logflag was indented by more than 7 spaces.  (One manifestation
   of this problem was a revision history log that got appended to rather
   than replaced on updates.)

   With this improvement, TLIB now examines the source and library lines
   after the tab-to-blank expansion during an extract, so that if your
   source files have no explicit tabs you can use both blank-to-tab
   compression (ENTABU Y), and an indented keyflag and/or logflag.

   For more on keyflags and logflags, see the chapters on "Keywords" and
   "Revision History Log" in the printed TLIB Manual.

5.01a/1   (unreleased)

1) Added: support for the RELAXVERS configuration parameter.  If you
   configure RELAXVERS Y, then TLIB will allow you to create versions
   with branch or trunk number zero, and/or to skip versions.  This is
   not intended for general use, but rather to allow conversion of
   PVCS and RCS files to TLIB, via the new PVCSTLIB.AWK and RCS2TLIB.AWK
   conversion tools.

   Support for version number zero and skipped version numbers is new to
   TLIB 5.01, and is not supported by TLIB 5.00m and earlier.


   Note: To specify a zero branch version number, you MUST always also
   specify the parenthesized number-of-the-branch.

   For example, suppose that you had a PVCS archive from which you built
   an equivalent TLIB library, using PVCSTLIB.AWK.  Suppose, also, that
   the PVCS archive contained PVCS branch version number "".
   then the equivalent TLIB 5.01 version number would be "3:2.(1)0",
   and you CANNOT abbreviate it to "3:2.0".

   This is a special case which applies only to branch version zero of
   branch number one, ".(1)0".  For any other branch version within branch
   number one, the "(1)" can be omitted for brevity, so that, for example,
   "3:2.(1)4" is equivalent to "3:2.4".

   This restriction exists is so that we can maintain compatible behavior
   with earlier TLIBs, which considered, for instance, "4.0" to be another
   way of referring to version "4".

5.00m      15-Aug-93 (posted on BBS but never shipped)

1) Changed: the default way that TLIB interprets path\file specifications
   under some circumstances when you are working in a subdirectory other
   than the main work directory when TREEDIRS Y is configured, and...

   Added: the new TOPRELATI configuration parameter, to tell TLIB how to
   interpret such file names or relative paths.

   In TLIB 5.00L and earlier, it was assumed that all such paths were
   relative to the current directory.  However, this prevented correct
   operation with file lists and snapshot files that included the relative
   subdirectories, since TLIB would erroneously interpret such paths
   as being relative to the current directory, rather than relative to the
   main (top) work directory.

   The symptom of this problem was that various TLIB operations involving
   file lists or snapshot files would fail to work correctly with TREEDIRS Y
   configured, unless the current directory was the main work directory.
   For example, snapshot file entries could end up with doubled subdirectory
   names, like "IOSTUFF\IOSTUFF\BUFFERS.H" instead of "IOSTUFF\BUFFERS.H".

   The TOPRELATI ("top-relative") parameter enables you to tell TLIB how
   to interpret such file names.  It has no effect on TLIB's operation
   unless TREEDIRS Y is configured AND the current directory is not WORKDIR.
   That is, if WORKDIR is the current directory, or TREEDIRS N is configured,
   then the TOPRELATI paramter is ignored.

   The three possible settings are:

   TOPRELATI Y      names are relative to WORKDIR
   TOPRELATI N      names are relative to current directory (like TLIB 5.00L)
   TOPRELATI Maybe  names are relative to current directory except when
                    the names are read from a TLIB snapshot (version label)
                    file.  This is the default.
   [Carl M.]

2) Fixed: a bug similar to problem (1), above, which occurred when
   TREEDIRS Y was configured.  This problem caused the M (migrate) command
   to generate a MIGRATE2.BAT that did not work properly if the current
   directory was not the main (top) work directory.

   Specifically, the generated MIGRATE2.BAT contained subdirectory
   specifications which assumed that the MIGRATE2.BAT was being run from
   the main/top work directory, even though that was not actually the
   current directory.

   In TLIB 5.00M and later, the generated MIGRATE2.BAT in this situation
   now depends upon the setting of the new TOPRELATI configuration parameter.
   If TOPRELATI Y has been configured, then the file specifications in
   the generated MIGRATE2.BAT are relative to the main work directory;
   otherwise, they are relative to the current directory (this is now the
   default behavior).  [David A.]

3) Fixed: an erroneous message ("Truncating %s back to %ld bytes.") in which
   the number of bytes was garbled.  This message was only displayed under
   certain rare circumstances in which TLIB was recovering from a network
   failure.  [Les H.]

4) Fixed: erroneous command-line parsing, which caused a backslash at the
   end of a quoted string to be interpreted at an "escape" of the closing
   quote.  (This was a feature of the C runtime library, which surprised us.)

   The symptom of the problem was that commands like:

     tlib c "workdir c:\mydir\" u *.c

   ...did not work.  (In this particular example, you'd get the TLIB menu
   or "command:" prompt.)

   This is now fixed, so that backslashes on the TLIB command line are not
   treated specially.

   This fix makes TLIB 5.00m behave like TLIB 4.12 in its command-line
   parsing.  It also has the side-effect of preventing you from including
   a double-quote mark inside a quoted parameter on the TLIB command line.
   This seems unimportant, however.  [Carl M.]

5) Changed: the default JOPTIONS setting is now "JOPTIONS UOCAP".  Note that
   this is not what the manual says the default is.  [David A.]

6) Fixed: When standard output was redirected, and TLIB issued a message
   indicating who had a file checked-out/locked (e.g., when the "E" command
   failed because someone else was already working on the file), then only
   part of the message was being echoed to stderr.

   This has been corrected.  [Andy P.]

7) Probably fixed: "Warning: only nnn words of stack remained unused."
   We increased the stack size a bit to avoid this innocuous warning.

5.00L         27-May-93

1) Fixed: a bug which caused TLIB to abort with "ERR: workdir_is_projdir..."
   and "ERR: AmbigPROJLEV" messages.  [Rob R.]

5.00k         21-May-93

1) Changed: the method we use to "flush" directory information when running
   under DOS 3.3 and later, since some networks do not properly flush
   directory information when a duplicate file handle is closed.  This
   should reduce the number of networks for which TLIB must resort to a
   (slow) full close/reopen sequence to force file directory entries to
   be updated.

2) Modified: the heuristics we use when analyzing binary files, to avoid
   extremely sluggish operation of the "U" (update) command when storing
   highly uniform (homogenous) binary files.

   Note that this fix is effective only with newly created TLIB libraries.
   If you experience extremely slow performance while updating binary
   TLIB library files that were created with an earlier version of TLIB,
   then to solve the problem you will have to delete the old library file
   and re-create it with TLIB 5.00k or later.

   This problem was seen when storing a .DBF file which consisted almost
   entirely of blanks.  [Rick S.]

   (Note: TLIB 5.01 comes with the "TLIBTLIB" conversion utility, which
   can be used to automate the tedious process of creating a new TLIB
   library containing all the versions and comments that were in the old

3) Fixed: In the network edition of TLIB, if ID was configured to *NOVELL*,
   *NETNAME*, etc., and there was a reference to %TLIBCFG:ID% later in
   the configuration file but not in a help, banner or prompt line, then
   the %TLIBCFG:ID% reference was incompletely resolved.  That is, it
   came out to be "*NOVELL*" or whatever, rather than the actual network
   user name.  This has been fixed.  [Red M.]

4) Fixed: a minor bug which prevented the end-of-line from being written
   to stdout (console) after the Y or N was echoed when the user entered
   the answer to a yes/no interactive question while stdout (output)
   was redirected to a file.

5) Added: support for another microcontroller assembler 'include' directive
   syntax to LISTBLD 5.00b.  [Kent T.]

6) Improved: LISTBLD 5.00b, so that the REMOVE and RELATIVEPATHS options
   behave more reasonably when specified in combination.

   When the REMOVE option is specified without RELATIVEPATHS, then any
   relative paths are ignored, and LISTBLD removes every entry in the
   output file list which matches the specified input file(s).

   When the REMOVE option is specified with RELATIVEPATHS, the complete
   path+name must match for each entry to be removed.

   For example, suppose the EXCLUDE.LIS and MYFILES.LIS file lists are
   as follows:

       exclude.lis         myfiles.lis
       -----------         ------------
       iostuff.c           aa\iostuff.c
       f\analyze.h         iostuff.c

   Then specifying REMOVE without RELATIVEPATHS...

       LISTBLD @exclude.lis myfiles.lis REMOVE

   results in:

   and several warnings about duplicate entries being deleted (because
   the multiple "iostuf.c" and "analyze.h" entries are not allowed when
   RELATIVEPATHS isn't specified).

   However, specifying REMOVE with RELATIVEPATHS...

       LISTBLD @exclude.lis myfiles.lis REMOVE RELATIVEPATHS

   results in:

7) Fixed: a subtle bug in TLIB's automatic branching algorithm, which
   could cause TLIB to create a higher-numbered branch than was necessary,
   if the branch was from an early trunk version number and a later trunk
   version already had branches from it.

   For instance, if you had a TLIB library containing versions 1, 2 and
   2.1, and you extracted version 1, modified it, and updated the library
   (with TRACK Y configured), then TLIB would automatically create the new
   branch version, but as version 1.(2)1 instead of version 1.1 [which is
   equivalent to 1.(1)1].

   This didn't really cause any problems, but it was not how we intended
   it to work, and it seemed aesthetically displeasing.

   This has been corrected.  [Mark B.]

8) Fixed:  Although the user manual is ambiguous on the point, it was our
   intention that the S (snapshot) command record the latest trunk versions
   unless PROJLEV was configured to a named project level (in which case
   the versions current in that project level should be recorded), or
   unless "PROJLEV =" was configured (in which case the version nubers for
   tracked files should be taken from the work directory's tlibwork.trk
   file).  Thus, the S command should record the version numbers which the
   E command would have extracted.

   However, TLIB 5.00j and earlier did not behave this way in one case.
   When "basic tracking" was used (i.e., "TRACK Y" configured, but no
   PROJLEV), instead of recording the latest trunk versions for tracked
   files, the S command recorded the versions listed in the work directory's
   TLIBWORK.TRK file.  That is, the S command was behaving as if "PROJLEV ="
   was configured.

   In TLIB 5.00k, this has been corrected.  If PROJLEV is not configured
   (or is configured to nothing), then TLIB's S command will record the
   latest trunk versions for both tracked and untracked files, which is
   consistent with the version number retrieved by the E (extract) command.

   If you would prefer, instead, that the version numbers from the work
   directory's TLIBWORK.TRK file be recorded, you can configure "PROJLEV =".

   For example, suppose that:

      - the latest trunk version of XYZ.C is version 5

      - but thework directory TLIBWORK.TRK file contains the line:
           XYZ.C v=3

      - the TLIB.CFG file contains:
           if *.c,*.h
             track y
           REM - same as not configuring projlev at all:

   And suppose that you do the commands:


   Then the TEST.SNP snapshot will contain
      XYZ.C v=5
   but the TEST2.SNP snapshot will contain
      XYZ.C v=3
                                          [Starry C.]

9) Fixed: A problem with the M (migrate) command, which occurred when
   "TREEDIRS Y" was used, and a file to be migrated was in a subdirectory,
   and the migrate operation degenerated into a simple copy because no
   merge was actually required.

   This would happen if, for example, the current version of mydir\file.c
   was version 4, and you migrated version 4.2 into the current version.

   The problem was that the generated MIGRATE2.BAT file utilized the DOS
   "copy" command to append the source file onto a single-line file
   containing the special "...[COPIED_nn]" comment line.  However, it
   turns out that the DOS copy command to append one file to another
   ("copy file1+file2") does not work if file1 is not in the current

   Consequently, TLIB 5.00k no longer uses the DOS copy command in the
   generated MIGRATE2.BAT file.  Instead, it uses a new option on the
   SCOPY program.

   So, we also...

10) Enhanced: the SCOPY program, to accept an additional command-line
   parameter, to add a line to the top of the copied file.  This is for
   use by the MIGRATE2.BAT file which is generated by the M (migrate)

5.00j         29-Mar-93

1) Fixed: A TLIB 5.00i warning message ("File lock failed...") was
   incorrect.  It came out
      ...File lock failed on File lock failed on %s
   Instead of
      ...File lock failed on <filename>
   This has been fixed.  [Bennett S.]

2) Fixed: a problem caused by an bug/idiosyncrasy in at least one version
   of Lan Manager.  It seems that under Lan Manager, closing a duplicated
   file handle sometimes causes the directory information to be updated,
   and sometimes does not... which badly confused TLIB.

   This problem seemed to occur when (because CREATETF Y was configured)
   TLIB created a previously-nonexistant project level tracking file on
   the network drive, and tried to add more than one file to it (because
   wild-cards or @filelists were used to specify multiple source files).

   If the tracking file already exists, then Lan Manager's behaviour is
   apparently at least consistent, which avoided the problem.

   The symptom was an endless error/retry loop with the message:
      Warning: <filename> cache length failure (nnn -> mmm); recovering...

   TLIB now has code to handle this situation.  [Chuck F.]

3) Added: a cute little AWK program called ANSIFY.AWK, to add pretty
   ANSI highlighting to the prompts and help which are generated (in
   tlib.cfg) by TLIBCONF.  The instructions are in comments in the
   program itself (ansify.awk).  It works with Duff AWK (included with
   TLIB), or Thompson AWK (the fastest AWK around), or MKS AWK (another
   popular AWK).

5.00i         08-Mar-93

1) Fixed: a bug which caused the S (snapshot) command to create a work
   directory tracking file if one did not already exist, even when
   tracking was disabled.  [Scott L.]

2) Fixed: the "SUPPRESS 2" option.  (If you've never seen a TLIB message
   suggesting that you configure "SUPPRESS 2", then this doesn't affect
   you.)  [Scott L.]

3) Fixed: TLIB so that it will not abort when asked to store a 0-length
   file, and changed it to allow storing such files.  [Lance C. L.]

4) Fixed: The additional comment line records were recorded in the
   journal file with only 12 fields instead of 13 (11 leading commas
   instead of 12).

5.00h         07-Feb-93

1) Fixed: a bug which caused the error message to be slightly garbled if
   an NS command was attempted with a prohibited starting version number.

2) Fixed: a deficiency in TLIBCONF.  It was leaving the EBF (freshen
   browse-mode files) command out of some of the prompt and help menus.

5.00g         21-Jan-93

1) Fixed: a bug which could cause various problems when "PROJLEV *" or
   "PROJLEV =" was configured, including error messages similar to the
      ERROR: Could not create "d:\direct" (for project-level *).
      ERROR: Could not open "d:\direct" (for project-level *).
   where "d:\direct" is actually a directory.   [Tony L.]

2) Changed: the format of the lock status information (reported by, for
   instance, the "T" command).

5.00f         18-Jan-93

1) Fixed: a bug which caused TLIB to try to extract to the wrong directory,
   or record the wrong relative path in the tracking file when an E (extract)
   command was done and:
     - "TREEDIRS Y" was configured, and
     - "TRACK Y" was configured, and
     - the current directory was not the WORKDIR (working directory), and
     - a wild-card file specification was used that did not include a
       directory specification, and
     - the L (default), C, or O wild-card search-mode was used.
   Now such commands will only extract to the current directory.

2) Optimized: the EBF ("freshen source files") command, to improve
   performance when used with a slow "remote" (modem-attached) network
   connection, by eliminating some "find-first" (directory look-up)
   operations (used to check the length of the library file) when a simple
   version-number comparison allows us to determine that a source file
   needn't be extracted.

   This optimization helps only slightly with normal local area network
   connections, since find-first is normally a very fast operation.
   However, with at least one vendor's remote network access package,
   a find-first to look up a file on a network drive is hideously slow.

   Whether or not TLIB can optimize the EBF command to avoid the find-first
   depends upon the form of the command that you use.  If TLIB can deduce
   the exact version numbers needed without checking the length of the
   library file, then the extra find-firsts are avoided.  For example:

      tlib ebfs *.c,*.h *     -- can never be optimized, due to the
                                 "floating" version number ("*", meaning
                                 "latest trunk version")

      tlib ebf @snapshot.txt  -- optimized because version numbers are
                                 taken from the snapshot version label file

      tlib ebft *.c,*.h       -- optimized (for normal project levels)
                                 because the version numbers are found
                                 in the project-level tracking file
   [Bruce C., Mark E.]

3) Added: a new configuration option, which subtly affects the operation
   of the EBF command.

   Normally, the EBF command will extract any named source file which
   does not already exist in the work directory, as well as those which
   are determined to be out-of-date according to the information in the
   work directory's TLIBWORK.TRK file.

   However, one of our users is using a scheme for taking work home in
   which the source files are not left in the working directory, and he
   needed for TLIB to ignore the absence of the source files, and make
   its determination of which files to extract solely on the basis of
   the information in TLIBWORK.TRK.

   To tell TLIB that his source files are elsewhere, he can now configure:


   However, most users should leave this configuration parameter set to
   the default:


4) We rearranged the documentation file, 5P00NEWS.DOC, slightly.  (This
   file describes the differences between TLIB 4.12 and TLIB 5.00.)
   (5P00NEWS.DOC is available as part of the OLDSTUFF.ZIP archive on our
   BBS, in the TLIB file area.  7/96)

5.00e    5-Jan-93

1) Fixed: a bug in the OS/2 edition which could (under rare curcumstances)
   cause TLIB to display "ERR: LAls" and abort during an update of a large
   TLIB library.

2) Fixed: a bug which prevented specification of a "date,time" in lieu
   of a specified version number.  Either a date alone, or a time alone
   worked okay, but not date and time together.  [Jonathan L.]

3) Fixed: a bug which caused the M (migrate) command to produce a
   somewhat garbled REM line in the MIGRATE2.BAT file if tracking was
   disabled.  The garbled portion was the "current" version number, e.g.:
      REM   Migrate v=1.5 into test.c [v=18]  (current v=?:?.(?)?.(?)?.(?).?)
   [Jonathan L.]

4) Fixed: a bug which prevented proper resolution of a %tlibcfg:id%
   reference embedded in a BANNER line, if the ID was configured to
   one of the special network IDs, such as *NOVELL*.  [Dave Bl., Jonathan L.]

5) Improved: error message when an invalid version number is specified by
   the user.  [Dave Bl.]

6) Fixed: some of the errors in 5P00NEWS.DOC, and incorporated PROJLEV.DOC
   and TRACKFIL.DOC into 5P00NEWS.DOC.
   (5P00NEWS.DOC is available as part of the OLDSTUFF.ZIP archive on our
   BBS, in the TLIB file area.  7/96)

7) Added: support for specifying a date and/or time in lieu of the version
   number for the SS (snapshot specified versions) command.  [Dave Bl.]

5.00d         14-Dec-92

1) Fixed a bug in the migrate command which caused the following error:
      run-time error R6000
      - stack overflow
   The error only occurred if tracking was enabled but the working
   directory's TLIBWORK.TRK file did not already exist.  [Paul J.]

2) Fixed: the "PROJLEV *" configuration setting, which did not work at
   all.  [Brian W.]

3) Changed: the default PROJLEV behavior, and added a new special
   PROJLEV setting which is equivalent to the old default.

   The default PROJLEV configuration setting is "nothing"; which is
   like configuring just "PROJLEV" with nothing after it.  That is,
   neither "PROJLEV <project-name>" nor "PROJLEV *" is configured.

   In TLIB 5.00c and earlier, when tracking was enabled ("TRACK Y")
   the default PROJLEV setting caused TLIB's "E" (extract) command to
   consult the working directory's tracking file to decide which versions
   to extract by default.  Thus, if you extracted a file, you would
   always get the version you last had.

   Now, however, with the default PROJLEV setting, the "E" command will,
   by default, extract the latest trunk version.  However, automatic
   branching will still work; that is, the "U" (update) command will,
   still consult the working directory's tracking file to decide what
   version number to create for the new version.  So, if you started
   with version 12, and version 13 already existed, then the U command
   would know to store the new version as 12.1, rather than 14.

   This is a better default behavior for the vast majority of users.

   If you prefer the old behavior, you can now configure "PROJLEV =",
   but we suspect that few users will want to do this.

   Configuring "PROJLEV *" is similar to the default PROJLEV setting,
   except that automatic branching is disabled.  Thus, if you extracted
   version 12 and modified it, but version 13 already existed, then
   when you stored the new version, TLIB would (unless you overrode it)
   create the new version as number 14, rather than 12.1, just as if
   tracking were disabled.  (This is also the way that TLIB 4.12 worked).

4) Added: experimental code to try to work around a bug in some recent
   Microsoft networks.

   For maximum safety, and to detect a very dangerous known bug in some
   versions of Novell Netware, TLIB contains special code to verify the
   size of a TLIB library after appending a new version, thereby making
   absolutely certain that the new version was successfully stored.
   This special code is only executed after TLIB has successfully written
   the new "delta" information, and closed the library, all without any
   errors being reported by the operating system or network.

   If the verification fails (i.e., the new library size is too small),
   it is indicative of a bug in the network.  For example, Novell Netware
   will, under some rare circumstances (probably when there are bad
   blocks on the server disk drive), leave the library file somewere
   between the old size and the proper new size (and an exact multiple
   of 1024 bytes in length).  This is the Novell Netware bug which our
   verification code was intended to detect.

   However, some Microsoft networks also have a bug which is detected
   by this code.  These networks erroneously report to TLIB that the file
   is still the old size, which used to cause TLIB to halt with an error
   message.  Yet after TLIB exited, if you checked the size of the TLIB
   library (say, with the "dir" command), you'd find that the file really
   had been extended to the proper new length, after all.

   This bug has been reported when running the protected mode version of
   TLIB (OS2TLIB.EXE) under a pre-release Windows-NT, and also when
   running the DOS version of TLIB under Microsoft's just released
   "Windows For Workgroups" product.

   TLIB 5.00d contains experimental code to detect the Microsoft network
   problem, and to try to work around it by retrying the library file
   length verification several times, using two different methods, and
   displaying various debug messages as it does so.

   If the Microsoft network problem is detected, TLIB will display the

      Probable Microsoft network bug detected.  Retrying:
      <various other messages may follow>

   If you see this message, please use "PrtScrn" to save it, and please
   call us.

5) Changed: the SWIDTH (screen width) configuration parameter is no longer
   limited to a maximum of 140 characters.  If another program is driving
   TLIB, you may wish to configure SWIDTH to a very large number (the
   limit is now 32765), to prevent TLIB from splitting its messages into
   multiple lines.  This makes it easier for a program to tell where one
   TLIB message ends and the next begins.

5.00c         23-Nov-92

1) Fixed: a build error in the real-mode (DOS) version which caused TLIB
   to abort with:
      ERR: u_tM
   This error also caused the TLIB banner to say that it was version
   "5.00b" instead of "5.00c".

5.00b/5.00c  16-Nov-92

1) Fixed: a bug which caused TLIB to fail "awaiting access..." when
   "@tlibwork.trk" was used as a file list or a version number

2) Improved: SCOPY 5.0e, so that it can copy a tracking file without
   waiting for TLIB to close it.

3) Fixed: a bug which prevented an EB (extract for browse) command from
   replacing an already-existing read-only browse mode copy of a file,
   even when REPLROBR Y was configured, if you also had the file checked-
   out for modification in another directory.  [Brian W.]

4) Fixed: a bug which caused
      ERROR: "-n" may not be used in this context.
   when the M (migrate) command was used to migrate changes in a project-
   level reference directory.  [Andy S.]

5) Improved: some error checking & messages.

6) Fixed: garbled error message:
      ERROR: "file.ext" is not on the same drive as WORKDIR (::)
   [Keith B.]

5.00b         23-Oct-92

1) Fixed: it turned out that the tracking file support changes made
   in TLIB 5.00a didn't work under Novell Netware, due to a bug
   in Netware (it doesn't flush directory information to disk when
   a DUP'd file handle is closed).  TLIB 5.00b adds code to detect
   this situation, issue a warning, and henceforth work around the
   problem.  [Bruce E.]

2) Fixed: When file "region locking" wasn't working (say, because
   SHARE wasn't loaded), TLIB 5.00a was emitting a large number of
   obnoxious error messages.  This has been reduced to a single, helpful
   error message.  [Bruce E.]

3) Fixed: TLIB 5.00a was still, under some circumstances, doing
   unnecessary close/reopens of the tracking files, which slowed it
   down a bit.  This has been corrected.

5.00a         21-Oct-92

1) Fixed: a few misleading messages in TLIBCONF, and a TLIBCONF bug
   which prevented users from picking one of the displayed menu choices.

2) Changed: TLIB (both DOS and OS/2 editions) so that it will echo
   error/warning messages and prompts to "standard error" (stderr) as
   well as "standard output" (stdout) when stdout has been redirected.

   This was done because some ex-Unix users like to redirect stdout
   to NUL, which used to cause them to miss important error messages.

   To see how this works, you could do:

       os2tlib e nonexistantfile >nul

   Only the error message is echoed to stderr, so all you'll see is
   something like this:

       ERROR: No such library file: "f:\srclibs\nonexist._$"

3) Added: the "-e" command-line option to TLIB, to override TLIB's
   automatic determination of whether stdout has been redirected.

   You may specify "-e1" to tell TLIB that stdout has not been
   redirected, so that TLIB will NOT echo error/warning messages and
   prompts to stderr.

   This is mainly for use with TEE to capture the output from the OS/2
   edition of TLIB into a file.  Examples:

       os2tlib -e1 | tee >tlib.log
   or  os2tlib -e1 u *.c,*.h My comment | tee >tlib.log

   You can also specify "-e0" (or just "-e") to force TLIB to echo
   error/warning messages and prompts to stderr even when stdout has
   not been redirected, though we can't think of any good reason to
   do this.

   Note: this option was documented incorrectly in the user manual
   (the descriptions of the "-e1" and "-e0" options were swapped).

4) Fixed: TLIB to prevent an unnecessary warning & question when using
   the APX (promote exclusion) command, similar to the following:

      Warning: promote of yourfile.c [v=X] to RELEASE will replace [v=5].
      Promote it anyhow? Y

5) Fixed: A bug in which the default PATH configuration parameter (i.e.,
   the "CP" command setting) was incorrect.  Symptom was that the "L"
   (library files) wild-card search mode didn't work without PATH being
   configured.  [Ann K.]

6) Fixed: some subtle, unreported concurrency bugs.  TLIB was opening
   its temporary files ($TLIB_TM.*) for shared (rather than exclusive)
   access, with the result that if TLIB was simultaneously running in
   two sessions, they could interfere with each other's temporary files.
   This caused files to sometimes be skipped when processing wild-cards,
   and it generated the following error message:

        ERROR: reading d:\$TLIB_TM.0 (read nn names, expected mm).

7) Changed: tracking file support to reduce the frequency with which
   tracking files are closed and reopened.  This should help performance
   a bit for some commands, such as EBF (freshen browse-mode files).

8) Changed: The `F' (fast/freshen) option of the `E' (extract) command
   now always extracts a source file which doesn't already exist.

   [Note: in 5.00f & later, this behavior can be changed via the ELSEWHERE
   configuration parameter.  18-Jan-93]





Last modified: 19-May-2004 (version 265)
Copyright © 1992-2004, Burton Systems Software.