Mit dem Makro OPNCALL eröffnen Benutzerprogramme eine Syntaxdateihierarchie parallel zu der Syntaxdateihierarchie, die bei der LOGON-Verarbeitung für den Benutzerauftrag eröffnet wurde. Parallel zum Arbeitskontext, der von SDF für den Benutzerauftrag erstellt wurde, wird ein neuer Arbeitskontext erstellt.
Der neue Kontext wird vom Programm eröffnet und dazu benutzt, weitere Eingaben zu analysieren. Mit dem Makro CLSCALL oder bei Programmbeendigung wird der Kontext wieder geschlossen.
Die Kontexte, die vom Makro OPNCALL eröffnet werden, heißen daher „Programmkontexte“. Das Benutzerprogramm bestimmt die Syntaxdateihierarchie. Der Kontext, der von SDF bei der Einleitung des Benutzerauftrags erstellt wird, heißt „Systemkontext“. Der Systemkontext benutzt die Voreinstellungen der Systembetreuung in der SDF-Parameterdatei.
Der Systemkontext wird vom Kommandoprozessor dazu verwendet, Kommandos zu lesen und zu analysieren, bevor sie vom Kommandoprozessor ausgeführt werden. Die Syntaxdateihierarchie und die SDF-Optionen werden wie beschrieben bearbeitet (siehe Syntaxdateien und ihre Bearbeitung mit SDF-A). Der Identifikator des Systemkontexts in den verschiedenen Makros ist die Standard NULL-Adresse.
Der Programmkontext kann von einem Programm dazu verwendet werden, seine Anweisungen vor der Ausführung zu lesen und zu analysieren. Die Syntaxdateihierarchie wird mit OPNCALL vom Benutzerprogramm für die Ebene der System- und Gruppensyntaxdatei(en) festgelegt. Die SDF-Optionen können lokal im Programmkontext mit MODIFY-SDF-OPTIONS verändert werden. Der Identifikator des Programmkontexts wird vom Makro OPNCALL als Rückgabewert übergeben und von den folgenden Makroaufrufen in diesem Kontext verwendet.
Der Kommandoprozessor kann in keinem Fall ein Kommando ausführen, das in einem Programmkontext verarbeitet wird. Mit dem Makro CMD kann kein Programmkontext erstellt werden.
Mit dem Makro OPNCALL kann ein Benutzerprogramm in bzw. aus den Programmkontexten
Kommandos übersetzen (d.h. diese analysieren, ohne sie auszuführen)
Anweisungen lesen, übersetzen oder korrigieren
Information erhalten.
Der Programmkontext hat folgende Eigenschaften:
Die Systemsyntaxdateien können entweder die aktuellen Systemsyntaxdateien des Systemkontexts des Benutzerauftrags sein oder es kann explizit mit dem Makro OPNCALL bestimmt werden, dass eine andere Basis-Systemsyntaxdatei aktiviert wird. Wenn die Systembetreuung die aktuellen Systemsyntaxdateien des Systemkontexts mit MODIFY-SDF-PARAMETERS dynamisch wechselt, dann gilt diese Veränderung ab der nächsten Transaktion auch für den Programmkontext, der diese Systemsyntaxdateien benutzt hat.
Die Gruppensyntaxdatei kann entweder die aktuelle Gruppensyntaxdatei des Systemkontexts des Benutzerauftrags sein oder explizit mit dem Makro OPNCALL bestimmt werden. Sie kann im erstellten Programmkontext nicht gewechselt werden.
Die Benutzersyntaxdatei ist die aktuelle Benutzersyntaxdatei des Benutzerauftrags. Sie gilt sowohl für den System- als auch für den Programmkontext und kann mit dem Kommando bzw. der Anweisung MODIFY-SDF-OPTIONS dynamisch gewechselt werden. MODIFY-SDF-OPTIONS wird von CMDRST oder im Puffer von CMDTST (EXECUTE= *YES) gelesen.
Wenn im Programmkontext eigene Systemsyntaxdateien geöffnet sind, werden die SDF-Standardanweisungen aus dem Programmkontext verwendet. Standardanweisungen, die im Programmkontext nicht verfügbar sind, holt SDF aus dem in der Basis-Systemsyntaxdatei definierten Programm $CMDPGM im Systemkontext.
Veränderungen der Benutzersyntaxdatei und der SDF-Optionen im Programmkontext haben keine Auswirkung auf den Systemkontext. Von einem Benutzerprogramm können gleichzeitig bis zu 255 Kontexte, einschließlich des Systemkontexts, eröffnet werden.
Folgende SDF-Makros können in einem Programmkontext verwendet werden oder diesen bearbeiten:
OPNCALL:
erstellt den neuen Kontext und bestimmt die Gruppen- und die Systemsyntaxdateien, die aktiviert werden sollen. Der Identifikator des Programmkontexts wird an das Benutzerprogramm als Rückgabewert übergeben. Dieser Identifikator wird bei jedem Aufruf bestimmt, der in einem Programmkontext verarbeitet wird.CMDTST, CMDRST, CMDCST und CMDSTA:
Der Identifikator des Programmkontexts wird bestimmt, wenn in dem entsprechenden Kontext gearbeitet wird.CLSCALL:
beendet den Programmkontext. Wird kein CLSCALL abgesetzt, werden mit Programmbeendigung alle Programmkontexte freigegeben.
Hinweise zum Programmkontext
Mit dem Programmkontext wird eine neue SDF-Arbeitsumgebung angeboten, die eigene Eingabe- und Syntaxspeicher hat. Deshalb müssen folgende Punkte beachtet werden:
Wird für eine Liste von Anweisungen geblockte Eingabe verwendet, wirkt die Eingabe nur lokal auf den aktuellen Kontext. Geblockte Eingabe für CMDRST in einem Programmkontext kann keinen anderen Kontext aufrufen.
In der geblockten Eingabe von Anweisungen können auch Datensätze eingegeben werden. Diese können von einem auf CMDRST folgenden RDATA (SYSFILE) nur im Systemkontext gelesen werden:
RDATA (SYSFILE) kann nur Datensätze aus dem Terminalpuffer des Systemkontexts lesen. RDATA sollte daher nicht nach CMDRST im Programmkontext aufgerufen werden.
Die EOF-Bedingung für die Anweisungseingabe und den Spin-off-Mechanismus wirkt nur in dem Kontext, in dem die Anweisungen gelesen werden.
Die Anweisungen werden nicht in der Umgebung des aktuellen Benutzerauftrags übersetzt (CMDTST). Der Benutzer muss den simulierten Benutzerauftragstyp (Stapel- oder Dialogauftrag) im Makro OPNCALL festlegen. Den simulierten Prozedurmodus (Prozedur oder Primary) muss er im Makro CMDTST festlegen.
Voreinstellung ist, dass CMDTST bei der Prüfung der Eingabe keine Prüfung des Benutzerauftragstyps oder des Prozedurmodus ausführen muss. CMDRST liest die Anweisungen in der Umgebung des aktuellen Benutzerauftrags.
CHKPT und RESTART-PROGRAM für Programmkontexte
Beim Checkpoint eines Programms im Programmkontext muss nach RESTART-
PROGRAM mit folgendem Verhalten für die wiedereröffneten Hierarchien gerechnet werden:
War zum Zeitpunkt des CHKPT keine besondere Systemsyntaxdatei für den Programmkontext festgelegt (siehe OPNCALL SFSYSTM=*STD), dann gilt nach dem Restart die Systemsyntaxdatei des aktuellen Systemkontexts.
War eine besondere Systemsyntaxdatei festgelegt, dann wird genau diese wieder eröffnet.War zum Zeitpunkt des CHKPT keine besondere Gruppensyntaxdatei für den Programmkontext festgelegt (siehe OPNCALL SFGROUP=*STD), dann gilt nach dem Restart die Gruppensyntaxdatei des aktuellen Systemkontexts, die der aktuellen PROFILE-ID zugeordnet ist.
War eine besondere Gruppensyntaxdatei festgelegt, dann wird genau diese wieder eröffnet.Die Benutzersyntaxdateien, die zum Zeitpunkt des Checkpoint geöffnet waren, werden beim Restart erneut geöffnet.
Nach RESTART-PROGRAM werden die Kontexte so wiederhergestellt, als ob die Systemsyntaxdatei von der Systembetreuung dynamisch verändert worden wäre.