From tonnesen@users.sourceforge.net Fri Nov 2 13:21:30 2001 From: Steve Tonnesen To: koha-devel@lists.koha-community.org Subject: [Koha-devel] CVS: koha/acqui.simple marcimport.pl,1.2,1.3 Date: Fri, 02 Nov 2001 13:22:07 +0000 Message-ID: MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============4075269137718178969==" --===============4075269137718178969== Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Update of /cvsroot/koha/koha/acqui.simple In directory usw-pr-cvs1:/tmp/cvs-serv9216 Modified Files: marcimport.pl=20 Log Message: Added Z39.50 searching capability, and MARC file uploading from workstation using HTML forms. Z39.50 functionality requires the YAZ toolkit. Index: marcimport.pl =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /cvsroot/koha/koha/acqui.simple/marcimport.pl,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** marcimport.pl 2001/11/01 05:00:41 1.2 --- marcimport.pl 2001/11/02 21:21:25 1.3 *************** *** 81,84 **** --- 81,159 ---- my $file=3D$input->param('file'); =20 + if ($input->param('z3950queue')) { + my $query=3D$input->param('query'); + my $type=3D$input->param('type'); + my @serverlist; + foreach ($input->param) { + if (/S-(.*)/) { + my $server=3D$1; + if ($server eq 'LOC') { + push @serverlist, "LOC/z3950.loc.gov:7090/voyager//"; + } + if ($server eq 'NLC') { + push @serverlist, "NLC/amicus.nlc-bnc.ca:210/AMICUS/bccms1/hawk5fad"; + } + if ($server eq 'MAN') { + push @serverlist, "MAN/".$input->param('manualz3950server')."//"; + } + } + } + my $isbnfailed=3D0; + if ($type eq 'isbn') { + my $q=3D$query; + $q=3D~s/[^X\d]//g; + $q=3D~s/X.//g; + if (length($q)=3D=3D10) { + my $checksum=3Dsubstr($q,9,1); + my $isbn=3Dsubstr($q,0,9); + my $i; + my $c=3D0; + for ($i=3D0; $i<9; $i++) { + my $digit=3Dsubstr($q,$i,1); + $c+=3D$digit*(10-$i); + } + $c=3Dint(11-($c/11-int($c/11))*11+.1); + ($c=3D=3D10) && ($c=3D'X'); + if ($c eq $checksum) { + } else { + print "$query is not a valid ISBN + Number

\n"; + $isbnfailed=3D1; + } + } else { + print "$query is not a valid ISBN + Number

\n"; + $isbnfailed=3D1; + } + } + unless ($isbnfailed) { + my $q_term=3D$dbh->quote($query); + my $serverlist=3D''; + foreach (@serverlist) { + $serverlist.=3D"$_ "; + } + chop $serverlist; + my $q_serverlist=3D$dbh->quote($serverlist); + my $sth=3D$dbh->prepare("insert into z3950queue (term,type,servers) values= ($q_term, '$type', $q_serverlist)"); + $sth->execute; + } + } +=20 + if (my $data=3D$input->param('uploadmarc')) { + my $name=3D$input->param('name'); + ($name) || ($name=3D$data); + my $marcrecord=3D''; + if (length($data)>0) { + while (<$data>) { + $marcrecord.=3D$_; + } + } + my $q_marcrecord=3D$dbh->quote($marcrecord); + my $q_name=3D$dbh->quote($name); + my $sth=3D$dbh->prepare("insert into uploadedmarc (marc,name) values ($= q_marcrecord, $q_name)"); + $sth->execute; + } +=20 +=20 if ($input->param('insertnewrecord')) { my $isbn=3D$input->param('isbn'); *************** *** 99,103 **** my $biblioitemnumber=3D0; print "

\n"; ! print "New Record | New File
\n"; if ($sth->rows) { ($biblionumber, $biblioitemnumber) =3D $sth->fetchrow; --- 174,178 ---- my $biblioitemnumber=3D0; print "
\n"; ! print "New Record | New File
\n"; if ($sth->rows) { ($biblionumber, $biblioitemnumber) =3D $sth->fetchrow; *************** *** 252,256 **** --- 327,333 ---- =20 =20 + my $menu =3D $input->param('menu'); if ($file) { + print "Main Menu
\n"; my $qisbn=3D$input->param('isbn'); my $qissn=3D$input->param('issn'); *************** *** 258,264 **** my $qcontrolnumber=3D$input->param('controlnumber'); if ($qisbn || $qissn || $qlccn || $qcontrolnumber) { ! print "New File
\n"; ! open (F, "$file"); ! my $data=3D; =20 $splitchar=3Dchr(29); --- 335,353 ---- my $qcontrolnumber=3D$input->param('controlnumber'); if ($qisbn || $qissn || $qlccn || $qcontrolnumber) { ! print "New File
\n"; ! #open (F, "$file"); ! #my $data=3D; ! my $data; ! if ($file=3D~/Z-(\d+)/) { ! my $id=3D$1; ! my $resultsid=3D$input->param('resultsid'); ! my $sth=3D$dbh->prepare("select results from z3950results where id=3D$= resultsid"); ! $sth->execute; ! ($data) =3D $sth->fetchrow; ! } else { ! my $sth=3D$dbh->prepare("select marc from uploadedmarc where id=3D$fil= e"); ! $sth->execute; ! ($data) =3D $sth->fetchrow; ! } =20 $splitchar=3Dchr(29); *************** *** 529,532 **** --- 618,622 ---- ($qisbn) || ($qisbn=3D'NIL'); ($qcontrolnumber) || ($qcontrolnumber=3D'NIL'); + $controlnumber=3D~s/\s+//g; unless (($isbn eq $qisbn) || ($issn eq $qissn) || ($lccn eq $qlccn) ||= ($controlnumber eq $qcontrolnumber)) { next RECORD; *************** *** 577,848 **** } } else { ! open (F, "$file"); ! my $data=3D; !=20 ! $splitchar=3Dchr(29); ! my @records; ! foreach $record (split(/$splitchar/, $data)) { ! $leader=3Dsubstr($record,0,24); ! #print "Leader:$leader\n"; ! $record=3Dsubstr($record,24); ! $splitchar2=3Dchr(30); ! my $directory=3D0; ! my $tagcounter=3D0; ! my %tag; ! my @record; ! foreach $field (split(/$splitchar2/, $record)) { ! my %field; ! ($color eq $lc1) ? ($color=3D$lc2) : ($color=3D$lc1); ! unless ($directory) { ! $directory=3D$field; ! my $itemcounter=3D1; ! $counter=3D0; ! while ($item=3Dsubstr($directory,0,12)) { ! $tag=3Dsubstr($directory,0,3); ! $length=3Dsubstr($directory,3,4); ! $start=3Dsubstr($directory,7,6); ! $directory=3Dsubstr($directory,12); ! $tag{$counter}=3D$tag; ! $counter++; ! } ! $directory=3D1; ! next; ! } ! $tag=3D$tag{$tagcounter}; ! $tagcounter++; ! $field{'tag'}=3D$tag; ! $splitchar3=3Dchr(31); ! my @subfields=3Dsplit(/$splitchar3/, $field); ! $indicator=3D$subfields[0]; ! $field{'indicator'}=3D$indicator; ! my $firstline=3D1; ! unless ($#subfields=3D=3D0) { ! my %subfields; ! for ($i=3D1; $i<=3D$#subfields; $i++) { ! my $text=3D$subfields[$i]; ! my $subfieldcode=3Dsubstr($text,0,1); ! my $subfield=3Dsubstr($text,1); ! if ($subfields{$subfieldcode}) { ! my $subfieldlist=3D$subfields{$subfieldcode}; ! my @subfieldlist=3D@$subfieldlist; ! if ($#subfieldlist>=3D0) { ! # print "$tag Adding to array $subfieldcode -- $subfield
\n"; ! push (@subfieldlist, $subfield); ! } else { ! # print "$tag Arraying $subfieldcode -- $subfield
\n"; ! @subfieldlist=3D($subfields{$subfieldcode}, $subfield); ! } ! $subfields{$subfieldcode}=3D\@subfieldlist; ! } else { ! $subfields{$subfieldcode}=3D$subfield; ! } ! } ! $field{'subfields'}=3D\%subfields; ! } ! push (@record, \%field); ! } ! push (@records, \@record); ! $counter++; ! } ! print << "EOF"; !
!

! Select a New File !

! ! !
Select a Record to Import
EOF ! my $text=3D''; ! foreach $record (@records) { ! my @subjects=3D(); ! my ($lccn, $isbn, $issn, $dewey, $author, $title, $place, $publisher, = $publicationyear, $volume, $number, @subjects, $note, $controlnumber); ! foreach $field (@$record) { ! $text.=3D$field->{'tag'}."\n"; ! foreach (keys %{$field->{'subfields'}}) { ! my $value=3D$field->{'subfields'}->{$_}; ! $text.=3D" $_: $value\n"; ! } ! if ($field->{'tag'} eq '001') { ! $controlnumber=3D$field->{'indicator'}; ! } ! if ($field->{'tag'} eq '010') { ! $lccn=3D$field->{'subfields'}->{'a'}; ! $lccn=3D~s/^\s*//; ! ($lccn) =3D (split(/\s+/, $lccn))[0]; ! } ! if ($field->{'tag'} eq '015') { ! $lccn=3D$field->{'subfields'}->{'a'}; ! $lccn=3D~s/^\s*//; ! $lccn=3D~s/^C//; ! ($lccn) =3D (split(/\s+/, $lccn))[0]; ! } ! if ($field->{'tag'} eq '020') { ! $isbn=3D$field->{'subfields'}->{'a'}; ! ($isbn=3D~/ARRAY/) && ($isbn=3D$$isbn[0]); ! $isbn=3D~s/[^\d]*//g; ! } ! if ($field->{'tag'} eq '022') { ! $issn=3D$field->{'subfields'}->{'a'}; ! $issn=3D~s/^\s*//; ! ($issn) =3D (split(/\s+/, $issn))[0]; ! } ! if ($field->{'tag'} eq '082') { ! $dewey=3D$field->{'subfields'}->{'a'}; ! $dewey=3D~s/\///g; ! if (@$dewey) { ! $dewey=3D$$dewey[0]; ! } ! #$dewey=3D~s/\///g; ! } ! if ($field->{'tag'} eq '100') { ! $author=3D$field->{'subfields'}->{'a'}; ! } ! if ($field->{'tag'} eq '245') { ! $title=3D$field->{'subfields'}->{'a'}; ! $title=3D~s/ \/$//; ! $subtitle=3D$field->{'subfields'}->{'b'}; ! $subtitle=3D~s/ \/$//; } ! if ($field->{'tag'} eq '260') { ! $place=3D$field->{'subfields'}->{'a'}; ! if (@$place) { ! $place=3D$$place[0]; ! } ! $place=3D~s/\s*:$//g; ! $publisher=3D$field->{'subfields'}->{'b'}; ! if (@$publisher) { ! $publisher=3D$$publisher[0]; ! } ! $publisher=3D~s/\s*:$//g; ! $publicationyear=3D$field->{'subfields'}->{'c'}; ! if ($publicationyear=3D~/c(\d\d\d\d)/) { ! $copyrightdate=3D$1; ! } ! if ($publicationyear=3D~/[^c](\d\d\d\d)/) { ! $publicationyear=3D$1; ! } elsif ($copyrightdate) { ! $publicationyear=3D$copyrightdate; } else { ! $publicationyear=3D~/(\d\d\d\d)/; ! $publicationyear=3D$1; } ! } ! if ($field->{'tag'} eq '300') { ! $pages=3D$field->{'subfields'}->{'a'}; ! $pages=3D~s/ \;$//; ! $size=3D$field->{'subfields'}->{'c'}; ! $pages=3D~s/\s*:$//g; ! $size=3D~s/\s*:$//g; ! } ! if ($field->{'tag'} eq '362') { ! if ($field->{'subfields'}->{'a'}=3D~/(\d+).*(\d+)/) { ! $volume=3D$1; ! $number=3D$2; ! } ! } ! if ($field->{'tag'} eq '440') { ! $seriestitle=3D$field->{'subfields'}->{'a'}; ! if ($field->{'subfields'}->{'v'}=3D~/(\d+).*(\d+)/) { ! $volume=3D$1; ! $number=3D$2; ! } ! } ! if ($field->{'tag'} =3D~/^5/) { ! $note.=3D"$field->{'subfields'}->{'a'}\n"; ! } ! if ($field->{'tag'} =3D~/65\d/) { ! my $subject=3D$field->{'subfields'}->{'a'}; ! $subject=3D~s/\.$//; ! if ($gensubdivision=3D$field->{'subfields'}->{'x'}) { ! my @sub=3D@$gensubdivision; ! if ($#sub>=3D0) { ! foreach $s (@sub) { ! $s=3D~s/\.$//; ! $subject.=3D" -- $s"; } ! } else { ! $gensubdivision=3D~s/\.$//; ! $subject.=3D" -- $gensubdivision"; ! } ! } ! if ($chronsubdivision=3D$field->{'subfields'}->{'y'}) { ! my @sub=3D@$chronsubdivision; ! if ($#sub>=3D0) { ! foreach $s (@sub) { ! $s=3D~s/\.$//; ! $subject.=3D" -- $s"; } ! } else { ! $chronsubdivision=3D~s/\.$//; ! $subject.=3D" -- $chronsubdivision"; ! } ! } ! if ($geosubdivision=3D$field->{'subfields'}->{'z'}) { ! my @sub=3D@$geosubdivision; ! if ($#sub>=3D0) { ! foreach $s (@sub) { ! $s=3D~s/\.$//; ! $subject.=3D" -- $s"; } } else { ! $geosubdivision=3D~s/\.$//; ! $subject.=3D" -- $geosubdivision"; } } ! push @subjects, $subject; } } ! my $q_isbn=3D$dbh->quote((($isbn) || ('NIL'))); ! my $q_issn=3D$dbh->quote((($issn) || ('NIL'))); ! my $q_lccn=3D$dbh->quote((($lccn) || ('NIL'))); ! my $q_controlnumber=3D$dbh->quote((($controlnumber) || ('NIL'))); ! my $sth=3D$dbh->prepare("select * from marcrecorddone where isbn=3D$q_= isbn or issn=3D$q_issn or lccn=3D$q_lccn or controlnumber=3D$q_controlnumber"= ); $sth->execute; ! my $donetext=3D''; ! if ($sth->rows) { ! $donetext=3D"DONE"; } ! $sth=3D$dbh->prepare("select * from biblioitems where isbn=3D$q_isbn o= r issn=3D$q_issn or lccn=3D$q_lccn"); ! $sth->execute; ! if ($sth->rows) { ! $donetext=3D"DONE"; } ! if ($isbn) { ! print "$title by $autho= r $donetext
\n"; ! } elsif ($lccn) { ! print "$title by $autho= r $donetext
\n"; ! } elsif ($issn) { ! print "$title by $autho= r
$donetext\n"; ! } elsif ($controlnumber) { ! print "$title by $author
$donetext\n"; } else { ! print "Error: Contact steve regarding $title by $author
\n"; } } - print "
\n"; } ! } else { ! opendir(D, "/home/$userid/"); ! my @dirlist=3Dreaddir D; ! foreach $file (@dirlist) { ! (next) if ($file=3D~/^\./); ! (next) if ($file=3D~/^nsmail$/); ! (next) if ($file=3D~/^public_html$/); ! ($file=3D~/\.mrc/) || ($filelist.=3D"$file
\n"); ! (next) unless ($file=3D~/\.mrc$/); ! $file=3D~s/ /\%20/g; ! print "$file
\n"; } print << "EOF"; !

! File to read MARC records from: !

! Other files in home directory:

! $filelist

EOF } print endmenu(); print endpage(); =20 --- 667,1081 ---- } } else { ! #open (F, "$file"); ! #my $data=3D; ! my $data; ! my $name; ! my $z3950=3D0; ! if ($file=3D~/Z-(\d+)/) { ! print << "EOF"; !
!

! Select a New File !

! ! ! \n"; + $record=3Dsubstr($record,24); + my $splitchar2=3Dchr(30); + my $directory=3D0; + my $tagcounter=3D0; + my %tag; + my @record; + my $field; + foreach $field (split(/$splitchar2/, $record)) { + my %field; + ($color eq $lc1) ? ($color=3D$lc2) : ($color=3D$lc1); + unless ($directory) { + $directory=3D$field; + my $itemcounter=3D1; + $counter=3D0; + while ($item=3Dsubstr($directory,0,12)) { + $tag=3Dsubstr($directory,0,3); + $length=3Dsubstr($directory,3,4); + $start=3Dsubstr($directory,7,6); + $directory=3Dsubstr($directory,12); + $tag{$counter}=3D$tag; + $counter++; + } + $directory=3D1; + next; + } + $tag=3D$tag{$tagcounter}; + $tagcounter++; + $field{'tag'}=3D$tag; + $splitchar3=3Dchr(31); + my @subfields=3Dsplit(/$splitchar3/, $field); + $indicator=3D$subfields[0]; + $field{'indicator'}=3D$indicator; + my $firstline=3D1; + unless ($#subfields=3D=3D0) { + my %subfields; + for ($i=3D1; $i<=3D$#subfields; $i++) { + my $text=3D$subfields[$i]; + my $subfieldcode=3Dsubstr($text,0,1); + my $subfield=3Dsubstr($text,1); + if ($subfields{$subfieldcode}) { + my $subfieldlist=3D$subfields{$subfieldcode}; + my @subfieldlist=3D@$subfieldlist; + if ($#subfieldlist>=3D0) { + # print "$tag Adding to array $subfieldcode -- $subfield
\n"; + push (@subfieldlist, $subfield); + } else { + # print "$tag Arraying $subfieldcode -- $subfield
\n"; + @subfieldlist=3D($subfields{$subfieldcode}, $subfield); + } + $subfields{$subfieldcode}=3D\@subfieldlist; + } else { + $subfields{$subfieldcode}=3D$subfield; + } + } + $field{'subfields'}=3D\%subfields; + } + push (@record, \%field); + } + push (@records, \@record); + $counter++; + } + return @records; + } --===============4075269137718178969==--
Select a Record to Import
EOF ! my $id=3D$1; ! my $sth=3D$dbh->prepare("select servers from z3950queue where id=3D$id= "); ! $sth->execute; ! my ($servers) =3D $sth->fetchrow; ! my $serverstring; ! foreach $serverstring (split(/\s+/, $servers)) { ! my ($name, $server, $database, $auth) =3D split(/\//, $serverstring, 4); ! if ($name eq 'LOC') { ! print "Library of Congress
\n"; ! } elsif ($name eq 'NLC') { ! print "National Library of Canada
\n"; ! } else { ! print "$server/$database
\n"; } ! print "
    \n"; ! my $q_server=3D$dbh->quote($serverstring); ! my $sti=3D$dbh->prepare("select numrecords,id,results,startdate,enddate f= rom z3950results where queryid=3D$id and server=3D$q_server"); ! $sti->execute; ! ($numrecords,$resultsid,$data,$startdate,$enddate) =3D $sti->fetchrow; ! if ($sti->rows =3D=3D 0) { ! print "pending..."; ! } elsif ($enddate =3D=3D 0) { ! my $now=3Dtime(); ! my $elapsed=3D$now-$startdate; ! my $elapsedtime=3D''; ! if ($elapsed>60) { ! $elapsedtime=3Dsprintf "%d minutes",($elapsed/60); } else { ! $elapsedtime=3Dsprintf "%d seconds",$elapsed; } ! print "processing... ($elapsedtime)"; ! } elsif ($numrecords) { ! my @records=3Dparsemarcdata($data); ! foreach $record (@records) { ! my ($lccn, $isbn, $issn, $dewey, $author, $title, $place, $publisher, $p= ublicationyear, $volume, $number, @subjects, $note, $controlnumber); ! foreach $field (@$record) { ! if ($field->{'tag'} eq '001') { ! $controlnumber=3D$field->{'indicator'}; } ! if ($field->{'tag'} eq '010') { ! $lccn=3D$field->{'subfields'}->{'a'}; ! $lccn=3D~s/^\s*//; ! ($lccn) =3D (split(/\s+/, $lccn))[0]; } ! if ($field->{'tag'} eq '015') { ! $lccn=3D$field->{'subfields'}->{'a'}; ! $lccn=3D~s/^\s*//; ! $lccn=3D~s/^C//; ! ($lccn) =3D (split(/\s+/, $lccn))[0]; ! } ! if ($field->{'tag'} eq '020') { ! $isbn=3D$field->{'subfields'}->{'a'}; ! ($isbn=3D~/ARRAY/) && ($isbn=3D$$isbn[0]); ! $isbn=3D~s/[^\d]*//g; ! } ! if ($field->{'tag'} eq '022') { ! $issn=3D$field->{'subfields'}->{'a'}; ! $issn=3D~s/^\s*//; ! ($issn) =3D (split(/\s+/, $issn))[0]; ! } ! if ($field->{'tag'} eq '100') { ! $author=3D$field->{'subfields'}->{'a'}; } + if ($field->{'tag'} eq '245') { + $title=3D$field->{'subfields'}->{'a'}; + $title=3D~s/ \/$//; + $subtitle=3D$field->{'subfields'}->{'b'}; + $subtitle=3D~s/ \/$//; + } + } + my $q_isbn=3D$dbh->quote((($isbn) || ('NIL'))); + my $q_issn=3D$dbh->quote((($issn) || ('NIL'))); + my $q_lccn=3D$dbh->quote((($lccn) || ('NIL'))); + my $q_controlnumber=3D$dbh->quote((($controlnumber) || ('NIL'))); + my $sth=3D$dbh->prepare("select * from marcrecorddone where isbn=3D$q_is= bn or issn=3D$q_issn or lccn=3D$q_lccn or controlnumber=3D$q_controlnumber"); + $sth->execute; + my $donetext=3D''; + if ($sth->rows) { + $donetext=3D"DONE"; + } + $sth=3D$dbh->prepare("select * from biblioitems where isbn=3D$q_isbn or = issn=3D$q_issn or lccn=3D$q_lccn"); + $sth->execute; + if ($sth->rows) { + $donetext=3D"DONE"; + } + ($author) && ($author=3D"by $author"); + if ($isbn) { + print "
  • $title$subtitle $author $donetext
    \n"; + } elsif ($lccn) { + print "
  • $title$subtitle $author $donetext
    \n"; + } elsif ($issn) { + print "
  • $title$subtitle $author
    $donetext\n"; + } elsif ($controlnumber) { + print "
  • $title $author
    $donetext\n"; } else { ! print "Error: Contact steve regarding $title by $author
    \n"; } } ! print "

    \n"; ! } else { ! print "No records returned.

    \n"; } + print "

\n"; } ! } else { ! my $sth=3D$dbh->prepare("select marc,name from uploadedmarc where id= =3D$file"); $sth->execute; ! ($data, $name) =3D $sth->fetchrow; ! print << "EOF"; !
!

! Select a New File !

! ! !
Select a Record to Import
fr= om $name
! EOF ! =20 ! my @records=3Dparsemarcdata($data); ! foreach $record (@records) { ! my ($lccn, $isbn, $issn, $dewey, $author, $title, $place, $publisher, $pu= blicationyear, $volume, $number, @subjects, $note, $controlnumber); ! foreach $field (@$record) { ! if ($field->{'tag'} eq '001') { ! $controlnumber=3D$field->{'indicator'}; ! } ! if ($field->{'tag'} eq '010') { ! $lccn=3D$field->{'subfields'}->{'a'}; ! $lccn=3D~s/^\s*//; ! ($lccn) =3D (split(/\s+/, $lccn))[0]; ! } ! if ($field->{'tag'} eq '015') { ! $lccn=3D$field->{'subfields'}->{'a'}; ! $lccn=3D~s/^\s*//; ! $lccn=3D~s/^C//; ! ($lccn) =3D (split(/\s+/, $lccn))[0]; ! } ! if ($field->{'tag'} eq '020') { ! $isbn=3D$field->{'subfields'}->{'a'}; ! ($isbn=3D~/ARRAY/) && ($isbn=3D$$isbn[0]); ! $isbn=3D~s/[^\d]*//g; ! } ! if ($field->{'tag'} eq '022') { ! $issn=3D$field->{'subfields'}->{'a'}; ! $issn=3D~s/^\s*//; ! ($issn) =3D (split(/\s+/, $issn))[0]; ! } ! if ($field->{'tag'} eq '100') { ! $author=3D$field->{'subfields'}->{'a'}; ! } ! if ($field->{'tag'} eq '245') { ! $title=3D$field->{'subfields'}->{'a'}; ! $title=3D~s/ \/$//; ! $subtitle=3D$field->{'subfields'}->{'b'}; ! $subtitle=3D~s/ \/$//; ! } ! } ! my $q_isbn=3D$dbh->quote((($isbn) || ('NIL'))); ! my $q_issn=3D$dbh->quote((($issn) || ('NIL'))); ! my $q_lccn=3D$dbh->quote((($lccn) || ('NIL'))); ! my $q_controlnumber=3D$dbh->quote((($controlnumber) || ('NIL'))); ! my $sth=3D$dbh->prepare("select * from marcrecorddone where isbn=3D$q_isb= n or issn=3D$q_issn or lccn=3D$q_lccn or controlnumber=3D$q_controlnumber"); ! $sth->execute; ! my $donetext=3D''; ! if ($sth->rows) { ! $donetext=3D"DONE"; ! } ! $sth=3D$dbh->prepare("select * from biblioitems where isbn=3D$q_isbn or i= ssn=3D$q_issn or lccn=3D$q_lccn"); ! $sth->execute; ! if ($sth->rows) { ! $donetext=3D"DONE"; ! } ! ($author) && ($author=3D"by $author"); ! if ($isbn) { ! print "$title= $subtitle $author $donetext
\n"; ! } elsif ($lccn) { ! print "$title= $subtitle $author $donetext
\n"; ! } elsif ($issn) { ! print "$title= $subtitle $author
$donetext\n"; ! } elsif ($controlnumber) { ! print "$title by $author
$donetext\n"; ! } else { ! print "Error: Contact steve regarding $title by $author
\n"; ! } } ! } ! print "
\n"; ! } ! } else { !=20 ! SWITCH: ! { ! if ($menu eq 'z3950') { z3950(); last SWITCH; } ! if ($menu eq 'uploadmarc') { uploadmarc(); last SWITCH; } ! if ($menu eq 'manual') { manual(); last SWITCH; } ! mainmenu(); ! } !=20 ! } !=20 !=20 ! sub z3950 { ! $sth=3D$dbh->prepare("select id,term,type,done,numrecords,length(result= s),startdate,enddate,servers from z3950queue order by id desc limit 20"); ! $sth->execute; ! print "Main Menu


\n"; ! print "
\n"; ! print "

Results of Z3950 searches

\n"; ! print "Refresh
\n
    = \n"; ! while (my ($id, $term, $type, $done, $numrecords, $length, $startdate, = $enddate, $servers) =3D $sth->fetchrow) { ! $type=3Duc($type); ! $term=3D~s//>/g; ! if ($done =3D=3D 1) { ! my $elapsed=3D$enddate-$startdate; ! my $elapsedtime=3D''; ! if ($elapsed>60) { ! $elapsedtime=3Dsprintf "%d minutes",($elapsed/60); ! } else { ! $elapsedtime=3Dsprintf "%d seconds",$elapsed; ! } ! if ($numrecords) { ! print "
  • $type= =3D$term Done. $numrecords records found in $elapsedtime.=
    \n"; ! } else { ! print "
  • $type= =3D$term Done. No records found. Search took $elapsedti= me.
    \n"; } ! } elsif ($done =3D=3D -1) { ! my $elapsed=3Dtime()-$startdate; ! my $elapsedtime=3D''; ! if ($elapsed>60) { ! $elapsedtime=3Dsprintf "%d minutes",($elapsed/60); } else { ! $elapsedtime=3Dsprintf "%d seconds",$elapsed; } + print "
  • $ty= pe=3D$term Processing ($elapsedtime)\n"; + } else { + print "
  • $ty= pe=3D$term $done Pending
    \n"; } } ! print "
\n"; ! print "
\n"; ! print << "EOF"; !
! ! !

! ! ! ! ! ! !
Search for MARC records
LOC and NLC
Query Term
ISBN LCCN Title
! Library of Congress
! National Library of Canada=
! !
! !
!=20 !

! EOF ! print "
\n"; ! } !=20 ! sub uploadmarc { ! print "Main Menu
\n"; ! my $sth=3D$dbh->prepare("select id,name from uploadedmarc"); ! $sth->execute; ! print "

Select a set of MARC records

\n
    "; ! while (my ($id, $name) =3D $sth->fetchrow) { ! print "
  • $name=
    \n"; } + print "
\n"; + print "

\n"; + print "\n"; + print " ! ! !
Upload a set of MARC records
Upload a set of MARC records:"; + print $input->start_multipart_form(); + print $input->filefield('uploadmarc'); print << "EOF"; !
! ! Name this set of MARC records:
! !
EOF } +=20 + sub manual { + } +=20 +=20 + sub mainmenu { + print << "EOF"; +

Main Menu

+ + EOF + } +=20 + sub skip { +=20 + #opendir(D, "/home/$userid/"); + #my @dirlist=3Dreaddir D; + #foreach $file (@dirlist) { + # (next) if ($file=3D~/^\./); + # (next) if ($file=3D~/^nsmail$/); + # (next) if ($file=3D~/^public_html$/); + # ($file=3D~/\.mrc/) || ($filelist.=3D"$file
\n"); + # (next) unless ($file=3D~/\.mrc$/); + # $file=3D~s/ /\%20/g; + # print "$file=
\n"; + # } +=20 +=20 + #
+=20 + } print endmenu(); print endpage(); =20 + sub parsemarcdata { + my $data=3Dshift; + my $splitchar=3Dchr(29); + my @records; + my $record; + foreach $record (split(/$splitchar/, $data)) { + my $leader=3Dsubstr($record,0,24); + #print "
Leader:$leader