LU86.CMD CP/M-86 Ver. 4.05 October 03, 1984 NAME lu86 - create and maintain a Novosielski library file. SYNOPSIS lu86 option lbr_file_name[.lbr] [ file ] ... DESCRIPTION Library Utility 86 (LU86) is a program to allow combining multilple files into one larger file. It will run on all 16 bit versions of CP/M, MP/M and CCP/M. Version 4.05 replaces all prior versions. The major revisions are: the addition of CRC calculation and checking to improve reliability, the addition of member time and date stamping, and support for exact file lengths of library members. Error reporting and recovery have also been improved. The following options are recognized and supported: -l Display a directory list of the specified library. The redirection operator '>' can be used to create a file of the directory list. -t (Table) A synonym for -l: also produces a directory list. -a Extracts all files from the specified library file. -e Extracts only specified file(s) from the library. -u Add to or create a library file. An existing library will be updated with files from the command line file list. If the library does not exist, it will be created. Wildcards may be used when specifying the file. When a file is added to a library, the time and date file stamp is read and stored in the library | directory. LU86 uses the following path to find | the time and date of a file: the 'update' stamp, | the 'create' stamp, the current time and date. If a file to be added already exists in the library, LU86 will delete the existing libary member, and add the new file to the end of the library. In terms of directory usage and library space used, this is the same as adding a completely new member. - 1 - LU86.CMD CP/M-86 Ver. 4.05 October 03, 1984 Prior versions of 16-bit LU and LU86 would re-use deleted directory entries when performing an add/update operation. LU86 v4.x will not re-use deleted directory entries, and requires a reorganization to reclaim deleted directory entries. This was done to provide an indication of unused space in the lbr file. If the -l or -t command shows deleted directory entries, then the lbr file contains unused 'lost' space. -d Delete a file from a library. This tags the specified member entrie(s) as deleted, and 'loses' the space that had been allocated for the deleted member(s). -r Reorganize the library file by creating a new file, and copying active members of the old library to it. Reorganization gets rid of unused space lost to delete and duplicate filename update operations. If you are dealing with a large library and are using floppies, you might not have room on the default disk to reorganize the library file. In this case, put the disk containing the existing lbr file you want to reorganize in one drive, and put a floppy disk with a lot of room and lu86.exe in another drive. For an example let us assume your lbr file is on B: (B:biglbr.lbr), and lu86 and room is on A:. Log in drive A: and reorgainze the library thusly: A>lu86 -r b:biglbr This will open biglbr.lbr on drive B:, and put the reorganized result on the default disk, in this case, drive A:. Whenever a new member is added to a library, a value called the CRC (Cyclic Redundancy Check) word is calculated and stored in the member's directory entry. When the member is extracted from the library, the calculation is done again, and compared with the saved value. If the two values do not match, it is an indication that the member was damaged in some way while it was in the library. The extract will still be performed, but a message warning that the extracted copy is questionable will be displayed. This feature is especially valuable for libraries which have been created on another system and transmitted by phone (possibly several times) before you receive them. It helps insure that the extracted files are faithful reproductions of the files - 2 - LU86.CMD CP/M-86 Ver. 4.05 October 03, 1984 originally inserted. Members added by LU86 versions prior to 4.0 do not have CRC words. The CRC calculation is supressed for earlier libraries. LIBRARY FORMAT The entire library file and each of its members are conceptually organized into "sectors", each sector being 128 bytes long. Each sector of the file belongs to at most one library member. Each member comprises a whole number of sectors. The last sector of a member may, however, be logically declared as a "Short Sector". Although it physically contains 128 bytes, a Short Sector contains one or more "pad" bytes at the end for the purpose of maintaining the structure of the library file as a whole. A member may have as few as 0 sectors. Members may be referred to by a name of up to 8 characters, and an extension of up to 3 characters. The naming rules are identical to those for the naming of CP/M-80 disk files. Members must be uniquely named; any given combination of name and extension may identify at most one member. The start and end points of each member are defined by the pointers in a "directory entry" for the member. There are no embedded start or end marks separating the members. All sectors between the start and end sectors of a member belong to that member. The members need not appear in the library in the same order that their directory entries appear in the directory. The directory information in an LU style library is contained in the same file as the data files, or members. The amount of space to be allocated to the directory must be specified by the user when a new library is created, but can be changed when the file is reorganized. The size of each LU directory entry is 32 bytes, which means each four directory entries take up one 128-byte 'sector' of the library file. The LU directory uses one entry for control information itself, so the number of directory 'sectors' needed for a library of m members is (m + 1) / 4, rounded up to the next whole number. The user need not be concerned with this discussion, as directory size is calculated by the program. All directory sizes are input and output in terms of entries, each entry being a potential member file. The program adjusts directory size to an integral number of sectors. MISFEATURES (BUGS) Ideally, wildcards would work with the -l (or -t) -d and -e commands, but currently do not. - 3 - LU86.CMD CP/M-86 Ver. 4.05 October 03, 1984 Options may not be stacked or be specified more than one at a time. One execution of LU86, one option. Wildcard expansion of the -u input list is limited to 128 filenames. Wildcard expansion is not supported for pathnames (MS-DOS version). ACKNOWLEDGEMENTS Gary Novosielski designed the LU format and wrote the first programs supporting 'LBR' files. He has continued to maintain and improve the LU format by distributing a file of the offical LU format definition. The current version of this definition is contained in LUDEF5.DOC. Interested users are directed to that file for more complete information on the LU format. Large portions of this document are excerpts from the file LU300.DOC, which documents the operation of the CP/M version of LU (an implemenation far superior to LU86, by the way). Any particulary lucid and useful sections of this document probably originated with Gary Novosielski. The Turgid Obfuscation is probably mine. This program had its genesis in the UNIX progam LAR.C. LAR was rendered into C that mortal compilers could understand by Tom Jennings, who renamed the source to LU.C. I used LU as a base and have renamed the effort to LU86. LU86, ver 4.x is a 'C' program, and is compiled with version | 1.33C of the Computer Innovations C86 compiler. This document replaces a document of the same name, dated September 12, 1984. Changes are highlighed with a "|" in the left margin. CHANGE HISTORY Ver 4.0, September 3, 1984. Original release. Ver 4.01, September 10, 1984. Fixed add routines to exclude the directory portion of a pathname, retaining only the 11 character file name for use in the LU directory. (MS-DOS version). Ver 4.02, September 12, 1984. Fixed update function so that it distinguishes between not being able to find or read a file (in which case it creates a new directory), and reading a file which is not a library (in which case, it aborts). Prior to this fix, trying to update a file with a .lbr extension, which was not a Library, would destroy it. - 4 - LU86.CMD CP/M-86 Ver. 4.05 October 03, 1984 Ver 4.03, September 25, 1984. Fixed bug that limited input file list to 30 names.. Now handles 128 names as advertised. Ver 4.04, September 29, 1984. Improved memory allocation error checking in the CP/M version. | | Ver 4.05, October 3, 1984. Added support for MP/M-86 and CCP/M | file time and date stamping. Unfortunately, with the CP/M-type | operating systems, you can find out the date of a file, but you | cannot set the time date of a file. Therefore, extracted library | members will not retain the lu86 time and date. Paul J. Homchick Chimitt Gilman Homchick, Inc. One Radnor Station, Suite 300 Radnor, PA 19087 - 5 -