* See the file LICENSE for details.
* Sebastian Hammer, Adam Dickmeiss
-$Revision: 1.3 $
+$Revision: 1.4 $
-Compilation and installation of IrTcl.
-This is a very early alpha-release of IrTcl.
+Quick notes about IrTcl.
+
+Prerequisites
+-------------
In order to compile you need:
o Tk version 3.6
o The XTI/mosi package
-Compilation:
- 1) Compile/install yaz/tcl, etc.
+Compilation
+-----------
+
+ Compile/install yaz/tcl, etc.
- 2) Edit Makefile (in current directory)
- Set MOSI to 1/0
- Define include directory paths of yaz/tcl/tk
- Define libraries of yaz/tcl/tk
+ Edit Makefile (in current directory)
+ Set MOSI to 1/0
+ Define include directory paths and libraries
- 3) Type 'make ir-tcl' to make the Tcl version or IrTcl.
- Type 'make ir-tk' to make the Tk version of IrTcl.
+ Type 'make ir-tcl' to make the Tcl version or IrTcl.
+ Type 'make ir-tk' to make the Tk version of IrTcl.
-Install/run:
+Install/run
+-----------
- 4) The resulting files are:
- ir-tcl Tcl version of IrTcl
- ir-tk Tk version of IrTcl
- marc.tcl/iterate.tcl small IrTcl scripts
- client.tcl Tk graphical client - automatically
- executed by ir-tk
- clientrc.tcl Startup script - read by client.tcl - holds
- user/target definitions.
- book[1-9] Logo - when busy.
+ The resulting files are:
+ ir-tcl Tcl version of IrTcl
+ ir-tk Tk version of IrTcl.
+ Options:
+ -file <tclfile>
+ Tcl startup script. Default is client.tcl.
+ -geometry <spec>
+ X11 geometry of main window.
+ -display <spec>
+ X11 display.
+ -name <name>
+ Name of top window.
+ -logLevel <logLevel>
+ log level. (fatal, debug, warn, log, all).
+ -logFile <fname>
+ log file. If omitted stderr is used.
+ formats/*.tcl Small IrTcl scripts to display
+ records in different formats.
+ client.tcl Tk graphical client - normally
+ executed by ir-tk.
+ clientrc.tcl Startup script - read by client.tcl - holds
+ user/target definitions.
+ clientg.tcl User preferrences - read by client.tcl.
+ Holds geometry of windows, current display
+ format, and hot targets.
+ book[1-9] book logo.
+ LICENSE License info - read by client.tcl.
- 5) Type 'ir-tk' to run the Tk graphical client (client.tcl and
- clientrc.tcl should be in current directory)
+ Type 'ir-tk' to run the Tk graphical client - client.tcl,
+ clientrc.tcl, book[1-9] and formats/*.tcl should exist!
- Type 'ir-tcl' to run the Tcl client. Very similar to tclsh.
+ Type 'ir-tcl' to run the Tcl client. Very similar to tclsh.
# Sebastian Hammer, Adam Dickmeiss
#
# $Log: client.tcl,v $
-# Revision 1.45 1995-06-19 08:08:44 adam
+# Revision 1.46 1995-06-19 13:06:06 adam
+# New define: IR_TCL_VERSION.
+#
+# Revision 1.45 1995/06/19 08:08:44 adam
# client.tcl: hotTargets now contain both database and target name.
# ir-tcl.c: setting protocol edited. Errors in callbacks are logged
# by logf(LOG_WARN, ...) calls.
.data.record configure -wrap $m
}
+proc dputs {m} {
+# puts $m
+}
+
proc set-display-format {f} {
global displayFormat
global setNo
set v1 1
}
.bot.logo configure -bitmap @book${v1}
- after 120 [list show-logo $v1]
+ after 140 [list show-logo $v1]
return
}
while {1} {
global scanEnable
global setOffset
global setMax
+ global setNo
.bot.a.status configure -text "$status"
if {$b == 1} {
if {$scanEnable} {
.mid.scan configure -state normal
}
- if {$setOffset > 0 && $setOffset <= $setMax} {
+ if {$setNo == 0} {
+ .top.service.m disable 1
+ } elseif {$setOffset > 0 && $setOffset <= [z39.$setNo resultCount]} {
.top.service.m enable 1
.mid.present configure -state normal
} else {
set n 1
}
$w.top.a.logo configure -bitmap @book$n
- after 120 [list about-origin-logo $n]
+ after 140 [list about-origin-logo $n]
}
proc about-origin {} {
}
}
set seq [lindex $profile(Default) 12]
- puts "seq=${seq}"
+ dputs "seq=${seq}"
set profile($target) $profile(Default)
set profile(Default) [lreplace $profile(Default) 12 12 [incr seq]]
}
proc connect-response {target base} {
- puts "connect-response"
+ dputs "connect-response"
show-target $target $base
init-request
}
z39 idAuthentication [lindex $profile($target) 3]
z39 maximumRecordSize [lindex $profile($target) 4]
z39 preferredMessageSize [lindex $profile($target) 5]
- puts -nonewline "maximumRecordSize="
- puts [z39 maximumRecordSize]
- puts -nonewline "preferredMessageSize="
- puts [z39 preferredMessageSize]
+ dputs "maximumRecordSize="
+ dputs [z39 maximumRecordSize]
+ dputs "preferredMessageSize="
+ dputs [z39 preferredMessageSize]
show-status {Connecting} 1 0
if {$base == ""} {
z39 databaseNames [lindex [lindex $profile($target) 7] 0]
}
z39 failback [list fail-response $target]
z39 callback [list connect-response $target $base]
+ update idletasks
set err [catch {
z39 connect [lindex $profile($target) 1]:[lindex $profile($target) 2]
} errorMessage]
}
z39 callback {init-response}
show-status {Initializing} 1 {}
- z39 init
+ set err [catch {z39 init} errorMessage]
+ if {$err} {
+ tkerror $errorMessage
+ show-status Ready 0 {}
+ }
}
proc init-response {} {
if {[lindex $profile($target) 10] == 1} {
z39.$setNo setName $setNo
- puts "setName=${setNo}"
+ dputs "setName=${setNo}"
} else {
z39.$setNo setName Default
- puts "setName=Default"
+ dputs "setName=Default"
}
if {[lindex $profile($target) 8] == 1} {
z39.$setNo queryType rpn
proc scan-copy {y entry} {
set w .scan-window
set no [$w.top.list nearest $y]
- puts "no=$no"
+ dputs "no=$no"
.lines.$entry.e delete 0 end
.lines.$entry.e insert 0 [string range [$w.top.list get $no] 8 end]
}
z39 callback [list scan-response $attr 0 35]
z39.scan numberOfTermsRequested 5
z39.scan preferredPositionInResponse 1
- puts "${attr} \{${scanTerm}\}"
+ dputs "${attr} \{${scanTerm}\}"
if {$scanTerm == ""} {
z39.scan scan "${attr} 0"
} else {
global scanView
set w .scan-window
- puts "In scan-response"
+ dputs "In scan-response"
set m [z39.scan numberOfEntriesReturned]
- puts $m
- puts attr=$attr
- puts start=$start
- puts toget=$toget
+ dputs $m
+ dputs attr=$attr
+ dputs start=$start
+ dputs toget=$toget
if {![winfo exists .scan-window]} {
show-status {Ready} 0 1
z39.scan numberOfTermsRequested 5
z39.scan preferredPositionInResponse 1
set scanTerm $nScanTerm
- puts "${attr} \{${scanTerm}\}"
+ dputs "${attr} \{${scanTerm}\}"
if {$scanTerm == ""} {
z39.scan scan "${attr} 0"
} else {
}
if {$toget > 0 && $m > 1 && $m < $toget} {
set ntoget [expr $toget - $m + 1]
- puts ntoget=$ntoget
+ dputs ntoget=$ntoget
z39 callback [list scan-response $attr [expr $start + $m - 1] $ntoget]
set q $term
- puts "down continue: $q"
+ dputs "down continue: $q"
if {$ntoget > 10} {
z39.scan numberOfTermsRequested 10
} else {
z39.scan numberOfTermsRequested $ntoget
}
z39.scan preferredPositionInResponse 1
- puts "${attr} \{$q\}"
+ dputs "${attr} \{$q\}"
z39.scan scan "${attr} \{$q\}"
return
}
if {$toget < 0 && $m > 1 && $m < [expr - $toget]} {
set ntoget [expr - $toget - $m]
- puts ntoget=$ntoget
+ dputs ntoget=$ntoget
z39 callback [list scan-response $attr 0 -$ntoget]
set q [string range [$w.top.list get 0] 8 end]
- puts "up continue: $q"
+ dputs "up continue: $q"
if {$ntoget > 10} {
z39.scan numberOfTermsRequested 10
z39.scan preferredPositionInResponse 11
z39.scan numberOfTermsRequested $ntoget
z39.scan preferredPositionInResponse [incr ntoget]
}
- puts "${attr} \{$q\}"
+ dputs "${attr} \{$q\}"
z39.scan scan "${attr} \{$q\}"
return
}
if {$scanView > $s} {
z39 callback [list scan-response $attr [expr $s - 1] 25]
set q [string range [$w.top.list get [expr $s - 1]] 8 end]
- puts "down: $q"
+ dputs "down: $q"
z39.scan numberOfTermsRequested 10
z39.scan preferredPositionInResponse 1
show-status {Scanning} 1 0
- puts "${attr} \{$q\}"
+ dputs "${attr} \{$q\}"
z39.scan scan "${attr} \{$q\}"
return
}
if {$scanView < 0} {
z39 callback [list scan-response $attr 0 -25]
set q [string range [$w.top.list get 0] 8 end]
- puts "up: $q"
+ dputs "up: $q"
z39.scan numberOfTermsRequested 10
z39.scan preferredPositionInResponse 11
show-status {Scanning} 1 0
global cancelFlag
global busy
- puts "In search-response"
+ dputs "In search-response"
init-title-lines
set setMax [z39.$setNo resultCount]
show-message "${setMax} hits"
global setOffset
global setMax
- puts "setOffset=$setOffset"
- puts "present-more"
+ dputs "setOffset=$setOffset"
+ dputs "present-more"
if {$setNo == 0} {
- puts "setNo=$setNo"
+ dputs "setNo=$setNo"
return
}
set max [z39.$setNo resultCount]
if {$max <= $setOffset} {
- puts "max=$max"
- puts "setOffset=$setOffset"
+ dputs "max=$max"
+ dputs "setOffset=$setOffset"
return
}
if {$number == ""} {
global setMax
global cancelFlag
- puts "In present-response"
+ dputs "In present-response"
set no [z39.$setNo numberOfRecordsReturned]
- puts "Returned $no records, setOffset $setOffset"
+ dputs "Returned $no records, setOffset $setOffset"
add-title-lines $setNo $no $setOffset
set setOffset [expr $setOffset + $no]
set status [z39.$setNo responseStatus]
return
}
if {$no > 0 && $setOffset <= $setMax} {
- puts "present-request from ${setOffset}"
+ dputs "present-request from ${setOffset}"
set toGet [expr $setMax - $setOffset + 1]
if {$toGet > 3} {
set toGet 3
$wno]
cascade-target-list
- puts $profile($target)
+ dputs $profile($target)
destroy $w
}
if {$target == ""} {
set target Default
}
- puts target
- puts $profile($target)
+ dputs target
+ dputs $profile($target)
frame $w.top.host
frame $w.top.port
foreach sub {description host port idAuthentication \
maximumRecordSize preferredMessageSize} {
- puts $sub
+ dputs $sub
bind $w.top.$sub.entry <Control-a> [list add-database $target]
bind $w.top.$sub.entry <Control-d> [list delete-database $target]
}
label $w.top.cs-type.label -text "Transport"
radiobutton $w.top.cs-type.tcpip -text "TCP/IP" -anchor w \
- -command {puts tcp/ip} -variable csRadioType -value tcpip
+ -variable csRadioType -value tcpip
radiobutton $w.top.cs-type.mosi -text "MOSI" -anchor w\
- -command {puts mosi} -variable csRadioType -value mosi
+ -variable csRadioType -value mosi
pack $w.top.cs-type.label $w.top.cs-type.tcpip $w.top.cs-type.mosi \
-padx 4 -side top -fill x
label $w.top.protocol.label -text "Protocol"
radiobutton $w.top.protocol.z39v2 -text "Z39.50" -anchor w \
- -command {puts Z39} -variable protocolRadioType -value Z39
+ -variable protocolRadioType -value Z39
radiobutton $w.top.protocol.sr -text "SR" -anchor w \
- -command {puts sr} -variable protocolRadioType -value SR
+ -variable protocolRadioType -value SR
pack $w.top.protocol.label $w.top.protocol.z39v2 $w.top.protocol.sr \
-padx 4 -side top -fill x
global queryIndexTmp
set queryButtonsTmp [lreplace $queryButtonsTmp $no $no [list I $i]]
- puts $queryButtonsTmp
+ dputs $queryButtonsTmp
set queryIndexTmp $i
}
set queryButtonsFind [lreplace $queryButtonsFind $no $no [list I $i]]
- puts "queryButtonsFind $queryButtonsFind"
+ dputs "queryButtonsFind $queryButtonsFind"
}
proc update-attr {} {
set lno [lindex [$w.top.use.list curselection] 0]
set i [expr $lno+$lno+1]
set useTmpValue [lindex $attr $i]
- puts "useTmpValue=$useTmpValue"
+ dputs "useTmpValue=$useTmpValue"
}
}
use-attr 0
- puts "index-setup-action"
- puts "queryNo $queryNo"
- puts "indexNo $indexNo"
+ dputs "index-setup-action"
+ dputs "queryNo $queryNo"
+ dputs "indexNo $indexNo"
if {$useTmpValue > 0} {
lappend attr "1=$useTmpValue"
}
if {$completenessTmpValue > 0} {
lappend attr "6=$completenessTmpValue"
}
- puts "new attr $attr"
+ dputs "new attr $attr"
set queryInfoTmp [lreplace $queryInfoTmp $indexNo $indexNo $attr]
destroy .index-setup
}
return
}
set attr [lindex $queryInfoTmp $i]
- puts "Editing no $i $attr"
+ dputs "Editing no $i $attr"
index-setup $attr $queryNo $i
}
}
incr i
}
- puts "qs= $qs"
+ dputs "qs= $qs"
return $qs
}
* Sebastian Hammer, Adam Dickmeiss
*
* $Log: ir-tcl.c,v $
- * Revision 1.42 1995-06-19 08:08:52 adam
+ * Revision 1.43 1995-06-19 13:06:08 adam
+ * New define: IR_TCL_VERSION.
+ *
+ * Revision 1.42 1995/06/19 08:08:52 adam
* client.tcl: hotTargets now contain both database and target name.
* ir-tcl.c: setting protocol edited. Errors in callbacks are logged
* by logf(LOG_WARN, ...) calls.
static int do_protocolVersion (void *obj, Tcl_Interp *interp,
int argc, char **argv)
{
- static struct ir_named_entry version_tab[] = {
- { "1", 0 },
- { "2", 1 },
- { "3", 2 },
- { "4", 3 },
- { NULL,0}
- };
+ int version, i;
+ char buf[10];
IrTcl_Obj *p = obj;
if (argc <= 0)
ODR_MASK_SET (&p->protocolVersion, 1);
return TCL_OK;
}
- return ir_named_bits (version_tab, &p->protocolVersion,
- interp, argc-2, argv+2);
+ if (argc == 3)
+ {
+ if (Tcl_GetInt (interp, argv[2], &version)==TCL_ERROR)
+ return TCL_ERROR;
+ ODR_MASK_ZERO (&p->protocolVersion);
+ for (i = 0; i<version; i++)
+ ODR_MASK_SET (&p->protocolVersion, i);
+ }
+ for (i = 4; --i >= 0; )
+ if (ODR_MASK_GET (&p->protocolVersion, i))
+ break;
+ sprintf (buf, "%d", i+1);
+ interp->result = buf;
+ return TCL_OK;
}
/*
IrTcl_Obj *p = obj;
if (argc == 0)
- return ir_strdup (interp, &p->implementationVersion, YAZ_VERSION);
+ return ir_strdup (interp, &p->implementationVersion,
+ "YAZ: " YAZ_VERSION " / IrTcl: " IR_TCL_VERSION);
else if (argc == -1)
return ir_strdel (interp, &p->implementationVersion);
Tcl_AppendResult (interp, p->implementationVersion, (char*) NULL);
ODR_MASK_SET (&p->options, 1);
ODR_MASK_SET (&p->options, 7);
ODR_MASK_SET (&p->options, 14);
+
+ ODR_MASK_ZERO (&p->protocolVersion);
+ ODR_MASK_SET (&p->protocolVersion, 0);
+ ODR_MASK_SET (&p->protocolVersion, 1);
}
assert (!p->cs_link);
return TCL_OK;
{
r = cs_rcvconnect (p->cs_link);
if (r == 1)
+ {
+ logf (LOG_WARN, "cs_rcvconnect returned 1");
return;
+ }
p->connectFlag = 0;
ir_select_remove_write (cs_fileno (p->cs_link), p);
if (r < 0)