Ported ir-tcl to use the beta releases of tcl7.5/tk4.1.
[ir-tcl-moved-to-github.git] / client.tcl
index e5280bc..31795e5 100644 (file)
@@ -4,7 +4,13 @@
 # Sebastian Hammer, Adam Dickmeiss
 #
 # $Log: client.tcl,v $
-# Revision 1.86  1996-01-22 09:29:01  adam
+# Revision 1.88  1996-01-23 15:24:09  adam
+# Wrore more comments.
+#
+# Revision 1.87  1996/01/22  17:13:34  adam
+# Wrote comments.
+#
+# Revision 1.86  1996/01/22  09:29:01  adam
 # Wrote comments.
 #
 # Revision 1.85  1996/01/19  16:22:36  adam
@@ -1149,8 +1155,9 @@ proc reopen-target {target base} {
 
 # Procedure define-target-action
 # Prepares the setup of a new target. The name of the target
-# is read from the dialog .target-define dialog and the target
-# definition window is displayed by a call to protocol-setup.
+# is read from the dialog .target-define dialog (procedure
+# define-target-dialog) and the target definition window is displayed by
+# a call to protocol-setup.
 proc define-target-action {} {
     global profile
     
@@ -1296,6 +1303,9 @@ proc close-target {} {
     configure-enable-e .top.target.m 0
 }
 
+# Procedure load-set-action
+# Loads records from a file. The filename is read from the entry
+# .load-set.filename.entry (see function load-set)
 proc load-set-action {} {
     global setNoLast
 
@@ -1318,6 +1328,9 @@ proc load-set-action {} {
     show-status Ready 0 {}
 }
 
+# Procedure load-set
+# Dialog that asks for a filename with records to be loaded
+# into a result set.
 proc load-set {} {
     set w .load-set
     toplevel $w
@@ -1336,6 +1349,9 @@ proc load-set {} {
     focus $oldFocus
 }
 
+# Procedure init-request
+# Sends an initialize request to the target. This procedure is called
+# when a connect has been established.
 proc init-request {} {
     global cancelFlag
 
@@ -1352,6 +1368,10 @@ proc init-request {} {
     }
 }
 
+# Procedure init-response
+# Handles and incoming init-response. The service buttons
+# are enabled. The global $scanEnable indicates whether the target
+# supports scan.
 proc init-response {} {
     global cancelFlag
     global scanEnable
@@ -1377,6 +1397,12 @@ proc init-response {} {
     }
 }
 
+# Procedure search-request
+#  bflag     flag to indicate if this procedure calls itself
+# Performs a search. If $busy is 1, the search-request is performed
+# at a later time (when another response arrives). This procedure
+# sets many search-related Z39-settings. The global $setNo is set
+# to the result set number (z39.$setNo).
 proc search-request {bflag} {
     global setNo
     global setNoLast
@@ -1449,6 +1475,11 @@ proc search-request {bflag} {
     show-status Searching 1 0
 }
 
+# Procedure scan-copy {y entry}
+#  y       y-position of mouse pointer
+#  entry   a search entry in the top
+# Copies the term in the list nearest $y to the query entry specified
+# by $entry
 proc scan-copy {y entry} {
     set w .scan-window
     set no [$w.top.list nearest $y]
@@ -1457,6 +1488,9 @@ proc scan-copy {y entry} {
     .lines.$entry.e insert 0 [string range [$w.top.list get $no] 8 end]
 }
 
+# Procedure scan-request
+# Performs a scan on term "0" with the current attributes in entry
+# specified by the global $curIndexEntry.
 proc scan-request {} {
     set w .scan-window
 
@@ -1526,6 +1560,11 @@ proc scan-request {} {
     show-status Scanning 1 0
 }
 
+# Procedure scan-term-h {attr} 
+# attr    attribute specification
+# This procedure is called whenever a key is released in the entry in the
+# scan window (.scan-window). A scan is then initiated with the new contents
+# of the entry as the starting term.
 proc scan-term-h {attr} {
     global busy
     global scanTerm
@@ -1551,6 +1590,16 @@ proc scan-term-h {attr} {
     show-status Scanning 1 0
 }
 
+# Procedure scan-response {attr start toget}
+#  attr   attribute specification
+#  start  position of first term in the response
+#  toget  number of total terms to get
+# This procedure handles all scan-responses. $start specifies the list
+# entry number of the first incoming term. The $toget indicates the total
+# number of terms to be retrieved from the target. The $toget may be
+# negative in which case, scan is performed 'backwards' (- $toget is
+# the total number of terms in this case). This procedure usually calls
+# itself several times in order to get small scan-term-list chunks.
 proc scan-response {attr start toget} {
     global cancelFlag
     global delayRequest
@@ -1661,6 +1710,11 @@ proc scan-response {attr start toget} {
     show-status Ready 0 1
 }
 
+# Procedure scan-down {attr}
+#  attr   attribute specification
+# This procedure is called when the user hits the Down button the scan
+# window. A new scan is initiated with a positive $toget passed to the
+# scan-response handler.
 proc scan-down {attr} {
     global scanView
     global cancelFlag
@@ -1692,6 +1746,11 @@ proc scan-down {attr} {
     $w.top.list yview $scanView
 }
 
+# Procedure scan-up {attr}
+#  attr   attribute specification
+# This procedure is called when the user hits the Up button the scan
+# window. A new scan is initiated with a negative $toget passed to the
+# scan-response handler.
 proc scan-up {attr} {
     global scanView
     global cancelFlag
@@ -1721,6 +1780,13 @@ proc scan-up {attr} {
     $w.top.list yview $scanView
 }
 
+# Procedure search-response
+# This procedure handles search-responses. If the search is successful
+# this procedure will try to retrieve a total of 20 records from the target;
+# however not more than $presentChunk records at a time. This procedure
+# affects the following globals:
+#   $setOffset        current record position offset
+#   $setMax           total number of records to be retrieved
 proc search-response {} {
     global setNo
     global setOffset
@@ -1784,6 +1850,13 @@ proc search-response {} {
     }
 }
 
+# Procedure present-more {number}
+#  number      number of records to be retrieved
+# This procedure starts a present-request. The $number variable indicates
+# the total number of records to be retrieved. The global $presentChunk
+# specifies the number of records to be retrieved at a time. If $number
+# is the empty string all remaining records in the result set are 
+# retrieved.
 proc present-more {number} {
     global setNo
     global setOffset
@@ -1836,10 +1909,19 @@ proc present-more {number} {
     show-status Retrieving 1 0
 }
 
+# Procedure init-title-lines 
+# Utility that cleans the main record window.
 proc init-title-lines {} {
     .data.record delete 0.0 end
 }
 
+# Procedure add-title-lines {setno no offset}
+#  setno    Set number
+#  no       Number of records
+#  offset   Starting offset
+# This procedure displays the records $offset .. $offset+$no-1 in result
+# set $setno in the main record window by using the display format in the
+# global $displayFormat
 proc add-title-lines {setno no offset} {
     global displayFormats
     global displayFormat
@@ -1853,7 +1935,6 @@ proc add-title-lines {setno no offset} {
         set setno $setNo
     }
     if {$offset == 1} {
-        
         .bot.a.set configure -text $setno
         .data.record delete 0.0 end
     }
@@ -1881,6 +1962,10 @@ proc add-title-lines {setno no offset} {
     }
 }
 
+# Procedure present-response
+# Present-response handler. The incoming records are displayed and a new
+# present request is performed until all records ($setMax) is returned
+# from the target.
 proc present-response {} {
     global setNo
     global setOffset
@@ -1924,6 +2009,9 @@ proc present-response {} {
     }
 }
 
+# Procedure left-cursor {w}
+#  w    entry widget
+# Tries to move the cursor left in entry window $w
 proc left-cursor {w} {
     set i [$w index insert]
     if {$i > 0} {
@@ -1933,6 +2021,9 @@ proc left-cursor {w} {
     dputs left
 }
 
+# Procedure right-cursor {w}
+#  w    entry widget
+# Tries to move the cursor right in entry window $w
 proc right-cursor {w} {
     set i [$w index insert]
     incr i
@@ -1940,6 +2031,12 @@ proc right-cursor {w} {
     $w icursor $i
 }
 
+# Procedure bind-fields {list returnAction escapeAction}
+#  list          list of entry widgets
+#  returnAction  return script
+#  escapeAction  escape script
+# Each widget in list are assigned bindings for <Tab>, <Left>, <Right>,
+# <Return> and <Escape>.
 proc bind-fields {list returnAction escapeAction} {
     set max [expr [llength $list]-1]
     for {set i 0} {$i < $max} {incr i} {
@@ -1964,6 +2061,12 @@ proc bind-fields {list returnAction escapeAction} {
     focus [lindex $list 0]
 }
 
+# Procedure entry-fields {parent list tlist returnAction escapeAction}
+#  list          list of frame widgets
+#  tlist         list of text to be used as lead of each entry
+#  returnAction  return script
+#  escapeAction  escape script
+# Makes label and entry widgets in each widget in $list.
 proc entry-fields {parent list tlist returnAction escapeAction} {
     set alist {}
     set i 0
@@ -1980,6 +2083,8 @@ proc entry-fields {parent list tlist returnAction escapeAction} {
     bind-fields $alist $returnAction $escapeAction
 }
 
+# Procedure define-target-dialog
+# Dialog that asks for new target to be defined.
 proc define-target-dialog {} {
     set w .target-define
 
@@ -1995,6 +2100,9 @@ proc define-target-dialog {} {
     top-down-ok-cancel $w {define-target-action} 1
 }
 
+# Procedure protocol-setup-delete
+# This procedure is invoked when the user tries to delete a target
+# definition. If user is sure, the target definition is deleted.
 proc protocol-setup-delete {target w} {
     global profile
     global settingsChanged
@@ -2010,6 +2118,12 @@ definition $target ?"]
     }
 }
 
+# Procedure protocol-setup-action {target w}
+# target     target to be defined
+# w          target definition toplevel widget
+# This procedure reads all appropriate globals and makes a new/modified
+# profile for the target. The global array $targetS contains most of the
+# information the user may modify.
 proc protocol-setup-action {target w} {
     global profile
     global settingsChanged
@@ -2047,6 +2161,10 @@ proc protocol-setup-action {target w} {
     destroy $w
 }
 
+# Procedure place-force {window parent}
+#  window      new top level widget
+#  parent      parent widget used as base
+# Sets geometry of $window relative to $parent window.
 proc place-force {window parent} {
     set g [wm geometry $parent]
 
@@ -2058,6 +2176,11 @@ proc place-force {window parent} {
     wm geometry $window +${x}+${y}
 }
 
+# Procedure add-database-action {target w}
+#  target      target to be defined
+#  w           top level widget for the target definition
+# Adds the contents of .database-select.top.database.entry to list of
+# databases.
 proc add-database-action {target w} {
     global profile
 
@@ -2066,6 +2189,10 @@ proc add-database-action {target w} {
     destroy .database-select
 }
 
+# Procedure add-database {target wp}
+#  target      target to be defined
+#  wp          top level widget for the target definition
+# Makes a dialog in which the user enters new database
 proc add-database {target wp} {
     global profile
 
@@ -2089,6 +2216,11 @@ proc add-database {target wp} {
     focus $oldFocus
 }
 
+# Procedure delete-database {target w}
+#  target     target to be defined
+#  w          top level widget for the target definition
+# Asks the user if he/she really wishes to delete a database and removes
+# the database from the database-list if requested.
 proc delete-database {target w} {
     global profile
 
@@ -2106,6 +2238,11 @@ proc delete-database {target w} {
     }
 }
 
+# Procedure protocol-setup {target}
+#  target     target to be defined
+# Makes a dialog in which the user may modify/view a target definition
+# (profile). The $targetS - array holds the initial definition of the
+# target.
 proc protocol-setup {target} {
     global profile
     global targetS
@@ -2244,7 +2381,11 @@ proc protocol-setup {target} {
             {Cancel} [list destroy $w]] 0   
 }
 
-
+# Procedure advanced-setup {target b}
+#  target     target to be defined
+#  b          window number of target top level
+# Makes a dialog in which the user may modify/view advanced settings
+# of a target definition (profile).
 proc advanced-setup {target b} {
     global profile
     global targetS
@@ -2293,6 +2434,11 @@ proc advanced-setup {target b} {
             {Cancel} [list destroy $w]] 0   
 }
 
+# Procedure advanced-setup-action {target b}
+#  target     target to be defined
+#  b          window number of target top level
+# This procedure is called when the user hits Ok in the advanced target
+# setup dialog. The temporary result is stored in the $targetS - array.
 proc advanced-setup-action {target b} {
     set w .advanced-setup-$b
     global targetS
@@ -2308,6 +2454,9 @@ proc advanced-setup-action {target b} {
     destroy $w
 }
 
+# Procedure database-select-action
+# Called when the user commits a database select change. See procedure
+# database-select.
 proc database-select-action {} {
     set w .database-select.top
     set b {}
@@ -2320,6 +2469,8 @@ proc database-select-action {} {
     destroy .database-select
 }
 
+# Procedure database-select
+# Makes a dialog in which the user may select a database
 proc database-select {} {
     set w .database-select
     global profile
@@ -2354,6 +2505,10 @@ proc database-select {} {
     focus $oldFocus
 }
 
+# Procedure cascade-target-list
+# Makes all target/databases available in the Target|Connect
+# menu as well as all targets in the Target|Setup menu.
+# This procedure is called whenever target definitions occur.
 proc cascade-target-list {} {
     global profile
     
@@ -2385,6 +2540,11 @@ proc cascade-target-list {} {
     }
 }
 
+# Procedure query-select {i}
+#  i       Query type number (integer)
+# This procedure is called when the user selects a Query type. The current
+# query type information given by the globals $queryButtonsFind and
+# $queryInfoFind are affected by this operation.
 proc query-select {i} {
     global queryButtonsFind
     global queryInfoFind
@@ -2397,6 +2557,9 @@ proc query-select {i} {
     index-lines .lines 1 $queryButtonsFind $queryInfoFind activate-index
 }
 
+# Procedure query-new-action 
+# Commits a new query type definition by extending the globals
+# $queryTypes, $queryButtons and $queryInfo.
 proc query-new-action {} {
     global queryTypes
     global queryButtons
@@ -2412,6 +2575,9 @@ proc query-new-action {} {
     cascade-query-list
 }
 
+# Procedure query-new
+# Makes a dialog in which the user is requested to enter the name of a
+# new query type.
 proc query-new {} {
     set w .query-new
 
@@ -2429,6 +2595,9 @@ proc query-new {} {
     focus $oldFocus
 }
 
+# Procedure query-delete-action {queryNo}
+#  queryNo     query type number (integer)
+# Procedure that deletes the query type specified by $queryNo.
 proc query-delete-action {queryNo} {
     global queryTypes
     global queryButtons
@@ -2444,6 +2613,10 @@ proc query-delete-action {queryNo} {
     cascade-query-list
 }
 
+# Procedure query-delete {queryNo}
+#  queryNo     query type number (integer)
+# Asks if the user really want to delete a given query type; calls
+# query-delete-action if 'yes'.
 proc query-delete {queryNo} {
     global queryTypes
 
@@ -2462,6 +2635,8 @@ query type $n ?"  -aspect 300
                             {Cancel} [list destroy $w]] 1
 }
 
+# Procedure cascade-query-list
+# Updates the enties below Options|Query to list all query types.
 proc cascade-query-list {} {
     global queryTypes
     set w .top.options.m.query
@@ -2487,6 +2662,11 @@ proc cascade-query-list {} {
     }
 }
 
+# Procedure save-geometry
+# This procedure saves the per-user related settings in ~/.clientrc.tcl.
+# The geometry information stored in the global array $windowGeometry is
+# saved. Also a few other user settings, such as current display format, are
+# saved.
 proc save-geometry {} {
     global windowGeometry
     global hotTargets
@@ -2521,6 +2701,10 @@ proc save-geometry {} {
     close $f
 }
 
+# Procedure save-settings
+# This procedure saves the per-host related settings clientrc.tcl which
+# is normally kept in the directory /usr/local/lib/irtcl.
+# All query types and target defintion profiles are saved.
 proc save-settings {} {
     global profile
     global libdir
@@ -2561,6 +2745,11 @@ proc save-settings {} {
     set settingsChanged 0
 }
 
+# Procedure alert {ask}
+#  ask    prompt string
+# Makes a grabbed dialog in which the user is requested to answer
+# "Ok" or "Cancel". This procedure returns 1 if the user hits "Ok"; 0
+# otherwise.
 proc alert {ask} {
     set w .alert
 
@@ -2583,12 +2772,17 @@ proc alert {ask} {
     return $alertAnswer
 }
 
+# Procedure alert-action
+# Called when the user hits "Ok" in the .alert-window.
 proc alert-action {} {
     global alertAnswer
     set alertAnswer 1
     destroy .alert
 }
 
+# Procedure exit-action
+# This procedure is called if the user tries to exit without saving the
+# system settings.
 proc exit-action {} {
     global settingsChanged
 
@@ -2602,11 +2796,28 @@ proc exit-action {} {
     exit 0
 }
 
+# Procedure listbuttonaction {w name h user i}
+#  w       menubutton widget
+#  name    name information
+#  h       handler to be invoked
+#  user    user information to be passed to handler $h
+#  i       index passed as second argument to handler $h
+# Utility function to emulate a listbutton. Called when the user
+# Modifies the listbutton. See procedure listbuttonx.
 proc listbuttonaction {w name h user i} {
     $w configure -text [lindex $name 0]
     $h [lindex $name 1] $user $i
 }
-    
+
+# Procedure listbuttonx {button no names handle user}
+#  button  menubutton widget
+#  no      initial value index (integer)
+#  names   list of name entries. The first entry in each name
+#          entry is the actual name
+#  handle  user function to be called when the listbutton changes
+#          its value
+#  user    user argument to the $handle function
+# Makes an extended listbutton.
 proc listbuttonx {button no names handle user} {
     if {[winfo exists $button]} {
         $button configure -text [lindex [lindex $names $no] 0]
@@ -2625,6 +2836,12 @@ proc listbuttonx {button no names handle user} {
     }
 }
 
+# Procedure listbutton {button no names}
+#  button  menubutton widget
+#  no      initial value index (integer)
+#  names   list of possible values.
+# Makes a listbutton. The functionality is emulated by the use menubutton-
+# and menu widgets.
 proc listbutton {button no names} {
     menubutton $button -text [lindex $names $no] -width 10 -menu ${button}.m \
             -relief raised -border 1
@@ -2635,6 +2852,12 @@ proc listbutton {button no names} {
     }
 }
 
+# Procedure listbuttonv-action {button var names i}
+#  button   menubutton widget
+#  var      global variable to be affected
+#  names    list of possible names and values
+# This procedure is called when the user alters a menu created by the
+# listbuttonv procedure. The global variable $var is updated.
 proc listbuttonv-action {button var names i} {
     global $var
 
@@ -2642,6 +2865,13 @@ proc listbuttonv-action {button var names i} {
     $button configure -text [lindex $names $i]
 }
 
+# Procedure listbuttonv {button var names}
+#  button   menubutton widget
+#  var      global variable to be affected
+#  names    List of name/value pairs, i.e. {n1 v1 n2 v2 ...}.
+# This procedure emulates a listbutton by means of menu/menubutton widgets.
+# The global variable $var is automatically updated and set to one of the
+# values v1, v2, ...
 proc listbuttonv {button var names} {
     global $var
 
@@ -2668,6 +2898,9 @@ proc listbuttonv {button var names} {
     }
 }
 
+# Procedure query-add-index-action {queryNo}
+#  queryNo       query type number (integer)
+# Handler that makes a new query index.
 proc query-add-index-action {queryNo} {
     set w .query-setup
 
@@ -2684,6 +2917,9 @@ proc query-add-index-action {queryNo} {
     #pack $w.top.lines -side left -pady 6 -padx 6 -fill y
 }
 
+# Procedure query-add-line
+#  queryNo      query type number (integer)
+# Handler that adds new query line.
 proc query-add-line {queryNo} {
     set w .query-setup
 
@@ -2698,6 +2934,9 @@ proc query-add-line {queryNo} {
     #pack $w.top.lines -side left -pady 6 -padx 6 -fill y
 }
 
+# Procedure query-del-line
+#  queryNo      query type number (integer)
+# Handler that removes query line.
 proc query-del-line {queryNo} {
     set w .query-setup
 
@@ -2713,6 +2952,9 @@ proc query-del-line {queryNo} {
     index-lines $w.top.lines 0 $queryButtonsTmp $queryInfoTmp activate-e-index
 }
 
+# Procedure query-add-index
+#  queryNo      query type number (integer)
+# Handler that adds new query index.
 proc query-add-index {queryNo} {
     set w .query-add-index
 
@@ -2730,6 +2972,11 @@ proc query-add-index {queryNo} {
     focus $oldFocus
 }
 
+# Procedure query-setup-action
+#  queryNo      query type number (integer)
+# Handler that updates the query information database stored in the
+# globals $queryInfo and $queryButtons. This procedure is executed when
+# the user commits the query setup changes by pressing button "Ok".
 proc query-setup-action {queryNo} {
     global queryButtons
     global queryInfo
@@ -2753,6 +3000,12 @@ proc query-setup-action {queryNo} {
     index-lines .lines 1 $queryButtonsFind $queryInfoFind activate-index
 }
 
+# Procedure activate-e-index {value no i}
+#   value   menu name
+#   no      query index number
+#   i       menu index (integer)
+# Procedure called when listbutton is activated in the query type edit
+# window. The global $queryButtonsTmp is updated in this operation.
 proc activate-e-index {value no i} {
     global queryButtonsTmp
     global queryIndexTmp
@@ -2762,6 +3015,12 @@ proc activate-e-index {value no i} {
     set queryIndexTmp $i
 }
 
+# Procedure activate-index {value no i}
+#   value   menu name
+#   no      query index number
+#   i       menu index (integer)
+# Procedure called when listbutton is activated in the main query 
+# window. The global $queryButtonsFind is updated in this operation.
 proc activate-index {value no i} {
     global queryButtonsFind
 
@@ -2770,6 +3029,12 @@ proc activate-index {value no i} {
     dputs "queryButtonsFind $queryButtonsFind"
 }
 
+# Procedure update-attr
+# This procedure creates listbuttons for all bib-1 attributes except
+# the use-attribute in the .index-setup window.
+# The globals $relationTmpValue, $positionTmpValue, $structureTmpValue,
+# $truncationTmpValue and $completenessTmpValue are maintainted by the
+# listbuttons.
 proc update-attr {} {
     set w .index-setup
     listbuttonv $w.top.relation.b relationTmpValue\
@@ -2790,6 +3055,12 @@ proc update-attr {} {
             {Incomplete subfield} 1 {Complete subfield} 2 {Complete field} 3}
 }
 
+# Procedure use-attr {init}
+#  init      init flag
+# This procedure creates a listbox with several Bib-1 use attributes.
+# If $init is 1 the listbox is created with the attributes. If $init
+# is 0 the current selection of the listbox is read and the global
+# $useTmpValue is set to the current use-value.
 proc use-attr {init} {
     set attr {
         {None}                           0
@@ -2927,6 +3198,12 @@ proc use-attr {init} {
     }
 }
 
+# Procedure index-setup-action {oldAttr queryNo indexNo}
+#  oldAttr     original attributes (?)
+#  queryNo     query number
+#  indexNo     index number
+# Commits setup of a query index. The mapping from the index to 
+# the Bib-1 attributes are handled by this function.
 proc index-setup-action {oldAttr queryNo indexNo} {
     set attr [lindex $oldAttr 0]
 
@@ -2966,6 +3243,12 @@ proc index-setup-action {oldAttr queryNo indexNo} {
     destroy .index-setup
 }
 
+# Procedure index-setup {attr queryNo indexNo}
+#  attr        original attributes
+#  queryNo     query number
+#  indexNo     index number
+# Makes a window with settings of a given query index which the user
+# may inspect/modify.
 proc index-setup {attr queryNo indexNo} {
     set w .index-setup
 
@@ -3088,6 +3371,10 @@ proc index-setup {attr queryNo indexNo} {
 
 }
 
+# Procedure query-edit-index {queryNo}
+#  queryNo     query number
+# Determines if a selection of an index is active. If one is selected
+# the index-setup dialog is started.
 proc query-edit-index {queryNo} {
     global queryInfoTmp
     set w .query-setup
@@ -3101,6 +3388,10 @@ proc query-edit-index {queryNo} {
     index-setup $attr $queryNo $i
 }
 
+# Procedure query-delete-index {queryNo}
+#  queryNo     query number
+# Determines if a selection of an index is active. If one is selected
+# the index is deleted.
 proc query-delete-index {queryNo} {
     global queryInfoTmp
     global queryButtonsTmp
@@ -3115,6 +3406,9 @@ proc query-delete-index {queryNo} {
     $w.top.index.list delete $i
 }
     
+# Procedure query-setup {queryNo}
+#  queryNo     query number
+# Makes a dialog in which a query type an be customized.
 proc query-setup {queryNo} {
     set w .query-setup
 
@@ -3187,6 +3481,8 @@ proc query-setup {queryNo} {
             Cancel [list destroy $w]] 0
 }
 
+# Procedure index-clear
+# Handler that clears the search entry fields.
 proc index-clear {} {
     global queryButtonsFind
 
@@ -3196,7 +3492,18 @@ proc index-clear {} {
         incr i
     }
 }
-    
+
+# Procedure index-query
+# The purpose of this function is to read the user's query and convert
+# it to the prefix query that IrTcl/YAZ uses to represent an RPN query.
+# Each entry in a search fields takes the form
+#    [relOp][?]term[?]
+#  Here, relOp is an optional relational operator and one of:
+#      >  < >= <=  <>
+#    which sets the Bib-1 relation to greater-than, less-than, etc.
+#  The ? (question-mark) is also optional. A (?) on left-side indicates
+#    left truncation; (?) on right-side indicates right-truncation; (?)
+#    on both sides indicates both-left-and-right truncation.
 proc index-query {} {
     global queryButtonsFind
     global queryInfoFind
@@ -3273,6 +3580,12 @@ proc index-query {} {
     return $qs
 }
 
+# Procedure index-focus-in {w i}
+#  w    index frame
+#  i    index number
+# This procedure handles <FocusIn> events. A red border is drawed
+# around the active search entry field when tk3.6 is used (tk4.X
+# makes a black focus border itself).
 proc index-focus-in {w i} {
     global curIndexEntry
 
@@ -3282,6 +3595,14 @@ proc index-focus-in {w i} {
     set curIndexEntry $i
 }
 
+# Procedure index-lines {w readOp buttonInfo queryInfo handle}
+#  w          search fields entry frame
+#  realOp     if true, search-request bindings are bound to the entries.
+#  buttonInfo query type button information
+#  queryInfo  query type field information
+#  handle     handler called a when a 'listbutton' changes its value
+# Makes one or more search areas - with listbuttons on the left
+# and entries on the right. 
 proc index-lines {w realOp buttonInfo queryInfo handle} {
     set i 0
     foreach b $buttonInfo {
@@ -3340,6 +3661,12 @@ proc index-lines {w realOp buttonInfo queryInfo handle} {
     }
 }
 
+# Procedure search-fields {w buttondefs}
+#  w           search fields entry frame
+#  buttondefs  button definitions
+# Makes search entry fields and listbuttons. 
+# Note: This procedure is not used elsewhere. The index-lines
+#       procedure is used instead.
 proc search-fields {w buttondefs} {
     set i 0
     foreach buttondef $buttondefs {
@@ -3374,6 +3701,8 @@ proc search-fields {w buttondefs} {
     $w.0 configure -background red
 }
 
+# Init: The geometry information for the main window is set if 
+# saved in the windowGeometry - array.
 if {[info exists windowGeometry(.)]} {
     set g $windowGeometry(.)
     if {$g != ""} {
@@ -3381,8 +3710,10 @@ if {[info exists windowGeometry(.)]} {
     }
 }    
 
+# Init: Presentation formats are read.
 read-formats
 
+# Init: The main window is defined.
 frame .top  -border 1 -relief raised
 frame .lines  -border 1 -relief raised
 frame .mid  -border 1 -relief raised
@@ -3392,12 +3723,14 @@ pack .top .lines .mid -side top -fill x
 pack .data -side top -fill both -expand yes
 pack .bot -fill x
 
+# Init: Definition of File menu.
 menubutton .top.file -text "File" -menu .top.file.m
 menu .top.file.m
 .top.file.m add command -label "Save settings" -command {save-settings}
 .top.file.m add separator
 .top.file.m add command -label "Exit" -command {exit-action}
 
+# Init: Definition of Target menu.
 menubutton .top.target -text "Target" -menu .top.target.m
 menu .top.target.m
 .top.target.m add cascade -label "Connect" -menu .top.target.m.clist
@@ -3415,6 +3748,7 @@ menu .top.target.m.clist
 menu .top.target.m.slist
 cascade-target-list
 
+# Init: Definition of Service menu.
 menubutton .top.service -text "Service" -menu .top.service.m
 menu .top.service.m
 .top.service.m add command -label "Database" -command {database-select}
@@ -3434,6 +3768,7 @@ menu .top.rset.m
 .top.rset.m add command -label "Load" -command {load-set}
 .top.rset.m add separator
 
+# Init: Definition of the Options menu.
 menubutton .top.options -text "Options" -menu .top.options.m
 menu .top.options.m
 .top.options.m add cascade -label "Query" -menu .top.options.m.query
@@ -3443,6 +3778,7 @@ menu .top.options.m
 .top.options.m add cascade -label "Elements" -menu .top.options.m.elements
 .top.options.m add radiobutton -label "Debug" -variable debugMode -value 1
 
+# Init: Definition of the Options|Query menu.
 menu .top.options.m.query
 .top.options.m.query add cascade -label "Select" \
         -menu .top.options.m.query.clist
@@ -3458,6 +3794,7 @@ menu .top.options.m.query.clist
 menu .top.options.m.query.dlist
 cascade-query-list
 
+# Init: Definition of the Options|Formats menu.
 menu .top.options.m.formats
 set i 0
 foreach f $displayFormats {
@@ -3466,6 +3803,7 @@ foreach f $displayFormats {
     incr i
 }
 
+# Init: Definition of the Options|Wrap menu.
 menu .top.options.m.wrap
 .top.options.m.wrap add radiobutton -label "Character" \
         -value char -variable textWrap -command {set-wrap char}
@@ -3474,6 +3812,7 @@ menu .top.options.m.wrap
 .top.options.m.wrap add radiobutton -label "None" \
         -value none -variable textWrap -command {set-wrap none}
 
+# Init: Definition of the Options|Syntax menu.
 menu .top.options.m.syntax
 .top.options.m.syntax add radiobutton -label "None" \
         -value None -variable recordSyntax
@@ -3499,6 +3838,7 @@ menu .top.options.m.syntax
 .top.options.m.syntax add radiobutton -label "GRS1" \
         -value GRS1 -variable recordSyntax
 
+# Init: Definition of the Options|Elements menu.
 menu .top.options.m.elements
 .top.options.m.elements add radiobutton -label "Unspecified" \
         -value None -variable elementSetNames
@@ -3507,6 +3847,7 @@ menu .top.options.m.elements
 .top.options.m.elements add radiobutton -label "Brief" \
         -value B -variable elementSetNames
 
+# Init: Definition of Help menu.
 menubutton .top.help -text "Help" -menu .top.help.m
 menu .top.help.m
 
@@ -3514,9 +3855,11 @@ menu .top.help.m
         -command {tkerror "Help on help not available. Sorry"}
 .top.help.m add command -label "About" -command {about-origin}
 
+# Init: Pack menu bar items.
 pack .top.file .top.target .top.service .top.rset .top.options -side left
 pack .top.help -side right
 
+# Init: Define query area.
 index-lines .lines 1 $queryButtonsFind [lindex $queryInfo 0] activate-index
 
 button .mid.search -text Search -command {search-request 0} \
@@ -3530,6 +3873,7 @@ button .mid.clear -text Clear -command index-clear
 pack .mid.search .mid.scan .mid.present .mid.clear -side left \
         -fill y -pady 1
 
+# Init: Define record area in main window.
 text .data.record -height 2 -width 20 -wrap none -borderwidth 0 -relief flat \
         -yscrollcommand [list .data.scroll set] -wrap $textWrap
 scrollbar .data.scroll -command [list .data.record yview]
@@ -3541,6 +3885,8 @@ pack .data.scroll -side right -fill y
 pack .data.record -expand yes -fill both
 initBindings
 
+# Init: Define standards tags. These are used in the display
+# format procedures.
 if {! $monoFlag} {
     .data.record tag configure marc-tag -foreground blue
     .data.record tag configure marc-id -foreground red
@@ -3563,10 +3909,12 @@ if {! $monoFlag} {
         -font -Adobe-Times-Medium-I-Normal-*-140-* \
         -foreground black
 
+# Init: Define logo.
 button .bot.logo -bitmap @${libdir}/bitmaps/book1 -command cancel-operation
 if {[tk4]} {
     .bot.logo configure -takefocus 0
 }
+# Init: Define status information fields at the bottom.
 frame .bot.a
 pack .bot.a -side left -fill x
 pack .bot.logo -side right -padx 2 -pady 2 -ipadx 1
@@ -3584,6 +3932,8 @@ pack .bot.a.target -side top -anchor nw -padx 2 -pady 2
 pack .bot.a.status .bot.a.set .bot.a.message \
         -side left -padx 2 -pady 2 -ipadx 1 -ipady 1
 
+# Init: Determine if the IrTcl extension is already there. If
+#  not, then dynamically load the IrTcl extension.
 if {[catch {ir z39}]} {
     set e [info sharedlibextension]
     puts -nonewline "Loading irtcl$e ..."
@@ -3591,11 +3941,16 @@ if {[catch {ir z39}]} {
     ir z39
     puts "ok"
 }
-#z39 logLevel all
 
+# Init: Uncomment this line if you wan't to enable logging.
+#z39 logLevel all {} irtcl.log
+
+# Init: If hostid is a valid target, a new connection will be established
+# immediately.
 if {$hostid != "Default"} {
     catch {open-target $hostid $hostbase}
 }
 
+# Init: Enable the logo.
 show-logo 1