TITLE 'WTOEXIT - TO PROCESS MANY TYPES OF MESSAGES' ******************************************************************** * AUTHOR - BILL SWEENEY * * DATE - DECEMBER 2003 * * * * MODIFIED CODE SO THAT ONE MGCRE IS ISSUED, AND THAT WILL * * CONTAIN THE RACF TOKEN FOR SECURITY. THIS WAS DONE TO * * CORRECT RACF SECURITY PROBLEM. WHS 05/09/07 * * * * FUNCTION - WTO/WTOR PROCESSING SYSTEM EXIT TO HANDLE MESSAGE * * PROCESSING * * * * REGISTER USAGE * * R1 - PARAMETER LIST ADDRESS * * R12 - FIRST BASE REGISTER * * R10 - ADDRESSABILITY TO MESSAGE ATTRIBUTES * * R4 - ADDRESSABILITY TO MESSAGE * * * * LINKAGE ATTRIBUTES - AMODE 31, RMODE ANY, REENTRANT * ******************************************************************** WTOEXIT CSECT WTOEXIT AMODE 31 31-BIT ADDRESSING WTOEXIT RMODE ANY 31-BIT RESIDENCE PRINT ON,GEN R0 EQU 0 R1 EQU 1 R2 EQU 2 MESSAGE ATTRIBUTES R3 EQU 3 R4 EQU 4 R5 EQU 5 BEGINING OF LIST R6 EQU 6 COUNTER R7 EQU 7 END OF LIST R8 EQU 8 WORK REGISTER R9 EQU 9 R10 EQU 10 R11 EQU 11 POINTER TO GETMAINED AREA R12 EQU 12 BASE REGISTER R13 EQU 13 R14 EQU 14 R15 EQU 15 SPINPRVT EQU 230 COMMAND_FLAG EQU X'01' REPLY_FLAG EQU X'02' EXEC_FLAG EQU X'04' EVENT_FLAG EQU X'08' SEARCH_FLAG EQU X'10' JOBNAME_FLAG EQU X'20' MULTI_LINE_FLAG EQU X'40' HIGHLIGHT_FLAG EQU X'80' * SECOND FLAG BYTE IN MESSAGE COLOR_RED EQU X'01' MULTI_LINE_ALL EQU X'02' SUPPRESS_FLAG EQU X'04' EJECT STM R14,R12,12(R13) SAVE REGISTERS LR R12,R15 USING WTOEXIT,R12 REGISTER L R9,0(R1) ADRESSIBILITY TO USING CTXT,R9 WORK AREA * * BEFORE ACQUIRING STORAGE WE ARE GOING TO VERIFY THAT IT IS ONE * OF OUR MESSAGES * L R10,CTXTTXPJ ADDRESSIBILITY USING CTXTATTR,R10 TO MSG ATTRIBUTES LA R4,CTXTTMSG USING MSGTEXT,R4 **************************************** TM CTXTBNPF,CTXTHABD ALREADY BEEN DISPLAYED BO RETURN2 **************************************** LA R6,1 SET TO MESSAGE NUMBER ONE L R5,MSGLOAD GET THE ADDRESS OF THE TABLE LH R11,0(R5) GET THE LENGTH OF THE TABLE LA R11,0(R11,R5) POINT TO END OF TABLE LA R5,2(R5) INCREMENT PAST THE LENGTH SLR R1,R1 CLEAR R1 FOR INSERT LR R3,R1 AND R3 AS WELL LOOPMSG ICM R1,3,0(R5) GET ENTRY LENGTH IC R3,2(R5) GET THE MSGID LENGTH BCTR R3,0 DECREMENT FOR EX INSTR EX R3,CLCMSGID CLC MSGID(0),3(R5) BE GOT_MESSAGE YES THEN GO PROCESS RETURN_LOOPMSG EQU * LA R5,0(R1,R5) NO, INCREMENT TO NEXT ENTRY LA R6,1(R6) INCR TO NEXT MESSAGE NUMBER CR R5,R11 ARE WE AT THE END OF MESSAGES BL LOOPMSG NO, THEN DO THE NEXT ONE B RETURN2 WE DON'T HAVE THE MESSAGE GOT_MESSAGE EQU * LR R8,R5 SAVE IF WE WANT TO COME BACK LR R7,R1 SAVE IF WE WANT TO COME BACK LA R5,4(R3,R5) INCR PAST 2 LENGTHS, MSGID TM 0(R5),MULTI_LINE_FLAG IS THIS A MULTI LINE REQUEST BZ CHECK_SEARCH NO, THEN GO AROUND OI CTXTRFB1,CTXTRPML SET FLAG TO PROCESS MULTI LINE CHECK_SEARCH EQU * TM 0(R5),SEARCH_FLAG IS THERE A SEARCH ARGUMENT BZ GET_STORAGE NO, THEN JUST ACQUIRE STORAGE TM 0(R5),JOBNAME_FLAG IS THERE A JOBNAME CHECK BZ CHECK_MULTI NO, THEN CHECK FOR MULTI-LINE SLR R3,R3 CLEAR FOR INSERT IC R3,2(R5) GET THE COMMAND LENGTH IN R3 LA R2,3(R3,R5) INCR PAST FUNCTION AND COMMAND IC R3,0(R2) GET THE SEARCH LENGTH IN R3 CLC CTXTJBNM(8),1(R2) COMPARE THE JOBNAME BE RELOAD_MESSAGE YES, CONTINUE PROCESSING LR R5,R8 RELOAD LR R1,R7 RELOAD SLR R3,R3 CLEAR B RETURN_LOOPMSG * CHECK_MULTI EQU * TM 0(R5),MULTI_LINE_FLAG IS THIS A MULTI LINE REQUEST BZ NOTMULTI ICM R1,15,CTXTTXPN IS THIS A SUBSEQUENT LINE BZ NOTMULTI NO, THEN JUST CONTINUE TM 1(R5),MULTI_LINE_ALL HAVE WE FLAGGED IT FOR ALL BO NOTMULTI YES, THEN CHECK 1ST MSG FOR ARG LR R10,R1 GET SUBSEQUENT MSG ADDRESS. LA R4,CTXTTMSG AND RELOAD R4 AS WELL LH R15,CTXTTLEN LOAD THE LENGTH HERE SLR R3,R3 AND CLEAR THE MESSAGE ID B GOTMULTI AND GO AROUND ** * FURTHER FILTERING CRITERIA FOR SELECTING A MESSAGE FOR * PROCESSING * NOTMULTI LH R15,CTXTTLEN GET THE MESSAGE LENGTH IN R15 SR R15,R3 MINUS THE MESSAGE ID GOTMULTI LA R14,MSGID GET THE MSGID IN R14 LA R14,1(R3,R14) INCREMENT PAST THE MSGID IC R3,2(R5) GET THE COMMAND LENGTH IN R3 LA R2,3(R3,R5) INCR PAST FUNCTION AND COMMAND IC R3,0(R2) GET THE SEARCH LENGTH IN R3 CR R15,R3 SEE IF ENOUGH OF MESSAGE LEFT BNL CONT_SEARCH1 LONG ENOUGH, CONTINUE LR R5,R8 RELOAD LR R1,R7 RELOAD SLR R3,R3 CLEAR B RETURN_LOOPMSG CONT_SEARCH1 EQU * SR R15,R3 AND SUBSTRACT THAT ALSO BCTR R3,0 DECREMENT FOR EXECUTE LOOP_SEARCH EQU * EX R3,CLCSERCH CLC 0(0,R14),1(R2) BE RELOAD_MESSAGE YES, THEN WE FOUND IT LA R14,1(R14) INCREMENT FOR MESSAGE BCT R15,LOOP_SEARCH LOOP THROUGH LR R5,R8 RELOAD LR R1,R7 RELOAD SLR R3,R3 CLEAR B RETURN_LOOPMSG RELOAD_MESSAGE EQU * L R10,CTXTTXPJ RELOAD IN CASE OF MULTI LINE LA R4,CTXTTMSG HERE ALSO * * OBTAIN DYNAMIC STORAGE BELOW 16-MEG LINE FOR MGCRE MACRO AND * SAVE AREA. * GET_STORAGE EQU * * REMOVED THE REQUEST FOR SUBPOOL 230 BECAUSE IT GOT AN 878-10 ABEND * EVERY ONCE IN A WHILE WHS 2/27/97 * PUT IT BACK TO SUBPOOL 230 WHS 2003 * GETMAIN RC,LV=DATAEND,LOC=BELOW GETMAIN RC,LV=DATAEND,SP=SPINPRVT LTR R15,R15 CHECK IF GOOD GETMAIN BZ LOADR11 NO, LEAVE WTO 'ALWTO01 GETMAIN FAILED FOR IEAVMXIT. CONTACT SYSTEMS', X ROUTCDE=2 B RETURN2 NO, LEAVE LOADR11 LR R11,R1 POINTER TO GETMAINED AREA USING DATAAREA,R11 ADDRESSIBILITY TO GETMAINED AREA ST R13,SAVEAREA+4 BACKWARD POINTER LA R15,SAVEAREA ADDRESS OF SAVE AREA ST R15,8(R13) FORWARD POINTER LR R13,R15 R13 NOW STANDARD SAVE AREA * * WE ARE GOING TO SEE IF THIS MESSAGE IS BEING ISSUED EXECESSIVELY * WITHIN A PARTICULAR TIME PERIOD. IF IT IS BEING ISSUED WITHIN * THAT TIME PERIOD WE WILL NOT PROCESS IT WHS 12/03/03 TM 1(R5),SUPPRESS_FLAG DO THEY WANT TO SUPPRESS MSG BO DO_SUPPRESS YES, THEN BYPASS AND PROCESS TM 0(R5),MULTI_LINE_FLAG IS THIS A MULTI LINE REQUEST BO CLEAR_COMMAND YES, THEN GO AROUND CONTINUE_STORE EQU * XC TIMEDATE(16),TIMEDATE CLEAR THE TIME TIME DEC,TIMEDATE,LINKAGE=SYSTEM L R2,CTXTCWKP LOAD ADDR OF COMMON AREA USING CTXTCDAM,R2 CLM R6,3,0(R2) COMPARE THE MESSAGE NUMBER BNE STORE_CURRENT_MESSAGE DIFFERENT, THEN SAVE NEW 1 CLC TIMEDATE+8(4),CTXTCUDA+4 COMPARE THE DATE BNE STORE_CURRENT_MESSAGE DIFFERENT, THEN PROCESS SLR R14,R14 CLEAR FOR INSERT SLR R15,R15 SAME HERE ICM R14,7,CTXTCUDA LOAD HHMMSS FROM PREVIOUS ICM R15,7,TIMEDATE LOAD HHMMSS FROM CURRENT TIME SR R15,R14 SUBTRACT FOR TIME DIFFERENCE LTR R15,R15 FIRST, SEE IF MINUS BM STORE_CURRENT_MESSAGE IF ITS MINUS THEN STORE IT CH R15,HW3 START W/ 3 SECOND DIFFERENCE BNH RETURN NO, THEN QUIT STORE_CURRENT_MESSAGE EQU * STCM R6,3,0(R2) SAVE MESSAGE NUM IN USER AREA MVC CTXTCUDA(4),TIMEDATE SAVE THE TIME MVC CTXTCUDA+(4),TIMEDATE+8 SAVE THE DATE DROP R2 ******************************************************************** * CLEAR_COMMAND EQU * MVI COMMAND,C' ' WANT TO BLANK THIS OUT BEFORE MVC COMMAND+1(255),COMMAND CLEAR ALL 256 BYTES * R5 POSITIONED AT THE FUNCTION, OF WHICH THERE ARE 3, * COMMAND, REPLY AND EXEC. WE WILL BRANCH TO THE APPROPRIATE FUNCTION TM 0(R5),REPLY_FLAG IS IT A WTOR ? BO DOREPLY YES, THEN GO PROCESS TM 0(R5),EXEC_FLAG IS IT AN EXEC TO PROCESS BO DOEXEC YES, THEN HOP TO IT TM 0(R5),EVENT_FLAG IS IT AN EVENT TO PROCESS BO DOEXEC YES, THEN PROCESS WITH EXEC TM 0(R5),HIGHLIGHT_FLAG IS IT AN EVENT TO PROCESS BO DOHIGHLIGHT YES, THEN PROCESS HIGHLIGHT TM 0(R5),COMMAND_FLAG IS IT A COMMAND TO PASS BO DO_COMMAND YES, THEN PROCESS COMMAND B RETURN NO, THEN JUST GET OUT * THIS SECTION WAS ADDED BECAUSE OF MVS COMMANDS THAT ARE TRAPPED * AND ARE NOT VALID COMMANDS. REGARDLESS OF ORIGINATION, THIS WILL * SUPPRESS MESSAGE COMPLETELY DO_SUPPRESS EQU * OI CTXTRFB2,CTXTRDTM DON'T DISPLAY AND DON'T LOG B RETURN AND GET OUT **** DO_COMMAND EQU * INCREMENT PAST THE FUNCTION IC R3,2(R5) GET THE LENGTH TO PASS LA R7,COMMAND ADDRESS THE COMMAND FIELD STCM R3,3,0(R7) SAVE THE LENGTH BCTR R3,0 DECR FOR EXECUTE INSTR EX R3,MOVE_COMMAND MVC 2(0,R7),3(R5) LA R4,DYNMGCRE ADDR THE MACRO FOR EXECUTE MVC 0(CMDLEN,R4),CMDAREA GET MGCRE MF=L TO DYNAMIC SLR R6,R6 CLEAR FOR CONSOLE 0 * WE ARE GOING TO ISSUE THE MGCRE, WITH THE RACF CODE IN ONE PLACE B ISSUE_MGCRE 05/09/07 * MGCRE TEXT=(R7),CONSID=(R6),TOKEN=CTXTTOKN,MF=(E,(R4)) * B RETURN THAT WAS EASY, NON ************************************************************* DOREPLY TM CTXTTFB1,CTXTTFWR VERIFY THAT THIS IS A WTOR BZ RETURN NO, THEN JUST QUIT IC R3,2(R5) GET THE LENGTH OF THE REPLY BCTR R3,0 DECR FOR EXECUTE INSTR LA R7,COMMAND ADDRESS THE COMMAND FIELD MVC 2(9,R7),REPLY_KW INIT WITH REPLY AND BLANKS LH R8,CTXTRPYL GET THE REPLY ID LENGTH BCTR R8,0 DECR FOR EX INSTR EX R8,MOVERYID MVC 8(0,R7),CTXTRPYI LA R8,9(R8,R7) INCR PAST REPLY ID FOR COMMA MVI 0(R8),C',' MOVE IN A COMMA EX R3,MOVE_REPLY MVC 1(0,R8),3(R5) LA R8,1(R3,R8) POINT PAST REPLY SLR R8,R7 GET THE OVERALL LENGTH STCM R8,3,0(R7) AND SAVE THE LEGNTH LA R4,DYNMGCRE ADDR THE MACRO FOR EXECUTE MVC 0(CMDLEN,R4),CMDAREA GET MGCRE MF=L TO DYNAMIC SLR R6,R6 CLEAR FOR CONSOLE 0 * WE ARE GOING TO ISSUE THE MGCRE, WITH THE RACF CODE IN ONE PLACE B ISSUE_MGCRE 05/09/07 * MGCRE TEXT=(R7),CONSID=(R6),TOKEN=CTXTTOKN,MF=(E,(R4)) ** MGCRE TEXT=(R7),CONSID=(R6),MF=(E,(R4)) * B RETURN ************************************************************* DOHIGHLIGHT EQU * OI CTXTRFB1,CTXTRCDC CHANGE DESCRIPTOR CODE L R14,CTXTDCP ADDR TO DESCRIPTOR DSECT USING CTXTDESC,R14 XC CTXTDC1(2),CTXTDC1 SET TO ZERO * DESCRIPTOR 02 DEFAULTS TO WHITE; WE WANT WHITE MVI CTXTDC1,CTXTDC02 CODE 02 HIGHLIGHT WHITE * DESCRIPTOR 11 DEFAULTS TO RED; THEY HAVE TO REQUEST RED * MVI CTXTDC2,CTXTDC11 CODE 11 HIGHLIGHT RED TM 1(R5),COLOR_RED DID THEY ASK FOR RED BZ RETURN * CLC 3(3,R5),=C'RED' DID THEY ASK FOR RED * BNE RETURN NO, THEN GET OUT OI CTXTERF1,CTXTEMCO CHANGE COLOR MVI CTXTCOLR,CTXTRED SET TO RED B RETURN ************************************************************* DOEXEC SLR R15,R15 CLEAR REGISTER FOR INSERT IC R15,2(R5) GET THE LENGTH TO PASS BCTR R15,0 DECR FOR EXECUTE INSTR LA R7,COMMAND ADDRESS COMMAND AREA EX R15,MOVE_COMMAND MVC 2(0,R7),3(R5) LA R7,3(R7,R15) POINT PAST WHAT WE JUST MOVED MVC 0(4,R7),SYMBOLIC_PARM1 MOVE IN ,MESSAGE= LA R7,4(R7) AND INCREMENT PAST MVI 0(R7),X'7D' MOVE IN ' DELIMETER LA R7,1(R7) AND INCR PAST IT LR R0,R7 SAVE THIS LOCATION POINTER TM 0(R5),EVENT_FLAG WAS THIS AN EVENT BZ NOT_EVENT NO, THEN MOVE IN MSGID MVC 0(3,R7),REXX_MSGID MOVE IN THE REXX MSGID LA R7,3(R7) INCREMENT PAST WHAT MOVED * MVC 0(7,R7),REXX_EVENT MOVE IN THE REXX EVENT ID * LA R7,7(R7) INCREMENT PAST WHAT MOVED B EXECWTOR AND CONTINUE AROUND * WE ARE JUST GO TO MOVE THE PORTION OF THE MESSAGE ID THAT EXECUTES * THE REXX EXEC, NOT TO EXCEED 8 BYTES. REMEMBER THAT R4 ADDRESSES THE * BEGINNING OF THE MSGID. NOT_EVENT EQU * LA R15,7 1 LT 8 FOR EX INSTR TRT MSGID(8),BLANKTBL FIND THE FIRST NON-BLANK BZ MOVE_ID NO BLANK, THEN MOVE ALL 8 SLR R1,R4 LET'S GET THE LENGTH LR R15,R1 GET THE LENGTH IN R15 BCTR R15,0 AND DECR FOR EX INSTR MOVE_ID EX R15,MOVE_MSGID MVC 0(0,R7),MSGID LA R7,1(R15,R7) INCR PAST MSGID MVI 0(R7),C' ' BLANK OUT AFTER MSGID LA R7,1(R7) AND INCREMENT PAST EXECWTOR TM CTXTTFB1,CTXTTFWR WAS THIS A WTOR BZ NOTWTOR NO, THEN GO AROUND MVI 0(R7),C'@' HIGHLIGHT THE REPLY ID LA R7,1(R7) AND INCREMENT PAST LH R8,CTXTRPYL GET THE REPLY ID LENGTH BCTR R8,0 DECR FOR EX INSTR EX R8,MOVERYI2 MVC 0(0,R7),CTXTRPYI LA R7,1(R8,R7) INCR PAST THE REPLY ID * THE PARM FIELD PASSED CANNOT EXCEED 100 BYTES. THE LENGTH OF A * SYMBOLIC PASSED TO THE START COMMAND CANNOT EXCEED 56 BYTES. * WE ARE GOING TO SPLIT IT INTO 2 SYMBOLICS, 1ST ONE IS PASSED BY * MSGTABLE AND WE WILL BUILD THE 2ND ONE BY REPLACING THE LAST * CHARACTER OF THE FIRST WITH A 2 NOTWTOR TM 0(R5),MULTI_LINE_FLAG IS THIS A MULTI LINE WTO BZ NORESET ICM R1,15,CTXTTXPN IS THIS A SUBSEQUENT LINE * BZ NOTMULTI NO, THEN JUST CONTINUE BZ NORESET NO, THEN JUST CONTINUE LR R10,R1 GET SUBSEQUENT MSG ADDRESS. LA R4,CTXTTMSG AND RELOAD R4 AS WELL NORESET LH R1,HW50 FIRST PART IS 50 BYTES LR R14,R7 GET THE CURRENT POINTER HERE SLR R14,R0 AND SUBTRACT WHAT'S BEEN DONE SLR R1,R14 SUBTRACT TO SEE WHAT LEFT LH R15,CTXTTLEN GET LENGTH OF MESSAGE CR R1,R15 SEE WHICH IS LARGER BL USEREG1 IF R1 LESS, THEN MOVE IT IN LR R1,R15 LOAD IT UP USEREG1 BCTR R1,0 DECR IT EX R1,MOVEMSG MVC 0(0,R7),CTXTTMSG EX R1,TRANSMSG TR 0(0,R7),TICTABLE LA R8,1(R1) SAVE THIS LENGTH FOR COMPARE LA R3,CTXTTMSG ADDR FOR 2ND PART OF MESSAGE LA R3,1(R1,R3) AND POINT PAST PART DONE LA R7,1(R1,R7) POINT TO THE END OF MESSAGE MVI 0(R7),X'7D' MOVE IN ' DELIMETER **** LOGIC FOR M2 CR R15,R8 SEE IF ANY OF MESSAGE IS LEFT BH DO2ND YES, THEN KEEP GOING * ADDED THIS CODE TO GET JOBNAME ON SHORT MESSAGE' CLI CTXTJBNM,C' ' IS THERE A JOBNAME BE DONE2ND NO, THEN WE ARE DONE LA R7,1(R7) AND INCREMENT TO THE END MVC 0(4,R7),SYMBOLIC_PARM2 MOVE IN ,MESSAG2= LA R7,4(R7) AND INCREMENT PAST MVI 0(R7),X'7D' MOVE IN ' DELIMETER LA R7,1(R7) AND INCR PAST IT MVC 0(3,R7),=C' J=' DELIMIT IT MVC 3(8,R7),CTXTJBNM MOVE IN JOBNAME LA R7,11(R7) INCREMENT IT MVI 0(R7),X'7D' MOVE IN ' DELIMETER B DONE2ND NO, THEN WE ARE DONE DO2ND LA R7,1(R7) AND INCREMENT TO THE END MVC 0(4,R7),SYMBOLIC_PARM2 MOVE IN ,MESSAG2= LA R7,4(R7) AND INCREMENT PAST MVI 0(R7),X'7D' MOVE IN ' DELIMETER LA R7,1(R7) AND INCR PAST IT LH R1,HW49 SECOND PART IS 49 BYTES LH R15,CTXTTLEN GET LENGTH OF MESSAGE SR R15,R8 SUBSTRACT 1ST PART OF MSG MOVED CR R1,R15 SEE WHICH IS LARGER BL USEREG1A IF R1 LESS, THEN MOVE IT IN LR R1,R15 LOAD IT UP USEREG1A BCTR R1,0 DECR IT EX R1,MOVEMSG2 MVC 0(0,R7),CTXTTMSG+50 EX R1,TRANSMSG TR 0(0,R7),TICTABLE LA R7,1(R1,R7) POINT TO THE END OF MESSAGE ** CLI CTXTJBNM,C' ' IS THERE A JOBNAME BE NO_JOBNAME NO, THEN FORGET IT CH R1,HW38 SEE IF ENOUGH ROOM FOR JOBNAME BH NO_JOBNAME NO, THEN FORGET IT MVC 0(3,R7),=C' J=' DELIMIT IT MVC 3(8,R7),CTXTJBNM MOVE IN JOBNAME LA R7,11(R7) INCREMENT IT NO_JOBNAME EQU * MVI 0(R7),X'7D' MOVE IN ' DELIMETER DONE2ND LA R14,2(R7) AND INCREMENT TO THE END LA R7,COMMAND POINT BACK TO BEGINNING LA R15,2(R7) POINT BACK TO BEGINNING SLR R14,R15 STCM R14,3,0(R7) STORE THE LENGTH LA R4,DYNMGCRE ADDR THE MACRO FOR EXECUTE MVC 0(CMDLEN,R4),CMDAREA GET MGCRE MF=L TO DYNAMIC SLR R6,R6 CLEAR FOR CONSOLE 0 ************************************************************* * CLC CTXTJBNM(8),=C'MSTJCL00' * BNE GOT_ACEE * EXIT WILL ISSUE MGCRE IN THIS ONE LOCATION, WITH RACF ID ASSIGNED ISSUE_MGCRE EQU * MVC RACF_CMD(VERIFY_L),VERIFY LA R2,RACF_CMD LA R8,RACF_WA MVC TOKENOUT(80),TOKOUT LA R15,TOKENOUT RACROUTE , .CREATE ACEE X REQUEST=VERIFYX, .CHECK USER ID AND TOKEN X TOKNOUT=(R15), .GET THE TOKEN X RELEASE=7703, .FMID HRF7703 X USERID=USERID, .ADDRESS OF USER ID X GROUP=GROUPID, .ADDRESS OF USER ID X PASSWRD=PASSWORD, .PASSWORD X PASSCHK=NO, .NO PASSWORD SUPPLIED X TRUSTED=YES, .BYPASS X WORKA=(R8), .ADDRESS OF 512 BYTE WORKA X MF=(E,(R2)) .EXECUTE LA R15,TOKENOUT MGCRE TEXT=(R7),CONSID=(R6),UTOKEN=(R15),MF=(E,(R4)) ************************************************************* RETURN EQU * L R13,4(R13) * FREEMAIN RC,LV=DATAEND,A=(R11) FREEMAIN RC,LV=DATAEND,A=(R11),SP=SPINPRVT RETURN2 LM R14,R12,12(R13) BR R14 * MSGLOAD DC V(MSGTABLE) *MOVE_COMMAND MVC COMMAND(0),3(R5) MOVE_COMMAND MVC 2(0,R7),3(R5) CLCMSGID CLC MSGID(0),3(R5) CLCSERCH CLC 0(0,R14),1(R2) MOVERYID MVC 8(0,R7),CTXTRPYI MOVE_REPLY MVC 1(0,R8),3(R5) MOVE_MSGID MVC 0(0,R7),MSGID MOVERYI2 MVC 0(0,R7),CTXTRPYI MOVEMSG MVC 0(0,R7),CTXTTMSG MOVEMSG2 MVC 0(0,R7),0(R3) TRANSMSG TR 0(0,R7),TICTABLE * * DATA AREAS * HW3 DC H'3' HW50 DC H'50' HW49 DC H'49' HW38 DC H'38' SYMBOLIC_PARM1 DC CL4',M1=' SYMBOLIC_PARM2 DC CL4',M2=' REXX_EVENT DC CL7'$EVENT ' REXX_MSGID DC CL3'$E ' REPLY_KW DC CL9'REPLY ' PASSWORD DS 0F PW_LEN DC X'04' PSWD DC CL4'PSWD' GROUPID DS 0F GROUP_LEN DC X'08' RACF_GROUP DC CL8'STCGROUP' USERID DS 0F USERID_LEN DC X'07' RACF_USERID DC CL7'STCUSER' TOKOUT DS 0CL80 DC XL2'5001' DC XL78'0' LTORG * 0 1 2 3 4 5 6 7 8 9 A B C D E F TICTABLE DC X'000102030405060708090A0B0C0D0E0F' 0 DC X'101112131415161718191A1B1C1D1E1F' 1 DC X'202122232425262728292A2B2C2D2E2F' 2 DC X'303132333435363738393A3B3C3D3E3F' 3 DC X'404142434445464748494A4B4C4D4E4F' 4 DC X'505152535455565758595A5B5C5D5E5F' 5 DC X'606162636465666768696A6B6C6D6E6F' 6 DC X'707172737475767778797A7B7C7F7E7F' 7 DC X'808182838485868788898A8B8C8D8E8F' 8 DC X'909192939495969798999A9B9C9D9E9F' 9 DC X'A0A1A2A3A4A5A6A7A8A9AAABACADAEAF' A DC X'B0B1B2B3B4B5B6B7B8B9BABBBCBDBEBF' B DC X'C0C1C2C3C4C5C6C7C8C9CACBCCCDCECF' C DC X'D0D1D2D3D4D5D6D7D8D9DADBDCDDDEDF' D DC X'E0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF' E DC X'F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF' F * BLANKTBL DC 256X'00' ORG BLANKTBL+C' ' DC X'FF' ORG *********************************************************************** * * * LIST FORM OF MGCRE MACRO (STATIC) * * * *********************************************************************** USERCMD DS 0H CMDAREA MGCRE MF=L LIST FORM OF MACRO CMDLEN EQU *-USERCMD LENGTH OF MGCRE PARAMETER LIST *********************************************************************** VERIFY RACROUTE , X REQUEST=VERIFYX, .CHECK USER ID X SESSION=COMMAND, .CREATE ACEE X TOKNOUT=*-*, .TOKEN ADDRESS X PASSWRD=*-*, .ACEE ADDRESS X PASSCHK=NO, .CHECK PASSWORD X USERID=*-*, .USERID ADDRESS X GROUP=*-*, .GROUP ADDRESS X RELEASE=7703, .FMID HRF7703 X TRUSTED=YES, . X WORKA=*-*, .WORK AREA ADDRESS X MF=L .LIST FORMAT VERIFY_L EQU *-VERIFY .LENGTH OF VERIFY LIST DATAAREA DSECT SAVEAREA DS 18F DYNMGCRE DS CL(CMDLEN) COMMAND DS CL256 * ORG ACEE_ADDRESS DS F TOKENOUT DS CL80 RACF_WA DS CL512 RACF_CMD DS CL(VERIFY_L) TIMEDATE DS CL16 DATAEND EQU *-DATAAREA MSGTEXT DSECT MSGID DS CL8 DS CL92 IEZVX100 END WTOEXIT