X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=www%2Fz39util.tcl;h=8740be44742c7b7eab30d3ea135425806e25fca6;hb=4938d0c2e8f4e1eec397c2bfbbc7e23fd150c369;hp=1d78f644c3ff8beea814e3dc0fa2a1dd534a4029;hpb=da4f027b1e7c0bf90efe6782a326448af164cd37;p=egate.git diff --git a/www/z39util.tcl b/www/z39util.tcl index 1d78f64..8740be4 100644 --- a/www/z39util.tcl +++ b/www/z39util.tcl @@ -1,5 +1,5 @@ # -# $Id: z39util.tcl,v 1.28 1996/01/29 17:31:48 adam Exp $ +# $Id: z39util.tcl,v 1.36 1996/03/07 12:46:09 adam Exp $ # proc saveState {} { uplevel #0 { @@ -65,12 +65,10 @@ 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 {
  • } set type [$zset type $no] if {$type == "SD"} { @@ -90,7 +88,15 @@ proc display-brief {zset no tno} { html [join [$zset getSutrs $no]] html "
    \n" return - } + } + if {$rtype == "WAIS"} { + html { } + html [join [$zset getWAIS $no headline]] + html {} + html "
    \n" + return + } if {![catch { set author [$zset getMarc $no field 100 * a] set corp [$zset getMarc $no field 110 * a] @@ -104,9 +110,9 @@ proc display-brief {zset no tno} { set location [$zset getMarc $no field 260 * a] set publisher [$zset getMarc $no field 260 * b] set year [$zset getMarc $no field 260 * c] - } ] } { + } dispError ] } { html { } + html $sessionId {/showfull.egw/} $setNo + $targetNo + $no + full {">} set p 0 foreach a $author { if {$p} { @@ -140,12 +146,22 @@ proc display-brief {zset no tno} { if {$nope} { set v [join $cover ""] if {[string length $v] > 40} { + set nope 0 html [string range $v 0 38] "..." - } else { + } elseif {[string length $v] > 0} { + set nope 0 html $v + } else { + html "No Title" } } html { } + } else { + html { } + html {No Title} + html { } + html "Error: " $dispError "\n" } html "
    \n" } @@ -287,7 +303,82 @@ proc dl-marc-field-rec {zset no tag lead start stop startid sep} { } } -proc display-full {zset no tno} { +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]] { + if {[string compare [string index $l 0] {<}]} { + set data($element) $l + continue + } + switch -exact $l { + { + set element title + } + { + set element dateOfLastModification + } + { + set element controlIdentifier + } + { + set element lastChecked + } + { + set element bytes + } + { + set element linkage + } + { + incr i + } +
  • { + set element "$i,linkage" + } + { + set element "$i,title" + } + default { + set element junk + } + } + } + if {![info exists data(title)] || ![info exists data(linkage)]} { + html "" [join [$zset getWAIS $no text]] "\n" + return + } + html {Title: } {} $data(title) "
    \n" + html {URL: } $data(linkage) "
    \n" + html {Score: } [$zset getWAIS $no score] "
    \n" + html {Lines: } [$zset getWAIS $no lines] "
    \n" + if {[info exists data(bytes)]} { + html {Bytes: } $data(bytes) "
    \n" + } + if {[info exists data(dateOfLastModification)]} { + html {Last modified: } $data(dateOfLastModification) "
    \n" + } + if {[info exists data(lastChecked)]} { + html {Last checked: } $data(lastChecked) "
    \n" + } + html {} + html {Similar WAIS record
    } + html "\n" +} + +proc display-full {zset no setNo targetNo} { set type [$zset type $no] if {$type == "SD"} { set err [lindex [$zset diag $no] 1] @@ -305,7 +396,11 @@ proc display-full {zset no tno} { if {$rtype == "SUTRS"} { html [join [$zset getSutrs $no]] "
    \n" return - } + } + if {$rtype == "WAIS"} { + display-full-wais $zset $no $setNo $targetNo + return + } if {[catch {set r [$zset getMarc $no line * * *]}]} { html "Unknown record type: $rtype
    \n" return @@ -391,7 +486,7 @@ proc display-full {zset no tno} { if {"x$sp" == "x"} { set sp $url } - html {
    } [join $sp] "\n" + html {
    } [join $sp] "\n" } dl-marc-field $zset $no 037 {[abc]} "Acquisition" {} "
    \n" dl-marc-field $zset $no 037 {[f6]} "Form of issue" {} "
    \n" @@ -403,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 } } @@ -443,6 +529,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] { @@ -471,24 +566,14 @@ 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) - } - if {[catch [list $zz failback fail-response]]} { - ir $zz - } + 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 "" } @@ -496,7 +581,7 @@ proc z39scan {setNo scanNo tno scanLines scanPos cache} { $zz callback ok-response $zz failback fail-response set thisHost [splitHostSpec $host] - if {$oldHost != $thisHost} { + if {[string compare $oldHost $thisHost]} { catch [list $zz disconnect] set sessionWait 0 @@ -579,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] @@ -601,7 +682,7 @@ proc display-scan {setNo scanNo tno} { set hist($setNo,[expr $scanNo + 1],scanTerm) $t } } - html {} + html {
    } html {} \n @@ -616,7 +697,7 @@ proc display-scan {setNo scanNo tno} { } else { regsub -all {\ } [lindex [$zs scanLine $i] 1] + tterm html {} } html [lindex [$zs scanLine $i] 1] @@ -633,29 +714,21 @@ 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) - } - if {[catch [list $zz failback fail-response]]} { - ir $zz - } + 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 "" } $zz callback ok-response $zz failback fail-response set thisHost [splitHostSpec $host] - if {$oldHost != $thisHost} { + if {[string compare $oldHost $thisHost]} { catch [list $zz disconnect] set sessionWait 0 @@ -680,7 +753,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 @@ -696,15 +769,23 @@ proc z39search {setNo piggy tno elements} { displayError "Cannot initialize target $thisHost" $u return 0 } - } else { - if {[info exists hist($setNo,hits)] && \ - ![catch [list $zz.$setNo smallSetUpperBound 0]]} { - return 1 + } elseif {![catch [list $zz.$setNo smallSetUpperBound 0]]} { + if {$tno > 0} { + if {[info exists hist($setNo,$tno,hits)]} { + return 1 + } + } else { + if {[info exists hist($setNo,hits)]} { + return 1 + } } - } - 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 {} } @@ -729,9 +810,14 @@ proc z39search {setNo piggy tno elements} { } set sessionWait 0 egw_log debug "search: $query" - $zz.$setNo search $query - if {[catch {egw_wait sessionWait 600}]} { + if {[info exists docId]} { + $zz.$setNo search $query $docId + } else { + $zz.$setNo search $query + } + + if {!$sessionWait && [catch {egw_wait sessionWait 60}]} { egw_log debug "timeout/cancel in search" displayError "Timeout in search" {} html "\n" @@ -757,8 +843,13 @@ proc init-m-response {i} { egw_log debug "init-m-response" - set zstatus($i) 1 incr zleft -1 + if {![z39$i initResult]} { + set zstatus($i) -1 + z39$i disconnect + return + } + set zstatus($i) 1 } proc connect-m-response {i} { @@ -790,16 +881,20 @@ proc search-m-response {setNo i start number} { egw_log debug "search-m-response" set status [z39$i.$setNo responseStatus] egw_log debug "search-m-response1" - if {[lindex $status 0] != "DBOSD"} { + if {[lindex $status 0] == "OK"} { + set nor 0 + } elseif {[lindex $status 0] == "DBOSD"} { + set nor [z39$i.$setNo numberOfRecordsReturned] + } else { egw_log debug "search-m-response2" incr zleft -1 set zstatus($i) 2 return } - set nor [z39$i.$setNo numberOfRecordsReturned] + set hist($setNo,$i,hits) [z39$i.$setNo resultCount] egw_log debug "search-m-response3" set hist($setNo,$i,offset) [expr $start + $nor -1] - if {[expr $nor + $start] >= [z39$i.$setNo resultCount]} { + if {[expr $nor + $start] > [z39$i.$setNo resultCount]} { egw_log debug "search-m-response4" incr zleft -1 set zstatus($i) 2 @@ -807,7 +902,7 @@ proc search-m-response {setNo i start number} { } egw_log debug "search-m-response5" if {$nor >= $number} { - egw_log debug "search-m-response6" + egw_log debug "search-m-response6 nor=$nor number=$number" incr zleft -1 set zstatus($i) 2 return @@ -828,17 +923,17 @@ proc z39msearch {setNo elements start number cache} { global zstatus global hist global targets + global debug set not $hist($setNo,0,host) + 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 {$oldHost != $thisHost} { + if {[string compare $oldHost $thisHost]} { catch {z39$i disconnect} } z39$i callback [list connect-m-response $i] @@ -849,7 +944,7 @@ proc z39msearch {setNo elements start number cache} { set oldHost [z39$i connect] set host $hist($setNo,$i,host) set thisHost [splitHostSpec $host] - if {$oldHost == $thisHost} { + if {![string compare $oldHost $thisHost]} { continue } egw_log debug "old=$oldHost this=$thisHost" @@ -868,15 +963,27 @@ proc z39msearch {setNo elements start number cache} { } set zleft 0 for {set i 1} {$i <= $not} {incr i} { - html "host " [splitHostSpec $hist($setNo,$i,host)] ": " + set host $hist($setNo,$i,host) + if {$debug} { + html "host " [splitHostSpec $host] ": " + } egw_log debug "i=$i zstatus=$zstatus($i)" if {$zstatus($i) < 1} { - html "fail
    \n" + if {$debug} { + html "fail
    \n" + } continue } if {[catch [list z39$i.$setNo preferredRecordSyntax USMARC]]} { - html "ok
    \n" - ir-set z39$i.$setNo z39$i + if {$debug} { + html "ok
    \n" + } + + 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) @@ -923,15 +1030,21 @@ proc z39msearch {setNo elements start number cache} { z39$i.$setNo recordElements $thisElements for {set n 0} {$n < $tnumber} {incr n} { - if {[z39$i.$setNo type [expr $start + $n]] == ""} { + if {[z39$i.$setNo recordType [expr $start + $n]] == ""} { if {$n > 0} { egw_log debug "failed on $n" } + if {$debug} { + html "no record at #" [expr $start + $n] + html " el=-" $thisElements "-" + } break } } if {$n == $tnumber} { - html "cached
    \n" + if {$debug} { + html "cached
    \n" + } continue } @@ -942,7 +1055,9 @@ proc z39msearch {setNo elements start number cache} { egw_log debug "mpresent start=$start number=$tnumber" z39$i.$setNo present $start $tnumber } else { - html "ok
    \n" + if {$debug} { + html "ok
    \n" + } } } while {$zleft > 0} { @@ -965,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 {} @@ -985,7 +1095,7 @@ proc z39present {setNo tno setOffset setMax dfunc elements} { while {$setMax > 0 && $toGet > 0} { for {set got 0} {$got < $toGet} {incr got} { - if {[$zz.$setNo type [expr $setOffset + $got]] == ""} { + if {[$zz.$setNo recordType [expr $setOffset + $got]] == ""} { break } } @@ -1008,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 "

    \n" + button-europagate + if {$setMax > 0 && $setMax < [$zz.$setNo resultCount]} { + html {Next Records} + } else { + html {">Next Records} " | \n" + } + } + if {$setMax > 0 && $startPos != "" && $startPos != "1"} { + html {} + } else { + html {">Previous Records} " | \n" + } + } + button-new-query 1 $setNo + button-new-target 1 + button-view-history 0 + + html "

    \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 {

    Records 1-} $setMax " out of $r

    \n" + } else { + html "

    No hits

    \n" + } + egw_flush + html "
      \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 {

      Records } $startPos {-} $setMax " out of $r

      \n" + } else { + html "

      No hits

      \n" + } + egw_flush + html "
        \n" + } + if {$setMax > 0} { + z39present $setNo $targetNo $setOffset $setMax display-brief B + } + html "
      \n" + set useIcons 0 + buttons-result-set-s $setNo $targetNo $setMax $startPos 1 +} + proc z39history {} { global nextSetNo global hist @@ -1023,23 +1234,24 @@ proc z39history {} { global targets global html3 + set targetNo 0 if {![info exists nextSetNo]} { return } html "

      History


      \n" if {$html3} { html {
    Scan term} html {Hits} html {
    } - html {} "\n" } else { html {
    } "\n" } 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 {
    Target} - html {Database} - html {Hits} - html {Query} + html {Target} + html {Database} + html {Hits} + html {Query} html {
    } } else { @@ -1047,11 +1259,11 @@ proc z39history {} { } html [lindex $targets($host) 0] if {$html3} { - html {} [join $hist($setNo,database)] + html {} [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" } } @@ -1062,7 +1274,7 @@ proc z39history {} { } if {[info exists hist($setNo,hits)]} { html { } $hist($setNo,hits) {} @@ -1209,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} { @@ -1231,8 +1443,9 @@ proc button-scan-window {more setNo} { global sessionId global hist + set targetNo 0 html {} + html / $sessionId {/search.egw/} $setNo + $targetNo + {scan} {">} if {$useIcons} { html {} @@ -1266,3 +1479,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