       Filename : Manual.txt

       (C) Raimund Nisius
           Goethepark  13
           10627  Berlin
           Tel + Fax  312 50 74    CompuServe 100114,2460 (ca. 1*pro Woche)

       Anleitung zur Benutzung der Graphiktreiber
                       HPGL.BGI        Plotter
                       LASER.BGI       HP-Laserjet II und spaeter
                       NADEL.BGI       Epson ESC/P sowie NEC
                       DESKJETC.BGI    HP Deskjet 500 C , 550 C
                       PJXL.BGI        HP Paintjet XL
                       DXF.BGI         Autodesk Datenformat fuer AutoCad
       mit Turbo Pascal ab Version 5.0.. 6.0  oder Turbo C ab Version 2.0
       und
                       RHPGL.BGI     mit Borland Pascal
                       RLASER.BGI    Version 7.0
                       RNADEL.BGI    Zielplattform
                       RDJ500.BGI    Real Mode
                       RPJXL.BGI    
                       RDXF.BGI     

                       PHPGL.BGI     mit Borland Pascal
                       PLASER.BGI    Version 7.0
                       PNADEL.BGI    Zielplattform
                       PDJ500.BGI    Protected Mode
                       PPJXL.BGI    
                       PDXF.BGI     

                         Inhalt

       0. Einstimmung
       F. = fr eilige Anwender
       1. Allgemeines zur Handhabung der Treiber
       1.a Wozu dienen die mitgelieferten Dateien ?
       2. Der benutzte Interruptvektor
       3. Installuserdriver
       4. Die Konfiguration fr alle Treiber
       5. Gleichnamige Elemente der individuellen Konfigurationen
       6. Die Konfiguration speziell fr HPGL
       7. Die Konfiguration speziell fr NADEL
       8. Farben fr NADEL und Deskjet Color
       9. Die Konfiguration speziell fr LASER
      9a. Die Konfiguration speziell fr DESKJETC
      10. Einbinden des Treibers als Objectfile
      11. Fehlerbehandlung bei den Druckertreibern
      12. Schreiben Sie Ihre eigene Allozier- und Kontrollfunktionen

       0. Einstimmung

       "wir haben hier einen lebenden Beweis fr die universelle
       Gltigkeit der Formel
          e=mc
       - wobei m fr Mglichkeiten, c fr eine Confusionsconstante
       und e fr die sich ergebende Entropie steht. Die Mglichkeiten
       des Units Graph sind so ausgeprgt, da der Wert von c getrost
       mit 3*10E9 angenommen werden darf."
       Aus : Arne Schpers, Turbo Pascal 5.0, Addison-Wesley 1989, S.315

       Ziehen Sie daraus den Schlu, das es einfacher ist, mich bei
       Treiberproblemen zu fragen, als mit dem Debugger durch die
       Unit Graph zu wandern ohne jemals einen berblick ber diese
       Unit zu erhalten. (Beim meinem ersten Debuggen hat es eine
       halbe Stunde gedauert, bis ich zum Treiber vorgedrungen war.)



       F. = fr eilige Anwender
   !   Diese Anleitung ist die funktionale Beschreibung von alloc.pas
   !   mit params.pas   bzw. bgialloc.c mit bgialloc.h . Die Formulie-
   !   rung dieser Anleitung in der Sprache Ihrer Wahl finden Sie in
   !   diesen Dateien.
   !   Wenn Sie diese Module in Ihr Programm einbinden, knnen Sie
   !   sofort z.B. mit initgraph(plottertreiber,plottermode,'');
   !   Ihre Graphik auf den Plotter umlenken.
   !   Beispiel : test1.pas  bzw. test1.c

       1. Allgemeines zur Handhabung des Treibers

       Die BGI-Treiber erlauben es Ihnen, Drucker oder Plotter
       so zu behandeln, als seien sie Monitore mit der Auflsung
       und Farbenvielfalt des jeweiligen Gertes.

       Diese Anleitung setzt voraus, da sie in Ihrem Handbuch von
       Turbo-Pascal X.X, Turbo C, Turbo C++ oder Borland C++
       die  Bedeutung der Graphikbefehle gelesen und verstanden haben.
       (Sie sollten auch schon mal ein Graphikprogramm geschrieben haben.)


       1.a Wozu dienen die mitgelieferten Dateien ?

       Die Treiber mssen Informationen erhalten, deren bermittlung
       im normalen Graphikpaket (graph.tpu bzw. graphics.lib) nicht
       vorgesehen ist. Diese Informationen werden als Datenstruktur im
       Hauptprogramm hinterlegt (Variable "Treiber_konfiguration" ).
       Damit die Treiber die Informationen finden, wird ein Inter-
       ruptvektor auf eine Serviveroutine (ISR) umgeleitet, die sofort
       auf die original ISR springt und sonst nur noch eine Kennung und
       einen Zeiger auf Treiber_konfiguration enthlt.
       Nheres finden Sie inden Kapiteln ber die Konfiguration.

       Die Treiber  werden mit "installuserdriver" dem  Graphikpaket
       Ihrer Turbo-Sprache bekannt gemacht.
       Das Ergebnis dieser Funktion ist die Treibernummer fr das
       entsprechende Gert und wird in den globalen Variablen
       "XYtreiber" fr das Hauptprogramm gespeichert.

       Die Schnittstelle an der das Gert angeschlossen ist, wird
       interaktiv bestimmt und in "XYmode"  gespeichert.
       Dies geschieht automatisch beim Programmstart, ohne da das
       Hauptprogramm die Init-Funktion aufrufen mu.

       Anschlieend knnen Sie Ihre Graphik auf dem gewnschten Gert
       erzeugen mit
       initgraph(XYtreiber,XYmode,''); .
       Dazu mu natrlich der entsprechende Treiber im angegebenen
       Verzeichnis vorhanden sein.
       Alle Befehle, die das Gert nicht ausfhren kann, werden von
       seinem Treiber ignoriert.


       Der  Parameter  graphmode von "initgraph"  dient dazu,  die
       Schnittstelle auszuwhlen. Die Schnittstelle mu existieren
       und dem Betriebssystem bekannt sein.  Serielle Schnittstel-
       len mssen  entsprechend der  Schnittstelle am Gert konfi-
       guriert sein.
       Nehmen Sie den DOS-Befehl "mode ,,,P" fr Wiederholung der
       Schreibversuche ohne Timeout in Ihr Autoexec.bat auf.
       Sonst kommt es bei Plottern an der seriellen Schnittstelle zu
       Datensalat.
   !   Achtung Anwender von DR-DOS mssen auch die parallele Schnitt-
       stelle mit "retry = p" konfigurieren.

       Mode  Schnittstelle
       
         0   Datei mit dem Namen "HPGL.PLT","LASER.PRN" oder
                   "NADEL.PRN" im aktuellen Verzeichnis
         1   COM1:         
         2   COM2:           bertragung luft ordentlich
         3   COM3:           ber DOS darum ist
         4   COM4:           Netzbetrieb mglich
         5   LPT1:         
         6   LPT2:         
         7   LPT3:         
         8   Datei mit einem Namen, der in der Konfiguration
                    definiert ist (vollstndiger Pfad mglich)

       Nach Beenden der Graphik durch "closegraph" oder bei Unter-
       brechung mit "restorecrtmode" glaubt  Ihr Graphikpaket, den
       Monitor via BIOS-Aufruf wieder  in den Textmode schalten zu
       mssen. Darum wird der Textbildschirm wieder gelscht ( das
       ist kein Fehler des Treibers).

       Die bersetzung von alloc.pas bzw. bgialloc.c wird gesteuert
       durch inventar.inc bzw inventar.h  . Wenn dort eine Definition
       fehlt, wird der entsprechende Teil nicht bersetzt und auch
       die Variablen gibt es nicht.

       Die Funktionen der Unit alloc.pas bzw. des Moduls BGIAlloc.c
       werden beim Programmstart automatisch aufgerufen.

       Es wird dafr gesorgt, da zum Programmschlu der Interrupt-
       vektor wieder restauriert wird.

       2. Der benutzte Interruptvektor
       Die Routine, auf die ein Interruptvektor umgeleitet wird
       (Variable "Umleitung") beginnt mit einem Sprungbefehl zur
       original Servicerouetine. Dahinter befindet sich eine Kennung
       sowie der Zeiger auf die "Treiber_konfiguration".
       Somit ist der Vektor ein echter Interruptvektor, der als solcher
       normal benutzt werden kann.
       Das Verfahren funktioniert sogar mit INT21h - aber wenn das
       Programm abstrzt ohne da der Originalzeiger wieder installiert
       wurde, wird INT21 beim nchsten Programmstart wohl zerstrt werden.

       Der 1. mglicherweise freie Vektor ist Nr. 60h. Dieser wird
       von meiner Version der Initialisierung benutzt. Der Treiber
       sucht seine Konfiguration ab Nr. 60h bis FFh. Sie knnen in
       diesem Bereich jeden Vektor verwenden.

       3. Installuserdriver
       "installuserdriver" verlangt nicht da der deklarierte Treiber
       irgendwo existiert, sondern nur der Name wird in ein Verzeichnis
       eingetragen.

       PASCAL 5.X, C2.0 : "installuserdriver"  hat den Fehler, da
                      es eine falsche Treibernummer zurckliefert.
                      Sie mssen 5 zum Funktionswert addieren!
                      Ab Turbo Pascal 6.0 bzw. Turbo C++ arbeitet
                      "installuserdriver" korrekt.
       PASCAL 5.X kann leider nur 2 Treiber ordentlich installieren.

       Nach dem Aufruf von "installuserdriver"  findet "initgraph"
       mit  driver := detect   nur noch das letzte installierte Gert.
       Achtung ! Bei Borland C++ installiert "initgraph" zwar den
       Treiber, liefert aber einen falschen Wert fr driver.
       Am Besten vermeiden Sie also driver := detect.




       4. Die Konfiguration fr alle Treiber
       Die Konfiguration, auf die der von alloc reservierte Interrupt-
       vektor zeigt, ist fr alle Treiber gltig.

       Konfigurations
           element    Bedeutung
       
       umgebung       Datenstruktur, die fr alle Treiber gilt
       plotter        Zeiger auf Daten fr den Plottertreiber
       laserjet       Zeiger auf Daten fr den Laserdruckertreiber
       nadeldrucker   Zeiger auf Daten fr den Nadedruckertreiber
       deskjet_c      Zeiger auf Daten fr HP DeskJet 500C / 550C
       reserve1       Zeiger auf Daten fr Treiber in Zukunft
       reserve2       dito
       reserve3       dito
       reserve4       dito
       reserve5       dito
       userfill       Nullpointer : normales SetFillPattern,
                      sonst Zeiger auf 16 Worte, die das Bitmuster
                      zeilenweise mit 16 Bit fr SetFillPattern
                      definieren.


       Umgebungs -   
       element        Bedeutung
       
       errormessages  ungleich 0 : Treiber geben Fehler im Klartext
                      auf dem Monitor aus
       warnings       ungleich 0 : Treiber geben Warnungen im Klartext
                      auf dem Monitor aus, Druckertreiber geben Zeilen-
                      nummern aus
       Namelength     (nur C !) lnge des folgenden Strings
       dateiname      Mode 8 erffnet statt einer Schnittstelle diese Datei
                     
            Folgende Elemente haben nur Bedeutung fr die Druckertreiber
       control        Adresse einer Funktion zur Steuerung der Daten-
                      bertragung. Siehe Kontrollfunktion
       control_ds     Das Datensegment von control
       myalloc        Adresse einer Funktion, die im Hauptprogramm
                      Speicher fr die Bilderzeugung besorgt
       mfree          Adresse einer Prozedur, die diesen Speicher
                      wieder freigibt
       free_ds        Datensegment der beiden Speicherfunktionen
       tmplength      (nur C !) lnge des folgenden Strings
       tmp_path       kompletter Pfad fr die temporre Datei :
                      Laufwerk am Anfang und '\' am Ende,
                      oder Leerstring.  z.B. 'D:\'


       5. Gleichnamige Elemente der individuellen Konfigurationen
       Die Datenstrukturen fr die speziellen Treiber enthalten zum
       Teil Elemente, die sich nur im Wert von denen der anderen
       Treiber unterscheiden. Diese sind hier aufgelistet.

       Treiberkonfig-
       element        Bedeutung
       
       reconfig       0   Treiber setzt Defaultwerte in seine Konfigu-
                          ration
                      1 : Treiber benutzt die Werte aus seiner Konfigu-
                          ration
       stiftzahl      Anzahl der (Farb)stifte, Stift 0 zhlt mit
       dicke          Array der Dicke der Stifte in Pixeln. Fr Plotter
                      sollte die Strichstrke der benutzten Stifte ein-
                      getragen sein (wegen Fllmustern).   12 = 0.3mm
                      Die Druckertreiber zeichnen Linien in der angege-
                      benen Dicke (Einheit Pixel)
       strichweite    fr setlinestyle(4,pattern,*); pro pattern-Bit
                      werden soviele Stiftdicken entlang der Linie
                      gezeichnet
       size           Ausdehnung des Mediums in Pixeln, wenn das Bild
                      nicht gedreht ist (Landscape bei Plotter, Portrait
                      bei Druckern). NADEL.BGI ignoriert diese Parameter,
                      wenn Bit 6 von printermode 0 ist. Bei LASER.BGI
                      mssen Sie die Werte der Auflsung anpassen.
       rotate         Bildausrichtung Landscape oder Portrait. 0 ist die
                      Standardausrichtung des Mediums.
       formfeed       Wahr : Closegraph/restorecrtmode bewirken, da ein
                      neues Blatt eingezogen wird. (Ein Plotter tut das
                      nur, wenn er das auch kann)
       lastschnitt    Wenn ein Treiber zweimal hintereinander mit der
                      gleichen Schnittstelle geffnet wird, und beim
                      zweitenmal die Konfiguration anders ist, dann
                      aktualisiert das Graphikpaket nicht die Werte
                      von GetMaxX / Y. Mit Schnittstelle = 9 ffnen
                      Sie formal einen anderen Graphikmodus, so da
                      das Graphikpaket die Werte neu ermittelt.
                      Die Treiber ffnen trotzdem die letzte Schnitt-
                      stelle noch einmal. Die Treiber setzen diese
                      Variable selbst whrend initgraph.
       initstr        String mit speziellen Einstellungen des Benutzers
                      (z.B. Plotter-Reset, Emulation einstellen o. )
                      wird vor den Graphikbefehlen an das Gert ausgegeben.


       6. Die Konfiguration speziell fr HPGL

       Konfigurations
           element    Bedeutung
       
       speedmax       Die Hchstgeschwindigkeit der Stifte in mm/s
                      fr HP7475 und HP7550 ist das 381
       speed          Array der relativen Geschwindigkeiten der einzelen
                      Farbstifte in %   ( 100 = speedmax)
       filehandle     Handle fr die Ausgabe an den Plotter
                      falls Sie direkte Plotterbefehle (z.B. 45 Schrift)
                      geben wollen knnen Sie den Plotter mit INT $21
                      Funktion 40  direkt ansprechen
       exitstr        String um z.B. die Druckeremulation wieder auf
                      PCL umzustellen



       7. Die Konfiguration speziell fr NADEL
       Konfigurations
           element    Bedeutung
       
       printermode    Zahl aus [EPS_240 .. EPS_360_360]
                     
                      EPS_240     = 0;  8 Nadelmodi,
                      EPS_120Y    = 1;  vertikale Auflsung
                      EPS_120L    = 2;  immer 72 DPI
                      EPS_60      = 3; 
                      EPS_80      = 5;  so gut wie alle Nadeldrucker
                      EPS_72      = 6;  knnen die Modi 0 bis 3
                      EPS_90      = 7;  und Modus 4
                      EPS_144     = 8; 
                     
                      EPS_240_216 = 4;  Verbesserte vertikale Auf-
                                        lsung durch Feinvorschub
                     
                      EPS_60_180  =  9;   24 Nadelmodi
                      EPS_120_180 = 10;   so gut wie alle
                      EPS_90_180  = 11;   24-Nadeldrucker
                      EPS_180_180 = 12;   emulieren Epson
                      EPS_360_180 = 13; 
                     
                      NEC_360_360 = 14;   NEC P6/7
                      EPS_360_360 = 15;   Epson
                     
                      Wenn Sie zu diesen Konstanten 128
                      addieren, wird ein Farbdrucker
                      bedient.
                      Wenn Sie zu diesen Konstanten 64 addieren,
                      werden size.x und size.y als Ausdehnung
                      in zehntel mm interpretiert. Nach InitGraph
                      ist das 64-Bit wieder gelscht und size ent-
                      hlt die Ausdehnung in Pixeleinheiten.
                      Wenn Sie zu diesen Konstanten 32
                      addieren, werden Linien (und Texte) mit den
                      RGB-Farben gezeichnet (sonst mit100%-Farben).
    defaultbackground Hintergrundfarbe auf dem Papier wenn
                      "setbkcolor" nicht aufgerufen wird.
                      Vergessen Sie's wieder ! Initgraph ruft
                      nachtrglich "setbkcolor(0)" auf.
                      benutzen Sie "setbkcolor(15)" fr weien
                      Hintergrund im Farbmodus!
       endezeichen    Zeilenvorschub am Ende der Zeile
                      0: CR         nur wenn Graphik krzer als Zeile
                      1: LF         nur wenn Graphik krzer als Zeile
                      2: CR+LF      nur wenn Graphik krzer als Zeile
                      4: CR         am Ende jeder Zeile
                      5: LF         am Ende jeder Zeile
                      6: CR+LF      am Ende jeder Zeile
                     
       file_append :  siehe Laser.BGI


       8. Farben fr NADEL

       Farbnummer  Farbe im Monochrommodus
       
       0           wei  (blankes Papier)
       1.. 32      schwarz
       Sie knnen die Farben mit verschiedenen Stiftdicken versehen,
       um sie zu unterscheiden.


       Der Nadeldruckertreiber erzeugt farbige Bilder, wenn ein
       printermode >= 128 ausgewhlt wird.
       "getmaxcolor" richtet sich nach "stiftzahl". die Farben
       werden mit Farbnummer modulo 32 erzeugt.

       Farb-    Fllfarbe                                 Linien-
       nummer  im Colormodus (wie VGA)                    farbe
       
       0       Vordergrund : transparent = Hintergrund   Hintergrund
                                                         gerundet
       0       Hintergrund : schwarz                    
                                              R  G  B  
                                                      
       1       blau  (magenta + cyan)        0  0 255  blau
       2       grn  (gelb    + cyan)        0 255 0   grn
       3       cyan                          0 255255  cyan
       4       rot   (magenta + gelb)       255 0  0   rot
       5       magenta                      255 0 255  magenta
       6       braun (alle Grundfarben)     203179255  schwarz
       7       hellgrau                     223223223  schwarz
       8       dunkelgrau                   127127127  schwarz
       9       hellblau                     127127255  blau
       10      hellgrn                     127255171  grn
       11      hellcyan                     127255255  cyan
       12      hellrot                      255127127  rot
       13      hellmagenta                  255127255  magenta
       14      gelb                         255255 0   gelb
       15      wei                         255255255  wei

       Diese Palette knnen Sie mit SetRGBPalette ndern.
       Pro Farbauszug gibt es 64 Grauraster. Die dunklen Raster sind
       nur schwer mit bloem Auge zu unterscheiden.

       Die RGB-Farben gelten nur fr gefllte Flchen. Linien und
       Texte benutzen nur die jeweils auf 0 oder 255 gerundeten RGB-
       Werte. Somit haben Sie fr Linien nur 8 Farben zur Verfgung.
       Wenn Sie zu printermode 32 addieren, werden Linien (und Texte)
       mit den RGB-Farben gezeichnet.



       9. Die Konfiguration speziell fr LASER
       Konfigurations
           element    Bedeutung
       
       resolution     Auflsung der Graphik : 1,2,3 oder 4 Pixel / Punkt
                      size.x und size.y  mssen angepat sein.
       compress       False: Daten werden alle bertragen
                      True : Komprimiermethode 2 wird verwandt (ab
                             Laserjet III oder verschiedene Kompatible
                             zu Laserjet II, nicht aber der Original LJ-II
       file_append    False: File fr Mode 0 oder 8 wird neu erzeugt,
                             Bestehendes wird gelscht.
                      True : Bestehendes File wird nicht berschrieben
                             sondern um das neue Bild erweitert



       9a. Die Konfiguration speziell fr DESKJETC

       Konfigurations
           element    Bedeutung
       
       resolution     siehe LASER
       file_append    siehe LASER
	   printermode    0 : monochrom, 128 : COLOR
					  fr mono verwnden Sie besser LASER.BGI
					  Wenn Sie zu printermode 64 addieren, wird der
					  DJ 550C mit 4 Farben untersttzt (klappt nicht)
					  Wenn Sie zu printermode 32
					  addieren, werden Linien (und Texte) mit den
					  RGB-Farben gezeichnet (sonst mit100%-Farben).
    defaultbackground Hintergrundfarbe auf dem Papier wenn
                      "setbkcolor" nicht aufgerufen wird.
                      Vergessen Sie's wieder ! Initgraph ruft
                      nachtrglich "setbkcolor(0)" auf.
                      "setbkcolor(15)" fr weien Hintergrund!
       quality        bestimmt "Sorgfalt" des Druckers (schnell &
                      schlecht oder langsam & gut)
                      0 : Gerteeinstellung
                      1: Draft
                      2: High Quality
       depletion      Ausdnnung : spart Tinte, verhindert "stehende
                      Gewsser"
                       0 : ausgeschaltet
                       1: normal
                       2: stark
       shingling      Mehrphasendruck  verhindert das zerflieen des
                      Bildes
                      0: nein
                      1: 2 Phasen
                      2: 4 Phasen : gut Ding braucht Langeweil'



       10. Einbinden des Treibers als Objectfile

       Unter Verwendung meiner Unit alloc :
       {$DEFINE PLOTTER_EINBINDEN}

       sonst :

       Allgemeine Vorgehensweise:
       Pascal :

       {$F+}
       procedure _LASER_driver; external;  { Treiber als Prozedur }
                                           { deklarieren }
       {$L p_LASER.obj}                    { und einbinden }
       {$F-}

       begin { der Unit-Initialisierung, oder des Programms o.. }
           Druckertreiber := 5 + installuserdriver('LASER',NIL);
       vergiss_mich   := registerbgidriver(@_LASER_driver);
       {Ab Turbo Pascal 6.0 arbeitet "installuserdriver" korrekt. }
       {"registerbgidriver" arbeitet von Version zu Version anders falsch. }
       ...
           initgraph(Druckertreiber,...);

       C :
       #include "BGIALLOC.H"
       .
       .
       .
       void main(void)
           {
           Druckertreiber = installuserdriver ("LASER",NULL);
           /* Die GraphikBiliothek nimmt */
           /* den Treiber zur Kenntnis.  */
           /* C2.0 : */ Druckertreiber += 5;
       registerbgidriver(LASER_driver);
           /* Das Ergebnis von "registerbgidriver" ist falsch.  */
           /* "N_LASER.OBJ"  mu zum Programm gelinkt werden.  */

           /*
           Alternativ dazu fr ein greres Speichermodell :
           */
       vergiss_mich = registerfarbgidriver(LASER_driver_far);
           /* Das Ergebnis von "registerfarbgidriver" ist falsch.  */
           /* "F_LASER.OBJ"  mu zum Programm gelinkt werden.  */

           Druckertreiber = DETECT;       /* Nicht bei Borland C++ !! */
           initgraph( &Druckertreiber, ...
           ...

      11. Fehlerbehandlung bei den Druckertreibern

      Wenn der Drucker nicht betriebsbereit ist, versucht der
      Treiber eine Kontrollfunktion aufzurufen, die entscheidet,
      was zu tun ist ( Die bertragung fortsetzen, neubeginnen
      oder beenden). Die Adresse dieser Funktion ist im Parame-
      ter-Record zusammen mit ihrem Datensegment zu definieren.

      Diese Funktion wird auch aufgerufen, wenn eine neue Zeile
      bertragen wird. Sie knnen diesen Aufruf dazu verwenden,
      dem Anwender die Zeit mit Bildschirmaktivitten zu vertrei-
      ben, oder um ihm die Mglichkeit zum Abbruch oder Neustart
      zu der Datenbertragung zu geben

      Wenn keine Funktion angegeben ist (NULLPOINTER !) bricht
      der Treiber bei Erffnungsfehlern ab. Bei Fehlern whrend
      der Datenbertragung wiederholt er den Schreibversuch
      unendlich weil er "Printer Busy" annimmt.

      Argument der Funktion :
           >= 0 : Nummer der Zeile die bertragen werden soll
                  (kein Fehler)
           -1   : Fehler beim Erffnen ( Gert defekt, Disk voll, ... )
           -2   : Fehler beim bertragen (Busy oder Strung)
      Rckgabewerte :
           0 : Fortsetzung der bertragung (oder noch mal versuchen)
           1 : Abrruch der bertragung
           2 : Neustart der bertragung (nur wenn Argument < 0)

      MS-DOS gibt die berchtigte Fehlermeldung "Abort Retry
      Ignore" aus. Der Anwender hat hier nur die Chance nach
      Behebung der Strung "R"etry einzugeben. Falls er nicht
      sicher ist, da der Drucker alle Daten korrekt empfangen
      hat, mu er dann die bertragung selbst abbrechen.
         Turbo Pascal installiert einen eigenen INT24-Handler,
      der dem BGI-Treiber ohne Verzgerung die Strung mitteilt.
      Hier kann der Anwender sofort entscheiden, was geschehen
      soll.
         Wenn Sie sich mit Interrupts gut auskennen knnten Sie
      in Ihrem C-Programm einen hnlichen Handler installieren.


       12. Schreiben Sie Ihre eigene Allozier- und Kontrollfunktionen

       Im protected Mode sollten Sie sich das nicht tun !
       bgi_alloc wird je nach Treiber und Farbmodus mehrfach auf-
       gerufen. Auer beim letzten Mal ( Speicher fr die eigentliche
       Bitmap ) mu der geforderte Menge RAM besorgt werden. Die Bitmap
       wird bei Speichermangel in Bndern erzerugt und betragen.

   !   Das folgende gilt nur fr Real Mode Plattformen

       Die Funktionen bgi_alloc, myfree und BGIControl sind als
       Beispiel gedacht. Sie knnen diese Funktionen nach eigenen
       Kriterien gestalten. Sie mssen nur die Deklarationen iden-
       tisch lassen.
       In einem greren Programm wird Ihnen meine Version von
       bgi_alloc nicht viel Speicher liefern knnen, da sie nur
       den grten Block alloziert der zur Ausfhrungszeit von
       CloseGraph gerade frei ist. Sie knnen die Funktion so gestal-
       ten, da ein Bereich des benutzten Heaps auf die Festplatte
       gerettet wird. Dieser wird dann dem Treiber zugewiesen und
       hinterher von myfree wieder restauriert.
       Achtung! der Treiber liegt selbst im Heap. Welche Daten
       benutzt Ihre Kontrollfunktion? Turbovision hat eine eigene
       Heapverwaltung, die vielleicht durch Mausbewegung aktiviert
       werden knnte - whrend der Treiber diesen Bereich benutzt!
       Sie mssen sich vollkommen im klaren sein, was Sie tun.
       Ich kenne mich mit Turbovision nicht aus.
       Es mu nicht unbedingt der Heap sein. Wenn sie die Lage eines
       Programm-Moduls kennen, knnen Sie diesen Bereich fr die
       Bildaufbereitung nutzen. Dann haben jedenfalls keine Probleme
       mit der Heapverwaltung.

       Gestalten Sie BGIControl so, da immer irgendetwas passiert.
       Wenn 3 Minuten lang die Zeilennummern angezeigt werden, schaut
       der Anwender zu und meint, die bertragung sei schnell. Wenn
       in den gleichen 3 Minuten nichts am Bildschirm passiert kommt
       er ins grbeln, ob alles stimmt und drckt am Ende noch in
       Panik <ALT CTRL DEL>.

