1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
|
#!/usr/bin/perl -w
if (!defined($ARGV[0])) {
print STDERR "Usage: dbilist.pl <index>\n";
print STDERR " where index is entrynam, acnum, seqvn, des, key, tax\n";
exit ;
}
$index = $ARGV[0];
if ($index eq "entrynam") {$isindex=0}
else {$isindex=1}
print "$index\n";
if ($isindex) {
open (HIT, "$index.hit") || die "Cannot open $index.hit";
read (HIT, $hithead, 44, 0);
($hitfilesize, $hitrecordcnt, $hitrecordlen, $hitdbname, $hitrelease, $hitdate1, $hitdate2, $hitdate3, $hitdate4) = unpack ("V2vA20A10c4", $hithead);
print "
hitfilesize $hitfilesize
hitrecordcnt $hitrecordcnt
hitrecordlen $hitrecordlen
htdbname '$hitdbname'
hitrelease '$hitrelease'
hitdate $hitdate1/$hitdate2/$hitdate3$hitdate4
";
seek (HIT, 300, 0);
open (TRG, "$index.trg") || die "Cannot open $index.trg";
read (TRG, $trghead, 44, 0);
($trgfilesize, $trgrecordcnt, $trgrecordlen, $trgdbname, $trgrelease, $trgdate1, $trgdate2, $trgdate3, $trgdate4) = unpack ("V2vA20A10c4", $trghead);
print "
trgfilesize $trgfilesize
trgrecordcnt $trgrecordcnt
trgrecordlen $trgrecordlen
htdbname '$trgdbname'
trgrelease '$trgrelease'
trgdate $trgdate1/$trgdate2/$trgdate3$trgdate4
";
seek (TRG, 300, 0);
}
open (ENT, "entrynam.idx") || die "Cannot open entrynam.idx";
read (ENT, $enthead, 44, 0);
($entfilesize, $entrecordcnt, $entrecordlen) = unpack ("V2v", $enthead);
print "
entfilesize $entfilesize
entrecordcnt $entrecordcnt
entrecordlen $entrecordlen
";
seek (ENT, 300, 0);
$entidlen = $entrecordlen-10;
if (!$isindex) {
$i=1;
while ($i<=$entrecordcnt) {
$entpos = 300-$entrecordlen+($i*$entrecordlen);
seek (ENT, $entpos, 0);
read (ENT, $entrecord, $entrecordlen, 0);
($entid,$entref, $entseq, $entfile) = unpack ("A$entidlen"."V2v", $entrecord);
print "Entry $i pos $entpos file $entfile offsets $entref,$entseq '$entid'\n";
$i++;
}
}
else {
$i=1;
while ($i<=$trgrecordcnt) {
seek (TRG, 300-$trgrecordlen+($i*$trgrecordlen), 0);
read (TRG, $trgrecord, $trgrecordlen, 0);
($hitcnt,$hitnum,$token) = unpack ("V2A*", $trgrecord);
print "\nTRG record $i count:$hitcnt start:$hitnum '$token'\n";
seek (HIT, 300-$hitrecordlen+($hitnum*$hitrecordlen), 0);
for ($j=1;$j<=$hitcnt;$j++) {
read (HIT, $hitrecord, $hitrecordlen, 0);
($entrec) = unpack ("V", $hitrecord);
seek (ENT, 300-$entrecordlen+($entrec*$entrecordlen), 0);
read (ENT, $entrecord, $entrecordlen, 0);
($entid,$entref, $entseq, $entfile) = unpack ("A$entidlen"."V2v", $entrecord);
$recnum = $hitnum+$j-1;
print "Hit record $recnum: Entry $entrec file $entfile offsets $entref,$entseq '$entid'\n";
}
$i++;
}
close HIT;
close TRG;
}
close ENT;
|