{{htmlmetatags>metatag-description:(ICL George 3 and George 4 source: MTCHECK860)}} ====== MTCHECK860 ====== (George Source) **Macros used:** [[george:macro:BFCBX|BFCBX]], [[george:macro:BXGE|BXGE]], [[george:macro:BXL|BXL]], [[george:macro:BXU|BXU]], [[george:macro:CHAIN|CHAIN]], [[george:macro:CORRUPTB|CORRUPTB]], [[george:macro:FFCA|FFCA]], [[george:macro:FIND|FIND]], [[george:macro:GEOERR|GEOERR]], [[george:macro:KEEPREP|KEEPREP]], [[george:macro:MHUNTW|MHUNTW]], [[george:macro:MTCHECK|MTCHECK]], [[george:macro:MTREAD|MTREAD]], [[george:macro:PSTAC|PSTAC]], [[george:macro:PUTREP2|PUTREP2]], [[george:macro:SEG|SEG]], [[george:macro:SEGENTRY|SEGENTRY]], [[george:macro:SETREP2|SETREP2]], [[george:macro:UP|UP]], [[george:macro:UPPLUS|UPPLUS]], [[george:macro:WRONG|WRONG]] 22FL ... SEG MTCHECK,860,FILE,OLP 22^= ... SEGENTRY K1MTCHECK,MTCHECK [MTCHECK MACRO ENTRY WITH %D GIVEN 23DW ... SEGENTRY K11MTCHECK,MTCHECKNOD[MTCHECK MACRO WITHOUT %D 23YG ... SEGENTRY K2MTCHECK,MTREAD [ENTRY FROM MTOBJ WHEN READING 24D6 ... SEGENTRY K3MTCHECK,MTWRITE [ENTRY FROM MTOBJ WHEN WRITING 24XQ ... SEGENTRY K4MTCHECK,ZCONFURWB [ENTRY FROM EDOBJ FOR CONFURWB 25CB ...[ 25X2 ...[ MACRO MTCHECK CHECKS A GSBS-SIZED BLOCK PURPORTING TO CONTAIN FOUR 26BL ...[ CONSECUTIVE MT INDEX FILE BLOCKLETS. IT IS USED BY DUMPER,COPY, 26W= ...[ RETRIEVAL SYSTEM ETC. 27*W ...[ 27TG ...[ THE K2MTCHECK ENTRY IS USED TO CHECK AFTER A FILEREAD 28*6 ...[ 28SQ ...[ THE K3 & K4 ENTRY POINTS ARE USED TO CHECK BEFORE A FILEAUTW 29#B ...[ 29S2 ...[ 2=?L ...[ FOR FORMAT OF MT FILESTORE FILES SEE PRM 5.5.3.2 2=R= ...[ 2?=W ...[ THE BULK FILE ADDRESS IS CHECKED APPROXIMATELY IF THE NUMBER OF BULK 2?QG ...[ BLOCKS IS NOT KNOWN (E.G. *FH BLOCK WRITE). 2#=6 ...[ 2#PQ ...[ THERE IS ONLY A SIMPLE CHECK THAT HDDR IS THE FIRST RECORD IN THE FILE 2*9B ...[ IF PRESENT AND NO CHECK THAT QUAL FOLLOWS MARK. HOWEVER FAILURE OF 2*P2 ...[ THESE CONDITIONS WILL NOT BREAK MTOBJ OR MATALO. 2B8L ...[ 2BN= ...TEND 4HEND 2C7W ...TMARK 4HMARK 2CMG ...TQUAL 4HQUAL 2D76 ...THDDR 4HHDDR 2DLQ ...[ 2F6B ...[ 2FL2 ...MTREAD [DEPTH ZERO; CHECK FIRST BREA 2G5L ...[ 2GK= ... STOZ AWORK4(2) [ DEPTH 2H4W ... MHUNTW 3,BSTB,BREAD [X3->BLOCK TO BE CHECKED 2HJG ... LDCT 7 #200 [ZFILEREAD SWITCH 2J46 ... BRN ZMERGE 2JHQ ...[ 2K3B ...[ 2KH2 ...MTWRITE [DEPTH ZERO; BLOCK WAS NEXT TO ACTIVITY BEFORE DOWN 2L2L ...[ 2LG= ... STOZ AWORK4(2) [ DEPTH 2L^W ...[ 2MFG ...ZCONFURWB [DEPTH [AWORK4]; ELSE AS ABOVE 2M^6 ...[ 2NDQ ... LDX 3 FPTR(2) [X3->NEXT BLOCK 2NYB ... LDCT 0 BLINK/8 2PD2 ... ERX 0 ATYPE(3) 2PXL ... BNZ 0 NOBLINK [J IF BLINK NOT CREATED BY DOWN 2QC= ... LDX 3 FPTR(3) [X3->BLOCK NEXT TO BLINK 2QWW ...NOBLINK 2RBG ... LDCT 7 #400 [ZFILEWRIT SWITCH 2RW6 ... 2S*Q ...[ 2STB ...ZMERGE 32NW ... STO 7 AWORK1(2) [KEEP SWITCHES 32Q4 ... LDX 6 A1(3) [PICK UP CURRENT BULK FILE ADDRESS 32R= ... CHAIN 3,2 [CHAIN NEXT TO ACTIVITY 32SD ... LDX 3 AWORK4(2) [DEPTH FOR FFCA 32TL ... FFCA [X2->FCA 32WS ... PSTAC 2,2 [X2->FSTACK 32Y2 ... BFCBX 2,2 [X2->FCB 32^8 ... NGX 5 BULKMOD(2) 332B ... BPZ 5 WRONG [J IF BULKMOD NEGATIVE 333J ... ADX 5 FBLMOD(2) 334Q ... SBN 5 FBLKS-A1 [LEAVES NO. OF BULK BLOCKS 335Y ... LDX 2 FX2 3376 ... LDX 3 FPTR(2) [RECOVER BLOCK POINTER 338G ... STO 5 AWORK3(2) [FOR FINAL CHECK 33N6 ... LDX 1 FX1 347Q ... BRN SUPPLIED 34MB ...[ 3572 ...[ 35LL ...MTCHECK [MTCHECK MACRO ENTRY POINT 366= ...[ 36KW ... LDX 5 ACOMMUNE3(2) [NO. OF BULK BLOCKS IN FILE 375G ... STO 5 AWORK3(2) 37K6 ... BRN MTCHECKMERG 384Q ...[ 38JB ...MTCHECKNOD [MTCHECK MACRO ENTRY POINT IF %D NOT GIVEN 3942 ...[ 39HL ... LDN 5 FILESIZE-1 [USE MAXIMUM POSSIBLE 3=3= ... NGS 5 AWORK3(2) [I.E. NO FINAL CHECK 3=GW ...MTCHECKMERG 3?2G ... STOZ AWORK1(2) [SET ZERO FOR MTCHECK 3?G6 ... LDX 6 ACOMMUNE2(2) [CURRENT BULK FILE ADDRESS 3?^Q ... LDX 0 ACOMMUNE1(2) [ATYPE OF BLOCK TO BE CHECKED 3#FB ... FIND 3,0 [X3->BLOCK 3#^2 ...SUPPLIED 3*DL ... BNG 5 WRONG [J IF BULK SIZE NEGATIVE 3*Y= ... SLL 5 GSBSLOG [CONVERT BLOCKS TO WORDS 3BCW ... ADN 5 1 [ADJUST FOR TESTING EASE 3BXG ... LDX 7 ALOGLEN(3) 3CC6 ... SRL 7 GSBSLOG-BLS [CONVERT LENGTH TO BLOCKLETS 3CWQ ...NEXTBLKLET 3DBB ... NGN 4 1 [INITIALISE INDEX POINTER REL TO A1 3DW2 ... BRN MTBULKREC [1ST WORD OF BLOCKLET LOOKS LIKE 3F*L ...[ 2ND WORD OF DATA RECORD. 3FT= ...NEXTREC 3G#W ... SMO 4 3GSG ... LDX 0 A1(3) [NEXT RECORD HEADER 3H#6 ... BZE 0 NDBLKLET [J IF END OF BLOCKLET 3HRQ ... BNG 0 NOTBULK [J UNLESS BULK RECORD 3J?B ... ADS 0 6 [UPDATE BULK FILE ADDRESS 3JR2 ...MTBULKREC 3K=L ... SMO 4 3KQ= ... LDX 0 A1+1(3) [GET BULK FILE NEXT ADDRESS 3L9W ... BXU 0 6,WRONG [J IF BULK FILE ADDRESS INCORRECT 3LPG ... BXGE 0 5,WRONG [J IF BULK FILE ADDRESS OUT OF RANGE 3M96 ... ADN 4 AMTDATA [INCREMENT INDEX POINTER 3MNQ ...OVERBLKLET 3N8B ... BXL 4 BSBS4,NEXTREC [J UNLESS OVER END OF BLOCKLET 3NN2 ...WRONG 3NXS ... LDX 2 FX2 3P7L ... LDX 0 AWORK1(2) 3PM= ... BNG 0 ZGEOERR [J TO GEOERR IF FILEWRIT 3Q6W ... BZE 0 NOREPORT [J IF MTCHECK MACRO 3QLG ... CORRUPTB BACK1(3),BACK2(3) [REPORT ERROR & ABANDON FILE 3R66 ...NOREPORT 3RKQ ... SETREP2 CORRUPT 3S5B ... LDX 0 AWORK1(2) 3SK2 ... BNZ 0 UP [J UNLESS MTCHECK MACRO 3T4L ... UPPLUS 1 3TJ= ...[ 3W3W ...NOTBULK 3WHG ... BXU 0 TEND(1),NOTEND [J UNLESS END OF INDEX FOUND 3X36 ... KEEPREP 7,ENDFILE 3XGQ ... LDX 5 AWORK3(2) [SIZE OF BULK FILE IN BLKS 3Y2B ... BNG 5 RETURN [J IF NOT KNOWN 3YG2 ... ADN 6 GSBS-1 [ROUND UP 3Y^L ... SRL 6 GSBSLOG [CONVERT TO BLOCKS 3^F= ... BXU 5 6,WRONG [J IF INDEX DISAGREES 3^YW ... BRN RETURN 42DG ...[ 42Y6 ...NOTEND 43CQ ... BXU 0 TMARK(1),NOTMARK [J UNLESS TAPEMARK 43XB ... ADN 4 AMTMARK [INCREMENT INDEX POINTER 44C2 ... BRN OVERBLKLET 44WL ...[ 45B= ...NOTMARK 45TW ... BXU 0 TQUAL(1),NOTQUAL [J UNLESS QUALIFIER 46*G ...THEADER 46T6 ... SMO 4 47#Q ... BXU 0 A1+AMTQUAL-1(3),WRONG [J IF ENDS DON'T MATCH 47SB ... ADN 4 AMTQUAL [INCREMENT INDEX POINTER 48#2 ... BRN OVERBLKLET 48RL ...[ 49?= ...NOTQUAL 49QW ... BXU 0 THDDR(1),WRONG [J UNLESS HEADER 4==G ... BNZ 6 WRONG [J IF HDDR AFTER BULK DATA 4=Q6 ... BRN THEADER 4?9Q ...[ 4?PB ...NDBLKLET 4#92 ... SBN 4 GSBS4-1 4#NL ... ADX 4 A1+GSBS4-1(3) [LAST WORD OF BLOCKLET 4*8= ... BNZ 4 WRONG [J IF BACKWARD POINTER WRONG 4*MW ... ADN 3 GSBS4 [MOVE BLOCK POINTER TO NEXT BLOCKLET 4B7G ... BCT 7 NEXTBLKLET [START AGAIN IF ANY LEFT 4BM6 ... KEEPREP 7,OK 4C6Q ...RETURN 4CLB ... SETREP2 OK [REPLY (UNLESS MTCHECK) 4D62 ... LDX 0 AWORK1(2) 4DKL ... BNZ 0 UP [J TO OMIT REPLY UNLESS MTCHECK 4F5= ... STO 6 ACOMMUNE1(2) [SET UPDATED BULK FILE ADDRESS REPLY 4FJW ... PUTREP2 7 4G4G ... UPPLUS 1 4GJ6 ...UP UP 4H3Q ...[ 4HHB ...ZGEOERR 4J32 ... GEOERR 1,WRITE! [FORMAT ERROR IN MT FILE INDEX BLOCK 4JGL ...[ 4K2= ...#END ^^^^ ...523361560006