Alle neuen Makros und i.d.R. die Makros, die um die 31-Bit-Schnittstelle erweitert wurden, benutzen zur Identifikation ihrer Schnittstelle den Standardheader.
Der Standardheader ist ein 8 Byte langes Feld am Anfang des Datenbereichs mit der (normierten) Bezeichnung der Schnittstelle und 4 Byte zur Aufnahme eines Returncodes. Der Standardheader wird vom jeweiligen Makro erzeugt und initialisiert, d.h. mit den gültigen Werten für UNIT, FUNCTION und VERSION versorgt. Bei Makroaufrufen in der E-Form unter Bezug auf den Datenbereich muss unter Umständen der Aufrufer den Standardheader initialisieren. Näheres ist beim jeweiligen Makro angegeben.
Aufbau des Standardheaders:
Byte | Feldinhalt und Bedeutung |
0 - 1 | Bezeichnung der Funktionseinheit (UNIT) mit der verlangten Funktion |
2 | Bezeichnung der Funktion (FUNCTION) innerhalb der Funktionseinheit |
3 | Bezeichnung des Änderungsstandes (VERSION) der Funktion |
4 | Unterwert 2 des Returncodes (SUBCODE2) |
5 | Unterwert 1 des Returncodes (SUBCODE1) |
6 - 7 | Hauptwert des Returncodes (MAINCODE) |
Tabelle 3: Standardheader
Folgende Werte des Returncodes sind durch Konvention makroübergreifend festgelegt:
SUB- | SUB- | MAIN- | Bedeutung |
X'00' | X'00' | X'0000' | Erfolgreiche Funktionsausführung. Es gibt keine zusätzlichen Informationen zum MAINCODE. |
X'01' | X'00' | X'0000' | Erfolgreiche Funktionsausführung. Es waren keine Aktionen erforderlich. |
X'00' | X'01' | X'FFFF' | Die angeforderte Funktion wird nicht unterstützt (falsche Angabe für UNIT oder FUNCTION im Standardheader). |
X'00' | X'02' | X'FFFF' | Die angeforderte Funktion ist nicht verfügbar. |
X'00' | X'03' | X'FFFF' | Die angegebene Version der Schnittstelle wird nicht unterstützt (falsche Versionsangabe im Standardheader). |
X'00' | X'04' | X'FFFF' | Der Datenbereich ist nicht auf Wortgrenze ausgerichtet. |
X'00' | X'41' | X'FFFF' | Das Subsystem ist nicht vorhanden; es muss explizit erzeugt werden. |
X'00' | X'42' | X'FFFF' | Die aufrufende Task ist mit dieser Schnittstelle nicht konnektiert; sie muss explizit konnektiert werden. |
X'00' | X'81' | X'FFFF' | Das Subsystem ist derzeit nicht verfügbar. |
X'00' | X'82' | X'FFFF' | Das Subsystem ist im DELETE- oder HOLD-Zustand. |
MAINCODE kennzeichnet das Ergebnis der Funktionsausführung. SUBCODE1 dient der Klassifizierung des Hauptwertes. SUBCODE2 dient der weiteren Unterteilung des Fehlers in Fehlerklassen oder enthält zusätzliche Diagnoseinformationen.
Bei allen neuen Makros sollte der Returncode ausschließlich im Standardheader übergeben werden. Der Returncode kann bei manchen Makroschnittstellen aber auch im Register R15 oder im Standardheader und im Register R15 übergeben werden. Um zu prüfen, ob im Standardheader ein Returncode übergeben wurde, sollte das Returncode-Feld mit X'FFFFFFFF' vorbesetzt werden.
Beispiel für die Erzeugung des Standardheaders
WROUT START PRINT NOGEN BALR 3,0 USING *,3 WROUT AMODE ANY WROUT RMODE ANY GPARMOD 31 1 *,MACRO: GPARMOD, VERSION: VER121 PRINT GEN WROUT OUTPUT,STOP 1 ##SPASS S0002S,S0002D A312 2 CNOP 0,4 2 BAS 1,S0002S ADDRESS AND SKIP PARAMS 1 S0002D DS 0F A340 1 FHDR UNIT=36,FUNCT=17,VERS=2 2 DS 0A 2 DS 0XL8 GENERAL OPERAND LIST HEADER 2 DC AL2(36) FUNCTION UNIT NUMBER 2 DC AL1(17) FUNCTION NUMBER 2 DC AL1(2) FUNCTION INTERFACE VERSION NUMBER 2 DC X'FFFFFFFF' Returncode is virgin 1 * 1 DC AL4(STOP) ERROR ADDRESS 1 DC AL4(OUTPUT) MESSAGE AREA ADDRESS * :