PRINTER.BGI - BGI Treiber für Drucker Version 4.00 vom Oktober

Werbung
PRINTER.BGI - BGI Treiber f•r Drucker
Version 4.00 vom Oktober 1995
(C) 1990-1995 by Ullrich von Bassewitz
Zwehrenb•hlstraáe 33
D-72070 T•bingen
E-Mail: [email protected]
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 CDROMS
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 GrafikKarten
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•tzt werden beide Borland-Compiler (also Turbo-Pascal und BorlandC++),
sowie die folgenden Drucker:
* Zum HP-LaserJet II kompatible Drucker.
* Zum HP-LaserJet IV kompatible Drucker. Der Treiber unterst•tzt bei
diesem
Drucker die zus„tzlich verf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•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•gen
zus„tzlich
noch ber die M”glichkeit zum Ausdruck in Farbe.
* IBM Proprinter X24 und kompatible.
* Benutzerdefinierte Nadeldrucker (•ber separat zu erstellende
Definitionsdateien).
PRINTER.BGI unterst•tzt alle im "Device Drivers Toolkit" angegebenen
Funktionen
einschliesslich FloodFill. Da keiner der unterst•tzten Farbdrucker •ber
eine
einstellbare Palette verf•gt, sind jedoch die Paletten-Funktionen nicht
verf•gbar.
Der Treiber ist gleichzeitig auch im neuen Format verf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 •ber
benutzerdefinierte Modi
weiter unten. Bitte beachten Sie, daá nicht alle Drucker alle Modi
unterst•tzen.
Speziell die Modi mit Aufl”sungen von 360 * 360 DPI sind nicht auf allen
Nadeldruckern verf•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•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•gung stellen, so liefert
PRINTER.BGI
einen Fehlercode von -12 (grIOError) zur•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 •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•fen
kann, ob der Rechner mit einer f•r den Treiber passenden Hardware
ausgestattet
ist (was im Falle von Druckern nat•rlich schlecht geht, weswegen ein NILZeiger
•bergeben wird).
Ist der von InstallUserDriver zur•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•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•hrbare Programm eingebunden
werden,
so m•ssen folgende Schritte in genau dieser Reihenfolge durchgef•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•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
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
42
42
NEC P6, P6+, 360 * 360 DPI, 9 Farben
Reserviert
Benutzerdefinierter Modus 1
Benutzerdefinierter Modus 2
Benutzerdefinierter Modus 3
HP LJ, 75 * 75 DPI
HP LJ, 100 * 100 DPI
HP LJ, 150 * 150 DPI
HP LJ, 300 * 300 DPI
HP LJ, 75 * 75 DPI, keine Kompression
HP LJ, 100 * 100 DPI, keine Kompression
HP LJ, 150 * 150 DPI, keine Kompression
HP LJ, 300 * 300 DPI, keine Kompression
HP DJ 500C, 75 * 75 DPI, 8 Farben, A4
HP DJ 500C, 100 * 100 DPI, 8 Farben, A4
HP DJ 500C, 150 * 150 DPI, 8 Farben, A4
HP DJ 500C, 300 * 300 DPI, 8 Farben, A4
HP DJ 550C, 75 * 75 DPI, 8 Farben, echtes Schwarz
HP DJ 550C, 100 * 100 DPI, 8 Farben, echtes Schwarz
HP DJ 550C, 150 * 150 DPI, 8 Farben, echtes Schwarz
HP DJ 550C, 300 * 300 DPI, 8 Farben, echtes Schwarz
HP LJ IV, 600 * 600 DPI
EPSON LQ (24-Nadel), 180 * 180 DPI, DIN A3
EPSON LQ (24-Nadel), 360 * 180 DPI, DIN A3
EPSON LQ (24-Nadel), 360 * 360 DPI, DIN A3
NEC P7 (24-Nadel), 360 * 360 DPI, DIN A3
EPSON LQ (24-Nadel), 180 * 180 DPI, DIN A3, 9 Farben
EPSON LQ (24-Nadel), 360 * 180 DPI, DIN A3, 9 Farben
EPSON LQ (24-Nadel), 360 * 360 DPI, DIN A3, 9 Farben
NEC P7 (24-Nadel), 360 * 360 DPI, DIN A3, 9 Farben
HP PaintJet 300 XL, 75 * 75 DPI, 8 Farben, A3
HP PaintJet 300 XL, 100 * 100 DPI, 8 Farben, A3
HP PaintJet 300 XL, 150 * 150 DPI, 8 Farben, A3
HP PaintJet 300 XL, 300 * 300 DPI, 8 Farben, A3
(6)
(2)
(2)
(2)
(3)
(3)
(3)
(3)
(4)
(4)
(4)
(4)
(7)
(7)
(7)
(7)
(5)
(1)
(6)
(6)
(6)
(1) (6)
(8)
(8)
(8)
(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•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•gt •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•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 2023 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•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•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•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•gt im Gegensatz zu seinem Vorl„ufer •ber
separate
Schwarzpatrone, die gleichzeitig verwendet werden kann. In den
ist
es m”glich, diese separate Patrone zum Druck schwarzer Fl„chen
benutzen.
Beachten Sie dazu bitte den folgenden Hinweis aus dem Handbuch
Herstellers
(im Orginal Englisch, von mir frei •bersetzt):
eine
Modi 28-31
zu
des
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 SchwarzPatrone.
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•r
gesorgt werden, daá sich die Fl„chen mit unterschiedlichen Tinten
nicht
ber•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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•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•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•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•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•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•r wesentlich schneller, da ein
direkter
Zugriff erfolgen kann.
* Der Runtime-Manager von Borland belegt beim Start s„mtlichen
verf•gbaren
DPMI-Speicher, der dann dem Treiber nicht mehr zur Verf•gung steht.
Aus
diesem Grund muá dem Runtime-Manager durch Setzen einer EnvironmentVariable
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•gung. (Zumindest nicht
•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 BorlandPascal
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 •ber Drucker-Definitionsdateien an fast alle
Nadeldrucker
anpassen. Dazu dient ein kleines šbersetzungsprogramm zusammen mit
einigen daf•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•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•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•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•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•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 •ber den
Treiber
durch einen "Miábrauch" der Funktion SetAllPalette verf•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 •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
4-7
1: 25%
2: 50%
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 DruckAusgabe
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•ckgibt positiv an die Anwendung durchgereicht: Das StatusFeld des
Treibers, •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 •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 •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•ckliefert. Diese
Prozedur
muá vor InitGraph aufgerufen werden.
* Die Abfrage von Fehlern muá •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 DateiHandle
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 DPMISpeicher 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•ckzuf•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•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•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•tzung der EMS 3.2
kompatiblen
Funktionen vorausgesetzt (dies wird von allen mir bekannten EMSTreibern
erf•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 •berpr•ft der Treiber bei der
Initialisierung den
zur Verf•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•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•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•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
•ber
diese Modi zu verf•gen. Ein Test zeigt jedoch, daá •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•tzt.
Zus„tzlich ist dieser Modus von unterschiedlichen Herstellern auch
unterschiedlich implementiert worden. Falls Ihr Drucker die DemoProgramme
in diesem Modus fehlerhaft ausdruckt, pr•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•nglichen
BGI-Konzept dafr vorgesehen war, das L”schen des Bildschirms zu
unterdr•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 GrafikModus vom
Programm gesetzt werden. Es gibt keine Garantie daf•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•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 •berhaupt nicht funktionieren sollte
•berpr•fen
Sie bitte anhand der beigelegten Beispielprogramme ob das NichtFunktionieren 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•tzten Druckern
usw.
haben, setzen Sie sich bitte mit mir in Verbindung. Speziell
Unterst•tzung von
weiteren Druckern f•r den Druckertreiber werden von mir •blicherweise zu
einem
sehr g•nstigen Festpreis durchgef•hrt.
15. Dateien im Paket
Das vorliegende Archiv muá folgende Dateien enthalten:
Im Verzeichnis
Im Verzeichnis
Im Verzeichnis
PRINTER
PRINTER.BGI
PRINTER.BP7
Der BGI-Treiber.
BGI-Treiber f•r Borland-Pascal 7.0.
PDFCOMP
PDFCOMP.EXE
PDFCOMP.DOC
*.DEF
Der Definitions-Compiler.
Die Dokumentation dazu.
Diverse Definitionsdateien.
PIXFONT
PIXFONT.PAS
Modul zur Ausgabe von Pixelfonts
beliebiger
FONTDEMO.EXE
GrӇe.
Die Dokumentation dazu.
Programm zur Abspeicherung der VGA-Fonts
(in den GrӇen 8x14 und 8x16) als Datei.
Quelltext dazu.
Einige Pixelfonts zur Verwendung mit dem
Modul PixFont.
Beispielprogramm zu Anwendung von
FONTDEMO.PAS
FONTDEMO.DOC
Quellcode zu PIXFONT.EXE.
Dokumentation zu FONTDEMO.
PIXFONT.DOC
GETFONT.EXE
GETFONT.PAS
*.FNT
PIXFONT.
Im Verzeichnis
C
DEMO.EXE
DEMO.C
Im Verzeichnis
PASCAL
DEMO.EXE
DEMO.PAS
DEMO2.EXE
DEMO2.PAS
Im Verzeichnis
BGILIB
MAKELIB.BAT
Kurzes Demo-Programm zur Verwendung des
Treibers.
Der Quellcode dazu.
Kurzes Demo-Programm zur Verwendung des
Treibers.
Der Quellcode dazu.
Ausf•hrliches Demo-Programm.
Quelltext zu DEMO.PAS.
Batch-Datei von Herrn Jung-Merkelbach zur
Erzeugung zweier Libraries f•r den C-
Compiler,
die die kompletten Fonts und Treiber als
OBJDateien enthalten.
Herunterladen