JV-Makros, mit ONEVT-Makro
Das Programm BONEVT setzt einen ONEVT-Makroaufruf für die Ereigniskennung ONEVTEST ab, der immer dann einen POSSIG-Aufruf verursacht, wenn eine der folgenden Bedingungen erfüllt ist:
Jobvariable JV1 ist zum Zeitpunkt des ONEVT-Aufrufs auf ’MELDUNG’ gesetzt
JV1 wird auf ’MELDUNG’ gesetzt
Katalog wird exportiert
Die Anzahl der POSSIG-Aufrufe ist auf drei beschränkt (COUNT=3), d.h. dieser ONEVT-Makroaufruf registriert maximal 3 mal „Bedingung erfüllt“. Mit SOLSIG wird ein Signal angefordert und anschließend die übergebene Post Code-Information geprüft. Abhängig vom Bedingungsergebnis gibt das Programm dann nach jedem SOLSIG eine Meldung aus (MELD1, MELD2 oder FMELD).
Programm BONEVT
BONEVT START BALR 3,0 USING *,3 PRINT NOGEN ANF DCLJV JV1,VERSION=1 "JV1 definieren" ENAEI EINAME=ONEVTEST,EIIDRET=KUKE,SCOPE=GLOBAL ONEVT 'JV1=''MELDUNG''',EIID=KUKE,POST='B1',COUNT=3,VERSION=1 CHECK CHKEI EIID=KUKE "Warteschlange prüfen" LR 5,1 CMD '%DISPLAY %15,%5' SIGNAL MVC EMPF,NULL "Signal anfordern" SOLSIG EIID=KUKE,COND=UNCOND,RPOSTAD=EMPF,LIFETIM=10 *** POST-CODE PRUEFEN *************************************** PRUEF CLI ANZ,X'14' "Ereignisanzeige" BNE FMELD CLC ONKEN,POST "POST-Wert" BNE FMELD CLI ERG,X'00' "JV1 gesetzt" BE MELD1 CLI ERG,X'08' "Katalog exportiert" BE MELD2 B FMELD *** MELDUNGEN, DIE AUSGEGEBEN WERDEN ************************ MELD1 WROUT MLDG1,ENDE "JV1 gesetzt" B CHECK MELD2 WROUT MLDG2,ENDE "Katalog exportiert" B FRAGE FMELD WROUT FEHLER,ENDE "kein POSSIG durch ONEVT empfangen" B FRAGE FRAGE WRTRD ABFRAG,,EINB,,5,ENDE "Programm beenden ?"
Die Wirkung des ONEVT-Makros wird in diesem Beispiel an der Bedingung „JV1 wird auf ’MELDUNG’ gesetzt“ demonstriert:
Ablaufprotokoll LST.BONEVT des Programms BONEVT
(IN) mod-job-options logging=*par(listing=*yes) (IN) delete-system-file system-file=*omf (IN) start-assembh————————————————————————————————————————————————— (1) (OUT) % PROGRAM 'ASSEMBH', VERSION '01.2D01' OF '2007-08-07' LOADED (OUT) % COPYRIGHT (C) FUJITSU TECHNOLOGY SOLUTIONS 2009. ( ) ALL RIGHTS RESERVED (OUT) % ASS6010 V01.2D01 OF BS2000 ASSEMBH READY (IN) compile source=bonevt,mod-lib=ass.plamlib(bonevt),test-support=yes (OUT) ASS6011 ASSEMBLY TIME: 604 MSEC (OUT) % ASS6018 0 FLAGS, 0 PRIVILEGED FLAGS, 0 MNOTES (OUT) % ASS6019 HIGHEST ERROR-WEIGHT: NO ERRORS (OUT) % ASS6006 LISTING GENERATOR TIME: 66 MSEC (IN) end (OUT) % ASS6012 END OF ASSEMBH (IN) load-exe from=(lib=ass.plamlib,elem=bonevt),test-opt=*aid————— (2) (OUT) % BLS0517 MODULE 'BONEVT' LOADED (IN) %insert check————————————————————————————————————————————————— (3) (IN) resume-program (OUT) (OUT) STOPPED AT LABEL: CHECK ,SRC_REF: 84, SOURCE: BONEVT, PROC: BONEVT (IN) mod-jv jv=jv1,set-val='MELDUNG'——————————————————————————————— (4) (IN) mod-jv jv=jv1,set-val='MELDUNG' (IN) mod-jv jv=jv1,set-val='MELDUNG' (IN) mod-jv jv=jv1,set-val='MELDUNG' (IN) mod-jv jv=jv1,set-val='MELDUNG' (IN) resume-program (OUT) *** TID: 0001005E *** TSN: 0FDB ************************************ (NL) CURRENT PC: 000000E0 CSECT: BONEVT ***************************** (NL) %15 = 2C000000———————————————————————————————————— (5) (NL) %5 = 00000003———————————————————————————————————— (6) CLI ANTW,'N' BE DONEVT "Programm nicht beenden" CLI ANTW,'J' BE ENDE "beenden" B FRAGE "Abfrage wiederholen" * DONEVT DONEVT EIID=KUKE,VERSION=1 DISEI EIID=KUKE "Ereigniskennung löschen" ERAJV JV1,VERSION=1 B ANF ENDE TERM *** DEFINITIONEN ******************************************** EMPF DS 0F ANZ DS CL1 ERG DS CL1 ONKEN DS CL2 POST DC C'B1' KUKE DC C'KURZ' NULL DC F'0' MLDG1 DC Y(END1-MLDG1) DS L2 DC X'01' DC 'JV1 WURDE GESETZT' END1 EQU * MLDG2 DC Y(END2-MLDG2) DS L2 DC X'01' DC 'KATALOG WURDE EXPORTIERT' END2 EQU * FEHLER DC Y(FEND-FEHLER) DS L2 DC X'01' DC '*** FEHLER ***' FEND EQU * ABFRAG DC Y(ABEND-ABFRAG) DS CL2 DC X'01' DC 'PROGRAMM BEENDEN?(J/N)' ABEND EQU * EINB DS 0CL5 DS CL4 ANTW DS CL1 END
(1) | Das Programm BONEVT wird mit dem Assembler ASSEMBH übersetzt und in der Bibliothek ASS.PLAMLIB abgelegt. |
(2) | Das Programm wird geladen und soll mit der Testhilfe AID getestet werden. |
(3) | Mit dem AID-Kommando %INSERT wird der Testpunkt CHECK vereinbart. |
(4) | Die Jobvariable JV1 wird fünfmal auf ’MELDUNG’ gesetzt. |
(5) | Der CHKEI-Makro zeigt die POSSIG-Warteschlange (Register 15). |
(6) | Der CHKEI-Makro zeigt, dass die Anzahl der POSSIG-Aufrufe 3 ist (Register 5). |
(OUT) JV1 WURDE GESETZT————————————————————————————————————————————— (7) (OUT) (OUT) STOPPED AT LABEL: CHECK ,SRC_REF: 84, SOURCE: BONEVT, PROC: BONEVT (IN) %display EMPF%X——————————————————————————————————————————————— (8) (OUT) CURRENT PC: 000000A8 CSECT: BONEVT ***************************** (NL) V'0000028C' = EMPF + #'00000000' (NL) 0000028C (00000000) 1400C2F1 ..B1 (IN) resume-program (OUT) CURRENT PC: 000000E0 CSECT: BONEVT ***************************** (NL) %15 = 2C000000 (NL) %5 = 00000002 (OUT) JV1 WURDE GESETZT (OUT) STOPPED AT LABEL: CHECK ,SRC_REF: 84, SOURCE: BONEVT, PROC: BONEVT (IN) resume-program (OUT) %15 = 2C000000 (NL) %5 = 00000001 (OUT) JV1 WURDE GESETZT (OUT) STOPPED AT LABEL: CHECK ,SRC_REF: 84, SOURCE: BONEVT, PROC: BONEVT (IN) resume-program (OUT) %15 = 30000000 (NL) %5 = 8F0000AC (OUT) *** FEHLER ***———————————————————————————————————————————— (9) (OUT) PROGRAMM BEENDEN?(J/N) (IN) N (OUT) (OUT) STOPPED AT LABEL: CHECK ,SRC_REF: 84, SOURCE: BONEVT, PROC: BONEVT
(7) | Der erste POSSIG wurde mit SOLSIG angefordert. Das Bedingungsergebnis wird abgefragt und dementsprechend eine Meldung ausgegeben. | ||||||
(8) | Das Empfangsfeld EMPF enthält nach dem SOLSIG-Aufruf den übergebenen Post Code:
| ||||||
(9) | Nachdem alle 3 POSSIG-Aufrufe mit SOLSIG angefordert wurden, ist die Warteschlange leer (Register 15 des CHKEI-Makros: SI=X’30’). Die Prüfung des Post Codes nach einem weiteren SOLSIG führt zur Meldung „FEHLER“. Die Abfrage wird mit „N“ beantwortet, d.h. das Programm wird ab ANF noch einmal durchlaufen - ein erneuter ONEVT-Makro wird abgesetzt. |
(IN) mod-jv jv=jv1,set-val='MELDUNG'——————————————————————————————— (10) (IN) mod-jv jv=jv1,set-val='MELDUNG' (IN) resume-program (OUT) %15 = 2C000000 (NL) %5 = 00000002———————————————————————————————————— (11) (OUT) JV1 WURDE GESETZT (OUT) (OUT) STOPPED AT LABEL: CHECK ,SRC_REF: 84, SOURCE: BONEVT, PROC: BONEVT (IN) del-jv jv=jv1————————————————————————————————————————————————— (12) (OUT) % JVS04A3 ERROR WHEN DELETING JOB VARIABLE ':4V05:$COGNITAS.JV1' (OUT) % JVS0447 JV NAME BEING USED BY CJC FUNCTION. COMMAND REJECTED (IN) resume-program (OUT) %15 = 2C000000 (NL) %5 = 00000001 (OUT) JV1 WURDE GESETZT (OUT) (OUT) STOPPED AT LABEL: CHECK ,SRC_REF: 84, SOURCE: BONEVT, PROC: BONEVT (IN) resume-program (OUT) %15 = 30000000 (NL) %5 = 8F0000AC (OUT) *** FEHLER *** (OUT) PROGRAMM BEENDEN?(J/N) (IN) N (OUT) (OUT) STOPPED AT LABEL: CHECK ,SRC_REF: 84, SOURCE: BONEVT, PROC: BONEVT (IN) show-jv-attr jv=jv1——————————————————————————————————————————— (13) (OUT) 0000000 :4V05:$COGNITAS.JV1 (NL) SUM 00001 JV'S; JV-VALUE = 00000000 BYTES (IN) show-jv-attr jv=jv1,inf=*all-attr (OUT) 000000 :4V05:$COGNITAS.JV1 (NL) USER-ACC = ALL-USERS ACCESS = WRITE (NL) CRE-DATE = 2010-08-04 EXPIR-DATE = 2010-08-04 (NL) CRE-TIME = 16:51:15 EXPIR-TIME = 00:00:00 (NL) READ-PASS = NONE (NL) WRITE-PASS = NONE (NL) SUM 00001 JV'S; JV-VALUE = 00000000 BYTES
(10) | Das Ereignis „JV1 setzen“ wird zweimal signalisiert. |
(11) | Die Anzahl der POSSIG-Aufrufe ist 2. |
(12) | Der Versuch, die Jobvariable JV1 zu löschen wird abgewiesen, da Jobvariablen, die in Makros (und Kommandos) der bedingungsabhängigen Auftragssteuerung verwendet werden, gegen Löschen geschützt sind. |
(13) | Die Merkmale der Jobvariablen JV1 werden ausgegeben. |
(IN) show-jv jv=jv1———————————————————————————————————————————————— (14) (OUT) % JVS04B2 SPECIFIED JOB VARIABLE SUBSTRING EMPTY OR ILLEGAL. ( ) COMMAND REJECTED (IN) resume-program (OUT) %15 = 30000000 (NL) %5 = 8F0000AC (OUT) *** FEHLER *** (OUT) PROGRAMM BEENDEN?(J/N) (IN) J (IN) del-jv jv=jv1————————————————————————————————————————————————— (15) (IN) show-j-attr jv=jv1 (OUT) % JVS0433 REQUESTED JOB VARIABLE NOT CATALOGED. COMMAND REJECTED (IN) assign-syslst to=*prim
(14) | Der Jobvariablen JV1 ist kein Wert zugewiesen. |
(15) | Die Jobvariable JV1 kann gelöscht werden. |