22FL SEG FHDIRTWO,860,FILESTORE 22^= # 23DW # THIS SEGMENT IS AN OVERFLOW FROM FHOBJDIR. IT CONTAINS THE MODE 23YG # #33 NAME RECORD ALTERATION CHECKS - A PIECE OF CODE WHICH WAS EASY 24D6 # TO TRANSFER WHEN THE OVERFLOW BECAME APPARENT. 24XQ # 25CB # IT IS ENTERED ACROSS FROM FHOBJDIR AND RETURNS ACROSS BY K2(NORMAL) 25X2 # K3(ILLEGAL) OR K4(REJECTION). 26BL # 26W= SEGENTRY K1FHDIRTWO,MAINENTRY 2764 ... FSHENTRY K2FHDIRTWO,XAFCBFIND,,XAFCBFIND 27*W # 27TG # 28*6 # AWORK AND ACC CONVENTIONS ARE AS FOR FHOBJ. 28SQ # 29#B # BIT IDENTIFIERS:- 29S2 BITDEFS AWORK4,23,MFHEOFMULT [WE'VE RUN OFF THE END OF A 2=?L [MULTIFILE. NO FURTHER PERIS 2=R= [CAN BE IMPLEMENTED. 2?=W BITDEFS AWORK4,22,MFHDIRMOD [THIS IS A DIRECTORY MODE WE'RE 2?QG [IMPLEMENTING 2#=6 BITDEFS AWORK4,21,MFHRECEOF [LAST READ PERI LEFT US 2#PQ [AFTER EOF. 2*9B BITDEFS AWORK4,20,MFHBLOCKEOF [SIMILAR BIT FOR BLOCK PERIS. 2*P2 [HAS TO BE HANDLED SEPARATELY 2B8L [OWING TO DIFFERENT POINTER 2BN= [CONVENTIONS. 2C7W BITDEFS AWORK4,19,MFHNOT1ST [THIS IS NOT THE 1ST PERI. 2CMG BITDEFS AWORK4,18,MFHDIROWN [USER OWNS THE FILES IN 2D76 [THIS DIRECTORY 2DLQ BITDEFS AWORK4,17,MFHNONSER [THIS IS A DA,DR, OR MT FILE 2F6B BITDEFS AWORK4,16,MFHCHUCKOFF [WE ARE THROWING THIS FILE 2FL2 [OFFLINE (SET DURING MODE #33). 2G5L BITDEFS AWORK4,15,MFHTRAPSALT [WE ARE ALTERING THIS FILE'S 2GK= [TRAPS (SET DURING MODE #33). 2H4W BITDEFS AWORK4,14,MFHTABSSET [THE TAB SYSTEM HAS BEEN 2HJG [INITIALISED. 2J46 # 2JHQ # 2K3B # THE FOLLOWING TABLE IS USED IN THE IMPLEMENTATION OF THE NAME REC 2KH2 # ALTERATION CHECKS IN MODE #33. EACH CHARACTER CORRESPONDS TO ONE WORD 2L2L # OF THE NAME RECORD AND CONTROLS UNDER WHAT CONDITIONS ALTERATION 2LG= # OF THAT WORD IS PERMITTED. 2L^W # THE BITS IN EACH CHARACTER HAVE THE FOLLOWING SIGNIFICANCE:- 2MFG # BIT 0 SET=> NO CHANGE PERMITTED (ILLEGAL). 2M^6 # BIT 1 SET=> IGNORE ATTEMPTED CHANGES (TRANSFER VALUE FROM OLD REC). 2NDQ # BIT 3 SET=> OWNERSHIP OF ENTRY NEEDED. 2NYB # BIT 4 SET=> FILE MUST NOT BE A SYSTEM FILE. 2PD2 # BIT 5 SET=> FILE MUST NOT BE IN USE. 2PXL # 2QC= # ALL BITS CLEAR DOES NOT NECESSARILY MEAN NO CHECKS ARE APPLIED SINCE 2QWW # THERE IS ALSO SOME CODE TO CHECK SPECIFIC BITS AND FIELDS. 2RBG # 2RW6 TABLEALT 2S*Q #40404040 [EREC,ERES,ESER,ELOC1 2STB #40404040 [ELOC2,ELOC3,EREEL,EGEN 2T*2 #00040400 [ERET,EWRITDAY,EWRITTIME,EGMTLA 2TSL #00400700 [ENUSE,ELAN,ETM,EBLL 2W#= #00000400 [EINF1-3,EU 2WRW #04040605 [EFLOW,EORG,EINDEX,EENDBUCK 2X?G #05052000 [EVERSION,EFILNUM,ESVCT,ESPARE3 2XR6 #00040400 [EALLOC,EDLA,ETLA,EAVACC 2Y=Q #04040005 [EDLD,ETLD,EINCLOOK,EINC 2YQB #20004040 [EAUTOCOUNT,ECOPS,EUSE1,EUSE2 2^=2 #40000000 [EUSE3 2^PL # 329= # SOME BIT MASKS 32NW # 338G ...MEINF1SAME #21357177 [BITS TO BE UNCHANGED IN EINF1 33N6 MEINF2SAME #37501242 [DITTO EINF2 347Q MEINF1REJ5 #06000200 [BITS IN EINF1 CAUSING REJECTION 5 34MB [IF CHANGED 3572 MEINF2REJ5 #02000000 [DITTO EINF2 35LL MASKECOPS #77700001 [PERMITTED BITS IN ECOPS 366= # 36KW # 375G # ******************************************************************* 37K6 # 384Q # WE HAVE ENTERED ACROSS FROM FHOBJDIR WITH THE DIRECTORY POSITIONED 38JB # HAVING JUST READ THE NAME RECORD. FIRST WE REFIND THE NAME RECORD. 3942 # 39HL MAINENTRY 3=3= STEPAGAIN 3=GW # 3?2G # NOW WE CARRY OUT THE NAME RECORD ALTERATION CHECKS. THE FIRST PHASE 3?G6 # CONSISTS OF A WORD BY WORD COMPARISION OF OLD AND NEW. IF A WORD 3?^Q # DIFFERS WE PICK UP THE CORRESPONDING CHARACTER FROM THE TABLE 3#FB # 'TABLEALT' (SEE START OF SEGMENT). THIS CHARACTER TELLS US UNDER 3#^2 # WHAT CONDITIONS THE CHANGE CAN BE ALLOWED. WE ACCUMULATE IN X5 A MASK 3*DL # OF THE 'OR'ED CONTROL CHARACTERS TO INDICATE WHAT TESTS WILL BE 3*Y= # REQUIRED. 3BCW # 3BXG LDN 5 0 [CLEAR TEST MASK 3CC6 STO 3 ACOMMUNE3(2) [KEEP PTR TO OLD REC. 3CWQ MHUNTW 2,FILE,FRB 3DBB ADN 2 A1 [X2->NEW RECORD 3DW2 SMO FX2 3F*L STO 2 ACOMMUNE2 [KEEP PTR TO NEW REC AS WELL 3FT= LDN 7 41 [NO OF WORDS TO COMPARE 3G#W MOREWORDS 3GSG LDX 0 FRH(2) 3H#6 ERX 0 FRH(3) [X0=DIFFERING BITS IN OLD +NEW 3HRQ BZE 0 NOCHANGE [J IF NONE 3J?B LDCH 4 TABLEALT(1) [PICK UP CHANGE CONTROL CHARACTER 3JR2 SRC 4 6 3K=L BNG 4 NILDATA [J IF CHANGE TOTALLY ILLEGAL 3KQ= SLC 4 1 [LOOK AT BIT 1 3L9W BPZ 4 NOTIGNORE 3LPG ERS 0 FRH(2) [IF IT'S SET WE FLIP THOSE NEW BITS 3M96 [THAT DIFFER AS WE IGNORE CHANGES TO 3MNQ [THIS WORD. 3N8B BRN NOCHANGE 3NN2 NOTIGNORE 3P7L SLC 4 5 [OTHERWISE WE OR THE REST OF THE CHAR 3PM= ORX 5 4 [INTO OUR ACCUMULATED TEST REQD MASK 3Q6W NOCHANGE 3QLG BCHX 1 £ [ADVANCE CHAR PTR 3R66 ADN 2 1 [AND RECORD PTRS 3RKQ ADN 3 1 3S5B BCT 7 MOREWORDS [AND LOOP IF MORE TO COMPARE 3SK2 LDX 1 FX1 3T4L LDX 2 FX2 3TJ= # 3W3W # THE INDIVIDUAL BITS CHECKS NOW FOLLOW. FIRST WE LOOK AT EINF1+2. 3WHG # ANY ATTEMPT TO CHANGE THE MULTIFILE,EXOFILE,AND LIB BITS CAUSES A 3X36 # REJECT(5). ALSO THERE ARE A LOT OF BITS TO BE COPIED UNCHANGED FROM 3XGQ # OLD TO NEW. 3Y2B # 3YG2 LDX 3 ACOMMUNE3(2) [GET PTRS TO OLD AND NEW RECS 3Y^L LDX 2 ACOMMUNE2(2) 3^F= 3^YW LDX 4 EINF1N(2) 42DG ERX 4 EINF1N(3) [MASK OF CHANGED BITS IN EINF1 42Y6 LDX 0 MEINF1SAME(1) [MASK OF BITS TO BE COPIED 43CQ ANDX 0 4 [WORK OUT WHICH ARE DIFFERENT 43XB ERS 0 EINF1N(2) [AND FLIP THEM IN THE NEW RECORD 44C2 LDX 0 MEINF1REJ5(1) [MASK OF BITS NOT TO BE CHANGED 44WL ANDX 0 4 [HAS THE USER TRIED IT 45B= BNZ 0 REJECT5 [IF SO DO A REJECT 5 45TW 46*G LDX 4 EINF2N(2) [REPEAT CHECKS ON EINF2. NOT CODED 46T6 ERX 4 EINF2N(3) [AS A LOOP COS IT DOESNT SAVE 47#Q LDX 0 MEINF2SAME(1) [INSTRUCTIONS 47SB ANDX 0 4 48#2 ERS 0 EINF2N(2) 48RL LDX 0 MEINF2REJ5(1) 49?= ANDX 0 4 49QW BNZ 0 REJECT5 4==G # 4=Q6 # IF BIT BNDUMP IS GOING TO BE SET AFTER THIS PERI WE SET THE BITS 4?9Q # IN THE FCB WHICH FORCE DUMPER TO LOOK AT THIS DIRECTORY. 4?BY ...# WE CAN ONLY ALLOW THE BIT TO BE CLEARED IF THE USER OWNS 4?J6 ...# THE FILE AND IT IS NOT A SYSTEM FILE. 4?PB # 4#92 JBC NDUMPSET,2,BNDUMP 4#NL TOPFCB 1 4*8= MBS 1,BFDUMP,BFDIRUPDATE 4*MW LDX 1 FX1 4*XN ... BRN YDUMPSET 4B7G NDUMPSET 4B=L ... JBC YDUMPSET,3,BNDUMP[J UNLESS ACTUALLY CLEARING BIT 4B*Q ... ORN 5 6 [NOTE OWNERSHIP AND SYSFILE CHECK 4BDW ... [NEEDED 4BJ2 ...YDUMPSET 4BM6 # 4C6Q # IF THE USER IS CLEARING BIT 23 OF ECOPS WE SET A FEW BITS IN X5 TO 4CLB # INDICATE THAT THE 'SYSTEM FILE','NOT IN USE' AND POSSIBLY 'OWNERSHIP' 4D62 # CHECKS ARE REQUIRED. WE THEN SET THE SWITCH 'MFHCHUCKOFF' TO TELL 4DKL # IMPLEMENTATION CODE TO THROW THE FILE OFFLINE.IF THE BIT IS NOT 4F5= # BEING CLEARED WE COPY THE OLD BIT INTO THE NEW ECOPS TO HEAD OFF 4FJW # ANY MISGUIDED ATTEMPT TO SET THE BIT, AND CLEAR THE 'MFHCHUCKOFF' 4G4G # SWITCH. 4GJ6 # IF THE FILE IS NOT GOING TO END OFFLINE WE DO NOT PERMIT ANY 4H3Q # CHANGES IN THE FILE SIZE IN BITS 0-8 OF ECOPS AS THIS HAS TO TALLY 4HHB # EXACTLY WITH THE SIZE OF THE BLOCKS RECORD. OTHERWISE A GENERAL OR 4J32 # PARTIAL RESTORE WILL RESULT. 4JGL # FIRST HOWEVER WE ENSURE THAT NO ILLEGAL BITS HAVE BEEN SET IN ECOPS. 4K2= # 4KFW LDX 0 MASKECOPS(1) [MASK OF PERMITTED ECOPS BITS. 4K^G ANDS 0 ECOPSN(2) [CLEAR ANY OTHERS IN NEW REC 4LF6 LDEX 0 ECOPSN(2) [PICK UP B23 OF ECOPS IN NEW REC 4LYQ BNZ 0 NOTHROW [J IF SET 4MDB LDEX 0 ECOPSN(3) [PICK UP BIT FROM OLD ECOPS 4MY2 BZE 0 NOTHROW [J UNLESS ATTEMPTING TO THROW FILE OF 4NCL ORN 5 3 [SYSFILE AND NOT IN USE CHECKS NEEDED 4NX= BS FX2,MFHCHUCKOFF [SET CHUCK OFF SWITCH 4PBW JBC NOTHROWDUMP,3,BNDUMP[IF FILE TO BE DUMPED OWNERSHIP NEEDE 4PWG ORN 5 4 4QB6 BRN NOTHROWDUMP 4QTQ NOTHROW 4R*B LDEX 0 ECOPSN(3) [COPY ACROSS OLD ECOPS B23 4RT2 DEX 0 ECOPSN(2) [TO MAKE SURE USER DOESNT SET BIT 4S#L BC FX2,MFHCHUCKOFF [ENSURE SWITCH CLEAR 4SS= NOTHROWDUMP 4T?W BBUS 23,ECOPSN(2),NOTONLINE [J IF FILE WILL BE OFFLINE 4TRG LDCT 0 #777 4W?6 ORS 0 ECOPSN(2) 4WQQ ERS 0 ECOPSN(2) [MASK OUT NEW SIZE 4X=B ANDX 0 ECOPSN(3) 4XQ2 ORS 0 ECOPSN(2) [REPLACE BY OLD 4Y9L NOTONLINE 4YP= # 4^8W # IF THE FILE IS CAREFUL AND RANDOM IT MUST BE :SYSTEM.IDF. WE ENSURE 4^NG # THAT THE ORGANISATION STAYS RANDOM IN THIS CASE AS IDF IS AN 5286 # AMORPHOUS RANDOM FILE, AND OUR CODE WHICH MAKES TYPE MODE AND 52MQ # ORGANISATION BITS COMPATIBLE WOULD OTHERWISE MAKE IDF SERIAL. 537B # 53M2 JMBS NOTIDF,3,BNSERIAL,BNMT [J IF NOT RANDOM 546L JBC NOTIDF,3,BNCARE [J IF NOT CAREFUL 54L= MBC 2,BNSERIAL,BNMT [ENSURE STILL RANDOM 555W NOTIDF 556* ...# 556S ...# UNLESS A RESTORE TIME MACRO HAS BEEN INCLUDED THE FOLLOWING CHECKS 557? ...# ARE APPLIED:- 557Q ...# 1 THE USER MAY NOT ALTER INCNO OR FILE NUMBER FOR A FILE UNLESS 5589 ...# THE ALIEN FILESTORE FIELD WILL BE SET AFTER THIS PERI. 558N ...# 2 THE USER MAY NOT CLEAR THE ALIEN FILESTORE FIELD ONCE IT 5597 ...# IS SET FOR A FILESTORE FILE. 559L ...# IF EITHER OF THESE CHECKS FAILS WE DO A REJECT 7. 55=5 ...# THE NET EFFECT OF THE CHECKS IS TO PREVENT THE INTRODUCTION INTO 55=J ...# THE HOST FILESTORE OF BOGUS HOST FILESTORE INCREMENT NUMBERS. 55?3 ...# THE RESTORE TIME MACRO IS NECESSARY SINCE UNDER CERTAIN EXCEPTIONAL 55?G ...# AND CONTROLLED CONDITIONS USERS MAY HAVE A VALID REASON 55?^ ...# FOR MUCKING ABOUT WITH HOST FILESTORE INCREMENT NUMBERS,THOUGH 55#D ...# THEY DO THIS AT THEIR OWN RISK. 55#X ...# 55*B ... SEGENTRY K98FHDIRTWO [LABEL FOR RESTORE TIME MACRO TO MEND 55*T ... NULL 55B# ... JMBS OKINCCHECK,2,BNLIB,BNEXO 55BR ... JFNZ OKINCCHECK,2,FNFSNO [NO CHECK IF ALIEN FSNO SET. 55C= ... LDX 0 EINCN(2) [NEW INCREMENT NUMBER. 55CP ... BXU 0 EINCN(3),REJECT7 [IT MUST BE UNCHANGED. 55D8 ... LDX 0 EFILNUMN(2) 55DM ... BXU 0 EFILNUMN(3),REJECT7 [DITTO FILE NUMBER 55F6 ...OKINCCHECK 55FK ... SEGENTRY K97FHDIRTWO [ANOTHER RESTORE TIME MACRO LABEL 55G4 ...# 55GH ...# WE ALWAYS CHECK FOR NEGATIVE INCREMENT NUMBERS SINCE THEY WOULD 55H2 ...# FORCE A GENERAL RESTORE. 55HF ...# 55HY ... LDX 0 EINCN(2) 55JC ... BNG 0 REJECT7 55KG # 5656 # HAVING ASSEMBLED A LIST OF TESTS WE APPLY THEM 56JQ # 574B SRC 5 1 57J2 BPZ 5 NOINUSECHK [J UNLESS IN USE CHECK NEEDED 583L SBN 2 A1 [X2->BLOCK HOLDING NEW NAME REC 58H= NAME 2,FILE,ENT [CALL IT AN ENT FOR FINDFCB 58JM ... FSHCODE B,XFSHBFIND 58L4 ...( 58MF ...# FCBFIND MACRO MUST BE OBEYED ON MACHINE A 58NW ... TRANSBEG FSHFCBFIND,FHDIRTWO,2,FILE,ENT,ACOMMUNE2 58Q? ... BRN OKNOTINUSE ['OK' RETURN 58RN ... BRN REJECT ['ERROR' RETURN 58T5 ...XFSHBFIND 58WG ...) 58XX ...XAFCBFIND 58^# ... FSHSKIP B 592W FCBFIND 2,OKNOTINUSE [JUMP IF NO FCB FOR FILE 59GG BRN REJECT2 [REJECT PERI IF FCB FOUND 5=26 OKNOTINUSE 5=3T ... FSHCODE A,XFSHAFIND 5=5J ...( 5=7? ... TRANCHKN FSHFCBFIND,EQUAL,XFSHAFIND,XFSHAFIND [J IF NOT TRANSBEG'D 5=92 ... LDN 4 0 [OFFSET FOR LABEL 'OKNOTINUSE' 5==P ...XTRANSFIN 5=#D ... TRANSFIN 4 [RETURN TO MACHINE B 5=B7 ...XFSHAFIND 5=CW ...) 5=FQ MHUNTW 2,FILE,ENT 5=^B NAME 2,FILE,FRB [NAME BLOCK BACK 5?F2 NOINUSECHK 5?YL LDX 1 FX1 [RESTORE CORRUPTED PTRS 5#D= LDX 2 FX2 5#XW SRC 5 1 5*CG BPZ 5 NOSYSFILE [J UNLESS SYS FILE CHECK NEEDED 5*X6 JMBS REJECT3,3,BNCARE,BNINDEX,BNCOOR,BNREVERE[ERROR IF FILE 5BBQ [HAS ANY SYS FILE CHARACTERISTICS 5BWB NOSYSFILE 5CB2 SRC 5 1 5CTL BPZ 5 NOWNCHK [J IF NO OWNERSHIP CHECK NEEDED 5D*= JBC REJECT1,2,MFHDIROWN [J IF USER DONT OWN ENTRANT 5DSW NOWNCHK 5F#G ACROSS FHOBJDIR,2 [CHECKS OK - RETURN TO MAIN CODE 5FS6 # 5G?Q # ******************************************************************* 5GRB # 5H?2 # ERROR LINKS BACK TO THE MAIN SEGMENT. 5HQL # 5J== NILDATA 5JPW ACROSS FHOBJDIR,3 5K9G # 5KP6 REJECT1 5L8Q LDN 7 1 5LNB BRN REJECT 5M82 REJECT2 5MML LDN 7 2 5MP* ... FSHCODE A,XFSHAREJECT 5MR4 ...( 5MSR ... TRANCHKN FSHFCBFIND,EQUAL,REJECT,REJECT [J IF JUST TRANSBEG'D TO 5MWG ... LDN 4 1 [OFFSET FOR LABEL 'REJECT' 5MY9 ... BRN XTRANSFIN [RETURN TO MACHINE B 5M^Y ...) 5N3M ...XFSHAREJECT 5N5B ... FSHSKIP A 5N7= BRN REJECT 5NLW REJECT3 5P6G LDN 7 3 5PL6 BRN REJECT 5Q5Q REJECT5 5QKB LDN 7 5 5QP? ... BRN REJECT 5QT8 ...REJECT7 5Q^5 ... LDN 7 7 5R52 REJECT 5RJL ACROSS FHOBJDIR,4 5S4= # 5SHW MENDAREA 30,K99FHDIRTWO 5T3G # 5TH6 #END ^^^^ ...722075650002