{{htmlmetatags>metatag-description:(ICL George 3 and George 4 source: RESTLIMB864)}}
====== RESTLIMB864 ======
(George Source)
**Macros used:** [[george:macro:ACROSS|ACROSS]], [[george:macro:APPEND|APPEND]], [[george:macro:BACKSPACE|BACKSPACE]], [[george:macro:BACKWAIT|BACKWAIT]], [[george:macro:BS|BS]], [[george:macro:BWNZ|BWNZ]], [[george:macro:BWZ|BWZ]], [[george:macro:BXE|BXE]], [[george:macro:BXL|BXL]], [[george:macro:BXU|BXU]], [[george:macro:CHAIN|CHAIN]], [[george:macro:CLOSEFRBS|CLOSEFRBS]], [[george:macro:COOR1|COOR1]], [[george:macro:DCA|DCA]], [[george:macro:DOWN|DOWN]], [[george:macro:FILECOUNT|FILECOUNT]], [[george:macro:FINDCORE|FINDCORE]], [[george:macro:GETBAX|GETBAX]], [[george:macro:GETCORE|GETCORE]], [[george:macro:GETFCBN|GETFCBN]], [[george:macro:GPERI|GPERI]], [[george:macro:GRINDEX|GRINDEX]], [[george:macro:HUNT|HUNT]], [[george:macro:JBC|JBC]], [[george:macro:JBCC|JBCC]], [[george:macro:JBS|JBS]], [[george:macro:LOCK|LOCK]], [[george:macro:MENDAREA|MENDAREA]], [[george:macro:MFREEW|MFREEW]], [[george:macro:MHUNTW|MHUNTW]], [[george:macro:NAME|NAME]], [[george:macro:READB|READB]], [[george:macro:RESQUERY|RESQUERY]], [[george:macro:RESTOREN|RESTOREN]], [[george:macro:RG|RG]], [[george:macro:SEG|SEG]], [[george:macro:SEGENTRY|SEGENTRY]], [[george:macro:SETNCORE|SETNCORE]], [[george:macro:SETUPCORE|SETUPCORE]], [[george:macro:TESTNAMX|TESTNAMX]], [[george:macro:TFCBCHECK|TFCBCHECK]], [[george:macro:TOPFCA2|TOPFCA2]], [[george:macro:TOPFCB|TOPFCB]], [[george:macro:TRANSFCB|TRANSFCB]], [[george:macro:UNLOCK|UNLOCK]], [[george:macro:UP|UP]], [[george:macro:UPPLUS|UPPLUS]], [[george:macro:WHATBACK|WHATBACK]], [[george:macro:WIND|WIND]], [[george:macro:WRITEAUTO|WRITEAUTO]], [[george:macro:WRITEB|WRITEB]], [[george:macro:XY|XY]]
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