On: Mon, Oct 04, 2010 at 12:10:52PM -0400,George Henke/NYLIC Wrote:
} Minidisks with the END option specified are not included in a DISKMAP when
} the command, DISKMAP USER is entered.
}
} What is the reason for this?
DISKMAP EXEC has no knowledge of how bit the MDISK is and so can't
determine overlaps.
} Does this pose a danger when updating the directory directly, no pun
} intended? :-)
It can it you are not careful.
To get around this, I wrote an exec that front-ended DISKMAP which among
other things changed all "to END" mdisks to have the actual number of
cylinders.
I am not going to post the entire exec as its large and uses some things
you may not have, but here is the subroutine (and a rexx pipe filter it
uses) that change the END to an actual cylinder number.
NB: It needs CP privclass D (I think).
***** FIXMDEND EXEC *****
/*
FIXMDEND
FIX MiniDisk statements using END as the number of cyls.
*/
false = (1=0)
true = (1=1)
Address COMMAND
Trace O
/*
Get the directory name.
*/
parse upper arg fn .
'STATE' fn 'DIRECT *' /* Exists? */
if rc = 0
then say 'Fixing minidisk END records in' fn 'DIRECT.'
else exit rc
'PIPE (end ?)',
' State' fn 'DIRECT *', /* Locate file. */
'| Specs w1-3 1', /* Just fid. */
'| Getfiles', /* File into pipeline. */
'| Specs recno 1 1-72 nw', /* Add recno & drop ser. */
'| a: Locate w2 /USER/', /* Locate user cards. */
'| Specs w3 1.9', /* Userid. */
'| j: Juxtapose', /* Tack userid in front. */
'| Rexx FIXMDEND', /* Rexx Stage to fix. */
'| Pad 90', /* Fill out to lrecl. */
'| Fileupdate' fn 'DIRECT *', /* Update the file. */
'| Count Lines', /* Count the updates. */
'| Specs w1 1 /MDISKs with "END" were fixed./ nw',
'| Console',
'?',
'a:',
'| Locate w2 /MDISK/', /* Find mdisks... */
'| Locate w6 /END/', /* ... with end. */
'| j:' /* Back to juxtapose. */
***** FIXMDEND REXX *****
/*
FIXMDEND
FIX MiniDisk statements using END at the number of cyls.
This filter is entered with an MDISK statement preceeded
by 2 words, the userid and the record number.
It outputs the changed record preceeded by the record number.
*/
false = (1=0)
true = (1=1)
Trace O
do forever
'PEEKTO INPUT'
if rc ^= 0
then exit rc * (rc ^= 12)
parse var input user recno mdisk cuu devtyp s_cyl e_cyl vsn mode rest
if e_cyl ^= 'END'
then exit 20
parse value diagrc(8,'QUERY MDISK USERID' user cuu 'LOCATION
DIRECTORY', 256) with cp_rc . '15'x . . . . . . . . n_cyl '15'x
if cp_rc = 0
then do
n_cyl = right(strip(n_cyl, 'B'),5,'0')
cuu = right(cuu,4,'0')
s_cyl = right(s_cyl,5,'0')
'OUTPUT' right(recno,10,'0') mdisk cuu devtyp s_cyl n_cyl vsn
mode rest
end
'READTO'
end
***** ******
NOTE: Its been a looooooooong time since I last looked at this code, and
just glanceing at it there MAY be some code missing at the bottom as I
normally had specific EXIT or RETURN statements and did not use the
convention of running off the end of the exec to exit.
Note: 2 lines in the filter have been folded. Locate the lines starting
"DIRECTORY'" and "mode" and tack them onto the previous line.
--
Rich Greenberg Sarasota, FL, USA richgr atsign panix.com + 1 941 378 2097
Eastern time. N6LRT I speak for myself & my dogs only. VM'er since CP-67
Canines: Val, Red, Shasta, Zero & Casey (At the bridge) Owner:Chinook-L
Canines: Red & Cinnar (Siberians) Retired at the beach Asst Owner:Sibernet-L