Mark Williams 'C'

Für MS DOS Rechner ist seit einiger Zeit ein Compiler von Mark Williams verfügbar, der jetzt in einer Umsetzung für den ST erschienen ist. Als Benutzeroberfläche wird eine SHELL benutzt, die sich stark an UNIX anlehnt, so daß für alle UNIX Benutzer eine schnelle Einarbeitungszeit gewährleistet ist. Geliefert wird das System auf 2 doppelseitig bespielten Disketten und einem 643 Seiten starken englischen Handbuch. Die Arbeit mit dem MWC beginnt damit, daß die Programme der Diskette auf eine Harddisk oder eine andere doppelseitige Diskette installiert werden. Das Kopieren der Files wird von einem speziellen INSTALL Programm erledigt. Der ganze Vorgang benötigt einige Zeit (auch bei Harddisk), so daß man erst einmal einen ausführlichen Blick in das Handbuch werfen kann. Es besteht aus 3 Teilen: Einer allgemeinen Beschreibung des Compilersystems (543 Seiten), einer Beschreibung des MAKE Utilities (25 Seiten) und einer abschließenden Erklärung des Editors MicroEMACS, der ein Subset des EMACS Editors darstellt. Der Editor arbeitet konventionell im Text Modus des ST und bietet neben den üblichen Befehlen auch die Aufteilung des Textes in mehrere Abschnitte (im Handbuch Windows genannt) und das Festlegen eines Makros (beliebiger Text kann gespeichert und auf Tastendruck wieder ausgegeben werden). Als besonderer Clou ist der Sourcetext zu diesem Editor mit auf der Diskette (in C), so daß man neue Befehle selbst implementieren kann. Der Compiler-Vorgang kann direkt aus dem Editor gestartet werden, indem eine Kommandozeile direkt an die SHELL übergeben wird. Hier ein kleiner Überblick der Kommandos der mitgelieferten Shell MSH:

mv: Umbenennen eines Files
cp: Kopieren eines Files
rm: File löschen
mkdir/rmdir: Erstellen/Löschen eines Directories
cd: Wechseln des Directories
ls: Zeigt Verzeichnis der Files an (üblich: DIR)
cat/tail: Ausgabe eines Files (üblich: TYPE)
pr: Formatieren eines Textfiles für Druckerausgabe
touch: Datum eines Files aktualisieren
file: Ermittelt den Typ eines Files (Textfile, GEMDOS File, Ordner)
version: Liest bzw. generiert Versionskennzeichen eines Files
cmp/diff: Vergleicht zwei Files auf Unterschiede
size/wc: Gibt Größe / (Anzahl Worte, Zeilen) aus
sort: Sortiert File zeilenweise
uniq: Gibt mehrfach vorhandene Zeilen aus
ar: Startet Archive Programm zum Bearbeiten einer Object-File-Library
nm: Gibt die Symbol Tabellen aus Object-Files aus
db: Startet symbolischen Debugger (für MWC C-Files)
crashdmp: Gibt "post-mortum-dump" nach einem System Absturz aus
drtomw: Konvertiert DIGITAL Objekt Files in MWC Objekt Files
gem: Schaltet Text Modus aus und startet GEM Programm

Die Hauptprogramme in dieser Arbeitsumgebung werden vom Compiler (cc) und Linker (ld) gestellt. Der eigentliche Vorgang des Compilierens geschieht in 4 Durchgängen: Der Preprozessor ersetzt seine Direktiven (* include, yt define, etc.), danach erstellt der Parser den Zwischencode aus dem Source-Text. Dieser wird vom Code-Generator in 68000 Maschinensprache übersetzt. Als letzter Pass wird dieser noch von einem Optimizer abgearbeitet, der auch den Objekt-Code erstellt. Zusätzlich kann noch ein Disassembler zugeschaltet werden, der den Objekt-Code als Assembler File ausgibt. Dieses kann nach kleinen Änderungen mit dem mitgelieferten Assembler wieder in ein ObjektFormat gewandelt werden.

Da die Angabe von Assemblercode im C-File nicht direkt möglich ist, können zeitkritische Routinen nur direkt mit dem Assembler entwickelt werden und werden als Files mit dem Dateityp "S" dem Compiler übergeben.
Die Größe der Datentypen ist beim MWC mit der beim DIGITAL Compiler identisch (also int = 2 Bytes, short = 2 Bytes).

Der Compiler startet normalerweise den Linker automatisch und kann als Eingabe mehrere C-Source-Files und auch Objekt-Files verarbeiten. Auch die Übergabe von Parametern (-Dname = Wert) ist möglich.
Um ein einfaches Programm wie HELLO.C zu compilieren, wird als Befehlszeile das übliche CC HELLO.C eingegeben.

Die Compilation erfolgt dann einwandfrei, aber der Linker meldet, daß in der GBibliothek LIBC.A das Verzeichnis der Symbolnamen nicht mehr aktuell ist. Wenn man diese Datei mit dem Archive-Programm bearbeitet, kann das Modul RANLIB.SYM auf den aktuellen Stand gebracht werden. Leider ist diese Fehlermeldung im Handbuch nicht aufgeführt, so daß ich erst nach einiger Zeit die Ursache dafür gefunden hatte.

Das Entwanzen von Programmen kann mit dem symbolischen Debugger DB vorgenommen werden, der die lauffähigen Programme auf Assemblerebene mit Angabe der Symbolnamen disassemblieren und ausführen kann.
Um einen Vergleich zu den anderen CCompilern zu haben, habe ich zum Testen des eigentlichen Compilers die gleichen Programme wie beim MEGAMAX Test im September verwendet. Das MWC System braucht zum Compilieren und Linken der Programme ca. 2 bis 4 mal so lange wie der MEGAMAX. Der erzeugte Code ist in gewissen Grenzen vergleichbar, allerdings benötigen die Systembibliotheken mehr Speicherplatz.

Zusammenfassend kann gesagt werden, mit dem MWC System erhält man ein sehr umfangreiches C-Entwicklungspaket, mit dem sich Standardprogramme von MS-DOS und UNIX einfach auf den ST portieren lassen. Die Unix C-Funktionen, GEMDOS, BIOS und XBIOS sind in der Dokumentation ausführlich beschrieben, allerdings hat man sich die Dokumentation der VDI und AES Funktionen gespart. Die mächtige Shell ist komfortabel gestaltet, arbeitet allerdings nur in einem reinen Textmodus. Wer mit dem MWC vernünftig arbeiten will, sollte eine Harddisk besitzen, da die Systemprogramme mit der Shell nicht auf einer Ramdisk zu installieren sind (es sei denn man hat einen 2 Megabyte Atari) und auf Diskette die Zeiten für das Compilieren und Linken nicht sehr gut sind.

Die Software umfaßt:

  1. Den C-Compiler (cc.ttp, cpp.prg, cc0.prg - cc3.prg)

  2. Den Assembler (as.prg)

  3. Den Linker (ld.prg)

  4. Die Shell, hier MicroShell (msh.prg)

  5. Das Makeprogramm (wie von UNIX her bekannt) (make.prg)

  6. Den Editor icromacs (me.tos) (zusätzlich als C-Code mitgeliefert)

  7. Den Librarian (ar.prg)

  8. Den Debugger (db.prg)

  9. Das Help-Programm (help.ttp)

  10. Weitere 18 Hilfsprogramme, zum größten Teil aus der UNIX/Coherent-Welt stammend.

Programm Mark Williams C MEGAMAX
Dhampstone 17 Sekunden 5 Sekunden Compilieren
21 Sekunden 10 Sekunden Linken
26 Sekunden 24 Sekunden Ausführungszeit
18 931 Bytes 9 765 Bytes Programmgröße
GEMBIND 9 Sekunden 3 Sekunden Compilieren
13 Sekunden 9 Sekunden Linken
26 Sekunden 28 Sekunden Ausführungszeit
7 493 Bytes 6 861 Bytes Programmgröße
Hello World 7 Sekunden 2 Sekunden Compilieren
13 Sekunden 8 Sekunden Linken
7 073 Bytes 6 575 Bytes Programmgröße

Oliver Joppich
Aus: ST-Computer 02 / 1987, Seite 16

Links

Copyright-Bestimmungen: siehe Über diese Seite