RELEASE.TXT -- TLIB Release Notes (formerly RELEASE.DOC) ----------- NEW PHONE AND FAX NUMBERS: ------------------------- 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. BBS AND WEB SITE: ---------------- Our BBS is no longer kept up to date. Instead, please visit our Web site at: http://www.burtonsys.com/ ------------------------------------------------ Bug fixes and other changes to date in TLIB 5.xx (in reverse-chronological order) 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 improved. 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 tag, when parsing HTML files in Native Project mode. When an 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 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 problems. [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 wrong. 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%) endif else 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% else let dir2=unq '%curpath%' spl -1 iff ('%dir2%' eqi 'dev') or ('%dir2%' eqi 'tst') or ('%dir2%' eqi 'rel') workdir .. set LEVEL=%dir2% else let dir3=unq '%curpath%' spl -1 iff ('%dir3%' eqi 'dev') or ('%dir3%' eqi 'tst') or ('%dir3%' eqi 'rel') workdir ..\.. set LEVEL=%dir3% endif endif endif 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 program). [[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 configured. [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 endif or if *.snp deletesrc y endif or if *.snp replace y deletesrc y endif 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!" and "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 parameters. 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 problem. 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 incomplete. 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: o A tiny TLIB icon is shown for source files that are under version control (i.e., for which a corresponding TLIB library file exists). o A red check-mark is superimposed for files that you have checked out for modification. o 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.) o 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 comments. 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 records 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 endif 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 5.52h/beta). 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 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 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 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 tag, which can be placed in the 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 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 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 requires a tag. Without a tag, TLIB must assume that all such links point to other web sites. However, TLIB can often handle links like 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 dialogue. 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 #" checked. 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 directives. 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, myfile.c: 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 , 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 directives. 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 window. 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 purpose: NUMLIBDIR LIBDIRQ , The default is "NUMLIBDIR 1" and no LIBDIRQ parameters (meaning that users will not be asked where TLIB library files should be created. 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/ programs. 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" command. 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) ERROR: Couldn't reopen T:\TLIB\PRJS\DEV\TLIBWORK.TRK 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 Y ERROR: Could not create journal file: "retry?" Err=123, errno=22 Retry? n 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 CONFIG.TXT or CONFIG.WRI. 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 case). 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: FILETYPE EOFTOL (or just "FILETYPE E") 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: FILETYPE RUNLEN (or just "FILETYPE R") 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 upper-case. 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 5.51.2.0. 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 problem. 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 BINARY ENDIF 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 names. 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 quoted. 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: ERROR: DO_CMPR_P(1,...,'SMOOTH NOTEXT INMEM') = 1 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 "" on the TLIB for Windows "About" screen. The fixed version shows version number 5.51.0.1. 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 annoying. 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: REFNEWLN REFNEWLN CRLF REFNEWLN CR REFNEWLN LF 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 files. 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 versions. [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 variable. 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 (WTLIB16.EXE). 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 support2@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 commands. [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 combination. [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% ENDIF However, you can still do tricky things like this: SET xxx=endif IFF 0 SAY Note: this should not display %xxx% 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 mode. [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,\ doc,txt,frx extension c,h,asm,bat,pas,,cmd,me,__m,__l,frm,bas,ico\ ,doc,txt,frx [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,\ doc,txt,frx extension c,h,asm,bat,pas,,cmd,me,__m,__l,frm,bas,ico\ ,doc,txt,frx [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 updated: [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 Notepad.) 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: TLIB TO @TLIBWORK.TRK ...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: TLIB SMN TLIBWORK.LIS @TLIBWORK.TRK REM - Then configure "FIND1FILE_Y", and use @TLIBWORK.LIS instead REM of @TLIBWORK.TRK to specify the files: TLIB C FIND1FILE_Y TO @TLIBWORK.LIS ...or, combine it into one long TLIB command line: TLIB SMN TLIBWORK.LIS @TLIBWORK.TRK C FIND1FILE_Y TO @TLIBWORK.LIS 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., TLIB E TEMPDIR\MYFILE.* 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 5.4.0.78 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 "!" character. [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 or: TLIB {command} @@myproj.dsp[2] or: 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 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 TLIB's LOCKING, READONLYB, TRACK, KEYFLAG, and LOGFLAG configuration 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 copyright. 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 "" 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: TLIB SPO CFILES.LIS *.* 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: TLIB SPN MYPROJ.LIS @@MYPROJ.VBP The list of files is created in MYPROJ.LIS. Similarly, to list them to the console, you could use: TLIB SPN CON @@MYPROJ.VBP For another example, the following command would list the source files in a Watcom C/C++ project, plus the application's #include files: TLIB SPN CON @@MYPROJ.WPJ[2] 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, TLIBCVR2.EXE, TLIBCVRT.EXE (and now TLIBTLIB.PL). 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 pack. 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 message. 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 received. [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% SET LWRKPAT=%TLIBCFG:WORKDIR% 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: AUTOBRNCH 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 behavior. 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 number. 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 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.] See also: READONLYT, REPLROBR. 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 development@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 directory. 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 Windows.) 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 Windows. - 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 only. - 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. LONGNAMES 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-DOS³native³DosBox³Win-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)³ º ³ ³ ³ ³ ³ ³ ÓÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÐÄÄÄÄÄÄÁÄÄÄÄÄÄÁÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÙ Legend: 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 endif iff '%TLIBNAME%' eqi 'TLIB2' REM This really is not needed, because it is the default: longnames y endif 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.: EXTENSION C,H,BAT,HTML 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 was: 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: office@burtonsys.com 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: vvv-sssss-nn-262065096530 ...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 Windows.) 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 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 variables. - 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 combination. 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= where 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: OPERATOR RESULT TYPE OPERATION - 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: OPERATOR RESULT TYPE OPERATION + 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 example: EXPRESSION MEANS EVALUATES TO 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 necessary. 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 example: 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. ³ ³ Examples: ³ ³ "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'. Examples: "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 WARN ABORT 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 example: 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 ENDIF IFF ELSE ENDIF 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". Example: iff '%NECESSARY%'=='' warn Oh, dear! Environment variable %%NECESSARY%% is undefined! endif Example: let ONE=5-4 iff %ONE%==1 say Hey, it works! else abort This is impossible! endif ³ Example: ³ ³ 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%' . '\') ³ endif ³ 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='' endif endif endif endif iff '' eq %pname% say Warning: personal.cfg not found, default config used. else 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. endif 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! else say (%x% MOD 3) = %EasyWay% (the remainder left after %x%/3) endif 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) approach. 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. 5.02g/á 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. 5.02f/á2 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). 5.02e/á8 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. 5.02e/á3 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) 5.02e/á 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, INSDEL, SPERRY, IBMUPDATE, PANVALET, and LIBRARIAN output formats. 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 f:\cus\tlibwork.trk. 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 automatically. 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: EXITPAUSE Y The default is: EXITPAUSE N 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: COLORIZE N To force TLIB to colorize error and warning messages, without testing whether ANSI.SYS support is available, you can configure: COLORIZE Y 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: º º COLOROFF  º º The default is: º º COLOROFF  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 settings: 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 or MAKEDIRS M 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: MAKEDIRS Y 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: MAKEDIRS N 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: SHOWLNAME N 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 befuddling. 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 " " etc. 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 " " etc. 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 corrected. [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 Manual.) 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:2% = "ABOMB" %TLIBCFG:WORKDIR:1:2% = "WORK\ABOMB" %TLIBCFG:WORKDIR:0:1% = "C:\WORK" %TLIBCFG:WORKDIR:0:2% = "C:\WORK\ABOMB" %TLIBCFG:WORKDIR% = "C:\WORK\ABOMB\" 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. 12-Jun-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 prohibited. 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). Example: TLIB.CFG contains: LEVEL n=REL d=H:\TLIBLEVS\REL\ w=N LEVEL n=TEST d=H:TLIBLEVS\TEST\ p=REL w=N f=Y 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 fails. [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 , 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. or 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 , 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 , 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. Summary: default SLASHCONT | 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 configured. (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 READONLYB 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. -------- Example: 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 configured: if *.c,*.h track y endif 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). Continue? ...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. [Dov] 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). Example: 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 IF EXIST .\FASTEBFT.LIS TLIB EBFL @FASTEBFT.LIS For large numbers of files, this is 5-8 times faster! Limitations: 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 directory. 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: FIND1FILE Y then TLIB will handle even exact file names as if they were wild-card specifications. 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 SUBDIR\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: COMMANDS U,UK,US,UD,UKM,UKS,E,ES,EB,... 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: COMMANDS U/O,UK/O,US/O,UD/O,UKM/O,UKS/O,E,ES,EB,... 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: COMMANDS U/O,UK/O,US/O,UD/O,UKM/O,UKS/O,E,ES,EB,EBS,L,T,H,Q COMMANDS U/O,UK/O,US/O,UD/O,UKM/O,UKS/O\ ,E,ES,EB,EBS,\ L,T,H,Q 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: COMMANDS U/O,UK/O,US/O,UD/O,UKM/O,UKS/O,E,ES,EB,EBS,L,T,H,Q but this is in error: COMMANDS U/O,UK/O,US/O,UD/O,UMK/O,UKS/O,E,ES,EB,ESB,L,T,H,Q 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: TLIB CW *LANTASTIC* Or configure: ID *LANTASTIC* 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 messages: 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. Example: 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) command: 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. BEWARE: IF YOU USE SKIPPED OR ZERO VERSION NUMBERS, THEN YOUR TLIB LIBRARIES WILL *NOT* BE COMPATIBLE WITH 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 "3.2.1.0". 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 one.) 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 bb\iostuff.c analyze.h aa\analyze.h compute.c f\analyze.h Then specifying REMOVE without RELATIVEPATHS... LISTBLD @exclude.lis myfiles.lis REMOVE results in: myfiles.lis ----------- compute.c 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: myfiles.lis ----------- aa\iostuff.c bb\iostuff.c analyze.h aa\analyze.h compute.c 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 endif REM - same as not configuring projlev at all: projlev And suppose that you do the commands: TLIB S TEST.SNP XYZ.C,*.H TLIB C "PROJLEV =" S TEST2.SNP XYZ.C,*.H 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 directory. 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) command. 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 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: 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 following: ERROR: Could not create "d:\direct" (for project-level *). or: 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: ELSEWHERE Y However, most users should leave this configuration parameter set to the default: ELSEWHERE N 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 " 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 message: Probable Microsoft network bug detected. Retrying: 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 specification. 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]