MTCHECK860

(George Source)

Macros used: BFCBX, BXGE, BXL, BXU, CHAIN, CORRUPTB, FFCA, FIND, GEOERR, KEEPREP, MHUNTW, MTCHECK, MTREAD, PSTAC, PUTREP2, SEG, SEGENTRY, SETREP2, UP, UPPLUS, WRONG

MTCHECK860.txt
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