Viel Zeit verging zwischen der Ankündigung auf der CeBit und der Auslieferung in Deutschland. In der IBM-Welt ist PROPASCAL von der englischen Firma Prospero Software längst ein Begriff. Das PRO im Namen deutet nicht auf den Hersteller hin, sondern auf die Anwender: Professionals. Dies macht sich nicht nur im Preis, sondern auch in der Benutzerfreundlichkeit bemerkbar. Das System wurde von Entwicklern für Entwickler gemacht und dementsprechend schwierig ist auch die Bedienung. Weder Windows noch Maussteuerung erleichtern dem Benutzer das Leben.
Bei der Verpackung drängt sich sofort der Gedanke an die MS-DOS Handbücher auf. Das Design ist identisch; A5 Ringbuch mit passender Box, beides gebunden. Das Handbuch ist in englischer Sprache verfaßt und umfaßt ca. 200 Seiten. Es ist in die vier Teile Einführung in PASCAL, Language Reference, Bedienung der einzelnen Programmteile und Anhänge (Fehlermeldungen, ASCII-Tabelle usw.) unterteilt. Dem PASCAL Anfänger wird zusätzlich zur Einführung noch ein Lehrbuch empfohlen, und das erscheint mir auch sinnvoll, speziell für solche, deren Sprachkenntnisse nicht die besten sind. Trotzdem ist die Einführung wegen der programmtechnischen Tips, die sie enthält, zu empfehlen.
In Teil zwei werden alle Elemente der Sprache beschrieben und anhand eines Beispiels erklärt. Der dritte Teil gibt Aufschluß über die Optionen der einzelnen Programmteile und wie man sie aktiviert sowie über die Installation des Systems.
Die fünf Anhänge enthalten eine Beschreibung der Notation, mit der in Teil zwei die Sprache beschrieben ist, eine Liste der Fehlermeldungen des Compilers, Run-time Fehlermeldungen, ASCII-Tabelle und Tips zum Einbinden von FORTRAN-Programmen.
Der Compiler erfüllt die ISO-Norm und verfügt darüber hinaus über zahlreiche Erweiterungen. Da wären z. B. die Strings, ohne die kaum noch ein PASCAL-Programmierer auskommt. Bei PROPASCAL handelt es sich um dynamische Strings mit einer Länge von maximal 32767 Zeichen (normal sind 255).
Um den Umgang mit Strings zu erleichtern, gibt es zahlreiche Funktionen, mit deren Hilfe Strings manipuliert werden können (siehe Tabelle 1).
Eine zusätzliche Erweiterung der Standardtypen stellt LONGREAL dar. Wie schon die Bezeichnung vermuten läßt, handelt es sich dabei um Realzahlen mit erhöhter Genauigkeit. Long-realzahlen werden mit einer Genauigkeit von 16 Dezimalstellen dargestellt. Bei normalen REAL-Zahlen muß man sich mit 7 Stellen begnügen. Dafür ist die Rechengeschwindigkeit dann auch doppelt so hoch. Vorsicht ist geboten, wenn man mit Konstanten arbeitet.
Bei einer Konstanten vom Typ Long-real wird der Exponent durch ein ’d’ gekennzeichnet. Schreibt man nach alter Gewohnheit ein e oder gibt keinen Exponenten an, werden die Ergebnisse verfälscht.
Für umfangreiche Projekte bietet der Compiler eine weitere wichtige Erweiterung des Standards, die Module. Wenn man eine Prozedur als Modul compilieren will, braucht man nur anstelle von PROGRAM den Standardbezeichner SEGMENT einzusetzen und das Hauptprogramm wegzulassen (siehe Bild 1).
SEGMENT screen;
{
*************************************************
* Prozeduren zur Bildschirmsteuerung a’la TURBO *
*************************************************
}
PROCEDURE gotoxy (x,y : INTEGER);
BEGIN
WRITE(CHR(27), ’Y’ ,CHR(32+y),(CHR(32-X));
END; { gotoxy }
{
*************************************************
}
PROCEDURE clrscr;
BEGIN
WRITE(CHR(27),’E’);
END; { clrscr }
BEGIN
END.
Bild 1 Modul SCREEN mit Routinen zur Bildschirmsteuerung
Den vom Compiler erzeugten Objektcode kann man dann entweder mit dem mitgelieferten Library-Verwalter in eine eigene Modulbibliothek einbinden (siehe Bild 3) oder direkt zum Hauptprogramm dazulinken.
; **************************************************************
; * Linker File zum linken von Pro Pascal Programmen unter TOS *
; * mit eigener Library ’USERLIB’ *
; **************************************************************
INPUT \LIB\PLINIT
INPUT *
LIBRARY \LIB\USERLIB
LIBRARY \LIB\PASLIB
INPUT \LIB\PLEND
DATA 4K
COMMON DUMMY
Bild 3 Link—Control—File Für TOS-Anwendungen mit Userlib
Um die Prozedur(en) dann für andere Programmteile zugänglich zu machen, müssen sie dort als EXTERNAL deklariert werden (siehe Bild 2). Der Hersteller liefert einige Prozeduren und Funktionen mit, die auf die gleiche Art benutzt werden können. Eine Liste der mitgelieferten Prozeduren und deren Funktion ist in Tabelle2 aufgeführt.
PROGRAM screentest; { Programm zum Testen des Segments ’SCREEN’ }
VAR i : INTEGER;
PROCEDURE gotoxy(x.y : INTEGER};EXTERNAL; { aus USERLIB }
PROCEDURE clrscr;EXTERNAL; { auch aus USERLIB }
FUNCTION PROMPT (s:STRING):BOOLEAN;EXTERNAL; { aus PASLIB }
BEGIN
REPEAT
clrscr;
FOR i := 1 TO 20 DO
BEGIN
gotoxy(i,i);
WRITE('PROPASCAL im Test');
END;
gotoxy(0,25);
UNTIL PROMPT(’Programm beenden ’);
END.
Bild 2 Hauptprogramm zum Testen des Screen-Moduls
Die Folgenden Funktionen sind voll in den Compiler integriert und müssen nicht als External definiert werden.
MOVE Variablenzuweisung ohne Typüberprüfung Cbis zu E4 K}
GETCOMM Liefert die Kommandozeile (Für .TTP Anwendungen}
SIZEOF Liefert den SpeicherplatzbedarF einer Variablen
ADDR Liefert die Speicheradresse einer Variablen
PEEK Liest eine Speicherstelle aus
POKE Modifiziert eine Speicherstelle
Tabelle 2 Zusätzliche Prozeduren und Funktionen
Besonders erwähnenswert sind die umfangreichen Hilfsmittel zur Behandlung von Dateien. Hier wurde an den Programmierer gedacht, der vorwiegend Anwendersoftware für den kommerziellen Bereich entwickelt. Zusätzlich zu den PASCAL-Prozeduren werden von Prospero noch 13 weitere Prozeduren zur Verfügung gestellt. Sie unterstützen den direkten Zugriff auf Dateien und bieten weitere nützliche Features (siehe Tabelle 3).
ASSIGN Zuordnung eines GENDOS-Files zu einer Filevariablen von PASCAL
seek Positionieren des Dateizeigers auF einen bestimmten Datensatz
POSITION Liefert die Position des Dateizeigers
UPDATE Öffnet eine Datei Für Schreib— und Leseoperationen
CLOSE Schließen einer Datei
ERASE Löschen einer Datei
FSTAT Gibt an, ob eine Datei mit dem angegebenen Namen existiert
CHECKFN Testet ob ein Dateiname zulässig ist
APPEND öffnet eine Datei um Datensätze anzuhängen
RENAME Umbenennen von Dateien
RAMFILE Hält TextFiles im Speicher Für schnelleren Zugriff
ECHO Aus— bzw. Einschalten des Echos auf der Console
HANDLE Liefert den Filehandle des BS (wird benötigt Für BS-AuFrufe)
Tabelle 3 Funktionen und Prozeduren zur Dateibehandlung
Selbstverständlich bietet Propascal auch eine Schnittstelle zu GEMDOS, BIOS, XBIOS, VDI und AES. Die Aufrufe von System- bzw. GEM-Routinen werden durch die mitgelieferten Include-files erleichtert. Sie enthalten sowohl die Prozedurdeklarationen als auch die Typdefinitionen. Die Namen der VDI- und AES-Aufrufe stimmen mit denen von Digital Research überein. Leider wird im Handbuch nur angegeben, wie die einzelnen Aufrufe definiert sind, und nicht deren Funktion. Das Handbuch von PASCAL plus geht an dieser Stelle weiter.
Der Compiler kennt zwei Directiven. Die sogenannten Include-Files werden auf die gewohnte Art ($1 filename) aktiviert und sind bis zu 4 Ebenen schachtelbar.
Die zweite Directive ($P) bewirkt einen Seitenvorschub im Compilerlisting.
Die Geschwindigkeit von Propascal und dem GST-Linker ist nicht überzeugend. Das mitgelieferte Beispielprogramm Gemdemo wurde aufgrund seiner Länge (ca. 32 KBytes) als Testbeispiel benutzt. Als Maßstab für die Geschwindigkeit mußte PASCAL plus von CCD herhalten. Hier das Ergebnis:
Compiler Linker
Propascal 53,2s 6,7s
PASCAL Plus 17,7s 3,1s
Alle Zeiten sind handgestoppt und wurden unter Verwendung der G-Data Ramdisk ermittelt. Die Zeiten sprechen für sich; PASCAL plus ist 3 mal schneller als Propascal, aber nur beim Compilieren. Die mit Propascal erstellten Programme laufen ca. 1,5 bis 2 mal so schnell wie PASCAL plus
Pro Pascal Cross-reference of: scrtest.PAS
boolean 3
clrscr 7, 13
external 5, 7, 3
gotoxy 5, IG, 13
i 3, 14, 16, IG
integer 3, 5
prompt 3, EO
s 3
screentest : 1
string 3
write 17
X 5
y 5
Bild 4 CrossreFerenzliste des Programms aus Bild E
Programme. Gemeint sind natürlich Programme, die hauptsächlich rechnen. Ein besonderes Bonbon des Pakets ist das Programm XREF. Es erstellt eine komplette Cross-Referenzliste von einem Pascal-Programm (siehe Bild 4). Diess Utility ist eine wertvolle Hilfe bei der Fehlersuche und unterstreicht den professionellen Charakter des Systems.
Ein weiteres nützliches Tool stellt der Bibliotheksverwalter dar. Mit seiner Hilfe können Bibliotheken erstellt und modifiziert werden. Er ermöglicht es, Teile aus einer Bibliothek zu löschen bzw. neue Teile dazuzubinden. Der Entwickler kann so seine selbstentwickelten Routinen in eine Library einstellen und braucht sie nur noch zu seinen Programmen dazuzulinken. Im Vergleich zu den Include-Files wird dabei Compilierzeit gespart.
In krassem Gegensatz zu den sonst hervorragenden Eigenschaften des Propascal-Systems steht das Runtime-Modul. Dieses Modul wird vom Compiler sowie von den Programmen während der Laufzeit benutzt und muß vorher im Speicher installiert werden. Dazu wird das Programm PRL (Pro-spero Resident Library) gestartet. Es belegt ca. 16 KBytes und ist im Speicher resident. Das hat zwar (laut Pro-spero) den Vorteil, daß Programme und Linkzeit kürzer sind, aber wie groß sind dagegen die Nachteile!
Wer eine Anwendung mit Propascal erstellt und sie dann verkaufen will, muß die PRL mitliefern. Im Handbuch wird keinerlei Aussage getroffen, ob in diesem Fall Lizenzgebühren fällig werden oder nicht.
Außerdem, wer will seinen Anwendern zumuten, zuerst PRL zu installieren und dann erst die eigentliche Anwendung zu starten?
Es ist zu hoffen, daß Prospero ein Einsehen hat und die PRL in Form eines Objektprogramms liefert, das beim Linken mit eingebunden werden kann. Vielleicht wird dann auch die Sache mit den Lizenzgebühren eindeutig im Handbuch geklärt.
Bis auf den eben genannten Wermutstropfen kann man das Propascal-System als durchaus gelungen bezeichnen. Um jedoch die angestrebte Käufergruppe (Profis) zu erreichen, muß noch einiges getan werden. Der für ST Verhältnisse hohe Preis von fast 600 DM wird die Hobbyisten sicher ab-schrecken und zu preisgünstigeren System greifen lassen. Zumal Prospero keinen Editor mitliefert und dieser noch zum Preis hinzuaddiert werden muß.