Type ASSEMBLE
Source Lines : 1,277
Fixes Applied : 5
Most Recent Version : Tuesday, December 12, 1978
Last Fix ID : [HRC004DS]
Module
DMSROS
Function
TO ALLOW CMS TO ACCESS, STATE, READ, NOTE, POINT AND BACKSPACE DATA SETS RESIDING ON O/S DISKS.
Attributes
SERIALLY REUSABLE, CORE RESIDENT ONLY WHEN AN OS DISK IS ACCESSED
Operation
ROSACC: FINALIZE ACCESS OF AN O/S DATA SET ROSACC GETS CONTROL FROM DMSACM ONCE IT IS DETERMINED THAT THE LABEL OF THE DISK BELONGS TO AN O/S - DISK. THE ROSACC ROUTINE WILL READ THE FORMAT 4 DSCB OF THE DISK TO FURTHER VERIFY THE VALIDITY OF THE O/S DISK. THE ADT IS UPDATED TO CONTAIN THE ADDRESS OF THE HIGH EXTENT OF THE VTOC (IF THE DISK IS DOS), OR THE ADDRESS OF THE LAST ACTIVE FORMAT ONE DSCB (IF THE DISK IS O/S), THE NUMBER OF CYLINDERS IN THE DISK, AND IF THE DISK IS A DOS FORMATTED DISK, A FLAG IS SET IN THE ADT. INFORMATION MESSAGES ARE ISSUED TO NOTIFY THE USER THE DISK HAS BEEN ACCESSED IN READ-ONLY MODE, AND IF THE DISK IS ALREADY ACCESSED AS ANOTHER DISK, ANOTHER INFORMATION MESSAGE IS ISSUED TO THAT EFFECT. FINALLY THE ADTFLG1 FLAG IN THE ADT IS ZEROED, THE ADTFLG2 FLAG IS SET TO REFLECT THAT AN O/S DISK HAS BEEN ACCESSED, AND CONTROL RETURNS TO THE CALLER. ROSSTT: VERIFY EXISTENCE OF AN O/S OR DOS DATA SET AND TO VERIFY THAT THE ATTRIBUTES OF THE DATA SET ARE SUPPORETED UNDER CMS. ROSSTT GETS CONTROL FROM DMSSTT ONCE IT IS DETERMINED THAT THE STATE OPERATION IS TO AN O/S OR DOS FORMATTED DISK. THE ROSSTT ROUTINE WILL SEARCH FOR A MATCHING CMSCB OR DOSCB ASSOCIATED TO THE DATA SET VIA A PREVIOUS FILEDEF OR DLBL. THEN ROSSTT TRIES TO FIND IF THERE IS AN ACTIVE OSFST ASSO- CIATED WITH THE DATA SET. IF AN ACTIVE ONE IS FOUND, CONTROL THEN PASSES TO ROSSTRET, OTHERWISE THE DSNAME BLOCK IS BUILT, ITS ADDRESS IS PLACED IN THE CMSCB OR DOSCB, AS MAY BE, AND THE DATA SET NAME IS MOVED TO THE ACQURED BLOCK. THEN AN OSFST BLOCK IS ACQUIRED AND IS CHAINED TO THE OSFST CHAIN. THE ADDRESS OF THE OSFST BLOCK IS THEN PLACED IN THE CMSCB OR DOSCB AS MAY BE THE CASE. SOME FIELDS IN THE OSFST ARE INITIALIZED (DATA SET NAME, DISK ADDRESS, AND DISK MODE). NOW, THE FORMAT 1 DSCB FOR THE DATA SET IS READ AND A CHECK IS MADE FOR UNSUPPORTED OPTIONS ( READ PROTECT, BDAM, AND ISAM ). ERRORS CAUSE CONTROL TO BE PASSED TO THE CALLING ROUTINE WITH AN ERROR CODE. ALL EXTENTS OF THE DATA SET ARE GROUPED TOGETHER (BY READING THE FORMAT 3 DSCB IF NECESSARY) AND ARE CHECKED FOR VALIDITY. IF ANY USER LABELS EXITS, THEY ARE BYPASSED AND A MESSAGE IS ISSUED TO THAT EFFECT. NEXT, IF THE CMS/DOS ENVIRONMENT IS NOT ACTIVE, THE FORMAT 1 LABEL FIELDS BLKSIZE, LRECL AND RECFM ARE MOVED TO THE OSFST AND CONTROL PASSES TO ROSSTRET. ROSSTRET: IF THE DISK IS NOT A DOS DISK CONTROL IS PASSED BACK TO THE CALLER. IF THE SPECIFIED DISK IS A DOS DISK, OS FST BLKSIZE, LRECL AND RECFM FIELDS THAT WERE NOT SPECIFIED IN THE DSCB1 ARE FILLED IN FROM THE CMSCB OR, IF THE CMSCB FIELDS ARE ZERO, THEY ARE DEFAULTED TO BLKSIZE= 32760, LRECL= 32760 AND RECFM= U. CONTROL IS THEN RETURNED TO THE CALLER. ROSRPS: READ NEXT RECORD OF OS DATA SET UPON ENTRY TO THE ROSRPS ENTRY POINT, THE READ ROUTINE CALLS CHKXTNT AND, IF THE CURRENT CCHHR IS XERO, SETXTNT TO INSURE THE CCHHR AND EXTENT BOUNDARIES ARE SET CORRECT. IT THEN CALLS DISKIO AND IF NECESSARY CHKSENSE AND GETALT TO READ THE NEXT RECORD. IF THERE ARE NO ERRORS OR IF AN UNRECOVERABLE ERROR WAS ENCOUNTERED, CONTROL IS RETURNED TO THE USER WITH EITHER A ZERO (I/O OK) OR AN EIGHTY (I/O ERROR) IN REG15. IF A RECOVERABLE ERROR IS ENCOUNTERED, THE CCW'S AND BUFFER POINTERS ARE UPDATED AS NECESSARY AND CHKXTNT AND DISKIO ARE RECALLED TO READ THE NEXT RECORD. ROSFIND: SET CCHHR TO POINT TO MEMBER SPECIFIED IN FCBMEMBR OR, IF FCBMVPDS BIT IS ON, SET CCHHR TO POINT TO NEXT MEMBER HIGHER THAN FCBMEMBR AND SET NEW MEMBER NAME IN FCBMEMBR. UPON ENTRY, ROSFND SETS UP A CCW TO SEARCH FOR A HIGHER MEMBER NAME IF THE FCBMVPDS BIT IS ON OR AN EQUAL MEMBER NAME IF THE FCBMVPDS BIT IS NOT ON. IT THEN CALLS SETXTNT, DISKIO AND IF NEEDED CHKSENSE, AND GETALT TO READ IN THE DIRECTORY BLOCK THAT CONTAINS THE MEMBER NAME REQUESTED. AFTER THE BLOCK HAS BEEN READ, IT IS SEARCHED FOR THE REQUESTED MEMBER NAME. IF THE MEMBER NAME IS NOT FOUND, AN ERROR CODE 4 IS PASSED BACK TO THE CALLER. IF AN I/O ERROR IS EN- COUNTERED TRYING TO READ THE PDS BLOCK, AN ERROR CODE 8 IS PASSED BACK TO THE CALLER. IF THE MEMBER NAME IS FOUND, TTRCNVRT IS CALLED TO CONVERT THE RELATIVE TRAK ADDRESS TO A CCHH AND THE ADDRESS OF THE MEMBER ENTRY IS PASSED BACK TO THE CALLER. ROSNTPTB: GET CURRENT TTR, SET CURRENT CCHHR TO TTR, BACKSPACE TO PREVIOUS RECORD UPON ENTRY TO ROSNTPTB, A CHECK IS MADE TO SEE IF A NOTE, POINT OR BSP FUNCTION HAS BEEN REQUESTED. IF REG 0 IS ZERO, A NOTE IS ASSUMED. THE NOTE ROUTINE CALLS CHRCNVRT TO CONVERT THE CCHH TO A RELATIVE TRACK AND RETURNS CONTROL TO THE CALLER WITH THE TTR IN REG 0. IF REG 0 WAS POSITIVE ON ENTRY TO DMSROS, A POINT IS ASSUMED AND A TTR IS LOADED FROM THE ADDRESS SPECIFIED IN R0 AND TTRCNVRT AND SETXTNT ARE CALLED TO CONVERT THE TTR TO A CCHHR AND CONTROL IS RETURNED TO THE CALLER. IF REG 0 WAS NEGATIVE ON ENTRY TO DMSROS, A BSP (BACKSPACE) IS ASSUMED. THE BACKSPACE CODE CHECKS IF THE CURRENT POSITION IS THE BEGINNING OF A TRACK. IF NOT, THE RECORD NUMBER IS DECREMENTED BY ONE AND CONTROL IS RETURNED TO THE CALLER. IF THE CURRENT POSITION IS THE BEGINNING OF A TRACK, CHRCNVRT IS CALLED TO GET THE CURRENT RELATIVE TRACK, THE RELATIVE TRACK IS DECREMENTED BY ONE AND TTRCNVRT IS CALLED TO GET THE CURRENT CCHH. RDCNT IS THEN CALLED TO GET THE CURRENT RECORD NUMBER OF THE LAST RECORD ON THE NEW TRACK, SETXTNT IS CALLED TO SET THE NEW EXTENT BOUNDARIES AND CONTROL IS RETURNED TO THE CALLER. ROUTINES COMMON TO ALL OF DMSROS: CHRCNVRT: CONVERTS A CCHH ADDRESS TO A RELATIVE TRACK ADDRESS. TTRCNVRT: CONVERTS A RELATIVE TRACK ADDRESS TO AN ACTUAL ADDRESS (CCHHR). CHKSENSE: IF A UNIT CHECK IS ENCOUNTERED, CHECKS SENSE BITS TO DETERMINE IF THE ERROR IS RECOVERABLE. CHKXTNT: CHECKS TO SEE IF END OF SPLIT CYL OR END OF ENTENT HAS BEEN REACHED AND IF SO UPDATES TO THE NEXT SPLIT CYL OR EXTENT. DISKIO: STARTS I/O ON CCW STRING VIA A DIAGNOSE X'20' GETALT: SWITCHES FROM ALTERNATE TRACK TO PRIME TRACK AND FROM PRIME TRACK TO ALTERNATE TRACK. RDCNT: READS COUNT FIELDS ON TRACK TO DETERMINE LAST RECORD NUMBER ON TRACK. SETXTNT: SET OSFSTEND TO END OF EXTENT AND, IF A NEW EXTENT IS SPECIFIED, SETS CCHHR TO THE START OF THE EXTENT.
Calls to Other Routines
DMSERR, ADTNXT, DMSFREE, DMSFRET