The following article was printed in March 1984 of the magazine „MC".
Find a Pascal MT+ program presented here displaying a directory.
Hans-Georg Joepgen

CMDMAK bringt Licht ins Directory

Bei der automatischen Übertragung von Disketteninhalten auf Scheiben anderer Formate über Rechner-Rechner-Kopplung unter CP/M erweist sich als hinderlich, daß es dieses Betriebssystem in Varianten vor 3.0 nicht erlaubt, selbsttätig Inhaltsverzeichnisse („Directories") als normale Diskettenaufzeichnungen zu schreiben. Hier wird über den geglückten Versuch berichtet, diesen Mangel durch ein Dienstprogramm zu beheben. Bei gleicher Gelegenheit wurde studienhalber miterprobt, inwieweit in Pascal ausgesprochen betriebssystemnah programmiert werden kann.

Das bereits früher veröffentlichte „PROGSEND"-Verfahren zum Programmtransfer über Drucker-Schnittstellen [1] verlangt lästigen und fehleranfälligen Bedienaufwand, wenn - etwa von einer Festplatte aus - sehr viele Aufzeichnungen auf eine Zweitmaschine zu übertragen sind: Dann ist der Name einer jeden Aufzeichnung entweder während des Transfers jeweils von Hand einzugeben oder doch zumindest zuvor in ein „SUBMIT"-File zu schreiben. Wünsche von „PROGSEND"-Nutzern und eigene Bedürfnisse gaben den Ausschlag, nach einer Lösung zu suchen, die es erlauben sollte, auch diesen Teil des Übertragungsverfahrens zu automatisieren. Weil CP/M in allen Versionen vor 3.0 Directories nur auf Ausgabekanäle zu leiten, nicht jedoch in eine Datei zu schreiben vermag, mußte das Betriebssystem durch eine sozusagen artfremde Zusatzdienstleitung erweitert werden. Der technisch mögliche und auch erfolgreich erprobte Umweg über den CP/M-Pseudo-Unix-Adapter „MICROSHELL" [2] sollte nicht gewählt werden, weil dieser ansonsten vorzügliche Adapter doch recht teuer ist und seine Anschaffung allein zur Directory-Fixierung wirtschaftlich nur in seltenen Fällen zu rechtfertigen wäre, überdies forderten wir eine Lösung, die simultan aus allen 32 USER-Bereichen liest; das kann weder Microshell noch der zum Standard-Lieferumfang von CP/M 2.XX gehörende „Peripheral Interface Processor" PIP; der erlaubt bekanntlich nur Zugriffe auf die ersten 16 Bereiche.

Umweg über exotische Spezialfunktion

Wir bedienten uns einer dürftig dokumentierten und dementsprechend wenig bekannten Sonderbetriebsart der CP/M-Funktionsgruppe „SEARCH FIRST" (Suchen nach erstem Eintrag) und „SEARCH NEXT" (Suchen nach Folgeeintrag). Sie ist dadurch gekennzeichnet, daß in den „File Control Block FCB" im DR-Feld, das sonst die verschlüsselte Anweisung enthält, welches Laufwerk zu wählen ist, Byte 3FH eingetragen wird. Im DMA-Buffer liefert das Betriebssystem dann jeweils eine Vierergruppe aus allen Einträgen sämtlicher USER-Bereiche. Welcher der vier Teileinträge (0...3) gilt, ist am Akku-Inhalt erkennbar; dort erscheint überdies der Wert 0FFH, wenn die Suche keine neuen Einträge mehr liefert. Erschwert wird die Nutzung dieser Spezialfunktion dadurch, daß sie allzu gründlich arbeitet: Sie meldet nämlich auch gelöschte Einträge und solche, die zu Folge-Extents ein und derselben Aufzeichnung gehören. Solche hier unerwünschten Fehleinträge müssen erkannt und verworfen werden. Bis hierher ist erkennbar geworden, daß die Lösung der Aufgabe eigentlich die Anwendung von Assembler verlangt. Keine der unter CP/M üblicherweise eingesetzten Hochsprachen bietet, so war anfangs zu vermuten, für diesen Fall von Haus aus genügend leistungsfähige Handreichungen.

Direkter „BDOS"-Aufruf aus Pascal MT+

Zum Compiler Pascal MT+ (früher geliefert von MT Microsystems, heute ein Produkt der Firma Digital Research, Inc.) gehört eine von Mike Lehman geschriebene Dienstroutinen-Bibliothek PASLIB, die auch Module zu Direktaufrufen der Betriebssysteme CP/M (80) und CP/M-86 enthält. Zusammen mit den bit- und byteorientierten Zusatz-Operatoren dieses Pascal-Dialektes [7] und der schönen Datentyp-Strukturierbarkeit von Pascal schlechthin ergibt sich ein Umfeld, das uns studienhalber den Versuch wagen ließ, diese „typische Assembler-Aufgabe" in einer Hochsprache zu realisieren. Das Ergebnis entkräftet voll die häufig geäußerte Vermutung, Pascal sei untauglich für hardware- oder systemnahe Programmierung. In nur 169 Zeilen Quellencode ergab sich eine Lösung, die alle Anforderungen an unser Dienstprogramm erfüllte und darüber hinaus noch einigen Raum für vergleichsweise komfortable Mechanismen zum Abfangen extremer Betriebsbedienungen ließ.

CP/M-Strukturen bequem nachgebildet

Aktivitäts-„Drehscheiben" des Programms CMDMAK sind zwei strukturierte Variable, deren Byte-Aufbau genau dem File Control Block von CP/M und der Buffer-Innenarchitektur aus vier Einträgen identischer Struktur entspricht. Dabei sind nur jene Felder mit Namen versehen, die für den Job Bedeutung haben. Aus mnemotechnischen und didaktischen Gründen wurden Bezeichnungen gewählt, die eine unmittelbare Brücke zur Digital-Research-Nomenklatur schlagen und die dem erfahrenen CP/M-Programmierer deswegen vertraut sind. In diesen Variablen lassen sich deswegen Strukturen bequem füllen und auswerten. Den Zeilen 67...69 ist zu entnehmen, wie CMDMAK unerwünschte Einträge erkennt und verwirft; ansonsten wird auf die ausführlich gehaltene Kommentierung im Programmtext selbst verwiesen. Sie ist deswegen in englischer Sprache abgefaßt, weil es für zahlreiche Fachausdrücke, die spezifisch für das Betriebssystem CP/M sind, keine allgemein benutzten deutschen Entsprechungen gibt.

Störungsfreier Betrieb auf mehreren Rechnern

CMDMAK liest die vorgewählten Laufwerk („Default Drive") befindliche Diskette oder Festplatte und fertigt zwei Verzeichnisse. Beide umfassen den vollen USER-Bereich von 0...31; eines wird durchnumeriert über den Konsolen-Kanal unter Angabe aller von Null abweichenden USER-Nummern ausgegeben, das zweite als File „PSEND.CMF" auf die Scheibe im Boot-Laufwerk geschrieben. Eine weitere Bearbeitung dieser Aufzeichnung erfolgt bei Bedarf mit den Kernighan/Plaugerschen „Software-Tools" [6]. Endprodukt ist eine Sammlung von Steueranweisungen für „PROGSEND". Das Programm CMDMAK arbeitete auf verschiedenen 8- und 16-Bit-Rechnern der Firmen Apple, Columbia, ELab-Hoffmann, IBM, ITT und Wave Mate störungsfrei.

[1]Joepgen, Hans-Georg: Programm-Transfer über Drucker-Schnittstelle., mc 1982, Heft 8, Seite 31...35.
[2]Joepgen, Hans-Georg: Microshell-Ergänzung zum CP/M. mc 1983, Heft 5, Seite 66...67.
[3]Kildall, Gary: CP/M 2.2 User Reference Manual. Digital Research Inc. Pacific Grove, California. First Printing, July 1982.
[4]Digital Research (Herausgeber): CP/M-86 Operating System Programmer's Guide. Pacific Grove, California. Second Printing, June 1981.
[5]Microsoft Consumer Products (Herausgeber): Softcard, Volume I. Bellevue/Washington 1980.
[6]Kernighan, Brian W. und Plauger, P.J.: Software Tools in Pascal. Addison-Wesley Publishing Company. Reading/London/Amsterdam/Sidney 1981.
[7]Joepgen, Hans-Georg: Betriebserfahrungen mit Pascal MT Plus. mc 1982, Heft 11, Seite 34...38.

Bild 1. Extraktion von Platten- und Disketten-Inhaltsverzeichnissen auch aus fremden User-Bereichen ermöglicht das Programm CMDMAK. Es fertigt darüber hinaus eine Anweisungsdatei PSEND.CMF zur Steuerung automatisierter Dalentransfers bei der Rechner-Rechner-Kommunikation
Modified source for TURBO Pascal

Found (  1): BILD2   .         Found ( 15): EPSONDT .COM
Found (  2): FOKO    .COM      Found ( 16): TEXTE   .CP
Found (  3): CPRDP   .COM      Found ( 17): I       .COM
Found (  4): TXTABAK1.###      Found ( 18): MT+5-6  .DOC
Found (  5): 'B30811A.024      Found ( 19): GERMAIN .
Found (  6): STEUER82.REI      Found ( 20): EPSPROP .
Found (  7): STEUER82.SON      Found ( 21): EPSON   .COM
Found (  8): EPSONUS .COM      Found ( 22): USERTEN .    <--- This file from user area 10.-
Found (  9): STEUERB2.FRE      Found ( 23): CMDMAK  .SRC
Found ( 10): AUTOKO  .COM      Found ( 24): CMDMAK  .COM
Found ( 11): STEUER82.VER      Found ( 25): USER9   .9   <--- This file from user area 9.-
Found ( 12): PL1-14  .DOC      Found ( 26): HIDDEN  .PS  <--- This file from user area 31.-
Found ( 13): PIP     .COM      Found ( 27): SECRET  .!!  <--- This file from user area 1.-
Found ( 14): LST2    .COM      Found ( 28): LST     .COM
Bild 2. Bei der Konsolen-Ausgabe schlägt CMDMAK Alarm, wenn es auf in fremden Benutzerbereichen verborgene Aufzeichnungen stößt. Dabei wird auch der USER-Bereich 16...31 erfaßt, der über klassische CP/M-Mittel nicht erreichbar ist

Scanned by Werner Cirsovius
December 2002
© Franzis' Verlag