#
-# $Id: z39util.tcl,v 1.31 1996/02/20 16:07:39 adam Exp $
+# $Id: z39util.tcl,v 1.35 1996/03/05 18:50:26 adam Exp $
#
proc saveState {} {
uplevel #0 {
global setNo
global sessionId
-
html {<li>}
set type [$zset type $no]
if {$type == "SD"} {
html [join [$zset getSutrs $no]]
html "<br>\n"
return
- }
+ }
+ if {$rtype == "WAIS"} {
+ html { <a href="http:} $env(SCRIPT_NAME) /
+ html $sessionId {/showfull.egw/} $setNo + $tno + $no + full {">}
+ html [join [$zset getWAIS $no headline]]
+ html {</a>}
+ html "<br>\n"
+ return
+ }
if {![catch {
set author [$zset getMarc $no field 100 * a]
set corp [$zset getMarc $no field 110 * a]
}
}
+proc display-full-wais {zset no} {
+ set i 0
+ set element junk
+ htmlToken l [join [$zset getWAIS $no text]] {
+ if {[string compare [string index $l 0] {<}]} {
+ set data($element) $l
+ continue
+ }
+ switch -exact $l {
+ <ti> {
+ set element title
+ }
+ <dm> {
+ set element dateOfLastModification
+ }
+ <ci> {
+ set element controlIdentifier
+ }
+ <lc> {
+ set element lastChecked
+ }
+ <by> {
+ set element bytes
+ }
+ <avli> {
+ set element linkage
+ }
+ <cr> {
+ incr i
+ }
+ <li> {
+ set element "$i,linkage"
+ }
+ <cp> {
+ set element "$i,title"
+ }
+ default {
+ set element junk
+ }
+ }
+ }
+ html {Title: } {<a href="} $data(linkage) {">} $data(title) "</a><br>\n"
+ html {URL: } $data(linkage) "<br>\n"
+ html {Score: } [$zset getWAIS $no score] "<br>\n"
+ html {Lines: } [$zset getWAIS $no lines] "<br>\n"
+ if {[info exists data(bytes)]} {
+ html {Bytes: } $data(bytes) "<br>\n"
+ }
+ if {[info exists data(dateOfLastModification)]} {
+ html {Last modified: } $data(dateOfLastModification) "<br>\n"
+ }
+ if {[info exists data(lastChecked)]} {
+ html {Last checked: } $data(lastChecked) "<br>\n"
+ }
+ html "<ul>\n"
+ for {set i 1} {[info exists data($i,linkage)]} {incr i} {
+ html {<li><a href="} $data($i,linkage) {">}
+ html $data($i,title) "</a><br>\n"
+ html "URL: " $data($i,linkage)
+ }
+ html "</ul>\n"
+}
+
proc display-full {zset no tno} {
set type [$zset type $no]
if {$type == "SD"} {
if {$rtype == "SUTRS"} {
html [join [$zset getSutrs $no]] "<br>\n"
return
- }
+ }
+ if {$rtype == "WAIS"} {
+ display-full-wais $zset $no
+ return
+ }
if {[catch {set r [$zset getMarc $no line * * *]}]} {
html "Unknown record type: $rtype <br>\n"
return
set q {}
for {set i 1} {$i <= $ilines} {incr i} {
set term [join [egw_form entry$i]]
+ if {[lindex $targets($t) 6] == "1"} {
+ if {[string length $op] == 0} {
+ set q $term
+ } else {
+ set q "$term $q"
+ }
+ set op [egw_form logic$i]
+ continue
+ }
if {[string length $term] > 0} {
set field [join [egw_form menu$i]]
foreach x [lindex $targets($t) 2] {
set scanAttr $hist($setNo,scanAttr)
set scanTerm $hist($setNo,$scanNo,scanTerm)
}
- if {[catch [list $zz failback fail-response]]} {
- ir $zz
- }
+ mkAssoc $zz $host
if {[catch [list set oldHost [$zz connect]]]} {
set oldHost ""
}
$zz callback ok-response
$zz failback fail-response
set thisHost [splitHostSpec $host]
- if {$oldHost != $thisHost} {
+ if {[string compare $oldHost $thisHost]} {
catch [list $zz disconnect]
set sessionWait 0
set database $hist($setNo,database)
set query $hist($setNo,query)
}
- if {[catch [list $zz failback fail-response]]} {
- ir $zz
- }
+ mkAssoc $zz $host
if {[catch [list set oldHost [$zz connect]]]} {
set oldHost ""
}
$zz callback ok-response
$zz failback fail-response
set thisHost [splitHostSpec $host]
- if {$oldHost != $thisHost} {
+ if {[string compare $oldHost $thisHost]} {
catch [list $zz disconnect]
set sessionWait 0
$zz disconnect
return 0
}
- if {[catch {egw_wait sessionWait 60}]} {
+ if {$sessionWait == 0 && [catch {egw_wait sessionWait 60}]} {
displayError "Cannot initialize target" $thisHost
$zz disconnect
return 0
displayError "Cannot initialize target $thisHost" $u
return 0
}
- } else {
- if {[info exists hist($setNo,hits)] && \
- ![catch [list $zz.$setNo smallSetUpperBound 0]]} {
- return 1
+ } elseif {![catch [list $zz.$setNo smallSetUpperBound 0]]} {
+ if {$tno > 0} {
+ if {[info exists hist($setNo,$tno,hits)]} {
+ return 1
+ }
+ } else {
+ if {[info exists hist($setNo,hits)]} {
+ return 1
+ }
}
-
}
- ir-set $zz.$setNo $zz
+ if {[lindex $targets($host) 6] == "1"} {
+ wais-set $zz.$setNo $zz
+ } else {
+ ir-set $zz.$setNo $zz
+ }
if {![lindex $targets($host) 5]} {
set elements {}
}
}
set sessionWait 0
egw_log debug "search: $query"
- $zz.$setNo search $query
+ if {[catch {$zz.$setNo search $query}]} {
+ displayError "Search fail" "Connection closed"
+ html "</body></html>\n"
+ $zz disconnect
+ return 0
+ }
if {[catch {egw_wait sessionWait 60}]} {
egw_log debug "timeout/cancel in search"
egw_log debug "search-m-response"
set status [z39$i.$setNo responseStatus]
egw_log debug "search-m-response1"
- if {[lindex $status 0] != "DBOSD"} {
+ if {[lindex $status 0] == "OK"} {
+ set nor 0
+ } elseif {[lindex $status 0] == "DBOSD"} {
+ set nor [z39$i.$setNo numberOfRecordsReturned]
+ } else {
egw_log debug "search-m-response2"
incr zleft -1
set zstatus($i) 2
return
}
- set nor [z39$i.$setNo numberOfRecordsReturned]
+ set hist($setNo,$i,hits) [z39$i.$setNo resultCount]
egw_log debug "search-m-response3"
set hist($setNo,$i,offset) [expr $start + $nor -1]
if {[expr $nor + $start] > [z39$i.$setNo resultCount]} {
egw_log debug "z39msearch start=$start number=$number elements=$elements"
for {set i 1} {$i <= $not} {incr i} {
set host $hist($setNo,$i,host)
- if {[catch [list z39$i failback fail-m-response $i]]} {
- ir z39$i
- }
+ mkAssoc z39$i $host
set oldHost [z39$i connect]
set thisHost [splitHostSpec $host]
- if {$oldHost != $thisHost} {
+ if {[string compare $oldHost $thisHost]} {
catch {z39$i disconnect}
}
z39$i callback [list connect-m-response $i]
set oldHost [z39$i connect]
set host $hist($setNo,$i,host)
set thisHost [splitHostSpec $host]
- if {$oldHost == $thisHost} {
+ if {![string compare $oldHost $thisHost]} {
continue
}
egw_log debug "old=$oldHost this=$thisHost"
}
set zleft 0
for {set i 1} {$i <= $not} {incr i} {
+ set host $hist($setNo,$i,host)
if {$debug} {
- html "host " [splitHostSpec $hist($setNo,$i,host)] ": "
+ html "host " [splitHostSpec $host] ": "
}
egw_log debug "i=$i zstatus=$zstatus($i)"
if {$zstatus($i) < 1} {
if {$debug} {
html "ok<br>\n"
}
- ir-set z39$i.$setNo z39$i
+
+ if {[lindex $targets($host) 6] == "1"} {
+ wais-set z39$i.$setNo z39$i
+ } else {
+ ir-set z39$i.$setNo z39$i
+ }
set hist($setNo,$i,offset) 0
eval z39$i.$setNo databaseNames $hist($setNo,$i,database)
proc mergeHostSpec {host databases} {
return ${host}.[join $databases -]
}
+
+proc mkAssoc {assoc host} {
+ global targets
+
+ if {[catch {$assoc failback fail-response}]} {
+ if {[lindex $targets($host) 6] == "1"} {
+ wais $assoc
+ } else {
+ ir $assoc
+ }
+ } else {
+ if {[lindex $targets($host) 6] == "1"} {
+ if {[$assoc comstack] == "wais"} return
+ wais $assoc
+ } else {
+ if {[$assoc comstack] == "tcpip"} return
+ ir $assoc
+ }
+ }
+}
\ No newline at end of file