{{htmlmetatags>metatag-description:(ICL George 3 and George 4 source: OPENFILE867)}}
====== OPENFILE867 ======
(George Source)
**Macros used:** [[george:macro:ACROSS|ACROSS]], [[george:macro:ADDMODE|ADDMODE]], [[george:macro:ALTLEN|ALTLEN]], [[george:macro:BXE|BXE]], [[george:macro:BXGE|BXGE]], [[george:macro:BXL|BXL]], [[george:macro:BXU|BXU]], [[george:macro:FINDFCB|FINDFCB]], [[george:macro:FINDNAME|FINDNAME]], [[george:macro:GEOERR|GEOERR]], [[george:macro:GETDIRWORK|GETDIRWORK]], [[george:macro:JBC|JBC]], [[george:macro:LONGON|LONGON]], [[george:macro:MHUNT|MHUNT]], [[george:macro:OPENMASD|OPENMASD]], [[george:macro:OPENSYS|OPENSYS]], [[george:macro:OPENWORX|OPENWORX]], [[george:macro:SEG|SEG]], [[george:macro:SEGENTRY|SEGENTRY]], [[george:macro:SETMODE|SETMODE]], [[george:macro:SETNCORE|SETNCORE]], [[george:macro:SIX|SIX]], [[george:macro:TESTMODE|TESTMODE]], [[george:macro:TESTNAMX|TESTNAMX]], [[george:macro:TESTREP2|TESTREP2]], [[george:macro:TESTRPN2|TESTRPN2]], [[george:macro:TESTUSER|TESTUSER]], [[george:macro:TOPFCB2|TOPFCB2]], [[george:macro:TRACEIF|TRACEIF]], [[george:macro:UP|UP]], [[george:macro:UPPLUS|UPPLUS]]
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