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



Links

Copyright-Bestimmungen: siehe Über diese Seite
Classic Computer Magazines
[ Join Now | Ring Hub | Random | << Prev | Next >> ]