← ST-Computer 10 / 1986

Propascal-System - The British way of Pascal

Software

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