GETDIRX860

(George Source)

Macros used: ACROSS, ALTLEN, ANSOK2, BXU, FREETAB, GEOERR, JBC, JBS, JFNZ, JMBAC, KREPC, MENDAREA, MHUNT, MHUNTW, NAME, NEXTENT, PTREP2, READAGAIN, REWIND, SEG, SEGENTRY, SETREP2, SETUPTAB, SKIP, STEP, STEPAGAIN, TABSET, TABULATE, TRACEIF, UP

GETDIRX860.txt
22FL ...      SEG   GETDIRX,860,SECTION FILE,OPEN   
22^= ...[   
23DW ...[   
23YG ...      SEGENTRY K1GETDIRX
24D6 ...[   
25CB    #     THIS ROUTINE IS ENTERED FROM LOCATE TO FIND A DIRECTORY ENTRY IN  
25X2    #     AN OPEN DIRECTORY VIA A SERIAL SEARCH. THE INPUT FLOCNB HAS ALREAD
26BL    #     BEEN EXAMINED BY LOCATE AND RELEVANT BITS SET IN A MARKER WORD
26W=    #     PASSED DOWN FROM LOCATE IN ACOMMUNE2. 
27*W    #     USES OF AWORK WORDS :-
27TG    #     AWORK1 - DURING LATEST GEN. SEARCH, HOLDS BEST YET. ALSO HOLDS INF
28*6    #              OVER COORDINATION WHEN WE ALTLEN THE GLIST BLOCK 
28SQ    #     AWORK2 - CONTAINS A NUMBER OF SWITCHES AND MARKERS.   
29#B    #              B0 : NOTICE ERASEES (GETDIR2 & 3)
29S2    #              B1 : POSITION ON BLOCKS RATHER THAN TRAPS.   
2=?L    #              B2 : CURRENTLY UNUSED.   
2=R=    #              B3 : USERNAME IN FLOCNB. 
2?=W    #              B4 : SEARCHING BY TSN.   
2?QG    #              B5 : GETDIR4 - SET UP LIST OF TSN'S IN AONBS/GLIST BLOCK 
2#=6    #                   & CORRESPONDING STACK OF TABS.  
2#PQ    #              B6 : LOOK FOR 'ANY' GENERATION.  
2*9B    #              B7 : TAB BLOCK SET UP AND WE HAVE FOUND A NAME MATCH AND 
2*P2    #                   A TSN HAS BEEN PUT IN THE AONBS/GLIST BLOCK.
2B8L    #              B8 : CURRENTLY UNUSED.   
2BN=    #              B9 : ZERO GENERATION SPECIFICALLY REQUESTED.(B2 IN FLOCNB
2C7W    #              B10: REQUIRED ENTRY IS A WORKTAPE NAME.  
2CMG    #     AWORK3 - GENERAL PURPOSE WORK WORD.   
2D76    #     AWORK4 - REPLY WORD FOR STREAMS.  
2G5L          STOZ     AWORK4(2)           [INITIALIZE SUBSID. REPLY FOR STREAMS
2GK=          MHUNT    1,FILE,FLOCNB
2H4W          LDCT  0  #40  
2HJG          ANDX  0  AWORK2(2)
2J46          BNZ   0  USER                [J IF USERNAME IN FLOCNB.
2JHQ ...      TRACEIF  K6GETDIRX,199,399,A1(1),GDIRLOC  
2KH2          LDX   4  A1(1)               [PICK UP LOCAL NAME. 
2L2L          LDX   5  A1+1(1)  
2LG=          LDX   6  A1+2(1)  
2L^W          BRN      TRACK
2MFG    USER
2M^6 ...      TRACEIF  K6GETDIRX,199,399,A1+1(1),GDIRUSE
2NYB          LDX   4  A1+1(1)             [PICK UP USERNAME.   
2PD2          LDX   5  A1+2(1)  
2PXL          LDX   6  A1+3(1)  
2QC=    TRACK   
2QWW    # X4,X5,X6 AND AWORK2 NOW HAVE THE VALUES USED THROUGHOUT THE CHAPTER.  
2RBG    # NOW SEE IF THIS IS A SERIAL NUMBER SEARCH AND IF IT IS PROCEED.   
2RW6          LDCT  0  #20                 [THIS BIT INDICATES TSN SEARCH.  
2S*Q          ANDX  0  AWORK2(2)
2STB          BZE   0  NOTSN               [IF NOT USE OTHER ROUTINE.   
2T*2          BZE   4  ZNAME
2TSL          LDX   0  BIT10
2W#=          ANDX  0  AWORK2(2)
2WRW          BNZ   0  XRSTENT             [J IF WORKTAPE NAME IN FLOCNB.   
2X?G          BRN      NOWTAB   
2XR6    ZNAME   
2Y=Q          REWIND
2YQB          STEP  
2^=2    NOWTAB  
2^PL          SETUPTAB                     [STORE POSITION OF READ POINTERS FOUN
329=          TABSET                       [LOCATE,FOR ADJUSTMENT IF NOFILE.
32NW    XRSTENT 
338G          CALL  7  RSTENT              [GET FIRST DIRECTORY ENTRY.  
33N6          BRN      XENTRY   
347Q    NEXTENTA
34MB          CALL  7  NEXTENT             [X3 -> NEXT ENTRY.   
3572    XENTRY                             [X1 -> FLOCNB
35LL          BZE   3  NOTSN1                [J IF END OF FILE  
366=          LDX   0  ESERN(3)            [IS THIS A FILE? 
36KW          BZE   0  NEXTENTA            [IF SO, NO NEED TO CHECK FOR VRYWRONG
375G                                       [AS LOCATE CHECKS FOR THIS.  
37K6          SBX   0  A1+7(1)             [COMPARE SERIAL NUMBER   
384Q          BNZ   0  NEXTENTA            [IF WRONG GET NEXT ENTRY.
38JB          CALL  0  NM1                 [CALL NAME CHECKIN   
3942          BRN      NDISAGREE           [EXIT 0,REPORT A DISAGREEMENT
394^ ...      LDX   0  BIT10
395Y ...      ANDX  0  AWORK2(2)
396X ...      BNZ   0  OK   
397X ...      FREETAB   
39?S ...      MHUNT    1,FILE,FLOCNB
39CP ...[   
39HL    [EXIT PLUS 1 REPORTS A MATCH. DONT CHECK DETAILS IN SERIAL NUMBER CASE. 
3=3=    [I.E. WE DO NOT CHECK SUCH THINGS AS GENERATION,REEL,&=LANGUAGE 
3=GW    [FOR MAG.TAPE FILES WHERE WE HAVE A TSN & LOCAL NAME MATCH  
3?2G    [   
3?G6    [   [   [   [   [   [   [   [   [   [   [   [   [   [   [   [   [   [   
3?^Q    [   
3#FB    OK  
3#^2    [WHEN THE ENTRY IS FOUND, THE LOCAL NAME BLOCK IS UPDATED FROM THE ENTRY
3*DL    [THE ENTRY IS LEFT IN CORE, AND THE FILE IS POSITIONED ACCORDING TO THE 
3*Y=    [MACRO USED.
3BCW    [WE ALSO IN GETDIR 4 CASE  SET A TAB MARKING OUR POSITION & GO FOR  
3BXG    [ANOTHER TSN
3CC6          LDX   0  EREELN(3)           [COPY REEL NUMBER INTO FLOCNB.   
3CWQ          STO   0  A1+3(1)  
3DBB          LDX   0  EGENN(3)            [COPY GENERATION 
3DW2          STO   0  A1+4(1)  
3F*L          LDX   0  ELANN(3)            [COPY LANGUAGE   
3FT=          STO   0  A1+5(1)  
3G#W          LDN   4  ELOC1N(3)           [COPY NAME IN CASE - 
3GSG          LDN   5  A1(1)               [ONLY SERIAL NUMBER WAS GIVEN
3H#6          MOVE  4  3
3HRQ    ZOK 
3J?B          READAGAIN                    [[GET NAME RECORD IN CORE
3JR2          MHUNTW 1,FILE,FRB 
3K=L          NAME     1,FILE,ENT          [NAME IT APPROPRIATELY.  
3KQ=          LDCT  0  #200 
3L9W          ANDX  0  AWORK2(2)           [J IF POS. ON BLOCKS REQUESTED.  
3LPG          BNZ   0  UP   
3M96          LDEX  4  ECOPS(1)            [IF GETDIR 1 OR GETDIR3  
3MNQ          BZE   4  UP                  [POSN. AFTER BLOCKS RECORD   
3N8B    T974
3NN2          STEP                         [SKIP PAST COPIES RECORD(S)  
3P7L          BCT   4  T974 
3PM=    UP  
3Q6W          LDX   0  AWORK4(2)           [STORE SUBSIDIARY REPLY. 
3QLG          PTREP2   0
3R66          ANSOK2
3RKQ          UP
3S5B    [GETDIR 4 - ENTRY FOUND.ADD A T.S.N. TO AONBS/GSLIST BLOCK, ADD A TAB TO
3SK2    [STACK,AND SET UP TAB BLOCK IF BIT 6 OF X7 NOT SET  
3T4L    YGET4   
3TJ=          LDX   0  ESERN(3)            [STORE T.S.N. IN 
3W3W          STO   0  AWORK3(2)           [AWORK3  
3WHG ...      TRACEIF  K6GETDIRX,99,399,0,SN 0NLIN  
3XGQ          LDCT  0  #2   
3Y2B          ANDX  0  AWORK2(2)
3YG2          BNZ   0  TAB4IS          [J IF TAB BLOCK SET UP   
3Y^L          SETUPTAB  
3^F=          LDCT  0  #2              [SET SWITCH  
3^YW          ORS   0  AWORK2(2)
42DG    TAB4IS  
42Y6          TABSET                       [SET  TAB
43CQ          MHUNTW   3,AONBS,GLIST       [LIST BLOCK  
43XB          LDX   0  ALOGLEN(3)   
44C2          STO   0  A1(3)               [COUNT OF T.S N'S
44WL          ADN   0  1
45B=          STO   0  AWORK1(2)           [NEW LENGTH OF LIST BLOCK
45TW          ALTLEN 3,AWORK1(2) ,AONBS,GLIST   [LDNGTHEN LIST BLOCK
46*G          MHUNTW   3,AONBS,GLIST       [LIST BLOCK  
46T6          ADX   3  ALOGLEN(3)   
47#Q          LDX   0  AWORK3(2)
47SB          STO   0  A1-1(3)  
48#2          STEPAGAIN                    [RESET X3 -> RECORD  
48RL          BRN      NEXTENTC            [GO & GET ANOTHER ENTRY  
49?=    VRYWRONG
49QW    [THE ENTRANT FOUND IS ENTIRELY THE WRONG SORT.  
4==G          LDCT  0  #2   
4=Q6          ANDX  0  AWORK2(2)           [TAB BLOCK SET UP?   
4?9Q          BZE   0  VROUT
4?PB          FREETAB                      [NO  
4#92    VROUT   
4#NL          SETREP2  VRYWRONG 
4*8=          UP
4*MW    NDISAGREE   
4B7G          FREETAB   
4BM6          SETREP2  DISAGREE            [REPORT IF SERIAL MATCHES BUT
4C6Q          UP                           [NAME DOESNT.
4CLB    [   
4D62    [   [   [   [   [   [   [   [   [   [   [   [   [   [   [   [   [   [   
4DKL    [   
4F5=    [EXCEPT IN THE OK & NOFILE CASES THE DETAILS OF THE FLOCNB ARE NOT  
4FJW    [UPDATED.   
4G4G    NOFILE1 
4GJ6    [CHECK 1ST  THAT IT'S NOT GETDIR 4. IF IT IS,CHECK IF WE'VE FOUND A TSN 
4H3Q    [WITH A NAME MATCH. IF SO EXIT WITHOUT UPDATING THE FLOCNB  
4HHB          LDCT  0  #10  
4J32          ANDX  0  AWORK2(2)
4JGL          BNZ   0  ZENDG4              [J IF GETDIR 4   
4K2=    T53Q
4KFW          LDX   0  A1+5(1)             [PICK UP LANGUAGE
4K^G          BNZ   0  OUT                 [IF ZERO,
4LF6          LDX   0  ACES                [CHANGE IT   
4LYQ          STO   0  A1+5(1)             [TO SPACES   
4MDB    OUT 
4MY2          LDX   0  BIT10
4NCL          ANDX  0  AWORK2(2)
4NX=          BZE   0  ZOUT 
4PBW          ACROSS   GETDIR,9 
4PWG ...ZOUT
4QB6 ...      JBC   YOUT,1,BFABTSN         [J IF NOT SEARCHING BY TSN   
4RT2          TABULATE                     [RE-SET READ POINTERS TO POSITION
4S#L          FREETAB                      [FOUND BY LOCATE.
4SS=    YOUT
4T?W          SETREP2  NOFILE   
4TRG          UP
4W?6    ZENDG4  
4WQQ ...      TRACEIF  K6GETDIRX,99,399,7,GDE4END   
4XQ2          LDCT  0  #2   
4Y9L          ANDX  0  AWORK2(2)
4YP=          BNZ   0  UP                  [EXIT IMMEDIATELY IF TAB BLOCK SET UP
4^8W          BRN      T53Q 
4^NG    [   
5286    [   [   [   [   [   [   [   [   [   [   [   [   [   [   [   [   [   [   
52MQ    [   
537B    NOTSN1  
53M2          BZE   4  OUT  
546L    NOTSN   
54L=    [IF NO TSN WE MAY NEED TO SEARCH FOR LATEST GENERATION. 
555W          LDCT  0  #40  
55KG          ANDX  0  AWORK2(2)
5656          BNZ   0  USERHAP             [J IF USERNAME   
56JQ          LDCT  0  #600                [B0,B1   
574B          ANDX  0  A1+4(1)             [J IF LATEST OR LATEST PLUS/MINUS N  
57J2          BZE   0  POSGEN              [GEN. NOT REQUESTED. 
58H=    [ FIND HIGHEST GENERATION. USE AWORK1 TO HOLD BEST YET. 
592W          STOZ     AWORK1(2)
59GG          CALL  7  RSTENT              [GET FIRST ENTRY.
5=26          BRN      TENTRY   
5=FQ    NEXTENTB
5=^B          CALL  7  NEXTENT             [X3 -> NEXT ENTRY
5?F2    TENTRY                             [X1 -> FLOCNB
5?YL          BZE   3  YESFIN              [EXIT IF END OF DIRECTORY
5#D=          CALL  0  NM2                 [CHECK LOCAL NAME
5#XW ...      BRN      NEXTENTB            [GET NEXT ENTRY UNLESS MATCH.
5*CG ...      JBC   SYNOK,1,BFABLIB        [J IF NOT REQUESTING A TAPE  
5*X6 ...      JBC   VRYWRONG,3,BNLIB       [ERROR IF FOUND FILE OR EXOFILE  
5BBQ ...SYNOK   
5G?Q          CALL  7  XCHSTR              [STREAMS CHECKING.   
5GRB          LDCT  0  1
5H?2          ORS   0  AWORK1(2)           [INDICATES A GENERATION HAS BEEN FOUN
5HQL          LDX   7  BIT10
5J==          ANDX  7  AWORK2(2)
5JPW          BZE   7  NOTWORK             [J IF NOT A WORKTAPE 
5K9G          LDX   0  AWORK1(2)
5KP6          ANDN  0  #7777
5L8Q          SBX   0  EWKLEVELN(3) 
5LNB          BPZ   0  NEXTENTB            [BRANCH IF NO BETTER.
5M82          SBS   0  AWORK1(2)           [AWORK1 HOLDS NEW GEN.   
5MML          BRN      NEXTENTB            [TRY AGAIN.  
5N7=    NOTWORK 
5NLW          LDX   0  EGENN(3)            [STORE HIGHEST GEN FOUND IN AWORK1.  
5P6G          ORS   0  AWORK1(2)
5PL6    YESFIN  
5Q5Q    [ HIGHEST GENERATION SEARCH COMPLETE,SO UPDATE THE FLOCNB ACCORDINGLY.  
5QKB          LDX   0  A1+4(1)  
5R52          BPZ   0  STUFF               [LATEST OR PLUS CASE JUMPS.  
5RJL          NGX   0  0                   [MINUS CASE (B0 SET) REVERSE N.  
5S4=    STUFF   
5SHW          SLL   0  2                   [TIDY UP THE TOP TWO BITS OF THE 
5T3G          SRA   0  2                   [GENERATION ADDENDUM,
5TH6          STO   0  A1+4(1)             [AND STORE IT IN A1+4
5WGB          LDCT  0  1
5X22          ANDX  0  AWORK1(2)           [J IF HIGHEST GENERATION FOUND.  
5XFL          BNZ   0  YESFOUND 
5X^=          NGX   0  A1+4(1)  
5YDW          BPZ   0  NOFILE1             [J IF N ZERO, OR 'HIGHEST -N'REQUESTE
5YYG          LDX   0  BIT10
5^D6          ANDX  0  AWORK2(2)           [GEN 'N' FOR WORKTAPES.  
5^XQ          BNZ   0  NOFILE1  
62CB          LDN   0  1
62X2          SBS   0  A1+4(1)             [MTS START AT GEN 0  
63BL          BRN      NOFILE1             [GO AND UPDATE REEL & LANE ,THEN 
63W=                                       [TO EXIT WITH NOFILE REPLY   
64*W    YESFOUND
64TG    [A GENERATION HAS BEEN FOUND. ADJUST IT ACCORDING TO N, CHECK THAT THE  
65*6    [RESULT IS PERMISSIBLE, THEN SEARCH FOR IT. 
65SQ          LDX   3  AWORK1(2)           [NUMBER OF LATEST GENERATION.
66#B          ANDN  3  #7777
66S2          ADX   3  A1+4(1)             [ADD + OR - N.   
67?L          BNG   3  WRGEN               [NEGATIVE GENERATION IS NAUGHT.  
67R=          LDX   0  3                   [CALCULATED GENERATION MUST BE   
68=W          SRL   0  12                  [BETWEEN -1 AND 4096 
68QG ...      BNZ   0  WRGEN               [IF NOT REPORT AN ERROR  
69=6 ...      JFNZ  STOGEN,1,FFABTYPE      [J IF NOT REQUESTING FILE
6=P2          BZE   3  WRGEN               [ZERO GEN OF FILE IS WRONG   
6?8L    STOGEN  
6?N=          NGX   0  A1+4(1)  
6#7W          STO   3  A1+4(1)             [PUT GENERATION INTO FLOCNB. 
6#MG          BNG   0  NOFILE1             [NOFILE CASE IF 'HIGHEST + N' REQUEST
6*76          BRN      POSGEN   
6*LQ    [   
6B6B    [   [   [   [   [   [   [   [   [   [   [   [   [   [   [   [   [   [   
6BL2    [   
6C5L    POSGEN  
6CK=    [ENTRY TO THE PREVIOUS ROUTINE MAY HAVE BEEN BEFORE ANY SEARCH OR AFTER 
6D4W ...[A FRUITLESS TSN SEARCH. TEST WHICH AND REPORT NOFILE IN LATTER CASE.   
6DJG ...      JBS   NOFILE1,1,BFABTSN      [J IF TSN IN FLOCNB  
6G3B    [GENERATION NUMBER FIXED,NOW FIND THE ENTRY 
6GH2          CALL  7  RSTENT              [GET THE FIRST ENTRY.
6H2L          BRN      YENTRY   
6HG=    NEXTENTC
6H^W          CALL  7  NEXTENT             [X3 -> NEXT ENTRY.   
6JFG    YENTRY                             [X1 -> FLOCNB
6J^6          BZE   3  NOFILE1             [IF FINISHED REPORT NOFILE.  
6KDQ          CALL  0  NM2                 [CHECK LOCAL NAME.   
6KYB ...      BRN      NEXTENTC            [IF WRONG,TRY THE NEXT.  
6LD2 ...      JBC   SYNOK1,1,BFABLIB       [J IF NOT REQUESTING A TAPE  
6LXL ...      JBC   VRYWRONG,3,BNLIB       [ERROR IF FOUND FILE OR EXOFILE  
6MC= ...SYNOK1  
6R#=          CALL  7  XCHSTR              [STREAMS CHECKING.   
6RRW          LDCT  0  #4   
6S?G          ANDX  0  AWORK2(2)
6SR6          BNZ   0  NOSGEN              [ J IF 'ANY' GENERATION. 
6T=Q          LDX   0  A1+4(1)             [CHECK THAT THE GENERATION MATCHES   
6W=2          LDX   7  BIT10
6WPL          ANDX  7  AWORK2(2)
6X9=          BNZ   7  WKGEN               [J IF WORKTAPE   
6XNW          SBX   0  EGENN(3) 
6Y8G    ZTRGN   
6YN6          BNZ   0  NEXTENTC            [IF NOT GET NEXT ENTRY.  
6^7Q    NOSGEN  
6^MB          LDX   0  A1+5(1)             [CHECK LANGUAGE. 
7272          BZE   0  REEL                [IF ANY SKIP & COMPARE REEL NUMBERS. 
72LL          SBX   0  ELANN(3)            [OTHERWISE COMPARE LANGUAGE WORDS.   
736=          BNZ   0  NEXTENTC 
73KW    REEL
745G          LDX   0  A1+3(1)             [REEL NUMBER FROM FLOCNB 
74K6          SBX   0  EREELN(3)           [COMPARE REEL NUMBERS.   
754Q          BNZ   0  NEXTENTC 
7642          LDCT  0  #10  
76HL          ANDX  0  AWORK2(2)
773=          BNZ   0  YGET4               [J IF GETDIR4.   
77GW          BRN      OK   
782G    WKGEN   
78G6          SBX   0  EWKLEVELN(3)        [WORKTAPE LEVEL. 
78^Q          BRN      ZTRGN
79FB    WRGEN   
79^2    [THE GENERATION GIVEN OR CALCULATED TURNS OUT TO BE WRONG   
7=DL          LDCT  0  #2   
7=Y=          ANDX  0  AWORK2(2)
7?CW          BZE   0  STREP
7?XG          FREETAB   
7#C6    STREP   
7#WQ          SETREP2  WRGEN
7*BB          UP
7*W2    [   
7B*L    [   [   [   [   [   [   [   [   [   [   [   [   [   [   [   [   [   [   
7BT=    [   
7C#W    # THE FOLLOWING SUBROUTINE IS USED TO GET THE FIRST OR NEXT ENTRY IN
7CSG    # THE DIRECTORY. ON EXIT X3 -> ENTRY AND X1 -> FLOCNB.  
7D#6    RSTENT  
7DRQ          SBX   7  FX1                 [DECREMENT LINK. 
7F?B          REWIND
7FR2          BRN      STEP 
7G=L    NEXTENT 
7GQ=          SBX   7  FX1  
7H9W    NEXTENT1
7HPG          LDEX  1  ECOPSN(3)           [COPIES (=1 OR 0)
7J96          ADX   1  ENUSEN(3)           [NO. OF TRAPS RECORD 
7JNQ          JBC      NOIX,3,BNINDEX      [J IF NO INDEX RECORD.   
7K8B          ADN   1  1
7KN2    NOIX
7L7L    #SKI  K6GETDIRX>99$99   
7LM=          STO   1  AWORK3(2)           [NO OF RECS TO BE SKIPPED.   
7M6W          BZE   1  NOSKIPMK5
7MLG          SKIP  ,0(1)   
7N66    NOSKIPMK5   
7NKQ    STEP
7P5B          STEP                         [X3 -> NEW DIRENT
7PK2          BZE   3  OUTGD               [EXIT IF END OF DIRECTORY.   
7R3W          LDEX  0  FRH(3)              [PICK UP THE RECORD HEADER.  
7RHG          SBN   0  FRDE                [CHECK RIGHT FOR FIRST RECORD OF ENT.
7S36          BZE   0  UNBENT   
7T2B          GEOERR   BRIEFPM,FILEBENT 
7TG2    UNBENT  
7WF=          LDX   0  AWORK2(2)
7WYW          BNG   0  OUTGD               [X0 -VE MEANS DONT IGNORE ENTRIES TO 
7XDG                                       [BE ERASED.  
7XY6          JBS      NEXTENT1,3,BNERASE  [J IF ENTRY MARKED TO BE ERASED. 
7YCQ    OUTGD   
7YXB          MHUNT    1,FILE,FLOCNB       [X1 -> FLOCNB
7^C2          ADX   7  FX1                 [INCREMENT LINK  
7^WL          EXIT  7  0
82B=    [THE FOLLOWING SUBROUTINE IS ENTERED WITH X3 -> A DIRECTORY ENTRY AND   
82TW    [X4,X5&X6 CONTAINING A LOCAL NAME. IT EXITS PLUS 1 IF THE LOCAL NAME
83*G    [MATCHES AND PLUS 0 OTHERWISE. ENTRY 1 ALSO EXITS PLUS 1 IF X4 IS ZERO. 
83T6    [OR IF ELOC1-A1(3) IS ZERO  
84#Q    NM1 
84SB          BZE   4  XIT  
85#2          LDX   7  BIT10
85RL          ANDX  7  AWORK2(2)
86?=          BNZ   7  NM3                 [J IF WORKTAPE.  
86QW          LDX   7  ELOC1N(3)
87=G          BNZ   7  NLOC 
87Q6    XIT 
889Q          EXIT  0  1
88PB    NM2 
8992          LDX   7  BIT10
89NL          ANDX  7  AWORK2(2)
8=8=          BNZ   7  NM4                 [J IF WORKTAPE   
8=MW    NLOC
8?7G          TXU   4  ELOC1N(3)
8?M6          TXU   5  ELOC2N(3)
8#6Q          BXU   6  ELOC3N(3),(0)
8#LB          BRN      XIT  
8*62    NM3 
8*KL          LDX   7  EWKNAME1N(3) 
8B5=          BZE   7  XIT  
8BJW    NM4 
8C4G          TXU   4  EWKNAME1N(3) 
8CJ6          TXU   5  EWKNAME2N(3) 
8D3Q          BXU   6  EWKNAME3N(3),(0) 
8DHB          EXIT  0  1
8F32    #   
8FGL    #     LITTLE  S/R FOR STREAMS   
8G2=    #   
8GFW    XCHSTR  
8G^G          LDX   0  A1+5(1)  
8HF6          BZE   0  X
8HYQ          BXU   0  ELANN(3),(7)        [EXIT IF WRONG LANGUAGE GIVEN.   
8JDB    X   
8JY2          JMBAC    Y,3,BNMDF,BNMULT    [J IF NOT MDF OR MULTIFILE COMPONENT.
8KCL          KREPC    0,MULTI             [THERE IS A MULTI-FILE   
8KX=          BRN      Z
8LBW    Y     KREPC    0,SINGLE            [THERE IS A SINGLE FILE  
8LWG    Z     ORS   0  AWORK4(2)
8MB6          EXIT  7  0
8MTQ    #   
8N*B    #     ROUTINES FOR DEALING WITH USERNAMES   
8NT2    #   
8P#L    USERHAP 
8PS=          CALL  7  RSTENT              [GET FIRST ENTRY IN FLOCNB   
8Q?W          BRN      ZENTRY   
8QRG    NEXTENTD
8R?6          CALL  7  NEXTENT             [X3 -> NEXT ENTRY.   
8RQQ    ZENTRY                             [X1 -> FLOCNB
8S=B          BZE   3  OUT  
8SQ2          TXU   4  EUSE1N(3)
8T9L          TXU   5  EUSE2N(3)
8TP=          BXU   6  EUSE3N(3),NEXTENTD       [J IF USERNAME FAILS TO MATCH.  
8W8W          LDX   0  ELANN(3)            [COPY LANGUAGE INTO FLOCNB.  
8WNG          STO   0  A1+5(1)  
8X86          LDN   0  ELOC1N(3)           [MOVE ACROSS NAME,GEN AND REEL   
8XMQ          LDN   1  A1(1)
8Y7B          MOVE  0  5
8YM2          BRN      ZOK  
8^6L          MENDAREA 50,K99GETDIRX
8^L=    #END
^^^^ ...05065434000400000000