MegaPaint Version 2.2 - Scannerinterface - Entwicklerinformationen
==================================================================

Allgemeines
-----------

In MegaPaint werden nur noch Scanner untersttzt, die einen Treiber besitzen,
der den hier aufgefhrten Spezifikationen gengt. Dies ist aufgrund der Flle
vllig verschiedenartiger Scanner und Treiber der einzige Weg, eine Explosion
der Programmlnge zur vermeiden.

Wir behaupten nicht, da dies der perfekte Scannertreiber ist. Aber er reicht
fr alle heutigen Scanner aus, ist leicht zu benutzen und vllig unabhngig
vom Programm selbst. Somit wird nur dann Speicher verbraucht, wenn tatschlich
ein Treiber installiert ist.

Treiberorganisation
-------------------

Es mu die BIOS-Funktion 23456 generiert werden. Dies geschieht durch Umleiten
des Vektors fr Trap #13 und Einklinken einer eigenen, speicherresidenten
(aber mglichst nicht resetresistenten) Treiberroutine. Diese sieht nach, ob
als Funktionsnummer 23456 bergeben wird. Ist dies nicht der Fall, wird ber
den Standardvektor fr Trap #13 weitergesprungen. Ansonsten werden die
bergebenen Parameter abgearbeitet.

Die Installation des Scannertreibers mu mit einem Programm geschehen, welches
eigenstndig im AUTO-Ordner stehen kann. Der Name des Programms ist unwichtig.

Die Syntax der BIOS-Funktion in ST Pascal wre:

function SCAN( Value:integer; Mode:integer; Buffer:^byte):integer; BIOS(23456);

Leider untersttzt ST Pascal nur BIOS-Aufrufe bis 127. Es mu also in Assembler
aufgerufen werden:

        move.w  value ,-(a7)
        move.w  mode  ,-(a7)
        pea     buffer
        move.w  #23456,-(a7)
        trap    #13
        add.w   #10,a7

Mode beschreibt die gewnschte Funktion, Value und Buffer sind die Parameter.
Folgende Funktionen mssen untersttzt (oder zumindest abgefangen) werden:

Mode=-1: Existenzabfrage

SCAN(0, -1, 0L) liefert 1, wenn der Treiber installiert ist. Keine weitere
Funktion. (Ansonsten wird laut GEM-Definition einer nicht vorhandenen BIOS-
Funktion automatisch die bergebene Funktionsnummer 23456 zurckgegeben.)

Mode=0: Einstellen der Helligkeit

SCAN(Bright, 0, 0L) stellt die Helligkeit ein. Es werden Werte zwischen -100
und 100 erwartet, 0 ist die Normaleinstellung.

Mode=1: Einstellen des Kontrastes

SCAN(Contrast, 1, 0L) stellt den Kontrast ein. Es werden Werte zwischen -100
und 100 erwartet, 0 ist die Normaleinstellung.

Mode=2: Einstellen der X-Auflsung

SCAN(Xres, 2, 0L) stellt die X-Auflsung ein. Es werden Werte grer gleich
50 erwartet, sie geben die Auflsung in DPI an.

Mode=3: Einstellen der Y-Auflsung

SCAN(Yres, 3, 0L) stellt die Y-Auflsung ein. Es werden Werte grer gleich
50 erwartet, sie geben die Auflsung in DPI an.

Mode=4: Einstellen der Dither-Modi

SCAN(Modus, 4, 0L) stellt den Dither-Modus ein. Es werden Werte grer gleich
0 erwartet. 0 bedeutet Line-Art, grere Werte bedeuten Dithermodi.

Mode=5: Einstellen der X-Gre des Bildes

SCAN(Xsize, 5, 0L) stellt die Bildgre in X-Richtung ein. Es werden Werte
grer 0 erwartet.

Mode=6: Einstellen der Y-Gre des Bildes

SCAN(Ysize, 6, 0L) stellt die Bildgre in Y-Richtung ein. Es werden Werte
grer 0 erwartet.

Da die meisten Scanner nicht alle Parameter komplett untersttzen, wird bei
den Funktionen 0 bis 6 als Funktionswert der tatschlich eingestellte Wert
zurckgegeben oder ein Wert kleiner als -2000, wenn die Funktion nicht
untersttzt wird. Da die Modi 7 bis 9 fr sptere Erweiterungen gedacht sind,
sollte bei diesen Funktionen ein Wert kleiner als -2000 zurckgegeben werden,
damit der Treiber auch nach Erweiterungen lauffhig ist.

Ist die Auflsung nicht fr X- und Y-Richtung getrennt einstellbar, so werden
durch Setzen einer Auflsung immer beide gendert.

Die Funktionen 0 bis 6 werden immer in eben dieser Reihenfolge aufgerufen,
d.h. die Auflsung ist bekannt, wenn die Bildgre eingestellt wird.

Mode=10: Start Scan

SCAN(0, 10, Buffer) liest ein Bild mit den eingestellten Parametern ein.
Buffer ist ein Zeiger auf einen Puffer ausreichender Gre (Xsize * Ysize
div 8 Bytes). Die Zeilen liegen immer bytebreit vor, berschssige Bits sind
0 gesetzt.

Mode=11: Start Print

SCAN(0, 11, Buffer) druckt ein Bild mit den eingestellten Parmetern aus.
Buffer ist ein Zeiger auf ein Bild eingestellter Gre (Xsize * Ysize
div 8 Bytes). Die Zeilen liegen immer bytebreit vor, berschssige Bits sind
0 gesetzt.

Die Funktionen 10 und 11 liefern bei Erfolg 1 zurck, sonst -1.

Der Scannertreiber darf nach der Installation (whrend der der Bildschirm
mit Copyrights vollgeschrieben werden darf) keine Ausgabe mehr auf den
Bildschirm ttigen, auch nicht im Fehlerfalle.

Anmeldung des Scanners
----------------------

Sobald uns fr einen Scanner ein solcher Treiber gemeldet wird, wird er ab
der nchsten Version untersttzt. Wir bentigen mindestens die folgenden
Informationen ber der Scanner bzw. den Treiber:

- Bezeichnung des Scanners (max. 40 Zeichen)
- Kann der Scanner auch drucken ?
- Minimale und maximale Bildgre (Schrittweite ?)
- Kann die Auflsung geregelt werden (Welche Werte, X und Y unabhngig ?)
- Kann die Helligkeit geregelt werden (Welcher Bereich ?)
- Kann der Kontrast geregelt werden (Welcher Bereich ?)
- Wieviele Dithermodi kennt das Gert (0..n)

- Wieviel dynamischen Speicher bentigt der Treiber ? (Bis zu 10 KB sind
  in jedem Fall erlaubt)

Diese und alle weiteren Informationen werden, soweit sinnvoll, von uns direkt
oder berarbeitet an den Kunden weitergegeben.


Anmerkung: Die beiden Treiber fr die PrintTechnik-Scanner wurden geschrieben
und uns zur Verfgung gestellt von

Dipl. Inform. Roger Bischoff,
Schiestttenweg 17,
8015 Markt Schwaben,
Telefon/FAX 08121/46449.
