★ APPLICATIONS ★ DIVERS ★ Auf einen Schlag : Disk-Katalog ins BASIC-Programm ★ |
RSX Disk-Katalog (CPC Amstrad International) | Applications Divers |
Für den BASIC-Programmierer stellt sich bei Datenverarbeitungsprogrammen immer wieder dasselbe Problem: Für den Ablauf eines solchen Programms werden des öfteren ein oder mehrere Programmnamen einer eingelegten Diskette benötigt. Sei es zum STARTEN, MERGEN eines Programms oder zum Öffnen einer relativen beziehungsweise sequentiellen Datei. Nur, wie soll man das aus dem BASIC so ohne weiteres schaffen. Natürlich läßt sich durch CAT oder |DIR ein Diskettenkatalog auf dem Bildschirm ausgeben. Auch können unter Zuhilfenahme des COPYCHR$-Befehls Namen in Stringvariablen übergeben werden (beim CPC 464 aber auch nur mit dem Emulator). Solche Routinen sind in BASIC allerdings sehr aufwendig und platzraubend zu realisieren. Abgesehen davon wird durch ein CAT und ähnliches immer der Bildschirmaufbau zerstört. Um diese ganze Gedankenarbeit und vor allem Speicherplatz zu sparen, wurde diese Maschinencode-Routine geschrieben. Hiermit ist es möglich, durch Nutzung des RSX-Befehls |READ sämtliche auf der Diskette (funktioniert übrigens auch bei Datasette) befindlichen Files namentlich und mit kByte-Angabe in ein vorher dimensioniertes Stringvariablen-Array zu kopieren. Nach Aufruf von |READ wird der Bildschinnaufbau nicht beeinflußt. Die Namenseinlesung erfolgt vollkommen unsichtbar. Syntax des Befehls |READ, (Klammeraffe)name$(Arraywert) Mit Klammeraffe ist das etwas seltsam aussehende "a" auf der CPC-Tastatur gemeint. Das Array sollte nach Möglichkeit nur einfach dimensioniert sein und auf jeden Fall ausreichend Platz für die auf den Disketten befindlichen Files haben, zuzüglich eines Strings, welcher nach Aufruf der Routine mit "*** ENDE ***"+ CHR$(0) aufgefüllt wird. Bei voller Ausnutzung des Directories einer 3"-Diskette unter AMSDOS sind das genau 65 + 1 Datei. Jeder String muß vor dem ersten Aufruf der Routine eine Mindestlänge von 13 Zeichen zugewiesen bekommen (z.B.: name$(0)=SPACE$( 13) usw.). Dann können Sie die Routine mit |READ,@name$(0) aufrufen. Nach kurzer Zeit sind die Strings mit Directory-Einträgen belegt worden. Sind weniger als 65 Dateien auf dem Datenträger vorhanden (das ist wohl meistens der Fall), können Sie das Ende eines eingelesenen Kataloges an dem oben bereits beschriebenen ENDE-String erkennen. Die ersten zwölf Zeichen eines Strings geben den Namen eines Files an. Das 13te Zeichen enthält in ASCII-Form die verbrauchten kBytes des Programms auf der Diskette. Mit a=ASC(RIGHT$(name$(x),1)) können diese Werte ohne große Probleme übernommen werden. An diese Datei können Sie weitere Diskettendirectories anhängen. Sie müssen dann nur darauf achten, daß die Anzahl die vorher gewählte Dimensionierung des Arrays nicht übersteigt. Es kommt dann zu äußerst unangenehmen Nebenwirkungen. Abtipphinweise Den DATA-Lader vor dem Start bitte erst einmal abspeichern und dann starten. Es wird selbsttätig das Binärfile "EINLESE.BIN" abgespeichert. In Ihrem BASIC-Programm läßt sich die Routine auf folgende Weise einbinden. 10 MEMORY &979B: IF PEEK(&979C)=0 THEN LOAD"EINLESE.BIN":CALL &979C
|