The following article was printed in July 1986 of the magazine „MC".
Discussion of a Turbo Pascal program displaying a directory.
Dirk Michelsen

Wildcards und Parameter-Übergabe

Turbo-Pascal 2.0 unterstützt eine Vielzahl von CP/M-Funktionen. Leider gilt dies nicht für die Übergabe von Parametern beim Aufruf eines Programmes und die Verwendung von „Wildcards" in Dateinamen. Ein kurzes Programm schafft Abhilfe.

Der CCP hinterläßt einem Programm den Teil der aufrufenden Befehlszeile, der über den Namen des aufgerufenen Programmes hinausgeht. Dieser Rest steht im Speicherbereich $80...$FF (in $80 steht die Länge dieses Restes). In den darauffolgenden Speicherzellen findet man dann die entsprechenden Buchstaben der Befehlszeile in ASCII-Code. Die Datenstruktur entspricht genau einem String der maximalen Länge von 127 Zeichen, der ab $80 gespeichert ist. Durch die Variablen-Deklaration
VAR
PARAMETER:STRING[127] ABSOLUTE $0080;
werden dann die übergebenen Parameter zu einem String, auf den mit den üblichen Mitteln zugegriffen werden kann (Bild).
Das BDOS unterstützt Wildcards mit den Funktionen SEARCH_FOR_FIRST und SEARCH_FOR_NEXT. Diese Funktionen benötigen als Parameter die Adresse eines File-Control-Blocks und füllen als Seiteneffekt einen Puffer mit Einträgen aus dem Directory. Funktionswert ist, falls eine passende Datei gefunden wurde, eine Zahl zwischen 0 und 3. Diese Zahl verweist auf den Eintrag in Puffer, der den genauen Dateinamen enthält. Wurde keine passende Datei gefunden, ist der Funktionswert $FF.
Mit dem Befehl ASSIGN(DIR_FILE,GESUCHT) wird der File-Control-Block mit einem Dateinamen, der als Wildcards Fragezeichen enthalten darf, gefüllt. Der Befehl BDOS(CPM_SET_DMA_ADDRESS,ADDR(DIR_PUFFER)) sorgt dafür, daß bei den folgenden Directory-Zugriffen der DIR_PUFFER mit den Directory-Einträgen gefüllt wird. Beim BDOS-Aufruf werden dann als Parameter die Funktionsnummer und die Adresse des File-Control-Blocks übergeben. Der File-Control-Block steht dabei ab Byte 12 des Speicherbereiches von DIR_FILE. Die Funktion MAKE_NAME macht aus diesem Funktionswert einen normalen Filenamen bzw. einen Leerstring, falls keine weitere Datei gefunden wurde.
Zur Übernahme der Parameter reicht die gezeigte String-Deklaration. Das erste Zeichen des Strings ist aber das trennende Leerzeichen und muß gelöscht werden.
Um mehrere Dateien mit Wildcards anzusprechen, wird zuerst die Funktion SEARCH_FOR_FIRST mit einem Dateinamen, der Fragezeichen enthält, aufgerufen. Funktionswert ist ein Dateiname. Alle weiteren Dateinamen erhält man mit der Funktion SEARCH_FOR_NEXT. Falls es keine weitere Datei gibt, ist der Leerstring der Funktionswert. Die Aufrufe der Funktionen SEARCH_FOR_FIRST und SEARCH_FOR_NEXT dürfen durch keine anderen Dateizugriffe unterbrochen werden. Es empfiehlt sich also, alle Dateinamen in einem Array zwischenzuspeichern.
Um das Format der Aufrufe zu zeigen, ist im abgedruckten Programm der Dir-Befehl in Turbo-Pascal implementiert. Es übernimmt als Parameter eine Dateibezeichnung mit Fragezeichen und gibt die Namen der passenden Dateien aus.

Literatur

[1] Turbo-Pascal 2.0 Reference Manual. Fa. Borland.
[2] CP/M 2.0 Interface Guide. Fa. Digital Research.

Den DIR-Befehl verwirklicht dieses Programm in Turbo-Pascal 2.0 unter CP/M-80

Scanned by Werner Cirsovius
December 2002
© Franzis' Verlag