Anleitung
RISC OS Tintenstrahldrucker Dumper

Erstellt 22.09.2004 T. Milius
Geändert 13.04.2005 T. Milius


Inhalt

  1. Überblick
  2. Anmerkungen
  3. Installation
    1. Unterstütze Drucker
    2. Kalibrierung
  4. Motivation
  5. Copyright
  6. Kontakt
  7. Nützliche Verweise, um ein eigenes PDF zu erstellen
  8. Historie
    1. Version 1.00
    2. Version 1.01
    3. Version 2.07
  9. Future
  10. Technische Details
    1. Der Kellerstackrechner in Druckersteuersequenzen
      1. Kommandos
      2. Variablen
      3. Programmbeispiel
    2. Die druckerspezifische Kalibrierungsdatei
      1. Der "Dummy for page size" Modus
    3. Externe Kalibrierungsdateien
    4. Die Ditherinfo Datei

1. Überblick

Das Programm besteht aus einem Printer Dumper und einem Kalibrierungsprogramm. Der Prinetr Dumper wurde so entwickelt, daß er für diverse Tintenstrahldrucker eingesetzt werden kann, und unterstützt bis zu 10 Tintenpatronen.

Der Dumper erlaubt es direkt oder mit angenäherten Farben in eine Spritedatei zu drucken. Die Seiten werden dabei als eigenständige Sprites innerhalb der Datei gespeichert.

Das Programm ist Freeware. Für nähere Information hierzu im bitte Copyright-Absatz nachlesen.

2. Anmerkungen

Der Dumper wurde von mir nur mit den Druckern EPSON Stylus Color 580 und EPSON Stylus Photo 700 getested. Man den Dumper aber an andere Drucker anpassen. Z.B. hat Martin Hodgson ein PDF den EPSON Stylus Photo 870 entwickelt.

Gebrauch und Modifikation erfolgt ausschließlich auf eigene Gefahr. Wenn Tinte in den Raum, z.B. auf die Tapeten, spritzt, Aliens ihr Haus angreifen, während oder kurz nachdem Sie den Dumper nutzen oder genutzt haben, so übernehme ich keine Verantwortung dafür.

Bitte beachten Sie, daß der Dumper nur zum Ausdruck verwendet werden kann. Er unterstützt keine weitergehenden Eigenschaften wie Anzeige der verbleibenden Tinte, Fehlerbehandlung oder Wechseln der Tintenptronen. In diesem Zusammenhang muß ich davor warnen, sich einen EPSON Stylus Color 580 zuzulegen, wenn man nur eine RISC OS Maschine besitzt und nicht ebenfalls einen PC. Ein Wechsel der Tintenpatronen nutzt undokumentierte Steuersequenzen und so kann man die Tintenpatronen nicht unter RISC OS oder LINUX wechseln, sondenr nur mit der original PC Software.

Martin Hodgson war so nett, PDFs für andere Drucker als den 580 zu schreiben, und fungierte als Betatester für meinen Dumper. Bitte setzen Sie sich mit ihm in Verbindung, wenn Sie meinen Dumper mit anderen EPSON-Druckern nutzen möchten.

Mein Dank gilt Robin Watts und Justin Fletcher für cmunge und Daniel Ellis. Mit deren Hilfe fand ich heraus wie der Assembler/C Adapter zum 26-Bit RISC OS aufgebaut werden mußte.

3. Installation

Kopieren Sie einfach die "!PDPEICal" Applikation irgenwo auf ihre Festplatte. Sie läßt sich auch direkt starten. Die Applikation ist zum Betrieb des Dumpers nicht zwingend notwendig, sondern nur zur Installation und Kalibrierung.

Starten Sie "!PDPEICal". Wenn Sie eine ältere inkompatible Version von ;PDumperEI" installiert haben (wie z.B. 1.x) wird diese Version automatisch entfernt und in einem speziellen temporären Verzeichnis gespeichert, daß automatisch angezeigt wird. nach dem Start wird die Applikation auf der rechten Seite der Programmleiste angezeigt, gleichzeitig öffnet sich ein Verzeichnis, daß die verfügbaren PDFs anzeigt. Zu diesem Zeitpunkt wurde der Dumper bereits installiert. Nun muß noch die zum Drucker gehörende Kalibrierungsdatei installiert werden. Um dies zu tun, laden sie das entspechende PDF und wählen es als aktiver Drucker. Bitte stellen sie sicher, daß es sich beim ausgewählten Drucker, um einen handelt, der von "PDumperEI" gesteuert wird.

Dann klicken Sie auf "!PDPEICal" auf der Programmleiste. Wenn es zum dem Drucker eine entsprechende Kalibrierungsdatei gibt, so wird diese nun installiert, was per Nachricht angezeigt wird. Wenn eine entsprechende Kalibrierngsdatei bereits instllaiert wurde, oder wenn keine Datei gefunden wurde, wird das Kalibrierungsfenster zusammen mit einem Verzeichnis, der verfügbaren Kalibrierungen angezeigt. Innerhalb des Kalibrierungsfensters gibt es ein Feld, wo man die Kalibrierungsdatei durch eine andere ersetzen kann. Dazu kann man eine Kalibrierungsdatei auf das Fenster ziehen. Sobald sich das Feld ändert, wird ein Knopf aktiviert, den man betätigen muß, um die neue Datei als Kalibrierungsdatei für den Drucker zu verwenden. Wenn Sie nur die Kalibrierungsdatei als Ganzes ändern oder den Kalibrierungsprozeß abbrechen wollen, kann man das Fenster schliessen, ansonsten startet man den Kalibrierungsprozeß. Es ist nicht zwangsläufig notwendig, das Feld mit der Kalibrierungsdatei zu füllen. Wenn ist leer ist, kann man den Kalibrierungsprozeß von Anfang an durchführen.

3.1. Unterstütze Drucker

Schauen Sie in die separate Liste, um zu sehen, ob ihr Drucker bereits von dem Dumper unterstützt wird.

3.2. Kalibrierung

Wenn Sie ihren Drucker kalibrieren wollen, müssen Sie festlegen welche Grundfarben der Drucker zur Verfügung stellt. Jede dieser Grundfarben wird von einer Farbpatrone in Ihrem Drucker bereitgestelt. Die Intensität einer Grundfarbe wird, soweit möglich, vom Dumper in Übereinstimmung mit dem zu druckenden Inhalt des Dokuments angepaßt und an den Drucker gesendet. Die Anzahl der möglichen Intensitäten ergibt sich aus den Bits pro Pixel, die in einem Feld innerhalb des Kalibrierungsfensters festgelegt werden können. Im Moment ist der Wert auf 2 Bits für EPSON-Drucker eingestelt, er kann aber auf 1 oder 4 geändert werden. Der Dumper selbst kann intern mit Werten im Bereich von 1 bis 8 umgehen. Ein weiteres Feld legt die Zahl der Pad-Bits fest. Typischerweise ist der Wert 0. Wird ein anderer Wert festgelegt, so wird der absolute Betrag von der Anzahl der Bits per Pixel abgezogen. D.h. das dieser Wert die Anzahl der Intensitäten verringert. Man kann dieses Feld für Drucker verwenden, die z.B. 8 Farben haben, dafür aber 4 Bits zur Darstellung des Wertes benötigen. In einem solchen Fall ist 1 Bit des Farbwertes immer 0. Wählt man bei den Pad-bits einen positiven Wert, so werden die höchstwertigen Bits mit 0 aufgefüllt, bei einem negativen Wert werden die niederwertigen Bits mit 0 aufgefüllt, was zu einem nach links verschobenem Wert führt. Ein weiteres Feld bestimmt, wie die Intensitäten der Grundfarben in der Vorlage erzeugt werden. Man kann zwischen logarithmisch und linear wählen. Unabhängig von der Intensität bleibt der Farbton einer Grundfarbe immer bestehen. Die Grundfarebn können gemischt werden und so erhält man eine feste Anzahl von Farben, die gedruckt werden können. Hierauf basiert das ganze Ditherkonzept des Dumpers. Zu einer vorgegebenen Frabe versucht er, die beste Annäherung als Mix aus den wirklich verfügbaren Farben zu ermitteln. Welche Farben wirklich verfügbar sind, müssen Sie dem Dumper in den nächsten Schritten mitteilen.

Wählen Sie die Grundfarben, die den Farbpatronen des Drucker entsprechen. Danach starten Sie den Kalibrierunsgprozeß. Unmittelbar danach erscheint eine Draw-Datei, die jede Menge quadratischer Kästchen darstellt. Für jede festgelegte Farbpatrone gibt es eine Reihe mit Kästchen. Die Kästchen innerhalb einer Reihe unetrschiedliche Intensitäten.

Intern hat das Kalibrierungsprogram die Kalibrierungsdatei, so abgeändert, daß jedes Kästchen exakt durch Tinte genau einer Farbkartusche ungedithert in der durch die Druckintensitätsbits festgelegten Intensität gedruckt wird. Drucken Sie die Draw-Datei mit den Kästchen nun auf ihrem Drucker aus.

Wenn man sich den Ausdruck nun anschaut, wird man typischerweise festestellen, daß es mehr oder weniger große Abweichungen zwischen den gedruckten Farben und den Farben, so wie sie auf dem Schirm in der Draw-Datei dargestellt werden, gibt. Um dies zu korrigieren wird parallel mit der Draw-Datei eine Farbauswahlbox geöffnet, die die Farbe des Kästchens links oben auf dem Ausdruck darstellt. Man kann die Farbe nun abändern. Nachdem man OK gewählt hat (ACHTUNG: Nicht auf OK mit der Maus klicken. Auf meinem Iyonix werden die eingegebenen Werte dann nicht korrekt übernommen.), wird die rechts von der eben dargestellten Farbe stehende dargestellt. Nachdem alle Intensitäten für eine Farbpatrone dargestellt wurden, wird die erste Intensität der nächsten Farbpatrone dargestellt (d.h. der Anfang der nächsten Kächstenzeile) usw. bis alle Farben auf dem Ausdruck kalibriert wurden. man kann den Kalibrierungsprozeß durch Betätigen des Abbruch-Knopfes jederzeit abbrechen. In diesem Fall, wird die zuvor gültige kalibrierung wieder hergestellt.

Nun kann man versuchen, richtige Ausdrucke zu erstellen. Es ist allerdings wahrscheinlich, daß man noch nachkalibrieren muß. Hierzu einige Hinweise:

Das Kalibrierungsdprogramm ist nur eine Möglichkeit, um den Drucker zu kalibrieren. Es kommt auf die Kalibrierungsdatei selbst an (ASCII-Format). Die Datei kann manuell editiert oder von einem selbstgeschrieben Programm erzeugt werden. Auf diese Weise kann man z.B. jede druckbare Farbe kalibrieren und nicht nur die Grundfarben. Eine Farbpatrone kann dann 2 Intensitäten haben und eine andere 16 usw.. Als Problem verbleibt jedoch die Berechnung der Würfel rund um die Farben. Zu diesem Zweck bietet das Kalibrierungsprogramm die Möglichkeit eine externe Kalibrierunsgdatei, die nur Farb-, Farbgruppen- und Druckermusterinformationen enthält mit den vom Kalibrierungsprogramm erzeugten Daten zu mischen. Der Name der Kalibrierungsdatei muß im Feld "..." eingegeben werden. Weitere Informationen finden Sie im Abschnitt "Externe Kalibrierungsdateien".

Man kann bis zu 255 Kalibrierungen für einen Drucker definieren. Dies läßt sich zur modus- oder papierabhängigen Feinkalibrierung nutzen. Interlace-Modi drucken mehr Tinte aufs Papier als Non-Interlace-Modi. Farben sehen auf Normalpapier anders aus als auf Fotopapier. Unter Ausnutzung der unterscheidlichen Kalibrierungen kann man die Ausgabe entsprechend abstimmen. Die Kalibriering kann für jede Seite wechseln, wenn man sich ein entsprechendes PDF schreibt.

Die Kalibrierungen können völlig unterschiedliche Farbpatronenkombinationen nutzen. Dies kann man dazu nutzen, um Modi ohne Schwarzpatrone zu definieren, oder um verschiedene Patronen zu simulieren, wie beim EPSON C80 im Graustufen modus.

In der Kalibrierungsmaske befindet sich ein Feld "...", wo man eine der existierenden Kalibrierungen auswählen kann, um sie zu modifizieren. Man kann auch eine neue Nummer vergeben. Der nächste Kalibrierungsprozeß bezioeht sich auf die in diesem Feld eingetragene Nummer. Man kann auch eine Kalibrirung durch Betätigen des "..." Knopfes löschen.

4. Motivation

Ich habe die Entwicklung des Druckertreibers begonnen, während ich meinen eigenen USB-Stack entwickelte. Ich kaufte mir im Herbst 2001 einen EPSON 580 Stylus Color Drucker und mußte festestellen, daß keins der mit RISC OS (<=4.02) gelieferten Printer Defintion Files (PDF) mit ihm zurecht kam.

Ich beschloß notgedrungen, die Situation zu ändern. Ich fand heraus, daß nicht damit getan war nur ein neues PDF zu schreiben. Der mit RISCOS geleiferte Treiber unterstützte nur einen alten Grafikmodus. Unglücklicherweise setzte dieser Modus voraus, daß die Anzahl der schwarzen Düsen und die der farbigen Düsen gleich war. Der 580 hat zwei Druckköpfe mit 48 Düsen für Schwarz und 3*15 Düsen für Zyan, Mangenta und Gelb. So war es nicht möglich eine Kombination zu finden, die unter RISC OS unterstützt wurde. Der Drucker bietet einen neuen Grafikmodus, der das Problem umgeht. Dieser Modus interpoliert die angegeben Punkte (15) auf die zur Verfügung stehenden Düsen.

So habe ich denn einen neuen Printer Dumper entwickelt, um das Problem zu lösen. Während der Entwicklung traten einen Menge Probleme auf. Eins davon war die korrekte Justierung der Farben. Ein weiteres Problem war die Erzeugung von guten Dither-Mustern. Insgesamt ergab sich daraus die Aufgabenstellung Farbannährungen im Ausdruck zu erzeugen, die eine gewisse Ähnlichkeit mit denen Farben auf dem Schirm aufwiesen. Der erste Ansatz erwies sich als nicht zufriedendstellend und erlaubte nur die Verwendung von bis zu 4 Farben, so daß ich mich entschloß das interne Konzept komplett zu überarbeiten.

Ich betrachte den Dumper nicht als professionelles Produkt oder als Konkurrenz zu anderen professionellen Druckertreibern. Er ist mehr als Hilfe für all diejenigen Gefrusteten RISC OS Nutzer gedacht, die solze Besitzer eines Druckers sind, der von RISC OS nicht unetrstützt wird und für den keine professionellen Treiber verfügbar sind bzw. keine zufriedenstellenden Ergebnisse liefern. Ich sehe den Dumper mehr als ein Beispiel dafür an, wie man man unter RISC OS Druckertreiber schreiben kann.

5. Copyright

Copyright 2002-2004 liegt bei Thomas Milius Stade, Deutschland

Der Quellcode des Dumpers ist mit leichten Einschränkungen Open Source. Diese Einschränkungen dienen dazu kommerziellen Gebrauch des Dumeprs ohne meine Einwilligung zu unterbinden. Ich selbst behalte mir vor den Code jederzeit in anderen Programmen zu verwenden ohne den Code dieser Programme öffentlich zugänglich zu machen. Diese Progamme können kommerziellen Character haben. Andere Programmierer können den Code jederzeit in ihren Programmen verwenden, solange kein Profit daraus gezogen wird, und der Code zu den gleichen Bedingungen veröffentlicht wird, wie dieses Programm. Im Falle daß daraus Profit gezogen werden soll, ist vorher meine Erlaubnis einzuholen.

6. Kontakt

Wenn Sie Fragen, Verbesserungsvorschläge oder Anmerkungen haben, können Sie mich unter folgendenr Adresse erreichen:

Thomas Milius
Tilsiter Straße 2
21680 Stade
Deutschland

Telefon:
04141/65005
Werktags von 19:00 bis 21:30, sowie an Wochenenden

E-mail:
Thomas-Milius@t-online.de

Homepage:
http://www.thomas-milius.homepage.t-online.de/

Ein Experte auf dem Gebiet des Tintenstrahldrucks, der Ihnen evt. bei der Kalibrierung oder dem Schreiben eines eigenen PDFs weiterhelfen kann, ist:

Martin Hodgson

E-mail:
marthodgson@freeuk.com

7. Nützliche Verweise, um ein eigenes PDF zu erstellen

Die Dokumentation für den EPSON C40, der die gleichen Steuersequenzen wie der EPSON Stylus Color 580 zu benutzen scheint, steht unter:

http://www.epsondevelopers.com/

Man muß sich registrieren, aber dies ist kostenlos (Stand März 2002). Auf der Webseite finden sich um,fassende Informationen zu EPSON Steuersequenzen und EPSON Scanner.

Auf "users with commercial interests" beschränkt ist die Canon Entwickler Homepage. Die angegebenen Daten und Interessen werden manuell überprüft:

http://www.developers.canon-europa.com/

Als weitere gute Quelle kommt das GIMP-Projekt in Frage, das auf RISC OS von Martin Wuerthner portioert wurde:

http://www.gimp.org/

Auf alle Fälle braucht man die RISC OS Programmers Reference Manuals zum Verständnis des RISC OS Drucksystems. Hierzu zählen auch die Dokumente die sich auf Erweiterungen des Drucksystems beziehen.

8. Historie

8.1. Version 1.00

Veröffentlich:

Preis:

Bemerkung:

Korrigierte Fehler:

Neue Fehler/Probleme:

Neue Eigenschaften:

8.2. Version 1.01

Veröffentlicht:

Preis:

Bemerkungen:

Korrigierte Fehler:

Neue Fehler/Probleme:

Neue Eigenschaften:

8.3. Version 2.07

Veröffentlicht:

Preis:

Bemerkungen:

Korrigierte Fehler:

Neue Fehler/Probleme:

Neue Eigenschaften:

9. Zukunft

Folgendes müßte bei Bedarf noch ergänzt werden:

10. Technische Details

Folgende Hinweise bzgl. der PDF-Dateien und der Rechner, auf denen der Driver eingesetzt werden kann, sind zu beachten.

Der Dumper wurde auf meinem RiscPC (!Printers 1.64, RISC OS 4.02), meiner RiscStation (!Printers 1.64, RISC OS 4.03) und meinem IYONIX (!Printers 1.67, RISC OS 5.06) getestet.

Der Dumpername und die Dumpernummer sind registriert. Die Dumpermodulnummer ist 22 (&16).

Die zahl der vertiaklen Interlaces ist unabhägig von der Dumperhöhe. Die Dumpertiefe muß immer die Zahl der Düsen auf dem Druckkopf angeben. Die Dumperhöhe ist immer ein Vielfaches der Dumpertiefe und legt die Zahl der Stufen auf dem Druckkopf fest, d.h. die Art der Anordnung der Farben auf dem Druckkopf. Z.B. hat der 580 die Farbpatronen Zyan, Gelb, Magenta und Schwarz. Zyan wird ganz oben gedruckt. Darunter sind Gelb und Schwarz auf dem Druckkopf angeordnet. Die letzte Farbe auf dem Druckkopf ist Magenta. Man hat also 3 Stufen. Die Dumpertiefe ist 15. Die Dumperhöhe ist also 3*15=45. Zyan erhält die Position 0 auf dem Druckkopf (Siehe ZERO_SKIP unten), Gelb und Schwarz bekommen die Position 1 und Magenta die Position 2.

Es gibt keine Festlegung der Farben auf bestimmte unten erwähnte LINE_START oder LINE_PASS Sequenzen. Jeder Druckerpunkt wird durch eine bestimmte Anzahl Bits dargestellt. Eine Kalibrierung enthält die Bitmasken, die nötig sind, um bestimmte Farben zu drucken. Diese Bitmasken bestehen aus Gruppen von 1,2 oder mehr Bits für jede Farbpatrone. Jede Farbpatrone stellt eine Grundfabre dar, die in unterschiedlichen Intensitäten gedruckt werden kann. Die Anzhal der Intensitäten ergibt sich aus der Zahl der Bits pro Punkt. Wenn wenigsten ein Bit innerhalb der ersten Farbgruppe gesetzt ist, dann wird die LINE_START_1 Sequenz gesendet (Bei 2 Bit Bits 0-1 innerhalb der Bitmaske). Wenn wenigsten ein Bit innerhalb der zweiten Farbgruppe gesetzt ist, dann wird die LINE_PASS_1 Sequenz gesendet (Bei 2 Bit Bits 2-3 innerhalb der Bitmaske) usw.. Die Zuordnung Farbe/Farbpatrone zu Steuersequenzen wird über die den Farben zugeordneten Bitmaps gesteuert. Um die Handhabung zu vereinfachen, zeigt das Kalibrierungsprogramm zu jeder gewählten Farbpatrone eine Abkürzung der zugehörigen Steuersequenz. Dabei bekommt LINE_START_1 typischerweise die Steuersequenz für Schwarz und LINE_PASS_1 die Steuersequenz für Zyan. Dies gilt allerdings nicht, wenn der Drucker keine Schwarzpatrone besitzt. In einem solchen Fall erhält LINE_START_1 Zyan und LINE_PASS_1 Gelb. Das ist alles etwas kompliziert aber das Konzept ist hoch flexibel.

Die Zahl der Farbpatronen ergibt sich aus der höchsten genutzten LINE_PASS/LINE_START Steuersequenz in dem entsprechenden Modus.

In der PDF_Datei werden nur die folgenden Einträge genutzt:

Alle anderen Steursequnzen sind ungenutzt. Bitte beachten sie, daß der Dumper innerhalb der Steuersequenzen eine etwas sonderbare Eigenschaft aufweist, einen sog. Kellerstackrechner.

10.1. Der Kellerstackrechner in Druckersteuersequenzen

Beim Kellerstackrechner in den Druckersteuersequenzen handelt es sich um einen Rechner, der nach dem Prinzip der umgekehrten polnischen Notation arbeitet und dessen Befehle durch Bytes innerhalb der Steuersequenzen abgebildet werden. Kurz bevor eine Steuersequenz an den Drucker geschickt wird, wird der kleine Rechner aufgerufen. Während der Auswertung der Stuersequenz werden alle Bytes, die zu einer Rechnersteuersequenz gehören, entfernt. Der Rechner kann aber auch neue Sequenzen erzeugen, die in die Druckersteuersequenz eingebettet und anschliessend zum Drucker gesendet werden.

Zweck des Rechners ist es Zeichenketten dynamisch gemäß intern Zuständen des Dumpers zu erzeugen bzw. einige Zustände des Dumpers zu setzen. So ist z.B. die Datengröße nicht länger an eine bestimmte Stelle vor oder hinter der Hauptdruckersteuersequenz gebunden, und es ist nicht mehr notwendig einen neuen Dumper zu schreiben, bloß weil Hersteller A Little Endian Kodierung für die Größe verwendet, Hersteller B aber Big Endian Kodierung.

Der Rechner wird durch ein Byte mit dem Wert 0xFF innerhalb einer Steuersequenz aktiviert. Dieses Byte gehört zur Rechnersequenz und wird deshalb aus der Druckersteuersequenz entfernt. Ein Byte mit dem Wert von 0xFF beendet ebenfalls eine Druckersteuersequenz (Die Berechnung selbst kann durch eine andere Sequenz vorzeitig bedingt beendet werden). Weil die Sequenz 0xFF 0xFF keinen Sinn ergibt (Rechner an, Rechner aus), wird sie dazu verwendet den Wert 0xFF innerhalb der Druckersteuersequenz darzustellen.

Bitte beachten Sie, daß eine Druckersteuersequenz mehrere voneinander unabhängige Rechnersequenzen erhalten kann.

Der Kellerstackrechner selbst besteht aus 4 Stackregistern, einer Bedingungsflagge, um bedingte Befehlsausführung zu erlauben, und einer Reihe von Variablen. Der Inhalt dieser Variablen wird entweder durch den Dumper selbst gesetzt oder ergibt sich aus den Operationen, die mit dem Rechner durchgeführt werden. Beim Start einer Rechnersequenz wird die Bedingungsflagge auf FALSE gesetzt, der Zustand der Stackregister hingegen ist unbestimmt. Der Zustand der Variablen, die nicht vom Dumper selbst verwaltet werden, ist beim Start eines Druckauftrags ebenfalls umbestimmt.

Jede Operation belegt ein 1 Byte. Die Bits sind von 0 bis 7 durchnummeriert. Bit 7 legt fest, ob eine Operation immer ausgeführt wird (=1) oder nur dann, wenn die Bedingungsflagge den Wert TRUE besitzt (=0).

Man kann die Ausführung der Kellerstacksequnzen kontrollieren, wenn man folgenden Befehl eingibt:

TraceCellarStack on

Im Folgenden wird ein Traceprotokoll der Sequenzen in die Ausgabedatei geschrieben, die dann allerdings nicht ausgedruckt werden kann. Man die Protokolleirung wieder abschalten, indem man dne folgenden Befehl eingibt:

TraceCellarStack off

Den aktuellen Tracezustand kann man sich mit folgendem Befehl anzeigen lassen:

TraceCellarStack

10.1.1. Kommandos

C000XXXX - Lade Nibble.
           XXXX enthält den Nibblewert, der auf den Stack geladen
           wird (Register A). Der Stack wird vorher gepusht.

C001XXXX - Setze Bedingungsflagge.
           XXXX enthält den durchzuführenden Vergleich:
           0000 - A = 0
           0001 - A != 0
           0010 - A < 0
           0011 - A > 0
           0100 - A <= 0
           0101 - A >= 0
           0110 - Setze Bedingungsflagge auf FALSE
           0111 - Setze Bedingungsflagge auf TRUE
           1000 - A = B pop registers
           1001 - A != B pop registers
           1010 - A < B pop registers
           1011 - A > B pop registers
           1100 - A <= B pop registers
           1101 - A >= B pop registers
           1110 - Invertiere Bedingungsflagge
           1111 - reserviert

C010XXXX - Führe Stackoperation durch.
           XXXX enthält die durchzuführende Operation:
           0000 - B + A
           0001 - B - A
           0010 - B * A
           0011 - B / A
           0100 - B MOD A
           0101 - B HOCH A
           0110 - B um A nach rechts verschieben
           0111 - B um A nach links verschieben
           1000 - INVERTIERE A
           1001 - B ODER A
           1010 - B UND A
           1011 - B EXOR A
           1100 - POP Stack (A geht verloren)
           1101 - PUSH Stack (A wird dupliziert)
           1110 - vertausche A B
           1111 - (B << 4) ODER (A UND 0x0000000F). Um beliebige Werte über Nibbles zu laden

           Die Operanden werden im Regelfall vom Stack entfernt, d.h. der Stack wird
           entsprechend gepoppt und das Resultat wird danach auf den Stack gepusht.

C0110XXX - Schreibe den Inhalt von Register A in die Druckersteuersequenz.
           Der Stack wird danach gepoppt.
           XXX enthält das Ausgabeformat:
           000 - Als lesbare Dezimalzahlen (0-9)
           001 - 1 Byte binärer Zahlenwert
           100 - Als lesbare kleingeschriebene Hexadezimalzahlen (0-9, a-f)
           101 - Als lesbare großgeschriebene Hexadezimalzahlen (0-9, A-F)

           und

            10 - 2 Bytes binärer Zahlenwert
            11 - 4 Bytes binärer Zahlenwert

           mit

           0   - Little Endian
           1   - Big Endian

C01110XX - Vergleiche Seitengröße (Breite/Höhe in Variablen
           0x00000018 and 0x00000019) mit den Seitengrößensequenzen
           innerhalb der Seitengrößensequenzkonfigurationstabelle.
           Wird ein entsprechender Eintrag gefunden, so wird die
           Bedingungsflagge auf TRUE gesetzt und die durch
           XX (0-3) festgelegte Sequenz wird entsprechend ihres
           Typs (siehe unten) entweder in die Druckersteuersequenz
           geschrieben oder ihre Werte werden auf den Stack gepusht.
           wird kene Übereinstimmung gefunden, so wird die Bedingungsflagge
           auf FALSE gesetzt.

           Seitengrößensequenzen werden in der Konfigurationsdatei
           auf folgende Art und Weise eingebunden:
           "page_sequence_start" markiert den Anfang
           der Sequenzliste. "page_sequence_end" markiert
           das Ende der Sequenzliste. Dazwischen steht eine
           beliebige Anzahl von Seitengrößensequenzen im folgenden
           Format:

           dezimale_Seitenbreite dezimale_Seitenhöhe [Sequenz_0 [Sequenz_1 [Sequenz_2 [Sequenz_3]]]]

           Eine Sequenz besteht aus einer Typkennung gefolgt von einem Doppelpunkt:

           - V: bedeutet, daß eine durch Komma getrennte Liste von dezimalen Werten folgt,
                die auf den Stack gepusht werden.
           - S: bedeutet, daß eine Steuersequenz folgt, die in die Druckersteuersequenz
                eingefügt wird. Die Sequenz wird in der üblichen Form für Steuersequenzen
                angegeben, die auch von Print Edit verwendet wird (Eine Mixture aus in
                Anführungszeichen eingeschlossenen Buchstbaben und Dezimalzahlen, die
                durch Kommas getrennt sind. Kellerstacksequnezen sind hier nicht erlaubt,
                so daß 255 wirklich das Zeichen 255 beschreibt). Wichtig: Eine Sequenz
                darf kein Leerzeichen enthalten, da dies den Anfang der nächsten Sequenz
                anzeigt.

           Eine Sequenz kann optional festgelegt werden und S: bzw. V: Sequenzen
           können beliebig gemischt werden. Beispiel:

           12345 456789 S:27,"(","C",4,0,"q",16,0,0 V:123,456

           Sequenz 0 für Seitengröße 12345/456789 ist 27,"(","C",4,0,"q",16,0,0 und
           wird in die Druckersteuersequenz eingefügt.

           Sequenz 1 liefert die Werte 123 und 456, die auf den Stack gepusht werden.
           123 wird zuerst gepusht, dann folgt 456. danach enthält Register B 123
           und Resgister A 456.

           Sequenz 2 und Sequenz 3 sind nicht definiert.

           Mit solchen Sequenzen kann man Folgendes machen:

           a. Man kann dem Drucker die Papiergröße mitteilen (A4, Letter)
           b. Man kann am Drucker die Papierquelle auswählen
           c. Man kann dem Drucker den Papiertyp mitteilen (Photo/normal)

           Anmerkung: Benutzen Sie einen Trick, um besondere Papiertypen
           zu verwalten. RISC OS unterstützt es nicht, die Art des Papiers
           anzugeben, man kann aber eine geringfügig kleinere Breite oder
           Höhe als die normale Papiergröße angeben. Dies beeinflußt den
           Druckprozeß nicht negativ.

C0111110 - Speichere Stackinhalt B in die durch A bestimmte Variable.
           Der Stack wird danach gepoppt (A geht verloren).

C0111111 - Lade den Stack mit dem Wert der durch A bestimmten Variable.
           A wird durch den Inhalt der Variable ersetzt.

C100XXXX - Lade den Stack mit dem Wert einer Druckauftragzustandsvariablen.
           Der Stack wird vorher gepusht.
           XXXX enthält die Druckauftragzustandsvariablen.

C10100XX - Schreibt den Namen der Ausgabedatei in die Druckersteuersequenz.
           Der Stack bleibt unverändert.

           XX enthält das Ausgabeformat:
           00 - reserviert
           01 - Dateiname
           10 - Pfad
           11 - Pfad und Dateiname

01010100 - Schreibe eine Bytesequenz, die dem Kommando folgt,
           bedingt in die Druckersteuersequenz. Die Sequenz
           wird durch 11010100 begrenzt welches sonst keinen
           Sinn ergibt, da es die gleiche Bedeutung hätte, als ob
           man die Sequenz außerhalb einer Kellerstacksequenz
           direkt in die Druckerstersequenz schreiben würde.
           Ein 11010100 Byte innerhalb der Sequenz kann durch zwei
           aufeinanderfolgende 11010100 dargestellt werden.
           Gemäß der Bedingungsflagge wird die Sequenz geschrieben oder
           ignoriert. In beiden Fällen wird die Berechnung mit dem Kommando
           hinter dem terminierenden 11010100 fortgesetzt. 11111111
           kann in die Sequenz eingebettet werden. Es wird nicht als
           Kellerstacksequenzterminierungskennzeichen behandelt.

11010100 - Beendet eine Zeichensequenz, die durch 01010100 eingeleitet
           wurde. 11010100 ohne 01010100 wird ignoriert.

11111111 - Ende der Kellerstacksequenz. Der Kommandozeiger zeigt am Ende
           der Ausführung einer Kellerstackberechnung auf das folgende
           Zeichen in der Druckersteuersequenz. Dieses Kommando ist
           Pflicht. Wenn es nicht existiert, wird die gesamte Stackberechnung
           bis auf die Änderung der Variablen ignoriert.

01111111 - Bedingtes Ende der Kellerstacksequenz. Die Programmausführung
           hört hier auf, aber die folgenden Zeichen werden bis zum
           nächsten 0xFF übersprungen.

Alle anderen Werte sind reserviert.

10.1.2. Variablen

Im Bereich 0x00000000 bis 0x0000000F liegen Variablen die zur Laufzeit des Druckauftrags durch den Dumper gesetzt werden (Nur Lesezugriff).

0x00000000 - Anzahl der verbleidenden Kopien
0x00000001 - Aktuelle Stufe (aktualisiert vor jeder Datenausgabe)
0x00000002 - Aktuelles vertikales Interlace (aktualisiert vor jeder Datenausgabe)
0x00000003 - Aktuelles horizontales Interlace (aktualisiert vor jeder Datenausgabe)
0x00000004 - Anzahl Bytes von Daten die im nächsten Block gesendt werden
             (aktualisiert vor jeder Datenausgabe)
0x00000005 - Bytes die pro Zeile gefüllt sind (aktualisiert vor jeder Datenausgabe)
             Ausgeschlossen sind leere Bereiche auf der rechten Seite.
             Achtung: Die Bytes sind nicht gleich Pixel.
0x00000006 - Aktuelle Seite im Druckaufrag
0x00000007 - Nummer des Druckjobs seit der Dumper gestart wurde.
             Verwendung zur eindeutigen Identifikation.
0x00000008 - 0x0000000F reserviert

Im Bereich 0x00000010 bis 0x0000004F liegen Variablen die vom Drucksystem festgelegt werden (Nur Lesezugriff).

0x00000010 - Gesamtanzahl vertikaler Durchläufe
0x00000011 - Gesamtanzahl horizontaler Durchläufe
0x00000012 - Gesamtanzahl Farben (Noch nicht implementiert)
0x00000013 - Gesamtanzahl Punkte pro Druckkopf
0x00000014 - Anzahl vertikale Punkte pro Inch
0x00000015 - Anzahl horizontale Punkte pro Inch
0x00000016 - Vertikalversatz am Seitenanfang in Punkten
0x00000017 - Horizontalversatz links am Zeilenanfang in Punkten
0x00000018 - Seitenbreite in Inch/10000
0x00000019 - Seitenhöhe in Inch/10000
0x0000001A - Seitendruckbereich oben links Vertikalposition in Inch/10000
0x0000001B - Seitendruckbereich oben links Horizontalposition in Inch/10000
0x0000001C - Seitendruckbereich unten rechts Vertikalposition in inch/10000
0x0000001D - Seitendruckbereich unten rechts Horizontalposition in inch/10000
0x0000001E - 0x0000004F reserviert

Im Bereich 0x00000050 bis 0x0000007F liegen Variablen, die das Verhalten des Dumpers steuern (Schreib-/Leserechte hängen von der Variable ab):

0x00000050 - Gesamtanzahl Stufen (nur lesen)
0x00000051 - Datenkompressionsformat (lesen/schreiben)
0x00000052 - Vertikalversatz in Punkten, der nicht über Steuersequenzen
             abgedeckt wird (lesen/schreiben).
             Wird bei jedem Seitenstart automatisch aktualisert. Sinnvoll kann man
             der Wert nur in der Seitenstartsequenz abgeändern.
0x00000053 - Verbleibende Anzahl der Kopien der Seite (lesen/schreiben)
             Wird bei jedem Seitenstart automatisch aktualisert.
0x00000054 - Anzahl der Farbpartonen (nur lesen)
0x00000055 - Bits pro Druckerpixel (nur lesen)
0x00000056 - Druckermodus (nur lesen)
0x00000057 - Kalibrierung (lesen/schreiben)
             Wird mit Byte 14 aus ZERO_SKIP initialisiert.
             Kann in Abhängigkeit vom Papiertyp für jede Seite
             geändert werden.
0x00000058 - 0x0000007F reserviert

Im Bereich 0x00000080 bis 0x000000FF liegen Variablen, die von Programmen beliebig genutzt werden können. Sie werden zu Beginn des Druckauftrags nicht initialisiert, bleiben aber bis zum Ende des Druckauftrags erhalten (Schreib-/Lesezugriff):

0x00000080 - 0x0000008F frei nutzbare Variablen
0x00000090 - 0x000000FF reserviert

10.1.3. Programmbeispiel

Um die Programmierung zu verdeutlichen, zeigt das folgende Beispiel, wie man einen Vertikalvorschubzähler implmentiert, um die Steuersequenzen zu optimieren.

Binär

Dezimal

Reg A

Reg B

Reg C

Reg D

Bemerkung

Initialisierungssequenz

11111111

255

Start

Lösche Vorschub

10000000

128

0

Lade Wert 0, um ihn in die Variable zu speichern

10001000

136

8

0

Variablennummer höherwertiges Nibble (8)

10000000

128

0

8

0

Variablennummer niederwertiges Nibble (0)

10101111

175

0x80

0

Setze Variablennummer zusammen (0x80)

10111110

190

0

Speichere Wert in die Variable

11111111

255

Ende

Sequenz am Zeilenende

11111111

255

Start

Addiere Vorschub

Lade alten Vorschubwert

10001000

136

0x08

Variablennummer höherwertiges Nibble (8)

10000000

128

0x00

0x08

Variablennummer niederwertiges Nibble (0)

10101111

175

0x80

Setze Variablennummer zusammen (0x80)

10101101

173

0x80

0x80

Dupliziere Variablennummer, um Wert später zurückspeichern zu können.

10111111

191

e.g. 0

0x80

Lade Wert aus Variable

Vorschub hinter der Zeile

10000001

129

0x01

e.g. 0

0x80

Vorschub höherwertiges Nibble (1)

10000001

129

0x01

0x01

e.g. 0

0x80

Vorschub niederwertiges Nibble (1)

10101111

175

0x11

e.g. 0

0x80

Setze Vorschub zusammen (0x11)

Erhöhe Vorschub

10100000

160

e.g. 0x11

0x80

Addition des alten und neuen Wertes am oberen Stackende

Speichere Vorschub

10101110

174

0x80

e.g. 0x11

Vertausche Variablennummer und Vorschub auf dem Stack

10111110

190

e.g. 0x11

Speichere Wert in die Variable

11111111

255

End

Datensequenz

Es wird unterstellt, daß die Vorschubsequenz sich schon in der Steuersequenz befindet und man an dieser Stelle nur den Wert einsetzen muß.

11111111

255

Start

Baue Vorschubwert in die Sequenz ein

10001000

136

8

Variablennummer höherwertiges Nibble (8)

10000000

128

0

8

Variablennummer niederwertiges Nibble (0)

10101111

175

0x80

Setze Variablennummer zusammen (0x80)

10101101

173

0x80

0x80

Dupliziere Variablennummer, um Wert später zurücksetzen zu können

10111111

191

e.g. 0x11

0x80

Lade Vorschub aus Variable

10110111

183

0x80

Füge Vorschub als 4 Byte big endian Binärwert in die Steuersequenz ein

Lösche Vorschub

10000000

128

0

0x80

Lade Wert 0, um ihn in die variable zu speichern.

Speichere Vorschub

10101110

174

0x80

0

Vertausche Variablennummer und Vorschub auf dem Stack

10111110

190

0

Speichere Vorschub in Variable

11111111

255

End

10.2. Die druckerspezifische Kalibrierungsdatei

Die Dateien sind genau wie der Drucker benannt und stehen im <Printers$Dir>.Resources.PDumpers.PDumperEI Verzeichnis Sie werden normalerweise über das Konfigurationsprogram geändert, lassen sich aber auch von Hand abändern. Ein Satz vollständig kalibrierter Musterdateien steht unter <PDPEICal$Dir>.Resources.Calibs. Die grundlegende Mutervorlage ist <PDPEICal$Dir>.Resources.CalibDef, die keine Farbdefinitonen enthält. Das Kalibrierungsprogramm versucht als erstes die aktuellen Einstellungen für den Drucker zu ermitteln. Findet es hier nichts, so sucht es im Calibs Verzeichnis nach Vorlagen.

Die druckerspezifischen Kalibrierungsdateien bestehen zum Einen aus Kommentarzeilen, die mit einem "#" beginnen und zum Anderen aus druckerspezifischen Einstellungen. Die Zeilen dürfen 511 Byte lang sein. Die Druckereinstellungen sind nach Gruppen gegliedert. Jede Gruppe wird durch ein entsprechende gruppenspezifische Startkennung (optional mit Parametern) eingeleitet. Darauf folgen die Zeilen mit den diversen Einstellungen. Ihr Format hängt von der Gruppe ab. Ende findet sich eine Zeile mit der Gruppenabschlußkennung. Leerzeilen sind nicht erlaubt. Kommentarzeilen können beliebig plaziert werden. Es gibt die folgenden Gruppen:

  1. Druckkopfjustage
  2. Seitenbehandlung
  3. Farbkalibrierung

Einstellungsgruppe
Startkennung Abschlußkennung
Position Bedeutung
Druckkopfjustage
head_adjustment_start head_adjustment_end
1 "v" oder "h" für vertikal bzw. horizontal
2 Patrone (0-9)
3 Justierung in Pixel als ganze Zahl (horizontal sind nur positive Werte erlaubt)
Seitenbehandlung
page_sequence_start page_sequence_end
1

Papierbreite in Inch/10000 (dezimal)

Wichtiger Hinweis: Infolge interner Rundungsdifferenzen können die Papiergrößen von DIN AX und DIN AX Generic voneinander abweichen. Benutzen Sie den "Dummy for page size" Druckermodus mit einer leeren Seite um die exakten Werte zu bestimmen.

2 Papierhöhe in Inch/10000 (dezimal)
3

Sequenz 0 (optional).

Eine Sequenz wird durch eine Typenkennung "S:" oder "V:" eingeleitet. Hinter "S:" folgt eine Steuersequenz in der Form, der sie auch in PrintEdit verwendet wird, aber ohne Kellerstack, so daß 255 auch wirklich das Zeichen 255 beschreibt. Leerzeichen sind innerhalb der Sequenz nicht erlaubt, als Ersatz ist 32 zu verwenden. Hinter "V:" folgen bis zu 4 kommagetrennte ganze Zahlen.

Alle diese Sequenzen sind nur dann von Nutzen, wenn sie entsprechend in den Kellerstacksequenzen referenziert werden.

4 Sequenz 1 (optional nur wenn Sequenz 0 existiert).
5 Sequenz 2 (optional nur wenn Sequenz 1 existiert).
6 Sequenz 3 (optional nur wenn Sequenz 2 existiert).
Farbkalibrierung
printable_colours_start [Reference_Number] printable_colours_end
1

Rotkomponente der druckbaren Farbe (dezimal 0-255)

2

Grünkomponente der druckbaren Farbe (dezimal 0-255)

3

Blaukomponente der druckbaren Farbe (dezimal 0-255)

4

Minimaler Rotwert, der von der Farbe abgedeckt wird (dezimal 0-255)

5

Maximaler Rotwert, der von der Farbe abgedeckt wird (dezimal 0-255)

6

Minimaler Grünwert, der von der Farbe abgedeckt wird (dezimal 0-255)

7

Maximaler Grünwert, der von der Farbe abgedeckt wird (dezimal 0-255)

8

Minimaler Blauwert, der von der Farbe abgedeckt wird (dezimal 0-255)

9

Maximaler Blauwert, der von der Farbe abgedeckt wird (dezimal 0-255)

10

Druckermuster, um die Farbe zu erzeugen (hexadezimal bis zu 32 Bit). Hängt von den Bits pro pixel, der Zahl der Patronen und dem vom Drucker benötigten Format für die Pixelintensität ab.

11

Farbgruppeninformation (hexadezimal).

Bit Bedeutung
0 Papierfarbe. Kein Mitglied in irgendeiner anderen Gruppe. Wird zur Beschleunigung benötigt und gebraucht, wenn keine andere Farbe gefunden wird.
1 Reines Schwarz. Üblicher- aber nicht notwendigerweise Mitglied der Farbgruppe Schwarz. Notwendig zur Schwarz/Weiß Beschleunigung.
2 Farbgruppe Schwarz. Wird beim Graustufendithering verwendet.
3 Farbgruppe Zyan. Logisches Mitglied der CMY und allgemeinen Farbgruppe. Notwendig, um Zyanfarben zu ermitteln.
4 Farbgruppe Magenta. Logisches Mitglied der CMY und allgemeinen Farbgruppe. Notwendig, um Magentafarben zu ermitteln.
5 Farbgruppe Gelb. Logisches Mitglied der CMY und allgemeinen Farbgruppe. Notwendig, um gelbe Farben zu ermitteln.
6 CMY Farbgruppe. Logisches Mitglied der allgemeinen Farbgruppe. Wird intern z.Z. nicht verwendet.
7 Hexachrom Farbgruppe. Logisches Mitglied der allgemeinen Farbgruppe. Wird intern z.Z. nicht verwendet.
8 Allgemeine Farbgruppe. Wird als Ditherinformation genutzt.

12

Prozentanteil der Papierfarbe, der benötigt wird, um die Farbe abzubilden. Üblicherweise 0. Maximal 99. Dieser Wert wird benutzt, wenn bei Subraktionsfarben zu viel Tinte aufs Papier gespritzt wird. Der Wert errechnet sich in dem man eine Linie zwischen dem Farbpunkt mit Komponentenwerten kleiner 0 außerhalb des RGB-Würfels und dem Punkt der Papierfarbe legt. An der Stelle wo die Linie durch eine Seite des RGB-Würfels geht, liegt der Punkt dessen Farbkomponenten in dieser Zeile gespeichert werden. Dieser Wert errechnet sich aus der Länge der Linie zwischen dem gespeicherten Punkt und dem Originalpunkt geteilt durch die Länge der Linie zwischen dem Originalpunkt und der Papierfarbe.

10.2.1. Der "Dummy for page size" Modus

Die "Dummy for page size" Auflösung ist ein spezieller Druckermodus, der es Ihnen erlaubt die Breite und Höhe Ihrer selbstdefinierten Seitengrößen zu bestimmen.

  1. Wählen Sie die "Dummy for page size" Auflösung
  2. Wählen Sie eine beliebige Ausgabedatei für Ihren Drucker
  3. Öffnen Sie ein leeres Blatt Papier in einer beliebigen Applikation, aus der man drucken kann (z.B. !Writer)
  4. Drucken Sie das leere Blatt
  5. Schauen Sie in ihre Druckausgabedatei. Sie werden dort eine Zeile mit zwei Werten sehen.
  6. Kopieren Sie diese Werte in ihre druckerindividuelle Konfigurationsdatei im Bereich der Seitenbehandlung.
  7. Fügen Sie die entsprechenden "S:"-Seitensequenzen in der gerade erzeugten Zeile hinzu.
  8. Stellen Sie den Drucker auf die normale Ausgabe und Auflösung zurück.

10.3 Externe Kalibrierungsdateien

Man Farbdefinitionen aus externen Dateien importieren. Diese Definitionen werden mit den Farben gemischt, die von !PDPEICal erzeugt wurden. Das Mischen findet nach dem Erzeugen der Farben aus den Basisfarben statt. Wenn keine Patronen gewählt wurden, wird mindestens die Papierfarbe intern erzeugt. Dies ist die übliche Methode, um eine externe Kalibrierungsdatei einzubinden. Die zusätzlichen Farben werden aus der kalibrierungsdatei eingelesen, die RGB-Komponenten, Papierfarbenanteil, Druckermuster und Farbgruppeninformation enthält. Die zusätzlichen Farben werden gegen die bereits von !PDPEICal erzeugten Farben auf Duplikate getestet. Liegt ein Duplikat vor, so haben die zusätzlichen Farben die höhere Priorität und ersetzen die bereits von !PDPEICal erzeugten Farben. Eine externe Kalibrierungsdatei darf auf keinen Fall eine Definition für die Papierfarbe enthalten.

Spalte Inhalt
1

Rotkomponente der druckbaren Farbe (dezimal 0-255)

2

Grünkomponente der druckbaren Farbe (dezimal 0-255)

3

Blaukomponente der druckbaren Farbe (dezimal 0-255)

4 Druckermuster, um die Farbe zu erzeugen (hexadezimal bis 32 Bit). Hängt von den Bits pro pixel, der Zahl der Patronen und dem vom Drucker benötigten Format für die Pixelintensität ab.
5 Farbgruppeninformation (hexadezimal)
6 Prozentanteil der Papierfarbe, der benötigt wird, um die Farbe abzubilden.

10.4. Die Ditherinfo Datei

Die Ditherinfo Datei liegt unter <Printers$Dir>.Resources.PDumpers.PDumperEI. Sie enthält den Horizontalversatz für jede Zeile während des Ditheringprozesses.

Spalte Inhalt
1 Konstanter Wert "ho", steht für horizontal offset
2 Zeilennummer bei der der Versatz genutzt werden soll
3 Auftrittshäufigkeit bei der der Versatz genutzt werden soll.
4 Versatz in Punkten

In <PDPEICal$Dir>.Resources gibt es ein kleines BASIC Programm namens GenDither, mit dem man sich eine andere Ditherinfo Datei erzeugen lassen kann, wenn einem die aktuelle Datei nicht zusagt.