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