RPPICMD CSECT RPP00010 *********************************************************************** RPP00020 *********************************************************************** RPP00030 *** *** RPP00040 *** *** RPP00050 *** (C) Copyright IBM Corp. 1990 *** RPP00060 *** No warranty expressed or implied. *** RPP00070 *** *** RPP00080 *** RPPICMD Subtask *** RPP00090 *** *** RPP00100 *** Operating Systems Supported: MVS *** RPP00110 *** *** RPP00120 *** This subtask receives MVS commands over the NetView Program- *** RPP00130 *** to-Program Interface from the batch application SPPICMD. The *** RPP00140 *** MVS commands are then routed to a autotask for execution. *** RPP00150 *** *** RPP00160 *** The name of the autotask is AUTOPPIC. It can be overriden *** RPP00170 *** by specifying the name of another autotask via the MEM= *** RPP00180 *** parameter on the TASK statement for this subtask. *** RPP00190 *** *** RPP00200 *** *** RPP00210 *** Installation: *** RPP00220 *** *** RPP00230 *** 1. Assemble and linkedit code *** RPP00240 *** *** RPP00250 *** Linkage editor options 'RENT,AMODE=31,RMODE=ANY,AC=1' *** RPP00260 *** *** RPP00270 *** 2. A task statement needs to be specified in the NetView *** RPP00280 *** DSIDMN definition member. The statement should look *** RPP00290 *** like this: *** RPP00300 *** *** RPP00310 *** TASK MOD=RPPICMD,TSKID=RPPICMD,PRI=5,MEM=AUTOPPIC,INIT=Y *** RPP00320 *** *** RPP00330 *** The MEM= parameter is used to tell the RPPICMD task the *** RPP00340 *** name of the autotask to route the MVS commands to be *** RPP00350 *** executed. It is optional. If not specified AUTOPPIC *** RPP00360 *** is the default autotask name. *** RPP00370 *** *** RPP00380 *** *** RPP00390 *** Operation: *** RPP00400 *** *** RPP00410 *** The task will be started by NetView if INIT=Y is coded on *** RPP00420 *** the TASK statement. It can also be started, stopped and *** RPP00430 *** displayed via the NetView START TASK, STOP TASK, and LIST *** RPP00440 *** commands. *** RPP00450 *** *** RPP00460 *** *** RPP00470 *** For Security the following safeguards are built-in: *** RPP00480 *** *** RPP00490 *** 1. RPPICMD runs APF authorized and tells the NetView *** RPP00500 *** PPI that it will only receive data from a application *** RPP00510 *** called SPPICMD which also runs APF authorized. *** RPP00520 *** *** RPP00530 *** 2. Both SPPICMD and RPPICMD must be put in a authorized *** RPP00540 *** library and must be linkedited as AC=1. *** RPP00550 *** *** RPP00560 *** 3. The command sent is prefixed with a 8 character password.*** RPP00570 *** The password is hardcoded in both the SPPICMD and *** RPP00580 *** RPPICMD programs. RPPICMD checks the password when any *** RPP00590 *** data is received. *** RPP00600 *** *** RPP00610 *** The password can be changed, but must be changed in *** RPP00620 *** both programs, and the programs must be restarted. *** RPP00630 *** *** RPP00640 *** For added protection the SPPICMD module should be RACF *** RPP00650 *** protected and only authorized for the intended user. *** RPP00660 *** This will prevent unauthorized users from running *** RPP00670 *** the program and sending commands to NetView for execution. *** RPP00680 *** *** RPP00690 *** *** RPP00700 *** Gary Forghetti *** RPP00710 *** IBM Corporation *** RPP00720 *** Network Mgmt Products Field Support *** RPP00730 *** Research Triangle Park, North Carolina *** RPP00740 *** *** RPP00750 *********************************************************************** RPP00760 *********************************************************************** RPP00770 EJECT RPP00780 DSICBS DSIMVT,DSISVL,DSISWB,DSITIB,DSITVB,DSIDSB,DSIIFR, *RPP00790 PRINT=NO RPP00800 R0 EQU 0 RPP00810 R1 EQU 1 RPP00820 R2 EQU 2 RPP00830 R3 EQU 3 RPP00840 R4 EQU 4 RPP00850 R5 EQU 5 RPP00860 R6 EQU 6 RPP00870 R7 EQU 7 DSIMVT BASE REGISTER RPP00880 R8 EQU 8 DSITVB BASE REGISTER RPP00890 R9 EQU 9 DSITIB BASE REGISTER RPP00900 R10 EQU 10 WORKSTOR BASE REGISTER RPP00910 R11 EQU 11 BASE REGISTER RPP00920 R12 EQU 12 BASE REGISTER RPP00930 R13 EQU 13 RPP00940 R14 EQU 14 RPP00950 R15 EQU 15 RPP00960 EJECT RPP00970 USING *,R15 RPP00980 B PROLOG RPP00990 DC C'RPPICMD &SYSDATE. AT &SYSTIME. ' RPP01000 DC C'COPYRIGHT IBM CORPORATION 1990, ' RPP01010 DC C'NO WARRANTY EXPRESSED OR IMPLIED. ' RPP01020 PROLOG DS 0H RPP01030 STM R14,R12,12(R13) SAVE REGISTERS RPP01040 LR R11,R15 SET UP 1ST BASE REGISTER RPP01050 LA R12,4095(R11) SET UP 2ND - RPP01060 LA R12,1(R12) BASE REGISTER RPP01070 DROP R15 RPP01080 USING RPPICMD,R11,R12 ESTABLISH BASE REGISTERS RPP01090 LR R9,R1 GET TVB ADDRESS RPP01100 USING DSITVB,R9 SET UP BASE FOR TVB RPP01110 L R8,TVBTIB GET TIB ADDRESS RPP01120 USING DSITIB,R8 SET UP BASE FOR TIB RPP01130 L R7,TVBMVT GET MVT ADDRESS RPP01140 USING DSIMVT,R7 SET UP BASE FOR MVT RPP01150 * RPP01160 ST R13,TIBSAVES+4 SAVE CALLERS R13 IN MY SAVEAREA RPP01170 LA R2,TIBSAVES POINT R2 TO MY SAVEAREA RPP01180 ST R2,8(0,R13) PUT MY SAVEAREA ADDR IN CALLERS RPP01190 LR R13,R2 SET UP R13 TO MY SAVEAREA RPP01200 * RPP01210 TM TVBIND1,TVBTERM WAS I DRIVEN FOR TERMINATION? RPP01220 BO TERMINAT YES, GO AND DO TERM PROCESSING RPP01230 * RPP01240 XC TIBNDATD,TIBNDATD CLEAR TIB WORKAREA RPP01250 XC TIBEDATD,TIBEDATD CLEAR TIB WORKAREA RPP01260 * RPP01270 BAL R14,INITRTN PERFORM INITIALIZATION RPP01280 * RPP01290 TM TVBIND1,TVBTERM ANY ERRORS? RPP01300 BO TERMINAT YES, EXIT RPP01310 * RPP01320 USING WORKSTOR,R10 R10 IS BASE FOR WORKSTOR RPP01330 * RPP01340 LA R6,RPB GET RPB ADDRESS RPP01350 USING DSIDTR,R6 R6 IS BASE FOR DSIDTR RPP01360 * RPP01370 BAL R14,MAINRTN PERFORM MAINLINE RPP01380 * RPP01390 TERMINAT EQU * RPP01400 * RPP01410 BAL R14,TERMRTN DO TERMINATION PROCESSING RPP01420 * RPP01430 RETURN EQU * RPP01440 * RPP01450 L R13,TIBSAVES+4 RESTORE CALLERS SAVEAREA ADDR RPP01460 RETURN (14,12),RC=0 RETURN RPP01470 EJECT RPP01480 MAINRTN EQU * RPP01490 ST R14,RMAINRTN SAVE RETURN ADDRESS RPP01500 * RPP01510 MAINRTN1 EQU * RPP01520 * RPP01530 BAL R14,INITPPI INITIALIZE WITH THE NETVIEW PPI RPP01540 * RPP01550 TM TVBIND1,TVBTERM SHOULD I TERMINATE DUE TO ERROR? RPP01560 BO MAINRTNX YES, EXIT RPP01570 * RPP01580 LA R1,TVBTECB GET ADDRESS OF TASK TERM ECB RPP01590 ST R1,ECBLIST SAVE IN ECB LIST RPP01600 L R1,SAVEECB GET ADDRESS OF RECEIVE ECB RPP01610 ST R1,ECBLIST+4 SAVE IN ECB LIST RPP01620 LA R1,TVBMECB GET ADDRESS OF MESSAGE ECB RPP01630 ST R1,ECBLIST+8 SAVE IN ECB LIST RPP01640 OI ECBLIST+8,X'80' END ECB LIST RPP01650 * RPP01660 MAINRTN2 EQU * RPP01670 * RPP01680 DSIWAT ECBLIST=ECBLIST WAIT ON MESSAGE Q AND TERM ECBS RPP01690 * RPP01700 TM TVBTECB,TIBECBPO TASK TERMINATION ECB POSTED RPP01710 BO MAINRTNX YES, EXIT RPP01720 * RPP01730 TM TVBMECB,TIBECBPO SOMETHING RECEIVED ON MESSAGE Q? RPP01740 BNO MAINRTN3 NO, MUST BE COMMAND OVER THE PPI RPP01750 * RPP01760 XC TVBMECB,TVBMECB CLEAR MESSAGE ECB RPP01770 * RPP01780 BAL R14,FREEMSG FREE ANYTHING ON MESSAGE QUEUE RPP01790 * RPP01800 B MAINRTN2 GO BACK AND WAIT RPP01810 * RPP01820 MAINRTN3 EQU * RPP01830 * RPP01840 BAL R14,RECVCMD GO RECEIVE AND SEND THE COMMAND RPP01850 * RPP01860 CLC DTRRETC,=F'24' SUBSYSTEM NOT ACTIVE? RPP01870 BE MAINRTN1 YES, GO REINITIALIZE RPP01880 * RPP01890 CLC DTRRETC,=F'28' PRE V1R3 SSI GOT THE PPI? RPP01900 BE MAINRTN1 YES, GO REINITIALIZE RPP01910 * RPP01920 B MAINRTN2 NO, JUST WAIT FOR MORE WORK RPP01930 * RPP01940 MAINRTNX EQU * RPP01950 L R14,RMAINRTN RESTORE RETURN ADDRESS RPP01960 BR R14 RETURN RPP01970 EJECT RPP01980 RECVCMD EQU * RPP01990 ST R14,RRECVCMD SAVE RETURN ADDRESS RPP02000 * RPP02010 MVC DTRREQT,=H'22' RECEIVE A BUFFER FROM QUEUE RPP02020 XC DTRRECOP,DTRRECOP INITIALIZE RECOVERY OPTIONS RPP02030 MVC DTRASCB,SAVEASCB RESTORE ASCB ADDRESS IN RPB RPP02040 MVC DTRUBL,=F'108' BUFFER LENGTH IS 108 RPP02050 * RPP02060 MVI PPICMD,X'40' RPP02070 MVC PPICMD+1(L'PPICMD-1),PPICMD RPP02080 * RPP02090 LA R1,PPIBUFFR GET ADDRESS OF COMMAND RPP02100 ST R1,DTRUBPTR PUT ADDRESS IN RPB RPP02110 * RPP02120 L R15,CNMCNETV GET ADDRESS OF CNMCNETV RPP02130 CALL (15),MF=(E,PARMLIST) INVOKE NETVIEW APPI RPP02140 * RPP02150 CLC DTRRETC,=F'0' RECEIVE SUCCESSFUL? RPP02160 BE RECVCMD1 YES, CONTINUE RPP02170 * RPP02180 CLC DTRRETC,=F'24' SUBSYSTEM INACTIVE? RPP02190 BE RECVCMDX YES, EXIT RPP02200 * RPP02210 MVC MESSAGE(L'ERRMSG2),ERRMSG2 RPP02220 L R15,DTRRETC GET RETURN CODE RPP02230 CVD R15,DBLEWORD CONVERT TO DECIMAL RPP02240 UNPK UNPKRETC,DBLEWORD+6(2) UNPACK RETURN CODE RPP02250 OI UNPKRETC+2,X'F0' FIX THE SIGN RPP02260 MVC MESSAGE+57(2),UNPKRETC+1 PUT RETURN CODE IN MESSAGE RPP02270 LA R1,L'ERRMSG2 GET ADDRESS OF ERROR MESSAGE RPP02280 BAL R14,DISPMSG GO DISPLAY ERROR MESSAGE RPP02290 * RPP02300 B RECVCMDX EXIT RPP02310 * RPP02320 RECVCMD1 EQU * RPP02330 * RPP02340 CLC PPIPASSW,PASSWORD PASSWORD OKAY? RPP02350 BNE RECVCMDX NO, EXIT RPP02360 * RPP02370 MVC COMMAND,PPICMD GET COMMAND RPP02380 * RPP02390 BAL R14,SENDCMD GO SEND THE COMMAND RPP02400 * RPP02410 RECVCMDX EQU * RPP02420 L R14,RRECVCMD RESTORE RETURN ADDRESS RPP02430 BR R14 RETURN RPP02440 EJECT RPP02450 SENDCMD EQU * RPP02460 ST R14,RSENDCMD RESTORE RETURN ADDRESS RPP02470 * RPP02480 LA R2,CMDIFR GET ADDRESS OF CMD IFR RPP02490 USING DSIIFR,R2 R2 IS BASE FOR IFR RPP02500 MVC IFRCODE,=AL2(IFRCODCR) PUT IFRCODCR IN IFRCODE RPP02510 DROP R2 RPP02520 * RPP02530 LA R2,CMDBUFF GET ADDRESS OF COMMAND BUFFER RPP02540 USING BUFHDR,R2 R2 IS THE BASE REG RPP02550 * RPP02560 L R1,DTRUBL GET LENGTH OF COMMAND RPP02570 LA R1,2(R1) ADD LENGTH OF IFR CODE RPP02580 STH R1,HDRMLENG PUT IFR LENGTH IN MESSAGE RPP02590 * RPP02600 LA R1,HDRMSGLN GET OFFSET TO IFR TEXT RPP02610 STH R1,HDRTDISP PUT IN BUFFER RPP02620 MVC HDRDOMID,MVTCURAN PUT DOMAIN ID IN BUFFER HEADER RPP02630 MVI HDRMTYPE,HDRTYPEI INDICATE IFR RPP02640 AH R1,HDRMLENG CALCULATE BUFFER LENGTH RPP02650 STH R1,HDRBLENG PUT IN BUFFER RPP02660 DSIDATIM AREA=DATETIME,FORMAT=BINARY RPP02670 MVC HDRTSTMP,TIME PUT TIME IN BUFFER RPP02680 DSIMQS SWB=SWBADDR,BFR=(R2),TASKID=OPERATOR QUEUE COMMAND RPP02690 LTR R15,R15 SUCCESSFUL? RPP02700 BZ SENDCMDX YES, EXIT RPP02710 * RPP02720 MVC MESSAGE(L'ERRMSG1),ERRMSG1 RPP02730 MVC MESSAGE+41(8),OPERATOR RPP02740 LA R1,L'ERRMSG1 GET ADDRESS OF ERROR MESSAGE RPP02750 BAL R14,DISPMSG GO DISPLAY ERROR MESSAGE RPP02760 * RPP02770 SENDCMDX EQU * RPP02780 L R14,RSENDCMD RESTORE RETURN ADDRESS RPP02790 BR R14 RETURN RPP02800 EJECT RPP02810 FREEMSG EQU * RPP02820 ST R14,RFREEMSG SAVE RETURN ADDRESS RPP02830 * RPP02840 FREEMSG1 EQU * RPP02850 * RPP02860 SLR R0,R0 ZERO THE SWAP REGISTER RPP02870 L R3,TVBMPUBQ LOAD COMPARAND REGISTER RPP02880 * RPP02890 CS R3,R0,TVBMPUBQ CS ZERO ON THE QUEUE RPP02900 BNE FREEMSG1 RETRY IF TVBMPUBQ CHANGED RPP02910 * RPP02920 XC TVBQCNT,TVBQCNT CLEAR PUBLIC QUEUE COUNT RPP02930 * RPP02940 USING BUFHDR,R3 R3 IS BASE FOR BUFHDR RPP02950 * RPP02960 FREEMSG2 EQU * RPP02970 * RPP02980 L R1,HDRNEXTM REVERSE RPP02990 ST R0,HDRNEXTM THE RPP03000 LR R0,R3 QUEUE RPP03010 LTR R3,R1 ORDER. TEST FOR END OF Q RPP03020 BNZ FREEMSG2 CONTINUE IF NOT END OF Q RPP03030 * RPP03040 ST R0,TVBMPRIQ POINT PRIVATE ANCHOR AT FIFO Q RPP03050 DROP R3 RPP03060 * RPP03070 B FREEMSG4 CONTINUE RPP03080 * RPP03090 FREEMSG3 EQU * RPP03100 * RPP03110 L R2,TVBMPRIQ POINT TO FIRST BUFFER RPP03120 USING BUFHDR,R2 R2 IS BASE FOR BUFFER HEADER RPP03130 L R1,HDRNEXTM ANCHOR THE NEXT MESSAGE RPP03140 ST R1,TVBMPRIQ MAKE IT THE FIRST BUFFER RPP03150 LH R5,HDRBLENG GET THE BUFFER LENGTH RPP03160 DSIFRE R,A=(R2),LV=(R5),SP=0 FREE THE BUFFER RPP03170 LTR R15,R15 SUCCESSFUL? RPP03180 BZ FREEMSG4 YES, CONTINUE RPP03190 * RPP03200 ABEND 2 NO, ABEND WITH USER 2 RPP03210 * RPP03220 FREEMSG4 EQU * RPP03230 * RPP03240 OC TVBMPRIQ,TVBMPRIQ ANYTHING LEFT? RPP03250 BNZ FREEMSG3 YES, KEEP PROCESSING RPP03260 * RPP03270 FREEMSGX EQU * RPP03280 L R14,RFREEMSG RESTORE RETURN ADDRESS RPP03290 BR R14 RETURN RPP03300 DROP R2 RPP03310 EJECT RPP03320 INITPPI EQU * RPP03330 ST R14,RINITPPI SAVE RETURN ADDRESS RPP03340 * RPP03350 MVC DTRLEN,=A(DTREND-DSIDTR) PUT LENGTH IN RPB RPP03360 * RPP03370 LA R1,WORKAREA GET ADDRESS OF WORKAREA RPP03380 ST R1,DTRWKPTR PUT ADDRESS IN RPB RPP03390 * RPP03400 LA R1,RPB GET ADDRESS OF RPB RPP03410 ST R1,PARMLIST PUT ADDRESS IN PARM LIST RPP03420 OI PARMLIST,X'80' END PARM LIST RPP03430 * RPP03440 INITPPI1 EQU * RPP03450 * RPP03460 MVC DTRREQT,=H'1' QUERY NETVIEW SUBSYSTEM STATUS RPP03470 * RPP03480 L R15,CNMCNETV GET ADDRESS OF CNMCNETV RPP03490 CALL (15),MF=(E,PARMLIST) INVOKE NETVIEW APPI RPP03500 * RPP03510 CLC DTRRETC,=F'10' NETVIEW SUBSYSTEM ACTIVE? RPP03520 BE INITPPI2 YES, CONTINUE RPP03530 * RPP03540 TM TVBTECB,TIBECBPO TASK TERMINATING? RPP03550 BO INITPPIX YES, EXIT RPP03560 * RPP03570 STIMER WAIT,BINTVL=WAITTIME WAIT 1 MINUTE AND RETRY RPP03580 B INITPPI1 GO BACK AND RETRY RPP03590 * RPP03600 INITPPI2 EQU * RPP03610 * RPP03620 MVC DTRREQT,=H'3' OBTAIN ASCB AND TCB ADDRESSES RPP03630 * RPP03640 L R15,CNMCNETV GET ADDRESS OF CNMCNETV RPP03650 CALL (15),MF=(E,PARMLIST) INVOKE NETVIEW APPI RPP03660 * RPP03670 CLC DTRRETC,=F'0' SUCCESSFUL? RPP03680 BE INITPPI3 YES, CONTINUE RPP03690 * RPP03700 TM TVBTECB,TIBECBPO TASK TERMINATING? RPP03710 BO INITPPIX YES, EXIT RPP03720 * RPP03730 STIMER WAIT,BINTVL=WAITTIME WAIT 1 MINUTE AND RETRY RPP03740 B INITPPI2 GO BACK AND RETRY RPP03750 * RPP03760 INITPPI3 EQU * RPP03770 * RPP03780 MVC SAVEASCB,DTRASCB SAVE RETURNED ASCB ADDRESS RPP03790 MVC SAVETCB,DTRTCB SAVE RETURNED TCB ADDRESS RPP03800 * RPP03810 MVC DTRREQT,=H'4' DEFINE A RECEIVER RPP03820 MVC DTRRVID,=CL8'RPPICMD' RPP03830 XC DTRRECOP,DTRRECOP INITIALIZE RECOVERY OPTIONS RPP03840 MVC DTRAUTH,=H'1' SET AUTH INDICATOR RPP03850 MVC DTRBQL,=F'10' MAXIMUM BUFFER QUEUE SIZE OF 10 RPP03860 * RPP03870 L R15,CNMCNETV GET ADDRESS OF CNMCNETV RPP03880 CALL (15),MF=(E,PARMLIST) INVOKE NETVIEW APPI RPP03890 * RPP03900 CLC DTRRETC,=F'0' SUCCESSFUL? RPP03910 BE INITPPI4 YES, CONTINUE RPP03920 * RPP03930 TM TVBTECB,TIBECBPO TASK TERMINATING? RPP03940 BO INITPPIX YES, EXIT RPP03950 * RPP03960 STIMER WAIT,BINTVL=WAITTIME WAIT 1 MINUTE AND RETRY RPP03970 B INITPPI2 GO BACK AND RETRY RPP03980 * RPP03990 INITPPI4 EQU * RPP04000 * RPP04010 MVC SAVEECB,DTRECB SAVE ECBADDR RPP04020 * RPP04030 INITPPIX EQU * RPP04040 L R14,RINITPPI RESTORE RETURN ADDRESS RPP04050 BR R14 RPP04060 EJECT RPP04070 * RPP04080 * THIS ROUTINE PERFORMS INITIALIZATION PROCESSING. RPP04090 * RPP04100 INITRTN EQU * RPP04110 ST R14,RINITRTN SAVE RETURN ADDRESS RPP04120 * RPP04130 DSILCS CBADDR=SWBADDR,SWB=GET GET A SWB CONTROL BLOCK RPP04140 LTR R15,R15 DID I GET A SWB? RPP04150 BZ INITRTN1 YES, GO INITIALIZE SWB RPP04160 * RPP04170 ABEND 1 NO, ABEND WITH USER 1 RPP04180 * RPP04190 B INITRTNX EXIT RPP04200 * RPP04210 INITRTN1 EQU * RPP04220 * RPP04230 USING DSISWB,R1 R1 IS BASE FOR SWB RPP04240 L R1,SWBADDR GET ADDRESS OF SWB RPP04250 ST R8,SWBTIB PUT TIB ADDRESS IN SWB RPP04260 DROP R1 RPP04270 * RPP04280 DSIGET LV=CORESIZE,A=STORAGE,Q=YES,CLEAR=YES RPP04290 * RPP04300 LTR R15,R15 OKAY? RPP04310 BZ INITRTN2 NO, EXIT RPP04320 * RPP04330 OI TVBIND1,TVBTERM SET TERMINATION FLAG RPP04340 B INITRTNX EXIT RPP04350 * RPP04360 INITRTN2 EQU * RPP04370 * RPP04380 L R10,STORAGE GET ADDRESS OF WORKSTOR RPP04390 * RPP04400 LOAD EP=CNMCNETV DYNAMICALLY LOAD CNMCNETV RPP04410 ST R0,CNMCNETV SAVE MODULE ADDRESS RPP04420 * RPP04430 MVC ENQDEQ(ENQDEQL),LENQDEQ INITIALIZE ENQDEQ LIST RPP04440 ENQ (MVTNCCFQ,MVTTVBRN,E,18,STEP),MF=(E,ENQDEQ) RPP04450 * RPP04460 MVC TVBOPID,TVBLUNAM UPDATE NCCF TABLE WITH TASKID RPP04470 OI TVBIND3,TVBACTV INDICATE THAT I'M ACTIVE RPP04480 * RPP04490 MVC ENQDEQ(ENQDEQL),LENQDEQ INITIALIZE ENQDEQ LIST RPP04500 DEQ (MVTNCCFQ,MVTTVBRN,18,STEP),MF=(E,ENQDEQ) RPP04510 * RPP04520 BAL R14,DSI530I GO DISPLAY INIT. MESSAGE RPP04530 * RPP04540 MVC OPERATOR,TVBMEMNM GET NAME OF AUTO TASK RPP04550 * RPP04560 CLI OPERATOR,X'40' WAS A TASK SPECIFIED? RPP04570 BNE INITRTNX YES, EXIT RPP04580 * RPP04590 MVC OPERATOR,=CL8'AUTOPPIC' NO DEFAULT TO AUTOPPIC RPP04600 * RPP04610 INITRTNX EQU * RPP04620 L R14,RINITRTN RESTORE RETURN ADDRESS RPP04630 BR R14 EXIT RPP04640 EJECT RPP04650 * RPP04660 * THIS ROUTINE PERFORMS TERMINATION PROCESSING. THE TASK IS MARKED RPP04670 * AS INACTIVE, A TERMINATION MESSAGE IS ISSUED, AND THE SWB CONTROL RPP04680 * BLOCK IS FREED, AND THE OUTPUT FILE IS CLOSED. RPP04690 * RPP04700 TERMRTN EQU * RPP04710 ST R14,RTERMRTN SAVE RETURN ADDRESS RPP04720 * RPP04730 OC SWBADDR,SWBADDR IS THERE AN SWB? RPP04740 BZ TERMRTNX NO, EXIT RPP04750 * RPP04760 TERMRTN1 EQU * RPP04770 * RPP04780 OC STORAGE,STORAGE ANY STORAGE TO FREE? RPP04790 BZ TERMRTNX NO, EXIT RPP04800 * RPP04810 OC CNMCNETV,CNMCNETV WAS CNMCNETV LOADED? RPP04820 BZ TERMRTNX NO, EXIT RPP04830 * RPP04840 MVC DTRREQT,=H'10' DELETE RECEIVER RPP04850 XC DTRRECOP,DTRRECOP INITIALIZE RECOVERY OPTIONS RPP04860 MVC DTRASCB,SAVEASCB RESTORE ASCB ADDRESS RPP04870 * RPP04880 L R15,CNMCNETV GET ADDRESS OF CNMCNETV RPP04890 CALL (15),MF=(E,PARMLIST) INVOKE NETVIEW APPI RPP04900 * RPP04910 DELETE EP=CNMCNETV DELETE CNMCNETV RPP04920 * RPP04930 MVC ENQDEQ(ENQDEQL),LENQDEQ INITIALIZE ENQDEQ LIST RPP04940 ENQ (MVTNCCFQ,MVTTVBRN,E,18,STEP),MF=(E,ENQDEQ) RPP04950 * RPP04960 NI TVBIND3,TVBACTV MARK TASK AS INACTIVE RPP04970 * RPP04980 MVC ENQDEQ(ENQDEQL),LENQDEQ INITIALIZE ENQDEQ LIST RPP04990 DEQ (MVTNCCFQ,MVTTVBRN,18,STEP),MF=(E,ENQDEQ) RPP05000 * RPP05010 BAL R14,DSI531I GO DISPLAY TERM. MESSAGE RPP05020 * RPP05030 DSILCS CBADDR=SWBADDR,SWB=FREE RPP05040 XC SWBADDR,SWBADDR CLEAR SWB ADDRESS RPP05050 LTR R15,R15 WAS SWB FREED? RPP05060 BZ TERMRTN2 YES, CONTINUE RPP05070 * RPP05080 ABEND 3 NO, ABEND WITH USER 3 RPP05090 * RPP05100 TERMRTN2 EQU * RPP05110 * RPP05120 DSIFRE LV=CORESIZE,A=STORAGE,Q=YES FREE STORAGE RPP05130 * RPP05140 TERMRTNX EQU * RPP05150 L R14,RTERMRTN RESTORE RETURN ADDRESS RPP05160 BR R14 RETURN RPP05170 EJECT RPP05180 * RPP05190 * DSI530I '&9' : '&1' IS READY AND WAITING FOR WORK RPP05200 * RPP05210 DSI530I EQU * RPP05220 ST R14,RMESSAGE SAVE RETURN ADDRESS RPP05230 * RPP05240 USING BUFHDR,R2 R2 IS BASE FOR BUFHDR RPP05250 LA R2,MSGBUFF GET ADDRESS OF MESSAGE BUFFER RPP05260 XC MSGBUFF,MSGBUFF CLEAR MESSAGE BUFFER RPP05270 LA R1,BUFHDRND-BUFHDR GET OFFSET TO MESSAGE TEXT RPP05280 STH R1,HDRTDISP PUT OFFSET IN BUFHDR RPP05290 LA R1,L'MESSAGE(R1) GET LENGTH OF BUFFER RPP05300 STH R1,HDRBLENG STORE IN BUFFER RPP05310 DSIMBS SWB=SWBADDR,MID=530,BFR=(R2),MSGTBL=MVTMCC, *RPP05320 P9=(TVBOPID,8),P1=(OPT,3) RPP05330 MVI HDRMTYPE,HDRTYPEN INDICATE ITS A NETVIEW MESSAGE RPP05340 BAL R14,SENDMSG DISPLAY THE MESSAGE RPP05350 DROP R2 DROP R2 AS BASE REGISTER RPP05360 * RPP05370 DSI530IX EQU * RPP05380 L R14,RMESSAGE RESTORE RETURN ADDRESS RPP05390 BR R14 RETURN RPP05400 EJECT RPP05410 * RPP05420 * DSI531I '&9' : '&1' IS TERMINATING RPP05430 * RPP05440 DSI531I EQU * RPP05450 ST R14,RMESSAGE SAVE RETURN ADDRESS RPP05460 * RPP05470 USING BUFHDR,R2 R2 IS BASE FOR BUFHDR RPP05480 LA R2,MSGBUFF GET ADDRESS OF MESSAGE BUFFER RPP05490 XC MSGBUFF,MSGBUFF CLEAR MESSAGE BUFFER RPP05500 LA R1,BUFHDRND-BUFHDR GET OFFSET TO MESSAGE TEXT RPP05510 STH R1,HDRTDISP PUT OFFSET IN BUFHDR RPP05520 LA R1,L'MESSAGE(R1) GET LENGTH OF BUFFER RPP05530 STH R1,HDRBLENG STORE IN BUFFER RPP05540 DSIMBS SWB=SWBADDR,MID=531,BFR=(R2),MSGTBL=MVTMCC, *RPP05550 P9=(TVBOPID,8),P1=(OPT,3) RPP05560 MVI HDRMTYPE,HDRTYPEN INDICATE ITS A NETVIEW MESSAGE RPP05570 BAL R14,SENDMSG DISPLAY THE MESSAGE RPP05580 DROP R2 DROP R2 AS BASE REGISTER RPP05590 * RPP05600 DSI531IX EQU * RPP05610 L R14,RMESSAGE RESTORE RETURN ADDRESS RPP05620 BR R14 RETURN RPP05630 EJECT RPP05640 * RPP05650 * THIS ROUTINE SENDS A MESSAGE TO THE OPERATOR WHO STARTED THE TASK. RPP05660 * IF THE DSIMQS FAILS, THEN THE MESSAGE IS SENT TO THE AUTHORIZED RPP05670 * RECEIVER. RPP05680 * COMING IN, THE MESSAGE HAS BEEN PLACED IN THE BUFFER AND RPP05690 * R1 HAS THE LENGTH OF THE MESSAGE. RPP05700 * RPP05710 DISPMSG EQU * RPP05720 ST R14,RDISPMSG SAVE RETURN ADDRESS RPP05730 * RPP05740 USING BUFHDR,R2 R2 IS BASE FOR BUFFER HEADER RPP05750 LA R2,MSGBUFF GET ADDRESS OF BUFFER RPP05760 STH R1,HDRMLENG PUT MESSAGE LENGTH IN BUFFER RPP05770 LA R1,HDRMSGLN GET OFFSET TO MSG TEXT RPP05780 STH R1,HDRTDISP MOVE MESSAGE OFFSET TO BUFFER RPP05790 AH R1,HDRMLENG MSG LEN+HDRTDISP RPP05800 STH R1,HDRBLENG MOVE BUFFER LENGTH TO BUFFER RPP05810 MVC HDRDOMID,MVTCURAN PUT DOMAIN ID IN BUFFER HEADER RPP05820 MVI HDRMTYPE,HDRTYPEU INDICATE A USER MESSAGE RPP05830 DSIDATIM AREA=DATETIME,FORMAT=BINARY RPP05840 MVC HDRTSTMP,TIME PUT TIME IN BUFFER RPP05850 BAL R14,SENDMSG GO SEND THE MESSAGE RPP05860 * RPP05870 DISPMSGX EQU * RPP05880 L R14,RDISPMSG RESTORE RETURN ADDRESS RPP05890 BR R14 RETURN RPP05900 DROP R2 RPP05910 EJECT RPP05920 SENDMSG EQU * RPP05930 ST R14,RSENDMSG SAVE RETURN ADDRESS RPP05940 * RPP05950 DSIMQS SWB=SWBADDR,BFR=(R2),TASKID=TVBAPID RPP05960 * RPP05970 LTR R15,R15 RPP05980 BZ SENDMSGX RPP05990 * RPP06000 CH R15,=H'8' TASK NOT ACTIVE? RPP06010 BNE SENDMSGX NO, SOMETHING ELSE IS WRONG RPP06020 * RPP06030 DSIMQS SWB=SWBADDR,BFR=(R2),AUTHRCV=YES RPP06040 * RPP06050 SENDMSGX EQU * RPP06060 L R14,RSENDMSG RESTORE RETURN ADDRESS RPP06070 BR R14 RETURN RPP06080 EJECT RPP06090 LTORG RPP06100 WAITTIME DC A(60*100) RPP06110 * RPP06120 PASSWORD DC XL8'00FF00FF00FF00FF' RPP06130 * RPP06140 OPT DC CL3'OPT' RPP06150 ERRMSG1 DC C'RPPICMD01: DSIMQS OF COMMAND TO AUTOTASK XXXXXXXX FAIL*RPP06160 ED' RPP06170 ERRMSG2 DC C'RPPICMD02: PPI RECEIVE REQUEST FAILED WITH A RETURN CO*RPP06180 DE XX' RPP06190 LENQDEQ ENQ (,,,,),MF=L RPP06200 ENQDEQL EQU *-LENQDEQ RPP06210 EJECT RPP06220 DSITIB DSECT RPP06230 ORG TIBNDATD RPP06240 * RPP06250 DATETIME DS 0D WORKAREA FOR DSIDATIM MACRO RPP06260 DATE DS F DATE RPP06270 TIME DS F TIME RPP06280 * RPP06290 STORAGE DS F ADDRESS OF WORKSTOR RPP06300 CNMCNETV DS F ADDRESS OF CNMCNETV RPP06310 * RPP06320 ECBLIST DS 3F ECB LIST FOR DSIWAT RPP06330 RINITRTN DS F BRANCH RETURN ADDRESS RPP06340 RMAINRTN DS F BRANCH RETURN ADDRESS RPP06350 RFREEMSG DS F BRANCH RETURN ADDRESS RPP06360 RINITPPI DS F BRANCH RETURN ADDRESS RPP06370 RRECVCMD DS F BRANCH RETURN ADDRESS RPP06380 RSENDCMD DS F BRANCH RETURN ADDRESS RPP06390 RTERMRTN DS F BRANCH RETURN ADDRESS RPP06400 RMESSAGE DS F BRANCH RETURN ADDRESS RPP06410 RDISPMSG DS F BRANCH RETURN ADDRESS RPP06420 RSENDMSG DS F BRANCH RETURN ADDRESS RPP06430 SWBADDR DS F BRANCH RETURN ADDRESS RPP06440 ENQDEQ DS CL(ENQDEQL) PARM LIST FOR ENQ/DEQ MACROS RPP06450 DS XL(256-(*-TIBNDATD)) RPP06460 * RPP06470 ORG TIBEDATD RPP06480 MSGBUFF DS 0XL(HDRMSGLN+L'MESSAGE) RPP06490 DS XL(HDRMSGLN) RPP06500 MESSAGE DS CL80 RPP06510 DS XL(256-(*-TIBEDATD)) RPP06520 EJECT RPP06530 WORKSTOR DSECT RPP06540 DBLEWORD DS D DOUBLE WORD WORKAREA RPP06550 PARMLIST DS F PARM LIST FOR CNMCNETV RPP06560 SAVETCB DS F TCB ADDRESS SAVEAREA RPP06570 SAVEASCB DS F ASCB ADDRESS SAVEAREA RPP06580 SAVEECB DS F ECB ADDRESS SAVEAREA RPP06590 * RPP06600 OPERATOR DS CL8 NAME OF AUTO TASK RPP06610 * RPP06620 UNPKRETC DS CL3 UNPACKED RETURN CODE RPP06630 * RPP06640 CMDBUFF DS 0F COMMAND BUFFER RPP06650 DS XL(HDRMSGLN) BUFFER HEADER FOR COMMAND BUFR RPP06660 CMDIFR DS XL2 IFR CODE RPP06670 COMMAND DS CL100 COMMAND TO BE EXECUTED RPP06680 * RPP06690 RPB DS CL(RPBLENG) RPP06700 * RPP06710 PPIBUFFR DS 0CL108 RPP06720 PPIPASSW DS XL8 RPP06730 PPICMD DS CL100 RPP06740 * RPP06750 WORKAREA DS CL128 RPP06760 CORESIZE EQU *-WORKSTOR RPP06770 EJECT RPP06780 DSIDTR ASSEMBLER DSECT FOR RPB RPP06790 RPBLENG EQU *-DSIDTR RPP06800 END RPPICMD RPP06810