DIRECTORY

Aus C64-Wiki
(Weitergeleitet von CATALOG)
Zur Navigation springenZur Suche springen
Begriffsklärung Der Titel dieses Artikels ist mehrdeutig. Directory (Begriffsklärung).


DIRECTORY
Syntax: DIRECTORY [D<Laufwerk>][,U<Geräteadresse>][,<Dateiname>]
bzw.
CATALOG [D<Laufwerk>][,U<Geräteadresse>][,<Dateiname>]
Parameter
<Laufwerk> : numerischer Ausdruck mit Wert 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
<Dateiname>: Zeichenkettenausdruck
Einordnung
Typ: Anweisung
Kontext: Diskettenbefehl
Aufgabe: Inhaltsverzeichnis einer Diskette anzeigen
Abkürzung: diR bzw. cA
Token: $ee (238) bzw. $fe $0c (254 12)
Verwandte Befehle
LOAD "$"

Anmerkung: Dieser Artikel beschreibt den BASIC-Befehl DIRECTORY ab Commodore BASIC V3.5 oder höher.
Dieser Befehl identisch mit CATALOG ab BASIC 4.0.


DIRECTORY ruft das Inhaltsverzeichnis einer Diskette für das angegebene Laufwerk auf Gerät mit Geräteadresse ab und zeigt es an, ohne dass ein im Speicher befindliches Programm überschrieben wird. Der Anzeigenablauf kann beim C16/116 und Plus/4 durch die Tastenkombination CTRL +S  und beim C128 mit der Taste NO SCROLL  angehalten werden. Durch Drücken der Taste C=  (Commodore-Taste) wird er verlangsamt.
Nach der Ausführung sind die Systemvariablen STATUS, sowie DS$ und DS entsprechend dem Status aus dem Fehlerkanal gesetzt.

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 DIRECTORY-Befehl ein Diskettenlaufwerk angesprochen, zu dem die Geräteadresse falsch eingestellt ist oder nicht existiert, erscheint die Fehlermeldung ?DEVICE NOT PRESENT ERROR.
Sind die Parameter außerhalb des zulässigen Wertebereichs, erscheint die Fehlermeldung ?ILLEGAL QUANTITY ERROR.

Mit dem Zeichenketten-Parameter Dateiname kann die Auswahl der angezeigten Dateien gesteuert werden. Der Dateiname kann entweder als Zeichenkettenkonstante (in Anführungszeichen) oder als Ausdruck, z.B. eine Zeichenkettenvariable, (dann in runden Klammern) angegeben sein. Fehlt der Parameter, wird implizit "*" angenommen, d.h. das Verzeichnis wird vollständig angezeigt. Eine leere Zeichenkette führt zur Fehlermeldung ?MISSING FILENAME ERROR. Die Zeichenkette darf allerdings nicht mehr als 16 Zeichen enthalten, da dies sonst zur Fehlermeldung ?STRING TOO LONG ERROR führt.

Ausdrucken des Inhaltsverzeichnisses[Bearbeiten | Quelltext bearbeiten]

Die naheliegende Methode per CMD die Ausgabe auf den Drucker umzuleiten und anschließend den Befehl DIRECTORY aufzurufen, funktioniert nicht. Vielmehr muss dazu, ähnlich wie beim C64, das Verzeichnis mittels DLOAD "$" geladen und anschließend die Ausgabe von LIST auf den Drucker umgeleitet werden.

Hinweise zum Parameter Dateiname[Bearbeiten | Quelltext bearbeiten]

  • Im Parameter dürfen die Jokerzeichen * und ? verwendet werden.
  • Der Parameter kann mit einem Dateitypselektor abgeschlossen sein (ohne einen solchen, wird jede passende Datei beliebigen Typs herangezogen). Eingeleitet wird die Angabe mit einem "=" gefolgt von einem Zeichen "P" (für PRG) oder "S" (für SEQ) oder "U" (für USR) oder "R" (für REL) entsprechend den korrespondierenden Dateitypen. Andere Zeichen stehen für "alle" Typen. Beispiel: "*=U" wählt alle Dateien des Typs USR.
  • Mehrere Dateinamen oder Muster, die Joker enthalten, können im Parameter durch Komma getrennt angegeben sein, sofern das Limit von 16 Zeichen nicht überschritten wird.
  • Der Fehlerkanal meldet "30,SYNTAX ERROR,00,00", wenn z.B. der Dateitypselektor nicht am Ende des Parameters oder mehrfach vorkommt.

Besonderheiten bei Diskbefehlen[Quelltext bearbeiten]

  • Bei einem Dateinamen ist optional ein führendes @ möglich (nur bei einer Dateinamenangabe von mehreren erlaubt), um eine bestehende Datei zu überschreiben (REPLACE-Funktion). Das Zeichen wirkt sich dann nicht auf das Längenlimit von 16 Zeichen aus. Intern wird damit immer der für den Save-Bug sichere Dateiname "@0:<Dateiname>" verwendet (in diesem Fall für Laufwerksnummer 0).
  • 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 in memory (Start-/Endadresse)
    • 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]

DIRECTORY

ruft das gesamte Inhaltsverzeichnis jener Diskette auf, die sich im Diskettenlaufwerk 0 mit der Geräteadresse 8 befindet; ähnlich wie LOAD"$",<Geräteadresse>.

DIRECTORY D1, U9, "SPIELE"

zeigt nur den Verzeichniseintrag der Datei SPIELE auf der Diskette, die sich im Diskettenlaufwerk 1 mit der Geräteadresse 9 befindet.

DIRECTORY D1, "SPIELE" ON U9

wie Beispiel davor, allerdings in alternativer Parametersyntax

DIRECTORY "S*"

zeigt alle Dateien, die mit "S" beginnen an (im Laufwerk 0, Geräteadresse 8).

DIRECTORY "?=S"

zeigt alle sequentiellen Dateien, die nur genau einen 1 Zeichen langen Dateinamen haben.

DIRECTORY "S-*,??"

zeigt alle Dateien die mit "S-" beginnen und solche die 2 Zeichen lang sind.

DIRECTORY U10, "?SPIEL?"

zeigt alle Dateien an, deren Dateiname 7 Zeichen lang ist und die Zeichenkette SPIEL beinhalten (im Laufwerk 0, Geräteadresse 10).

10 DR=0:GA=8
20 INPUT "FILTERMASKE";FM$
30 IF FM$ = "" THEN END
40 DIRECTORY (FM$),D(DR),U(GA)
50 PRINT DS$: REM Meldung aus Fehlerkanal anzeigen
60 GOTO 20

Beispiel für den Aufruf in einem Programm mit Übergabe der Parameter in Variablen.