/* REXX *** */ /* Produce DUMP TITLES FOR an SVC DUMP dataset */ PARSE ARG dsn opt ADDRESS TSO SELECT; WHEN dsn = '' then DO SAY 'Function: Report on SVC DUMP dataset' SAY 'Syntax : %DT dump-dataset-name [RECALL]' EXIT 8 END WHEN opt = 'RECALL' then recall = 'RECALL' WHEN opt = '' then recall = 'NORECALL' OTHERWISE DO SAY 'Invalid argument 'opt EXIT 8 END END SAY STRIP(dsn,'B',"'") cc = LISTDSI(dsn recall) IF cc >= 16 then DO SAY sysmsglvl2 EXIT 8 END IF sysrecfm ^= 'FBS' & syslrecl < 4000 then DO SAY 'This is probably not a dump dataset' EXIT 8 END /* copy the header to a temporary file */ /* REXX EXECIO function will not read a DUMP dataset directly */ 'ALLOC DA('dsn') F(DUMPIN) INPUT SHR REU OPTCD(B)' 'EXECIO 1 DISKR DUMPIN 1 (STEM in. FINIS)' 'FREE F(DUMPIN)' IF in.0 < 1 then DO SAY 'I/O error on input or empty dump dataset' EXIT 8 END IF SUBSTR(in.1,1,2) ^= 'DR' | SUBSTR(in.1,5,2) ^= 'H ' then DO SAY 'Invalid or missing dump header' EXIT 8 END SAY 'Title: 'STRIP(SUBSTR(in.1,89,100),trailing) /* ------------------------------------------------- */ /* This code calculates date & time from stck format */ /* in the dump header */ /* ------------------------------------------------- */ stck = C2X(SUBSTR(in.1,73,4)) sec2 = X2D(RIGHT(stck,4)) sec1 = X2D(LEFT(stck,4)) secs = (sec1*65536+sec2) * 1.048576 days = secs % 86400 + 1 mins = (secs // 86400) % 60 hrs = mins % 60 mins = mins // 60 year4 = days % 1461 days = days // 1461 SELECT WHEN days < 366 then base = 0 WHEN days > 1095 then base = 1095 WHEN days < 731 then base = 365 OTHERWISE base = 730 END days = days - base year = 4 * year4 + (base % 365) + 1900 SAY 'Time: 'hrs':'RIGHT(mins,2,'0')' Date: 'year'/'right(days,3,'0') SAY ' ' EXIT 0