COLLECT

Aus C64-Wiki
Zur Navigation springenZur Suche springen
COLLECT
Syntax: COLLECT [D<Laufwerk>] [,U<Geräteadresse>]
Parameter
<Laufwerk> : numerischer Ausdruck (0 oder 1)
<Geräteadresse>: numerischer Ausdruck im Wertebereich von 3 bis 31 bei BASIC 3.5 und BASIC 4 bzw. von 4 bis 30 bei BASIC 7.0
Einordnung
Typ: Anweisung
Kontext: Diskettenbefehl
Aufgabe: Datenträgerstruktur validieren und wieder herstellen
Abkürzung: colL
Token: $f3 (243)
Verwandte Befehle
HEADER

Anmerkung: Dieser Artikel beschreibt den BASIC-Befehl COLLECT ab Commodore BASIC 3.5 oder höher.


Der Befehl COLLECT (dt. einsammeln) stellt die CBM-DOS-Struktur für das angegebene Laufwerk auf Gerät mit Geräteadresse wieder her bzw. repariert sie. Dabei werden, ausgehend vom Inhaltsverzeichnis, die Blöcke aller Dateien eines Datenträgers durchforstet und anhand dessen die BAM aktualisiert bzw. richtig gestellt. Die Blockanzahl der jeweiligen Dateien wird allerdings nicht korrigiert, lediglich die "BYTES FREE"-Anzeige wird angepasst. Jene Verzeichniseinträge, die mit der Markierung ' * ' versehene sind, werden nebenbei entfernt und eventuell verlorene Blöcke werden wieder frei gegeben.
Dieser Vorgang kann je nach Füllgrad und Kapazität des Datenträgers einige Minuten in Anspruch nehmen, völlig unabhängig, wie schnell die Datenübertragung zwischen Rechner und Laufwerk ist. Bei einem gerade formatierten Datenträger, wie z.B. mittels HEADER (welches auf zerstörende Weise die Integrität ebenso wieder herstellt), ist für COLLECT nichts zu tun und die Laufzeit daher am geringsten.

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 3.5 und BASIC 4 bzw. von 4 bis 30 bei BASIC 7.0,
  • Laufwerk sind 0 oder 1.

Wurde mit dem COLLECT-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. Bei BASIC 3.5 wird diese Fehlermeldung erst dann ausgegeben, wenn unmittelbar danach der Fehlerkanal des Laufwerks mittels DS oder DS$ abgefragt wird. 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.

Funktionsweise[Bearbeiten | Quelltext bearbeiten]

Diese Anweisung sendet den DOS-Befehl Validate an das angegebene Laufwerk. Diese führt dann selbstständig den Collect/Validate-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:

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

Entsprechung in BASIC V2-Syntax:

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

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]

COLLECT

mit Standardvorgabe auf Gerät 8 und Laufwerk 0.

COLLECT D0 ON U9

repariert Diskette im Laufwerk 0 von Gerät 9.

COLLECT D(FD) ON U(GA)

repariert die Diskette im Laufwerk gemäß Variable FD des Gerätes aus Variable GA.


Kompatibilität

COLLECT D1 ON U8

oder das Gleiche mit BASIC V2:

OPEN 15,8,15,"V1":CLOSE 15