****************************************************
*						   *
* Anmerkung für Zusammensteller von Public Domain. *
*						   *
* Wird Blink auf irgendeiner Public Domain	   *
* Zusammenstellung mit aufgenommen, so ist es	   *
* unabdingbar, daß die original Dokumentation	   *
* "Blink.doc" mit kopiert wird. Diese Datei ist    *
* KEIN Ersatz.					   *
*						   *
* E. Lenz					   *
* Johann-Fichte-Straße 11			   *
* 8 München 40					   *
*						   *
****************************************************


============
 Einführung
============

BLINK ist ein Linker, der als Ersatz für ALINK geschrieben wurde. Er ist
gänzlich kompatibel zu ALINK und akzeptiert alle Befehlszeilenoptionen und
WITH Dateien. BLINK unterstützt viele zusätzliche Optionen, die in ALINK
nicht vorhanden sind.

BLINK wurde hergestellt durch die gemeinsame Anstrengung
    der Software Distillery
       gegenwärtig bestehend aus:
    Dave Baker
    Ed Burnette
    Stan Chow
    Jay Denebeim
    Gordon Keener
    Jack Rouse
    John Toebes
    Doug Walker

Er darf freizügig verteilt werden, solange:
    1) Keine Gebühr für seinen Gebrauch oder Verteilung erhoben wird
    2) Dieses Handbuch zusammen mit der ausführbaren Datei verteilt wird
       (Anmerk. d. Über. siehe oben)
    3) Keine Veränderungen an der ausführbaren Datei gemacht werden

Das Nichteinhalten dieser Regeln wird die einfache Wirkung haben, Leute
davon zu überzeugen, daß es keinen Wert hat gute, freikopierbare Programme
zu Erstellen.

Die neuste Version von BLINK und unseren anderen Projekten können über
unsere BBS bezogen werden:
     Deep Thought     (919) 471-6436
Richten Sie alle Korrespondenz an
     John Toebes
     The Software Distillery
     235 Trillingham Lane
     Cary NC 27511

Lassen Sie uns wissen, was Sie daran mögen bzw. nicht mögen. Es gibt
einige Zusätze, die definitiv in der nächsten größeren Überarbeitung
vorhanden sein werden:
  * Unterstützung von Overlays
  * Vollständiges XREF der Library-References
  * Zusätzliche hunk-Vereinigungsmöglichkeiten
  * Besser abgestimmter code

===================
Benutzung von BLINK
===================

Syntax der Befehlszeile.
------------------------

BLINK wird durch Schlüsselwortparameter gesteuert, die in beliebiger
Reihenfolge angegeben werden können. Der grundlegende Syntax ist:

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

wo:
 file	 eine einzige Datei bedeutet

 files	 bedeutet null oder mehr Dateinamen, die durch Kommata, Pluszeichen
	 oder Leerzeichen getrennt sind

Folgende Schlüsselwörter werden anerkannt:

 FROM files	  - gibt die Objektdateien an die als Primäreingang des
		    Linkers dienen. Diese Objektdateien werden immer
		    zur Wurzel des Objektmoduls kopiert werden. Es muß
		    mindestens eine Objektdatei für die Wurzel angegeben
		    werden. Wenn das FROM Schlüsselwort das erste
		    Schlüsselwort ist, ist es optional und kann weggelassen
		    werden. ROOT ist ein akzeptiertes Synonym für FROM.
		    FROM darf mehr als einmal verwendet werden, wodurch die
		    Dateien von jedem FROM zur Liste der Dateien die
		    gebunden werden hinzukommen.

 TO file	  - gibt die Zieldatei an, die erzeugt wird. Wenn dieses
		    Schlüsselwort weggelassen wird, wird der erste Name
		    der Objektmodule in der FROM Liste, ohne das .o, als
		    Zieldateiname verwendet.

 WITH file	  - gibt eine Datei an, die BLINK-Optionen für diesen
		    Linkvorgang enthält. Es darf mehr als eine WITH
		    Anweisung vorhanden sein und eine WITH-Datei darf
		    WITH-Anweisungen enthalten. Der Inhalt aller Dateien
		    wird so behandelt, als wäre er auf der BLINK
		    Kommandozeile angegeben worden.

 VER file	  - gibt eine Datei an, in der alle Ausgaben des Linkers
		    geschrieben werden. Wird keine VER-Datei angegeben,
		    so wird alles auf den Bildschirm geschrieben.

 LIBRARY files	  - gibt die Dateien an, die als Libraries durchsucht
		    werden. Nur wirklich benutzte Segmente von Library-
		    Dateien werden mit in das entgültige Objektmodul
		    übernommen. LIB ist ein gültiges Synonym für LIBRARY.

 XREF file	  - gibt eine Datei an, in der die Querverweise geschrieben
		    werden. Wird XREF nicht angegeben und wird eine
		    Querverweisliste mit MAP angefordert, so werden die
		    Querverweisinformationen als Teil der Mapdatei
		    geschrieben.

 FASTER 	  - ist eine nichtstuende Option, die nur aus Kompatibilität
		    zu ALINK mitaufgenommen wurde.

 VERBOSE	  - veranlaßt BLINK den Namen jeder Datei, die verarbeitet
		    wird, auszugeben.

 NODEBUG	  - unterdrückt alle HUNK_DEBUG, Symboltabellen
		    Informationen oder Hunk-Namen in die entgültige
		    Objektdatei. Das Ergebnis ist das Gleiche, wie wenn
		    STRIPA auf die entgültige Datei angewendet wird.

 SMALLDATA	  - veranlasst, daß alle DATA und BSS Sections zu einem
		    Hunk zusammengefügt werden. Dieses kann verwendet werden
		    um alle Datahunks eines Programms zu einen einzigen Hunk
		    zusammenzufügen, wodurch die Ladezeit vermindert wird,
		    jedoch werden in der Regel größere Hunks produziert,
		    die sich um so schwieriger Streuladen lassen.

 SMALLCODE	  - veranlasst, daß alle CODE Hunks zu einen Hunk
		    zusammengefügt werden.

 WIDTH n	  - setzt die maximale Zeilenlänge für die Map- und
		    Querverweislisten. Diese Anweisung ist nützlich,
		    wenn die Ausgabe an einem Gerät geschickt wird, daß
		    eine andere Zeilenlänge besitzt. Wird WIDTH nicht
		    angegeben, so wird 80 angenommen.

 MAP file options - gibt eine Datei an, in der die Mapinformationen
		    hineingeschrieben werden. 'options' bestimmt welcher
		    Teil der Map geschrieben wird. Hierüber mehr in
		    "MAP Files" unten.

 OVERLAY	  - gibt den Anfang eines Overlaybaums an, dessen Ende
		    aus einer Zeile, die nur aus einem einzigen
		    Pfundzeichen '#', besteht. Hierüber mehr in "Overlays"
		    unten.

 DEFINE 	  - erlaubt die Definition oder Umdefinition eines Symbols.
		    Nützlich für stümmelweises Einbringen ungeschriebener
		    Routinen, Auflösen unaufgelöster externer Bezüge und
		    linkzeit Patchen Ihres Codes. Mögliche Kombinationen
		    sind: DEFINE SymbolA = SymbolB wo SymbolA gleich
		    SymbolB gesetzt wird und SymbolB bereits definiert
		    wurde. DEFINE SymbolA = Konstante wobei die Konstante
		    irgendeine Dezimale- oder Hexadezimale- Zahl ist. Wenn
		    die Konstante eine Hexadezimalezahl ist, muß ein $
		    vorangestellt werden z.B. DEFINE SymbolA = $affe oder
		    DEFINE SymbolA = 45054.

Beispiel für die Benutzung der Befehlszeile:
--------------------------------------------

BLINK

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

Obwohl BLINK vollständig kompatibel mit ALINK WITH Dateien ist, ist die
Reihenfolge und Format der Optionen völlig Positionsunabhängig. FROM files
und LIBRARY Optionen können über mehrere Zeilen verstreut werden, mit oder
ohne das Zeilenfortsetzungszeichen "+". Ich hoffe, daß die unten
aufgeführten Beispiele diese erstaunliche Flexibilität wiedergeben.
Na sowas, ein Tool, das benutzerfreundlich ist. Irgendwie machen wir
'was falsch.

Beispiel für 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

oder auf anderer Art

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


oder noch besser, eine Art standard WITH-File Kopf, so daß Sie nur die
Einzelheiten am Ende hinzufügen brauchen wodurch Sie sich Tipperei
ersparen können, wenn Sie eine WITH-File erstellen wollen.

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

Sie werden feststellen, daß im obigen Beispiel keine TO-Datei angegeben
wurde. BLINK wird automatisch eine TO-Datei im aktuellen Verzeichnis
erstellen mit dem Namen des ersten Moduls in der FROM Liste ohne die
Startuproutine, in diesem Fall c.o. Im obigen Fall also, wird die
ausführbare Datei VT100 genannt, ohne den .o Anhang. Netter Zug, was?

========
Overlays
========

Werden noch nicht unterstützt.

=========
Map Files
=========
MAP <map file> <map options>
<map options> sind H S X F O PLAIN FANCY
MAP [[filename],option,option,...]
   filename   Map-Ausgabedatei
   option     Buchstabe für was erzeugt werden soll (siehe unten)

WIDTH n 	Zeilenlänge der Mapdatei (voreingestellt 80)
INDENT n	Anzahl Leerzeichen vor Zeile (wird in width mitgerechnet)
		voreingestellt 0
HEIGHT n	Zeilen pro Seite in Mapdatei (0 heißt keine Seitenzählung)
		(voreingestellt 55)
HWIDTH n	Länge der Hunknamen (voreingestellt 8)
FWIDTH n	Länge der Dateinamen (voreingestellt 16)
PWIDTH n	Länge der Programmmodulnamen (voreingestellt 8)
SWIDTH n	Länge der Symbolnamen (voreingestellt 8)
FANCY		Erlaubt Druckersteuerzeichen in der Mapdatei
		(diese Option ist voreingestellt)
PLAIN		Stellt die FANCY Option ab
BUFSIZE <n>

map:	map hat folgende Unterschlüsselwörter:
		h - MapHunk
		s - MapSym
		x - MapXref
		f - MapFile
		o - MapOvly
	zusätzlich werden die Schlüsselwörter mit Parameter
	akzeptiert:
		width	- (1-132) vor. 80
		height	- (1-255) vor. 55
		Hwidth	- (1-255) vor. 8  (Hunknamen Länge)
		Fwidth	- (1-255) vor. 16 (Dateinamen Länge)
		Swidth	- (1-255) vor. 25 (Symbol Länge)
		indent	- (1-255) vor. 0  (Zeilenrand)


=====================
BLINK Fehlermeldungen
=====================
  1 Parser failure. - Fehler des Syntaxanalysators
  2 Pass 1 failure. - Fehler beim ersten Durchlauf
  4 Coalesce failure. - Fehler beim Zusammenfügen von Sections
  5 Map failure.      - Fehler beim Erstellen der Map
  3 Pass 2 failure.   - Fehler beim zweiten Durchlauf
  6 Symbol Initialization failure. - Fehler beim Initialisieren der Symbole
200 Out of memory!!	    - Speicher voll
300 Read error on file '%s' - Lesefehler auf Datei ....
301 Write error on file '%s' - Schreibfehler auf Datei .....
400 *** Break: Blink terminating. - ^C gedrückt. Blink bricht ab
425 Cannot find library %s	 - Kann Library .... nicht finden
426 Cannot find object %s	 - Kann Objektdatei .... nicht finden
444 Hunk_Symbol has bad %d symbol %s - Hunksymbol hat ungültiges .. Symbol..
445 Invalid HUNK_SYMBOL %s	      - HUNK_SYMBOL ist ungültig ...
446 Invalid symbol type %d for %s - Ungültiges Symboltyp ... für ...
447 %s is a load file		  - ... ist eine Ladedatei
448 Invalid hunk #%d		  - Ungültige Hunknummer ...
449 No hunk_end seen for %s	  - Kein Hunkende absehbar für ...
501 Invalid Reloc 8 or 16 reference - Ungültiger relozierbarer 8/16 Bit Bezug
502 Distance for Reloc16 > 32768    - Entfernung für relozierbar 16 > 32768
503 Distance for Reloc8 > 128	    - Entfernung für relozierbar 8 > 128
504 Distance for Data Reloc16 > 32768 - Entfernung für data rel 16 > 32768
505 Distance for Data Reloc8 > 128    - Entfernung für data rel 8 > 128
506 Can't locate resolved symbol %s - Kann das bereits aufgelöste Symbol ..
							       nicht finden
507 Unknown Symbol type %d	 - Unbekannter Symboltyp ...
508 Symbol type %d unimplemented  - Symboltyp ... nicht unterstützt
509 Unknown hunk type %d in Pass2  - Unbekannter Hunktyp .. im 2 Durchlauf
600 Invalid command '%s'           - Ungültiger Befehl ...
601 %s option specified more than once - .. mehr als einmal angegeben
602 Unable to open map file '%s'       - Kann Mapdatei ... nicht öffnen
603 %s is not a valid number	   - ... ist keine gültige Zahl
604 with file is not readable	   - WITH-Datei unlesbar
605 Cannot open with file '%s'     - Kann WITH-Datei .. nicht öffnen
606 Unable to open output file '%s' - Kann Ausgabedatei ... nicht öffnen
607 No FROM/ROOT files specified    - Keine Objektdate angegeben
999 Unknown internal error <<<let us know if you get this one
				   - Unbekannter interner Fehler
				     <<<Geben Sie bescheid wenn Sie diesen
							 begegnen

==============
BLINK Historie
==============
5.5 Freigegeben am 18 August 1986
5.6 Freigegeben am 20 August 1986
   Problem mit der Erzeugung der Mapdatei gelöst
   Problem mit den Mapdatei-Fehlermeldungen gelöst
5.7 Freigegeben am 22 August 1986
   Inkompatibilitäten beseitigt, die dadurch entsteht, daß Lattice 3.02 und
   3.03 zusätzliche HUNK_ENDs erzeugt.
   Tabulatoren zum WITH-Datei/Befehlszeilen Syntaxanalysator hinzugefügt
   Problem mit dem Überschreiben des letzten unaufgelösten Symbols durch die
   VERBOSE Option im zweiten Durchlauf
6.0 Nicht freigegeben
   Unterstützung für relozierbare 16 hinzugefügt um die Lattice -r Option
   unter Blink zu erlauben.
   Mapsortier-Algorithmus neu geschrieben um die Maperzeugungszeit erheblich
   zu senken.
   Diverse Schwierigkeiten mit dem Syntaxanalysator behoben.
   Fähigkeit Dateien, die mit ALINK gebunden wurden, mit BLINK
   weiterzuverarbeiten.
6.1 Nicht freigegeben
   Die Map Seitenüberschrift enthält nun die Linkzeit.
   DEFINE Option hinzugefügt.
   Problem mit CHIP und FAST Hunks behoben.
6.2 Nicht freigegeben
   Algorithmus für relozierbare 16 neugeschrieben.
   Map wird jetzt nach dem zweiten Durchlauf erzeugt.
   Speicherbedarf reduziert durch Herabsetzen der Ausrichtungsgrenze von
   4 auf 2.
   Unterdrückung des Schein-Eintrittshunk.
   Voreingestelltes TO bei Dateilogik hinzugefügt.
6.3 Nicht freigegeben
   Algorithmus für relozierbare 16 verbessert um eine optimale Größe in
   zwei Durchläufen zu erzeugen.
   Größe der Patchsprünge auf 6 Byte reduziert.
   Das Startupmodul kann nun die BSS Section initialisieren.
   Startupmodul kann nun ein völlig wiedereintrittsfähiges Modul erzeugen
   für 1.2 residente Befehle.
   Minimale Speichergröße bei Speicheranforderungen hinzugefügt, um die
   Wahrscheinlichkeit eines GURU zu erniedrigen, wenn Speicher knapp ist.
   Wenn weniger als 1K zusammenhängender Speicher vorhanden ist, wird
   BLINK abbrechen.
6.4 Freigegeben am 22 September 1986
   Querverweisliste der Libraries im Map hinzugefügt
   Große Säuberung der internen Prüfung des oc Austrittscodes
   Große Teile des Codes verkleinert
   REACH und REALREACH Schlüsselwörter beseitigt
   Unterdrückung des Schein-Eintrittshunk korrigiert

