/[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 23 by dpavlin, Fri Dec 31 04:21:21 2004 UTC revision 25 by dpavlin, Fri Dec 31 05:43:20 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 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    
# Line 334  sub fetch { Line 346  sub fetch {
346    
347          if ($value!=$mfn) {          if ($value!=$mfn) {
348                  carp "Error: MFN ".$mfn." not found in MST(".$value.")";                      carp "Error: MFN ".$mfn." not found in MST(".$value.")";    
349                  #return;                # XXX deleted record?                  #return;
350          }          }
351    
 #       $MFRL=$self->Read16($fileMST);  
 #       $MFBWB=$self->Read32($fileMST);  
 #       $MFBWP=$self->Read16($fileMST);  
 #       $BASE=$self->Read16($fileMST);  
 #       $NVF=$self->Read16($fileMST);  
 #       $STATUS=$self->Read16($fileMST);  
   
352          read($self->{'fileMST'}, $buff, 14);          read($self->{'fileMST'}, $buff, 14);
353    
354          my ($MFRL,$MFBWB,$MFBWP,$BASE,$NVF,$STATUS) = unpack("slssss", $buff);          my ($MFRL,$MFBWB,$MFBWP,$BASE,$NVF,$STATUS) = unpack("slssss", $buff);
355    
356          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});
357    
358          # 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;  
         }  
359    
360          warn "BASE is not 18+6*NVF" unless ($BASE == 18 + 6 * $NVF);          warn "BASE is not 18+6*NVF" unless ($BASE == 18 + 6 * $NVF);
361    
# Line 373  sub fetch { Line 371  sub fetch {
371    
372          for (my $i = 0 ; $i < $NVF ; $i++) {          for (my $i = 0 ; $i < $NVF ; $i++) {
373    
 #               $TAG=$self->Read16($fileMST);  
 #               $POS=$self->Read16($fileMST);  
 #               $LEN=$self->Read16($fileMST);  
   
374                  my ($TAG,$POS,$LEN) = unpack("sss", substr($buff,$i * 6, 6));                  my ($TAG,$POS,$LEN) = unpack("sss", substr($buff,$i * 6, 6));
375    
376                  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 407  sub fetch {
407    
408          $self->{'current_mfn'} = $mfn;          $self->{'current_mfn'} = $mfn;
409    
410          print Dumper($self),"\n" if ($self->{debug});          print STDERR Dumper($self),"\n" if ($self->{debug});
411    
412          return $self->{'record'};          return $self->{'record'};
413  }  }

Legend:
Removed from v.23  
changed lines
  Added in v.25

  ViewVC Help
Powered by ViewVC 1.1.26