ISREDIT MACRO       /* CARM0103 EDIT RACFCMDS.RPT(*)  */
 
/* 09/10/2007 CL.Fenton Copied from CARM0003 to evaluate resources
/* 10/17/2007 CL.Fenton Corrected 'NOT FOUND'/ICH13003I issue
/* 11/30/2007 CL.Fenton Corrected error by specifing fix start pos.
/* 04/17/2009 CL.Fenton Mod for evaluation of RL with mask.
/* 07/16/2009 CL.FENTON Changes CACT0001 to CACT0000, CACM042T to
/*            CACM000T.  Changes for reflect new table information.
/* 12/13/2009 CL.FENTON Added IKJ56702I msg for no resource rule test.
/* 04/13/2017 CL.Fenton Corrected issue with FIRSTPO and LASTPO being
/*            equal.
 
SET PGMNAME = &STR(CARM0103 04/13/17)
 
SET SYSPROMPT = OFF                /* CONTROL NOPROMPT          */
SET SYSFLUSH  = OFF                /* CONTROL NOFLUSH           */
SET SYSASIS   = ON                 /* CONTROL ASIS - caps off   */
 
/* ERROR ROUTINE */
ERROR DO
  SET RETURN_CODE = &LASTCC          /* SAVE LAST ERROR CODE */
  IF &LASTCC GT 16 THEN +
    WRITE &PGMNAME LASTCC = &LASTCC &ZERRLM
  RETURN
  END
 
/* *************************************** */
/* VARIABLES ARE PASSED TO THIS MACRO      */
/* CONSLIST                                */
/* COMLIST                                 */
/* TERMMSGS                                */
/* *************************************** */
 
SET RETURN_CODE = 0
 
ISPEXEC VGET ( +
  CONSLIST     +
  COMLIST      +
  SYMLIST      +
  TERMMSGS     +
  TEMP4        +
  RPTMBR       +
  TITLE        +
  ) ASIS
 
SET RM03VGET = &RETURN_CODE
IF &RETURN_CODE NE 0 THEN DO
  WRITE &PGMNAME VGET RC = &RETURN_CODE  &ZERRSM
  WRITE &PGMNAME CONSLIST/&CONSLIST COMLIST/&COMLIST SYMLIST/&SYMLIST +
    TERMMSGS/&TERMMSGS TEMP4/&TEMP4 RPTMBR/&RPTMBR TITLE/&TITLE
  SET RETURN_CODE = &RETURN_CODE + 16
  GOTO ERR_EXIT
  END
 
SET RETURN_CODE = 0
 
/* *************************************** */
/* TURN ON MESSAGES                        */
/* *************************************** */
 
SET SYSSYMLIST = &SYMLIST          /* CONTROL SYMLIST/NOSYMLIST */
SET SYSCONLIST = &CONSLIST         /* CONTROL CONLIST/NOCONLIST */
SET SYSLIST    = &COMLIST          /* CONTROL LIST/NOLIST       */
SET SYSMSG     = &TERMMSGS         /* CONTROL MSG/NOMSG         */
 
ISPEXEC CONTROL NONDISPL ENTER
ISPEXEC CONTROL ERRORS RETURN
 
ISREDIT (MEMBER) = MEMBER
 
SET OMEMBER = &MEMBER
 
SET LP = &STR((
SET RP = )
SET BLK44 = &STR(                                            )
SET TITLE = &SUBSTR(1:8,&TITLE        )
 
/* *************************************** */
/* MAIN LOOP                               */
/* *************************************** */
 
ISREDIT (ENDER) = LINENUM .ZLAST
 
ISREDIT CURSOR = 1 0
 
SET CURLINE = 0
 
LOOP_RL: +
SET RETURN_CODE = 0
 
SET CURLINE = &CURLINE + 1
IF &CURLINE GT &ENDER THEN GOTO END_EDIT
 
/* *************************************** */
/* LOOK FOR DATASET                        */
/* *************************************** */
 
SET RETURN_CODE = 0
ISREDIT (DATA) = LINE &CURLINE
 
SET DATA = &NRSTR(&DATA)
 
IF &SYSINDEX(&STR(CARC1001),&NRSTR(&DATA)) GT 0 THEN DO
  SET FIRSTPO = 20
  SET LASTPO = &SYSINDEX(&STR( ),&STR(&DATA),&FIRSTPO + 1) - 1
 
  IF &FIRSTPO LE &LASTPO THEN +
    SET DSNAME = &SUBSTR(&FIRSTPO:&LASTPO,&STR(&DATA))
  SET RESCL = &SUBSTR(11:18,&NRSTR(&DATA))
  END
 
IF &SUBSTR(1:8,&NRSTR(&DATA)) EQ &NRSTR(&RESCL) THEN DO
 
  /* *************************************** */
  /* STRIP PROFILE                           */
  /* *************************************** */
 
  SET LASTPO = &LENGTH(&NRSTR(&DATA))
  SET RACFPRO = &SUBSTR(12:&LASTPO,&NRSTR(&DATA&BLK44))
  SET AC = &SUBSTR(1:44,&STR(&RACFPRO.&BLK44))
  SET AC = &STR(&AC.4&TITLE &DSNAME)
 
  ISPEXEC LMPUT DATAID(&TEMP4) MODE(INVAR) DATALOC(AC) +
     DATALEN(&LENGTH(&STR(&AC))) MEMBER(&OMEMBER)
  END
 
IF &SYSINDEX(&STR(RESOURCE NOT FO),&NRSTR(&DATA)) GT 0 THEN DO
  SET RACFPRO = &STR( )
  SET AC = &SUBSTR(1:44,&STR(&RACFPRO.&BLK44))
  SET AC = &STR(&AC.4&SUBSTR(1:8,&TITLE        ) &DSNAME)
 
  ISPEXEC LMPUT DATAID(&TEMP4) MODE(INVAR) DATALOC(AC) +
     DATALEN(&LENGTH(&STR(&AC))) MEMBER(&OMEMBER)
  END
 
/* *************************************** */
/* STRIP UACC                              */
/* *************************************** */
 
IF &SYSINDEX(&STR(UNIVERSAL ACCESS),&NRSTR(&DATA)) GT 0 THEN DO
  SET WARN1 =
  SET CURLINE = &CURLINE + 2
  ISREDIT (DATA) = LINE &CURLINE
  SET UACC1 = &SUBSTR(21:30,&STR(&DATA))
  SET WARN1 = &SUBSTR(51:53,&STR(&DATA))
  IF &WARN1 = YES THEN +
    SET WARN1 = &STR(WARN&LP.Y&RP)
  ELSE +
    SET WARN1 = &STR(WARN&LP.N&RP)
  IF &SYSINDEX(&SYSNSUB(0,&),&NRSTR(&UACC1)) EQ 0 AND +
     &SYSINDEX(+,&STR(&UACC1)) EQ 0 AND +
     &SYSINDEX(-,&STR(&UACC1)) EQ 0 AND +
     &SYSINDEX(*,&STR(&UACC1)) EQ 0 AND +
     &SYSINDEX(/,&STR(&UACC1)) EQ 0 THEN SET UACC = &UACC1
  ELSE SET UACC = &STR(&UACC1)
  SET UACC = &STR(UACC&LP&UACC&RP)
  SET AC = &SUBSTR(1:44,&STR(&RACFPRO.&BLK44))
  SET AC = &STR(&AC.1&UACC.&BLK44)
  SET AC = &STR(&SUBSTR(1:59,&AC)&WARN1)
  END
 
/* *************************************** */
/* LOOK FOR AUDIT PARMS                    */
/* *************************************** */
 
IF &SYSINDEX(&STR(AUDITING),&NRSTR(&DATA)) EQ 1 THEN DO
  SET AUDIT1 =
  SET CURLINE = &CURLINE + 2
  ISREDIT (DATA) = LINE &CURLINE
 
/* *************************************** */
/* SET AUDIT 1 = AUDIT PARMS               */
/* *************************************** */
 
  SET AUDIT1 = &SUBSTR(1:50,&STR(&DATA))
  SET XI = &SYSINDEX(&STR( ),&NRSTR(&AUDIT1))
  IF &XI GT 2 THEN +
    SET AUDIT1 = &SUBSTR(1:&XI-1,&AUDIT1)
 
  SET AC = &SUBSTR(1:44,&STR(&RACFPRO.&BLK44))
  SET AC = &STR(&AC.1&UACC.&BLK44)
  SET AC = &STR(&SUBSTR(1:59,&AC)&WARN1.&BLK44)
  SET AC = &STR(&SUBSTR(1:67,&AC)AUDIT&LP&AUDIT1&RP)
 
  ISPEXEC LMPUT DATAID(&TEMP4) MODE(INVAR) DATALOC(AC) +
    DATALEN(&LENGTH(&STR(&AC))) MEMBER(&OMEMBER)
  END
 
/* *************************************** */
/* LOOK FOR WHO IS USING DATASET           */
/* *************************************** */
 
IF &SYSINDEX(&STR(USER      ACCESS),&NRSTR(&DATA)) EQ 1 THEN DO
  SET CURLINE = &CURLINE + 2
  SET BLANK = &STR( )
 
  ID_CHECK: +
  ISREDIT (DATA) = LINE &CURLINE
 
  IF &SUBSTR(1:1,&STR(&DATA)) EQ &BLANK OR +
     &NRSTR(&DATA) EQ &STR(NO USERS IN ACCESS LIST) THEN +
    GOTO LOOP_RL
 
  SET LOOPCNT = 22
  SET COUNTER = 1
  SET WORDCNT = 0
  SET IDCNT = 1
 
  SET USRID = &SUBSTR(1:8,&NRSTR(&DATA))
  SET USRACC = &SUBSTR(11:18,&NRSTR(&DATA))
/*NEXT_WORD: +
/*IF &COUNTER LE &LENGTH(&STR(&DATA)) THEN +
/*  SET LETTER = &SUBSTR(&COUNTER,&STR(&DATA))
 
/*IF &COUNTER LT &LOOPCNT THEN DO
/*  SET WORDCNT = &WORDCNT + 1
/*  SET WORD =
/*  END
 
/*DO WHILE &STR(&LETTER) NE &BLANK
/*  SET WORD = &STR(&WORD&LETTER)
/*  SET COUNTER = &COUNTER + 1
/*  IF &COUNTER LE &LENGTH(&STR(&DATA)) THEN +
/*    SET LETTER = &SUBSTR(&COUNTER,&STR(&DATA))
/*  END
 
/*IF &WORDCNT = 1 THEN DO
/*  SET WORD8 = &SUBSTR(1:8,&WORD        )
/*  IF &NRSTR(&WORD) = &STR(NO) THEN -
/*    GOTO LOOP_RL
/*  ELSE DO
/*    IF &NRSTR(&WORD) = &STR(*) THEN -
/*      SET GROUPID = &STR(6GENERIC&LP&WORD8&RP     )
/*    ELSE -
/*      SET GROUPID = &STR(8GROUPID&LP&WORD8&RP     )
/*    END
/*  END
 
    SET USRID = &SUBSTR(1:8,&NRSTR(&USRID        ))
 
    IF &NRSTR(&USRID) = &STR(*) THEN -
      SET GROUPID = &STR(6GENERIC&LP&USRID&RP     )
    ELSE -
      SET GROUPID = &STR(8GROUPID&LP&USRID&RP     )
 
/*IF &WORDCNT EQ 2 THEN DO
/*  SET WORD8 = &SUBSTR(1:8,&WORD        )
/*  SET GRPACC = &STR(ACCESS&LP&WORD8&RP     )
/*  IF &WORD = &STR(IN) THEN SET GRPACC = &STR(          )
/*  GOTO NEXT_ID
/*  END
 
  SET GRPACC = &STR(ACCESS&LP&USRACC&RP     )
 
/*DO WHILE &STR(&LETTER) EQ &BLANK
/*  SET COUNTER = &COUNTER + 1
/*  IF &COUNTER LE &LENGTH(&STR(&DATA)) THEN +
/*    SET LETTER = &SUBSTR(&COUNTER,&STR(&DATA))
/*  ELSE SET LETTER = STR(#)
/*  IF &COUNTER = &LOOPCNT THEN GOTO NEXT_ID
/*  END
 
/*GOTO NEXT_WORD
 
/*NEXT_ID: +
/*SET RETURN_CODE = 0
 
  SET OUTLINE = &STR(&SUBSTR(1:19,&GROUPID) &SUBSTR(1:18,&GRPACC))
  SET AC = &SUBSTR(1:44,&STR(&RACFPRO.&BLK44))
  SET AC = &STR(&AC&OUTLINE)
 
  ISPEXEC LMPUT DATAID(&TEMP4) MODE(INVAR) DATALOC(AC) +
    DATALEN(&LENGTH(&STR(&AC))) MEMBER(&OMEMBER)
 
/*SET WORD = &BLANK
  SET CURLINE = &CURLINE + 1
  IF &CURLINE = &ENDER THEN GOTO END_EDIT
  GOTO ID_CHECK
  END
 
GOTO LOOP_RL
 
END_EDIT: +
SET RETURN_CODE = 0
 
ISPEXEC LMMADD DATAID(&TEMP4) MEMBER(&OMEMBER)
 
IF &RETURN_CODE EQ 4 THEN DO          /* MEMBER ALREADY EXISTS
  SET RETURN_CODE = 0
 
  ISPEXEC LMMREP DATAID(&TEMP4) MEMBER(&OMEMBER)
 
  IF &RETURN_CODE NE 0 THEN DO
    WRITE &PGMNAME LMMREP_TEMP4_RCODE = &RETURN_CODE &OMEMBER &ZERRSM
    END
  END
ELSE DO
  IF &RETURN_CODE NE 0 THEN +
    WRITE &PGMNAME LMMADD_TEMP4_RCODE = &RETURN_CODE &OMEMBER  &ZERRSM
  END
 
SET RETURN_CODE = 0
 
ERR_EXIT: +
IF &MAXCC GE 16 OR +
   &RETURN_CODE GT 0 THEN DO
  ISPEXEC VGET (ZISPFRC) SHARED
  IF &MAXCC GT &ZISPFRC THEN +
    SET ZISPFRC = &MAXCC
  ELSE +
    SET ZISPFRC = &RETURN_CODE
  ISPEXEC VPUT (ZISPFRC) SHARED
  WRITE &PGMNAME ZISPFRC = &ZISPFRC
  END
 
SET RM003RC = &RETURN_CODE
 
ISPEXEC VPUT ( +
  RM03VGET     +
  RM03FER      +
  RM003RC      +
  ) ASIS
 
ISREDIT END
 
EXIT CODE(0)
