+proc z39search {setNo piggy tno elements} {
+ global hist
+ global sessionWait
+ global targets
+
+ 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 [list set oldHost [$zz connect]]]} {
+ set oldHost ""
+ }
+ $zz callback ok-response
+ $zz failback fail-response
+ if {$oldHost != $host} {
+ catch [list $zz disconnect]
+
+ set sessionWait 0
+ if {[catch [list $zz connect $host]]} {
+ displayError "Cannot connect to target" $host
+ return 0
+ } elseif {$sessionWait == 0} {
+ if {[catch {zwait sessionWait 300}]} {
+ $zz disconnect
+ displayError "Cannot connect to target" $host
+ return 0
+ }
+ if {$sessionWait != 1} {
+ displayError "Cannot connect to target" $host
+ return 0
+ }
+ }
+ $zz idAuthentication $idAuth
+ set sessionWait 0
+ if {[catch {$zz init}]} {
+ displayError "Cannot initialize target" $host
+ $zz disconnect
+ return 0
+ }
+ if {[catch {zwait sessionWait 60}]} {
+ displayError "Cannot initialize target" $host
+ $zz disconnect
+ return 0
+ }
+ if {$sessionWait != "1"} {
+ 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 {[info exists hist($setNo,hits)] && \
+ ![catch [list $zz.$setNo smallSetUpperBound 0]]} {
+ return 1
+ }
+
+ }
+ ir-set $zz.$setNo $zz
+
+ if {![lindex $targets($host) 5]} {
+ set elements {}
+ }
+ $zz.$setNo smallSetElementSetNames $elements
+ $zz.$setNo mediumSetElementSetNames $elements
+ $zz.$setNo recordElements $elements
+
+ wlog debug "database=$database"
+ eval $zz.$setNo databaseNames $database
+
+ $zz.$setNo preferredRecordSyntax USMARC
+
+ $zz callback [list search-response $zz.$setNo]