{{htmlmetatags>metatag-description:(ICL George 3 and George 4 source: GETDIR860)}}
====== GETDIR860 ======
(George Source)
**Macros used:** [[george:macro:ACROSS|ACROSS]], [[george:macro:ADDSKIP|ADDSKIP]], [[george:macro:ALTLEN|ALTLEN]], [[george:macro:ANSOK2|ANSOK2]], [[george:macro:BXE|BXE]], [[george:macro:BXGE|BXGE]], [[george:macro:BXL|BXL]], [[george:macro:BXU|BXU]], [[george:macro:FINDEXB|FINDEXB]], [[george:macro:FREETAB|FREETAB]], [[george:macro:GEOERR|GEOERR]], [[george:macro:JBC|JBC]], [[george:macro:JBS|JBS]], [[george:macro:JFNZ|JFNZ]], [[george:macro:JFZ|JFZ]], [[george:macro:JMBAC|JMBAC]], [[george:macro:JMBAS|JMBAS]], [[george:macro:JMBS|JMBS]], [[george:macro:KEEPREP|KEEPREP]], [[george:macro:KREPC|KREPC]], [[george:macro:MENDAREA|MENDAREA]], [[george:macro:MHUNT|MHUNT]], [[george:macro:MHUNTW|MHUNTW]], [[george:macro:NAME|NAME]], [[george:macro:NEXTENT3|NEXTENT3]], [[george:macro:PTREP2|PTREP2]], [[george:macro:PUTREP2|PUTREP2]], [[george:macro:READAGAIN|READAGAIN]], [[george:macro:SEG|SEG]], [[george:macro:SEGENTRY|SEGENTRY]], [[george:macro:SETREP2|SETREP2]], [[george:macro:SETUPTAB|SETUPTAB]], [[george:macro:STEP|STEP]], [[george:macro:STEPAGAIN|STEPAGAIN]], [[george:macro:TABSET|TABSET]], [[george:macro:TABULATE|TABULATE]], [[george:macro:TESTUSER|TESTUSER]], [[george:macro:TOPFCA2|TOPFCA2]], [[george:macro:TOPFCB2|TOPFCB2]], [[george:macro:TRACEIF|TRACEIF]], [[george:macro:UP|UP]], [[george:macro:WIND|WIND]]
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 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