Work on queries.
[egate.git] / www / search.egw
index d521220..71f4cb0 100644 (file)
 <html>
 {
-# $Id: search.egw,v 1.1 1995/10/23 17:04:17 adam Exp $
+# $Id: search.egw,v 1.4 1995/10/31 10:03:53 adam Exp $
+
+proc ok-response {} {
+    global sessionWait
+    set sessionWait 1
+}
+
+proc fail-response {} {
+    global sessionWait
+    set sessionWait -1
+}
+
+proc display-rec {from to} {
+    while {$from < $to} { 
+        htmlr {<b>} $from {</b><br>}
+        if {![catch {
+            set title [lindex [z39.1 getMarc $from field 245 * a] 0]
+            set year [lindex [z39.1 getMarc $from field 260 * c] 0]
+        } ] } {
+            htmlr $title { <i> } $year {</i><br>}
+        }
+        incr from
+    }
+}
+
+proc build-query {} {
+    global targets
+    global t
+
+    set op {}
+    set q {}
+    for {set i 1} {$i < 4} {incr i} {
+        set term [form entry$i]
+        if {$term != ""} {
+            set field [form menu$i]
+            foreach x [lindex $targets($t) 2] {
+                if {[lindex $x 0] == $field} {
+                    set attr [lindex $x 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 op [form logic$i]
+        }
+    }
+    return $q
+}
+
+    global sessionWait
+    z39 callback ok-response
+    z39 failback fail-response
+    set sessionWait 0
+    ir-set z39.1 z39
+    z39.1 databaseNames [form base]
+    htmlr {<head><title> WWW/Z39.50 Gateway Search } $t { </title>}
+    htmlr {</head><body>}
+    set query [build-query]
+    htmlr {query: } $query {<br>}
+    z39.1 search $query
+    htmlr {sessionId: } $sessionId {<br>}
+    htmlr {sessionParms: } $sessionParms {<br>}
+    htmlr {form: } [form] { <br>}
+    htmlr {databases: } $databases { <br>}
+    zwait sessionWait
+    if {$sessionWait == 1} {
+        set r [z39.1 resultCount]
+        htmlr {<strong> } $r { hits</strong><br>}
+    } else {
+        set status [z39.1 searchStatus]
+        set msg [lindex $status 2]
+        set addinfo [lindex $status 3]
+        html {<strong>Search fail: } $msg
+        if {$msg != ""} {
+            html {, } $addinfo
+        }
+        htmlr {</strong><br></body></html>}
+        wabort
+    }
+    set setOffset [z39.1 numberOfRecordsReturned]
+    display-rec 0 $setOffset
+    set setMax [z39.1 resultCount]
+    if {$setMax > 30} {
+        set setMax 30
+    }
+    set toGet [expr $setMax - $setOffset]
+    while {$toGet > 0} {
+        z39.1 present $setOffset $toGet
+        set got [z39.1 numberOfRecordsReturned]
+        display-rec $setOffset [expr $got + $setOffset]
+        set $setOffset [expr $got + $setOffset]
+        set toGet [expr $setMax - $setOffset]
+        set sessionWait 0
+        zwait sessionWait
+        if {$sessionWait != "1"} {
+            break
+        }
+    }
 }
-<head>
-<title> WWW/Z39.50 Gateway Search Result</title>
-</head>
-<body>
-sessionId: {html $sessionId} <br>
-sessionParms: {html $sessionParms} <br>
-form: {html [form]} <br>
-target: {html $t} <br>
-databases: {html $databases} <br>
-<h2> Search in databases </h2>
-<h1> <blink> Not Functional Yet </blink> </h1>
 </body>
 </html>
+