Pure Pascal, Version 1.0 (C) 1992 Pure Software
Application System Heidelberg
Englerstrae 3
W - 6900 Heidelberg
Tel. 06221/300002, Fax 06221/300389


Sehr geehrter Pure Pascal Kufer, 

im folgenden finden Sie Installationshinweise fr Pure Pascal und erfahren
Abweichungen gegenber dem Handbuch. 

1. Installation
===============

Pure Pascal wird auf drei Disketten ausgeliefert. Die Aufteilung wurde 
dabei so vorgenommen, da Sie auch ohne Festplatte gleich mit einer 
Diskette, nmlich der A-Diskette, anfangen knnen zu arbeiten. Auf ihr
befindet sich die Datei PPASCAL.PRG. Das ist die Entwicklungsumgebung von
Pure Pascal inklusive Compiler und Debugger.
Im Handbuch wird die Datei noch PP.PRG bezeichnet, dies wurde aber aus 
sthetischen Grnden gendert. 
Auf der A-Diskette befinden sich auerdem alle bentigten Units und die
Hilfetexte zu Pascal und der Bedienung der Oberflche. Lediglich die 
Hilfedatei fr die Units befindet sich nicht auf dieser Disk, sie ist
auf der B-Diskette. Wenn Sie also Informationen ber die Befehle der
mitgelieferten Units bentigen, mssen Sie zuerst die B-Diskette 
einlegen. Da Pure Pascal einen eingebauten Cache besitzt, kann es sein, 
da der Diskettenwechsel nicht erkannt wird. Falls also die Meldung 
'Help : Keyword not found' kommt, mssen Sie die Dialogbox 
Options/Directories einmal aufrufen. 
Wollen Sie Programmtexte der Diskette C compilieren, kann es sein, da
Sie vor dem Compilieren Diskette A einlegen mssen, damit die verwendeten
Units geladen werden knnen. 
Manche Sourcetexte der A-Diskette (die GEMINIT verwenden) lassen 
sich nicht compilieren, wenn die Pfade unter Options/Directories nicht
eingestellt sind. Falls also z.B. die Fehlermeldung kommt 'GEM.PAS not
found' so mssen Sie dort die Pfade fr Source files und Units einstellen.
Auf der B-Diskette sind der Assembler (PASM.TTP), der Help-Compiler 
(HELPCOMP.TTP), der Kommandozeilencompiler (PPC.TTP) und
ein Programm, das aus Resource-Dateien einbindbare Objektdateien 
generiert (BINOBJ.TTP) inklusive Unit (RESOURCE.PAS).
Die zu den Units gehrenden Interface-Dateien finden Sie im Ordner 
INTRFACE auf der B-Diskette. 
Auf der C-Diskette befinden sich die restlichen Programmtexte. 

1.1 Festplatteninstallation
===========================

Falls Sie eine Festplatte besitzen, kopieren Sie einfach den Inhalt aller
drei Disketten in einen Ordner namens PPASCAL auf Ihrer Festplatte. 


2. nderungen gegenber dem Handbuch
====================================

- PP.PRG heit nun PPASCAL.PRG 
- Im Men gibt es nun auch den Menpunkt Help/Menu, der Ihnen eine 
  Hilfestellung zu den Menpunkten der Oberflche gibt. 
- Unter Options/Desktop ist der Menpunkt "Use GEM Clipboard" 
  dazugekommen, in diesem Fall wird vor jedem Edit/Cut- und 
  Edit/Paste-Befehl der selektierte Textblock auf das GEM-Clipboard 
  geschrieben. 
- Manche Hardcopies des Handbuches weichen von der aktuellen Oberflche
  geringfgig ab. Dies sollte Sie aber nicht weiter beunruhigen.


Und nun eine kleine Erluterung ber die Arbeitsweise des Compilers und
Debuggers, damit Sie sich nicht wundern brauchen, weshalb beim Debuggen
scheinbar falsche Variablenwerte angezeigt werden. 

Optimierte Codeerzeugung & Debuggen
===================================


1. Gemeinsame Unterausdrcke und ndern von Variablen
-----------------------------------------------------

Der Compiler hat die Fhigkeit, gemeinsame Unterausdrcke in
aufeinanderfolgenden Anweisungen zu erkennen und nur einmal
auszuwerten.

Dies hat zur Folge, da ndern ber View/Change... von beteiligten
Variablen mitunter keinen Effekt hat.

Beispiel:

	var i: integer;
	begin
	  i := 5;
	  writeln(i*3);  { Auch wenn i nach dem ersten writeln gendert }
	  writeln(i*3);  { wird, ist die Ausgabe des zweiten writeln 15 }
	end;

In diesem Beispiel wrde der Compiler i*3 nur einmal auswerten.
Dieser Wert wrde auch in zweiten Writeln-Anweisung verwendet
werden, eine manuelle nderung von i mit View/Change... htte
keine Auswirkung auf die Ausgabe.


2. Registervariablen und Lebensdaueroptimierung
-----------------------------------------------

Der Compiler alloziert Variablen automatisch in Registern.
Es knnen sogar mehrere Variable in dasselbe Register gepackt
werden, wenn ihre Lebensdauern sich nicht berschneiden.

Dadurch kann es vorkommen, da sich bei der Zuweisung an eine
der Variablen auch gleichzeitig eine andere Variable ndert.

Beispiel:

	var i, j: integer;
	begin
	  i := 5;      { Zuweisung an i ndert auch j }
	  writeln(i);
	  j := 7;      { Zuweisung an j ndert auch i }
	  writeln(j);
	end;

Im Beispiel packt der Compiler i und j in dasselbe Register. Der
generierte Code ist natrlich korrekt, da der Wert von i nicht
mehr bentigt wird, wenn j zum ersten Mal einen Wert zugewiesen
bekommt. Beim Debuggen sieht man im Variables-Fenster fr beide
Variablen immer denselben Wert.

Auerdem knnen die Werte von Variablen frhzeitig zerstrt
werden, wenn der Wert nicht mehr gebraucht wird und der Compiler
dadurch besseren Code generieren kann.

Beispiel:

	var a: array [0..4] of real;
	    i : integer;
	begin
	  i := 3;
	  a[i] := 1.0;  { Wert von i ndert sich durch diese Anweisung }
	end;

Um in das Array a zu indizieren, mu i mit 10 multipliziert werden.
Da i nach der Anweisung nicht mehr gebraucht wird, fhrt der Compiler
die Multiplikation gleich im Register von i durch und spart dadurch
eine Instruktion.

Bei For-Schleifen kann es sogar vorkommen, da die Laufvariable
vollkommen elimiert wird, auch wenn sie anscheinend im Rumpf der
Schleife noch verwendet wird.

Beispiel:

	const
	  size = 100;
	var
	  flags: array [0..size] of boolean;
	  i: integer;
	begin
	  for i := 0 to size do
	    flags[i] := true;
	end;

Da der Compiler recht schlauen Code fr diese Schleife erzeugt,
nimmt i beim Durchlaufen der Schleife etwas berraschende Werte
an. Neugierige drfen sich wundern, warum der Wert von i am Ende
der Schleife -1 ist.


Viel Spa mit Pure Pascal wnscht Ihnen Application Systems Heidelberg.
Die Supportzeiten sind Mo-Fr von 10 bis 12:30 Uhr. 
Die Telefonnummer ist 06221/300002. 
