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