WEGA PASCAL - 1 - README ----------------------------------------------------------- ZFT-KEAW Abt. Basissoftware 31.08.1988 Software Versionshinweise ------------------------- Titel: WEGA PASCAL Version 2.1 ----------------------------------------------------------- 1. Inhalt --------- Dieses Softwarepaket enthaelt einen PASCAL-Compiler fuer WEGA. Zum Lieferumfang gehoeren zwei Disketten im WEGA- TAR-Format. Auf der Installationsdiskette (WEGA-PASCAL 1/2) befinden sich folgende Dateien: README dieser Text INSTALL C-Shell-Installationsskript pascal Compiler-Treiber paskey Initialisierungsdatei pasp1 Pass 1 des Compilers pasp2 Pass 2 des Compilers pasp3 Pass 3 des Compilers libpas.a Standard-Pascal-Bibliothek pascal.1 On-line-Dokumentation Auf der zweiten Diskette (WEGA-PASCAL 2/2) befindet sich das WEGA-PASCAL-Nutzerhandbuch in formatierter Form als Datei: pascal.dr PASCAL-Nutzerhandbuch 2. Dokumentation ---------------- Auf der Installationsdiskette befindet sich die Datei fuer die On-line Dokumentation zu dem Compiler-Treiber 'pascal'. Sie ist eine Bedienungsanleitung und nach der Installation ueber das Kommando 'man' abrufbar ('pascal(1)'). Das Nutzerhandbuch kann ueber das Kommando 'tar -xv' in ein entsprechendes Directory (z.B. /tmp) eingelesen werden und im Anschluss daran ueber den Drucker ausgegeben werden. 3. Installation --------------- Die fuer die Nutzung des WEGA PASCAL notwendigen Dateien werden mit Hilfe des WEGA C-Shellskripts 'INSTALL' installiert. Die Datei 'INSTALL' ist dazu in das WEGA- System einzulesen und abzuarbeiten. Dies muss vom Superuser erfolgen. Dazu sind folgende Kommandos einzugeben: WEGA PASCAL - 2 - README cd /z tar -xv INSTALL INSTALL rm INSTALL Dadurch werden die Dateien in folgender Hierarchie eingetragen: /z/bin/pascal Pascal-Compiler-Treiber /z/bin/lib/paskey Initialisierungsdatei /z/bin/lib/pasp1 Pass 1 des Compilers /z/bin/lib/pasp2 Pass 2 des Compilers /z/bin/lib/pasp3 Pass 3 des Compilers /z/bin/lib/libpas.a Standard-Pascal-Bibliothek /usr/man/man1/pascal.1 On-line Manual fuer 'pascal' 4. Nutzerhinweise ----------------- Das WEGA PASCAL beinhaltet folgende Zusaetze: Bezuege zu globalen Variablen in C von Pascal aus Globale Variable in Pascal koennen 31 Zeichen haben, globale Variable in C 7 Zeichen. Das fuehrt zu Problemen, falls in Pascal ein externer Adressbezug zu einer globalen C-Variablen gemacht wird, die mehr als 7 Zeichen hat. Durch Pascal werden alle Zeichen des Variablennamen (max. 31) an den Linker ld weiterge- leitet, durch C aber nur die ersten 7 Zeichen (der Rest wird abgeschnitten). Dies ergibt dann unaufgeloesste Referenzen beim Linken. Deshalb sollten alle globalen Variablen eines C-Moduls, die in einem Pascal-Modul genutzt werden sollen, maximal 7 Zeichen haben. Aufruf von Pascal-Prozeduren und -Funktionen unter C Da der Pascal-Compiler Kode erstellt, der in Uebereinstimmung mit den WEGA-Aufrufvereinbarungen steht, koennen Pascal-Prozeduren und -Funtionen von einer C- Funktion aufgerufen werden. Jedoch ist es wegen der Struktur der Pascal-Bibliothek noetig, eine leere Prozedur 'entgqq' in dem Pascal-Modul zu erstellen. Diese Prozedur darf nichts tun (ausser Return), aber sie muss global definiert sein, um die externen Text- und Datensymbole in der Pascal- Bibliothek aufloesen zu koennen. Uebergabe reeller Parameter Bei C werden alle reellen Parameter ('float') mit doppelter Genauigkeit uebergeben, bei Pascal aber mit einfacher Genauigkeit. Deshalb ist es am besten, die reellen Parameter von Pascal zu C (und umgekehrt) explizit durch Verweis anstelle der Werte zu uebergeben. D.h. der Parameter, der durch C uebergeben wird, sollte ein Zeiger WEGA PASCAL - 3 - README zu einer 'float'-Variablen sein. Der Parameter, der durch Pascal uebergeben wird, sollte die Adresse (ADR) einer reellen Variablen sein. 5. Probleme ----------- Bekannte Fehler Es gibt zwei bekannte Fehler in der vorliegenden Version von Pascal: - Falls eine Umwandlung von 'unsigned' zu 'signed' inner- halb eines Boolschen Ausdrucks mittels ORD gemacht wird, so kann das Ergebnis falsch sein, z.B. if ( ORD(wrd1) < ORD(wrd2) ) wobei wrd1 und wrd2 vom Typ WORD sind. Es ist zu empfehlen, RETYPE zu verwenden, z.B. liefert if ( RETYPE(INTEGER,wrd1) < RETYPE(INTEGER,wrd2) ) immer das richtige Ergebnis. - Der zweite bekannte Fehler betrifft das Schreiben von reellen Zahlen in eine Datei und deren Zuruecklesen. Weil es einen Verlust eines Genauigkeitsbits bei der Compileruebersetzung einer konstanten Zeichenkette, die eine reelle Zahl darstellt, geben kann, kann manchmal der Vergleich der geschriebenen reellen Zahl mit der zurueckgelesenen zur Ungleichheit fuehren. Segmentierung Die aktuelle Version des Pascal-Compilers unterstuetzt nicht den segmentierten Kode. Zeiger und ADR-Typen sind als 16-Bit-Groessen implementiert.