ibm:vm370-lib:cms:dmsacf.assemble_src
Table of Contents
DMSACF Source
References
- Fixes Applied : 1
- This Source Date : Tuesday, December 12, 1978
- Last Fix ID : [HRC010DS]
Source Listing
- DMSACF.ASSEMBLE.txt
- ACF TITLE 'DMSACF (CMS) VM/370 - RELEASE 6' 00001000
- SPACE 2 00002000
- *. 00003000
- * MODULE NAME: 00007000
- * 00008000
- * DMSACF (READFST) 00009000
- * 00010000
- * FUNCTION: 00011000
- * 00012000
- * FOR A READ-WRITE DISK, TO READ ALL OF THE USER FILE 00013000
- * DIRECTORY INTO STORAGE; FOR A READ-ONLY DISK, TO READ 00014000
- * IN ALL OR PART OF THE USER FILE DIRECTORY, AT THE 00015000
- * CALLER'S OPTION; FOR AN O/S DISK, CONTROL IS RETURNED 00016100
- * TO THE CALLER AFTER SUCCESSFUL RETURN FROM DMSACM. 00016200
- * 00017000
- * ATTRIBUTES: 00018000
- * 00019000
- * TRANSIENT, REENTRANT 00020000
- * 00021000
- * ENTRY POINTS: 00022000
- * 00023000
- * READFST 00024000
- * 00025000
- * ENTRY CONDITIONS: 00026000
- * 00027000
- * L R15,AREADFST WHERE AREADFST=V(DMSACF) 00028000
- * BALR R14,R15 00029000
- * 00030000
- * R0 MUST POINT TO ACTIVE DISK TABLE 00031000
- * R1 MUST POINT TO PARAMETER-LIST AS USUAL: 00032000
- * 00033000
- * DS 0F 00034000
- * PLIST DC CL8' ' IMMATERIAL 00035000
- * DC CL8' ' FILENAME (OR'*') 00036000
- * DC CL8' ' FILETYPE (OR'*') 00037000
- * DC CL2' ' FILEMODE 00038000
- * 00039000
- * EXIT CONDITIONS: 00040000
- * 00041000
- * NORMAL RETURN 00042000
- * 00043000
- * R15 = 0 00044000
- * 00045000
- * ERROR RETURNS 00046000
- * 00047000
- * R15=4 DISK IS READ-ONLY(NONFATAL) 00048000
- * R15=1,2,3,OR5: SAME ERROR CONDITIONS AS READMFD 00049000
- * (ERROR FROM READMFD PASSED ALONG AS IS) 00050000
- * 00051000
- * CALLS TO OTHER ROUTINES: 00052000
- * 00053000
- * DMSFREE, DMSFRET, DMSDIOR, DMSACM (READMFD), 00054100
- * | AND SORTFST (WITHIN DMSALU MODULE). 00054200
- * 00055000
- * EXTERNAL REFERENCES: 00056000
- * 00057000
- * ADT, FVS, DMSNUC 00058000
- * 00059000
- * TABLES/WORKAREAS: 00060000
- * 00061000
- * 816 BYTE BUFFERS 00062000
- * 800 BYTE WORK AREA 00063000
- * 00064000
- * REGISTER USAGE: 00065000
- * 00066000
- * R13 FVSECT 00067000
- * R12 BASE 00068000
- * R11 ADTSECT 00069000
- * REST WORK 00070000
- * 00071000
- * OPERATION: 00072000
- * 00073000
- * DMSACF, TOGETHER WITH DMSACM, BRINGS INTO STORAGE 00074000
- * ALL OR PART OF THE USER FILE DIRECTORY FOR THE GIVEN 00075000
- * DISK. IF THE DISK IS READ-WRITE, ALL OF THE UFD IS 00076000
- * MADE RESIDENT; IF READ-ONLY, THE QMSK AND QQMSK 00077000
- * TABLES ARE NOT BROUGHT IN BY 00078000
- * DMSACM, AND DMSACF CAN BRING IN SELECTED PORTIONS OF 00079000
- * THE FST 00080000
- * ENTRIES, IF SPECIFIED. 00081000
- * 00082000
- * DMSACF DOES THE FOLLOWING: 00083000
- * 00084000
- * FIRST DMSACM IS CALLED TO READ IN ITS PART OF THE 00085000
- * UFD. IF AN ERROR OTHER THAN 4 IS RETURNED BY READMFD, 00086000
- * DMSACF PASSES BACK THIS ERROR CODE TO THE CALLER AND 00087000
- * EXITS IMMEDIATELY. IF DMSACM WAS SUCCESSFUL, OR 00088000
- * RETURNED AN ERROR-4 INDICATING THE DISK WAS 00089000
- * READ-ONLY, DMSACF CONTINUES. IF THE DISK IS AN O/S 00090100
- * DISK, DMSACF EXITS IMMEDIATELY. AN 816 - BYTE 00090200
- * BUFFER FOR THE FIRST FST HYPERBLOCK IS OBTAINED FROM 00091000
- * FREE STORAGE IF NEEDED, AND AN 800-BYTE WORK AREA IS 00092000
- * OBTAINED. 00093000
- * 00094000
- * THE FST HYPERBLOCKS ON DISK ARE NOW READ INTO THE 00095000
- * WORK AREA, ONE AT A TIME. ALL NULL FST ENTRIES ARE 00096000
- * IGNORED; OTHER ENTRIES ARE MOVED FROM THE WORK AREA 00097000
- * TO THE RESIDENT FST HYPERBLOCKS IF THE DISK IS 00098000
- * READ-WRITE, THUS RESULTING IN COMPACTED DIRECTORY IN 00099000
- * STORAGE OF ALL FILES. IF THE DISK IS READ-ONLY, EACH 00100000
- * FST ENTRY IN THE WORK AREA IS CHECKED AGAINST THE 00101000
- * PARAMETER LIST PROVIDED 00102000
- * TO DMSACF. (IF ANY FIELD IN THE PARAMETER LIST IS 00103000
- * '*' OR X'FF', 00104000
- * THE FILENAME, FILETYPE, OR MODE NUMBER IS ACCEPTED 00105000
- * WITHOUT CHECKING.) 00106000
- * THUS, FOR A READ-ONLY DISK DMSACF CAN READ IN ALL 00107000
- * FILES, OR ALL '2' FILES, 00108000
- * (AS IT DOES FOR THE S-DISK WHEN CALLED BY INITSYS) OR 00109000
- * ANY CONDITIONS THAT SATISFY THE PARAMETER LIST. 00110000
- * 00111000
- * DMSACF GETS MORE HYPERBLOCKS FROM FREE STORAGE WHEN 00112000
- * NEEDED AND REFILLS THE WORK BUFFER FROM DISK WHEN 00113000
- * NEEDED, UNTIL ALL FST ENTRIES HAVE BEEN CHECKED AND 00114000
- * MOVED INTO THE FST HYPERBLOCKS IF ACCEPTABLE. 00115000
- * 00116000
- * ALL APPROPRIATE COUNTS IN THE ACTIVE DISK TABLE 00117000
- * (NUMBER OF FILES, POINTER TO LAST FST ENTRY, ETC.) 00118000
- * ARE INITIALIZED AS NEEDED. 00119000
- * 00120000
- * | FOR CMS DISKS, "SORTFST" IS THEN CALLED TO SORT 00120100
- * | ALL THE FST ENTRIES (BY FILENAME/FILETYPE). FOR READ-ONLY 00120200
- * | DISKS (EXCEPT THE S-DISK), THE "ADTFSORT" FLAG IN ADTFLG3 00120300
- * | IS THEN SET TO INDICATE A "FAST SEARCH TECHNIQUE" CAN 00120400
- * | BE USED (BY DMSLFS). 00120500
- * 00120600
- * WHEN THROUGH, DMSACF RETURNS THE RESIDENT MFD TO FREE 00121000
- * STORAGE 00122000
- * IF THE DISK WAS READ-ONLY, AS IT IS NOT NEEDED ANY 00123000
- * MORE. FOR A READ-WRITE DISK, HOWEVER, THE MFD IS 00124000
- * PURPOSELY LEFT RESIDENT FOR USE BY THE 00125000
- * DMSAUD ROUTINE THE NEXT TIME THE UFD IS UPDATED. 00126000
- * 00127000
- * THE WORK-BUFFER IS RETURNED TO FREE STORAGE, AND 00128000
- * DMSACF RETURNS 00129000
- * TO THE CALLER, RETURNING AN ERROR-CODE 0 OR 4 (IF THE 00130000
- * DISK WAS 00131000
- * FOUND TO BE READ-ONLY BY DMSACM). 00132000
- * 00133000
- *. 00134000
- * 00135000
- EJECT 00138000
- READFST START 0 NOTE: NOW DISK-RESIDENT 00139000
- * (INCLUDE TEXT OF "READFST" WITH 00140000
- * MODULE OF CALLING PROGRAM) 00141000
- * 00142000
- * (ALSO IN CMS NUCLEUS AS AN 00143000
- * "IPL-PROCEDURE" PROGRAM 00144000
- * FOR USE BY "INITSYS") 00145000
- * 00146000
- EXTRN READMFD (NEEDED) 00147000
- EXTRN RELUFD ... 00148000
- * 00149000
- * ENTER HERE ... 00150000
- USING *,R15 00151000
- USING NUCON,R0 00152000
- L R15,AFVS 00153000
- USING FVSECT,R15 00154000
- STM R0,R14,REGSAV1 SAVE R0 THRU 14 00155000
- DROP R15 00156000
- LR R13,R15 REFERENCE 'FVS' INFO 00157000
- USING FVSECT,R13 00158000
- BALR R12,0 OUR OWN ADDRESSABILITY 00159000
- USING *,R12 00160000
- OI UFDBUSY,ERBIT SET 'OUR' BIT IN 'UFDBUSY' FLAG 00161000
- LR R11,R0 REFERENCE ACTIVE-DISK-TABLE 00162000
- USING ADTSECT,R11 ... 00163000
- LR R2,R1 POINTER TO PARAMETER-LIST INTO R2 00164000
- * 00165000
- RFST01 DS 0H IF RUNNING ON 'CP', WARN CP WE'RE READING UFD 00166000
- * 00167000
- * (TO BE CODED - VIA DIAGNOSE, ETC.) 00168000
- * 00169000
- RFST02 L R15,AREADMFD READ IN MFD, 00170000
- BALR R14,R15 VIA 'READMFD', 00171000
- STC R15,ERRCOD1 STORE ERROR-CODE AS OUR ERROR-CODE, 00172000
- BZ RFST04 BZ IF NO PROBLEMS, MFD IN FINE. 00173000
- CLI ERRCOD1,X'04' WAS DISK R/O? THAT'S OK @VA04381 00174100
- BNE RFST16 BUT NO OTHER ERROR. 00175000
- RFST04 TM ADTFLG2,ADTFROS IS IT O/S DISK ? @V201101 00176100
- BO RFST16 YES..JUST GET OUT @V201101 00176200
- TM ADTFLG1,ADTFRW IS IT R/W DISK ? @V201101 00176300
- LA R15,ADTFALUF SET FLAG-BITS FOR ALL UFD 00177000
- BO STFLG21 IF YES. HRC010DS 00178490
- CLI PLNAM(R2),X'FF' IF READ-ONLY, WAS FILENAME OMITTED ? 00179000
- LA R15,ADTFALNM+ADTFALTY+ADTFMDRO IF YES, SET FLAG-BITS 00180000
- BE STFLG2 FOR ALL NAMES & TYPES, &MODES 1-5. @V305032 00181000
- SR R15,R15 IF NOT, CLEAR FLAG, 00182000
- CLI PLNAM(R2),C'*' ASTERISK FOR NAME (ALL NAMES) ? 00183000
- BE RFST05 TRF IF YES. 00184000
- LA R1,PLNAM+1(R2) IF NOT, POINT R1 TO THE FILENAME+1 AND 00185000
- LA R6,REGSAV0 R6 TO WHERE-TO-PUT THE CLC COUNT (LESS 1) 00186000
- BAL R14,CHEKSTAR CHECK FOR * IN FILENAME, RETURN TO RFST06 00187000
- RFST05 LA R15,ADTFALNM SET FLAG-BIT IF ALL FILENAMES WANTED. 00188000
- RFST06 CLI PLTYP(R2),X'FF' FILETYPE OMITTED ? 00189000
- BE RFST10 BE IF YES, OR IN PROPER BITS. 00190000
- CLI PLTYP(R2),C'*' ALL FILES-TYPES SPECIFIED VIA ASTERISK ? 00191000
- BE RFST07 TRF IF YES. 00192000
- LA R1,PLTYP+1(R2) IF NOT, POINT R1 TO THE FILETYPE+1 AND 00193000
- LA R6,REGSAV0+4 R6 TO WHERE-TO-PUT THE CLC COUNT (LESS 1) 00194000
- BAL R14,CHEKSTAR CHECK FOR * IN FILETYPE, RETURN TO RFST08 00195000
- RFST07 LA R15,ADTFALTY(,R15) OR IN BIT IF ALL FILETYPES WANTED. 00196000
- RFST08 LA R5,RFST11 'BCR 8,R5' = 'BE RFST11' (TO SAVE SPACE) 00197000
- CLI PLMOD(R2),X'FF' FILE MODE OMITTED ? 00198000
- BCR 8,R5 IF YES, SET FLAG BITS FOR MODES 1-5 @V305032 00199000
- CLI PLMOD(R2),C'*' ALL MODES SPECIFIED VIA ASTERISK ? 00200000
- BCR 8,R5 IF YES, SET FLAG BITS AS FOR X'FF'. 00201000
- CLI PLMOD+1(R2),C' ' IS MODE-NUMBER GIVEN ? 00202000
- BCR 8,R5 BNE IF NOT (A 'BLANK' THERE) 00203000
- B STFLG2 GO STORE FLAG-BITS IF SPECIFIC MODE THERE 00204000
- * 00205000
- DUMOI OI ADTFLG2,*-* TO OR IN APPROPRIATE FLAG-BITS 00206000
- * 00207000
- RFST10 LA R15,ADTFALTY(,R15) OR IN BITS FOR ALL TYPES IF NEEDED 00208000
- RFST11 LA R15,ADTFMDRO(,R15) OR IN BITS FOR MODES 1-5 @V305032 00209000
- * 00210000
- STFLG2 EQU * HRC010DS 00211090
- TM ADTFLG3,ADTFZERO WAS MODE ZERO REQUESTED HRC010DS 00211180
- BNO STFLG21 HRC010DS 00211270
- LA R15,X'08'(,R15) OR IN BITS FOR MODE 0 HRC010DS 00211360
- STFLG21 EQU * HRC010DS 00211450
- EX R15,DUMOI OR IN APPROPRIATE BITS INTO ADTFLHRC010DS 00211540
- * 00212000
- SR R9,R9 HYPERBLOCK COUNT IS ZERO AS YET @VA04381 00212100
- ST R9,JSR0 LENGTH OF BUFFER IS ZERO AS YET @VA04381 00212200
- LA R5,800 800 = SIZE FOR READING FROM DISK 00213000
- ST R5,RWCNT SET BYTE-COUNT = 800 WHERE NEEDED 00214000
- L R1,ADTFDA GET A(PSTAT) OR EQUIVALENT 00215000
- LTR R1,R1 DO WE HAVE ONE ? 00216000
- BP RFST12 BP IF YES (WE'RE ALL SET) 00217000
- LA R0,102 INDICATE SIZE OF BLOCK NEEDED @VA04381 00218100
- BAL R14,GETSTORE GET FREE STORAGE @VA04381 00218200
- LA R4,40 40 = ITEM SIZE (R5 ALREADY = 800), 00219000
- STM R4,R5,0(R1) STORE 40 & 800 IN FIRST TWO WORDS 00220000
- ST R1,ADTFDA STORE ADDRESS WHERE NEEDED 00221000
- OI ADTFLG1,ADTFFSTF MAKE SURE FLAG-BIT SET 00222000
- RFST12 LA R1,8(,R1) SPACE OVER PRELIMINARY WORDS 00223000
- BAL R14,CLEARFRE CLEAR OUT FIRST 808-BYTE BLOCK. 00224000
- LR R3,R1 SET UP R3 FOR BXLE, 00225000
- LA R0,100 INDICATE SIZE OF BLOCK NEEDED @VA04381 00226400
- BAL R14,GETSTORE GET FREE STORAGE @VA04381 00226800
- LA R4,20 20 40-BYTE ENTRIES/800-BYTES @VA04381 00227200
- STM R0,R1,JSR0 SAVE FOR LATER FRET-CALL, 00228000
- ST R1,DSKLOC SAVE CORE-LOCATION FOR DISK READING, 00229000
- ST R11,ADTADD ADDRESS OF ACTIVE-DISK TABLE, 00230000
- L R10,ADTHBCT NUMBER OF HYPERBLOCKS THERE INTO R10. 00231000
- LA R9,1 SET NUMBER OF HYPERBLOCKS WE WILL HAVE = 1 00232000
- ST R3,ADTCHBA STORE POINTER TO CURRENT FST HYPERBLOCK 00233000
- ST R3,ADTCFST ALSO STORE POINTER TO 'CURRENT' FST-ENTRY 00234000
- LA R5,MOV40 SET R5 TO 'MOV40' 00235000
- SR R6,R6 CLEAR NUMBER OF FILES MOVED, 00236000
- L R14,ADTMFDA GET CORE-ADDRESS OF FIRST DISK-ADDRESS 00237000
- * 00238000
- REFILL ST R14,DSKADR STORE CORE-ADDRESS OF NEW DISK-ADDRESS 00239000
- LA R1,DSKLST PARAMETER-LIST FOR RDTK, 00240000
- L R15,ARDTK CALL RDTK TO GET ANOTHER FST HYPERBLOCK 00241000
- BALR R14,R15 ... 00242000
- BNZ RFST18 UH-OH IF ERROR READING DISK 00243000
- L R7,DSKLOC SET R7 FOR SEARCH-LOOP 00244000
- LA R8,20 TWENTY 40-BYTE ITEMS PER 800-BYTE BLOCK 00245000
- SR R0,R0 R0 = 0, 00246000
- LM R14,R15,REGSAV0 EX-CLC COUNTS INTO R14 AND R15. 00247000
- * 00248000
- * 00249000
- SRCHLP C R0,0(,R7) IS THIS ENTRY = 0 (NONEXISTENT) ? 00250000
- BE LAR7 TRF IF YES - GO CHECK THE NEXT ONE. 00251000
- TM ADTFLG2,ADTFALUF ARE 'ALL FILES' WANTED ? 00252000
- BCR 1,R5 'BO MOV40' IF YES. 00253000
- TM ADTFLG2,ADTFALNM ARE ALL NAMES WANTED ? 00254000
- BO CHKTYP BO IF YES. 00255000
- EX R14,CHEKNAME DOES FILENAME (UP TO *) MATCH ? 00256000
- BNE LAR7 TRF IF NOT - GO CHECK THE NEXT ONE. 00257000
- CHKTYP TM ADTFLG2,ADTFALTY ARE ALL TYPES WANTED ? 00258000
- BO CHKMOD BO IF YES. 00259000
- EX R15,CHEKTYPE DOES FILETYPE (UP TO *) MATCH ? 00260000
- BNE LAR7 TRF IF NOT - GO CHECK THE NEXT ONE. 00261000
- * 00262000
- CHKMOD TM ADTFLG3,ADTFZERO WAS MODE0 REQUESTED HRC010DS 00263190
- BO CHKMOD1 YES, NOTHING PRIVATE ANYMORE HRC010DS 00263380
- CLI 25(R7),C'0' FOR A READ-ONLY DISK, P0 = PRIVATHRC010DS 00263570
- BE LAR7 TRF IF IT'S P0 (DON'T BRING IT IN) 00264000
- CHKMOD1 EQU * HRC010DS 00264500
- TM ADTFLG2,ADTFMDRO ALL MODES 1-5 WANTED ? @V305032 00265000
- BCR 1,R5 'BO' IF YES, ACCEPT THE FILE. 00266000
- CLC PLMOD+1(1,R2),25(R7) IF NOT, MODE MUST MATCH EXACTLY 00267000
- BNE LAR7 TRF IF NO MATCH. 00268000
- BR R5 'MOVE 40 BYTES' IF MODE IS OK 00269000
- * 00270000
- RFST13 STM R14,R0,REGSAV0 SAVE R14-R15-R0 IN LOWER SAVE-AREA, 00271000
- LA R0,101 INDICATE SIZE OF BLOCK NEEDED @VA04381 00272100
- BAL R14,GETSTORE GET FREE STORAGE @VA04381 00272200
- ST R1,0(,R3) STORE POINTER AT END OF PREVIOUS ONE 00273000
- BAL R14,CLEARFRE CLEAR NEW 808-BYTE BLOCK 00274000
- LR R3,R1 LET R3 POINT TO OUR NEW 808-BYTE BLOCK 00275000
- MVC 804(4,R3),ADTCHBA PUT IN BACK-POINTER TO PREVIOUS BLOCK 00276000
- LA R4,20 SET R4 AGAIN TO 20 00277000
- LA R5,MOV40 SET SWITCH BACK TO MOV40 FOR NEXT TIME 00278000
- LA R9,1(,R9) INCREMENT COUNT OF FST HYPERBLOCKS 00279000
- ST R3,ADTCHBA NEW POINTER TO CURRENT FST HYPERBLOCK 00280000
- LM R14,R0,REGSAV0 RESTORE R14-R15-R0 00281000
- * 00282000
- MOV40 MVC 0(40,R3),0(R7) MOVE ENTRY TO FST HYPERBLOCK 00283000
- * 00284000
- STM R14,R0,REGSAV0 SAVE R14-R15-R0 IN LOWER SAVE-AREA, 00285000
- USING FSTSECT,R3 00286000
- LM R0,R1,FSTT FILETYPE INTO R0-R1, 00287000
- L R15,ATYPSRCH CALL 'TYPSRCH' TO SEARCH FOR 00288000
- BALR R14,R15 OFTEN-USED FILTYPE 00289000
- O R15,ADTFTYP-3 'OR' END OF R15 INTO ADTFTYP FLAG-BYTE 00290000
- ST R15,ADTFTYP-3 (LEFTMOST 3 BYTES STILL INTACT) 00291000
- LA R0,1 R0 = 1 TEMPORARILY, 00292000
- STH R0,FSTRP ENSURE THAT READ-POINTER = 1 00293000
- CH R0,FSTWP IS WRITE-POINTER PERCHANCE = 1 ? 00294000
- BE RESTR0 TRF IF YES (LEAVE WELL ENOUGH ALONE). 00295000
- LH R14,FSTIC BUT OTHERWISE ALSO ENSURE 00296000
- N R14,F65535 THAT WRITE-POINTER 00297000
- AR R14,R0 = NUMBER OF ITEMS PLUS 1. 00298000
- STH R14,FSTWP ... 00299000
- RESTR0 LM R14,R0,REGSAV0 RESTORE R14-R15-R0 00300000
- DROP R3 00301000
- LA R6,1(,R6) BUMP NUMBER OF FILES MOVED 00302000
- ST R3,ADTCFST SAVE ADDRESS OF LAST ITEM FILLED IN 00303000
- LA R3,40(,R3) SET UP FOR NEXT 40-BYTE ENTRY 00304000
- BCT R4,LAR7 ITERATE THRU BOTH BLOCKS. 00305000
- * 00306000
- LA R5,RFST13 SET SWITCH TO GET ANOTHER BLOCK IF NEEDED 00307000
- * 00308000
- LAR7 LA R7,40(,R7) ITERATE THRU 800-BYTE INPUT BLOCK. 00309000
- BCT R8,SRCHLP ... 00310000
- L R14,DSKADR GET CORE-ADDRESS OF OLD DISK-ADDRESS, 00311000
- LA R14,2(,R14) ADD 2 FOR NEW DISK-ADDRESS, 00312000
- BCT R10,REFILL REFILL INPUT BUFFER IF ANY LEFT. 00313000
- * 00314000
- ST R9,ADTHBCT STORE HYPERBLOCK COUNT, 00315000
- ST R6,ADTFSTC AND NUMBER OF FILES (40-BYTE ENTRIES) 00316000
- CLI ADTM,S IS IT THE SYSTEM DISK ? @V305066 00317100
- BE RFST14 YES - OMIT NEXT SEVERAL INSTR. @V305032 00318100
- * 00319000
- LM R1,R2,ADTCHBA CURRENT HYPERBLOCK & FST BLOCK, 00320000
- SR R2,R1 MAKE LATTER A 'DISPLACEMENT', 00321000
- STM R1,R2,ADTLHBA STORE INFO. ON VERY LAST 40-BYTE ENTRY 00322000
- TM ADTFLG1,ADTFRO IS THE DISK READ-ONLY ? @V305032 00322100
- BO RFST14 YES - OMIT NEXT FEW INSTRUCTIONS @V305032 00322200
- A R9,ADTPQM2 COMPUTE ACCURATE RESERVE-COUNT 00323000
- AH R9,ADTRES ADD POSS. ADTRES SET UP BY READMFD 00324000
- LA R9,1(,R9) ADD 1 FOR POSSIBLE ADDED HYPERBLOCK 00325000
- STH R9,ADTRES AND STORE 'RESERVE-COUNT'. 00326000
- * 00327000
- RFST14 SR R1,R1 CLEAR R1 @V305032 00328100
- SR R0,R0 (AND R0), @V305032 00328200
- STM R0,R1,ADTCHBA CLEAR CURRENT HYPERBLOCK ADDRESS & DISPL. 00329000
- CLI ADTM,S IS IT THE SYSTEM DISK ? @V305066 00329075
- BE RFST15 YES - DON'T SORT IT NOW @V305032 00329150
- * (DONE LATER VIA CALL FROM DMSINS) 00329225
- LR R0,R11 NO - POINT TO ACTIVE DISK TABLE, @V305032 00329300
- L R15,=V(SORTFST) SORT ALL THE FST ENTRIES @V305032 00329375
- BALR R14,R15 (VIA SUBROUTINE IN DMSALU) @V305032 00329450
- TM ADTFLG1,ADTFRW IS IT A READ-WRITE DISK ? @V305032 00329525
- BO RFST15 YES - DON'T SET FLAG-BIT @V305032 00329600
- OI ADTFLG3,ADTFSORT SET "SORT" FLAG FOR R/O DISKS @V305032 00329675
- RFST15 EQU * CONTINUE ... @V305032 00329750
- LM R0,R1,JSR0 LOAD STORAGE DESCRIPTORS FOR FRET@VA04381 00330100
- DMSFRET DWORDS=(0),LOC=(1),TYPCALL=BALR @VA04381 00330200
- TM ADTFLG1,ADTFRW READ-WRITE DISK ? 00332000
- BO RFST16 BO IF YES, LEAVE MFD IN CORE. 00333000
- LM R0,R1,ADTMFDN BUT IF READ-WRITE, GIVE IT 00334000
- DMSFRET DWORDS=(0),LOC=(1),TYPCALL=BALR GIVE IT BACK @VM03083 00335100
- XC ADTMFDN(8),ADTMFDN CLEAR THE MFD COUNT & POINTER. 00336000
- * (BUT LEAVE ADTFMFD FLAG-BIT SET, FOR NOW) 00337000
- * 00338000
- * SIGNAL 'CP' (IF RUNNING THEREON) WE'RE THRU READING UFD 00339000
- RFST16 DS 0H (TO BE CODED - VIA 'DIAGNOSE' ETC.) 00340000
- NI ADTFLG3,255-ADTFORCE CLEAR "ADTFORCE" FLAG, @V305032 00341100
- NI UFDBUSY,255-ERBIT TURN OFF OUR UFDBUSY FLAG-BIT, 00342000
- LM R0,R15,REGSAV1 RESTORE R0-R14, RETURN-CODE TO R15 00343000
- LTR R15,R15 SET CONDITION-CODE FOR CONVENIENCE OF CALLER 00344000
- BR R14 AND RETURN TO CALLER. 00345000
- * 00346000
- * 00347000
- * 00348000
- RFST18 EQU * ERROR READING DISK ... 00349000
- MVI ERRCOD1,01 MAKE IT ERROR 1 (DEVICE ERROR) FOR LOGIN 00350000
- RFST19 LM R0,R1,JSR0 LOAD STORAGE DESCRIPTORS FOR FRET@VA04381 00351100
- LTR R0,R0 WAS THERE A BUFFER? @VA04381 00351200
- BZ RFST20 NO BUFFER IF LENGTH IS ZERO @VA04381 00351300
- DMSFRET DWORDS=(0),LOC=(1),TYPCALL=BALR @VA04381 00351400
- RFST20 EQU * @VA04381 00351500
- ST R9,ADTHBCT STORE HYPERBLOCK-COUNT 00353000
- LR R0,R11 POINT TO ACTIVE-DISK-TABLE 00354000
- L R15,ARELUFD RELEASE WHATEVER WE'VE GOT 00355000
- BALR R14,R15 VIA RELUFD 00356000
- B RFST16 GIVE UP (I GUESS). 00357000
- * 00358000
- CHEKNAME CLC PLNAM(*-*,R2),0(R7) CHECKS FILENAME FOR MATCH (VIA R14) 00359000
- CHEKTYPE CLC PLTYP(*-*,R2),8(R7) CHECKS FILETYPE FOR MATCH (VIA R15) 00360000
- * 00361000
- * 00362000
- CHEKSTAR LR R3,R1 SET UP TO CHECK FOR '*' 00363000
- LA R4,1 ... 00364000
- LA R5,6(,R3) ... 00365000
- LOOPSTAR CLI 0(R3),C'*' ASTERISK THERE ? 00366000
- BE STARFND TRF IF YES. 00367000
- BXLE R3,R4,LOOPSTAR ITERATE THRU FILENAME OR FILETYPE 00368000
- STARFND SR R3,R1 SUBTRACT STARTING-POINT (HAVE 0 TO 7 NOW) 00369000
- ST R3,0(,R6) STORE "COUNT-1" WHERE WE'RE SUPPOSED TO 00370000
- B 4(,R14) AND GO TO 4 BYTES BEYOND USUAL RETURN. 00371000
- * 00372000
- GETSTORE EQU * @VA04381 00372100
- LR R4,R14 SAVE RETURN REGISTER @VA04381 00372200
- DMSFREE DWORDS=(0),TYPE=NUCLEUS,ERR=*,TYPCALL=BALR @VA04381 00372300
- LTR R15,R15 TEST RETCODE FOR ERROR @VA04381 00372400
- BZR R4 RETURN TO CALLER IF NO ERROR @VA04381 00372500
- MVI ERRCOD1,5 SIGNAL FREE STORAGE EXHAUSTED @VA04381 00372600
- B RFST19 EXIT, SOONEST @VA04381 00372700
- * 00373000
- CLEARFRE XC 0(208,R1),0(R1) CLEAR FIRST 208 BYTES, 00374000
- MVC 208(200,R1),0(R1) NEXT 200 BYTES, 00375000
- MVC 408(200,R1),0(R1) THE NEXT 200 BYTES, 00376000
- MVC 608(200,R1),0(R1) AND LAST 200 BYTES INCLUDING POINTERS 00377000
- BR R14 AND EXIT (VIA R14). 00378000
- SPACE 3 00379000
- * CONSTANTS ... 00380000
- * 00381000
- AREADMFD DC A(READMFD) 00382000
- ARELUFD DC A(RELUFD) 00383000
- * 00384000
- S EQU C'S' @V305032 00384100
- LTORG 00384200
- EJECT 00385000
- NUCON 00386000
- ADT 00387000
- EJECT 00388000
- FVS 00389000
- SPACE 3 00390000
- FSTB 00391000
- EJECT 00392000
- * DEFINITIONS... 00393000
- * 00394000
- * PARAMETER-LIST (R2) DISPLACEMENTS... 00395000
- PLNAM EQU 8 FILE NAME 00396000
- PLTYP EQU 16 FILE TYPE 00397000
- PLMOD EQU 24 FILE MODE 00398000
- * 00399000
- REGEQU 00400000
- END 00401000
ibm/vm370-lib/cms/dmsacf.assemble_src.txt ยท Last modified: 2023/08/06 13:35 by Site Administrator