INHALTSVERZEICHNIS


cd.device/CD_ADDCHANGEINT
cd.device/CD_ADDFRAMEINT
cd.device/CD_ATTENUATE
cd.device/CD_CHANGENUM
cd.device/CD_CHANGESTATE
cd.device/CD_CONFIG
cd.device/CD_EJECT
cd.device/CD_GETGEOMETRY
cd.device/CD_INFO
cd.device/CD_MOTOR
cd.device/CD_PAUSE
cd.device/CD_PLAYLSN
cd.device/CD_PLAYMSF
cd.device/CD_PLAYTRACK
cd.device/CD_PROTSTATUS
cd.device/CD_QCODELSN
cd.device/CD_QCODEMSF
cd.device/CD_READ
cd.device/CD_READXL
cd.device/CD_REMCHANGEINT
cd.device/CD_REMFRAMEINT
cd.device/CD_SEARCH
cd.device/CD_SEEK
cd.device/CD_TOCLSN
cd.device/CD_TOCMSF
cd.device/CloseDevice
cd.device/OpenDevice



cd.device/CD_ADDCHANGEINT                           cd.device/CD_ADDCHANGEINT

   NAME
       CD_ADDCHANGEINT -- Richtet einen Software-Interrupt-Handler für
                          Disk-Wechsel ein.

   FUNKTION
       Mit diesem Befehl kann ein Software-Interrupt-Handler zum Disk-
       Device hinzu gefügt werden, der aufgerufen wird, wenn immer eine
       Disk eingelegt oder entnommen wird.

       Er muss in einer sorgfältig initialisierten Exec-Interruptstruktur
       übergeben werden und er muss darauf vorbereitet sein, unmittelbar
       auf Einlegen/Entnehmen einer Disk zu reagieren. Der Interrupt wird
       von der Exec-Funktion Cause erzeugt, deshalb muss A6 frei gehalten
       sein.

       Um den Handler aufzurufen, muss eine Interrupt-Struktur initialisiert
       werden. Diese Struktur wird als io_Data dem Befehl CD_ADDCHANGEINT
       übergeben. Danach wird der Handler in die Handler-Kette eingebunden
       und aufgerufen, wenn ein Disk-Wechsel vorkommt. Vor Verlassen des
       Programms muss der Handler entfernt werden.

       Dieser Befehl antwortet nur, wenn der Handler entfernt wird. Das
       heißt, das Device hält die IO-Anforderung aufrecht, bis der Befehl
       CD_REMCHANGEINT mit der gleichen IO-Anforderung ausgeführt wird.
       Deshalb muss SendIO() mit diesem Befehl verwendet werden.
 
   IO REQUEST EINGABE
       io_Device       wird voreingestellt durch den Aufruf von OpenDevice()
       io_Unit         wird voreingestellt durch den Aufruf von OpenDevice()
       io_Command      CD_ADDCHANGEINT
       io_Length       Größe von (struct Interrupt)
       io_Data         Zeiger auf Interrupt-Struktur

   IO REQUEST RÜCKGABE
       io_Error - 0 bei Erfolg oder ein Fehlercode wie festgelegt in
                  

   SIEHE AUCH
       CD_REMCHANGEINT, , ,
       exec.library/Cause()


cd.device/CD_ADDFRAMEINT                             cd.device/CD_ADDFRAMEINT

   NAME
       CD_ADDFRAMEINT -- Richtet einen CD-Frame Software-Interrupt-Handler ein.

   IO REQUEST
       io_Device       wird voreingestellt durch den Aufruf von OpenDevice()
       io_Unit         wird voreingestellt durch den Aufruf von OpenDevice()
       io_Command      CD_ADDFRAMEINT
       io_Length       Größe von (struct Interrupt)
       io_Data         Zeiger auf Interrupt-Struktur

   RÜCKGABE
       io_Error        0 bei Erfolg oder ein Fehlercode wie festgelegt in
                       

   FUNKTION
       Mit diesem Befehl kann eine Software-Interrupt-Handler zum Disk-
       Device hinzu gefügt werden, der aufgerufen wird, wenn immer ein
       neuer Frame erkannt wird, während CD-Audio abgespielt wird.

       Er muss in einer sorgfältig initialisierten Exec-Interruptstruktur
       übergeben werden und er muss darauf vorbereitet sein, unmittelbar
       einen Frame-Interrupt zu reagieren. Der Interrupt wird von der
       Exec-Funktion Cause erzeugt, deshalb muss A6 frei gehalten
       sein.

       Um den Handler aufzurufen, muss eine Interrupt-Struktur initialisiert
       werden. Diese Struktur wird als io_Data dem Befehl CD_ADDFRAMEINT
       übergeben. Danach wird der Handler in die Handler-Kette eingebunden
       und aufgerufen, wenn ein Frame-Ereignis vorkommt. Vor Verlassen des
       Programms muss der Handler entfernt werden.

       Dieser Befehl antwortet nur, wenn der Handler entfernt wird. Das
       heißt, das Device hält die IO-Anforderung aufrecht, bis der Befehl
       CD_REMFRAMEINT mit der gleichen IO-Anforderung ausgeführt wird.
       Deshalb muss SendIO() mit diesem Befehl verwendet werden.

   ANMERKUNG
       Der Interrupt-Handler kann vor oder nach dem Senden eines Abspiel-
       Befehls hinzu gefügt werden. Interrupts werden nur erzeugt, während
       CD-Audio abgespielt wird. Interrupts werden nicht erzeugt, wenn
       Audio pausiert.

   SIEHE AUCH
       CD_REMFRAMEINT, , ,
       exec.library/Cause()


cd.device/CD_ATTENUATE                                 cd.device/CD_ATTENUATE

   NAME
       CD_ATTENUATE -- Umblenden der CD-Audio-Lautstärke (sofort oder
                       allmählich)

   IO REQUEST
       io_Device       wird voreingestellt durch den Aufruf von OpenDevice()
       io_Unit         wird voreingestellt durch den Aufruf von OpenDevice()
       io_Command      CD_ATTENUATE
       io_Data         NULL
       io_Length       Dauer der Lautstärke-Umblendung in Frames
       io_Offset       Gewünschter Lautstärke-Pegel (0 - 0x7FFF)
                       (-1 = nur Status)

   RÜCKGABE
       io_Error        Gibt einen Fehler (error) zurück, wenn das Laufwerk
                       die Umblendung nicht unterstützt
       io_Actual       Gegenwärtiger Lautstärke-Pegel (Umblendung kann
                       überwacht werden)

   FUNKTION
       Dieser Befehl schiebt die CD-Audio-Lautstärke von ihrem aktuellen
       Wert nach oben oder nach unten zu dem Wert, der in io_Offset
       enthalten ist. Der mögliche Bereich ist 0 (Stille) bis 0x7FFF
       (höchste Lautstärke). Wenn als Ziel-Lautstärke -1 angegeben wurde,
       wird die Lautstärkeeinstellung nicht verändert; die aktuelle
       Einstellung wird in io_Actual zurückgegeben.

       io_Length enhält die Länge der Umblendung. Der Wert in Sekunden
       ergibt sich, wenn io_Length durch die laufende Frame-Geschwindigkeit
       (gewöhnlich 75) geteilt wird.

       Es ist zu beachten, dass dieser Befehl endet, ehe die Umblendung
       beendet ist. Deshalb kann ein Umblend-Vorgang nicht abgebrochen
       werden. Es kann jedoch ein neuer Befehl CD_ATTENUATE gesandt werden,
       der jegliche zu Zeit ablaufende Umblend-Anweisung aufhebt. Ein Wert
       von Null für io_Length bedeutet sofortige Lautstärke-Umschaltung.

       Wenn ein Befehl zur allmählichen Umblendung vor dem Abspiel-Befehl
       gesendet wurde, beginnt der Blendvorgang, sobald der Abspiel-Befehl
       aktiv ist.

   BEISPIEL

   ANMERKUNGEN
       Dieser Befehl hat keine Auswirkung auf die Lautstärke des Amiga,
       nur auf CD-Audio.

       Wenn das Laufwerk nicht Lautstärkeänderung, sondern Dämpfung (mute)
       unterstützt, sollte ein Wert kleiner als $0800 als Dämpfung angesehen
       werden, gleich oder größer sollte volle Lautstärke sein. Wenn
       stufenweise (chunky) Veränderung unterstützt wird, sollte das Laufwerk
       so gut wie möglich arbeiten. Wenn das Laufwerk überhaupt keine
       Veränderung der Lautstärke unterstützt, sollte ein Fehler zurück
       gegeben werden. Selbst wenn nur "mute" unterstützt wird, sollte bei
       Anforderung einer allmählichen Änderung das Gerät einen Befehl zur
       Umblendung emulieren und die Änderung mit Rücksicht auf die $0800-
       Grenze ausführen.

   BUGS

   SIEHE AUCH
       CD_INFO


cd.device/CD_CHANGENUM                                 cd.device/CD_CHANGENUM

   NAME
       CD_CHANGENUM -- gibt den derzeitigen Wert des Disk-Wechsel-Zählers
                       zurück.

   FUNKTION
       Dieser Befehl gibt den derzeitigen Wert des Disk-Wechsel-Zählers
       zurück. Der Disk-Wechsel-Zähler erhöht seinen Wert jedesmal um 1,
       wenn eine Disk in das CD-Laufwerk eingelegt oder aus ihm entnommen
       wird.

   IO REQUEST EINGABE
       io_Device       wird voreingestellt durch den Aufruf von OpenDevice()
       io_Unit         wird voreingestellt durch den Aufruf von OpenDevice()
       io_Command      CD_CHANGENUM

   IO REQUEST RÜCKGABE
       io_Error -  0 bei Erfolg oder ein Fehlercode wie festgelegt in
                   
                  
       io_Actual - wenn io_Error 0 ist, enthält dieses den derzeitigen Wert
                   des Disk-Wechsel-Zählers.


cd.device/CD_CHANGESTATE                             cd.device/CD_CHANGESTATE

   NAME
       CD_CHANGESTATE -- prüfen, ob zur Zeit eine "gültige (valid)" Disk
                         im Laufwerk ist. 

   FUNKTION
       Dieser Befehl prüft, ob eine "gültige (valid)" Disk in einem
       Laufwerk ist.

   IO REQUEST EINGABE
       io_Device       wird voreingestellt durch den Aufruf von OpenDevice()
       io_Unit         wird voreingestellt durch den Aufruf von OpenDevice()
       io_Command      CD_CHANGESTATE

   IO REQUEST RÜCKGABE
       io_Error - 0 bei Erfolg oder ein Fehlercode wie festgelegt in
                  
       io_Actual - 0 bedeutet, es ist eine Disk vorhanden, während alles andere
                   anzeigt, das keine Disk vorhanden ist.

   ANMERKUNGEN
       Eine "gültige (valid)" Disk ist eine mit einem lesbaren
       Inhaltsverzeichnis.


cd.device/CD_CONFIG                                       cd.device/CD_CONFIG

   NAME
       CD_CONFIG -- Laufwerks-Voreinstellungen

   IO REQUEST
       io_Device       wird voreingestellt durch den Aufruf von OpenDevice()
       io_Unit         wird voreingestellt durch den Aufruf von OpenDevice()
       io_Command      CD_CONFIG
       io_Data         Zeiger (pointer) auf den ersten Eintrag in der TagList
       io_Length       0

   RÜCKGABE
       io_Error        0 bei Erfolg oder ein Fehlercode wie festgelegt in
                       

   FUNKTION
       Dieser Befehl stellt einen oder mehrere Konfigurationspunkte ein.
       Die Konfigurationspunkte sind:

       TAGCD_PLAYSPEED                 Vorgabewert: 75
       TAGCD_READSPEED                 Vorgabewert: 75 (ist nicht ganz sicher)
       TAGCD_READXLSPEED               Vorgabewert: 75
       TAGCD_SECTORSIZE                Vorgabewert: 2048
       TAGCD_XLECC                     Vorgabewert: 1 (an)
       TAGCD_EJECTRESET                Vorgabewert: 0 (aus) oder 1 (an) möglich 

       Die Geschwindigkeitseinstellungen (...SPEED) werden in der Zahl der
       Frames (Sektoren) je Sekunde angegeben. Alle CD-ROM-Laufwerke schaffen
       die Geschwindigkeit von 75 Frames/Sekunde. Manche Laufwerke können
       150 Frames/Sekunde, einige sogar noch mehr. Zur Ermittlung der höchsten
       Framezahl/Sekunde ist der Befehl CD_INFO zu verwenden. Gültige Werte
       für Commodore CD-ROM-Laufwerke ohne Caddy sind 75 und 150 (normale und
       doppelte Geschwindigkeit). Alle anderen Werte sind ungültig. Es sollte
       immer sicher gestellt werden, dass das Laufwerk die geforderte
       Konfiguration beherrscht, entweder durch die Verwendung des Befehls
       CD_INFO und/oder durch Prüfung auf eine Fehlerbedingung nach der
       Übergabe der Anforderung.

       Es gibt drei verschiedene Typen von CD-ROM-Sektoren. Mode 1 Sektoren
       (2048 Bytes), Mode 2 Form 1 Sektoren (2048 Bytes) und Mode 2 Form 2
       Sektoren (2328 Bytes). Normalerweise sind Disks im Format Mode 1
       codiert. Mode 2 Form 1 ist grundsätzlich das Gleiche wie Mode 1;
       jedoch enthält das Sektor-Format Mode 2 Form 2 keine Angaben für
       CD-ROM-Fehlerkorrektur. Um Informationen zu lesen, die in diesem
       Format codiert sind, muss die Sektorgröße des Laufwerks auf 2328
       Bytes konfiguriert sein.

       Mit diesem Befehl kann die Fehlerkorrektur (Error correction (ECC))
       des Befehls READXL an- oder ausgeschaltet werden. Fehlerkorrektur
       kann sowohl in der Hardware als auch in der Software realisiert
       sein (abhängig vom CD-ROM-Laufwerk). Wenn ECC in der Software
       vorgenommen wird, kann die CPU-Belastung recht hoch werden. Auf CDs
       kommen Fehler recht selten vor, wenn sie nicht zahlreiche Kratzer
       aufweisen, und wenn das der Fall ist, geht das auf Kosten der
       CPU-Bandbreite. Wenn ECC in der Hardware eingerichtet ist, geht
       keine CPU-Zeit verloren -- in diesem Fall ist ECC immer an, ganz egal
       wie das Laufwerk konfiguriert ist, weil sie nichts kostet. Der Befehl
       READXL wird hauptsächlich zur Darstellung Film-ähnlicher Daten
       verwendet. Dabei ist Geschwindigkeit wichtig, die Datensicherheit
       ist es nicht; wenn jedoch die CPU während einer XL-animation nicht
       eingesetzt wird, besteht keine Notwendigkeit ECC auszuschalten (da
       CPU-Zeit hierbei ja verwendet werden kann). Der einzige Fall, in dem
       ECC abgeschaltet sein sollte, ist, wenn im Hintergrund des Befehls
       READXL intensive Berechnungen durchgeführt werden UND das Programm
       zeitkritisch ist. Wenn das erledigt ist, darf nicht vergessen werden,
       diesen Befehl wieder zurück zu setzen.

       Um den Computer in den Ausgangszustand zurück zu setzen (reset), wenn
       eine CD ausgeworfen wird (für eine Anwendung, die nicht von selbst
       endet), ist die Marke (tag) TAGCD_EJECTRESET zu verwenden. Nach
       Möglichkeit sollten Programme sauber zur Workbench zurückkehren
       können. Fehlerbedingungen sollten bei Disk-Ein/Ausgabe überwacht
       werden.

   BEISPIEL

       /* Konfiguration ReadXL für double-speed lesen und abschalten von */
       /* ECC, wenn der Befehl ReadXL verwendet wird.                    */
       
       struct TagItem ConfigList[] = {

           { TAGCD_READXLSPEED, 150 },
           { TAGCD_XLECC,       0   },
           { TAG_END,           0   }
           };

           ior->io_Command = CD_CONFIG;
           ior->io_Data    = (APTR)&ConfigList;
           ior->io_Length  = 0;
           DoIO(ior);

           if (ior->io_Error) printf("Could not be configured\n");

   ANMERKUNGEN
       Die Einstellung der Konfiguration verändert nicht das Verhalten
       eines Befehl zum Lesen oder zum Abspielen, wenn er schon läuft.

       Dieser Befehl kann sehr gefährlich sein. Wenn z.B. TAGCD_SECTORSIZE
       auf 2328 gesetzt ist, können keine Daten, die in Sektoren mit 2048
       Bytes codiert sind, mehr gelesen weden (z.B. kann das Dateisystem
       die Disk nicht mehr lesen). Wenn also Daten, die mit diesem Sektor-
       Format abgelegt sind, gelesen wurden, sollte sofort zum originalen
       vorgegebenen (default) Wert zurückgekehrt werden (selbst bei einem
       Lesefehler -- die Disk hätte ja mitten im Lesevorgang entfernt worden
       sein können). Dieser Befehl sollte von KEINEM ANDEREN als dem
       ausschließlichen Eigentümer der Disk verwendet werden.

   BUGS
       TAG_IGNORE, TAG_MORE und TAG_SKIP arbeiten nicht. Bitte nicht
       verwenden.

       Wenn die Geschwindigkeit von einfach (single speed) auf doppelt
       (double speed) oder von doppelt auf einfach umgeschaltet wird, wenn
       das Laufwerk in einfacher Geschwindigkeit Daten beschafft, die in
       doppelter Geschwindigkeit verwendet werden sollen, schaltet das
       Laufwerk nicht auf doppelte Geschwindigkeit um (und auch andersherum
       nicht). Um dieses Problem zu umgehen, ist auf die gewünschte
       Geschwindigkeit zu schalten, es ist zu beginnen mindestens 4k an
       Daten einzulesen (einfach zwei Bytes lesen), dann ist mit dem Lesen
       wieder am Anfang zu beginnen. Dadurch wird der Lesespeicher gelöscht
       und ein neuer Lesebefehl mit der gewünschten Geschwindigkeit
       ausgegeben. (Berichtigt in 40.24).

   SIEHE AUCH
       CD_INFO, 


cd.device/CD_EJECT                                         cd.device/CD_EJECT

   NAME
       CD_EJECT -- Öffnen oder Schließen des CD-Laufwerks

   IO REQUEST
       io_Command      CD_EJECT
       io_Data         NULL
       io_Length       geforderter Zustand des Laufwerks (0 == geschlossen,
                       1 == offen)
       io_Offset       0

   RESULTS
       io_Error        0 bei Erfolg oder ein Fehlercode wie festgelegt in
                       
       io_Actual       vorheriger Zustand des Laufwerks

   FUNKTION
       Dieser Befehl öffnet das Laufwerk oder schließt es (Aus- oder
       Einfahren der Schublade). Der gewünschte Zustand wird in io_Length
       abgelegt. Der vorherige Zustand des Laufwerks wird in io_Actual
       zurückgegeben.

   BEISPIEL

   ANMERKUNGEN

   BUGS

   SIEHE AUCH


cd.device/CD_GETGEOMETRY                             cd.device/CD_GETGEOMETRY

   NAME
       CD_GETGEOMETRY -- gibt die Laufwerksgeometrie zurück.

   FUNKTION
       Dieser Befehl gibt einen vollständigen Satz an Informationen
       über den Aufbau des Laufwerks zurück. Die Information wird in der
       Struktur DriveGeometry zurückgegeben, die mit dem Zeiger io_Data
       bestimmt ist.

   IO REQUEST EINGABE
       io_Device       voreingestellt durch den Aufruf OpenDevice()
       io_Unit         voreingestellt durch den Aufruf OpenDevice()
       io_Command      CD_GETGEOMETRY
       io_Data         Zeiger auf eine Struktur DriveGeometry
       io_Length       Größe von (struct DriveGeometry)

   IO REQUEST RESULT
       io_Error  - 0 bei Erfolg oder ein Fehlercode wie festgelegt in
                   
       io_Actual - Länge der übertragenen Daten.

   SIEHE AUCH
       CD_GETNUMTRACKS, 


cd.device/CD_INFO                                           cd.device/CD_INFO

   NAME
       CD_INFO -- Gibt Informationen/Status des Gerätes zurück

   IO REQUEST
       io_Device       voreingestellt durch den Aufruf OpenDevice()
       io_Unit         voreingestellt durch den Aufruf OpenDevice()
       io_Command      CD_INFO
       io_Data         Zeiger auf Struktur CDInfo
       io_Length       Größe von (struct CDInfo)

   RESULTS
       io_Error        0 bei Erfolg oder ein Fehlercode wie festgelegt in
                       
       io_Actual       Länge der übertragenen Daten

   FUNKTION

       Dieser Befehl gibt die aktuelle Konfiguration und den Status des
       Geräte-Treibers zurück.

   BEISPIEL

       struct CDInfo Info;

       ior->io_Command = CD_INFO;               /* Besorge Laufwerk-Info.  */
       ior->io_Data    = (APTR)Info;            /* Hierhin wollen wir sie  */
       ior->io_Length  = sizeof(struct CDInfo); /* Gibt Struktur-Größe aus */
       DoIO(ior);

       if (!ior->io_Error) {                    /* Command succeeded       */

           if (Info.Status & CDSTSF_PLAYING) printf("Audio is playing\n");
           else                              printf("Audio not playing\n");
           }

   ANMERKUNGEN

   BUGS

   SIEHE AUCH
       


cd.device/CD_MOTOR                                         cd.device/CD_MOTOR

   NAME
       CD_MOTOR -- Steuerung des an/aus-Zustands eines Laufwerkmotors.

   FUNKTION
       Mit diesem Befehl wird der Drehteller-Motor gesteuert. Der Motor kann
       an- oder ausgeschaltet sein.

       Wenn der Motor gerade angeschaltet wurde, wartet der Gerätetreiber
       (device) ausreichend lange, um das Laufwerk auf Lesegeschwindigkeit
       kommen zu lassen. Es ist nicht nötig, den Motor von Hand an oder ab
       zu schalten, der Treiber tut dies automatisch, wenn er eine Anforderung
       bei stehendem Motor erhält.

   IO REQUEST EINGABE
       io_Device       voreingestellt durch den Aufruf OpenDevice()
       io_Unit         voreingestellt durch den Aufruf OpenDevice()
       io_Command      CD_MOTOR
       io_Length       der gewünschte Zustand des Motors, 0 um den Motor
                       ab zu schalten und 1, um ihn ein zu schalten.

   IO REQUEST RESULT
       io_Error - 0 bei Erfolg oder ein Fehlercode wie festgelegt in
                  
       io_Actual - wenn io_Error 0 ist, enthält dieses den vorherigen Zustand
                   des Laufwerk-Motors.


cd.device/CD_PAUSE                                         cd.device/CD_PAUSE

   NAME
       CD_PAUSE -- Pausieren oder Weitermachen für den Abspiel-(play)-Befehl.

   IO REQUEST
       io_Device       voreingestellt durch den Aufruf OpenDevice()
       io_Unit         voreingestellt durch den Aufruf OpenDevice()
       io_Command      CD_PAUSE
       io_Data         NULL
       io_Length       Pausenmodus : 1 = Pause beim Abspielen; 0 = keine
                       Pause beim Abspielen;
       io_Offset       0

   RÜCKGABEN
       io_Actual - wenn io_Error 0 ist, ist hier der vorhergegangene Pausen-
                   Zustand enthalten.

   FUNKTION
       Dieser Befehl setzt die CD in den Pausenmodus oder nimmt sie wieder
       heraus. Der gewünschte Pausenzustand wird in io_Length übergeben.
       Dieser Befehl beeinflusst nur die Abspiel-Befehle. Wenn Audio
       abgespielt wird und der Pausenmodus eingeschaltet wird, unterbricht
       dieser Befehl sofort die Ausgabe, bis der Pausen-Zustand wieder
       aufgehoben wird. Wenn Audio nicht abgespielt wird und der Pausenmodus
       wird eingeschaltet, hat der Befehl keine unmittelbare Auswirkung.
       Wir dann ein Abspiel-Befehl übermittelt, sucht der Laser die richtige
       Position auf und pausiert dort. Der Abspielbefehl wartet, bis der
       Pausen-Zustand beendet ist (oder bis das Abspielen abgebrochen wird).

   BEISPIEL

   ANMERKUNGEN

   BUGS

   SIEHE AUCH


cd.device/CD_PLAYLSN                                     cd.device/CD_PLAYLSN

   NAME
        CD_PLAYLSN -- Spielt einen ausgewählten Abschnitt des CD-Audio
                      (LSN-Form).

   IO REQUEST
       io_Device       voreingestellt durch den Aufruf OpenDevice()
       io_Unit         voreingestellt durch den Aufruf OpenDevice()
       io_Command      CD_PLAYLSN
       io_Data         NULL
       io_Length       Länge des Abspielbereichs
       io_Offset       Anfangsposition

   RÜCKGABEN
       io_Error        0 bei Erfolg oder ein Fehlercode wie festgelegt in
                       

   FUNKTION
       Mit diesem Befehl beginnt das Laufwerk CD-Audio ab der vorgegebenen
       Position abzuspielen, bis die eingestellte Länge erreicht ist.

       io_Offset gibt die Anfangsposition an. io_Length enthält den Zeitraum
       des Abspielen. Alle Daten sind angegeben im LSN-Format.

       Eine Rückgabe von DoIO() erfolgt nicht, ehe die angeforderte Zahl an
       Sektoren abgespielt ist. Eine Rückgabe von SendIO() findet statt,
       sobald das Abspielen (PLAY) begonnen hat. Zu diesem Zeitpunkt können
       weitere Befehle (wie CD_PAUSE) gesendet werden. Um das Abspielen vor
       dem vorgegebenen Ende abzubrechen, ist AbortIO() zu verwenden.

   BEISPIEL
       /* Spiele zwei Minuten und zehn Sekunden Audio mit Beginn bei */
       /* 20 Minuten, 58 Sekunden und 10 Frames.                     */

       ior->io_Command = CD_PLAYLSN;   /* Spiele CD-Audio         */
       ior->io_Offset  = 94360;        /* 20*(60*75) + 58*75 + 10 */
       ior->io_Length  = 9750;         /* 02*(60*75) + 10*75 + 00 */
       DoIO (ior);

   ANMERKUNGEN

   BUGS

   SIEHE AUCH
       CD_PLAYTRACK, CD_PAUSE, CD_SEARCH, CD_ATTENUATE


cd.device/CD_PLAYMSF                                     cd.device/CD_PLAYMSF

   NAME
        CD_PLAYMSF -- Spielt einen ausgewählten Abschnitt des CD-Audio
                      (MSF-Format).

   IO REQUEST
       io_Device       voreingestellt durch den Aufruf OpenDevice()
       io_Unit         voreingestellt durch den Aufruf OpenDevice()
       io_Command      CD_PLAYMSF
       io_Data         NULL
       io_Length       Länge des Abspielbereichs
       io_Offset       Anfangsposition

   RÜCKGABEN
       io_Error        0 bei Erfolg oder ein Fehlercode wie festgelegt in
                       

   FUNKTION
       Mit diesem Befehl beginnt das Laufwerk CD-Audio ab der vorgegebenen
       Position abzuspielen, bis die eingestellte Länge erreicht ist.

       io_Offset gibt die Anfangsposition an. io_Length enthält den Zeitraum
       des Abspielen. Alle Daten sind angegeben im MSF-Format.

       Eine Rückgabe von DoIO() erfolgt nicht, ehe die angeforderte Zahl an
       Sektoren abgespielt ist. Eine Rückgabe von SendIO() findet statt,
       sobald das Abspielen (PLAY) begonnen hat. Zu diesem Zeitpunkt können
       weitere Befehle (wie CD_PAUSE) gesendet werden. Um das Abspielen vor
       dem vorgegebenen Ende abzubrechen, ist AbortIO() zu verwenden.

   BEISPIEL
       /* Spiele zwei Minuten und zehn Sekunden Audio mit Beginn bei */
       /* 20 Minuten, 58 Sekunden und 10 Frames.                     */

       ior->io_Command = CD_PLAYMSF;   /* Spiele CD-Audio        */
       ior->io_Offset  = 0x00143A0A;   /* $14=20, $3A=58, $0A=10 */
       ior->io_Length  = 0x00020A00;   /* $02=02, $0A=10, $00=00 */
       DoIO (ior);

   ANMERKUNGEN

   BUGS

   SIEHE AUCH
       CD_PLAYTRACK, CD_PAUSE, CD_SEARCH, CD_ATTENUATE


cd.device/CD_PLAYTRACK                                 cd.device/CD_PLAYTRACK

   NAME
       CD_PLAYTRACK -- Spielt eine oder mehrere Spuren (tracks) CD-Audio.

   IO REQUEST
       io_Device       voreingestellt durch den Aufruf OpenDevice()
       io_Unit         voreingestellt durch den Aufruf OpenDevice()
       io_Command      CD_PLAYTRACK
       io_Data         NULL
       io_Length       Zahl der abzuspielenden Spuren (tracks)
       io_Offset       Spielbeginn am Anfang dieser Spur

   RÜCKGABEN
       io_Error        0 bei Erfolg oder ein Fehlercode wie festgelegt in
                       
   FUNKTION
       Durch diesen Befehl spielt das Laufwerk die angegebene Zahl an
       Audiospuren ab. Die Befehlsrückgabe erfolgt nach Abschluss der
       Audio-Ausgabe.

       io_Offset gibt die Spur-Nummer an (beginnend bei 1).

       io_Length gibt die Zahl der abzuspielenden Spuren an (0 ist eine
       ungültige Eingabe).

   BEISPIEL

       ior->io_Command = CD_PLAYTRACK;    /* Audiospuren abspielen */
       ior->io_Offset  = STARTTRACK;      /* Bginn bei dieser Spur */
       ior->io_Length  = 3;               /* Spiele drei Spuren    */
       DoIO(ior);

   ANMERKUNGEN

       PLAY-Befehle sind assynchron zu vielen anderen CD-Befehlen.
       Mit einer getrennten I/O-Anforderung (I/O request) können andere
       Befehle zum Gerätetreiber (device) gesandt werdeen, die das Verhalten
       der PLAY-Befehle verändern.

   BUGS

   SIEHE AUCH
       CD_PLAYMSF, CD_PLAYLSN, CD_PAUSE, CD_SEARCH, CD_ATTENUATE


cd.device/CD_PROTSTATUS                               cd.device/CD_PROTSTATUS

   NAME
       CD_PROTSTATUS -- Rückgabe, ob die aktuelle Disk schreibgeschützt ist.

   FUNKTION
       Mit diesem Befehl kann man feststellen, ob die aktuelle Disk
       schreibgeschützt ist. Zur Zeit meldet diese Funktion immer den
       Zustand "Schreibgeschützt". Wenn irgend einmal beschreibbare CDs
       zur Verfügung stehen, kann das geändert werden.

   IO REQUEST EINGABE
       io_Device       voreingestellt durch den Aufruf OpenDevice()
       io_Unit         voreingestellt durch den Aufruf OpenDevice()
       io_Command      CD_PROTSTATUS

   IO REQUEST RESULT
       io_Error - 0 bei Erfolg oder ein Fehlercode wie festgelegt in
                  
       io_Actual - 0 bedeutet, die Disk ist NICHT schreibgeschützt, während
                   jeder andere Wert den Schreibschutz anzeigt.


cd.device/CD_QCODELSN                                   cd.device/CD_QCODELSN

   NAME
       CD_QCODELSN -- Melde aktuelle Diskposition.

   IO REQUEST
       io_Device       voreingestellt durch den Aufruf OpenDevice()
       io_Unit         voreingestellt durch den Aufruf OpenDevice()
       io_Command      CD_QCODELSN
       io_Data         Zeiger auf QCode Strukture
       io_Length       0 - MUSS Null sein (wegen zukünftiger Kompatabilität)

   RÜCKGABEN
       io_Error        0 bei Erfolg oder ein Fehlercode wie festgelegt in
                       

   FUNKTION
       Dieser Befehl meldet die derzeit gültige Zeit-Information im
       Unterbereich des Q-Kanals (subcode Q channel time information). Dieser
       Befehl gibt nur Daten zurück, wenn CD-Audio spielt (oder pausiert).
       Zu jeder anderen Zeit wird ein Fehler zurückgegeben. Das Q-Code-Paket
       besteht aus:

       struct QCode {

           UBYTE        CtlAdr;        /* Datentype / QCode-Type             */
           UBYTE        Track;         /* Spurnummer                         */
           UBYTE        Index;         /* Spur-Subindex-Nummer               */
           UBYTE        Zero;          /* Das "Zero"-Byte des Q-Code-Packets */
           union LSNMSF TrackPosition; /* Position vom Anfang der Spur       */
           union LSNMSF DiskPosition;  /* Position vom Anfang der Disk       */
           };

   BEISPIEL

       struct QCode qcode;

       ior->io_Command = CD_QCODELSN;  /* TOC-Informationen besorgen */
       ior->io_Length  = 0;            /* MUSS Null sein             */
       ior->io_Data    = (APTR)qcode;  /* Hier wollen wir es haben   */
       DoIO (ior);

       if (!ior->io_Error) {           /* Befehl erfolgreich         */

           printf("Current position is: %ld\n", qcode.DiskPosition.LSN);
           }

   ANMERKUNGEN
       Dieser Befehl muss nicht unbedingt sofort eine Rückgabe machen. Es
       kann einige Frames dauern, bis ein gültiges Q-Code-Paket zurück
       gegeben werden kann. SendIO() und CheckIO() sind zu verwenden,
       wenn die Antwortzeit kritisch ist, jedoch nicht die Information.

   BUGS

   SIEHE AUCH
       CD_PLAYMSF, CD_PLAYLSN, CD_PLAYTRACK, 


cd.device/CD_QCODEMSF                                   cd.device/CD_QCODEMSF

   NAME
       CD_QCODEMSF -- Melde aktuelle Diskposition.

   IO REQUEST
       io_Device       voreingestellt durch den Aufruf OpenDevice()
       io_Unit         voreingestellt durch den Aufruf OpenDevice()
       io_Command      CD_QCODEMSF
       io_Data         Zeiger auf QCode Strukture
       io_Length       0 - MUSS Null sein (wegen zukünftiger Kompatabilität)

   RÜCKGABEN
       io_Error        0 bei Erfolg oder ein Fehlercode wie festgelegt in
                       

   FUNKTION
       Dieser Befehl meldet die derzeit gültige Zeit-Information im
       Unterbereich des Q-Kanals (subcode Q channel time information).
       Dieser Befehl gibt nur Daten zurück, wenn CD-Audio spielt (oder
       pausiert). Zu jeder anderen Zeit wird ein Fehler zurückgegeben.
       Das Q-Code-Paket besteht aus:

       struct QCode {

           UBYTE        CtlAdr;        /* Datentype / QCode-Type             */
           UBYTE        Track;         /* Spurnummer                         */
           UBYTE        Index;         /* Spur-Subindex-Nummer               */
           UBYTE        Zero;          /* Das "Zero"-Byte des Q-Code-Packets */
           union LSNMSF TrackPosition; /* Position vom Anfang der Spur       */
           union LSNMSF DiskPosition;  /* Position vom Anfang der Disk       */
           };

   BEISPIEL

       struct QCode qcode;

       ior->io_Command = CD_QCODEMSF;  /* TOC-Informationen besorgen */
       ior->io_Length  = 0;            /* MUSS Null sein             */
       ior->io_Data    = (APTR)qcode;  /* Hier wollen wir es haben   */
       DoIO (ior);

       if (!ior->io_Error) {           /* Befehl erfolgreich         */

           printf("Current position is: %02d:%02d:%02d\n",
               qcode.DiskPosition.MSF.Minute,
               qcode.DiskPosition.MSF.Second,
               qcode.DiskPosition.MSF.Frame);
           }

   ANMERKUNGEN
       Dieser Befehl muss nicht unbedingt sofort eine Rückgabe machen. Es
       kann einige Frames dauern, bis ein gültiges Q-Code-Paket zurück
       gegeben werden kann. SendIO() und CheckIO() sind zu verwenden, wenn
       die Antwortzeit kritisch ist, jedoch nicht die Information.

   BUGS

   SIEHE AUCH
       CD_PLAYMSF, CD_PLAYLSN, CD_PLAYTRACK, 


cd.device/CD_READ                                           cd.device/CD_READ

   NAME
       CD_READ -- Daten von der Disk lesen.

   FUNKTION
       Liest Daten von der Disk in den Speicher. Auf Daten kann an WORD-
       Grenzen zugegriffen werden (es besteht keine Beschränkung auf Sektor-
       Grenzen wie bei normalen Disk-Gerätetreibern (devices)). Die Länge
       der Daten kann auch in WORD-Größe angegeben werden.

   IO REQUEST EINGABE
       io_Device       voreingestellt durch den Aufruf OpenDevice()
       io_Unit         voreingestellt durch den Aufruf OpenDevice()
       io_Command      CD_READ
       io_Data         Zeiger auf den Puffer, wo die Daten hin kommen sollen.
       io_Length       Zahl der zu lesenden Bytes, es muss ein Vielfaches
                       von WORD sein.
       io_Offset       Abstand vom Anfang der Disk in Bytes zur Angabe,
                       ab wo die Daten zu lesen sind, es muss ein Vielfaches
                       von WORD sein. 

   IO REQUEST RESULT
       io_Error  - 0 bei Erfolg oder ein Fehlercode wie festgelegt in
                   
       io_Actual - wenn io_Error 0 ist, Zahl der tatsächlich übertragenen
                   Bytes

   ANMERKUNGEN
       Wenn während dem Versuch eines CD_READ ein Fehler auftritt,
       versucht die Software den Zugriff bis zu 10 Mal erneut, bis sie
       die Anforderung abbricht. Wenn es sich um ein Double-Speed-Laufwerk
       handelt, bei dem der Fehler auftritt, wird ein weiterer Versuch in
       doppelter Geschwindigkeit ausgeführt und wenn der misslingt, laufen
       die nächsten neun Versuche in einfacher Geschwindigkeit.

   SIEHE AUCH
       CD_READXL


cd.device/CD_READXL                                       cd.device/CD_READXL

   NAME
       CD_READXL -- Von der CD-ROM in den Speicher via Transferliste lesen.

   IO REQUEST
       io_Device       voreingestellt durch den Aufruf OpenDevice()
       io_Unit         voreingestellt durch den Aufruf OpenDevice()
       io_Command      CD_READXL
       io_Data         Zeiger auf die Transferliste (d.h. struct List *).
       io_Length       maximale Übertragungslänge (Vielfaches von WORD) oder 0.
       io_Offset       Byte-Abstand vom Beginn der Disk als Angabe, wo mit dem
                       Lesen der Daten begonnen werden soll, muss ein
                       Vielfaches von WORD sein.

   RÜCKGABEN
       io_Error        0 bei Erfolg oder ein Fehlercode wie festgelegt in
                       
       io_Actual       falls io_Error 0 ist, Zahl der tatsächlich übertragenen
                       der Bytes

   FUNKTION
       Dieser Befehl beginnt an einem angegebenen Ort auf der Disk mit
       dem Lesen der Daten und legt sie im Speicher an den Bezugspunkten
       (nodes) ab, die in einer Transferliste angegeben sind. Der Zeiger
       auf die Liste mit den Bezugspunkten ist in io_Data abgelegt. Wenn
       eine nicht-zirkulare Transferlist vorhanden ist, muss io_Length
       einfach auf 0 gesetzt werden (0 ist ein spezieller Wert und bedeutet,
       dass io_Length zu ignorieren ist) -- die Übertragung endet, wenn
       die Transferliste abgearbeitet ist. Wenn eine zirkulare Transferlist
       vorhanden ist, hört diese Liste nie auf. In diesem Falle endet die
       Übertragung, wenn io_Length Bytes übertragen sind.

       Die Felder in der CDXL node structure sind:

       struct  CDXL {

           struct MinNode  Node;         /* doppelte Verbindung              */
           char           *Buffer;       /* Bestimmungsort der Daten         */
           LONG            Length;       /* muss geradzahlige Anzahl von     */
                                         /* Bytes sein                       */
           LONG            Actual;       /* übertragene Bytes                */
           APTR            IntData;      /* Datenseg. für Interrupt Server   */
           VOID            (*IntCode)(); /* Code-Eintrag f. Interrupt Server */
           };

       Die Philosophie hier ist, dass man einen Puffer einrichtet, der
       gefüllt werden soll, CDXL-Bezugspunkte (nodes) erzeugt, die den Ort
       und die Größe dieses Puffers beschreiben, alle diese Bezugspunkte in
       der gewünschten Reihenfolge verbindet (oder sogar eine zirkulare
       Liste für Animationen erstellt) und den Befehl ausführt. Die Daten
       fließem in den vorgesehenen Puffer bis die Liste abgearbeitet ist,
       bis ein Eintrag mit der Länge Null erkannt wird, bis io_Length Bytes
       übertragen wurden (wenn io_Length ungleich Null ist) oder bis der
       Befehl mit AbortIO() abgebrochen wurde.

       Wenn in das Feld (*IntCode)() ein Zeiger auf eine Interrupt-Routine
       gesetzt wird, wird diese Routine aufgerufen, wenn die Übertragung
       für diesen Bezugspunkt erledigt ist. Der Code wird aufgerufen, ehe
       der Treiber zum nächsten Punkt weitergeht. Der Interrupt sollte nach
       den gleichen Regeln wie Standard-Interrupts aufgebaut sein (siehe
       AddIntServer der Exec Autodocs). Im Register A2 steht ein Zeiger auf
       den Bezugspunkt, der gerade erledigt wurde. Die Liste kann mit dem
       Interrupt manipuliert werden. Der Code muss kurz sein (es handelt
       sich um einen Interrupt). Bei der Rückkehr aus diesem Interrupt ist
       D0 frei zu geben und eine RTS-Anweisung sollte für den Rücksprung
       verwendet werden.

       Server werden mit folgenden Register-Konventionen aufgerufen:
       
           D0 - scratch
           D1 - scratch

           A0 - scratch
           A1 - server is_Data pointer (scratch)
           A2 - pointer to CDXL node just completed

           A5 - jump vector register (scratch)

           Alle anderen Register müssen erhalten bleiben
           
   BEISPIEL

   ANMERKUNGEN
       Es ist sicher zu stellen, dass kleine Puffer nicht über Gebühr
       benutzt werden. Jedesmal wenn ein Bezugspunkt (node) erledigt ist,
       wird ein Interrupt erzeugt. Wenn der Computer anfängt träge zu
       arbeiten oder wenn der Befehl CD_READXL abbricht, werden sicher
       zuviele Interrupts erzeugt. Es nicht sehr wirkungsvoll, wenn in
       einer vertikalen Austastlücke mehr als nur ein paar dieser
       Interrupts erzeugt werden.

       Anders als beim Befehl READ wiederholt der Befehl READXL nicht den
       Leseversuch des Sektors, wenn ein Fehler auftritt. Da der Befehl
       READXL hauptsächlich für Animationen gedacht ist, wird der Fluss der
       Daten als wichtiger angesehen als die Daten selbst. Eine Fehlermeldung
       wird in io_Error zurückgegeben, wenn ein Datenfehler auftritt. Auf
       keinen Fall wird der Befehl auf eine geringere Geschwindigkeit zurück
       fallen, wenn ein Fehler auftritt.

   BUGS

   SIEHE AUCH
       CMD_READ, CD_SEEK, Autodocs - AddIntServer


cd.device/CD_REMCHANGEINT                           cd.device/CD_REMCHANGEINT

   NAME
       CD_REMCHANGEINT -- Entfernen eines Software-Interrupt-Handlers
                          bei Diskwechsel.

   FUNKTION
       Dieser Befehl entfernt einen Software-Interrupt für Disk-Wechsel, der
       durch eine vorherige Verwendung von CD_ADDCHANGEINT hinzu gefügt wurde.

   IO REQUEST EINGABE
       Die gleiche IO-Anforderung, die für CD_ADDCHANGEINT benutzt worden war.

       io_Device       voreingestellt durch den Aufruf OpenDevice()
       io_Unit         voreingestellt durch den Aufruf OpenDevice()
       io_Command      CD_REMCHANGEINT
       io_Length       Größe von (struct Interrupt)
       io_Data         Zeiger auf Interrupt-Strukture

   IO REQUEST RESULT
       io_Error - 0 bei Erfolg oder ein Fehlercode wie festgelegt in
                  

   SIEHE AUCH
       CD_ADDCHANGEINT, 


cd.device/CD_REMFRAMEINT                             cd.device/CD_REMFRAMEINT

   NAME
       CD_REMFRAMEINT -- Entfernen eines CD-Frame-Interrupt-Handlers.

   FUNKTION
       Dieser Befehl entfernt einen CD-Frame-Software-Interrupt, der durch
       eine vorherige Verwendung von CD_ADDFRAMEINT hinzu gefügt wurde.

   IO REQUEST
       Die gleiche IO-Anforderung, die für CD_ADDFRAMEINT benutzt worden war.

       io_Device       voreingestellt durch den Aufruf OpenDevice()
       io_Unit         voreingestellt durch den Aufruf OpenDevice()
       io_Command      CD_REMFRAMEINT
       io_Length       Größe von (struct Interrupt)
       io_Data         Zeiger auf Interrupt-Strukture

   RÜCKGABEN
       io_Error        0 bei Erfolg oder ein Fehlercode wie festgelegt in
                       
   BUGS

   SIEHE AUCH
       CD_ADDFRAMEINT, 


cd.device/CD_SEARCH                                       cd.device/CD_SEARCH

   NAME
       CD_SEARCH -- Konfigurieren des Modus, in welchem der Befehl PLAY
                    läuft.

   IO REQUEST
       io_Command      CD_SEARCH
       io_Data         NULL
       io_Length       Suchmodus
       io_Offset       0

   RÜCKGABEN
       io_Actual - wenn io_Error 0 ist, ist hier der vorhergehende Suchmodus
                   enthalten.

   FUNKTION
       Dieser Befehl lässt den Abspielbefehl schnell vorwärts, schnell
       rückwärts oder normal laufen. Diese Moden sind definiert als:

       CDMODE_NORMAL   0   Normales Spiele (aktuelle Einstellung der
                           Geschwindigkeit)
       CDMODE_FFWD     1   Spielen im Modus schnell forwärts  
       CDMODE_FREV     2   Spielen im Modus schnell rückwärts

       Der Suchmodus kann eingestellt werden, ehe der Abspielbefehl gesendet
       wurde oder während des Abspiels. Wenn CD_SEARCH vor einem Abspielbefehl
       gesendet wurde, wird der Modus eingestellt und der Befehl kommt sofort
       zurück. Wenn der Modus auf REV eingestellt ist, wenn der Spielbefehl
       gesendet wird, beginnt das Abspielen am eingestellten Endpunkt und
       arbeit rückwärts bis zum Anfangspunkt.

       Wird CD_SEARCH während dem Abspielen gesendet, wird das Abspiel
       automatisch auf den gewünschten Modus geschaltet und fortgesetzt,
       bis der originale Abspielbefehl erledigt ist. Wenn der REV-Modus
       eingestellt ist und der Beginn des Abspielens vor dem Umschalten
       auf Vorwärts-Spiel erreicht wird, endet der Spielbefehl ohne Fehler.

   BEISPIEL
       /* Suchen im schnellen Forwärts-Modus. */
       ior->io_Command = CD_SEARCH;
       ior->io_Data    = NULL;
       ior->io_Offset  = 0;
       ior->io_Length  = CDMODE_FFWD;
       DoIO(ior);

   ANMERKUNGEN

   BUGS

   SIEHE AUCH


cd.device/CD_SEEK                                           cd.device/CD_SEEK

   NAME
       CD_SEEK -- Laserpostion auf bestimmte Stelle einrichten.

   FUNKTION
       CD_SEEK bewegt den Laser ungefähr auf die Stelle, die angegeben wurde.
       Im Feld io_Offset sollte die Position stehen, zu welchem der Laser zu
       setzen ist.

   IO REQUEST EINGABE
       io_Device       voreingestellt durch den Aufruf OpenDevice()
       io_Unit         voreingestellt durch den Aufruf OpenDevice()
       io_Command      CD_SEEK
       io_Offset       Position, zu der der Kopf bewegt werden soll
                       (immer LSN-Format)

   IO REQUEST RESULT
       io_Error - 0 bei Erfolg oder ein Fehlercode wie festgelegt in
                  


cd.device/CD_TOCLSN                                       cd.device/CD_TOCLSN

   NAME
       CD_TOCLSN -- Gibt Informationen über das Inhaltsverzeichnis (TOC) der
                    CD zurück (LSN-Format).

   IO REQUEST
       io_Device       voreingestellt durch den Aufruf OpenDevice()
       io_Unit         voreingestellt durch den Aufruf OpenDevice()
       io_Command      CD_TOCLSN
       io_Data         Zeiger auf Array, wo das Verzeichnis gespeichert
                       werden soll
       io_Length       Zahl der CDTOC-Einträge, die geholt werden sollen
       io_Offset       Eintrag, bei dem begonnen werden soll
                       (Eintrag 0 bedeutet zusammengefasste Information)

   RÜCKGABEN
       io_Error        0 bei Erfolg oder ein Fehlercode wie festgelegt in
                       
       io_Actual       Tatsächliche Zahl der kopierten Einträge

   FUNKTION
       Dieser Befehl gibt das Inhaltsverzeichnis der Disk zurück, die sich
       im Laufwerk befindet. Das Inhaltsverzeichnis besteht aus bis zu 100
       Einträgen. Eintrag Null ist eine zusammengefasste Information, welche
       die Zahl der Spuren und Gesamtzahl der Minuten auf der Disk enthält.
       Einträge 1 bis N enthalten Informationen über jede einzelne Spur. Alle
       Informationen über Positionen sind im LSN-Format.

       Das Feld io_Data zeigt auf ein Array von CDTOC-Strukturen zur Aufnahme
       der TOC-Daten.

       Das Feld io_Length enthält die Zahl der Einträge, die abgeholt werden
       sollen. Das Array, auf das durch io_Data verwiesen wird, muss
       mindestens diese Zahl an Elementen aufnehmen können.

       Das Feld io_Offset gibt die Eintragsnummer an, bei der mit dem Kopieren
       der TOC-Daten nach *io_Data begonnen werden soll. 

       Eintrag Null (der summarische Eintrag) enthält folgendes:

       struct TOCSummary {

           UBYTE        FirstTrack;    /* Erste Spur auf Disk (immer 1)  */
           UBYTE        LastTrack;     /* Letzte Spur auf Disk           */
           union LSNMSF LeadOut;       /* Beginn des Ausleitungsspur     */
           };

       Spureinträge (Einträge 1 bis Zahl der Spuren) enthalten:

       struct TOCEntry {

           UBYTE        CtlAdr;        /* Q-Code-Info               */
           UBYTE        Track;         /* Spurnummer                */
           union LSNMSF Position;      /* Startposition dieser Spur */
           };

       CDTOC wird beschrieben als Verbindung dieser beiden Strukturen:

       union CDTOC {

           struct TOCSummary Summary;  /* Erster Eintrag ist summarische info */
           struct TOCEntry   Entry;    /* Einträge 1-N sind Spureinträge      */
           };


   BEISPIEL
       
       union CDTOC tocarray[100];

       ior->io_Command = CD_TOCLSN;        /* Besorge TOC-Information      */
       ior->io_Offset  = 0;                /* Beginn mit summarischer Info */
       ior->io_Length  = 100;              /* Max. 99 Spuren + summarisch  */
       ior->io_Data    = (APTR)tocarray;   /* Hier soll es hin             */
       DoIO (ior);

       if (!ior->io_Error) {               /* Befehl erfolgreich           */

           firsttrack   = tocarray[0].Summary.FirstTrack;
           lasttrack    = tocarray[0].Summary.LastTrack;
           totalsectors = tocarray[0].Summary.LeadOut.LSN -
                          tocarray[1].Entry.Position.LSN;
                           }

   ANMERKUNGEN

       In oben gezeigten Beispiel ist die Menge der Daten auf der Disk
       berechnet als gleich dem Ort der Ausleitungs-Spur minus dem Beginn
       der ersten Spur (was niemals Null ergibt). 
       [Anmerkung für die Redaktion: Im englischen Text ist nicht eindeutig,
       worauf sich "Null" bezieht: Die berechnete Differenz oder den Beginn
       der ersten Spur. Ggf. bitte ändern]

   BUGS

   SIEHE AUCH


cd.device/CD_TOCMSF                                       cd.device/CD_TOCMSF

   NAME
       CD_TOCMSF -- Gibt Informationen über das Inhaltsverzeichnis (TOC) der
                    CD zurück (MSF-Format).

   IO REQUEST
       io_Device       voreingestellt durch den Aufruf OpenDevice()
       io_Unit         voreingestellt durch den Aufruf OpenDevice()
       io_Command      CD_TOCMSF
       io_Data         Zeiger auf Array, wo das TOC abgelegt werden soll
       io_Length       Zahl der CDTOC-Einträge, die geholt werden sollen
       io_Offset       Eintrag, bei dem begonnen werden soll
                       (Eintrag 0 ist zusammengefasste Information)

   RÜCKGABEN
       io_Error        0 bei Erfolg oder ein Fehlercode wie festgelegt in
                       
       io_Actual       Tatsächliche Zahl der kopierten Einträge

   FUNKTION
       Dieser Befehl gibt das Inhaltsverzeichnis der Disk zurück, die sich
       im Laufwerk befindet. Das Inhaltsverzeichnis besteht aus bis zu 100
       Einträgen. Eintrag Null ist eine zusammengefasste Information, welche
       die Zahl der Spuren und Gesamtzahl der Minuten auf der Disk enthält.
       Einträge 1 bis N enthalten Informationen über jede einzelne Spur. Alle
       Informationen über Positionen sind im MSF-Format.

       Das Feld io_Data zeigt auf ein Array von CDTOC-Strukturen zur Aufnahme
       der TOC-Daten.

       Das Feld io_Length enthält die Zahl der Einträge, die abgeholt werden
       sollen. Das Array, auf das durch io_Data verwiesen wird, muss
       mindestens diese Zahl an Elementen aufnehmen können.

       Das Feld io_Offset gibt die Eintragsnummer an, bei der mit dem
       Kopieren der TOC-Daten nach *io_Data begonnen werden soll.

       Eintrag Null (der summarische Eintrag) enthält folgendes:

       struct TOCSummary {

           UBYTE        FirstTrack;    /* Erste Spur auf Disk (immer 1)   */
           UBYTE        LastTrack;     /* Letzte Spur auf Disk            */
           union LSNMSF LeadOut;       /* Beginn der Ausleitungsspur      */
           };

       Spureinträge (Einträge 1 bis Zahl der Spuren) enthalten:

       struct TOCEntry {

           UBYTE        CtlAdr;        /* Q-Code-Info                */
           UBYTE        Track;         /* Spurnummer                 */
           union LSNMSF Position;      /* Startposition dieser Spur  */
           };

       CDTOC wird beschrieben als Verbindung dieser beiden Strukturen:

       union CDTOC {

           struct TOCSummary Summary;  /* Erster Eintrag summarische Info */
           struct TOCEntry   Entry;    /* Einträge 1-N sind Spur-Einträge */
           };

   BEISPIEL
       
   ANMERKUNGEN

   BUGS

   SIEHE AUCH


cd.device/CloseDevice                                   cd.device/CloseDevice

   NAME
       CloseDevice - Zugriff auf CD beenden

   SYNOPSIS
       CloseDevice(IORequest);
                   A1

   FUNKTION
       Diese Funktion beendet den Zugriff auf die Einheit, die mit
       OpenDevice() geöffnet wurde.

   EINGABEN
       iORequest - Zeiger auf struct(IOStdReq)

   RÜCKGABEN

   ANMERKUNGEN

   SIEHE AUCH
       OpenDevice()


cd.device/OpenDevice                                     cd.device/OpenDevice

   NAME
       OpenDevice - Öffnet eine CD-Einheit für Zugriff

   SYNOPSIS
       error = OpenDevice("cd.device", UnitNumber, IORequest, flags);
       D0                 A0           D0          A1         D1

   FUNKTION
       Öffnet das cd.device und erzeugt einen IORequest, um auf die CD
       zugreifen zu können.

   EINGABEN
       UnitNumber - Gewöhnlich Null; Jedoch wird das beschrieben als:
                    Einer-Stelle     = Unit (SCSI unit Nummer)
                    Zehner-Stelle    = LUN (Disk im Disk-Wechsler)
                    Hunderter-Stelle = Karten-Nummer (SCSI Karte)
                    Tausender-Stelle = Reserviert (muss Null sein)
       IORequest  - Pointer to a struct(IOStdReq)
       flags      - Sollte Null sein.

   RÜCKGABEN
       error        0 = Erfolg, andernfalls ist das ein Fehler.

   ANMERKUNGEN

   SIEHE AUCH
       CloseDevice()

Nähste Seite
Vorige Seite