%P= — CALL-Optionen

#### Search Results

Search

# %P= — CALL-Optionen

`%P=` |  | `C` `CC` `I` `L` `LS` `S` `SC` `SQ` `U` `UT` `V` |

Jedes `%P=`-Kommando gilt nur für den nächsten Aufruf, und die `CALL`-Optionen werden ohne Bedingung nach Rückkehr von dem Aufruf zurückgesetzt.

Deshalb wird empfohlen, das `%P=`-Kommando unmittelbar vor dem betreffenden `CALL`-Statement abzusetzen.

Anmerkung
Um die `CALL`-Optionen dauerhaft zu setzen, können Sie den Profilparameter `PGP` bzw. das entsprechende Parametermakro `NTPGP` benutzen.

Wenn Sie die Natural CICS-Schnittstelle benutzen, können Sie mit den Kommandos `%P=S(C)`, `%P=V`, `%P=C(C)`, `%P=U` und `%P=UT` spezielle Optionen setzen, die dann gelten, wenn unter CICS ein Natural-Programm (über ein `CALL`-Statement) ein Nicht-Natural-Programm aufruft. In allen anderen Umgebungen werden diese Kommandos ignoriert.

Wenn Sie die Natural IMS TM-Schnittstelle benutzen, können Sie mit dem Kommando `%P=I` spezielle Optionen setzen, die gelten, wenn ein Natural-Programm (über ein `CALL`-Statement) ein Nicht-Natural-Programm aufruft. In allen anderen Umgebungen wird dieses Kommando ignoriert.

Informationen bezüglich der Unterstützung von IBM Language Environment (LE)-Subprogrammen durch Natural siehe Abschnitt LE-Subprogramme in der Operations-Dokumentation.

Einzelheiten zum Aufrufen von Nicht-Natural-Programmen siehe `CALL`-Statement in der Statements-Dokumentation.

Weitere Kommando-Optionen sind im Folgenden beschrieben:

- %P=S — Standard-Linkage für Aufruf

- %P=SC — Standard-Linkage-Aufruf mit Simulation von EXEC CICS LINK

- %P=SQ — Standard-Linkage für Aufruf von quasi-reentranten Subprogrammen

- %P=U — Separate Arbeitseinheit für aufgerufenes Programm

- %P=UT — Separate Arbeitseinheit für aufgerufenes Programm, Transaktions-Backout tolerieren

- %P=V — Ausspeichern bei Aufruf

- %P=C — Übergabe von Parameterwerten statt Adresse

- %P=CC — Parameterwerte in einem CICS-Container übergeben

- %P=L — Aufruf des dynamischem Hauptprogramms LE

- %P=LS — Aufruf von LE-Subroutine

- %P=I — Übergabe von PCB-Adressen an Aufgerufenen

## %P=S — Standard-Linkage für Aufruf

Dieses Kommando gilt nur, wenn die Natural CICS-Schnittstelle benutzt wird.

Wenn ein Natural-Programm unter CICS ein Nicht-Natural-Programm aufruft, geschieht der Aufruf normalerweise über eine `EXEC CICS LINK`-Anforderung.

Wenn für den Aufruf stattdessen Standard Linkage verwendet werden soll, geben Sie das Terminalkommando `%P=S` ein. Voraussetzung ist, dass das aufgerufene Programm den Standard-Linkage-Konventionen mit Standard-Registerverwendung entspricht.

## %P=SC — Standard-Linkage-Aufruf mit Simulation von EXEC CICS LINK

Dieses Kommando gilt nur, wenn die Natural CICS-Schnittstelle benutzt wird.

Wenn ein Natural-Programm normalerweise ein Nicht-Natural-Programm unter CICS aufruft, erfolgt der Aufruf über eine `EXEC CICS LINK`-Anforderung.

Wenn dieses Terminalkommando benutzt wird, ruft die Natural CICS-Schnittstelle das Nicht-Natural-Programm mittels Standard-Linkage-Konventionen auf, aber mit der Übergabe von Parametern, wie dies ein `CICS LINK` durchführt, d.h. Register 1 zeigt auf eine Parameter-Liste mit Adressen von `CICS EIB` und einer `CICS COMMAREA`.

Anmerkungen:

1. `%P=SC` kann mit `%P=C` kombiniert werden.
2. Ein über Standard Linkage aufgerufenes Programm darf nicht über `EXEC CICS RETURN` zum aufrufenden Programm zurückkehren. Assembler-Programme müssen über einen `DFHEIRET`-Macro-Aufruf zurückkehren. COBOL-Programme müssen über ein `GOBACK`-Statement zurückkehren.

## %P=SQ — Standard-Linkage für Aufruf von quasi-reentranten Subprogrammen

Dieses Kommando gilt nur, wenn die Natural CICS-Schnittstelle benutzt wird und wenn die bei Ihnen installierte Natural CICS Interface-Version dieses Kommando unterstützt.

`%P=SQ` entspricht funktional dem Terminalkommando `%P=S`.

Dieses Kommando gilt nicht, wenn ein aufgerufenes Nicht-Natural-Subprogramm in Natural mit dem Profilparameter `CSTATIC` oder `RCA` definiert ist.

Wenn Natural mit dem CICS-Attribut `CONCURRENCY(REQUIRED)` definiert ist und die CICS OTE-Umgebung ( Open Transaction Environment) benutzt, müssen alle mittels Standard-Linkage-Konventionen aufgerufenen Subprogramme voll reentrant sein.

Wenn ein Nicht-Natural-Subprogramm aufgerufen wird, das quasi-reentrant, aber nicht thread-sicher und voll reentrant ist, während Natural in einem offenen TCB läuft, sorgt die Einstellung `%P=SQ` dafür, dass das aufgerufene Programm unter dem CICS QR TCB ausgeführt wird. Natural setzt dann das CICS-Kommando `EXEC CICS LINK PROGRAM('NCILINKQ')` ab, um den QR TCB umzuschalten und das Programm `NCILINKQ` auszuführen, das das Subprogramm mittels Standard-Linkage-Konventionen aufruft.

Dieses Terminalkommando gilt auch für LE-Subprogramme. Informationen bezüglich der Unterstützung von IBM Language Environment (LE)-Subprogrammen durch Natural siehe Abschnitt LE-Subprogramme in der Operations-Dokumentation.

## %P=U — Separate Arbeitseinheit für aufgerufenes Programm

Dieses Kommando gilt nur, wenn die Natural CICS-Schnittstelle benutzt wird.

Dieses Kommando gibt an, dass ein über DPL aufgerufenes CICS-Programm seine eigene Arbeitseinheit hat, die bei der Rückkehr zu Natural bestätigt wird, d.h. vom aufgerufenen Programm vorgenommene Änderungen an wiederherstellbaren Ressourcen werden bestätigt oder wieder eingespeichert, unabhängig von Änderungen an wiederherstellbaren Ressourcen, die Natural vorgenommen hat. In der Sprache von CICS ausgedrückt: Dieses Kommando bewirkt ein `EXEC CICS LINK` mit der `SYNCONRETURN`-Option.

## %P=UT — Separate Arbeitseinheit für aufgerufenes Programm, Transaktions-Backout tolerieren

Dieses Kommando hat fast die gleiche Bedeutung wie das Kommando `%P=U`, jedoch mit einer Ausnahme:

Bei `%P=U` führen bei der Rückkehr von dem aufgerufenen Programm alle CICS-Bedingungen, außer `NORMAL`, zu einer Natural-Fehlermeldung NAT0920, wobei der Reason Code der Response Code des `EXEC CICS LINK`-Befehls ist.

Bei `%P=UT` führt ein `CICS ROLLEDBACK` Response Code nicht zu einem Fehler, sondern wird toleriert und wie eine `NORMAL`-Bedingung behandelt.

## %P=V — Ausspeichern bei Aufruf

Dieses Kommando gilt nur in Natural-Umgebungen, in denen sich mehrere Sessions Threads in derselben Region teilen, beispielsweise Natural CICS-Schnittstelle oder Batch-Server-Umgebungen unter z/OS.

Wenn ein Natural-Programm ein Nicht-Natural-Programm aufruft und das aufgerufene Programm im Dialog einen Terminal-I/O ausführt, ist der Natural-Thread normalerweise solange blockiert, bis der Benutzer eine Eingabe gemacht hat.

Mit `%P=V` können Sie vermeiden, dass der Natural-Thread blockiert ist: wenn Sie dieses Terminalkommando angeben, werden die vom Natural-Programm an das aufgerufene Programm übergebenen Parameterdaten aus dem Thread herauskopiert, und der Thread wird vor dem Aufruf ausgespeichert. Der Thread steht dann für andere Benutzer zur Verfügung. Wenn das aufgerufene Programm die Kontrolle wieder an das aufrufende Natural-Programm zurückgibt, wird der Thread wieder eingespeichert, der (modifizierte) Datenbereich wird in den Thread kopiert, und Natural setzt die Verarbeitung fort.

Anmerkung
Nur die im `CALL`-Statement angegebenen Parameter werden aus dem Thread heraus- und wieder hineinkopiert.

## %P=C — Übergabe von Parameterwerten statt Adresse

Dieses Kommando gilt nur, wenn die Natural CICS-Schnittstelle benutzt wird.

Ruft ein Natural-Programm unter CICS ein Nicht-Natural-Programm auf, wird normalerweise die Adresse der `CALL`-Statement-Parameteradressenliste in der COMMAREA übergeben. Wenn Sie statt der Adresse der Parameteradressenliste die Parameterwerte selbst in der `COMMAREA` übergeben möchten, führen Sie vor dem Aufruf das Terminalkommando `%P=C` aus.

Dadurch ist zum Beispiel DPL für aufgerufene CICS-Programme möglich: der Aufruf eines CICS-Programms, das sich in einer anderen CICS-Region befindet, ist nur mit `%P=C` möglich; denn da die "aufgerufene" Region nicht auf Adressen in der "aufrufenden" Region zugreifen kann, müssen stattdessen die Parameterwerte übergeben werden.

Wenn `%P=C` verwendet wird, werden keine Parameter in der TWA übergeben, sondern nur Parameterwerte in der CICS COMMAREA. Alle Parameter der `CALL`-Parameterliste werden unmittelbar aufeinanderfolgend kopiert, unabhängig von ihrer Ausrichtung. Die sich daraus ergebende COMMAREA-Länge entspricht der Summe der einzelnen Parameterlängen (was bei Bestimmung der Anzahl der zu übergebenden Array-Ausprägungen zu berücksichtigen ist). Bei der Rückkehr vom aufgerufenen Programm werden die Parameter zurückkopiert.

Wenn sich überlappende Felder übergeben werden oder dasselbe Feld mehrmals übergeben wird, sollten diese Felder für das aufgerufene Programm schreibgeschützt werden; andernfalls kann es bei der Rückgabe von Parameterwerten an das aufrufende Programm zu unvorhersehbaren Ergebnissen kommen.

Bei `%P=C` gilt die Einschränkung, dass Gruppen-Arrays nicht übergeben werden können:

    01 #GROUP (2)
       02 #FIELD1 (A1)
       02 #FIELD2 (P7)

Übergeben Sie sie entweder als einzelne Arrays:

    01 #GROUP
       02 #FIELD1 (A1/2)
       02 #FIELD2 (P7/2)

Oder redefinieren Sie sie:

    01 #GROUP
    01 REDEFINE #GROUP
       02 #ARRAY (A1/10)

und geben den Array-Namen im `CALL`-Statement an.

Anmerkungen:

1. Wenn Sie für einen Aufruf sowohl `%P=S` als auch `%P=C` ausführen, wird `%P=C` ignoriert.
2. CICS COMMAREAs sind auf 32 KB begrenzt.
3. Wenn der Parameter `CNTCALL` im Macro `NTCICSP` auf `ON` gesetzt, ist, wird ein CICS-Container statt einer COMMAREA übergeben, wenn die Datenlänge des Parameterwertes 32 KB überschreitet.
4. Vermeiden Sie Speicherüberschreitungen in CICS, indem Sie sicherstellen, dass ein aufgerufenes Programm prüft, ob die Länge des zu übergebenden Datenbereichs wirklich zur internen Datenstruktur passt. Dies erreicht man, indem man EIBCALEN gegen die COMMAREA-Länge prüft: `IF LENGTH OF DFHCOMMAREA GREATER THAN EIBCALEN …` (in COBOL) oder `IF SIZE (DFHCOMMAREA) > EIBCALEN …` (in PL/1).

## %P=CC — Parameterwerte in einem CICS-Container übergeben

Dieses Kommando gilt nur, wenn die Natural CICS-Schnittstelle benutzt wird.

Für diese Funktionalität ist der CICS Transaction Server for z/OS ab Version 3.1 erforderlich.

Der Unterschied zwischen `%P=C` und `%P=CC` ist der, dass die Parameterwerte sofort in einem CICS-Container übergeben werden. Alle Einschränkungen gelten noch, außer der Längenbegrenzung von 32 KB.

## %P=L — Aufruf des dynamischem Hauptprogramms LE

Dieses Kommando gilt nur, wenn bei der Installation von Natural die Option zur Unterstützung von IBM Language Environment (LE)-Aufrufkonventionen gesetzt wurde.

Dieses Kommando bewirkt, dass nach dem Aufruf eines dynamischen Hauptprogramms LE die Kontrolle wieder an Natural zurückgegeben wird.

Wenn ein dynamisches Hauptprogramm LE aufgerufen wird, wird standardmäßig die Kontrolle nach Ausführung des aufgerufenen Programms nicht an Natural zurückgegeben. Damit nach der Ausführung des aufgerufenen Programms die Kontrolle an Natural zurückgegeben wird, müssen Sie vor dem Programmaufruf `%P=L` verwenden.

Informationen zur Unterstützung von LE-Aufrufkonventionen finden Sie im Abschnitt LE-Subprogramme in der Operations-Dokumentation.

Anmerkung
Unter CICS sind `%P=L` und `%P=LS` gleichwertig, da LE-Hauptprogramme nicht unterstützt werden.

## %P=LS — Aufruf von LE-Subroutine

Dieses Kommando gilt nur, wenn bei der Installation von Natural die Option zur Unterstützung von IBM Language Environment (LE)-Aufrufkonventionen gesetzt wurde.

Dieses Kommando bewirkt, dass ein dynamisches oder statisches Nicht-Natural-Programm mittels LE-Aufrufkonventionen aufgerufen wird, d.h. über Standard-Linkage-Konventionen mit dem Register 12, das die Adresse der LE CAA enthält.

Informationen zur Unterstützung von LE-Aufrufkonventionen finden Sie im Abschnitt LE-Subprogramme in der Operations-Dokumentation.

## %P=I — Übergabe von PCB-Adressen an Aufgerufenen

Dieses Kommando gilt nur, wenn die Natural IMS TM-Schnittstelle benutzt wird.

`%P=I` zeigt Natural an, dass PCB-Adressen an das 3GL-Programm im folgenden `CALL`-Statement übergeben werden sollen. Da es nicht möglich ist, die Adresse einer PCB von Natural an das 3GL-Programm direkt zu übergeben, wird eine spezielle Konvention benutzt, um Natural anzuzeigen, dass an das 3GL-Programm übergebene Parameter entweder die Position oder den Namen einer PCB enthalten können. Für Felder, die diese Konvention erfüllen, übergibt Natural die Adresse der PCB an das aufgerufene 3GL-Programm anstatt der Adresse des angegebenen Parameters.

Nur skalare Felder des Formats A8 oder A12 werden auf eine PCB-Spezifikation abgeprüft. Die Felder, die eine PCB-Spezifikation enthalten, müssen die folgenden Konventionen erfüllen:

- Ein A8-Feld muss die Zeichenkette `'PCB=nnnn'` enthalten, wobei nnnn eine vierstellige Ziffer ist, die die Position der PCB in der PSB-Adressenliste darstellt.

- Ein A12-Feld muss die Zeichenkette `'PCB=name'` enthalten, wobei name der acht Zeichen umfassende Name für eine PCB ist, der mit dem `NTIMSPT`-Makro im Verlauf der Installation der Natural IMS TM-Schnittstelle definiert wurde.

Beispiel:

Nach Ausführung von `%P=I` werden für das Statement

    CALL 'MY3GL' USING 'PCB=MYPCB ' 'PCB=0004' PARAM

die folgenden Parameter an das 3GL-Programm `MY3GL` übergeben:

- Adresse der PCB mit dem Namen `MYPCB`, wie mit dem Makro `NTIMSPT` angegeben,

- Adresse der vierten PCB in der PSB-Adressenliste,

- Adresse des Natural-Feldes `PARAM`.

Die folgenden Returncodes werden von der Systemfunktion `RET` zurückgegeben, wenn die PCB-Spezifikation ungültig ist:

Return Code | Erläuterung
--- | ---
-4 | Der angegebene Wert nnnn für das Format `‘PCB=nnnn’` ist nicht numerisch.
-8 | Der angegebene PCB-Name wurde nicht mit dem Makro `NTIMSPT` definiert.
-12 | Die angegebene PCB mit der Position nnnn ist in der PSB-Adressenliste nicht vorhanden.

### On this page

- %P=S — Standard-Linkage für Aufruf
- %P=SC — Standard-Linkage-Aufruf mit Simulation von EXEC CICS LINK
- %P=SQ — Standard-Linkage für Aufruf von quasi-reentranten Subprogrammen
- %P=U — Separate Arbeitseinheit für aufgerufenes Programm
- %P=UT — Separate Arbeitseinheit für aufgerufenes Programm, Transaktions-Backout tolerieren
- %P=V — Ausspeichern bei Aufruf
- %P=C — Übergabe von Parameterwerten statt Adresse
- %P=CC — Parameterwerte in einem CICS-Container übergeben
- %P=L — Aufruf des dynamischem Hauptprogramms LE
- %P=LS — Aufruf von LE-Subroutine
- %P=I — Übergabe von PCB-Adressen an Aufgerufenen