JV macros, with ONEVT macro
The BONEVT program issues an ONEVT macro for the event item ONEVTEST, which causes a POSSIG call whenever one of the following conditions is satisfied:
job variable JV1 is set to 'MELDUNG' (= “message”) at the time of the ONEVT macro call
JV1 is set to 'MELDUNG'
catalog is exported
The number of POSSIG calls is limited to three (COUNT=3), i.e. the ONEVT macro registers up to 3 'condition satisfied' states. SOLSIG solicits a signal and subsequently the post code is checked. Depending on the condition result, the program issues a message (MELD1, MELD2 or FMELD) after every SOLSIG.
Program BONEVT
BONEVT START BALR 3,0 USING *,3 PRINT NOGEN ANF DCLJV JV1,VERSION=1 "Define JV1" ENAEI EINAME=ONEVTEST,EIIDRET=KUKE,SCOPE=GLOBAL ONEVT 'JV1=''MELDUNG''',EIID=KUKE,POST='B1',COUNT=3,VERSION=1 CHECK CHKEI EIID=KUKE "Check queue" LR 5,1 CMD '%DISPLAY %15,%5' SIGNAL MVC EMPF,NULL "Solicit signal" SOLSIG EIID=KUKE,COND=UNCOND,RPOSTAD=EMPF,LIFETIM=10 *** CHECK POST CODE ***************************************** PRUEF CLI ANZ,X'14' "Event flag" BNE FMELD CLC ONKEN,POST "POST value" BNE FMELD CLI ERG,X'00' "JV1 set" BE MELD1 CLI ERG,X'08' "Catalog exported" BE MELD2 B FMELD *** MESSAGES OUTPUT ***************************************** MELD1 WROUT MLDG1,ENDE "JV1 set" B CHECK MELD2 WROUT MLDG2,ENDE "Catalog exported" B FRAGE FMELD WROUT FEHLER,ENDE "No POSSIG received by ONEVT" B FRAGE FRAGE WRTRD ABFRAG,,EINB,,5,ENDE "Terminate program?" CLI ANTW,'N'
BE DONEVT "Do not terminate program" CLI ANTW,'Y' BE ENDE "Terminate" B FRAGE "Repeat query" DONEVT DONEVT EIID=KUKE,VERSION=1 DISEI EIID=KUKE "Delete event item" ERAJV JV1,VERSION=1 B ANF ENDE TERM *** DEFINITIONS ********************************************* 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 WAS SET' END1 EQU * MLDG2 DC Y(END2-MLDG2) DS L2 DC X'01' DC 'CATALOG WAS EXPORTED' END2 EQU * FEHLER DC Y(FEND-FEHLER) DS L2 DC X'01' DC '*** ERROR ***' FEND EQU * ABFRAG DC Y(ABEND-ABFRAG) DS CL2 DC X'01' DC 'TERMINATE PROGRAM?(Y/N)' ABEND EQU * EINB DS 0CL5 DS CL4 ANTW DS CL1 END
The effect of the ONEVT macro is demonstrated in this example using the condition “JV1 is set to 'MELDUNG' ”:
Runtime listing LST.BONEVT for the BONEVT program
(IN) mod-job-options logging=*par(listing=*yes) (IN) delete-system-file system-file=*omf (IN) start-assembh————————————————————————————————————————————————— (1) (OUT) % BLS0500 PROGRAM 'ASSEMBH',VERSION '01.2C00' OF '2002-03-06' LOADED (OUT) % BLS0552 COPYRIGHT (C) FUJITSU TECHNOLOGY SOLUTIONS GMBH 2010. ( ) ALL RIGHTS RESERVED (OUT) % ASS6010 V01.2C00 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)
(1) | The BONEVT program is assembled by the ASSEMBH Assembler and is put in the ASS.PLAMLIB library. |
(2) | The program is loaded; it is checked using AID (Advanced Interactive Debugger). |
(3) | The test point CHECK is defined using the AID command %INSERT. |
(4) | The job variable JV1 is set to 'MELDUNG' five times. |
(5) | The CHKEI macro shows the POSSIG queue (register 15). |
(6) | The CHKEI macro shows that the number of POSSIG calls is 3 (register 5). |
(OUT) JV1 WAS SET——————————————————————————————————————————————————— (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 WAS SET (OUT) STOPPED AT LABEL: CHECK ,SRC_REF: 84, SOURCE: BONEVT, PROC: BONEVT (IN) resume-program (OUT) %15 = 2C000000 (NL) %5 = 00000001 (OUT) JV1 WAS SET (OUT) STOPPED AT LABEL: CHECK ,SRC_REF: 84, SOURCE: BONEVT, PROC: BONEVT (IN) resume-program (OUT) %15 = 30000000 (NL) %5 = 8F0000AC (OUT) *** ERROR ***————————————————————————————————————————————— (9) (OUT) TERMINATE PROGRAM?(Y/N) (IN) N (OUT) (OUT) STOPPED AT LABEL: CHECK ,SRC_REF: 84, SOURCE: BONEVT, PROC: BONEVT
(7) | The first POSSIG was requested with SOLSIG. The condition result is interrogated and an appropriate message output. | ||
(8) | After the SOLSIG call, the target field EMPF contains the passed post code:
| ||
(9) | After all 3 POSSIG calls have been solicited by SOLSIG, the queue is empty (register 15 of the CHKEI macro: SI=X'30'). The post code check following a further SOLSIG produces the message “ERROR”. The response “N” is given after the prompt, i.e. the program is run one more time starting from the ANF label - a new ONEVT macro is issued. |
(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 WAS SET (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 WAS SET (OUT) (OUT) STOPPED AT LABEL: CHECK ,SRC_REF: 84, SOURCE: BONEVT, PROC: BONEVT (IN) resume-program (OUT) %15 = 30000000 (NL) %5 = 8F0000AC (OUT) *** ERROR *** (OUT) TERMINATE PROGRAM?(Y/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 = 2003-08-04 EXPIR-DATE = 2003-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) | The “Set JV1” event is signaled twice. |
(11) | The number of POSSIG calls is 2. |
(12) | The attempt to delete job variable JV1 is rejected because job variables used in macros (and commands) are protected against deletion. |
(13) | The attributes of job variable JV1 are output. |
(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) *** ERROR *** (OUT) TERMINATE PROGRAM?(Y/N) (IN) Y (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) | No value is assigned to job variable JV1. |
(15) | The job variable JV1 can be deleted. |