/*  REXX                                                      */        
/*                                                            */        
/*  ISSUES THE RACF 'LU' COMMAND AND ROUTES THE OUTPUT TO     */        
/*  A SCROLLABLE TEMP DATASET.                                */        
/*                                                            */        
/*  DIFFERENT FROM THE "LU2" EXEC IN THAT ONLY THE GROUP      */        
/*  NAMES ARE DISPLAYED INSTEAD OF THE OTHER GROUP-CONNECTION */        
/*  INFORMATION.                                              */        
/*                                                            */        
/*  CREATED 10/16/98  STEVE NEELAND                           */        
/*                                                            */        
/*  12/28/00 - MODIFIED TO SORT THE GROUPS WHEN DISPLAYED.    */        
/*                                                            */        
/*  05/24/01 - MODIFIED TO ALLOW FOR DISPLAY TO BE ROUTED     */        
/*             TO EITHER THE SCREEN OR A HARDCODED PRINTER.   */        
/*                                                            */        
                                                                        
$LOOP = 1                                                               
$GROUP_KNTR = 0                                                         
                                                                        
PARSE UPPER ARG UID $DEST .                                             
IF UID = '' THEN UID = USERID()                                         
                                                                        
$PRINT_FLAG = 'N'                                                       
IF $DEST = 'P' THEN $PRINT_FLAG = 'Y'                                   
                                                                        
/*--------  GET RACF USERID PROFILE INFO --------------*/               
Z = OUTTRAP('LIST.')                                                    
   "LISTUSER" UID "TSO DFP OMVS CICS WORKATTR"                          
Z = OUTTRAP('OFF')                                                      
                                                                        
/*--------  CHECK IF USERID EXISTS  -------------------*/               
PARSE VAR LIST.1 $MSG .                                                 
IF $MSG = 'ICH30001I' THEN DO                                           
/* CLEAR  */                                                            
   SAY                                                                  
   SAY 'USERID' UID 'DOES NOT EXIST.'                                   
   SAY                                                                  
   EXIT                                                                 
END  /* IF $MSG...  */                                                  
                                                                        
/*------------------------------------------------------------------*/  
/* ALLOCATE THE TEMP FILE FOR DISPLAYING THE OUTPUT DATA            */  
/*------------------------------------------------------------------*/  
OUTPUT = "L"RANDOM(99999)                                               
                                                                        
SELECT                                                                  
                                                                        
  WHEN $PRINT_FLAG = 'Y' THEN                                           
     /*--- SEND TO PRINTER --------------------------*/                 
     "ALLOC FI("OUTPUT") SYSOUT(A) DEST(U0011) FORMS(STD) ,             
          COPIES(1) RECFM(F,B) LRECL(80)"                               
     /*--- SEND TO PRINTER --------------------------*/                 
/*   "ALLOC FI("OUTPUT") SYSOUT(A) DEST(U0022) FORMS(STD) ,             
          COPIES(1) RECFM(F,B) LRECL(80)"  */                           
                                                                        
  OTHERWISE                                                             
      /*--- SEND TO SCREEN ---------------------------*/                
      "ALLOC FI("OUTPUT") DELETE TRACK ,                                
       SPACE (5,5) LRECL(133) RECFM(F B) BLKSIZE(0) UNIT(SYSDA)"        
 END  /* SELECT */                                                      
                                                                        
                                                                        
/*--------  LIST ONLY THE USERID ATTRIBUTE INFO  --------*/             
DO UNTIL SUBSTR(LIST.$LOOP,2,5) = 'LOGON'                               
   QUEUE LIST.$LOOP                                                     
   $LOOP = $LOOP + 1                                                    
END  /*  DO UNTIL  */                                                   
QUEUE LIST.$LOOP ; $LOOP = $LOOP + 1                                    
QUEUE LIST.$LOOP ; $LOOP = $LOOP + 1                                    
QUEUE LIST.$LOOP                                                        
QUEUE ' '                                                               
QUEUE ' '                                                               
                                                                        
/*--------  GO THRU AND GET THE GROUPS CONNECTED TO  --------*/         
DO X = $LOOP TO LIST.0 UNTIL SUBSTR(LIST.X,1,3) = "TSO" | ,             
                             SUBSTR(LIST.X,1,6) = "NO TSO"              
   IF SUBSTR(LIST.X,3,6) = "GROUP=" THEN DO                             
      PARSE VAR LIST.X 'GROUP=' $GROUP .                                
      X = X +2                                                          
      PARSE VAR LIST.X 'CONNECT ATTRIBUTES=' $ATTR                      
      $GROUP_KNTR = $GROUP_KNTR + 1                                     
                                                                        
      IF $ATTR = 'NONE' THEN $ATTR = ' '                                
                        ELSE $ATTR = "/"||$ATTR                         
                                                                        
   $GROUP_ORIG.$GROUP_KNTR = $GROUP                                     
   $ATTR_ORIG.$GROUP_KNTR  = $ATTR                                      
   END  /* IF LEFT  */                                                  
END   /*  END X  */                                                     
                                                                        
CALL SORT_GROUPS                                                        
                                                                        
CALL LIST_GROUPS                                                        
                                                                        
QUEUE ' '                                                               
QUEUE ' '                                                               
DO Y = X TO LIST.0                                                      
   QUEUE LIST.Y                                                         
END   /*  DO Y  */                                                      
                                                                        
$TODAY = DATE()                                                         
$TODAY = SUBWORD($TODAY,2,1) SUBWORD($TODAY,1,1)"," SUBWORD($TODAY,3)   
                                                                        
QUEUE ''                                                                
IF $PRINT_FLAG = 'Y' THEN PUSH COPIES('=',80)                           
PUSH ' '                                                                
PUSH "TODAY'S DATE:" DATE('W') $TODAY "      JULIAN: "DATE('D') ,       
"        TIME IS:" TIME()                                               
IF $PRINT_FLAG = 'Y' THEN PUSH ' '                                      
                                                                        
/*------------------------------------------------------------------*/  
/* CLOSE THE 'DISPLAY' FILE                                         */  
/*------------------------------------------------------------------*/  
   QUEUE ' '                                                            
  "EXECIO * DISKW "OUTPUT" (FINIS"                                      
                                                                        
/*------------------------------------------------------------------*/  
/* CLEANUP                                                          */  
/*------------------------------------------------------------------*/  
  IF $PRINT_FLAG = 'N' THEN DO                                          
    /*--------------------------------------------------------------*/  
    /* DISPLAY RESULTS TO SCREEN                                    */  
    /*--------------------------------------------------------------*/  
    ADDRESS ISPEXEC "LMINIT DATAID(DATAID) DDNAME("OUTPUT")"            
    ADDRESS ISPEXEC "BROWSE DATAID("DATAID")"                           
  END /* IF PRINT_FLAG...  */                                           
                                                                        
  "FREE F("OUTPUT")"                                                    
   DROPBUF 0                                                            
EXIT                                                                    
                                                                      
/*-------------------------------------------------------------*/     
SORT_GROUPS:                                                          
                                                                      
   DO $LOOP1 = 1 TO $GROUP_KNTR                                       
      DO $LOOP2 = $LOOP1 TO $GROUP_KNTR                               
        B41 = $GROUP_ORIG.$LOOP1                                      
        B42 = $GROUP_ORIG.$LOOP2                                      
        IF B41 > B42 THEN                                             
        DO                                                            
           TEMP_G        = $GROUP_ORIG.$LOOP1                         
           TEMP_A        = $ATTR_ORIG.$LOOP1                          
           $GROUP_ORIG.$LOOP1 = $GROUP_ORIG.$LOOP2                    
           $ATTR_ORIG.$LOOP1  = $ATTR_ORIG.$LOOP2                     
           $GROUP_ORIG.$LOOP2 = TEMP_G                                
           $ATTR_ORIG.$LOOP2  = TEMP_A                                
        END  /* IF B41.....  */                                       
      END  /* DO $LOOP2  */                                           
   END  /* DO $LOOP1  */                                              
                                                                      
  RETURN                                                              
                                                                      
/*----------------------------------------------------------------*/ 
LIST_GROUPS:                                                         
                                                                     
   DO $LOOP3 = 1 TO $GROUP_KNTR                                      
      IF $LOOP3 = 1 THEN,                                            
          QUEUE ' GROUPS CONNECTED TO:  ',                           
                  $GROUP_ORIG.$LOOP3||$ATTR_ORIG.$LOOP3              
        ELSE                                                         
          QUEUE '                       ',                           
                  $GROUP_ORIG.$LOOP3||$ATTR_ORIG.$LOOP3              
   END   /*  DO $LOOP3...  */                                        
                                                                     
  RETURN                                                             

    Source: geocities.com/steveneeland