</head>
<body>
{
-# $Id: query.egw,v 1.6 1995/10/31 16:56:23 adam Exp $
+# $Id: query.egw,v 1.7 1995/11/01 16:15:44 adam Exp $
proc fail-response {} {
global sessionWait
set sessionWait -1
set sessionWait 1
}
- global host
+ global setNo
+ global nextSetNo
+ global hist
+
set host $sessionParms
- set databases [lindex $targets($host) 1]
- catch {z39 disconnect}
- set sessionWait 0
- ir z39
- z39 failback fail-response
+
+ if {[info exists setNo]} {
+ set oldHost $hist($setNo,host)
+ } else {
+ set oldHost ""
+ }
+ set setNo $nextSetNo
+ set hist($setNo,host) $host
+
+ if {[catch {z39 failback fail-response}]} {
+ ir z39
+ }
z39 callback ok-response
- if {[catch {z39 connect $host}]} {
- htmlr "Cannot connect to target ${host} <br>"
- htmlr "</body></html>"
- wabort
- } elseif {$sessionWait == 0} {
+ z39 failback fail-response
+ if {$host != $oldHost} {
+ catch {z39 disconnect}
+
+ html "Connecting to target " $host " <br>\n"
+ set sessionWait 0
+ if {[catch {z39 connect $host}]} {
+ html "Cannot connect to target ${host} <br>\n"
+ html "</body></html>\n"
+ wabort
+ } elseif {$sessionWait == 0} {
+ zwait sessionWait
+ if {$sessionWait != 1} {
+ html "Cannot connect to target ${host} <br>\n"
+ html "</body></html>\n"
+ wabort
+ }
+ }
+ set sessionWait 0
+ z39 init
zwait sessionWait
- if {$sessionWait != 1} {
- htmlr "Cannot connect to target ${host} <br>"
+ if {$sessionWait != "1"} {
+ htmlr "Cannot initialize with target ${host} <br>"
htmlr "</body></html>"
wabort
}
}
- set sessionWait 0
- z39 init
- zwait sessionWait
- if {$sessionWait == -1} {
- htmlr "Cannot initialize with target ${host} <br>"
- htmlr "</body></html>"
- wabort
- }
- htmlr {<h2> Search in databases </h2>}
+ set databases [lindex $targets($host) 1]
+
+ html "<h2> Search in databases </h2>\n"
html {<form action="http://} $env(SERVER_NAME) $env(SCRIPT_NAME)
- htmlr / $sessionId {/search.egw/} $host {" method=post>}
+ html / $sessionId {/search.egw/} $setNo {" method=post>} \n
set nodb [llength $databases]
if {$nodb > 1} {
if {$nodb > 2} {
- html {The chosen target supports searching in }
- htmlr {several databases. <br>}
- htmlr {Choose the bases you want to search: <br>}
+ html "The chosen target supports searching in "
+ html "several databases. <br>\n"
+ html "Choose the bases you want to search: <br>\n"
}
set i 0
foreach d $databases {
html {<input type="checkbox" name="base" value="} $d
if {[incr i] > 1} {
- htmlr {"> } $d
+ html {"> } $d \n
} else {
- htmlr {" checked> } $d
+ html {" checked> } $d \n
}
}
- htmlr {<br>}
+ html "<br>\n"
if {$nodb > 2} {
html {<input type="checkbox" name="base" value="}
- htmlr [concat $databases] {"> All <br>}
+ html [concat $databases] {"> All <br>} \n
}
}
}
{
set fields [lindex $targets($host) 2]
for {set no 1} {$no < 4} {incr no} {
- htmlr {<select name="menu} $no {">}
+ html {<select name="menu} $no {">} \n
foreach f $fields {
- htmlr {<option> } [lindex $f 0]
+ html {<option> } [lindex $f 0] \n
}
- htmlr </select>
- htmlr {<input type="text" name="entry} $no {" size=30>}
+ html "</select>\n"
+ html {<input type="text" name="entry} $no {" size=30>} \n
if {$no < 3} {
- htmlr {<select name="logic} $no {">}
- htmlr {<option> And}
- htmlr {<option> Or}
- htmlr {<option> And not}
- htmlr {</select>}
+ html {<select name="logic} $no {">} \n
+ html "<option> And\n"
+ html "<option> Or\n"
+ html "<option> And not\n"
+ html "</select>\n"
}
- htmlr <br>
+ html "<br>\n"
}
}
<hr><p>
Alternatively you can enter your query in
<a href="ccl.html"> CCL </a> here: <br>
-<input type=text name="cclentry" size=60> <br>
+<input type=text name="cclentry" size=52> <br>
<hr>
<strong> Various technical parameters: </strong> <br>
Max hits: <input type="text" name="hits" value="50" size=3>
<em> This and the following pages are under construction
and will continue to be so until the end of December 1995.</em>
<hr>
-sessionId: {html $sessionId} <br>
-sessionParms: {html $sessionParms}<br>
+
+{
+ html {<a href="http://} $env(SERVER_NAME) $env(SCRIPT_NAME)
+ html / $sessionId {/targets.egw"> New target </a>}
+}
{
+ html "<hr>\n"
+ html "<strong>Debug information</strong><br>\n"
+ html "sessionId: $sessionId <br>\n"
+ html "sessionParms: $sessionParms <br>\n"
foreach e {SERVER_NAME PATH_INFO SCRIPT_NAME} {
- htmlr $e {: } $env($e) {<br>}
+ html $e {: } $env($e) {<br>} \n
}
+ html "form: " [wform] " <br>\n"
+ html "target: " $host " <br>\n"
+ html "databases: " $databases " <br>\n"
+ html "setNo: " $setNo " <br>\n"
+ html "nextSetNo: " $nextSetNo " <br>\n"
}
-form: {html [wform]} <br>
-target: {html $host} <br>
-databases: {html $databases} <br>
</body></html>
+
+
<html>
{
-# $Id: search.egw,v 1.5 1995/10/31 16:56:24 adam Exp $
+# $Id: search.egw,v 1.6 1995/11/01 16:15:45 adam Exp $
-proc search-response {} {
+proc search-response {sno} {
global sessionWait
- set status [z39.1 responseStatus]
+ set status [z39.$sno responseStatus]
if {[lindex $status 0] == "NSD"} {
- z39.1 nextResultSetPosition 0
+ z39.$sno nextResultSetPosition 0
set code [lindex $status 1]
set msg [lindex $status 2]
set addinfo [lindex $status 3]
proc display-brief {zset no} {
global env
+ global setNo
global sessionId
set type [$zset type $no]
set year [lindex [$zset getMarc $no field 260 * c] 0]
} ] } {
html {<a href="http://} $env(SERVER_NAME) $env(SCRIPT_NAME) /
- html $sessionId {/showfull.egw/} $no {"> } $title {</a>}
+ html $sessionId {/showfull.egw/} $setNo + $no {"> } $title {</a>}
html " <i> ${year} </i>"
}
htmlr {<br>}
}
proc display-rec {from to} {
+ global setNo
+
while {$from <= $to} {
- display-brief z39.1 $from
+ display-brief z39.$setNo $from
incr from
}
}
return $q
}
+proc research {setNo oldHost piggy} {
+ global hist
global sessionWait
- global host
-
- set newHost $sessionParms
- set databases [lindex $targets($newHost) 1]
- htmlr {<head><title> WWW/Z39.50 Gateway Search } $newHost { </title>}
- htmlr {</head><body>}
- wflush
-
- if {[catch {z39 callback ok-response}]} {
+ set host $hist($setNo,host)
+ if {[catch {z39 failback fail-response}]} {
ir z39
}
- if {$newHost != $host} {
- set host $newHost
- z39 disconnect
- z39 callback ok-response
- z39 failback fail-response
+ if {[catch {set oldHost [z39 connect]}]} {
+ set oldHost ""
+ }
+ z39 callback ok-response
+ z39 failback fail-response
+ if {$oldHost != $host} {
+ catch {z39 disconnect}
- htmlr {Connecting to target } $host { <br>}
+ html "Connecting to target " $host " <br>\n"
set sessionWait 0
if {[catch {z39 connect $host}]} {
htmlr "Cannot connect to target ${host} <br>"
wabort
}
}
- ir-set z39.1 z39
- set b [wform base]
- if {$b == ""} {
- z39.1 databaseNames [lindex $targets($host) 1]
- } else {
- z39.1 databaseNames [list $b]
- htmlr {selected: } $b { <br>}
+ if {![catch {z39.$setNo smallSetUpperBound 0}]} {
+ return
}
- z39.1 preferredRecordSyntax USMARC
-
- set query [build-query]
+ ir-set z39.$setNo z39
+ eval z39.$setNo databaseNames $hist($setNo,database)
- htmlr {<hr>query: --} $query {-- <br>}
- htmlr {sessionId: } $sessionId {<br>}
- htmlr {sessionParms: } $sessionParms {<br>}
- htmlr {form: } [wform] { <br>}
- htmlr {databases: } $databases { <br>}
- htmlr {selected: } [wform base] { <br><hr>}
+ z39.$setNo preferredRecordSyntax USMARC
- z39 callback search-response
+ z39 callback search-response $setNo
+ if {$piggy} {
+ z39.$setNo largeSetLowerBound 999999
+ z39.$setNo smallSetUpperBound 0
+ z39.$setNo mediumSetPresentNumber $hist($setNo,maxPresent)
+ } else {
+ z39.$setNo largeSetLowerBound 2
+ z39.$setNo smallSetUpperBound 0
+ z39.$setNo mediumSetPresentNumber 0
+ }
set sessionWait 0
- z39.1 search $query
+ z39.$setNo search $hist($setNo,query)
zwait sessionWait
- if {$sessionWait == 1} {
- set r [z39.1 resultCount]
- htmlr {<strong> } $r { hits</strong><br><br>}
- } else {
+ if {$sessionWait != 1} {
htmlr {</body></html>}
wabort
}
- set setOffset [z39.1 numberOfRecordsReturned]
- display-rec 1 $setOffset
+}
+
+ global sessionWait
+ global nextSetNo
+ global setNo
+ global hist
+
+ set oldHost $hist($setNo,host)
+
+ if {[wform menu1] == ""} {
+ set setNo [lindex $sessionParms 0]
+ } else {
+ if {![info exists hist($nextSetNo,host)]} {
+ set hist($nextSetNo,host) $oldHost
+ }
+ set setNo $nextSetNo
+ incr nextSetNo
+
+ set hist($setNo,query) [build-query]
+ set b [wform base]
+ if {$b == ""} {
+ set hist($setNo,database) $databases
+ } else {
+ set hist($setNo,database) $b
+ }
+ set hist($setNo,maxPresent) [wform hits]
+ if {$hist($setNo,maxPresent) == ""} {
+ set hist($setNo,maxPresent) 30
+ }
+ }
+ set host $hist($setNo,host)
+ set databases [lindex $targets($host) 1]
+
+ htmlr {<head><title> WWW/Z39.50 Gateway Search } $host { </title>}
+ htmlr {</head><body>}
+ html "<h2> Search result </h2>\n"
wflush
- incr setOffset
- set setMax [z39.1 resultCount]
- if {$setMax > 30} {
- set setMax 30
+
+
+ set startPos [lindex $sessionParms 1]
+ set endPos [lindex $sessionParms 2]
+ if {$startPos == ""} {
+ research $setNo $oldHost 1
+
+ set r [z39.$setNo resultCount]
+ html "<h3> $r hits</h3><br>\n"
+ set setOffset [z39.$setNo numberOfRecordsReturned]
+ display-rec 1 $setOffset
+ wflush
+ incr setOffset
+ set setMax [z39.$setNo resultCount]
+ if {$setMax > $hist($setNo,maxPresent)} {
+ set setMax $hist($setNo,maxPresent)
+ }
+ } else {
+ research $setNo $oldHost 0
+
+ set setOffset $startPos
+ set setMax [z39.$setNo resultCount]
+ if {$setMax > $endPos} {
+ set setMax $endPos
+ }
}
set toGet [expr 1 + $setMax - $setOffset]
while {$toGet > 0} {
- set sessionWait 0
- z39.1 present $setOffset $toGet
- zwait sessionWait
- if {$sessionWait != "1"} {
- break
+ for {set got 0} {$got < $toGet} {incr got} {
+ if {[z39.$setNo type [expr $setOffset + $got]] == ""} {
+ break
+ }
+ }
+ if {$got < $toGet} {
+ set sessionWait 0
+ z39.$setNo present $setOffset $toGet
+ zwait sessionWait
+ if {$sessionWait != "1"} {
+ break
+ }
+ set got [z39.$setNo numberOfRecordsReturned]
}
- set got [z39.1 numberOfRecordsReturned]
display-rec $setOffset [expr $got + $setOffset - 1]
set setOffset [expr $got + $setOffset]
set toGet [expr 1 + $setMax - $setOffset]
wflush
}
}
+
+{
+ html "<hr>\n"
+ html "<strong>Debug information</strong><br>\n"
+ html "sessionId: $sessionId <br>\n"
+ html "sessionParms: $sessionParms <br>\n"
+ foreach e {SERVER_NAME PATH_INFO SCRIPT_NAME} {
+ html $e {: } $env($e) {<br>} \n
+ }
+ html "form: " [wform] " <br>\n"
+ html "target: " $host " <br>\n"
+ html "databases: " $hist($setNo,database) " <br>\n"
+ html "selected: " [wform base] " <br>\n"
+ html "query: ->" $hist($setNo,query) "<- <br>"
+ html "setNo: " $setNo " <br>\n"
+ html "nextSetNo: " $nextSetNo " <br>\n"
+}
+
+<hr>
+{
+ if {$setMax < [z39.$setNo resultCount]} {
+ html {<a href="http://} $env(SERVER_NAME) $env(SCRIPT_NAME)
+ html / $sessionId {/search.egw/} $setNo + [expr $setMax + 1]
+ html + [expr $setMax + $hist($setNo,maxPresent)] {"> Next </a>} "| \n"
+ }
+ if {$startPos != ""} {
+ html {<a href="http://} $env(SERVER_NAME) $env(SCRIPT_NAME)
+ html / $sessionId {/search.egw/} $setNo
+ if {[expr $startPos - $hist($setNo,maxPresent)] > 1} {
+ html + [expr $startPos - $hist($setNo,maxPresent)]
+ html + [expr $startPos - 1]
+ }
+ html {"> Prev </a>} "| \n"
+ }
+ html {<a href="http://} $env(SERVER_NAME) $env(SCRIPT_NAME)
+ html / $sessionId {/targets.egw"> New target </a>} " | \n"
+ html {<a href="http://} $env(SERVER_NAME) $env(SCRIPT_NAME)
+ html / $sessionId {/query.egw/} $host {"> New query </a>}
+}
</body>
</html>
-
<html>
{
-# $Id: showfull.egw,v 1.1 1995/10/31 16:56:24 adam Exp $
+# $Id: showfull.egw,v 1.2 1995/11/01 16:15:46 adam Exp $
htmlr {<head><title> WWW/Z39.50 Gateway Record } $host { </title>}
htmlr {</head><body>}
+ htmlr {sessionParms: } $sessionParms {<br>}
wflush
- set no $sessionParms
+ set sno [lindex $sessionParms 0]
+ set no [lindex $sessionParms 1]
- display-full z39.1 $no
+ display-full z39.$sno $no
}
</body>
</html>
<html>
{
-# $Id: targets.egw,v 1.2 1995/10/27 15:12:05 adam Exp $
+# $Id: targets.egw,v 1.3 1995/11/01 16:15:47 adam Exp $
source /usr/local/etc/httpd/conf/ztargets.conf
+ set nextSetNo 1
}
<head>
<title> Europagate, WWW/Z39.50 Gateway </title>
{
foreach t [array names targets] {
html {<dt> <a href="http://} $env(SERVER_NAME) $env(SCRIPT_NAME) /
- htmlr ${sessionId} {/query.egw/} $t {"> } $t {</a>}
- htmlr "<dd> " [lindex $targets($t) 0]
+ html "$sessionId/query.egw/$t" {"> } $t "</a>\n"
+ html "<dd> " [lindex $targets($t) 0] \n
}
}
</dl>
Last modified 25. september 1995. <br>
<em> This and the following pages are under construction and will continue to be so
until the end of December 1995.</em>
-<hr>
-sessionId: {html $sessionId} <br>
-sessionParms: {html $sessionParms} <br>
{
+ html "<hr>\n"
+ html "<strong>Debug information</strong><br>\n"
+ html "sessionId: $sessionId <br>\n"
+ html "sessionParms: $sessionParms <br>\n"
foreach e {SERVER_NAME PATH_INFO SCRIPT_NAME} {
- htmlr $e {: } $env($e) {<br>}
+ html $e {: } $env($e) {<br>} \n
}
}
</body>
* USE OR PERFORMANCE OF THIS SOFTWARE.
*
* $Log: wirtcl.c,v $
- * Revision 1.5 1995/10/31 16:56:24 adam
+ * Revision 1.6 1995/11/01 16:15:47 adam
+ * Better presentation of records. Query/set number persistent.
+ *
+ * Revision 1.5 1995/10/31 16:56:24 adam
* Record presentation.
*
* Revision 1.4 1995/10/31 10:03:53 adam
gw_log (GW_LOG_DEBUG, mod, "fifo select %d", fifo_in);
FD_SET (fifo_in, &fdset_tcl_r);
if ((r = select(max_fd+1, &fdset_tcl_r, &fdset_tcl_w,
- &fdset_tcl_x, 0)) < 0)
+ &fdset_tcl_x, 300)) < 0)
{
gw_log (GW_LOG_ERRNO|GW_LOG_FATAL, mod, "select");
exit(1);
* USE OR PERFORMANCE OF THIS SOFTWARE.
*
* $Log: wsh.c,v $
- * Revision 1.4 1995/10/27 15:12:12 adam
+ * Revision 1.5 1995/11/01 16:15:48 adam
+ * Better presentation of records. Query/set number persistent.
+ *
+ * Revision 1.4 1995/10/27 15:12:12 adam
* IrTcl incorporated in the gateway.
* Better separation of script types.
* Z39.50 gateway scripts entered.
#include "wtcl.h"
#include "wirtcl.h"
-#define TIMEOUT_SHORT 60
+#define TIMEOUT_SHORT 180
#define TIMEOUT_MEDIUM 1800
#define TIMEOUT_LONG 7200
}
while (wproto_process(wcl, timeout) > 0)
{
+ char *p;
+
wo_clear (wcl, "text/html");
strcpy (parms_buf, wcl->wf_parms);
script = parms = parms_buf;
*parms++ = '\0';
if (*script)
{
- char *p = script + strlen(script) - 1;
+ p = script + strlen(script) - 1;
while (*p && p != script)
switch (*p)
{
--p;
}
}
+ for (p = parms; *p; p++)
+ if (*p == '+')
+ *p = ' ';
gw_log (GW_LOG_DEBUG, mod, "script: %s", script);
gw_log (GW_LOG_DEBUG, mod, "parms: %s", parms);
if (w_interp_exec (w_interp, script, parms))
-# $Id: ztargets.conf,v 1.3 1995/10/31 16:56:25 adam Exp $
+# $Id: ztargets.conf,v 1.4 1995/11/01 16:15:48 adam Exp $
set commonFields {
{ Title {@attr 1=4} }
{ Author {@attr 1=1003} }
$commonFields \
]
-set targets(dtbsun.dtv.dk:2100) [list \
+set targets(dtbsun.dtv.dk:9999) [list \
zserver \
{usgs esdd} \
$commonFields \