Your Browser is not longer supported

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

{{viewport.spaceProperty.prod}}

Kettung von PAM-Makroaufrufen in Listenform

PAM-Makroaufrufe, die miteinander verkettet werden sollen, sich aber nicht notwendig auf die gleiche Datei beziehen müssen, sind mit dem Operanden MF=L in Listenform zu erzeugen und in einem Konstantenbereich unterzubringen; die Kettung wird durch Angabe des Operanden CHAIN= erreicht.

Die Makroaufrufe haben (bis auf den Letzten) folgendes Format:


Operation

Operanden

elementn

PAM

fcbadr,operation,...,MF=L,CHAIN=elementn+1

Beim letzten Element der Kette entfällt der Operand CHAIN.

Der Aufruf einer Kette von PAM-Makroaufrufen in Listenform erfolgt mit einem PAM-Makro der folgenden Form:


Operation

Operanden


PAM

MF=(E,element1)

Es wird jeweils nur ein SVC pro Kette ausgeführt, d.h. man vermeidet durch Kettung von UPAM-Anforderungen den Aufwand einer mehrfachen SVC-Bearbeitung.

Beispiel zur Codierung

        START
        LDBASE 10
        USING *,10
        .
        .
        PAM MF=(E,ELEM1)
        .
        .
        .
        TERM
*KONSTANTENBEREICH
ELEM1   PAM     ......,MF=L,CHAIN=ELEM2
ELEM2   PAM     ......,MF=L,CHAIN=ELEM3
ELEM3   PAM     ......,MF=L
        .
        .
        .
        END

Bei fehlerfreiem Ablauf erhält der Anwender die Kontrolle bei der Anweisung, die auf den PAM-Makroaufruf folgt, der die Abarbeitung einer Operandenlisten-Kette forderte.

Alle Operationen werden in genau der Reihenfolge ausgeführt, in der die PAM-Makro-Listen innerhalb der Kette vorkommen - mit einer Ausnahme: Wenn die erste Operation, die eine Sperre fordert, erkannt wird, wird der Rest der Kette durchgeprüft, und alle Operationen, die Sperren fordern, werden registriert. Falls innerhalb der angegebenen Zeit nicht alle geforderten Sperren verfügbar sind, wird die Kette bei der Operation abgebrochen, die die erste Sperre forderte.

Wird eine in der Kette angeforderte Aktion nicht erfolgreich durchgeführt, werden auch die auf diese Anforderung folgenden Aktionen nicht ausgeführt (einschließlich Sperren). Die Steuerung wird an den entsprechenden EXLST-Ausgang übergeben; das Register 1 weist auf den FCB der fehlerauslösenden Datei. Der Fehler-Code (ID1ECB) und das Fehlerbyte (ID1XITB) werden in diesem FCB wie üblich gesetzt. Das ID1CHERR-Feld im FCB wird auf die Adresse desjenigen Elements der Operandenlisten-Kette gesetzt, in dem der Fehler auftrat.

Eine Prüfoperation auf eine noch nicht abgeschlossene Ein-/Ausgabe-Operation führt ebenfalls dazu, dass die Kontrolle aus der Operandenlisten-Kette an das Benutzerprogramm an der angegebenen Adresse übergeben wird. Die restlichen Anforderungen in der Kette (einschließlich Sperrungen) werden nicht ausgeführt, und das ID1CHERR-Feld im FCB wird auf die Adresse desjenigen Elements der Operandenliste gesetzt, das den CHK enthält. Es ist also davon abzuraten, Prüfvorgänge in Operandenlisten-Ketten abzusetzen.

Der Anwender muss sicherstellen, dass innerhalb einer Kette die Operationen Sperren, Lesen, Schreiben, Warten, Prüfen und Freigeben sinnvoll angewendet werden. Puffer und Schlüsselfelder werden von UPAM entsprechend der Anforderung benutzt. Die Existenz eines Puffers und die Zugriffsbefugnis werden überprüft, aber es gibt keine Garantie, dass ein Puffer oder ein Schlüsselfeld, die von einer Operation in einer Kette gefüllt werden, von einer späteren Operation dieser Kette nicht überschrieben werden.

Ein Pseudo-Programmabschnitt (DSECT), der mit dem Makroaufruf IDPPL generiert werden kann, beschreibt das Format der PAM-Operandenliste.

In allen Fällen, in denen eine Kette von UPAM-Operandenlisten nicht vollständig abgearbeitet werden kann (z.B. eine Ein-/Ausgabe-Operation ist gescheitert, ein Fehler wurde entdeckt, eine Sperre konnte nicht ausgeführt wurden, die EOF-Bedingung trat auf oder ein CHK wurde an eine laufende Ein-/Ausgabe-Anforderung gestellt), wird in das ID1CHERR-Feld des FCB die Adresse des ersten nicht ausgeführten Eintrags der Kette gebracht. Der Anwender kann davon ausgehen, dass alle Einträge davor richtig ausgeführt wurden.

UPAM meldet über FCB-EXIT und EXLST keinen Fehler,

  • wenn der UPAM-SVC ausgeführt wird und weder Register 1 noch ein Operand der Kette eine gültige Adresse enthalten (z.B.: die Adresse liegt nicht an einer Wortgrenze oder beschreibt ein Feld, das nicht ganz zum virtuellen Adressraum des Anwenders gehört und nicht groß genug ist, um eine UPAM-Makro-Operandenliste aufzunehmen).

  • wenn die FCB-Adresse in der UPAM-Makro-Operandenliste fehlt oder ungültig ist.

In beiden Fällen gibt es keinen FCB, dem der Fehler gemeldet werden könnte, deshalb veranlasst UPAM eine vorzeitige Beendigung des Programms.

Eine UPAM-Operandenlisten-Kette wird vollständig für gültig erklärt, bevor eine Aktion ausgelöst wird. Ist eine CHAIN-Adresse oder eine FCB-Adresse ungültig, wird der Auftrag vorzeitig beendet, bevor irgendein Element der Kette ausgeführt wird.

Wird der Eventing-Mechanismus verwendet und steht bei Ende der Ein-/Ausgabe keine Ereigniskennung zur Verfügung, an die das Ereignis gemeldet werden kann, wird das Benutzerprogramm ebenfalls abgebrochen.