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:
Den C-Compiler (cc.ttp, cpp.prg, cc0.prg - cc3.prg)
Den Assembler (as.prg)
Den Linker (ld.prg)
Die Shell, hier MicroShell (msh.prg)
Das Makeprogramm (wie von UNIX her bekannt) (make.prg)
Den Editor icromacs (me.tos) (zusätzlich als C-Code mitgeliefert)
Den Librarian (ar.prg)
Den Debugger (db.prg)
Das Help-Programm (help.ttp)
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 |