--- trunk/IsisDB.pm 2004/12/31 05:43:20 25 +++ trunk/IsisDB.pm 2005/01/01 22:29:35 27 @@ -37,7 +37,8 @@ =head1 DESCRIPTION This module will read ISIS databases created by DOS CDS/ISIS, WinIsis or -IsisMarc. It can be used as perl-only alternative to OpenIsis module. +IsisMarc. It can be used as perl-only alternative to OpenIsis module which +seems to depriciate it's old C bindings for perl. It can create hash values from data in ISIS database (using C), ASCII dump (using C) or just hash with field names and packed @@ -50,7 +51,7 @@ It also has support for identifiers (only if ISIS database is created by IsisMarc), see C. -This will module will always be slower than OpenIsis module which use C +This module will always be slower than OpenIsis module which use C library. However, since it's written in perl, it's platform independent (so you don't need C compiler), and can be easily modified. I hope that it creates data structures which are easier to use than ones created by @@ -214,11 +215,14 @@ =head2 read_cnt -This function is not really used by module, but can be useful to find info -about your index (if debugging it for example). +Read content of C<.CNT> file and return hash containing it. print Dumper($isis->read_cnt); +This function is not used by module (C<.CNT> files are not required for this +module to work), but it can be useful to examine your index (while debugging +for example). + =cut sub read_cnt { @@ -331,7 +335,7 @@ # (XRFMFB - 1) * 512 + XRFMFP # why do i have to do XRFMFP % 1024 ? - my $blk_off = (($XRFMFB - 1) * 512) + ($XRFMFP % 1024); + my $blk_off = (($XRFMFB - 1) * 512) + ($XRFMFP % 512); print STDERR "## pointer: $pointer XRFMFB: $XRFMFB XRFMFP: $XRFMFP offset: $blk_off\n" if ($self->{'debug'}); @@ -345,8 +349,14 @@ print STDERR "## offset for rowid $value is $blk_off (blk $XRFMFB off $XRFMFP)\n" if ($self->{debug}); if ($value!=$mfn) { - carp "Error: MFN ".$mfn." not found in MST(".$value.")"; - #return; + if ($value == 0) { + print STDERR "## record $mfn is physically deleted\n" if ($self->{debug}); + $self->{deleted} = $mfn; + return; + } + + carp "Error: MFN ".$mfn." not found in MST file, found $value"; + return; } read($self->{'fileMST'}, $buff, 14); @@ -414,11 +424,11 @@ =head2 to_ascii -Dump ASCII output of record with specified MFN +Returns ASCII output of record with specified MFN print $isis->to_ascii(42); -It outputs something like this: +This outputs something like this: 210 ^aNew York^cNew York University press^dcop. 1988 990 2140 @@ -455,7 +465,7 @@ my $hash = $isis->to_hash($mfn); -It has ability to convert characters (using C from ISIS +It has ability to convert characters (using C) from ISIS database before creating structures enabling character re-mapping or quick fix-up of data. @@ -551,7 +561,18 @@ =head1 BUGS -This module has been very lightly tested. Use with caution and report bugs. +Some parts of CDS/ISIS documentation are not detailed enough to exmplain +some variations in input databases which has been tested with this module. +When I was in doubt, I assumed that OpenIsis's implementation was right +(except for obvious bugs). + +However, every effort has been made to test this module with as much +databases (and programs that create them) as possible. + +I would be very greatful for success or failure reports about usage of this +module with databases from programs other than WinIsis and IsisMarc. I had +tested this against ouput of one C-based application, but I don't +know any details about it's version. =head1 AUTHOR