logo_90
Uni ZH | Informatikdienste | PostScript

Ablaufkontrolle

Für die bedingte oder die wiederholte Ausführung von Anweisungen gibt es Vergleichsoperatoren und Kontrolloperatoren.

Der Operator eq vergleicht die obersten beiden Elemente auf dem Stack. Sie sind gleich (das Ergebnis ist true), wenn eine der folgenden Bedingungen erfüllt ist:

Andernfalls ist das Ergebnis falsch.

ne liefert das entgegengesetzte Ergebnis zu eq.

ge vergleicht zwei Zahlen oder zwei Zeichenketten miteinander. Das Ergebnis ist true, falls die erste Zahl grösser oder gleich der zweiten Zahl ist oder die erste Zeichenkette lexikalisch grösser oder gleich der zweiten Zeichenkette ist. Andernfalls ist das Ergebnis false.

gt, le und lt arbeiten analog zu ge.

and, or und xor verknüpfen zwei integer oder zwei boolean miteinander, das Ergebnis ist vom gleichen Typ. Es wird die entsprechende bitweise oder boolesche Verknüpfung angewendet.

not liefert zum angegebenen integer oder boolean das entsprechende bitweise oder boolesche Inverse.

true und false liefern die entsprechenden booleschen Werte (z.B. zur Definition einer Variablen).

bool proc if
if führt die angegebene Prozedur aus, wenn bool true ist.

bool proc1 proc2 ifelse 
ifelse führt proc1 aus, wenn bool true ist, andernfalls wird proc2 ausgeführt.

init incr limit proc for 
for führt proc mit den Werten init ... limit aus, jeweils um incr erhöht. Dieser Wert wird als oberstes Stackelement an die Prozedur übergeben. Die Prozedur wird nicht ausgeführt, wenn

int proc repeat 
repeat führt proc int-mal aus (int muss grösser oder gleich 0 sein). Es wird kein Wert auf den Stack gelegt.

proc loop 
loop führt proc solange aus, bis die Schleife durch exit verlassen wird.

any stopped bool
stopped führt any aus (any ist meist eine Prozedur, kann aber prinzipiell jedes beliebige Element sein, siehe auch exec). Das Ergebnis von stopped ist true, falls in any stop aufgerufen wurde oder ein Fehler aufgetreten ist.

any exec
exec führt any aus. Was dabei passiert, ist vom Typ von any abhängig:
integer, real, boolean, array, dictionary
das Element wird auf den Stack gebracht.
name
wenn name literal ist, wird er auf den Stack gebracht, andernfalls wird die Aktion ausgeführt, als ob der name in einem PostScript-Programm ausführbar angegeben wird (Aufruf eines Operators oder einer Prozedur).
proc
die Prozedur wird ausgeführt.
string
wenn die Zeichenkette ausführbar ist, wird sie als PostScript-Programm interpretiert, andernfalls wird der String auf den Stack gelegt.

exit springt aus der innersten (d.h. aktiven) for-, repeat- oder loop-Schleife.

stop beendet die Ausführung des aktuellen Kontextes (z.B. wegen eines zur Laufzeit festgestellten Fehlers), es wird bei der nächsten Anweisung nach der umgebenden stopped-Anweisung fortgesetzt. Der PostScript-Interpreter richtet für jeden Job eine solche Umgebung ein. quit bewirkt das gleiche wie stop.

(dieser Text stammt von Johannes Schmidt-Fischer)


Uni ZH | Informatikdienste | PostScript
Last update: 13-JUN-95/vo