Loading...
Select Version
&pagelevel(4)&pagelevel
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