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).
CONCAT Dient zum Zusammensetzen von mehreren Strings
COPY Kapiert einen Teilstring aus einem Gesamtstring
INSERT FĂŒgt einen String in einen anderen ein
DELETE löscht Zeichen aus einem String
LENGTH Gibt die LĂ€nge eines Strings an
PDS Gibt die Position einer Zeichenkette in einem string an
STR Wandelt den Inhalt einer INTEGER-Uariable in einen String um
Tabelle 1 Stringmanipulation
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
MEMAVAIL Liefert die Anzahl der Bytes die im Heap zusammenhĂ€ngend zur VerfĂŒgung stehen
RAND Liefert eine Zufallszahl
SEED Setzt den Startwert des Zufallsgenerators
CONSINGLE Holt ein Zeichen von der Tastatur mit Echo auF dem Bildschirm
CONSILENT Wie CONSINGLE aber ohne Echo
PROMPT Gibt einen beliebigen String aus und wartet bis Y oder N eingegeben wird. Als Ergebnis wird True oder False gelieFert.
OWNERR Ermöglicht es Runtime-Errors abzuFangen und in einer eigenen Fehlerroutine zu behandeln
TEXTNOTE Kann mit TEXTPOINT dazu verwendet werden Wahlfrei auF Dateien vom Typ TEXT zuzugreiFen.
EXECPROG FĂŒhrt ein beliebiges Programm aus und liefert dessen Returncode
DATE LieFert das Datum
TIME LIEFERT die Zeit
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Ă.