Loading...
Select Version
The access conditions in the TEST-GUA guard, which was created in example 1 and changed in examples 2 and 3, are to be read, prepared and output to SYSOUT by the SHWSAC macro.
Solution
* ************************************************************** * * ---------------------------------------------------------- * * * * * * SHWSAC macro: Display access conditions * * * ========================================== * * * * * * ---------------------------------------------------------- * * ************************************************************** * GUA4 CSECT * * ************************************************************** * * ---------------------------------------------------------- * * * WRITE macro * * * =========== * * * Task: Output of the WROBER data record to WROUT and * * * reinitialization of the WROBER area with blanks. * * * ---------------------------------------------------------- * * ************************************************************** * MACRO WRITE BAL R@BACK,OUTOUT MEND * * ************************************************************** * R@WEEK EQU 2 For weekday editing R@PRGNAM EQU 2 For program editing R@USED EQU 2 For comparison area with R@OUT R@I EQU 3 Loop counter R@CON EQU 4 Base register for condition R@OUT EQU 5 Base register for output area R@BASE EQU 10 Base register R@GUA EQU 11 Subject counter R@BACK EQU 14 Return address * BALR R@BASE,0 USING *,R@BASE * * ************************************************************** * * Initialization * * ************************************************************** MVC WROGNAM(WROTEXL),SPACES Delete output area MVC PARSACC(PROW#),PARSACL Parameter initialization SHWSAC MF=M, - GUARD='TEST-GUA', - SUBTYPE=*ALL, - INFORM=*ADM, - OUTAREA=(OUTBER,OUTBERLG) * * ************************************************************** * * Determine access conditions until no more guards are * * * displayed. However, only the one guard, TEST-GUA, is * * * required in this example. * * ************************************************************** MORE1 EQU * SHWSAC MF=E,PARAM=PARSACC CLC PROWMRET,=Y(PROPSUCC) BNE RCNOTOK * * ************************************************************** * * Process output area * * ************************************************************** L R@OUT,PROWOADR Load SHWSAC output area USING PROWOPUT,R@OUT * LA R@OUT,PROWOSGC Position on (first) guard USING PROWGCON,R@OUT * ONEGUARD EQU * MVC WROGNAM,PROWGCNA Guard name -> WROUT area LA R@OUT,PROWGCSA Position on 1st subject type USING PROWACOS,R@OUT * * ************************************************************** * * Loop via subject type *USER, *GROUP, *OTHERS, *ALLUSER * * ************************************************************** SR R@GUA,R@GUA LH R@GUA,PROWAAUN *USER AH R@GUA,PROWAAGN *GROUP AH R@GUA,PROWAAON *OTHERS AH R@GUA,PROWAAAN *ALLUSER * LA R@OUT,PROWACS Position on first subject USING PROWACON,R@OUT * * ************************************************************** * * For each subject, read the access conditions from the * * * output area * * * Beginning of loop * * ************************************************************** MORE2 EQU * * * ************************************************************** * * Write subject and subject type to the WROUT area * ************************************************************** CLI PROWAITY,PROZSUSR BNE SBJGRP MVC WROSTYP,=C'USER ' USER type -> WROUT area MVC WROSNAM,PROWAINA Subject -> WROUT area B SBJEND SBJGRP CLI PROWAITY,PROZSGRP BNE SBJOTH MVC WROSTYP,=C'GROUP ' GROUP type -> WROUT area MVC WROSNAM,PROWAINA Subject -> WROUT area B SBJEND SBJOTH CLI PROWAITY,PROZSOTH BNE SBJALL MVC WROSTYP,=C'OTHERS ' OTHERS type -> WROUT area B SBJEND SBJALL MVC WROSTYP,=C'ALLUSERS' ALLUSER type -> WROUT area SBJEND EQU * * * ************************************************************** * * In the test guard, specific access conditions are * * * specified for all subjects with ADMISSION=*PARAMS * * * (i.e. with PROWAADM=PROZAPAR). * * * The case ADMISSION=*YES/*NO * * * (i.e. with PROWAADM=PROZAYES/PROZANO) is not handled. * * ************************************************************** LA R@OUT,PROWSTCO Position on time condition * * ************************************************************** * * TIME condition * * ************************************************************** USING PROWTCON,R@OUT CLI PROWTKD,PROZCNO Kind of time EQ *ANY? BNE TIMCYCLA LA R@OUT,PROWT#IN Position on interval B TIMEND TIMCYCLA EQU * CLI PROWTKD,PROZCEXC Kind of time EXCEPT(TIME=?) BNE TIMCYCLB MVC WROINEX,=C'EX ' EX -> WROUT area TIMCYCLB EQU * MVC WROINEX,=C'IN ' IN -> WROUT area SR R@I,R@I IC R@I,PROWT#IN LA R@OUT,PROWTINS USING PROWTINT,R@OUT TIMCYCL EQU * MVC WROTIML,PROWTILB Time lower limit -> WROUT area MVC WROTIMU,PROWTIUB Time upper limit -> WROUT area LA R@OUT,PROWTIN#(R@OUT) * * * Write time condition to WROUT WRITE * BCT R@I,TIMCYCL Next time interval TIMEND EQU * * * ************************************************************** * * DATE condition * * ************************************************************** USING PROWDCON,R@OUT CLI PROWDKD,PROZCNO Kind of date EQ *ANY? BNE DATCYCLA LA R@OUT,PROWD#IN Position on interval B DATEND DATCYCLA EQU * CLI PROWDKD,PROZCEXC Kind of date EXCEPT(TIME=?) BNE DATCYCLB MVC WROINEX,=C'EX ' EX -> WROUT area DATCYCLB EQU * MVC WROINEX,=C'IN ' IN -> WROUT area SR R@I,R@I IC R@I,PROWD#IN LA R@OUT,PROWDINS USING PROWDINT,R@OUT DATCYCL EQU * MVC WRODATL,PROWDILB Date lower limit -> WROUT area MVC WRODATU,PROWDIUB Date upper limit -> WROUT area LA R@OUT,PROWDIN#(R@OUT) * * * Write date condition to WROUT WRITE * BCT R@I,DATCYCL Next time interval DATEND EQU * * * ************************************************************** * * WEEKDAY condition * * ************************************************************** USING PROWWCON,R@OUT CLI PROWWKD,PROZCNO Kind of weekday EQ *ANY? BNE WEKCYCLA LA R@OUT,PROWWDYS Position on weekdays B WEKEND WEKCYCLA EQU * CLI PROWWKD,PROZCEXC Kind of weekday EXCEPT(WEEKDAY=?) BNE WEKCYCLB MVC WROINEX,=C'EX ' EX -> WROUT area WEKCYCLB EQU * * * Preset all days of the week in the output field. * In a loop, overwrite the preset days of the week with blanks * if they are not contained in the access condition. * MVC WROWEEK,=C'MO TU WE TH FR SA SU ' IC R@I,=X'08' ICM R@CON,B'1000',PROWWDYS LA R@WEEK,WROWEEK USING WEKDSEC,R@WEEK WEKCYCL EQU * BM WEKCYCLC MVC WEEKDAY,SPACES WEKCYCLC EQU * LA R@WEEK,WEEKDAY# SLL R@CON,1 LTR R@CON,R@CON BCT R@I,WEKCYCL LA R@OUT,PROWW#(R@OUT) * * * Write weekday condition to WROUT WRITE * WEKEND EQU * * * ************************************************************** * * PRIVILEGE condition * * * The handling of the different privileges is not dealt with * * * in detail in the example. Instead, the position moves * * * immediately to the PROGRAM access conditions. * * ************************************************************** USING PROWPVCO,R@OUT CLI PROWPKD,PROZCNO Kind of privilege EQ *ANY? BNE PRVCYCLA LA R@OUT,PROWPRV Position on privileges B PRVEND PRVCYCLA EQU * LA R@OUT,PROWP#(R@OUT) -> Access condition type PROGRAM PRVEND EQU * * * ************************************************************** * * PROGRAM condition * * ************************************************************** USING PROWPCON,R@OUT CLI PROWPCKD,PROZCNO Kind of program EQ *ANY? BNE PRGCYCLA LA R@OUT,PROWPCNP Position on number of programs * LA R@OUT,PROWPCPS Position on programs B PRGEND PRGCYCLA EQU * SR R@I,R@I IC R@I,PROWPCNP Number of program names LA R@OUT,PROWPCPS Program name USING PROWPRG,R@OUT PRGCYCL EQU * * * Only the case of FILENAME is dealt with in the example. * Library specifications are not taken into account. * SR R@PRGNAM,R@PRGNAM IC R@PRGNAM,PROWPAL# Size of whole program name SH R@PRGNAM,=H'1' -1 for MVC length N R@PRGNAM,=F'63' Name limited to 64 EX R@PRGNAM,PRGEXMVC Program name ->WROUT area AH R@PRGNAM,=H'1' +1 for true length * * * Write program condition to WROUT WRITE * LA R@OUT,PROWPCNS Start of programs AR R@OUT,R@PRGNAM BCT R@I,PRGCYCL PRGEND EQU * * * ************************************************************** * * All access conditions for a subject are processed. * * * Position on word boundary * * ************************************************************** AH R@OUT,=H'3' N R@OUT,=F'-4' X'FFFFFFFC' * * ************************************************************** * * Read the access conditions from the output area for each * * * subject. * * * End of loop * * ************************************************************** BCT R@GUA,MORE2 B GUAFRTG * * ************************************************************** * * A guard has been processed in full. Check whether there * * * are other guard entries in the SHWSAC output area. * * * There are none in this example. * * ************************************************************** GUAFRTG EQU * L R@USED,PROWOADR A R@USED,PROWOUS# CR R@USED,R@OUT BP ONEGUARD * * ************************************************************** * * Check whether SHWSAC reported that other guards were * * * waiting to be displayed for which no space could be found * * * in the output area. * * ************************************************************** CLC PROWOMOR,=Y(PROWMNO) BNE MORE1 B ENDE * * ************************************************************** * * WROUT call * * ************************************************************** OUTOUT EQU * WROUT WROBER,WROFEHL MVC WROGNAM(WROTEXL),SPACES BR R@BACK WROFEHL EQU * B ENDE * * ************************************************************** * * Error recovery * * ************************************************************** RCNOTOK EQU * * The possible return code values are listed in the MSGGUAD * macro B ENDE * * ************************************************************** * * Transfer programs to the WROUT output area * * ************************************************************** PRGEXMVC MVC WROPRGNA(1),PROWPCNS Start of programs * * ************************************************************** * * End of GUA4 sample program * * ************************************************************** ENDE EQU * TERM * * * * ************************************************************** * *------------------------------------------------------------* * * Parameter declarations * * *------------------------------------------------------------* * ************************************************************** * * This parameter area is passed in register 1 when the SHWSAC * macro is called. * PARSACC DS 0F SHWSAC MF=C * * This parameter area is used in order to initialize the * PARRACC parameter area before the SHWSAC macro is called. * PARSACL DS 0F SHWSAC MF=L, - GUARD=' ' - OUTAREA=(OUTBER,OUTBERLG) * OUTBERLG DC A(OUTBERL) * * ************************************************************** * *------------------------------------------------------------* * * WROUT area * * *------------------------------------------------------------* * ************************************************************** * SPACES DC CL256' ' WROBER EQU * DC Y(WROBERL) DC X'0000' DC X'00' WROGNAM DS CL24 Guard name DS XL1 WROSTYP DS CL8 Subject type DS XL1 WROSNAM DS CL8 Subject DS XL1 WROINEX DS CL3 INTERVAL or EXCEPT DS XL1 WROTIML DS CL5 Time lower limit DS XL1 WROTIMU DS CL5 Time upper limit ORG WROTIML WRODATL DS CL10 Date lower limit DS XL1 WRODATU DS CL10 Date upper limit ORG WROTIML WROWEEK DS CL21 Weekday ORG WROTIML WROPRGNA DS CL64 Program name ORG WROTEXL EQU *-WROGNAM WROBERL EQU *-WROBER * * ************************************************************** * *------------------------------------------------------------* * * Output area for SHWSAC * * *------------------------------------------------------------* * ************************************************************** * OUTBER EQU * DS XL256 DS XL256 DS XL256 DS XL256 DS XL256 DS XL256 DS XL256 DS XL256 OUTBERL EQU *-OUTBER * * ************************************************************** * *------------------------------------------------------------* * * Declarations of global variables * * *------------------------------------------------------------* * ************************************************************** * SACMGMT MF=D,XPAND=PARAM * * ************************************************************** * *------------------------------------------------------------* * * Declarations of the output area of SHWSAC * * *------------------------------------------------------------* * ************************************************************** * SHWSAC MF=D,XPAND=OUTPUT * * ************************************************************** * *------------------------------------------------------------* * * Declarations of the return codes * * *------------------------------------------------------------* * ************************************************************** * MSGGUAD MF=D * WEKDSEC DSECT 0X Weekday Dsect WEEKDAY DS CL3 WEEKDAY# EQU * * END
Result
The program outputs the access conditions to SYSOUT in the following format:
:PUB1:$TESTUID.TEST-GUA USER ANNE IN 2017-10-15 2017-11-15 USER MARY MO TU WE USER PAUL IN 2017-07-01 2017-09-30 GROUP REVIEWER IN 09:00 15:00 IN 2017-08-23 2017-08-24 2017-09-09 2017-09-10 GROUP TEAMWORK IN 09:00 15:00 IN 2017-08-23 2017-08-24 2017-09-09 2017-09-10 ALLUSERS IN 07:00 19:00 EX SA SU