CPCMD CSECT CPC00010 CPCMD AMODE 31 CPC00020 CPCMD RMODE ANY CPC00030 *********************************************************************** CPC00040 *********************************************************************** CPC00050 *** *** CPC00060 *** (C) Copyright IBM Corp. 1990 *** CPC00070 *** No warranty expressed or implied. *** CPC00080 *** *** CPC00090 *** CPCMD *** CPC00100 *** *** CPC00110 *** This command processor allows a NetView operator running on *** CPC00120 *** a MVS guest machine on VM to execute CP commands. *** CPC00130 *** *** CPC00140 *** Installation: *** CPC00150 *** *** CPC00160 *** 1. Assemble and linkedit code as reentrant *** CPC00170 *** *** CPC00180 *** SYS1.AMODGEN maclib required for assembly. *** CPC00190 *** *** CPC00200 *** 2. Add CMDMDL statement to DSICMD: *** CPC00210 *** *** CPC00220 *** CPCMD CMDMDL MOD=CPCMD *** CPC00230 *** CMDSYN CP *** CPC00240 *** *** CPC00250 *** Operation syntax: *** CPC00260 *** *** CPC00270 *** CPcmd command-to-be-executed-and-parameters *** CPC00280 *** *** CPC00290 *** *** CPC00300 *** Gary Forghetti *** CPC00310 *** IBM Corporation *** CPC00320 *** Network Mgmt Products Field Support *** CPC00330 *** Research Triangle Park, North Carolina *** CPC00340 *** *** CPC00350 *********************************************************************** CPC00360 *********************************************************************** CPC00370 EJECT CPC00380 DSICBS DSICWB,DSIMVT,DSIPDB,DSISVL,DSISWB,DSITIB,DSITVB, XCPC00390 DSISCT,PRINT=NO CPC00400 R0 EQU 0 CPC00410 R1 EQU 1 CPC00420 R2 EQU 2 CPC00430 R3 EQU 3 CPC00440 R4 EQU 4 CPC00450 R5 EQU 5 CPC00460 R6 EQU 6 CPC00470 R7 EQU 7 CPC00480 R8 EQU 8 MVT CPC00490 R9 EQU 9 TVB CPC00500 R10 EQU 10 TIB CPC00510 R11 EQU 11 CWB CPC00520 R12 EQU 12 BASE REG CPC00530 R13 EQU 13 SAVEAREA CPC00540 R14 EQU 14 CPC00550 R15 EQU 15 CPC00560 EJECT CPC00570 USING *,R15 CPC00580 B PROLOG CPC00590 DC C'CPCMD &SYSDATE. AT &SYSTIME. ' CPC00600 DC C'COPYRIGHT IBM CORPORATION 1990, ' CPC00610 DC C'NO WARRANTY EXPRESSED OR IMPLIED. ' CPC00620 PROLOG DS 0H CPC00630 STM R14,R12,12(R13) SAVE REGISTERS CPC00640 LR R12,R15 SET BASE REGISTER CPC00650 DROP R15 CPC00660 USING CPCMD,R12 ESTABLISH BASE ADDRESS CPC00670 LR R11,R1 LOAD CWB ADDR CPC00680 USING DSICWB,R11 R11 BASE FOR COMMAND WORK BLOCK CPC00690 LA R2,CWBSAVEA USE CWBSAVEA FOR SAVEAREA CPC00700 ST R2,8(R13) STORE MY SA INTO CALLERS SA CPC00710 ST R13,4(R2) STORE CALLERS SA IN MINE CPC00720 LR R13,R2 R13 HAS MY SAVEAREA ADDRESS CPC00730 L R10,CWBTIB GET DSITIB ADDRESS CPC00740 USING DSITIB,R10 ESTABLISH ADDRESSABILITY CPC00750 L R9,TIBTVB GET DSITVB ADDRESS CPC00760 USING DSITVB,R9 ESTABLISH ADDRESSABILITY CPC00770 L R8,TVBMVT GET DSIMVT ADDRESS CPC00780 USING DSIMVT,R8 ESTABLISH ADDRESSABILITY CPC00790 * CPC00800 XC CWBADATD,CWBADATD CLEAR CWB WORK AREA CPC00810 * CPC00820 DSIDATIM AREA=DATETIME,FORMAT=BINARY CPC00830 * CPC00840 BAL R14,GETPARM GET COMMAND TO EXECUTE AND PARMS CPC00850 OC RETCODE,RETCODE ANY ERRORS? CPC00860 BNZ MODEXIT YES, EXIT CPC00870 * CPC00880 GETMAIN RC,LV=BUFFERL+1, GET STORAGE FOR RESPONSE BUFFER *CPC00890 BNDRY=PAGE CPC00900 LTR R15,R15 DID I GET THE STORAGE? CPC00910 BNZ MODEXIT NO, EXIT CPC00920 LA R1,0(R1) CLEAR HIGH ORDER BIT CPC00930 ST R1,BUFFADDR SAVE BUFFER ADDRESS CPC00940 * CPC00950 L R2,BUFFADDR GET ADDRESS OF BUFFER CPC00960 L R3,=A(BUFFERL+1) GET LENGTH OF BUFFER CPC00970 SLR R4,R4 CLEAR SENDING ADDRESS CPC00980 SLR R5,R5 CLEAR SENDING LENGTH CPC00990 MVCL R2,R4 CLEAR BUFFER CPC01000 * CPC01010 LA R7,PSLLIST GET ADDRESS OF PAGE SERVICE LIST CPC01020 USING PSL,R7 R7 IS BASE REGISTER CPC01030 * CPC01040 L R2,COMMANDA GET ADDRESS OF COMMAND TEXT CPC01050 ST R2,PSLSTRT PUT ADDRESS IN PSL CPC01060 A R2,COMMANDL ADD LENGTH OF COMMAND TEXT CPC01070 ST R2,PSLEND PUT END ADDRESS IN PSL LIST CPC01080 * CPC01090 LA R7,PSLLEN(R7) GET ADDRESS OF 2ND ENTRY IN PSL CPC01100 * CPC01110 L R2,BUFFADDR GET ADDRESS OF THE BUFFER CPC01120 ST R2,PSLSTRT PUT ADDRESS IN PSL CPC01130 A R2,=A(BUFFERL+1) ADD LENGTH OF BUFFER CPC01140 ST R2,PSLEND PUT END ADDRESS IN PSL LIST CPC01150 * CPC01160 OI PSLFLGS1,PSLAST INDICATE LAST PSL ENTRY CPC01170 * CPC01180 MODESET KEY=ZERO,MODE=SUP GO INTO SUPERVISOR STATE KEY 0 CPC01190 * CPC01200 PGSER L,FIX,LA=PSLLIST, PAGE FIX COMMAND TEXT & BUFFER *CPC01210 ECB=0,LONG=N CPC01220 * CPC01230 L R2,COMMANDA GET ADDRESS OF COMMAND TEXT CPC01240 LRA R2,0(,R2) GET REAL ADDRESS OF COMMAND TEXT CPC01250 * CPC01260 L R3,BUFFADDR GET ADDRESS OF THE BUFFER CPC01270 LRA R3,0(,R3) GET REAL ADDRESS OF BUFFER CPC01280 * CPC01290 L R4,COMMANDL GET LENGTH OF COMMAND TEXT CPC01300 O R4,=X'40000000' INDICATE RESPONSE WANTED CPC01310 * CPC01320 L R5,=A(BUFFERL) GET LENGTH OF RESPONSE BUFFER CPC01330 * CPC01340 DC X'83',X'24',XL2'0008' ISSUE DIAGNOSE INSTRUCTION CPC01350 * CPC01360 MVI TRUNCSW,C'N' INDICATE OUTPUT NOT TRUNCATED CPC01370 BE CONTINUE BRANCH IF ALL OUTPUT RECEIVED CPC01380 MVI TRUNCSW,C'Y' INDICATE OUTPUT WAS TRUNCATED CPC01390 * CPC01400 CONTINUE EQU * CPC01410 * CPC01420 PGSER L,FREE,LA=PSLLIST RELEASE THE PAGES CPC01430 * CPC01440 MODESET KEY=NZERO,MODE=PROB GO BACK INTO PROBLEM PROGRAM CPC01450 * CPC01460 BAL R14,DISPLAY GO DISPLAY THE COMMAND RESPONSE CPC01470 * CPC01480 RETURN EQU * CPC01490 * CPC01500 L R1,BUFFADDR GET ADDRESS OF BUFFER CPC01510 FREEMAIN RC,LV=BUFFERL+1, FREE STORAGE FOR RESPONSE BUFFER *CPC01520 A=(1) CPC01530 LTR R15,R15 SUCCESSFUL? CPC01540 BZ MODEXIT YES, EXIT CPC01550 * CPC01560 ST R15,RETCODE NO, SAVE RETURN CODE CPC01570 * CPC01580 MODEXIT EQU * CPC01590 L R13,4(R13) GET CALLERS SAVEAREA ADDRESS CPC01600 L R15,RETCODE GET RETURN CODE CPC01610 RETURN (14,12),RC=(15) RESTORE REGS AND RETURN CPC01620 EJECT CPC01630 DISPLAY EQU * CPC01640 ST R14,RDISPLAY SAVE RETURN ADDRESS CPC01650 * CPC01660 LTR R5,R5 ANY RESPONSE? CPC01670 BNZ DISPLAY1 YES, CONTINUE CPC01680 * CPC01690 MVC MESSAGE(L'ERRMSG3),ERRMSG3 CPC01700 LA R1,L'ERRMSG3 GET LENGTH OF ERROR MESSAGE CPC01710 MVI HDRMTYPX,HDRTYPEU SET HDRTYPE CPC01720 MVI HDRINDX,X'00' CLEAR HDRIND CPC01730 BAL R14,DISPMSG DISPLAY THE ERROR MESSAGE CPC01740 B DISPLAYX EXIT CPC01750 * CPC01760 DISPLAY1 EQU * CPC01770 LA R1,L'TITLEMSG GET LENGTH OF TITLE MESSAGE CPC01780 MVC MESSAGE(L'TITLEMSG),TITLEMSG CPC01790 MVI HDRMTYPX,HDRTYPEL USER TITLE LINE MESSAGE CPC01800 MVI HDRINDX,HDRLNLBL TITLE LINE CPC01810 BAL R14,DISPMSG DISPLAY THE TITLE MESSAGE CPC01820 L R4,BUFFADDR GET ADDRESS OF RESPONSE BUFFER CPC01830 LA R7,0(R4,R5) GET END ADDRESS OF OUTPUT CPC01840 DISPLAY2 EQU * CPC01850 LR R6,R4 GET START OF MESSAGE CPC01860 DISPLAY3 EQU * CPC01870 CLI 0(R6),X'15' END OF LINE? CPC01880 BE DISPLAY4 YES, GO DISPLAY LINE NOW CPC01890 LA R6,1(R6) INCREMENT TO NEXT CHARACTER CPC01900 BCT R5,DISPLAY3 LOOP TILL NO MORE BYTES LEFT CPC01910 B DISPLAY8 EXIT CPC01920 DISPLAY4 EQU * CPC01930 LR R1,R6 GET ENDING ADDRESS CPC01940 SR R1,R4 GET LENGTH OF BUFFER TEXT CPC01950 LTR R1,R1 ZERO LENGTH RECORD? CPC01960 BZ DISPLAY7 YES, SKIP IT CPC01970 C R1,=A(L'MESSAGE) LINE GREATER THAN MAXIMUM SIZE? CPC01980 BNH DISPLAY5 NO, CONTINUE CPC01990 L R1,=A(L'MESSAGE) YES, TRUNCATE CPC02000 DISPLAY5 EQU * CPC02010 BCTR R1,0 ADJUST FOR EXECUTE OF MVC INSTR CPC02020 EX R1,MOVELINE MOVE LINE TO BUFFER CPC02030 LA R1,1(R1) GET BACK LENGTH CPC02040 MVI HDRMTYPX,HDRTYPEL USER TITLE LINE MESSAGE CPC02050 MVI HDRINDX,HDRLNLBL TITLE LINE CPC02060 CLC 0(8,R4),=CL8'ORIGINID' TITLE LINE? CPC02070 BE DISPLAY6 YES, CONTINUE CPC02080 MVI HDRINDX,HDRLNDAT DATA LINE CPC02090 DISPLAY6 EQU * CPC02100 BAL R14,DISPMSG DISPLAY THE MESSAGE CPC02110 DISPLAY7 EQU * CPC02120 LA R4,1(R6) GET ADDRESS OF NEXT LINE CPC02130 BCTR R5,0 DECREMENT LENGTH CPC02140 LTR R5,R5 ANY MORE BYTES LEFT? CPC02150 BZ DISPLAY8 NO, EXIT CPC02160 CLI 0(R4),X'00' ANY MORE DATA? CPC02170 BNE DISPLAY2 NO, EXIT CPC02180 DISPLAY8 EQU * CPC02190 MVI HDRMTYPX,HDRTYPEL USER TITLE LINE MESSAGE CPC02200 MVI HDRINDX,HDRLNEND END LINE CPC02210 CLI TRUNCSW,C'Y' WAS THE OUTPUT TRUNCATED? CPC02220 BE DISPLAY9 YES, PUT OUT TRUNCATED MESSAGE CPC02230 CR R4,R7 DIAGNOSE COMMAND LIE? CPC02240 BL DISPLAY9 YES, PUT OUT TRUNCATED MESSAGE CPC02250 LA R1,L'ENDMSG GET LENGTH OF END MESSAGE CPC02260 MVC MESSAGE(L'ENDMSG),ENDMSG CPC02270 B DISPLAYA GO DISPLAY THE MESSAGE CPC02280 DISPLAY9 EQU * CPC02290 LA R1,L'TRUNCMSG GET LENGTH OF TRUNC MESSAGE CPC02300 MVC MESSAGE(L'TRUNCMSG),TRUNCMSG CPC02310 DISPLAYA EQU * CPC02320 BAL R14,DISPMSG DISPLAY THE MESSAGE CPC02330 DISPLAYX EQU * CPC02340 L R14,RDISPLAY RESTORE RETURN ADDRESS CPC02350 BR R14 RETURN CPC02360 SPACE CPC02370 MOVELINE MVC MESSAGE(0),0(R4) MOVE LINE TO MESSAGE CPC02380 EJECT CPC02390 GETPARM EQU * CPC02400 ST R14,RGETPARM SAVE RETURN ADDRESS CPC02410 L R2,CWBBUF GET ADDRESS OF THIS CMD'S BUFR CPC02420 USING BUFHDR,R2 R2 IS BASE REGISTER CPC02430 L R3,CWBPDB GET THIS CMD'S PDB CPC02440 USING DSIPDB,R3 R4 IS PDB ADDRESS CPC02450 LA R5,PDBTABLE GET ADDRESS OF THE PDB TABLE CPC02460 USING PDBENTRY,R5 R5 IS THE BASE REG FOR ENTRIES CPC02470 CLC PDBNOENT,=H'2' WAS SOMETHING ENTERED? CPC02480 BL GETPARM1 NO, EXIT CPC02490 SLR R1,R1 CLEAR LENGTH REGISTER CPC02500 IC R1,PDBLENG GET LENGTH OF CPCMD NAME CPC02510 LA R5,PDBENTND-PDBENTRY(R5) INCREMENT TO 2ND PDB ENTRY CPC02520 CLI PDBLENG,0 WAS JUST A DELIMETER ENTERED? CPC02530 BE GETPARM1 YES, ERROR CPC02540 CLI PDBLENG,240 MORE THAN 240 CHARACTERS? CPC02550 BH GETPARM2 YES, ERROR CPC02560 LH R4,HDRMLENG GET LENGTH OF COMMAND TEXT CPC02570 SR R4,R1 CALCULATE LENGTH OF COMMAND CPC02580 BCTR R4,0 CPC02590 ST R4,COMMANDL SAVE COMMAND LENGTH CPC02600 AH R2,PDBDISP POINT TO COMMAND IN BUFFER CPC02610 LA R2,0(R2) CLEAR HIGH ORDER BIT CPC02620 ST R2,COMMANDA SAVE COMMAND ADDRESS CPC02630 B GETPARMX EXIT CPC02640 GETPARM1 EQU * CPC02650 MVC MESSAGE(L'ERRMSG1),ERRMSG1 CPC02660 LA R1,L'ERRMSG1 GET LENGTH OF ERROR MESSAGE CPC02670 MVI HDRMTYPX,HDRTYPEU SET HDRTYPE CPC02680 MVI HDRINDX,X'00' CLEAR HDRIND CPC02690 BAL R14,DISPMSG DISPLAY THE ERROR MESSAGE CPC02700 MVC RETCODE,=F'8' SET RETURN CODE CPC02710 B GETPARMX EXIT CPC02720 GETPARM2 EQU * CPC02730 MVC MESSAGE(L'ERRMSG2),ERRMSG2 CPC02740 LA R1,L'ERRMSG2 GET LENGTH OF ERROR MESSAGE CPC02750 MVI HDRMTYPX,HDRTYPEU SET HDRTYPE CPC02760 MVI HDRINDX,X'00' CLEAR HDRIND CPC02770 BAL R14,DISPMSG DISPLAY THE ERROR MESSAGE CPC02780 MVC RETCODE,=F'8' SET RETURN CODE CPC02790 GETPARMX EQU * CPC02800 L R14,RGETPARM RESTORE RETURN ADDRESS CPC02810 BR R14 RETURN CPC02820 EJECT CPC02830 DISPMSG EQU * CPC02840 ST R14,RDISPMSG SAVE RETURN ADDRESS CPC02850 LA R2,MSGBUFF SET UP ADDRESSABILITY CPC02860 USING BUFHDR,R2 CPC02870 STH R1,HDRMLENG PUT LENGTH IN BUFFER CPC02880 LA R1,HDRMSGLN OFFSET TO MSG TEXT CPC02890 STH R1,HDRTDISP PUT OFFSET IN BUFFER CPC02900 AH R1,HDRMLENG CALCULATE BUFFER LENGTH CPC02910 STH R1,HDRBLENG PUT LENGTH IN BUFFER CPC02920 MVC HDRDOMID,MVTCURAN PUT DOMAIN ID IN BUFFER CPC02930 MVC HDRMTYPE,HDRMTYPX SET HDRMTYPE CPC02940 MVC HDRIND,HDRINDX SET HDRIND CPC02950 MVC HDRTSTMP,TIME PUT TIME IN BUFHDR CPC02960 DSIPSS SWB=CWBSWB,TYPE=OUTPUT,BFR=(R2) CPC02970 DISPMSGX EQU * CPC02980 L R14,RDISPMSG RESTORE RETURN ADDRESS CPC02990 BR R14 RETURN CPC03000 EJECT CPC03010 LTORG CPC03020 BUFFERL EQU 4096 CPC03030 EJECT CPC03040 TITLEMSG DC C'CPCMD: CP COMMAND OUTPUT' CPC03050 ENDMSG DC C'END OF DISPLAY' CPC03060 TRUNCMSG DC C'END OF DISPLAY - OUTPUT WAS TRUNCATED' CPC03070 ERRMSG1 DC C'CPCMD01E - COMMAND TEXT NOT SPECIFIED' CPC03080 ERRMSG2 DC C'CPCMD02E - COMMAND TEXT GREATER THAN 240 CHARACTERS' CPC03090 ERRMSG3 DC C'CPCMD03E - NO OUTPUT AVAILABLE' CPC03100 EJECT CPC03110 DSICWB DSECT CPC03120 ORG CWBADATD CPC03130 DATETIME DS 0D DOUBLEWORD FOR DATE/TIME CPC03140 DATE DS F DATE CPC03150 TIME DS F TIME CPC03160 RETCODE DS F RETURN CODE CPC03170 RGETPARM DS F BRANCH RETURN ADDRESS CPC03180 RDISPLAY DS F BRANCH RETURN ADDRESS CPC03190 RDISPMSG DS F BRANCH RETURN ADDRESS CPC03200 COMMANDA DS F COMMAND ADDRESS CPC03210 COMMANDL DS F COMMAND LENGTH CPC03220 BUFFADDR DS F ADDRESS OF RESPONSE BUFFER CPC03230 PSLLIST DS 0F,XL24 PAGE SERVICE LIST CPC03240 HDRINDX DS X HDRIND SAVE AREA CPC03250 HDRMTYPX DS X HDRTYPE SAVE AREA CPC03260 TITLE DS X STATUS INDICATOR FOR LINE TYPE CPC03270 TRUNCSW DS X STATUS INDICATOR FOR TRUNCATED CPC03280 MSGBUFF DS 0XL(HDRMSGLN+L'MESSAGE) NETVIEW MESSAGE BUFFER CPC03290 DS XL(HDRMSGLN) BUFFER HEADER FOR COMMAND BUFR CPC03300 MESSAGE DS CL132 MESSAGE CPC03310 DS XL(256-(*-CWBADATD)) CPC03320 EJECT CPC03330 IHAPSL CPC03340 END CPC03350