{{htmlmetatags>metatag-description:(ICL George 3 and George 4 source: GETDIRX860)}}
====== GETDIRX860 ======
(George Source)
**Macros used:** [[george:macro:ACROSS|ACROSS]], [[george:macro:ALTLEN|ALTLEN]], [[george:macro:ANSOK2|ANSOK2]], [[george:macro:BXU|BXU]], [[george:macro:FREETAB|FREETAB]], [[george:macro:GEOERR|GEOERR]], [[george:macro:JBC|JBC]], [[george:macro:JBS|JBS]], [[george:macro:JFNZ|JFNZ]], [[george:macro:JMBAC|JMBAC]], [[george:macro:KREPC|KREPC]], [[george:macro:MENDAREA|MENDAREA]], [[george:macro:MHUNT|MHUNT]], [[george:macro:MHUNTW|MHUNTW]], [[george:macro:NAME|NAME]], [[george:macro:NEXTENT|NEXTENT]], [[george:macro:PTREP2|PTREP2]], [[george:macro:READAGAIN|READAGAIN]], [[george:macro:REWIND|REWIND]], [[george:macro:SEG|SEG]], [[george:macro:SEGENTRY|SEGENTRY]], [[george:macro:SETREP2|SETREP2]], [[george:macro:SETUPTAB|SETUPTAB]], [[george:macro:SKIP|SKIP]], [[george:macro:STEP|STEP]], [[george:macro:STEPAGAIN|STEPAGAIN]], [[george:macro:TABSET|TABSET]], [[george:macro:TABULATE|TABULATE]], [[george:macro:TRACEIF|TRACEIF]], [[george:macro:UP|UP]]
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