GETDIR860
(George Source)
Macros used: ACROSS, ADDSKIP, ALTLEN, ANSOK2, BXE, BXGE, BXL, BXU, FINDEXB, FREETAB, GEOERR, JBC, JBS, JFNZ, JFZ, JMBAC, JMBAS, JMBS, KEEPREP, KREPC, MENDAREA, MHUNT, MHUNTW, NAME, NEXTENT3, PTREP2, PUTREP2, READAGAIN, SEG, SEGENTRY, SETREP2, SETUPTAB, STEP, STEPAGAIN, TABSET, TABULATE, TESTUSER, TOPFCA2, TOPFCB2, TRACEIF, UP, WIND
- GETDIR860.txt
22FL ... SEG GETDIR,860,SECTION FILE,OPEN 22^= ...[ 23DW ...[ 23YG ... SEGENTRY K1GETDIR,XGETDIR0 25CB SEGENTRY K9GETDIR,WORKTAPE 25X2 SEGENTRY K10GETDIR,XGETDIR0 26BL SEGENTRY K11GETDIR,XGETDIR1 26W= SEGENTRY K12GETDIR,XGETDIR2 27*W SEGENTRY K13GETDIR,XGETDIR3 27TG SEGENTRY K14GETDIR,XGETDIR4 28*6 SEGENTRY K15GETDIR,XGETDIR5 28SQ SEGENTRY K16GETDIR,XGETDIR6 294J ... SEGENTRY K17GETDIR,XGETDIR7 29#B # 29S2 ...[ THIS SEGMENT IMPLEMENTS THE MACRO GETDIR AND LOCATES A SPECIFIC ENTRY 2?QG # ENTRY PTS ARE AS FOLLOWS :- 2#=6 ...[ K9GETDIR - RE-ENTRY FROM GETDIRX TO POSITION DIRECTORY FOR CREATI 2#PQ [ FILE CALLED 'WORK TAPE'. 2*9B [ K10GETDIR - GETDIR0. (IGNORE ERASEES AND POSITION DIRECTORY HAVING 2*P2 ...[ K1GETDIR JUST READ THE BLOCKS RECORD OF THE ENTRY, IF 2B8L [ K11GETDIR - GETDIR1. (IGNORE ERASEES AND POSITION DIRECTORY HAVING 2BN= [ JUST READ THE NAME RECORD OF THE ENTRY.) 2C7W [ K12GETDIR - GETDIR2. (NOTICE ERASEES AND POSITION DIRECTORY HAVING 2CMG ...[ JUST READ THE BLOCKS RECORD OF THE ENTRY, IF 2D76 [ K13GETDIR - GETDIR3. (NOTICE ERASEES AND POSITION DIRECTORY HAVING 2DLQ [ JUST READ THE NAME RECORD OF THE ENTRY.) 2D^7 ...[ K14GETDIR - GETDIR4. SPECIAL FACILITY FOR USEROPEN TO LOCATE ALL D 2F?J ...[ SPECIFIC NAME (ONLY USED IF TAPE REQUIRED). I 2FL2 [ K15GETDIR - GETDIR5. (AS GETDIR1 BUT ALSO INDICATE ANY OCCURRENCES 2G5L ...[ OF SINGLE AND MULTI FILES OF SAME NAME AS ENT 2GK= [ REQUIRED,VIA SUBSIDIARY REPLY WORD, THIS IS A 2H4W [ SPECIAL ENTRY FOR USERDIR ONLY.) 2HJG [ K16GETDIR - GETDIR6. (AS GETDIR3 BUT IF MULTIFILE PLUS 'ANY GEN' 2J46 [ REQUESTED DO NOT RESET GENERATION NUMBER TO 1 2JHQ [ THIS IS A SPECIAL ENTRY FOR ERASE ONLY.) 2JRJ ...[ K17GETDIR - GETDIR7. AS GETDIR5 BUT NOTICES ERASEES. USED BY FILE- 2K3B [ 2K?8 ...[ 2KH2 # THIS ROUTINE FINDS A DIRECTORY ENTRY IN AN OPEN DIRECTORY, DEALING 2L2L # WITH THE SPECIAL SETTING OF REEL NOS, FILE GENERATION NOS AND 2LG= # LANGUAGE. 2L^W # INPUT IS A FILE/FLOCNB. OUTPUT IS AN UPDATED FILE/FLOCNB AND THE 2MFG # DIRECTORY ENTRY IN A FILE/ENT BLOCK. THE FILE IS POSITIONED EITHER 2M^6 ...[ HAVING JUST READ THE BLOCKS RECORD OR HAVING JUST READ THE NAME RE 2NDQ # IF THE DIRECTORY ENTRY CANNOT BE FOUND, THE FILE/FLOCNB IS UPDATED 2NYB # READY FOR CREATING EXCEPT IN SOME OF THE CASES WHERE CREATION IS 2PD2 # IMPOSSIBLE. 2PXL # EACH DIRENT HAS A KEY FORMED BY SUMMING ITS LOCAL NAME,AND THE 2QC= # ENTRIES ARE KEPT IN ASCENDING KEY ORDER. EACH BLOCK HAS A HIGHEST 2QWW # KEY(THE BLOCK KEY),WHICH IS STORED IN A FILE/FINDEXF BLOCK IN THE 2RBG ...# FILE CHAIN. TO FIND THE DIRENT REQUIRED WE THEREFORE FIND THE FIRS 2RW6 # BLOCK WHOSE BLOCK KEY IS GREATER THAN OR EQUAL TO THE KEY OF THE 2S*Q # ENTRY AND STEP THROUGH IT LOOKING FOR THE ENTRY. 2STB # WITHIN EACH KEY ENTRIES ARE ALSO KEPT IN ORDER OF DESCENDING 2T*2 # GENERATION NUMBER(SUBKEY) AND ASCENDING REEL NUMBER(SUB-SUBKEY), 2TSL ...# SO TO FIND OUR ENTRY WE MUST FIND ONE WHICH MATCHES THE REQUIREMEN 2W#= # OF KEY,SUBKEY,SUB-SUBKEY WITH ALSO THE RIGHT NAMEAND LANGUAGE. 2WRW # SINCE DIRECTORIES ARE INDEXED BY LOCAL NAME AN INDEX SEARCH IS NOT 2X?G # POSSIBLE IF ONLY A TSN,USERNAME OR WORKTAPE NAME IS PRESENT IN THE 2XR6 # FLOCNB, IN WHICH CASE AFTER CHECKING THE FLOCNB DETAILS WE EXIT TO 2Y=Q # GETDIR WHICH PERFORMS A SERIAL SEARCH TO FIND THE ENTRY. 2YQB # 2^=2 # USES OF AWORK WORDS :- 2^PL # AWORK1 - CONTAINS THE KEY OF THE ENTRY TO BE FOUND. 329= # AWORK2 - CONTAINS A NUMBER OF SWITCHES AND MARKERS. 32NW # B0 : NOTICE ERASEES (GETDIR2 & 3) 338G ...# B1 : POSITION HAVING JUST READ NAME RECORD (RATHER THAN B 33N6 # B2 : SPECIAL ENTRY FROM USERDIR. 347Q # B3 : USERNAME IN FLOCNB. 34MB # B4 : SEARCHING BY T.S.N. 3572 # B5 : GETDIR4 - SET UP LIST OF TSN'S IN AONBS/GLIST BLOCK 35LL # & CORRESPONDING STACK OF TABS. 366= # B6 : LOOK FOR 'ANY' GENERATION. 36KW # B7 : TAB BLOCK SET UP AND WE HAVE FOUND A NAME MATCH AND 375G # A TSN HAS BEEN PUT IN THE AONBS/GLIST BLOCK. 37K6 # B8 : GETDIR FINISHED. NOW SEARCHING FOR OTHER SINGLE AND 384Q # MULTIFILES OF SAME NAME AS ENTRY REQD.,FOR USERDIR 38JB # B9 : ZERO GENERATION SPECIFICALLY REQUESTED.(B2 IN FLOCNB 3942 # B10: REQUIRED ENTRY IS A WORKTAPE NAME. 39HL ...# B11: SEARCHING BY KEY FORMED FROM USERNAME IN FLOCNB IN T 3=3= ...# CHANCE THAT USERNAME AND LOCAL NAME OF FILE ARE THE 3=GW # B12: LOOK FOR EITHER REEL 0 OR REEL 1(I.E. DEFAULT VALUE) 3?2G ...# DEPENDING ON WHETHER MATCHING ENTRY FOUND IS A MT OR 3?G6 ...# B13: NO 2ND SEARCH REQD. TO REPOSITION FOR CREATION IF NO 3?^Q # B14: AN ENTRY WITH THE RIGHT KEY HAS BEEN FOUND. 3#FB # B15: AN ENTRY WITH RIGHT NAME AND LANGUAGE HAS BEEN FOUND 3#^2 ...# B16: MORE THAN ONE ENTRY FOUND WITH RIGHT NAME AND LANGUA 3*DL # BITS 15 AND 16 ARE FOR USERDIR ONLY. 3*Y= # B17: SPECIAL ENTRY FROM ERASE - GETDIR6 3BCW # B18 TO B23: PRESERVES REPLY WHILE CONTINUING SEARCH AFTER 3BXG # GETDIR FINISHED.(FOR USERDIR ONLY) 3CC6 # AWORK3 - GENERAL PURPOSE WORK WORD. 3CWQ # AWORK4 - REPLY WORD FOR STREAMS. 3DBB # 3DW2 WORK 3F*L 4HWORK 3FT= 4H TAP 3G#W 4HE 3GSG ZGEOER1 3H#6 GEOERR 1,FLOCNB? 3KQ= ZBENT 3L9W GEOERR 1,FILEBENT 3L*R ...XGETDIR7 [SPECIAL "FILE HANDLER ON DIRECTORY" 3LFN ... LDCT 7 #700 3LKK ... BRN PGDE 3LPG XGETDIR6 [SPECIAL ERASE ENTRY 3M96 LDCT 7 #600 3MNQ ADN 7 #100 3N8B BRN PGDE 3NN2 XGETDIR5 [SPECIAL USERDIR ENTRY 3P7L LDCT 7 #300 3PM= BRN PGDE 3Q6W XGETDIR4 [GETDIR4 3QLG LDCT 7 #10 3R66 #SKI K6GETDIR>3-3 3RKQ ( 3S5B MHUNTW 3,AONBS,GLIST [CHECK LIST BLOCK PRESENT. 3SK2 BPZ 3 PGDE 3T4L GEOERR 1,NO GLIST 3TJ= ) 3W3W BRN PGDE 3WHG XGETDIR3 3X36 LDCT 7 #600 3XGQ BRN PGDE 3Y2B XGETDIR2 3YG2 LDCT 7 #400 3Y^L BRN PGDE 3^F= XGETDIR1 3^YW LDCT 7 #200 42DG BRN PGDE 42Y6 XGETDIR0 43XB LDN 7 0 44C2 PGDE 44WL ADDSKIP I516A,ILOCA 45B= STO 7 AWORK2(2) [ENTRY BITS FOR GETDIR. 45TW STOZ AWORK4(2) [SUBSIDIARY REPLY FOR STREAMS 46*G # CHECK THAT A DIRECTORY IS OPEN AT TOP LEVEL AND REPLY NAME IF NOT. 46T6 TOPFCB2 3 [X3 -> FCB 47#Q JBS YESDIR,3,BFDIR [J IF DIRECTORY. 47SB ... TRACEIF K6GETDIR,99,399,FLOC1(3),NAMEGD 48RL SETREP2 NAME 49?= UP 49QW YESDIR 4==G # NOW EXAMINE THE DETAILS OF THE FLOCNB. 4=Q6 MHUNT 3,FILE,FLOCNB 4=X# ...#SKI K6GETDIR>499-499 4?4G ... BLOCKTRA 3,FLOCNBEG 4?9Q LDX 0 ATYPE(3) [CHECK ATYPE FORMAT IN FLOCNB. 4?PB ANDN 0 #77 [MASK OFF SYNTAX BITS. 4#92 ... SBN 0 5 [ERROR IF BITS 18-20 SET OR ILLEGAL C 4#NL ... BPZ 0 ZGEOER1 [ARE SET (ALLOW BITS 22 & 23 TOGETHER 4*8= ... [ FNORM SETS BITS 16 & 23 FOR A WORKT 4*MW ... [ TS !WORK CAN ONLY WORK BY THIS FRIG 4B7G ... JBC NOTSN,3,BFABTSN [J IF NO TSN GIVEN 4BM6 # TEST FORMAT OF FLOCNB IS CORRECT FOR A TSN PRESENT. 4C6Q ... TRACEIF K6GETDIR,99,399,AWORK2(2),TSN 4D62 LDCT 0 #10 4DKL ANDX 0 AWORK2(2) 4F5= ... BNZ 0 ZGEOER1 [ERROR IF GETDIR4. 4FJW ... JMBAC ZGEOER1,3,BFABANY,BFABLIB [GEOERR IF NOT REQUESTING A TAPE 4H3Q LDX 0 ALOGLEN(3) [TSN -> ALOGLEN=8 4HHB SBN 0 8 4J32 BNZ 0 ZGEOER1 [J IF FLOCNB WRONG SIZE. 4JGL LDX 0 A1+7(3) [SERIAL NO MUST BE +VE IF THERE. 4K2= BNG 0 ZGEOER1 [ERROR IF XENOTAPE. 4KFW BZE 0 ZGEOER1 [ERROR IF NO TSN. 4K^G TESTUSER A1(3),ZGEOER1 [ERROR IF USERNAME IN FLOCNB. 4LF6 # WE NOW SET BIT 4 IN AWORK2 TO INDICATE THAT WE WILL BE SEARCHING BY 4LYQ # TSN WHEN WE EVENTUALLY ENTER THE SEARCH LOOP FOR THE DIRENT. 4MDB LDCT 0 #20 4MY2 ORS 0 AWORK2(2) 4NCL BRN TSHRIEK [J TO CHECK REEL & GENERATION NO. 4NX= [BEFORE ENTERING SEARCH LOOP. 4PBW NOTSN 4PWG # TEST FORMAT OF FLOCNB IS CORRECT WHEN NO TSN PRESENT. 4QB6 ... TRACEIF K6GETDIR,199,399,AWORK2(2),NOTSN 4R*B LDN 0 8 4RT2 BXL 0 ALOGLEN(3),ZGEOER1 [J IF LENGTH OF FLOCNB>8 4S#L TESTUSER A1(3),USERBIT [J IF USERNAME IN FLOCNB 4SS= ...TSHRIEK 4T?W ... JMBAS SHRIEKMT,3,BFABWORK,BFABLIB [J IF WORK TAPE (! + LIB) 4YP= BRN REELGEN [J TO LAST STAGE OF FLOCNB TESTS. 4^8W USERBIT 4^NG LDCT 0 #40 [SET USERNAME IN FLOCNB MARKER. 5286 ORS 0 AWORK2(2) 52MQ ... TRACEIF K6GETDIR,199,399,AWORK2(2),USERBIT 53M2 ... JMBS ZGEOER1,3,BFABEXO,BFABLIB [GEOERR IF EXOFILE OR MT REQUESTE 555W LDCT 0 #10 55KG ANDX 0 AWORK2(2) 5656 BNZ 0 ZGEOER1 [ERROR IF GETDIR4 WITH USERNAME. 56JQ LDX 4 A1+1(3) [MOVE USERNAME INTO X4,5 &6 574B LDX 5 A1+2(3) 57J2 LDX 6 A1+3(3) 583L LDX 0 A1+5(3) [TEST IF KEY GIVEN IN FLOCNB. 58H= BNZ 0 YESKEY [J IF SO. 592W LDX 0 BIT11 [INDICATES SEARCHING BY KEY 59GG ORS 0 AWORK2(2) [FORMED FROM USERNAME. 59NQ ... BRN XINDEX 59X2 ...SHRIEKMT 5=5= ... LDX 0 BIT10 5=?G ... ORS 0 AWORK2(2) [SET WORKTAPE MARKER IN SWITCH WORD 5=FQ REELGEN 5=^B # LAST STAGE OF FLOCNB TESTS. WE NOW CHECK THAT THE REEL AND GENERATION 5?F2 # NOS GIVEN ARE IN THE CORRECT FORMAT. 5?YL ... TRACEIF K6GETDIR,199,399,AWORK2(2),REELGEN 5#XW LDX 0 A1+3(3) [PICK UP REEL NUMBER 5*CG BXGE 0 ZERBITPLUS1(1),ZERR [REEL NO. MUST BE LESS THAN THIS. 5*X6 ANDX 0 MASKREEL(1) 5B9H ... BZE 0 REELOK [SOME BITS NOT ALLOWED IN REEL NO. 5BHY ... BRN ZERR 5BWB MASKREEL #67777000 [BITS NOT PERMITTED. 5CB2 ZERBITPLUS1 #10000001 [MAX REEL NO PLUS 1 5CTL REELOK 5D*= LDX 0 A1+3(3) 5DSW BNZ 0 NANY [J IF NOT DEFAULT VALUE FOR REEL. 5F#G LDN 0 #4000 5FS6 ORS 0 AWORK2(2) [SET 'DEFAULT REEL' MARKER. 5G?Q BRN NZERO 5GRB NANY 5H?2 LDCT 0 #100 5HQL ANDX 0 A1+3(3) 5J== BZE 0 NZERO [J IF NOT ZERO REEL 5JPW STOZ A1+3(3) [ZEROISE REEL NO. INFLOCNB 5K9G NZERO 5KP6 LDX 0 A1+4(3) [PICK UP GENERATION NUMBER. 5L8Q ANDX 0 MASKGEN(1) [SOME BITS NOT ALLOWED IN GEN. NO. 5LNB BZE 0 MGEN [J IF BITS OK. 5M82 LDX 0 A1+4(3) [GEN=4096 LEGAL FOR EXOFILES, NOT 5MML BXE 0 MB11XUDAS(1),WRGEN [FOR ENTRANTS. 5N7= ZERR 5NLW GEOERR 1,REELGEN 5P6G MASKGEN #07770000 5PL6 MB11XUDAS #00010000 [GEN. 4096 5Q5Q MGEN LDX 2 A1+4(3) [PICK UP GENERATION AGAIN. 5QKB LDN 0 0(2) [RID OF PLUS & MINUS BITS. 5R52 BXGE 0 ZERBITPLUS1(1),ZERR [ZERO BIT MUST BE ALONE. 5RJL SRL 2 21 [3 BITS OF GEN WORD LEFT. 5S4= LDCT 0 #720 5SHW SLL 0 0(2) [ERROR IF ANY BITS OTHER THAN 0,1 OR 5T3G BPZ 0 ZERR [2 ARE SET IN TOP HALF OF GEN WORD. 5TH6 LDX 2 FX2 5W2Q LDX 0 A1+4(3) 5WGB BNZ 0 NOTANY [J IF ANY GEN NOT SPECIFIED. 5X22 LDCT 0 #4 5XFL ORS 0 AWORK2(2) [SET 'ANY GEN' MARKER. 5X^= BRN NOTZERO 5YDW NOTANY 5YYG LDCT 0 #100 5^D6 ANDX 0 A1+4(3) 5^XQ BZE 0 NOTZERO [J IF NOT ZERO GENERATION. 62CB STOZ A1+4(3) [ZEROISE GEN. WORD IN FLOCNB. 62X2 LDX 0 BIT9 63BL ORS 0 AWORK2(2) [ZERO GENERATION MARKER. 63W= NOTZERO 64*W # ALL DETAILS OF THE FLOCNB HAVE NOW BEEN TESTED AND AWORK2 CONTAINS 64TG # THE VALUES USED THROUGHOUT THE SEGMENT. WE NOW TEST IF A SERIAL SEARCH 65*6 # IS NECESSARY TO FIND THE DIRENT(I.E. NO LOCAL NAME IN FLOCNB WHEN A 65SQ # TSN IS PRESENT,OR THE ENTRY IS A WORKTAPE). IF SO WE EXIT TO GETDIR. 66#B LDX 4 A1(3) 66S2 BZE 4 SERIAL [EXIT TO GETDIR IF NO LOCAL NAME 67?L LDX 5 A1+1(3) [X4,X5,X6 NOW CONTAIN 67R= LDX 6 A1+2(3) [LOCAL NAME 68=W LDX 0 BIT10 68QG ANDX 0 AWORK2(2) 69=6 BNZ 0 SERIAL [EXIT TO GETDIR IF WORKTAPE. 69PQ TOPFCB2 3 [X3 -> FCB 6=9B LDN 0 #77 6=P2 ANDX 0 FINFC(3) 6?8L BNZ 0 XINDEX [J IF FILE INDEXED 6?N= GEOERR 1,NOINDEX 6#7W SERIAL 6#MG ... TRACEIF K6GETDIR,99,399,A1(3),GDSERIAL 6BL2 ADDSKIP I516A,IGDIR 6C5L ACROSS GETDIRX,1 [EXIT TO GETDIRX FOR SERIAL SEARCH. 6CK= [ 6D4W ...WORKTAPE [RE-ENTRY FROM GETDIRX,TO POSITION FO 6DJG [ CREATING FILE CALLED - WORK TAPE. 6F46 LDN 1 WORK(1) 6FHQ SUM 0 3 6G3B BRN YESKEY 6GH2 XINDEX 6H2L ... TRACEIF K6GETDIR,199,399,4,LOCDIR 6H^W LDN 1 4 [CALCULATE KEY OF ENTRY BY SUMMING 6JFG SUM 0 3 [THE LOCAL NAME(OR USERNAME). 6J^6 YESKEY 6KDQ STO 0 AWORK1(2) [STORE KEY. 6KYB ... TRACEIF K6GETDIR,199,399,AWORK1(2),KEYDIR 6LXL CALL 7 XBLOCK [X3 -> 1ST REC. IN BLOCK WITH RT KEY. 6MC= BRN NOFILEB [J IF NO SUCH BLOCK 6MWW CALL 7 SFIRSTENT [X3 -> 1ST ENTRY IN BLOCK. 6NBG LDCT 0 #20 6NW6 ANDX 0 AWORK2(2) [J IF FILENAME SEARCH 6P*Q BZE 0 XFILE 6PKJ ... TRACEIF K6GETDIR,199,399,AWORK1(2),TSNSERCH 6PTB BRN XTSN 6Q*2 TSNXENT 6QSL CALL 7 NEXTENT3 6R#= BZE 3 TSNOFILE [J IF END OF DIRECTORY AND NO FILE. 6RRW XTSN 6S?G LDN 0 ELOC1N(3) 6SR6 ... SUM 7 3 6T=Q BXL 7 AWORK1(2),TSNXENT [J IF NOT UP TO KEY REQD. 6TQB BXE 7 AWORK1(2),XCHECK [J IF RIGHT KEY VALUE. 6W=2 BRN TSNOFILE [J IF NO REC. WITH KEY REQD. 6WPL XCHECK 6X9= LDN 0 #1000 6XNW ORS 0 AWORK2(2) [SET 'KEY FOUND' MARKER. 6Y8G ... LDX 0 ESERN(3) [IS ENTRY A FILE OR EXOFILE? 6YN6 BZE 0 NOTLIB [IF SO CHECK FOR VRYWRONG 6^7Q SBX 0 A1+7(1) 6^MB BNZ 0 TSNXENT [J IF TSN'S UNEQUAL & GET NEXT ENTRY 7272 CALL 7 NMATCH1 72LL BRN NDISAGREE [J IF NAMES DON'T MATCH 72MK ... LDCT 0 #004 72NJ ... ANDX 0 AWORK2(2) 72PH ... BNZ 0 XGENOK [J IF "ANY" GEN. SPECIFIED 72QG ... LDCT 0 #600 72RF ... ANDX 0 A1+4(1) 72SD ... BNZ 0 XGENOK [J IF +N OR -N GEN. REQUESTED 72TC ... LDX 0 A1+4(1) 72WB ... BXU 0 EGENN(3),NDISAGREE [J IF GEN. NO. DOESN'T MATCH 72X* ...XGENOK 72Y# ... LDN 0 #4000 72^? ... ANDX 0 AWORK2(2) 732= ... BNZ 0 XREELOK [J IF DEFAULT REEL REQUESTED 7339 ... LDX 0 A1+3(1) 7348 ... BXU 0 EREELN(3),NDISAGREE [J IF REEL NO. DOESN'T MATCH 7357 ...XREELOK 736= CALL 7 QUERAS [EXIT TO OK UNLESS ENTRY IS AN ERASEE 73KW BRN TSNXENT [AND "NOTICE ERASEES" BIT NOT SET. 745G # EXIT PLUS 1 REPORTS A MATCH. WE DON'T CHECK GEN.,REEL AND LANGUAGE AS 74K6 # WE HAVE A MAG. TAPE FILE WITH TSN AND LOCAL NAME MATCH. 754Q OK 75JB # NOW THE ENTRY IS FOUND,THE LOCAL NAME BLOCK IS UPDATED FROM THE ENTRY. 7642 # THE ENTRY IS LEFT IN CORE IN A FILE/ENT BLOCK AND THE FILE IS THEN 76HL # POSITIONED ACCORDING TO THE MACRO USED. 773= ... TRACEIF K6GETDIR,199,399,3,OK 77GW ... LDX 0 EGENN(3) [COPY GENERATION FROM ENTRY INTO FLOC 78G6 STO 0 A1+4(1) 78^Q LDX 0 EREELN(3) [COPY REEL NO. 79FB STO 0 A1+3(1) 79^2 LDX 0 ELANN(3) [COPY LANGUAGE. 7=DL STO 0 A1+5(1) 7=Y= LDN 7 ELOC1N(3) [COPY LOCAL NAME. 7?CW LDN 0 A1(1) 7?XG MOVE 7 3 7#C6 LDCT 0 #100 7#WQ ANDX 0 AWORK2(2) 7*BB BNZ 0 XTAB [J IF SPECIAL USERDIR ENTRY. 7*W2 ZOK 7B*L READAGAIN [GET NAME RECORD IN CORE. 7BT= MHUNTW 1,FILE,FRB 7C#W NAME 1,FILE,ENT [RENAME IT. 7CSG LDCT 0 #200 7D#6 ANDX 0 AWORK2(2) 7DRQ BNZ 0 UP [J IF POS. ON BLOCKS REQUESTED 7F?B LDEX 4 ECOPS(1) 7FR2 BZE 4 UP [J IF NO BLOCKS REC. 7G=L TCOPS 7GQ= STEP [SKIP PAST BLOCKS RECORD(S). 7H9W BCT 4 TCOPS 7HPG UP 7J96 ANSOK2 7JNQ UP2 7K8B LDX 0 AWORK4(2) [SUBSIDIARY REPLY 7KN2 PTREP2 0 7KSD ...NFUP 7KYW ...#SKI K6GETDIR>599-599 7L5# ...( 7L9Q ... MHUNT 3,FILE,FLOCNB 7LB8 ... BLOCKTRA 3,FLOCNEND 7LGL ...) 7LM= UP 7M6W NOTLIB 7MLG # CHECK FOR VRYWRONG IF FILE AND SHOULD BE LICRARIAN. 7N66 CALL 7 NMATCH 7NKQ ... BRN TSNXENT [J IF NAMES DONT MATCH-ERROR IF EXOFI 7P5B [FILE WITH SAME NAME AS TSN. 7PK2 VRYWRONG 7Q4L # THE ENTRANT FOUND IS ENTIRELY THE WRONG SORT. 7QJ= ... TRACEIF K6GETDIR,199,399,3,VRYWRONG 7RHG KEEPREP 7,VRYWRONG 7S36 ZOUT 7SGQ LDCT 0 #2 [TAB BLOCK SET UP? 7T2B ANDX 0 AWORK2(2) [J IF NOT. 7TG2 BZE 0 OUT 7T^L FREETAB 7WF= OUT 7WYW PUTREP2 7 [STORE REPLY IN EXEC3 7XDG UP 7XY6 NDISAGREE 7YCQ ... TRACEIF K6GETDIR,199,399,3,DISAGREE 7^C2 KEEPREP 7,DISAGREE [REPORT IF SERIAL MATCHES BUT 7^WL BRN OUT [NAME DOESN'T. 82B= NOFILEB 82F4 ... WIND 82HW ...# NEXT 5 LINES OR SO ARE A FRIG BECAUSE WIND FLOLLOWED BY STEP DOESN'T 82LN ...# ALWAYS WORK 82PG ... TOPFCB2 3 [X3->FCB 82S# ... LDN 0 FBLKS-A1 82X6 ... BXE 0 FBLMOD(3),XEMPTYFILE [J IF FILE EMPTY 82^Y ... STEPAGAIN [DEALS WITH FREADBLOCK BEING OFF END 834Q ... [ WHEREAS STEP DOESN'T 837J ...XEMPTYFILE 83=B ...# 83*G STEP 83T6 MHUNT 1,FILE,FLOCNB 84#Q LDN 0 #2000 84SB ORS 0 AWORK2(2) [SET 'NO 2ND SEARCH ' MARKER. 85#2 BRN NOFILEDF 85RL TSNOFILE 86?= # AN ENTRANT WITH MATCHING FILENAME AND TSN (OR KEY) HAS NOT BEEN FOUND. 86QW # WE MUST CALCULATE GENERATION AND REEL REQUIRED FOR THE GIVEN NAME AND 87=G ...# POSITION CORRECTLY FOR CREATING AN ENTRY BEFORE EXITING TO GETDIRX TO 87Q6 # TEST WHETHER NOFILE OR DISAGREE CASE. 889Q LDCT 0 #4 88PB ORS 0 AWORK2(2) 8992 ERS 0 AWORK2(2) [UNSET 'ANY GEN.' MARKER,IF SET. 89NL CALL 7 XBLOCK [X3->1ST REC. IN BLOCK WITH RT. KEY. 8=8= BRN NOFILEB 8=MW CALL 7 SFIRSTENT [X3->1ST ENTRY IN BLOCK. 8?7G BRN XFILE 8?M6 NXEFILE 8#6Q CALL 7 NEXTENT3 8#LB BZE 3 NOFILEDF [J IF END OF DIRECTORY AND NO FILE. 8*62 XFILE 8*KL ...# SEARCH FOR ENTRANT WITH REQUIRED KEY. IF A SPECIFIED GENERATION(SUBKEY 8B5= ...# AND SPECIFIED REEL(SUB-SUBKEY)ARE GIVEN IN THE FLOCNB WE THEN SEARCH F 8BJW # AN ENTRY WHICH HAS THESE REQUIREMENTS AND THE RIGHT NAME. IF NOT WE DO 8C4G # A PRELIMINARY SEARCH THROUGH ENTRIES WITH THE RIGHT NAME TO CALCULATE 8CJ6 # THE GENERATION AND REEL BEFORE SEARCHING FOR THE ACTUAL ENTRY REQUIRED 8D3Q LDN 0 ELOC1N(3) [CALCULATE KEY OF DIRENT. 8DHB SUM 7 3 8F32 BXL 7 AWORK1(2),NXEFILE [J IF NOT UP TO KEY REQD. YET 8FGL LDX 0 BIT10 8G2= ANDX 0 AWORK2(2) 8GFW BNZ 0 NOUT [J IF WORKTAPE 8G^G BXE 7 AWORK1(2),SCHECK 8HF6 BRN NOFILEDF [J IF NO REC. WITH KEY REQD. 8HYQ SCHECK 8JDB LDN 0 #1000 8JY2 ORS 0 AWORK2(2) [SET 'KEY FOUND' MARKER. 8KCL LDCT 0 #40 8KX= ANDX 0 AWORK2(2) 8LBW BZE 0 NOTUSER [J IF NO USERNAME IN FLOCNB 8LWG TXU 4 EUSE1N(3) 8MB6 TXU 5 EUSE2N(3) 8MTQ BXU 6 EUSE3N(3),NXEFILE [J IF USERNAMES DO NOT MATCH. 8N*B CALL 7 QUERAS [EXIT TO OK UNLESS ENTRY IS AN ERASEE 8NT2 BRN NXEFILE [AND "NOTICE ERASEES" BIT NOT SET. 8P#L NOTUSER 8PS= LDCT 0 #4 8Q?W ANDX 0 AWORK2(2) 8QRG BNZ 0 NOGEN [J IF 'ANY GEN' SPECIFIED. 8R?6 LDCT 0 #600 8RQQ ANDX 0 A1+4(1) [J IF LATEST PLUS/MINUS N GENERATION 8S=B BNZ 0 NOGEN [SPECIFIED. 8SQ2 LDN 0 #4000 8T9L ANDX 0 AWORK2(2) 8TP= BNZ 0 NOGEN [J IF 'ANY REEL' SPECIFIED. 8W8W LDN 0 #2000 8WNG ORS 0 AWORK2(2) [SET 'NO 2ND SEARCH' MARKER. 8X86 CALL 7 NMATCH [IF NAMES DON'T MATCH WE DON'T CHECK 8XMQ BRN NOSTREAM [STREAMS OR SYNTAX. 8Y7B BRN SYNCHECK 8YM2 NOGEN 8^6L CALL 7 NMATCH 8^L= BRN NXEFILE [J IF NAMES DONT MATCH 924J ...SYNCHECK 92GW ... JFNZ SYNNFILE,1,FFABTYPE [J IF NOT REQUESTING FILE 92^8 ... JMBS VRYWRONG,3,BNLIB,BNEXO [ERROR IF FOUND TAPE OR EXOFILE 93CG ... BRN SYNTOK 93TS ...SYNNFILE 94#6 ... JBC SYNNLIB,1,BFABLIB [J IF NOT REQUESTING TAPE 94QD ... JBC VRYWRONG,3,BNLIB [ERROR IF FOUND FILE OR EXOFILE 958Q ... BRN SYNTOK 95M4 ...SYNNLIB 965B ... JBC SYNTOK,1,BFABEXO [J IF NOT REQUESTING EXOFILE 96HN ... JBC VRYWRONG,3,BNEXO [ERROR IF FOUND FILE OR TAPE 9726 SYNTOK 97FQ CALL 7 XCHSTR [STREAMS CHECKING 97^B NOSTREAM 98F2 LDCT 0 1 98YL ANDX 0 AWORK2(2) [J IF IN SEARCH LOOP FOR SINGLE AND 99D= BNZ 0 NXEFILE [MULTIFILES AFTER GETDIR FINISHED. 99XW ...# WE HAVE AN ENTRY WITH A KEY MATCH. WE NOW CHECK IF THE GENERATION 9=CG # GIVEN IN ENTRY MATCHES OUR REQUIREMENTS. ENTRIES ARE STORED IN THE 9=X6 ...# DIRECTORY IN DESCENDING GENERATION NO. ORDER,SO IF 'ANY' OR 'HIGHEST' 9?BQ # HAS BEEN REQUESTED WE ALREADY HAVE THE ENTRY WE NEED OTHERWISE WE 9?WB # CONTINUE THE SEARCH. 9#B2 ... TRACEIF K6GETDIR,199,399,4,KEYMATCH 9**= LDCT 0 #4 9*SW ANDX 0 AWORK2(2) [GEN. NO IN FLOCNB. 9B#G BNZ 0 POSGEN1 [J IF 'ANY' GEN. REQUESTED. 9BS6 LDCT 0 #600 [B0,B1 9C?Q ANDX 0 A1+4(1) [J IF HIGHEST OR HIGHEST PLUS/MINUS N 9CRB BNZ 0 ULTGEN [GEN. REQUESTED. 9D?2 # SPECIFIC GEN. GIVEN 9DQL NOWGEN 9F== LDX 0 EGENN(3) 9FPW BXE 0 A1+4(1),TGENOK [J IF GEN NOS EQUAL 9G9G BXL 0 A1+4(1),NOFILEDF [J IF GEN. IN ENTRY<GEN. IN FLOCNB. 9GP6 BRN NXEFILE 9H8Q ULTGEN 9HNB LDX 0 AWORK2(2) 9J82 BNG 0 XLATEST [J IF ERASEES TO BE NOTICED. 9JML JBS NXEFILE,3,BNERASE [TRY AGAIN IF MARKED TO BE ERASED. 9K7= XLATEST 9KLW LDN 0 #7777 9L6G ANDX 0 A1+4(1) 9LL6 BNZ 0 NHIGH [J IF NOT HIGHEST. 9M5Q LDX 0 EGENN(3) 9MKB STO 0 A1+4(1) 9N52 BRN TGENOK 9NCC ...NHIGH 9NPS ... LDN 7 1 [INITIALISE SWITCH TO 'LATEST +N' 9P4= LDX 0 A1+4(1) [J IF HIGHEST PLUS N REQUESTED 9PHW BPZ 0 SPOS [J IF LATEST PLUS N REQUESTED 9Q3G NGX 0 0 9QH6 STOZ 7 [SWITCH TO INDICATE LATEST -N. 9R2Q SPOS 9RGB SLL 0 2 [TIDY UP TOP TWO BITS OF GEN. 9S22 SRA 0 2 [X0 CONTAINS + OR - N. 9SFL ADX 0 EGENN(3) [X0 = HIGHEST GEN. + OR - N. 9S^= BNG 0 WRGEN [J IF OUT OF RANGE. 9TDW STO 7 GEN6 9TYG LDX 7 0 [CALCULATED GENERATION MUST BE 9WD6 SRL 7 12 [LESS THAN 4096. 9WXQ BNZ 7 WRGEN [ERROR IF NOT. 9XCB LDX 7 ATYPE(1) [LOOK AT SYNTAX BITS. 9XX2 ANDN 7 #77 9YBL BNZ 7 STOGEN [J IF MT ENTRANT. 9YW= BZE 0 WRGEN [ZERO GEN WRONG IF FILE 9^*W STOGEN 9^TG STO 0 A1+4(1) [IF HIGHEST - N CONTINUE SEARCH. =2*6 LDX 7 GEN6 =2SQ BZE 7 NXEFILE [FOR ENTRY REQUIRED. =3#B # LATEST +N GEN. CANNOT EXIST. IT IS USED FOR CREATE PURPOSES TO FIND =3S2 # VALUE OF LATEST GEN. SO A HIGHER ONE CAN BE CREATED. N IS USUALLY =1. =4?L BRN NOFILEF [REPLY NOFILE. =4R= WRGEN =5=W # THE GENERATION GIVEN OR CALCULATED TURNS OUT TO BE WRONG. =5QG ... TRACEIF K6GETDIR,199,399,3,WRGEN =6PQ KEEPREP 7,WRGEN =79B BRN ZOUT =7P2 POSGEN1 =88L ... JMBAC TGENOK,3,BNMDF,BNMULT [J IF NOT MDF OR MULTIFILE COMPO =8N= LDN 0 #100 =97W ANDX 0 AWORK2(2) =9MG BNZ 0 TGENOK [J IF SPECIAL ERASE ENTRY. =9QL ... LDX 0 A1+5(1) =9TQ ... BZE 0 SETGEN [NO LANGUAGE SPECIFIED IN FLOCNB =9YW ... BXU 0 ELAN-A1(3),TGENOK [J IF DIFFERENT LANGUAGES ==42 ...SETGEN ==76 LDN 0 1 ==LQ STO 0 A1+4(1) [SET GEN =1 IN FLOCNB =?6B LDCT 0 #4 =?L2 ERS 0 AWORK2(2) [UNSET 'ANY GEN' MARKER. =#5L BRN NOWGEN [NOW TEST IF SAME AS GEN. FOUND. =#K= TGENOK =*4W LDN 0 #4000 =*JG ANDX 0 AWORK2(2) =B46 BZE 0 MATCH [J IF NOT DEFAULT. =BHQ ... ERS 0 AWORK2(2) [UNSET 'DEFAULT REEL' MARKER. =C3B ... JBS MATCH,3,BNLIB [J IF ENTRY FOUND IS A MT =D2L LDN 0 1 =DG= ... STO 0 A1+3(1) [UPDATE REEL TO 1 FOR A FILE. =D^W MATCH =FFG LDX 0 EREELN(3) [REEL NO. IN ENTRY =F^6 BXE 0 A1+3(1),OKREEL [J IF REEL NOS. EQUAL. =GDQ BXL 0 A1+3(1),NXEFILE [J IF REEL IN ENTRY < REEL IN FLOCNB. =GYB LDCT 0 #4 [IF 'ANY GEN' WAS SPECIFIED WE TRY =HD2 ANDX 0 AWORK2(2) [AGAIN WITH ANOTHER GENERATION NO. =HXL BNZ 0 NXEFILE =JC= BRN NOFILEDF [OTHERWISE NOFILE CASE. =JWW OKREEL =KBG CALL 7 NMATCH =KW6 BRN NXEFILE [J IF NAMES DON'T MATCH. =L*Q ... LDCT 0 #20 [EXIT TO GETDIRX IF TSN SEARCH TO =LTB ANDX 0 AWORK2(2) [DETERMINE WHETHER NOFILE OR DISAGREE =M*2 BNZ 0 SERIAL [NOW WE ARE CORRECTLY POSITIONED. =MSL # REEL AND GEN NOS OKAY. NOW TEST LANGUAGE. =N#= LDX 0 A1+5(1) [LANGUAGE IN FLOCNB. =NRW BZE 0 OKLAN [J IF 'ANY' REQUESTED. =P?G SBX 0 ELAN-A1(3) =PR6 BNZ 0 NXEFILE [GET NEXTENT IF LANGUAGES UNEQUAL. =Q=Q OKLAN =QQB # ENTRY FOUND WHICH MATCHES REQUIREMENTS. CHECK IF GETDIR4 =R=2 LDCT 0 #10 =RPL ANDX 0 AWORK2(2) =S9= BNZ 0 YGET4 [J IF GETDIR4 =SNW CALL 7 QUERAS [EXIT TO OK UNLESS ENTRY IS AN ERASEE =T8G BRN NXEFILE [AND "NOTICE ERASEES" BIT NOT SET. =TN6 YGET4 =TQP ...[ TEST IF ERASE BIT SET =TT# ... LDX 0 AWORK2(2) =TXX ... BNG 0 YGET5 =W2G ... JBS NXEFILE,3,BNERASE =W55 ...YGET5 =W7Q # GETDIR4 - ENTRY FOUND. ADD A T.S.N TO AONBS/GLIST BLOCK AND ADD A =WMB # TAB TO THE STACK. =X72 LDX 0 ESERN(3) =XLL BZE 0 VRYWRONG =Y6= STO 0 AWORK3(2) [STORE T.S.N OVER COORDINATION. =YKW ... TRACEIF K6GETDIR,99,399,0,SN ONLIN =^K6 LDCT 0 #2 ?24Q ANDX 0 AWORK2(2) ?2JB BNZ 0 YESTAB [J IF TAB BLOCK ALREADY SET UP. ?342 SETUPTAB ?3HL LDCT 0 #2 ?43= ORS 0 AWORK2(2) [SET MARKER FOR TSN FOUND AND ?4GW YESTAB [TAB BLOCK SET UP. ?52G CALL 7 TABSET [SET TAB ?5G6 MHUNTW 3,AONBS,GLIST [LIST BLOCK. ?5^Q LDX 0 ALOGLEN(3) ?6FB STO 0 A1(3) [COUNT OF TSN'S. ?6^2 ADN 0 1 ?7DL STO 0 7 ?7Y= ALTLEN 3,7,AONBS,GLIST [LENGTHEN LIST BLOCK. ?8CW MHUNTW 3,AONBS,GLIST ?8XG ADX 3 ALOGLEN(3) ?9C6 LDX 0 AWORK3(2) ?9WQ STO 0 A1-1(3) ?=BB NXEFILE2 ?=W2 STEPAGAIN [RESET X3 -> CURRENT REC. ??*L BRN NXEFILE ??T= # END OF SEARCH. UNSUCCESSFUL (UNLESS GETDIR4 WHERE A TSN MAY ALREADY ?##W # HAVE BEEN FOUND AT SOME STAGE). ?#SG NOFILEDF ?*#6 LDCT 0 1 ?*RQ ANDX 0 AWORK2(2) [J IF IN SEARCH LOOP FOR SINGLE ?B?B BNZ 0 YTAB [AND MULTIFILES AFTER GETDIR FINISHED ?BR2 LDCT 0 #10 ?C=L ANDX 0 AWORK2(2) ?CQ= BZE 0 NOFILEF [J IF NOT GETDIR4. ?D9W ... TRACEIF K6GETDIR,99,399,7,GDE4END ?F96 LDCT 0 #2 ?FNQ ANDX 0 AWORK2(2) [HAS A MATCHING ENTRY BEEN FOUND ?G8B BNZ 0 UP [EXIT IF SO. ?GN2 BRN ZGEN2 ?H7L NOFILEF ?HM= ... TRACEIF K6GETDIR,199,399,3,NOFILEF ?JLG LDX 0 BIT11 [EXIT TO GETDIR AND SERIAL SEARCH FOR ?K66 ... ANDX 0 AWORK2(2) [FILENAME IF NOT FOUND BY USERNAME KE ?KKQ BNZ 0 SERIAL ?L5B LDCT 0 #40 ?LK2 ADX 0 BIT10 ?M4L ANDX 0 AWORK2(2) [J IF USERNAME OR WORKTAPE AS ?MJ= BNZ 0 NOUT [FLOCNB ALREADY UPDATED BY GETDIRX. ?N3W ZGEN2 ?NHG LDCT 0 #600 [TEST IF LATEST OR LATEST PLUS OR ?P36 ANDX 0 A1+4(1) [MINUS N GEN REQUESTED. ?PDR ... BZE 0 ZGEN [J IF NOT ?PWF ... LDX 7 A1+4(1) ?Q=8 ... LDX 0 7 ?QKX ... ANDN 0 #7777 ?Q^L BPZ 7 YPOS [J IF 'HIGHEST +N' REQUESTED. ?RF= ... STOZ 0 ?RYW YPOS ?SDG ... STO 0 A1+4(1) [X0 CONTAINS +N OR ZERO. ?SY6 ... BZE 0 ZGEN [J IF N IS ZERO ?TCQ ... JFZ NOTZGN,1,FFABTYPE [J IF REQUESTING FILE ?TXB ... LDN 0 1 [SUBTRACT 1 SINCE MINIMUM GEN. NO. FO ?WC2 ... SBS 0 A1+4(1) [ OR EXOFILE IS ZERO, NOT 1 ?YT6 ...ZGEN ?^7H ... JBS NOTZGN,1,BFABEXO [J IF REQUESTING EXOFILE ?^FY ... JFNZ NLANG,1,FFABTYPE [J IF NOT REQUESTING FILE (LEAVE ?^SB ... [ GEN. NO. AS ZERO FOR EXOFILE OR TAP #2#2 ... LDX 0 A1+4(1) [IF FILE & GEN 0, UPDATE TO 1 #2RL ... BNZ 0 NOTZGN #692 LDN 0 1 #6NL STO 0 A1+4(1) #78= NOTZGN #7MW ... LDN 0 1 [SET REEL TO 1,FOR A FILE OR EXOFILE #87G STO 0 A1+3(1) #8M6 NLANG #96Q LDX 0 A1+5(1) [PICK UP LANGUAGE. #9LB BNZ 0 NOUT2 [J IF NONZERO. #=62 LDX 0 ACES [SET EQUAL TO 4 SPACES. #=KL STO 0 A1+5(1) #?5= NOUT2 #?JW LDCT 0 #4 ##4G ORS 0 AWORK2(2) ##J6 ERS 0 AWORK2(2) [UNSET 'ANY GEN.' MARKER. #*3Q LDN 0 #4000 #*HB ORS 0 AWORK2(2) #B32 ERS 0 AWORK2(2) [UNSET 'DEFAULT REEL' MARKER. #BGL LDN 0 #1000 #C2= ANDX 0 AWORK2(2) #CFW BZE 0 NOUT1 [J IF 'KEY FOUND' NARKER NOT SET. #C^G LDN 0 #2000 [GO THROUGH SEARCH AGAIN TO POSITION #DF6 ANDX 0 AWORK2(2) [CORRECTLY FOR CREATING AN ENTRY IF #DYQ BZE 0 TSNOFILE ['NO 2ND SEARCH' MARKER NOT SET. #FDB NOUT1 #FY2 LDCT 0 #20 #GCL ANDX 0 AWORK2(2) #GX= BNZ 0 SERIAL [J IF TSN SEARCH. #HBW NOUT #HWG SETREP2 NOFILE #JB6 ORS 0 AWORK2(2) #JTQ LDCT 0 #100 #K*B ANDX 0 AWORK2(2) #KT2 BZE 0 NFUP [J IF NOT USERDIR. #L#L BZE 3 UP2 [J IF E.O.F. #N?6 XTAB #NKH ... TRACEIF K6GETDIR,199,399,2,GDTABBL #NXY ... LDCT 0 1 [INDICATES FINISHED GETDIR BUT LOOKIN #P=B ORS 0 AWORK2(2) [MORE FILES OF THE SAME NAME AS ENTRY #PQ2 ... SETUPTAB [PRESERVE CURRENT READ POSITION IN FI #Q9L CALL 7 TABSET #QP= BRN NXEFILE2 [GET NEXT ENTRY. #R8W YTAB #RDN ... TRACEIF K6GETDIR,199,399,2,GDTAB #RNG TABULATE [READJUST READ POINTERS OF FILE. #S86 FREETAB [FREE TAB BLOCK. #SMQ LDN 0 ANSNOFILE #T7B ANDX 0 AWORK2(2) #TM2 BZE 0 ZOK1 #W6L STO 0 EXEC3(2) #WL= BRN UP2 [IF NOFILE NOTHING FURTHER TO DO. #X5W ZOK1 #XKG LDN 0 #200 #Y56 ANDX 0 AWORK2(2) #YJQ BNZ 0 ZOK #^4B STOZ AWORK4(2) [ZEROISE SUBSIDIARY REPLY FOR USERDIR #^J2 BRN ZOK [IF ONLY ONE ENTRY FOUND IN OK CASE. *23L # *2H= # THIS SUBROUTINE POSITIONS THE FILE ON THE FIRST RECORD OF THE *32W # BLOCK WITH HIGH ENOUGH KEY TO CONTAIN THE REQUIRED ENTRY. *3GG # *426 XBLOCK *4FQ SBX 7 FX1 [DECROMENT LINK *4^B FINDEXB ,3 [X3 -> FI/FINDEXF BLOCK. *5F2 LDX 2 A1(3) *5YL SBN 2 3 [X2 IS NO OF BLOCKS. *6D= BZE 2 TEXIT [J IF NO BLOCKS IN FILE. *6XW STOZ 0 *7CG XLOOP *7X6 ADN 0 1 [X0 INDICATES CURRENT BLOCK OF FILE. *8BQ LDX 1 INDEXREC(3) *8WB SMO FX2 *9B2 BXGE 1 AWORK1,YEXIT [J IF FOUND A BLOCK WITH LARGE *9TL ADN 3 1 [ENOUGH KEY. *=*= BCT 2 XLOOP [BRANCH IF MORE BLOCKS IN FILE. *=SW TEXIT *?#G ADX 7 FX1 [INCREMENT LINK. *?S6 LDX 2 FX2 *#?Q EXIT 7 0 [EXIT NOT FOUND. *#RB YEXIT **?2 ... TRACEIF K6GETDIR,199,399,1,YBLOCK *B== LDX 2 FX2 *BPW LDX 1 0 *C9G TOPFCA2 3 *CP6 ADN 1 FBLKS-1 [F'BLK PTS TO REQUIRED BLOCK. *D8Q STO 1 FREADBLOCK(3) [F'WORD -VE IMPLIES ABOUT TO READ *DNB NGS 1 FREADWORD(3) [1ST. RECORD OF THIS BLOCK. *F82 STEP [X3 -> FIRST REC. IN FURB. *FML ADX 7 FX1 [INCREMENT LINK. *G7= EXIT 7 1 [EXIT OKAY *GLW # *H6G # ON ENTRY TO SFIRSTENT X3 -> 1ST RECORD IN 1ST BLOCK OF DIRECTORY WITH *HL6 ...# HIGH ENOUGH KEY TO CONTAIN THE SOUGHT DIRENT. THIS SUBROUTINE POSITION *J5Q # THE DIRECTORY ON THE FIRST DIRENT IN THIS BLOCK *JKB # *K52 SFIRSTENT *KJL SBX 7 FX1 [DECREMENT LINK. *L4= SFIRSTENT1 *LHW LDX 0 ERESN(3) [ZERO IF NAME RECORD. *M3G BZE 0 SEXIT [J IF SO *MH6 STEP [GET NEXT RECORD. *N2Q BZE 3 ZBENT [J IF END OF DIRECTORY. *NGB BRN SFIRSTENT1 *P22 # THIS SUBROUTINE GETS THE NEXT DIRENT IN THE DIRECTORY BY SKIPPING OVER *PFL # THE BLOCKS AND TRAPS RECORDS OF THE CURRENT ENTRY. ON ENTRY X3 POINTS *P^= # TO THE CURRENT ENTRY. *QDW NEXTENT3 *QYG SBX 7 FX1 [DECREMENT LINK *RXQ LDEX 1 ECOPSN(3) [BLOCKS RECORD (=0 OR 1) *SCB ADX 1 ENUSEN(3) [TRAPS *SX2 JBC NOIX,3,BNINDEX [J IF NO INDEX RECORD *TBL ADN 1 1 [INDEX RECORD. *TW= NOIX *W*W ADN 1 1 [CURRENT NAME RECORD *WTG STO 1 AWORK3(2) [STORE NO OF RECS TO BE SKIPPED. *X*6 SKIPCT *XSQ STEP [GET NEXT RECORD *Y#B LDX 0 AWORK3(2) *YS2 SBN 0 1 [DECREMENT COUNT *^?L STO 0 AWORK3(2) *^R= BNZ 3 STEPOK [J IF NOT E.O.F. B2=W BZE 0 SEXIT [J IF COUNT ZERO. B2QG BRN ZBENT [ERROR IF NOT FINISHED SKIPPING. B3=6 STEPOK B3PQ LDX 1 ERESN(3) [ZERO IF NAME RECORD. B49B BNZ 1 SKIPCT [J IF NOT. B4P2 BNZ 0 ZBENT [ERROR IF NAME REC. & COUNT NON-ZERO. B58L SEXIT B5N= MHUNT 1,FILE,FLOCNB [SET X1 -> FLOCNB B67W TABEXIT B6MG ADX 7 FX1 [INCREMENT LINK. B776 EXIT 7 0 B7LQ # B86B # THIS SUBROUTINE CHECKS WHETHER ERASEES SHOULD BE NOTICED,BRAN.ING TO B8L2 # LABEL OK IF THEY SHOULD,OR IF THE ENTRY POINTED TO BY X3 IS NOT MARKED B95L # TO BE ERASED. OTHERWISE IXITS NORMALLY(TO GET NEXT ENTRY). B9K= # B=4W QUERAS B=JG LDX 0 AWORK2(2) B?46 BNG 0 OK [J IF ERASEES TO BE NOTICED. B?HQ JBC OK,3,BNERASE [J IF ENTRY NOT MARKED TO BE ERASED. B#3B EXIT 7 0 [TRY AGAIN. B#H2 # B*2L # THIS SUBROUTINE IS ENTERED WITH X3 -> A DIRECTORY ENTRY AND X4,X5,X6 B*G= # CONTAINING A LOCAL NAME. IT EXITS PLUS 1 IF THE NAME MATCHES THAT IN B*^W # THE ENTRY AND PLUS 0 OTHERWISE. BBFG # BB^6 NMATCH1 BCDQ LDX 0 ELOC1N(3) BCYB BZE 0 XIT BDD2 NMATCH BDXL TXU 4 ELOC1N(3) BFC= TXU 5 ELOC2N(3) BFWW BXU 6 ELOC3N(3),(7) BGBG XIT BGW6 EXIT 7 1 BH*Q # BHTB # THIS SUBROUTINE SETS A TAB IN THE TAB BLOCK. BJ*2 TABSET BJSL SBX 7 FX1 BK#= TABSET BKRW BRN TABEXIT BL?G # BLR6 # SUBROUTINE FOR STREAMS CHECKING. BM=Q # BMQB XCHSTR BN=2 LDX 0 A1+5(1) BNPL BZE 0 X [J IF FLOCNB LANGUAGE ZERO. BP9= BXU 0 ELAN-A1(3),(7) [EXIT IF WRONG LANGUAGE GIVEN. BPNW X BQ8G JMBAC Y,3,BNMDF,BNMULT [J IF NOT MDF OR MULTIFILE COMPONENT. BQN6 KREPC 0,MULTI [MULTI-FILE. BR7Q BRN Z BRMB Y BS72 KREPC 0,SINGLE [SINGLE FILE. BSLL Z BT6= ORS 0 AWORK4(2) BTKW LDCT 0 #100 BW5G ANDX 0 AWORK2(2) BWK6 BZE 0 NGDUS BX4Q LDN 0 #400 BXJB ANDX 0 AWORK2(2) BY42 BZE 0 NOTSET [J IF 1ST ENTRY TO BE FOUND. BYHL SRL 0 1 [IF NOT,SET MARKER TO INDICATE B^3= ORS 0 AWORK2(2) [MORE THAN ONE ENTRY FOUND. B^GW BRN NGDUS C22G NOTSET C2G6 LDN 0 #400 C2^Q ORS 0 AWORK2(2) C3FB NGDUS C3^2 EXIT 7 0 C4DL [ C4Y= MENDAREA 50,K99GETDIR C5CW [ C5XG #END ^^^^ ...44554273001300000000