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
  • Last modified: 17/01/2024 11:55
  • by 127.0.0.1