Propascal-System - The British way of Pascal

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ß.


Jürgen Leonhard
Aus: ST-Computer 10 / 1986, Seite 5

Links

Copyright-Bestimmungen: siehe Über diese Seite