Added CHANGELOG files.
[egate.git] / www / z39util.tcl
index ba0b55e..ec5631f 100644 (file)
@@ -1,5 +1,5 @@
 #
-# $Id: z39util.tcl,v 1.40 1996/03/13 14:07:32 adam Exp $
+# $Id: z39util.tcl,v 1.47 1996/09/03 14:06:43 adam Exp $
 #
 proc saveState {} {
     uplevel #0 {
@@ -69,9 +69,9 @@ proc display-medium {zset no setNo targetNo} {
     global env
     global sessionId
 
-    html {<li>}
     set type [$zset type $no]
     if {$type == "SD"} {
+        html {<li>}
         set err [lindex [$zset diag $no] 1]
         set add [lindex [$zset diag $no] 2]
         if {$add != {}} {
@@ -83,6 +83,7 @@ proc display-medium {zset no setNo targetNo} {
     if {$type != "DB"} {
         return
     }
+    html {<li>}
     set rtype [$zset recordType $no]
     switch $rtype {
         SUTRS {
@@ -92,20 +93,6 @@ proc display-medium {zset no setNo targetNo} {
             html "</a><br>\n"
             return
         }
-        WAIS {
-            html { <a href="http:} $env(SCRIPT_NAME) / $sessionId
-            html {/showfull.egw/} $setNo + $targetNo + $no + full {">}
-            html [join [$zset getWAIS $no headline]]
-            html {</a>}
-            html "<br>\n"
-            html {Score: } [$zset getWAIS $no score]
-            set lines [$zset getWAIS $no lines]
-            if {$lines > 0} {
-                html {, } $lines { lines}
-            }
-            html "<br>\n"
-            return
-        }
     }
     if {![catch {
         set author [$zset getMarc $no field 100 * a]
@@ -162,7 +149,7 @@ proc display-medium {zset no setNo targetNo} {
             html "No Title"
         }
         html {</a> }
-        if {[scan $score %d nscore]} {
+        if {[scan $score %d nscore] == 1} {
             html "; Score " $nscore
         }
     } else {
@@ -179,9 +166,9 @@ proc display-brief {zset no setNo targetNo} {
     global env
     global sessionId
 
-    html {<li>}
     set type [$zset type $no]
     if {$type == "SD"} {
+        html {<li>}
         set err [lindex [$zset diag $no] 1]
         set add [lindex [$zset diag $no] 2]
         if {$add != {}} {
@@ -193,6 +180,7 @@ proc display-brief {zset no setNo targetNo} {
     if {$type != "DB"} {
         return
     }
+    html {<li>}
     set rtype [$zset recordType $no]
     switch $rtype {
         SUTRS {
@@ -202,17 +190,6 @@ proc display-brief {zset no setNo targetNo} {
             html "</a><br>\n"
             return
         }
-        WAIS {
-            html { <a href="http:} $env(SCRIPT_NAME) / $sessionId
-            html {/showfull.egw/} $setNo + $targetNo + $no + full {">}
-            html [string range [join [$zset getWAIS $no headline]] 0 70]
-            
-            html {</a>}
-            set score [$zset getWAIS $no score]
-            html { Score } $score
-            html "<br>\n"
-            return
-        }
     }
     if {![catch {
         set author [$zset getMarc $no field 100 * a]
@@ -310,10 +287,6 @@ proc display-raw {zset no setNo targetNo} {
             html "<xmp>\n" [join [$zset getSutrs $no]] "\n</xmp>\n"
             return
         } 
-        WAIS {
-            html "<xmp>\n" [join [$zset getWAIS $no text]] "\n</xmp>\n"
-            return
-        }
     }
     if {[catch {set r [$zset getMarc $no line * * *]}]} {
         html "Unknown record type: $rtype <br>\n"
@@ -530,114 +503,6 @@ proc display-full-marc {zset no setNo targetNo} {
     html "</dl>\n"
 }
 
-proc display-full-wais {zset no setNo targetNo} {
-    global env
-    global hist
-    global sessionId
-
-    set i 0    
-    set element junk
-    htmlToken l [join [$zset getWAIS $no text]] {
-        if {[string compare [string index $l 0] {<}]} {
-            if {[info exist data($element)]} {
-                set data($element) $data($element)$l
-            } else {
-                set data($element) $l
-            }
-            continue
-        }
-        switch -- $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"
-            }
-            <ip> {
-                set element ip
-            }
-            default {
-                set element junk
-            }
-        }
-    }
-    if {![info exists data(title)] || ![info exists data(linkage)]} {
-        set nwi 0
-    } else {
-        set nwi 1
-    }
-    html "<dl>\n"
-    html {<dt><b>Title</b>}
-    if {$nwi} {
-        html {<dd><a href="} $data(linkage) {">} $data(title) "</a>"
-        html {<dt><b>URL</b>}
-        html {<dd>} $data(linkage) "<br>\n"
-    } else {
-        html {<dd>} [join [$zset getWAIS $no headline]]
-    }
-    html {<dt><b>Score</b><dd>} [$zset getWAIS $no score]
-    set lines [$zset getWAIS $no lines]
-    if {$lines > 0} {
-        html {<dt><b>Lines</b><dd>} $lines "<br>\n"
-    }
-    if {!$nwi} {
-        html "</dl><pre>\n" [join [$zset getWAIS $no text]] "\n</pre>\n"
-        return
-    }
-    if {[info exists data(bytes)]} {
-        html {<dt><b>Bytes</b><dd>} $data(bytes)
-    }
-    if {[info exists data(dateOfLastModification)]} {
-        html {<dt><b>Last modified</b><dd>} $data(dateOfLastModification)
-    }
-    if {[info exists data(lastChecked)]} {
-        html {<dt><b>Last checked</b><dd>} $data(lastChecked) "<br>\n"
-    }
-    if {[info exists data(ip)]} {
-        html {<dt><b>Initial text</b><dd>} $data(ip) "<br>\n"
-    }
-    if {0} {
-        html {<a href="} $env(SCRIPT_NAME) / $sessionId {/sameas.egw/}
-        html $setNo + $targetNo + 1 + $hist($setNo,maxPresent) +
-        html [egw_enc [$zset getWAIS $no documentID]] {">}
-        html {Similar WAIS record</a><br>}
-    }
-    if {[info exists data($i,linkage)]} {
-        html "<dt><b>References</b>\n"
-    }
-    for {set i 1} {[info exists data($i,linkage)]} {incr i} {
-        html {<dd><a href="} $data($i,linkage) {">}
-        if {[info exists data($i,title)]} {
-            html $data($i,title)
-        } else {
-            html Untitled
-        }
-        html "</a><br>\n"
-    }
-    html "</dl>\n"
-}
-
 proc display-full {zset no setNo targetNo} {
     set type [$zset type $no]
     switch $type {
@@ -662,10 +527,6 @@ proc display-full {zset no setNo targetNo} {
             html "<pre>" [join [$zset getSutrs $no]] "</pre><br>\n"
             return
         }
-        WAIS {
-            display-full-wais $zset $no $setNo $targetNo
-            return
-        }
     }
     if {[catch {set r [$zset getMarc $no line * * *]}]} {
         html "Unknown record type: $rtype <br>\n"
@@ -707,38 +568,29 @@ proc build-query {t ilines} {
     for {set i 1} {$i <= $ilines} {incr i} {
         set term [join [egw_form entry$i]]
         if {[string length $term] == 0} continue
-        if {![string compare [lindex $targets($t) 1] WAIS]} {
-            if {[string length $q] == 0} {
-                set q $term
-            } else {
-                set q "$term $q"
-            }
-            set op [egw_form logic$i]
-            continue
-        } else {
-            set field [join [egw_form menu$i]]
-            catch {unset attr}
-            foreach x [lindex $targets($t) 2] {
-                if {![string compare [lindex $x 0] $field]} {
-                    set attr [lindex $x 1]
-                }
-            }
-            if {![info exists attr]} {
-                egw_log debug "attr failed for $t"
-                set attr [lindex [lindex [lindex $targets($t) 2] 0] 1]
-            }
-            switch $op {
-                And
-                { set q "@and $q ${attr} \"${term}\"" }
-                Or
-                { set q "@or $q ${attr} \"${term}\"" }
-                {And not}
-                { set q "@not $q ${attr} \"${term}\"" }
-                {}
-                { set q "${attr} \"${term}\"" }
+        set field [join [egw_form menu$i]]
+        catch {unset attr}
+        foreach x [lindex $targets($t) 2] {
+            if {![string compare [lindex $x 0] $field]} {
+                set attr [lindex $x 1]
             }
-            set op [egw_form logic$i]
         }
+        if {![info exists attr]} {
+            egw_log debug "attr failed for $t"
+            set attr [lindex [lindex [lindex $targets($t) 2] 0] 1]
+        }
+        egw_log debug "op=${op}"
+        switch $op {
+            And
+            { set q "@and $q ${attr} \"${term}\""; egw_log debug AND }
+            Or
+            { set q "@or $q ${attr} \"${term}\""; egw_log debug OR }
+            {}
+            { set q "${attr} \"${term}\""; egw_log debug NOPE }
+            default
+           { set q "@not $q ${attr} \"${term}\""; egw_log debug ANDNOT }
+        }
+        set op [egw_form logic$i]
     }
     return $q
 }
@@ -958,13 +810,9 @@ proc z39search {setNo piggy tno elements} {
         }
     }
     
-    if {![string compare [lindex $targets($host) 1] WAIS]} {
-        wais-set $zz.$setNo $zz
-    } else {
-        ir-set $zz.$setNo $zz
-        $zz.$setNo preferredRecordSyntax [lindex $targets($host) 1]
-        egw_log debug "set syntax to [lindex $targets($host) 1]"
-    }
+    ir-set $zz.$setNo $zz
+    $zz.$setNo preferredRecordSyntax [lindex $targets($host) 1]
+    egw_log debug "set syntax to [lindex $targets($host) 1]"
     if {![lindex $targets($host) 5]} {
         set elements {}
     }
@@ -1134,7 +982,20 @@ proc z39msearch {setNo elements start number cache} {
     }
     while {$zleft > 0} {
         egw_log debug "Waiting for init response"
-        if {[catch {egw_wait zleft 20}]} {
+        if {[catch {egw_wait zleft 20} reason]} {
+            if {![string compare $reason cancel]} {
+                for {set i 1} {$i <= $not} {incr i} {
+                    set zstatus($i) -1
+                    catch {z39$i disconnect}
+                }
+                return
+            } else {
+                for {set i 1} {$i <= $not} {incr i} {
+                    if {$zstatus($i) == -1} {
+                        catch {z39$i disconnect}
+                    }
+                }
+            }
             break
         }
     }
@@ -1156,13 +1017,9 @@ proc z39msearch {setNo elements start number cache} {
                 html "ok<br>\n"
             }
 
-            if {![string compare [lindex $targets($host) 1] WAIS]} {
-                wais-set z39$i.$setNo z39$i
-            } else {
-                ir-set z39$i.$setNo z39$i
-                z39$i.$setNo preferredRecordSyntax [lindex $targets($host) 1]
-                egw_log debug "set syntax to [lindex $targets($host) 1]"
-            }
+            ir-set z39$i.$setNo z39$i
+            z39$i.$setNo preferredRecordSyntax [lindex $targets($host) 1]
+            egw_log debug "set syntax to [lindex $targets($host) 1]"
             set hist($setNo,$i,offset) 0
             eval z39$i.$setNo databaseNames $hist($setNo,$i,database)
 
@@ -1241,9 +1098,24 @@ proc z39msearch {setNo elements start number cache} {
             }
         }
     }
+
+
     while {$zleft > 0} {
         egw_log debug "Waiting for search/present response"
-        if {[catch {egw_wait zleft 60}]} {
+        if {[catch {egw_wait zleft 60} reason]} {
+            if {![string compare $reason cancel]} {
+                for {set i 1} {$i <= $not} {incr i} {
+                    catch {z39$i disconnect}
+                    set zstatus($i) -1
+                }
+                return
+            } else {
+                for {set i 1} {$i <= $not} {incr i} {
+                    if {$zstatus($i) != 2} {
+                        catch {z39$i disconnect}
+                    }
+                }
+            }
             break
         }
     }
@@ -1371,9 +1243,7 @@ proc display-result-set-m-score {setNo} {
         if {[lindex $status 0] != "DBOSD"} continue        
         set nor $hist($setNo,$i,offset)
         for {set j 1} {$j <= $nor} {incr j} {
-            if {![string compare [z39$i.$setNo recordType $j] WAIS]} {
-                set score [z39$i.$setNo getWAIS $j score]
-            } elseif {![string compare [z39$i.$setNo recordType $j] USmarc]} {
+            if {![string compare [z39$i.$setNo recordType $j] USmarc]} {
                 set score [z39$i.$setNo getMarc $j field 999 * r]
                 if {[scan $score %d score] != 1} {
                     set score 10
@@ -1613,7 +1483,10 @@ proc z39history {} {
                 html {">Query</a>: }
             }
             set op {}
-            for {set j 1} {$j <= 3} {incr j} {
+            for {set j 1} {$j <= 10} {incr j} {
+                if {![info exists hist($setNo,form,entry$j)]} {
+                    break
+                }
                 if {[string length $hist($setNo,form,entry$j)] > 0} {
                     html " <b>" [join $op " "] "</b> "
                 set pre [join $hist($setNo,form,menu$j)]
@@ -1657,6 +1530,19 @@ proc button-main {} {
     }
 }
 
+proc button-feedback {} {
+    global useIcons
+
+    html {<a href="http://europagate.dtv.dk/wwwquest.html">}
+    if {$useIcons} {
+        html {<img src="/egwgif/button-user-feedback.gif" alt="User Feedback"
+        border=0></a>}
+    } else {
+        html "\n | "
+        html {User Feedback</a>}
+    }    
+}
+
 proc button-define-target {} {
     global useIcons
     global env
@@ -1783,10 +1669,8 @@ proc button-scan-window {setNo} {
 
 proc maintenance {} {
     html {<hr>This page is maintained by }
-    html {<a href="mailto:pwh@dtv.dk"> Peter Wad Hansen </a>.}
-    html {Last modified 29. january 1996. <br>}
-    html {<em> This and the following pages are under construction and }
-    html {will continue to be so until the end of January 1996.</em>}
+    html {<a href="mailto:nobody"> Nobody </a>.}
+    html {Last modified x x x. <br>}
 }
 
 proc splitHostSpec {host} {
@@ -1817,19 +1701,12 @@ proc mkAssoc {assoc host} {
     global targets
 
     if {[catch {$assoc failback fail-response}]} {
-        if {![string compare [lindex $targets($host) 1] WAIS]} {
-            wais $assoc
-        } else {
-            ir $assoc
-        }
+        ir $assoc
+        $assoc maximumRecordSize 1000000
     } else {
-        if {![string compare [lindex $targets($host) 1] WAIS]} {
-            if {[$assoc comstack] == "wais"} return
-            wais $assoc
-        } else {
-            if {[$assoc comstack] == "tcpip"} return
-            ir $assoc
-        }
+        if {[$assoc comstack] == "tcpip"} return
+        ir $assoc
+        $assoc maximumRecordSize 1000000
     }
 }
 
@@ -1872,6 +1749,22 @@ proc serverList {headlineProc targetProc} {
     rename targetsCmp {}
 }
 
+proc session-lost {} {
+    global useIcons
+
+    html {<head><title>WWW/Z39.50 Gateway: Session Expired</title></head>}
+    html \n {<body>}
+    set useIcons 1
+    button-main
+    html {<h1>Session Expired</h1>}
+    html {Your session has expired. Please reload the gateways' }
+    html {front page.<br><br>} \n
+    set useIcons 0
+    button-main
+    html {</body></html>}
+}
+
 if {[info exists utilExtension]} {
     source $utilExtension
-}
\ No newline at end of file
+}
+