# Sebastian Hammer, Adam Dickmeiss
#
# $Log: client.tcl,v $
-# Revision 1.47 1995-06-19 14:05:29 adam
+# Revision 1.51 1995-06-21 11:11:00 adam
+# Bug fix: libdir undefined in about-origin.
+#
+# Revision 1.50 1995/06/21 11:04:48 adam
+# Uses GNU autoconf 2.3.
+# Install procedure implemented.
+# boook bitmaps moved to sub directory bitmaps.
+#
+# Revision 1.49 1995/06/20 14:16:42 adam
+# More work on cancel mechanism.
+#
+# Revision 1.48 1995/06/20 08:07:23 adam
+# New setting: failInfo.
+# Working on better cancel mechanism.
+#
+# Revision 1.47 1995/06/19 14:05:29 adam
# Bug fix: asked for SUTRS.
#
# Revision 1.46 1995/06/19 13:06:06 adam
# First presentRequest attempts. Hot-target list.
#
#
+
+set libdir LIBDIR
+if {[file readable clientrc.tcl]} {
+ set libdir .
+}
set hotTargets {}
set hotInfo {}
set busy 0
-set libDir ""
-
set profile(Default) {{} {} {210} {} 16384 8192 tcpip {} 1 {} {} Z39}
set hostid Default
set settingsChanged 0
set setNo 0
set lastSetNo 0
set cancelFlag 0
-set searchEnable 0
set scanEnable 0
set fullMarcSeq 0
set displayFormat 1
set popupMarcdf 0
set textWrap word
+set delayRequest {}
set queryTypes {Simple}
set queryButtons { { {I 0} {I 1} {I 2} } }
proc read-formats {} {
global displayFormats
- set formats [glob -nocomplain formats/*.tcl]
+ global libdir
+ set formats [glob -nocomplain ${libdir}/formats/*.tcl]
foreach f $formats {
- source $f
- set l [expr [string length $f] - 5]
- lappend displayFormats [string range $f 8 $l]
+ if {[file readable $f]} {
+ source $f
+ set l [expr [string length $f] - 5]
+ lappend displayFormats [string range $f 8 $l]
+ }
}
}
}
proc dputs {m} {
-# puts $m
+ puts $m
}
proc set-display-format {f} {
bind $w <Destroy> [list destroyGW $w]
}
-if {[file readable "clientrc.tcl"]} {
- source "clientrc.tcl"
+if {[file readable "${libdir}/clientrc.tcl"]} {
+ source "${libdir}/clientrc.tcl"
}
-if {[file readable "clientg.tcl"]} {
- source "clientg.tcl"
+if {[file readable "~/.clientrc.tcl"]} {
+ source "~/.clientrc.tcl"
}
set queryButtonsFind [lindex $queryButtons 0]
proc cancel-operation {} {
global cancelFlag
global busy
+ global delayRequest
- set cancelFlag 1
if {$busy} {
- show-status Canceling 0 {}
+ set cancelFlag 1
+ set delayRequest {}
+ show-status Cancel 0 1
}
}
proc show-logo {v1} {
global busy
+ global libdir
+
if {$busy != 0} {
incr v1
if {$v1==10} {
set v1 1
}
- .bot.logo configure -bitmap @book${v1}
+ .bot.logo configure -bitmap @${libdir}/bitmaps/book${v1}
after 140 [list show-logo $v1]
return
}
while {1} {
- .bot.logo configure -bitmap @book1
+ .bot.logo configure -bitmap @${libdir}/bitmaps/book1
tkwait variable busy
if {$busy} {
show-logo 1
proc show-status {status b sb} {
global busy
- global searchEnable
global scanEnable
global setOffset
global setMax
.scan-window.bot.2 configure -state normal
.scan-window.bot.4 configure -state normal
}
- set searchEnable 1
} else {
.top.service configure -state disabled
.mid.search configure -state disabled
.scan-window.bot.2 configure -state disabled
.scan-window.bot.4 configure -state disabled
}
- set searchEnable 0
}
}
}
proc popup-license {} {
+ global libdir
set w .popup-licence
toplevel $w
pack $w.top.s -side right -fill y
pack $w.top.t -expand yes -fill both
- set f [open "LICENSE" r]
- while {[gets $f buf] != -1} {
- $w.top.t insert end $buf
- $w.top.t insert end "\n"
- }
- close $f
+ if {[file readable "${libdir}/LICENSE"]} {
+ set f [open "${libdir}/LICENSE" r]
+ while {[gets $f buf] != -1} {
+ $w.top.t insert end $buf
+ $w.top.t insert end "\n"
+ }
+ close $f
+ }
bottom-buttons $w [list {Close} [list destroy $w]] 1
}
}
proc about-origin-logo {n} {
+ global libdir
set w .about-origin-w
if {![winfo exists $w]} {
return
if {$n==10} {
set n 1
}
- $w.top.a.logo configure -bitmap @book$n
+ $w.top.a.logo configure -bitmap @${libdir}/bitmaps/book$n
after 140 [list about-origin-logo $n]
}
proc about-origin {} {
set w .about-origin-w
+ global libdir
if {[winfo exists $w]} {
destroy $w
label $w.top.a.irtcl -text "IrTcl" \
-font -Adobe-Helvetica-Bold-R-Normal-*-240-*
- label $w.top.a.logo -bitmap @book1
+ label $w.top.a.logo -bitmap @${libdir}/bitmaps/book1
pack $w.top.a.irtcl $w.top.a.logo -side left -expand yes
set i [z39 implementationName]
}
proc fail-response {target} {
+ set c [lindex [z39 failInfo] 0]
+ set m [lindex [z39 failInfo] 1]
close-target
- tkerror "Target connection closed or protocol error"
+ tkerror "$m ($c)"
}
proc connect-response {target base} {
}
}
-proc search-request {} {
+proc search-request {bflag} {
global setNo
global profile
global hostid
global busy
global cancelFlag
- global searchEnable
+ global delayRequest
set target $hostid
- if {$searchEnable == 0} {
+ dputs "search-request"
+ show-message {}
+ if {!$bflag && $busy} {
+ dputs "busy: search-request ignored"
return
}
+ if {$cancelFlag} {
+ dputs "cancelFlag"
+ show-status {Searching} 1 0
+ set delayRequest {search-request 1}
+ return
+ }
+ set delayRequest {}
+
set query [index-query]
if {$query==""} {
return
global curIndexEntry
global queryButtonsFind
global queryInfoFind
+ global cancelFlag
+ global delayRequest
+
+ dputs "scan-request"
+ if {$cancelFlag} {
+ dputs "cancelFlag"
+ show-status {Scanning} 1 0
+ set delayRequest scan-request
+ return
+ }
+ set delayRequest {}
set target $hostid
set scanView 0
proc scan-response {attr start toget} {
global cancelFlag
+ global delayRequest
global scanTerm
global scanView
dputs toget=$toget
if {![winfo exists .scan-window]} {
+ if {$cancelFlag} {
+ set cancelFlag 0
+ dputs "Handling cancel"
+ if {$delayRequest != ""} {
+ eval $delayRequest
+ }
+ return
+ }
show-status {Ready} 0 1
- set cancelFlag 0
return
}
set nScanTerm [$w.top.entry get]
}
}
if {$cancelFlag} {
- show-status {Ready} 0 1
+ dputs "Handling cancel"
set cancelFlag 0
+ if {$delayRequest != ""} {
+ eval $delayRequest
+ }
return
}
+ set delayRequest {}
if {$toget > 0 && $m > 1 && $m < $toget} {
set ntoget [expr $toget - $m + 1]
dputs ntoget=$ntoget
proc scan-down {attr} {
global scanView
+ global cancelFlag
+ global delayRequest
+
+ dputs {scan-down}
+ if {$cancelFlag} {
+ dputs "cancelFlag"
+ show-status {Scanning down} 1 0
+ set delayRequest [list scan-down $attr]
+ return
+ }
+ set delayRequest {}
set w .scan-window
set scanView [expr $scanView + 5]
proc scan-up {attr} {
global scanView
+ global cancelFlag
+ global delayRequest
+
+ dputs {scan-up}
+ if {$cancelFlag} {
+ dputs "cancelFlag"
+ show-status {Scanning up} 1 0
+ set delayRequest [list scan-up $attr]
+ return
+ }
+ set delayRequest {}
set w .scan-window
set scanView [expr $scanView - 5]
global setMax
global cancelFlag
global busy
+ global delayRequest
dputs "In search-response"
+ if {$cancelFlag} {
+ dputs "Handling cancel"
+ set cancelFlag 0
+ if {$delayRequest != ""} {
+ eval $delayRequest
+ }
+ return
+ }
+ set delayRequest {}
init-title-lines
set setMax [z39.$setNo resultCount]
show-message "${setMax} hits"
}
set setOffset 1
show-status {Ready} 0 1
- if {$cancelFlag} {
- set cancelFlag 0
- return
- }
z39 callback {present-response}
z39.$setNo present $setOffset 1
show-status {Retrieving} 1 0
global setNo
global setOffset
global setMax
+ global busy
+ global cancelFlag
+ global delayRequest
- dputs "setOffset=$setOffset"
dputs "present-more"
+ if {$cancelFlag} {
+ show-status {Retrieving} 1 0
+ set delayRequest "present-more $number"
+ return
+ }
+ set delayRequest {}
+
if {$setNo == 0} {
dputs "setNo=$setNo"
return
global setOffset
global setMax
global cancelFlag
+ global delayRequest
dputs "In present-response"
set no [z39.$setNo numberOfRecordsReturned]
dputs "Returned $no records, setOffset $setOffset"
add-title-lines $setNo $no $setOffset
set setOffset [expr $setOffset + $no]
+ if {$cancelFlag} {
+ dputs "Handling cancel"
+ set cancelFlag 0
+ if {$delayRequest != ""} {
+ eval $delayRequest
+ }
+ return
+ }
set status [z39.$setNo responseStatus]
if {[lindex $status 0] == "NSD"} {
show-status {Ready} 0 1
tkerror "NSD$code: $msg: $addinfo"
return
}
- if {$cancelFlag} {
- show-status {Ready} 0 1
- set cancelFlag 0
- return
- }
if {$no > 0 && $setOffset <= $setMax} {
dputs "present-request from ${setOffset}"
set toGet [expr $setMax - $setOffset + 1]
set windowGeometry(.) [wm geometry .]
- set f [open "clientg.tcl" w]
+ set f [open "~/.clientrc.tcl" w]
puts $f "set hotTargets \{ $hotTargets \}"
puts $f "set textWrap $textWrap"
proc save-settings {} {
global profile
+ global libdir
global settingsChanged
global queryTypes
global queryButtons
global queryInfo
-
- set f [open "clientrc.tcl" w]
+
+ if {![file writeable "${libdir}/clientrc.tcl"]} {
+ return
+ }
+ set f [open "${libdir}/clientrc.tcl" w]
puts $f "# Setup file"
foreach n [array names profile] {
pack $w.$i -side top -fill x -padx 2 -pady 2
bind $w.$i.e <Left> [list left-cursor $w.$i.e]
bind $w.$i.e <Right> [list right-cursor $w.$i.e]
- bind $w.$i.e <Return> search-request
+ bind $w.$i.e <Return> {search-request 0}
}
} else {
pack $w.$i.l -side left
-command [list present-more 10]
.top.service.m.present add command -label "All" \
-command [list present-more {}]
-.top.service.m add command -label "Search" -command {search-request}
+.top.service.m add command -label "Search" -command {search-request 0}
.top.service.m add command -label "Scan" -command {scan-request}
.top.service configure -state disabled
index-lines .lines 1 $queryButtonsFind [lindex $queryInfo 0] activate-index
-button .mid.search -width 7 -text {Search} -command search-request \
+button .mid.search -width 7 -text {Search} -command {search-request 0} \
-state disabled
button .mid.scan -width 7 -text {Scan} \
-command scan-request -state disabled
}
.data.record tag configure marc-data -foreground black
-button .bot.logo -bitmap @book1 -command cancel-operation
+button .bot.logo -bitmap @${libdir}/bitmaps/book1 -command cancel-operation
frame .bot.a
pack .bot.a -side left -fill x
pack .bot.logo -side right -padx 2 -pady 2