Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

Example 4: Display access conditions

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