CHANFILE8

(George Source)

Macros used: BACKWAIT, BFCBX, BXE, BXGE, BXL, CHAIN, DERING, FILENUMB, GEOERR, JBC, JBS, MENDAREA, MHUNT, RERING, RINGFILE, SEG, SEGENTRY, SETNCORE, SFSTACK, SHORTEN, TRACEIF, UP

CHANFILE8.txt
22FL    [   
22^=    [THIS VERSION INCLUDES: 
23DW    [1.   CHANGES FOR OFFLINE MT USAGE BLOCKS IN FILE CHAIN ONLY
23YG    [   
24D6          SEG      CHANFILE,5,GEORGE PORTER,FILESTORE   
24XQ          SEGENTRY K1CHANFILE,ZCHANGEFILE   
25CB          SEGENTRY K2CHANFILE,ZCHANGESTRM   
25X2          SEGENTRY K3CHANFILE,ZFILEMOVE 
26BL          SEGENTRY K4CHANFILE,ZGETFNAME 
26W=          SEGENTRY K24CHANFILE,ZGETFNAMEZ   
27*W    #   
27TG    #     IMPLEMENTS MACROS WHOSE ENTRY POINTS ARE AS FOLLOWS:- 
28*6    #   
28SQ    #     K1    -  CHANGEFILE   
29#B    #     K2    -  CHANGESTREAM 
29S2    #     K3    -  FILEMOVE 
2=?L    #     K4    -  GETFNAME 
2=R=    #     K24   -  GETFNAME (ZERO DEPTH)
2?=W    #   
2?QG    #   
2#=6    # ON ENTRY THE OLD LEVEL IS STORED IN ACOMMUNE1,THE NEW LEVEL IN
2#PQ    # ACOMMUNE2 & THE NEW ACTIVITY POINTER IN ACOMMUNE3 
2*9B    ZCHANGEFILE                        [K1 ENTRY
2*P2          LDX   0  ACOMMUNE2(2)        [NEW LEVEL   
2B8L          STO   0  AWORK2(2)
2BN=          LDX   0  ACOMMUNE3(2)        [TARGET ACTIVITY 
2C7W          STO   0  AWORK3(2)
2CMG          FILENUMB 3                   [FIND NO OF FILES IN CURRENT ACTRING 
2D76          LDX   7  ACOMMUNE1(2)        [CONSIDER OLD LEVEL  
2DLQ          CALL  4  PARAM               [ANALYSE & CHECK IT  
2F6B          LDX   6  7                   [SET OLD LEVEL IN X6 
2FL2          LDX   7  AWORK2(2)
2G5L          LDX   4  AWORK3(2)
2GK=          FILENUMB 3,4  
2H4W          ADN   3  1                   [TO ALLOW FOR NEW FILE   
2HJG          CALL  4  PARAM               [LEAVE ANALYZED DEPTH IN X7  
2J46          SFSTACK  6,3                 [FIND OLD LEVEL FSTACK ELEMENT   
2JHQ          DERING   3                   [DERING ELEMENT  
2K3B          LDX   4  AWORK3(2)
2KH2          RINGFILE 3,4  
2L2L          LDN   6  0                   [SET OLD LEVEL TO ZERO FOR S/R   
2LG=          BZE   7  UPP  
2L^W          CALL  5  RFIMOVE  
2MFG    UPP 
2M^6 ...      BACKWAIT                     [WAIT FOR ALL BS TRANSFERS FROM THIS 
2NDQ ...                                   [ ACT. TO FINISH (E.G. IF AOLPT, 
2NYB ...                                   [ ENSURES BUFFERS WRITTEN BACK BEFORE
2PD2 ...                                   [ CHANGE TO CPAT & CLOSE FILE  - 
2PXL ...                                   [ NEEDED BECAUSE CLOSE ONLY WAITS FOR
2QC= ...                                   [ TRANSFERS FROM CURRENT ACT.)   
2TSL          UP
2W#=    [   
2WRW    # ON ENTRY THE NEW ACTIVITY IS STORED IN ACCOMUNE1. 
2X?G    ZCHANGESTRM                        [K2 ENTRY - CHANGESTREAM 
2XR6          LDX   4  ACOMMUNE1(2) 
2Y=Q          LDN   5  0                   [SET INITIAL LEVEL TO ZERO   
2YQB          LDN   6  2                   [NO. OF FILES IN 'STREAM'
2^=2          SFSTACK  ,3,2                [GET PTRS TO EL'T & FSTACKB  
2^PL          JBS      STCH,3,BAMULT
329=          BFCBX    1,2                 [GET PTR TO FILE/FCB 
32NW          LDN   6  1                   [ONLY 1 FILE IF NOT MULTIFILE ELEMENT
338G          JBC      STA,1,BFSDF         [J IF NOT MDF
33N6    STCH  MHUNT    1,FILE,FABSNB       [A STREAM MUST TAKE ITS  
347Q          CHAIN    1,4                 [FABSNB WITH IT  
34MB    STA   LDX   2  5                   [LOAD LEVEL WORD 
3572          CHANGEFI 4,0(2)              [CHANGE TOP FILE OF CURRENT ACT  
35LL          ADN   5  1
366=          BCT   6  STA                 [LOOP TO BO 2 CHANGEFILES IF MULTIFIL
36B4 ...      UP
36KW    [   
375G    # ON ENTRY THE OLD LEVEL OF FILE IS STORED IN ACOMMUNE1 AND 
37K6    # THE NEW LEVEL IN ACOMMUNE2.   
384Q    ZFILEMOVE                          [K3 ENTRY - FILEMOVE 
38JB          LDX   4  ACOMMUNE3(2) 
3942          BNZ   4  NA                  [IF  NO ACTIVITY POINTER ASSUME  
39HL          LDX   4  FX2                 [CURRENT ACTIVITY
3=3=    NA  
3=GW          FILENUMB 3,4  
3?2G          LDX   7  ACOMMUNE1(2)        [CONSIDER OLD LEVEL  
3?G6          CALL  4  PARAM               [ANALYSE & CHECK IT  
3?^Q          LDX   6  7                   [STORE OLD LEVEL IN X6   
3#FB          LDX   7  ACOMMUNE2(2)        [CONSIDER NEW LEVEL  
3#^2          CALL  4  PARAM               [ANALYSE & CHECK IT,LEAVE IN X7  
3*DL          BXE   6  7,UP                [BRANCH IF LEVELS EQUAL  
3*Y=          LDX   4  ACOMMUNE3(2) 
3BCW          BNZ   4  NB                  [IF NO ACTIVITY PARAMETER ASSUME 
3BXG          LDX   4  FX2                 [CURRENT ONE 
3CC6    NB  
3CWQ          CALL  5  RFIMOVE             [CALL ROUTINE TO MOVE EL'T ALONG RING
3DBB    UP    UP
3DW2    #   
3F*L    # THIS ROUTINE IS USED BY ALL ENTRY POINTS. 
3FT=    # ITS FUNCTION IS TO DERING A FSTACK ELEMENT FROM ITS CURRENT PLACE 
3G#W    # IN THE RING & RERING IT IN A SPECIFIED POSITION   
3GSG    #   
3H#6    RFIMOVE 
3HRQ          SBX   5  FX1  
3J?B          SFSTACK  6,1,,4   
3JR2          SFSTACK  7,2,,4   
3K=L          BXL   6  7,NOM
3KQ=          LDX   2  BPTRF(2)            [FIND PREVIOUS EL'T IN RING  
3L9W    NOM 
3LPG          LDX   3  1                   [PRESERVE FCA PTR
3M96          RERING   1,2                 [RERING FILE TO NEW POS'N
3MNQ          ADX   5  FX1  
3N8B          EXIT  5  0
3NN2    #   
3P7L    # THIS ROUTINE LOOKS AT THE LEVEL SPECIFIED,IF IT IS -VE (I.E.THE HEIGHT
3PM=    # FROM BOTTOM OF STACK OF THIS FILE) IT CONVERTS IT TO A +VE DEPTH,AFTER
3Q6W    # ENSURING WHOLE WORD IS -VE (PARAMETER MAY HAVE BEEN GIVEN IN BOTTOM   
3QLG    # 12 BITS ONLY). IT ALSO CHECKS THAT THIS LEVEL DOES EXIST ALREADY. 
3R66    #   
3RKQ    PARAM   
3S5B          LDX   1  7                   [LOAD PARAMETER  
3SK2          SLL   1  12                  [TEST LOWER 12 BITS FOR -VE  
3T4L          BPZ   1  POS  
3TJ=          ORX   7  HALFTOP             [MAKE WORD FULLY -VE 
3W3W          ADX   7  3                   [CONVERT TO +VE DEPTH
3WHG          BPZ   7  ZEXIT               [JUMP IF WITHIN RANGE TO EXIT
3X36    ORANG GEOERR  1,FILEMOVE
3XGQ    POS   BXGE  7  3,ORANG             [JUMP IF OUT OF RANGE
3Y2B    ZEXIT EXIT  4  0
3YG2    ZGEOER1 
3Y^L          GEOERR  1,READDEEP
3^F=    #   
3^YW    #   
42DG    ZDEEP   
42Y6    #     SPECIAL ROUTINE FOR CHECKING & CONVERTING DEPTH   
43CQ    #   
43XB          LDX   7  EXEC1(2)            [PARAMETER   
44C2          SRA   7  15   
44WL          LDX   5  7
45B=          BPZ   5  ZIN1 
45TW          NGX   5  5
46*G          SBN   5  1
46T6    ZIN1
47#Q          FILENUMB 0
47SB          BXGE  5  0,ZGEOER1
48#2          EXIT  6  0
48RL    ZFSTACK 
49?=    #     DOES AN SFSTACK ON THE FILE OPEN AT DEPTH [X7] & ALSO GIVESA'POINT
49QW    #     ER    TO THE FSTACK BLOCK 
4==G          SFSTACK  7,3,2
4=Q6          EXIT  4  0
4?9Q    #   
4?PB    #   
4#92    # THIS MACRO GETS A FILE/FABSNB FOR A FILE OPEN AT A SPECIFIED  
4#NL    # LEVEL. THIS LEVEL IS IN ACOMMUNE1.
4*8=    #   
4*MW    ZGETFNAME                          [K4 ENTRY - GETFNAME 
4B7G    [   
4BM6          CALL  6  ZDEEP               [CHECK DEPTH 
4C6Q          BRN      MGETFN   
4CLB    ZGETFNAMEZ                         [K24 ENTRY - GETFNAME @ ZERO DEPTH   
4D62          STOZ     7
4DKL    MGETFN  
4F5=          TRACEIF  K6CHANFILE,199,299,7,GETFNAME
4FJW          SETNCORE  10,3,FILE,FABSNB   [CORE
4G4G          STO   3  5                   [PRESERVE PTR TO ABS.N. BLK  
4GJ6          CALL  4  ZFSTACK             [POINTERS
4H3Q          LDX   1  BPTR(2)             [X1 ^  FCB   
4HHB          LDX   2  5
4J32          LDCT  0  #10  
4JGL          ANDX  0  FCOMM(1)            [IF FILE IS A WORKFULE SET MARKER
4K2=          BZE    0 NWF                 [IN FABSNB   
4KFW          LDN   0  #200 
4K^G          ORS   0  ATYPE(2) 
4LF6    NWF 
4LYQ          LDX   0  COMM(1)             [BO OF COMM ^  DIRECTORY 
4MDB          BPZ   0  NGETFN              [J IF TERMINAL FILE  
4MY2          TRACEIF  K6CHANFILE,199,299,FME1(1),GET USN   
4NCL          LDN   3  4                   [R.H.
4NX=          SHORTEN  2,4  
4PBW          ADN   1  FME1                ['FROM' PTR. FOR'MOVE'ORDER  
4PWG          BRN      PGETFN   
4QB6    NGETFN  
4QTQ          TRACEIF  K6CHANFILE,199,299,FUSER1(1),GET SUPN
4R*B          TRACEIF  K6CHANFILE,199,299,FLOC1(1),GET LOCN 
4RT2          LDN   3  10                  [R.H 
4S#L          ADN   1  FUSER1              ['FROM' POINTER  
4SS=    PGETFN  
4T?W          STO   3  A1(2)               [R.H 
4TRG          ADN   2  A1+1                ['TO' PTR.   
4W?6          MOVE  1  511(3)              [MOVE ONE WD LESS
4WQQ          UP
4X=B    #   
4XQ2          MENDAREA 20,K99CHANFILE   
4Y9L    #END
^^^^ ...53501316000600000000