PMA-Archive am PC nutzen
von Mario Leubner
Das Pack-Format *.PMA ist unter CP/M sehr beliebt. Beim Datenaustausch von CP/M-Programmen über den PC und das Internet landen PMA-Dateien zwangsläufig auch auf dem PC. Aber das PMA-Format läßt sich nicht ganz ohne Weiteres am PC verwenden, denn in der PC-Welt werden andere Pack-Formate, meist *.ZIP verwendet und die Packprogramme wie Winzip oder PowerArchiver können mit PMA-Dateien nichts anfangen.
Möglichkeit 1: PMA.COM
Mein erster Schritt war eine Suche im Internet nach einem Windows-Packprogramm, das PMA-Dateien lesen kann. Leider bin ich da nicht fündig geworden. Für MS-DOS gibt es zumindest ein Leseprogramm PMA.COM, das wie PMARC/PMEXT ebenfalls von dem Japaner Yoshihiko Mino stammt. Es ist die Version 0.20 von 1991, wurde aber wahrscheinlich nicht weiter entwickelt. Das Kommando gibt folgende kurze Hilfeseite aus, wenn man es ohne Parameter aufruft:
PMA Version 0.20 Copyright(C) 1991 by Yoshihiko Mino Usage: PMA <command> [-<option>[0|1]] <archive> [<drive>:][<directry>\] [<filematch>] Commands: L : display Listing of archive C : display Complete listing E : Extract files from archive X : eXtract with pathname Options: -A : extract with Attribute -C : Complete listing -D : Differentiate upper/lower case -F : overwrite Forcefully -N : do Not display counter -P : discriminate pathname Precisely -S : work Silently (no message) -X : use eXpanded pathname
Es eignet sich also zum Anzeigen des Archivinhaltes genauso wie zum Entpacken von PMA-Archiven. Das Erstellen von neuen PMA-Archiven ist allerdings nicht vorgesehen. Ich habe mir den Dateityp .PMA mit diesem Programm verknüpft. So kann ich zumindest per Doppelklick auf die Datei deren Inhalt ansehen. Man kann manuell auch noch ein Symbol (z.B. von Winzip) auswählen und sieht dann sofort am Symbol, daß es ein Archiv ist.
Möglichkeit 2: MYZ80
Eine andere Möglichkeit ist die Verwendung eines CP/M-Emulators:
Ich verwende seit längerer Zeit schon MYZ80 von Simeon Cran. Das ist ein wunderbares Programm, um eine vollständige CP/M-Umgebung am PC zu simulieren. Es ist ein in sich abgeschlossenes System, das unter MS-DOS oder in der DOS-Box von Windows läuft. Zur Verfügung stehen drei CP/M-Laufwerke A:, B: und C: mit jeweils maximal 8 MByte und ein RAM-Floppy D: mit 1 MByte. Die drei Laufwerke werden dabei als "Containerdatei" mit den Namen A.DSK, B.DSK und C.DSK im DOS-Verzeichnis abgelegt.
Der Kontakt zur "Außenwelt", also zum MS-DOS-Filesystem erfolgt über die beiden Spezialkommandos EXPORT und IMPORT. Von DOS oder Windows aus kann man nicht auf einzelne Dateien des CP/M-Systems zugreifen (das ist ungefähr so wie eine CP/M-formatierte Diskette unter Windows). Um mit dieser Technik PMA-Archive zu erzeugen, muß man zunächst die einzelnen Dateien in den Emulator importieren, dann dort packen und anschließend wieder exportieren. Das funktioniert gut, ist aber etwas umständlich, wenn man die einzelnen Dateien nicht direkt im Emulator benötigt. Einen Vorteil hat diese Variante allerdings auch: MYZ80 läßt sich mit ZSDOS installieren, dazu einen Uhrentreiber und das Z-System und man hat auch Datumsstempel. Dabei wird direkt die Systemuhr des PC gelesen.
Möglichkeit 3: PMARCPC.ZIP
Bei der weiteren Suche im Internet bin ich auf ein weiteres Programmpaket für MS-DOS gestoßen. Es verspricht das Packen und Entpacken von PMA-Archiven direkt unter MS-DOS und stammt von Wolverine Logan (1997). Der Inhalt des Programmpaketes ist recht interessant: Es sind alle Programme PMARC.COM, PMEXT.COM, PMCAT.COM usw. enthalten - das gesamte Paket der CP/M-Programme. Zu jedem Programm existiert noch eine gleichnamige Datei mit der Erweiterung .CPM, also PMARC.CPM, PMEXT.CPM usw. Und schließlich ist noch eine Datei -22NCE.COM enthalten. Das klingt so ähnlich wie der CP/M-Emulator 22Nice von Sydex, den es leider nicht mehr offiziell gibt. Bisher hatte ich mich mit 22Nice auch noch nicht beschäftigt und bin deshalb etwas (zu) vorsichtig herangegangen.
Also erst mal nur die COM-Dateien in ein Verzeichnis geladen und PMEXT aufgerufen. Außer einer nichtssagenden kryptischen Anzeige passierte nichts auf dem Bildschirm. Da fiel mir auf, daß alle COM-Dateien die gleiche Größe von genau 512 Bytes haben. Das kann ja eigentlich nicht sein! Also vermutete ich, daß die Dateien *.CPM irgendwie dazugehören müssen und nur von den COM-Dateien aufgerufen werden? Also auch alle Dateien *.CPM mit in das gleiche Verzeichnis kopiert. Der nächste Aufruf ergab nicht viel mehr Reaktionen. Irgendwie funktioniert das so noch nicht - also auch noch die Datei -22NCE.COM dazu kopiert. Und siehe da: Es zeigt sich etwas, und zwar die gleiche Reaktion, als hätte man PMARC vom CP/M-Prompt aufgerufen! Ich schaute mir die einzelnen Dateien etwas näher an und stellte folgendes fest:
- Alle Dateien *.COM sind identisch bis auf ein paar Bytes, in denen der Dateiname der Datei *.CPM abgelegt ist. Sie dienen offensichtlich nur dem Aufruf der CP/M-Datei unter DOS.
- Alle Dateien *.CPM sind (fast) identisch mit gleichnamigen CP/M-Kommandos *.COM. Um Verwechslungen mit direkt aufrufbaren COM-Dateien von MS-DOS zu vermeiden, wurden Sie umbenannt in *.CPM.
- Die Schlüsselrolle spielt die Datei -22NCE.COM, die eine CP/M-Umgebung direkt auf MS-DOS-Ebene emuliert. Es handelt sich dabei um 22Nice in der Version 1.42 (die wahrscheinlich letzte Version von 22Nice?). Man bekommt nicht einmal mit, ob das aufgerufene Kommando unter CP/M oder MS-DOS läuft. Der Zugriff erfolgt direkt in das Verzeichnis von MS-DOS und auch die Ausgaben laufen direkt zur Zeichenausgabe von MS-DOS. Der CP/M-Emulator -22NCE wird dabei nur temporär geladen, es ist aber auch möglich, 22NCE permanent in den Speicher zu laden, indem man -22NCE direkt aufruft. Dann wird nur noch die CPM-Datei dazugeladen.
Für die PMARC/PMEXT-Packprogramme hat diese Variante den Vorteil, daß man nicht erst die Dateien in ein anderes Filesystem übertragen muß und direkt bearbeiten kann - so als wären die Programme für MS-DOS geschrieben. Von Nachteil ist jedoch, daß 22Nice offenbar nur ein reines CP/M 2.2 emuliert, ohne Zusätze wie Datum/Zeit-Stempel. Dadurch erhält man auch keine gültigen Zeitangaben in den Archiven.
Fazit: Mit dem Paket aus PMARCPC.ZIP kann man komfortabel mit PMA-Archiven arbeiten, wenn man keinen Wert auf Datum/Zeit-Angaben legt. Wer Datum und Uhrzeit braucht, muß auf MYZ80 zurückgreifen. Dort läßt sich ZSDOS benutzen und dazu auch NZCOM und man hat mit den ZSDOS-Versionen von PMARC und PMEXT Zugriff auf die Datum/Zeit-Angaben. Hier besteht nur noch das Problem, die korrekten Datum/Zeit-Angaben in das Filesystem von MYZ80 zu bringen. Für den Export habe ich dazu das Programm EXPORT.COM bereits angepaßt, das gleiche wäre noch für den Import notwendig.
Beschreibung zum PMARCPC
Als weiteres habe ich einige interessante Punkte aus der Beschreibung des MS-DOS-Paketes PMARCPC.ZIP aus dem englischen frei übersetzt und etwas abgewandelt. Es trifft (wie oben erläutert) nicht nur für MS-DOS zu, die grundlegenden Aussagen gelten genauso für CP/M:
*** PMarc compression utility for CP/M *** (c) 1990,1991 by Yoshihiko Mino *** Ported to IBM-PC by Wolverine Logan, (c) 1997 *** *** PMarc help manual *** Compiled by Wolverine Logan, 1997 *** Deutsche Übersetzung: M. Leubner, 2002/2003
Als ein Dienstprogramm für CP/M, unterstützt PMARC/PMEXT nicht die Verwendung von Verzeichnissen in der Kommandozeile - nur Laufwerksbuchstaben. Um Verzeichnisse zu benutzen, kann das DOS-Kommando SUBST verwendet werden, zum Erzeugen vorgetäuschter Laufwerke zur Arbeit mit PMARC/PMEXT.
PMARC.COM: Dieses Dienstprogramm erzeugt LZH-ähnliche Archive mit der Erweiterung .PMA. Es komprimiert so effektiv wie das MS-DOS-Programm LHA, aber es ist nicht vollständig kompatibel (Sie können mit LHA das Verzeichnis lesen, aber keine Dateien aus dem Archiv entpacken). Der Aufruf von PMARC vom DOS-Prompt listet eine Reihe von Optionen auf.
PMEXT.COM: Dieses großartige Programm entpackt PMA- wie auch LZH-Archive (einschließlich der Kompressionsmethode -lh5-), und ist sehr schnell verglichen mit anderen Entpackern (z.B. LHRD und LHX). Der Aufruf von PMEXT ohne Dateinamen zeigt weitere Informationen.
PMEXE.CPM: Dies ist ein Modul, das nur in Verbindung mit PMARC benutzt werden kann. Es wird verwendet, um ausführbare komprimierte COM-Dateien zu erzeugen (so wie LZEXE oder PKLITE für MS-DOS). Zum Erstellen solcher Dateien dient das Kommando:
PMARC <archive>.COM=PMEXE2.CPM <filename> [options]
Als Archivdateiname muß .COM angegeben werden, nicht PMA! Die Ausgabedatei hat jedoch dann die Erweiterung .CPM. Erzeugt wird eine COM-Datei für CP/M, die nicht unter MS-DOS arbeitet. Um die Datei unter CP/M auszuführen, muß sie noch in .COM umbenannt werden.
PMSFX.CPM: Dieses Modul wird ebenfalls mit PMARC verwendet. Es wird verwendet, um selbstentpackende (SFX) Archive zu erzeugen:
PMARC <archive>.COM=PMSFX2.CPM <filenames> [options]
Als Archivname muß auch hier .COM angegeben werden. Die Ausgabedatei erhält die Endung .CPM. Es entsteht eine COM-Datei für CP/M, die nicht unter MS-DOS ausführbar ist. Um die Datei unter CP/M auszuführen, muß sie noch in .COM umbenannt werden.
PMSET.COM: Das ist ein Programm, mit dem man die Standard-Optionen von PMARC setzen kann. Der Aufruf ohne Parameter gibt eine Hilfe aus, welche Parameter hier angegeben werden können.
PMCAT.COM: Das ist ein Programm, mit dem man .PMA-Archive aktualisieren, verketten oder enthaltene Dateien löschen kann. Der Aufruf ohne Parameter gibt auch hier eine Hilfe aus.
Anmerkung: Mit den Programmen des PMA-Programmpaketes kann man auch LZH-Archive (des MS-DOS-Programmes LHA 2.11) bearbeiten. Dabei werden diese aber dann in das PMA-Format konvertiert und lassen sich anschließend nicht mehr mit LHA zu entpacken.
Zusatz-Information zur Verwendung der PMArchive Software
In Ergänzung der Kommandos und Optionen, die der vorhergehenden Beschreibung und der Hilfe entnommen werden können, gibt es einige SEHR nützliche Dinge, die nicht beschrieben wurden:
Erstens arbeiten die Programme PMARC und PMEXT mit Mehrfachdateien: wenn z.B. Jokerzeichen (? oder *) bei PMEXT verwendet werden, dann durchsucht es ALLE passenden Archive, nicht nur das erste gefundene! Das ist sehr nützlich, wenn man eine Diskette mit vielen Archiven hat und jedes mit einer Gruppe von Programmen.
Außerdem unterstützt PMEXT weitere Gerätenamen; wie sich gezeigt hat mit folgender Syntax:
PMEXT [D:]<filename><extension> {device:}<filematch>(options)
Alle Parameter sind optional. D: und device: verwenden das aktuelle Laufwerk wenn sie weggelassen werden. Zur Ergänzung der {device:} Option kann die Ausgabe zu folgenden anderen Geräten umgeleitet werden:
- A: - P: ... zu den normalen Laufwerken
- LST: ... Ausgabe zum aktuellen Drucker; wenn die Option /P(aginate) angegeben wurde, mit Seitenwechseln in Intervallen, die mit PMSET eingestellt wurden.
- PUN: ... Ausgabe zum CP/M 2.2 Punch-Gerät (Zusatzausgabe) oder was immer die BIOS-Funktion damit anspricht. (beim KC: V.24-Ausgabe!)
- CON: ... Ausgabe auf der Konsole; wenn die Option /P(aginate) benutzt wird, mit weiteren Funktionen, die per Tastendruck erreicht werden. Nachdem der Bildschirm mit Text gefüllt ist, kann man Enter/Return A, B, Q, X oder die Leertaste drücken. Jede Taste führt eine spezielle Funktion aus:
- Enter ... Bildschirm löschen und nächsten Bildschirm voll anzeigen.
- A ... Abbruch dieser Dateiausgabe.
- B ... Geht eine Seite zurück (nur bis zur ersten Seite des aktuellen Blockes)
- Q ... Verläßt die Lesefunktion und beendet das Programm zum DOS-Prompt.
- X .... Zeigt jeweils eine weitere Zeile an.
- Space ... Zeigt die nächste volle Seite an ohne den Bildschirm vorher zu löschen.
Ein Beispiel-Kommando könnte wie folgt aussehen:
A>PMEXT B:* CON:*.DOC/I/P
PMEXT wird von Laufwerk A geladen. Dann sucht es im Laufwerk B: nach allen Dateien ????????.PMA und wenn welche gefunden werden, sucht es in deren Verzeichnissen nach DOC Dateien, nicht zutreffende Dateien werden nicht aufgelistet. Wenn eine Datei gefunden wird, wird diese seitenweise am Bildschirm ausgegeben. Nun kann man unter Verwendung der verschiedenen Tasten die Datei betrachten. Wenn mit der Taste A abgebrochen wird oder das Textende erreicht und mit Enter bestätigt wurde, dann wird die Suche nach der nächsten DOC Datei fortgesetzt bis das letzte Archiv durchsucht wurde oder die Taste Q während des Lesens betätigt wurde.
PMEXT enthält damit einen guten Textbetrachter!
Als Anmerkung noch ein Wort zu den erreichbaren Kompressionsraten und ein Vergleich verschiedener Archive von CP/M und MS-DOS bzw. Windows:
PMARC ist der leistungsfähigste Packer der CP/M-Welt. Ob ARK oder LBR in Verbindung mit verschiedenen Kompressionsmethoden (CRUNCH, CHLZH, ...), alle packen schlechter als PMARC. Dazu packt PMARC schneller als CRLZH20, was der nächstbeste Algorithmus unter CP/M ist. Beim Vergleich mit PC-Packern steht PMARC auch nicht schlecht da. Besser als PMARC packt nur ARJ, ZIP und CAB, wobei ZIP, CAB, LZH, ARJ und PMA nur sehr wenig auseinander liegen. Funktionsbedingt ist dies allerdings auch noch etwas abhängig von den verwendeten Ausgangsdateien zum Packen.
Der größte Mangel des Paketes mit PMARC/PMEXT ist, daß keine USER-Bereiche unterstüzt werden!
Danksagungen:
- Hilfetexte von PMEXE,PMSFX,PMSET,PMCAT,PMARC,PMEXT von Pierre Gielen (Nijmegen, The Netherlands);
- Text mit Extra-Informationen zur Anwendung des PMArchive-Paketes von Johnathan Taylor 06/02/93;
- PMarc-Paket portiert auf IBM-PC's von Wolverine Logan, (c) 1997
So viel zu den PMA-Paketen für MS-DOS. Wenn man sich damit etwas beschäftigt hat, kommt man zwangsläufig auf die Idee, auch andere CP/M-Programme unter MS-DOS auszuführen. Das war die Idee von 22Nice, und es funktioniert recht gut. Wie bereits angemerkt, wird 22Nice jedoch nicht mehr offiziell angeboten und unterstützt. Es ist aber im Internet noch zu haben, z.B. von:
Vielleicht schreibe ich ja dazu mal einen separaten Artikel.