Bei der ERASE-Verarbeitung sind zwei Exit-Punkte vorgesehen, ein Request- und ein Return Exit. Sie klammern je einen Auftrag.
Ein Auftrag ist zum einen immer eines der Kommandos DELETE-FILE, DELETE-FILE-GROUP, DELETE-FILE-GENERATION, DELETE-SYSTEM-FILE, EXPORT-FILE bzw. der ERASE-Makroaufruf, zum anderen aber auch jeder Katalogeintrag, der von der ERASE-Funktion bearbeitet wird.
Eine Sonderstellung haben die Dateigenerationsgruppen: hier bilden nicht die Katalogeinträge der Generationen separate Aufträge, sondern die Dateigenerationsgruppe als Ganzes gilt als ein Auftrag.
Am Request Exit kann die Exit-Routine den Auftrag prüfen und ggf. abweisen. Wenn der Return Exit eine AUDIT-Überwachung durchführen soll, muss der AUDIT-Indikator aus dem Katalogeintrag gesichert werden.
Der Return Exit wird nach Abarbeitung eines Auftrags angesprungen. Die Exit-Routine kann den DMS-Fehlercode prüfen und ggf. Überwachungsmaßnahmen einleiten.
Im Register 1 enthalten beide Exits einen Zeiger auf eine Struktur, die vom Makro EX060 beschrieben wird und im Arbeitsbereich des aufrufenden Systemmoduls angelegt ist.
Will die Systembetreuung in der Exit-Routine Überwachungsmaßnahmen ergreifen, die vom AUDIT-Wert im Katalogeintrag abhängen, so muss diese Information bereits am Request Exit sichergestellt werden, da nach erfolgreichem Löschen (am Return Exit) der Katalogeintrag im Regelfall nicht mehr zur Verfügung steht.
Das Feld für den Dateinamen ist 80 Bytes lang. Es sollte in der Exit-Routine gelöscht werden, bevor es versorgt wird, da es sonst Schmierzeichen enthalten kann. Wird das Feld nicht gelöscht, muss das Endekriterium für den Dateinamen abgefragt werden (X'40').
Return Exit (060)
Folgende Informationen werden an die Exit-Routine übergeben:
R1 = A(EX060-Parameterbereich) R12 = A(TPR Program Manager) R13 = A(Sicherungsbereich der rufenden Komponente) R14 = A(indirekter Rücksprung) R15 = A(Exit-Routine)
Der Return Exit soll den Erfolg eines Löschauftrages anzeigen. Er wird nicht aufgerufen, wenn die Request-Exit-Routine den ERASE abgewiesen hat.
Bei jedem Aufruf enthält das Feld &p.RET des ERASE-Parameterbereichs den
Returncode, der beim Löschen bzw. Löschversuch aufgetreten ist; falls kein Fehler aufgetreten ist, steht dort der Wert X'00000000'. Der ERASE-Parameterbereich wird durch das Feld
MAXEPL adressiert. Das Feld MAXFLC enthält den Wert, den das entsprechende MAXFLC-Feld des Request Exits enthielt. Ist MAXFLC Null, so handelt es sich um den Return Exit eines Kommandos bzw. Makros und &p.RET enthält den Sammelfehlercode.
Die Exit-Routine kann keine Rückkehrinformation an den Systemmodul senden. Nach der Rückkehr aus der Return-Exit-Routine erfolgt die Rückkehr aus der ERASE-Verarbeitung. Der Maincode im Standard-Header des Parameterbereichs muss von der Exit-Routine mit X'0000' oder X'0004' versorgt werden. Enthält der Maincode andere Werte, wird auf dem Bedienungsplatz folgende Meldung ausgegeben:
DMS06B9 DIE AN DEN SYSTEM-EXIT (&00) ANGESCHLOSSENE EXIT-ROUTINE LIEFERTE DEN
FEHLERCODE (&01)
Request Exit (061)
Registerversorgung wie Return Exit.
Der Request Exit wird genau einmal pro ERASE-Auftrag angesprungen. Der Exit-Parameterblock EX060 wird vorher wie folgt versorgt:
MAXEPL zeigt auf den ERASE-Parameterbereich (s.o.), MAXFLC enthält einen Zähler, der beim Kommando- bzw. Makro-Request mit Null initialisiert und bei jedem Auftrag um eins erhöht wird.
Die Rückinformation an den rufenden Systemmodul erfolgt im Maincode des Standardheaders des Exit-Parameterbereichs. Es sind folgende Werte möglich:
X'0000' | Die ERASE-Verarbeitung wird mit dem eventuell von der Exit-Routine |
X'0004' | Die ERASE-Anforderung wird mit Fehlercode X'0514' abgewiesen. DMS0514 BENUTZUNG DES ANGEGEBENEN KOMMANDOS ODER 'ERASE' MAKROS WURDE VOM SYSTEMVERWALTER EINGESCHRAENKT. KOMMANDO ODER MAKRO ABGEWIESEN. |
sonstige | Wie für X'0004'; zusätzlich wird folgende Meldung auf dem DMS06B9 DIE AN DEN SYSTEM-EXIT (&00) ANGESCHLOSSENE EXIT-ROUTINE LIEFERTE DEN FEHLERCODE (&01) |
Hinweis
Register 12, 13 und 14 dürfen von der Exit-Routine nicht zerstört werden.
DSECT
EX060 MF=D MFTST MF=D,PREFIX=D,MACID=MAX,ALIGN=F, C DMACID=MAX,SUPPORT=(D,C,L),DNAME=MAXMDL DMAXMDL DSECT , *,##### PREFIX=D, MACID=MAX ##### * Parameterarea DMAXHDR FHDR MF=(C,DMAX),EQUATES=NO Standard-Header DMAXHDR DS 0A DMAXFHE DS 0XL8 0 GENERAL PARAMETER AREA HEADER * DMAXIFID DS 0A 0 INTERFACE IDENTIFIER DMAXFCTU DS AL2 0 FUNCTION UNIT NUMBER * BIT 15 HEADER FLAG BIT, * MUST BE RESET UNTIL FURTHER NOTICE * BIT 14-12 UNUSED, MUST BE RESET * BIT 11-0 REAL FUNCTION UNIT NUMBER DMAXFCT DS AL1 2 FUNCTION NUMBER DMAXFCTV DS AL1 3 FUNCTION INTERFACE VERSION NUMBER * DMAXRET DS 0A 4 GENERAL RETURN CODE DMAXSRET DS 0AL2 4 SUB RETURN CODE DMAXSR2 DS AL1 4 SUB RETURN CODE 2 DMAXSR1 DS AL1 5 SUB RETURN CODE 1 DMAXMRET DS 0AL2 6 MAIN RETURN CODE DMAXMR2 DS AL1 6 MAIN RETURN CODE 2 DMAXMR1 DS AL1 7 MAIN RETURN CODE 1 DMAXFHL EQU 8 8 GENERAL OPERAND LIST HEADER LENGTH * DMAXFLC DS F File Counter DMAXEPL DS A Addr der ERASE-PL DMAX# EQU *-DMAXHDR
Das Feld MAXEPL enthält einen Zeiger auf einen Parameterbereich der Version 3. Wurde ein ERASE der Version 3 verlangt, so ist dies die Kopie des Original-Parameterbereichs. Wurde ein ERASE der Version 0, 1 oder 2 verlangt, so wird das alte Format in das neue umgewandelt. Ein Zugriff auf den Original-Parameterbereich ist nicht möglich.
ERASE-Parameterbereich
Die DSECT für den ERASE-Parameterbereich kann erzeugt werden mit
[name] ERASE MF=D[,PREFIX=prefix/*],VERSION=3
Der ERASE-Parameterbereich muss mit dem seit BS2000/OSD-BC 3.0 gültigen Format (VERSION=3) erzeugt werden. Alle Exit-Routinen, die den ERASE-Parameterbereich verwenden, müssen an dieses neue Format angepasst werden.