(George Source)
Macros used: ACROSS, ALTLENG, ALTLENGD, BACKSPACE, BLOCKMAP, BS, BWNZ, BXE, BXGE, BXL, BXU, CHAIN, DOWN, GEOERR, HUNTMISB, HUNTW, JBC, JBCC, JBS, JMBAC, JMBACC, JMBAS, MBC, MBS, MENDAREA, MHUNTW, MONOUT, MONOUTX, NOBITS, NOPARTRES, OUTBLOCK, OUTPACK, OUTPACKX, POP, QSTEPC, SEG, SEGENTRY, SETNCORE, SFCB, SKIP, STEP, STEPAGAIN, STEPREWRITE, TESTNAMX, TOPFCA, TOPFCB, TOPFCB2, TRACEIF, UP, VOP
22FL ... SEG BMAPDIR,864,EDWARD MOON,BMAP 22^= SEGENTRY K1BMAPDIR,Z1BMAPDIR 23?M ... SEGENTRY K2BMAPDIR,XBR 23L4 ... 23YG SEGENTRY K3BMAPDIR,UPJOBCT 24D6 SEGENTRY K4BMAPDIR,SETSAVEBIT 24XQ SLAVEACT 25CB #HAL +BSA+AUTOMAP,0 29S2 RESMESS +BMRESTUSER 2=?L PRMESS +BMPARTRES 2=R= STRINGABAND 16HABANDONED : 2?=W STRNOTDUMP 16HUSER NOT DUMPED 2#PQ NFIVE +5 2B8L NSYS 12HSYSTEM 2BN= [ 2C7W [ 2CMG [ 2D76 [ 2DLQ [ THUIS ROUTINE SETS UP A GMON ASET BLOCK FOR MESSAGE PARAMETERS 2F6B [ 2FL2 [ ON ENTRY X5=> SIZE OF BLOCK 2G5L [ X7 =>LINK 2GK= [ 2H4W OUTBLOCK 2HJG SBX 7 FX1 2J46 OUTBLOCK 5 2JHQ STEPAGAIN 2K3B ADX 7 FX1 2KH2 EXIT 7 0 2L2L [ 2LG= [ 2L^W [ THIS ROUTINE PACKS A PARAMETER INTO A GMOM ASET BLOCK 2MFG [ ON ENTRY X2 [ ADDRESS OF PARAMATER DATA 2M^6 [ X5 = LENGTH OF DATA 2NDQ [ X6 = LPDC CHARACTER 2NYB [ X7 = LINK 2PD2 OUTPACK 2PXL SBX 7 FX1 2QC= OUTPACKX 2,5,6 2QWW ADX 7 FX1 2RBG EXIT 7 0 2RW6 [ 2S*Q MONOUT 2STB SBX 7 FX1 2T*2 MONOUTX 3 2TSL ADX 7 FX1 2W#= EXIT 7 0 2WRW [ 2X?G [********************************************: MAPBLOCKS 2XR6 [ SUBROUTINE TO MAP A FILE 2Y=Q [ EXITS +0 IF FILE ON UNAVAILABLE RESIDENCE 2YQB [ +1 IF FILE IS EMPTY 2^=2 [ +2 IF ALL O. K. 2^PL [ 329= MAPBLOCKS 32NW SBX 7 FX1 338G STO 7 ACOMMUNE2(2) 33N6 BLOCKMAP MAPLB1,MAPLB2 347Q LDX 7 ACOMMUNE2(2) 34MB BRN MAPXIT 3572 MAPLB1 35LL SBN 7 1 [ IF UNAVAILABLE 366= MAPLB2 36KW SBN 7 1 [ IF EMPTY 36TN ... LDX 2 FX2 375G MAPXIT 37K6 ADN 7 2 384Q ADX 7 FX1 38JB EXIT 7 0 [IF NORMAL EXIT 3942 [ 39HL [************************************************** SERCHFENTRY 3=3= [ ROUTINE TO BINARY CHOP A FUSER BLOCK TO FIND A REQUIRED 3=GW [ ENTRY 3?G6 [ X5 => KEY OF ENTRY THAT WE REQUIRE 3?^Q [ 3#FB SERCHFENTRY 3#^2 HUNTMISB 3,FI,FUSER 3CWQ STO 4 ACOMMUNE2(2) [WE WISH TO SAVE THIS (BMAPONE) 3DW2 LDX 4 5 3F*L LDX 0 A1(3) [USED DATA 'V' 3FT= LDX 6 3 3G#W ADX 6 0 3GSG ADN 6 A1+1 [DISTANCE MARKER FOR LIMIT OF SEARCH 3H#6 LDN 5 A1+1 3HRQ ADX 5 3 [HOME MARKER FOR START OF SEARCH 3J?B NEXTCHOP 3JR2 SRL 0 1 [DIVIDE V BY 2 3PM= [******************************************** 3Q6W [ THIS SECTION ROUNDS DOWN THE NEW 'V' FOR A FUSER BLOCK TO BE 3QLG [ DIVISIBLE BY FIVE,THUS POINTING IT AT WORD 0 OF A FUSER ENTRY 3R66 [ 3S5B STO 0 2 3SK2 DVS 1 NFIVE(1) 3T4L SBX 0 1 3TJ= LDX 1 FX1 3WHG STO 0 3 [PUT'V' INTO A MODIFIER 3^YW SMO 5 42DG LDX 2 3(3) 43CQ BXE 2 4,WEHAVEIT [IF THIS IS THE ENTRY WE WANT 43XB BNZ 3 NOCHOPAGAIN 44C2 TRACEIF K6BMAPONE,99,299,4,DIRNDICT 44WL LDN 2 0 45B= BRN WAYOUT 45TW NOCHOPAGAIN 46*G BXL 2 4,MOREBIG 46T6 STO 5 6 47#Q ADX 6 0 [NEW'DISTANCE' = 0D+V 47SB BRN NEXTCHOP [TO CHOP AGAIN 48#2 MOREBIG 48RL ADX 5 0 [NEW 'HOME' = OH +V 49?= LDX 0 6 49QW SBX 0 5 4==G BRN NEXTCHOP [TO CHOP AGAIN 4=Q6 WEHAVEIT 4?9Q [ 4?PB [**********************************************:************ 4#92 [ WE HAVE CORRECT KEY, BUT 4#NL [ WE MUST NOW LOCATE THE CORRECT USERNAME AS 4*8= [ KEYS ARE NOT NECESSARILY UNIQUE. 4*MW [ 4B7G ADX 3 5 [POINTER TO ENTRY IN BLOCK 4C6Q LDX 2 FX2 4CLB TRYBACK 4D62 SBN 3 5 4DKL LDX 0 3(3) 4F5= BXE 0 4,TRYBACK 4FJW ADN 3 5 4G4G NEXTSLOT 4GJ6 LDX 0 3(3) 4H3Q BXU 0 4,NOTFND 4HHB LDN 5 2 4J32 STOZ 1 4JGL NEXTWORD 4K2= LDX 0 0(3) 4KFW SMO ACOMMUNE1(2) 4K^G TXU 0 EUSE1N(1) 4LF6 BCS NOTHIS 4LYQ ADN 3 1 4MDB ADN 1 1 4MY2 SBN 5 1 4NCL BPZ 5 NEXTWORD 4NX= SBN 3 3 4PBW BRN NOWOUT 4PWG NOTHIS 4QB6 ADN 5 3 4QTQ ADS 5 3 4R*B BRN NEXTSLOT 4RT2 NOTFND 4S#L [ 4SS= [*************************************************** 4T?W [ EXIT +0 IF ENTRY NOT FOUND 4TRG [ 4W?6 STOZ 2 4WQQ BRN WAYOUT 4X=B NOWOUT 4XQ2 [ 4Y9L [************************************************************* 4YP= [ EXIT +1 IF ENTRY FOUND 4^8W [ 4^NG LDN 2 1 5286 WAYOUT 53M2 SMO FX2 546L LDX 4 ACOMMUNE2 54L= ADX 7 2 555W EXIT 7 0 55KG [ 5656 [************************************************* STEPAGAIN 56JQ [ 574B STEPAGAIN 57J2 SBX 7 FX1 583L STEPAGAIN 58H= ADX 7 FX1 592W EXIT 7 0 59GG [ 5=26 [************************************************* STEPREWRITE 5=FQ [ 5=^B STEPREWRITE 5?F2 STEPREWRITE 5?YL EXIT 7 0 5#D= [ 5#XW [ 5*CG [************************************************* SUB1 5*X6 [ SUBROUTINE TO HUNT FTAB BLOCK (FOR ALTLENG) 5BBQ [ 5BWB SUB1 5CB2 MHUNTW 2,FILE,FTAB 5CTL EXIT 1 0 5D*= [ 5DSW [************************************************ PUTINFLIST 5F#G [ SET 'FLIST ENTRY REQUIRED' BIT 5FS6 [ 5G?Q PUTINFLIST 5GRB BS 2,AW2PUTINFL 5H?2 EXIT 7 0 5HQL [ 5J== [***************************************************** SFUSER 5JPW [ ROUTINE TO HUNT FUSER BLOCK (FOR ALTLENG) 5K9G [ 5KP6 SFUSER 5L8Q CALL 7 TOHUNTFUSER 5LNB LDX 2 3 5M82 EXIT 1 0 5MML [ 5N7= [************************************************** TOHUNTFUSER 5NLW [ ROUTINE TO HUNT FUSER BLOCK (GENERAL) 5P6G [ 5PL6 TOHUNTFUSER 5Q5Q HUNTMISB 3,FI,FUSER 5QKB EXIT 7 0 5R52 [ 5RJL [*********************************************** TOHUNTFLIST 5S4= [ 5SHW TOHUNTFLIST 5T3G HUNTMISB 3,FI,FLIST 5TH6 EXIT 7 0 5W2Q [ 5WGB [ 5WJ# ...[**************************************************************TOHUNTFRE 5WL= ...[ 5WN8 ...TOHUNTFREST 5WQ6 ... HUNTMISB 1,FI,FRESTUSER 5WS4 ... EXIT 7 0 5WW2 ...[ 5WXY ...[ 5X22 [*********************************************************************** 5XFL [ ENTRY (ACROSS) FROM BMAPONE TO PROCESS ENTRY FOR A DIRECTORY 5X^= [ 5YDW 5YYG Z1BMAPDIR 5^D6 CALL 7 STEPAGAIN 5^XQ TRACEIF K6BMAPONE,99,299,EUSE1N(3),DIRENT 62CB JBCC NOTPROC,3,BNINFPROC 62X2 CALL 7 STEPREWRITE 63BL NOTPROC 63W= JBCC NOALINC,3,BNALLINCS 64*W CALL 7 STEPREWRITE 64TG NOALINC 64TR ... JMBACC NOBITS,3,BNPURE,BNWORK,BNVIRGINDA 64W4 ... CALL 7 STEPREWRITE 64W* ...NOBITS 64WN ...[ 64XW ...[*************************************************** 64^4 ...[ A DIRECTORY SHOULDNT BE 'FROZEN', BUT, IF IT IS 652= ...[ WE JUST CLEAR THE FREEZECOUNTS. 653D ...[ 654L ... LDX 0 EAUTOCOUNTN(3) 655S ... ADX 0 ESAVECOUNTN(3) 6572 ... BZE 0 NOTFROZ [ IF NOT 'FROZEN' 6588 ... STOZ EAUTOCOUNTN(3) [ ELSE 659B ... STOZ ESAVECOUNTN(3) [ ZEROISE BOTH. 65=J ... CALL 7 STEPREWRITE 65?Q ...NOTFROZ 65?S ...#UNS AMTGR 65?W ...( 65?Y ...[ 65#2 ...[*********************************************** 65#4 ...[ NOW CHECK FOR OFFLINE DIRECTORIES 65#6 ...[ 65#8 ... JBS NOTOFF,2,AW2ONLINE [ J. IF NOT OFFLINE 65#= ...[ 65## ...[****************************************************** 65#B ...[ DIRECTORY OFFLINE - WANT TO 65#D ...[ INITIATE A PARTIAL RESTORE OF IT 65#G ...[ 65#J ... DOWN BMQUEST,4 [ TO INITIATE RESTORE 65#L ... BRN PARTREPEAT [ IF INITIATED O.K. 65#N ... BRN NOTPRUSFAIL [ IF FAILED BECAUSE NOT DUMPED 65#Q ...NOTOFF 65#S ...) 65*6 [ 65SQ [************************************************************ 66#B [ NOW CHECK IF A RESTORE NEEDS TO BE REINITIATED FOR 66S2 [ THIS DIRECTORY,IF WE JUST NEED TO TIDY UP A 67?L [ PREVIOUSLY RESTORED DIRECTORY OR IF ALL IS 'NORMAL' 67R= [ IF MAPPING A RESTORED LIMB, SET PARTIALLY RESTORED 68=W [ BIT TO SHOW THAT DIRECTORY HAS BEEN RESTORED. 68QG [ 69=6 JBC NOPARTRES,2,AW2PARTRES 69PQ BS 3,BNPARTRES 6=9B CALL 7 STEPREWRITE 6=P2 BRN PRCLEAR 6?8L NOPARTRES 6?N= [ 6#7W [********************************************************** 6#MG [ FAILED IN PREVIOUS RESTORE IF 'BFPARTRES' SET IN 6*76 [ :MASTER'S FCB. 6*LQ [ 6B6B LDX 1 BFILE 6BL2 JBC PRCLEAR,1,BFPARTRES 6C5L [ 6CK= [******************************************************* 6D4W [ PREVIOUS RESTORE FAILED AFTER FREEING BACKING STORE. 6DJG [ IF 'PARTRES' AND 'TEMP' BITS SET THIS DIRECTORY WAS 6F46 [ BEING RESTORED SO WE NEED TO REINITIATE THE RESTORE. 6FHQ [ 6G3B JMBAS PRREINIT,3,BNPARTRES,BNTEMP 6GH2 [ 6H2L [******************************************************** 6HG= [ IF 'PARTRES' AND 'TEMP' ARE CLEAR, THIS DIRECTORY IS 6H^W [ 'NORMAL' ELSE J. TO GET A FLIST ENTRY MADE AS DIR. WILL 6JFG [ NEED TIDYING UP. 6J^6 [ 6KDQ JMBAC NOFLAD,3,BNPARTRES,BNTEMP 6KYB BRN PRCLEAR 6LD2 PRREINIT 6LXL [ 6MC= [******************************************************* 6MWW [ RESTORE NEEDS TO BE REINITIATED - CHECK IF 'RESTORES 6NBG [ REINITIATED' MESSAGE HAS ALREADY BEEN OUTPUT (FRNXT < 0) 6NW6 [ 6P*Q ... CALL 7 TOHUNTFREST 6PTB LDX 0 FRNXT(1) 6Q*2 BNG 0 MOUTDONE 6QBY ...#UNS AMTGR 6QDW ...( 6QGS ... LDX 0 GSIGN 6QJQ ... ORS 0 FRNXT(1) 6QLN ...) 6QNL ...#UNS AMTGR 6QQJ ...#SKI 6QSL NGS 1 FRNXT(1) 6R#= MONOUT BMPRAGAIN 6RRW MOUTDONE 6S?G [ 6SR6 [******************************************************** 6T=Q [ GO DOWN TO BMQUEST TO REINITIATE THE RESTORE. IF IT COMES 6TQB [ 'UP' A FRESTUSER ENTRY HAS BEEN MADE. IF 'UP +1' 6W=2 [ RESTORE ABANDONED - USER NOT DUMPED 6WPL [ 6X9= DOWN BMQUEST,4 6XNW NGN 2 1 [ IF 'UP' 6Y8G SBN 2 1 [IF 'UP+1' : STILL +VE 6YN6 STO 2 5 6^7Q CALL 7 STEPAGAIN 6^MB BNG 5 PARTREPEAT [ J. IF RESTORE INITIATED 7272 BRN TEMPDIR [ ELSE TREAT AS TEMPORARY 72LL PRCLEAR [ TO GET IT ERASED 736= TOPFCB2 1 73KW JBC NOFLAD,1,BFPARTRES 745G BS 2,AW2PARTRES 74K6 NOFLAD 754Q JBS TEMPDIR,3,BNTEMP [IF TEMPORARY DIRECTORY 75JB PARTREPEAT 75N? ...#UNS AMTGR 75S8 ...#SKI 75Y5 ...( 7642 [ 76HL [*********************************************************** 773= [ IF DIRECTORY IS OFFLINE (SHOULDN'T HAPPEN) 77GW [ GET IT ERASED 782G [ 78G6 JBC SERDIR,2,AW2ONLINE [J IF OFFLINE DIRECTORY 78PY ...) 78^Q [ 79FB [************************************************************* 79^2 [ NEXT MARK FUSER ENTRY 'FOUND'. IF IT DOESN'T 7=DL [ EXIST J. TO INSERT NEW ONE AND CREATE SKELETON 7=Y= [ DICTIONARY ENTRY. IF IT IS ALREADY MARKED FOUND 7?CW [ THER IS AN INCONSISTENCY - IF MAPPING A RESTORED 7?XG [ LIMB IT'S THE RESTORED ONE WHICH IS WRONG SO GET IT 7#C6 [ ERASEE, ELSE J. TO DO P. R. OF THIS USER 7#WQ [ 7*6J ... CALL 7 STEPAGAIN 7*BB LDX 5 EUSE1N(3) 7*W2 ADX 5 EUSE2N(3) 7B*L ADX 5 EUSE3N(3) [KEY FOR FUSER SEARCH 7BT= STO 3 ACOMMUNE1(2) 7C#W TRACEIF K6BMAPONE,99,299,5,FUSKEY 7D#6 CALL 7 SERCHFENTRY 7DRQ BRN NOTFOUND [EXIT FROM FUSER SEARCH IF NO ENTRY 7F?B NEWENT 7FR2 [ 7G=L [*************************************************** 7GQ= [ ENTRY LOCATED - NOW CHECK IF MARKED ALREADY 7H9W [ 7HPG LDCT 0 #400 7J96 ANDX 0 4(3) 7JNQ BZE 0 NFUSENT [ J. IF NOT MARKED 7K8B LDX 2 FX2 7KN2 [ 7L7L [********************************************************* 7LM= [ ENTRY MARKED ALREADY - IF MAPPING RESTORED LIMB GET 7M6W [ RESTORED USER ERASED ELSE INITIATE PART. RES. OF 7MLG [ CURRENT DIRECTORY. 7N66 [ 7NKQ JBS SETERASE,2,AW2PARTRES 7P5B BRN XFILEBENT [ REPEATED USERNAME - TREAT AS BENT 7PK2 SETERASE 7Q4L CALL 7 PUTINFLIST 7QJ= CALL 7 STEPAGAIN 7R3W BRN NOTPRUSFAIL [ J. TO GET IT ERASED 7RHG NFUSENT 7S36 [ 7SGQ [********************************************************* 7T2B [ NOT ALREADY MARKED - MARK IT 'FOUND' THEN CHECK IF 7TG2 [ USER IS 'FROZEN'. IF SO MARK FUSER ENTRY FOR 7T^L [ LATER CHECKING WITH DICTIONARY. 7WF= [ 7WYW LDCT 0 #400 7XDG ORS 0 4(3) [SET USER FOUND IN FUSER ENTRY 7XY6 HUNTMISB 2,FI,FUSER 7YCQ SBX 3 2 7YXB STO 3 6 [REL POS OF NAME IN FUSER FOR TAPES 7^C2 CALL 7 STEPAGAIN 7^WL JBC NOFROZUS,3,BNUSERFREZ [ J. IF NOT FROZENZ 82B= CALL 7 TOHUNTFUSER 82TW ADX 3 6 83*G LDCT 0 #100 [ ELSE MARK AS FROZEN 83T6 ORS 0 4(3) [ IN FUSER ENTRY 84#Q CALL 7 STEPAGAIN 84SB NOFROZUS 85#2 JBCC MAP,3,BNERASE [ CLEAR ERASE BIT IF SET 85RL CALL 7 STEPREWRITE [ 86?= MAP 86QW #UNS FPARTRES 87=G ( 87Q6 [ 889Q [*********************************************************** 88PB [ BEFORE MAPPING THE ENTRY WE MUST CHECK IF THE DIRECTORY 8992 [ IS TO BE RESTORED. IF IT IS IT WILL BE OMITTED 89NL [ FROM THIS SEARCH SO IT MUST NOT BE MAPPED. 8=8= [ 8=MW ... CALL 7 TOHUNTFREST 8?7G LDX 0 FRCNT(1) [ NO P. R.'S TO DO IF 8?M6 BZE 0 NOPART [ FRESTUSER EMPTY 8#6Q LDX 2 1 8#LB SBN 2 8 8*62 ADX 1 A1(1) 8*KL ADN 1 A1 8B5= [ 8BJW [*********************************************************** 8C4G [ SEE IF THIS USER IS IN FRESTUSER BLOCK. IF NOT IT'S NOT 8CJ6 [ BEING RESTORED. IF IT IS CHECK IF ENTRY IS FOR 8D3Q [ 'FILEBENT' TYPE CORRUPTION (FRFIL NOT ZERO - CONTAINS 8DHB [ REL. BLOCK NO. THOUGHT CORRUPT).IF SO MAP ENTRY AS 8F32 [ USUAL AND INCLUDE IN SEARCH TO GET SECOND ATTEMPT. 8FGL [ 8G2= NEXTUSER 8GFW ADN 2 8 8G^G BXGE 2 1,NOPART 8HF6 TESTNAMX 3,EUSE1N(3),FRUSE(2),NEXTUSER 8HYQ [ 8JDB [******************************************************** 8JY2 [ ENTRY FOUND - IF FULL ENTRY ALREADY (FRINC +VE.) JUST 8KCL [ OMIT FROM SEARCH. 8KX= [ 8LBW LDX 0 FRINC(2) 8LWG BPZ 0 PARTRESUSER 8MB6 [ 8MTQ [************************************************** 8N*B [ INCOMPLETE ENTRY - CHECK IF 'FILEBENT' 8NT2 [ 8P#L LDX 0 FRFIL(2) 8PS= BZE 0 NOTBENT 8Q?W ORX 0 GSIGN 8QRG STO 0 FRFIL(2) 8R?6 BRN NOPART [ J. IF FILEBENT 8RQQ NOTBENT 8S=B [ 8SQ2 [********************************************************* 8T9L [ INCOMPLETE ENTRY - NOT 'FILEBENT' TYPE. SET 'PARTRES' 8TP= [ AND 'TEMP' TO SHOW RESTORE INITIATED AND FILL IN 8W8W [ FRESTUSER ENTRY. IF USER NOT DUMPED JUMP TO 8WNG [ ABANDON THE RESTORE. 8X86 [ 8XMQ MBS 3,BNPARTRES,BNTEMP 8Y7B LDX 0 EINCN(3) 8YM2 STO 0 FRINC(2) [ INCR. NO. 8^6L BZE 0 USNODUMP [ J. IF NOT DUMPED 8^L= LDX 0 EFILNUMN(3) 925W STO 0 FRFIL(2) [ FILE NO. 92KG LDN 7 EUSE1N(3) [ USERNAME OF THIS 9356 JBC NOTSUDUSR,3,BNPSEUDO [ USER IF A PROPER USER 93JQ SMO FX2 [ ELSE 944B LDN 7 ASUPUSER [ SUPERIOR PROPER USERNAME 94J2 NOTSUDUSR 953L LDN 0 FRSUP(2) 95H= MOVE 7 3 962W CALL 7 STEPREWRITE 96GG [ 9726 [************************************************ 97FQ [ IF THE USER TO BE RESTORED IS :SYSTEM WE MUST STILL 97^B [ MAP INCINDEX AND SERIAL AS THEY ARE BEING RETAINED. 98F2 [ THIS IS DONE FROM THEIR FCB'S SINCE THEY ARE OPEN TO 98YL [ THIS ACTIVITY (MUST BE MASTER ACT. IF LOOKING AT ENTRY FOR 99D= [ :SYSTEM) AT DEPTHS -1 AND -3 RESPECTIVELY 99XW [ 9=CG LDX 1 FX1 9=X6 TESTNAMX 3,NSYS(1),EUSE1N(3),PARTRESUSER 9?BQ NGN 6 1 9?WB NEXTMAP 9#B2 SFCB 6,3 9#TL LDX 5 FBLMOD(3) [ 9**= SBN 5 FCBLEN-2 [ GET PSEUDO POINTERS TO FCB 9*SW LDX 4 5 [ SO IT LOOKS LIKE A 9B#G SBN 4 2 [ BLOCKS RECORD 9BS6 ADN 3 BSPRE-1 9C?Q CALL 7 MAPBLOCKS [ MAP BLOCKS 9CRB BRN XBR [ ALREADY CHECKED FOR UNAVAIL. RES. 9D?2 BRN MPT [ EMPTY - UNLIKELY ! 9DQL MPT 9F== ADN 6 1 9FPW BNZ 6 PARTRESUSER [ J. IF MAPPED BOTH 9G9G NGN 6 3 [ ELSE RESET DEPTH FOR NEXT 9GP6 BRN NEXTMAP [ AND MAP THAT 9H8Q USNODUMP 9HNB [ 9J82 [*************************************************** USNODUMP 9JML [ USER NOT DUMPED - ZERO ALREADY PUT IN FRINC TO 'DELETE' 9K7= [ ENTRY. NOW REDUCE USED SPACE COUNT BY 8. OUTPUT 9KLW [ 'ABANDONED' MESSAGE TO OPS. AND J. TO OMIT DIR. 9L6G [ FROM SEARCH 9LL6 [ 9M5Q ... CALL 7 TOHUNTFREST 9MKB LDN 0 8 9N52 SBS 0 FRCNT(1) 9NJL LDN 2 EUSE1N(3) 9P4= LDN 5 3 9PHW LDN 6 JPDUSERNAME 9Q3G CALL 7 OUTPACK [ USERNAME 9QH6 LDN 2 STRINGABAND(1) 9R2Q LDN 5 4 9RGB LDN 6 JPDVARCHAR 9S22 CALL 7 OUTPACK 9SFL LDN 2 STRNOTDUMP(1) 9S^= LDN 5 4 9TDW LDN 6 JPDVARCHAR 9TYG CALL 7 OUTPACK 9WD6 LDX 3 PRMESS(1) 9WXQ CALL 7 MONOUT 9XCB CALL 7 STEPAGAIN 9XX2 CALL 7 PUTINFLIST 9YBL BRN NOTPRUSFAIL [ J. TO GET IT ERASED 9YW= PARTRESUSER 9^*W [ 9^TG [************************************************* PARTRESUSER =2*6 [ USER BEING RESTORED - MAKE FLIST ENTRY SO BMAPTWO WILL =2SQ [ CHECK IF LIMB WAS JOINED UP O.K. THEN J. TO OMIT DIR. =3#B [ =3S2 CALL 7 STEPAGAIN =4?L BS 2,AW2DIRBELOW =4R= CALL 7 PUTINFLIST =5=W BRN SKIPALL =5QG NOPART =6=6 [ =6PQ [************************************************ NOPART =79B [ IF MAPPING RESTORED LIMB - SEND <USERNAME> RESTORED =7P2 [ MESSAGE TO JOURNAL. =88L [ =8N= LDX 2 FX2 =97W JBC NORESMESS,2,AW2PARTRES =9*4 ...#UNS AMTGR =9G= ... BWNZ GINCTSN,NORESMESS [ NO MESS. IF MULTI-TAPE G.R. =9MG LDN 2 EUSE1N(3) ==76 LDN 5 3 ==LQ LDN 6 JPDUSERNAME =?6B CALL 7 OUTPACK =?L2 LDX 3 RESMESS(1) =#5L MONOUTX 3 =#K= NORESMESS =*4W ) =*JG [ =B46 [*************************************************** =BHQ [ REMEMBER (IN AWORK2) THAT INFERIOR DIRECTORY FOUND =C3B [ =CH2 MBS 2,AW2DIRBELOW,AW2DIR [ DIRECTORY MARKER =D2L TRACEIF K6BMAPONE,99,299,AWORK2(2),MAPDIR =DG= MAPTERMINAL =D^W [ =FFG [************************************************** =F^6 [ NOW 'MAP' THE BLOCKS RECORD =GDQ [ =GYB QSTEPC ,XBACKREAD [ TO BLOCKS RECORD =HD2 BRN NOBACKREAD [ IF NO BACKREAD NECESSARY =HXL XBACKREAD [ ELSE =JC= DOWN BMCNTRL,2 [ TO READ NEXT BLOCK =JWW BRN MAPTERMINAL [ 'UP' IF O.K. =KBG BRN XRECHEAD [ 'UP+1' IF CORRUPT REC.HEADDR. =KW6 STOZ 3 [ 'UP+2' IF END OF FILE =L*Q BRN NOBACKREAD =LTB XRECHEAD =M*2 ACROSS BMAPONE,13 [ TO INITIATE PART. RES. =MSL NOBACKREAD =N#= BZE 3 XFILEBENT =NRW LDEX 5 FRH(3) =P?G CALL 7 MAPBLOCKS [ MAP BLOCKS =PR6 BRN NOLF [ UNAVAILABLE =PTP ... BRN XCHEKPRES [EMPTY DIRECTORY =PY# ... BRN SETFTAB [NORMAL CASE =Q2X ...[ =Q5G ...[******************************************************************** =Q85 ...[FOR EMPTY DIRECTORY WHICH IS PART OF PARTIALLY RESTORED LIMB FTAB =Q=N ...[ENTRY REQUIRED SO THAT BMAPONE WILL PROCESS THIS DIRECTORY AND SET =Q*? ...[UP FLIST ENTRY =QCW ...[ =QGF ...XCHEKPRES =QK4 ... JBS SETFTAB,2,AW2PARTRES =QMM ... BRN SKIP =QQB [ =R=2 [********************************************************: =RKP ...[ A NON-EMPTY DIRECTORY HAS JUST HAD ITS BLOCKS MAPPED =R^D ...[OR EMPTY DIRECTORY IS BEING PARTIALLY RESTORED. =S*7 ...[ WE NOW NEED TO MAKE A FTAB BLOCK ENTRY FOR =SNW [ IT TO ENSURE THAT A SLAVE IS SET UP TO 'MAP' IT. =T8G [ SET UP FTAB IF ONE DOES NOT ALREADY EXIST AT THIS =TN6 [ FILESTORE LEVEL. =W7Q [ =WCJ ...SETFTAB =WMB BACKSPACE [DIRECTORY TO NAME RECORD =X72 HUNTW 3,FILE,FTAB =XLL BNG 3 SETUPTABLK [ J. IF NONE PRESENT =Y6= LDX 0 A1+1(3) =YKW BXE 0 AMAPDEPTH(2),TABEXISTS [ J. IF RIGHT DEPTH ELSE =^5G SETUPTABLK =^K6 SETNCORE 20,3,FILE,FTAB [ SET ONE UP ?24Q LDN 0 0 ?2JB STO 0 A1(3) [INITIALISE USED DATA WORD ?342 LDX 0 AMAPDEPTH(2) ?3HL STO 0 A1+1(3) [DEPTH OF FTAB ?43= TABEXISTS ?4GW LDX 0 A1(3) [USED DATA ?52G LDX 7 ALOGLEN(3) ?5G6 SBN 7 5 ?5^Q BXL 0 7,NOFTABLEN [ J. IF LONG ENOUGH ?6FB ADN 7 17 ?6^2 ALTLENG 3,7,SUB1 [ ELSE LENGTHEN IT ?7DL NOFTABLEN ?7Y= CALL 7 STEPAGAIN ?8CW STOZ 2 [ X2 = 0 IF PROPER USER ?8XG JBC NOTSUD,3,BNPSEUDO ?9C6 NGN 2 1 [ X2 = -1 IF PSEUDO USER ?9WQ NOTSUD ?=BB LDN 7 EUSE1N(3) [ POINTER TO USERNAME ?=W2 MHUNTW 3,FILE,FTAB ??*L LDX 0 A1(3) ??T= LDN 5 6 ?##W ADS 5 A1(3) [UPDATE USED DATA FOR NEW ENTRY ?#SG ADX 3 0 ?*#6 ADN 3 A1+2 [X3 POSITION FOR NEW FTAB ENTRY ?*RQ TOPFCA 1 ?B?B LDX 0 FREADBLOCK(1) ?BR2 STO 0 0(3) [BLOCK POINTER INTO FTAB ?C=L LDX 0 FREADWORD(1) ?CQ= STO 0 1(3) [RECORD POINTER INTO FTAB ?D9W BPZ 2 PROPUS [ J. IF PROPER USER ?DPG LDX 2 FX2 [ ELSE ?F96 LDN 7 ASUPUSER(2) [ USE SUP. PROPER USER ?FNQ PROPUS ?G8B LDN 0 2(3) ?GN2 MOVE 7 3 [ INTO FTAB ?H7L STEP ?HM= BRN SKIPTRAPS [TO CHECK INDEX AND TRAPS RECORDS #B32 [ #BGL [****************************************************** SERDIR #C2= [ WE WANT TO GET DIRECTORY ERASED BY BMAPTWO #CFW [ #C^G SERDIR #DF6 BS 3,BNTEMP [SET TEMP BIT TO ENSURE BMAPTWO ERAS #DYQ CALL 7 STEPREWRITE #FDB BRN TEMPDIR #FY2 [ #GCL [******************************************************** NOTFOUND #GX= [ FUSER ENTRY NOT FOUND - WANT TO INSERT A NEW ONE #HBW [ AND CREATE A SKELETON DICTIONARY ENTRY FOR LATER #HWG [ INSERTION BY ADDICT. #JB6 [ FIRST LOCATE POSITION AT WHICH ENTRY IS TO BE INSERTED #JTQ [ #K*B NOTFOUND #KT2 #UNS FPARTRES #L#L ( #LS= CALL 7 STEPAGAIN #M?W LDX 4 EUSE1N(3) #MRG ADX 4 EUSE2N(3) #N?6 ADX 4 EUSE3N(3) [ REQUIRED KEY #NQQ CALL 7 TOHUNTFUSER #P=B LDN 1 A1-1(3) [ => START OF FUSER #PQ2 LDX 7 A1(3) #Q9L ADN 7 A1+1(3) [ => END OF FUSER #QP= NXTKEY #R8W ADN 1 5 [ => TO NEXT ENTRY #RNG BXGE 1 7,XATEND [ J. IF PAST END #S86 LDX 0 0(1) #SMQ BXL 0 4,NXTKEY [ J. IF KEY < REQUIRED #T7B XATEND #TM2 LDX 5 1 #W6L SBN 5 3 [ => TO POSITION FOR ENTRY #WBD ... SBX 5 3 #WL= WAITLEN #X5W LDX 2 BSACHAPTR #XKG POP WAITLEN,2,FTABWAIT [ LOCKOUT OTHER LENGTHENERS #Y56 CALL 7 TOHUNTFUSER #^4B LDX 7 ALOGLEN(3) #^J2 ADN 7 5 *23L ALTLENG 3,7,SFUSER [ LENGTHEN FUSER *2H= LDX 2 BSACHAPTR *32W VOP 2,FTABWAIT [ CLEAR LOCKOUT *3GG CALL 7 TOHUNTFUSER *426 LDX 6 A1(3) *4FQ ADN 6 A1+1(3) *4^B ADX 5 3 [ DATUMISE POINTER *5F2 BXE 5 6,NOWPUTUSIN [ J. IF INSERT IS AT END OF BLOCK *5YL [ *6D= [********************************************************** *6XW [ INSERT IS REQUIRED SOMEWHERE IN MIDDLE OF BLOCK. *7CG [ MOVE ALL ENTRIES OF KEY > OR = REQUIRED DOWN BLOCK *7X6 [ TO MAKE ROOM FOR ENTRY ( START WITH LAST ONE IN *8BQ [ BLOCK FIRST TO AVOID OVERWRITE !). *8WB [ *9B2 NEXTMOVE *9TL STO 6 7 *=*= SBN 6 5 *=SW MOVE 6 5 *?#G BXU 5 6,NEXTMOVE *?S6 NOWPUTUSIN *#?Q [ *#RB [***************************************************** **?2 [ THERE IS NOW ROOM FOR THE ENTRY TO BE INSERTED. **QL [ PUT IN KEY AND USERNAME AND MAKE BIT WORD ZERO. *B== [ *BPW LDX 1 5 *C9G STO 4 3(1) *CP6 STOZ 4(1) *D8Q SBX 5 3 *DNB CALL 7 STEPAGAIN *F82 LDN 6 EUSE1N(3) *FML CALL 7 TOHUNTFUSER *G7= ADX 5 3 *GLW LDX 1 5 *H6G LDN 7 0(1) *HL6 MOVE 6 3 *J5Q LDN 0 5 *JKB ADS 0 A1(3) [ UPDATE RECORD HEADER *K52 SBX 5 3 [ SAVE REL. PTR. TO NEW ENTRY IN X5 *KJL [ *L4= [******************************************************** *LHW [ FUSER ENTRY DONE - NOW SET UP FWB TO CONTAIN *M3G [ SKELETON DICTIONARY ENTRY LONG ENOUGH FOR PROPER USER WITH *MH6 [ SPACEMT BUDGET). *N2Q [ *NGB SETNCORE FLOG+4,3,FILE,FWB *P22 LDN 0 FLOG-1 *PFL STO 0 A1(3) *P^= STOZ A1+1(3) *QDW LDN 1 A1+1(3) *QYG LDN 2 A1+2(3) *RD6 SMO A1(3) *RXQ MOVE 1 510 [ ZEROISE BLOCK *SCB LDN 0 1 *SX2 STO 0 CNEWZ(3) [ DICT. REC. MARKER *TBL TOPFCB 1 *TW= LDN 6 FME1(1) *W*W LDN 7 CSUPUSER(3) *WTG MOVE 6 3 [ SUPERIOR USERNAME *X*6 CALL 7 STEPAGAIN *XSQ LDX 4 ECOPSN(3) [ RESET X4 FOR BMAPONE *Y#B SRL 4 15 [ NO LOMGER NECESSARY !!! *YS2 MHUNTW 2,FILE,FWB *^?L LDN 6 ELOC1N(3) *^R= LDN 7 CLOCN(2) B2=W MOVE 6 3 [ LOCAL NAME B2QG LDN 6 EUSE1N(3) B3=6 LDN 7 CUSER(2) B3PQ MOVE 6 3 [ USERNAME B49B JBC NOTSUDO,3,BNPSEUDO [ J. IF PROPER USER B4P2 LDX 0 GSIGN [ ELSE B58L ORS 0 CPSEU(2) [ SET PSEUDO BIT B5N= ALTLENGD 2,FPSEU [ AND SHORTEN FWB TO B67W MHUNTW 2,FILE,FWB [ LENGTH FOR B6MG LDN 0 FPSEU [ PSEUDO ENTRY B776 STO 0 A1(2) B7LQ NOTSUDO B86B CHAIN 2,BMISC+1 [ CHAIN IN MISC. CHAIN B8L2 [ B95L [******************************************************* B9K= [ FUSER SITUATION IS NOW SAME AS THOUGH ENTRY HAD B=4W [ ALREADY EXISTED SO J. BACK TO CARRY ON AND MARK B=JG [ ENTRY AS 'FOUND' ETC. B?46 [ B?HQ CALL 7 TOHUNTFUSER B#3B ADX 3 5 B#H2 BRN NEWENT B*2L ) B*G= TEMPDIR B*^W [ BBFG [********************************************************* TEMPDIR BB^6 [ DIRECTORY IS MARKED 'TEMPORARY'. CHECK IF IT NEEDS TO BE BCDQ [ ERASED. - IF SO SET 'ERASE' BIT TO GET IT ERASED BY BMAPTWO BCYB [ BDD2 LDX 1 BFILE BDXL [ BFC= [********************************************************** BFWW [ IF 'PARTRES' IS CLEAR, THIS IS A NORMAL TEMPORARY BGBG [ DIRECTORY SO IT NEEDS TO BE ERASED BGW6 [ BH*Q JBC NOTPRUSFAIL,3,BNPARTRES BHTB [ BJ*2 [******************************************************** BJSL [ 'PARTRES' AND 'TEMP' SET - IF FAILED IN LAST RESTORE BK#= [ AFTER FREEING BACKING STORE ( INDICATED BY BKRW [ 'BFPARTRES' SET IN :MASTER'S FCB) RESTORE HAS BEEN BL?G [ REINITIATED SO JUST SKIP ENTRY - DONT SET ERASE BIT. BLR6 [ BM=Q JBS SKIPALL,1,BFPARTRES BMQB [ BN=2 [******************************************************** BNPL [ 'BFPARTRES' CLEAR SO LAST RESTORE FAILED BEFORE THE BP9= [ BACKING STORE WAS FREED. - JUST CLEAR 'PARTRES' AND BPNW [ 'TEMP' AND J. TO TREAT AS NORMAL ENTRY. BQ8G [ BQN6 MBC 3,BNPARTRES,BNTEMP BR7Q CALL 7 STEPREWRITE BRMB BRN PRCLEAR BS72 NOTPRUSFAIL BSBS ... CALL 7 STEPAGAIN BSLL BS 3,BNERASE [SET ERASE BIT BT6= CALL 7 STEPREWRITE BW5G BRN SKIPALL [TO DEAL WITH INDEX,BLOCKS AND TRAPS CY?= [*********************************************** SKIP CYQW [ RECOVER X6 FROM ACOMMUNE3 - PUT THERE BY 'BLOCKMAP' C^=G [ MACRO - MAY NO LONGER BE NEEDED !! C^Q6 [ D29Q SKIP D2PB LDX 2 FX2 D392 LDX 6 ACOMMUNE3(2) D3NL SKIPTRAPS D48= [ D4MW [******************************************************** SKIPTRAPS D57G [ GO BACK (ACROSS) TO BMAPONE TO CHECK TRAPS AND D5M6 [ INDEX RECORDS ETC. (HAVING MAPPED BLOCKS REC.) D66Q [ D6LB ACROSS BMAPONE,4 D762 SKIPALL D7KL [ D85= [********************************************************** SKIPALL D8JW [ GO BACK (ACROSS) TO BMAPONE TO SKIP BLOCKS RECORD D94G [ AND CHECK TRAPS RECORDS ETC. D9J6 [ D=3Q ACROSS BMAPONE,5 D=HB SETSAVEBIT D?32 [ D?GL [******************************************************** SETSAVEBIT D#2= [ ENTRY TO SET 'DIRECTORY CONTAINS SAVING FILE' BIT D#FW [ IN FUSER ENTRY FOR CORRENT DIRECTORY. D#^G [ D*F6 NGS 2 AWORK1(2) [ SHOW 'SAVING FILE' ENTRY D*YQ BRN SAVENTRY DBDB [ DBY2 [******************************************************* UPJOBCT DCCL [ ENTRY TO SET 'DIRECTORY CONTAINS USER JOBLIST' BIT DCX= [ IN FUSER ENTRY FOR CURRENT DIRECTORY DDBW [ DDWG UPJOBCT DFB6 STOZ AWORK1(2) [ SHOW 'JOBLIST' ENTRY DFTQ SAVENTRY DG*B TOPFCB2 3 [ SET UP PSEUDO DGT2 LDN 3 ASUPUSER-EUSE1N(2) [ POINTERS TO FCB DH#L STO 3 ACOMMUNE1(2) [ SO IT LOOKS LIKE DHS= LDX 5 ASUPUSER(2) [ NAME RECORD DJ?W ADX 5 ASUPUSER+1(2) DJRG ADX 5 ASUPUSER+2(2) [ CALC. KEY OF REQUIRED ENTRY AND DKQQ CALL 7 SERCHFENTRY [ LOCATE IT IN FUSER BLOCK DL=B BRN XBR DLQ2 LDX 2 FX2 DM9L LDX 1 AWORK1(2) DMP= BZE 1 ZJOBBIT [ J. IF JOBLIST DN8W LDCT 0 #40 [ SET UP 'SAVING FILE' BIT DNNG BRN ZSAVEBIT DP86 ZJOBBIT DPMQ LDCT 0 #200 [ ELSE SET UP 'JOBLIST' BIT DQ7B ZSAVEBIT DQM2 ORS 0 4(3) [ PUT IT IN FUSER ENTRY DR6L UP DRL= [ DS5W [**************************************************** NOLF DSKG [ THIS SECTION OF CODE DEALS WITH ENTRANTS FOUND TO BE ON DT56 [ UNAVAILABLE RESIDENCES. DTJQ [ DW4B NOLF DWJ2 LDX 4 1(3) [RESIDENCE NUMBER DX3L BACKSPACE DXH= CALL 7 STEPAGAIN DY2W LDX 0 ECOPSN(3) DYGG SRL 0 15 D^26 BNZ 0 REQUESTRES [ J. IF NON-EMPTY D^FQ STEP D^^B BZE 3 XBR [ ELSE PUT ON RESIDENCE F2F2 LDN 0 3 [ 3 BY CHANGEING 'ERES' F2YL STO 0 1(3) [ IN BLOCKS RECORD F3D= CALL 7 STEPREWRITE F3XW BACKSPACE F4CG BRN SKIPALL F4X6 [ F5BQ [********************************************************* F5WB [ NON-EMPTY DIRECTORY ON UNAVAILABLE RESIDENCE F6B2 [ GO DOWN TO ASK FOR RESIDENCE TO BE LOADED AND F6TL [ GET RESTORE INITIATED IF UNAVAILABILITY F7*= [ CONFIRMED. COMES 'UP' IF RESTORE INITIATED F7SW [ COMES 'UP+1' IF ABANDONED - NOT DUMPED F8#G [ F8S6 REQUESTRES F9?Q DOWN BMQUEST,3 F9RB BRN SKIPALL F=?2 BRN NOTPRUSFAIL F=QL XFILEBENT F?== ACROSS BMAPONE,12 F#P6 XBR F#YY ... F*8Q GEOERR 1,BMAPDIR F*NB [ FB82 MENDAREA BMAPGAP,K99BMAPDIR FBML [ FC7= #END FCLW ^^^^ ...221701250006