Incorporated WAIS functionality.
authorAdam Dickmeiss <adam@indexdata.dk>
Thu, 29 Feb 1996 15:41:38 +0000 (15:41 +0000)
committerAdam Dickmeiss <adam@indexdata.dk>
Thu, 29 Feb 1996 15:41:38 +0000 (15:41 +0000)
www/Makefile
www/msearch.egw
www/query.egw
www/search.egw
www/z39util.tcl
www/ztargets.conf

index e473d74..11d3b94 100644 (file)
@@ -1,22 +1,23 @@
 # Makefile for www gateway utility
 # Europagate, 1995
 #
-# $Id: Makefile,v 1.31 1996/02/20 16:07:39 adam Exp $
+# $Id: Makefile,v 1.32 1996/02/29 15:41:38 adam Exp $
 #
 SHELL=/bin/sh
-#
-ZDEFS=
-#ZINC=-I../../yaz/include
+
 ZLIB=../../yaz/lib/libyaz.a
-#ZLIB=-lyaz
+
+IRTCLDIR=../../ir-tcl
+IRTCLLIB=$(IRTCLDIR)/libirtcl.a
+IRTCLINC=-I$(IRTCLDIR)
+
 #MOSILIB=../../xtimosi/src/libmosi.a ../../yaz/lib/librfc.a
-LIBIRTCL=../../ir-tcl/libirtcl.a $(ZLIB) $(MOSILIB)
 #NETLIB=-lnsl -lsocket
-#
+
 OLIB=../lib/util.a ../lib/libres+log.a 
 TCLLIB=/usr/local/lib/libtcl7.5.a
-TCLINC=-I../../ir-tcl 
-#
+TCLINC=
+
 WSCRIPTS=egwscript targets.egw query.egw search.egw showfull.egw z39util.tcl \
  mtargets.egw mquery.egw msearch.egw history.egw tform.egw tdefine.egw
 HSCRIPTS=egwindex.html
@@ -24,9 +25,11 @@ CONFFILES=egw.res ztargets.conf
 TPROG1=egwcgi
 TPROG2=egwsh
 TPROG3=wtest
+TPROG4=egwwais
 P1=wcgi.o
-P2=wproto.o winterp.o wsh.o wtcl.o whtml.o wirtcl.o
+P2=wproto.o winterp.o wsh.o wtcl.o whtml.o wirtcl.o wshmain.o
 P3=wproto.o wtest.o
+P4=wproto.o winterp.o waissh.o wtcl.o wirtcl.o wshmain.o wwaistcl.o
 CPP=$(CC) -E
 
 HTTPDDIR=/usr/local/etc/httpd
@@ -43,20 +46,28 @@ GIFDIR=$(HTDOCS)/egwgif
 #LOGDIR=/data2/html/egw/logs
 #GIFDIR=/data2/html/egw/gif
 
-INCLUDE=-I../include $(ZINC) $(TCLINC)
-DEFS=$(INCLUDE) $(ZDEFS) -DEGWDIR=\"$(EGWDIR)\" 
+INCLUDE=-I../include $(TCLINC) $(IRTCLINC)
+DEFS=$(INCLUDE) $(ZDEFS) -DEGWDIR=\"$(EGWDIR)\"
 
 all: $(TPROG1) $(TPROG2)
 
 $(TPROG1): $(P1) $(OLIB)
-       $(CC) $(CFLAGS) -o $(TPROG1) $(P1) $(OLIB) $(ZLIB)
+       $(CC) $(CFLAGS) -o $(TPROG1) $(P1) $(OLIB)
 
 $(TPROG2): $(P2) $(OLIB)
-       $(CC) $(CFLAGS) -o $(TPROG2) $(P2) $(OLIB) $(LIBIRTCL) \
-               $(NETLIB) $(TCLLIB) -lm
+       $(CC) $(CFLAGS) -o $(TPROG2) $(P2) $(OLIB) $(IRTCLLIB) \
+               $(ZLIB) $(MOSILIB) $(NETLIB) $(TCLLIB) -lm
 
 $(TPROG3): $(P3) $(OLIB)
-       $(CC) $(CFLAGS) -o $(TPROG3) $(P3) $(OLIB) $(ZLIB)
+       $(CC) $(CFLAGS) -o $(TPROG3) $(P3) $(OLIB)
+
+
+WAISDIR=../../freeWAIS-sf-2.0
+WAISLIB=$(IRTCLDIR)/wais-tcl.o $(WAISDIR)/ir/libwais.a
+
+$(TPROG4): $(P4) $(OLIB)
+       $(CC) $(CFLAGS) -o $(TPROG4) $(P4) $(OLIB) $(IRTCLLIB) \
+               $(WAISLIB) $(ZLIB) $(MOSILIB) $(NETLIB) $(TCLLIB) -lm
 
 install: install.prog install.script install.gif
 
index f6defa0..a86d918 100644 (file)
@@ -1,6 +1,6 @@
 <html>
 {
-# $Id: msearch.egw,v 1.14 1996/01/29 17:31:47 adam Exp $
+# $Id: msearch.egw,v 1.15 1996/02/29 15:41:38 adam Exp $
 
     if {[info commands saveState] == ""} {
         source z39util.tcl
             set r [z39$i.$setNo resultCount]
             html "$r hits</h3>\n<dd>\n<ul>\n"
 
-            display-rec 1 $hist($setNo,$i,offset) display-brief $i
+            if {$hist($setNo,$i,offset) > $hist($setNo,maxPresent)} {
+                display-rec 1 $hist($setNo,maxPresent) display-brief $i
+            } else {
+                display-rec 1 $hist($setNo,$i,offset) display-brief $i
+            }
             html "</ul>"
         }
         html "\n"
index 1d339f2..fec5af1 100644 (file)
@@ -4,7 +4,7 @@
 </head>
 <body>
 {
-# $Id: query.egw,v 1.33 1996/02/21 16:57:38 adam Exp $
+# $Id: query.egw,v 1.34 1996/02/29 15:41:39 adam Exp $
 
     if {[info commands saveState] == ""} {
         source z39util.tcl
@@ -40,9 +40,7 @@ proc ok-response {} {
     set hist($setNo,host) $host
     set hist($setNo,idAuthentication) [lindex $targets($host) 3]
 
-    if {[catch {z39 failback fail-response}]} {
-        ir z39
-    }
+    mkAssoc z39 $host
 
     z39 callback ok-response
     z39 failback fail-response
@@ -77,7 +75,7 @@ proc ok-response {} {
             html "</body></html>\n"
             egw_abort
         }
-        if {[catch {egw_wait sessionWait 60}]} {
+        if {$sessionWait == 0 && [catch {egw_wait sessionWait 60}]} {
             displayError "Cannot initialize target ${thisHost}" {}
             html "</body></html>\n"
             egw_abort
index eabe4b9..9263dfa 100644 (file)
@@ -1,6 +1,6 @@
 <html>
 {
-# $Id: search.egw,v 1.32 1996/02/12 13:39:40 adam Exp $
+# $Id: search.egw,v 1.33 1996/02/29 15:41:39 adam Exp $
 
 proc start-scan {scanNo cache dir initSet} {
     global sessionId
@@ -350,7 +350,7 @@ proc buttons {setNo setMax startPos after} {
         }
         egw_flush
         html "<ul>\n"
-        display-rec 1 $setOffset display-brief 0
+        display-rec 1 $setMax display-brief 0
         incr setOffset
 
     } else {
index 8553519..aa53782 100644 (file)
@@ -1,5 +1,5 @@
 #
-# $Id: z39util.tcl,v 1.33 1996/02/21 16:57:39 adam Exp $
+# $Id: z39util.tcl,v 1.34 1996/02/29 15:41:40 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,84 @@ proc dl-marc-field-rec {zset no tag lead start stop startid sep} {
     }
 }
 
+proc display-full-wais {zset no} {
+    set i0 0
+    set i1 0
+    set refNo 0
+    set body [$zset getWAIS $no text]
+
+    while {[string length [set c [string index $body $i1]]]} {
+        if {[string compare $c \n]} {
+            incr i1
+            continue
+        }
+        set l [string trim [string range $body $i0 $i1]]
+        egw_log debug "line=$l"
+        incr i1
+        set i0 $i1
+        if {[string compare [string index $l 0] {<}]} {
+            egw_log "xxxxxxxxxxxxxxxx"
+            continue
+        }
+        if {[set mark [string first > $l ]] < 1} {
+            egw_log "yyyyyyyyyyyyyyyy"
+            continue
+        }
+        set data [string trim [string range $l [expr $mark +1] end]]
+        incr mark -1
+        set sw [string range $l 1 $mark]
+        egw_log debug "sw=$sw"
+        egw_log debug "data=$data"
+        switch -exact $sw {
+            ti {
+                set title $data
+            }
+            dm {
+                set dateOfLastModification $data
+            }
+            ci {
+                set controlIdentifier $data
+            }
+            lc {
+                set lastChecked $data
+            }
+            by {
+                set bytes $data
+            }
+            avli {
+                set linkage $data
+            }
+            cr {
+                incr refNo
+            }
+            li {
+                set crossRef($refNo,linkage) $data
+            }
+            cp {
+                set crossRef($refNo,title) $data
+            }
+        }
+    }
+    html {Title: } {<a href="} $linkage {">} $title "</a><br>\n"
+    html {URL: } $linkage "<br>\n"
+    if {[info exists bytes]} {
+        html {Bytes: } $bytes "<br>\n"
+    }
+    if {[info exists dateOfLastModification]} {
+        html {Last modified: } $dateOfLastModification "<br>\n"
+    }
+    if {[info exists lastChecked]} {
+        html {Last checked: } $lastChecked "<br>\n"
+    }
+    html "<ul>\n"
+    for {set i 1} {$i <= $refNo} {incr i} {
+        html {<li><a href="} $crossRef($i,linkage) {">}
+        html $crossRef($i,title) "</a><br>\n"
+        html "URL: " $crossRef($i,linkage)
+    }
+    html "</ul>\n"
+}
+
 proc display-full {zset no tno} {
     set type [$zset type $no]
     if {$type == "SD"} {
@@ -315,7 +400,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 +542,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 +594,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 ""
     }
@@ -656,9 +752,7 @@ 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 ""
     }
@@ -690,7 +784,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 +811,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 {}
     }
@@ -858,9 +956,7 @@ 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 {[string compare $oldHost $thisHost]} {
@@ -874,7 +970,7 @@ proc z39msearch {setNo elements start number cache} {
         set oldHost [z39$i connect]
         set host $hist($setNo,$i,host)
         set thisHost [splitHostSpec $host]
-        if {![string compare $oldhost $thisHost]} {
+        if {![string compare $oldHost $thisHost]} {
             continue
         }
         egw_log debug "old=$oldHost this=$thisHost"
@@ -893,8 +989,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 +1004,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 +1407,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
index 7455db0..01c6621 100644 (file)
@@ -1,4 +1,4 @@
-# $Id: ztargets.conf,v 1.25 1996/02/26 10:37:16 adam Exp $
+# $Id: ztargets.conf,v 1.26 1996/02/29 15:41:40 adam Exp $
 #
 # This file contains the predefined targets in the WWW-Z39.50 gateway
 # Each target is an entry in the associative array "targets". The
@@ -186,3 +186,12 @@ set targets(Tikal.dev.oclc.org.AGRICOLA) [list \
     1 \
 ]
 
+set targets(nwi.ub2.lu.se.sverige) {
+    NWI
+    sverige
+    { { Ranked {@attr 1=4} } }
+    {}
+    {Nordic Web Index - Sweden}
+    1
+    1
+}