Work on WAIS part of gateway.
[egate.git] / www / z39util.tcl
index ffdb837..d78e5d6 100644 (file)
@@ -1,5 +1,5 @@
 #
-# $Id: z39util.tcl,v 1.32 1996/02/21 14:58:35 adam Exp $
+# $Id: z39util.tcl,v 1.35 1996/03/05 18:50:26 adam Exp $
 #
 proc saveState {} {
     uplevel #0 {
@@ -70,7 +70,6 @@ proc display-brief {zset no tno} {
     global setNo
     global sessionId
 
-
     html {<li>}
     set type [$zset type $no]
     if {$type == "SD"} {
@@ -90,7 +89,15 @@ proc display-brief {zset no tno} {
         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]
@@ -297,6 +304,69 @@ proc dl-marc-field-rec {zset no tag lead start stop startid sep} {
     }
 }
 
+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"} {
@@ -315,7 +385,11 @@ proc display-full {zset no tno} {
     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
@@ -453,6 +527,15 @@ proc build-query {t ilines} {
     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] {
@@ -496,9 +579,7 @@ proc z39scan {setNo scanNo tno scanLines scanPos cache} {
         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 ""
     }
@@ -506,7 +587,7 @@ proc z39scan {setNo scanNo tno scanLines scanPos cache} {
     $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
@@ -656,16 +737,14 @@ proc z39search {setNo piggy tno elements} {
         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
@@ -690,7 +769,7 @@ proc z39search {setNo piggy tno elements} {
            $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
@@ -717,8 +796,12 @@ proc z39search {setNo piggy tno elements} {
             }
         }
     }
-    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 {}
     }
@@ -743,7 +826,12 @@ proc z39search {setNo piggy tno 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"
@@ -858,12 +946,10 @@ proc z39msearch {setNo elements start number cache} {
     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]
@@ -874,7 +960,7 @@ proc z39msearch {setNo elements start number cache} {
         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"
@@ -893,8 +979,9 @@ proc z39msearch {setNo elements start number cache} {
     }
     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} {
@@ -907,7 +994,12 @@ proc z39msearch {setNo elements start number cache} {
             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)
 
@@ -1305,3 +1397,23 @@ proc splitHostSpec {host} {
 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