                     ==========
                     EINLEITUNG
                     ==========



BLINK wurde als Nachfolger des beruehmten ALINK geschrieben. Dabei ist er
natuerlich vollstaendig aufwaertskompatibel zum ALINK, d.h. BLINK versteht
alle Kommando-Zeilen Optionen der aelteren Version und die WITH-Dateien.
Zusaetzlich bietet dieser Linker jedoch einige nuetzliche Erweiterungen.

BLINK entstand in einer Gemeinschaftsarbeit der 'Software Distillery'-
Gruppe. Dabei haben bis jetzt folgende Leute mitgearbeitet:

            Dave Baker
            Ed Burnette
            Stan Chow
            Jay Denebeim
            Gordon Keener
            Jack Rouse
            John Toebes
            Doug Walker






Dieser Linker kann frei weitergegeben werden, solange Sie sich an folgende
Vereinbarungen halten:

1) Fuer die Weitergabe oder dessen Gebrauch darf nichts verlangt werden.
2) Die englischsprachige Originalanleitung muss immer mit der ausfuehrbaren
   Datei des Linkers weitergegeben werden.
3) An der ausfuehrbaren Datei duerfen keine Veraenderungen vorgenommen
   werden.

Halten Sie sich nicht an diese Vereinbarungen, muessen Sie damit rechnen,
dass die Idee der freien Software stirbt und damit keine guten Programme
mehr fuer diesen Bereich produziert werden.

Die neueste Version des BLINK-Programmes koennen Sie ueber BBS unter
folgender Nummer erhalten:

         Deep Thought  (919) 471-6436  
         U.S.A.




Mit saemtlichen schriftlichen Anfragen wenden Sie sich bitte an:

        John Toebes
        The Software Distillery
        235 Trillingham Lane
        Cary NC 27511
        U.S.A.

Schreiben Sie uns, wofuer Sie BLINK einsetzen und was Sie daran auszusetzen
haben. In der naechsten Version werden wir wohl zusaetzlich folgende
Erweiterungen einbinden:

     * Unterstuetzung des Overlay
     * Eine komplette XREF der Bibilotheken-Verweise
     * Zusaetzliche Link-Optionen
     * Besserer, schnellerer Code






                      ===================
                      Bedienungsanleitung
                      ===================


Die Syntax der Kommandozeile
----------------------------

BLINK wird durch verschiedene Schluesselwoerter gesteuert, die in jeder
beliebigen Reihenfolge stehen koennen und immer eine bestimmte Aktion
einleiten. Dabei sieht die grundlegende Syntax folgendermassen aus:

  BLINK [FROM][ROOT] files [TO file][WITH file][VER file]
        [LIBRARY / LIB files][MAP file map_optionen][XREF file][optionen]

Dabei gilt folgendes:

file        : Steht dabei fuer den Namen eines Files.
files       : Hierbei sind keiner oder mehrere Filenamen, getrennt durch 
              ein Komma und anschliessendes Leerzeichen moeglich.


Hier nun eine Erklaerung der restlichen Schluesselwoerter:

FROM files - Mit den Files (Dateien) werden saemtliche Object-Files
 angegeben, die primaer, also vorrangig, gelinkt werden sollen. Diese
 Object-Files werden nun immer an den Anfang (Root) des Objekt-Modules
 kopiert. Sie koennen das Schluesselwort FROM auch weglassen, wenn dieser
 Befehl, d.h. dessen Object-Dateien am Anfang der Optionen, also direkt
 hinter dem Wort BLINK stehen. Anstelle von FROM wird auch das Wort ROOT als
 Syntax akzeptiert. FROM kann auch mehr als einmal, gefolgt von einer zu
 linkenden Datei, aufgefuehrt werden.


TO file - Hiermit wird der Name des Ziel-Object-Modules festgelegt. Wird
 diese Option weggelassen, dann wird automatisch der Name des ersten FROM-
 Files genommen, jedoch ohne die Extension .o hinter dem Filenamen.







WITH file - Mit diesem Kommando koennen Sie einen Dateinamen angeben, der
 alle gewuenschten BLINK-Optionen enthaelt, die bei diesem Link-Vorgang
 ausgefuehrt werden sollen. Dabei kann die WITH-Option oefter aufgefuehrt
 werden, solange immer Dateinamen angegeben werden, die entsprechende
 Kommando-Optionen des BLINK enthalten. Diese werden dann genauso
 abgearbeitet, als staenden sie direkt in der BLINK-Kommandozeile.


VER file - In die angegebene Datei (file) werden alle Meldungen des Linkers
 geschrieben. Wird diese Option nicht angegeben, dann werden alle Meldungen
 an das Terminal, also auf den Bildschirm umgeleitet.


LIBRARY files - Hiermit werden die Bibliotheksdateien (Libraries) angegeben,
 die durchsucht werden sollen. Im endgueltigen Objekt-Modul werden jedoch
 nur die Segmente aus den Bibliotheken eingebunden, auf die entsprechende
 Verweise in den Quell-Dateien vorliegen. Statt LIBRARY kann auch nur LIB
 geschrieben werden.




XREF file - Hiermit wird die Datei angegeben, in die saemtliche Querverweise
 geschrieben werden (Cross-Reference-Liste). Wird diese nicht angegeben,
 aber mit der MAP-Option eine Cross-Referenzliste verlangt, wird diese als
 Teil an die MAP-Datei angehaengt. 


FASTER - Diese Option wurde nur wegen der Kompatibilitaet zum ALINK
 eingebunden. Sie bewirkt gar nichts. 


VERBOSE - Damit wird BLINK angehalten, saemtliche Namen der Files, die
 abgearbeitet werden, auszudrucken.


NODEBUG - Diese Option unterdrueckt jeden HUNK_DEBUG, Informationen der
 Symboltabelle oder Hunk-Namen im endgueltigen Object-File. Dies entspricht
 dann einem Object-File, das erzeugt werden wuerde, wenn STRIPA auf das
 abschliessende Object-File angewendet werden wuerde.




SMALL DATA - Bewirkt, dass alle DATA- und BSS-Abschnitte zu einem einzelnen
 Abschnitt komprimiert und verbunden werden. Sehr praktisch also, wenn alle
 Daten-Bereiche eines Programms zu einem Ganzen zusammengefasst werden
 sollen - die Ladezeit wird verkuerzt, aber moeglicherweise auch groessere
 Teile produziert, bei denen es sehr schwierig wird, sie einzeln zu laden.


SMALLCODE - Damit werden alle CODE-Bereiche in einen einzelnen Teil kopiert. 


WIDTH n - Damit stellen Sie die maximale Zeilenlaenge fuer das MAP-Kommando
 und die Cross-Reference-Liste ein. Dies ist sinnvoll, wenn Sie die Ausgabe
 auf einen Drucker umleiten. Die Voreinstellung betraegt 80 Zeichen.


MAP file optionen - Hiermit wird die Datei angegeben, in die die sogenannte
 MAP geschrieben wird. Mit Optionen legen Sie fest, welcher Teil der MAP
 geschrieben wird. Fuer weitere Informationen sehen Sie bitte im Abschnitt
 MAP nach.



OVERLAY - Legt den Startpunkt eines Overlay-Baumes fest und wird mit einer
 Zeile, in der nur ein "Pfund"-Zeichen (œ) steht, beendet. Weitere
 Einzelheiten finden Sie im Abschnitt OVERLAY.


DEFINE - Erlaubt die Definition oder Neudefinition eines Symbols. Sehr
 nuetzlich zum Simulieren von noch nicht geschriebenen Routinen, Aufloesen
 von noch nicht bestimmten Verweisen und Verbinden von Zeitpatches in Ihren
 Code. Dabei gibt es folgende Kombinationsmoeglichkeiten:

 DEFINE symbola = symbolb, wobei symbolb dem symbola zugewiesen wird und
 symbolb in Ihrem Programm vorher schon bestimmt wurde.

 DEFINE symbola = Konstante (dezimal oder hexadezimal). Bei hexadezimal
 werden Dollarzeichen ($) vorangestellt. 







                      ==========
                      WITH FILES
                      ==========


Obwohl BLINK vollstaendig kompatibel zu den ALINK WITH files ist, ist doch
die Anordnung und das Format der Optionen positionsunabhaengig. FROM files
und LIBRARY-Optionen koennen sich ueber mehrere Zeilen hinziehen, wenn am
Ende einer Zeile jeweils ein "+"-Zeichen steht. Ich hoffe, die unteren
Beispiele zeigen die bemerkenswerte Flexibilitaet auf.


Beispiele zu 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 auch: 

FROM c.o
vt100.o 
init.o window.o
xmodem.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: Ein standardmaessiges Header-WITH-File, das Sie an das
Ende des spezifizierten Files anhaengen und sich dadurch einige Tipparbeit
ersparen.

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

Im obenstehenden Beispiel werden Sie feststellen, dass kein TO-File
definiert wurde. BLINK erzeugt automatisch ein TO-File im aktuellen
Verzeichnis mit dem Namen des ersten Moduls in Ihrer FROM-Liste, jedoch
ohne die Startup-Routine (in diesem Fall c.o.). Im obigen Beispiel heisst
die ausfuehrbare Datei VT100 ohne das .o-Suffix. 

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


In dieser Version noch nicht unterstuetzt.




                         =========
                         MAP-Files
                         =========


MAP <map file> <map optionen>
    <map optionen> koennen sein H S X F O PLAIN FANCY
MAP [[filename],option,option,...]
    filename bedeutet map-Ausgabefile
    option bedeutet Buchstabe oder Befehl wie unten aufgefuehrt.


WIDTH n  - Anzahl der erlaubten Spalten im MAP-File (normal 80)
INDENT n - In einer Zeile einzurueckende Spalten (normal 0)
HEIGHT n - Anzahl der Zeilen pro Seite im MAP-File (normal 55, bei 0 keine
           Paginierung)
HWIDTH n - Breite der Bereichsnamen (hunk name) (normal 8)
FWIDTH n - Breite der Filenamen (normal 16)
PWIDTH n - Breite der Programmunit-Namen (normal 8)
SWIDTH n - Breite der Symbolnamen (normal 8)
FANCY    - Gesetztes Flag, um im MAP-File Drucker-Steuerzeichen zuzulassen
           (normal gesetzt).
PLAIN    - Schaltet die FANCY-Option aus.
BUFSIZE <n> - Puffergroesse


map: Die moeglichen MAP-Optionen sind:

    h - MapHunk (Bereich)
    s - MapSym (Symbol)
    x - MapXref (Querverweise)
    f - MapFile 
    o - MapOvly (Overlay)

Zusaetzlich werden noch weitere Schluesselwoerter mit eventuellen Parametern
akzeptiert:

    width  - (1-132) norm 80 
    height - (1-255) norm 55
    Hwidth - (1-255) norm 8
    Fwidth - (1-255) norm 16
    Swidth - (1-255) norm 25
    indent - (1-255) norm 0 (Einrueckung)













                    =====================
                    BLINK-Fehlermeldungen
                    =====================


  1 Parser-Fehler
  2 Durchgang 1-Fehler
  3 Durchgang 2-Fehler
  4 Verbindungsfehler
  5 MAP-Fehler
  6 Symbolinitialisierungs-Fehler
200 Speicher ueberschritten
300 Lesefehler auf File '%s'
301 Schreibfehler auf File '%s'
400 *** Abbruch: BLINK beendet.
425 Kann Bibliothek %s nicht finden.
426 Kann Objekt %s nicht finden.
444 Hunk_Symbol hat unbenuetzbares %d Symbol %s
445 Ungueltiges Hunk_Symbol %s
446 Ungueltiger Symboltyp %d fuer %s
447 %s ist ein zu ladendes File
448 Ungueltiger Hunk #%d
449 Kein Hunk_Ende fuer %s gefunden
501 Ungueltiger Querverweis 8 oder 16
502 Reichweite fuer Querverweis 16 > 32768
503 Reichweite fuer Querverweis 8 > 128
504 Reichweite fuer Datenquerverweis 16 > 32768
505 Reichweite fuer Datenquerverweis 8 > 128
506 Kann Symbol %s nicht finden
507 Unbekannter Symboltyp %d
508 Symboltyp %d nicht implementiert
509 Unbekannter Hunktyp %d in Durchgang 2
600 Ungueltiges Kommando '%s'
601 %s-Option mehr als einmal definiert
602 Kann Map-File '%s' nicht oeffnen
603 %s ist keine gueltige Zahl
604 WITH-File ist nicht lesbar
605 Kann WITH-File '%s' nicht oeffnen
606 Kann Ausgabefile '%s' nicht oeffnen
607 Keine FROM/ROOT-Files festgelegt
999 Unbekannter interner Fehler



                        ===============
                        BLINK-Versionen
                        ===============


5.5 veroeffentlicht 18. August 1986
5.6 veroeffentlicht 20. August 1986
    Problem der Mapfile-Generierung geloest.
    Problem der Mapfile-Fehlermeldungen geloest.
5.7 veroeffentlicht 22. August 1986
    Inkompatibilitaeten mit Lattice C V3.02 und 3.03 korrigiert.
    Tabulatoren zum File- und Kommandozeilen-Parser hinzugefuegt.
    In Durchgang 2 werden die Fehlermeldungen nicht von VERBOSE-
    Fehlern ueberschrieben.
6.0 nicht veroeffentlicht.
    Patch Reloc16s wird unterstuetzt, um die -r-Option in Lattice
    einsetzen zu koennen.
    Verschiedene Parser-Fehler behoben.
    Moeglichkeit, ALINK-Files mit BLINK-Files zu verbinden.



6.1 nicht veroeffentlicht.
    Die Link-Zeit wurde dem Kopf der Map-Seite hinzugefuegt.
    Define-Befehl hinzugefuegt.
    Probleme mit Chip- und Fastmem-Typen behoben.
6.2 nicht veroeffentlicht.
    Patch Reloc16s erneut ueberarbeitet.
    Ausgabe der Map nach Durchgang 2.
    Einsparung von Arbeitsspeicher.
    Unterdrueckung der Dummy-Hunk-Einstiege.
    Die TO-Option wurde hinzugefuegt.
6.3 nicht veroeffentlicht.
    Reloc 16s-Algorithmen nochmals ueberarbeitet, um optimale
    Dateigroesse in zwei Durchgaengen zu erhalten.
    Patch-Spruenge auf 6 Bytes verkuerzt.
    Startup-Code zum Initialisieren des BSS-Abschnitts wird
    unterstuetzt.
    Startup-Code erzeugt ein vollstaendiges Wiedereinsprungs-Modul,
    welches zusammen mit residenten Kommandos der Workbench 1.2
    verwendet werden kann.
    Minimaler Platzbedarf fuer Speicheraufrufe - Wahrscheinlichkeit
    eines Gurus bei zu knappem Speicher wird vermindert. Bei
    weniger als 1K zusammenhaengendem Speicher bricht BLINK ab.
6.4 veroeffentlicht 22. September 1986.
    Zusaetzliche Querverweise der Libraries in der Map.
    Return Code-Ueberpruefung ueberarbeitet und verbessert.
    Grosse Code-Abschnitte wurden verkleinert.
    Schluesselwoerter REACH und REALREACH wurden aus dem Parser
    entfernt.
    Unterdrueckung der Dummy-Hunk-Einstiege korrigiert.
