Bug fix in client.tcl: didn't save options on clientrc.tcl.
[ir-tcl-moved-to-github.git] / client.tcl
index d82e8c6..8a18b90 100644 (file)
@@ -1,6 +1,23 @@
 #
 # $Log: client.tcl,v $
-# Revision 1.19  1995-04-18 16:11:50  adam
+# Revision 1.24  1995-05-31 08:36:24  adam
+# Bug fix in client.tcl: didn't save options on clientrc.tcl.
+# New method: referenceId. More work on scan.
+#
+# Revision 1.23  1995/05/29  10:33:41  adam
+# README and rename of startup script.
+#
+# Revision 1.22  1995/05/26  11:44:09  adam
+# Bugs fixed. More work on MARC utilities and queries. Test
+# client is up-to-date again.
+#
+# Revision 1.21  1995/05/11  15:34:46  adam
+# Scan request changed a bit. This version works with RLG.
+#
+# Revision 1.20  1995/04/21  16:31:57  adam
+# New radiobutton: protocol (z39v2/SR).
+#
+# Revision 1.19  1995/04/18  16:11:50  adam
 # First version of graphical Scan. Some work on query-by-form.
 #
 # Revision 1.18  1995/04/10  10:50:22  adam
@@ -66,19 +83,20 @@ set hotTargets {}
 set hotInfo {}
 set busy 0
 
-set profile(Default) {{} {} {210} {} 16384 8192 tcpip {}}
+set profile(Default) {{} {} {210} {} 16384 8192 tcpip {} 1 {} {} z39v2}
 set hostid Default
 set settingsChanged 0
 set setNo 0
 
 set queryTypes {Simple}
 set queryButtons { { {I 0} {I 1} {I 2} } }
-set queryInfo { { {Title ti} {Author au} {Subject sh} {Any any} } }
+set queryInfo { { {Title {1=4}} {Author {1=1}} \
+        {Subject {1=21}} {Any {1=1016}} } }
 
-wm minsize . 300 250
+wm minsize . 350 250
 
-if {[file readable "~/.tk-c"]} {
-    source "~/.tk-c"
+if {[file readable "clientrc.tcl"]} {
+    source "clientrc.tcl"
 }
 
 set queryButtonsFind [lindex $queryButtons 0]
@@ -88,7 +106,8 @@ proc top-down-window {w} {
     frame $w.top -relief raised -border 1
     frame $w.bot -relief raised -border 1
     
-    pack  $w.top $w.bot -side top -fill both -expand yes
+    pack  $w.top -side top -fill both -expand yes
+    pack  $w.bot -fill both
 }
 
 proc top-down-ok-cancel {w ok-action g} {
@@ -209,7 +228,7 @@ proc show-full-marc {no} {
     }
     incr no
     
-    set r [z39.$setNo recordMarc $no line * * *]
+    set r [z39.$setNo getMarc $no list * * *]
 
     $w.top.record tag configure marc-tag -foreground blue
     $w.top.record tag configure marc-data -foreground black
@@ -324,7 +343,7 @@ proc open-target {target base} {
 
     z39 disconnect
     z39 comstack [lindex $profile($target) 6]
-    # z39 idAuthentication [lindex $profile($target) 3]
+    z39 idAuthentication [lindex $profile($target) 3]
     z39 maximumRecordSize [lindex $profile($target) 4]
     z39 preferredMessageSize [lindex $profile($target) 5]
     puts -nonewline "maximumRecordSize="
@@ -364,7 +383,7 @@ proc load-set-action {} {
     global setNo
 
     incr setNo
-    ir-set z39.$setNo
+    ir-set z39.$setNo z39
 
     set fname [.load-set.top.filename.entry get]
     destroy .load-set
@@ -415,6 +434,11 @@ proc init-response {} {
     .top.search configure -state normal
     .mid.search configure -state normal
     .mid.scan configure -state normal
+    if {![z39 initResult]} {
+        set u [z39 userInformationField]
+        close-target
+        tkerror "Connection rejected by target: $u"
+    }
 }
 
 proc search-request {} {
@@ -429,19 +453,20 @@ proc search-request {} {
         return
     }
     incr setNo
-    ir-set z39.$setNo
+    ir-set z39.$setNo z39
 
-
-    if {[lindex $profile($target) 10]} {
+    if {[lindex $profile($target) 10] == 1} {
         z39.$setNo setName $setNo
+        puts "setName=${setNo}"
     } else {
         z39.$setNo setName Default
+        puts "setName=Default"
     }
-    if {[lindex $profile($target) 8]} {
-        z39 query rpn
+    if {[lindex $profile($target) 8] == 1} {
+        z39.$setNo queryType rpn
     }
-    if {[lindex $profile($target) 9]} {
-        z39 query ccl
+    if {[lindex $profile($target) 9] == 1} {
+        z39.$setNo queryType ccl
     }
     z39 callback {search-response}
     z39.$setNo search $query
@@ -456,7 +481,7 @@ proc scan-request {} {
 
     set target $hostid
 
-    ir-scan z39.scan
+    ir-scan z39.scan z39
 
     z39 callback {scan-response}
     if {![winfo exists $w]} {
@@ -477,7 +502,8 @@ proc scan-request {} {
 
         top-down-ok-cancelx $w [list {Close} [list destroy $w]] 0 
     }
-    z39.scan scan 0
+    z39.scan numberOfTermsRequested 100
+    z39.scan scan "@attr 1=4 0"
     
     show-status {Scan} 1
 }
@@ -556,8 +582,8 @@ proc init-title-lines {} {
 proc add-title-lines {setno no offset} {
     for {set i 0} {$i < $no} {incr i} {
         set o [expr $i + $offset]
-        set title [lindex [z39.$setno recordMarc $o field 245 * a] 0]
-        set year  [lindex [z39.$setno recordMarc $o field 260 * c] 0]
+        set title [lindex [z39.$setno getMarc $o field 245 * a] 0]
+        set year  [lindex [z39.$setno getMarc $o field 260 * c] 0]
         set nostr [format "%5d" $o]
         .data.list insert end "$nostr $title - $year"
     }
@@ -654,6 +680,7 @@ proc define-target-dialog {} {
 proc protocol-setup-action {target} {
     global profile
     global csRadioType
+    global protocolRadioType
     global settingsChanged
     global RPNCheck
     global CCLCheck
@@ -679,7 +706,8 @@ proc protocol-setup-action {target} {
             $b \
             $RPNCheck \
             $CCLCheck \
-            $ResultSetCheck ]
+            $ResultSetCheck \
+            $protocolRadioType ]
 
     cascade-target-list
     puts $profile($target)
@@ -741,6 +769,7 @@ proc protocol-setup {target} {
 
     global profile
     global csRadioType
+    global protocolRadioType
     global RPNCheck
     global CCLCheck
     global ResultSetCheck
@@ -765,6 +794,7 @@ proc protocol-setup {target} {
     frame $w.top.maximumRecordSize
     frame $w.top.preferredMessageSize
     frame $w.top.cs-type -relief ridge -border 2
+    frame $w.top.protocol -relief ridge -border 2
     frame $w.top.query -relief ridge -border 2
     frame $w.top.databases -relief ridge -border 2
 
@@ -775,7 +805,7 @@ proc protocol-setup {target} {
     
     entry-fields $w.top {description host port idAuthentication \
             maximumRecordSize preferredMessageSize} \
-            {{Description:} {Host:} {Port:} {Id Authentification:} \
+            {{Description:} {Host:} {Port:} {Id Authentication:} \
             {Maximum Record Size:} {Preferred Message Size:}} \
             [list protocol-setup-action $target] [list destroy $w]
     
@@ -795,9 +825,13 @@ proc protocol-setup {target} {
     set RPNCheck [lindex $profile($target) 8]
     set CCLCheck [lindex $profile($target) 9]
     set ResultSetCheck [lindex $profile($target) 10]
+    set protocolRadioType [lindex $profile($target) 11]
+    if {$protocolRadioType == ""} {
+        set protocolRadioType z39v2
+    }
 
     # Databases ....
-    pack $w.top.databases -side left -pady 6 -padx 6 -expand yes -fill x
+    pack $w.top.databases -side left -pady 6 -padx 6 -expand yes -fill both
 
     label $w.top.databases.label -text "Databases"
     button $w.top.databases.add -text "Add" \
@@ -822,24 +856,36 @@ proc protocol-setup {target} {
     }
 
     # Transport ...
-    pack $w.top.cs-type -pady 6 -padx 6 -side top
+    pack $w.top.cs-type -pady 6 -padx 6 -side top -fill x
     
     label $w.top.cs-type.label -text "Transport" 
-    radiobutton $w.top.cs-type.tcpip -text "TCP/IP" \
+    radiobutton $w.top.cs-type.tcpip -text "TCP/IP" -anchor w \
             -command {puts tcp/ip} -variable csRadioType -value tcpip
-    radiobutton $w.top.cs-type.mosi -text "MOSI" \
+    radiobutton $w.top.cs-type.mosi -text "MOSI" -anchor w\
             -command {puts 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
 
+    # Protocol ...
+    pack $w.top.protocol -pady 6 -padx 6 -side top -fill x
+    
+    label $w.top.protocol.label -text "Protocol" 
+    radiobutton $w.top.protocol.z39v2 -text "Z39.50" -anchor w \
+            -command {puts z39v2} -variable protocolRadioType -value z39v2
+    radiobutton $w.top.protocol.sr -text "SR" -anchor w \
+            -command {puts sr} -variable protocolRadioType -value sr
+    
+    pack $w.top.protocol.label $w.top.protocol.z39v2 $w.top.protocol.sr \
+            -padx 4 -side top -fill x
+
     # Query ...
-    pack $w.top.query -pady 6 -padx 6 -side top
+    pack $w.top.query -pady 6 -padx 6 -side top -fill x
 
-    label $w.top.query.label -text "Query support" -anchor e
-    checkbutton $w.top.query.c1 -text "RPN query" -variable RPNCheck
-    checkbutton $w.top.query.c2 -text "CCL query" -variable CCLCheck
-    checkbutton $w.top.query.c3 -text "Result sets" -variable ResultSetCheck
+    label $w.top.query.label -text "Query support"
+    checkbutton $w.top.query.c1 -text "RPN query" -anchor w -variable RPNCheck
+    checkbutton $w.top.query.c2 -text "CCL query" -anchor w -variable CCLCheck
+    checkbutton $w.top.query.c3 -text "Result sets" -anchor w -variable ResultSetCheck
 
     pack $w.top.query.label -side top 
     pack $w.top.query.c1 $w.top.query.c2 $w.top.query.c3 \
@@ -956,7 +1002,7 @@ proc save-settings {} {
     global queryButtons
     global queryInfo
 
-    set f [open "~/.tk-c" w]
+    set f [open "clientrc.tcl" w]
     puts $f "# Setup file"
     puts $f "set hotTargets \{ $hotTargets \}"
 
@@ -1293,13 +1339,16 @@ proc index-query {} {
         set term [string trim [.lines.$i.e get]]
         if {$term != ""} {
             set attr [lindex [lindex $queryInfoFind [lindex $b 1]] 1]
-            if {$qs != ""} {
-                set qs "${qs} and "
+
+            set term "\{${term}\}"
+            foreach a $attr {
+                set term "@attr $a ${term}"
             }
-            if {$attr != ""} {
-                set qs "${qs}${attr}="
+            if {$qs != ""} {
+                set qs "@and ${qs} ${term}"
+            } else {
+                set qs $term
             }
-            set qs "${qs}(${term})"
         }
         incr i
     }
@@ -1315,21 +1364,24 @@ proc index-lines {w realOp buttonInfo queryInfo handle} {
         }
         listbuttonx $w.$i.l [lindex $b 1] $queryInfo $handle $i
 
-        if {! [winfo exists $w.$i.e]} {
-            if {$realOp} {
-                entry $w.$i.e -width 32 -relief sunken
-            }
-            pack $w.$i.l -side left
-            if {$realOp} {
+        if {$realOp} {
+            if {! [winfo exists $w.$i.e]} {
+                entry $w.$i.e -width 32 -relief sunken -border 1
+                bind $w.$i.e <FocusIn> [list $w.$i configure \
+                        -background red]
+                bind $w.$i.e <FocusOut> [list $w.$i configure \
+                        -background white]
+                pack $w.$i.l -side left
                 pack $w.$i.e -side left -fill x -expand yes
+                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
             }
+        } else {
+            pack $w.$i.l -side left
             pack $w.$i -side top -fill x -padx 2 -pady 2
         }
-        if {$realOp} {
-            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
-        }
         incr i
     }
     set j $i
@@ -1344,17 +1396,12 @@ proc index-lines {w realOp buttonInfo queryInfo handle} {
     incr i -1
     while {$j < $i} {
         set k [expr $j+1]
-        bind $w.$j.e <Tab> "focus $w.$k.e \n
-        $w.$k configure -background red \n
-        $w.$j configure -background white"
+        bind $w.$j.e <Tab> "focus $w.$k.e"
         set j $k
     }
     if {$i >= 0} {
-        bind $w.$i.e <Tab> "focus $w.0.e \n
-        $w.0 configure -background red \n
-        $w.$i configure -background white"
+        bind $w.$i.e <Tab> "focus $w.0.e"
         focus $w.0.e
-        $w.0 configure -background red
     }
 }