{{htmlmetatags>metatag-description:(ICL George 3 and George 4 source: FHDIRTWO864)}}
====== FHDIRTWO864 ======
(George Source)
**Macros used:** [[george:macro:ACROSS|ACROSS]], [[george:macro:BBUS|BBUS]], [[george:macro:BC|BC]], [[george:macro:BITDEFS|BITDEFS]], [[george:macro:BS|BS]], [[george:macro:BXU|BXU]], [[george:macro:FCBFIND|FCBFIND]], [[george:macro:FSHCODE|FSHCODE]], [[george:macro:FSHENTRY|FSHENTRY]], [[george:macro:FSHSKIP|FSHSKIP]], [[george:macro:JBC|JBC]], [[george:macro:JFNZ|JFNZ]], [[george:macro:JMBS|JMBS]], [[george:macro:MBC|MBC]], [[george:macro:MBS|MBS]], [[george:macro:MENDAREA|MENDAREA]], [[george:macro:MHUNTW|MHUNTW]], [[george:macro:NAME|NAME]], [[george:macro:SEG|SEG]], [[george:macro:SEGENTRY|SEGENTRY]], [[george:macro:STEPAGAIN|STEPAGAIN]], [[george:macro:TOPFCB|TOPFCB]], [[george:macro:TRANCHKN|TRANCHKN]], [[george:macro:TRANSBEG|TRANSBEG]], [[george:macro:TRANSFIN|TRANSFIN]]
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