ROS TITLE 'DMSROS (CMS) VM/370 - RELEASE 6' 00001000 SPACE 2 00002000 *. 00003000 * 00004000 * 00005000 * 00006000 * MODULE NAME: 00007000 * 00008000 * DMSROS 00009000 * 00010000 * FUNCTION: 00011000 * 00012000 * TO ALLOW CMS TO ACCESS, STATE, READ, NOTE, POINT AND 00013000 * BACKSPACE DATA SETS RESIDING ON O/S DISKS. 00014000 * 00015000 * ATTRIBUTES: 00016000 * 00017000 * SERIALLY REUSABLE, CORE RESIDENT ONLY WHEN AN OS DISK 00018000 * IS ACCESSED 00019000 * 00020000 * ENTRY POINTS: 00021000 * 00022000 * DMSROS ROSACC (ACCESS O/S DISKS) 00023000 * DMSROS+4 ROSSTT (STATE O/S DISKS) 00024000 * DMSROS+8 ROSRPS (READ O/S DISKS) 00025000 * DMSROS+12 ROSFIND (FIND MEMBER IN O/S PDS) 00026000 * DMSROS+16 ROSNTPTB (NOTE, POINT AND BSP FUNCTIONS) 00027000 * 00028000 * EXIT CONDITIONS: 00029000 * 00030000 * ACCESS R15= 80 I/O ERROR R15= 0 NO ERROR 00031000 * DMSROS723I FM (CCU) R/O - OS 00032000 * DMSROS725I CCU ALSO = FM - O/S DISK 00033000 * STATE R15= 80 I/O ERROR R15= 81 READ PROTECTED 00034000 * R15= 82 NOT BSAM, BPAM OR QSAM R15= 0 NO ERRORS 00035000 * R15= 83 DOS DATA SET WITH MORE THAN 16 EXTENTS 00036000 * R15= 88 DATA SET NOT FOUND 00037000 * DMSROS227I PROCESSING VOLUME 'NN' IN DATA SET NAME 00038000 * 'DATA SET NAME' 00039000 * DMSROS228I USER LABELS BYPASSED ON DATA SET 00040000 * 'DATA SET NAME' 00041000 * READ R15= 80 I/O ERROR R15= 12 END OF FILE 00042000 * R15= 0 NO ERRORS 00043000 * FIND R15= 8 I/O ERROR R15= 4 MEMBER NOT FOUND 00044000 * R15= 0 MEMBER FOUND 00045000 * NOTE NO ABNORMAL RETURN 00046000 * POINT NO ABNORMAL RETURN 00047000 * BACKSPACE R15= 80 I/O ERROR R15= 0 NO ERRORS 00048000 * 00049000 * EXTERNAL REFERENCES: 00050000 * 00051000 * NUCON, OSFST, ADT, CMSCB 00052000 * 00053000 * CALLS TO OTHER ROUTINES: 00054000 * 00055000 * DMSERR, ADTNXT, DMSFREE, DMSFRET 00056000 * 00057000 * TABLES/WORKAREAS: 00058000 * 00059000 * REGISTER USAGE: 00060000 * 00061000 * R0 NUCON 00062000 * R1 OPSECT 00063000 * R4 FST 00064000 * R5 ADT 00065000 * R7 FCB 00066000 * R11 DMSROS 1ST. BASE 00067000 * R12 DMSROS 2ND. BASE 00068000 * 00069000 * OPERATION: 00070000 * 00071000 * 00072000 * ROSACC: FINALIZE ACCESS OF AN O/S DATA SET 00073000 * 00073500 * ROSACC GETS CONTROL FROM DMSACM ONCE IT IS DETERMINED THAT 00074000 * THE LABEL OF THE DISK BELONGS TO AN O/S - DISK. THE ROSACC 00075000 * ROUTINE WILL READ THE FORMAT 4 DSCB OF THE DISK TO FURTHER 00076000 * VERIFY THE VALIDITY OF THE O/S DISK. THE ADT IS UPDATED TO 00077000 * CONTAIN THE ADDRESS OF THE HIGH EXTENT OF THE VTOC (IF THE 00078000 * DISK IS DOS), OR THE ADDRESS OF THE LAST ACTIVE FORMAT ONE 00079000 * DSCB (IF THE DISK IS O/S), THE NUMBER OF CYLINDERS IN THE 00080000 * DISK, AND IF THE DISK IS A DOS FORMATTED DISK, A FLAG IS 00081000 * SET IN THE ADT. INFORMATION MESSAGES ARE ISSUED TO NOTIFY 00082000 * THE USER THE DISK HAS BEEN ACCESSED IN READ-ONLY MODE, AND 00083000 * IF THE DISK IS ALREADY ACCESSED AS ANOTHER DISK, ANOTHER 00084000 * INFORMATION MESSAGE IS ISSUED TO THAT EFFECT. FINALLY THE 00085000 * ADTFLG1 FLAG IN THE ADT IS ZEROED, THE ADTFLG2 FLAG IS SET 00086000 * TO REFLECT THAT AN O/S DISK HAS BEEN ACCESSED, AND CONTROL 00087000 * RETURNS TO THE CALLER. 00088000 * 00089000 * 00090000 * ROSSTT: VERIFY EXISTENCE OF AN O/S OR DOS DATA SET AND TO 00091500 * VERIFY THAT THE ATTRIBUTES OF THE DATA SET ARE 00092000 * SUPPORETED UNDER CMS. 00092500 * 00093000 * ROSSTT GETS CONTROL FROM DMSSTT ONCE IT IS DETERMINED THAT 00093500 * THE STATE OPERATION IS TO AN O/S OR DOS FORMATTED DISK. 00094000 * THE ROSSTT ROUTINE WILL SEARCH FOR A MATCHING CMSCB OR DOSCB 00094500 * ASSOCIATED TO THE DATA SET VIA A PREVIOUS FILEDEF OR DLBL. 00095000 * THEN ROSSTT TRIES TO FIND IF THERE IS AN ACTIVE OSFST ASSO- 00095500 * CIATED WITH THE DATA SET. IF AN ACTIVE ONE IS FOUND, CONTROL 00096000 * THEN PASSES TO ROSSTRET, OTHERWISE THE DSNAME BLOCK IS BUILT, 00096500 * ITS ADDRESS IS PLACED IN THE CMSCB OR DOSCB, AS MAY BE, AND 00097000 * THE DATA SET NAME IS MOVED TO THE ACQURED BLOCK. THEN AN 00097500 * OSFST BLOCK IS ACQUIRED AND IS CHAINED TO THE OSFST CHAIN. 00098000 * THE ADDRESS OF THE OSFST BLOCK IS THEN PLACED IN THE CMSCB 00098500 * OR DOSCB AS MAY BE THE CASE. SOME FIELDS IN THE OSFST ARE 00099000 * INITIALIZED (DATA SET NAME, DISK ADDRESS, AND DISK MODE). 00099500 * NOW, THE FORMAT 1 DSCB FOR THE DATA SET IS READ AND A CHECK 00100000 * IS MADE FOR UNSUPPORTED OPTIONS ( READ PROTECT, BDAM, AND 00100500 * ISAM ). ERRORS CAUSE CONTROL TO BE PASSED TO THE CALLING 00101000 * ROUTINE WITH AN ERROR CODE. ALL EXTENTS OF THE DATA SET ARE 00101500 * GROUPED TOGETHER (BY READING THE FORMAT 3 DSCB IF NECESSARY) 00102000 * AND ARE CHECKED FOR VALIDITY. IF ANY USER LABELS EXITS, THEY 00102500 * ARE BYPASSED AND A MESSAGE IS ISSUED TO THAT EFFECT. 00103000 * NEXT, IF THE CMS/DOS ENVIRONMENT IS NOT ACTIVE, THE FORMAT 1 00103500 * LABEL FIELDS BLKSIZE, LRECL AND RECFM ARE MOVED TO THE OSFST 00104000 * AND CONTROL PASSES TO ROSSTRET. 00104500 * 00105000 * ROSSTRET: IF THE DISK IS NOT A DOS 00113000 * DISK CONTROL IS PASSED BACK TO THE CALLER. IF THE SPECIFIED 00114000 * DISK IS A DOS DISK, OS FST BLKSIZE, LRECL AND RECFM 00115000 * FIELDS THAT WERE NOT SPECIFIED IN THE DSCB1 ARE FILLED IN 00116000 * FROM THE CMSCB OR, IF THE CMSCB FIELDS ARE ZERO, THEY 00117000 * ARE DEFAULTED TO BLKSIZE= 32760, LRECL= 32760 AND RECFM= U. 00118000 * CONTROL IS THEN RETURNED TO THE CALLER. 00119000 * 00120000 * ROSRPS: READ NEXT RECORD OF OS DATA SET 00121000 * 00121500 * UPON ENTRY TO THE ROSRPS ENTRY POINT, THE READ ROUTINE 00122000 * CALLS CHKXTNT AND, IF THE CURRENT CCHHR IS XERO, SETXTNT 00123000 * TO INSURE THE CCHHR AND EXTENT BOUNDARIES ARE SET CORRECT. 00124000 * IT THEN CALLS DISKIO AND IF NECESSARY CHKSENSE AND 00125000 * GETALT TO READ THE NEXT RECORD. IF THERE ARE NO ERRORS 00126000 * OR IF AN UNRECOVERABLE ERROR WAS ENCOUNTERED, CONTROL 00127000 * IS RETURNED TO THE USER WITH EITHER A ZERO (I/O OK) 00128000 * OR AN EIGHTY (I/O ERROR) IN REG15. IF A RECOVERABLE 00129000 * ERROR IS ENCOUNTERED, THE CCW'S AND BUFFER POINTERS 00130000 * ARE UPDATED AS NECESSARY AND CHKXTNT AND DISKIO 00131000 * ARE RECALLED TO READ THE NEXT RECORD. 00132000 * 00133000 * 00134000 * ROSFIND: SET CCHHR TO POINT TO MEMBER SPECIFIED IN 00135000 * FCBMEMBR OR, IF FCBMVPDS BIT IS ON, SET CCHHR 00136000 * TO POINT TO NEXT MEMBER HIGHER THAN FCBMEMBR 00137000 * AND SET NEW MEMBER NAME IN FCBMEMBR. 00138000 * 00138500 * UPON ENTRY, ROSFND SETS UP A CCW TO SEARCH FOR A HIGHER 00139000 * MEMBER NAME IF THE FCBMVPDS BIT IS ON OR AN EQUAL 00140000 * MEMBER NAME IF THE FCBMVPDS BIT IS NOT ON. IT 00141000 * THEN CALLS SETXTNT, DISKIO AND IF NEEDED CHKSENSE, 00142000 * AND GETALT TO READ IN THE DIRECTORY BLOCK THAT CONTAINS 00143000 * THE MEMBER NAME REQUESTED. AFTER THE BLOCK HAS BEEN 00144000 * READ, IT IS SEARCHED FOR THE REQUESTED MEMBER NAME. 00145000 * IF THE MEMBER NAME IS NOT FOUND, AN ERROR CODE 4 IS 00146000 * PASSED BACK TO THE CALLER. IF AN I/O ERROR IS EN- 00147000 * COUNTERED TRYING TO READ THE PDS BLOCK, AN ERROR 00148000 * CODE 8 IS PASSED BACK TO THE CALLER. IF THE MEMBER 00149000 * NAME IS FOUND, TTRCNVRT IS CALLED TO CONVERT THE 00150000 * RELATIVE TRAK ADDRESS TO A CCHH AND THE ADDRESS OF THE 00151000 * MEMBER ENTRY IS PASSED BACK TO THE CALLER. 00152000 * 00153000 * 00154000 * ROSNTPTB: GET CURRENT TTR, SET CURRENT CCHHR TO TTR, 00155000 * BACKSPACE TO PREVIOUS RECORD 00156000 * 00156500 * UPON ENTRY TO ROSNTPTB, A CHECK IS MADE TO 00157000 * SEE IF A NOTE, POINT OR BSP FUNCTION HAS BEEN 00158000 * REQUESTED. IF REG 0 IS ZERO, A NOTE IS ASSUMED. 00159000 * THE NOTE ROUTINE CALLS CHRCNVRT TO CONVERT THE CCHH 00160000 * TO A RELATIVE TRACK AND RETURNS CONTROL TO THE 00161000 * CALLER WITH THE TTR IN REG 0. IF REG 0 WAS 00162000 * POSITIVE ON ENTRY TO DMSROS, A POINT IS ASSUMED 00163000 * AND A TTR IS LOADED FROM THE ADDRESS SPECIFIED IN 00164000 * R0 AND TTRCNVRT AND SETXTNT ARE CALLED TO CONVERT 00165000 * THE TTR TO A CCHHR AND CONTROL IS RETURNED TO THE 00166000 * CALLER. IF REG 0 WAS NEGATIVE ON ENTRY TO DMSROS, A 00167000 * BSP (BACKSPACE) IS ASSUMED. THE BACKSPACE CODE CHECKS 00168000 * IF THE CURRENT POSITION IS THE BEGINNING OF A TRACK. 00169000 * IF NOT, THE RECORD NUMBER IS DECREMENTED BY ONE AND 00170000 * CONTROL IS RETURNED TO THE CALLER. IF THE CURRENT 00171000 * POSITION IS THE BEGINNING OF A TRACK, CHRCNVRT IS 00172000 * CALLED TO GET THE CURRENT RELATIVE TRACK, THE RELATIVE 00173000 * TRACK IS DECREMENTED BY ONE AND TTRCNVRT IS CALLED 00174000 * TO GET THE CURRENT CCHH. RDCNT IS THEN CALLED TO 00175000 * GET THE CURRENT RECORD NUMBER OF THE LAST RECORD ON 00176000 * THE NEW TRACK, SETXTNT IS CALLED TO SET THE NEW EXTENT 00177000 * BOUNDARIES AND CONTROL IS RETURNED TO THE CALLER. 00178000 * 00179000 * 00180000 * ROUTINES COMMON TO ALL OF DMSROS: 00181000 * 00182000 * CHRCNVRT: CONVERTS A CCHH ADDRESS TO A RELATIVE TRACK 00183000 * ADDRESS. 00184000 * TTRCNVRT: CONVERTS A RELATIVE TRACK ADDRESS TO AN 00185000 * ACTUAL ADDRESS (CCHHR). 00186000 * 00187000 * CHKSENSE: IF A UNIT CHECK IS ENCOUNTERED, CHECKS 00188000 * SENSE BITS TO DETERMINE IF THE ERROR IS 00189000 * RECOVERABLE. 00190000 * 00191000 * CHKXTNT: CHECKS TO SEE IF END OF SPLIT CYL OR END OF 00192000 * ENTENT HAS BEEN REACHED AND IF SO UPDATES TO 00193000 * THE NEXT SPLIT CYL OR EXTENT. 00194000 * 00195000 * DISKIO: STARTS I/O ON CCW STRING VIA A DIAGNOSE X'20' 00196000 * 00197000 * GETALT: SWITCHES FROM ALTERNATE TRACK TO PRIME TRACK 00198000 * AND FROM PRIME TRACK TO ALTERNATE TRACK. 00199000 * 00200000 * RDCNT: READS COUNT FIELDS ON TRACK TO DETERMINE 00201000 * LAST RECORD NUMBER ON TRACK. 00202000 * 00203000 * SETXTNT: SET OSFSTEND TO END OF EXTENT AND, IF A NEW 00204000 * EXTENT IS SPECIFIED, SETS CCHHR TO THE START 00205000 * OF THE EXTENT. 00206000 * 00207000 * 00208000 *. 00209000 PRINT NOGEN 00210000 DMSROS CSECT @V201122 00211000 SPACE 1 00212000 USING NUCON,R0 @V201122 00213000 USING DMSROS,R11,R12 @V201122 00214000 USING DMSROS,R15 TEMP BASE REG @V201122 00215000 B ROSACC ACCESS O/S DISK @V201122 00216000 B ROSSTT STATE O/S DISK @V201122 00217000 B ROSRPS READ O/S DISK SEQUENTIALLY @V201122 00218000 B ROSFIND FIND MEMBER IN OS PDS @V201122 00219000 B ROSNTPTB GO TO NOTE BSP OR POINT ROUTINE @V201122 00220000 *************************************************************** 00221000 * 00222000 * READ VTOC'S FORMAT 4 DSCB TO COMPLETE ACCESS OF O/S DI 00223000 * 00224000 *************************************************************** 00225000 ROSACC STM R0,R14,SAVEREGS SAVE ALL REGISTERS @V201101 00226000 LR R5,R11 SET UP ADT BASE @V201101 00227000 LM R11,R12,BASE SET UP ADDRESSABILITY @V201101 00228000 DROP R15 @V201101 00229000 USING ADTSECT,R5 @V201101 00230000 * 00231000 L R1,ADTDTA GET DEVICE ADDR. POINTER @V201101 00232000 L R1,DTAD(,R1) GET DEVICE ADDRESS @V201101 00233000 ST R1,OSADTDSK SAVE DISK ADDRESS IN OSADT @V201101 00234000 SRL R1,16 CUU TO BOTTOM OF REG1 @V201101 00235000 * 00236000 MVC CCHHR(5),OSADTVTA GET VTOC ADDRESS @V201101 00237000 MVC SEEK+2(4),CCHHR SET SEEK ADDRESS @V201101 00238000 LA R0,RDDSCB4 GET CHANNEL PROG. @V201101 00239000 BAL R14,ACCESSIO READ FORMAT 4 DSCB @V201101 00240000 B ERR80 I/O ERROR EXIT @V201101 00241000 B ERR80 ILI OR SOMETHING WORSE @V201101 00242000 * 00243000 MVC OSADTVTB(5),DS4VTOCE+6 VTOC END EXTENT @VA05420 00243160 LA R8,RWL POINT TO READ/WRITE LIST @V305101 00243200 LA R9,OSL AND ASSUME O/S DISK @V305101 00243300 TM DS4VTOCI,DOSDASD+DS4VTOCX INDEXED VTOC ? @VA13649 00243500 BO GETCYLS YES, OS DISK @VA13649 00243700 TM DS4VTOCI,X'80' IS IT DOS FORMATTED DISK ? @V201101 00244000 BZ GETCYLS NO, IT IS O/S DISK @V305101 00245100 OI ADTFLG2,ADTFDOS SET DOS FLAG IN ADT @V201101 00246000 LA R9,DOSL POINT TO DOS DISK SUB. LIST @V305101 00246100 GETCYLS LH R1,DS4DEVSZ GET NO. CYLS IN DISK @V201101 00250000 ST R1,ADTCYL SAVE IN ADT FOR LATER USE @V201101 00251000 OI ADTFLG2,ADTFROS SET 2ND. FLAG TO INDICATE O/S@V201101 00253000 TM ADTFLG3,ADTFORCE USER WANTS DISK R/O ? @VM03092 00254100 BO MSG723 YES, LEAVE AS R/O THEN @V305101 00254200 CLM R7,B'0001',MRW IS DISK LINKED R/O ? @V305101 00254300 BNL MSG723 YES, LEAVE ADT ALONE @V305101 00254400 LA R8,1(,R8) ADJUST TO WRITE SUB. LIST @V305101 00254500 OI ADTFLG3,ADTFRWOS SIGNAL DOS/OS DISK R/W @V305101 00254600 EJECT 00254700 MSG723 NI ADTFLG1,ALL CLEAR FIRST FLAG BYTE @V305101 00254800 DMSERR TEXT='.. (...) R/.. - ...',LET=I,NUM=723,CSECT=ACC, *00254900 SUB=(CHARA,(ADTM,1),HEXA,OSADTDSK-2,CHARA,((R8),1), *00255000 CHARA,(R9)),RENT=NO,DOT=NO @V305101 00255100 EJECT 1 00258000 SR R1,R1 ... @V201101 00259000 LH R3,OSADTDSK SAVE DEVICE ADDR @V201101 00260000 DROP R5 @V201101 00261000 USING ADTSECT,R1 @V201101 00262000 * 00263000 ACCALSO L R15,VCADTNXT GET ADTNXT ADDRESS @VM03093 00264100 BALR R14,R15 GET NEXT ADT IN CHAIN @V201101 00265000 BNZ ACCRET NO MORE..RETURN @V201101 00266000 CR R1,R5 SAME ADT AS BEFORE @V201101 00267000 BE ACCALSO GET NEXT ONE THEN.. @V201101 00268000 * 00269000 CLC OSADTVTA(5),CCHHR SAME VOLUME ? @V201101 00270000 BNE ACCALSO NO..KEEP LOOKING @V201101 00271000 CH R3,OSADTDSK SAME DEVICE ADDRESS ? @V201101 00272000 BNE ACCALSO NO..KEEP LOOKING @V201101 00273000 LR R14,R1 SAVE REG. 1 @V201101 00274000 LA R2,ADTM GET FILEMODE ADDRESS @V201101 00275000 DMSERR TEXT='... ALSO = .. - ... DISK',LET=I,NUM=725,RENT=NO, *00276100 SUB=(HEX,(R3),CHARA,((R2),1),CHARA,(R9)), @V305101*00276200 CSECT=ACC,DOT=NO @V305101 00276300 LR R1,R14 RESTORE REG. 1 @V201101 00278000 B ACCALSO GET NEXT ADT IN CHAIN @V201101 00279000 * 00280000 ACCRET LM R0,R14,SAVEREGS RESTORE ALL REGS. @V201101 00281000 SR R15,R15 ZERO RETURN CODE @V201101 00282000 BR R14 RETURN TO CALLER @V201101 00283000 DROP R1 @V201101 00284000 USING ADTSECT,R5 @V201101 00285000 * 00286000 SPACE 2 00286100 MRW DC X'80' READ/WRITE INDICATOR @V305101 00286200 RWL DC CL2'OW' READ/WRITE MESSAGE SUBS. @V305101 00286300 OSL DC CL3'OS' O/S DISK MESSAGE SUBS. @V305101 00286400 DOSL DC CL3'DOS' DOS DISK MESSAGE SUBS. @V305101 00286500 ALL EQU 0 CONSTANT @V305101 00286510 EJECT 1 00287000 *************************************************************** 00288000 * 00289000 * READ AND VERIFY FORMAT 1 DSCB FOR DATA SET 00290000 * 00291000 *************************************************************** 00292000 USING DMSROS,R15 @V201122 00293000 ROSSTT STM R0,R14,SAVEREGS SAVE REGS @V201122 00294000 LM R11,R12,BASE SETUP BASE REGS @V201122 00295000 DROP R15 @V201122 00296000 XC INTREG14(4),INTREG14 CLEAR ERROR RETURN REG @V201122 00297000 NI ROSFLAG,255-DYNAMIC CLEAR DYNAMIC FLAG @VA09241 00297500 L R5,SAVEREGS+R11*4 SET ADT PTR FROM DMSLFS @V201122 00298000 LR R1,R2 POINT TO STATE PLIST @V201122 00299000 USING OPSECT,R1 @V201122 00300000 USING OSFST,R4 @V201122 00301000 LA R7,FCBFIRST LOOK FOR MATCHING FCB @V201105 00302000 USING FCBSECT,R7 @V201105 00303000 SR R4,R4 CLEAR OSFST REG @VM28889 00303100 TM DOSFLAGS,DOSSVC CMS/DOS ACTIVE FOR SVC ? @V305001 00303200 BZ OSLKP NO, USE CMSCB THEN... @V305001 00303300 LA R7,DOSFIRST IF ACTIVE, USE DOSCB FOR SEARCH @V305001 00303400 OSLKP CLC FCBNEXT+1(3),ZEROES ANY MORE FCB'S @V201105 00304000 BNE SRCHON NO, CHECK NEXT FCB @VM28889 00305100 LTR R4,R4 WAS AN FCB FOUND @VM28889 00305200 BZ FCBNTFND NO, GIVE ERROR MSG @VM28889 00305300 B ROSSTRT2 YES, THROUGH WITH STATE @VM28889 00305400 SRCHON ICM R7,B'0111',FCBNEXT+1 GET PTR TO NEXT FCB @VM28889 00305500 CLC FCBDSNAM(16),FILENAME FCB FN FT MATCH STATE P@V201105 00307000 BNE OSLKP NO, LOOK FOR ANOTHER FCB @V201105 00308000 CLI FCBDSMD,C'*' FCB FOR ALL MODES @V201105 00309000 BE FCBFND YES, USE IT @V201105 00310000 CLC FCBDSMD(1),ADTM FCB AND ADT MODES MATCH @V201105 00311000 BE FCBFND LIKEWISE OK @V201105 00312000 CLC FCBDSMD(1),ADTM+1 FCB AND ADT XTENTION MATCH@V201105 00313000 BNE OSLKP NO, LAST CHANCE @V201105 00314000 FCBFND ST R7,FCBSAVE SAVE FCB ADDRESS @V201122 00315000 L R4,FCBOSFST GET OS FST POINTER @V201105 00316000 LTR R4,R4 IS IT THERE @V201105 00317000 BZ DSKSRCH NO, MUST SEARCH VTOC @V201105 00318000 CLC OSFSTFM(1),ADTM FST AND ADT MODES MATCH @V201105 00319000 BE OSFSTFND YES, DATA SET FOUND @V201105 00320000 CLC OSFSTFM(1),ADTM+1 FST AND ADT XTENTION MATCH@V201105 00321000 BE OSFSTFND YES, DATA SET FOUND @V201105 00322000 XC FCBOSFST(4),FCBOSFST FCB HAS WRONG OS FST, TRY T@V201105 00323000 DSKSRCH CLC FCBOSDSN+1(3),ZEROES DOES OS DSN BLOCK EXIST@V201105 00324000 BNE FCBSET YES, SKIP DSNAME BUILD @V201105 00325000 DMSFREE DWORDS=6,TYPCALL=BALR,TYPE=USER GET DSNAME BLO@V201105 00326000 ST R1,FCBOSDSN POINT FCB TO IT @V201105 00327000 OI ROSFLAG,DYNAMIC DSN BLOCK CREATED @VA09241 00327500 MVI 0(R1),X'40' BLANCK DSNAME BLOCK @V201105 00328000 MVC 1(43,R1),0(R1) @V201105 00329000 MVC 0(8,R1),FCBDSNAM BUILD OS DSN FROM FN FT @V201105 00330000 OSNAMLP CLI 0(R1),X'40' BLANK ? @V201105 00331000 BE PERIOD YES, TIME FOR PERIOD @V201105 00332000 LA R1,1(0,R1) NEXT CHAR. @V201105 00333000 B OSNAMLP @V201105 00334000 PERIOD MVI 0(R1),C'.' INDICATE END OF 1ST QUALIFIER @V201105 00335000 MVC 1(8,R1),FCBDSTYP USE FTYPE AS 2ND QUALIFIER @V201105 00336000 FCBSET EQU * @VA08048 00336100 BLDOSFST DMSFREE DWORDS=OSFSTLTH,TYPE=NUCLEUS,TYPCALL=BALR @V201122 00345000 LA R4,ROSSTERR GET ADDRESS OF ROSST ERROR ROUTIN@V201122 00346000 ST R4,INTREG14 SET ERROR RETURN ADDRESS @V201122 00347000 LR R4,R1 SETUP NEW FST ADDRESS @V201122 00348000 XC 0(256,R4),0(R4) CLEAR 1ST PART OF FST BLOCK @V201122 00349000 XC 256(OSFSTLTH*8-256,R4),256(R4) CLEAR REST OF OSF@V201122 00350000 MVC OSFSTNXT(4),OSADTFST CHAIN NEW FST TO CHAIN @V201122 00351000 ST R4,OSADTFST RESTORE CHAIN @V201122 00352000 L R3,FCBOSDSN POINT TO FCB DSNAME BLOCK @V201105 00353000 MVC OSFSTDSN(44),0(R3) MOVE DSNAME TO OS FST @V201105 00354000 MVC OSFSTMEM,FCBMEMBR MOVE MEMBER NAMES TO OSFST @VA05385 00354100 MVC OSFSTDSK(4),OSADTDSK MOVE DISK CUU AND TYPE @V201105 00355000 MVC OSFSTFM(1),ADTM SET DISK MODE IN OSFST @V201105 00356000 MVC OSFSTFM+1(1),FCBDSMD+1 SET MODE NUMBER IN OSFS@V201105 00357000 MVC CCHHR(5),OSADTVTA SET SEEK TO VTOC START @V201105 00358000 LA R0,OSFSTDSN GET DSNAME ADDRESS @V201105 00359000 STCM R0,B'0111',ADDSNAME+1 SET DSNAME ADDR IN CCW @V201105 00360000 MVI OSFSTTRK+3,X'14' ASSUME 20 TRKS PER CYL @V201122 00361000 CLI OSFSTTYP+1,X'08' IS THIS 2314? @V201122 00362000 BE GOTDSN YES, CONTINUE @V201122 00363000 MVI OSFSTTRK+3,X'13' NO, 3330 19 TRKS PER CYL @V201122 00364000 CLI OSFSTTYP+1,X'09' IS THIS A 3330 ? @V2A2014 00364100 BE GOTDSN YES....BR @V2A2014 00364200 MVI OSFSTTRK+3,X'1E' 3350 30 TRACKS PER CYLINDER @V304498 00364240 CLI OSFSTTYP+1,TYP3350 IS THIS A 3350 ? @V304498 00364250 BE GOTDSN YES, READ FORMAT 1 DSCB @V304498 00364260 MVI OSFSTTRK+3,X'0F' 3380 15 TRACKS PER CYLINDER HRC004DS 00364270 CLI OSFSTTYP+1,X'0E' IS THIS A 3380 ? HRC004DS 00364280 BE GOTDSN YES, READ FORMAT 1 DSCB HRC004DS 00364290 MVI OSFSTTRK+3,X'0C' NO, 3340 12 TRKS PER CYL @V2A2014 00364300 GOTDSN LA R0,RDDSCB1 CHAN PROG TO READ FORMAT 1 DSCB @V201105 00365000 BAL R14,DISKIO GO GET EXTENTS OF THE DATA SET @V201105 00366000 B DSCB1UC UNIT CHECK DURING I/O @V201105 00367000 B CHKSLI CHECK FOR WRONG LENGTH @V201105 00368000 B GOTDSCB1 DATA SET EXISTS @V201105 00369000 DSCB1UC BAL R14,CHKSENSE GO CHECK SENSE DATA @V201105 00370000 TM SNSEBYTE,X'09' NO REC FND, OVERFLOW INC NOT@V201105 00371000 BNZ ERR80 BUT ONE OR BOTH WAS PRESENT @V201105 00372000 TM SNSEBYTE,X'20' WAS IT CYLINDER END @V201105 00373000 BZ DSCB1TRK NO, ASSUME TRACK CONDITION FOR NO@V201105 00374000 LA R8,ZEROES NEGATE INCRCYL TEST FOR SPLIT CYL@V201105 00375000 BAL R14,INCRCYL GO INCREMENT CYLINDER ADDRESS @V201105 00376000 CHKXTNT1 CLC CCHHR(4),OSADTVTB MUST NOT BE HIGHER THAN LAST @VA05574 00377100 BL GOTDSN GOOD, GO TRY NEXT CYLINDER @V201105 00378000 B DSNOTFND TOO HIGH, HAVE SCANNED WHOLE VTOC@V201105 00379000 CHKSLI CH R15,=H'3' WRONG LENGTH ERROR @V201105 00380000 BE DSNOTFND YES, OFF END OF VTOC - NO DATA SE@V201105 00381000 B ERR80 RETURN @V201105 00382000 DSCB1TRK BAL R14,GETALT ASSUME TRACK BAD, GET ALTERNATE @V201105 00383000 B GOTDSN SWITCHING TO ALTERNATE, CONTINUE @V201105 00384000 B CHKXTNT1 BACK TO NEXT PRIME TRACK, GO CHEC@V201105 00385000 GOTDSCB1 CLC NEXTSEEK(4),OSADTVTB WAS RECORD FOUND WITHIN LIM@VA05781 00386000 BH DSNOTFND NO, ERROR @V201105 00387000 CLI DS1FMTID,C'1' IS DSCB1 ID PRESENT @V201105 00388000 BE CHKMULTI YES, CONTINUE @V201105 00389000 B ERR80 RETURN @V201105 00390000 SPACE 2 00391000 *************************************************************** 00392000 * 00393000 * VERIFY ALLOWABLE ATTRIBUTES OF THE DATA SET 00394000 * 00395000 *************************************************************** 00396000 CHKMULTI CLC DS1VOLSQ(2),=H'1' IS VOL SEQUENCE ONE @V201105 00397000 BE CHK4LAST YES, GO COUNT VOLUMES @V201105 00398000 MULTIVOL OI OSFSTFLG,OSFSTMVL INDICATE MUTIPLE VOL. DATA S@V201105 00399000 SR R9,R9 CLEAR R9 @V201105 00400000 IC R9,DS1VOLSQ+1 GET VOL. SEQ. NO. @V201105 00401000 L R2,FCBOSDSN POINT TO DSN @V201105 00402000 DMSERR TEXT='PROCESSING VOLUME ''..'' IN DATA SET ''..........X00403000 ..................................''',CSECT=STT, X00404000 NUM=227,LET=I,SUB=(HEX,(R9),CHARA,(R2)),RENT=NO @V201105 00405000 B CHKPASS CONTINUE @V201105 00406000 CHK4LAST TM DS1DSIND,X'80' IS THIS THE LAST (ONLY) VOLUME @V201105 00407000 BZ MULTIVOL NO, CANNOT STAND IT ANY LONGER @V201105 00408000 CHKPASS TM DS1DSIND,X'14' CHECK PASSWORD INDICATORS @V201105 00409000 BNM CHK4ISBD BOTH ON OR OFF IS OK @V201105 00410000 LA R15,81 READ, WRITE PROTECTED @V201105 00411000 B ERRRET ALL DONE @V201105 00412000 CHK4ISBD TM DS1DSORG,PS+PO SEQUENTIAL OR PARTITIONED @V201105 00413000 BM CHKMOVBL OKAY IF EITHER @V201105 00414000 CLC FCBPROC(4),=CL4'DLBL' IS THIS A DOSCB ? @V305001 00414100 BE CHKMOVBL YES, IGNORE DSORG @V305001 00414200 ERR82 EQU * @VA11533 00414300 BADORG LA R15,82 ISAM, BDAM ERROR CODE @V201105 00415000 B ERRRET @V201105 00416000 CHKMOVBL TM DS1DSORG,X'01' IS DATA SET UNMOVEABLE @V201105 00417000 BZ MOVABLE NO, CONTINUE @V201105 00418000 OI OSFSTFLG,OSFSTUMV INDICATE UNMOVEABLE IN FST @V201105 00419000 MOVABLE TM ADTFLG2,ADTFDOS DOS FORMATTED DISK ? @V201105 00420000 BO GETEXTNT YES, BYPASS RECFM CHECK @V201105 00421000 TM DS1RECFM,UND TEST FOR RECFM F OR V @V201105 00422000 BZ ERR82 ERROR IF NOT RECFM F, V OR UND @VA11533 00423000 SPACE 2 00424000 *************************************************************** 00425000 * 00426000 * GET ALL EXTENTS TOGETHER BY READING FORMAT 3 DSCB IF 00427000 * NECESSARY 00428000 * 00429000 *************************************************************** 00430000 GETEXTNT SR R9,R9 CLEAR @V201105 00431000 IC R9,DS1NOEPV GET NUMBER OF EXTENTS ON PACK @V201105 00432000 LTR R9,R9 TEST FOR VALID NUMBER @V201105 00433000 BNP ERR83 INVALID EXTENTS - ERROR RC83 @VA11533 00434000 STC R9,OSFSTXNO SET NO. EXTENTS IN FST @V201105 00435000 CLC DS1NOEPV(1),THREE HOW MANY DATA EXTENTS? @VA06195 00435300 BL GOTDSCB3 LESS THAN 3 @VA06195 00435600 BH GETADR3 MORE THAN 3 @VA06195 00435900 CLI DS1EXT1,USERLBL IF 3 PLUS USER LABEL, GET @VA06195 00436200 * FORMAT 3 DSCB FOR LAST EXTENT 00436500 BNE GOTDSCB3 NO FORMAT 3 DSCB NEEDED @VA06195 00436800 GETADR3 EQU * @VA06195 00437100 MVC CCHHR(5),DS1PTRDS ADDR OF FORMAT 3 DSCB @V201105 00438000 NI OSFSTFLG,255-OSFSTALT ALT TRK SW OFF @V201105 00439000 CLI DS1NOEPV,16 MORE THAN 16 EXTENTS? @V201122 00440000 BNH GETDSCB3 NO, CONTINUE @V201122 00441000 ERR83 EQU * @VA11533 00442000 LA R15,83 INDICATE DOS DISK WITH < 16 EXTEN@V201122 00444000 B ERRRET RETURN WITH ERROR CODE @V201122 00445000 GETDSCB3 LA R0,RDDSCB3 CHAN PROG TO READ FORMAT 3 DSCB @V201105 00446000 LA R14,OSFSTEX4 PLUG CCW TO READ XTRA EXTENTS @V201105 00447000 STCM R14,B'0111',XTENTS+1 @V201105 00448000 BAL R14,DISKIO GO GET MORE EXTENTS FROM VTOC @V201105 00449000 B DSCB3UC UNIT CHECK ON I/O, GO CHECK IT OU@V201105 00450000 B ERR80 IL OR UE IS ERROR @V201105 00451000 CLI OSFSTEX4+44,C'3' VALID FORMAT 3 @V201105 00452000 BE DSCB3OK YES, SO FAR ANYWAY @V201105 00453000 B ERR80 INVALID FORMAT 3 - ERROR RC80 @VA11533 00454000 DSCB3UC BAL R14,CHKSENSE GO CHECK FOR BAD SENSE BITS @V201105 00455000 DSCB3TRK TM SNSEBYTE,X'29' ANY BUT TRACK COND IS A NO-NO @V201105 00456000 BNZ ERR80 RETURN @V201105 00457000 BAL R14,GETALT GO SWITCH TO ALTERNATE TRACK @V201105 00458000 B GETDSCB3 HAVE SWITCHED SATISFACTORILY @V201105 00459000 B ERR80 THIS INSTRUCTION SHOULD NEVER BE @V201105 00460000 DSCB3OK MVC OSFSTEX4(40),OSFSTEX4+4 @V201105 00461000 MVC OSFSTEX4+40(90),OSFSTEX4+45 NEXT 13 XTENTS @V201105 00462000 SPACE 2 00463000 *************************************************************** 00464000 * 00465000 * CHECK VALIDITY OF FIRST EXTENT 00466000 * 00467000 *************************************************************** 00468000 GOTDSCB3 MVC OSFSTXTN(30),DS1EXT1 ADD 1ST 3 XTENTS TO LI@V201105 00469000 LA R8,OSFSTXTN POINT TO THEM @V201105 00470000 CLI 0(R8),0 IS EXTENT VALID @V201105 00471000 BE ERR80 NO, ERROR @V201105 00472000 CLI 0(R8),X'40' TEST FOR USER LABELS IN DATA SET @V201105 00473000 BH BLKSZ NO, OK IF 80 OR 81 @V201105 00474000 BL XTNTOK2 CONTINUE @V201105 00475000 MVC OSFSTXTN(159),OSFSTXTN+10 COMPRESS OUT LABEL @V201105 00476000 L R14,FCBOSDSN POINT TO DSN @V201105 00477000 DMSERR TEXT='USER LABELS BYPASSED ON DATA SET ''..............X00478000 ..............................''',CSECT=STT, @V201105X00479000 NUM=228,LET=I,SUB=(CHARA,(R14)) @V201105 00480000 CLI DS1NOEPV,16 SIXTEEN EXTENTS ? @V2A3801 00481100 BL BLKSZ NO, CHECK BLOCK & LRECL @V2A3801 00481200 LA R15,83 INDICATE OVER 16 EXTENTS @V2A3801 00481300 B ERRRET RETURN WITH ERROR CODE @V2A3801 00481400 XTNTOK2 CLI 0(R8),1 IS IT A DATA SET EXTENT @V201105 00482000 BNE ERR80 NO, BAD NEWS @V201105 00483000 SPACE 2 00484000 *************************************************************** 00485000 * 00486000 * CHECK BLOCK AND RECORD SIZES OF DATA SET 00487000 * 00488000 *************************************************************** 00489000 BLKSZ MVC OSFSTRFM(1),DS1RECFM SET RECFM IN FST @V201122 00490000 LH R8,DS1LRECL GET LRECL FROM DSCB @V201122 00491000 MVC OSFSTBLK(2),DS1BLKL SAVE DSCB BLOCK SIZE @V201122 00492000 BLKSZ1 CLC FCBPROC(4),=CL4'DLBL' IS THIS A DOSCB ? @V305001 00492500 BE ROSSTRET YES, NO MORE CHECKING THEN.. @V305001 00493000 LH R9,OSFSTBLK GET BLOCK SIZE @V305001 00493500 LTR R9,R9 TEST SIZE @V201122 00494000 BP BLKSZOK1 OK, LESS THAN 32K BLOCKS @V201122 00495000 TM ADTFLG2,ADTFDOS DOS FORMATED DISK? @V201122 00496000 BNO ERR82 INVALID BLKSIZE FOR OS D.S. RC82 @VA11533 00497000 OI OSFSTFLG,OSFSTDBK DOS DSCB BLKSIZE IS EMPTY @V201122 00498000 BLKSZOK1 TM ADTFLG2,ADTFDOS DOS DISK? @V201122 00499000 BNO BLKSZOK2 NO, CONTINUE @V201122 00500000 MVC OSFSTRFM(1),FCBRECFM SET RECFM IN FST @V201122 00501000 CLI OSFSTRFM,0 RECFM SPECIFIED? @V201122 00502000 BNE CKDOSBLK NO, CONTINUE @V201122 00503000 OI OSFSTRFM,UND INDICATE UNDEFINED @V201122 00504000 CKDOSBLK TM OSFSTFLG,OSFSTDBK DOS BLKSIZE IN DSCB? @V201122 00505000 BNO SETLRL YES, CONTINUE @V201122 00506000 LH R9,FCBBLKSZ GET FCB BLKSIZE @V201122 00507000 LTR R8,R9 IS IT ZERO @V201122 00508000 BNZ BLKSZOK2 NO, CONTINUE @V201122 00509000 LH R9,=H'32760' USE 32,760 FOR DEFAULT @V201122 00510000 SETLRL LR R8,R9 USE BLKSIZE FOR LRECL @V201122 00511000 BLKSZOK2 ST R8,OSFSTLRL SET FST LRECL @V201105 00512000 STH R9,OSFSTBLK SET FST BLKSI @V201105 00513000 LH R9,FCBLRECL GET USER SPECIFIED LRECL @V2A3801 00514100 LTR R9,R9 ANYTHING THERE ? @V2A3801 00514200 BNP CKDOSRFM NO, CONTINUE @V2A3801 00514300 ST R9,OSFSTLRL SET FST LRECL @V2A3801 00514400 CKDOSRFM MVI OSFSTFVF,C'V' SET VARIABLE FLAG @V2A3801 00514500 TM OSFSTRFM,VAR VAR OR UND SPECIFIED @V201105 00515000 BZ OSFSTFXD NO, ASSUME FIXED @V2A3801 00516100 TM OSFSTRFM,UND UNDEFINED ? @V2A3801 00516200 BO ROSSTRET YES, CONTINUE @V2A3801 00516300 LH R9,FCBLRECL USER SPECIFIED LRECL ? @V2A3801 00516400 LTR R9,R9 ... @V2A3801 00516500 BP ROSSTRET YES, CONTINUE @V2A3801 00516600 SH R8,=H'4' SUBTRACT BDW FROM LRECL @V2A3801 00516700 ST R8,OSFSTLRL AND SAVE IN OSFST LRECL @V2A3801 00516800 B ROSSTRET CONTINUE @V2A3801 00516900 OSFSTFXD MVI OSFSTFVF,C'F' SET FIXED FLAG @V2A3801 00517000 B ROSSTRET RETURN TO CALLER @V201105 00518000 OSFSTFND TM ADTFLG2,ADTFDOS DOS DISK? @V201122 00519000 BO BLKSZ1 YES, SET BLOCKSIZE AND RECFM @V201122 00520000 ROSSTRET NI OSFSTFLG,255-OSFSTALT CLEAR ALTERNATE FLG @V201122 00521000 L R7,FCBSAVE RETORE FCB POINTER @V201122 00522000 ST R4,FCBOSFST PUT OS FST ADDRESS IN FCB @V201122 00523000 ST R4,SAVEREGS+R5*4 SET OSFST ADDR FOR DMSLFS @V201122 00524000 LA R9,FCBOP GET FCB PLIST ADDR @VM28889 00525100 SR R1,R1 CLEAR REG1 FOR INSERT @VM28889 00525200 ICM R1,B'0111',SAVEREGS+R2*4+1 GET PLIST ADDRESS @VM28889 00525300 CR R1,R9 PLIST IN THIS FCB? @VM28889 00525400 BNE OSLKP NO, CHECK FOR MORE MATCHES @VM28889 00525500 ROSSTRT2 B CLR15RET RETURN TO CALLER @VM28889 00525600 SPACE 1 00526000 ROSSTERR LR R1,R4 SETUP TO FREE OSFST @V201122 00527000 LR R8,R15 SAVE RETURN CODE @V201122 00528000 MVC OSADTFST(4),OSFSTNXT REMOVE OSFST FROM CHAIN @V201122 00529000 DMSFRET DWORDS=OSFSTLTH,LOC=(1),TYPCALL=BALR @V201122 00530000 TM ROSFLAG,DYNAMIC DSN BLOCK CREATED @VA09241 00530100 BZ ROSSTER1 NO , PROCEED @VA09241 00530200 L R1,FCBOSDSN ADDRESS OF DSN BLOCK @VA09241 00530300 DMSFRET DWORDS=6,LOC=(1),TYPCALL=BALR @VA09241 00530400 XC FCBOSDSN,FCBOSDSN UNCHAIN THE DSN BLOCK @VA09241 00530500 ROSSTER1 DS 0H @VA09241 00530600 LR R15,R8 SETUP RETURN CODE @V201122 00531000 B ROSRET RETURN TO CALLER @V201122 00532000 EJECT 1 00533000 *************************************************************** 00534000 * 00535000 * SETUP TO READ DATA SET OR PDS DIRECTORY 00536000 * 00537000 *************************************************************** 00538000 USING DMSROS,R15 @V201122 00539000 ROSRPS STM R0,R14,SAVEREGS SAVE REGS @V201122 00540000 LM R11,R12,BASE SETUP BASE REGS @V201122 00541000 USING FCBSECT,R15 @V201122 00542000 XC INTREG14(4),INTREG14 CLEAR INTERNAL RETURN REG @V201122 00543000 L R15,SAVEREGS+R11*4 GET FCB DSECT BASE @V201122 00544000 L R4,FCBOSFST GET POINTER TO OS FST @V201122 00545000 LTR R4,R4 IS POINTER ZERO @V201122 00546000 BZ FCBNTFND YES, FCB NOT FOUND - ERROR RC88 @VA11533 00547000 LA R8,OSFSTXTN 1ST XTENT @V201122 00548000 SR R9,R9 CLEAR REG FOR INSERT @V201122 00549000 IC R9,OSFSTXNO GET NO. OF EXTENTS @V201122 00550000 MVC CCHHR(5),OSFSTCHR SET RECORD PTR @V201122 00551000 NI OSFSTFLG,255-OSFSTALT TURN ALT TRK FLAG OFF @VM28935 00551100 XC OSFSTNTE(5),OSFSTNTE SETUP AREA FOR NOTE AFTER O@V201122 00552000 CLC CCHHR(5),ZEROES DISK ADDR ZEROES @V201122 00553000 BNE NXTREAD NO, DON'T SET EXTENT @V201122 00554000 MVC OSFSTEND(5),ZEROES ZERO EXTENT BOUNDARY @V201122 00556000 NI OSFSTFLG,255-OSFSTRSW TURN OFF POINT+1 SWITCH@V201122 00557000 BAL R10,SETXTNT SET TO START OF EXTENT @V201122 00558000 NXTREAD L R1,SAVEREGS+R1*4 GET PLIST BASE REG @V201122 00559000 L R6,FILEBYTE GET READ COUNT @V201122 00560000 L R7,FILEBUFF GET BUFFER ADDR @V201122 00561000 STCM R7,B'0111',READCCW+1 SET BUFFER ADDRESS @V201122 00562000 STH R6,READCCW+6 PUT LENGTH INTO COUNT FIELD @V201122 00563000 NXTREAD2 BAL R14,CHKXTNT INSURE VALID SEEK ARG BEFORE I/O @V201122 00564000 B CKRDSKIP GOOD, RECORD IS WITHIN EXTNET @V201122 00565000 B CKRDSKIP NEW EXTENT AVAILABLE, GO USE IT @V201122 00566000 B EOF SIMULATE EOF @V201122 00567000 CKRDSKIP LA R0,READBLK SETUP FOR NORMAL READ @V201122 00568000 TM OSFSTFLG,OSFSTRSW POINT+1 SPECIFIED? @V201122 00569000 BNO DOREAD NO, DO A NORMAL READ @V201122 00570000 LA R0,READSKIP SETUP TO DO A READ DATA SKIP @V201122 00571000 B GOREAD BYPASS OSFSTNTE SAVE @V201122 00572000 * READ A BLOCK AND CONFIRM THAT I/O ENDED SATISFACTORILY 00573000 DOREAD CLC OSFSTNTE(5),ZEROES IS NOTE FIELD SPECIFIED @V201122 00574000 BNE GOREAD YES, GO DO READ @V201122 00575000 MVC OSFSTNTE(5),CCHHR SAVE CCHHR ADDRESS @V201122 00576000 GOREAD L R15,SAVEREGS+R11*4 GET FCB BASE REG @VM08817 00577000 MVC MEMBER(8),FCBOP SAVE FCBOP @VM08817 00577040 MVC FCBOP(5),CCHHR SAVE CCHHR @VM28935 00577060 LA R1,FCBOP READ NEXT CCHHR INTO FCBOP @VM08817 00577080 STCM R1,B'0111',READCHR+1 SET CCHHR ADDR IN CCW @VM08817 00577120 STCM R1,B'0111',READCHR1+1 SET CCHHR ADDR IN CCW @VM28920 00577130 STCM R1,B'0111',READCHR2+1 SET CCHHR ADDR IN CCW @VM28920 00577140 BAL R14,DISKIO GO DO I/O @VM08817 00577160 BAL R1,SETCHR SET CCHHR IN NEXTSEEK @VM08817 00577200 BAL R1,SETCHR SET CCHHR IN NEXTSEEK @VM08817 00577240 BAL R1,SETCHR SET CCHHR IN NEXTSEEK @VM08817 00577280 SETCHR LA R1,0(R1) CLEAR HIGH BYTE @VM08817 00577320 LA R14,0(R14) CLEAR HIGH ORDER BYTE @VM08817 00577360 SR R1,R14 GET DISPLACEMENT IN BRANCH TBL @VM08817 00577400 L R15,SAVEREGS+R11*4 GET FCB BASE REG @VM08817 00577440 MVC NEXTSEEK(8),FCBOP SAVE NEXTSEEK FIELD @VM08817 00577480 MVC FCBOP(8),MEMBER RESORE FCBOP FIELD @VM08817 00577520 BALR R15,R0 GET ADDR OF *+4 @VM08817 00577560 AR R15,R1 GET BRANCH TBL ADDR @VM08817 00577600 BR R15 BRANCH IN BRANCH TABLE @VM08817 00577640 DROP R15 @VM08817 00577680 B BLKUC UNIT CHECK IN STATUS OF I/O @V201122 00578000 B CHK4UE NO UC, GO CHECK FOR UNIT EXCEPTIO@V201122 00579000 B GOTBLK GOOD RETURN @V201122 00580000 BLKUC MVC RESIDUAL(2),CSW+6 SAVE RESIDUAL COUNT IN CCW @V201122 00581000 BAL R14,CHKSENSE TIME TO GO LOOK AT THE SENSE INFO@V201122 00582000 TM SNSEBYTE,X'08' NO RECORD FOUND @V201122 00583000 BO ERR80 TOO BAD @V201122 00584000 TM SNSEBYTE,X'02' WAS IT A TRACK CONDITION CHECK @V201122 00585000 BNZ BLKUC3 YES @V201122 00586000 TM SNSEBYTE,X'20' WAS IT END OF CYLINDER @V201122 00587000 BO BLKUC2A YES, INCREMENT CYL @V201122 00588000 TM SNSEBYTE,X'04' FILE PROTECT ERROR @V201122 00589000 BZ ERR80 NO, THEN INDICATE ERROR @V201122 00590000 LA R14,TSTOVRFL-4 SET RETURN ADDR TO RETURN TO TSTO@V201122 00591000 B UPTRK UP TRACK INDICATOR @V201122 00592000 BLKUC2A BAL R14,INCRCYL ADJUST SEEK ARG. TO NEXT CYL. @V201122 00593000 B TSTOVRFL CONTINUE @V201122 00594000 BLKUC3 BAL R14,GETALT2 TRK COND, GO GET ALTERNATE @V201122 00595000 BC 0,0(R0) NOP @V201122 00596000 TSTOVRFL TM SNSEBYTE,X'01' WAS OVERFLOW INCOMPLETE SET @V201122 00597000 BZ NXTREAD2 NO, ALL SET FOR RESTART @V201122 00598000 TM OSFSTRFM,X'20' OVERFLOW SPECIFIED @V201122 00599000 BNO ERR80 NO, THEN ERROR @V201122 00600000 TM OSFSTFLG,OSFSTRSW CONTINUE POINT+1 @V201122 00601000 BO NXTREAD2 CONTINUE READ DATA SKIP @V201122 00602000 LH R15,READCCW+6 GET ATTEMPTED READ SIZE @V201122 00603000 SH R15,NEXTSEEK+6 GET RESIDUAL COUNT @V201122 00604000 BZ ERR80 NO RESIDUAL AND INCOMPLETE THEN E@V201122 00605000 STH R15,READCCW+6 NEW LENGTH FOR CONTINUATION READ @V201122 00606000 LR R14,R6 BLKSIZE @V201122 00607000 SR R14,R15 MINUS RESIDUAL IS LENGTH READ SO @V201122 00608000 AR R14,R7 BUMP UP BUFFER ADDRESS @V201122 00609000 STCM R14,B'0111',READCCW+1 SET BUFFER ADDRESS @V201122 00610000 B NXTREAD2 GO START READ FOR NEXT SEGMENT @V201122 00611000 RDSKIPOK NI OSFSTFLG,255-OSFSTRSW FINISHED WITH READ SKIP@V201122 00612000 SR R15,R15 CLEAR FOR INSERT @V201122 00613000 IC R15,NEXTSEEK+4 GET RECORD NO. @V201122 00614000 BCTR R15,R0 DECREMENT BY ONE @V201122 00615000 STC R15,NEXTSEEK+4 REPLACE RECORD NO. @V201122 00616000 MVC CCHHR(5),NEXTSEEK SETUP NEW CCHHR ADDRESS @V201122 00617000 B NXTREAD2 GO DO READ DATA @V201122 00618000 CHK4UE TM OSFSTFLG,OSFSTRSW READ SKIP SPECIFIED? @V201122 00619000 BO RDSKIPOK YES, THEN EOF WAS ON READ SKIP @V201122 00620000 TM CSW+4,X'01' DID WE GET UNIT EXCEPTION @V201122 00621000 BO EOF YES @V201122 00622000 * SAVE POINTER TO NEXT BLOCK 00623000 GOTBLK TM OSFSTFLG,OSFSTRSW READ SKIP SPECIFIED? @V201122 00624000 BO RDSKIPOK THEN ONLY READ SKIP COMPLETE @V201122 00625000 MVC OSFSTCHR(5),NEXTSEEK SAVE DISK BLOCK ADDRES@V201122 00626000 SH R6,CSW+6 SUB RESIDUAL= LENGTH READ @V201122 00627000 L R1,SAVEREGS+R1*4 GET PLIST ADDRESS @V201122 00628000 ST R6,FILEREAD SAVE READ COUNT @V201122 00629000 * 00630000 * RETURN TO CALLER 00631000 * 00632000 CLR15RET SR R15,R15 CLEAR RETURN CODE @V201122 00633000 B ROSRET @V201122 00634000 INTRETRN L R14,INTREG14 GET INTERNAL RETURN REG @V201122 00635000 XC INTREG14(4),INTREG14 CLEAR INTERNAL RETURN A@V201122 00636000 LTR R14,R14 DID AN ROS RTN BR TO ANOTHER ROS @V201122 00637000 BCR 7,R14 YES, RETURN TO 1ST ROS RTN @V201122 00638000 ROSRET EQU * @V201122 00638500 NI ROSFLAG,255-DYNAMIC DSN BLOCK NOT CHAINED @VA09241 00639000 LM R0,R14,SAVEREGS RESTORE REGS @V201122 00639500 BR R14 RETURN @V201122 00640000 INTREG14 DS 1F SAVE AREA FOR ROS INTERNAL CALLS @V201122 00641000 SAVEREGS DS 15F SAVE AREA @V201122 00642000 BASE DC A(DMSROS) 1ST BASE REG @V201122 00643000 ADMSROS2 DC A(DMSROS+4096) 2ND BASE REG @V201122 00644000 SPACE 2 00645000 *************************************************************** 00646000 * 00647000 * I/O SUBROUTINE 00648000 * 00649000 *************************************************************** 00650000 DISKIO TM OSFSTFLG,OSFSTALT I/O TO ALTERNATE TRACK @V201105 00651000 BO ALTIO YES, SEEK ALREADY SET @V201105 00652000 L R1,CCHHR GET SEARCH INFO @V201105 00653000 ST R1,SEEK+2 AND USE IT FOR SEEKING AS WELL @V201105 00654000 ST R1,NEXTSEEK SAVE TRACK ADDRESS CURRENTLY IN V@V201105 00655000 ALTIO LH R1,OSFSTDSK GET DISK ADR (CUU) @V201105 00656000 ACCESSIO XC CSW(8),CSW RESET CSW @V201105 00657000 DC X'83100020' CALL CP FOR DISK I/O @V201105 00658000 BC 8,8(R14) NORMAL COMPLETION, RETURN+8 @V201105 00659000 BC 4,ERR80 DISK NOT ATTACHED @V201105 00660000 BC 2,4(R14) INCOR. LGTH. OR UNIT EXCEPT. @V201105 00661000 STH R0,SNSEDATA UNIT CHK, SAVE 1ST 2 SENSE BYTES @V201105 00662000 B 0(R14) RETURN+0 @V201105 00663000 SPACE 2 00664000 * SEARCH DIRECTORY ON DASD FOR PROPER BLOCK 00665000 USING DMSROS,R15 TEMP BASE REG @V201122 00666000 ROSFIND STM R0,R14,SAVEREGS SAVE REGS @V201122 00667000 LM R11,R12,BASE GET BASE REGS @V201122 00668000 USING FCBSECT,R15 FCB BASE REG @V201122 00669000 L R15,SAVEREGS+R11*4 GET FCB BASE REG @V201122 00670000 MVC MEMBER(8),0(R9) GET MEMBER NAME @V201122 00671000 MVI SRCHMEM,MEMHGHEQ SEARCH HIGH OR EQUAL @V201122 00672000 TM FCBIOSW2,FCBMVPDS MOVE PDS OPTION SPECIFIED @V201122 00673000 BNO SETERRET NO, CONTINUE @V201122 00674000 MVI SRCHMEM,MEMHIGH SEARCH HIGH @V201122 00675000 SETERRET L R4,FCBOSFST GET OS FST BASE REG @V201122 00676000 NI OSFSTFLG,255-OSFSTRSW TURN OFF POINT+1 SWITCH@V201122 00677000 XC OSFSTNTE(5),OSFSTNTE CLEAR NOTE INDICATOR @V201122 00678000 LA R15,FINDIOER GET ADDRESS OF FIND ERROR RETURN @V201122 00679000 ST R15,INTREG14 SET ERROR RETURN REG @V201122 00680000 LTR R4,R4 FST BASE OK @V201122 00681000 BCR 8,R15 NO, INDICATE ERROR @V201122 00682000 LA R8,OSFSTXTN SET TO 1ST XTENT @V201122 00683000 SR R9,R9 CLEAR REG FOR INSERT @V201122 00684000 IC R9,OSFSTXNO GET NO. OF EXTENTS @V201122 00685000 BAL R10,SETXTNT CHECK 1ST XTENT FOR ERRORS @V201122 00686000 GOTMEMBR LA R0,RDPDSD DIRECTORY SEARCHING CHANNEL PROG @V201122 00687000 BAL R14,DISKIO LET'S READ THE PDS DIRECTORY @V201122 00688000 B PDSUC UNIT CHECK ON READ @V201122 00689000 B FINDIOER RETURN WITH ERROR CODE @V201122 00690000 B GOTMEM1 YES, MEMBER BLOCK FOUND @V201122 00691000 PDSUC BAL R14,CHKSENSE GO SEE WHAT HAPPENED @V201122 00692000 TM SNSEBYTE,X'09' NO REC OR OVERFLOW INC NOT ALLOWE@V201122 00693000 BNZ FINDIOER TOO BAD @V201122 00694000 TM SNSEBYTE,X'20' WAS IT END OF CYLINDER @V201122 00695000 BZ PDSERRTK NO, MUST BE A BAD TRACK @V201122 00696000 BAL R14,INCRCYL GO GET TO NEXT CYLINDER @V201122 00697000 PDSCHKX BAL R14,CHKXTNT SEE IF NEW CCHHR WITHIN EXTENT @V201122 00698000 B GOTMEM2 GO TRY AGAIN WITH NEXT CYL, SAME @V201122 00699000 B GOTMEM2 CONTINUE WITH FIRST CYL OF NEXT E@V201122 00700000 B NOTFOUND NO MORE EXTENTS @V201122 00701000 PDSERRTK BAL R14,GETALT GET ALTERNATE TRACK @V201122 00702000 B GOTMEM2 RETRY I/O ON ALTERNATE @V201122 00703000 B PDSCHKX RESTART ON NEXT PRIME TRACK IF OK@V201122 00704000 GOTMEM1 MVC CCHHR(4),NEXTSEEK SETUP WITH FOUND RECORD ADDR@V201122 00705000 BAL R14,CHKXTNT SEE IF FOUND REC WITHIN EXTENT @V201122 00706000 B MEMFOUND GOOD NEWS @V201122 00707000 B GOTMEM2 NO, TRY NEXT EXTENT @V201122 00708000 B NOTFOUND NO, AND END OF DATA SET FOUND @V201122 00709000 GOTMEM2 CLI NEXTSEEK+5,8 IS KEY LENGTH STILL 8 @V201122 00710000 BE GOTMEMBR YES, CONTINUE WITH I/O @V201122 00711000 B NOTFOUND NO, LABEL TELLS IT ALL @V201122 00712000 SPACE 2 00713000 * SEARCH THROUGH PDS DIRECTORY BLOCK FOR CORRECT ENTRY 00714000 MEMFOUND L R15,SAVEREGS+R11*4 GET FCB BASE REG @V201122 00715000 L R3,=A(PDSBLK) POINT TO PDS INFO READ IN @V201122 00716000 LH R2,0(,R3) GET LENGTH USED IN BLOCK @V201122 00717000 LA R1,2 DUMMY LENGTH @V201122 00718000 CR R2,R1 TEST LENGTH VALIDITY @V201122 00719000 BNH FINDIOER NO GOOD @V201122 00720000 C R2,=F'256' MAXIMUM LENGTH ALLOWED @V201122 00721000 BNH PDSCONT OK @V201122 00722000 B ERR80 QUIT RIGHT NOW @V201122 00723000 PDSCONT AR R1,R3 BUMP TO FIRST VALID BYTE @V201122 00724000 AR R3,R2 POINT TO END OF THE DIRECTORY BLO@V201122 00725000 BCTR R3,0 BACK UP ONE BYTE FOR BXLE USE @V201122 00726000 CLCMEMBR CLC 0(8,R1),MEMBER IS THIS THE ENTRY WE WANT @V201122 00727000 BH NEWMEM MAYBY, CHECK PDS OPTION @V201122 00728000 BL CKNXTMEM NO, CHECK NEXT MEMBER @V201122 00729000 TM FCBIOSW2,FCBMVPDS IS PDS MOVE IN EFFECT @V201122 00730000 BNO MEMFND NO, THEN WE HAVE MEMBER @V201122 00731000 CKNXTMEM EQU * @V201122 00732000 IC R2,11(,R1) NUMBER OF USER HALFWORDS IN USE @V201122 00733000 N R2,=A(X'1F') ONLY WANT LAST 5 BITS @V201122 00734000 SLL R2,1 NUMBER OF BYTES IN USER FIELD @V201122 00735000 LA R2,12(,R2) ADD LENGTH OF NAME AND TTRC FIELD@V201122 00736000 BXLE R1,R2,CLCMEMBR GO CHECK NEXT ENTRY @V201122 00737000 B NOTFOUND SORRY, MEMBER ISN'T IN LIBRARY @V201122 00738000 NEWMEM TM FCBIOSW2,FCBMVPDS @V201122 00739000 BNO CKNXTMEM @V201122 00740000 MVC MEMBER(8),0(R1) @V201122 00741000 CLC MEMBER(8),FENCE LAST ENTRY @V201122 00742000 BE NOTFOUND YES, THEN MEMBER NOT FOUND @V201122 00743000 L R9,SAVEREGS+R9*4 GET ADDRESS OF MEMBER NAME @V201122 00744000 MVC 0(8,R9),MEMBER SET NEW MEMBER NAME @V201122 00745000 DROP R15 DROP FCB BASE REG @V201122 00746000 MEMFND EQU * @V201122 00747000 CLC MEMBER(8),FENCE IS IT DUMMY LAST ENTRY @V201122 00748000 BE NOTFOUND YES, ALL DONE @V201122 00749000 * CONVERT TTR OF MEMBER TO ABSOLUTE DASD ADDRESS 00750000 MEMTHERE IC R14,10(,R1) GET REC NUMBER, RELATIVE @V201122 00751000 BCTR R14,0 DOWN IT BY ONE FOR SEARCHING @V201122 00752000 STC R14,CCHHR+4 SAVE IT FOR USE @V201122 00753000 ST R1,SAVEREGS+R5*4 RETURN ADDRESS OF MEMBER ENT@V201122 00754000 LH R1,8(,R1) GET TT VALUE (RELATIVE TRACK ADDR@V201122 00755000 N R1,=A(X'FFFF') CLEAR UNWANTED BITS @V201122 00756000 LA R14,BPDSDBAD RETURN FOR CONVERSION FAILURE @V201122 00757000 B TTRCNVRT CONVERT TTR TO ACTUAL ADDRESS @V201122 00758000 BPDSDBAD B FINDIOER INDICATE BAD PDS @V201122 00759000 MVC OSFSTCHR(5),CCHHR SAVE DATA ADDRESS @V201122 00760000 SR R15,R15 CLEAR FOR COMPARE @V201122 00761000 C R15,SAVEREGS+R6*4 IS THIS A BLDL CALL @V201122 00762000 BNE FINDRET YES, BYPASS SETXTNT CALL @V201122 00763000 BAL R10,SETXTNT COMPUTE XTENT BOUNDARY @V201122 00764000 SR R15,R15 CLEAR ERROR REG @V201122 00765000 FINDRET B ROSRET RETURN TO CALLER @V201122 00766000 NOTFOUND LA R15,4 INDICATE NOT FOUND ERROR @V201122 00767000 B FINDRET RETURN TO CALLER @V201122 00768000 FINDIOER LA R15,8 INDICATE I/O ERROR @V201122 00769000 B FINDRET RETURN TO CALLER @V201122 00770000 SPACE 2 00771000 * 00772000 * CONVERT TTR TO CCHHR OR CCHHR TO TTR 00773000 * 00774000 CHRCNVRT L R0,=A(X'FFFF') SET R0 AND R1 TO MAX REL TRACK @V201122 00775000 LR R1,R0 R1= R0 @V201122 00776000 B GETXTNTS GET EXTENTS @V201122 00777000 TTRCNVRT XC CCHHR(4),CCHHR CLEAR DISK ADDRESS AREA @V201122 00778000 GETXTNTS SR R9,R9 CLEAR R9 FOR WORK @V201122 00779000 IC R9,OSFSTXNO GET NO. OF VALID EXTENTS @V201122 00780000 LA R8,OSFSTXTN POINT TO THEM @V201122 00781000 NXTSIZE CLI 0(R8),0 FLAGGED 'NO EXTENT DATA'? @VA08149 00782010 BE NOXTENTA YES - SKIP OVER THIS EXTENT @VA08149 00782020 LH R2,2(,R8) GET STARTING CYL THIS EXTENT @VA08149 00782030 LH R3,6(,R8) GET ENDING CYLINDER @V201122 00783000 SR R3,R2 NO OF CYLINDERS IN EXTENT @V201122 00784000 CLC CCHHR(4),2(R8) DISK ADDRESS IN THIS EXTENT @V201122 00785000 BL TRKNO TTR CONVERT ALWAYS TAKES THIS BRA@V201122 00786000 * READY FOR FINAL CCHH CONVERT 00787000 CLC CCHHR(4),6(R8) DISK ADDRESS IN THIS EXTENT @V201122 00788000 BH TRKNO NO, CONTINUE CHR CONVERT @V201122 00789000 LH R3,CCHHR GET CYL ADDRESS @V201122 00790000 SR R3,R2 GET NO. CYLS INTO EXTENT @V201122 00791000 MH R3,OSFSTTRK+2 CONVERT CYLS TO TRACKS @V201122 00792000 AH R3,CCHHR+2 GET TRACK ADDRES @V201122 00793000 SH R3,4(R8) GET RELATIVE TRACK ADDR @V201122 00794000 SR R1,R3 SUBTRACT FROM CURRENT TT @V201122 00795000 SR R0,R1 GET CURRENT REL TRACK @V201122 00796000 BR R14 RETURN TO CALLER @V201122 00797000 TRKNO MH R3,OSFSTTRK+2 * NO. TRACKS PER CYLINDER @V201122 00798000 AH R3,8(,R8) ADD ENDING TRK, LAST CYL @V201122 00799000 SH R3,4(,R8) SUBTRACT STARTING TRACK, FIRST CY@V201122 00800000 LA R3,1(,R3) ADD ONE DUE TO INCLUSIVENESS @V201122 00801000 SR R1,R3 SUB EXTENT SIZE FROM TT TOTAL @V201122 00802000 BM GOTTHEX THIS IS THE CORRECT EXTNET @V201122 00803000 NOXTENTA EQU * @VA08149 00803010 LA R8,10(,R8) POINT TO NEXT EXTENT DESCRIPTION @V201122 00804000 BCT R9,NXTSIZE GO TRY IT @V201122 00805000 BR R14 FOOLISHNESS ABOUNDS @V201122 00806000 * READY FOR FINAL TT CONVERT 00807000 GOTTHEX MVC CCHHR(4),2(R8) ADD CCHH TO ALREADY WAITING R @V201122 00808000 AR R1,R3 RESTORE OVERFLOW AMOUNT @V201122 00809000 BZ 4(,R14) ALL SET, TTR IS FIRST OF EXTENT @V201122 00810000 AH R1,4(,R8) STARTING HH IN EXTENT @V201122 00811000 SR R0,R0 CLEAR FOR DIVISION @V201122 00812000 D R0,OSFSTTRK Q(R1)=CYL OFFSET, R(R0)=ABSOLUT@V201122 00813000 AH R1,2(,R8) ADD CYLINDER START OF EXTENT @V201122 00814000 STH R1,CCHHR PUT CYLINDER ADDRESS INTO SEEK AR@V201122 00815000 STH R0,CCHHR+2 ALSO HEAD ADDRESS @V201122 00816000 B 4(,R14) NORMAL RETURN TO CALLER @V201122 00817000 SPACE 2 00818000 * ROUTINE FOR OS DISK NOTES AND POINTS 00819000 USING DMSROS,R15 TEMP BASE REG @V201122 00820000 ROSNTPTB STM R0,R14,SAVEREGS SAVE REGS @V201122 00821000 LM R11,R12,BASE GET BASE REGS @V201122 00822000 USING FCBSECT,R15 TEMP FCB BASE @V201122 00823000 L R15,SAVEREGS+R11*4 GET FCB BASE @V201122 00824000 L R4,FCBOSFST GET OS FST ADDRESS @V201122 00825000 DROP R15 DROP FCB BASE @V201122 00826000 XC INTREG14(4),INTREG14 CLEAR RETURN REG @V201122 00827000 MVC CCHHR(5),OSFSTCHR SETUP CCHHR ADDR @V201122 00828000 LTR R2,R0 POINT SPECIFIED @V201122 00829000 BZ ROSNOTE NO, BUT NOTE IS @V201122 00830000 XC OSFSTNTE(5),OSFSTNTE CLEAR LAST RECORD POINT@V201122 00831000 NI OSFSTFLG,255-OSFSTRSW TURN OFF POINT+1 SWITCH@V201122 00832000 LTR R2,R2 POINT SPECIFIED? @V201122 00833000 BM ROSBSP GO TO BACKSPACE CODE @V201122 00834000 B ROSPOINT YES, DO A POINT @V201122 00835000 ROSNOTE C R2,OSFSTCHR IS THIS 1ST READ @V201122 00836000 BE NOTERET YES, REL TRACK= 0 @V201122 00837000 CLC OSFSTNTE(5),ZEROES LAST I/O OVRFLW ? @V201122 00838000 BE NOTECVRT NO, USE OSFSTCHR @V201122 00839000 CLC OSFSTCHR+2(2),OSFSTNTE+2 DID TRACK CHANGE ? @VA10090 00839300 BNE NEWTRK YES, TAKE CARE OF IT @VA10090 00839600 MVC CCHHR(5),OSFSTNTE YES, USE OVRFLW CHR @V201122 00840000 B NOTECVRT IT'S BEEN SET, CONVERT IT @VA06020 00840400 NEWTRK MVC CCHHR+4(2),ZEROES ZERO OLD RECORD COUNT @VA06020 00840800 NOTECVRT BAL R14,CHRCNVRT CONVERT CHR TO REL TRACK @V201122 00841000 NOTERET STH R0,SAVEREGS RETURN REL TRACK @V201122 00842000 SR R2,R2 CLEAR R2 FOR INSERT @V201122 00843000 IC R2,CCHHR+4 GET RECORD NO. @V201122 00844000 LA R2,1(R2) ADD ONT TO TTR @V201122 00845000 STC R2,SAVEREGS+2 RETURN RECORD NO. @V201122 00846000 B ROSRET RETURN TO CALLER @V201122 00847000 ROSPOINT SR R1,R1 CLEAR REG 1 FOR INSERT @V201122 00848000 ICM R1,B'0111',0(R2) GET REL TTR @V201122 00849000 BCTR R1,R0 SUBTRACT ONE FROM RECORD @V201122 00850000 CLI 3(R2),1 SHOULD R BE UPDATED @V201122 00851000 BNE CKSTART NO, SETUP FOR TTR CONVERT @V201122 00852000 OI OSFSTFLG,OSFSTRSW TURN ON POINT+1 SWITCH @V201122 00853000 CKSTART STC R1,OSFSTCHR+4 SET NEW RECORD NO. @V201122 00854000 SRL R1,8 GET REL TRACK @V201122 00855000 BAL R14,TTRCNVRT CONVERT REL TRACK @V201122 00856000 BC 0,0(0) ANY ERRORS SHOW UP ON NEXT READ @V201122 00857000 MVC OSFSTCHR(4),CCHHR SET NEW CCHH @V201122 00858000 BAL R10,SETXTNT SET EXTENT BOUNDARY @V201122 00859000 B ROSRET RETURN TO CALLER @V201122 00860000 ROSBSP SR R2,R2 CLEAR REG 2 @V201122 00861000 IC R2,OSFSTCHR+4 GET RECORD NO. @V201122 00862000 LTR R2,R2 IS IT ZERO @V201122 00863000 BZ BSPTRK YES, THEN BACKSPACE TRACK @V201122 00864000 BCTR R2,R0 BACKUP ONE RECORD @V201122 00865000 STC R2,OSFSTCHR+4 SET NEW RECORD PTR @V201122 00866000 B CLR15RET RETURN TO CALLER @V201122 00867000 BSPTRK CLC OSFSTCHR(5),ZEROES CCHHR = ZERO @V201122 00868000 BE ERR80 YES, RETURN WITH ERROR @V201122 00869000 BAL R14,CHRCNVRT CONVERT CCHH @V201122 00870000 LTR R1,R0 RELATIVE TRACK ZERO @V201122 00871000 BZ ERR80 YES, THEN RETURN ERROR @V201122 00872000 BCTR R1,R0 TRACK = TRACK-1 @V201122 00873000 BAL R14,TTRCNVRT GET ACTUAL ADDRESS @V201122 00874000 B ERR80 INDICATE ERROR @V201122 00875000 MVI CCHHR+4,0 RECORD NO.= 0 @V201122 00876000 CLI 0(R8),X'80' BSP ON SPLIT'S ? @V2A3801 00876100 BNE BSPTRK2 NO, CONTINUE @V2A3801 00876200 CLC CCHHR+2(2),8(R8) ALREADY ABOVE HIGH HEAD ? @VM01015 00876300 BH ERR80 YES, EXIT WITH RC @VM01015 00876400 CLC CCHHR+2(2),4(R8) ALREADY BELOW LOW HEAD ? @V2A3801 00876500 BL ERR80 YES, EXIT WITH RC @V2A3801 00876600 BSPTRK2 LA R0,RDLSTCNT PGM TO READ LAST CNT ON TRK @V2A3801 00876700 BAL R14,DISKIO GO EXCP @V201122 00878000 B *+12 UNIT CHECK EXPECTED @V201122 00879000 B ERR80 NORMAL END IS ABNORMAL @V201122 00880000 B ERR80 NORMAL END IS 'ABNORMAL' @V201122 00881000 TM SNSEDATA+1,12 FILE PROTECT OR NO REC FND ? @V2A3801 00882100 BNZ BSPRET ANY OR ALL ALLOWED @V2A3801 00882200 TM SNSEDATA,2 TRACK CONDITION ? @V2A3801 00882300 BZ ERR80 NO, ERROR @V2A3801 00882400 BSPRET SR R15,R15 CLEAR R15 FOR INSERT @V201122 00886000 IC R15,NEXTSEEK+4 GET RECORD NUMBER @V201122 00887000 BCTR R15,R0 DECREMENT IT BY ONE @V201122 00888000 STC R15,NEXTSEEK+4 RESET RECORD NUMBER @V201122 00889000 MVC OSFSTCHR(5),NEXTSEEK SAVE ADDRESS POINTER @V201122 00890000 BAL R10,SETXTNT SET EXTENT BOUNDARY @V201122 00891000 B CLR15RET RETURN TO CALLER @V201122 00892000 *************************************************************** 00893000 * 00894000 * TEST INFORMATION RETURNED BY SENSE FOR UNEXPECTED STAT 00895000 * 00896000 *************************************************************** 00897000 CHKSENSE TM SNSEDATA,X'FD' ANYTHING BUT TRACK CONDITION @V201122 00898000 BNZ ERR80 YES, ERROR @V201122 00899000 TRKBYTE TM SNSEDATA+1,X'D2' ALLOW CYLEND,NOREC,OVERINC,PROT@V201122 00900000 BNZ ERR80 TOO BAD @V201122 00901000 MVC SNSEBYTE(1),SNSEDATA MAKE A COMPOUND BYTE @V201122 00902000 OC SNSEBYTE(1),SNSEDATA+1 OUT FO BOTH FOR EASY IN@V201122 00903000 BR R14 NOW RETURN TO CALLER @V201122 00904000 SPACE 2 00905000 *************************************************************** 00906000 * 00907000 * INCREMENT DASD ADDRESS TO TRK 0, REC 0 OF NEXT CYL 00908000 * 00909000 *************************************************************** 00910000 INCRCYL LH R1,CCHHR GET CYLINDER ADDRESS @V201122 00911000 LA R1,1(,R1) ADD ONE TO IT @V201122 00912000 SLL R1,16 CREATE CCHH WITH HEAD ZERO @V201122 00913000 CLI 0(R8),X'80' SPLIT EXTENT @V201122 00914000 BNE SETCCHHR NO @V201122 00915000 ICM R1,B'0011',4(R8) SET STARTING HH @V201122 00916000 SETCCHHR ST R1,CCHHR PUT TO SEARCH ARG. AREA @V201122 00917000 MVI CCHHR+4,X'00' START WITH RECORD ZERO @V201122 00918000 BR R14 RETURN TO USER @V201122 00919000 SPACE 2 00920000 *************************************************************** 00921000 * 00922000 * MAKE SURE DASD ADDRESS IS WITHIN CURRENT EXTENT. OTHE 00923000 * SUBSTITUTE ADDRESS OF FIRST TRACK OF NEXT EXTENT. 00924000 * 00925000 *************************************************************** 00926000 CHKXTNT TM OSFSTFLG,OSFSTALT CURRENT ON ALTERNATE @V201122 00927000 BCR 1,R14 YES, IT WILL ALL TAKE CARE OF ITS@V201122 00928000 SETUP8 CLI 0(R8),0 FLAGGED 'NO EXTENT DATA'? @VA08149 00929010 BE NOXTENTB YES - SKIP OVER THIS EXTENT @VA08149 00929020 CLC OSFSTEND(4),6(R8) IS THIS THE RIGHT EXTENT @VA08149 00929030 BE CHKEND YES, CHECK FOR END OF EXTENT @V201122 00930000 NOXTENTB EQU * @VA08149 00930010 LA R8,10(R8) UP TO NEXT EXTENT @V201122 00931000 BCT R9,SETUP8 CHECK IF THIS IS RIGHT EXTENT @V201122 00932000 B 8(R14) RAN OUT OF EXTENTS, RETURN @V201122 00933000 CHKEND CLC CCHHR(4),OSFSTEND IS ADDR OUT OF EXTENT @V201122 00934000 BH NXTXTNT2 YES, UP TO NEXT EXTENT @V201122 00935000 BAL R15,SETMASK SET FILE MASK @V201122 00936000 CLI 0(R8),X'80' SPLIT CYL? @V201122 00937000 BCR 7,R14 NO, RETURN TO CALLER @V201122 00938000 CLC OSFSTEND+2(2),CCHHR+2 COMPARE ENDING TRK TO CURR@V201122 00939000 BCR 11,R14 BNL TO CALLER @V201122 00940000 LR R10,R14 SAVE REG 14 @V201122 00941000 BAL R14,INCRCYL YES, UP TO NEXT CYL @V201122 00942000 BR R10 RETURN TO CALLER @V201122 00943000 NOXTENTC EQU * @VA08149 00943010 NXTXTNT2 BCT R9,NXTXTNT GO GET ANOTHER IF ONE EXISTS @V201122 00944000 B 8(,R14) NO MORE EXTENTS RETURN ADDRESS @V201122 00945000 NXTXTNT LA R8,10(,R8) BUMP ADDRESS TO NEXT EXTENT DESCR@V201122 00946000 CLI 0(R8),0 FLAGGED 'NO EXTENT DATA'? @VA08149 00946060 BE NOXTENTC YES - SKIP OVER THIS EXTENT @VA08149 00946070 LA R10,4(,R14) SET NEW RETURN ADDRESS @V201122 00947000 B SETXTNT SET EXTENT BOUNDARY @V201122 00948000 SETMASK MVC MASK(1),MASK1 SET TO ALLOW OVERFLOW OF TRK @V201122 00949000 CLC CCHHR(4),OSFSTEND LAST TRK OF ENTENT? @V201122 00950000 BE NOOVRFLW YES, DON'T ALLOW OVERFLOW @V201122 00951000 TM OSFSTRFM,X'20' IS THIS AN OVERFLOW DATA SET @V201122 00952000 BO NOOVRFLW YES, SET MASK TO STOP OVERFLOW @V201122 00953000 CLI 0(R8),X'80' SPLIT CYL EXTENT @V201122 00954000 BCR 7,R15 NO, CONTINUE @V201122 00955000 CLC CCHHR+2(2),OSFSTEND+2 LAST TRACK OF SPLIT CYL@V201122 00956000 BCR 7,R15 NO, RETURN TO CALLER @V201122 00957000 NOOVRFLW MVC MASK(1),MASK2 SET TO NOT ALLOW OVERFLOW OF TRK @V201122 00958000 BR R15 RETURN TO CALLER @V201122 00959000 SETXTNT MVC CCHHR(4),2(R8) SET TRACK ADDR @V201122 00960000 MVI CCHHR+4,0 SET RECORD NO. TO ZERO @V201122 00961000 MVC OSFSTEND(4),6(R8) SET END OF EXTENT ADDR @V201122 00962000 NI OSFSTFLG,255-OSFSTALT TURN OFF ALT TRK INDICA@V201122 00963000 BAL R15,SETMASK SET FILE MASK @V201122 00964000 BR R10 RETURN TO CALLER @V201122 00965000 SPACE 2 00966000 *************************************************************** 00967000 * 00968000 * SWITCH DASD ADDRESS FROM DEFECTIVE TO ALTERNATE TRACK 00969000 * OR BACK FROM ALTERNATE TO NEXT PRIMARY TRACK 00970000 * 00971000 *************************************************************** 00972000 GETALT TM SNSEBYTE,X'02' IS TRACK CONDITION PRESENT @V201122 00973000 BZ ERR80 NO, IMPROPER ENTRANCE @V201122 00974000 GETALT2 TM OSFSTFLG,OSFSTALT ON ALTERNATE TRACK? @V201122 00975000 BO NXTPRIME YES, GO RETURN TO NEXT PRIME TRAC@V201122 00976000 OI OSFSTFLG,OSFSTALT INDICATE ALT TRACK @V201122 00977000 L R1,CSW GET FAILING CCW ADDRESS @V201122 00978000 LA R1,0(,R1) CLEAR HIGH ORDER BYTE @V201122 00979000 S R1,=F'8' BACKUP TO FAILING CCW START ADDRE@V201122 00980000 TM 0(R1),X'80' IS IT A MULTIPLE TRACK CCW @V201122 00981000 L R1,NEXTSEEK SEARCH ADDRESS USED PREVIOUSLY @V201122 00982000 BZ NOTMTCCW NOT MULTIPLE TRACK, LEAVE SEARCH @V201122 00983000 BUMPCCHH MVI CCHHR+4,0 START ALT TRK ADDR AT RECORD 0 @V201122 00984000 LA R1,1(,R1) BUMP TO NEXT TRACK ADDRESS @V201122 00985000 ST R1,CCHHR UPDATE TO TRACK REPRESENTED BY AL@V201122 00986000 NOTMTCCW ST R1,SEEK+2 ADDRESS WHICH IS BAD TRACK @V201122 00987000 LR R10,R14 SAVE RETURN ADDRESS FOR A MOMENT @V201122 00988000 LA R0,READR0 CHAN PROG TO READ R0 TO FIND ALTE@V201122 00989000 BAL R14,DISKIO GO GET ALTERNATE ADDRESS @V201122 00990000 B ERR80 BAD NEW BROTHER @V201122 00991000 BC 0,0(R0) IL OR UE IS OKAY @V201122 00992000 ALTRET TM R0DATA+11,X'02' BAD TRACK INDICATOR ON @V201122 00993000 BCR 1,R10 OKAY IF BAD TRK, RETURN @V201122 00994000 TM OSFSTRFM,X'20' TRACK OVERFLOW SPECIFIED @V201122 00995000 BCR 14,R10 NO, RETURN @V201122 00996000 TM SNSEBYTE,X'03' BOTH OVERFLOW AND BAD TRK @V201122 00997000 BCR 14,R10 NO, RETURN @V201122 00998000 L R1,R0DATA+12 GET CURRENT CCHH @V201122 00999000 LR R14,R10 SAVE RETURN ADDR @V201122 01000000 B BUMPCCHH READ NEXT HOME ADDR @V201122 01001000 NXTPRIME NI OSFSTFLG,255-OSFSTALT RESET ALT INDICATOR @V201122 01002000 UPTRK LA R1,1 SETUP TO COMPUTE NEXT GOOD TRACK @V201122 01003000 A R1,CCHHR DASD ADDR OF DEFECTIVE +1 @V201122 01004000 CLM R1,B'0001',OSFSTTRK+3 IS HEAD BEYOND CYL BOUNARY@V201122 01005000 BL NOTBYOND NO, ADDR OK AS IS @V201122 01006000 LH R1,CCHHR GET CYLINDER ADDRESS @V201122 01007000 LA R1,1(,R1) BUMP TO NEXT CYLINDER @V201122 01008000 SLL R1,16 CLEAR HEAD ADDRESS TO ZERO @V201122 01009000 CLI 0(R8),X'80' SPLIT CYLINDER ? @V2A3801 01009100 BNE NOTBYOND NO, BRANCH @V2A3801 01009200 ICM R1,B'0011',4(R8) SET STARTING HH @V2A3801 01009300 NOTBYOND ST R1,CCHHR PUT BACK UPDATED SEARCH ADDRESS @V201122 01010000 MVI CCHHR+4,0 SET TO RECORD ZERO @V201122 01011000 B 4(,R14) RETURN ON NEW TRACK RETURN POINT @V201122 01012000 SPACE 1 01013000 SPACE 4 01014000 *************************************************************** 01015000 * 01016000 * CHANNEL PROGRAMS FOR PACK FORMATTED FOR OS 01017000 * 01018000 *************************************************************** 01019000 SPACE 1 01020000 READR0 CCW 7,SEEK,CC,6 SEEK TO ADDRESS AT SEEK @V201122 01021000 CCW 31,MASK,CC,1 SET FILE MASK @V201122 01022000 CCW 26,R0DATA+11,CC,5 READ HOME ADDRESS @V201122 01023000 CCW 22,R0DATA,CC,8 READ ALTERNATE TRACK ADD@V201122 01024000 CCW 3,0,SLI,1 NOP @V201122 01025000 SPACE 1 01026000 READBLK CCW 7,SEEK,CC,6 SEEK TO ADDRESS AT SEEK @V201122 01027000 CCW 31,MASK,CC,1 SET FILE MASK @V201122 01028000 CCW 49,CCHHR,CC,5 SEARCH ID EQUAL @V201122 01029000 CCW 8,*-8,CC+SLI,1 TIC @V201122 01030000 READCHR CCW 146,0,CC,8 READ THIS CCHHR @VM08817 01031000 READCCW CCW 6,0,0,0 READ DATA RECORD @V201122 01032000 SPACE 1 01033000 RDDSCB4 CCW 7,SEEK,CC,6 SEEK TO ADDRESS AT SEEK @V201122 01034000 CCW 31,MASK1,CC,1 SET FILE MASK @V201122 01035000 CCW 49,CCHHR,CC,5 SEARCH ID EQUAL @V201122 01036000 CCW 8,*-8,CC+SLI,1 TIC @V201122 01037000 CCW 6,DSCB4,CC,96 READ DSCB4 INTO TEMP BUF@V201122 01038000 CCW 3,0,SLI,1 NOP @V201122 01039000 SPACE 1 01040000 RDDSCB1 CCW 7,SEEK,CC,6 SEEK TO ADDRESS IN SEEK @V201122 01041000 CCW 31,MASK1,CC,1 SET FILE MASK @V201122 01042000 CCW 49,CCHHR,CC,5 SEARCH ID EQUAL @V201122 01043000 CCW 8,*-8,CC+SLI,1 TIC @V201122 01044000 CCW 146,NEXTSEEK,CC,8 READ DISK ADDR OF THIS R@V201122 01045000 ADDSNAME CCW 41,0,CC,44 SEARCH KEY EQUAL FOR DSN@V201122 01046000 CCW 8,*-16,CC+SLI,1 TIC @V201122 01047000 CCW 6,DSCB1,CC,96 READ DSCB1 INTO TEMP BUF@V201122 01048000 CCW 3,0,SLI,1 NOP @V201122 01049000 SPACE 1 01050000 RDDSCB3 CCW 7,SEEK,CC,6 SEEK TO ADDRESS IN SEEK @V201122 01051000 CCW 31,MASK1,CC,1 SET FILE MASK @V201122 01052000 CCW 49,CCHHR,CC,5 SEARCH ID EQUAL @V201122 01053000 CCW 8,*-8,CC+SLI,1 TIC @V201122 01054000 XTENTS CCW 14,*-*,CC,140 READ KEY & DATA (DSCB3 E@V201122 01055000 CCW 3,0,SLI,1 NOP @V201122 01056000 SPACE 1 01057000 RDPDSD CCW 7,SEEK,CC,6 SEEK TO ADDR IN SEEK @V201122 01058000 CCW 31,MASK,CC,1 SET FILE MASK @V201122 01059000 CCW 49,CCHHR,CC,5 SEARCH ID EQUAL @V201122 01060000 CCW 8,*-8,CC+SLI,1 TIC @V201122 01061000 CCW 146,NEXTSEEK,CC,8 READ DISK ADDR OF THIS R@V201122 01062000 SRCHMEM CCW 105,MEMBER,CC,8 SEARCH KEY EQUAL OR HIGH@V201122 01063000 CCW 8,*-16,CC+SLI,1 TIC @V201122 01064000 CCW 6,PDSBLK,CC,256 READ PDS BLOCK INTO TEMP@V201122 01065000 CCW 3,0,SLI,1 NOP @V201122 01066000 SPACE 1 01067000 READSKIP CCW 7,SEEK,CC,6 SEEK TO ADDR IN SEEK @V201122 01068000 CCW 31,MASK,CC,1 SET FILE MASK @V201122 01069000 CCW 49,CCHHR,CC,5 SEARCH ID EQUAL @V201122 01070000 CCW 8,*-8,CC+SLI,1 TIC @V201122 01071000 READCHR1 CCW 146,0,CC,8 READ DISK ADDR @VM28920 01072000 CCW 6,0,CC+SKIP+SLI,8 READ DATA SKIP FOR POINT@V201122 01073000 READCHR2 CCW 146,0,0,8 READ DISK ADDR @VM28920 01074000 SPACE 2 01075000 RDLSTCNT CCW 7,SEEK,CC,6 SEEK TO ADDR IN SEEK @V201122 01076000 CCW 31,MASK2,CC,1 SET FILE MASK @V201122 01077000 CCW 49,CCHHR,CC,5 SEARCH ID EQUAL @V201122 01078000 CCW 8,*-8,CC+SLI,1 TIC @V201122 01079000 CCW 18,NEXTSEEK,CC+SLI,5 RD COUNT TILL TRK END @V2A3801 01080100 CCW 8,*-8,SLI,1 TIC @V201122 01081000 SPACE 4 01082000 *************************************************************** 01083000 * 01084000 * CONSTANTS, STORAGE AREAS, AND MESSAGES OF GREAT UTILIT 01085000 * 01086000 *************************************************************** 01087000 SPACE 1 01088000 DS 0D @V201122 01089000 ZEROES DC 2F'0' ZEROES @V201122 01090000 FCBSAVE DS F FCB ADDRESS SAVED @V201122 01091000 FENCE DC 8X'FF' DELIMITER FENCE @V201122 01092000 SNSEDATA DC 2X'00' SAVE SENSE DATA @V201122 01093000 RESIDUAL DS H'0' @V201122 01094000 CCHHR DC F'0' NEXT SEARCH ADDRESS @V201122 01095000 DC H'0' @V201122 01096000 NEXTSEEK DS 2F ADDRESS OF RECOR JUST RE@V201122 01097000 DS H @V201122 01098000 SEEK DC H'0' NEXT SEEK ADDRESS @V201122 01099000 R0DATA DS 4F @V201122 01100000 MEMBER DS 8X CURRENT MEMBER NAME @V201122 01101000 MASK DC B'01010000' MASK TO ALLOW TRK OVERFL@V201122 01102000 MASK1 DC B'01010000' @V201122 01103000 MASK2 DC B'01011000' MASK TO RESTRICT TRK OVE@V201122 01104000 SNSEBYTE DC X'00' SENSE DATA @V201122 01105000 ROSFLAG DC X'00' CONTROL FLAGS @VA09241 01105300 DYNAMIC EQU X'80' DSN BLOCK IS CHAINED @VA09241 01105600 SPACE 2 01106000 SPACE 2 01107000 LTORG @V201122 01108000 SPACE 2 01109000 DS 0D ALIGN FOR GOOD I/O @V201122 01110000 DSCB4 DS 0F TEMP 4F DSCB4 ACCESS BUF@V201122 01111000 DS4HPCHR EQU DSCB4+45-44 HIGHEST DSCB1 ADDRESS @V201122 01112000 DS4VTOCI EQU DSCB4+58-44 VTOC INDICATORS @V201122 01113000 DS4DEVSZ EQU DSCB4+62-44 DEVICE SIZE @V201122 01114000 DS4VTOCE EQU DSCB4+105-44 VTOC EXTENT @V201122 01115000 DSCB1 DS 0F TEMP 24F DSCB1 STATE BUF@V201122 01116000 DS1FMTID EQU DSCB1+44-44 FORMAT IDENTIFIER @V201122 01117000 DS1VOLSQ EQU DSCB1+51-44 VOLUME SEQUENCE NO. @V201122 01118000 DS1NOEPV EQU DSCB1+59-44 NO. OF EXTENTS @V201122 01119000 DS1DSORG EQU DSCB1+82-44 DATA SET ORGANIZATION @V201122 01120000 DS1RECFM EQU DSCB1+84-44 RECORD FORMAT @V201122 01121000 DS1BLKL EQU DSCB1+86-44 BLOCK SIZE @V201122 01122000 DS1LRECL EQU DSCB1+88-44 LOGICAL RECORD LENGTH @V201122 01123000 DS1DSIND EQU DSCB1+93-44 DATA SET INDICATORS @V201122 01124000 DS1LSTAR EQU DSCB1+98-44 LAST BLOCK POINTER @V201122 01125000 DS1EXT1 EQU DSCB1+105-44 DATA SET EXTENTS @V201122 01126000 DS1PTRDS EQU DSCB1+135-44 POINTER TO DSCB3 @V201122 01127000 PDSBLK DS 64F TEMP 64F OS FIND PDS BLO@V201122 01128000 SPACE 2 01129000 EJECT 1 01130000 CC EQU X'40' CCW COMMAND CHAIN @V201122 01131000 SLI EQU X'20' SUPPRESS INCORRECT LENGT@V201122 01132000 SKIP EQU X'10' SUPPRESS DATA TRANSFER @V201122 01133000 MEMHIGH EQU 73 SEARCH FOR HIGHER MEMBER NAME @V201122 01134000 MEMHGHEQ EQU 105 SEARCH FOR HIGH OR EQUAL NAME @V201122 01135000 TYP3350 EQU X'0B' CMS' 3350 DEVICE TYPE @V304498 01135100 THREE DC X'03' THREE EXTENTS @VA06195 01135200 USERLBL EQU X'40' USER LABEL FLAG @VA06195 01135300 DOSDASD EQU X'80' DOS PACK @VA13649 01135500 DS4VTOCX EQU X'01' DSCB4 INDEXED VTOC @VA13649 01135700 SPACE 4 01136000 ERR80 LA R15,80 @V201122 01137000 ERRRET B INTRETRN @V201122 01138000 EOF LA R15,12 SET EOF ERROR CODE @V201122 01139000 B ERRRET @V201122 01140000 DSNOTFND EQU * @V201122 01141000 FCBNTFND LA R15,88 @V201122 01142000 B ERRRET @V201122 01143000 EJECT 1 01144000 PRINT GEN 01145000 NUCON @V201122 01146000 ADT @V201122 01147000 OSFST @V201122 01148000 CMSCB @V201122 01149000 IO @V201122 01150000 CMSAVE @V201122 01151000 REGEQU @V201122 01152000 END 01153000