DCLEAR

Aus C64-Wiki
Zur Navigation springenZur Suche springen
DCLEAR
Syntax: DCLEAR [D<Laufwerk>] [,U<Geräteadresse>]
Parameter
<Laufwerk> : numerischer Ausdruck (0 oder 1)
<Geräteadresse>: numerischer Ausdruck im Wertebereich von 3 bis 31 bei BASIC 4 bzw. von 4 bis 30 bei BASIC 7.0
Einordnung
Typ: Anweisung
Kontext: Diskettenbefehl
Aufgabe: Diskettenlaufwerk initialisieren und dazugehörige Dateien und Datenkanäle schließen
Abkürzung: dclE
Token: $fe $15 (254 21)
Verwandte Befehle
COLLECT, DCLOSE

Anmerkung: Dieser Artikel beschreibt den BASIC-Befehl DCLEAR ab Commodore BASIC 4 (bestimmte Varianten) bzw. BASIC 7.0 oder höher.


Der Befehl DCLEAR initialisiert das angegebene Laufwerk auf Gerät mit Geräteadresse mit dem Floppy-Befehl Initialize, was das entsprechende Laufwerk sozusagen in den "Einschaltzustand" versetzt. Außerdem bewirkt der Befehl auf Seiten des KERNALs, dass alle offenen Transaktionen am IEC-Bus und offene Dateien, die zu diesem Gerät gehören, geschlossen werden. Ein eventuelles Lesen von oder Schreiben auf eine betroffene Datei mit entsprechender logische Dateinummer führt zu einer Fehlermeldung ?FILE NOT OPEN ERROR. Bedingt durch diese Reihenfolge, werden etwaige zu diesem Zeitpunkt gerade noch offene Dateien im Inhaltsverzeichnis des CBM-Dateisystems mit einem " * " versehen und als unsauber geschlossen gekennzeichnet. Eventuell sind dann Daten nicht mehr vollständig auf den Datenträger geschrieben worden. Zur Bereinigung kann der Datenträger dann mit COLLECT wieder in Ordnung gebracht werden.
Bei erfolgreicher Durchführung liefert der Fehlerkanal die Meldung "00,OK,00,00". Ist z.B. kein Datenträger eingelegt, wird das üblicherweise mit Fehlermeldung "21,READ ERROR,18,00" bedacht. Die sonst übliche Einschaltmeldung des CBM-DOS "73,CBM DOS...." nach einem Initialize wird dabei verworfen.

Zulässige Werte (stets als Ganzzahl aufgefasst) für Parameter

  • Geräteadresse (Gerät 8, falls nicht vorhanden) sind von 3 bis 31 bei BASIC 4 bzw. von 4 bis 30 bei BASIC 7.0,
  • Laufwerk sind 0 oder 1.

Wurde mit dem DCLEAR-Befehl ein Diskettenlaufwerk angesprochen, zu dem die Geräteadresse falsch eingestellt ist oder nicht existiert, erscheint seit BASIC 7.0 die Fehlermeldung ?DEVICE NOT PRESENT ERROR. Geräte, die kein Doppellaufwerk sind, kennen üblicherweise kein Laufwerk 1 und die Angabe dieser Laufwerksnummer wird im Fehlerkanal mit der Meldung "31,SYNTAX ERROR,00,00" quittiert.
Sind die Parameter außerhalb des zulässigen Wertebereichs, erscheint die Fehlermeldung ?ILLEGAL QUANTITY ERROR, mit Ausnahme bei der Geräteadresse, wo ab BASIC 7.0 die Fehlermeldung ?ILLEGAL DEVICE NUMBER ERROR ausgegeben wird.
Da bei diesem Befehl die Parametersyntax nicht überprüft wird, sind hier alle möglichen Syntaxvarianten für Diskettenbefehle möglich, wobei diese zusätzlichen Angaben, sofern syntaktisch richtig, ignoriert werden. Sonst kommt es zu Fehlermeldung ?SYNTAX ERROR.

Funktionsweise[Bearbeiten | Quelltext bearbeiten]

Diese Anweisung sendet den DOS-Befehl Initialize an das angegebene Laufwerk. Diese führt dann selbstständig den Initialize-Vorgang aus. Im Falle eines unerwarteten Abbruchs (Laufwerks-LED blinkt), kann der konkrete Grund des Scheiterns über die Systemvariablen DS bzw. DS$ abgefragt werden.


BASIC 2.0 Entsprechung

Allgemeine Syntax:

DCLEAR D<Laufwerk> ON U<Gerät>

Entsprechung in BASIC V2-Syntax:

OPEN 15,<Gerät>,15,"I<Laufwerk>":CLOSE 15

Das ist allerdings nur die laufwerksseitige Entsprechung, da DCLEAR dann auch alle zum Gerät gehörende Dateien schließt.

Siehe Kompatibilitätsbeispiel.

Besonderheiten bei Diskbefehlen[Quelltext bearbeiten]

  • Die Parameter mit einem führenden Buchstaben, die logische Dateinummer beginnend mit # und Dateinamensangaben sind positionsunabhängige Parameter und dürfen beliebig gereiht sein. Abweichend davon sind jene Befehle, die einen Quell- und Zielteil aufweisen, wie etwa COPY, wo dies nur für den jeweiligen Bereich vor bzw. nach dem trennenden TO gilt.
  • Der Buchstabe eines positionsunabhängigen Parameters steht für:
    • B: bank (Banknummer)
    • D: drive (Laufwerksnummer)
    • I: identification (ID-Kennung eines Mediums)
    • L: record length
    • P: position (Position bzw. Adresse)
    • R: read (lesende Operation)
    • W: write (schreibende Operation)
    • U: unit (Gerätenummer)
  • Variablen oder allgemeine Ausdrücke bei positionsunabhängigen Parametern sind möglich, müssen aber in Klammern gesetzt werden (außer bei "I<Id>", wo immer nur eine 2-Zeichen-Konstante erwartet wird).
  • Die Angabe der Geräteadresse oder Bank (bei BASIC 7.0) kann entweder mit "," oder mit "ON" oder kombiniert mit ",ON" eingeleitet werden, wobei im Falle eines Kommas bereits ein anderer Parameter voran gegangen sein muss.
  • Der optionale Parameter "I<Kennung>" für die Angabe der Identifikation wird immer akzeptiert. Dem "I" müssen 2 Zeichen folgen, wobei beliebige Leerzeichen dazwischen vorkommen dürfen. Der Wert kann nicht durch einen geklammerten Ausdruck ersetzt werden. Gewisse Werte, die BASIC-Befehle wie IF, ON, FN, TO oder BASIC-Abkürzungen wie jO, hE enthalten, werden fälschlicherweise als das entsprechende Schlüsselwort und nicht als der beabsichtigte Text interpretiert. Alle nichtkonformen Fälle führen dann zur Fehlermeldung ?SYNTAX ERROR.
  • Ein Parameter "R" (ohne weitere Wertangabe, bei DOPEN zur expliziten Angabe des vorgegebenen Read-only-Modus gedacht) wird bei allen Diskbefehlen immer akzeptiert, hat aber keinerlei zusätzliche Bedeutung. Im Falle von BASIC 3.5 wird hingegen ?SYNTAX ERROR gemeldet.


Beispiele[Bearbeiten | Quelltext bearbeiten]

DCLEAR

Verwendet als Standardvorgabe Gerät 8 und Laufwerk 0.

DCLEAR D0 ON U9
PRINT DS$

Initialisiert Laufwerk 0 auf Gerät 9 und gibt den Fehlerkanalstatus aus.

DCLEAR D(FD) ON U(GA)

Initialisiert das Laufwerk gemäß Variable FD auf Gerät laut Variable GA.

Empfohlene Verwendung[Bearbeiten | Quelltext bearbeiten]

DCLOSE U9
DCLEAR U9

Laufwerk 0 auf Gerät 9 sauber reinitialisieren.
Da das Initialisieren mittels DCLEAR laufwerksseitig zwangsweise alle bestehenden Transaktionen zu offenen Dateien beendet, was dazu führte, dass dann zuvor offenen Dateien einen "unsauber" geschlossenen Zustand haben könnten, sollten vorab alle zu einem Gerät gehörenden Dateien mit DCLOSE geschlossen werden.

Kompatibilität[Bearbeiten | Quelltext bearbeiten]

DCLEAR D1 ON U8

entspricht zumindest laufwerksseitig mit BASIC V2:

OPEN 15,8,15,"I1":CLOSE 15