!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!
!       ROCK.BAS        by Ed Schrayer
!                       Donated to AMUS JUN. 05, 1987
!
!                       Place this file on ppn DSK0:[7,6] and compile.
!                       For ease of use, place "ROCK.DO" on ppn DSK0:[2,2].
!                       (See end of text)
!
!       Purpose :       to examine the contents of a primary or secondary
!                       ISAM file index.
!
!
!       Usage :         Log to the ppn where the ISAM index resides.
!                       Type    "ROCK 'filename' "
!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
       MAP1 ROCK
               MAP2 U1,X,8
               MAP2 UPDATE'COUNTER,B,1         !
               MAP2 U9,X,1
               MAP2 LRECLL,B,1                 !LRECL LOW BYTE
               MAP2 LRECLH,B,1                 !LRECL HI BYTE
               MAP2 KEY'SIZE,B,1               !
               MAP2 SIZE'OF'DIR'ENTRY,B,1      !EVEN  +4 BYTES
               MAP2 ENTRIES'PER'DIR'BLK,B,1    !
               MAP2 UA,X,1                     !FILLER

               MAP2 KEY'POSITION,B,1
               MAP2 UB,X,1                     !FILLER
               MAP2 DATA'BLOCKING'FACTOR,B,1
               MAP2 UC,X,3                     !FILLER
               MAP2 IDA'FREELIST'POINTER'A,B,1 !
               MAP2 IDA'FREELIST'POINTER'B,B,1 !
               MAP2 UF,X,2                     !FILLER
               MAP2 IDA'FREE'CNT'LOW,B,1       !UNUSED RECS LOW BYTE
               MAP2 IDA'FREE'CNT'HI,B,1        !UNUSED RECS HI BYTE
               MAP2 UH,X,2                     !FILLER
               MAP2 IDX'FREELIST'POINTER,B,1   !
               MAP2 UJ,X,3

               MAP2 IDX'FREECOUNT,B,1
               MAP2 UM,X,3
               MAP2 RECS'ALLOC'IN'USE'LOW,B,1  !ACTIVE RECS LOW BYTE
               MAP2 RECS'ALLOC'IN'USE'HI,B,1   !ACTIVE RECS HI BYTE
               MAP2 UP,X,8
!
       FILEBASE 0
       RECNO=0
       STRSIZ 20
  START:
       I$=""
       ?TAB(-1,0)
       ?TAB(2,5);:INPUT "ENTER THE INDEX NAME : ",I$
       IF I$="" ?TAB(-1,0) : END
!
!Validate file name
!
       POS=INSTR(1,I$,".")
       IF POS>6 GOTO RPT'ERR
       I$=I$[1,(POS-1)]
       IF LEN(I$)>6 GOTO RPT'ERR
       LOOKUP I$+".IDX",FND
       IF FND=0 ?TAB(8,10);"FILE NOT FOUND - HIT RETURN : ";: &
               INPUT "",DUMMY : GOTO START
!
!Treat the index as a random file; read the rock and close
!
       OPEN  #1,I$+".IDX",RANDOM,512,RECNO
       READ #1,ROCK
       CLOSE #1
       ?TAB(4,5);"RECORD LENGTH      = ";((LRECLH*256)+(LRECLL))
       ?TAB(5,5);"KEY SIZE           = ";KEY'SIZE
       ?TAB(6,5);"KEY POSITION       = ";KEY'POSITION
       ?TAB(7,5);"BLOCKING FACTOR    = ";DATA'BLOCKING'FACTOR
       ?TAB(10,5);"FILE CAPACITY (REC)= ";(((IDA'FREE'CNT'HI &
+RECS'ALLOC'IN'USE'HI)*256)+(IDA'FREE'CNT'LOW+RECS'ALLOC'IN'USE'LOW))
       ?TAB(12,5);"RECORDS IN USE     = ";((RECS'ALLOC'IN'USE'HI*256)+RECS'ALLOC'IN'USE'LOW)
       ?TAB(14,5);"RECORDS AVAILABLE  = ";((IDA'FREE'CNT'HI*256)+IDA'FREE'CNT'LOW)
       ?TAB(23,5);:INPUT"HIT RET TO CONTINUE : ",DUMMY
       GOTO START
!
  RPT'ERR:
       ?TAB(8,10);"ERROR IN FILE NAME - HIT RETURN : ";
       INPUT "",DUMMY
       GOTO START
!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!
!               ROCK.DO         (Install on ppn DSK0:[2,2])
!
!
!               Enter the following lines in a .DO file :
!
!               :T
!               RUN ROCK
!               $0
!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!