{{htmlmetatags>metatag-description:(ICL George 3 and George 4 source: INCVFCHK850)}}
====== INCVFCHK850 ======
(George Source)
**Macros used:** [[george:macro:ALTLENG|ALTLENG]], [[george:macro:BACKSPACE|BACKSPACE]], [[george:macro:BBS|BBS]], [[george:macro:BC|BC]], [[george:macro:BITDEFS|BITDEFS]], [[george:macro:BS|BS]], [[george:macro:BWNZ|BWNZ]], [[george:macro:BWZ|BWZ]], [[george:macro:BXU|BXU]], [[george:macro:DOWN|DOWN]], [[george:macro:FINDFCB|FINDFCB]], [[george:macro:GEOERR|GEOERR]], [[george:macro:GETDIR|GETDIR]], [[george:macro:HUNTMISB|HUNTMISB]], [[george:macro:JBC|JBC]], [[george:macro:JBCS|JBCS]], [[george:macro:JBS|JBS]], [[george:macro:JBSS|JBSS]], [[george:macro:MENDAREA|MENDAREA]], [[george:macro:MFREEW|MFREEW]], [[george:macro:MHUNTW|MHUNTW]], [[george:macro:REWIND|REWIND]], [[george:macro:SEG|SEG]], [[george:macro:SEGENTRY|SEGENTRY]], [[george:macro:SETBIT|SETBIT]], [[george:macro:SETNCORE|SETNCORE]], [[george:macro:TESTREP|TESTREP]], [[george:macro:TESTREP2|TESTREP2]], [[george:macro:TOPFCA|TOPFCA]], [[george:macro:TOPFCB|TOPFCB]], [[george:macro:TRACEIF|TRACEIF]], [[george:macro:TRF|TRF]], [[george:macro:UP|UP]], [[george:macro:UPPLUS|UPPLUS]]
22FL ... SEG INCVFCHK,850,MIKE PUTNAM:BACK,INCDUMP
22^= #
23DW SEGENTRY K1INCVFCHK,X1
23YG SEGENTRY K2INCVFCHK,X2
24D6 SEGENTRY K3INCVFCHK,X3
24XQ SEGENTRY K4INCVFCHK,X4
252* ...#UNS FNSAD
254Y ...(
257H ... SEGENTRY K5INCVFCHK,X5
25=6 ... SEGENTRY K7INCVFCHK,X7
25#P ...)
25CB #
25X2 # THIS SEGMENT VALIDATES BLOCKS OF VITAL SYSTEM FILES AS THEY ARE
26BL # DUMPED.
26W= # ENTRY 1 IS CALLED WHEN SEGMENT INCMON REALISES IT HAS AN INDEXED
27*W # FILE ON ITS HANDS. THIS ENTRY SETS UP AND INITIALISES ANY BLOCKS
27TG # NEEDED.
28*6 # ENTRY 2 IS CALLED WHEN INCMON HAS FINISHED ITS INITIAL VALIDATION
28SQ # OF A BLOCK (RECORD HEADERS AND INDEXING). THIS BLOCK CAN BE
29#B # FOUND AS A FILE/FRB IN THE ACTIVITY CHAIN.
29S2 # ENTRY 3 IS CALLED WHEN THE FILE HAS BEEN FULLY DUMPED. IT CARRIES
2=?L # OUT ANY FINAL CHECKS NEEDED AND TIDIES UP.
2=R= # ENTRY 4 IS CALLED ON EOT/FAIL TO TIDY UP WITHOUT THE FINAL CHECKS.
2?=W #
2?QG # FOR ALL ENTRIES THE CHECKING REQUIRED IS DEFINED BY THE INDEX NUMBER
2#=6 # WHICH IS HELD IN AWORK3
2#PQ #
2*9B # USEFUL SUBROUTINES:-
2*P2 #
2*W8 ...#UNS FNSAD
2B3B ...MLANCOMP 4HC1 [ LANGUAGE OF DIRECTORY
2B8L XGEOERR [CALLED ON X0. GEOERRS
2BN= GEOERR BRIEFPM,DUD VSF
2C7W #
2CMG SWITCH [VALIDATES AWORK3 AND USES IT
2D76 [AS A SWITCH TO THE APPROPRIATE CODE
2DLQ [CALLED ON X0
2F6B LDX 7 AWORK3(2)
2F8^ ...#UNS FNSAD
2F?J ... BNZ 7 SW1 [ JUMP IF INDEXED
2FB7 ...#UNS FNSAD
2FDQ ...#SKI
2FH* ...(
2FL2 SBN 7 2
2G5L BPZ 7 SW1 [J IF NO > 1 (DIRS AND NONINDEXEDS
2GK= [NOT HANDLED BY INCVFCHK)
2GT4 ...)
2H4W SWGEO GEOERR BRIEFPM,INDEXNO
2H82 ...#UNS FNSAD
2H?6 ...SW1 SBN 7 8
2HB= ...#UNS FNSAD
2HFB ...#SKI
2HJG SW1 SBN 7 6
2J46 BPZ 7 SWGEO [J IF NO > 7
2JHQ ADX 0 AWORK3(2)
2JKF ...#UNS FNSAD
2JM8 ...(
2JNX ... SBN 0 1 [ EXIT 0 0 FOR INDEXNO 1
2JQL ... EXIT 0 0 [ EXIT 0 1 FOR INDEXNO 2 ETC
2JS* ...)
2JW4 ...#UNS FNSAD
2JXR ...#SKI
2J^G ...(
2K3B SBN 0 2 [EXIT 0 0 FOR INDEXNO 2
2KH2 EXIT 0 0 [EXIT 0 1 FOR INDEXNO 3 ETC
2KQS ...)
2L2L #
2LG= #
2L^W #
2MFG # ENTRY 1:-
2M^6 #
2NDQ X1 CALL 0 SWITCH [SWITCH TO APPROPRIATE CODE
2NKY ...#UNS FNSAD
2NR6 ... BRN MDIR1 [ DIRECTORY
2NYB BRN MDICT1 [DICTIONARY
2PD2 BRN MSER1 [SERIAL
2PXL BRN MINC1 [INCINDEX
2QC= BRN MOUT1 [OUTPUT
2QWW BRN MJOB1 [JOBLIST
2RBG BRN MUSERJ1 [USER JOBLISTS
2RW6 #
2S*Q #
2STB # ENTRY 2:- WE SET UP A POINTER TO EACH RECORD IN THE BLOCK IN TURN
2T*2 # AND SWITCH TO THE APPROPRIATE CODE.
2TSL #
2W#= X2
2WRW LDN 0 A1 [OFFSET DOWN BLOCK
2X?G STO 0 AWORK4(2)
2XR6 MHUNTW 3,FILE,FRB
2Y=Q ADN 3 A1 [POINTER TO CURRENT RECORD
2YQB X2REC
2^=2 LDX 0 0(3) [GET RECORD HEADER
2^PL BNG 0 X2ENDRECB [IF ITS A DUMMY REC IGNORE IT
329= BNZ 0 X2YREC [IF ITS END OF BLOCK GO UP
32#B ...#UNS FNSAD
32CG ... UPPLUS 1
32GL ...#UNS FNSAD
32KQ ...#STR
32NW UP
338G X2YREC
33N6 CALL 0 SWITCH [SWITCH TO APPROPRITE CODE
33T# ...#UNS FNSAD
342G ... BRN MDIR2 [ DIRECTORY
347Q BRN MDICT2 [DICTIONARY
34MB BRN MSER2 [SERIAL
3572 BRN MINC2 [INCINDEX
35LL BRN MOUT2 [OUTPUT
366= BRN MJOB2 [JOBLIST
36KW BRN MUSERJ2 [USER JOBLISTS
375G #
37K6 X2ENDREC [CONTROL RETURNS HERE WHEN THE
384Q [INDIVIDUAL PATHS HAVE FINISHED
38JB [WITH A RECORD
3942 LDX 2 FX2
39HL MHUNTW 3,FILE,FRB
3=3= ADX 3 AWORK4(2) [POINTER TO RECORD
3=GW X2ENDRECB
3?2G LDEX 0 0(3) [LENGTH OF REC
3?G6 ADS 0 AWORK4(2) [UPDATE OFFSET
3?^Q ADX 3 0 [AND REC POINTER
3#FB BRN X2REC
3#^2 #
3*DL #
3*Y= # ENTRY 3:-
3BCW #
3BXG X3 CALL 0 SWITCH [SWITCH TO APPROPRIATE CODE
3C4N ...#UNS FNSAD
3C9W ... BRN MDIR3 [ DIRECTORY
3CC6 BRN MDICT3 [DICTIONARY
3CWQ BRN MSER3 [SERIAL
3DBB BRN MINC3 [INCINDEX
3DW2 BRN MOUT3 [OUTPUT
3F*L BRN MJOB3 [JOBLIST
3FT= BRN MUSERJ3 [USER JOBLISTS
3G#W #
3GSG #
3H#6 # ENTRY 4:-
3HRQ #
3J?B X4 CALL 0 SWITCH [SWITCH TO APPROPRIATE CODE
3JDJ ...#UNS FNSAD
3JKQ ... BRN MDIR4 [ DIRECTORY
3JR2 BRN MDICT4 [DICTIONARY
3K=L BRN MSER4 [SERIAL
3KQ= BRN MINC4 [INCINDEX
3L9W BRN MOUT4 [OUTPUT
3LPG BRN MJOB4 [JOBLIST
3M96 BRN MUSERJ4 [USER JOBLISTS
3MNQ #
3N8B #
3NN2 # INCINDEX IS NOT YET INDEXED, OUTPUT IS EMPTIED AFTER A GENRES
3P7L # AND THERE IS NO CHECKING DONE ON JOBLISTS OF ANY SORT SO THE
3PM= # BRANCHES ASSOCIATED WITH THESE GO STRAIGHT UP.
3Q6W #
3Q=2 ...MSER1
3Q*6 ...MSER2
3QD= ...MSER3
3QHB ...MSER4
3QLG MINC1
3R66 MINC2
3RKQ MINC3
3S5B MINC4
3SK2 MOUT1
3T4L MOUT2
3TJ= MOUT3
3W3W MOUT4
3WHG MJOB1
3X36 MJOB2
3XGQ MJOB3
3Y2B MJOB4
3YG2 MUSERJ1
3Y^L MUSERJ2
3^F= MUSERJ3
3^YW MUSERJ4
4242 ...#UNS FNSAD
4276 ... UPPLUS 1
42== ...#UNS FNSAD
42*B ...#STR
42DG UP
42Y6 #
43CQ #
43XB #
44C2 # THE SERIAL + DICTIONARY CHECKS ARE AS FOLLOWS:-
44WL # 1) THE SPACEMT AND REALTIME BUDGETS MUST BE DEFINED IN THE LIST
45B= # RECORD AT THE START OF DICTIONARY.
45TW # 2) ALL USERS NOTED IN SERIAL AS OWNING TAPES MUST HAVE A SPACEMT
46*G # BUDGET RECORD THOUGH THIS ENTRY MAY BE ZERO.
46T6 # 3) EVERY USERNAME QUOTED AS BEING THE SUPERIOR OF ANOTHER USER
47#Q # MUST BE DEFINED IN ITS OWN DICTIONARY RECORD
47SB # 4)LOCAL NAMES IN DICTIONARY MUST HAVE BIT 0 OF THE 1ST WORD SET
48#2 # 5)THE CNEWZ WORD MUST BE SET CORRECTLY FOR EACH RECORD IN DICTIONARY
48RL #
49?= # THIS IS ACHIEVED AS FOLLOWS:-
49QW # 1)ON INITIAL ENTRY FOR SERIAL CHECKING A FILE/FINTER5 BLOCK IS
4==G # SET UP. THIS HOLDS DICTIONARY/SERIAL CROSSCHECKING DATA. THE FORMAT
4=Q6 # IS:-
4?9Q # NSWITCH = A1 SWITCH WORD
4?PB # B23=>DICTIONARY LIST RECORD HAS BEEN CHECKED
4#92 # NSPACEMT = A1+1 BIT PATTERN IDENTIFYING THE SPACEMT BUDGET RECOR
4#NL # PICKED UP FROM LIST RECORD WHEN WE PROCESS IT
4*8= # NUSER = A1+2 1ST OF A LIST OF 4WD ENTRIES
4*MW # WORD 0-2 USERNAME
4B7G # WORD 3 BIT WORD
4BM6 # B23=>REFERRED TO AS A SUP USER
4C6Q # B22=>DEFINED IN DICTIONARY
4CLB # B21=>HOLDS TAPES SO MUST HAVE
4D62 # SPACEMT RECORD
4DKL # THE END OF THESE ENTRIES IS DENOTED BY A ZERO WO
4F5= # AN ENTRY FOR :MASTER WITH B22 SET IS PRESET
4FJW # INTO THE BLOCK
4G4G #
4GJ6 # 2)AS EACH SERIAL AND DICTIONARY RECORD IS PROCESSED THE BLOCK IS
4H3Q # UPDATED AS NECESSARY
4HHB #
4J32 # 3)AFTER DICTIONARY IS COMPLETED EACH ENTRY IS CHECKED TO ENSURE
4JGL # THAT NONE ARE REFERRED TO BUT NOT DEFINED
4K2= #
4KFW # FINTER5 DEFINITIONS
4K^G #DEF NSWITCH=A1
4LF6 #DEF NSPACEMT=A1+1
4LYQ #DEF NUSER=A1+2
4MDB BITDEFS NSWITCH,23,NBLISTREC
4MY2 BITDEFS 3,21,NBTAPES,NBDEF,NBSUP
4NCL #
4NX= #
4PBW MASTENT
4PWG 12HMASTER [PRESET ENTRY FOR MASTER IN FINTER5
4QB6 2 [STATE WORD
4QTQ 0 [ZERO INDICATING EMPTY ENTRY
4R*B SPACEMT 8HSPACEMT
4RT2 REALTIME 8HREALTIME
4S#L #
4SS= SFINDFINT [S/R TO LOCATE FINTER5 FOR ALTLENG
4T?W MHUNTW 2,FILE,FINTER5
4TRG EXIT 1 0
4W?6 #
4WQQ MADDFINT [S/R TO ADD USERNAME IN X4-6 TO
4X=B [FINTER5 IF NECESSARY. CALLED ON X0
4XQ2 [WITH X2=FX2. USES AWORK1+X7.
4Y9L [ON EXIT X3->ENTRY,X1=FX1,X2=FX2
4YP= [MAY COORDINATE
4^8W SBX 0 FX1
4^NG STO 0 AWORK1(2) [RELATIVISE AND SAVE LINK
5286 MHUNTW 3,FILE,FINTER5
52MQ LDX 1 ALOGLEN(3)
537B SBN 1 NUSER-A1
53M2 SRL 1 2 [COUNT OF ENTRIES IN BLOCK
546L ADN 3 NUSER [X3->1ST ENTRY
54L= NXENT
555W LDX 0 0(3)
55KG BZE 0 NOTIN [FOUND AN UNUSED ENTRY - J TO
5656 TXU 4 0(3) [INSERT NEW ENTRY HERE
56JQ TXU 5 1(3)
574B TXU 6 2(3)
57J2 BCC YIN [J IF FOUND ENTRY
583L ADN 3 4 [INCREMENT POINTER
58H= BCT 1 NXENT [IF SPACE LEFT IN BLOCK CONTINUE SEAR
592W [OTHERWISE LENGTHEN BLOCK AND ADD
59GG [ENTRY
5=26 MHUNTW 2,FILE,FINTER5
5=FQ LDX 3 ALOGLEN(2)
5=^B ADN 3 100 [SPACE FOR 25 MORE USERS
5?F2 ALTLENG 2,3,SFINDFINT
5?YL MHUNTW 2,FILE,FINTER5
5#D= ADN 3 A1(2)
5#XW SBN 3 101
5*CG NOTIN
5*X6 STO 4 0(3) [STORE USERNAME
5BBQ STO 5 1(3)
5BWB STO 6 2(3)
5CB2 STOZ 3(3) [ZERO STATE WORD
5CTL STOZ 4(3) [SHOW NEXT ENTRY EMPTY
5D*= YIN
5DSW LDX 1 FX1
5F#G LDX 2 FX2
5FS6 LDX 0 AWORK1(2) [RESTORE AND RESET LINK
5G?Q ADX 0 FX1
5GRB EXIT 0 0
5H?2 #
5HQL #
5J== ...MDICT1 [STARTING SERIAL. SET UP AND
5JPW [INITIALISE BLOCK
5K9G SETNCORE NUSER-A1+101,3,FILE,FINTER5
5KP6 [ROOM FOR 25 ENTRIES + 1WD TO HOLD
5L8Q [ZERO
5LNB STOZ NSWITCH(3)
5M82 LDN 1 MASTENT(1)
5MML LDN 2 NUSER(3)
5N7= MOVE 1 5
5N=B ...#UNS FNSAD
5N*G ... UPPLUS 1
5NDL ...#UNS FNSAD
5NHQ ...#STR
5NLW UP
5P6G #
5PL6 #
62X2 MDICT2 [X3->DICTIONARY RECORD
63BL MHUNTW 1,FILE,FINTER5
63W= JBSS NOTLIST,1,NBLISTREC [J IF LISTREC PROCESSED ALREADY
64*W LDX 0 CNEWZ-A1(3) [VALIDATE CNEWZ FOR LISTREC
64TG SBN 0 1
65*6 BZE 0 NEWZOK1
65SQ CALL 0 XGEOERR
66#B NEWZOK1
66S2 LDX 4 IZCOUNT-A1(3) [COUNT OF PRIV+BUDG SUBRECORDS
67?L LDN 2 IZLIST-A1(3) [ADDR OF 1ST SUBREC
67R= LDX 1 FX1
68=W LDX 5 SPACEMT(1) [PICK UP SPACEMT NAME
68QG LDX 6 SPACEMT+1(1)
69=6 NXBUDG1
69PQ TXU 5 1(2) [IS THIS SUBREC SPACEMT
6=9B TXU 6 2(2)
6=P2 BCC SPACEFO [J IF SO
6?8L ADN 2 4 [OTHERWISE UPDATE POINTER
6?N= BCT 4 NXBUDG1 [AND LOOP IF THERE ARE MORE
6#7W CALL 0 XGEOERR [BREAK IF SPACEMT NOT DEFINED
6#MG SPACEFO
6*76 LDX 4 0(2)
6*LQ MHUNTW 1,FILE,FINTER5
6B6B STO 4 NSPACEMT(1) [REMEMBER BIT PATTERN FOR LATER USE
6BL2 LDX 4 IZCOUNT-A1(3) [COUNT OF BUDG/PRIV SUBRECORDS
6C5L LDN 2 IZLIST-A1(3) [X2->1ST SUBREC
6CK= LDX 1 FX1
6D4W LDX 5 REALTIME(1) [GET REALTIME
6DJG LDX 6 REALTIME+1(1)
6F46 NXBUDG2
6FHQ TXU 5 1(2) [IS THIS SUBREC IT
6G3B TXU 6 2(2)
6GH2 BCC X2ENDREC [J IF SO
6H2L ADN 2 4 [OTHERWISE UPDATE SUBRECPOINTER
6HG= BCT 4 NXBUDG2 [AND LOOP IF MORE SUBRECS
6H^W CALL 0 XGEOERR [REALTIME NOT DEFINED - BREAK
6JFG #
6J^6 NOTLIST [NOT THE LIST RECORD
6KDQ LDX 0 CUSER-A1(3)
6KYB BNG 0 NUPDATE [J IF NOT AN UPAATE RECORD
6LD2 LDX 0 CNEWZ-A1(3)
6LXL SBN 0 2 [VALIDATE CNEWZ FOR UPDATE REC
6MC= BZE 0 X2ENDREC
6MWW CALL 0 XGEOERR
6NBG #
6NW6 NUPDATE [NEITHER LIST NOR UPDATE=> USER REC
6P*Q LDX 0 CNEWZ-A1(3) [VALIDATE CNEWZ FOR USER REC
6PTB SBN 0 1
6Q*2 BZE 0 NEWZOK2
6QSL CALL 0 XGEOERR
6R#= NEWZOK2
6RRW LDX 0 CLOCN-A1(3)
6S?G BNG 0 YLOCNAME [J IF NAMEREC APPARENTLY OK
6SR6 [NOT A VERY GOOD TEST
6T=Q CALL 0 XGEOERR
6TQB YLOCNAME
6W=2 LDX 4 CSUPUSER-A1(3) [PICK UP USERNAME OF SUP
6WPL LDX 5 CSUPUSER-A1+1(3)
6X9= LDX 6 CSUPUSER-A1+2(3)
6XNW CALL 0 MADDFINT [INSERT ENTRY IF NEC
6Y8G BS 3,NBSUP [SET BIT TO SHOW REFERRED TO
6YN6 MHUNTW 3,FILE,FRB
6^7Q ADX 3 AWORK4(2) [X3->REC
6^MB LDX 4 CUSER-A1(3) [PICK UP USERNAME
7272 LDX 5 CUSER-A1+1(3)
72LL LDX 6 CUSER-A1+2(3)
736= CALL 0 MADDFINT [LOCATE OR SET UP ENTRY
73KW JBCS USEDEF,3,NBDEF [CHECK NOT ALREADY DEFINED
745G CALL 0 XGEOERR
74K6 USEDEF
754Q MHUNTW 1,FILE,FRB
75JB ADX 1 AWORK4(2) [X1->REC
7642 TXU 4 CSUPUSER-A1(1) [CHECK USER NOT HIS OWN SUP
76HL TXU 5 CSUPUSER-A1+1(1)
773= TXU 6 CSUPUSER-A1+2(1)
77GW ... BCS X2ENDREC
782G CALL 0 XGEOERR [USER=SUPERIOR
7CSG #
7D#6 #
7DRQ MDICT3 [END OF DICTIONARY
7F?B MHUNTW 3,FILE,FINTER5
7FR2 LDN 3 NUSER(3) [X3->1ST ENTRY
7G=L MD3LOOP
7GQ= LDX 4 0(3) [EXIT IF FINISHED
7H9W BZE 4 MDICT4
7HPG LDX 5 1(3) [PICK UP USERNAME TO IDENTIFY IT IF B
7J96 LDX 6 2(3)
7JNQ JBC NOTSUP,3,NBSUP [J IF NOT REFERRED TO AS A SUP
7K8B JBS NOTSUP,3,NBDEF [OR IF ACTUALLY DEFINED
7KN2 CALL 0 XGEOERR [OTHERWISE BREAK
7L7L NOTSUP
7LM= ADN 3 4 [INCREMENT POINTER
7M6W BRN MD3LOOP
7MLG #
7N66 #
7P5B MDICT4
7PK2 MFREEW FILE,FINTER5
7PN6 ...#UNS FNSAD
7PR= ... UPPLUS 1
7PWB ...#UNS FNSAD
7P^G ...#STR
7Q4L UP
7Q4N ...#UNS FNSAD
7Q4Q ...(
7Q4S ...MDIR1 [ START OF DIRECTORY
7Q4W ... MHUNTW 1,FI,INDEXCHK
7Q4Y ... LDN 0 NAME2A [ SET LINK
7Q52 ... STO 0 INDEXLINK(1) [ IN BLOCK
7Q54 ... STOZ INDEXECOPS(1) [ ZEROIZE REST OF BLOCK
7Q56 ... STOZ INDEXNUM(1) [
7Q58 ... STOZ INDEXTRAPS(1) [
7Q5= ... UPPLUS 1
7Q5# ...#
7Q5B ...#
7Q5D ...MDIR2 [ BLOCK OF DIRECTORY
7Q5G ... MHUNTW 2,FI,INDEXCHK
7Q5J ... LDX 0 INDEXLINK(2) [ PICK UP LINK FROM PREVIOUS
7Q5L ... ADX 0 FX1 [ RELATIVISE LINK
7Q5N ... EXIT 0 0 [ BLOCK AND EXIT
7Q5Q ... [ X3 IS POINTING TO RECORD
7Q5S ...#
7Q5W ...#
7Q5Y ...MDIR3 [END OF DIRECTORY
7Q62 ... MHUNTW 2,FI,INDEXCHK
7Q64 ... LDX 0 INDEXLINK(2) [ POINTER FROM LAST BLOCK
7Q66 ... LDN 3 0 [ SHOW END OF DIRECTORY
7Q68 ... ADX 0 FX1
7Q6= ... EXIT 0 0 [ FINISH CHECKING
7Q6# ...#
7Q6B ...#
7Q6D ...XENDIR
7Q6G ...MDIR4 [ EOT OR TAPE FAIL
7Q6J ... UPPLUS 1
7Q6L ...#
7Q6N ...NEXTDIREC [ GETS POINTER TO NEXT RECORD OF DIRE
7Q6Q ... SBX 0 FX1
7Q6S ... STO 0 INDEXLINK(2) [ PRESERVE LINK
7Q6W ... BRN X2ENDREC [ GET RECORD
7Q6Y ...NAME2
7Q72 ... CALL 0 NEXTDIREC [ X3-> NEXT RECORD
7Q74 ...NAME2A
7Q76 ... BZE 3 XENDIR [ END OF FILE
7Q78 ...#
7Q7= ...# THE FOLLOWING CHECKS MUST BE IDENTICAL WITH THOSE IN B/MAP
7Q7# ...# BEFORE CHANGING ANY OF IT, CONSULT OWNER OF SEG BMAPONE
7Q7B ...#
7Q7D ... LDEX 0 FRH(3)
7Q7G ... SBN 0 41
7Q7J ... BNZ 0 XCORRUPT
7Q7L ... BWNZ ERESN(3),XCORRUPT
7Q7N ...XRET
7Q7Q ... LDN 1 0
7Q7S ... JBC NINDEX2,3,BNINDEX [J IF NOT INDEXED
7Q7W ... LDX 1 EINDEXN(3) [GET INDEX NO
7Q7Y ...NINDEX2
7Q82 ... STO 1 INDEXNUM(2) [STORE EITHER 0 OR INDEX NO
7Q84 ... [FOR LATER CHECKS AND FILE DUMPIMG
7Q86 ... LDX 0 ECOPSN(3)
7Q88 ... STO 0 INDEXECOPS(2) [STORE FOR LATER CHECKS
7Q8= ... JBC NWK,3,BNWORK [J IF NOT A WKFILE
7Q8# ... SETBIT 11,INDEXECOPS(2) [SO LATER CODE KNOWS ITS A WF
7Q8B ...NWK
7Q8D ... LDX 0 ENUSEN(3)
7Q8G ... STO 0 INDEXTRAPS(2) [SIM. FOR TRAPS COUNT
7Q8J ... LDEX 0 ECOPSN(3)
7Q8L ... SBN 0 2
7Q8N ... BPZ 0 XBENTA [J IF MORE THAN 1 BLOCKS REC
7Q8Q ...XRETA
7Q8S ... JBC NCAREFUL,3,BNCARE [J IF NOT CAREFUL
7Q8W ... LDX 0 EAUTOCOUNTN(3)
7Q8Y ... ORX 0 ESAVECOUNTN(3)
7Q92 ... BNZ 0 XBENTB [J IF FROZEN- CAN'T FREEZE
7Q94 ... [CAREFUL FILES
7Q96 ...NCAREFUL
7Q98 ... JBS TAPE,3,BNLIB [J IF A TAPE
7Q9= ... BWNZ ESERN(3),XCORRUPT [J IF NONZERO TSN
7Q9# ... LDX 0 ELOC1N(3)
7Q9B ... BPZ 0 XCORRUPT [J IF 1ST CHAR LESS THEN #40
7Q9D ... LDX 0 EREELN(3)
7Q9G ... SBN 0 1
7Q9J ... BNZ 0 XCORRUPT [J IF REEL NO NOT 1
7Q9L ... JBS NODUMP2,3,BNTEMP [J IF NOT PERMANENT
7Q9N ... BWZ EUSE1N(3),NODUMP2 [J IF TERMINAL FILE
7Q9Q ... BWNZ INDEXECOPS(2),ONLDIR [J IF BLOCKS REC PRESENT
7Q9S ... JBC XCORRUPT,3,BNERASE [J IF A DIR OFFLINE AND NOT
7Q9W ... [TO-BE-ERASED
7Q9Y ...ONLDIR
7Q=2 ... LDX 1 FX1
7Q=4 ... LDX 0 ELANN(3)
7Q=6 ... BXU 0 MLANCOMP(1),XCORRUPT [J IF LANG NOT C1 FOR DIR
7Q=8 ... LDX 0 EGENN(3)
7Q== ... SBN 0 1
7Q=# ... BNZ 0 XCORRUPT [J IF GEN NOT 1 FOR DIR
7Q=* ...#
7Q=B ...# CHECK THAT BFDIRBELOW IS SET OTHER WISE LIMB MAY BE LOST
7Q=C ...# IF A RESTORE IS DONE
7Q=D ... TOPFCB 1
7Q=F ... JBC XCORRUPT,1,BFDIRBELOW
7Q=G ... LDX 1 FX1
7Q=H ...#
7Q=J ...NODUMP2 [SKIP TO NEXT NAME REC
7Q=K ... LDEX 4 INDEXECOPS(2)
7Q=L ... BZE 4 NOTBLOCK [J IF NOT EXPECTING A BLOCKS REC
7Q=M ... CALL 0 NEXTDIREC [ X3-> BLOCKS RECORD
7Q=N ... BZE 3 XCORRUPT [J IF ENEXPCTED EOF
7Q=P ... BBS 11,INDEXECOPS(2),WK [SKIP NEXT TEST FOR WFS TILL
7Q=Q ... [B7641 IS CURED
7Q=S ... LDEX 0 FRH(3)
7Q=W ... SBN 0 2 [X0=NO OF BLOCKS IN REC
7Q=Y ... LDX 4 INDEXECOPS(2)
7Q?2 ... SRL 4 15 [ X4=NO OF BLOCKS EXPECTED
7Q?4 ... BXU 0 4,XBENTC [J IF DIFFERENT
7Q?6 ...WK
7Q?8 ... LDX 0 1(3) [X0=RESIDENCE NO
7Q?= ... SBN 0 3
7Q?# ... BNG 0 XBENTC [J IF OUT OF RANGE
7Q?B ... SBN 0 64-3
7Q?D ... BPZ 0 XBENTC [J IF OUT OF RANGE
7Q?G ...NOTBLOCK
7Q?J ... LDX 0 INDEXNUM(2)
7Q?L ... BZE 0 NOTINDEX [J IF INDEX REC NOT EXPECTED
7Q?N ... CALL 0 NEXTDIREC [ X3-> INDEX RECORD
7Q?Q ... BZE 3 XCORRUPT [J IF UNEXPECTED EOF
7Q?S ... LDEX 0 FRH(3)
7Q?W ... SBN 0 3 [X0=NO OF BLOCKS INDEXED
7Q?Y ... LDX 4 INDEXECOPS(2)
7Q#2 ... SRL 4 15 [X4= NO OF BLOCKS EXPECTED
7Q#4 ... BXU 0 4,XBENTD [J IF DIFFERENT
7Q#6 ... LDCT 0 #200
7Q#8 ... ERX 0 INDEXID-A1(3)
7Q#= ... BNZ 0 XBENTD [J IF NOT INDEX REC
7Q## ...NOTINDEX
7Q#B ... LDX 4 INDEXTRAPS(2) [GET NO OF TRAPS EXPECTED
7Q#D ... BZE 4 NAME2 [J IF NONE
7Q#G ...NXTRAP
7Q#J ... STO 4 INDEXTRAPS(2) [ SAVE NO OF TRAPS RECORDS
7Q#L ... CALL 0 NEXTDIREC [ X3-> TRAPS RECORD
7Q#N ... BZE 3 XCORRUPT [J IF UNEXPECTED EOF
7Q#Q ... LDX 4 INDEXTRAPS(2) [ RESTORE NO OF TRAPS RECORDS LEF
7Q#S ... LDEX 0 FRH(3)
7Q#W ... SBN 0 5 [J IF REC HEADER NOT 5
7Q#Y ... BNZ 0 XCORRUPT
7Q*2 ... LDX 0 ETRUSER1-A1(3)
7Q*4 ... BPZ 0 XCORRUPT [J IF 1ST CHAR OF USERNAME<#40
7Q*6 ... BCT 4 NXTRAP [J TO DEAL WITH NEXT TRAP IF ANY
7Q*8 ... BRN NAME2
7Q*= ...TAPE
7Q*# ... NGX 0 ESERN(3)
7Q*B ... BPZ 0 XCORRUPT [TSN MUST BE +VE
7Q*D ... BRN NODUMP2
7Q*G ...# CHECK FAILURES BRANCHING TO XCORRUPT CAUSE IMMEDIATE GEOERR
7Q*J ...# THIS IS BECAUSE THE DUMP WOULD ITSELF BE CORRUPT ENOUGH TO BREAK
7Q*L ...# BACKMAP. THOSE BRANCHING TO A 'XBENT' LABEL SET A BIT WHICH CAUSES A
7Q*N ...# GEOERR AFTER THE DUMP IS COMPLETE. THESE ERRORS WILL BE CORRECTED BY
7Q*Q ...# GEN RES
7Q*S ...XBENT
7Q*W ... BS ,BDOGENRES [ST CORRUPTION BIT IN INCWORD
7Q*Y ... BRN XRET [J BACK INTO MAINSTREAM CODE
7QB2 ...XBENTA
7QB4 ... BS ,BDOGENRES
7QB6 ... LDN 0 1
7QB8 ... DEX 0 INDEXECOPS(2) [ASSUME HAS 1 BLOCKS REC
7QB= ... BRN XRETA
7QB# ...XBENTB
7QBB ... BS ,BDOGENRES
7QBD ... BRN NCAREFUL
7QBG ...XBENTC
7QBJ ... BS ,BDOGENRES
7QBL ... BRN NOTBLOCK
7QBN ...XBENTD
7QBQ ... BS ,BDOGENRES
7QBS ... BRN NOTINDEX
7QBW ...XCORRUPT
7QBX ...# SET POINTERS AS IF REGULAR STEPS HAVE BEEN TAKEN
7QBY ...#
7QB^ ... TOPFCA 2
7QC2 ... SMO FX2
7QC3 ... LDX 0 AWORK4
7QC4 ... STO 0 FREADWORD(2)
7QC8 ... DOWN INCEOT,4 [OUTPUT WARNING MESSAGE
7QC= ... UP [ PRETEND EOT OCCURRED TO
7QC# ... [GIVE OPS A CHANCE
7QCB ...#
7QCD ...# END OF BACKMAP CHECKS CODE
7QCG ...#
7QCJ ...#
7QCL ...#
7QCN ...)
7QJ= #
7R3W #
7R46 ...#UNS FNSAD
7R4B ...(
7R4L ...# COMES DOWN HERE FROM INCWRITE WHEN UPDATING DIRENT
7R4W ...# FOR A DIRECTORY
7R56 ...X5
7R5B ... HUNTMISB 1,FI,FDUMPCOM [
7R5L ... JBC SETBITS,1,BFDUMPCOM [
7R5W ... MHUNTW 2,FILE,FINC [
7R66 ... JBS SETBITS,2,BINCMDUMP [
7R6B ...# BFDUMPCOM SET , BINCMDUMP CLEAR - DONT CHANGE THE BITS
7R6L ... UP
7R6W ...# OTHERWISE SET BITS IF BFDUMPCOM SET,CLEAR THEM IF BFDUMPCOM CLEAR
7R76 ...SETBITS
7R7B ... LDX 7 1 [ STORE POINTER TO FDUMPCOM
7R7L ... MHUNTW 3,FILE,FWB [ RENAMED DIR ENT
7R7W ... LDN 2 0 [ POINTER IN FABSNB
7R86 ... FINDFCB 2,6,NORC [ SEARCH FOR FCB IN CHAINS
7R8B ... LDX 1 7 [ POINTER TO FDUMPCOM
7R8L ...
7R8W ... TESTREP NOTFOUND,XNOTFOUND [ JUMP IF FCB NOT THERE
7R96 ... LDX 2 6 [ POINTER TO FCB
7R9B ... TRF 1,BFDUMPCOM,2,BFDUMP [ MOVE BIT FROM FDUMPCOM TO FCB
7R9L ...XNOTFOUND
7R9W ... TRF 1,BFDUMPCOM,3,BEDUMP [SET,CLEAR BIT IN DIR ENT
7R=6 ... UP
7R=B ...#
7R=L ...# COMES DOWN HERE FROM INCWRITE WHEN ONLY A JOBLIST(****)
7R=W ...# IS TO BE DUMPED IN THIS DIRECTORY
7R?6 ...XJOBLIST
7R?B ... 12HJOBLIST
7R?L ... 1
7R?W ... 1
7R#6 ... 4H****
7R#B ...X7
7R#L ... MHUNTW 3,FILE,FLOCNB [ MOVE 'JOBLIST'
7R#W ...
7R*6 ... LDN 1 XJOBLIST(1) [ INTO FLOCNB
7R*B ... LDN 2 A1(3)
7R*L ... MOVE 1 6
7R*W ... GETDIR 1 [POSITION AT JOBLIST DIRENT
7RB6 ... TRACEIF K6INCVFCHK,99,299,FUSER1(2),JOBLISTG
7RBB ... TESTREP2 OK,ZFOUNDJOBL
7RBL ... REWIND [ CANT FIND JOBLIST
7RBW ... MHUNTW 1,FILE,FINC [ BETTER SEARCH WHOLE DIRECTORY
7RC6 ... BC 1,BINCGETDIR [ CLEAR JOBLIST BIT
7RCB ... TRACEIF K6INCVFCHK,99,299,FUSER1(2),JLISTMIS
7RCL ... TRACEIF K6INCVFCHK,99,299,ACOMMUNE9(2),JLISTREP
7RCW ... UP
7RD6 ...ZFOUNDJOBL
7RDB ... BACKSPACE [ ABOUT TO READ NAME REC
7RDL ... MFREEW FILE,ENT [ FREE ENT SET UP BY GETDIR NOT NE
7RDW ... MHUNTW 1,FILE,FINC [ SET BIT TO DHOW SUCCESS IN GETDIR
7RF6 ... BS 1,BINCGETDIR
7RFB ... UP [OK FOUND JOBLIST
7RFL ...)
7RFW ...
7RHG MENDAREA 20,K99INCVFCHK
7S36 #
7SGQ #END
^^^^ ...174253040021