{{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