Allgemeines
Anwendungsgebiet: | Binden und Laden; siehe "Binden und Laden" |
Makrotyp: | S-Typ, MF-Format 2: Standardform/C-/D-/L-/E-/M-Form; siehe "S-Typ-Makroaufrufe" |
Zum dynamischen Bindelader DBL siehe auch Handbuch „BLSSERV“ [4].
Makrobeschreibung
Der Makroaufruf PINF informiert den Benutzer über Programme, die mit den Kommandos LOAD-EXECUTABLE-PROGRAM oder START-EXECUTABLE-PROGRAM (bzw. LOAD-PROGRAM oder START-PROGRAM) geladen wurden. Folgende Informationen können abgefragt werden:
der internen Programmname (SELECT=INTNAME),
die interne Programmversion (SELECT=INTVERS),
das Erzeugungsdatum des Programmes (SELECT=INTDATE),
der Copyright-Name des Programmes (SELECT=COPRIGHT),
der Name der Bibliothek, in der sich das Programm befand (SELECT=FILENAME),
der Elementname des Programmes in der Bibliothek (SELECT=ELEMNAME),
die Elementversion (SELECT=ELEMVERS),
den Elementtyp (SELECT=ELEMTYPE),
der Name, der im Ladeaufruf (bei START-PROGRAM bzw. LOAD-PROGRAM) angegeben wurde (SELECT=SPECNAME),
einen Indikator, der anzeigt, ob das geladene Programm vom statischen Lader ELDE geladen wurde oder das erste Modul einer Ladeeinheit war und vom DBL geladen wurde (SELECT=LOADTYPE).
Das Ausgabefeld enthält alle Informationen in sedezimaler Form.
Makroaufrufformat und Operandenbeschreibung
PINF |
SELECT=INTNAME / INTVERS / INTDATE / COPRIGHT / FILENAME / ELEMNAME / ELEMVERS / ELEMTYPE / SPECNAME / LOADTYPE ,VERSION=001 / 002 ,ADDR=adr / (r) [,LEN=integer] ,MF=S / C / D / E / L / M [,PARAM=adr / (r)] ,PREFIX=P / p ,MACID=BPI / macid |
In der nachfolgenden Operandenbeschreibung sind die Operanden alphabetisch geordnet.
ADDR=adr
gibt die symbolische Adresse eines Feldes an, in dem der DBL die Informationen ablegen soll.
(r)
r = Register mit dem Adresswert adr. Angabe nur mit MF=M.
LEN=
gibt die Länge des bei ADDR angegebenen Ausgabefeldes in Byte an.
Wenn der Operand nicht angegeben wird, dann wird die Mindestlänge (4 Byte) verwendet.
integer
Die Mindestlänge ist 4 Byte. Werden bei SELECT mehrere Informationen angegeben, so muss die Gesamtlänge des Ausgabefeldes gleich der Summe aller
Informationslängen (siehe Operand SELECT) sein.
MF=
Zur allgemeinen Beschreibung des Operanden MF, der dazugehörenden Operandenwerte und der angegebenen Operanden PARAM, PREFIX und MACID siehe Abschnitt „S-Typ-Makroaufrufe“. Die gültigen MF-Werte sind zu Beginn der Makrobeschreibung bei „Makrotyp“ angegeben und aus dem Aufrufformat ersichtlich.
Bei der C-Form, D-Form oder M-Form des Makroaufrufs kann ein Präfix PREFIX und bei der C-Form oder M-Form zusätzlich eine Macid MACID angegeben werden (siehe AAbschnitt „S-Typ-Makroaufrufe“).
SELECT=
Legt die Art der Information fest, die ausgegeben wird. Anzugeben sind die symbolischen Namen der gewünschten Informationen. Gleichzeitig dürfen maximal 8 Informationen gefordert werden. Die folgenden Tabellen enthalten die Beschreibung der Teilinformationen mit symbolischen Namen und ihrer Länge.
Bedeutung der Ausgabe bei VERSION=001
In der Spalte Beschreibung bedeutet:
(D):
Das Programm wurde durch den dynamischen Bindelader DBL geladen, die Information bezieht sich auf das erste geladene Modul (LLM oder Bindemodul) der Ladeeinheit.
(S):
Das Programm wurde durch den statischen Lader ELDE geladen (Lademodul, Typ-C-Element einer Bibliothek), oder es handelt sich um ein PAM-LLM, das durch den dynamischen Bindelader DBL geladen wurde.
symb. | Länge | Beschreibung |
INTNAME | 41 | interner Programmname: |
INTVERS | 24 | interne Programmversion: |
INTDATE | 10 | Erzeugungsdatum des Programmes in der Form yyyy-mm-dd |
COPRIGHT | 64 | Copyright-Name des Programmes |
FILENAME | 54 | (D): |
ELEMNAME | 64 | (D): (S): |
ELEMVERS | 24 | (D): |
ELEMTYPE | 8 | Enthält einen Buchstaben, der den Elementtyp kennzeichnet und 7 |
SPECNAME | 64 | Enthält den Namen, der im Ladeaufruf (bei START-PROGRAM oder |
LOADTYPE | 1 | Indikator für den Typ des geladenen Programmes: |
Bedeutung der Ausgabe bei VERSION=002
In der Spalte Beschreibung bedeutet:
(D):
Das Programm wurde durch den dynamischen Bindelader DBL geladen, die Information bezieht sich auf das erste geladene Modul (LLM oder Bindemodul) der Ladeeinheit oder auf ein PAM-LLM.
(S):
Das Programm wurde durch den statischen Lader ELDE geladen (Lademodul, Typ-C-Element einer Bibliothek).
symb. | Länge | Beschreibung |
INTNAME | 41 | interner Programmname: |
INTVERS | 24 | interne Programmversion: |
INTDATE | 10 | Erzeugungsdatum des Programmes in der Form yyyy-mm-dd |
COPRIGHT | 64 | Copyright-Name des Programmes |
FILENAME | 54 | (D): |
ELEMNAME | 64 | (D): (S): |
ELEMVERS | 24 | (D): |
ELEMTYPE | 8 | Enthält einen Buchstaben, der den Elementtyp kennzeichnet und |
SPECNAME | 64 | Enthält den Namen, der im Ladeaufruf (bei START-PROGRAM oder |
LOADTYPE | 1 | Indikator für den Typ des geladenen Programmes: |
VERSION=
Legt die gewünschte Makro-Version und damit das Layout der Ausgabe fest.
001
Version 1 des PINF-Makros wird verwendet. In diesem Fall wird bei der Ausgabe nicht zwischen Lademodulen und PAM-LLMs unterschieden.
002
Version 2 des PINF-Makros wird verwendet. Diese Angabe wird ab BLSSERV V2.5 unterstützt.
Die ausgegebene Information für PAM-LLMs unterscheidet sich von der Information für Lademodule.
Hinweise zum Makroaufruf
Eine dynamische Änderung des Datenbereichs wird normalerweise mit einem Makroaufruf der Form MF=M durchgeführt.
Wird die Änderung jedoch direkt mit symbolischen Namen von MF=D vorgenommen, sollte der Benutzer beachten, dass für den Makro-Prozessor
die Einträge sequenziell ab der ersten Position erfolgen müssen
Einträge, die den aktuell vorhandenen folgen, ignoriert werden
ein Null-Eintrag in den aktuell vorhandenen Einträgen ignoriert, aber trotzdem als gültiger Eintrag gewertet wird.
Rückinformation und Fehleranzeigen
Die geforderten Informationen werden in dem Feld übergeben, das mit dem Operanden ADDR festgelegt wurde.
Standardheader:
+---------------+ | | | | | |c|c|b|b|a|a|a|a| +---------------+
Über die Ausführung des Makros PINF wird im Standardheader folgender Returncode übergeben (cc=Subcode2, bb=Subcode1, aaaa=Maincode):
X'cc' | X'bb' | X'aaaa' | Erläuterung |
X'00' | X'00' | X'0000' | Der Makro wurde normal ausgeführt. |
X'00' | X'40' | X'0001' | Die gewünschte Information ist noch nicht definiert (Warnung) oder wird |
X'00' | X'01' | X'0010' | Das Ausgabefeld ist zu klein. |
X'00' | X'01' | X'0020' | Bei SELECT wurde ein unbekannter symbolischer Name angegeben. |
X'00' | X'01' | X'0070' | Der Speicherbereich für das Ausgabefeld ist nicht zugewiesen. |
X'00' | X'20' | X'0090' | Interner Fehler. |
X'00' | X'01' | X'0100' | Der SELECT-Operand fehlt. |
X'00' | X'01' | X'0110' | Bei SELECT wurden mehr als 8 Informationen angegeben. |
X'00' | X'01' | X'FFFF' | Die Funktion wird nicht mehr oder noch nicht unterstützt. |
X'00' | X'02' | X'FFFF' | Die Funktion ist nicht verfügbar. |
X'00' | X'03' | X'FFFF' | Die Version der Schnittstelle wird nicht unterstützt. |
Beispiel
Das Programm PINFBSP ruft den Makro PINF auf und gibt folgende Informationen aus:
den internen Programmnamen
den Bibliotheksnamen
den Namen des Elements in der Bibliothek
den Elementtyp
die Elementversion
den im Ladeaufruf angegebenen Namen.
PINFBSP CSECT PINFBSP AMODE ANY PINFBSP RMODE ANY BASR 10,0 USING *,10 GPARMOD 31 PRINT GEN EJECT * ***** PINF SELECT = INTNAME ***** * INTNAM MVC MTEXT(24),=CL24'PINF SEL=INTNAME' MVC MEXPECT(4),=XL4'00000000' PINF SELECT=INTNAME,ADDR=ZONE,LEN=41 --------------------------(1) L 15,4(1) --------------------------------------------------(2) CL 15,MEXPECT BE WINTNAM --------------------------------------------------(3) BAS 12,MEREXP ------------------------------------------------(4) B FILNAM ---------------------------------------------------(5) WINTNAM MVC MAREA,MTEXT ----------------------------------------------(6) MVC ZAREA(41),ZONE BAS 12,WRINFO * ***** PINF SELECT = FILENAME ***** * FILNAM MVC MTEXT(24),=CL24'PINF SEL=FILENAME' MVC MEXPECT(4),=XL4'00000000' PINF SELECT=FILENAME,ADDR=ZONE,LEN=54 -------------------------(7) L 15,4(1) CL 15,MEXPECT BE WFILNAM BAS 12,MEREXP B ELMT WFILNAM MVC MAREA,MTEXT ----------------------------------------------(8) MVC ZAREA(54),ZONE BAS 12,WRINFO *
***** PINF SELECT = ELEMNAME, ELEMVERS, ELEMTYPE ***** * ELMT MVC MTEXT(24),=CL24'PINF SEL=ELEMxxxx' MVC MEXPECT(4),=XL4'00000000' PINF SELECT=(ELEMNAME,ELEMVERS,ELEMTYPE),ADDR=ZONE,LEN=96 -----(9) L 15,4(1) CL 15,MEXPECT BE WELMT BAS 12,MEREXP B SPNAM WELMT MVC MAREA(24),=CL24'PINF SEL=ELEMNAME' ----------------------(10) MVC ZAREA(64),ZONE BAS 12,WRINFO * MVC MAREA(24),=CL24'PINF SEL=ELEMVERS' ----------------------(11) MVC ZAREA(24),ZONE+64 BAS 12,WRINFO * MVC MAREA(24),=CL24'PINF SEL=ELEMTYPE'-----------------------(12) MVC ZAREA(8),ZONE+88 BAS 12,WRINFO * ***** PINF SELECT = SPECNAME ***** * SPNAM MVC MTEXT(24),=CL24'PINF SEL=SPECNAME' MVC MEXPECT(4),=XL4'00000000' PINF SELECT=SPECNAME,ADDR=ZONE,LEN=64 ------------------------(13) L 15,4(1) CL 15,MEXPECT BE WSPNAM BAS 12,MEREXP B MTERM WSPNAM MVC MAREA,MTEXT ---------------------------------------------(14) MVC ZAREA(64),ZONE BAS 12,WRINFO * MTERM TERM -----------------------------------------------------------(15) MTERMD TERM DUMP=Y ----------------------------------------------------(16) * **** Definitions **** MEREXP DS 0H MVC MPACK(4),MEXPECT ----------------------------------------(17) UNPK MEXP+1(9),MPACK(5) NC MEXP+1(8),=X'0F0F0F0F0F0F0F0F' TR MEXP+1(8),MTAB MVI MEXP,C'(' MVC MEXP+9(10),MCEXP *
MEREAL ST 15,MPACK ------------------------------------------------(18) UNPK MRS(9),MPACK(5) NC MRS(8),=X'0F0F0F0F0F0F0F0F' TR MRS(8),MTAB MVI MRS+8,MBLANK * MEWROUT DS 0H WROUT MMSG,MTERMD----------------------------------------------(19) MVI MTEXT,MBLANK --------------------------------------------(20) MVC MTEXT+1(51),MTEXT BR 12 * WRINFO DS 0H WROUT AREA,MTERMD ---------------------------------------------(22) MVI ZAREA,MBLANK MVC ZAREA+1(95),ZAREA BR 12 * **** DATA DEFINITION **** * AREA DC Y(LAREA) DC CL3' ' MAREA DC CL24' ' ZAREA DC CL96' ' LAREA EQU *-AREA MMSG DC Y(MMSGE) DC C' ==ERROR== ' MTEXT DC CL24' ' MRS DC CL9' ' MEXP DC CL19' ' MMSGE EQU *-MMSG MBLANK EQU X'40' MCEXP DC C' EXPECTED)' MPACK DS F DC X'00' MTAB DC C'0123456789ABCDEF' MEXPECT DC F'0' ZONE DS CL96 END
(1) | Der Makro PINF wird aufgerufen. Angefordert wird der interne Programmname, der mit einer maximalen Länge von 41 Byte im Feld |
(2) | Der Makro-Returncode, der im 2. Wort des Standardheader abgelegt ist, wird in Register R15 geladen. Danach wird der tatsächliche Returncode mit dem zu erwartenden Returncode X'00000000' verglichen. |
(3) | Bei fehlerfreier Makroausführung wird zur Ausgabe der von PINF gelieferten Information verzweigt. |
(4) | Bei fehlerhafter Makroausführung wird zur Fehlerbehandlungsroutine verzweigt. |
(5) | Nach der Fehlerbehandlung wird das Programm mit dem nächsten PINF-Aufruf fortgesetzt. |
(6) | Ausgabe des internen Programmnamens, der vom PINF-Makro im Feld |
(7) | Der Makro PINF wird erneut aufgerufen. Angefordert wird der Name der Programmbibliothek, der mit einer maximalen Länge von 54 Byte im Feld |
(8) | Ausgabe des Bibliotheksnamens. |
(9) | Der Makro PINF wird wieder aufgerufen. Angefordert werden:
Für diese 3 Informationen sind insgesamt 96 Byte zu reservieren. |
(10) | Ausgabe des Elementnamens. Er beginnt am Anfang des Feldes |
(11) | Ausgabe der Elementversion. Sie beginnt an der symbolischen Adresse ZONE+64 und hat eine Länge von 24 Byte. |
(12) | Ausgabe des Elementtyps. Er beginnt an der symbolischen Adresse ZONE+88 und hat eine Länge von 8 Byte. |
(13) | Der Makro PINF wird erneut aufgerufen: Angefordert wird der Symbolname, der im Ladeaufruf (z.B. bei START-EXECUTABLE-PROGRAM) angegeben ist. Der Symbolname soll mit einer maximalen Länge von 64 Byte im Feld |
(14) | Ausgabe des Symbolnamens aus dem Ladeaufruf. |
(15) | Normales Programmende. |
(16) | Programmende mit DUMP, falls Fehler im WROUT-Makro auftreten. |
(17) | Aufbereitung des zu erwartenden Makro-Returncodes als Zeichenkette, die später ausgegeben wird. |
(18) | Aufbereitung des tatsächlichen Makro-Returncodes als Zeichenkette, die später ausgegeben wird. |
(19) | Ausgabe einer Fehlermeldung, falls der PINF-Makro einen Returncode |
==ERROR== PINF SEL=zzzzzzzz xxxxxxxx (00000000 EXPECTED)
(20) | Dabei ist |
(21) | Die Felder |
(22) | Ausgabe der geforderten Programminformation. Danach wird das Feld |
Ablaufprotokoll
/start-assembh % BLS0500 PROGRAM 'ASSEMBH', VERSION '<ver>' OF '<date>' LOADED % ASS6010 <ver> OF BS2000 ASSEMBH READY //compile source=*library-element(macexmp.lib,pinfbsp), - // compiler-action=module-generation(module-format=llm), - // module-library=macexmp.lib, - // listing=parameters(output=*library-element(macexmp.lib,pinfbsp)) % ASS6011 ASSEMBLY TIME: 381 MSEC % ASS6018 0 FLAGS, 0 PRIVILEGED FLAGS, 0 MNOTES % ASS6019 HIGHEST ERROR-WEIGHT: NO ERRORS % ASS6006 LISTING GENERATOR TIME: 143 MSEC //end % ASS6012 END OF ASSEMBH /start-executable-program library=macexmp.lib,element-or-symbol=pinfbsp % BLS0523 ELEMENT 'PINFBSP', VERSION '@' FROM LIBRARY ':2OSG:$QM212.MACEXMP.LIB' IN PROCESS % BLS0524 LLM 'PINFBSP', VERSION ' ' OF '<date> <time>' LOADED PINF SEL=INTNAME PINFBSP -----------------------------------------(23) PINF SEL=FILENAME :2OSG:$QM212.MACEXMP.LIB PINF SEL=ELEMNAME PINFBSP PINF SEL=ELEMVERS ~ PINF SEL=ELEMTYPE L PINF SEL=SPECNAME PINFBSP
(23) | Ausgabe der angeforderten Informationen auf SYSOUT. Der interne Programmname ist PINFBSP. Das Modul wurde aus der Programmbibliothek MACEXMP.LIB geholt. Es ist dort als LLM mit dem Namen PINFBSP gespeichert. Im Ladeaufruf (bei START-EXECUTABLE-PROGRAM) wurde der Name PINFBSP angegeben. |