X-Git-Url: http://jsfdemo.indexdata.com/?a=blobdiff_plain;f=www%2Fz39util.tcl;h=796fdd22259859e5b5db67c91fd2c8c4de2ed825;hb=6e37e8e91bf35cb14c930e8988085cf78f11029a;hp=19b9a0e3f90b095705bdef32c09d0ccdf550e749;hpb=94e0e8ff10cdb5142f983cd76156310461f9eb89;p=egate.git diff --git a/www/z39util.tcl b/www/z39util.tcl index 19b9a0e..796fdd2 100644 --- a/www/z39util.tcl +++ b/www/z39util.tcl @@ -1,5 +1,5 @@ # -# $Id: z39util.tcl,v 1.1 1995/11/06 17:44:23 adam Exp $ +# $Id: z39util.tcl,v 1.2 1995/11/07 14:57:00 adam Exp $ # proc saveState {} { uplevel #0 { @@ -137,18 +137,17 @@ proc display-full {zset no} { } } -proc display-rec {from to dfunc} { +proc display-rec {from to dfunc zz} { global setNo while {$from <= $to} { - eval "$dfunc z39.$setNo $from" + eval "$dfunc $zz.$setNo $from" incr from } } -proc build-query {} { +proc build-query {t} { global targets - global t set op {} set q {} @@ -255,6 +254,129 @@ proc z39search {setNo piggy} { return 1 } +proc init-m-response {i} { + global zstatus + global zleft + + wlog debug "init-m-response" + + set zstatus($i) 1 + incr zleft -1 +} + +proc connect-m-response {i} { + global zstatus + global zleft + + wlog debug "connect-m-response" + z39$i callback [list init-m-response $i] + if {[catch {z39$i init}]} { + set zstatus($i) -1 + incr zleft -1 + } +} + +proc fail-m-response {i} { + global zstatus + global zleft + + wlog debug "fail-m-response" + set zstatus($i) -1 + incr zleft -1 +} + +proc search-m-response {setNo i} { + global zleft + global zstatus + + incr zleft -1 + set zstatus($i) 2 +} + +proc z39msearch {setNo piggy} { + global zleft + global zstatus + global hist + + set not $hist($setNo,0,host) + + for {set i 1} {$i <= $not} {incr i} { + set host $hist($setNo,$i,host) + if {[catch {z39 failback fail-response}]} { + ir z39$i + } + if {[catch {set oldHost [z39$i connect]}]} { + set oldHost "" + } + if {$oldHost != $host} { + catch {z39$i disconnect} + } + z39$i callback [list connect-m-response $i] + z39$i failback [list fail-m-response $i] + } + set zleft 0 + for {set i 1} {$i <= $not} {incr i} { + set oldHost [z39$i connect] + set host $hist($setNo,$i,host) + if {$oldHost == $host} { + set zstatus($i) 1 + continue + } + html "Connecting to target " $host "
\n" + set zstatus($i) -1 + if {![catch {z39$i connect $host}]} { + incr zleft + } + } + while {$zleft > 0} { + wlog debug "Waiting for init response" + if {[catch {zwait zleft 10}]} { + break + } + } + set zleft 0 + for {set i 1} {$i <= $not} {incr i} { + html "host " $hist($setNo,$i,host) ": " + if {$zstatus($i) >= 1} { + html "ok
\n" + ir-set z39$i.$setNo z39$i + set hist($setNo,$i,offset) 0 + eval z39$i.$setNo databaseNames $hist($setNo,$i,database) + z39$i.$setNo preferredRecordSyntax USMARC + z39$i callback [list search-m-response $setNo $i] + + if {$piggy} { + z39$i.$setNo largeSetLowerBound 999999 + z39$i.$setNo smallSetUpperBound 0 + z39$i.$setNo mediumSetPresentNumber $hist($setNo,maxPresent) + } else { + z39$i.$setNo largeSetLowerBound 2 + z39$i.$setNo smallSetUpperBound 0 + z39$i.$setNo mediumSetPresentNumber 0 + } + set zstatus($i) 1 + wlog debug "search " $hist($setNo,$i,query) + z39$i.$setNo search $hist($setNo,$i,query) + incr zleft + } else { + html "fail
\n" + } + } + while {$zleft > 0} { + wlog debug "Waiting for search response" + if {[catch {zwait zleft 30}]} { + break + } + } + for {set i 1} {$i <= $not} {incr i} { + if {$zstatus($i) != 2} continue + set status [z39$i.$setNo responseStatus] + if {[lindex $status 0] != "NSD"} { + set hist($setNo,$i,offset) [z39$i.$setNo numberOfRecordsReturned] + } + } +} + proc z39present {setNo setOffset setMax dfunc} { global hist global sessionWait