X-Git-Url: http://jsfdemo.indexdata.com/?a=blobdiff_plain;f=www%2Fsearch.egw;h=bfb64bd266767041c013b2634210a35754c0f41b;hb=150d836eb46d0dde8fedeb77fc7fd4ef6eafba4f;hp=71f4cb0bda01c3574195457a818d8d9286a2410e;hpb=4a4288c5b72d694c1ca2c1c08926d1e10f01cc48;p=egate.git diff --git a/www/search.egw b/www/search.egw index 71f4cb0..bfb64bd 100644 --- a/www/search.egw +++ b/www/search.egw @@ -1,6 +1,22 @@ { -# $Id: search.egw,v 1.4 1995/10/31 10:03:53 adam Exp $ +# $Id: search.egw,v 1.7 1995/11/02 16:35:36 adam Exp $ + +proc search-response {sno} { + global sessionWait + + set status [z39.$sno responseStatus] + if {[lindex $status 0] == "NSD"} { + z39.$sno nextResultSetPosition 0 + set code [lindex $status 1] + set msg [lindex $status 2] + set addinfo [lindex $status 3] + htmlr {Error} $code {: } $msg {: } $addinfo {
} + set sessionWait -2 + } else { + set sessionWait 1 + } +} proc ok-response {} { global sessionWait @@ -12,15 +28,99 @@ proc fail-response {} { set sessionWait -1 } -proc display-rec {from to} { - while {$from < $to} { - htmlr {} $from {
} - 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 { } $year {
} +proc display-brief {zset no} { + global env + global setNo + global sessionId + + set type [$zset type $no] + if {$type == "SD"} { + set err [lindex [$zset diag $no] 1] + set add [lindex [$zset diag $no] 2] + if {$add != {}} { + set add " :${add}" + } + htmlr "${no} Error ${err}${add}
" + return + } + if {$type != "DB"} { + return + } + html "${no} " + set rtype [$zset recordType $no] + if {$rtype == "SUTRS"} { + html [join [$zset getSutrs $no]] + htmlr {
} + return + } + if {![catch { + set title [lindex [$zset getMarc $no field 245 * a] 0] + set year [lindex [$zset getMarc $no field 260 * c] 0] + } ] } { + html { } $title {} + html " ${year} " + } + htmlr {
} +} + +proc display-full {zset no} { + set type [$zset type $no] + if {$type == "SD"} { + set err [lindex [$zset diag $no] 1] + set add [lindex [$zset diag $no] 2] + if {$add != {}} { + set add " :${add}" + } + htmlr "
${no}
" + htmlr "Error ${err}${add}
" + return + } + if {$type != "DB"} { + return + } + htmlr "
${no}
" + set rtype [$zset recordType $no] + if {$rtype == "SUTRS"} { + htmlr [join [$zset getSutrs $no]] + return + } + if {[catch {set r [$zset getMarc $no line * * *]}]} { + htmlr "Unknown record type: $rtype" + return + } + foreach line $r { + set tag [lindex $line 0] + set indicator [lindex $line 1] + set fields [lindex $line 2] + set l [string length $indicator] + html "$tag " + if {$l > 0} { + for {set i 0} {$i < $l} {incr i} { + if {[string index $tag $i] == " "} { + html "_" + } else { + html [string index $tag $i] + } + } } + foreach field $fields { + set id [lindex $field 0] + set data [lindex $field 1] + if {$id != ""} { + html " \$$id " + } + html $data + } + htmlr {
} + } +} + +proc display-rec {from to} { + global setNo + + while {$from <= $to} { + display-brief z39.$setNo $from incr from } } @@ -32,9 +132,9 @@ proc build-query {} { set op {} set q {} for {set i 1} {$i < 4} {incr i} { - set term [form entry$i] + set term [wform entry$i] if {$term != ""} { - set field [form menu$i] + set field [wform menu$i] foreach x [lindex $targets($t) 2] { if {[lindex $x 0] == $field} { set attr [lindex $x 1] @@ -50,62 +150,203 @@ proc build-query {} { {} { set q "${attr} ${term}" } } - set op [form logic$i] + set op [wform logic$i] } } return $q } +proc research {setNo oldHost piggy} { + global hist global sessionWait + + set host $hist($setNo,host) + if {[catch {z39 failback fail-response}]} { + ir z39 + } + if {[catch {set oldHost [z39 connect]}]} { + set oldHost "" + } z39 callback ok-response z39 failback fail-response + if {$oldHost != $host} { + catch {z39 disconnect} + + html "Connecting to target " $host "
\n" + set sessionWait 0 + if {[catch {z39 connect $host}]} { + htmlr "Cannot connect to target ${host}
" + htmlr "" + wabort + } elseif {$sessionWait == 0} { + zwait sessionWait + if {$sessionWait != 1} { + htmlr "Cannot connect to target ${host}
" + htmlr "" + wabort + } + } + set sessionWait 0 + z39 init + zwait sessionWait + if {$sessionWait != "1"} { + htmlr "Cannot initialize with target ${host}
" + htmlr "" + wabort + } + } + if {![catch {z39.$setNo smallSetUpperBound 0}]} { + return + } + ir-set z39.$setNo z39 + eval z39.$setNo databaseNames $hist($setNo,database) + + z39.$setNo preferredRecordSyntax USMARC + + 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 - ir-set z39.1 z39 - z39.1 databaseNames [form base] - htmlr { WWW/Z39.50 Gateway Search } $t { } - htmlr {} - set query [build-query] - htmlr {query: } $query {
} - z39.1 search $query - htmlr {sessionId: } $sessionId {
} - htmlr {sessionParms: } $sessionParms {
} - htmlr {form: } [form] {
} - htmlr {databases: } $databases {
} + z39.$setNo search $hist($setNo,query) + zwait sessionWait - if {$sessionWait == 1} { - set r [z39.1 resultCount] - htmlr { } $r { hits
} + if {$sessionWait != 1} { + htmlr {} + wabort + } +} + + global sessionWait + global nextSetNo + global setNo + global hist + + set oldHost $hist($setNo,host) + + if {[wform menu1] == ""} { + html "state 1
\n" + set setNo [lindex $sessionParms 0] } else { - set status [z39.1 searchStatus] - set msg [lindex $status 2] - set addinfo [lindex $status 3] - html {Search fail: } $msg - if {$msg != ""} { - html {, } $addinfo + html "state 2
\n" + if {![info exists hist($nextSetNo,host)]} { + set hist($nextSetNo,host) $oldHost + } + set setNo $nextSetNo + html "using host " $hist($setNo,host) "
} - wabort } - set setOffset [z39.1 numberOfRecordsReturned] - display-rec 0 $setOffset - set setMax [z39.1 resultCount] - if {$setMax > 30} { - set setMax 30 + set host $hist($setNo,host) + set databases [lindex $targets($host) 1] + + htmlr { WWW/Z39.50 Gateway Search } $host { } + htmlr {} + html "

Search result

\n" + wflush + + + set startPos [lindex $sessionParms 1] + set endPos [lindex $sessionParms 2] + if {$startPos == ""} { + research $setNo $oldHost 1 + + set r [z39.$setNo resultCount] + html "

$r hits


\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 $setMax - $setOffset] + set toGet [expr 1 + $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 + 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] + } + display-rec $setOffset [expr $got + $setOffset - 1] + set setOffset [expr $got + $setOffset] + set toGet [expr 1 + $setMax - $setOffset] + wflush } } + +{ + html "
\n" + html "Debug information
\n" + html "sessionId: $sessionId
\n" + html "sessionParms: $sessionParms
\n" + foreach e {SERVER_NAME PATH_INFO SCRIPT_NAME} { + html $e {: } $env($e) {
} \n + } + html "form: " [wform] "
\n" + html "target: " $host "
\n" + html "databases: " $hist($setNo,database) "
\n" + html "selected: " [wform base] "
\n" + html "query: ->" $hist($setNo,query) "<-
" + html "setNo: " $setNo "
\n" + html "nextSetNo: " $nextSetNo "
\n" +} + +
+{ + if {$setMax < [z39.$setNo resultCount]} { + html { Next } "| \n" + } + if {$startPos != ""} { + html { Prev } "| \n" + } + html { New target } " | \n" + html { New query } +} -