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