RESTLIMB864

(George Source)

Macros used: ACROSS, APPEND, BACKSPACE, BACKWAIT, BS, BWNZ, BWZ, BXE, BXL, BXU, CHAIN, CLOSEFRBS, COOR1, DCA, DOWN, FILECOUNT, FINDCORE, GETBAX, GETCORE, GETFCBN, GPERI, GRINDEX, HUNT, JBC, JBCC, JBS, LOCK, MENDAREA, MFREEW, MHUNTW, NAME, READB, RESQUERY, RESTOREN, RG, SEG, SEGENTRY, SETNCORE, SETUPCORE, TESTNAMX, TFCBCHECK, TOPFCA2, TOPFCB, TRANSFCB, UNLOCK, UP, UPPLUS, WHATBACK, WIND, WRITEAUTO, WRITEB, XY

RESTLIMB864.txt
22FL ...      SEG      RESTLIMB,864,BRIAN MATTHEWS,RESTORE  
22^=    #   
23DW          SEGENTRY K1RESTLIMB,X1RESTLIMB
23NN ...      SEGENTRY K2RESTLIMB,X2RESTLIMB
23YG    #   
24D6    #   THE PURPOSE OF THIS SEGMENT IS TO RESTORE TO ONLINE FILESTORE,FROM  
24XQ    #   AN INCREMENT DUMP TAPE,A BRANCH OF THE FILESTORE TREE.  
25CB    #   ENTRIES    K1RESTLIMB -ENTRY FROM RESTOREG - TO RESTORE THE WHOLE OF
25X2    #                          THE FILESTORE TREE UNDER MASTER. 
26BL    #   STATE ON ENTRY  
26W=    #              K1RESTLIMB   
27*W    #                A MAGNETIC TAPE HAS BEEN ENGAGED AND IS POSITIONED 
27TG    #              IMMEDIATELY AFTER THE SFS IMMEDIATELY AFTER MASTER   
28*6    #                THE BS BLOCKS HAVE BEEN MAPPED 
28SQ    #                THE BS BLOCKS ARE AVAILABLE IN A BSTB/FULLB
29#B    #   METHOD     DEPENDENT ON FORMAT OF TAPE  
29S2    #              WHEN SFS IS READ A FILE IS "OPENED"  
2=?L    #              WHEN DATA BLOCKS ARE READ THEY ARE WRITTEN TO BS 
2=R=    #              WHEN EFS IS READ TOP FILE IS "CLOSED"
2?=W    #              WHEN 2ND EFS IS READ RESTMERG IS ENTERED TO MERGE
2?QG    #               DIRECTORY WITH 'ENTRIES' APPENDED TO TOP FILE   
2#=6    #              WHEN A TERMINAL DIRECTORY IS READ EACH ENTRY IN IT IS
2#PQ    #              ALTERED TO SHOW NO COPY ONLINE   
2*9B    #              K1RESTLIMB   
2*P2    #               WHEN ROUTINE DETERMINES FROM FORMAT OF TAPE THAT
2B8L    #               BRANCH HAS BEEN RESTORED IT EXITS   
2BN=    #     EXIT     UP      NORMAL RETURN
2C7W    #          ANY ANOMALY CAUSES ENTRY INTO RESTERR SEGMENT
2CMG    #   
2D76    #          X4 IS USED AS A FLAG FOR INDEX RECORDS AND   
2DLQ    #                ]UST NOT BE CORRUPTED  
2F6B    #                        X4 = +VE INDICATES RE-ENTRY FROM RESTMERG  
2FL2    #                        X4 = 0  OTHERWISE  
2G5L    MASK1          #2000000 
2GK=    MASK2          #220000             [TO SET B7 & B10 OF COMM 
2H4W    MASK3          #77777   
2H=4P...#SKI IFS<1$1
2HC=P...(   
2HJG    STYP
2J46    #HAL  FILE+FCB,0
2J?YP...)   
2JHQ    WORD           +0   
2K3B    XIT            +0   
2KH2    MC1            4HC1 
2KKK ...#UNS  ANOTALLOC 
2KN8 ...MB1      4HB1   
2KQS ...TAPEFAIL        4HTAFA  
2L2L    #     ENTRY FROM SINGLE RESTORE 
2LG=    XBMFRDE        +9   
2L^W    #     ENTRY FROM GENERAL RESTORE
2MFG    X1RESTLIMB  
2M^6          LDN   4  0                   [ SET FLAG   
2N38 ...#UNS AMTGR  
2N5= ...      JBC SFS2,,BGENRES 
2N7# ...#UNS AMTGR  
2N9B ...#SKI
2N?G ...      BWZ      GINCTSN,SFS2        [ JUMP IF PARTIAL RESTORE
2NDQ          STOZ     AWORK1(2)
2NYB          STOZ     AWORK2(2)
2PD2    #     THIS SECTION "OPENS" THE FILE ON WHICH THE TAPE IS POSITIONED.
2PXL    SFS2
2QC=          HUNT     1,FILE,FWB   
2QWW          HUNT     2,FILE,FINTER6   
2RBG          ADN   1  A1   
2RW6          ADN   2  A1   
2S*Q          MOVE  1  20   
2STB          CALL  5  SUFCB               [SET FOR  FCB
2SXD ...#UNS AMTGR  
2S^G ...      JBC RG,,BGENRES   
2T3J ...#UNS AMTGR  
2T5L ...#SKI
2T7Q ...      BWZ      GINCTSN,RG          [JUMP IF PARTIAL RESTORE 
2T*2          STO   7  AWORK4(2)           [ PRESERVING X7  
2TSL          LDX   5  MASK3(1)            [ BOTTOM 15 BITS CONTAIN SIZE
2W#=          ANDX  7  5
2WRW          LDX   5  AWORK2(2)
2X?G          ADX   5  7
2XR6          STO   5  AWORK2(2)
2Y=Q          LDX   5  AWORK1(2)
2YQB          ADN   5  1
2^=2          STO   5  AWORK1(2)
2^PL          LDX   7  AWORK4(2)           [ RESTORING  X7  
2^R*P...#SKI IFS
2^T4P...(   
2^WRP...      SETUPFSTACK   GENERAL        [SET UP FSTACK,RING IN NEW   
2^YGP...[     ELEMENT,RING FCB IN FCB RING , DECHAIN FCBFROM ACTIVITYCHAIN  
3229P...[     AND CHAIN FCB AND FSTACK TOGETHER TO FORM FILES CHAIN 
323YP...)   
325MP...#SKI IFS<1$1
327B ...RG  
329=          RESTOREN GENERAL             [SET UP & RING FSTACK BLOCK  
32NW    #     THIS SECTION READS NEXT BLOCK ON TAPE.IF IT IS NOT A TM IT ENTERS 
338G    #     SECTION WHICH WRITES DATA TO BS.IF A TM IS FOLLOWED BY SFS PROGRAM
33N6    #     ENTERS SECTION WHICH "OPENS" TAPE.OTHERWISE END OF FILE IS ASSUMED
347Q    #     AFTER TM AND APPROPRIATE ACTION IS TAKEN. 
34MB          CALL  5  READG               [READ BLOCK  
3572          LDX   0  CPRW1(2) 
35LL          ANDX  0  MASK1(1) 
366=          BZE   0  WA                  [J IF NOT A TAPE MARK
36KW          CALL  5  READS
375G          LDX   0  A1(3)
37K6          SBN   0  6
384Q          BZE   0  SFS2 
38JB          CALL  5  PFCB                [ ESF ASSUMED
3942          LDN   0  FBLKS-A1 
39HL          STO   0  FBLMOD(1)
3=3=          BRN      WC   
3=GW    #     THIS SECTION WRITES MAST BLOCK READ TO BS OF TOP FILE OPEN.   
3?2G    #     REQUISITIONS ANOTHER FILE/FWB AND READS NEXT BLOCK ON TAPE.IF IT  
3?G6    #     IS A DATA BLOCK THIS ACTION IS REPEATED OTHERWISE IT SHOULD BE A  
3?^Q    #     TM FOLLOWED BY AN EFS AND APPROPRIATE ACTION IS TAKEN.
3#FB    #     X7 HOLDS WD 19 OF SFS OF FILE.IF IT IS NEGATIVE THE FILE IS A 
3#^2    #     TERMINAL DIRECTORY AND IS DEALT WITH. 
3*DL    WA    BNG   7  WZ                  [ J IF TERMINAL DIRECTORY
3*Y=          SMO      FX1                 [PICK UP BOTTOM 15 BITS  
3BCW          ANDX  7  MASK3
3BXG    WB    WRITEB                       [WRITE NEXT BLOCK TO TERMINAL FILE   
3CC6          SBN   7  1                   [SUBTRACT 1 FROMBLOCK COUNT  
3CWQ          GETCORE  BSBS,1              [ &GET ANOTHER FWB   
3DBB          FINDCORE 3
3DW2          NAME     3,FILE,FWB   
3F*L          CALL  5  READA
3FT=          LDX   0  CPRW1(2) 
3G#W          ANDX  0  MASK1(1) 
3GSG          BZE   0  WB                  [J IF NOT TM 
3H#6          BZE   7  WS   
3HRQ          ACROSS   RESTERR,3
3J?B    WS  
3JR2          CALL  5  READS
3K=L          LDCT  0  #400 
3KQ=          ANDX  0  A1(3)
3L9W          BNZ   0  WC                  [ EXPECTING ESF  
3LPG          ACROSS   RESTERR,4
3M96    #     THIS SECTION DEALS WITH END OF FILE   
3MNQ    #     X6 HOLDS THE INDICATION OF ENTRY POINT.   
3N8B    #     IF FROM RESTOREF A BSTB/FULLB IS CREATED TO HOLD BS BLOCK NOS.
3NN2    #     MOVED FROM FCB,FILE IS "CLOSED" AND ROUTINE EXITS.
3P7L    WC    CALL  5  PFCB                [X1 -> FCB OF TOP FILE TO FREE EXTRA 
3PM=    XZ    LDX   1  FPTR(1)  
3PX4P...#SKI IFS<1$1
3Q6W          BXE   1  CXFI,XY             [ J IF END OF FILE CHAIN 
3QLG          LDX   0  ATYPE(1) 
3R66          BXE   0  FFSFCB,XY           [ J IF AT FILE CONTROL BLOCK 
3RKQ          BXU   0  FFSFUWB,XZ          [ J IF NOT FILE FUWB 
3S5B          CHAIN 1,2 
3SK2          WRITEAUTO FREE+FAIL,BSBS     [ WRITE F/FUWB TO B/STORE
3T4L          BRN      WC   
3TJ=    XY    BACKWAIT  
3W3W          TOPFCB 1  
3W4X ...#UNS AMTGR  
3W5Y ...      JBS XYNOTPR,,BGENRES  
3W6^ ...#UNS AMTGR  
3W82 ...#SKI
3W93 ...      BWNZ     GINCTSN,XYNOTPR      [ JUMP IF NOT PARTIAL RESTORE   
3W=Q ...      FILECOUNT  0                  [ COUNT NUMBER OF FILES OPEN
3W#F ...      SBN   0  1                    [ MINUS 1 FOR LIMB RESTORED 
3WB8 ...      BXE   0  AWORK2(2),UP         [ JUMP IF END   
3WCX ...XYNOTPR 
3WHG    #     THIS SECTION DEALS WITH END OF FILE ACTION FOR GENERAL RESTORE
3X36    #     A SKELETON DIRECTORY ENTRY IS SET UP  
3XGQ    #     THE DIRECTORY ENTRY IS ZERO EXCEPT FOR:   
3Y2B    #     HDREC    =FRDE
3YG2    #     EINC     =-VE  - SKELETON 
3Y^L    #     ECOPS    =NO. BLOCKS/COPIES   
3^F=    #     ELOC1    =LOCAL NAME ETC. FROM FCB
3^YW    #      ETC  
42DG    #     THIS IS APPENDED TO THE FILE AT LEVEL 1   
42Y6    #     A BLOCKS RECORD CONTAINING BS BLOCKS   OM FCB IS ALSO APPENDED
43CQ    #     FILE IS "CLOSED" USING CLOSESHORT MACRO BECAUSE DIRECTORY IS OPEN 
43XB    #     IF ONLY MASTER OPEN ROUTINE EXITS 
44C2    #     OTHERWISE IT RETURNS TO READ NEXT SENTINEL
44WL          HUNT     2,FILE,FAPB  
45B=          LDN   5  FRDE 
45TW          STO   5  A1(2)               [ SET THE RECORD HEADER  
46*G          STOZ     ERES(2)  
46T6          ADN   2  ERES 
47#Q          LDX   3  2                   [ ZEROISE SKELETON NAME ENTRY
47SB          ADN   3  1
48#2          MOVE  2  FRDE-1   
48RL          SBN   2  ERES                [ X2 -> F/FAPB   
49?=          NGN   0  1
49QW          STO   0  EINC(2)             [ SET INC. NO. NEGATIVE TO INDICATE  
4==G                                       [          SKELETON  ENTRY   
4=Q6          CALL  5  PFCB 
4?9Q ...      LDX   3  FBLMOD(1)
4?PB          SBN   3  FBLKS-A1 
4#92          LDCT  0  0(3) 
4#NL          ADN   0  1
4*8=          STO   0  ECOPS(2)            [ UPDATE ECOPS   
4*MW          LDX   0  FLAN(1)  
4B7G          STO   0  ECAT(2)  
4BM6          ADN   1  FLOC1               [ MOVE IN LOCAL NAME 
4C6Q          ADN   2  ELOC1
4CLB          MOVE  1  5
4D62          SBN   1  FLOC1
4DKL          JBC   WTERM,1,BFDIR          [J IF TERMINAL FILE  
4F5=          LDN   0  1
4FJW          STO   0  EREEL-ELOC1(2)   
4G4G          STO   0  EGEN-ELOC1(2)
4GJ6          SMO      FX1  
4H3Q          LDX   0  MC1  
4HHB          STO   0  ELAN-ELOC1(2)       [SET REEL/GEN/LANG AS 1/1/C1 FOR A DI
4J32          ADN   1  FME1 
4JGL          ADN   2  EUSE1-ELOC1  
4K2=          MOVE  1  3                   [INSERT USER NAME IN DUMMY ENTRY 
4KFW    WTERM   
4K^G          APPEND   1                   [WRITE SKELETON DIRENT   
4LF6          BACKWAIT  
4LYQ          HUNT     2,FILE,FAPB  
4MDB          ADN   3  2                   [X3=NO OF BLOCKS IN FILE 
4MY2          STO   3  A1(2)
4NCL          CALL  5  PFCB                [X1 -> FCB OF TOP FILE OPEN  
4NX=          ADN   1  BSPRE               [MAKE UP THE BLOCKS RECORD   
4PBW          ADN   2  A1+1 
4PWG          SBN   3  1
4QB6          MOVE  1  0(3) 
4QTQ          APPEND   1                   [WRITE THE BLOCKS RECORD 
4R*B          BZE   4  NINDEX              [ SKELETON ENT. NOT FOR A DIR.   
4RT2          WIND 1                       [ POSITION READ POINTERS AFTER   
4S#L          BACKSPACE 1                  [       NAME  RECORD 
4SS=          GRINDEX                      [  SETS UP INDEX RECORD ETC ETC  
4T?W                                       [   INDEX RECORD HAS BEEN READ   
4TRG    NINDEX  
4W?6          CLOSEFRBS 
4WQQ          FILECOUNT 0   
4X=B          LDN   4  0                   [ RESET FLAG FOR NOT A DIRECTORY 
4XQ2          SBN   0  1
4Y9L          BZE   0  ZEND                [J & EXIT IF 1 FILE OPEN 
4YP=    #   
4^8W    #  NOW READ NEXT SENTINEL - ERROR IF NOT START OR END SENTINEL - OTHERWI
4^NG    #  TAKE APPROPRIATE ACTION. 
5286    #   
52MQ          CALL  5  TM                  [READ NEXT SENTINEL  
537B          CALL  5  READP
53M2          LDN   0  6
546L          BXE   0  ESENTYP(3),SFS2     [J IF START SENTINEL 
54L=          LDCT  0  #400 
555W          BXU   0  ESENTYP(3),XER1     [J IF NOT END SENTINEL   
55KG    #   
5656    #     IF A 2ND DSF HAS BEEN READ FROM THE TAPE INDICATING THAT A
56JQ    #           DIRECTORY IS NEXT ON TAPE THIS SECTION IS ENTERED   
574B    #     THE NEXT SENTINEL IS READ AND CHECKED THAT IT IS A SFS,OTHERWISE  
57J2    #     FORMAT ERROR.BIT 13 IS SET IN FCA5 TO INDICATE A DIRECTORY.   
583L    #     THE LOCAL NAME IN THE SFS IS CHECKED AGAINST THAT IN THE FCB. 
58H=    #     THE ROUTINE ENTERS RESTMERG TO MERGE THE DIRECTORY ABOUT TO BE
592W    #     RESTORED FROM MAG. TAPE WITH THE DIRECTORY OPEN AT TOP LEVEL. 
59GG    #     NORMAL EXIT IS TO SECTION WHICH DEALS WITH END OF FILE ACTION.
5=26    #     UPPLUS1  TAPE FAIL
5=FQ    #     UPPLUS2  FORMAT ERROR 
5=^B    SKEL  CALL  5  TM                  [SKIP TO TM  
5?F2          CALL  5  READP
5?YL          TOPFCA2  2
5#D=          LDN   0  #2000               [SET B13 OF FGENERAL1
5#XW          ORS   0  FGENERAL1(2)        [[=> DIRECTORY]  
5*CG          LDCT  0  #400 
5*X6          BXE   0  ESENTYP(3),RENDSENT [J IF END SENTINEL   
5BBQ          LDN   0  6
5BWB          BXU   0  ESENTYP(3),XER1     [ERROR IF NOT START SENTINEL 
5CB2          MHUNTW   1,FILE,FINTER6   
5CTL          LDN   0  A1(3)
5D*=          ADN   1  A1   
5DSW          MOVE  0  20                  [REMEMBER LAST START SENTINEL READ (I
5F#G                                       [             OF ERROR)  
5FS6          CALL  5  PFCB                [X1-> FCB OF TOP FILE OPEN   
5G?Q          LDX   0  ESENB(3)            [IF START SENTINEL IS FOR A TERMINAL 
5GRB          BPZ   0  RDIRERASED          [  IF DIR. NAMES IN TOP DIR. OPEN & S
5H?2                                       [  BEEN ERASED & START SENTINEL FOR A
5HQL          TESTNAMX 3,FME1(1),ESENUSE1(3),RDIRERASED,5  [  SENTINEL DIFFER, D
5J==                                       [  DIR. OR FILE HAS BEEN FOUND INSTEA
5JPW          DOWN  RESTMERG,1             [MERGE DIR. ON TAPE WITH  ONE CONTAIN
5K9G                                       [  DUMMY ENTRIES OF FILES OR DIRS. RE
5LNB          BRN      WC1  
5M82          UPPLUS 1                     [ ERROR IN R/MERG RETURN TO RESTOREA 
5MML    #     EXIT FOR GENERAL RESTORE  
5N7=    #   
5NLW    #     FLAG THE RE-EMERGENCE FROM RESTMERG   
5P6G    WC1   LDN   4  1
5PL6          BRN      WC   
5PN4
5PQ2    RENDSENT
5PRY          CLOSEFRBS                    [CLOSE DIRECTORY 
5PSJ ...#UNS AMTGR  
5PT8 ...      BS ,BFREEBS   
5PTW          BRN      SKEL 
5PXS    RDIRERASED  
5P^Q          CLOSEFRBS                    [CLOSE ERASED DIRECTORY  
5Q2B ...#UNS AMTGR  
5Q32 ...      BS ,BFREEBS   
5Q3N          BRN      SFS2 
5Q5Q    #   
5QKB    #     FLAG THE OCCURENCE OF A TERMINAL DIRECTORY
5R52    WS1   LDN   4  1
5RJL          BRN      WS   
5S4=    ZEND
5SHW          LDX   2  FX2  
5T3G          LDX   5  AWORK1(2)
5TH6          STO   5  ACOMMUNE2(2) 
5W2Q          LDX   5  AWORK2(2)
5WGB          STO   5  ACOMMUNE3(2) 
5WQ8 ...UP  
5X22          UP
5XFL    #     THIS SECTION "OPENS" A FILE WHOSE LOCAL NAME HAS JUST BEEN READ   
5X^=    #     IN A SENTINEL FROM MAG. TAPE.IT SETS UP AN FCB FOR THE FILE WHICH 
5YDW    #     IS ZERO EXCEPT
5YYG    #     CTOPEN      =#40000000
5^D6    #     FWAITCOUNT  =0
5^XQ    #     CMOD        =-VE  
62CB    #     COMM        =B7 & B10 SET.
62X2    #     FSIZE       =FILESIZE 
63BL    #     FLOC1       =LOCAL NAME FROM SENTINEL 
63W=    #      ETC  
64*W    #     BSPRE       =BLOCK NOS. FOR FILE  
64TG    #      ETC  
65*6    #     BACK1       =BS HOME - LAST BLOCK NO. REQUISITIONED   
65SQ    #     BACK2 
66#B    #     THE FCB IS CHAINED IN THE FILE CHAIN  
66S2    #     THE BS BLOCKS ARE REQUISITIONED   
67?L    #     1. IN THE RESTOREG CASE THE NO. OF BLOCKS IS PICKED UP FROM THE   
67R=    #        SFS
68=W    #     2. IN THE RESTOREF CASE THE BLOCKS HAVE ALREADY BEEN REQUISITIONED
68QG    #        AND ARE HELD IN A BSTB/FULLB   
69=6    SUFCB SBX   5  FX1                 [ROUTINE TO SET UP FCB & THUS "OPEN" 
69PQ    WHAT
6=9B          HUNT     1,FILE,FWB   
6=P2          LDX   3  A1+18(1)            [NO OF BLOCKS IN FILE
6?8L          BNZ   3  WF                  [PROBABLY ON SFS FOR A DIRECTORY 
6?N=          LDN   3  1
6#7W          LDX   0  A1+19(1) 
6#MG          BPZ   0  WF   
6*76          LDN   4  1                   [SETTING FLAG FOR EMPTY DIRECTORY
6*LQ    WF  
6B6B    # WORD ESENAL CONTAINS VALUE OF SPECIAL FILE RESIDENC NUMBER. IF
6BL2    # ZERO THEN FILE WAS NEVER ALLOCATED( OR HAS BEEN CANCELLED ALLOCATED)  
6C5L    # IF EQUAL TO ONE THE FILE HAS BEEN ALLOCATED AS A PUBLIC FILE  
6CK=          LDX   7  ESENAL(1)           [X7= SPECIAL FRN 
6D4W          ANDN  7  #77  
6DJG          BZE   7  WBACK               [ J IF NO SPECIAL FRN
6F46          SBN   7  1
6FHQ          BZE   7  WBACK               [ J IF FILE IS PUBLIC
6G3B          ADN   7  1
6GH2          RESQUERY 7,WBACK             [ J IF FILE RESIDENCE IS NOT ONLINE  
6H2L          ADN   3  2
6HG=          STO   3  7                   [X7 = NO. OF WORDS IN B/EMPTYB   
6H^W          SETUPCORE 7,3,BSTB,EMPTYB 
6JFG          STO   7  A1(3)               [SETTING UP RECORD HEADER
6J^6          MHUNTW   1,FILE,FWB   
6KDQ          LDX   2  ESENAL(1)           [ X2 = SPECIAL FRN   
6KYB          ANDN  2  #77  
6LD2          STO   2  A1+1(3)  
6LXL          SBN   7  2
6MC=          STO   7  3
6MWW          GETBAX
6NBG          BRN      NOBACK   
6NW6    WBACK   
6NYP ...#     DO NOT ALLOCATE ENHANCEMENT,DS8416.   
6P3# ...#UNS  ANOTALLOC 
6P3F ...(   
6P3L ...      HUNT      1,FILE,FWB  
6P3R ...
6P3Y ...
6P45 ...      LDX   0  A1+12(1) 
6P4= ...      SMO      FX1  
6P4C ...      TXU   0  MC1  
6P4J ...      BCC      VSF  
6P4P ...      SMO      FX1  
6P4W ...      TXU   0  MB1  
6P53 ...      BCC      VSF  
6P58 ...      WHATBACK 3,3  
6P5* ...      BRN      NOBACK   
6P5G ...VSF 
6P5X ...      WHATBACK 3,3,,,VSF
6P78 ...)   
6P8G ...#UNS  ANOTALLOC 
6P?5 ...#SKI
6P*Q          WHATBACK 3,3                 [3 IS ESTIMATE OF FREQUENCY OF USE   
6PTB    NOBACK  
6Q*2 ...      SETNCORE FBLKS-A1(3),2,FILE,FCB,,1   [SET UP FCB  
6QSL ...      STOZ     FBLMOD(2)
6R#= ...      LDN   0  FBLMOD(2)
6RRW ...      LDN   1  FBLMOD+1(2)  
6S?G ...      MOVE  0  FBLKS-FBLMOD-1          [ZEROISE ALL BUT LIST OF BLOCKS  
6SR6          LDN   0  FBLKS-A1 
6T=Q          STO   0  FBLMOD(2)
6TQB          LDX   0  ALOGLEN(2)   
6W=2          STO   0  FUSEBL(2)
6WPL          LDCT  0  #400 
6X9=          STO   0  CTOPEN(2)           [OPEN IN GENERAL MODE
6XNW          NGN   0  1
6Y8G          STO   0  CMOD(2)             [CMOD SET -VE
6YN6          LDN   0  FILESIZE 
6^7Q          STO   0  FSIZE(2) 
6^MB          MHUNTW   1,FILE,FWB   
7272          LDCT  7  #777 
72LL          ANDX  7  ESENB(1)            [PICK UP B0-8 OF ESENB   
736=          ADX   7  ESENCT(1)           [ADD IN FILE SIZE
73=7 ...
73B4 ...      GETFCBN 2,7         [X7 INDICATES DIR OR TERM FILE
73F^ ...
73KW          LDN   0  5                   [X0= LENGTH OF LOCAL NAME TO MOVE
745G          BPZ   7  TERM                [JI IF NOT A DIRECTORY   
74K6          BS    2,BFDIR                [SET "DIRECTORY BIT" 
754Q          ADN   1  ESENUSE1 
75JB          ADN   2  FME1 
7642          MOVE  1  3                   [INSERT USER NAME INTO FCB   
76HL          SBN   1  ESENUSE1 
773=          SBN   2  FME1 
77GW          LDN   0  3                   [
782G    TERM
78G6          ADN   1  ESENLOC1 
78^Q          ADN   2  FLOC1
79FB          SMO      0
79^2          MOVE  1  0                   [MOVE LOCAL NAME INTO FCB
7=DL          BNG   7  TDIR                [J IF A DIRECTORY
7=KS ...#UNS AMTGRTEST  
7=R2 ...#SKI
7=Y=          LDX   0  ESENLAN-ESENLOC1(1)  
7=^^ ...#UNS AMTGRTEST  
7?3N ...(   
7?5C ...      SBN   1  ESENLOC1 
7?76 ...      LDX   0  ESENLAN(1)   
7?8T ...      SMO      FX1  
7?=J ...      BXE   0  TAPEFAIL,XTFAIL  
7?#? ...XNTFAIL 
7?B2 ...)   
7?CW          STO   0  FLAN-FLOC1(2)       [INSERT LANGUAGE 
7?XG    TDIR
7#C6          ADN   2  BSPRE-FLOC1  
7#WQ          MHUNTW   1,BSTB,FULLB 
7*BB          ADN   1  A1+1 
7*W2          MOVE  1  1(3)                [MOVE BLOCK NOS. INTO FCB
7B*L          SBN   2  BSPRE
7BT= ...      TRANSFCB 2,ACT,FILE      [TRANSFER FCB TO FILE CHAIN  
7C#W          MFREEW   BSTB,FULLB   
7CSG          ADX   5  FX1  
7D#6          EXIT  5  0
7DRQ    #     THIS SUBROUTINE SEARCHES THE FILE CHAIN FOR THE FCB OF THE FILE   
7F?B    #      OPEN AT TOP LEVEL.   
7FR2    #     IT USES X1,X0 AND X5 AS CALL LINK 
7G=L    #     IT DOES NOT COORDINATE
7GQ=    #     THE POINTER IS RETURNED IN X1.
7H9W    PFCB
7HPG          TFCBCHECK  1                 [X1 -> FCB   
7J96          EXIT  5  0
7JNQ    #     THE FOLLOWING SUBROUTINE(S) DEAL WITH MAG. TAPE READING   
7K8B    #     THIS SUBROUTINE READS A BLOCK 20 OR GSBS WORDS LONG FROM THE  
7KN2    #     TAPE INTO A FILE/FWB BLOCK AND CHECKS THE REPLY.  
7L7L    #     ON ENTRY: 
7LM=    #     BLOCK HAS BEEN LOCKED 
7M6W    #     THE UNIT NO. IS IN X4 
7MLG    #     X3 HOLDS POINTER TO BLOCK 
7N66    #     X5 IS CALLING ACCUMULATOR 
7NKQ    #     COORDINATES   
7P5B    #     IF FAIL RETURN IS TO ERROR ROUTINE
7PK2    READP HUNT     3,FILE,FWB          [S/R ENTRY TO READ 20 WORDS TO FWB   
7Q4L    READS LDN   0  20                  [ENTRY HERE ASSUMES X3 -> FAPB   
7QJ=          BRN      READB
7R3W    READG HUNT     3,FILE,FWB          [S/R ENTRY TO READ GSBS WORDS TO FWB 
7RHG    READA LDN   0  GSBS 
7S36    READB SBX   5  FX1                 [FOR CO-ORDINATION   
7SGQ          DCA ,STO,0,COUNT             [ TRANSFER LENGTH
7T2B          DCA   ,STOZ,,MODE            [SET 'READ' TYPE/MODE
7TG2          ADN   3  A1   
7T^L          DCA ,STO,3,CTSA              [ DESTINATION
7WF=          SBN   3  A1   
7WYW          LOCK     2
7XDG          LOCK     3
7XY6          GPERI ,2                     [ INITIATE A READ
7YCQ          COOR1 
7YXB          UNLOCK   2
7^C2          UNLOCK   3
7^WL          LDCT  0  #640 
82B=          ANDX  0  CPRW1(2) 
82TW          BNZ   0  XER19               [ERROR IF B0,B1 OR B3 SET IN REPLY WO
83*G          ADX   5  FX1  
83T6          EXIT  5  0
84#Q    #   
84SB    #     THIS SUBROUTINE MOVES THE TAPE PAST THE NEXT TM   
85#2    #     UNIT NO. IS IN X4 
85RL    #     X5 IS CALLING ACCUMULATOR 
86?=    #     NO FAIL CHECKING IS DONE  
86QW    TM    SBX   5  FX1                 [FOR CO-ORDINATION   
87=G          LDX   2  FX2  
87Q6          LDN   0  4
889Q          DCA ,STO,0,MODE   
88PB          LOCK     2
8992          GPERI ,2                     [ SKIP TO TAPE MARK  
89NL          COOR1 
8=8=          UNLOCK   2
8=MW          ADX   5  FX1  
8?7G          EXIT  5  0
8?M6    #     THIS ROUTINE IS ENTERED IF A TERMINAL DIRECTORY HAS BEEN READ.
8#6Q    #     I.E. A DIRECTORY WHICH HAS HAD NO FILES DUMPED BENEATH IT.
8#LB    #     ITS PURPOSE IS TO READ THROUGH EACH BLOCK,ZEROISING THE BOTTOM 15 
8*62    #     BITS IN ECOPS IN EACH DIRECTORY ENTRY AND REMOVING THE BLOCKS 
8*KL    #     RECORD.   
8B5=    #     B0 IN WD. A1+19 IN THE SENTINEL INDICATES A DIRECTORY 
8BJW    #     X2 HOLDS POINTER TO FILE/FAPB 
8C4G    #     X1 HOLDS POINTER TO FILE/FWB  
8CJ6    #     X3 HOLDS POINTER TO CURRENT RECORD
8D3Q    #     X5 LINK ACCUMULATOR   
8DHB    #     IT COORDINATES
8F32    WZ    HUNT     2,FILE,FAPB  
8FGL          HUNT     1,FILE,FWB   
8G2=          LDN   3  A1(1)               [SET UP POINTER. 
8GFW    WE    LDEX  0  0(3) 
8G^G          BNZ   0  WU   
8HF6    WRD3
8HYQ          CALL  5  READSENT            [READ NEXT BLOCK 
8JDB          LDEX  0  0(3) 
8JY2    WU  
8KCL          SBN   0  FRDE 
8KX=          BNZ   0  XER7                [ERROR IF NOT A DIR. ENTRY NAME RECOR
8KXP ...#UNS AMTGR  
8KY8 ...(   
8KYM ...   JBC PARTRES,,BGENRES 
8K^6 ...      LDEX   0 ECOPSN(3)       [ IF FILE OFFLINE
8K^K ...      BZE   0  PARTRES      [  GO TO NOTPRLLINC 
8L24 ...#    FIND FILE/FINTER7 BLOCK OVERWRITTING X1
8L2H ...      MHUNTW   1,FILE,FINTER7   
8L32 ...#    FIND INCREMENT THAT FILE WAS DUMPED ON 
8L3F ...#    IF EQUAL TO CURRENT INCREMENT GO TO "NOTPRLLINC"   
8L3Y ...#    IF LESS THAN CURRENT INCREMENT AND EQUAL TO PREVIOUS INCREMENT 
8L4C ...#    GO TO "PRLLINC"
8L4W ...#    IF LESS THAN PREVIOUS INCREMENT (AND LESS THAN CURRENT INCREMENT)  
8L5* ...#    RESET NO OF PREVIOUS INC AND NO OF FILES IN INC &SIZE OF INC   
8L5S ...      LDX   0  EINCN(3) 
8L6? ...      BXL   0  GRPINCNUM(1),NOTPRLLINC  
8L6Q ...      BXE   0  GRPINCNUM(1),PRLLINC 
8L79 ...      STO   0  GRPINCNUM(1) 
8L7N ...      STOZ     GRPINCFILES(1)   
8L87 ...      STOZ     GRPINCSIZE(1)
8L8L ...PRLLINC 
8L95 ...#    INCREASE NO OF FILES IN INC BY 1   
8L9J ...#    INCREASE SIZE OF INC BY SIZE OF THIS FILE  
8L=3 ...      LDN   0  1
8L=G ...      ADS   0  GRPINCFILES(1)   
8L=^ ...      LDX   0  ECOPSN(3)
8L?D ...      SRL   0  15   
8L?X ...      ADS   0  GRPINCSIZE(1)
8L#B ...NOTPRLLINC  
8L#T ...#    FIND FILE/FWB BLOCK TO RETURN X1 TO ORIGINAL STATE 
8L*# ...      HUNT     1,FILE,FWB   
8L*R ...PARTRES 
8LB= ...)   
8LBW          LDEX  6  ECOPSN(3)
8LWG          JBCC  WNINDEX,3,BNINDEX      [DEAL WITH & CLEAR INDEX BIT 
8MB6          ADN   6  1                   [X6= NO. OF BLOCKS & INDEX RECORDS   
8MTQ    WNINDEX 
8N*B          LDX   7  ENUSEN(3)
8NT2          LDN   0  0
8P#L          DLA   0  ECOPSN(3)           [CLEAR "NO. OF COPIES (BLOCKS) RECORD
8PS=          CALL  5  XAPPEND             [APPEND NAME RECORD  
8Q?W    WQ  
8QRG          LDEX  0  FRH(3)   
8R?6          ADX   3  0                   [UPDATE X3 TO POINT TO NEXT RECORD   
8RQQ          LDEX  0  FRH(3)   
8S=B          BNZ   0  WY                  [J IF NOT END OF BLOCK   
8SQ2          CALL  5  READSENT            [READ NEXT BLOCK FROM MT 
8T9L    WY  
8TP=          SBN   6  1
8W8W          BPZ   6  WQ                  [J IF MORE BLOCKS & INDEX RECORDS TO 
8WNG          BZE   7  WE                  [J IF NO (MORE) TRAPS RECORDS TO COPY
8X86          CALL  5  XAPPEND             [APPEND TRAPS RECORD 
8XMQ          SBN   7  1                   [REDUCE NO. OF TRAPS RECORDS 
8Y7B          BRN      WQ   
8YM2    #   
8^6L    #     THIS SUBROUTINE APPENDS A RECORD WHOSE POINTER IS IN X3.  
8^L=    #     IT KEEPS THE RECORD POINTER IN X3 
925W    #     IT RESTORES POINTERS IN X1 AND X2 
92KG    #     X5 IS LINK ACCUMULATOR
9356    #     IT COORDINATES.   
93JQ    XAPPEND 
944B          SBX   5  FX1  
94J2          LDN   0  0(3) 
953L          LDN   1  A1(2)
95H=          LDX   2  0(3) 
962W          MOVE  0  0(2)                [MOVE RECORD TO APPEND BLOCK.
96GG          HUNT     1,FILE,FWB   
9726          SBX   3  1                   [KEEP POINTER IN X3  
97FQ          APPEND
97^B          HUNT     1,FILE,FWB   
98F2          HUNT     2,FILE,FAPB  
98YL          ADX   3  1                   [RESTORE POINTER 
99D=          ADX   5  FX1  
99XW          EXIT  5  0
9=CG    #     THIS SUBROUTINE IS ENTERED WHEN A ZERO RECORD HEADER IS FOUND.
9=X6    #     IT READS THE NEXT BLOCK INTO A FILE/FWB AND TESTS REPLY.A TAPE
9?BQ    #     FAIL WILL RETURN TO TAPE FAIL EXIT.   
9?WB    #     A TAPE MARK WILL CAUSE EXIT FROM THIS SECTION OF PROGRAM  
9#B2    #     POINTERS IN X1 AND X2 ARE RESET   
9#TL    #     X3 IS SET TO POINT AT FIRST RECORD OF NEW BLOCK.  
9**=    #     X5 IS LINK ACCUMULATOR
9*SW    #     THIS ROUTINE USES,BECAUSE OF NECESSITY A WORD IN THE CHAPTER TO   
9B#G    #     STORE A LINK. THIS ROUTINE IS ENTERED ONLY IN EMS SO THIS CHAPTER 
9BS6    #     SHOULD NOT BE BROUGHT IN AGAIN.HOWEVER IF ENHANCING THIS SEGMENT  
9C?Q    #     THIS WAY OF STORING THE LINK SHOULD BE ALTERE 
9CRB    READSENT
9D?2          LDX   2  FX2  
9DQL          SBX   5  FX1  
9F==          SMO   FX2 
9FPW          STO   5  AWORK4   
9G9G          CALL  5  READG
9GP6          LDX   0  CPRW1(2) 
9H8Q          ANDX  0  MASK1(1) 
9HNB          BNZ   0  WS1  
9J82          HUNT     2,FILE,FAPB  
9JML          HUNT     1,FILE,FWB   
9K7=          LDN   3  A1(1)
9KLW          SMO   FX2 
9L6G          LDX   5  AWORK4   
9LL6          ADX   5  FX1  
9M5Q          EXIT  5  0
9M77 ...#UNS AMTGRTEST  
9M8J ...(   
9M9^ ...XTFAIL  
9M?B ...      LDX   0  ESENFN(1)           [ GET FILE NUMBER
9M#R ...      BXE   0  AFILENUMB,XNTFAIL   [ IF GREATER THAN PREVIOUS VALUE 
9MB8 ...      BXL   0  AFILENUMB,XNTFAIL   [ CAUSE READ FAIL
9MCK ...XRFAIL  
9MF2 ...      STO   0  AFILENUMB
9MGC ...      BRN      XER19
9MHS ...)   
9MKB    #   
9N52    TAER  UPPLUS   2                   [FORMAT ERROR
9NJL    TAIL2 UPPLUS   1                   [TAPE FAIL   
9P4=    #   
9PHW    XER1
9Q3G          ACROSS   RESTERR,1           [START OR END SENTINEL EXPECTED  
9QH6    XER7
9R2Q          ACROSS   RESTERR,7           [NAME RECORD OF DIR. ENTRY INCORRECT 
9RGB    XER19   
9S22          ACROSS   RESTERR,19          [B0,B1 OR B3 SET IN REPLY WORD TO REA
9SFL    #   
9SGX ...#      *****************************************************************
9SJ8 ...#                                  X2RESTLIMB   
9SKF ...#                                  **********   
9SLQ ...#     THIS ENTRY POINT IS USED BY RESTOREG TO SET UP A FCB  
9SN3 ...#     FOR THE DIRECTORY BEING PARTIALLED RESTORED   
9SP# ...#   
9SQK ...X2RESTLIMB  
9SRW ...      CALL  5  SUFCB               [ SET UP FCB 
9ST7 ...      UP
9SWD ...#   
9SXP ...#     ******************************************************************
9S^=          MENDAREA 30,K99RESTLIMB   
9TDW    #   
9TYG    #END
^^^^ ...11540011000400000000