/*  REXX                                                      */        
/*                                                            */        
/*  ISSUES THE RACF 'SETR LIST' COMMAND AND ROUTES THE OUTPUT */        
/*  TO A SCROLLABLE TEMP DATASET OR DIRECTLY TO THE PRINTER.  */        
/*                                                            */        
/*  CREATED 11/02/2002   STEVE NEELAND                        */        
/*                                                            */        
                                                                        
PARSE UPPER ARG $DEST .                                                 
                                                                        
IF $DEST = 'P' THEN $PRINT_FLAG = 'Y'                                   
               ELSE $PRINT_FLAG = 'N'                                   
                                                                        
/*------------------------------------------------------------------*/  
/* 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(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 */                                                      
                                                                        
/*--------  GET RACF USERID PROFILE INFO --------------*/               
Z = OUTTRAP('LIST.')                                                    
   "SETROPTS LIST"                                                      
Z = OUTTRAP('OFF')                                                      
                                                                        
                                                                        
/*--------  PRINT DATE/TIME STAMP -----------------------*/             
$TODAY = DATE()                                                         
$TODAY = SUBWORD($TODAY,2,1) SUBWORD($TODAY,1,1)"," SUBWORD($TODAY,3)   
                                                                        
QUEUE COPIES('=',80)                                                    
QUEUE "TODAY'S DATE:" DATE('W') $TODAY "      JULIAN: "DATE('D') ,      
       "        TIME IS:" TIME()                                        
QUEUE COPIES('=',80)                                                    
QUEUE ' '                                                               
"EXECIO 4 DISKW" OUTPUT                                                 
                                                                        
/*--------  LIST ONLY THE USERID ATTRIBUTE INFO  --------*/             
DO $LOOP = 1 TO LIST.0                                                  
   QUEUE LIST.$LOOP                                                     
  "EXECIO 1 DISKW" OUTPUT                                               
END  /*  DO LIST.0 */                                                   
                                                                        
/*------------------------------------------------------------------*/  
/* CALl SYSTEM INFO REPORT                                          */  
/*------------------------------------------------------------------*/  
   CALL VERINFO                                                         
   CALL SYSINFO                                                         
                                                                        
/*------------------------------------------------------------------*/  
/* CLOSE THE 'DISPLAY' FILE                                         */  
/*------------------------------------------------------------------*/  
   QUEUE ''                                                             
  "EXECIO 1 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                                                                    
                                                                        
/*********************************************************************/ 
VERINFO:                                                                
                                                                        
OPTION = 'VERSION'                                                      
Parse source . . . . . . . ENV . .                                      
Numeric digits 10                            /* dflt of 9 not enough */ 
Call HEADING                                 /* Heading sub-routine  */ 
Call COMMON            /* control blocks needed by multiple routines */ 
  Call VERSION                               /* Version information  */ 
/*********************************************************************/ 
/* Done looking at all control blocks                                */ 
/*********************************************************************/ 
RETURN                                       /* END VERINFO - RC 0   */ 
                                                                        
/*********************************************************************/ 
/*  Start of sub-routines                                            */ 
/*********************************************************************/ 
HEADING:             /* Heading sub-routine                          */ 
QUEUE ; QUEUE                                                           
Queue '********************************************************' || ,   
      '***********************'                                         
QUEUE '************************  VERSION INFORMATION  *********' || ,   
      '***********************'                                         
Queue '********************************************************' || ,   
      '***********************'                                         
"EXECIO 5 DISKW" OUTPUT                                                 
return                                                                  
                                                                        
/*********************************************************************/ 
COMMON:              /* Control blocks needed by multiple routines   */ 
CVT      = C2d(Storage(10,4))                /* point to CVT         */ 
PRODNAME = Storage(D2x(CVT - 40),7)          /* point to mvs version */ 
If Substr(PRODNAME,3,1) > 3 then                                        
  ECVT     = C2d(Storage(D2x(CVT + 140),4))  /* point to CVTECVT     */ 
FMIDNUM  = Storage(D2x(CVT - 32),7)          /* point to fmid        */ 
JESCT    = C2d(Storage(D2x(CVT + 296),4))    /* point to JESCT       */ 
CSD      = C2d(Storage(D2x(CVT + 660),4))    /* point to CSD         */ 
SMCA     = Storage(D2x(CVT + 196),4)         /* point to SMCA        */ 
SMCA     = Bitand(SMCA,'7FFFFFFF'x)          /* zero high order bit  */ 
SMCA     = C2d(SMCA)                         /* convert to decimal   */ 
MODEL    = C2d(Storage(D2x(CVT - 6),2))      /* point to cpu model   */ 
/*********************************************************************/ 
/*  The CPU model is stored in packed decimal format with no sign,   */ 
/*  so to make the model printable, it needs to be converted back    */ 
/*  to hex.                                                          */ 
/*********************************************************************/ 
MODEL    = D2x(MODEL)                        /* convert back to hex  */ 
If Substr(FMIDNUM,4,4) >= 6602 then ,                                   
  ECVTIPA  = C2d(Storage(D2x(ECVT + 392),4)) /* point to IPA         */ 
If Substr(FMIDNUM,4,4) >  6609 then ,                                   
  IPAARCHL = Storage(D2x(ECVTIPA + 2143),1)  /* ARCHLVL (1 or 2)     */ 
Return                                                                  
                                                                        
                                                                        
/*********************************************************************/ 
VERSION:             /* Version information sub-routine              */ 
JESNAME  = Storage(D2x(JESCT + 28),4)        /* point to JESNAME     */ 
If JESNAME = 'JES3' then do                  /* Is this JES3?        */ 
    JESLEV   = SYSVAR(SYSJES)                /* TSO/E VAR for JESLVL */ 
    JESNODE  = SYSVAR(SYSNODE)               /* TSO/E VAR for JESNODE*/ 
End                                                                     
Else do  /* JES2 */                                                     
  SSCVT    = C2d(Storage(D2x(JESCT+24),4))   /* point to SSCVT       */ 
  SSCTSUSE = C2d(Storage(D2x(SSCVT+20),4))   /* point to SS usage    */ 
  JESLEV   = Strip(Storage(D2x(SSCTSUSE),8)) /* JES Version          */ 
  SSCTSUS2 = C2d(Storage(D2x(SSCVT+28),4))   /* point to $HCCT       */ 
  Select                                                                
    When Substr(JESLEV,1,6) == 'OS 1.1' | , /* OS/390 1.1  or        */ 
      Substr(JESLEV,1,4) == 'SP 5' then ,    /* ESA V5 JES2          */ 
      JESNODE  = Strip(Storage(D2x(SSCTSUS2+336),8)) /*  JES2 NODE   */ 
    When Substr(JESLEV,1,6) == 'OS 2.1' then, /* OS/390 2.10 and >   */ 
      JESNODE  = Strip(Storage(D2x(SSCTSUS2+452),8)) /* JES2 NODE    */ 
    When Substr(JESLEV,1,5) == 'OS 1.' | ,   /* OS/390 1.2           */ 
      Substr(JESLEV,1,5) == 'OS 2.' then,    /*  through OS/390 2.9  */ 
      JESNODE  = Strip(Storage(D2x(SSCTSUS2+372),8)) /* JES2 NODE    */ 
    Otherwise ,                              /* Lower than ESA V5    */ 
      JESNODE  = SYSVAR(SYSNODE)             /* TSO/E VAR for JESNODE*/ 
  End  /* select */                                                     
End /* else do */                                                       
/*                                                                   */ 
CVTRAC   = C2d(Storage(D2x(CVT + 992),4))    /* point to RACF CVT    */ 
RCVTID   = Storage(D2x(CVTRAC),4)            /* point to RCVTID      */ 
                                             /* RCVT, ACF2, or RTSS  */ 
If RCVTID = 'RCVT' then RCVTID = 'RACF'      /* RCVT is RACF         */ 
If RCVTID = 'RTSS' then RCVTID = 'Top Secret'  /* RTSS is Top Secret */ 
RACFVRM  = Storage(D2x(CVTRAC + 616),4)      /* RACF Ver/Rel/Mod     */ 
RACFVER  = Substr(RACFVRM,1,1)               /* RACF Version         */ 
RACFREL  = Substr(RACFVRM,2,2)               /* RACF Release         */ 
RACFREL  = Format(RACFREL)                   /* Remove leading 0     */ 
RACFMOD  = Substr(RACFVRM,4,1)               /* RACF MOD level       */ 
RACFLEV  = RACFVER || '.' || RACFREL || '.' || RACFMOD                  
/*                                                                   */ 
CVTDFA   = C2d(Storage(D2x(CVT + 1216),4))   /* point to DFP ID table*/ 
DFAPROD  = C2d(Storage(D2x(CVTDFA +16),1))   /* point to relese byte */ 
If DFAPROD = 0 then do                       /* DFP not DF/SMS       */ 
  DFAREL   = C2x(Storage(D2x(CVTDFA+2),2))   /* point to DFP release */ 
  DFPVER   = Substr(DFAREL,1,1)              /* DFP Version          */ 
  DFPREL   = Substr(DFAREL,2,1)              /* DFP Release          */ 
  DFPMOD   = Substr(DFAREL,3,1)              /* DFP Mod Lvl          */ 
  DFPRD    = 'DFP'                           /* product is DFP       */ 
  DFLEV    = DFPVER || '.' || DFPREL || '.' || DFPMOD                   
End                                                                     
Else do                                      /* DFSMS not DFP        */ 
  DFARELS  = C2x(Storage(D2x(CVTDFA+16),4))  /* point to DF/SMS rel  */ 
  DFAVER   = X2d(Substr(DFARELS,3,2))        /* DF/SMS Version       */ 
  DFAREL   = X2d(Substr(DFARELS,5,2))        /* DF/SMS Release       */ 
  DFAMOD   = X2d(Substr(DFARELS,7,2))        /* DF/SMS Mod Lvl       */ 
  DFPRD    = 'DFSMS'                         /* product is DF/SMS    */ 
  DFLEV    = DFAVER || '.' || DFAREL || '.' || DFAMOD                   
End                                                                     
/*                                                                   */ 
CVTTVT   = C2d(Storage(D2x(CVT + 156),4))    /* point to TSO vect tbl*/ 
TSVTLVER = Storage(D2x(CVTTVT+100),1)        /* point to TSO Version */ 
TSVTLREL = Storage(D2x(CVTTVT+101),2)        /* point to TSO Release */ 
TSVTLREL = Format(TSVTLREL)                  /* Remove leading 0     */ 
TSVTLMOD = Storage(D2x(CVTTVT+103),1)        /* point to TSO Mod Lvl */ 
TSOLEV   = TSVTLVER || '.' || TSVTLREL || '.' || TSVTLMOD               
/*                                                                   */ 
CVTEXT2  = C2d(Storage(D2x(CVT + 328),4))    /* point to CVTEXT2     */ 
CVTATCVT = C2d(Storage(D2x(CVTEXT2 + 65),3)) /* point to VTAM AVT    */ 
ISTATCVT = C2d(Storage(D2x(CVTATCVT + 0),4)) /* point to VTAM CVT    */ 
ATCVTLVL = Storage(D2x(ISTATCVT + 0),8)      /* VTAM Rel Lvl VOVRP   */ 
VTAMVER  = Substr(ATCVTLVL,3,1)              /* VTAM Version   V     */ 
VTAMREL  = Substr(ATCVTLVL,4,1)              /* VTAM Release    R    */ 
VTAMMOD  = Substr(ATCVTLVL,5,1)              /* VTAM Mod Lvl     P   */ 
If VTAMMOD = ' ' then VTAMLEV =  VTAMVER || '.' || VTAMREL              
   else VTAMLEV =  VTAMVER || '.' || VTAMREL || '.' || VTAMMOD          
/*                                                                   */ 
If Substr(PRODNAME,3,1) < 6 then                                        
  Queue 'The MVS version is 'PRODNAME' - FMID 'FMIDNUM'.'               
Else do                                                                 
  PRODNAM2 = Storage(D2x(ECVT+496),16)       /* point to product name*/ 
  PRODNAM2 = Strip(PRODNAM2,T)               /* del trailing blanks  */ 
  VER      = Storage(D2x(ECVT+512),2)        /* point to version     */ 
  REL      = Storage(D2x(ECVT+514),2)        /* point to release     */ 
  MOD      = Storage(D2x(ECVT+516),2)        /* point to mod level   */ 
  VRM      = VER'.'REL'.'MOD                                            
  Queue 'The OS version is 'PRODNAM2 VRM' - FMID 'FMIDNUM'.'            
End                                                                     
Queue 'The primary job entry subsystem is 'JESNAME'.'                   
Queue 'The 'JESNAME 'level is 'JESLEV'.' ,                              
      'The 'JESNAME 'node name is 'JESNODE'.'                           
If RACFVRM < '2608' then ,                                              
 Queue 'The security software is 'RCVTID'.' ,                           
       'The RACF level is 'RACFLEV'.'                                   
Else ,                                                                  
 Queue 'The security software is OS/390 Security Server (RACF).' ,      
       'The FMID is HRF' || RACFVRM || '.'                              
Queue 'The' DFPRD 'level is' DFLEV'.'                                   
Queue 'The TSO level is 'TSOLEV'.'                                      
If SYSISPF = 'ACTIVE' then do                /* is ISPF active?      */ 
  Address ISPEXEC "VGET ZISPFOS"             /* yes, is it OS?390?   */ 
  If RC = 0 then do                          /* yes, get OS/390 var  */ 
    ISPFLEV = Substr(ZISPFOS,10,15)          /* only need version    */ 
    Queue 'The ISPF level is 'ISPFLEV'.'                                
  End  /* if RC */                                                      
  Else do                          /* not OS/390 - use old variables */ 
    Address ISPEXEC "VGET ZPDFREL"           /* get pdf release info */ 
    ISPFLEV  = Substr(ZENVIR,6,3)            /* ISPF level           */ 
    PDFLEV   = Substr(ZPDFREL,5,3)           /* PDF  level           */ 
    Queue 'The ISPF level is 'ISPFLEV'. The PDF level is' PDFLEV'.'     
  End /* else do */                                                     
End  /* if SYSISPF */                                                   
Queue 'The VTAM level is 'VTAMLEV'.'                                    
$Q = QUEUED()                                                           
"EXECIO" $Q "DISKW" OUTPUT                                              
Return                                                                  
                                                                        
                                                                        
                                                                        
                                                                        
                                                                        
/*------------------------------------------------------------------*/  
SYSINFO:                                                                
 queue ' '                                                              
 queue ' ----------------------------------------------------------'    
 queue ' '                                                              
  CVT = C2D(STORAGE(10,4))                                              
  CVTPREF  = CVT - X2D(100)                                             
  CSD      = C2D(STORAGE(D2X(CVT + X2D(294)),4))                        
  ECVT     = C2D(STORAGE(D2X(CVT + X2D(8C)),4))          
  ECVTHDNM = STORAGE(D2X(ECVT+X2D(150)),8)               
  ECVTLPNM = STORAGE(D2X(ECVT+X2D(158)),8)               
  CSDPLPN  = C2D(STORAGE(D2X(CSD + X2D(FC)),1))          
  PROCESSR = ECVTHDNM                                    
  LPAR     = STRIP(ECVTLPNM)' (LPAR #'CSDPLPN')'         
  CVTRLSE  = D2X(CVTPREF + X2D(FC))                      
  RELEASE  = STORAGE(CVTRLSE,4)                          
                                                         
  CVTSMCA  = D2X(CVT + X2D(C5))                          
  SMCA     = C2D(STORAGE(CVTSMCA,3))                     
  SMCAD    = SMCA + X2D(154)                             
  SMCAX    = D2X(SMCAD)                                  
  SMCAXDTE = C2X(STORAGE(SMCAX,4))                       
  IPLDATE  = SUBSTR(SMCAXDTE,3,5)                        
  IPLDAY   = SUBSTR(SMCAXDTE,5,3)                        
  SMCAD    = SMCA + X2D(150)                             
  SMCAX    = D2X(SMCAD)                                  
  SMCATIME = C2D(STORAGE(SMCAX,4))                       
  SECPAST0 = SMCATIME % 100                              
  IPLTIME  = STOHHMMSS(SECPAST0)                         
  TODAY    = SUBSTR(DATE('J'),3,3)                       
  NOW      = TIME('S')                        
  DAYS     = TODAY - IPLDAY                   
  HOURS    = NOW - SECPAST0                   
  IF HOURS < 0                                
   THEN                                       
    DO                                        
     DAYS = DAYS - 1                          
     HOURS = HOURS + (24 * 3600)              
   END                                        
  IF DAYS = 1                                 
   THEN DAYLIT = 'DAY'                        
   ELSE DAYLIT = 'DAYS'                       
  IPLUPTIME= STOHHMMSS(HOURS)                 
  CVTUCB   = D2X(CVT + X2D(30))               
  UCB      = C2D(STORAGE(CVTUCB,4))           
  UCBC     = UCB + 4                          
  UCBCHAN  = D2X(UCBC)                        
  IUCB     = STORAGE(UCBCHAN,2)               
  IPLUCB   = C2X(IUCB)                        
  UCBV     = UCB + X2D(1C)                    
  UCBVOLI  = D2X(UCBV)                        
  IPLVOL   = STORAGE(UCBVOLI,6)               
  RV = SYSVAR("SYSLRACF")               /* RETURNS RACF LEVEL  */       
  TV = SYSVAR("SYSTSOE")                /* RETURNS VERSION OF TSO/E  */ 
                                                                        
queue "     RACF =" LEFT(RV,1)'.'SUBSTR(RV,3,1)'.'SUBSTR(RV,4,1)        
queue '    TSO/E =' LEFT(TV,1)'.'SUBSTR(TV,3,1)'.'SUBSTR(TV,4,1)        
queue "  USER ID =" USERID()                                            
queue "      MVS =" MVSVAR('SYSMVS')                                    
queue "  RELEASE =" RELEASE                                             
queue "  SYSNAME =" MVSVAR('SYSNAME')                                   
queue "PROCESSOR =" PROCESSR                                            
queue "     LPAR =" LPAR                                                
queue "    OPSYS =" MVSVAR('SYSOPSYS')                                  
queue "   UPTIME =" DAYS DAYLIT "+" IPLUPTIME                           
queue "      IPL =" IPLDATE IPLTIME 'FROM' STRIP(IPLUCB,'L','0') IPLVOL 
queue "  SYSPLEX =" MVSVAR('SYSPLEX')                                   
queue " SYSCLONE =" MVSVAR('SYSCLONE')                                  
queue "DFP LEVEL =" MVSVAR('SYSDFP')                                    
queue "   SMF ID =" MVSVAR('SYSSMFID')                                  
queue "   SMS IS =" MVSVAR('SYSSMS'  )                                  
  HID=C2D(STORAGE(D2X(CVT + X2D(42C)),4))                               
queue  '  CPUTYPE =' STRIP(STORAGE(D2X(HID+26),6),'L','0'),             
      'MODEL='STRIP(STORAGE(D2X(HID+32),3),'L','0'),                    
      'MANUFACTURER='STORAGE(D2X(HID+35),3),                         
      'PLANT='STORAGE(D2X(HID+38),2),                                
      'SEQNO='STRIP(STORAGE(D2X(HID+40),12),'L','0')                 
                                                                     
$Q = QUEUED()                                                        
"EXECIO" $Q "DISKW" OUTPUT                                           
                                                                     
return                                                               
                                                                     
  STOHHMMSS: PROCEDURE;                                              
  ARG TOD;                                                           
  HRS  = RIGHT(TOD % 3600,2,'0');                                    
  SECS = RIGHT(TOD//60,2,'0');                                       
  MINS = RIGHT((TOD - (HRS*3600))%60,2,'0');                         
  RETURN(HRS':'MINS':'SECS);                                         
                                                                     

    Source: geocities.com/steveneeland