★ APPLICATIONS ★ DIVERS ★ Diskettenroutinen : Rückmeldung in BASIC Directory-String und Statusmeldung - RSX macht's möglich ★ |
Diskettenroutinen (CPC Amstrad International) | Applications Divers |
Ein Laufwerk an seinem CPC 6128 zu haben, ist eine wunderbare Sache, es ist schnell, sicher und recht einfach zu handhaben. Leider fällt einem beim Programmieren unter BASIC sehr schnell auf, daß man keinerlei Möglichkeit hat, eventuelle Fehler (Diskette nicht eingelegt, Programm oder Datei nicht gefunden) innerhalb des eigenen Programmes abzufangen und das Directory als String einzulesen und weiterzubearbeiten. Das soll sich nun ändern, denn wofür besitzt der CPC die Eigenschaft, RSX-Befehle auszuführen? Endlich kann das Directory von BASIC aus in einen String eingelesen werden. Nehmen Sie dafür den Befehl |DIRSTR. Außerdem können Sie mit |STATUS den Zustand der Laufwerke problemlos und einfach von Ihrem eigenen Programm aus abfragen. Zugriffe auf ein nicht vorhandenes B-Laufwerk gehören damit der Vergangenheit an. Die neuen Befehle im einzelnen |DIRSTR,@fehler%,@maske$,@dir$,@frei%,@n% liefert in 'dir$' die Files des Directory. In 'maske$' müssen Sie den Filenamen oder eine Wildcard entsprechend dem DIR-Befehl übergeben. Die größtmögliche Maske ist "15B:????????.???". Sie liest alle Files von User 15 Laufwerk B in 'dir$' ein. Die Variable 'frei%' enthält nach Ausführung von | DIRSTR den freien Speicherplatz. Die dritte Variable 'n%' gibt die Anzahl der Files, die der Maske entsprechen, zurück. Maximal werden jedoch 21 Files in 'dir$' eingelesen, da im Schneider BASIC ein String nicht länger als 255 Zeichen sein kann. Trat beim Lesen des Directory ein Fehler auf, war also die Diskette nicht eingelegt oder kein B-Laufwerk angeschlossen, so bekommt 'fehler%' den Wert 255. Steht in 'fehler%' dagegen 0, ist alles o.k.... Maximal 21 Filenamen werden in 'dir$' direkt hintereinander abgelegt. Mit dem BASIC-Befehl 'MID$' kann der einzelne Filename herausgeschnitten werden (siehe BASIC-Listing). |STATUS,@drive%,@status% ermittelt den Zustand des mit 'drive%' gewählten Laufwerks. Steht in 'drive%' der Wert 0, wird Laufwerk A selektiert, steht in 'drive%' eine 1, gilt das gleiche für Laufwerk B:. In 'status%' stehen nach Ausführung drei mögliche Werte: 0 - > Laufwerk bereit, Diskette nicht schreibgeschützt Diskette eingelegt Beachten Sie bei beiden RSX-Befehlen, daß die Variablen mit führendem Klammeraffen (@) übergeben werden müssen. Außerdem müssen sämtliche Variablen zuvor im BASIC initialisiert werden, indem ihnen irgendein Wert zugewiesen wird. Die Stringvariable 'dir$' muß mit 252 Zeichen gefüllt werden. Dies erledigt die FOR-NEXT-Schleife in Zeile 310 des BASIC-Listings 2. Sie belegt 'dir$' mit 252 (0-251) Spaces, dies entspricht der Länge von von 21 Filenamen (maximale Länge=21). Die Integervariablen müssen auch als solche definiert werden. Dazu hängt man ihnen ein ' %' an oder verwendet den DEFINT-Befehl von BASIC. Das Binärprogramm nimmt den Bereich von &A000-&A200 ein, benötigt jedoch einen temporären Buffer ab &9CD0, um die Filenamen zwischenzuspeichern. Tippen Sie den BASIC-Lader ab, und starten Sie mit 'RUN'. Die Anwendung der beiden Befehle erlernen Sie am besten mit dem DEMO-Programm. Viel Spaß mit den neuen Befehlen.
|