COPY (BASIC 3.5)

Aus C64-Wiki
Zur Navigation springenZur Suche springen
COPY (BASIC 3.5)
Syntax: COPY D<Laufwerk1> TO D<Laufwerk2> [ON U<Geräteadresse>]
oder
COPY <Dateiname1> [,D<Laufwerk1>] TO <Dateiname2> [,D<Laufwerk2>] [ON U<Geräteadresse>]
Parameter
<Laufwerk1> : Quelllaufwerk (0 oder 1)
<Dateiname1>: Zeichenkettenausdruck
<Laufwerk2> : Ziellaufwerk (0 oder 1)
<Dateiname2>: Zeichenkettenausdruck
<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: Disketten, Dateien kopieren oder Dateien erweitern
Abkürzung: coP
Token: $f4 (244)
Verwandte Befehle
BACKUP, CONCAT

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


Der Befehl COPY kopiert prinzipiell Dateien vom angegebenen Laufwerk auf Gerät mit Geräteadresse auf das gleiche oder ein anderes Laufwerk (im Falle eines Doppellaufwerks). Es gibt etliche verschiedene Parameterkonstellationen, die ein entsprechend abweichendes Verhalten aufweisen:

  1. COPY D<Laufwerk1> TO D<Laufwerk2> ON U<Geräteadresse>
    Nur für Doppellaufwerke: Von Laufwerk1 werden alle Dateien auf Laufwerk2 kopiert. Das Ziel muss allerdings bereits formatiert und entsprechend ausreichenden freien Platz aufweisen.
  2. COPY D<Laufwerk1>,"Datei1" TO D<Laufwerk2>,"Datei2" ON U<Geräteadresse>
    Nur für Doppellaufwerke: Eine Datei von Laufwerk1 auf ein anderes Laufwerk2 kopieren.
    Am gleichen Laufwerk wird eine Datei unter neuem Namen dupliziert. Existiert Datei1 nicht, meldet der Fehlerkanal "62, FILE NOT FOUND,00,00".
  3. COPY D<Laufwerk>,"Datei1,Datei2" TO "Datei3" ON U<Geräteadresse>
    Am gleichen Laufwerk werden Datei1 und Datei2 aneinander gehängt als neue Datei Datei3 erstellt. Das entspricht der COMBINE-Variante des Copy-Floppy-Befehls. Existiert Datei3 bereits, wird im Fehlerkanal "63, FILE EXISTS,00,00" gemeldet. Fehlt hingegen eines der Dateien Datei1 oder Datei2 steht im Fehlerkanal "62, FILE NOT FOUND,00,00". Die Quelldateien dürfen auch unterschiedlichen Typs sein und die neu angelegte Datei bekommt den Typ der erstgenannten Datei. Bei nicht erlaubten Kombinationen führt dies zur Floppy-Fehlermeldung "64, FILE TYPE MISMATCH,00,00".
  4. COPY D<Laufwerk>,"Datei1,Datei2" TO "Datei1" ON U<Geräteadresse>
    Am gleichen Laufwerk wird Datei2 an die bestehende Datei Datei1 angehängt. Dies entspricht dem CONCAT-Kommando bzw. der CONCAT-Variante des Copy-Floppy-Befehls. Fehlt eine der Dateien Datei1 oder Datei2 steht im Fehlerkanal "62, FILE NOT FOUND,00,00".

Bei den Varianten mit mehreren Dateinamen ist das Limit von 16 Zeichen im Vergleich zum Kommandokanal der Floppy, wo 34 Zeichen möglich sind, recht unpraktikabel. Vorübergehend kann hier unter Zuhilfenahme von RENAME mit kürzeren Namen operiert werden, damit das 16-Zeichenlimit eingehalten werden kann. Zu lange Dateinamensangaben führen sonst zur Fehlermeldung ?STRING TOO LONG ERROR.

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 COPY-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.
Sind die Parameter außerhalb des zulässigen Wertebereichs, erscheint die Fehlermeldung ?ILLEGAL QUANTITY ERROR. Das gilt auch für den Fall, dass die Zeichenkette einer Dateiangabe leer ist. Nur bei BASIC 7.0 wird hier der ?MISSING FILE NAME ERROR angezeigt.

Funktionsweise[Bearbeiten | Quelltext bearbeiten]

Diese Anweisung sendet den DOS-Befehl Copy/Combine/Concat an das angegebene Laufwerk. Diese führt dann selbstständig den entsprechenden Vorgang aus. Im Falle eines unerwarteten Abbruchs (Laufwerks-LED blinkt), kann der konkrete Grund des Scheiterns über die Systemvariablen DS bzw. DS$ abgefragt werden.
Geräte, die keine Doppellaufwerke sind, können mit den Mehrlaufwerksvarianten des Befehls nicht umgehen und im Fehlerkanal wird dies mit der Meldung "31,SYNTAX ERROR,00,00" signalisiert.


BASIC 2.0 Entsprechung

Allgemeine Syntax:

COPY D<Laufwerk1> TO D<Laufwerk2> ON U<Gerät>
COPY D<Laufwerk1>,"Datei1[,Datei2,...]" TO D<Laufwerk2>, "Datei" ON U<Gerät>

Entsprechung in BASIC V2-Syntax:

OPEN 15,<Gerät>,15,"C<Laufwerk2>=<Laufwerk1>":CLOSE 15
OPEN 15,<Gerät>,15,"C<Laufwerk2>:Datei=<Laufwerk1>Datei1,<Laufwerk2>Datei2,...]":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]

COPY D0 TO D1

kopiert alle Dateien von Laufwerk 0 auf Laufwerk 1 eines Doppellaufwerks auf dem vorgegebenen Gerät 8.

COPY "FILE1",D1 TO "*",D0

kopiert auf einem Doppellaufwerk die Datei "FILE1" von Laufwerk 1 auf Laufwerk 0 unter Beibehaltung des Namens (der Zieldateiname ist dabei nur ein spezielle vom CBM DOS verstandener Platzhalter und hat in diesem Fall nicht die Bedeutung eines Jokers).

COPY (F1$) TO (F2$), D(DR) ON U(DE)

kopiert eine Datei laut Stringvariable F1$ (von Standardgerät 8, Laufwerk 0), auf die Datei mit Namen gemäß F2$ auf Laufwerk DR von Gerät DE.


Kompatibilität


Laufwerkskopie ...

COPY D0 TO D1 ON U8
oder das Gleiche mit BASIC V2:
OPEN 15,8,15,"C1=0":CLOSE 15

Dateikopie mit optionalem Umbenennen ...

COPY D0, "file1" TO "file2" ON U8
oder das Gleiche mit BASIC V2:
OPEN 15,8,15,"C0:file2=0:file1":CLOSE 15

Dateikopie über Laufwerksgrenzen ...

COPY D1, "file" TO "*",D0 ON U8
oder das Gleiche mit BASIC V2:
OPEN 15,8,15,"C0:*=1:file":CLOSE 15

Dateien kombinieren ...

COPY D0, "file1,file2" TO "file3" ON U8
oder das Gleiche mit BASIC V2:
OPEN 15,8,15,"C0:file3=0:file1,0:file2":CLOSE 15

Dateien anhängen ...

COPY D0, "file1,file2" TO "file1" ON U8
oder das Gleiche mit BASIC V2:
OPEN 15,8,15,"C0:file1=0:file1,0:file2":CLOSE 15