•  Back 
  •  Treibertypen 
  •  Index 
  •  Tree View 
  •  Cross references 
  •  Help page 
  •  Show info about hypertext 
  •  View a new file 
Topic       : TOS - das Betriebssystem
Author      : 
Version     : tos.hyp (5. März 2013)
Subject     : Programmieren/Atari
Nodes       : 3001
Index Size  : 93602
HCP-Version : 5
Compiled on : Atari
@charset    : atarist
@lang       : 
@default    : Titel
@help       : 
@options    : +g -i -s +x +zz -t4
@width      : 70
View Ref-File15.6.4.1  Treibergruppe Scanner                                    TOS

Festlegung: Bei Bi-Level-Daten entspricht ein gesetztes Bit einem 
'vorhandenen` Pixel. Bei Multivalue-Daten entspricht 0 `nichts`, mit 
steigendem Wert nimmt die betreffende Farbintensität bzw. Helligkeit 
zu.

ACHTUNG: Beim Kommandos aus der 10xH-Gruppe werden Graustufenbilder 
invertiert!

  14H  W  Scannerbeschreibung
          Enthält dieses Word den Wert 0, so ist der Scanner/Treiber noch
          nicht initialisiert, Kommando 105H ausführen
          Bit 0: Bi-Level möglich
              1: Dithern möglich
              2: Multivalue möglich
              3: Multivalue und Dithern möglich
              4: Bi-Level Farbe möglich
              5: Dithern Farbe möglich
              6: Multivalue in Farbe möglich
              7: Multivalue in Farbe und Dithern möglich
              8: Komprimierung der Daten (siehe unten) möglich
              9: Blockweise Rückgabe möglich
             10: Einzelblatteinzug per separatel Kommando
             11: Einzelblatteinzug automatisch
             12: Prescan möglich
             13: virtuelle Speicherverwaltung möglich
                 (GDPS-Version >= 1.10)
             14: reserviert (0)
             15: reserviert (0)
               Multivalue und Dithern: Sondermodus, immer 2 Bit/Pixel
  16H  W  Zahl der Farben
  18H  W  Mögliche Multi-Value-Bittiefen
          Aufbau:  Bit 0 gesetzt: monochrom möglich
                   Bit 1 gesetzt: 2 Graustufen möglich
                   Bit 2 gesetzt: 4 Graustufen möglich
                   Bit 3 gesetzt: 8 Graustufen möglich
                   etc...
  1AH  W  Scanner reservieren
  1CH  W  Kommando an Scanner (0=Ready, 1-FFH reserviert!!!)
  1EH  L  Pointer auf Kommandostruktur

Es wird von einem Scannertreiber mit eigener Bedienoberfläche 
ausgegangen. Will ein Programm den Scannertreiber ansprechen, so 
geschieht dies folgendermaßen:

   a) Warten, bis Word 1AH = 0 (Scanner frei)
   b) Scanner reservieren durch Eintrag eines Wortes in 1AH
   c) Erstellen der Kommandostruktur
   d) Eintragen des pointers auf die Kommandostruktur nach 1EH
   e) Eintragen des Kommandos in 1CH
   f) in einer EVENT-Schleife (!!) (Timer- oder Multi-Event) warten, bis
      Kommando-Word vom Scannertreiber wieder auf 0 gesetzt ist.
   g) Schritte ab c) beliebig oft wiederholen
   h) Scanner freigeben (0 in 1AH eintragen)

Die vom aufrufenden Programm zur Verfügung zu stellende 
Kommandostruktur hat drei Aufgaben:

   a) Übergabe der kommandostruktur
   b) Rückgabe einer Erfolgs- bzw. Fehlermeldung
   c) Rückgabe der verwendeten Parameter

Aufbau der Kommandostruktur:

   00H  W  Rückgabewert, wird vom aufrufenden Programm auf 0 initialisiert.
           Der Scannertreiber trägt hier nach Abarbeitung des Kommandos
           0xFFFF (=OK) oder eine positive Fehlernummer ein.
           Arbeitet der Scanner im Blockmodus, wird nach den Blöcken ein
           0xFFFE eingetragen, nach dem letzten Block ein 0xFFFF. Arbeitet
           im Blockmodus UND in Farbe, so gibt es zwei Möglichkeiten:
           a) der Scanner scannt die Farbauszüge einzeln, dann erfolgt die
              übergabe wie oben, aber entsprechend der Zahl der Farben
              mehrfach.
           b) der Scanner scannt alle farben gleichzeitig, dann wird nach
              den Blöcken 0xFFFD eingetragen. Der zurückgegebene Block
              besteht dann aus 'Anzahl der Farben' gleichgroßen Bereichen.
   02H  W  Erlaubte Scanmodi. Der Aufbau dieses Wortes ist wie 14H, ein
           gesetztes Bit besagt, daß der Scannertreiber den entsprechenden
           Modus benutzen darf.
   04H  W  Erlaubte Bittiefen (Aufbau wie oben 18H).
   06H  L  Pointer auf Speicher
   0AH  L  Anzahl der Bytes in Speicher (Rückgabe: Anzahl der verwendeten
           Bytes)
   0EH  W  Bytes pro Scanline oder 0 (immer mod 2!)
   10H  W  Anzahl Scanlines oder 0
   12H  W  Breite des Image in 1/10 mm oder 0
   14H  W  Höhe des Image in 1/10 mm oder 0
   16H  W  Auflösung in Main-Scan-Richtung (x) in dpi oder 0
   18H  W  Auflösung in Sub-Scan-Richtung (y) in dpi oder 0
           (Bei Rückgabe: Auflösung = Auflösung * Zoomfaktor!)
   1AH  W  Modulo-Wert für Scanlines (in Bytes, z.B. 2 = 2*n Bytes pro
           Scanline)
   1CH  W  x-Position des Image in 1/10 mm
   1EH  W  y-Position des Image in 1/10 mm

Seit GDPS-Version >= 1.10:
   20H  L  Seriennummer des aufrufenden Programms
   24H  W  ADD-Bits: Zusätzlich vom Programm benötigter Speicher (in Bits
                     pro Pixel)
   26H  L  Pointer auf 'Dchange_pointer' (Funktion der vS)
   2AH  L  Pointer auf Dupdate (Funktion der vS)
   2EH  W  v_handle LESEN (vS)
   30H  W  v_handle SCHREIBEN (vS)
   32H  W  virt_flag (1 = vS wird benutzt)

vS = virtuelle Speicherverwaltung

Nach Abarbeitung eines Kommandos trägt der Scannertreiber die 
TATSÄCHLICH BENUTZTEN WERTE in diese Datenstruktur ein.

Soll die Bildgröße fest sein, so kann dies entweder mit den Worten 
0EH, 10H oder 12H, 14H, 1CH, 1EH definiert werden. Sind beide 
Wertepaare vorbesetzt, wird die Vorgabe in Bytes benutzt. Falls der 
Scanner nicht in der Lage ist, dieses Format einzuscannen, wird 
gegebenenfalls auf passenden Werte verändert; Daher bei Rückgabe 
prüfen!!

Komprimierung:

Bi-level und Dither-Daten sind IMMER so gepackt, daß 8 Pixel in einem 
Byte vorliegen. Dabei wird das erste Pixel ins MSBit eingetragen!

Multivalue-Daten liegen entweder unkomprimiert vor, dann belegt ein 
Pixel genau ein Byte. Dabei sind die Daten (bei weniger als 256 
Graustufen) immer zum MSBit hin formatiert, die LSBits sind ggf. 
aufgefüllt (je nach Scanner mit 0 oder 1). In komprimierter Form 
werden die Multivalue-Daten so gepackt, daß Byte-Grenzen nicht 
überschritten werden, ggf. auftretende Leerbits sind (je nach Scanner) 
mit 0 oder 1 gefüllt:

                 +--+--+--+--+--+--+--+--+
   2 Bit/ Pixel  |B1|B0|B1|B0|B1|B0|B1|B0|   -> 4 Pixel/Byte
                 +--+--+--+--+--+--+--+--+

                 +--+--+--+--+--+--+--+--+
   3 Bit/ Pixel  |B2|B1|B0|--|B2|B1|B0|--|   -> 2 Pixel/Byte
                 +--+--+--+--+--+--+--+--+

                 +--+--+--+--+--+--+--+--+
   4 Bit/ Pixel  |B3|B2|B1|B0|B3|B2|B1|B0|   -> 2 Pixel/Byte
                 +--+--+--+--+--+--+--+--+

                 +--+--+--+--+--+--+--+--+
   5 Bit/ Pixel  |B4|B3|B2|B1|B0|--|--|--|   -> 1 Pixel/Byte
                 +--+--+--+--+--+--+--+--+

                 +--+--+--+--+--+--+--+--+
   6 Bit/ Pixel  |B5|B4|B3|B2|B1|B0|--|--|   -> 1 Pixel/Byte
                 +--+--+--+--+--+--+--+--+
   etc.

Wird in der Kommandostruktur das Komprimierungsbit nicht gesetzt, so 
werden die ggf. vom Scannertreiber entkomprimiert. Ist das Bit jedoch 
gesetzt, muß es nach Abarbeitung des Kommandos getestet werden, ob die 
Daten wirklich komprimiert sind.

Festgelegte Kommandos:

   100H: Scan
           Der Benutzerdialog wird aufgerufen, ggf. wird ein Scanvorgang
           vorgenommen.
   101H: Continue
           Dieses Kommando setzt im Blockmodus das Scannen fort.
   102H: Scan without Dialog
           Es wird ein Scanvorgang ohne weitere Benutzerintervention
           veranlaßt. Es werden die gleichen vom Benutzer einstellbaren
           Parameter benutzt wie beim vorhergehenden Scanvorgang.
   103H: Next Sheet
           Der Einzelblatteinzug zieht das nächste Blatt ein.
   104H: Prescan
           Führt einen Prescan mit fest eingestellten Parametern durch.
   105H: Scanner/Treiber initialisieren
           Holt Gerätebeschreibung vom Scanner

Die Kommandos 102H und 103H sind speziell für eine automatisierte 
Schrifterkennung gedacht.

Seit GDPS-Version 1.10 existieren neue Kommandos (wie oben, aber statt 
10xH wird 20xh benutzt). Werden diese Kommandos benutzt, kann virtuell 
gearbeitet werden, falls virt_flag=1. Weiterhin werden 
Graustufenbilder bei diesen Kommandos wie folgt geliefert:

      0=schwarz
    255=weiß

ACHTUNG: bei 20xH-Kommandos muß vom aufrufenden Programm die 
erweiterte Kommandostruktur nach GDPS 1.10 übergeben werden!!!

Fehlermeldungen im Rückgabe-Wert:

   FFFEH: Block bereit, weitere Blöcke folgen.
   FFFFH: Scanvorgang (ggf. für eine Farbe) abgeschlossen, letzter (bzw.
          einziger) Datenblock liegt vor.
      0H: Abwarten und Tee trinken (bzw. mittels EVENT-Schleife warten)
      1H: Unbekanntes Kommando
      2H: Scannerfehler
      3H: Abbruch durch Benutzer
      4H: Out of Paper (nur bei Einzelblatteinzug)
      5H: Out of Memory: Der Benutzer hat ein zu großes Papierformat
          benutzt.
      6H: Scanner noch nicht initialisiert.

Die Fehlermeldungen werden dem Benutzer vom Treiber angezeigt. Sie 
dienen dem aufrufenden Programm nur als Information.