Table of Contents

DMSROS Abstract

Statistics

Type ASSEMBLE
Source Lines : 1,277
Fixes Applied : 5
Most Recent Version : Tuesday, December 12, 1978
Last Fix ID : [HRC004DS]

Synopsis

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