use IsisDB module instead of OpenIsis -- this will fix various problems in
authorDobrica Pavlinusic <dpavlin@rot13.org>
Sat, 1 Jan 2005 19:01:55 +0000 (19:01 +0000)
committerDobrica Pavlinusic <dpavlin@rot13.org>
Sat, 1 Jan 2005 19:01:55 +0000 (19:01 +0000)
index generation becasue IsisDB doesn't have problems as OpenIsis perl
bindings does.

git-svn-id: file:///home/dpavlin/private/svn/webpac/trunk@622 13eb9ef6-21d5-0310-b721-a9d68796d827

all2xml.pl
isis_sf.pm

index b7107e7..3f6f902 100755 (executable)
@@ -1,7 +1,7 @@
 #!/usr/bin/perl -w
 
 use strict;
-use OpenIsis;
+use IsisDB;
 use Getopt::Std;
 use Data::Dumper;
 use XML::Simple;
@@ -720,66 +720,21 @@ print STDERR "using: $type...\n";
                my $isis_db = $cfg -> val($database, 'isis_db') || die "$database doesn't have 'isis_db' defined!";
 
                $import2cp = Text::Iconv->new($config->{isis_codepage},$codepage);
-               my $db = OpenIsis::open( $isis_db );
-
-               # check if .txt database for OpenIsis is zero length,
-               # if so, erase it and re-open database
-               sub check_txt_db {
-                       my $isis_db = shift || die "need isis database name";
-                       my $reopen = 0;
-
-                       if (-e $isis_db.".TXT") {
-                               print STDERR "WARNING: removing $isis_db.TXT OpenIsis database...\n";
-                               unlink $isis_db.".TXT" || warn "FATAL: unlink error on '$isis_db.TXT': $!";
-                               $reopen++;
-                       }
-                       if (-e $isis_db.".PTR") {
-                               print STDERR "WARNING: removing $isis_db.PTR OpenIsis database...\n";
-                               unlink $isis_db.".PTR" || warn "FATAL: unlink error on '$isis_db.PTR': $!";
-                               $reopen++;
-                       }
-                       return OpenIsis::open( $isis_db ) if ($reopen);
-               }
-
-               # EOF error
-               if ($db == -1) {
-                       $db = check_txt_db($isis_db);
-                       if ($db == -1) {
-                               print STDERR "FATAL: OpenIsis can't open zero size file $isis_db\n";
-                               next;
-                       }
-               }
+               my $db = new IsisDB( isisdb => $isis_db );
 
-               # OpenIsis::ERR_BADF 
-               if ($db == -4) {
-                       print STDERR "FATAL: OpenIsis can't find file $isis_db\n";
-                       next;
-               # OpenIsis::ERR_IO
-               } elsif ($db == -5) {
-                       print STDERR "FATAL: OpenIsis can't access file $isis_db\n";
-                       next;
-               } elsif ($db < 0) {
-                       print STDERR "FATAL: OpenIsis unknown error $db with file $isis_db\n";
-                       next;
-               }
-
-               my $max_rowid = OpenIsis::maxRowid( $db );
-
-               # if 0 records, try to rease isis .txt database
-               if ($max_rowid == 0) {
-                       # force removal of database
-                       $db = check_txt_db($isis_db);
-                       $max_rowid = OpenIsis::maxRowid( $db );
-               }
+               my $max_rowid = $db->{'maxmfn'} || die "can't find maxmfn";
 
                print STDERR "Reading database: $isis_db [$max_rowid rows]\n";
 
                my $path = $database;
 
                for (my $row_id = 1; $row_id <= $max_rowid; $row_id++ ) {
-                       my $row = OpenIsis::read( $db, $row_id );
-                       if ($row && $row->{mfn}) {
-       
+                       my $row = $db->to_hash( $row_id );
+                       if ($row) {
+
+                               $row->{mfn} = $row_id;
+                               $row->{record} = $db->{record};
+
                                progress($row->{mfn}, $max_rowid);
 
                                my $swishpath = $path."#".int($row->{mfn});
@@ -793,10 +748,6 @@ print STDERR "using: $type...\n";
                                }
                        }
                }
-               # for this to work with current version of OpenIsis (0.9.0)
-               # you might need my patch from
-               # http://www.rot13.org/~dpavlin/projects/openisis-0.9.0-perl_close.diff
-               OpenIsis::close($db);
                print STDERR "\n";
 
        } elsif ($type_base eq "excel") {
index 49b2081..f118318 100644 (file)
@@ -15,14 +15,12 @@ sub isis_sf {
        if ($row->{$isis_id}->[$i]) {
                if (! $subfield) {
                        # subfield list undef, empty or no defined subfields for this record
-                       my $all_sf = $row->{$isis_id}->[$i];
-                       $all_sf =~ s/\^./ /g;   # nuke definitions
+                       my $all_sf = $row->{record}->{$isis_id}->[$i];
+                       $all_sf =~ s/\^./ /g;   # nuke definitions
                        return $all_sf; 
                }
-               my $sf = OpenIsis::subfields($row->{$isis_id}->[$i]);
-               if ($sf->{$subfield}) {
-                       return $sf->{$subfield};
-               }
+               my $sf = $row->{$isis_id}->[$i]->{$subfield};
+               return $sf if ($sf);
        }
 }