OPENTWO867

(George Source)

Macros used: ADDMODE, ALTLEND, BXE, BXGE, BXL, BXU, CLOSETOP, FINDNAME, FREECORE, GEOERR, GETDIR, HALFOPEX, HUNT, JBC, LONGON, MFREE, NAME, OPENMASD, OPENRELD, PICKREP, PUTREP2, SEG, SEGENTRY, SETMODE, SETREP, SIX, TESTMODE, TESTNAMX, TESTREP2, TESTRPN2, TESTUSER, TOPFCB2, TRACE, TRACEIF, UP, UPPLUS

OPENTWO867.txt
22FL    [   
22^=    [THIS IS A TIDIED-UP VERSION WITH MODETEST & BITSETTING MACROS  
2394 ...[ (C) COPYRIGHT INTERNATIONAL COMPUTERS LTD 1983
23DW    [   
23YG          SEG      OPENTWO,8,JUDY BIDGOOD,OPEN  
24D6          SEGENTRY K1OPENTWO,Z1OPENTWO  
24XQ          SEGENTRY K2OPENTWO,Z2OPENTWO  
25CB    [   
25X2    #   
26BL    #   
26W=    #     THIS SEGMENT IS ENTERED FROM OPENFILE WITH [X4]=DEPTH OF FILE TO  
27*W    #     BE OPENED,[X5]=POINTER FROM THE BOTTOM OF THE FABSNB TO NAME OF   
27TG    #     1ST FILE TO BE OPENED,& [X3]= MODE TO OPEN IT IN. 
28*6    #   
28SQ    #     AN ATTEMPT IS MADE TO HALF-OPEN THIS FILE. IF THIS FAILS WE SET   
29#B    #     THE MODE ONE FURTHER TOO THE RIGHT(SEE TABLE AT HEAD OF OPENFILE  
29S2    #     SEGMENT) & THE PTR. TO THE USERNAME ABOVE THE ONE JUST TRIED &
2=?L    #     HAVE ANOTHER GO.IF WE RUN OFF THE TOP OF THE FABSNB,WE EXPAND IT  
2=R=    #     FULLY UP TO MASTER & CARRY ON UNTIL WE'VE CONTRIVED TO HALFOPEN AT
2?=W    #     LEAST ONE FILE(WE MUST BE ABLE TO DO THIS AS MASTER'S FCB IS ALWAY
2?QG    #     IN CORE)  
2#=6    #     AS SOON AS WE'VE HALFOPENED A FILE,WE GO DOWN THE FABSNB AGAIN
2#PQ    #     DOING AN OPENREC ON EACH FILE BENEATH THE HALFOPENED ONE ,UPDATING
2*9B    #     THE MODE & PTR IN EACH CASE,UNTIL,HOORAH!,WE'VE REACHED THE BOTTOM
2*P2    #   
2B8L    #   
2BN=    #   
2C7W    MASTER         12HMASTER
2CMG    SIX   +6
2D76    THREE          +3   
2DLQ    [     THIS SUBROUTINE CALCULATES THE MODE NECESSARY TO DO AN OPENREL
2F6B    [     ON THE NEXT FILE DOWN IN THE FABSNB.TO DO THIS IT CALCULATES  
2FL2    [     HOW FAR FROM THE END OF THE BLOCK WE ARE,FROM OUR TRUSTY POINTER  
2G5L    [     IN X5,AND THEN "SETMODE"'S IN X3 ACCORDING TO THE MODE WE WANT
2GK=    [     TO OPEN THE BOTTON FILE   
2H4W    QCHEQMOD
2HJG          LDX   0  5
2J46          SBN   0  6
2JHQ          BNG   0  SLAST               [PTR 6 WORDS FROM END OF FABSNB  
2K3B          BZE   0  SLAST               [UNLESS FABSNB 4 WORDS LONG IN WHICH 
2KH2          SBN   0  7                   [CASE IT'S ONLY 3 WORDS FROM END 
2L2L          BNG   0  SLASTDIR            [J IF POINTING TO PENULTIMATE FILE   
2LG=          SBN   0  7
2L^W          BNG   0  SLASTBUTDIR         [J IF POINTING TO LAST BUT-TWO'TH
2MFG                                       [NAME
2M^6          BRN      SREAD
2NDQ    SLASTDIR
2NYB          TESTMODE 6,NOTHAW,NOT,THAW
2PD2          TESTMAIN 6,NOTHAW,,READING
2QC=          GEOERR BRIEFPM,THAWMODE      [ONLY ALLOW READING MODE IF OPENTHAW 
2QWW    NOTHAW  
2RBG          TESTMODE 6,SUNCLEAN,,CREATE   
2RW6          TESTMODE 6,SCLEAN,,THAW,REOPEN
2S*Q          TESTMAIN 6,SREAD,NOT,UNCLEAN  
2STB    SCLEAN  
2T*2          SETMODE  3,CLEAN  
2TSL          BRN      SCONT
2W#=    SUNCLEAN
2WRW          SETMODE  3,GENERAL
2X?G          BRN      SCONT
2XR6    SLASTBUTDIR 
2Y=Q          TESTMODE 6,SREAD,NOT,CREATE   
2YQB          BRN      SCLEAN   
2^=2    SLAST   
2^PL          LDX   3  6
329=          EXIT  7  0
32NW    SREAD   
338G          SETMODE  3,READ   
33N6    SCONT   
347Q          SETMODE  0,REPLY,NOWAIT,ERASING,DIREPLY,QUERY 
34MB          ANDX  0  6                   [TRANSFER MODES IF PRESENT   
3572          ORX   3  0
35LL          TESTMODE 6,NNTHAW,NOT,THAW
366=          ADDMODE  3,ERASING           ['THAW' IMPLIES ERASING  
36KW    NNTHAW                             [ERASING 
375G          EXIT  7  0
37K6    #   
384Q    #   
38JB    #   
3942    #     THIS  IS THE ENTRY POINT TO THE ROUTINE. X5 CONTAINS A POINTER
39HL    #     (FROM THE BOTTOM OF THE FABSNB) TO THE NAME OF A FILE TO BE   
3=3=    #     HALFOPENED & X3 THE MAIN MODE IT IS TO BE OPENED IN.  
3=GW    #   
3?2G    #   
3?G6    #     WE DO AN"OPENMASD" IF THE INDICATED FILE IS MASTER.O/W WE TRY 
3?^Q    #     TO HALFOPEN THE POINTED-TO F_E.   
3#FB    #   
3#^2    Z1OPENTWO   
3*DL    ZB  
3*Y=          HUNT  2,FILE,FABSNB   
3B3B ...      LDX   0  A1(2)               [OMIT CHECK FOR :MASTER IF NOT   
3B6G ...      SBN   0  1                   [POINTING TO TOP FILE IN FABSNB, 
3B9L ...      SBX   0  5                   [AS COULD BE DEALING WITH ANOTHER
3B#Q ...      BNZ   0  NOTMASSA            [FILE WITH LOCAL NAME MASTER.
3BCW          ADX   2  A1(2)
3BXG          SBX   2  5
3CC6          TESTNAMX 3,MASTER(1),A1(2),NOTMASSA   
3CWQ    Z2OPENTWO   
3DBB          ADDMODE  3,CAREFUL
3DW2          TRACEIF  K6OPENTWO,99,299,3,OPEN MAS  
3F*L          OPENMASD NOBREAK,3
3FT=          TESTREP2 OK,QBOTFILE  
3G#W          GEOERR  1,MASNOPEN
3GSG    NOTMASSA
3H#6          LDX   0  5
3HRQ          SBN   0  7
3J?B          BNG   0  QHALF               [DON'T OR IN ANY BITS IF BOTTOM FILE 
3JR2          CALL  7  SCONT               [TRANSFER MODES  
3K=L    QHALF   
3KQ=          ADDMODE  3,CAREFUL
3L9W          TRACEIF  K6OPENTWO,99,299,3,HALFOPEN  
3LPG          HALFOPEX XBRK,5,3 
3M96          TESTREP2 OK,QBOTFILE1 
3MNQ          TESTRPN2 NOTFOUND,XREPLY  
3N8B    #   
3NN2    #     WE'VE BEEN UNABLE TO HALF-OPEN THE INDICATED FILE,SO WE TRY THE   
3P7L    #     NEXT ONE UP,USING QCHEQMOD TO UPDATE THE MODE.IF WE'RE ALREADY AT 
3PM=    #     THE TOP,WE HAVE TO DO A FINDNAME. 
3Q6W    #   
3QLG          HUNT  2,FILE,FABSNB   
3R66          LDX   0  A1(2)
3RKQ          SBN   0  1
3S5B          SBX   0  5
3SK2          BZE   0  TOPFAB              [J IF PTR.POINTS TO TOP OF FABSNB
3T4L                                       [AND WE CANT 1/2-OPEN THIS FILE  
3TJ=          BXU   0  THREE(1),Q2  
3W3W    SUB4
3WHG          ADN   5 3 
3X36          BRN      Q37  
3XGQ    Q2    ADN   5  6
3Y2B    Q37 
3YG2          CALL  7  QCHEQMOD        [UPDATE MODE & RETURN TO CHECK IF NAME   
3Y^L          LDX   1  FX1                 [IS :MASTER AT LABEL 'ZB'(=K1OPENTWO)
3^F=          BRN      ZB   
3^YW    TOPFAB  
42DG    #   
42Y6    #     WE'VE REACHED THE TOP  UNSUCCESSFULLY.DO A FINDNAME,ADJUST PTR(TRI
43CQ    #     THIS!) AND GO TO LABEL"Q37" TO CHECK MODE & RE-ENTER ROUT9NE A0 "Z
43XB    #   
44C2          FINDNAME  
44WL          TESTREP2 NOUSER,WREPLY
45B=          ADN   5  3
45TW          HUNT  2,FILE,FABSNB   
46*G          LDX   0  A1(2)
46T6          SBN   0  1
47#Q          SBX   0  5
47SB          BXE   0  THREE(1),SUB4
48#2          BRN      Q2   
48RL ...[THE NEXT TWO LINES ARE REDUNDANT   
49?=          LDX   2  7                   [PICK UP PTR.
49QW          BRN      QBOTFILE3
4==G    QBOTFILE1   
4=Q6    #   
4?9Q    #     WE'VE EITHER OPENED MASTER SUCCESSFULLY,OR HALFOPENED A FILE  
4?PB    #     WE CHECK WHETHER WE ARE AT THE BOTTOM.IF NOT WE ADJUST THE POINTER
4#92    #     SET UP A FLOCNB,CHANGE THE MODE & DO AN OPENREL.  
4#NL    QBOTFILE
4*8=          HUNT  2,FILE,FABSNB   
4*MW    QBOTFILE3   
4B7G          LDX   0  5
4BM6          SBN   0  3
4C6Q          BZE   0  ZBOTIS   
4CLB          SBN   0  3
4D62          BZE   0  ZBOTIS              [J IF AT BOTTOM NAME 
4DKL    PTRUPD  
4F5=          NGX   0  5
4FJW          ADX   0  A1(2)
4G4G          SMO     FX1   
4GJ6          BXGE  0  THREE,ZD4
4H3Q          SBN   5  3                   [FILE OF THE FABSNB,THE DIFFERENCE   
4HHB          BRN      OLO                 [BETWEEN IT & THE R. H. WILL BE 1(<3)
4J32    ZD4   SBN   5  6
4JGL    OLO 
4K2=          HUNT  3,FILE,FLOCNB   
4KFW          ADN   3  A1   
4K^G          ADN   2  A1   
4LF6          ADX   2  0(2) 
4LYQ          SBX   2  5
4MDB          MOVE  2  6                   [MOVE IN REQUISITE NO. OF WORDS. 
4MY2          CALL  7  QCHEQMOD 
4NCL          TRACEIF  K6OPENTWO,99,299,3,OPENREL?  
4NX=          OPENRELD  XBRK,3  
4PBW          TESTRPN2 OK,XREPLY
4PWG    #   
4QB6    #     WE NOW PICK UP THE FCB & JUMP IMMEDIATELY IF THE FILE IS NOT  
4QTQ    #     A DIRECTORY/B0 OF COMM UNSET) OTHERWISE WE MOVE A3ROSS THE USER   
4R*B    #     NAME  TO THE 6ABSNB,OVERWRITING THE LOCAL NAME OF THE DIRECTORY   
4RT2    #   
4S#L          TOPFCB2  2
4SS=          HUNT  3,FILE,FABSNB   
4T?W          LDX   7  3
4TRG          JBC      ZBOTIS,2,BFDIR   
4W?6          ADX   3  A1(3)
4WQQ          SBX   3  5
4X=B          TESTUSER A1(3),QBOTFILE   
4XQ2    #     WE ARE NOT AT THE BOTTOM,& WE HAVE A LOCAL NAME,SO OVERWRITE IT   
4Y9L    #     WITH THE APPROPRIATE USERNAME 
4YP=          LDN   1  A1(3)
4^8W          SUM   0  3
4^NG          STO   0  A1+5(3)  
5286          LDX   0  HCOLUSER 
52MQ          STO   0  A1(3)
537B          LDN   1  A1+1(3)  
53M2          LDN   0  FME1(2)  
546L          MOVE  0  3                   [ORIGINALLY THERE
54L=          LDX   0  ACES 
555W          STO   0  A1+4(3)  
5656          LDX   2  7                   [PICK UP POINTER AGAIN   
56JQ          NGN   0  6
574B          ADX   0  5
57J2          BNZ   0  PTRUPD              [J.IF NOT TO BOTTOM YET  
583L    ZBOTIS  
58H=          TESTMODE 6,ND,NOT,DIR 
59GG          LDN   1  6                   [SIZE OF FLOCNB = 6 WORDS
5=26          ADS   1  A1(2)               [RESTORE REC. HEADER 
5=FQ          HUNT  3,FILE,FLOCNB          [X3-> FLOCNB 
5=^B          LDX   0  ALOGLEN(2)          [IF  0<(ALOGLEN) - (A1) <6      SET U
5?F2          SBX   0  A1(2)               [      AN 8 WORD FLOCNB  
5?YL          BZE   0  NOSER               [
5#D=    XX1 
5#XW          SBN   0  6
5*CG          BZE   0  NOSER               [IF FABSNB SIZE 4+6N,WHERE N IS  
5*X6          BPZ   0  XX1                 [INTEGRAL, THEN FLOCNB SHOULB BE 6WDS
5BBQ          ALTLEND  3,8,FILE,FLOCNB  
5BWB          HUNT  2,FILE,FABSNB          [X2-> FABSNB 
5CB2          HUNT  3,FILE,FLOCNB          [X3-> FLOCNB 
5CTL          LDN   1  8                   [SIZE OF FLOCNB = 8 WORDS
5D*=    NOSER   
5DSW          LDX   0  ATYPE(2) 
5F#G          DSA   0  ATYPE(3)            [COPY LS 12 BITS OF TYPE WORD TO FLOC
5FS6          ADN   3  A1   
5G?Q          ADX   2  A1(2)
5GRB          ADN   2  A1-6 
5H?2          MOVE  2  0(1)                [MOVE LOCAL NAME FROM FABSNB TO FLOCN
5HQL          TESTMODE 6,NERASE,NOT,ERASING 
5J==          GETDIR   2                   [TELL ME OF ENTRY EVEN IF TO-BE-ERASE
5JPW          BRN      TESTR
5K9G    NERASE  
5KP6          GETDIR
5L8Q    TESTR   
5LNB          TESTRPN2 OK,UREPLY
5M82    ND                                 [REPLY "OKAY" ALREADY SET
5MML          HUNT   2,FILE,FABSNB  
5N7=          LDX   1  A1(2)
5NLW          SMO      FX1  
5P6G          BXL   1  SIX,N6   
5PL6          SBN   1  3
5Q5Q    N6  
5QKB          SBN   1  3
5R52          ADX   1  2
5RCC ...      LDX   0  A1(1)
5RPS ...      BXU   0  HCOLUSER,NOAD
5S4=          ADN   1  1
5SHW    NOAD
5T3G          TRACE    A1(1),OPENED 
5TH6          HUNT  1,FILE,FLOCNB   
5W2Q          LDX   0  A1(2)
5WGB          SMO      FX1                 [FILE & HAD A LOCAL NAME,MOVE RN 
5X22          BXL   0  SIX,MND             [CORRESPONDING USERNAME  
5XFL          SBN   0  6
5X^=          SMO      0
5YDW          TESTUSER A1(2),MND
5YYG          ADN   1  A1+4 
5^D6          ADX   2  A1(2)
5^XQ          ADN   2  A1-2                [X2-> GEN. NO. OF LAST LOCAL NAME IN 
62CB          MOVE  1  2                   [UPDATE FABSNB WITH DIR. ENTRY INFORM
62X2          SBN   1  A1+4 
63BL    MND 
63W=    [   
64*W    [THE CODE BETWEEN HERE & THE 'FREECORE' WAS INSERTED TO DEAL WITH BUG   
64TG    [2586. AT THE END OF AN OPENTHAW ALL ACTIVITIES WAITING FOR FILE TO BE  
65*6    [FREE FOR EMPTYING ARE WOKEN UP.
65SQ    [   
66#B          TESTMODE 6,NOFR,NOT,THAW  
66S2          LONGON   6,A1(1)             [FREE WAITING ACTIVITIES 
67?L          HUNT     1,FILE,FLOCNB       [RELOCATE FLOCNB.
67R=    NOFR
68=W          FREECORE 1                   [FREE FLOCNB 
69=6    UPPLUS1 
69PQ          LDX   0  AWORK2(2)
6=9B          BZE   0  NOFREE              [J IF NOT OPENSYS
6=P2          MFREE    FILE,FABSNB  
6?8L    NOFREE  
6?N=          UPPLUS   1
6#7W    XBRK
6*76          LDX   0  AWORK2(2)
6*LQ          BZE   0  NFREEFAB 
6B6B          MFREE    FILE,FABSNB  
6BL2    NFREEFAB
6C5L          UP                           [THERE HAS BEEN A BREAK-IN   
6CK=    #   
6D4W    #   
6DJG    #     ROUTINES TO DEAL WITH NON-OF REPLIES  
6F46    XREPLY  
6FHQ          LDX   0  5
6G3B          SBN   0  3
6GH2          BZE   0  WREPLY   
6H2L          SBN   0  3
6HG=          BZE   0  WREPLY              [J IF BOTTOM FILE
6H^W          SETREP   NAME 
6JFG    WREPLY  
6J^6          TESTMODE 6,RD,NOT,DIR 
6KDQ          SETREP   NAME                [MUST BE REPLY "NAME"
6LD2          HUNT     1,FILE,FABSNB       [X1->FABSNB  
6LXL          LDN   0  6
6MC=          ADS   0  A1(1)               [RESTORE REC. HEADER TO ORIGINAL 
6MWW    RD  
6NBG          TESTMODE 6,QUERYM,,QUERY,REPLY,NOWAIT 
6NW6    PD  
6P*Q          GEOERR   BRIEFPM,NO FILE     [FILE YOU ARE TRYING TO OPEN DOEESN<T
6PTB                                       [NO REPLY WAS ASKED FOR & THE REPLY  
6Q*2                                       [                         IS NOT "OKA
6QSL    QUERYM  
6R#=          MFREE    FILE,FLOCNB  
6RRW          TRACEIF  K6OPENTWO,99,299,ACOMMUNE9(2),OPENERR
6S?G          BRN      UPPLUS1  
6SR6    #   
6T=Q    UREPLY  
6TQB          TESTMODE 6,PD,NOT,QUERY,REPLY,NOWAIT  
6W=2          PICKREP  4                   [PRESERVE REPLY GIVEN BY OPENREL 
6WPL          CLOSETOP                     [CLOSE DIR.  
6X9=          PUTREP2  4                   [SET REPLY   
6XNW          BRN      QUERYM   
6Y8G    #   
6YN6    NOBREAK 
6^7Q          GEOERR   BRIEFPM,OPENBRKN    [NO BREAK-IN POSSIBLE WITH OPENMAS   
6^MB    [   
72LL    #END
^^^^ ...60750535000100000000