1047 lines
43 KiB
Text
1047 lines
43 KiB
Text
|
||
|
||
PRINTER.BGI - BGI Treiber f<>r Drucker
|
||
|
||
Version 4.00 vom Oktober 1995
|
||
|
||
(C) 1990-1995 by Ullrich von Bassewitz
|
||
Zwehrenb<6E>hlstraáe 33
|
||
D-72070 T<>bingen
|
||
|
||
E-Mail: uz@ibb.schwaben.com
|
||
|
||
|
||
|
||
|
||
|
||
|
||
0. Vorwort
|
||
|
||
Alle Rechte an der hier beschriebenen Software sowie der Dokumentaton liegen
|
||
beim Autor. Die Verwendung von PRINTER.BGI in eigenen Programmen ist frei,
|
||
sowohl f<>r private als auch f<>r kommerzielle Zwecke. Beachten Sie aber bitte
|
||
folgendes:
|
||
|
||
Da die Verwendung von PRINTER.BGI kostenlos ist, erfolgt der Einsatz auf
|
||
auschlieáliche Gefahr des Anwenders. Jede Haftung f<>r direkte, indirekte,
|
||
verursachte oder gefolgte Sch„den, die durch die Verwendung von
|
||
PRINTER.BGI entstehen k”nnen, ist ausgeschlossen.
|
||
|
||
PRINTER.BGI darf unter folgenden Bedingungen beliebig weitergegeben werden:
|
||
|
||
* Die Weitergabe geschieht im kompletten Paket mit Dokumentation und
|
||
Beispielprogrammen.
|
||
* Die Weitergabe geschieht kostenlos. Dies bedeutet insbesondere, daá der
|
||
Treiber nicht ohne meine vorherige schriftliche Genehmigung auf CD-ROMS
|
||
vertrieben werden darf, genauso sind Mailboxen/FTP-Server ausgeschlossen,
|
||
bei denen der Zugang zum Treiber nicht frei f<>r jedermann ist.
|
||
|
||
|
||
|
||
1. Einleitung
|
||
|
||
Das Borland Graphics Interface (kurz BGI genannt) ist eine ger„teunabh„ngige
|
||
Schnittstelle zur Ausgabe von Grafiken auf (fast) beliebigen Ausgabeger„ten. Zu
|
||
den Borland-Compilern werden aber ausschlieálich Treiber f<>r Grafik-Karten
|
||
mitgeliefert.
|
||
|
||
PRINTER.BGI ist ein zus„tzlicher Treiber, mit dem Grafik auf einer Vielzahl von
|
||
Druckern ausgegeben werden kann. Dabei wird (im Gegensatz zu Hardcopys) die
|
||
volle Aufl”sung des Druckers ausgenutzt.
|
||
|
||
Unterst<EFBFBD>tzt werden beide Borland-Compiler (also Turbo-Pascal und Borland-C++),
|
||
sowie die folgenden Drucker:
|
||
|
||
* Zum HP-LaserJet II kompatible Drucker.
|
||
* Zum HP-LaserJet IV kompatible Drucker. Der Treiber unterst<73>tzt bei diesem
|
||
Drucker die zus„tzlich verf<72>gbare Aufl”sung von 600 DPI.
|
||
* Der HP DeskJet 500 und Abk”mmlinge.
|
||
* Der HP DeskJet 500C und Nachfolger (z.B. HP DJ 550C). Hier werden 8 Farben
|
||
unterst<73>tzt.
|
||
* HP PaintJet XL (nur 8 Farben).
|
||
* Nadeldrucker der Serien FX und LQ von EPSON sowie dazu kompatible. Dazu
|
||
geh”ren z.T. auch Laser- und Tintenstrahldrucker, z.B. der BJ-300 und BJ330
|
||
von Canon.
|
||
* NEC P6/P6+/P60. Diese Drucker sind prinzipiell EPSON kompatibel,
|
||
unterscheiden sich jedoch im Modus 360 * 360 DPI und verf<72>gen zus„tzlich
|
||
noch <20>ber die M”glichkeit zum Ausdruck in Farbe.
|
||
* IBM Proprinter X24 und kompatible.
|
||
* Benutzerdefinierte Nadeldrucker (<28>ber separat zu erstellende
|
||
Definitionsdateien).
|
||
|
||
PRINTER.BGI unterst<73>tzt alle im "Device Drivers Toolkit" angegebenen Funktionen
|
||
einschliesslich FloodFill. Da keiner der unterst<73>tzten Farbdrucker <20>ber eine
|
||
einstellbare Palette verf<72>gt, sind jedoch die Paletten-Funktionen nicht
|
||
verf<EFBFBD>gbar.
|
||
|
||
Der Treiber ist gleichzeitig auch im neuen Format verf<72>gbar, das ben”tigt wird,
|
||
wenn das Programm im Protected-Mode arbeitet. N„heres dazu weiter unten.
|
||
|
||
|
||
|
||
2. Anforderungen
|
||
|
||
2.1 Drucker
|
||
|
||
Hardware-Voraussetzung ist ein Drucker der zu einer der oben erw„hnten Familien
|
||
geh”rt oder dazu kompatibel ist. Sollten Sie einen Nadeldrucker besitzen bei dem
|
||
das nicht der Fall ist, lesen Sie bitte das Kapitel <20>ber benutzerdefinierte Modi
|
||
weiter unten. Bitte beachten Sie, daá nicht alle Drucker alle Modi unterst<73>tzen.
|
||
Speziell die Modi mit Aufl”sungen von 360 * 360 DPI sind nicht auf allen
|
||
Nadeldruckern verf<72>gbar.
|
||
|
||
|
||
|
||
2.2 Rechner
|
||
|
||
Prinzipiell reicht ein XT-kompatibler Rechner zur Benutzung von PRINTER.BGI
|
||
aus. Da jedoch relativ groáe Datenmengen bewegt werden wird die Verwendung erst
|
||
ab einem AT-kompatiblen Rechner wirklich sinnvoll. Sind weder EMS noch XMS
|
||
in ausreichendem Umfang vorhanden (siehe Abschnitt 2.4: Speicher), so ist
|
||
die Verwendung einer schnellen Platte anzuraten.
|
||
|
||
|
||
|
||
2.3 Compiler
|
||
|
||
Der Treiber arbeitet problemlos mit allen Compilern ab Version 6.0 (Turbo
|
||
Pascal) bzw. Version 2.0 (Borland-C++) zusammen.
|
||
|
||
|
||
|
||
2.4 Speicher
|
||
|
||
Da das Grafik-Paket eine beliebige Positionierung des Grafik-Cursors zul„át, und
|
||
zudem Funktionen zum R<>cklesen von Daten existieren (GetPixel, GetImage etc.),
|
||
muá der Treiber das komplette Bild bis zur Ausgabe zwischenspeichern. Dies
|
||
geschieht
|
||
|
||
- im Real-Mode: Entweder im EMS-Speicher, im XMS-Speicher oder auf Platte.
|
||
|
||
- im Protected-Mode: Im DPMI-Speicher oder auf Platte. N„heres siehe
|
||
Abschnitt 7.
|
||
|
||
PRINTER.BGI entscheidet sich je nach vorhandener Hard- und Software
|
||
selbstst„ndig f<>r eine dieser M”glichkeiten, wobei er (in dieser Reihenfolge)
|
||
die Verwendungsm”glichkeit von EMS, XMS (bzw. DPMI-Speicher) und Platte pr<70>ft.
|
||
Die Daten k”nnen dabei nicht aufgeteilt werden k”nnen (also z.B. Verwendung von
|
||
200 KB EMS, 89.5 KB XMS und der Rest auf Platte). Kann keines der oben genannten
|
||
Speichermedien genug Speicher zur Verf<72>gung stellen, so liefert PRINTER.BGI
|
||
einen Fehlercode von -12 (grIOError) zur<75>ck.
|
||
|
||
Wieviel Speicher f<>r eine bestimmte Aufl”sung ben”tigt wird, kann nach folgender
|
||
Formel berechnet werden, wobei je nach Speichermedium evtl. auf volle 16 oder 64
|
||
KB aufgerundet werden muá:
|
||
|
||
Breite * X-Aufl”sung (DPI) * H”he * Y-Aufl”sung (DPI) * Farbbits
|
||
------------------------------------------------------------------ Byte
|
||
8
|
||
|
||
Der Wert von Farbbits betr„gt 1 f<>r die Schwarz-Weiá Modi, 3 beim DeskJet
|
||
500C/550C mit 8 Farben und 4 bei den Farbmodi der Nadeldrucker.
|
||
|
||
Die GrӇe des bedruckbaren Bereichs ist je nach Modus unterschiedlich: In den
|
||
Nadeldrucker-Modi betr„gt die Breite immer 8, die L„nge immer 11 Zoll. In den
|
||
LaserJet-Modi betr„gt die Breite 7.8 Zoll (neuere Laserdrucker haben des ”fteren
|
||
Probleme mit der vollen Breite von 8 Zoll), die L„nge 10.5 Zoll. Beim DeskJekt
|
||
500C/550C betr„gt die Breite 8 Zoll und die L„nge 10.33 Zoll.
|
||
|
||
|
||
|
||
3. Die Einbindung des Treibers
|
||
|
||
Die Einbindung des Treibers erfolgt <20>ber die Prozedur InstallUserDriver. Der
|
||
erste Parameter von InstallUserDriver ist der Name des Treibers (ohne die
|
||
Endung), der zweite Parameter ist ein Zeiger auf eine Detect-Routine, die pr<70>fen
|
||
kann, ob der Rechner mit einer f<>r den Treiber passenden Hardware ausgestattet
|
||
ist (was im Falle von Druckern nat<61>rlich schlecht geht, weswegen ein NIL-Zeiger
|
||
<EFBFBD>bergeben wird).
|
||
|
||
Ist der von InstallUserDriver zur<75>ckgegebene Integer-Wert < 0, so ist ein Fehler
|
||
aufgetreten, ist er grӇer, so stellt er die Nummer des Treibers dar.
|
||
|
||
Der folgende Ausschnitt zeigt, wie eine Einbindung in Turbo-Pascal aussehen
|
||
kann.
|
||
|
||
VAR
|
||
GraphMode, GraphDriver : INTEGER;
|
||
|
||
BEGIN
|
||
{ Grafiktreiber installieren }
|
||
GraphDriver := InstallUserDriver ('PRINTER', NIL);
|
||
IF (GraphDriver < 0) THEN BEGIN
|
||
{ Fehlerbehandlung }
|
||
...
|
||
END;
|
||
|
||
{ Gew<65>nschten Modus festlegen und Grafik einschalten }
|
||
GraphMode := 2; { Modus 2, 180*180 DPI }
|
||
InitGraph (GraphDriver, GraphMode, PathToDriver);
|
||
...
|
||
END;
|
||
|
||
Soll der Treiber als OBJ-Datei in das ausf<73>hrbare Programm eingebunden werden,
|
||
so m<>ssen folgende Schritte in genau dieser Reihenfolge durchgef<65>hrt werden:
|
||
|
||
* "Installierung" des Treibers mit InstallUserDriver. Diese Prozedur teilt
|
||
dem Grafik-Kernel mit, daá es einen Treiber mit dem Namen "PRINTER" gibt.
|
||
|
||
* "Registrierung" des Treibers mit RegisterBGIDriver. Diese Prozedur teilt
|
||
dem Grafik-Kernel mit, daá der Treiber (falls er verwendet werden sollte)
|
||
nicht von Platte zu laden ist, sondern daá er sich bereits im Speicher
|
||
befindet.
|
||
|
||
* Einschalten des Grafikmodus mit InitGraph.
|
||
|
||
Der folgende Code-Ausschnitt zeigt beispielhaft, wie die Einbindung erfolgen
|
||
kann. Es wird vorausgesetzt, daá der Treiber zuvor mittels
|
||
|
||
BINOBJ PRINTER.BGI PRINTER.OBJ PRINTERDRIVER
|
||
|
||
in eine OBJ-Datei umgewandelt worden ist (C-Programmierer: Das entsprechende
|
||
Programm heiát BGIOBJ und ist etwas komplizierter zu bedienen. Es m<>ssen beim
|
||
Aufruf alle Parameter angegeben werden! Dazu einfach BGIOBJ ohne Parameter
|
||
aufrufen und nach Hilfestellung vorgehen.)
|
||
|
||
|
||
{ Der Treiber als Prozedur deklariert }
|
||
PROCEDURE PRINTERDriver; FAR; EXTERNAL;
|
||
|
||
{ Einbinden des Treibers }
|
||
{$L PRINTER.OBJ}
|
||
|
||
VAR
|
||
GraphDriver : INTEGER; { Nummer des Treibers }
|
||
|
||
|
||
PROCEDURE Install;
|
||
{ F<>hrt die Installation des Treibers durch }
|
||
BEGIN
|
||
GraphDriver := InstallUserDriver ('PRINTER', NIL);
|
||
IF (GraphDriver < 0) THEN Error;
|
||
IF (RegisterBGIDriver (@PRINTERDriver) < 0) THEN Error;
|
||
END;
|
||
|
||
|
||
BEGIN { Hauptprogramm }
|
||
....
|
||
Install;
|
||
GraphMode := 1; { Autodetect }
|
||
InitGraph (GraphDriver, GraphMode, '');
|
||
{ Fehlerauswertung muss folgen }
|
||
....
|
||
END.
|
||
|
||
|
||
Weitere Details finden Sie im Handbuch zur jeweiligen Programmiersprache.
|
||
|
||
|
||
|
||
4. Grafik-Modi
|
||
|
||
Folgende Grafik-Modi sind verf<72>gbar:
|
||
|
||
Wert Bedeutung Anmerkungen
|
||
--------------------------------------------------------------------------
|
||
0 EPSON FX (8-Nadel), 240 * 72 DPI
|
||
1 EPSON FX (8-Nadel), 240 * 216 DPI
|
||
2 EPSON LQ (24-Nadel), 180 * 180 DPI
|
||
3 EPSON LQ (24-Nadel), 360 * 180 DPI
|
||
4 EPSON LQ (24-Nadel), 360 * 360 DPI
|
||
5 NEC P6, P6+, P60 (24-Nadel), 360 * 360 DPI (1)
|
||
6 IBM Proprinter X24 (24-Nadel), 180 * 180 DPI
|
||
7 IBM Proprinter X24 (24-Nadel), 360 * 180 DPI
|
||
8 EPSON LQ / NEC P6, P6+, 180 * 180 DPI, 9 Farben (6)
|
||
9 EPSON LQ / NEC P6, P6+, 360 * 180 DPI, 9 Farben (6)
|
||
10 EPSON LQ, 360 * 360 DPI, 9 Farben (6)
|
||
11 NEC P6, P6+, 360 * 360 DPI, 9 Farben (6)
|
||
12 Reserviert
|
||
13 Benutzerdefinierter Modus 1 (2)
|
||
14 Benutzerdefinierter Modus 2 (2)
|
||
15 Benutzerdefinierter Modus 3 (2)
|
||
16 HP LJ, 75 * 75 DPI (3)
|
||
17 HP LJ, 100 * 100 DPI (3)
|
||
18 HP LJ, 150 * 150 DPI (3)
|
||
19 HP LJ, 300 * 300 DPI (3)
|
||
20 HP LJ, 75 * 75 DPI, keine Kompression (4)
|
||
21 HP LJ, 100 * 100 DPI, keine Kompression (4)
|
||
22 HP LJ, 150 * 150 DPI, keine Kompression (4)
|
||
23 HP LJ, 300 * 300 DPI, keine Kompression (4)
|
||
24 HP DJ 500C, 75 * 75 DPI, 8 Farben, A4
|
||
25 HP DJ 500C, 100 * 100 DPI, 8 Farben, A4
|
||
26 HP DJ 500C, 150 * 150 DPI, 8 Farben, A4
|
||
27 HP DJ 500C, 300 * 300 DPI, 8 Farben, A4
|
||
28 HP DJ 550C, 75 * 75 DPI, 8 Farben, echtes Schwarz (7)
|
||
29 HP DJ 550C, 100 * 100 DPI, 8 Farben, echtes Schwarz (7)
|
||
30 HP DJ 550C, 150 * 150 DPI, 8 Farben, echtes Schwarz (7)
|
||
31 HP DJ 550C, 300 * 300 DPI, 8 Farben, echtes Schwarz (7)
|
||
32 HP LJ IV, 600 * 600 DPI (5)
|
||
33 EPSON LQ (24-Nadel), 180 * 180 DPI, DIN A3
|
||
34 EPSON LQ (24-Nadel), 360 * 180 DPI, DIN A3
|
||
35 EPSON LQ (24-Nadel), 360 * 360 DPI, DIN A3
|
||
36 NEC P7 (24-Nadel), 360 * 360 DPI, DIN A3 (1)
|
||
37 EPSON LQ (24-Nadel), 180 * 180 DPI, DIN A3, 9 Farben (6)
|
||
38 EPSON LQ (24-Nadel), 360 * 180 DPI, DIN A3, 9 Farben (6)
|
||
39 EPSON LQ (24-Nadel), 360 * 360 DPI, DIN A3, 9 Farben (6)
|
||
40 NEC P7 (24-Nadel), 360 * 360 DPI, DIN A3, 9 Farben (1) (6)
|
||
41 HP PaintJet 300 XL, 75 * 75 DPI, 8 Farben, A3 (8)
|
||
42 HP PaintJet 300 XL, 100 * 100 DPI, 8 Farben, A3 (8)
|
||
42 HP PaintJet 300 XL, 150 * 150 DPI, 8 Farben, A3 (8)
|
||
42 HP PaintJet 300 XL, 300 * 300 DPI, 8 Farben, A3 (8)
|
||
|
||
|
||
|
||
Alle anderen Modi erzeugen den Fehler -10 (grInvalidMode).
|
||
|
||
Anmerkungen zur Tabelle:
|
||
|
||
(1)
|
||
In den niedrigeren Aufl”sungen ist der Drucker EPSON kompatibel, d.h. es k”nnen
|
||
die Modi 2 und 3 zus„tzlich verwendet werden.
|
||
|
||
(2)
|
||
Siehe Abschnitt 8 (Benutzerdefinierte Modi).
|
||
|
||
(3)
|
||
Žltere Modelle des LaserJet II (und Nachbauten) beherrschen z.T. die vom Treiber
|
||
verwendete Kompressionsmethode nicht. Bei Problemen ist auf die (ansonsten
|
||
„quivalenten) Modi 20-23 auszuweichen, die keine Kompression verwenden.
|
||
|
||
(4)
|
||
Die Modi entsprechen den Modi 16-19, es wird jedoch keine Kompression der an den
|
||
Drucker gesandten Daten durchgef<65>hrt. Aus diesem Grund ist der Ausdruck
|
||
normalerweise langsamer.
|
||
|
||
(5)
|
||
Der Drucker LaserJet IV kann auch mit geringeren Aufl”sungen in den Modi 16-19
|
||
betrieben werden.
|
||
|
||
(6)
|
||
Der Drucker muá dazu mit einer Farboption ausgestattet sein.
|
||
|
||
(7)
|
||
Der Drucker verf<72>gt <20>ber eine separate Schwarz-Patrone und wird vom Treiber so
|
||
angesteuert, daá f<>r schwarze Fl„chen diese Patrone verwendet wird. Beachten Sie
|
||
dazu bitte die Hinweise im Abschnitt 6.4.
|
||
|
||
(8)
|
||
Diese Modi entsprechen bis auf die BlattgrӇe den Modi 24-27. Der PaintJet
|
||
300 XL l„át sich auch in diesen Modi betreiben, wenn nur eine Ausgabe im
|
||
DIN A4 Format gew<65>nscht ist.
|
||
|
||
|
||
|
||
5. Ausgabe der Grafik
|
||
|
||
Die Ausgabe der Grafik erfolgt beim abschlieáenden CloseGraph. Sollen mehrere
|
||
Seiten ausgegeben werden, so ist eine Ausgabe auch mittels Aufruf von
|
||
ClearDevice m”glich. Nach Aufruf dieser Funktion ist die Zeichenfl„che wieder
|
||
leer.
|
||
|
||
Der Treiber schreibt die Daten auf das MS-DOS Datei-Handle Nr. 4, das
|
||
normalerweise (von COMMAND.COM) vor Start des Programms mit dem Ger„t PRN
|
||
(also dem ersten Drucker) verbunden wird. Das Device wird vor der Ausgabe auf
|
||
"raw data" um- und danach wieder in den Orginalzustand geschaltet.
|
||
|
||
Die Verwendung eines Standard-Handles hat den Vorteil, daá die Ausgabe leicht in
|
||
eine Datei oder auf einen anderen Ausgabeport umgeleitet werden kann (letzteres
|
||
z.B. mit Hilfe des MODE-Kommandos). Beispiele zur Umleitung finden Sie in den
|
||
Beispielprogrammen.
|
||
|
||
|
||
|
||
6. Besonderheiten der verschiedenen Drucker
|
||
|
||
6.1 LaserJet II
|
||
|
||
Bei „lteren Modellen dieses Druckers ist die vom Treiber verwendete Methode zur
|
||
Kompression der Druckdaten nicht implementiert. Nachbauten verhalten sich hier
|
||
unterschiedlich. Bei Problemen sind anstelle der Modi 16-19 die Modi 20-23 zu
|
||
verwenden.
|
||
|
||
|
||
|
||
6.2 DeskJet 500
|
||
|
||
Beim DeskJet 500 und Nachfolgern (auch DeskJet 500C im Schwarz-Weiá Modus)
|
||
k”nnen Ausdruckparameter eingestellt werden. N„heres dazu steht in Abschnitt
|
||
9 (Optionen).
|
||
|
||
|
||
|
||
6.3 DeskJet 500C
|
||
|
||
Der Drucker DeskJet 500C und seine Nachfolger unterst<73>tzten 8 Farben, die aus
|
||
den drei Grundfarben Cyan, Gelb und Magenta zusammengesetzt werden. Da es sich
|
||
hier um eine subtraktive Palette handelt, unterscheiden sich die Farben von
|
||
denen des Bildschirmadapters (der eine additive Palette besitzt). Aus diesem
|
||
Grund k”nnen die vordefinierten Farb-Konstanten nicht verwendet werden. (Rein
|
||
syntaktisch k”nnen diese Konstanten nat<61>rlich verwendet werden, d.h. der
|
||
Compiler meldet keinen Fehler, das Ergebnis sieht dann jedoch etwas anders aus
|
||
als erwartet.) Die Zuordnung der Farben entnehmen Sie bitte der folgenden
|
||
Tabelle:
|
||
|
||
Wert Farbe
|
||
-------------------
|
||
0 Weiá
|
||
1 Cyan
|
||
2 Magenta
|
||
3 Blau
|
||
4 Gelb
|
||
5 Gr<47>n
|
||
6 Rot
|
||
7 Schwarz
|
||
|
||
Zus„tzlich k”nnen beim DeskJet 500C Ausdruckparameter ver„ndert werden, n„heres
|
||
dazu steht in Abschnitt 9 (Optionen).
|
||
|
||
|
||
|
||
6.4 DeskJet 550C
|
||
|
||
Der DeskJet 550C verf<72>gt im Gegensatz zu seinem Vorl„ufer <20>ber eine separate
|
||
Schwarzpatrone, die gleichzeitig verwendet werden kann. In den Modi 28-31 ist
|
||
es m”glich, diese separate Patrone zum Druck schwarzer Fl„chen zu benutzen.
|
||
Beachten Sie dazu bitte den folgenden Hinweis aus dem Handbuch des Herstellers
|
||
(im Orginal Englisch, von mir frei <20>bersetzt):
|
||
|
||
Vorsicht ist geboten, wenn schwarze und farbige Tinte gleichzeitig auf
|
||
einer Seite verwendet wird. Die Tinten aus der Farb-Patrone haben eine
|
||
andere chemische Zusammensetzung als die Tinte aus der Schwarz-Patrone.
|
||
Wenn beide in direkten Kontakt miteinander kommen, kann es passieren, daá
|
||
sich die schwarze merklich mit der farbigen Tinte mischt. Das Problem
|
||
f„llt am meisten auf, wenn viel Tinte aufgetragen wird. Die Verwendung
|
||
von Shingling beim Ausdruck kann dieses Ph„nomen verringern oder ganz
|
||
eliminieren. 25% Shingling kann die Qualit„t des Ausdrucks verbessern,
|
||
50% Shingling kann das Problem evtl. ganz zum Verschwinden bringen.
|
||
Alternativ kann mit geringerem Tintenauftrag gearbeitet werden (d<>nnere
|
||
Linien oder F<>llmuster), oder es kann durch geeigneten Ausdruck daf<61>r
|
||
gesorgt werden, daá sich die Fl„chen mit unterschiedlichen Tinten nicht
|
||
ber<65>hren.
|
||
|
||
Weiterhin sind alle Hinweise aus Abschnitt 6.3 g<>ltig.
|
||
|
||
|
||
|
||
6.5 PaintJet 300 XL
|
||
|
||
Beim PaintJet 300 XL handelt es sich um einen A3 Farbdrucker, der auch mehr
|
||
als 8 Farben unterst<73>tzt. Dieser Drucker l„sst sich in den Modi 24-27 (A4)
|
||
und 41-44 (A3) betreiben. Modi mit mehr als 8 Farben stehen derzeit nicht
|
||
zur Verf<72>gung. F<>r die Farbzuordnung, siehe Abschnitt 6.3.
|
||
|
||
|
||
|
||
6.6 HP DeskJet 1200
|
||
|
||
Der Drucker m<>sste die Modi 24-27 "verstehen". Aufgund fehlender Hardware ist
|
||
das bisher aber ungetestet. F<>r R<>ckmeldungen w„re ich dankbar.
|
||
|
||
|
||
|
||
6.7 Canon BJ-300 und BJ-330
|
||
|
||
Dieser Tintenstrahldrucker emuliert entweder die EPSON Drucker LQ850 bzw. LQ1050
|
||
oder den IBM Proprinter X24. Je nach Einstellung am Drucker lassen sich deshalb
|
||
die Modi 2-4 oder 8-9 des Treibers verwenden. Die Einstellung des
|
||
Emulationsmodus ist im Druckerhandbuch beschrieben.
|
||
|
||
|
||
|
||
6.8 Canon BJC-800
|
||
|
||
Als Emulationsmodus sollte "EPSON LQ-2550" gew„hlt werden. Der Drucker
|
||
unterst<EFBFBD>tzt Farbe, die Farbmodi der EPSON-Drucker k”nnen verwendet werden.
|
||
|
||
|
||
|
||
6.9 NEC P6, P6+, P7, P7+, EPSON LQ Serie
|
||
|
||
In den entsprechend gekennzeichneten Modi kann der Drucker als Farbdrucker
|
||
verwendet werden. Dazu ist jedoch eine Hardware-Aufr<66>stung des Druckers
|
||
notwendig.
|
||
|
||
Die Farbzuordnung entnehmen Sie bitte folgender Tabelle:
|
||
|
||
Wert Farbe
|
||
-------------------
|
||
0 Weiá
|
||
1 Cyan
|
||
2 Magenta
|
||
3 Blau
|
||
4 Gelb
|
||
5 Gr<47>n
|
||
6 Rot
|
||
7 Braun
|
||
8 Schwarz
|
||
|
||
|
||
|
||
|
||
7. Der Treiber im Protected-Mode
|
||
|
||
Aufgrund der Eigenheiten des Protected-Mode muáte Borland das Format der Treiber
|
||
beim šbergang auf die Version 7.0 von Turbo-Pascal „ndern. Die neuen Versionen
|
||
des Grafik-Kernels erkennen jedoch die alten Treiber und behandeln diese
|
||
korrekt, vorausgesetzt, das Programm l„uft im Real-Mode. Die folgende Auflistung
|
||
zeigt, welcher Treiber mit welchem Compiler kompatibel ist:
|
||
|
||
* Turbo-Pascal bis Version 6.0 und Borland-C++ bis Version 3.1 laufen nur im
|
||
Real-Mode und kennen nur das alte Format der Treiber.
|
||
|
||
* Borland-Pascal 7.0 l„uft sowohl im Real- als auch im Protected-Mode und
|
||
erkennt beide Treiberformate. Der Betrieb im Protected-Mode ist jedoch nur
|
||
mit dem neuen Format m”glich.
|
||
|
||
* Turbo-Pascal 7.0 ist eine abgespeckte Version von Borland-Pascal 7.0 und
|
||
l„uft nur im Real-Mode, erkennt aber beide Treiberformate.
|
||
|
||
Im Paket befinden sich der Treiber in beiden Formaten. Der Treiber f<>r das neue
|
||
(DPMI-) Format tr„gt jedoch einen anderen Namen (PRINTER.BP7) und muá vor
|
||
Gebrauch umbenannt werden.
|
||
|
||
Im Real-Mode unterscheiden sich beide Versionen des Treibers nicht. Im
|
||
Protected-Mode ergeben sich jedoch folgende Einschr„nkungen:
|
||
|
||
* Der Treiber unterst<73>tzt kein EMS und kein XMS. Es kann nur in den
|
||
DPMI-Speicher und auf Platte ausgelagert werden. Bei Verwendung von
|
||
DPMI-Speicher ist der Treiber daf<61>r wesentlich schneller, da ein direkter
|
||
Zugriff erfolgen kann.
|
||
|
||
* Der Runtime-Manager von Borland belegt beim Start s„mtlichen verf<72>gbaren
|
||
DPMI-Speicher, der dann dem Treiber nicht mehr zur Verf<72>gung steht. Aus
|
||
diesem Grund muá dem Runtime-Manager durch Setzen einer Environment-Variable
|
||
mitgeteilt werden, welchen Anteil des DPMI-Speichers er freizuhalten hat -
|
||
ansonsten wird prinzipiell auf Platte ausgelagert. Dieser Speicher steht
|
||
dann aber dem Programm nicht mehr zur Verf<72>gung. (Zumindest nicht <20>ber die
|
||
Routinen des Borland-Pakets. šber DPMI-Funktionen kann der Speicher
|
||
selbstverst„ndlich belegt werden.) Soll DPMI-Speicher benutzt werden, so ist
|
||
vor Start des Programms auf DOS-Ebene
|
||
|
||
SET RTM=EXTLEAVE nnnn
|
||
|
||
einzugeben, wobei nnnn die GrӇe (in KB) des vom Runtime-Managers nicht zu
|
||
belegenden Speichers ist. Um z.B. 1MB Speicher f<>r den Treiber freizuhalten,
|
||
wird
|
||
|
||
SET RTM=EXTLEAVE 1024
|
||
|
||
verwendet. N„heres dazu lesen Sie bitte in Ihrem Compiler-Handbuch nach.
|
||
|
||
ACHTUNG: Borland hat mehrere Monate lang eine Version 7.00 des Borland-Pascal
|
||
Compilers vertrieben die extrem fehlerhaft war (die sp„tere, fehlerbereinigte
|
||
Version tr„gt die Versionsnummer 7.01). Falls Sie im Besitz dieser „lteren
|
||
Version sind, sollten Sie auf jeden Fall ein Upgrade bei Borland erstehen (auch
|
||
wenn dieses nicht kostenlos ist). Die korrekte Version erkennen Sie an der
|
||
Uhrzeit der letzten Žnderung der Datei: Die richtige Version des Compilers zeigt
|
||
hier 07:01, die falsche 07:00.
|
||
|
||
|
||
|
||
8. Benutzerdefinierte Modi
|
||
|
||
PRINTER.BGI l„sst sich <20>ber Drucker-Definitionsdateien an fast alle Nadeldrucker
|
||
anpassen. Dazu dient ein kleines šbersetzungsprogramm zusammen mit einigen daf<61>r
|
||
reservierten Modi im Treiber. Bei der Initialisierung sucht der Treiber nach den
|
||
Dateien PRINTER1.PDF, PRINTER2.PDF und PRINTER3.PDF (f<>r die Modi 13-15). (Das
|
||
".PDF" steht f<>r "Printer Definition File".) Der Treiber sucht in mehreren
|
||
Verzeichnissen nach diesen Dateien, und zwar:
|
||
|
||
* Im aktuellen Verzeichnis.
|
||
* Im Verzeichnis, in dem sich die EXE-Datei befindet. Dieser Mechanismus
|
||
funktioniert erst ab DOS 3.0.
|
||
* Im Verzeichnis, das die Environment-Variable BGIPATH angibt. Sie k”nnen
|
||
diese Variable auf DOS-Ebene mit
|
||
|
||
set BGIPATH=X:\YYY\ZZZ
|
||
|
||
setzen.
|
||
|
||
Findet PRINTER.BGI eine oder mehrere dieser Dateien so wird/werden sie geladen
|
||
und Modus wird entsprechend der in der Datei enthaltenen Angaben unterst<73>tzt.
|
||
|
||
Zur Erstellung dieser Dateien gehen Sie wie folgt vor:
|
||
|
||
* Erstellen Sie mit Ihrem Text-Editor eine ASCII-Datei mit den erforderlichen
|
||
Steuersequenzen. Lesen Sie dazu die Anleitung (PDFCOMP.DOC) und orientieren
|
||
Sie sich an den beigelegten Beispieldateien.
|
||
* šbersetzen Sie die ASCII-Datei mit Hilfe des Programms PDFCOMP in eine
|
||
Bin„rdatei.
|
||
* Benennen Sie die Datei um in PRINTERx.PDF, je nachdem welchen Modus Sie
|
||
verwenden wollen.
|
||
* Kopieren Sie die Datei in eines der oben genannten Verzeichnisse. Der
|
||
Treiber l„dt diese Datei bei der Initialisierung und unterst<73>tzt den Modus
|
||
dann wie einen eingebauten.
|
||
* Falls Sie mir und anderen Benutzern einen Gefallen tun wollen: Senden Sie
|
||
mir die Definitionsdatei (ASCII-Datei) zu, damit ich sie anderen Benutzern
|
||
zur Verf<72>gung stellen kann. Vermerken Sie dazu in der Datei bitte Ihren
|
||
Namen (f<>r R<>ckfragen) und die genaue Bezeichnung des Druckers, f<>r den die
|
||
Datei erstellt wurde.
|
||
|
||
Findet der Treiber eine oder beide Dateien nicht in den oben genannten
|
||
Verzeichnissen, so gibt der Treiber den Fehlercode grInvalidMode (-10) zur<75>ck.
|
||
Je nachdem welche Dateien vorhanden sind k”nnen die Modi 13-15 ganz normal
|
||
angesprochen werden.
|
||
|
||
|
||
|
||
9. Einstellen von Druck-Optionen
|
||
|
||
Der Drucker unterst<73>tzt bei Ausgabe auf Drucker vom Typ DeskJet (in den Modi
|
||
16-31) Optionen zur Beeinflussung der Ausgabequalit„t. Bei Nadel- oder
|
||
Laserdruckern haben die hier besprochenen Einstellungen keine Auswirkung, die
|
||
entsprechenden Befehle werden ignoriert. Die Optionen werden <20>ber den Treiber
|
||
durch einen "Miábrauch" der Funktion SetAllPalette verf<72>gbar gemacht. Diese
|
||
Funktion ist speziell auf EGA-Karten bzw. VGA-Karten im 16-Farb Modus
|
||
zugeschnitten und hat bereits bei Super-VGA's im Modus mit 256 Farben keine
|
||
Bedeutung mehr, so daá die Verwendung zur šbergabe eines Kontrollblocks an den
|
||
Treiber nahe lag.
|
||
|
||
šblicherweise wird eine Variable vom Typ PaletteType <20>bergeben, deren
|
||
Deklaration wie folgt lautet:
|
||
|
||
CONST
|
||
MaxColor = 15;
|
||
|
||
TYPE
|
||
PaletteType = RECORD
|
||
Size : BYTE;
|
||
Colors : ARRAY [0..MaxColor] OF SHORTINT;
|
||
END;
|
||
|
||
Size entspricht der Anzahl der Farben des Druckers, muá also in den Schwarzweiá-
|
||
Modi auf 2, in den Farbmodi des DeskJet dagegen auf 8 gesetzt werden. Im Array
|
||
Colors sind die ersten Size Bytes g<>ltig und werden bei einem Aufruf vom
|
||
Grafik-Kernel an den Treiber weitergereicht.
|
||
|
||
Die Bedeutung der Werte im Array Colors ergeben sich aus den folgenden Tabellen:
|
||
|
||
M”gliche Ausdruck-Optionen beim DeskJet 500:
|
||
|
||
Index Defaultwert Bedeutung
|
||
-----------------------------------------------------------------
|
||
0 Reserviert
|
||
1 0 Ausgabequalit„t:
|
||
0: Qualit„t wie am Drucker eingestellt
|
||
1: Draft
|
||
2: High
|
||
|
||
|
||
M”gliche Ausdruck-Optionen beim DeskJet 500C/550C:
|
||
|
||
Index Defaultwert Bedeutung
|
||
-----------------------------------------------------------------
|
||
0 Reserviert
|
||
1 0 Ausgabequalit„t:
|
||
0: Qualit„t wie am Drucker eingestellt
|
||
1: Draft
|
||
2: High
|
||
2 0 Shingling:
|
||
0: Keines
|
||
1: 50% Shingling (2 Druck-Durchg„nge)
|
||
2: 25% Shingling (4 Druck-Durchg„nge)
|
||
3 1 Depletion:
|
||
0: Keine
|
||
1: 25%
|
||
2: 50%
|
||
4-7 Reserviert
|
||
|
||
Beim "Shingling" wird die Ausgabe einer Zeile in mehrere Durchg„nge aufgeteilt,
|
||
um der Farbe zwischenzeitlich eine M”glichkeit zum Antrocknen zu geben und so
|
||
eine saubere Schichtung der Farben zu gew„hrleisten. Der Defaultwert ist 0 (kein
|
||
Shingling), die Werte 1 bzw. 2 verlangsamen die Ausgabe, da mehr Durchg„nge
|
||
erforderlich sind.
|
||
|
||
Beim "Depletion"-Verfahren wird nach einem (mir unbekannten - ich zitiere nur
|
||
das Handbuch) gleichnamigen Algorithmus ein Teil der Farb-Pixel entfernt um
|
||
Farbe zu sparen und die Qualit„t der Druckausgabe zu verbessern. Default ist
|
||
hier 1 (25% Depletion). Hinweis: Es werden keinesfalls die angegebene
|
||
Prozentzahl an Pixeln entfernt, es handelt sich um die Vorbesetzung einer
|
||
Variable im o.g. Algorithmus.
|
||
|
||
Die Einstellung der Druck-Optionen erfolgt durch Deklaration einer Variablen
|
||
(oder typisierten Konstanten) vom Typ PaletteType, Zuweisung der Werte Aufruf
|
||
von SetAllPalette mit der deklarierten Variablen als Parameter. Werte die sich
|
||
nicht „ndern sollen (dazu geh”ren auch die mit "Reserviert" gekennzeichneten
|
||
Eintr„ge) sollten mit -1 belegt werden (siehe Compiler-Handbuch).
|
||
|
||
ACHTUNG: Sie m<>ssen diese Werte nicht neu einstellen - der Treiber verwendet
|
||
dann die unter "Defaultwert" stehenden Vorgaben. Diese Werte sind die
|
||
Standard-Werte des Druckers und haben normalerweise eine saubere Druck-Ausgabe
|
||
zur Folge. F<>r spezielle Anwendungen oder kommerzielle Programme kann es jedoch
|
||
u.U. sinnvoll sein, die Ausgabe zu beeinflussen.
|
||
|
||
|
||
|
||
10. Fehler im UNIT Graph
|
||
|
||
10.1 Fehlercodes
|
||
|
||
Durch einen Fehler im UNIT Graph werden die negativen Fehlercodes, die der
|
||
Treiber zur<75>ckgibt positiv an die Anwendung durchgereicht: Das Status-Feld des
|
||
Treibers, <20>ber das die Fehlercodes r<>ckgemeldet werden ist 1 Byte groá. Da die
|
||
Fehlercodes negative Werte sind, h„tte dieses Feld als SHORTINT deklariert
|
||
werden m<>ssen. Die Entwickler haben dies aber <20>bersehen und das Feld als BYTE
|
||
deklariert, was dazu f<>hrt, daá die Fehlercodes nicht vorzeichenrichtig
|
||
erweitert werden. Abhilfe schafft eine Abfrage wie in der folgenden Abbildung.
|
||
Unter Umst„nden kann GraphResult entsprechend <20>berdefiniert werden.
|
||
|
||
VAR
|
||
Result : INTEGER;
|
||
|
||
BEGIN
|
||
{ Grafik einschalten }
|
||
InitGraph (GraphDriver, GraphMode, '');
|
||
|
||
{ Fehlercode auswerten. Durch den Typecast werden die
|
||
obersten 8 Bits abgeschnitten, durch die Zuweisung
|
||
an einen INTEGER wird vorzeichenrichtig erweitert.
|
||
}
|
||
Result := SHORTINT (GraphResult);
|
||
IF (Result <> 0) THEN BEGIN
|
||
Writeln (GraphErrorMsg (Result));
|
||
Halt;
|
||
END;
|
||
....
|
||
END;
|
||
|
||
|
||
|
||
10.2 SetGraphMode
|
||
|
||
Die Funktion SetGraphMode arbeitet fehlerhaft wenn Modusnummern grӇer 10
|
||
angegeben werden. Von der Verwendung dieser Funktion wird abgeraten. Verwenden
|
||
Sie stattdessen Aufrufe von CloseGraph und InitGraph. Siehe auch den folgenden
|
||
Abschnitt.
|
||
|
||
|
||
|
||
10.3 RestoreCRTMode und SetGraphMode
|
||
|
||
Die Funktionen arbeiten unter Borland-Pascal 7.0 im Protected-Mode nicht
|
||
korrekt, u.U. ist ein GP Fault die Folge.
|
||
|
||
|
||
|
||
10.4 RegisterBGIDriver
|
||
|
||
Manuell geladene (d.h. als .OBJ-File eingebundene oder aus einem Resource-File
|
||
geladene) Treiber m<>ssen unter Borland-Pascal 7.0 im Protected-Mode auf eine
|
||
Adresse zu liegen kommen, die einen Offset von 0 hat. Ansonsten bricht das
|
||
Grafik-Kernel beim zweiten Aufruf von InitGraph u.U. das Programm mit einer
|
||
Fehlermeldung ab.
|
||
|
||
Um sicherzustellen, daá der Treiber auf einer Adresse mit Offset 0 zu liegen
|
||
kommt, wenn er als .OBJ-Datei eingebunden wird, erstellen Sie bitte ein
|
||
separates Modul, in dem sich ausschlieálich der Treiber befindet. Exportieren
|
||
Sie die Adresse des Treibers und f<>hren Sie die Initialisierung der Grafik in
|
||
einem anderen Modul durch.
|
||
|
||
|
||
|
||
11. Zusammenfassung
|
||
|
||
Nachdem in den vorigen Abschnitten nach und nach immer mehr Details dargestellt
|
||
wurden, sollen diese Informationen hier nochmals kurz zusammengefaát und anhand
|
||
eines (diesmal vollst„ndigen) Beispiels in Turbo-Pascal demonstriert werden.
|
||
Weitere Beispiele (auch in C) sind im Paket enthalten.
|
||
|
||
* Die Einbindung des Treibers geschieht mittels der Prozedur
|
||
InstallUserDriver, die die Nummer des Treibers zur<75>ckliefert. Diese Prozedur
|
||
muá vor InitGraph aufgerufen werden.
|
||
|
||
* Die Abfrage von Fehlern muá <20>ber den in Abschnitt 10 beschriebenen Umweg
|
||
erfolgen, falls die Nummer des Fehlers ausgewertet werden soll (z.B. bei
|
||
Aufruf von GraphErrorMsg zur Ausgabe einer Meldung).
|
||
|
||
* Die Ausgabe der Grafik erfolgt beim Aufruf von ClearDevice sowie beim
|
||
abschliessenden CloseGraph.
|
||
|
||
* Die Einstellung von Ausdruck-Optionen oder die Erkl„rungen zum Datei-Handle
|
||
k”nnen Sie f<>r den Anfang getrost vergessen. Der Ausdruck funktioniert
|
||
normalerweise auch ohne daá Sie diese Optionen neu einstellen. (Falls Sie
|
||
nicht ein sehr speziell konfiguriertes System haben. Aber dann wissen Sie ja
|
||
sowieso, was mit diesen Dingen gemeint ist.)
|
||
|
||
|
||
Komplettes Beispiel in Turbo-Pascal:
|
||
|
||
VAR
|
||
GraphDriver, GraphMode : INTEGER;
|
||
Result : INTEGER;
|
||
|
||
BEGIN
|
||
{ Einbinden des Treibers }
|
||
GraphDriver := InstallUserDriver ('PRINTER', NIL);
|
||
IF (GraphDriver < 0) THEN BEGIN
|
||
{ Fehlerbehandlung }
|
||
....
|
||
END;
|
||
|
||
{ Modus setzen und Einschalten der Grafik }
|
||
GraphMode := 11; { Modus 11, LaserJet 300 DPI }
|
||
InitGraph (GraphDriver, GraphMode, '');
|
||
{ Fehler auswerten }
|
||
Result := SHORTINT (GraphResult);
|
||
IF (Result <> 0) THEN BEGIN
|
||
{ Fehlerbehandlung }
|
||
Writeln (GraphErrorMsg (Result));
|
||
Halt;
|
||
END;
|
||
|
||
{ Grafik-Operationen }
|
||
Line (0, 0, GetMaxX, GetMaxY);
|
||
....
|
||
|
||
{ Grafik ausgeben }
|
||
ClearDevice;
|
||
|
||
{ Neue Grafik }
|
||
Line (0, 0, GetMaxX, GetMaxY);
|
||
....
|
||
|
||
{ Grafik ausgeben und beenden }
|
||
CloseGraph;
|
||
END;
|
||
|
||
|
||
|
||
12. Zus„tzliche Informationen
|
||
|
||
Dieser Abschnitt enth„lt zus„tzliche Informationen, die u.U. von Nutzen sein
|
||
k”nnen. Weitere Hinweise entnehmen Sie bitte der Datei README.TXT.
|
||
|
||
* Die Auswahl der Speicherm”glichkeit erfolgt in der Reihenfolge der damit
|
||
erzielbaren Geschwindigkeit:
|
||
|
||
- Der schnellste Zugriff wird durch die Verwendung von DPMI-Speicher im
|
||
Protected-Mode erreicht.
|
||
|
||
- Direkt danach folgt EMS-Speicher, wobei der Unterschied zu DPMI fast
|
||
vollst„ndig auf die zur Seitenumschaltung ben”tigte Zeit zur<75>ckzuf<75>hren
|
||
ist und sich je nach verwendetem EM-Manager unterscheiden kann.
|
||
|
||
- Bei Verwendung von XMS wird kein Speicher eingeblendet, sondern die
|
||
Daten werden zwischen normalem und erweiterten Speicher hin- und
|
||
herkopiert, was zus„tzlich Zeit ben”tigt.
|
||
|
||
- Die Verwendung einer tempor„ren Datei auf Platte ist umso langsamer, je
|
||
h”her die Aufl”sung ist (weil der interne Puffer des Treibers einen
|
||
immer kleineren Bereich der Zeichenfl„che umfaát). Vor allem bei den
|
||
hohen Aufl”sungen (ab 180 * 360 DPI) sollte die Verwendung von Platte
|
||
wenn m”glich vermieden werden. (Wobei sich dies nicht verallgemeinern
|
||
l„sst: Wird ein gutes Plattenpufferprogramm verwendet, ist u.U. auch in
|
||
den h”heren Aufl”sungen die Ausdruckzeit akzeptabel. Versuche in den
|
||
DOS-Boxen von OS/2 haben gezeigt, daá auch im Modus 19 mit 300 DPI noch
|
||
Ausdrucke m”glch sind, die ben”tigte Zeit betr„gt ca. 3-4 Minuten.)
|
||
|
||
* Die tempor„re Datei bei Auslagerung auf Platte wird beim Aufruf von
|
||
InitGraph im aktuellen Verzeichnis angelegt. Soll diese Datei in einem
|
||
bestimmten Verzeichnis liegen, so ist vor Aufruf von InitGraph dieses
|
||
Verzeichnis zum aktuellen Verzeichnis zu machen. Sp„tere Wechsel des
|
||
Verzeichnisses haben keinen Einfluss mehr auf die Lage der tempor„ren Datei.
|
||
Die Auswertung einer Environment-Variable (wie z.B. TMP oder TEMP) erschien
|
||
mir problematisch, da diese Variable oft auf eine RAM-Disk mit beschr„nkter
|
||
Kapazit„t zeigt. Durch o.g. Verfahren ist es jedoch m”glich, das Verzeichnis
|
||
festzulegen, in das die tempor„re Datei gelegt wird.
|
||
|
||
* Da R<>ckmeldungen des Treibers nach durchgef<65>hrten Operationen durch das
|
||
Borland Grafik-Modul grӇtenteils nicht ausgewertet werden, ist die R<>ckgabe
|
||
eines Fehlercodes bei nicht eingeschaltetem Drucker nicht m”glich. Sie
|
||
sollten daher vor Beginn der Grafik-Ausgabe den Drucker-Status pr<70>fen.
|
||
PRINTER.BGI bricht bei Druckerfehlern (also auch bei ausgeschaltetem
|
||
Drucker) den Ausdruck sofort ab.
|
||
|
||
* CloseGraph ruft automatisch immer RestoreCRTMode auf, was zur Folge hat, daá
|
||
der Text-Bildschirm gel”scht wird. Sie m<>ssen daher eventuelle Inhalte
|
||
retten und nach CloseGraph wiederherstellen (oder kurzfristig die
|
||
Modus-Umschaltung verhindern, indem Sie einen eigenen Handler f<>r den
|
||
Interrupt 10h installieren).
|
||
|
||
* F<>r die Verwendung von EMS wird eine Unterst<73>tzung der EMS 3.2 kompatiblen
|
||
Funktionen vorausgesetzt (dies wird von allen mir bekannten EMS-Treibern
|
||
erf<72>llt). F<>r den XMM (E<x>tended <M>emory <M>anager) erwartet PRINTER.BGI
|
||
zumindest eine Versionnummer von 2.0, das DPMI-Interface muá Version 0.9
|
||
oder neuer entsprechen.
|
||
|
||
* Bei Auslagerung auf Platte <20>berpr<70>ft der Treiber bei der Initialisierung den
|
||
zur Verf<72>gung stehenden Platz auf dem aktuellen Laufwerk. Falls eine
|
||
Auslagerung in EMS oder XMS nicht m”glich ist, muá also zum Zeitpunkt des
|
||
Aufrufs von InitGraph gen<65>gend Platz auf der Platte vorhanden sein.
|
||
|
||
* Wird das Programm vor dem Aufruf von CloseGraph unterbrochen, erh„lt der
|
||
Treiber keine Gelegenheit mehr, das von ihm verwendete Speichermedium
|
||
"aufzur„umen". Dies kann zum Beispiel beim Debuggen eines Programms
|
||
passieren, wenn das Programm nicht bis zu Ende ausgef<65>hrt wird. Die Folge
|
||
davon sind belegte EMS-Seiten, belegter XMS-Speicher oder nicht gel”schte
|
||
tempor„re Dateien auf der Festplatte. Vor allem letztere sind „rgerlich,
|
||
weil sie beim Neustart des Systems nicht gel”scht werden und ob ihrer Gr”áe
|
||
recht schnell die Platte f<>llen. Diese Dateien werden vom Treiber als
|
||
versteckte (Attribut Hidden) Dateien im aktuellen Verzeichnis angelegt. Sie
|
||
sollten also nach einem Programm-Abbruch pr<70>fen, ob solche Dateien vorhanden
|
||
sind (erkennbar an Namen wie AACGHFKL) und diese - falls vorhanden -
|
||
l”schen.
|
||
|
||
* Die Aufl”sungen mit 240 * 72 DPI und 240 * 216 DPI funktionieren nicht auf
|
||
24-Nadeldruckern! Auf den ersten Blick scheinen auch die 24-Nadler <20>ber
|
||
diese Modi zu verf<72>gen. Ein Test zeigt jedoch, daá <20>ber den unteren
|
||
Seitenrand hinausgedruckt wird. Dies liegt daran, daá 24-Nadel Drucker diese
|
||
Modi simulieren, indem nur jede dritte Nadel verwendet wird. Da der
|
||
Nadel-Abstand bei 1/180 Zoll liegt ergibt sich bei Verwendung jeder dritten
|
||
Nadel eine vertikale Aufl”sung von 60 DPI (im Gegensatz zu 72 DPI bei den
|
||
8-Nadlern). Aufgrund dieser niedrigeren Aufl”sung beansprucht das Bild in
|
||
vertikaler Richtung mehr Platz, was zum šberschreiten des unteren Bildrandes
|
||
f<>hrt.
|
||
|
||
* Der Modus 360 * 360 DPI wird nicht von allen Nadeldruckern unterst<73>tzt.
|
||
Zus„tzlich ist dieser Modus von unterschiedlichen Herstellern auch
|
||
unterschiedlich implementiert worden. Falls Ihr Drucker die Demo-Programme
|
||
in diesem Modus fehlerhaft ausdruckt, pr<70>fen Sie bitte erst anhand Ihres
|
||
Druckerhandbuchs, ob Ihr Drucker einen Befehl zum Einstellen des
|
||
Zeilenvorschubs in Einheiten von 1/360 Zoll kennt. Wenn dies nicht der Fall
|
||
ist, beherrscht Ihr Drucker diesen Modus nicht. Ist es der Fall, vergleichen
|
||
Sie den Befehl bitte mit den folgenden beiden:
|
||
|
||
Hersteller Steuersequenz
|
||
-----------------------------
|
||
EPSON ESC '+' <n>
|
||
NEC FS '3' <n>
|
||
|
||
Verwenden Sie dann den entsprechenden Modus des Treibers (NEC 360 * 360 oder
|
||
EPSON 360 * 360).
|
||
|
||
Sollte Ihr Drucker einen v”llig anderen Befehl zur Einstellung verwenden,
|
||
m<>ssen Sie eine Drucker-Definitionsdatei f<>r diesen Modus erzeugen. Lesen
|
||
Sie dazu bitte den entsprechenden Abschnitt.
|
||
|
||
* In der C-Version existiert eine undokumentierte Variable namens _BGI_auto,
|
||
die dazu verwendet werden kann, das L”schen des Bildschirms bei initgraph()
|
||
und closegraph() zu verhindern. Diese Variable war im urspr<70>nglichen
|
||
BGI-Konzept daf<61>r vorgesehen war, das L”schen des Bildschirms zu
|
||
unterdr<64>cken, indem sie vom Treiber (PRINTER.BGI) auf einen "magischen" Wert
|
||
gesetzt wird. Aufgrund eines der vielen Fehler im Grafik-Kernel funktioniert
|
||
dies jedoch nicht, da das L”schen des Bildschirms vor dem Aufruf des
|
||
Treibers geschieht, so daá ein sp„teres Setzen dieser Variable wirkungslos
|
||
ist. In der "C"-Version des Grafik-Kernels ist diese Variable jedoch
|
||
”ffentlich zug„nglich und kann so vor dem Einschalten des Grafik-Modus vom
|
||
Programm gesetzt werden. Es gibt keine Garantie daf<61>r, daá dieses Vorgehen
|
||
mit sp„teren Versionen des Grafik-Kernels kompatibel ist (es ist jedoch
|
||
anzunehmen, daá sich an der GRAPHICS Library nicht mehr viel „ndern wird).
|
||
Die Variable wird deklariert als
|
||
|
||
extern char _BGI_auto;
|
||
|
||
Nach der Zuweisung
|
||
|
||
_BGI_auto = 0xA5;
|
||
|
||
l”scht das Grafik-Kernel den Bildschirm nicht mehr. Diese Variable existiert
|
||
auch in der Pascal-Version ist allerdings dort nicht zug„nglich, da der Name
|
||
nur innerhalb von Graph bekannt ist.
|
||
|
||
* Wenn sowohl der Treiber als auch das Programm EMS verwenden kann es unter
|
||
Umst„nden zu Problemen kommen. Das ist vor allem dann der Fall, wenn das
|
||
Programm Overlays ins EMS auslagert. Die einfachste M”glichkeit, diese
|
||
Schwierigkeiten zu umgehen ist es, einem der beiden die Benutzung des EMS zu
|
||
untersagen. Das kann im Fall der Overlays durch Streichen des Aufrufs von
|
||
OvrInitEMS geschehen. Soll der Treiber kein EMS verwenden, so ist vor Aufruf
|
||
von InitGraph s„mtlicher EMS-Speicher zu belegen.
|
||
|
||
* Beim F<>llen von komplexen Mustern mit FloodFill kann es u.U. notwendig sein,
|
||
den Puffer, den Graph daf<61>r bereitstellt, mit der Prozedur SetGraphBufSize
|
||
*vor* dem Aufruf von InitGraph etwas zu vergroessern (Default sind 4KB).
|
||
|
||
|
||
|
||
13. Bei Problemen und Fehlern
|
||
|
||
Da sich leider in der Vergangenheit gezeigt hat, daá die wenigsten
|
||
Schwierigkeiten tats„chlich am Treiber selber liegen, m”chte ich Sie bitten die
|
||
folgenden Punkte zu beherzigen:
|
||
|
||
* Lesen Sie die komplette Anleitung sowie alle README-Dateien auf der Diskette
|
||
nochmals durch. Einige g„ngigere Fehlerquellen sind dort beschrieben.
|
||
|
||
* Falls der Treiber bei Ihnen <20>berhaupt nicht funktionieren sollte <20>berpr<70>fen
|
||
Sie bitte anhand der beigelegten Beispielprogramme ob das Nicht-
|
||
Funktionieren an Ihrem Programm oder am Treiber liegt.
|
||
|
||
* Versuchen Sie herauszufinden, ob der Fehler evtl. an Ihrer Hardware liegt,
|
||
indem Sie Ihr Programm auf einem anderen Rechner testen.
|
||
|
||
* Versuchen Sie, herauszufinden, ob eine spezielle Rechnerkonfiguration f<>r
|
||
den Fehler verantwortlich ist. Entfernen Sie dazu Ger„tetreiber aus den
|
||
Konfigurationsdateien CONFIG.SYS und AUTOEXEC.BAT.
|
||
|
||
* Falls Sie tats„chlich vermuten, einen Fehler im Treiber gefunden zu haben,
|
||
versuchen Sie bitte, den Fehler einzukreisen und ein m”glichst kleines
|
||
Programm herzustellen, bei dem der Fehler auftritt. Entfernen Sie dazu allen
|
||
Code, der nicht unbedingt notwendig f<>r die Reproduktion des Fehlers ist.
|
||
Bitte senden Sie mir dieses Programm zusammen mit einer detailierten
|
||
Fehlerbeschreibung zu.
|
||
|
||
|
||
|
||
14. Sonstiges
|
||
|
||
Bei mir sind weitere BGI-Treiber f<>r Plotter, f<>r Super-VGA's und zur Ausgabe
|
||
von PCX-Dateien zu denselben Bedingungen erh„ltlich. Die aktuellen Versionen
|
||
erhalten Sie per Modem unter der Nummer 07071/440588, 8N1, V32bis.
|
||
|
||
Falls Sie Interesse an weiteren Treibern, weiteren unterst<73>tzten Druckern usw.
|
||
haben, setzen Sie sich bitte mit mir in Verbindung. Speziell Unterst<73>tzung von
|
||
weiteren Druckern f<>r den Druckertreiber werden von mir <20>blicherweise zu einem
|
||
sehr g<>nstigen Festpreis durchgef<65>hrt.
|
||
|
||
|
||
|
||
15. Dateien im Paket
|
||
|
||
Das vorliegende Archiv muá folgende Dateien enthalten:
|
||
|
||
|
||
Im Verzeichnis PRINTER
|
||
PRINTER.BGI Der BGI-Treiber.
|
||
PRINTER.BP7 BGI-Treiber f<>r Borland-Pascal 7.0.
|
||
|
||
|
||
Im Verzeichnis PDFCOMP
|
||
PDFCOMP.EXE Der Definitions-Compiler.
|
||
PDFCOMP.DOC Die Dokumentation dazu.
|
||
*.DEF Diverse Definitionsdateien.
|
||
|
||
|
||
Im Verzeichnis PIXFONT
|
||
PIXFONT.PAS Modul zur Ausgabe von Pixelfonts beliebiger
|
||
GrӇe.
|
||
PIXFONT.DOC Die Dokumentation dazu.
|
||
GETFONT.EXE Programm zur Abspeicherung der VGA-Fonts
|
||
(in den GrӇen 8x14 und 8x16) als Datei.
|
||
GETFONT.PAS Quelltext dazu.
|
||
*.FNT Einige Pixelfonts zur Verwendung mit dem
|
||
Modul PixFont.
|
||
FONTDEMO.EXE Beispielprogramm zu Anwendung von PIXFONT.
|
||
FONTDEMO.PAS Quellcode zu PIXFONT.EXE.
|
||
FONTDEMO.DOC Dokumentation zu FONTDEMO.
|
||
|
||
|
||
Im Verzeichnis C
|
||
DEMO.EXE Kurzes Demo-Programm zur Verwendung des
|
||
Treibers.
|
||
DEMO.C Der Quellcode dazu.
|
||
|
||
|
||
Im Verzeichnis PASCAL
|
||
DEMO.EXE Kurzes Demo-Programm zur Verwendung des
|
||
Treibers.
|
||
DEMO.PAS Der Quellcode dazu.
|
||
DEMO2.EXE Ausf<73>hrliches Demo-Programm.
|
||
DEMO2.PAS Quelltext zu DEMO.PAS.
|
||
|
||
|
||
Im Verzeichnis BGILIB
|
||
MAKELIB.BAT Batch-Datei von Herrn Jung-Merkelbach zur
|
||
Erzeugung zweier Libraries f<>r den C-Compiler,
|
||
die die kompletten Fonts und Treiber als OBJ-
|
||
Dateien enthalten.
|
||
|