{ # $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 {} $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 {
} } 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 { 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 {
} zwait sessionWait if {$sessionWait == 1} { set r [z39.1 resultCount] htmlr { } $r { hits
} } else { set status [z39.1 searchStatus] set msg [lindex $status 2] set addinfo [lindex $status 3] html {Search fail: } $msg if {$msg != ""} { html {, } $addinfo } htmlr {
} 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 } } }