In einer ILCS Anwendung werden alle Unterbrechungen zuerst an die Ereignisroutinen von ILCS geleitet. Ob und wie ein Ereignis behandelt wird hängt ab:
vom Ereignis
von der Programmiersprache, in der das zuletzt aktive Programm geschrieben ist
von den Ereignisbehandlungsroutinen der beteiligten Programme
von der Aufrufsequenz, sofern in dieser verschiedene ILCS Programmiersprachen vorkommen
Varianten der Ereignisbehandlung:
Das Teilprogramm (d.h. ein Programm innerhalb der Call-Aufrufsequenz) oder ein in dessen Aufrufsequenz beteiligtes Laufzeitsystem behandelt das Ereignis und setzt die Verarbeitung fort.
Im obigen Rahmen des Teilprogramms wird das Ereignis nicht behandelt, es wird mit Context und Ereigniscode zu openUTM durchgereicht.
Hier sind zwei Fälle zu unterscheiden:
Es handelt sich um ein Ereignis der Klasse PROCHK oder ERROR:
openUTM bereitet die Meldung K102 auf mit dem übergebenen Context und mit dem übergebenen IW.Das IW ist hier zusätzlich Steuerelement für die folgende PEND Behandlung.
Es handelt sich um ein OTHER EVENT:
Beim Ereignis ’Other Event’ kann openUTM nur stereotyp reagieren und muss dabei verhindern, dass die Task abnormal beendet wird. Der übergebene Ereigniscode ist kein IW im STXIT Sinne; sein Wert hat für openUTM keine Bedeutung; es muss insbesondere verhindert werden, dass dieser Ereigniscode in seiner Eigenschaft als Steuerelement der UTM-PEND-Behandlung zu Fehlerinterpretationen führt. Damit die UTM-Fehlerbehandlung richtig ablaufen kann, wird deshalb der Ereigniscode auf den Wert X’FF’ gesetzt. Dieser Wert wird im weiteren Ablauf von openUTM als (simuliertes) IW interpretiert. D.h. wird ein ’Other event’ bis zu openUTM durchgereicht, so verhält sich openUTM so als wäre ein STXIT-Ereignis mit dem IW=X’FF’ eingetreten.
Die Diagnose muss sich in diesem Fall auf die Meldung stützen, die beim Auftreten eines ’Other Event’ von der beteiligten Sprache, dem Teilprogramm oder von ILCS ausgegeben wird. Fehlt eine solche Meldung, dann wird mit der UTM-Meldung K102...KDCIWFF das STXIT-Ereignis X’FF’ angezeigt.
Der dabei entstehende User-Dump enthält den Code KDCIWFF.
Im obigen Rahmen des Teilprogramms wird das Ereignis interpretiert, evtl. eine Meldung ausgegeben und der ILCS Entry IT0TERM aufgerufen. Über diesen Entry wird openUTM aktiviert und simuliert die Ereignisbehandlung eines TERM UNIT=PROG. In diesem Fall können die Ereignisdaten der primären Unterbrechung nur der Meldung des Teilprogramms oder der beteiligten Sprache entnommen werden. openUTM gibt die Meldung K102... KDCIW90 (TERM) aus, mit den Registerständen zum Zeitpunkt des IT0TERM Aufrufs.
Ein entstehender User-Dump enthält den Code KDCIW90.Es tritt ein ILCS interner Fehler auf:
ILCS verzweigt auf einen definierten UTM-Entry; openUTM setzt einen internen Ereigniscode IW=X’00’, der zweierlei bedeuten kann:
Es trat ein ILCS interner Fehler auf
die ILCS-Stack-Kette ist unterbrochen
UTM gibt dieses IW=X’00’ in der Meldung K102 aus. In seiner Funktion als Steuerelement wird dieses IW=X’00’ im weiteren Programmablauf von openUTM wie ein IW=X’88’ interpretiert, d.h. die Task wird mit TERM UNIT=STEP beendet.
STXIT-Ereignisse - Verhalten von ILCS im Fehlerfall
Nach STXIT-Ereignissen, die ILCS bzw. die aufgerufenen EHL-Routinen nicht bearbeiten kann, schließt ILCS seine STXIT und beendet die Routine mit EXIT CONTINUE=NO. In den meisten Fällen tritt der Fehler direkt danach nochmal auf und weitere STXIT-Routinen (z.B. von openUTM) können den Fehler behandeln. In Einzelfällen, wie z.B. Exponentenüberlauf, ist die Programmumgebung (Registerstände usw.) zu Beginn der ILCS-STXIT-Routine schon so verändert, dass ein Wiederherstellen der Fehlerumgebung nicht möglich ist. ILCS prüft vor dem Beenden der STXIT anhand des IW, ob der aufgetretene Fehler wieder auftreten kann. Ist das nicht der Fall, ruft ILCS seine Programmbeendigungsroutine IT0TERM auf.
Benutzereigene STXIT-Routinen in ILCS-Umgebung:
Um die korrekte Reihenfolge der STXIT-Ausführung in einer ILCS-Programm-Umgebung zu gewährleisten, sollten Sie benutzereigene STXITs über spezielle Assembler-Makros bzw. C-Funktionen direkt bei ILCS anmelden. Details finden Sie im jeweiligen Benutzerhandbuch zu CRTE, ASSEMH und C.