Dateiauswahldialog

Aus C64-Wiki
Zur Navigation springenZur Suche springen

Ein Dateiauswahldialog (auch Filerequester genannt) ist eine Programmroutine, die eine Liste von Dateien von einem Eingabegerät liest, auf dem Bildschirm ausgibt und eine Auswahl von einer oder mehreren Dateien zur Weiterverarbeitung zur Verfügung stellt.

Dateiauswahldialog auf dem C64[Bearbeiten | Quelltext bearbeiten]

Beispiele für den Einsatz von Filerequestern sind Dateimanager oder Filebrowser, die mehr oder weniger umfangreiche Bearbeitungsmöglichkeiten der angezeigten Dateien bieten. Typische Einsatzbereiche sind Ladeprogramme, die Dateien bzw. Programme laden und ggf. starten, wie sie als Benutzeroberfläche in Diskmags benutzt werden, sowie Grafik-Browser zum Laden und Anzeigen von Bildern oder Dateikopier-Programme für Disketten.

Tatsächlich benutzten allerdings viele Anwendungsprogramme die für den Benutzer wenig komfortable Eingabe des Dateinamens per INPUT. Dass selbst die bekannten Hi-Eddi plus und Amica Paint das so machen, liegt allerdings am fehlenden Speicherplatz für die zusätzliche Routine.

Einige Bespiele:

Als sich ab Mitte der 1980er Jahre die Steckmodule als Arbeitsoberfläche etablierten, wurde der Dateiauswahldialog zum Standard. GEOS spielt mit seiner grafischen Benutzeroberfläche in einer anderen Liga.

Tools[Bearbeiten | Quelltext bearbeiten]

Tools zum Dateiauswahldialog, die man in eigene Programme einbinden kann, sind schwer zu finden.

  • Im 64'er-Sonderheft 15 wird auf Seite 154 die Routine "Directory" von Dieter Bayer beschrieben, die per SYS-Befehl gestartet und so in ein BASIC-Programm integriert werden kann. In Filerequester/directory ist eine korrigierte Fassung im ACME-Quelltext enthalten.
  • Einen ähnlichen Ansatz verfolgte Udo Wöhler mit "directory-load", das er in der 64'er veröffentlicht hatte (siehe 64'er Sonderheft 15 auf archive.org ). Die Routine wird per SYS mit Parametern aufgerufen und lädt das Directory in zuvor zum Teil mit DIM angelegte Variablen, etwa NA$ = Name und ID der Diskette / ZH% = Anzahl der eingelesenen Dateien / FI$(N) = Namen der Dateien / BL%(N) = Blocklänge der Dateien / TY%(N) = Dateitypen / TR%(N) = Anfangstracks / SE%(N) = Anfangssektoren / TY$= Dateitypen, die eingelesen werden sollen (PSRUD). Die Weiterverarbeitung erfolgt dann im BASIC-Programm.

Programmierung[Bearbeiten | Quelltext bearbeiten]

Eine typische Programmroutine für einen Filerequester im Textmodus besteht im Wesentlichen aus zwei Teilen:

  • Teil 1: Einlesen der Dateien vom Datenträger in einen Pufferspeicher oder direkt in den Bildschirmspeicher.
  • Teil 2: Daten (ggf. aus dem Pufferspeicher geholt) in einem Bildschirmbereich anzeigen und per Cursortasten oder mit der Maus eine oder mehrere Dateien auswählen.

Für die weitere Verarbeitung sind dann andere Programmteile zuständig.

Für Teil 1 gibt es grundsätzlich zwei Möglichkeiten:

  1. Das komplette Directory einlesen mit der Load dir-Routine der 1541 und dem Dateiparameter "$". Hierbei wird in der Regel ein verhältnismäßig großer Zwischenspeicher benötigt. Mit 16 Bytes für einen Dateieintrag sind das 16*144=2304 ($0900) Bytes bei einer 1541 oder gar 16*296=4736 ($1280) Bytes bei einer 1581. Da hinter dem Doppelpunkt von "$:" eine Dateifilterangabe stehen kann (siehe dazu Directory Joker), braucht man diese Option nicht mehr selbst zu programmieren.
  2. Einen Teil vom Directory blockweise von Diskette lesen. Ein Directory-Block kann acht Dateieinträge enthalten, also ist ein Lesen von 2 bis 3 Blöcken für eine Dateiauswahlanzeige von 16 oder 24 Einträgen sinnvoll. Wenn hier ein Dateifilter benutzt werden soll, ist umfangreichere Programmierarbeit erforderlich.

Wenn man die Dateinamen direkt in den Bildschirm schreibt, benötigt man bei beiden Methoden keinen anderen Zwischenspeicher.

Weblinks[Bearbeiten | Quelltext bearbeiten]