
[1m[32m        ____     ___        ___     ___ ___ ___ ___ ____      ___ ___ ___[0m
[1m[32m         /  /__//_         /__ /  //_ //__ /  //_    /  / / //_ //__//_  [0m
[1m[32m        /  /  //__        ___//__//__/___//__//     /  /_/_//  //  \/__  [0m

[1m[32m------------------------------------------------------------------------------[0m
   - FOR ABO'S CONTACT US AT:   BP:28 1170 WATERMAEL-BOITSFORT 1 BELGIUM!!...

[1m[32m------------------------------------------------------------------------------[0m
                           - DON'T SEND ANY DISKS -

[1m[32m------------------------------------------------------------------------------[0m



                       [33m THE LEGENDARY >> SUBSOFTWARE << IN 87/88/89/90/91!!...
                       [1m[32m ------------------------------------------------------


============
Introduction
============

BLINK is a linker written as a replacement for ALINK. It is fully
ALINK compatible accepting all command line options and WITH files. 
BLINK supports many additional options not found in ALINK.

BLINK has been produce through the combined efforts of
	The Software Distillery
	currently comprised of:
	Dave Baker
	Ed Burnette
	Stan Chow
	Jay Denebeim
	Gordon Keener
	Jack Rouse
	John Toebes
	Doug Walker

It may be freely distributed provided:
	1) No charge is made for its use or distribution
	2) This manual is distributed along with the executable module
	3) No modifications are made to the executable module

Failure to comply with these rules will simply work to convince people
that there is no value in producing good freely redistributable software.

The latest version of BLINK and our other projects are available from
our BBS:
	Deep Thought	(919) 471-6436
Address all correspondence to 
	John Toebes
	The Software Distillery
	235 Trillingham Lane
	Cary NC 27511

Let us know what you do and don't like about it. There are several
enhancements that WILL be out in the next major release:
	* Overlay support
	* Complete XREF of library references
	* Additional hunk coalescing features
	* More finely tuned code

===========
Using BLINK
===========

Command Line Syntax.
--------------------

BLINK is driven by keyword parameters in any order indicating the
action to be performed. The basic syntax is:

BLINK [FROM][ROOT] files  [TO file][WITH file][VER file]
[LIBRARY | LIB files][MAP file map_options][XREF file][options]

where:
 file	means a single file

 files	means zero or more file names separated by a comma, plus sign
	or space

and the following keywords are recognized:

 FROM files	specifies the object files that are the primary
		input to the linker. These object files will
		always be copied to the root of the object
		module. You must specify at least one object file
		for the root. If it appears as the first option
		to BLINK then the FROM keyword is optional and may
		be omitted. ROOT is an acceptable synonym for FROM.
		FROM may be used more than once with the files for
		each FROM adding to the list of files to be linked.

 TO file	specifies target object module to create. If
		omitted it defaults to the same name as the first
		object module listed on a FROM option with its .o
		suffix removed.

 WITH file	specifies a file containing BLINK command options
		to be processed for this link. More than one WITH
		file may be specified as may WITH files contain
		WITH statements. The contents of all with files
		will be treated as if they were specified on the
		BLINK command line.

 VER file	a destination file to contain all linker output
		messages. If you do not specify it then all
		messages go to the terminal.

 LIBRARY files	specifies the files to be scanned as libraries. 
		Only referenced segments from library files will
		be included in the final object module. LIB is a
		valid synonym for LIBRARY.

 XREF file	specifies a file to which the cross reference
		information will be written. If not specified
		and a cross reference is requested with the MAP
		option, the cross reference listing will appear as
		part of the map file.

 FASTER		a do-nothing option that is included only for
		ALINK compatibility.

 VERBOSE	causes BLINK to print out the names of each file
		as it processes it.

 NODEBUG	supresses any HUNK_DEBUG, symbol table
		information or hunk names in the final object
		file. This is equivalent to the object file
		that would be produced if STRIPA were run on the
		final object file

 SMALLDATA	causes all DATA and BSS sections to be Coalesced
		into a single hunk. This is useful for combining all
		data hunks from a program into a single hunk - decreasing
		load time but potentially producing larger hunks that are
		difficult to scatter load

 SMALLCODE	causes all CODE hunks to be Coalesced into a single hunk.

 WIDTH n	sets the maximum line length for the map and cross
		reference listings. This is useful when sending
		the output to a divice that has different line
		length requirements. If not specified it defaults
		to 80.

 MAP file options - specifies a file to which a map is to be written.
		options controls which parts of the map will be
		written. See the MAP section for more information.

 OVERLAY	specifies the start of an overlay tree terminated
		by a line consisting of a single pound sign '#'.
		See the OVERLAY section for more information.


 DEFINE		allows for definition or re-definition of a symbol
		Useful for stubbing yet unwritten routines, resolving 
		unresolved references and link time patches to your
		code. Possible combinations are: DEFINE symbola = 
		symbolb where you want symbola to be resolved to symbolb
		and symbolb has been previously defined in your code.
		DEFINE symbola = some constant where the constant is
		either a decimal or hexadecimal number. If hexadecimal
		number is input it must be preceded with a $ sign. ie.
		DEFINE symbola = $dead or DEFINE symbola = 1234. 		

Example Command Line Usage:
---------------------------

BLINK 

==========
WITH Files
==========

Although BLINK is completely compatible with ALINK WITH files the order
and format used to input options is quite position independant. FROM files
and LIBRARY options can span several lines with or without line continuation
characters "+". I hope the examples below reflect this remarkable flexability.
Gee a tool that is user-friendly. We must be doing something wrong !

Example WITH files
------------------

from c.o vt100.o init.o window.o xmodem.o remote.o kermit.o script.o
lib lib:lc.lib  lib:amiga.lib
verbose smallcode smalldata
to vt100

or yet another way

FROM c.o 
vt100.o
init.o window.o
xmdem.o remote.o kermit.o script.o
LIBRARY
lib:lc.lib
lib:lc.lib
MAP ram:vt100.map
TO df1:vt100/vt100
SMALLCODE
SMALLDATA
VERBOSE

 
or better yet, a standard sort of header WITH file that you can append
the specifics to the end of the file and save some typing every time you
need to create a WITH file.

LIBRARY
ram:lc.lib
ram:amiga.lib
SMALLDATA
SMALLCODE
MAP
ram:mymap
VERBOSE
XREF ram:myxref
FROM c.o
vt100.0 init.o window.o xmodem.o remote.o kermit.o script.o

In the above exmaple you will notice that no TO file was specified.
BLINK will atomatically create a TO file for you in the current directory
with the name of the first module in you FROM list no including the
startup routine in this case c.o. So in the above example the executable
will be called VT100 without the .o extension. Nice touch EH! 
 
========
Overlays
========

Not supported in this release

=========
Map Files
=========
MAP <map file> <map options>
<map options> are H S X F O PLAIN FANCY
MAP [[filename],option,option,...]
	filename	map output file
	option		letter of report to produce (see below)

WIDTH n		columns allowed in map file (default 80)
INDENT n	columns to indent on a line (included in width) (default 0)
		default 0
HEIGHT n	lines on a page in map file (0 indicates no pagenation)
		(default 55)
HWIDTH n	width of hunk names (default 8)
FWIDTH n	width of file names (default 16)
PWIDTH n	width of program unit names (default 8)
SWIDTH n	width of symbol names (default 8)
FANCY		flag to allow printer control characters in the map file
		(this is the default condition)
PLAIN		turns off the FANCY option
BUFSIZE <n>

map:	map has sub keywords, they are:
		h - MapHunk
		s - MapSym
		x - MapXref
		f - MapFile
		o - MapOvly
	additionaly it will accept other keywords that
	can have parameters:
		width	- (1-132) def 80
		height	- (1-255) def 55
		Hwidth	- (1-255) def 8 (hunk name width)
		Fwidth	- (1-255) def 16 (file name width)
		Swidth	- (1-255) def 25 (Symbol width)
		indent	- (1-255) def 0 (line indentation)


====================
BLINK Error messages
====================
  1 Parser failure.
  2 Pass 1 failure.
  4 Coalesce failure.
  5 Map failure.
  3 Pass 2 failure.
  6 Symbol Initialization failure.
200 Out of memory!! 
300 Read error on file '%s' 
301 Write error on file '%s' 
400 *** Break: Blink terminating. 
425 Cannot find library %s 
426 Cannot find object %s 
444 Hunk_Symbol has bad %d symbol %s 
445 Invalid HUNK_SYMBOL %s 
446 Invalid symbol type %d for %s 
447 %s is a load file 
448 Invalid hunk #%d 
449 No hunk_end seen for %s 
501 Invalid Reloc 8 or 16 reference 
502 Distance for Reloc16 > 32768 
503 Distance for Reloc8 > 128 
504 Distance for Data Reloc16 > 32768 
505 Distance for Data Reloc8 > 128 
506 Can't locate resolved symbol %s 
507 Unknown Symbol type %d 
508 Symbol type %d unimplemented 
509 Unknown hunk type %d in Pass2 
600 Invalid command '%s' 
601 %s option specified more than once 
602 Unable to open map file '%s' 
603 %s is not a valid number 
604 with file is not readable 
605 Cannot open with file '%s' 
606 Unable to open output file '%s' 
607 No FROM/ROOT files specified 
999 Unknown internal error <<<let us know if you get this one

=============
BLINK History
=============
5.5 Released 18 August 1986
5.6 Released 20 August 1986
	Fixed problem with map file generation
	Fixed problem with map file error messages
5.7 Released 22 August 1986
	Corrected incompatibilities with Lattice 3.02 and 3.03 generating extra
	   HUNK_ENDs.
	Added TABS to the with file/command line parser
	Fixed messages so last unresolved reference is not overwritten by VERBOSE
	   messages in PASS2.
6.0 Unreleased
	Added support for patching reloc16s to allow that -r option of Lattice to
	   used with Blink.
	Rewrote map sorting algorithm to significantly cut map generation time.
	Corrected various parser bugs.
	Added ability to BLINK files linked with ALINK
6.1 Unreleased
	Added link time to map page headers.
	Added define statement.
	Corrected problems in handling of CHIP and FAST hunk types
6.2 Unreleased
	Rewrote algorithm for patching reloc16s.
	Moved map to after pass2.
	Reduced memory usage by changing required alignment boundary from 4 to 2.
	Added suppression of dummy entry hunk.
	Added default TO file logic.
6.3 Unreleased
	Enhanced algorighm for pathing reloc16s to produce optimal size in two
	   passes.
	Reduced size of patch jumps to 6 bytes.
	Added support for allowing startup code to initialize BSS section.
	Added support to allow startup code to produce a completely reentrant
	   module to be used with 1.2 resident command.
	Added minimum size for memory requests to reduce likelyhood of a GURU when
	   system is too tight on memory.  If less than 1K contiguous is available,
	   BLINK will terminate.
6.4 Released 22 September 1986
	Added cross reference of libraries to the map
	Major clean up oc return code checking internally
	Reduced large sections of code
	Deleted REACH and REALREACH keywords from parser.
	Corrected suppressing of dummy entry hunk.
Apparent bugs in 6.7 found by HiSoft:
If you try a BSR.S to an external the address produced is wrong by 1 byte.
Do not try (PC) relative references to externals in separate hunks. BLINK
will not report an error, but your program won't run.

