C 64/C 128
Softwaretest

Small C – der C-Compiler für Systemprogrammierer

Die Sprache C verbindet die Vorteile einer Hochsprache in fast idealer Weise mit denen von Assembler. Mit Small C kann sich jeder CP/M-Anwender selbst davon überzeugen. Geliefert wird Small C auf drei (!) Disketten im 1571-Format. Der Clou: Alle Programme werden mit Quelltext ausgeliefert. Wer Lust und Laune hat, kann sich so sehr schnell ein sehr eigenständiges System aufbauen, bestehend aus Compiler, Z80-Makro-Assembler, Linker und Text-Tools. Mit Hilfe des mitgelieferten Quellcodes können alle Bestandteile der Software beliebig geändert werden. Man kann den Compiler erweitern, die Text-Tools mit eigenen Ideen bereichern oder Assemblerprogramme schreiben. Wie schon das Handbuch verrät, ist Small-C kein Compiler für große Anwendungen, sondern eher als Entwicklungssystem gedacht. In dieser Funktion aber ist es eine empfehlenswerte Alternative zur Z80-Assemblerprogrammierung.

Der Compiler selbst namens »CCCOM« ist mit einem weiteren Programm »ARCOM« auf einer der drei Disketten zu finden. Mit »ARCOM« können Archivdateien verwaltet werden. In einer Archivdatei sind mehrere Dateien in einer großen Datei zusammengefaßt. Das Archivverwaltungsprogramm »ARCOM« bearbeitet diese Datei nun im vom Anwender gewünschten Ausmaß. Es können jederzeit neue Dateien in das Archiv aufgenommen werden, ebenso kann nach Herzenslust gelöscht und hinzugefügt werden. Natürlich ist auch ein Zerlegen der Archivdatei in ihre Bestandteile möglich. Der praktische Nutzen eines Archivs liegt im Anlegen von Bibliotheken für bestimmte Anwendungen. Die anwendungsspezifischen C-Funktionen, die der Anwender sich selbst erstellt hat, können so platzsparend und vor allem schnell auffindbar in Archivdateien gesichert werden.

Einen kleinen Nachteil des Compilers bemerkt man bereits beim ersten fehlerhaften Durchlauf: die sonst sehr eindeutigen Fehlermeldungen lassen völlig die Zeilennummer vermissen, In der der Fehler aufgetreten ist. Dafür wird aber die gesamte fehlerhafte Zeile angezeigt, wobei die genaue Fehlerposition markiert ist. Wie bei allen Bestandteilen des Small-C-Pakets hat man auch beim Compiler die Möglichkeit, verschiedene Parameter zu übergehen, sobald ein Fehler auftritt oder der Quellcode wird während der Compilierung auf einem Gerät nach Wahl ausgegeben. Der Compiler erzeugt 8080-Quellcode, der in eine Ausgabedatei vom Typ »MAC« (für Macro-Assembler) geschrieben wird.

Aufbau des Small-C-Pakets

Den vom Compiler in Assembler übersetzten Quellcode wandelt der auf der zweiten Diskette befindliche Macro-Assembler in eine für den Linklauf nötige Datei um. Auch beim Assemblieren können wieder verschiedene Parameter die Ausgabe auf dem Bildschirm beeinflussen. Selbstverständlich kann der Macro-Assembler auch völlig unabhängig vom C-System eingesetzt werden. Der Assembler kann wahlweise als 8080- oder als Z80-Assembler eingesetzt werden und erzeugt in beiden Fällen relokatiblen Objektcode, der vom Linker zusammen mit beliebigen anderen Modulen gebunden werden kann. Der Linker schließlich erweist sich als das schwächste Glied in der Umwandlungs-Kette. Denn hier braucht selbst der erfahrene Anwender eine gehörige Portion Geduld, wenn der Linker alle benötigten Bibliotheksfunktionen nach und nach aus der Bibliothek »CLIB.REL« holt und zu einem ablauffähigen COM-File zusammenbindet. Dieser große Zeitbedarf von mehreren Minuten selbst bei kleinen Programmen geht allerdings zu einem guten Teil auf das Konto der für ein CP/M-System einfach zu langsamen Commodore-Laufwerke. Doch am Ende hat man auf jeden Fall ein vollablauffähiges Programm zur Verfügung, dessen Geschwindigkeit doch recht beachtlich ist und über den Zeitverlust beim Linken hinwegtröstet (siehe Listing 1 und Tabelle 1).

type test.c
/*    Small C Laufzeit-Test    */
/* Herunterzaehlen von 10000 */

include "stdio.h"

main()
{
    int i;

    i=10000;
    printf ("\nS T A R T");
    getchar ();

    while (i) i--;

    printf ("\n\nF E R T I G");
    getchar ();
}
Listing 1. Laufzeit-Testschleife in »C«
Compilierzeit 28,7 s
Assemblierzeit 33,1 s
Linkzeit 4 min. 40,4 s
Ausführungszeit 1,4 s
Tabelle 1. Zeiten für Übersetzung und Ausführung des Demo-Programms »Laufzeittest«

Die Text-Bausteine

Sehr lobenswert erscheint der Umfang der mitgelieferten Text-Tools. Da findet sich neben einem Editor und einem Formatierprogramm auch jede Menge Nützliches zur Bearbeitung der Quelltexte (Tabelle 2). Weder ein Kopierprogramm noch ein Programm zum Auswählen der Schriftarten für Epson-Drucker fehlen hier. Wer viel sortiert kann dies mit einem leistungsfähigen Sortierprogramm tun. Sogar zwischen Quicksort und Shellsort kann man hier wählen. Einen kleinen Nachteil hat die ganze Sache allerdings: Sämtliche Tools müssen erst compiliert werden, da sie nur im Quellcode vorhanden sind. Allerdings stellt diese Aufgabe selbst den Anfänger vor keinerlei Probleme, da alle Einzelschritte ausführlich im Handbuch beschrieben sind. Eines sei noch gesagt: Wenn sehr lange Programme, wie zum Beispiel der Editor, compiliert werden, muß schon etwas Zeit investiert werden. Vor allem der Linklauf ist wie bereits angesprochen, oft entnervend und zeitraubend.

CHG(Change) Ersetzen von Zeichenketten in Textdateien
CNT(Count) Zählen von Zeichen, Wörtern oder Zeilen
CPY(Copy) Kopieren von Textdateien
CPT(Crypt) Ver- und entschlüsseln von Dateien
DBT(Detab) Ersetzen von Tab-Zeichen durch Leerzeichen
EDT(Edit) Zeileneditor
ETB(Entab) Gegensatz von DBT
FND(Find) Suchen von Zeichenketten in Textdateien
FNT(Font) Auswahl von Schriftarten des Epson-FX-80 und kompatible Drucker
FMT(Format) Formatieren (Druck aufbereiten) von Textdateien
LST(List) Ausgabe von Textdateien auf den Bildschirm
MRG(Merge) Zusammenhängen von zwei sortierten Textdateien
PRT(Print) Drucken von Textdateien
SRT(Sort) Sortieren von Textdateien
TRN(Trans) Kopiert Textdateien und ändert Zeichenketten
Tabelle 2. Die »Small Tools« zur Bearbeitung von Textdateien

Der mitgelieferte Editor ist zwar nicht so komfortabel wie der CP/M-Editor ED, wenn man hier überhaupt von Komfort sprechen kann, aber die mitgelieferten Tools bieten hierzu sinnvolle Erweiterungen. Natürlich verarbeitet der Compiler auch Quellcodes, die mit dem regulären CP/M-Editor erstellt wurden.

Der Sprachumfang

Der Sprachumfang von Small-C kann sich für ein Entwicklungssystem durchaus sehen lassen. Zwar verfügt der Anwender nur über die Datentypen »char« und »int« sowie über entsprechende Pointer-Typen, doch dafür kann er aus einem großen Angebot von Funktionen wählen. Für den Systemprogrammierer interessant: Er kann auf eine Menge Funktionen zurückgreifen, die CP/M-Dateien manipulieren. So ist Small-C fast ideal zum Programmieren von CP/ M-Utllities wie Kopierprogrammen etc. Sehr lobenswert ausgefallen sind auch einige Funktionen zur Programmsteuerung. So können beispielsweise Parameter aus dem Programmaufruf und der Programmname durch eine spezielle Funktion ermittelt werden. Funktionen zur Zeichenkettenbehandlung und Zeichenklassifizierung erleichtern die Arbeit wesentlich. Auch die Zeichenumwandlung stellt kein Problem dar. Etwas zu kurz geraten ist Jedoch die Mathematikbibliothek: Sie besteht lediglich aus zwei Funktionen. Hier ist der experimentierfreudige C-Programmierer gefragt. Für die Formatierung von Integerwerten und Zeichenketten besticht Small-C mit einer sehr großen Auswahl. Umwandlungen von Zeichen nach Zahl und umgekehrt mit Rückgabe der Länge oder Umrechnungen von Hexadezimal- und Oktalzahlen werden voll unterstützt.

Fazit

Wer Spaß am Tüfteln hat und sich gerne eigene Systemprogramme schreibt oder mit der gelieferten Commodore CP/M-Software nicht zufrieden ist, dem bietet Small-C eine leicht zu erlernende Möglichkeit, seine Fähigkeiten unter Beweis zu stellen. Für einen Preis von 148 Mark erhält man ein leistungsfähiges Software-Paket, das alle Voraussetzungen zum Entwickeln von Systemsoftware und zum Einstieg in die Welt der C-Programmierung in sich birgt.

(Roland Fieger/bj)
PDF Diesen Artikel als PDF herunterladen
Mastodon Diesen Artikel auf Mastodon teilen
← Vorheriger ArtikelNächster Artikel →