Lots of changes. They aren't visible though.
[egate.git] / www / z39util.tcl
index d78e5d6..8740be4 100644 (file)
@@ -1,5 +1,5 @@
 #
-# $Id: z39util.tcl,v 1.35 1996/03/05 18:50:26 adam Exp $
+# $Id: z39util.tcl,v 1.36 1996/03/07 12:46:09 adam Exp $
 #
 proc saveState {} {
     uplevel #0 {
@@ -65,9 +65,8 @@ proc fail-response {} {
     set sessionWait -1
 }
 
-proc display-brief {zset no tno} {
+proc display-brief {zset no setNo targetNo} {
     global env
-    global setNo
     global sessionId
 
     html {<li>}
@@ -92,7 +91,7 @@ proc display-brief {zset no tno} {
     }
     if {$rtype == "WAIS"} {
         html { <a href="http:} $env(SCRIPT_NAME) /
-        html $sessionId {/showfull.egw/} $setNo + $tno + $no + full {">}
+        html $sessionId {/showfull.egw/} $setNo + $targetNo + $no + full {">}
         html [join [$zset getWAIS $no headline]]
         html {</a>}
         html "<br>\n"
@@ -113,7 +112,7 @@ proc display-brief {zset no tno} {
         set year [$zset getMarc $no field 260 * c]
     } dispError ] } {
         html { <a href="http:} $env(SCRIPT_NAME) /
-        html $sessionId {/showfull.egw/} $setNo + $tno + $no + full {">}
+        html $sessionId {/showfull.egw/} $setNo + $targetNo + $no + full {">}
         set p 0
         foreach a $author {
             if {$p} {
@@ -159,7 +158,7 @@ proc display-brief {zset no tno} {
         html {</a> }
     } else {
         html { <a href="http:} $env(SCRIPT_NAME) /
-        html $sessionId {/showfull.egw/} $setNo + $tno + $no + full {">}
+        html $sessionId {/showfull.egw/} $setNo + $targetNo + $no + full {">}
         html {No Title}
         html {</a> }
         html "Error: " $dispError "\n"
@@ -304,7 +303,11 @@ proc dl-marc-field-rec {zset no tag lead start stop startid sep} {
     }
 }
 
-proc display-full-wais {zset no} {
+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]] {
@@ -345,6 +348,10 @@ proc display-full-wais {zset no} {
             }
         }
     }
+    if {![info exists data(title)] || ![info exists data(linkage)]} {
+        html "<tt>" [join [$zset getWAIS $no text]] "</tt>\n"
+        return
+    }
     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"
@@ -358,6 +365,10 @@ proc display-full-wais {zset no} {
     if {[info exists data(lastChecked)]} {
         html {Last checked: } $data(lastChecked) "<br>\n"
     }
+    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>}
     html "<ul>\n"
     for {set i 1} {[info exists data($i,linkage)]} {incr i} {
         html {<li><a href="} $data($i,linkage) {">}
@@ -367,7 +378,7 @@ proc display-full-wais {zset no} {
     html "</ul>\n"
 }
 
-proc display-full {zset no tno} {
+proc display-full {zset no setNo targetNo} {
     set type [$zset type $no]
     if {$type == "SD"} {
         set err [lindex [$zset diag $no] 1]
@@ -387,7 +398,7 @@ proc display-full {zset no tno} {
         return
     }
     if {$rtype == "WAIS"} {
-        display-full-wais $zset $no
+        display-full-wais $zset $no $setNo $targetNo
         return
     }
     if {[catch {set r [$zset getMarc $no line * * *]}]} {
@@ -487,19 +498,10 @@ proc display-full {zset no tno} {
 }
 
 
-proc display-rec {from to dfunc tno} {
-    global setNo
-
-    if {$tno > 0} {
-        while {$from <= $to} { 
-            eval "$dfunc z39${tno}.${setNo} $from $tno"
-            incr from
-        }
-    } else {
-        while {$from <= $to} { 
-            eval "$dfunc z39.${setNo} $from 0"
-            incr from
-        }
+proc display-rec {from to dfunc setNo targetNo} {
+    while {$from <= $to} { 
+        eval "$dfunc z39${targetNo}.${setNo} $from $setNo $targetNo"
+        incr from
     }
 }
 
@@ -564,21 +566,13 @@ proc z39scan {setNo scanNo tno scanLines scanPos cache} {
     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 scanAttr $hist($setNo,$tno,scanAttr)
-        set scanTerm $hist($setNo,$tno,$scanNo,scanTerm)
-    } else {
-        set zz z39
-        set host $hist($setNo,host)
-        set idAuth $hist($setNo,idAuthentication)
-        set database $hist($setNo,database)
-        set scanAttr $hist($setNo,scanAttr)
-        set scanTerm $hist($setNo,$scanNo,scanTerm)
-    }
+    set zz z39$tno
+    set host $hist($setNo,$tno,host)
+    set idAuth $hist($setNo,$tno,idAuthentication)
+    set database $hist($setNo,$tno,database)
+    set scanAttr $hist($setNo,scanAttr)
+    set scanTerm $hist($setNo,$scanNo,scanTerm)
+
     mkAssoc $zz $host
     if {[catch [list set oldHost [$zz connect]]]} {
         set oldHost ""
@@ -670,11 +664,7 @@ proc display-scan {setNo scanNo tno} {
     global env
     global sessionId
 
-    if {$tno > 0} {
-        set zz z39$tno
-    } else {
-        set zz z39
-    }
+    set zz z39$tno
     set zs $zz.s$scanNo.$setNo
     set m [$zs numberOfEntriesReturned]
         
@@ -707,7 +697,7 @@ proc display-scan {setNo scanNo tno} {
         } else {
             regsub -all {\ } [lindex [$zs scanLine $i] 1] + tterm
             html {<a href="http:} $env(SCRIPT_NAME)
-            html / $sessionId {/search.egw/} $setNo +
+            html / $sessionId {/search.egw/} $setNo + $tno +
             html hyper + $tterm {">}
         }
         html [lindex [$zs scanLine $i] 1]
@@ -724,19 +714,13 @@ proc z39search {setNo piggy tno elements} {
     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)
-    }
+    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)
+    catch {set docId $hist($setNo,$tno,queryId)}
+
     mkAssoc $zz $host
     if {[catch [list set oldHost [$zz connect]]]} {
         set oldHost ""
@@ -826,14 +810,14 @@ proc z39search {setNo piggy tno elements} {
     }
     set sessionWait 0
     egw_log debug "search: $query"
-    if {[catch {$zz.$setNo search $query}]} {
-        displayError "Search fail" "Connection closed"
-        html "</body></html>\n"
-        $zz disconnect
-        return 0
+
+    if {[info exists docId]} {
+        $zz.$setNo search $query $docId
+    } else {
+        $zz.$setNo search $query
     }
 
-    if {[catch {egw_wait sessionWait 60}]} {
+    if {!$sessionWait && [catch {egw_wait sessionWait 60}]} {
         egw_log debug "timeout/cancel in search"
         displayError "Timeout in search" {}
         html "</body></html>\n"
@@ -1096,13 +1080,8 @@ proc z39present {setNo tno setOffset setMax dfunc elements} {
     global sessionWait
     global targets
 
-    if {$tno > 0} {
-        set zz z39$tno
-        set host $hist($setNo,$tno,host)
-    } else {
-        set zz z39
-        set host $hist($setNo,host)
-    }
+    set zz z39$tno
+    set host $hist($setNo,$tno,host)
 
     if {![lindex $targets($host) 5]} {
         set elements {}
@@ -1139,13 +1118,114 @@ proc z39present {setNo tno setOffset setMax dfunc elements} {
                 break
             }
         }
-        display-rec $setOffset [expr $got + $setOffset - 1] $dfunc $tno
+        display-rec $setOffset [expr $got + $setOffset - 1] $dfunc $setNo $tno
         set setOffset [expr $got + $setOffset]
         set toGet [expr 1 + $setMax - $setOffset]
         egw_flush
     }
 }
 
+proc buttons-result-set-s {setNo targetNo setMax startPos after} {
+    global sessionId
+    global useIcons
+    global env
+    global hist
+
+    set zz z39$targetNo
+    html "<p>\n"
+    button-europagate
+    if {$setMax > 0 && $setMax < [$zz.$setNo resultCount]} {
+        html {<a href="http:} $env(SCRIPT_NAME)
+        html / $sessionId {/search.egw/} $setNo + $targetNo + 
+        html [expr $setMax + 1] + [expr $setMax + $hist($setNo,maxPresent)]
+        if {$useIcons} {
+            html {"><img src="/egwgif/button-next-records.gif" alt="Next Records"}
+           html { border=0></a>}
+        } else {
+            html {">Next Records</a>} " | \n"
+        }
+    }
+    if {$setMax > 0 && $startPos != "" && $startPos != "1"} {
+        html {<a href="http:} $env(SCRIPT_NAME)
+        html / $sessionId {/search.egw/} $setNo + $targetNo
+        html + [expr $startPos - $hist($setNo,maxPresent)]
+        html + [expr $startPos - 1]
+        if {$useIcons} {
+            html {"><img src="/egwgif/button-previous-records.gif" }
+           html {alt="Previous Records" border=0></a>}
+        } else {
+            html {">Previous Records</a>} " | \n"
+        }
+    }
+    button-new-query 1 $setNo
+    button-new-target 1
+    button-view-history 0
+
+    html "<p>\n"
+}
+
+proc display-result-set-s {setNo targetNo startPos endPos} {
+    global hist
+    global useIcons
+
+    set zz z39$targetNo
+    set host $hist($setNo,$targetNo,host)
+    set idAuth $hist($setNo,$targetNo,idAuthentication)
+    set database $hist($setNo,$targetNo,database)
+    set query $hist($setNo,$targetNo,query)
+
+    set useIcons 1
+
+    if {$startPos == ""} {
+        if {[z39search $setNo 1 $targetNo B] != "1"} {
+            return
+        }
+        set r [$zz.$setNo resultCount]
+
+        set setMax [$zz.$setNo resultCount]
+        if {$setMax > $hist($setNo,maxPresent)} {
+            set setMax $hist($setNo,maxPresent)
+        }
+        buttons-result-set-s $setNo $targetNo $setMax $startPos 0
+
+        set setOffset [$zz.$setNo numberOfRecordsReturned]
+        if {$setMax > 0} {
+            html {<h3> Records 1-} $setMax " out of $r</h3>\n"
+        } else {
+            html "<h3> No hits</h3>\n"
+        }
+        egw_flush
+        html "<ul>\n"
+        display-rec 1 $setMax display-brief $setNo $targetNo
+        incr setOffset
+
+    } else {
+        if {[z39search $setNo 0 $targetNo B] != "1"} {
+            return 
+        }
+        set r [$zz.$setNo resultCount]
+        set setOffset $startPos
+        set setMax [$zz.$setNo resultCount]
+        if {$setMax > $endPos} {
+            set setMax $endPos
+        }
+        buttons-result-set-s $setNo $targetNo $setMax $startPos 0
+        if {$setMax > 0} {
+            html {<h3> Records } $startPos {-} $setMax " out of $r</h3>\n"
+        } else {
+            html "<h3> No hits</h3>\n"
+        }
+        egw_flush
+        html "<ul>\n"
+    }
+    if {$setMax > 0} {
+        z39present $setNo $targetNo $setOffset $setMax display-brief B
+    }
+    html "</ul>\n"
+    set useIcons 0
+    buttons-result-set-s $setNo $targetNo $setMax $startPos 1
+}
+
 proc z39history {} {
     global nextSetNo
     global hist
@@ -1154,6 +1234,7 @@ proc z39history {} {
     global targets
     global html3
 
+    set targetNo 0
     if {![info exists nextSetNo]} {
         return
     }
@@ -1170,7 +1251,7 @@ proc z39history {} {
     }
     for {set setNo 1} {$setNo < $nextSetNo} {incr setNo} {
         if {$hist($setNo,scan) > 0} continue
-        set host $hist($setNo,host)
+        set host $hist($setNo,0,host)
         if {$html3} {
             html {<td align=left>}
         } else {
@@ -1178,11 +1259,11 @@ proc z39history {} {
         }
         html [lindex $targets($host) 0]
         if {$html3} {
-            html {<td align=left>} [join $hist($setNo,database)]
+            html {<td align=left>} [join $hist($setNo,0,database)]
         } else {
             if {[llength [lindex $targets($host) 1]] > 1} {
                 html ": "
-                foreach b $hist($setNo,database) {
+                foreach b $hist($setNo,0,database) {
                     html " $b"
                 }
             }
@@ -1193,7 +1274,7 @@ proc z39history {} {
         }
         if {[info exists hist($setNo,hits)]} {
             html { <a href="http:} $env(SCRIPT_NAME)
-            html / $sessionId {/search.egw/} $setNo + 1
+            html / $sessionId {/search.egw/} $setNo + $targetNo + 1
             html + $hist($setNo,maxPresent)
             if {1} {
                 html {">} $hist($setNo,hits) {</a>}
@@ -1340,7 +1421,7 @@ proc button-new-query {more setNo} {
     if {$mMode} {
         html {/mquery.egw/} $setNo
     } else {
-        html {/query.egw/} $hist($setNo,host) + $setNo
+        html {/query.egw/} $hist($setNo,0,host) + $setNo
     }
     html {">}
     if {$useIcons} {
@@ -1362,8 +1443,9 @@ proc button-scan-window {more setNo} {
     global sessionId
     global hist
 
+    set targetNo 0
     html {<a href="http:} $env(SCRIPT_NAME)
-    html / $sessionId {/search.egw/} $setNo + {scan} {">}
+    html / $sessionId {/search.egw/} $setNo + $targetNo + {scan} {">}
     if {$useIcons} {
         html {<img src="/egwgif/button-scan-window.gif" }
        html {alt="Scan" border=0></a>}