|
Hi, I'm trying to use the DEQ instruction and i have a problem with keyed queue. With sequential queue the code is ok but with keyed queue the time out is reached without retrieving queue entry. Here the code: /*-------------------------------------------------------------------*/ /*?Entry Point /*-------------------------------------------------------------------*/ ENTRY * (*ENTRY) EXT; /*-------------------------------------------------------------------*/ /*?Template For Entry Parms /*-------------------------------------------------------------------*/ DCL SPCPTR E_QUEUE@ PARM; DCL SPCPTR E_MSG@ PARM; DCL SPCPTR E_RET@ PARM; DCL SPCPTR E_TYPE@ PARM; DCL SPCPTR E_REL@ PARM; DCL SPCPTR E_WAIT@ PARM; DCL SPCPTR E_KEY@ PARM; DCL SPCPTR E_DUMMY@ PARM; DCL DD E_QUEUE CHAR( 20) BAS(E_QUEUE@); DCL DD E_MSG CHAR(32767) BAS(E_MSG@); DCL DD E_MSG$ BIN( 4) DEF(E_MSG) POS( 1); DCL DD E_RET PKD( 1) BAS(E_RET@); DCL DD E_TYPE CHAR( 1) BAS(E_TYPE@); DCL DD E_REL CHAR( 2) BAS(E_REL@); DCL DD E_WAIT BIN( 4) BAS(E_WAIT@); DCL DD E_KEY CHAR( 260) BAS(E_KEY@); DCL DD E_KEY$ BIN( 4) DEF(E_KEY) POS( 1); DCL DD E_DUMMY CHAR( 1) BAS(E_DUMMY@); DCL OL *ENTRY (E_QUEUE@, E_MSG@, E_RET@, E_TYPE@, E_REL@, E_WAIT@, E_KEY@, E_DUMMY@) PARM EXT; /COPY MI_ERR1 /COPY MI_ERR2 /COPY MI_RSLV /COPY M2_MITIME /*-------------------------------------------------------------------*/ /*?Others Data /*-------------------------------------------------------------------*/ DCL DD *USQ CHAR( 2) AUTO INIT(X'0A02'); DCL SYSPTR *USQ_PTR@ AUTO; DCL DD KEY$ BIN( 4) AUTO INIT(0); DCL SPCPTR MESSAGE@ AUTO INIT(MESSAGE); DCL DD MESSAGE CHAR(32767) AUTO BDRY(16); DCL DD MSG_PREFIX CHAR(533) BDRY(16) AUTO; DCL DD MSG_P_TS CHAR( 8) DEF(MSG_PREFIX) POS( 1); DCL DD MSG_P_WAITT CHAR( 8) DEF(MSG_PREFIX) POS( 9); DCL DD MSG_P_SOMSQ BIN( 4) DEF(MSG_PREFIX) POS( 17); DCL DD MSG_P_STATE CHAR( 1) DEF(MSG_PREFIX) POS( 21); DCL DD MSG_P_SKEY CHAR( 256) DEF(MSG_PREFIX) POS( 22); DCL DD MSG_P_MKEY CHAR( 256) DEF(MSG_PREFIX) POS(278); /*-------------------------------------------------------------------*/ /*?Starting Program /*-------------------------------------------------------------------*/ CMPBLA(B) E_DUMMY,X'FA'/NEQ(EXIT); CPYNV E_RET,P'+0'; /*-------------------------------------------------------------------*/ /*?Resolve Pointer To Space /*-------------------------------------------------------------------*/ CMPBLA(B) E_QUEUE(11:10),'*LIBL '/EQ(RSL2); CMPBLA(B) E_QUEUE(11:10),'QTEMP '/EQ(RSL3); RSL1: CPYBLA RSL_TYPE,*LIB; CPYBLAP RSL_NAME,E_QUEUE(11:10),' '; RSLVSP *LIB_PTR@,RSL_PTR,*,*; CPYBLA RSL_TYPE,*USQ; CPYBLAP RSL_NAME,E_QUEUE(01:10),' '; RSLVSP *USQ_PTR@,RSL_PTR,*LIB_PTR@,*; B QUEUE; RSL2: CPYBLA RSL_TYPE,*USQ; CPYBLAP RSL_NAME,E_QUEUE(01:10),' '; RSLVSP *USQ_PTR@,RSL_PTR,*,*; B QUEUE; RSL3: CPYBLA RSL_TYPE,*USQ; CPYBLAP RSL_NAME,E_QUEUE(01:10),' '; RSLVSP *USQ_PTR@,RSL_PTR,QTEMP@,*; B QUEUE; /*-------------------------------------------------------------------*/ /*?Dequeue Message /*-------------------------------------------------------------------*/ QUEUE: DCL EXCM _KEY EXCID(H'2401') BP(SKIP1) SKP; MODEXCPD _KEY,X'A000',X'01'; CPYNV KEY$,E_KEY$; SKIP1: MODEXCPD _KEY,X'2000',X'01'; CPYBREP MSG_P_STATE,X'00'; CPYBREP MSG_P_SKEY,' '; SETBTS MSG_P_STATE,0; SETBTS MSG_P_STATE,1; SETBTS MSG_P_STATE,2; CMPNV(B) E_WAIT,-1/NEQ(NOMAX); SETBTS MSG_P_STATE,3; B ENOMAX; NOMAX: CPYNV XMI_SECONDS,E_WAIT; CALLX MITIME$@,MITIME$_OL,*; CPYBLA MSG_P_WAITT,XMI_RETURN; ENOMAX: CMPBLA(B) E_TYPE,'F'/EQ(DOF0001); CMPNV(B) KEY$,0/EQ(EXIT); CPYBLA MSG_P_SKEY,E_KEY(5:E_KEY$); CMPBLA(B) E_REL,X'0010'/NEQ(ELF0001); BLF0001: OR(S) MSG_P_STATE ,X'02'; B DOF0001; ELF0001: CMPBLA(B) E_REL,X'0100'/NEQ(ELF0002); BLF0002: OR(S) MSG_P_STATE ,X'04'; B DOF0001; ELF0002: CMPBLA(B) E_REL,X'0110'/NEQ(ELF0003); BLF0003: OR(S) MSG_P_STATE ,X'06'; B DOF0001; ELF0003: CMPBLA(B) E_REL,X'1000'/NEQ(ELF0004); BLF0004: OR(S) MSG_P_STATE ,X'08'; B DOF0001; ELF0004: CMPBLA(B) E_REL,X'1010'/NEQ(ELF0005); BLF0005: OR(S) MSG_P_STATE ,X'0A'; B DOF0001; ELF0005: CMPBLA(B) E_REL,X'1100'/NEQ(EXIT); BLF0006: OR(S) MSG_P_STATE ,X'0C'; B DOF0001; ELF0006: DOF0001: BRK '100'; DEQ MSG_PREFIX,MESSAGE@,*USQ_PTR@; CMPNV(B) MSG_P_SOMSQ,0/EQ(EXIT); CPYNV E_RET,P'+1'; CPYBLA E_MSG(5:E_MSG$),MESSAGE(1:MSG_P_SOMSQ); /*-------------------------------------------------------------------*/ /*?Exit Program /*-------------------------------------------------------------------*/ EXIT: DEACTPG *; RTX *; /COPY MI_EXCM /COPY MI_HNDL If someone could take a look and find where is the problem it will be fine. Regards Philippe
As an Amazon Associate we earn from qualifying purchases.
This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].
Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.