X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=www%2Fz39util.tcl;h=23fabd6bc6b7fb7bbb3d7393625dcf4b823f14ea;hb=5bbe4c302d2d105aea7806317e9f31d5773a9536;hp=82380f1316a1e7b6fb4c2c0a8cb96fb10b660282;hpb=852b4caac48a2542af95c577dab306db1bda56f1;p=egate.git diff --git a/www/z39util.tcl b/www/z39util.tcl index 82380f1..23fabd6 100644 --- a/www/z39util.tcl +++ b/www/z39util.tcl @@ -1,5 +1,5 @@ # -# $Id: z39util.tcl,v 1.6 1995/11/09 15:24:37 adam Exp $ +# $Id: z39util.tcl,v 1.10 1995/11/14 09:53:16 adam Exp $ # proc saveState {} { uplevel #0 { @@ -26,16 +26,17 @@ proc saveState {} { } } -proc search-response {sno} { +proc search-response {zz} { global sessionWait - set status [z39.$sno responseStatus] + set status [$zz responseStatus] if {[lindex $status 0] == "NSD"} { - z39.$sno nextResultSetPosition 0 + $zz nextResultSetPosition 0 set code [lindex $status 1] set msg [lindex $status 2] set addinfo [lindex $status 3] - html "

Error NSD$code: $msg: $addinfo


\n" + displayError "Diagnostic message" \ + "$msg: $addinfo
\n(error code $code)" set sessionWait -2 } else { set sessionWait 1 @@ -52,7 +53,7 @@ proc fail-response {} { set sessionWait -1 } -proc display-brief {zset no} { +proc display-brief {zset no tno} { global env global setNo global sessionId @@ -70,7 +71,7 @@ proc display-brief {zset no} { if {$type != "DB"} { return } - html "${no} " + html "${no}" set rtype [$zset recordType $no] if {$rtype == "SUTRS"} { html [join [$zset getSutrs $no]] @@ -82,13 +83,13 @@ proc display-brief {zset no} { set year [lindex [$zset getMarc $no field 260 * c] 0] } ] } { html { } $title {} " ${year} " } html "
\n" } -proc display-raw {zset no} { +proc display-raw {zset no tno} { set type [$zset type $no] if {$type == "SD"} { set err [lindex [$zset diag $no] 1] @@ -224,7 +225,7 @@ proc dl-marc-field-rec {zset no tag lead start stop startid sep} { } } -proc display-full {zset no} { +proc display-full {zset no tno} { set type [$zset type $no] if {$type == "SD"} { set err [lindex [$zset diag $no] 1] @@ -269,14 +270,45 @@ proc display-full {zset no} { dl-marc-field $zset $no 260 * "Publisher" {} " " dl-marc-field $zset $no 300 * "Physical Description" {} " " - dl-marc-field $zset $no 500 a "Notes" {} ", " + dl-marc-field-rec $zset $no 500 "Notes" "" "
\n" "a" ", " dl-marc-field-rec $zset $no 510 "References" "" "
\n" "a" ", " + dl-marc-field-rec $zset $no 511 "Participant note" "" "
\n" "a" ", " + + dl-marc-field $zset $no 513 a "Report type" {} ", " + dl-marc-field $zset $no 513 b "Period covered" {} ", " + dl-marc-field-rec $zset $no 515 "Numbering notes" "" "
\n" "a" ", " + dl-marc-field-rec $zset $no 516 "Data notes" "" "
\n" "a" ", " + dl-marc-field-rec $zset $no 518 "Date/time notes" "" "
\n" "a" ", " + dl-marc-field $zset $no 350 a "Price" {} ", " dl-marc-field $zset $no 362 a "Dates of publication" {} ", " dl-marc-field $zset $no 850 a "Holdings" {} ", " + dl-marc-field-rec $zset $no 270 "Contact name" "" "
\n" p ", " + if {0} { + set n [dl-marc-field $zset $no 270 p "Contact name" {} ", "] + if {$n > 0} { + html "\n
\n" + + if {0} { + dl-marc-field $zset $no 270 a "Street" {} ", " + dl-marc-field $zset $no 270 b "City" {} ", " + dl-marc-field $zset $no 270 c "State" {} ", " + dl-marc-field $zset $no 270 e "Zip code" {} ", " + dl-marc-field $zset $no 270 d "Country" {} ", " + dl-marc-field $zset $no 270 m "Network address" {} ", " + dl-marc-field $zset $no 301 a "Service hours" {} ", " + dl-marc-field $zset $no 270 k "Phone" {} ", " + dl-marc-field $zset $no 270 l "Fax" {} ", " + } else { + dl-marc-field $zset $no 270 {[abcedmakl]} "Address" {} "
\n" + } + + html "\n
\n" + } + } dl-marc-field $zset $no 010 a "LC control number" {} ", " dl-marc-field $zset $no 010 b "NUCMC control number" {} ", " dl-marc-field $zset $no 020 a "ISBN" {} ", " @@ -290,19 +322,29 @@ proc display-full {zset no} { } html {
} [join $sp] "\n" } - dl-marc-field $zset $no 037 * "Acquisition" {} "
\n" + dl-marc-field $zset $no 037 {[abc]} "Acquisition" {} "
\n" + dl-marc-field $zset $no 037 {[f6]} "Form of issue" {} "
\n" + dl-marc-field $zset $no 537 * "Source of data" {} "
\n" + dl-marc-field $zset $no 538 * "System details" {} "
\n" dl-marc-field $zset $no 787 {[rstw6]} "Related information" {} "
\n" dl-marc-field $zset $no 001 * "Local control number" {} ", " html "\n" } -proc display-rec {from to dfunc zz} { +proc display-rec {from to dfunc tno} { global setNo - while {$from <= $to} { - eval "$dfunc $zz.$setNo $from" - incr from + if {$tno > 0} { + while {$from <= $to} { + eval "$dfunc z39${tno}.${setNo} $from $tno" + incr from + } + } else { + while {$from <= $to} { + eval "$dfunc z39.${setNo} $from 0" + incr from + } } } @@ -312,8 +354,7 @@ proc build-query {t} { set op {} set q {} for {set i 1} {$i < 4} {incr i} { - set term1 [wform entry$i] - regsub {\+} $term1 " " term + set term [wform entry$i] if {$term != ""} { set field [wform menu$i] foreach x [lindex $targets($t) 2] { @@ -323,13 +364,13 @@ proc build-query {t} { } switch $op { And - { set q "@and $q ${attr} \{${term}\}" } + { set q "@and $q ${attr} ${term}" } Or - { set q "@or $q ${attr} \{${term}\}" } + { set q "@or $q ${attr} ${term}" } {And not} - { set q "@not $q ${attr} \{${term}\}" } + { set q "@not $q ${attr} ${term}" } {} - { set q "${attr} \{${term}\}" } + { set q "${attr} ${term}" } } set op [wform logic$i] } @@ -337,92 +378,123 @@ proc build-query {t} { return $q } -proc z39search {setNo piggy} { +proc z39search {setNo piggy tno elements} { global hist global sessionWait + global targets - set host $hist($setNo,host) - if {[catch {z39 failback fail-response}]} { - ir z39 + if {$tno > 0} { + set zz z39$tno + set host $hist($setNo,$tno,host) + set idAuth $hist($setNo,$tno,idAuthentication) + set database $hist($setNo,$tno,database) + set query $hist($setNo,$tno,query) + } else { + set zz z39 + set host $hist($setNo,host) + set idAuth $hist($setNo,idAuthentication) + set database $hist($setNo,database) + set query $hist($setNo,query) + } + if {[catch [list $zz failback fail-response]]} { + ir $zz } - if {[catch {set oldHost [z39 connect]}]} { + if {[catch [list set oldHost [$zz connect]]]} { set oldHost "" } - z39 callback ok-response - z39 failback fail-response + $zz callback ok-response + $zz failback fail-response if {$oldHost != $host} { - catch {z39 disconnect} + catch [list $zz disconnect] - html "Connecting to target " $host "
\n" set sessionWait 0 - if {[catch {z39 connect $host}]} { - html "Cannot connect to target ${host}
\n" + if {[catch [list $zz connect $host]]} { + displayError "Cannot connect to target" $host return 0 } elseif {$sessionWait == 0} { zwait sessionWait if {$sessionWait != 1} { - html "Cannot connect to target ${host}
\n" + displayError "Cannot connect to target" $host return 0 } } - z39 idAuthentication $hist($setNo,idAuthentication) + $zz idAuthentication $idAuth set sessionWait 0 - if {[catch {z39 init}]} { - html "Cannot initialize with target ${host}
\n" + if {[catch {$zz init}]} { + displayError "Cannot initialize target" $host return 0 } if {[catch {zwait sessionWait 60}]} { - html "Cannot initialize with target ${host}
\n" - z39 disconnect + displayError "Cannot initialize target" $host + $zz disconnect return 0 } if {$sessionWait != "1"} { - html "Cannot initialize with target ${host}
\n" - z39 disconnect + displayError "Cannot initialize target" $host + $zz disconnect return 0 } + if {![$zz initResult]} { + set u [$zz userInformationField] + $zz disconnect + displayError "Cannot initialize target $host" $u + return 0 + } + } else { + if {![catch [list $zz.$setNo smallSetUpperBound 0]]} { + return 1 + } } - if {![catch {z39.$setNo smallSetUpperBound 0}]} { - return 1 + ir-set $zz.$setNo $zz + + if {![lindex $targets($host) 5]} { + set elements {} } - ir-set z39.$setNo z39 - eval z39.$setNo databaseNames $hist($setNo,database) + $zz.$setNo smallSetElementSetNames $elements + $zz.$setNo mediumSetElementSetNames $elements + $zz.$setNo recordElements $elements - z39.$setNo preferredRecordSyntax USMARC + eval $zz.$setNo databaseNames $database - z39 callback search-response $setNo + $zz.$setNo preferredRecordSyntax USMARC + + $zz callback [list search-response $zz.$setNo] if {$piggy} { - z39.$setNo largeSetLowerBound 999999 - z39.$setNo smallSetUpperBound 0 - z39.$setNo mediumSetPresentNumber $hist($setNo,maxPresent) + $zz.$setNo largeSetLowerBound 999999 + $zz.$setNo smallSetUpperBound 0 + $zz.$setNo mediumSetPresentNumber $hist($setNo,maxPresent) } else { - z39.$setNo largeSetLowerBound 2 - z39.$setNo smallSetUpperBound 0 - z39.$setNo mediumSetPresentNumber 0 + $zz.$setNo largeSetLowerBound 2 + $zz.$setNo smallSetUpperBound 0 + $zz.$setNo mediumSetPresentNumber 0 } set sessionWait 0 - z39.$setNo search $hist($setNo,query) + $zz.$setNo search $query if {[catch {zwait sessionWait 600}]} { + wlog debug "timeout/cancel in present" + displayError "Timeout in search" {} html "\n" - z39 disconnect + $zz disconnect return 0 } if {$sessionWait != 1} { + displayError "Search fail" "Connection closed" html "\n" - z39 disconnect + $zz disconnect return 0 } - set status [z39.$setNo responseStatus] + set status [$zz.$setNo responseStatus] if {[lindex $status 0] == "NSD"} { set code [lindex $status 1] set msg [lindex $status 2] set addinfo [lindex $status 3] - html "

Error NSD$code: $msg: $addinfo


\n" + displayError "Diagnostic message" \ + "$msg: $addinfo\n
(error code $code)" return 0 } - set hist($setNo,hits) [z39.$setNo resultCount] + set hist($setNo,hits) [$zz.$setNo resultCount] return 1 } @@ -465,10 +537,11 @@ proc search-m-response {setNo i} { set zstatus($i) 2 } -proc z39msearch {setNo piggy} { +proc z39msearch {setNo piggy elements} { global zleft global zstatus global hist + global targets set not $hist($setNo,0,host) @@ -494,6 +567,7 @@ proc z39msearch {setNo piggy} { set zstatus($i) 1 continue } + z39$i idAuthentication $hist($setNo,$i,idAuthentication) html "Connecting to target " $host "
\n" set zstatus($i) -1 if {![catch {z39$i connect $host}]} { @@ -514,6 +588,16 @@ proc z39msearch {setNo piggy} { ir-set z39$i.$setNo z39$i set hist($setNo,$i,offset) 0 eval z39$i.$setNo databaseNames $hist($setNo,$i,database) + + if {![lindex $targets($hist($setNo,$i,host)) 5]} { + set thisElements {} + } else { + set thisElements $elements + } + z39$i.$setNo smallSetElementSetNames $thisElements + z39$i.$setNo mediumSetElementSetNames $thisElements + z39$i.$setNo recordElements $thisElements + z39$i.$setNo preferredRecordSyntax USMARC z39$i callback [list search-m-response $setNo $i] @@ -549,33 +633,55 @@ proc z39msearch {setNo piggy} { } } -proc z39present {setNo setOffset setMax dfunc} { +proc z39present {setNo tno setOffset setMax dfunc elements} { global hist global sessionWait + global targets + + if {$tno > 0} { + set zz z39$tno + set host $hist($setNo,$tno,host) + } else { + set zz z39 + set host $hist($setNo,host) + } + + if {![lindex $targets($host) 5]} { + set elements {} + } + $zz.$setNo elementSetNames $elements + $zz.$setNo recordElements $elements set toGet [expr 1 + $setMax - $setOffset] + + $zz callback [list search-response $zz.$setNo] + while {$setMax > 0 && $toGet > 0} { for {set got 0} {$got < $toGet} {incr got} { - if {[z39.$setNo type [expr $setOffset + $got]] == ""} { + if {[$zz.$setNo type [expr $setOffset + $got]] == ""} { break } } if {$got < $toGet} { set sessionWait 0 - z39.$setNo present $setOffset $toGet + $zz.$setNo present $setOffset $toGet if {[catch {zwait sessionWait 300}]} { - z39 disconnect + wlog debug "timeout/cancel in present" + $zz disconnect break } + if {$sessionWait == "0"} { + $zz disconnect + } if {$sessionWait != "1"} { break } - set got [z39.$setNo numberOfRecordsReturned] + set got [$zz.$setNo numberOfRecordsReturned] if {$got <= 0} { break } } - display-rec $setOffset [expr $got + $setOffset - 1] $dfunc z39 + display-rec $setOffset [expr $got + $setOffset - 1] $dfunc $tno set setOffset [expr $got + $setOffset] set toGet [expr 1 + $setMax - $setOffset] wflush @@ -596,7 +702,7 @@ proc z39history {} { for {set setNo 1} {$setNo < $nextSetNo} {incr setNo} { html {
} [lindex $targets($hist($setNo,host)) 0] if {[llength $hist($setNo,database)] > 1} { html ": " @@ -615,3 +721,13 @@ proc z39history {} { } html "\n" } + +proc displayError {msga msgb} { + html "

\n" + html {} + html "

" $msga "

\n" + if {$msgb != ""} { + html "

" $msgb "

\n" + } + html "

\n" +}