OPENFILE867

(George Source)

Macros used: ACROSS, ADDMODE, ALTLEN, BXE, BXGE, BXL, BXU, FINDFCB, FINDNAME, GEOERR, GETDIRWORK, JBC, LONGON, MHUNT, OPENMASD, OPENSYS, OPENWORX, SEG, SEGENTRY, SETMODE, SETNCORE, SIX, TESTMODE, TESTNAMX, TESTREP2, TESTRPN2, TESTUSER, TOPFCB2, TRACEIF, UP, UPPLUS

OPENFILE867.txt
22FL          SEG      OPENFILE,8,JUDY BIDGOOD,OPEN 
22KH ...[   
22PD ...[ (C) COPYRIGHT INTERNATIONAL COMPUTERS LTD 1983
22T* ...[   
22^=          SEGENTRY K1OPENFILE,OPENFILE  
23DW          SEGENTRY K2OPENFILE   
23YG          LDN   4  0
24D6          BRN      OPENSYS  
24XQ          SEGENTRY K3OPENFILE   
25CB          LDN   4  3
25X2          BRN      OPENSYS  
26BL          SEGENTRY K4OPENFILE   
26W=          LDN   4  6
27*W          BRN      OPENSYS  
27TG          SEGENTRY K5OPENFILE   
28*6          LDN   4  9
28SQ          BRN      OPENSYS  
29#B          SEGENTRY K7OPENFILE   
29S2          LDN   4  12   
2=?L          BRN      OPENSYS  
2=R=          SEGENTRY K8OPENFILE   
2?=W          LDN   4  15   
2?QG          BRN      OPENSYS  
2#=6          SEGENTRY K9OPENFILE   
2#PQ          LDN   4  18   
2*9B          BRN      OPENSYS  
2*P2          SEGENTRY K10OPENFILE  
2B8L          LDN   4  21   
2BN=          BRN      OPENSYS  
2C7W          SEGENTRY K11OPENFILE  
2CMG          LDN   4  24   
2D76          BRN      OPENSYS  
2DLQ          SEGENTRY K12OPENFILE  
2FL2          LDN   4  27   
2H4W          BRN      OPENSYS  
2HJG    [   
2J46    [ ENTERED FROM THE OPEN,OPEND,OPENDIR,OPENTHAW & OPENSYS MACROS.
2JHQ    #  THIS SEGMENT TRIES TO OPEN THE FILE SPECIFIED BY THE FIRST FILE/FABSN
2K3B    #     ACT.CHAIN.IT TRIES TO OPEN AS FEW DIRECTORIES ABOVE THE NAMED FILE
2KH2    #     AS POSSIBLE.  
2L2L    #   
2LG=    #     BASICALLY IT HAS TO OPEN FILES ABOVE A GIVEN FILE,TO A MINIMUM
2L^W    #     LEVEL,AND IN CERTAIN MODES,AS GIVEN IN THIS TABLE :-  
2MFG    #   
2M^6    #     MODE FOR BOTTOM FILE : NEXT FILE UP : NEXT FILE UP
2NDQ    #     ----------------------------------------------------------
2NYB    #     READ    )             :  (READ)      :  (READ)
2PD2    #     READR   >            OBLIGATORY ONLY   (NOT OBLIGATORY)   
2PXL    #     EXECUTE >            FOR TERMINAL FILES   
2QC=    #     CLEAN   ) 
2QWW    #   
2RBG    #     GENERAL   )   
2RW6    #     WRITE     )           :   CLEAN      :, (READ)
2S*Q    #     APPEND    >                           (NOT OBLIGATORY)
2STB    #     (OVERLAY) )   
2T*2    #     THAW  
2TSL    #   
2W#=    #     CREATE                :   GENERAL    :  CLEAN 
2WRW    #           (IF WE HAVE TO START FURTHER UP THE BLOCK,WE USE READ MODE) 
2X?G    #   
2XR6    #     FIRSTLY WE WORK OUT IF WE HAVE ENOUGH INFORMATION TO OPEN THE FILE
2Y=Q    #     DIRECTLY,I.E. HAVE WE ENOUGH NAMES IN THE BLOCK TO OPEN FILES TO  
2YQB    #     THE MINIMUM LEVEL.FOR EXAMPLE,WE NEED AT LEAST 3 NAMES TO OPEN A  
2^=2    #     FILE IN  CREATE MODE(16-WORD ABS.NAME.BLOCK)  
2^PL    #   
329=    #     IF NOT WE 1ST SEARCH THE FILE & 1/2-OPEN FILE CHAINS FOR THE FCB  
32NW    #     OF THE TOP   NAME,WHICH MUST BE A USERNAME.   
338G    #     IF WE FIND IT,WE "PUSH DOWN"THE FABSNB & SHOVE IN THE SUPERIOR
33N6    #     USER-NAME.IF THIS FAILS WE DO A FINDNAME. 
347Q    #     IN ALL CASES WE SET A PTR IN X5 TO THE LOWEST USER-NAME WE CAN USE
34MB    #     (OR THE TOP LOCAL NAME IF THIS IS AT TIE RIGHT LEVEL) 
3572    #     SET THE APPROPRIATE MODE IN X3. HAVING SORTED OUT THESE USEFUL
35LL    #     PIECES OF INFORMATION WE EXIT TO OPENTWO WHICH SETS ABOUT THE 
366=    #     BUSINESS OF OPENING THE FILE  
36KW    #   
375G    #   
37K6    #   
384Q    NAMESYS        +10  
38JB                   12HSYSTEM
3942                   12H  
39HL                   +0   
3=3=                   +1   
3=GW                   4HB1 
3?2G    NAMEMAS        +10  
3?G6    MASTER         12HMASTER
3?^Q                   12H  
3#FB                   +0   
3#^2                   +1   
3*DL                   4HB1 
3*Y=    XLOCNAME       12HDICTIONARY
3BCW                   12HLEXICON   
3BXG                   12HDOCUMENT  
3CC6                   12HSERIAL
3CWQ                   12HINCINDEX  
3DBB                   12HOUTPUT
3DW2                   12HIDF   
3F*L                   12HPROPERTY  
3FT=                   12HJOBLIST   
3GSG                   12HPARAMINDEX
3GYC ...#   
3H#6    MODESILL       #11040000
3HRQ    SIX   +6
3J?B    THREE          +3   
3JR2    #     THIS SUB-ROUTINE SETS A POINTER IN X5 TO THE NTH NAME FROM THE
3K=L    #     BOTTOM OF A FILE/FABSNB (WHERE N=[X1]) & THE MODE TO CLEAN MODE   
3KQ=    #     UNLESS THIS NAME IS A LOCAL NAME,WHICH DOES NOT HAVE A USER-NAME  
3L9W    #     ABOVE IT ,IN WHICH CASE IT SETS THE POINTER TO THE TOP LOCAL-NAME 
3LPG    #     & THE MODE TO READ.   
3M96    #   
3MNQ    #     ENVIRONMENT ON ENTRY  
3N8B    #     [X7]  =  RECORD HEADER OF FABSNB  
3NN2    #     [X1]  =  THE HEIGHT OF THE FILE-NAME WE WANT TO POINT.BOTTOM FILE 
3P7L    #              IS AT HEIGHT 1   
3PM=    #     [X2]  =  CALLING ACCUMULATOR  
3Q6W    #     [X3]  =  PTR. TO FABSNB   
3QLG    #   
3R66    QFI 
3RKQ    # WE STORE A1(3) IN X5 BECAUSE WE'VE NOWHERE ELSE TO PRESERVE IT
3S5B    # X7 IS USED AS A VARIABLE POINTER RELATIVE TO A1 OF THE FABSNB TO THE  
3SK2    # NAME WE'RE CONTEMPLATING AT ANY MOMENT
3T4L          LDX   5  A1(3)
3TJ=    QFL   SBN   1  1
3W3W          SBN   7  6
3WHG          BNG   7  QFR  [J IF WE'VE REACHED THE TOP-WE'VE FINISHED,IT REMAIN
3X36                                       [ONLY TO ESTIMATE THE MODE   
3XGQ          SMO      7
3Y2B          LDX   0  A1(3)
3YG2          BXU   0  HCOLUSER,QFL        [TRY NEXT UNLESS :USER   
3Y^L    QFJ   BZE   1  QFN  [IT'S A ":USER" AND AT THE RIGHT LEVEL! 
3^F=          BNG   1  QFP  [WE'VE FOUND A ":USER" BUT MAYBE TOO LATE   
3^YW    QFS   SBN   1  1    [TO LOOP ROUND IF COUNT UNEXPIRED,UNTIL 
42DG          SBN   7  6    [WE'VE ZEROISED IT  
42Y6          BNG   7  QFW  [TO ADJUST POINTER FOR TOP (3WD) NAME-BUT MAY BE
43CQ                        [AN ERROR IF X1 NOT YET ZERO
43XB          BNZ   1  QFS  [CARRY ON LOOPING   
44C2    QFN 
44WL          SETMODE  3,CLEAN  
45B=    QFM   SBX   5  7                   [ADJUST X5 FOR EXTERNAL CONSUMPTION  
45TW          EXIT  2  0
46*G    QFR 
46T6          ADN   7  3    [TO ADJUST POINTER  
47#Q          BRN      QFJ  [BACK INTO THE FRAY 
47SB    QFK 
48#2          SETMODE  3,READ   
48RL          BRN      QFM                 [LOCAL-UNDER-USER AT THE MIN. LEVEL  
49?=    QFP 
49QW          SMO      FX1  
4==G          BXGE  7  THREE,QFT
4=Q6          ADN   7  3
4?9Q          BRN      QFU  
4?PB    QFT 
4#92          ADN   7  6
4#NL    QFU 
4*8=          ADN   1  1                   [ALL IS NOT YET LOST,THIS USER-NAME  
4*MW          BNZ   1  QFK  [NO ITS NOT]   [MAY BE JUST OVER A LOCAL NAME AT THE
4B7G          BRN      QFN  
4BM6    QFW 
4C6Q          BNZ   1  ZGEOERR             [GEOERR IF COUNT UNEXPIRED   
4CLB          ADN   7  3
4D62          BRN      QFN  
4DKL    #     AFTER LENGTHENING THE FABSNB BY SIX WORDS,
4F5=    #     THIS SUBROUTINE FIRST SEARCHES THE 1/2-OPEN & FILE CHAINS FOR 
4FJW    #     THE FCB OF THE FILE POINTED TO. IF IT FINDS IT,IT"SHOVES DOWN"
4G4G    #     THE FABSNB,INSERTS THE SUPERIOR USERNAME & EXITS. O/W WE DO A 
4GJ6    #     FINDNAME, EXPANDING THE FABSNB UP TO MASTER  & EXITS  
4H3Q    #   
4HHB    #     ENVIRONMENT ON ENTRY  
4J32    #     X0 CONTAINS THE PTR RELATIVE TO THE BOTTOM OF THE FABSNB TO THE   
4JGL    #     NAME OF THE FILE WHOSE FCB WE WANT
4K2=    #     X3 POINTS TO THE FABSNB   
4KFW    #     X7 CONTAINS THE LINK  
4K^G    QFIND   
4LF6          SBX   7  FX1  
4LYQ          LDX   6  ALOGLEN(3)          [LENGTHEN FABSNB BY 6
4MDB          ADN   6  6
4MY2          ALTLEN   3,6,FILE,FABSNB  
4NCL ...      FINDFCB 5,5,NC               [LOOK FOR FCB IN FILE & HALFOPEN CHAI
4NX=          TESTREP2 NOTFOUND,ROGETIT 
4PWG    #     THIS  IS WHERE WE RESHUFFLE THE FABSNB. X5 CONTAINS THE POINTER   
4QB6    #     TO THE FCB IN THE ACT. CHAIN.SOME OF THE CONTORTIONS ARE DUE TO TH
4QTQ    #     FACT  THAT WE CAN ONLY USE ACCUMULATORS 0,1,2 
4R*B          MHUNT    3,FILE,FABSNB
4RT2          LDN   0  6                   [ADJUST REC.HDR. 
4S#L          ADS   0  A1(3)
4SS=          LDN   0  0
4T?W          LDX   1  ALOGLEN(3)   
4TRG          SBN   1  4
4W?6          SMO      FX1  
4WQQ          DVD   0  SIX  
4X=B          STO   0  2                   [IF [ALOGLEN(3)]=6N+4+M,PRESERVE M   
4XQ2          LDX   1  ALOGLEN(3)   
4Y9L          ADN   1  A1(3)
4YP=          SBX   1  2                   [PTS TO WD.UNDER BOTTOM NAME 
4^8W          LDX   0  1
4^NG          SBN   0  6                   [PTS TO TOP WD.OF BOTTOM NAME
5286          BZE   2  NOMO 
52MQ          MOVE  0  0(2)                [MOVE THE M WORDS
537B    NOMO
53M2          SBX   2  ALOGLEN(3)          [PUT ALOGLEN IN X2 & SUBTRACT 4+M
546L          NGS   2  2                   [FIRST,SO WE CAN SUBTRACT 6 IN ALOOP 
54L=          SBN   2  10                  [SUBTRACT 10,USE X2 AS COUNT 
555W          BZE   2  MOVLASTL            [J IF ONLY ONE NAME  
55KG    ZIZI
5656          SBN   0  6                   [ADJUST FROM 
56JQ          SBN   1  6                   [            & TO POINTERS   
574B          MOVE  0  6
57J2          SBN   2  6
583L          BNZ   2  ZIZI 
58H=    MOVLASTL
592W          LDX   0  HCOLUSER 
59GG          STO   0  A1+4(3)  
5=26          LDN   0  A1+1(3)  
5=FQ          LDN   1  A1+5(3)  
5=^B          MOVE  0  3
5?F2          LDX   0  ACES 
5?YL          STO   0  A1+8(3)  
5#D=          LDX   2  5
5#XW          LDN   1  FLOC1(2)            [STORE KEY OF USER NAME BEING MOVED  
5*CG          SUM   0  3                   [FROM TOP POSITION IN ITS LOCAL NAME 
5*X6          STO   0  A1+9(3)  
5BBQ          LDN   1  A1+5(3)  
5BWB          LDN   0  FUSER1(2)
5CB2          LDN   1  A1+1(3)  
5CTL          MOVE  0  3
5D*=          LDX   1  FX1  
5DSW          LDX   2  FX2  
5F#G          ADX   7  FX1  
5FS6          EXIT  7  0
5G?Q    ROGETIT 
5GRB    #     MISERABLY,WE DO A FINDNAME.   
5H?2          MHUNT    3,FILE,FABSNB
5HQL          LDN   0  6
5J==          SBS   0  ALOGLEN(3)   
5JPW          FINDNAME  
5K9G          TESTREP2 NOUSER,WREPLY
5KP6          TESTRPN2 OK,ZGEOERR   
5L8Q          MHUNT    3,FILE,FABSNB
5LNB          ADX   7  FX1  
5M82          EXIT  7  1
5MML    #   
5N7=    # THIS IS THE ENTRY POINT FOR THE OPENSYS MACRO. THE APPROPRIATE FABSNB 
5NLW    # IS SET UP AND THEN THE MAIN OPENFILE ROUTINE IS ENTERED.  
5P6G    OPENSYS 
5PL6          LDX   7  ACOMMUNE7(2) 
5Q5Q          SETNCORE 10,6,FILE,FABSNB 
5QKB          STO   7  ACOMMUNE7(2) 
5R52          LDN   5  NAMEMAS(1)          [X5->USERNAME :MASTER.   
5RJL          LDX   0  4
5S4=          SBN   0  6
5SHW          BNG   0  TNAMAS              [J IF SUPERIOR OF REQUIRED FILE IS MA
5T3G          SBN   5  10                  [X5->USERNAME :SYSTEM.   
5TH6    TNAMAS  
5W2Q          ADN   6  A1   
5WGB          MOVE  5  10                  [MOVE SUPERIOR DIRECTORY USERNAME
5X22          SMO      4                   [INTO FABSNB.
5XFL          LDN   5  XLOCNAME(1)  
5X^=          ADN   6  4
5YDW          MOVE  5  3                   [MOVE IN APPROPRIATE LOCAL NAME. 
5YYG          NGS   6  AWORK2(2)           [SWITCH TO INDICATE OPENSYS  
5^D6          BRN      OPENFILE1
5^XQ    #     THIS IS THE ENTRY POINT TO THE ROUTINE . WE DO SOME CHECKING FOR  
62CB    #     ILLEGAL  MODES & COMBINATIONS THEREOF.WE CHECK WE ARE NOT OPENING 
62X2    #     MASTER IN CREATE OR DIR MODE,OR A COMBINATION OF DIR & CREATE FOR 
63BL    #     ANY FILE,OR CREATE FOR A DIRECTORY.   
63W=    #   
64*W    OPENFILE
64TG          STOZ     AWORK2(2)
65*6    OPENFILE1   
65SQ          TRACEIF  K6OPENFILE,99,299,ACOMMUNE7(2),OPENFILE  
66#B          LDX   0  ACOMMUNE7(2) 
66S2 ...      STO   0  AWORK1(2)           [RETAIN MODES IN AWORK1 THROUGHOUT   
67?L          ANDX  0  MODESILL(1)  
67R=          BNZ   0  MODEWR              [GEOERR IF UNLIKELY MODES GIVEN  
68=W          MHUNT    3,FILE,FABSNB
68QG          LDX   0  A1(3)               [CHECK REC. HEADER OF FABSNB REASONAB
69=6          BNG   0  RECHEAD  
69PQ          SBN   0  512  
6=9B          BPZ   0  RECHEAD             [GEOERR IF RIDICULOUS RECORD HEADER  
6=P2 ...      JBC      NWRKF,3,BFABWORK    [J IF NOT WORKFILE OR WORKTAPE   
6?8L ...      JBC      WORKF,3,BFABLIB     [IF ENTRANT IS NON-FILESTORE (I.E.WOR
6?N= ...                                   [ WE TREAT AS NON-WORKFILE SINCE MODE
6#7W ...                                   [ DIR
6*LQ    NWRKF   
6B6B    #     TEST  FOR :USER/CREATE CLASH  
6BL2          TESTMODE AWORK1(2),NOCRU,NOT,CREATE   
6C5L          LDX   0  A1(3)
6CK=          SBN   0  7
6D4W          BNG   0  MODEWR              [GEOERR IF USER ONLY 
6DJG          SMO      A1(3)
6F46          LDX   0  A1-6(3)  
6FHQ          TESTUSER 0,MODEWR 
6G3B    NOCRU   
6GH2    #     IF WE ARE OPENING MASTER,SET THE MODE &PTR IMMEDIATELY & EXIT TO  
6H2L    #     OTHER 1/2 OF THE ROUTINE. 
6HG=          LDX   0  A1(3)
6H^W          SBN   0  6
6JFG          BPZ   0  QOK                 [J UNLESS :USER ONLY 
6J^6          TESTNAMX 3,MASTER(1),A1+1(3),QOK  [J IF NOT MASTER
6KDQ          TESTMODE AWORK1(2),MODEWR,,DIR
6KYB          ADDMODE  AWORK1(2),CAREFUL
6LD2          OPENMASD ZGEOERR,AWORK1(2)
6LXL          TESTRPN2 OK,ZGEOERR          [               OR NOT OK
6MC=          BRN      STATISTIC
6MWW    QOK 
6NBG    #     THIS SECTION CHECKS FOR DIR/CREATE CLASH,AND THEN ADJUSTS THE 
6NW6    #     FABSNB'S REC;HDR. IF THE FABSNB IS ONLY 4 WDS LONG WE EXPAND IT   
6P*Q    #     USING QFIND (SEE ABOVE) AND ADJUST THE HEADER 
6PTB    #   
6Q*2          TESTMODE AWORK1(2),MODER,NOT,DIR  
6QSL          TESTMODE AWORK1(2),MODEWR,,CREATE 
6R#=          LDN   7  6
6RRW          SBS   7  A1(3)
6S?G          LDX   0  A1(3)               [J IF NOT JUST :USER IN FLOCNB   
6SR6          BPZ   0  MODER
6T=Q          LDN   5  3                   [PTR. FOR FINDFCB
6TQB          ADS   7  A1(3)               [READJUST  R.H.  
6W=2          CALL  7  QFIND
6WPL          NULL  
6X9=          LDN   0  6
6XNW          SBS   0  A1(3)
6Y8G    MODER   
6YN6    #   
6^7Q    #     NOW WE DECIDE WHICH OF THE THREE MAIN PATHS WE HAVE TO FOLLOW 
6^MB    #     (ONE FOR EACH OF THE GROUPS IN THE TABLE AT THE HEAD OF THE   
7272    #     ROUTINE)  
72LL    #     A)  ALL CASES WITH CREATE SUB-MODE-GO TO LABEL"XREATIS"   
72WD ...#     B)  FOR DIRECTORIES USE CLEAN PATH UNLESS LEAVE SPECIFIED 
736=    #     C)  ALL CASES WITH WRITE,GENERAL,OR APPEND MAIN MODE OR THAW SUB- 
73KW    #         MODE (UNCLEAN MODES),GO,TO LABEL  "THAWIS"(OR"UNCLIS")
745G    #     D)  READ(R),CLEAN,(&EXECUTE) (THE CLEAN MODES) CARRY STRAIGHT THRU
74K6    #   
754Q          TESTMODE AWORK1(2),XREATIS,,CREATE
75JB          TESTMODE AWORK1(2),THAWIS,,THAW,REOPEN
75L5 ...      TESTMODE AWORK1(2),TUNCLEAN,,LEAVE    [IF LEAVE THEN UNCLEAN PATH 
75MS ...      LDX   0  A1(3)
75PH ...      SBN   0  6                            [ELSE IF A DIRECTORY
75R= ...      BNG   0  XYDIR                        [TAKE CLEAN PATH
75S^ ...      SMO      0
75WN ...      LDX   0  A1(3)
75YC ...      BXE   0  HCOLUSER,XYDIR             [IF DIRECTORY THEN CLEAN  
7626 ...TUNCLEAN
7642          TESTMAIN AWORK1(2),UNCLIS,,UNCLEAN
76?S ...XYDIR   
76HL    #   
773=    #     NOW,BY ELIMINATION WE ONLY HAVE CLEAN MODES. WE CALL QFI, TO SET  
77GW    #     (IF POSSIBLE) THE PTR.TO THE BOTTOM FILE &THE MODE TO CLEAN.  
782G    #     NOW,DUE TO COMPLEX INTERLOCKS,WE MAY NOT OPEN A TERMINAL FILE IN  
78G6    #     EITHER READ OR CLEAN MODE DIRECTLY,SO IF WE ARE POINTING TO THE   
78^Q    #     BOTTOM FILE OF A FABSNB WHICH IS NOT A ":USER" WE SET THE PTR.TO  
79FB ...#     THE FILE ABOVE & THE MODE TO READ.IN THE CASE WHERE THE BOTTOM
79^2    #     FILE IS ":USER" OR THE FABSNB IS ONLY 4WDS LONG,WE SET THE MODE TO
7=DL    #     THAT IN X6 & EXIT IMMEDIATELY ANY OTHER CASE WE EXIT IMMEDIATELY A
7=Y=    #   
7?CW          LDN   1  1
7?XG          LDX   7  A1(3)
7#C6          CALL  2  QFI  
7#WQ          LDX   2  FX2  
7*BB          LDX   0  5
7*W2          SBN   0  3
7B*L          BZE   0  ZB1                 [J IF FABSNB IS :USER ONLY   
7BT=          SBN   0  3
7C#W          BNZ   0  ZB                  [J IF NOT POINTING TO BOTTOM FILE
7CSG          MHUNT    3,FILE,FABSNB
7D#6          SMO      7
7DRQ          LDX   0  A1(3)
7F?B          TESTUSER 0,ZB1               [J IF BOTTOM FILE IS :USER   
7FR2          TESTMODE AWORK1(2),ZB1,,DIR  [IF B IN :A.B IS -> X5 DIR IMPLIES B 
7G=L                                       [DIRECTORY SO 1/2OPEN IT 
7GQ=          ADN   5  6
7H9W          BXL   5  A1(3),NOTPLUS3   
7HPG          SBN   5  3
7J96    NOTPLUS3
7JNQ          SETMODE  3,READ   
7K8B          BRN      ZB                  [FCB OF THE BOTTOM FILE,INCASE WE HAV
7KN2    ZB1                                [:A.B,WHERE B IS THE LOCAL NAME OF A 
7L7L          LDX   3  AWORK1(2)
7LM=          BRN      ZB   
7M6W    THAWIS  
7MLG    UNCLIS  
7N66    #     HERE-IF WE ONLY HAVE A 4WD FABSNB,WE SHALL HAVE TO EXPAND IT BY AT
7NKQ    #     LEAST ONE MORE NAME,SO WE CALL QFIND,SET THE PTR TO THE 2ND BOTTOM
7P5B    #     NAME IN THE FABSNB,MODE TO CLEAN & EXIT   
7PK2    #     IF WE HAVE ENOUGH INFORMATION,WE CALL QFI TO SET THE POINTER &
7Q4L    #     MODE FOR US(LABEL "QBOTLOC" & EXIT
7QJ=    #   
7R3W          MHUNT    3,FILE,FABSNB
7RHG          LDX   0  A1(3)
7S36          SBN   0  5
7SGQ          BPZ   0  QBOTLOC             [J IF MORE THAN JUST ONE USER-NAME   
7T2B          TESTNAMX 3,A1+1(3),MASTER(1),NOMASFILDIR [J IF NOT :MASTER.?  
7TG2          LDN   5  3
7T^L          LDX   3  AWORK1(2)
7WF=          LDX   6  AWORK1(2)
7WYW          SETNCORE  6,2,FILE,FLOCNB 
7XDG          ACROSS   OPENTWO,2
7XY6    NOMASFILDIR 
7YCQ          LDN   5  3                   [PTR. FOR FINDFCB
7YXB          CALL   7  QFIND   
7^C2          BRN      SET9                [J IF ONLY ONE MORE NAME ADDED   
7^WL          LDX   0  A1(3)
82B=          SBN   0  11   
82TW          BNG   0  SET9                [J IF ONLY ONE NAME INSERTED 
83*G          LDN   5  12                  [O/W WE MUST HAVE >OR= 3 NAMES   
83T6          BRN      ZIXI 
84#Q    SET9
84SB          LDN   5  9
85#2    ZIXI
85RL          SETMODE  3,CLEAN  
86?=          BRN      ZB   
86QW    XREATIS 
87=G    #   
87Q6    #   
889Q    #   
88PB    #   
8992    #     RATHER AS ABOVE- EXCEPT THAT WE HAVE TO START ALEVEL HIGHER THAN I
89NL    #     UNCLEAN MODES.HOWEVER THE FABSNB IS AT LEAST 10 WDS LONG.IF IT IS 
8=8=    #     WE CALL QFIND,SET THE POINTER BY HAND ON EXIT AND BRANCH TO"ZB"   
8=MW    #     OTHERWISE,WE BRANCH TO "NUFFINFO"(THE FABSNB IS LONG ENOUGH),CALL 
8?7G    #     QFI TO SET THE MODE & PTR & EXIT  
8?M6    #   
8#6Q          MHUNT    3,FILE,FABSNB
8#LB          LDX   0  A1(3)
8*62          SBN   0  13   
8*KL          BPZ   0  NUFFINFO            [J IF WE HAVE ENOUGH INTO. TO OPEN   
8B5=    #                                  [ENOGH FILES 
8BJW          TESTNAMX 3,MASTER(1),A1+1(3),SPASTIC [J IF OPENING FILE BELOW 
8C4G          LDN   5  9
8CJ6          SETMODE  3,GENERAL
8D3Q          BRN      ZB   
8DHB    SPASTIC 
8F32          LDX   5  A1(3)
8FGL          SBN   5  1                   [PTR. FOR FINDFCB
8G2=          CALL  7  QFIND
8GFW          BRN      RSETCLIQ 
8G^G          LDX   5  A1(3)
8HF6          SBN   5  17   
8HYQ          BNG   5  RSETCLIQ 
8JDB          LDN   5  18   
8JY2          BRN      RSETCLIR 
8KCL    RSETCLIQ
8KX=          LDN   5  15   
8LBW    RSETCLIR
8LWG          BRN      ZIXI 
8MB6    NUFFINFO
8MTQ          LDX   7  A1(3)
8N*B          LDN   1  3
8NT2          CALL  2  QFI  
8P#L       BRN      ZB  
8PS=    QBOTLOC 
8Q?W          LDX   7  A1(3)
8QRG          LDN   1  2
8R?6          CALL   2  QFI 
8RQQ    ZB  
8S=B          SETNCORE  6,1,FILE,FLOCNB 
8SQ2          LDX   6  AWORK1(2)
8T9L          ACROSS   OPENTWO,1
8TP=    WREPLY  
8W8W          MHUNT    1,FILE,FABSNB
8WNG          LDX   0  ALOGLEN(1)   
8X86          SBX   0  A1(1)
8XMQ          SBN   0  3
8Y7B          BNG   0  RD   
8YM2          LDN   0  6
8^6L          ADS   0  A1(1)
8^L=    RD  
925W          TESTMODE AWORK1(2),NOFILE,NOT,QUERY,REPLY,NOWAIT  
92KG          TRACEIF  K6OPENFILE,99,299,ACOMMUNE9(2),OPEN ERR  
9356    STATISTIC   
93JQ          UPPLUS   1
944B ...#                  WORKFILES
94J2    #   
953L    WORKF   
95H=          TESTMODE AWORK1(2),MODEWR,,DIR,CREATE,DESTRUCT
962W          TESTMODE AWORK1(2),NWT,NOT,THAW   
96GG          ADDMODE  AWORK1(2),ERASING
9726    NWT 
97FQ          TESTMODE AWORK1(2),NOGWK,NOT,LEAVE
97^B          GETDIRWORK
98F2          TESTRPN2 OK,RDY   
98YL    NOGWK   
99D=          OPENWORX XBRK,AWORK1(2)   
99XW          TESTRPN2 OK,RDX   
9=CG          TESTMODE AWORK1(2),UPLUS,NOT,THAW 
9=X6          TOPFCB2  2
9?BQ          TRACEIF  K6OPENFILE,99,299,BACK2(2),WORK REL  
9?WB          LONGON   6,BACK2(2)   
9#B2    UPLUS   
9#TL    #SKI  K6OPENFILE>99-99  
9**=    (   
9*SW          MHUNT  3,FILE,FABSNB  
9B#G          ADX   3  A1(3)
9BS6          TRACEIF  K6OPENFILE,99,299,A1-2(3),WORKOPEN   
9C?Q    )   
9D?2          UPPLUS   1
9DQL    RDX 
9F==          TESTMODE AWORK1(2),XT,,THAW   
9FPW          LDCH  0  ATYPE(2)            [NOFILE REPLY IS ALLOWED 
9G9G          SBN   0  ACTLF/64 
9GP6          BNZ   0  RD   
9H8Q    XT  
9HNB          TESTRPN2 NOFILE,RD
9J82    SHUNTF  
9JML          MHUNT    3,FILE,FABSNB
9K7= ...      LDN   0  #200 
9KLW ...      ANDX  0  ATYPE(3) 
9L6G ...      ERS   0  ATYPE(3)            [CONVERT TO NON-! FABSNB 
9LL6          BRN      QOK                 [START AGAIN BUT OMITTING SOME CHECKS
9M5Q    RDY 
9MKB          TESTRPN2 NOFILE,ZGEOERR      [ONLY LEGAL NON-OK REPLY IS NOFILE & 
9N52          TESTMODE AWORK1(2),SHUNTF,,THAW                      [ONLY WITH TH
9NJL          LDCH  0  ATYPE(2)            [IF ACT AN ACTLF OR MODE THAW
9P4=          SBN   0  ACTLF/64            [NOFILE REPTY IS ALLOWED 
9PHW          BZE   0  SHUNTF   
9Q3G    ZGEOERR 
9QH6          GEOERR   1,OPENFILE   
9R2Q    MODEWR  
9RGB          GEOERR   1,OPENMODE   
9S22    RECHEAD 
9SFL          GEOERR   1,FABSRCHD   
9S^=    NOFILE  
9TDW          GEOERR   1,NO FILE
9TYG    XBRK
9WD6          UP
9XX2    #END
^^^^ ...67352102000100000000