Filerequester/directory

Aus C64-Wiki
Zur Navigation springenZur Suche springen

<< zurück zu Filerequester


Das Maschinenspracheprogramm directory ist ein Filerequester, mit dem in einem laufenden BASIC-Programm ein Dateiname per Auswahl mit den Cursortasten in eine Variable übernommen werden kann.

  • Original von Dieter Bayer im 64'er Sonderheft 15, Seite 154 (1987).
  • Korrekturen von Peter Hagemann (1988 und 2022).
  • An TSB angepasst von Peter Hagemann (2023) und Arndt Dettke (2023) unter dem Namen „dirselect“.


Beschreibung[Bearbeiten | Quelltext bearbeiten]

Die Startadresse ist $C000 (49152). Das Programm belegt den Speicher $C000-$C297 (Original: $C000-$C285). Der Bereich unter dem BASIC-ROM ab $A000 dient als Pufferspeicher für die eingelesenen Directory-Einträge (16 Bytes pro Datei).

  • Der erste Parameter gibt die Startspalte der Dateiauswahlanzeige an. Er darf Werte von 0 bis 22 annehmen. Die Ausgabebreite beträgt 18 Zeichen.
  • Der zweite Parameter ist der Dateifilter. Mit "$" werden sämtliche Dateien aus dem Directory angezeigt. Mit dem Filter "$:[*" werden nur Dateien ausgewählt, die mit "[" beginnen.
  • Der dritte Parameter benennt die Variable, die den Dateinamen aufnimmt.

Anwendungsbeispiele:

DL=49152
SYSDL,22,"$",F$
SYSDL,19,"$:[*",F$

Die im Sonderheft 15 veröffentlichte Fassung (s.u. SMON-Disassembler-Listing des Originals) enthält die drei Mängel 1-3. Diese Probleme sind in der korrigierten Fassung von 1988 behoben. Zwei weitere kleinere Mängel (4-5) sind in der neuesten Fassung von 2022 beseitigt.

  1. Bei der Blockanzahl 34 gibt es Probleme, da sie mit dem Code für das Anführungszeichen verwechselt wird.
  2. Im normalen Betriebssystem wird die Schriftfarbe der Dateinamen nicht gesetzt, die so unsichtbar bleiben.
  3. Es gibt keine Möglichkeit, ohne Auswahl abzubrechen. Die korrigierte Version tut dies nach <Pfeil links>.
  4. Die Farbe wird jetzt im ganzen Ausgabebereich (auch in den Zeichen links und rechts vom Dateinamen) gesetzt.
  5. Nach der Dateiauswahl wird der Reverse-Modus ausgeschaltet.


Listing (ACME) der korrigierten Fassung[Bearbeiten | Quelltext bearbeiten]

Mit folgendem BASIC-Programm kann man die directory-Routine testen:

10 IF A=0 THEN A=1:LOAD"DIRECTORY-V3",8,1
20 DL=12*4096:PRINT CHR$(147)CHR$(5)
30 PRINT "{HOME}{3 DOWN}_ = BEENDEN":PRINT"    OHNE AUSWAHL"
40 SYSDL,22,"$",F$
50 PRINT "{HOME}"CHR$(34)F$CHR$(34)
60 PRINT "{HOME}{6 DOWN}L = NEU LADEN"
70 GET A$:IF A$="" THEN 60
80 IF A$="L" THEN GOTO 20

Directory Test

SMON-Disassembler-Listing des Originals[Bearbeiten | Quelltext bearbeiten]

Beispieldiskette[Bearbeiten | Quelltext bearbeiten]

Die Beispieldiskette HOMENTC1.D64 aus The Complete Home Entertainment Centre (Sammlung) soll die Arbeitsweise des Programms nachvollziehbar machen. Sie eignet sich deshalb gut, weil sie ein kurzes Directory und Dateien mit ein-, zwei- und dreistelligen Blockgrößen besitzt.

0 "TCHEC DISK 1    " A2 2A
1    "LOADER"           PRG 
138  "BRIPRG"           PRG 
143  "MAHPRG"           PRG 
1    "TCHECLOAD"        PRG 
41   "SCREEN"           PRG 
154  "CHSPRG"           PRG 
186 BLOCKS FREE.

Das folgende TSB-Programm liest das Directory aus und listet die Bytes in hexadezimaler Form:

10 OPEN 1,8,0,"$":I=0
20 GET#1,D$:I=I+1
30 A=ASC(D$+CHR$(0))
40 PRINT $$A;" ";:REM TSB
50 IF I=13 THEN PRINT:I=0
60 IF ST=0 THEN 20 

Als Ausgabe erhält man

01 04 01 01 00 00 12 22 54 43 48 45 43
20 44 49 53 4b 20 31 20 20 20 20 22 20
41 32 20 32 41 00 01 01 01 00 20 20 20
22 4c 4f 41 44 45 52 22 20 20 20 20 20
20 20 20 20 20 20 50 52 47 20 20 00 01
01 8a 00 20 22 42 52 49 50 52 47 22 20
20 20 20 20 20 20 20 20 20 20 50 52 47
20 20 20 20 00 01 01 8f 00 20 22 4d 41
48 50 52 47 22 20 20 20 20 20 20 20 20
20 20 20 50 52 47 20 20 20 20 00 01 01
01 00 20 20 20 22 54 43 48 45 43 4c 4f
41 44 22 20 20 20 20 20 20 20 20 50 52
47 20 20 00 01 01 29 00 20 20 22 53 43
52 45 45 4e 22 20 20 20 20 20 20 20 20
20 20 20 50 52 47 20 20 20 00 01 01 9a
00 20 22 43 48 53 50 52 47 22 20 20 20
20 20 20 20 20 20 20 20 50 52 47 20 20
20 20 00 01 01 ba 00 42 4c 4f 43 4b 53
20 46 52 45 45 2e 20 20 20 20 20 20 20
20 20 20 20 20 20 00 00 00

Jeder Eintrag hat eine Länge von 31 Bytes.

  • Diskettenname
 2 Bytes Startadresse 0401 Low/High
 2 Bytes Linkadresse  0101 Low/High
-- Ab hier Ausgabe von 21 Bytes
 1 Byte (drivenumber) Zeilennummer Low
 1 Byte Zeilennummer High 00
 1 RVSON
 1 "
16 Diskettenname
 1 "
-- 
 1 Leerzeichen
 4 ID 
 1 Endemarkierung 00
  • Dateiname
 2 Linkadresse 0101 Low/High
 2 Blocks (Low/High)
-- 26 Bytes Directory-Eintrag: 
 1-3 Leerzeichen (je nachdem, ob Blockanzahl drei-, zwei- oder einstellig) *1)
 1 "
16 Dateiname, ab Endezeichen " ev. mit Leerzeichen aufgefüllt
 1 Leerzeichen
 3 Dateityp ("PRG", "SEQ", "DEL" o.a.)
 2-4 Leerzeichen, je nach Blockanzahl (ein-, zwei- oder dreistellig) *1)
--
 1 Endemarkierung 00
*1) diese beiden Byte-Folgen haben zusammen also immer die Länge 5 (1+4, 2+3 oder 3+2).

Die Load dir Routine der 1541 ist dokumentiert bei aay c1541.


Weblinks[Bearbeiten | Quelltext bearbeiten]

64'er Sonderheft 15 auf archive.org