C THIS TASK WILL ACCEPT A DECIMAL BLOCK # AND OUTPU THE FILENAME C IN WHICH THAT BLOCK RESIDES C BYTE BYTBUF(26),NUMBUF(6),MAPAR(512),NUMBY(4) INTEGER*4 I4,NUM,J4,JCNT INTEGER*2 I2(2) COMMON MR,IR,IBITS(16) COMMON /BITMAP/ IDXMAP(256) COMMON /FILHDR/ NXTHDR(256) EQUIVALENCE (NXTHDR(1),MAPAR(1)) EQUIVALENCE (BYTBUF(1),ICNT) EQUIVALENCE (I4,I2(1)) EQUIVALENCE (I4,NUMBY(1)) C C OPEN THE INDEX FILE ON SY: AND READ IN THE HOME BLOCK TO IDXMAP C CALL OPNIDX IR=2 CALL READI IDXSIZ=IDXMAP(1) LASTIR=IR+IDXSIZ C C FIND OUT WHICH PHYSICAL BLOCK NUMBER TO FIND THE FILE FOR C 5 WRITE(5,10) 10 FORMAT('$ENTER LOGICAL BLOCK NUMBER> ') READ(5,11,END=100) NUM 11 FORMAT(I10) IF(NUM.EQ.0) GOTO 100 C C NXT=0 C C OUTERMOST LOOP: DO EACH BLOCK IN INDEX FILE C DO 20 IR=3,LASTIR CALL READI C C NEXT OUTER LOOP: DO EACH WORD IN THE BLOCK C DO 30 I=1,256 IBITS(1)=IDXMAP(I) CALL UNPACK C C OUTER LOOP: DO EACH FILE HEADER (EACH SET BIT WITHIN THE WORD) C DO 25 J=1,16 NXT=NXT+1 IF(IBITS(J).EQ.0) GOTO 25 C FOUND A SET BIT - FIGURE OUT WHICH BLOCK TO READ C AND READ IT IN MR=NXT+2+IDXSIZ CALL READM MOFF=MAPAR(2)+1 ! OFFSET TO IDENT AREA IOFF=MAPAR(1)+1 ! OFFSET TO MAP AREA JCNT=0 C IF(NXTHDR(MOFF).NE.0) GOTO 25 ! DONT DO EXT HDRS HERE 15 MOFF=MOFF+1 NEXHD= NXTHDR(MOFF) ! SAVE EXTENSION HEADER FID MOFF=MOFF+3 ! PT TO M.USE I2(1)=NXTHDR(MOFF) NUMBY(2)=0 L0=I2(1)/2 ! L0 IS THE NUMBER OF RETRIEVAL PTRS IF(L0.EQ.0) GOTO 25 D WRITE(5,41) NXT,L0 D41 FORMAT(' FILE ID: ',O6,' HAS ',I5,' RP PTRS:') C C INNER LOOP: CHECK EACH RETRIEVAL PTR USE I4 FOR START BLK, ICNT FOR COUNT C USE J4 FOR END BLK (+1) C AND JCNT FOR BLOCK N0. IN THE FILE DO 50 L1=1,L0 C SET UP I4 (3 BYTE NUMBER TO I*4) MOFF=MOFF+1 I2(2)=NXTHDR(MOFF) MOFF=MOFF+1 I2(1)=NXTHDR(MOFF) C SET UP ICNT (INDEX 0 BYTE VALUE TO INDEX 1 INTEGER) BYTBUF(1)=NUMBY(4) BYTBUF(2)=0 ICNT=ICNT+1 C FINISH I4 SET UP (CLEAR HIGHEST BYTE) NUMBY(4)=0 C UPDATE BLOCK WITHIN THE FILE JCNT=ICNT+JCNT C NOW CHECK IF THE BLOCK NUMBER (NUM) IS INCLUDED HERE IF(NUM.LT.I4) GOTO 50 J4=ICNT J4=J4+I4 IF(NUM.GE.J4) GOTO 50 C C FOUND IT !!! C J4=J4-NUM JCNT=(JCNT+1)-J4 IF(MR.EQ.(NXT+IDXSIZ+2)) GOTO 29 C MULTI HEADER FILES MR=NXT+IDXSIZ+2 CALL READM ! REREAD 1ST HEADER IN FOR NAME INFO D WRITE(5,28) D28 FORMAT(' SHOULD NOT GET HERE ON NONMULTI HEADER FILES') C DO NAME CONVERSION FOR PRINTOUT 29 CALL R50ASC(9,NXTHDR(IOFF),BYTBUF) DO 31 IC0=1,9 IF(BYTBUF(IC0).EQ.' ') GOTO 32 31 CONTINUE 32 BYTBUF(IC0)='.' CALL R50ASC(3,NXTHDR(IOFF+3),NUMBUF) DO 18 L=1,3 IC0=IC0+1 IF(NUMBUF(L).EQ.' ') GOTO 17 BYTBUF(IC0)=NUMBUF(L) 18 CONTINUE IC0=IC0+1 17 BYTBUF(IC0)=';' IT=NXTHDR(IOFF+4) DO 24 IC2=1,7 IT=IT/8 IF(IT.EQ.0) GOTO 23 24 CONTINUE 23 ENCODE(IC2,22,NUMBUF) NXTHDR(IOFF+4) 22 FORMAT(O) DO 38 L=1,IC2 IC0=IC0+1 38 BYTBUF(IC0)=NUMBUF(L) LL=NXTHDR(3) DO 39 NC=1,5 LL=LL/8 IF(LL.LE.0) GOTO 37 39 CONTINUE 37 WRITE(5,34) NXT,NXTHDR(3),(BYTBUF(L),L=1,IC0),MAPAR(10),MAPAR(9), + JCNT 34 FORMAT(1X,O11,',',O,T20,A1,4X,'OWNER: [',O3,',',O3,']', + 3X,'BLOCK #',I9,'.') GOTO 99 50 CONTINUE IF(NEXHD.EQ.0) GOTO 25 C C HANDLE EXTENSION HEADERS C D WRITE(5,801) NEXHD D801 FORMAT(' GOING TO NEXT EXTENSION HDR AT',O6) MR=NEXHD+2+IDXSIZ CALL READM MOFF=MAPAR(2)+1 ! OFFSET TO MAP AREA GOTO 15 25 CONTINUE 30 CONTINUE WRITE(5,51) 51 FORMAT(' GOING TO NEXT INDEX BLOCK') 20 CONTINUE 99 GOTO 5 C C EXIT ON RETURN OR ^Z C 100 CALL IDXCLO STOP END