On: Wed, Jun 18, 2008 at 02:06:30PM -0400,Jim Bohnsack Wrote:
} Pat--You should also look at the CMS DIRMAP program. I usually use it
} with the USER BACKUP file that DIRMAINT puts on it's 1DB disk so it's
} what the system looked last night or whenever you have it generated. If
} I want an up-to-the-minute file, I do a DIRM USER BACKUP and then run
} DIRMAP. I think it will provide you with the information you want
} without having to figure out how to cope with the asynchronous output
} from the DIRMAINT DIRMAP command.
Good idea except that DIRMAP has one design flaw. It does not show gaps
if they are at the end of the volume, and that is oftem where the most
"interesting" gaps lie. My fix is to run the DIRMAP, and post process
it with an xedit macro called GAPMAP which follows. I also have an exec
DMAP and another macro which together with GAPMAP do the whole mapping job.
QUERY DASD DETAILS is used to find the actual number of cyls. I am reluctant
to post DMAP because its fairly large and contains some bits which are
specific to my last job. I will send it off list on request along with
FIXMAP (the other macro).
/*
GAPMAP
This macro will fix up the o/p of DISKMAP by:
1) Checking the end cyl of the last line for each volume
against the actual size of the volume and adding in a
"GAP" if needed.
2) Adding in the VOLSER on each "GAP" line.
*/
false = (1=0)
true = (1=1)
Trace O
/*
If MSGMODE is on, turn it off (and restore later) to
suppress the 'Target not found" at the end.
*/
'EXTRACT /MSGMODE/LINE/'
start_line = line.1
'SET MSGMODE OFF'
'SET WRAP OFF'
'SET CASE MIXED RESPECT'
/*
Phase 1:
For each volume, add a gap at the end if needed.
*/
'TOP'
vsn = ''
do forever
'FIND VOLUME' /* Next volume. */
if rc ^= 0
then leave
'NFIND ______' /* Get */
'EXTRACT /CURLINE/' /* the */
vsn = translate(left(curline.3,6)) /* volser. */
parse value diagrc(8,'QUERY DASD' vsn, 80) with cp_rc . . cuu err '15'x
if cp_rc ^= 0 | err = 'was not found.' /* Error? */
then iterate /* Yes, ignore this vol. */
parse value diagrc(8,'QUERY DASD DETAILS' cuu) with cp_rc . ,
'CYLS =' ncyl '15'x
if cp_rc ^= 0 /* Error? */
then iterate /* Yes, ignore this vol. */
ncyl = strip(ncyl, 'L') /* Drop leading blanks. */
'FIND ___________________________________________________'
/* Locate next blank. */
if rc ^= 0 /* Error? */
then iterate /* Yes, ignore this vol. */
'-1' /* Up one. */
'EXTRACT /CURLINE/' /* Get last non-blank line. */
ecyl = word(substr(curline.3,9),5) /* Ending cyl of last MDISK. */
if ecyl >= ncyl-1 /* Does it end on last cylinder? */
then iterate /* Its OK, try next volume. */
scyl = right(ecyl + 1,8)
ecyl = right(ncyl - 1,8)
qcyl = right(ncyl - scyl,8)
'INPUT' copies(' ',33) scyl ecyl qcyl ' GAP'
end
/*
Phase 2:
Scan the file, picking up each volser as I come to it,
and overlaying it (lower cased) on each "GAP" line.
*/
':1' /* Start 1 down to avoid the timestamp. */
vsn = ''
do forever
'+1'
if rc ^= 0
then leave
'EXTRACT /CURLINE/'
temp = left(curline.3,6)
select
when curline.3 = ''
then iterate
when temp = ''
then nop
when temp = '------'
then iterate
when temp = 'VOLUME'
then do
'EXTRACT /LINE/'
'NFIND ______'
'EXTRACT /CURLINE/'
vsn = left(curline.3,6)
vsn = translate(vsn,'abcdefghijklmnopqrstuvwxyz', ,
'ABCDEFGHIJKLMNOPQRSTUVWXYZ')
':'line.1
iterate
end
otherwise
nop
end
if word(curline.3,words(curline.3)) = 'GAP'
then do
if vsn = old_vsn
then do
'EXTRACT /LINE/'
'FINDUP' vsn
'OVERLAY *'
':'line.1
'OVERLAY' vsn'*'
end
else do
'OVERLAY' vsn
old_vsn = vsn
end
end
end
/*
All done with GAPMAP processing.
If I have been called from an exec, push a FILE.
If I am interactive, just restore the MSGMODE, and exit.
Make a guess at this by checking if the TERMINAL is in
TYPEWRITER or DISPLAY mode.
This works because an exec would (normally) call XEDIT
with the "NOSCREEN" option.
*/
'EXTRACT /TERMINAL/'
if terminal.1 = 'TYPEWRITER'
then do
push 'COMMAND FILE'
push 'SET RECFM V'
end
else do
'SET RECFM V'
'SET MSGMODE' msgmode.1
':'start_line
end
exit
--
Rich Greenberg N Ft Myers, FL, USA richgr atsign panix.com + 1 239 543 1353
Eastern time. N6LRT I speak for myself & my dogs only. VM'er since CP-67
Canines:Val, Red, Shasta & Casey (RIP), Red & Zero, Siberians Owner:Chinook-L
Retired at the beach Asst Owner:Sibernet-L