TITLE 'ICATS TEST COMMAND ROUTINE' TES00010 *********************************************************************** TES00020 * * TES00030 * MODULE NAME = TEST * TES00040 * * TES00050 * FUNCTION = QUERY, SET, OR RESET ONE OR ALL OF THE ICATS TEST * TES00060 * FLAGS. THERE ARE 96 TEST FLAGS IN THE ICATS * TES00070 * COMMON DATA AREA, NAMED TEST1 - TEST98. THIS * TES00080 * MODULE HANDLES THE TEST COMMAND WHO'S FORMAT IS; * TES00090 * TEST <NN|ALL> <?|ON|OFF> DEFAULTS TO ALL ? * TES00100 * * TES00110 * ENTRY POINTS = TEST * TES00120 * * TES00130 * LINKAGE = BALR R14,R15 FROM ICATS MAINLINE. * TES00140 * * TES00150 * REGISTER CONTENTS UPON ENTRY = * TES00160 * R2 = POINTS TO THE ICATS COMMON DATA AREA, AS ALWAYS. * TES00170 * R14 = RETURN ADDRESS BACK TO ICATS MAINLINE * TES00180 * R15 = ENTRY POINT TO THIS MODULE * TES00190 * * TES00200 * REGISTER USAGE = * TES00210 * R0-R1 = USED TO PASS PARAMETERS TO SUBROUTINES. * TES00220 * R2 = USED TO ADDRESS THE ICATS COMMON DATA AREA. * TES00230 * R3 = USED TO HOLD THE ADDRESS OF THE EDITED LINE TO OUTPUT. * TES00240 * R4-R10 = FREE * TES00250 * R11 = MY BASE REGISTER * TES00260 * R14 = MY RETURN ADDRESS WHEN I CALL SOMEBODY * TES00270 * R15 = SUBROUTINE ADDRESS * TES00280 * * TES00290 * * TES00300 * MODULE LOGIC: * TES00310 * I) SEE WHERE THIS COMMAND CAME FROM. REJECT THIS * TES00320 * COMMAND IF IT DIDN'T COME FROM THE CONSOLE. * TES00330 * II) ELSE GO AHEAD AND PROCESS THE COMMAND. * TES00340 * A) SEE WHAT WE'RE SUPPOSSED TO DO. * TES00350 * 1) CHECK THE SECOND PARM. IF NUMERIC OR ALL, * TES00360 * THEN OK, ELSE DEFAULT TO ALL. * TES00370 * 2) CHECK THE THIRD PARM (OR THE SECOND IF IT * TES00380 * WASN'T NUMERIC OR ALL). IF ?, ON, OR OFF, * TES00390 * OK, ELSE DEFAULT TO ?. * TES00400 * B) DO IT. * TES00410 * * TES00420 * * TES00430 * NORMAL EXIT = * TES00440 * R15 = 0 * TES00450 * * TES00460 * EXTERNAL REFERENCES = NONE * TES00470 * * TES00480 * MACROS = ICDATA = ICATS COMMON DATA AREA * TES00490 * ETTE = ENTER TRACE TABLE ENTRY SUBROUTINE * TES00500 * * TES00510 * CHANGE ACTIVITY * TES00520 * DATE NAME REASON FOR CHANGE * TES00530 * 04/29/83 RICK JASPER INITIAL PROGRAM CREATION * TES00540 * * TES00550 *********************************************************************** TES00560 * TES00570 PRINT GEN,NODATA TES00580 TEST CSECT TES00590 USING ICDATA,R2 ADDRESS ICATS COMMON DATA AREA TES00600 USING *,R15 USE R15 FOR NEXT INSTRUCTION ONLY TES00610 STM R0,R14,TESTREGS SAVE ALL THE REGISTERS TES00620 DROP R15 TES00630 USING TEST,R11 SWITCH BASE REGISTER TO R11 TES00640 LR R11,R15 TES00650 TM FLAGB,CONSCMD IS THIS A CONSOLE COMMAND ?? TES00660 BO TESTCONA DON'T REJECT IT SO. TES00670 L R15,AREJECT GO TO REJECT-THIS-COMMAND ROUTINE TES00680 BALR R14,R15 TES00690 B TESTBYE TES00700 TESTCONA EQU * SET COMMAND DEFAULTS TO TES00710 MVI TESTFLAG,TESTALL+TESTQ TEST ALL ? TES00720 CLC PARM2,=CL8' ' DID HE SPECIFY ANYTHING ?? TES00730 BE DOIT ALL SET THEN. TES00740 CLC PARM2,=CL8'ALL' DID HE SPECIFY ALL ?? TES00750 BE CHECK3RD SECOND PARM ALL SET IF SO. TES00760 LA R1,PARM2 ELSE CHECK FOR NUMBER TES00770 L R15,ACONDEC TES00780 BALR R14,R15 TES00790 LTR R15,R15 WAS IT A NUMBER ?? TES00800 BNE TESTCONB NOPE, LET DEFAULT OF ALL STAND. TES00810 C R0,=F'1' CHECK UPPER AND LOWER FLAG LIMITS TES00820 BL GIVEHELP TES00830 C R0,=F'96' TES00840 BH GIVEHELP TES00850 NI TESTFLAG,ALL-TESTALL HE DIDN'T WANT ALL TES00860 STH R0,FLAGNUM TES00870 B CHECK3RD TES00880 * SECOND PARM WASN'T NUMERIC OR 'ALL'. DEFAULT TO 'ALL' AND TES00890 TESTCONB MVC PARM3,PARM2 USE 2ND PARM AS THE 3RD PARM. TES00900 * TES00910 * CHECK THE THIRD PARM FOR ?, OFF, OR ON. TES00920 * TES00930 CHECK3RD CLC PARM3,=CL8' ' DID HE SPECIFY ANYTHING ?? TES00940 BE DOIT ALL SET THEN. TES00950 CLC PARM3,=CL8'?' DID HE SPECIFY QUERY ?? TES00960 BE DOIT ALL SET THEN. TES00970 NI TESTFLAG,ALL-TESTQ IT WASN'T QUERY. TES00980 OI TESTFLAG,TESTON ASSUME IT'S ON. TES00990 CLC PARM3,=CL8'ON' IS 'ON' CORRECT ?? TES01000 BE DOIT ALL SET THEN. TES01010 NI TESTFLAG,ALL-TESTON MUST BE OFF THEN. ELSE AN ERROR TES01020 OI TESTFLAG,TESTOFF TES01030 CLC PARM3,=CL8'OFF' DID HE SPECIFY ALL ?? TES01040 BE DOIT ALL SET THEN. TES01050 * HE ENTERED SOMETHING I COULDN'T UNDERSTAND. GIVE HIM A MESSAGE TES01060 * GIVING HIM THE CORRECT FORM OF TEST <NN|ALL> <?|OFF|ON> TES01070 GIVEHELP LA R1,HELPMSG TES01080 B TESTMSG ALL DONE HERE TES01090 * AT THIS POINT, TESTALL IS SET OR FLAGNUM IS VALID. TES01100 * ALSO ONE FLAG, TESTQ, TESTOFF, OR TESTON, IS SET. TES01110 * LET'S DO WHAT HE WANTED US TO DO. TES01120 DOIT DS 0H TES01130 TM TESTFLAG,TESTQ ARE WE TO TURN ANY FLAGS OFF OR ON ?? TES01140 BO DOQUERY NOPE, IT'S JUST A QUERY. TES01150 * ELSE WE HAVE SOME TURNING ON OR OFF TO DO. WHICH IS IT ?? TES01160 TM TESTFLAG,TESTON ARE WE TO TURN SOME (OR ONE) ON ?? TES01170 BNO DOOFF NO, MUST BE OFF THEN. TES01180 TM TESTFLAG,TESTALL TURN ALL ON ?? TES01190 BNO TURN1ON NO, JUST TURN ONE ON TES01200 MVC TEST0108(12),=12X'FF' TURN ON ALL THE TEST FLAGS. TES01210 B DOQUERY LET HIM KNOW THAT THEY'RE ALL ON TES01220 TURN1ON EQU * WE'VE GOT ONLY 1 TEST FLAG TO TURN ON TES01230 LH R6,FLAGNUM WHICH FLAG IS IT ?? TES01240 BCTR R6,R0 TES01250 SRL R6,3 TES01260 LA R7,TEST0108(R6) R7 = ADDRESS OF CORRECT FLAG TES01270 LH R6,FLAGNUM NOW WHICH BIT DO WE TURN ON ?? TES01280 BCTR R6,R0 TES01290 N R6,=X'00000007' USE LAST THREE BITS ONLY TES01300 SR R8,R8 TES01310 IC R8,ONTABLE(R6) R8 = CORRECT BIT TO TURN ON TES01320 EX R8,OIINSTR TURN ON THAT BIT TES01330 B DOQUERY LET HIM KNOW WHICH FLAGS ARE ON TES01340 * WE'VE GOT TO TURN OFF ONE OR ALL THE FLAGS. TES01350 DOOFF TM TESTFLAG,TESTALL TURN ALL OFF ?? TES01360 BNO TURN1OFF NO, JUST ONE TES01370 MVC TEST0108(12),=12X'00' TURN OFF ALL THE TEST FLAGS. TES01380 B DOQUERY LET HIM KNOW THEY'RE ALL OFF TES01390 TURN1OFF EQU * WE'VE GOT ONLY 1 TEST FLAG TO TURN OFF TES01400 LH R6,FLAGNUM WHICH FLAG IS IT ?? TES01410 BCTR R6,R0 TES01420 SRL R6,3 TES01430 LA R7,TEST0108(R6) R7 = ADDRESS OF CORRECT FLAG TES01440 LH R6,FLAGNUM NOW WHICH BIT DO WE TURN OFF ?? TES01450 BCTR R6,R0 TES01460 N R6,=X'00000007' USE LAST THREE BITS ONLY TES01470 SR R8,R8 TES01480 IC R8,OFFTABLE(R6) R8 = CORRECT BIT TO TURN OFF TES01490 EX R8,NIINSTR TURN OFF THAT BIT TES01500 * TES01510 DOQUERY EQU * TES01520 LA R1,OFFMSG TES01530 CLC TEST0108(12),=12X'00' TEST FOR ALL BITS OFF. TES01540 BE TESTMSG TES01550 LA R1,ONMSG TES01560 CLC TEST0108(12),=12X'FF' TEST FOR ALL BITS ON. TES01570 BE TESTMSG TES01580 * SOME BITS ARE ON AND SOME ARE OFF. GIVE A HEADING MESSAGE TES01590 * THAT THE FOLLOWING BITS ARE ON, THE REST ARE OFF. THEN GIVE TES01600 * ANOTHER LINE LISTING ALL THE ONES THAT ARE ON. TES01610 LA R1,HEADMSG TES01620 L R15,AMESSAGE TES01630 BALR R14,R15 TES01640 * IN THE FOLLOWING LOOP, CNTR = TEST FLAG COUNTER (1-96) TES01650 * R3 = USED TO SEE IF WE'VE CHECKED ALL THE FLAGS YET. TES01660 * R4 = USED TO CHECK IF THIS LINE NEEDS TO BE PRINTED. TES01670 * R5 = USED TO CHECK IF THIS LINE NEEDS TO BE PRINTED. TES01680 * R6 = ADDRESS OF THIS TEST FLAG (TEST0108 - TEST8996) TES01690 * CONTROLS OUTER LOOP. CHECK ALL 12 FLAG BYTES. TES01700 * R7 = ADDRESS OF NEXT FREE POSITION IN OUTPUT LINE TES01710 * (CURRTEXT - CURRTEXT+78). THEN THE LINE GETS PRINTED. TES01720 * R8 = WHICH BIT TO TEST (X'80' - X'01') TES01730 * CONTROLS INNER LOOP. CHECK EACH BIT IN THIS FLAG. TES01740 MVC CNTR,=PL2'0' TES01750 LA R3,TEST8996 TES01760 LA R4,CURRTEXT TES01770 LA R5,CURRTEXT+79 TES01780 LA R6,TEST0108 START WITH FIRST TEST FLAG TES01790 LA R7,CURRTEXT TES01800 MVI CURRTEXT-1,80 PUT IN LENGTH OF OUTPUT LINE TES01810 MVC CURRTEXT(80),=CL80' ' START WITH A FRESH BLANK LINE TES01820 LOOPFLAG EQU * OUTER FLAG LOOP TES01830 LA R8,X'80' START WITH HIGH ORDER BIT OF FLAG TES01840 LOOPBIT EQU * TES01850 AP CNTR,=P'1' BUMP TEST FLAG COUNTER TES01860 EX R8,TMINSTR IS THIS BIT ON ?? TES01870 BNO NEXTBIT NO, DON'T PUT IN OUTPUT LINE TES01880 OI CNTR+1,X'0F' SET SIGN FOR UNPACK TES01890 UNPK WORKA,CNTR GET TEST FLAG NUMBER IN EBCDIC TES01900 MVC 0(3,R7),WORKA+2 MOVE IN 2 DIGITS TES01910 CP CNTR,=P'10' IF LESS THAN TEST10, BLANK OUT TES01920 BNL SKIP1 LEADING ZERO TES01930 MVI 0(R7),C' ' TES01940 SKIP1 LA R7,3(R7) BUMP TO NEXT FREE POSITION IN OUTPUT TES01950 CR R7,R5 TIME TO PRINT THIS LINE YET ?? TES01960 BL NEXTBIT NOPE, CONTINUE CHECKING TES01970 LA R1,CURRTEXT-1 TES01980 L R15,AMESSAGE TES01990 BALR R14,R15 GO PRINT THE LINE WHEN FULL TES02000 LA R7,CURRTEXT RESET LINE POINTER TES02010 MVC CURRTEXT(80),=CL80' ' BLANK OUT LINE AGAIN TES02020 NEXTBIT EQU * DO WE HAVE ANOTHER BIT TO CHECK IN THIS FLAG ?? TES02030 SRA R8,1 GET NEXT BIT TO CHECK TES02040 BNZ LOOPBIT GO CHECK NEXT BIT IF NOT ZERO YET TES02050 LA R6,1(R6) DONE WITH THAT FLAG, LET'S CHECK NEXT ONE TES02060 CR R6,R3 LAST FLAG YET ?? TES02070 BNH LOOPFLAG NOPE, KEEP CHECKING TES02080 LA R1,CURRTEXT-1 TES02090 CR R7,R4 PARTIAL LINE LEFT UNPRINTED ?? TES02100 BE TESTBYE TES02110 * GIVE HIM THE MESSAGE WHOSE ADDRESS IS IN R1 AND LEAVE. TES02120 TESTMSG L R15,AMESSAGE TES02130 BALR R14,R15 TES02140 TESTBYE DS 0H TES02150 LM R0,R14,TESTREGS TES02160 SR R15,R15 RETURN CODE = 0 TES02170 BR R14 TES02180 TESTREGS DS 15F TES02190 WORKA DS F TES02200 FLAGNUM DS H TES02210 CNTR DS PL2 TES02220 ONTABLE DC X'8040201008040201' TES02230 OFFTABLE DC X'7FBFDFEFF7FBFDFE' TES02240 OIINSTR OI 0(R7),X'00' TES02250 NIINSTR NI 0(R7),X'00' TES02260 TMINSTR TM 0(R6),X'00' TES02270 * TES02280 TESTFLAG DC X'00' TEST COMMAND ROUTINE FLAG TES02290 TESTALL EQU X'80' DO THIS TO ALL THE TEST FLAGS TES02300 TESTQ EQU X'40' QUERY TEST FLAG(S) TES02310 TESTON EQU X'20' TURN ON THE TEST FLAG(S) TES02320 TESTOFF EQU X'10' TURN OFF THE TEST FLAG(S) TES02330 * TES02340 HELPMSG DC AL1(HELPMSGE) TES02350 DC C'THE CORRECT FORM IS TEST <ALL|nn> <?|OFF|ON>' TES02360 DC C' (NN IS 1 - 96).' TES02370 HELPMSGE EQU *-HELPMSG-1 TES02380 * TES02390 ONMSG DC AL1(ONMSGE) TES02400 DC C'ALL THE TEST FLAGS ARE ON' TES02410 ONMSGE EQU *-ONMSG-1 TES02420 * TES02430 OFFMSG DC AL1(OFFMSGE) TES02440 DC C'ALL THE TEST FLAGS ARE OFF' TES02450 OFFMSGE EQU *-OFFMSG-1 TES02460 * TES02470 HEADMSG DC AL1(HEADMSGE) TES02480 DC C'THE FOLLOWING FLAGS ARE ON, THE REST ARE OFF' TES02490 HEADMSGE EQU *-HEADMSG-1 TES02500 LTORG TES02510 ICDATA TES02520 END TES02530