PROC 0 - LISTUDDN(NULLFILE) /* LISTUSER DDname */ - DATADDN(NULLFILE) /* DATA DDname */ - DATAMBR(ALLUSERS) /* DATA default member name */ /* 11/16/2005 JL.NELSON Copied from CARC0501 for ACF2. /* 11/02/2005 JL.NELSON Split out ACPs from SY$ACTON /* 11/16/2005 JL.NELSON Copied/modified for ACF2 extracts. /* 11/17/2005 JL.NELSON Modified search for variable UID strings. /* 11/18/2005 JL.NELSON Added tests for File condition codes. /* 01/30/2006 JL.NELSON Made intermediate file a seq. was PDS. /* 01/30/2006 JL.NELSON Changed from TSO to ISPF commands. /* 01/30/2006 JL.NELSON Change for ACF2 8.0 DFP now MISCELLANEOUS /* 02/02/2006 JL.NELSON Modified for 24 byte UID. /* 02/02/2006 JL.NELSON Modified for ASC string after NAME field /* 06/06/2006 C. STERN Updated ERROR ROUTINE. /* 02/10/2008 CL FENTON Removed unused variables and obtain trace variables. SET PGMNAME = &STR(CAAC0501 03/31/08) NGLOBAL USRID USRNAM GRP1 GRP2 GRP3 GRP4 GRP5 GRP6 NR NGLOBAL DATAID DATAMEM RETURN_CODE UID ISPEXEC CONTROL ERRORS RETURN /* ERROR ROUTINE */ ERROR DO SET RETURN_CODE = &LASTCC /* save LAST ERROR CODE */ IF &LASTCC GE 16 THEN + WRITE &PGMNAME LASTCC = &LASTCC &ZERRLM RETURN END SET SYSPROMPT = OFF /* CONTROL NOPROMPT */ SET SYSFLUSH = OFF /* CONTROL NOFLUSH */ SET SYSASIS = ON /* CONTROL ASIS - caps off */ SET ZISPFRC = 0 /* Called from CACC0501 /* ISPEXEC VPUT (ZISPFRC) SHARED ISPEXEC VGET ( + SYMLIST + CONSLIST + COMLIST + TERMMSGS + ACPNAME + ACPVERS + ) ASIS IF &STR(&ACPNAME) NE &STR(ACF2) THEN DO WRITE &PGMNAME ACF2 Job running on the wrong system WRITE &PGMNAME &ACPNAME &ACPVERS SET RETURN_CODE = 20 GOTO ERR_EXIT END SET SYSSYMLIST = &SYMLIST /* CONTROL SYMLIST/NOSYMLIST */ SET SYSCONLIST = &CONSLIST /* CONTROL CONLIST/NOCONLIST */ SET SYSLIST = &COMLIST /* CONTROL LIST/NOLIST */ SET SYSMSG = &TERMMSGS /* CONTROL MSG/NOMSG */ /* *************************************** */ /* INITIALIZE LIBRARY MANAGEMENT */ /* *************************************** */ SET RETURN_CODE = 0 ISPEXEC LMINIT DATAID(LISTUID) DDNAME(&LISTUDDN) IF &RETURN_CODE NE 0 THEN DO WRITE &PGMNAME LMINIT_LISTUID_RC = &RETURN_CODE &ZERRSM SET RETURN_CODE = &RETURN_CODE + 16 GOTO ERR_EXIT END ISPEXEC LMOPEN DATAID(&LISTUID) OPTION(INPUT) IF &RETURN_CODE NE 0 THEN DO WRITE &PGMNAME LMOPEN_LISTUID_RC = &RETURN_CODE &ZERRSM SET RETURN_CODE = &RETURN_CODE + 16 GOTO ERR_EXIT END ISPEXEC LMINIT DATAID(DATAID) DDNAME(&DATADDN) IF &RETURN_CODE NE 0 THEN DO WRITE &PGMNAME LMINIT_DATAID_RC = &RETURN_CODE &ZERRSM SET RETURN_CODE = &RETURN_CODE + 16 GOTO ERR_EXIT END ISPEXEC LMOPEN DATAID(&DATAID) OPTION(OUTPUT) IF &RETURN_CODE NE 0 THEN DO WRITE &PGMNAME LMOPEN_DATAID_RC = &RETURN_CODE &ZERRSM SET RETURN_CODE = &RETURN_CODE + 16 GOTO ERR_EXIT END SET DATAMEM = &DATAMBR /* Can not be in PROC & GLOBAL */ SET LP = &STR(( SET RP = ) SET CNT = 0 SET NR = 0 SET NRM = 6 SET BLK10 = &STR( ) SET UID = &STR( ) DO X = 1 TO &NRM SET GRP&X = &STR( ) END READRF: + SET RETURN_CODE = 0 ISPEXEC LMGET DATAID(&LISTUID) MODE(INVAR) DATALOC(LISTU) + DATALEN(LRECL) MAXLEN(255) IF &RETURN_CODE EQ 8 THEN GOTO EOF_LISTUSER IF &RETURN_CODE NE 0 THEN DO WRITE &PGMNAME LMGET_LISTUID_RC = &RETURN_CODE &ZERRSM SET RETURN_CODE = &RETURN_CODE + 16 GOTO ERR_EXIT END NEXT_RF: + SET RETURN_CODE = 0 SET F1 = &SUBSTR(2:9,&STR(&LISTU)) SELECT &STR(&F1) WHEN ( ) GOTO ASC WHEN (PRIVILEG) GOTO PRIV WHEN (DFP ) GOTO DFP WHEN (MISCELLA) GOTO DFP WHEN (ACCESS ) GOTO READRF WHEN (PASSWORD) GOTO READRF WHEN (TSO ) GOTO TSO WHEN (STATISTI) GOTO READRF WHEN (CICS ) GOTO READRF WHEN (RESTRICT) GOTO READRF WHEN (&STR(CANCEL/S)) GOTO READRF END SET XN = &SYSINDEX(&STR(&F1),&STR(&LISTU),23) IF &XN EQ 0 THEN GOTO READRF IF &NR GT 0 THEN SYSCALL PUT_DATA SET CNT = &CNT + 1 SET USRID = &STR(&F1) SET USRNAM = &SUBSTR(&XN+9:&XN+29,&STR(&LISTU)) SET USRID = &SUBSTR(1:8,&USRID&BLK10) SET USRNAM = &SUBSTR(1:17,&USRNAM&BLK10&BLK10) SET UID = &SUBSTR(23:46,&LISTU) SET NR = 3 IF &XN GT 39 THEN DO SET UID = &SUBSTR(23:&XN+7,&STR(&LISTU)) SET NR = &NR + 1 END GOTO READRF PRIV: + SET RETURN_CODE = 0 SET XF = 23 NEXT_ATTR: + SET XC = &SYSINDEX(&STR( ),&STR(&LISTU),&XF) IF &XC-1 GT &XF THEN DO SET ATTR = &SUBSTR(&XF:&XC-1,&STR(&LISTU)) IF &STR(&ATTR) EQ &STR( ) THEN GOTO READRF ELSE DO SET NR = &NR + 1 SET GRP&NR = &SUBSTR(1:8,&ATTR&BLK10) IF &NR EQ &NRM THEN SYSCALL PUT_DATA SET XF = &XC+1 GOTO NEXT_ATTR END END GOTO READRF TSO: + SET RETURN_CODE = 0 IF &SYSINDEX(&STR(MOUNT ),&STR(&LISTU),23) GT 0 THEN DO SET NR = &NR + 1 SET GRP&NR = &STR(MOUNT ) IF &NR EQ &NRM THEN SYSCALL PUT_DATA END IF &SYSINDEX(&STR(OPERATOR),&STR(&LISTU),23) GT 0 THEN DO SET NR = &NR + 1 SET GRP&NR = &STR(OPERATOR) IF &NR EQ &NRM THEN SYSCALL PUT_DATA END ISPEXEC LMGET DATAID(&LISTUID) MODE(INVAR) DATALOC(LISTU) + DATALEN(LRECL) MAXLEN(255) IF &RETURN_CODE EQ 8 THEN GOTO EOF_LISTUSER IF &RETURN_CODE NE 0 THEN DO WRITE &PGMNAME LMGET_LISTUID_RC = &RETURN_CODE &ZERRSM SET RETURN_CODE = &RETURN_CODE + 16 GOTO ERR_EXIT END SET F1 = &SUBSTR(2:9,&STR(&LISTU)) IF &STR(&F1) EQ &STR( ) THEN GOTO TSO GOTO NEXT_RF ASC: + SET RETURN_CODE = 0 IF &SYSINDEX(&STR(ASC&LP),&STR(&LISTU),23) EQ 0 THEN GOTO READRF DFP: + SET RETURN_CODE = 0 IF &NR GT 0 THEN SYSCALL PUT_DATA SET DFP = &SUBSTR(23:76,&STR(&LISTU)) IF &STR(&DFP) EQ &STR( ) THEN GOTO READRF SET DATA = &STR(&USRID &USRNAM &DFP) SET RETURN_CODE = 0 ISPEXEC LMPUT DATAID(&DATAID) MODE(INVAR) DATALOC(DATA) + DATALEN(&LENGTH(&STR(&DATA))) IF &RETURN_CODE NE 0 THEN DO WRITE &PGMNAME LMPUT_DATAID_RC = &RETURN_CODE &ZERRSM SET RETURN_CODE = &RETURN_CODE + 16 GOTO ERR_EXIT END SET DFP = &SUBSTR(77:130,&STR(&LISTU)) IF &STR(&DFP) EQ &STR( ) THEN GOTO READRF SET XF = 76 DO UNTIL &SUBSTR(&XF:&XF,&STR(&LISTU)) EQ &STR( ) SET XF = &XF - 1 IF &XF = 0 THEN GOTO READRF END SET DFP = &SUBSTR(&XF+1:&XF+54,&STR(&LISTU)) SET DATA = &STR(&USRID &USRNAM &DFP) SET RETURN_CODE = 0 ISPEXEC LMPUT DATAID(&DATAID) MODE(INVAR) DATALOC(DATA) + DATALEN(&LENGTH(&STR(&DATA))) IF &RETURN_CODE NE 0 THEN DO WRITE &PGMNAME LMPUT_DATAID_RC = &RETURN_CODE &ZERRSM SET RETURN_CODE = &RETURN_CODE + 16 GOTO ERR_EXIT END GOTO READRF EOF_LISTUSER: + SET RETURN_CODE = 0 IF &NR GT 0 THEN SYSCALL PUT_DATA SYSCALL ADD_MEMBER SET RETURN_CODE = 0 ISPEXEC LMCLOSE DATAID(&LISTUID) SET LMCLOSE_LISTUID_RC = &RETURN_CODE SET RETURN_CODE = 0 ISPEXEC LMFREE DATAID(&LISTUID) SET LMFREE_LISTCUD_RC = &RETURN_CODE ISPEXEC LMCLOSE DATAID(&DATAID) SET LMCLOSE_DATAID_RC = &RETURN_CODE SET RETURN_CODE = 0 ISPEXEC LMFREE DATAID(&DATAID) SET LMFREE_DATAID_RC = &RETURN_CODE /* *************************************** */ /* END of program */ /* *************************************** */ END_EXIT: + SET RETURN_CODE = 0 IF &TERMMSGS = ON THEN DO WRITE =============================================================== WRITE &PGMNAME Output member &DATAMBR WRITE &PGMNAME Users = &CNT WRITE &PGMNAME ACF2 Processing completed. END /* *************************************** */ /* ERROR EXIT */ /* *************************************** */ 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 EXIT CODE(0) END /******************************************* /* Write record and clear variables * /******************************************* PUT_DATA: PROC 0 IF &STR(&UID) NE &STR( ) THEN DO SET DATA = &STR(&USRID &USRNAM &UID &GRP4 &GRP5 &GRP6) END ELSE DO SET DATA = &STR(&USRID &USRNAM &GRP1 &GRP2 + &GRP3 &GRP4 &GRP5 &GRP6) END ISPEXEC LMPUT DATAID(&DATAID) MODE(INVAR) DATALOC(DATA) + DATALEN(&LENGTH(&STR(&DATA))) IF &RETURN_CODE NE 0 THEN DO WRITE &PGMNAME LMPUT_DATAID_RC = &RETURN_CODE &ZERRSM SET RETURN_CODE = &RETURN_CODE + 16 END DO X = 1 TO &NR SET GRP&X = &STR( ) END SET NR = 0 SET UID = &STR( ) END /* *************************************** */ /* SYSCALL SUBROUTINES */ /* *************************************** */ ADD_MEMBER: PROC 0 SET RETURN_CODE = 0 ISPEXEC LMMADD DATAID(&DATAID) MEMBER(&DATAMEM) IF &RETURN_CODE EQ 4 THEN DO /* MEMBER ALREADY EXISTS SET RETURN_CODE = 0 ISPEXEC LMMREP DATAID(&DATAID) MEMBER(&DATAMEM) IF &RETURN_CODE NE 0 THEN DO WRITE &PGMNAME LMMREP_DATA_RCODE = &RETURN_CODE &DATAMEM &ZERRSM END END ELSE DO IF &RETURN_CODE NE 0 THEN + WRITE &PGMNAME LMMADD_DATA_RCODE = &RETURN_CODE &DATAMEM &ZERRSM END END