Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

Anweisungen

&pagelevel(5)&pagelevel

Eine PRODAMP-Prozedur besteht aus Anweisungen. Jede Anweisung wird durch Semikolon abgeschlossen. Da es bei PRODAMP keine Deklarationen gibt, generiert jede Anweisung Code, der erst beim Ausführen der Prozedur interpretiert wird.

In PRODAMP gibt es folgende Anweisungen:

Anweisungsname

Wirkung

ARRANGE
FOLLOW
GLOBAL
IF
INTERRUPT
LOAD_GLOBAL
RETURN
TRACE
WHILE
Prozeduraufruf
Zuweisung

Symboleigenschaften vereinbaren
Variablen überwachen
Globale Variable definieren
Bedingte Anweisungen geben
Prozedur unterbrechen
Lade globale Variable einer anderen PRODAMP-Prozedur
Prozedur verlassen
Ablaufverfolgung steuern
Programmschleife bilden
Prozedur aufrufen
Wert zuweisen

Tabelle 12: Übersicht über die PRODAMP-Anweisungen

ARRANGE
Symboleigenschaften vereinbaren

Mit der Anweisung ARRANGE können Sie Namen, Länge, Relativadresse und Typ von Symbolen dynamisch vereinbaren.
Mit ARRANGE WINDOW kann veranlasst werden, dass ein festlegbares Dumpfenster als oberstes Fenster am Bildschirm erscheint; ferner kann vereinbart werden, dass Werte aus der PRODAMP-Prozedur in die Eingabefelder des Fensters eingetragen werden. Die Schlüsselworte und ihre Zuordnung entnehmen Sie bitte Bild 66.

Bild 66: Kopfzeile eines Dumpfensters

ARRANGE WINDOW

Mit ARRANGE WINDOW wird das angegebene Fenster an die Spitze der Fenster-Kette in DAMP geholt. Nach mehreren ARRANGE-WINDOW-Vereinbarungen für verschiedene Fenster und anschließender Bildschirm-Ausgabe erscheint das zuletzt genannte Fenster als oberstes Fenster am Bildschirm. Die anderen Fenster folgen in umgekehrter Reihenfolge, soweit auf Grund der eingestellten Länge möglich.

Für das Help-Fenster (W1), das PROC-Fenster und andere Spezialfenster wird die Angabe ARRANGE WINDOW zurückgewiesen. Für das Status-Fenster (W2) und das Stack-Fenster (W3) lassen sich die Parameter TID, TSN und LENGTH vereinbaren, für W3 außerdem noch PCB, mit dem ein PCB aus der PCB-Kette des Tasks über seine laufende Nummer ausgewählt wird.

ARRANGE WINDOW wirkt genauso wie eine Eingabe in die Kopfzeile eines Diagnosefensters. Jeder dort möglichen Eingabe entspricht ein Schlüsselwort der Anweisung ARRANGE. Lediglich der Parameter NUMBER, mit dem die gewünschte Fenster-Nummer angegeben wird, durchbricht diese Regel.

ARRANGE

Datenstrukturen, die in keiner Symboldatei hinterlegt sind, können Sie mit der Anweisung ARRANGE ad-hoc verfügbar machen. ARRANGE ist auch immer dann erforderlich, wenn unstrukturierte Daten des Diagnoseobjekts angesprochen werden sollen (siehe „Beispiel 5 zu ARRANGE").

Die mit ARRANGE (um)definierten Symbole sind nur innerhalb der PRODAMP-Prozedur bekannt. Sie werden nicht in den Symbol-Binärbaum von DAMP eingesetzt. Demzufolge werden diese Änderungen auch bei der Überlagerung eines Fensters mit einer DSECT nicht wirksam.

Neue Symbole müssen vollständig definiert werden, d.h. LENGTH, TYPE und RELATIVE sind explizit zu versorgen. Andernfalls versucht PRODAMP, die fehlenden Angaben aus der Symboldatei zu ergänzen, und bricht die Ausführung ab, wenn das Symbol nicht gefunden wurde.

Umgekehrt können Sie schon festgelegte Eigenschaften gezielt zurücksetzen, wenn man für sie das Schlüsselwort UNDEFINED angibt. Beim nächsten Zugriff auf das Symbol wird dann die fehlende Eigenschaft aus der Symboldatei ergänzt.

Beispiel 1 zu ARRANGE WINDOW

ARRANGE WINDOW:
NUMBER=5, ADDRESS=0, LENGTH=8, TID=X'ABC', OUTPUT='ASS' ;
END ARRANGE ;

Im Fenster 5 soll der Benutzerspeicher der Task ABC ab Adresse 0 dargestellt und disassembliert werden (OUTPUT='ASS'). Ferner wird vereinbart, dass das Fenster 8 Zeilen lang sein soll.

Beispiel 2 zu ARRANGE WINDOW

ARRANGE WINDOW:
NUMBER=7, NAME='IDMFILE', DSECT = 'IDMTFT', OUTPUT='CBM', ADDRESS=TFT_AD;
END ARRANGE ;

Im Fenster 7 soll ein Speicherbereich ab der Adresse TFT_AD dargestellt und in Form der DSECT IDMTFT symbolisch aufbereitet werden. Dabei wird die DSECT so positioniert, dass die DSECT IDMTFT an die Basisadresse TFT_AD gelegt wird und das Feld IDMFILE in der 1.Zeile des Fensters zu liegen kommt. Die Fensteranfangsadresse beträgt TFT_AD + Offset(IDMFILE).

Beispiel 3 zu ARRANGE

ARRANGE
.ESTK#ICL : TYPE = STRING;
END ARRANGE;
IF 'P' = STK1.ESTK#ICL THEN ...

Das Feld ESTK#ICL aus der DSECT ESTK wird umdefiniert. Es ist als DS XL 1 definiert, wird also als Bitmuster interpretiert, enthält aber einen Buchstaben. Durch die Zuweisung des Typs STRING können Sie im Folgenden dieses Feld als Buchstaben interpretieren.

Beispiel 4 zu ARRANGE

ARRANGE
.STDHD : RELATIVE = 0, LENGTH = 8, TYPE = STRING ;
.PAR_1 : RELATIVE = 8, LENGTH = 4, TYPE = NUMERIC ;
.PAR_2 : RELATIVE =12, LENGTH = 1, TYPE = STRING ;
.PAR_3 : RELATIVE =13, LENGTH = 1, TYPE = PATTERN;
END ARRANGE ;
P_LATTE := .... ;
FRST_PAR := P_LATTE.PAR_1 ; ....

Innerhalb PRODAMP wird eine DSECT konstruiert, etwa für eine neu entwickelte Schnittstelle, deren Parameterliste noch nicht offiziell übergeben wurde. Mit den neu definierten Namen lassen sich dann die Felder der Parameterliste symbolisch ansprechen, wobei natürlich immer die entsprechende Basisadresse mitzugeben ist. Auf analoge Weise werden die Parameter zwischen PRODAMP-Prozeduren übergeben.

Beispiel 5 zu ARRANGE

ARRANGE
.BYTE : TYPE=NUMERIC,LENGTH=1,RELATIVE=0;
END ARRANGE;
INT_AD := STK.ESTK#ICR;          "Adresse des Paging-Errors"
OPCODE := INT_AD.BYTE;           "Maschinenbefehl an dieser Stelle"
IF OPCODE = X'D2' THEN ......

Mit ARRANGE lassen sich unstrukturierte Daten des Diagnosobjekts ansprechen (beispielsweise Coding).

Beispiel 6 zu ARRANGE

ARRANGE
  .HALBWORT: OFFSET = 0, LENGTH = 2, TYPE = NUMERIC;
END ARRANGE
WORT := PTR.HALBWORT

Ist ein Feld als NUMERIC mit LENGTH=2 definiert, dann ist insbesondere darauf zu achten, dass die Zuweisung des Feldinhaltes zu einer Variablen unter Berücksichtigung des Vorzeichens geschieht.
Enthält HALBWORT an der Adresse PTR etwa die Buchstabenfolge C'AB', dann entspricht dies nach Definition des Feldes nicht dem numerischen Wert X'C1C2' = 49602 sondern dem Wert X'FFFFC1C2' = -15943, der anschließend der Variablen WORT zugewiesen wird. Soll das Vorzeichen des Inhalts unberücksichtigt bleiben, dann ist das Feld mit TYPE=PATTERN zu definieren. Allgemein gilt für TYPE=NUMERIC die Regel, dass bei gerader Länge das Vorzeichen berücksichtigt wird und bei ungerader Länge der übertragene Wert immer positiv ist.

Beispiel 7 zu ARRANGE

ARRANGE
  .WAIT_FACTOR: LENGTH = 1, TYPE = STRING,
                REFERENCE = .NKLCB_MDL.COPY_PARAMETER.USER_ALLOCATION
END ARRANGE;

Die Elemente einer Substruktur können ebenfalls mit ARRANGE umdefiniert werden. Hierzu ist die Bezeichnung REFERENCE zu verwenden, um das Symbol innerhalb einer Referenzkette zu lokalisieren. 

FOLLOW
Variable überwachen

Mit der Anweisung FOLLOW können Sie Variablen überwachen. Die Variable muss dabei vorher deklariert, d.h. initialisiert sein.

Nach dem Durchlaufen der Anweisung FOLLOW werden alle Zuweisungen an die genannte Variable in einen EDT-Bereich (standardmäßig Bereich 8) protokolliert. Die Ausgabe enthält die Zeilennummer, in der die Variable zugewiesen wird, den Variablennamen sowie deren Wert nach der Zuweisung.

Darüberhinaus wird jede Änderung von CURRENT.ERROR protokolliert.

Wird im Prozedurverlauf der EDT-Bereich mit WRITE („@PROC XX“) gewechselt, erfolgen die Ausgaben der Variablenüberwachung ebenfalls in den neuen EDT-Bereich.

FOLLOW ist bei der Fehlersuche in PRODAMP-Prozeduren sehr hilfreich.

Die Überwachung einer Variablen kann nur ein-, aber nicht abgeschaltet werden. Sie wird erst am Prozedurende oder nach Verlassen der Prozedur mit RETURN beendet.

Beispiel zu FOLLOW

Die Prozedur

1)  S := ' '*8;
2)  STR := '12XY34';
3)  NUM := ' ';
4)  I := 0;
5)  A := 0; FOLLOW A;
6)  WHILE I <= 5 DO
7)    EXTRACT ( NUM,STR,I );
8)    INSERT ( NUM,S,3 );
9)    A := DEC_BINARY ( S );
10)   I := I + 1;
11)  END WHILE;

erzeugt folgendes Protokoll:

TEST (0) %STMT 9: 'A'              <- 1 ( X'00000001' )
TEST (0) %STMT 9: 'A'              <- 2 ( X'00000002' )
TEST (0) %STMT 9: 'A'              <- 1 ( X'00000001' )
TEST (0) %STMT 10: 'CURRENT.ERROR' <- 4
TEST (0) %STMT 9: 'A'              <- 1 ( X'00000001' )
TEST (0) %STMT 9: 'A'              <- 3 ( X'00000003' )
TEST (0) %STMT 10: 'CURRENT.ERROR' <- 0
TEST (0) %STMT 9: 'A'              <- 4 ( X'00000004' )

Dabei wird eine Änderung von CURRENT.ERROR, die durch eine Standard-Prozedur verursacht wird, erst nach dem Statement ausgegeben, das sie verursacht hat. Sie sehen an dem Beispiel ebenfalls, dass DEC_BINARY einen undefinierten Wert liefert, wenn der String keine Dezimalzahl ist. 

GLOBAL
Globale Variablen definieren

Globale Variablen werden bei der Initialisierung und Wertzuweisung mit dem Schlüsselwort GLOBAL vor dem Variablennamen deklariert. Sie können vom gleichen Typ sein und werden auf die gleiche Weise wie lokale Variablen verwendet. Globale Variablennamen müssen in den Prozeduren, in denen sie deklariert und verwendet werden, und in allen Unterprogrammen, die in diesen Prozeduren aufgerufen werden, eindeutig sein.
Globale Variablen können mit der Anweisung LOAD_GLOBAL in jede PRODAMP-Prozedur geladen werden, wo sie nicht deklariert sind.

Deklaration globaler Variablen

GLOBAL TST1 := 4;            
GLOBAL TST2 := 'HELLO WORLD';
GLOBAL TST3 := TST1 * 2 + 8;

IF
Bedingte Anweisungen geben

Mit der Anweisung IF können Sie bedingungsabhängige Anweisungen geben. Die zu erfüllende Bedingung wird durch Verknüpfung mehrerer Ausdrücke mit logischen Operatoren festgelegt (siehe "Operatoren").

Beispiel 1 zu IF

IF PCB.ESTKGR15 <> 0 THEN
  RC := PCB.ESTKGR15 MOD 256 ;
  MESSAGE ( 'Returncode '+HEX_STRING(RC)+' bei $REQM.' );
END IF;

Ist der Inhalt im Feld ESTKGR15 ungleich null, ist im Register 15 also ein Returncode hinterlegt, dann wird die anschließend angegebene Meldung auf dem Bildschirm ausgegeben.

Beispiel 2 zu IF

IF 'TSOS ' = .EJTPUSR THEN
  IF 'HELGA' + ' '*49 = .EJTPXPRG THEN
    DANGER := 100 ;
  END IF ;
ELSIF 'SERVICE ' = .EJTPUSR THEN
  DANGER := 180 ;
ELSE
  DANGER := 0 ;
END IF;

Benutzer und verwendetes Programm werden in den Feldern EJTPUSR und EJTPXPRG abgefragt. Abhängig vom Ergebnis wird der Wert der Variablen DANGER gesetzt.

Beispiel 3 zu IF

EVIPLFLG := B'00000100' ; "SYSTEM LOADING COMPLETED"
EVCL2REQ := P'02' ; "CLASS 2 MEMORY REQUESTED"
IF EVIPLFLG + EVCL2REQ IN .EVSVMIND THEN ........

Es werden zwei Felder definiert, und geprüft, ob der Inhalt dieser Felder im Feld EVSVMIND enthalten ist.

Beispiel 3 zeigt noch etwas anderes: Es handelt sich um konkrete Equates aus der SVMT-DSECT. Da DAMP die Equates nicht in der Symboldatei hinterlegt, müssen die entsprechenden Bitmuster in PRODAMP definiert werden.

INTERRUPT
Prozedur unterbrechen

Mit der Anweisung INTERRUPT unterbrechen Sie eine Prozedur und verzweigen zum Programm DAMP. Nun können beliebige DAMP-Anweisungen gegeben werden. Die Rückkehr in die Prozedur erreichen Sie mit der Anweisung RESUME-PRODAMP-PROGRAM.

INTERRUPT bietet sich beispielsweise an, wenn man der Reihe nach eine Kette von Datenstrukturen inspizieren will. Steht die Anweisung INTERRUPT zum Beispiel in einer Schleife, die die Datenstrukturen der Reihe nach lokalisiert und einem Bildschirm-Fenster zuweist, können Sie zusammen mit der Anweisung RESUME-PRODAMP-PROGRAM praktisch von Kettenglied zu Kettenglied blättern.

Beispiel zu INTERRUPT

INTERRUPT WINDOW=4

Der Parameter WINDOW= bewirkt eine Auffrischung des gesamten DAMP-Bildschirms. Werden mit INTERRUPT nacheinander verschiedene Ausgaben auf das gleiche Fenster gelegt, so ist dieser Effekt oft störend. Man kann das Auffrischen dadurch vermeiden, dass man INTERRUPT ohne explizite Fensterangabe verwendet, es werden dann nur die geänderten Felder des Bildschirms neu geschrieben. 

LOAD_GLOBAL
Globale Variables von einer anderen PRODAMP-Prozedur laden

Die Anweisung LOAD_GLOBAL wird benutzt, um alle globalen Variablen der angegebenen PRODAMP-Prozedur zu laden. Danach können diese in der aktuellen Prozedur verwendet werden. Die in der LOAD_GLOBAL-Anweisung angegebene Prozedur muss in Objektform in der zugewiesenen PRODAMP-Bibliothek gespeichert werden. 

Es können globale Variable aus mehreren PRODAMP-Prozeduren in eine PRODAMP-Prozedur geladen werden. Wenn in der aktuellen Prozedur eine globale Variable verwendet wird, sollte diese durch Aufrufen der PRODAMP-Prozedur, in der sie als global deklariert wird, oder durch Zuweisen des Werts in der aktuellen Prozedur initialisiert werden.

Globale Variablen müssen auch in jedes Unterprogramm geladen werden, das sie verwendet. Wenn die globale Variable jedoch vor dem Aufruf des Unterprogramms initialisiert wurde, ist es nicht erforderlich, sie erneut im Unterprogramm zu initialisieren. Wenn die globale Variable in einem der Unterprogramme für die aktuelle PRODAMP-Prozedur geändert wird, wird der Wert für die PRODAMP-Prozedur und alle anderen Unterprogramme ebenfalls aktualisiert.

Eine Variable kann mit der Anweisung GLOBAL als global deklariert werden.

PRODAMP-Prozedur TESTPRC1 

GLOBAL TST1 := 4;            
GLOBAL TST2 := 'HELLO WORLD';
GLOBAL TST3 := TST1 * 2 + 8;

PRODAMP-Prozedur CHANGETST3TO1

LOAD_GLOBAL TESTPRC1;—————————————————————————————————————————————————————(1)
TST3 := 1;————————————————————————————————————————————————————————————————(2)

(1)

Globale Variable werden von der Prozedur TESTPRC1 geladen

(2)

Der Wert der globalen Variablen TST3 wird auf 1 geändert.

Beispiel zur Verwendung von LOAD_GLOBAL

LOAD_GLOBAL TESTPRC1;——————————————————————————————————————————————————————(1)
TESTPRC1;——————————————————————————————————————————————————————————————————(2)
IF TST1 = 4 THEN
  MESSAGE(TST2);———————————————————————————————————————————————————————————(3)
END IF;            
CHANGETST3TO1;—————————————————————————————————————————————————————————————(4)
IF TST3 = 1 THEN   
  MESSAGE('TST3 = 1');—————————————————————————————————————————————————————(5)
END IF;

(1)

Die globale Variable werden von der Prozedur TESTPRC1 geladen.

(2)

TESTPRC1 wird aufgerufen, um die globalen Variablen zu initialisieren.

(3)

Der Wert der globalen Variablen TST1 wird geprüft und, falls der Wert 4 ist, der Meldungstext der Variablen TST2 ausgegeben. 

(4)

Die Prozedur CHANGETST3TO1 wird aufgerufen und damit der Wert der globalen Variablen TST3 auf 1 gesetzt. 

(5)

Der Wert der globalen Variablen TST3 wird geprüft und, falls der Wert 1 ist, die Meldung 'TST3 = 1' ausgegeben.

RETURN
Prozedur vorzeitig verlassen

Die Anweisung RETURN in einer PRODAMP-Prozedur veranlasst die Rückkehr zu ihrem Aufrufer, also entweder in eine andere Prozedur oder in den DAMP-Dialog.

RETURN wird auch vom Compiler implizit am Prozedurende generiert.

RETURN WINDOW
Prozedur vorzeitig beenden

Mit der Anweisung RETURN WINDOW=<fensternummer> wird im Gegensatz zum einfachen RETURN nicht nur die aktuelle Prozedur verlassen, sondern die gesamte Aufrufhierarchie abgebrochen. Zusätzlich spezifiziert <fensternummer> die Nummer des Diagnosefensters, das im Dialog nach Abbruch der Prozedur an oberster Stelle im DAMP-Schirm angezeigt werden soll.

Beispiel zu RETURN

RETURN WINDOW = CURRENT.WNDNO;

Die Prozedur soll vollständig abgebrochen und das Diagnosefenster eingestellt werden, das im Feld CURRENT.WNDNO angegeben ist. 

TRACE
Ablaufverfolgung steuern

Mit den Anweisungen TRACE ON und TRACE OFF wird die Ablaufverfolgung ein- bzw. ausgeschaltet. Alle zwischen TRACE ON und TRACE OFF durchlaufenen Sourcezeilen-Nummern werden in einen Bereich des EDT (standardmäßig Bereich 8) protokolliert. Die beiden Anweisungen können an beliebiger Stelle in eine Prozedur eingefügt werden.

Wird im Laufe der Prozedur mit WRITE („@PROC XX“) der EDT-Prozedurbereich gewechselt, wird auch die Trace in den neuen Bereich ausgegeben.

Das Ein- und Ausschalten des Trace ist abhängig von der dynamischen Reihenfolge der Statements.

TRACE ist bei der Fehlersuche in PRODAMP-Prozeduren sehr hilfreich.

Beispiel zu TRACE

PROZEDUR PROCNAME:
1) IF CURRENT.LEVEL < 4 THEN
2)    TRACE ON;
3)    I := 1234;
4)    PROCNAME;
5)    I := 5678;
6) END IF;

führt beim Ablauf zur Protokollierung folgender Zeilennummern:

PROCNAME (0) %STMT 3
PROCNAME (0) %STMT 4
PROCNAME (1) %STMT 3
PROCNAME (1) %STMT 4
PROCNAME (2) %STMT 3
PROCNAME (2) %STMT 4
PROCNAME (3) %STMT 3
PROCNAME (3) %STMT 4
PROCNAME (3) %STMT 5
PROCNAME (3) %STMT 6
PROCNAME (3) %STMT 7
PROCNAME (2) %STMT 5
PROCNAME (2) %STMT 6
PROCNAME (2) %STMT 7
PROCNAME (1) %STMT 5
PROCNAME (1) %STMT 6
PROCNAME (1) %STMT 7
PROCNAME (0) %STMT 5
PROCNAME (0) %STMT 6
PROCNAME (0) %STMT 7

Dabei wird zunächst der Prozedurname ausgegeben und in Klammern der Wert von CURRENT.LEVEL, um die Unterprogrammebenen der Prozedur unterscheiden zu können. Anschließend wird die Zeilennummer des durchlaufenen Statements ausgegeben. PRODAMP generiert am Ende einer Prozedur implizit immer ein RETURN Statement. Deswegen taucht im Protokoll STMT 7 auf, das in der obigen Prozedur nicht enthalten ist.

Ist der Trace eingeschaltet, werden weitere TRACE ON Anweisungen ignoriert. Das erste TRACE OFF schaltet daher den Trace ab. 

WHILE
Programmschleifen bilden

Mit der Anweisung WHILE ist es möglich, Schleifen zu bilden.

Beispiel zu WHILE

WHILE ADDR <= MAX DO
  IF ADDR.TABVAL = BAD_VAL THEN
    RETURN ;
  END IF ;
  ADDR := ADDR + TAB_LEN ;
END WHILE ;

Solange die Variable ADDR nicht größer wird als die Variable MAX, wird die anschließend angegebene Anweisungsfolge immer wieder abgearbeitet. 

Zuweisung

Die Zuweisung ist die einfachste Art der Anweisung. Zuweisungsoperator ist das Zeichen „:=“. Links vom Zuweisungsoperator muss ein Variablenname stehen, rechts muss ein Ausdruck, d.h. ein Variablenname, ein Symbol, ein Literal, ein Funktionsaufruf oder ein arithmetischer Ausdruck stehen.

Der Datentyp einer Variablen wird durch die statisch erste Zuweisung (statisch, d.h. in der Reihenfolge der Source) an diese Variable definiert, gemäß Tabelle 9 (Datentypen). Der Datentyp der rechten Seite wird, unter Berücksichtigung bereits erfolgter Typzuordnungen, bestimmt und übernommen. Ist der Datentyp der rechten Seite undefiniert, wird er auf numerisch gesetzt. Ein Datentyp ist undefiniert, wenn z.B. der erste Operand ein Symbol ist; alle Symbole, auch die mit der PRODAMP-Anweisung ARRANGE definierten Symbole, haben zum Übersetzungszeitpunkt den Wert „undefiniert“.

Beispiele

A_FCB  := X'ABC';
FNAM   := A_FCB.ID1FILE;
TEXT   := 'FCB konnte nicht gefunden werden.';
XY     := FALSE;

In den obigen Beispielen wird (falls es sich bei den Zuweisungen um die statisch ersten Zuweisungen zu den Variablen handelt) A_FCB als numerisch, TEXT als String der Länge 33 und XY als Bitmuster festgelegt.

Da zum Zeitpunkt der Compilierung noch nicht festgestellt werden kann, welchen Typ das Symbol ID1FILE hat, wird FNAM standardmäßig zum numerischen Datentyp (andernfalls müsste bereits bei der Compilierung die Symboldatei zugewiesen werden, die erst beim Prozedurablauf benutzt werden soll. Dies müsste auch dann erfolgen, wenn die Prozedur für eine völlig andere BS2000-Version gedacht ist). Variable sollten daher besser durch die Zuweisung eines Anfangswertes deklariert werden, wenn ihnen erst später über ein Symbol ein Datum aus dem Diagnoseobjekt zugewiesen werden soll, das auch nichtnumerischer Art sein kann.

Beispiele

A_FCB  := X'ABC' ;
FNAM   := ' ' * 54 ;
FNAM   := A_FCB.ID1FILE ;

Auf der rechten Seite einer Zuweisung dürfen auch Funktionsaufrufe (Standardfunktionen) und Ausdrücke stehen.

Wird ein String einem bereits initialisierten String anderer Länge zugewiesen, so wird bei kürzerem Ziel-String der Quell-String abgeschnitten, bei längerem Zielstring mit Leerzeichen aufgefüllt.