.TITLE FNDFIL FINDS THE FILE ASSOCIATED WITH A VBN .SBTTL SUBROUTINE DESCRIPTION ; ; THIS PROGRAM IS USEFUL WHEN TRYING TO LOCATE A TROUBLE SPOT ; ON THE DISK ; THE ERROR LOGGER OFTEN GIVES VBN'S THAT CAUSED AN ERROR ; THIS UTILITY CAN BE USED TO FIND WHAT FILE THE LBN IS IN ; .PAGE .SBTTL MACRO DEFINITIONS .MCALL FHDOF$,EXIT$S .MCALL QIOW$S,DIR$,ALUN$S FHDOF$ DEF$L ; DEFINE FILE HEADER OFFSETS LOCALLY .PAGE .SBTTL DATA DEFINITIONS .SBTTL D LOCAL DATA SECTIONS .NLIST BEX .PSECT FDATA,RW,D,REL,LCL ERRMSG: .ASCII /FATAL ERROR CONVERTING INPUT LBN #/ LBNBUF: .BLKB 10 ERRLEN=.-ERRMSG LBNPRM: .ASCII <12><15><15>/DECIMAL LOGICAL BLOCK # TO SEARCH FOR:/ LBLEN=.-LBNPRM DEVPRM: .ASCII <12><15><15>/DEVICE AND UNIT TO SEARCH ON:/ DEVLEN=.-DEVPRM FINMSG: .ASCII <12><15>/SEARCH OF ALL FILE HEADERS COMPLETED ON / DEVSTR: .BLKB 4 ; USER INPUT FOR DEVICE AND UNIT TO SEARCH FINLEN=.-FINMSG .EVEN OUTPRM: GHSPC: .BLKW 1 ; NUMBER OF FILL SPACES GHLEN: .BLKW 1 ; LENGTH OF STRING GHADR: .WORD GHSTR ; ADDRESS OF GOOD HEADER BUFFER GHSTR: .BLKB 6 BHSPC: .BLKW 1 ; NUMBER OF FILL SPACES BHLEN: .BLKW 1 ; LENGTH OF STRING BHADR: .WORD BHSTR ; ADDRESS OF BAD HEADER BUFFER BHSTR: .BLKB 6 BMSPC: .BLKW 1 ; NUMBER OF FILL SPACES BMLEN: .BLKW 1 ; LENGTH OF STRING BMADR: .WORD BMSTR ; ADDRESS OF YET TO BE ALLOCATED BUFF BMSTR: .BLKB 6 FMSPC: .BLKW 1 ; NUMBER OF FILL SPACES FMLEN: .BLKW 1 ; LENGTH OF STRING FMADR: .WORD FMSTR ; ADDRESS OF FILE MAX BUFFER FMSTR: .BLKB 6 FMTBUF: .ASCIZ /%D/ HDRSUM: .BLKB 500. HDRSP1: .ASCII /%N FILE HEADER SUMMARY %2N/ .ASCIZ / SCANNED IN USE FILE HEADERS : %VS%VA%N/ HDRSP2: .ASCIZ / SCANNED FREE FILE HEADERS : %VS%VA%N/ HDRSP3: .ASCIZ / FILE HEADERS YET TO BE ALLOCATED : %VS%VA%N/ HDRSP4: .ASCII / ------------------------------------------%N/ .ASCIZ / MAX FILE HEADERS FROM HOME BLOCK : %VS%VA/ .EVEN IOSB: .BLKW 2 IOSTS: .BLKW 2 OCTLBN: HILBN: .BLKW 1 LOLBN: .BLKW 1 PRMBLK: .BLKW 4 ; FORTRAN PARAMETER BLOCK FOR CALL .PAGE .SBTTL D GLOBAL DATA SECTIONS .PSECT HDRCNT,RW,D,GBL,REL,OVR GHDRS: .BLKW 1 ; NUMBER OF GOOD HEADERS BHDRS: .BLKW 1 ; NUMBER OF BAD HEADERS BMSIZ: .BLKW 1 ; FORMERLY BMSIZ USE FOR EDMSG BLK ; FILE HEADERS NO ALLOCATED FMAX: .BLKW 1 ; MAXIMUM FILES FROM HOME BLOCK MSGLEN: .BLKW 1 ; MSGLEN FOR SUMMARY OUTPUT ; .PAGE .SBTTL MAIN LINE CODE .SBTTL I PROMPT FOR USER INPUT .PSECT FNDFIL,I,REL FNDFIL:: QIOW$S #IO.WVB,#5,#1,,#IOSB,,<#DEVPRM,#DEVLEN,#44> QIOW$S #IO.RVB,#5,#1,,#IOSB,,<#DEVSTR,#4> ; GET DEVICE & UNIT QIOW$S #IO.WVB,#5,#1,,#IOSB,,<#LBNPRM,#LBLEN,#44> QIOW$S #IO.RVB,#5,#1,,#IOSB,,<#LBNBUF,#10.> ; GET LBN .SBTTL I CONVERT USER LBN TO INTERNAL FORMAT MOV #OCTLBN,R3 ; OUTPUT ADDRESS FOR DD2CT MOV IOSB+2,R4 ; CHARACTER COUNT MOV #LBNBUF,R5 ; ADDRESS OF INPUT STRING CALL .DD2CT BCC 10$ ; IF CLEAR SUCCESSFUL CONVERSION .SBTTL I - EXIT IF ERROR CONVERTING QIOW$S #IO.WVB,#5,#1,,#IOSB,,<#ERRMSG,#ERRLEN,#40> ; OUTPUT ERRMSG EXIT$S ; AND EXIT 10$: .SBTTL I CALL SCNIDX FOR MAIN PROCESSING MOV #PRMBLK,R5 ; PICK UP ADDRESS OF PARM BLOCK MOV #HILBN,2(R5) ; STORE LBN MOV #LOLBN,4(R5) ; TO SEARCH FOR (24 BITS) MOV #DEVSTR,6(R5) ; MOVE ADDRESS OF DEVNAME TO PARM BLOCK CALL SCNIDX .PAGE .SBTTL I COMPUTE SUMMARY TOTALS QIOW$S #IO.WVB,#5,#1,,#IOSB,,<#FINMSG,#FINLEN,#40> MOV FMAX,R0 ; CALCULATE THE FILE SUB BHDRS,R0 ; HEADERS NOT YET ALLOCATED SUB GHDRS,R0 ; NOT ALLOCATED = MAXHDRS - BHDRS - GHDRS MOV R0,BMSIZ ; STORE IT FOR $EDMSG .SBTTL I FORMAT SUMMARY TOTALS MOV #GHSTR,R0 ; ADDR OF OUTPUT BUFF MOV #FMTBUF,R1 ; ADDR OF FORMAT BUFF MOV #GHDRS,R2 ; ADDRESS OF INPUT DATA CALL $EDMSG MOV R1,GHLEN ; STORE CHARACTERS CONVERTED MOV #6,R0 ; CALCULATE FILL CHARS SUB R1,R0 ; MOV R0,GHSPC ; MOV #BHSTR,R0 ; ADDR OF OUTPUT BUFF MOV #FMTBUF,R1 ; ADDR OF FORMAT BUFF MOV #BHDRS,R2 ; ADDRESS OF INPUT DATA CALL $EDMSG MOV R1,BHLEN ; STORE CHARACTERS CONVERTED MOV #6,R0 ; CALCULATE FILL CHARS SUB R1,R0 ; MOV R0,BHSPC ; MOV #BMSTR,R0 ; ADDR OF OUTPUT BUFF MOV #FMTBUF,R1 ; ADDR OF FORMAT BUFF MOV #BMSIZ,R2 ; ADDRESS OF INPUT DATA CALL $EDMSG MOV R1,BMLEN ; STORE CHARACTERS CONVERTED MOV #6,R0 ; CALCULATE FILL CHARS SUB R1,R0 ; MOV R0,BMSPC ; MOV #FMSTR,R0 ; ADDR OF OUTPUT BUFF MOV #FMTBUF,R1 ; ADDR OF FORMAT BUFF MOV #FMAX,R2 ; ADDRESS OF INPUT DATA CALL $EDMSG MOV R1,FMLEN ; STORE CHARACTERS CONVERTED MOV #6,R0 ; CALCULATE FILL CHARS SUB R1,R0 ; MOV R0,FMSPC CLR MSGLEN MOV #HDRSUM,R0 ; FORMAT AND OUTPUT MOV #HDRSP1,R1 ; THE SUMMARY INFORMATION MOV #GHSPC,R2 ; USING $EDMSG CALL $EDMSG ADD R1,MSGLEN MOV #HDRSP2,R1 ; THE SUMMARY INFORMATION MOV #BHSPC,R2 ; USING $EDMSG CALL $EDMSG ADD R1,MSGLEN MOV #HDRSP3,R1 ; THE SUMMARY INFORMATION MOV #BMSPC,R2 ; USING $EDMSG CALL $EDMSG ADD R1,MSGLEN MOV #HDRSP4,R1 ; THE SUMMARY INFORMATION MOV #FMSPC,R2 ; USING $EDMSG CALL $EDMSG ADD R1,MSGLEN QIOW$S #IO.WVB,#5,#1,,#IOSB,,<#HDRSUM,MSGLEN,#40> EXIT$S .END FNDFIL