/[Biblio-Isis]/trunk/lib/Biblio/Isis.pm
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /trunk/lib/Biblio/Isis.pm

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 18 by dpavlin, Thu Dec 30 22:40:53 2004 UTC revision 26 by dpavlin, Fri Dec 31 07:16:02 2004 UTC
# Line 9  use Data::Dumper; Line 9  use Data::Dumper;
9  BEGIN {  BEGIN {
10          use Exporter ();          use Exporter ();
11          use vars qw ($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);          use vars qw ($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
12          $VERSION     = 0.07;          $VERSION     = 0.08;
13          @ISA         = qw (Exporter);          @ISA         = qw (Exporter);
14          #Give a hoot don't pollute, do not export more than needed by default          #Give a hoot don't pollute, do not export more than needed by default
15          @EXPORT      = qw ();          @EXPORT      = qw ();
# Line 148  sub new { Line 148  sub new {
148          push @must_exist, "fdt" if ($self->{read_fdt});          push @must_exist, "fdt" if ($self->{read_fdt});
149    
150          foreach my $ext (@must_exist) {          foreach my $ext (@must_exist) {
151                  confess "missing ",uc($ext)," file in ",$self->{isisdb} unless ($self->{$ext."_file"});                  croak "missing ",uc($ext)," file in ",$self->{isisdb} unless ($self->{$ext."_file"});
152          }          }
153    
154          print STDERR "## using files: ",join(" ",@isis_files),"\n" if ($self->{debug});          print STDERR "## using files: ",join(" ",@isis_files),"\n" if ($self->{debug});
# Line 224  about your index (if debugging it for ex Line 224  about your index (if debugging it for ex
224  sub read_cnt  {  sub read_cnt  {
225          my $self = shift;          my $self = shift;
226    
227          confess "missing CNT file in ",$self->{isisdb} unless ($self->{cnt_file});          croak "missing CNT file in ",$self->{isisdb} unless ($self->{cnt_file});
228    
229          # Get the index information from $db.CNT          # Get the index information from $db.CNT
230        
# Line 296  sub fetch { Line 296  sub fetch {
296    
297          # is mfn allready in memory?          # is mfn allready in memory?
298          my $old_mfn = $self->{'current_mfn'} || -1;          my $old_mfn = $self->{'current_mfn'} || -1;
299          return if ($mfn == $old_mfn);          return $self->{record} if ($mfn == $old_mfn);
300    
301          print STDERR "## fetch: $mfn\n" if ($self->{debug});          print STDERR "## fetch: $mfn\n" if ($self->{debug});
302    
# Line 308  sub fetch { Line 308  sub fetch {
308    
309          my $buff;          my $buff;
310    
311            # delete old record
312            delete $self->{record};
313    
314          # read XRFMFB abd XRFMFP          # read XRFMFB abd XRFMFP
315          read($self->{'fileXRF'}, $buff, 4);          read($self->{'fileXRF'}, $buff, 4);
316          my $pointer=unpack("l",$buff) || carp "pointer is null";          my $pointer=unpack("l",$buff) || carp "pointer is null";
317    
318            # check for logically deleted record
319            if ($pointer < 0) {
320                    print STDERR "## record $mfn is logically deleted\n" if ($self->{debug});
321                    $self->{deleted} = $mfn;
322    
323                    return unless $self->{include_deleted};
324    
325                    $pointer = abs($pointer);
326            }
327    
328          my $XRFMFB = int($pointer/2048);          my $XRFMFB = int($pointer/2048);
329          my $XRFMFP = $pointer - ($XRFMFB*2048);          my $XRFMFP = $pointer - ($XRFMFB*2048);
330    
   
331          # (XRFMFB - 1) * 512 + XRFMFP          # (XRFMFB - 1) * 512 + XRFMFP
332          # why do i have to do XRFMFP % 1024 ?          # why do i have to do XRFMFP % 1024 ?
333    
334          my $blk_off = (($XRFMFB - 1) * 512) + ($XRFMFP % 1024);          my $blk_off = (($XRFMFB - 1) * 512) + ($XRFMFP % 512);
335    
336          print STDERR "## pointer: $pointer XRFMFB: $XRFMFB XRFMFP: $XRFMFP offset: $blk_off\n" if ($self->{'debug'});          print STDERR "## pointer: $pointer XRFMFB: $XRFMFB XRFMFP: $XRFMFP offset: $blk_off\n" if ($self->{'debug'});
337    
# Line 333  sub fetch { Line 345  sub fetch {
345          print STDERR "## offset for rowid $value is $blk_off (blk $XRFMFB off $XRFMFP)\n" if ($self->{debug});          print STDERR "## offset for rowid $value is $blk_off (blk $XRFMFB off $XRFMFP)\n" if ($self->{debug});
346    
347          if ($value!=$mfn) {          if ($value!=$mfn) {
348                  carp "Error: MFN ".$mfn." not found in MST(".$value.")";                      if ($value == 0) {
349                  #return;                # XXX deleted record?                          print STDERR "## record $mfn is physically deleted\n" if ($self->{debug});
350          }                          $self->{deleted} = $mfn;
351                            return;
352                    }
353    
354  #       $MFRL=$self->Read16($fileMST);                  carp "Error: MFN ".$mfn." not found in MST file, found $value";    
355  #       $MFBWB=$self->Read32($fileMST);                  return;
356  #       $MFBWP=$self->Read16($fileMST);          }
 #       $BASE=$self->Read16($fileMST);  
 #       $NVF=$self->Read16($fileMST);  
 #       $STATUS=$self->Read16($fileMST);  
357    
358          read($self->{'fileMST'}, $buff, 14);          read($self->{'fileMST'}, $buff, 14);
359    
# Line 350  sub fetch { Line 361  sub fetch {
361    
362          print STDERR "## MFRL: $MFRL MFBWB: $MFBWB MFBWP: $MFBWP BASE: $BASE NVF: $NVF STATUS: $STATUS\n" if ($self->{debug});          print STDERR "## MFRL: $MFRL MFBWB: $MFBWB MFBWP: $MFBWP BASE: $BASE NVF: $NVF STATUS: $STATUS\n" if ($self->{debug});
363    
364          # delete old record          warn "MFRL $MFRL is not even number" unless ($MFRL % 2 == 0);
         delete $self->{record};  
   
         ## FIXME this is a bug  
         if (! $self->{'include_deleted'} && $MFRL < 0) {  
                 print "## logically deleted record $mfn, skipping...\n" if ($self->{debug});  
                 return;  
         }  
365    
366          warn "BASE is not 18+6*NVF" unless ($BASE == 18 + 6 * $NVF);          warn "BASE is not 18+6*NVF" unless ($BASE == 18 + 6 * $NVF);
367    
# Line 373  sub fetch { Line 377  sub fetch {
377    
378          for (my $i = 0 ; $i < $NVF ; $i++) {          for (my $i = 0 ; $i < $NVF ; $i++) {
379    
 #               $TAG=$self->Read16($fileMST);  
 #               $POS=$self->Read16($fileMST);  
 #               $LEN=$self->Read16($fileMST);  
   
380                  my ($TAG,$POS,$LEN) = unpack("sss", substr($buff,$i * 6, 6));                  my ($TAG,$POS,$LEN) = unpack("sss", substr($buff,$i * 6, 6));
381    
382                  print STDERR "## TAG: $TAG POS: $POS LEN: $LEN\n" if ($self->{debug});                  print STDERR "## TAG: $TAG POS: $POS LEN: $LEN\n" if ($self->{debug});
# Line 413  sub fetch { Line 413  sub fetch {
413    
414          $self->{'current_mfn'} = $mfn;          $self->{'current_mfn'} = $mfn;
415    
416          print Dumper($self),"\n" if ($self->{debug});          print STDERR Dumper($self),"\n" if ($self->{debug});
417    
418          return $self->{'record'};          return $self->{'record'};
419  }  }
# Line 520  sub to_hash { Line 520  sub to_hash {
520                          my $val;                          my $val;
521    
522                          # has identifiers?                          # has identifiers?
523                          ($val->{'i1'},$val->{'i2'}) = ($1,$2) if ($l =~ s/^([01 #])([01 #])//);                          ($val->{'i1'},$val->{'i2'}) = ($1,$2) if ($l =~ s/^([01 #])([01 #])\^/\^/);
524    
525                          # has subfields?                          # has subfields?
526                          if ($l =~ m/\^/) {                          if ($l =~ m/\^/) {

Legend:
Removed from v.18  
changed lines
  Added in v.26

  ViewVC Help
Powered by ViewVC 1.1.26