
Document ID: Q79259

Product: Microsoft BASIC Compiler
Title: Microsoft Library (.LIB) Format, Created by LIB.EXE

Updated: 27-DEC-1991
Operating System Versions: 6.00 6.00B 7.00 7.10
Operating Systems: MS-DOS

Summary:

This article describes the components of the Microsoft Library Format
(for .LIB files created by the LIB.EXE Library Manager). The Microsoft
Library Format is consistent between compatible Microsoft languages.
While future library utilities will remain backward- compatible with
the older library formats, the actual library format itself is subject
to change. This information is taken from Chapter 5 of the "Microsoft
C Developer's Toolkit Reference," which contains more in-depth
information on the Microsoft Library Format.

This information applies to Microsoft QuickBasic versions 4.0, 4.0b,
and 4.5 for MS-DOS, to Microsoft Basic Compiler versions 6.0 and 6.0b
for MS-DOS, and to Microsoft Basic Professional Development System
(PDS) versions 7.0 and 7.1 for MS-DOS.

More Information:

Library Header Record
---------------------

Object code library .LIB files under MS-DOS always contain blocks of
data in multiples of 512 bytes. The first record in the library is a
library header. This record is structured the same as a Microsoft
object-module-format (MS OMF) record. That is, the first byte of the
record identifies the record's type, and the next two bytes specify
the number of bytes remaining in the record. Note that the length
field is byte-swapped (in other words, the low-order byte precedes the
high-order byte). The record type for this library header is F0 hex
(240 decimal).

Modules in a library always start at the beginning of a page. Page
size is determined by adding three (one for the record type byte and
two for the record length field itself) to the value in the record
length field; thus the library header record always occupies exactly
one page. Legal values for page size are given by the range of 2
through the n, where n is a value from 4 through 15.

The four bytes immediately following the length field are a byte-
swapped long integer specifying the byte offset within the library of
the first block of the dictionary. The next two bytes are a byte-
swapped word field that specifies the number of blocks in the
dictionary. (Note: The Library Manager, LIB.EXE for MS-DOS, cannot
create a library whose dictionary requires more than 251 512-byte
pages.)

The next byte contains flags describing the library. One current flag
definition is "0x01 = case sensitive". This applies to both regular
and extended dictionaries. All other values are reserved for future
use and should be 0. The remaining bytes in the library header record
are not significant. This record deviates from the typical Microsoft
OMF record in that the last byte is not used as a checksum on the rest
of the record.

Object Modules
--------------

The first object module in the library immediately follows the header.
The first object module is followed in turn by all other object
modules in the library. Each module is in Microsoft OMF. Individual
modules are aligned so that they start at the beginning of a new page.
If, as is commonly the case, a module does not occupy a number of
bytes that is exactly a multiple of the page size, then its last block
is padded with as many null bytes as are required to fill it. This
special format is covered in detail in the "C Developer's Toolkit
Reference."

Dictionary Blocks
-----------------

The remaining blocks in the library compose the dictionary. The number
of blocks in the dictionary is given in the library header. Dictionary
length is in 512-byte blocks. Detailed information on the exact
content and format of the dictionary are contained in the "C
Developer's Toolkit Reference."

Extended Dictionary
-------------------

The extended dictionary is optional and indicates dependencies between
modules in the library. Versions of LIB.EXE earlier than version 3.09
do not create an extended dictionary. The extended dictionary is
placed at the end of the library. Again, see the "C Developer's
Toolkit Reference" for details on the structure of the Extended
Dictionary.

Additional reference words: 6.00 6.00b 7.00 7.10 4.00 4.00b 4.50