X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=www%2Fz39util.tcl;h=451fb70af4e1c44487b44c1c021747b187c2216c;hb=2e38b5dbea87903010208d15a8a9073d2049bbae;hp=ca41b996fb5c25c49afe78562da19d1fe5e3d1b7;hpb=fa0ddb755d3a836e4e13cc05a6ba3eb6b0010958;p=egate.git diff --git a/www/z39util.tcl b/www/z39util.tcl index ca41b99..451fb70 100644 --- a/www/z39util.tcl +++ b/www/z39util.tcl @@ -1,5 +1,5 @@ # -# $Id: z39util.tcl,v 1.24 1996/01/24 14:14:20 adam Exp $ +# $Id: z39util.tcl,v 1.29 1996/01/31 15:56:37 adam Exp $ # proc saveState {} { uplevel #0 { @@ -105,6 +105,8 @@ proc display-brief {zset no tno} { set publisher [$zset getMarc $no field 260 * b] set year [$zset getMarc $no field 260 * c] } ] } { + html { } set p 0 foreach a $author { if {$p} { @@ -130,32 +132,20 @@ proc display-brief {zset no tno} { if {$p} { html ": " } - html {} set nope 1 foreach v $title { html $v set nope 0 } if {$nope} { - html {No title} - } - html { } - foreach v $cover { - html $v + set v [join $cover ""] + if {[string length $v] > 40} { + html [string range $v 0 38] "..." + } else { + html $v + } } - html {
} - foreach v $location { - html " $v" - } - foreach v $publisher { - html " $v" - } - foreach v $year { - html " $v" - } - html { --
} - html "view full" + html { } } html "
\n" } @@ -462,13 +452,13 @@ proc build-query {t ilines} { } 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 [egw_form logic$i] } @@ -505,45 +495,46 @@ proc z39scan {setNo scanNo tno scanLines scanPos cache} { set zs $zz.s$scanNo.$setNo $zz callback ok-response $zz failback fail-response - if {$oldHost != $host} { + set thisHost [splitHostSpec $host] + if {$oldHost != $thisHost} { catch [list $zz disconnect] set sessionWait 0 - if {[catch [list $zz connect $host]]} { - displayError "Cannot connect to target" $host + if {[catch [list $zz connect $thisHost]]} { + displayError "Cannot connect to target" $thisHost return 0 } elseif {$sessionWait == 0} { if {[catch {egw_wait sessionWait 300}]} { $zz disconnect - displayError "Cannot connect to target" $host + displayError "Cannot connect to target" $thisHost return 0 } if {$sessionWait != 1} { - displayError "Cannot connect to target" $host + displayError "Cannot connect to target" $thisHost return 0 } } $zz idAuthentication $idAuth set sessionWait 0 if {[catch {$zz init}]} { - displayError "Cannot initialize target" $host + displayError "Cannot initialize target" $thisHost $zz disconnect return 0 } if {[catch {egw_wait sessionWait 60}]} { - displayError "Cannot initialize target" $host + displayError "Cannot initialize target" $thisHost $zz disconnect return 0 } if {$sessionWait != "1"} { - displayError "Cannot initialize target" $host + displayError "Cannot initialize target" $thisHost $zz disconnect return 0 } if {![$zz initResult]} { set u [$zz userInformationField] $zz disconnect - displayError "Cannot initialize target $host" $u + displayError "Cannot initialize target $thisHost" $u return 0 } } else { @@ -560,6 +551,7 @@ proc z39scan {setNo scanNo tno scanLines scanPos cache} { $zz callback [list scan-response $zs] + egw_log debug "scan: ${scanAttr} ${scanTerm}" set sessionWait 0 $zs scan "${scanAttr} ${scanTerm}" @@ -609,16 +601,31 @@ proc display-scan {setNo scanNo tno} { set hist($setNo,[expr $scanNo + 1],scanTerm) $t } } + html {} + html {} \n + for {set i 0} {$i < $m} {incr i} { - regsub -all {\ } [lindex [$zs scanLine $i] 1] + tterm - html {} + html {} \n } + html {= [z39$i.$setNo resultCount]} { + egw_log debug "search-m-response4" + incr zleft -1 + set zstatus($i) 2 + return + } + egw_log debug "search-m-response5" + if {$nor >= $number} { + egw_log debug "search-m-response6" + incr zleft -1 + set zstatus($i) 2 + return + } + egw_log debug "search-m-response7" + set start [expr $start + $nor] + set number [expr $number - $nor] + if {[expr $start + $number - 1] > [z39$i.$setNo resultCount]} { + set number [expr [z39$i.$setNo resultCount] - $start + 1] + } + z39$i callback [list search-m-response $setNo $i $start $number] + egw_log debug "mpresent start=$number number=$number" + z39$i.$setNo present $start $number } -proc z39msearch {setNo piggy elements} { +proc z39msearch {setNo elements start number cache} { global zleft global zstatus global hist @@ -791,13 +833,12 @@ proc z39msearch {setNo piggy elements} { for {set i 1} {$i <= $not} {incr i} { set host $hist($setNo,$i,host) - if {[catch {z39 failback fail-response}]} { + if {[catch [list z39$i failback fail-m-response $i]]} { ir z39$i } - if {[catch {set oldHost [z39$i connect]}]} { - set oldHost "" - } - if {$oldHost != $host} { + set oldHost [z39$i connect] + set thisHost [splitHostSpec $host] + if {$oldHost != $thisHost} { catch {z39$i disconnect} } z39$i callback [list connect-m-response $i] @@ -807,28 +848,34 @@ proc z39msearch {setNo piggy elements} { 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 + set thisHost [splitHostSpec $host] + if {$oldHost == $thisHost} { continue } + egw_log debug "old=$oldHost this=$thisHost" z39$i idAuthentication $hist($setNo,$i,idAuthentication) - html "Connecting to target " $host "
\n" + html "Connecting to target " $thisHost "
\n" set zstatus($i) -1 - if {![catch {z39$i connect $host}]} { + if {![catch {z39$i connect $thisHost}]} { incr zleft } } while {$zleft > 0} { egw_log debug "Waiting for init response" - if {[catch {egw_wait zleft 10}]} { + if {[catch {egw_wait zleft 20}]} { 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" + html "host " [splitHostSpec $hist($setNo,$i,host)] ": " + egw_log debug "i=$i zstatus=$zstatus($i)" + if {$zstatus($i) < 1} { + html "fail
\n" + continue + } + if {[catch [list z39$i.$setNo preferredRecordSyntax USMARC]]} { + 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) @@ -840,38 +887,74 @@ proc z39msearch {setNo piggy elements} { } z39$i.$setNo smallSetElementSetNames $thisElements z39$i.$setNo mediumSetElementSetNames $thisElements + z39$i.$setNo elementSetNames $thisElements z39$i.$setNo recordElements $thisElements z39$i.$setNo preferredRecordSyntax USMARC - z39$i callback [list search-m-response $setNo $i] + z39$i callback [list search-m-response $setNo $i $start $number] - if {$piggy} { + if {$start == 1} { z39$i.$setNo largeSetLowerBound 999999 z39$i.$setNo smallSetUpperBound 0 - z39$i.$setNo mediumSetPresentNumber $hist($setNo,maxPresent) + z39$i.$setNo mediumSetPresentNumber $number } else { z39$i.$setNo largeSetLowerBound 2 z39$i.$setNo smallSetUpperBound 0 z39$i.$setNo mediumSetPresentNumber 0 } set zstatus($i) 1 - egw_log debug "search " $hist($setNo,$i,query) + incr zleft + egw_log debug "setNo=$setNo msearch " $hist($setNo,$i,query) z39$i.$setNo search $hist($setNo,$i,query) + } elseif {[z39$i.$setNo resultCount] >= $start} { + if {[expr $start + $number - 1] > [z39$i.$setNo resultCount]} { + set tnumber [expr [z39$i.$setNo resultCount] - $start + 1] + } else { + set tnumber $number + } + 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 elementSetNames $thisElements + z39$i.$setNo recordElements $thisElements + + for {set n 0} {$n < $tnumber} {incr n} { + if {[z39$i.$setNo type [expr $start + $n]] == ""} { + if {$n > 0} { + egw_log debug "failed on $n" + } + break + } + } + if {$n == $tnumber} { + html "cached
\n" + continue + } + + html "present
\n" + z39$i.$setNo preferredRecordSyntax USMARC + z39$i callback [list search-m-response $setNo $i $start $tnumber] incr zleft + egw_log debug "mpresent start=$start number=$tnumber" + z39$i.$setNo present $start $tnumber } else { - html "fail
\n" + html "ok
\n" } } while {$zleft > 0} { - egw_log debug "Waiting for search response" - if {[catch {egw_wait zleft 30}]} { + egw_log debug "Waiting for search/present response" + if {[catch {egw_wait zleft 60}]} { 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"} { + if {0 && [lindex $status 0] != "NSD"} { set hist($setNo,$i,offset) [z39$i.$setNo numberOfRecordsReturned] } } @@ -938,45 +1021,92 @@ proc z39history {} { global env global sessionId global targets + global html3 if {![info exists nextSetNo]} { return } - html "

History


\n" + html "

History


\n" + if {$html3} { + html {
Scan term} + html {Hits} + html {
} + if {0} { + regsub -all {\ } [lindex [$zs scanLine $i] 1] + tterm + html {} + } else { + regsub -all {\ } [lindex [$zs scanLine $i] 1] + tterm + html {} + } html [lindex [$zs scanLine $i] 1] - html {: } + html {} + html {} html [lindex [$zs scanLine $i] 2] - html "
\n" + html {
} + html {} "\n" + } else { + html {
} "\n" + } for {set setNo 1} {$setNo < $nextSetNo} {incr setNo} { if {$hist($setNo,scan) > 0} continue set host $hist($setNo,host) - html {
} [lindex $targets($host) 0] - if {[llength [lindex $targets($host) 1]] > 1} { - html ": " - foreach b $hist($setNo,database) { - html " $b" + if {$html3} { + html {
} "\n" + } } - html "\n" + if {$html3} { + html {
Target} + html {Database} + html {Hits} + html {Query} + html {
} + } else { + html {
} + } + html [lindex $targets($host) 0] + if {$html3} { + html {
} [join $hist($setNo,database)] + } else { + if {[llength [lindex $targets($host) 1]] > 1} { + html ": " + foreach b $hist($setNo,database) { + html " $b" + } } + html {. } + } + if {$html3} { + html {} } - html {. } - if {[info exists hist($setNo,hits)]} { html { Result: } $hist($setNo,hits) { hits.} + if {1} { + html {">} $hist($setNo,hits) {} + } else { + html {">Result: } $hist($setNo,hits) { hits.} + } + } else { + if {$html3} { + html {Failed} + } else { + html {Search failed.} + } + } + if {$html3} { + html {} } else { - html {Search failed.} + html "
\n" } - html "
\n" html { Query: } + html / $sessionId {/query.egw/} $host + $setNo + if {$html3} { + html {">} + } else { + html {">Query: } + } set op {} for {set i 1} {$i <= 3} {incr i} { if {[string length $hist($setNo,form,entry$i)] > 0} { html " " [join $op " "] " " - html $hist($setNo,form,menu$i) "=" $hist($setNo,form,entry$i) + html [join $hist($setNo,form,menu$i)] "=" + html $hist($setNo,form,entry$i) set op $hist($setNo,form,logic$i) } } + if {$html3} { + html {

} + } else { + html {} + } + html "\n" } proc displayError {msga msgb} { @@ -991,10 +1121,11 @@ proc displayError {msga msgb} { proc button-europagate {} { global useIcons + html {} if {$useIcons} { html {Europagate} } else { - html {Europagate | } + html {Europagate | } } } @@ -1007,9 +1138,9 @@ proc button-define-target {more} { html / $sessionId {/tform.egw} if {$useIcons} { html {">} + html {alt="Define Target" border=0>} } else { - html {">New Target} + html {">Define Target} if {$more} { html " | \n" } else { @@ -1022,9 +1153,15 @@ proc button-new-target {more} { global useIcons global env global sessionId + global mMode html {} @@ -1065,9 +1202,16 @@ proc button-new-query {more setNo} { global env global sessionId global hist + global mMode html {} + html / $sessionId + if {$mMode} { + html {/mquery.egw/} $setNo + } else { + html {/query.egw/} $hist($setNo,host) + $setNo + } + html {">} if {$useIcons} { html {} @@ -1105,7 +1249,20 @@ proc button-scan-window {more setNo} { proc maintenance {} { html {


This page is maintained by } html { Peter Wad Hansen .} - html {Last modified 24. january 1996.
} + html {Last modified 29. january 1996.
} html { This and the following pages are under construction and } html {will continue to be so until the end of January 1996.} } + +proc splitHostSpec {host} { + set i [string last . $host] + if {$i > 1} { + incr i -1 + return [string range $host 0 $i] + } + return $host +} + +proc mergeHostSpec {host databases} { + return ${host}.[join $databases -] +}