    4.3  FORMAT OF LINK COMPATIBLE OBJECT FILES


				     NOTE

		       Section	4.3   is   interesting
		       material for users who wish  to
		       know the load format of LINK-80
		       relocatable object files.  Most
		       users will want	to  skip  this
		       section, as it does not contain
		       material  neccessary   to   the
		       operation of the package.


    LINK-compatible object files consist of a bit stream. Individual fields
    within the bit stream are not aligned on  byte  boundaries,  except  as
    noted below. Use of a bit stream for relocatable object files keeps the
    size of object files to a minimum, thereby	decreasing  the  number  of
    disk reads/writes.

    There are two basic types of load items: Absolute and Relocatable.	The
    first bit of an item indicates one of these two types. If the first bit
    is a 0, the following 8 bits are loaded as an  absolute  byte.  If	the
    first bit is a 1, the next 2 bits are used	to  indicate  one  of  four
    types of relocatable items:

	 00	   Special LINK item (see below).

	 01	   Program Relative. Load the following 16 bits
		   after adding the current Program base.

	 10	   Data Relative. Load the following 16 bits after
		   adding the current Data base.

	 11	   Common relative. Load the following 16 bits
		   after adding the current Common base.

    Special LINK items consist of the bit stream 100 followed by:

		   a four-bit control field

		   an optional A field consisting of a two-bit address type
		   that is the same as the two-bit field  above  except  00
		   specifies absolute address

		   an optional B field consisting of 3	bits  that  give  a
		   symbol length and up to 8 bits for each character of the
		   symbol

    A general representation of a special LINK item is:

	 1 00 xxxx   yy  nn	zzz + characters of symbol name
		    --------   ---------------------------------
		    A field		  B field

	 xxxx	   Fout-bit control field (0-15 below)
	 yy	   Two-bit address type field
	 nn	   Sixteen-bit value
	 zzz	   Three-bit symbol length field

    The following special types have a B-field only:

	 0	   Entry symbol (name for search)
	 1	   Select COMMON block
	 2	   Program name
	 3	   Request library search
	 4	   Extension LINK items (see below)

    The following special LINK items have both an A field and a B field:

	 5	   Define COMMON size
	 6	   Chain external (A is head of address chain, B is name of
		   external symbol)
	 7	   Define entry point (A is address, B is name)

    The following special LINK items have an A field only:

	 8	   External - offset. Used for JMP and CALL to externals
	 9	   External + offset. The A value will be added to the	two
		   bytes  starting  at	 the   current	 location   counter
		   immediately before execution.
	10	   Define size of Data area (A is size)
	11	   Set loading location counter to A
	12	   Chain address. A is head of chain, replace  all  entries
		   in chain with current location counter. The	last  entry
		   in the chain has an address field of absolute zero
	13	   Define program size (A is size)
	14	   End program (forces to byte boundary)

    The following special LINK item has neither an A nor a B field:

	15	   End file

    An Extension LINK item follows the general	format	of  a  B-field-only
    special LINK item, but contents of the B-field are not a  symbol  name.
    Instead, the symbol area contains one character to identify the type of
    Extension LINK item, followed by from 1 to 7 characters  of  additional
    information.

    Thus, every Extension LINK item has the format:

	 1 00 0100 zzz i jjjjjjjj

    where

	 zzz	   may be any three bit integer (with 000 representing 8),

	 i	   is an eight bit Extension LINK  item  type  indentifier,
		   and

	 jjjjjjjj  are zzz-1  eight  bit  character  of  information  whose
		   significance depends on i

    At present, there is only one Extension LINK item:

	 i	   = X'35' COBOL overlay segment sentinel

	 zzz	   = 010 (binary)

	 j	   = COBOL segment number -49 (decimal)

	 When the overlay segment sentinal is encountered  by  the  linker,
	 the current overlay segment number is set to the value of j+49. If
	 the previously existing segment  number  was  non-zero  and  a  /N
	 switch is in effect, the data area is written to disk	in  a  file
	 whose name is the current program name and whose extension is Vnn,
	 where nn are the two hexadecimal digits  representing	the  number
	 j+49 (decimal).
