Hex Artifact Content
Not logged in

Artifact c9b75e0523b372c283970f6f6b5497c9e3deca8c:


0000: 23 20 46 49 4c 45 3a 20 74 63 6c 72 65 61 64 6c  # FILE: tclreadl
0010: 69 6e 65 53 65 74 75 70 2e 74 63 6c 2e 69 6e 0a  ineSetup.tcl.in.
0020: 23 20 24 49 64 24 0a 23 20 2d 2d 2d 0a 23 20 74  # $Id$.# ---.# t
0030: 63 6c 72 65 61 64 6c 69 6e 65 20 2d 2d 20 67 6e  clreadline -- gn
0040: 75 20 72 65 61 64 6c 69 6e 65 20 66 6f 72 20 74  u readline for t
0050: 63 6c 0a 23 20 68 74 74 70 3a 2f 2f 77 77 77 2e  cl.# http://www.
0060: 7a 65 6c 6c 6e 65 72 2e 6f 72 67 2f 74 63 6c 72  zellner.org/tclr
0070: 65 61 64 6c 69 6e 65 2f 0a 23 20 43 6f 70 79 72  eadline/.# Copyr
0080: 69 67 68 74 20 28 63 29 20 31 39 39 38 20 2d 20  ight (c) 1998 - 
0090: 32 30 31 34 2c 20 4a 6f 68 61 6e 6e 65 73 20 5a  2014, Johannes Z
00a0: 65 6c 6c 6e 65 72 20 3c 6a 6f 68 61 6e 6e 65 73  ellner <johannes
00b0: 40 7a 65 6c 6c 6e 65 72 2e 6f 72 67 3e 0a 23 20  @zellner.org>.# 
00c0: 54 68 69 73 20 73 6f 66 74 77 61 72 65 20 69 73  This software is
00d0: 20 63 6f 70 79 72 69 67 68 74 20 75 6e 64 65 72   copyright under
00e0: 20 74 68 65 20 42 53 44 20 6c 69 63 65 6e 73 65   the BSD license
00f0: 2e 0a 23 20 2d 2d 2d 0a 0a 0a 70 61 63 6b 61 67  ..# ---...packag
0100: 65 20 70 72 6f 76 69 64 65 20 74 63 6c 72 65 61  e provide tclrea
0110: 64 6c 69 6e 65 20 40 56 45 52 53 49 4f 4e 40 0a  dline @VERSION@.
0120: 0a 72 65 6e 61 6d 65 20 75 6e 6b 6e 6f 77 6e 20  .rename unknown 
0130: 5f 75 6e 6b 6e 6f 77 6e 0a 70 72 6f 63 20 75 6e  _unknown.proc un
0140: 6b 6e 6f 77 6e 20 61 72 67 73 20 7b 0a 0a 20 20  known args {..  
0150: 20 20 67 6c 6f 62 61 6c 20 61 75 74 6f 5f 6e 6f    global auto_no
0160: 65 78 65 63 20 61 75 74 6f 5f 6e 6f 6c 6f 61 64  exec auto_noload
0170: 20 65 6e 76 20 75 6e 6b 6e 6f 77 6e 5f 70 65 6e   env unknown_pen
0180: 64 69 6e 67 20 74 63 6c 5f 69 6e 74 65 72 61 63  ding tcl_interac
0190: 74 69 76 65 0a 20 20 20 20 67 6c 6f 62 61 6c 20  tive.    global 
01a0: 65 72 72 6f 72 43 6f 64 65 20 65 72 72 6f 72 49  errorCode errorI
01b0: 6e 66 6f 0a 0a 20 20 20 20 23 20 53 61 76 65 20  nfo..    # Save 
01c0: 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20 65 72  the values of er
01d0: 72 6f 72 43 6f 64 65 20 61 6e 64 20 65 72 72 6f  rorCode and erro
01e0: 72 49 6e 66 6f 20 76 61 72 69 61 62 6c 65 73 2c  rInfo variables,
01f0: 20 73 69 6e 63 65 20 74 68 65 79 0a 20 20 20 20   since they.    
0200: 23 20 6d 61 79 20 67 65 74 20 6d 6f 64 69 66 69  # may get modifi
0210: 65 64 20 69 66 20 63 61 75 67 68 74 20 65 72 72  ed if caught err
0220: 6f 72 73 20 6f 63 63 75 72 20 62 65 6c 6f 77 2e  ors occur below.
0230: 20 20 54 68 65 20 76 61 72 69 61 62 6c 65 73 20    The variables 
0240: 77 69 6c 6c 0a 20 20 20 20 23 20 62 65 20 72 65  will.    # be re
0250: 73 74 6f 72 65 64 20 6a 75 73 74 20 62 65 66 6f  stored just befo
0260: 72 65 20 72 65 2d 65 78 65 63 75 74 69 6e 67 20  re re-executing 
0270: 74 68 65 20 6d 69 73 73 69 6e 67 20 63 6f 6d 6d  the missing comm
0280: 61 6e 64 2e 0a 0a 20 20 20 20 73 65 74 20 73 61  and...    set sa
0290: 76 65 64 45 72 72 6f 72 43 6f 64 65 20 24 65 72  vedErrorCode $er
02a0: 72 6f 72 43 6f 64 65 0a 20 20 20 20 73 65 74 20  rorCode.    set 
02b0: 73 61 76 65 64 45 72 72 6f 72 49 6e 66 6f 20 24  savedErrorInfo $
02c0: 65 72 72 6f 72 49 6e 66 6f 0a 20 20 20 20 73 65  errorInfo.    se
02d0: 74 20 6e 61 6d 65 20 5b 6c 69 6e 64 65 78 20 24  t name [lindex $
02e0: 61 72 67 73 20 30 5d 0a 20 20 20 20 69 66 20 7b  args 0].    if {
02f0: 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 61 75  ![info exists au
0300: 74 6f 5f 6e 6f 6c 6f 61 64 5d 7d 20 7b 0a 20 20  to_noload]} {.  
0310: 20 20 20 20 20 20 23 0a 20 20 20 20 20 20 20 20        #.        
0320: 23 20 4d 61 6b 65 20 73 75 72 65 20 77 65 27 72  # Make sure we'r
0330: 65 20 6e 6f 74 20 74 72 79 69 6e 67 20 74 6f 20  e not trying to 
0340: 6c 6f 61 64 20 74 68 65 20 73 61 6d 65 20 70 72  load the same pr
0350: 6f 63 20 74 77 69 63 65 2e 0a 20 20 20 20 20 20  oc twice..      
0360: 20 20 23 0a 20 20 20 20 20 20 20 20 69 66 20 7b    #.        if {
0370: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 75 6e 6b  [info exists unk
0380: 6e 6f 77 6e 5f 70 65 6e 64 69 6e 67 28 24 6e 61  nown_pending($na
0390: 6d 65 29 5d 7d 20 7b 0a 20 20 20 20 20 20 20 20  me)]} {.        
03a0: 20 20 20 20 72 65 74 75 72 6e 20 2d 63 6f 64 65      return -code
03b0: 20 65 72 72 6f 72 20 22 73 65 6c 66 2d 72 65 66   error "self-ref
03c0: 65 72 65 6e 74 69 61 6c 20 72 65 63 75 72 73 69  erential recursi
03d0: 6f 6e 20 69 6e 20 5c 22 75 6e 6b 6e 6f 77 6e 5c  on in \"unknown\
03e0: 22 20 66 6f 72 20 63 6f 6d 6d 61 6e 64 20 5c 22  " for command \"
03f0: 24 6e 61 6d 65 5c 22 22 0a 20 20 20 20 20 20 20  $name\"".       
0400: 20 7d 0a 20 20 20 20 20 20 20 20 73 65 74 20 75   }.        set u
0410: 6e 6b 6e 6f 77 6e 5f 70 65 6e 64 69 6e 67 28 24  nknown_pending($
0420: 6e 61 6d 65 29 20 70 65 6e 64 69 6e 67 0a 20 20  name) pending.  
0430: 20 20 20 20 20 20 73 65 74 20 72 65 74 20 5b 63        set ret [c
0440: 61 74 63 68 20 7b 61 75 74 6f 5f 6c 6f 61 64 20  atch {auto_load 
0450: 24 6e 61 6d 65 20 5b 75 70 6c 65 76 65 6c 20 31  $name [uplevel 1
0460: 20 7b 6e 61 6d 65 73 70 61 63 65 20 63 75 72 72   {namespace curr
0470: 65 6e 74 7d 5d 7d 20 6d 73 67 5d 0a 20 20 20 20  ent}]} msg].    
0480: 20 20 20 20 75 6e 73 65 74 20 75 6e 6b 6e 6f 77      unset unknow
0490: 6e 5f 70 65 6e 64 69 6e 67 28 24 6e 61 6d 65 29  n_pending($name)
04a0: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 24 72 65  .        if {$re
04b0: 74 20 21 3d 20 30 7d 20 7b 0a 20 20 20 20 20 20  t != 0} {.      
04c0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 2d 63 6f        return -co
04d0: 64 65 20 24 72 65 74 20 2d 65 72 72 6f 72 63 6f  de $ret -errorco
04e0: 64 65 20 24 65 72 72 6f 72 43 6f 64 65 20 22 65  de $errorCode "e
04f0: 72 72 6f 72 20 77 68 69 6c 65 20 61 75 74 6f 6c  rror while autol
0500: 6f 61 64 69 6e 67 20 5c 22 24 6e 61 6d 65 5c 22  oading \"$name\"
0510: 3a 20 24 6d 73 67 22 0a 20 20 20 20 20 20 20 20  : $msg".        
0520: 7d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b  }.        if {![
0530: 61 72 72 61 79 20 73 69 7a 65 20 75 6e 6b 6e 6f  array size unkno
0540: 77 6e 5f 70 65 6e 64 69 6e 67 5d 7d 20 7b 0a 20  wn_pending]} {. 
0550: 20 20 20 20 20 20 20 20 20 20 20 75 6e 73 65 74             unset
0560: 20 75 6e 6b 6e 6f 77 6e 5f 70 65 6e 64 69 6e 67   unknown_pending
0570: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
0580: 20 20 20 69 66 20 7b 24 6d 73 67 7d 20 7b 0a 20     if {$msg} {. 
0590: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 65             set e
05a0: 72 72 6f 72 43 6f 64 65 20 24 73 61 76 65 64 45  rrorCode $savedE
05b0: 72 72 6f 72 43 6f 64 65 0a 20 20 20 20 20 20 20  rrorCode.       
05c0: 20 20 20 20 20 73 65 74 20 65 72 72 6f 72 49 6e       set errorIn
05d0: 66 6f 20 24 73 61 76 65 64 45 72 72 6f 72 49 6e  fo $savedErrorIn
05e0: 66 6f 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  fo.            s
05f0: 65 74 20 63 6f 64 65 20 5b 63 61 74 63 68 20 7b  et code [catch {
0600: 75 70 6c 65 76 65 6c 20 31 20 24 61 72 67 73 7d  uplevel 1 $args}
0610: 20 6d 73 67 5d 0a 20 20 20 20 20 20 20 20 20 20   msg].          
0620: 20 20 69 66 20 7b 24 63 6f 64 65 20 3d 3d 20 31    if {$code == 1
0630: 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  } {.            
0640: 20 20 20 20 23 0a 20 20 20 20 20 20 20 20 20 20      #.          
0650: 20 20 20 20 20 20 23 20 53 74 72 69 70 20 74 68        # Strip th
0660: 65 20 6c 61 73 74 20 66 69 76 65 20 6c 69 6e 65  e last five line
0670: 73 20 6f 66 66 20 74 68 65 20 65 72 72 6f 72 20  s off the error 
0680: 73 74 61 63 6b 20 28 74 68 65 79 27 72 65 0a 20  stack (they're. 
0690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23                 #
06a0: 20 66 72 6f 6d 20 74 68 65 20 22 75 70 6c 65 76   from the "uplev
06b0: 65 6c 22 20 63 6f 6d 6d 61 6e 64 29 2e 0a 20 20  el" command)..  
06c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0a                #.
06d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
06e0: 20 73 65 74 20 6e 65 77 20 5b 73 70 6c 69 74 20   set new [split 
06f0: 24 65 72 72 6f 72 49 6e 66 6f 20 5c 6e 5d 0a 20  $errorInfo \n]. 
0700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
0710: 65 74 20 6e 65 77 20 5b 6a 6f 69 6e 20 5b 6c 72  et new [join [lr
0720: 61 6e 67 65 20 24 6e 65 77 20 30 20 5b 65 78 70  ange $new 0 [exp
0730: 72 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 6e 65 77  r {[llength $new
0740: 5d 20 2d 20 36 7d 5d 5d 20 5c 6e 5d 0a 20 20 20  ] - 6}]] \n].   
0750: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
0760: 75 72 6e 20 2d 63 6f 64 65 20 65 72 72 6f 72 20  urn -code error 
0770: 2d 65 72 72 6f 72 63 6f 64 65 20 24 65 72 72 6f  -errorcode $erro
0780: 72 43 6f 64 65 20 2d 65 72 72 6f 72 69 6e 66 6f  rCode -errorinfo
0790: 20 24 6e 65 77 20 24 6d 73 67 0a 20 20 20 20 20   $new $msg.     
07a0: 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a         } else {.
07b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
07c0: 72 65 74 75 72 6e 20 2d 63 6f 64 65 20 24 63 6f  return -code $co
07d0: 64 65 20 24 6d 73 67 0a 20 20 20 20 20 20 20 20  de $msg.        
07e0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a      }.        }.
07f0: 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 20 7b 28      }..    if {(
0800: 5b 69 6e 66 6f 20 6c 65 76 65 6c 5d 20 3d 3d 20  [info level] == 
0810: 31 29 20 26 26 20 5b 69 6e 66 6f 20 65 78 69 73  1) && [info exis
0820: 74 73 20 74 63 6c 5f 69 6e 74 65 72 61 63 74 69  ts tcl_interacti
0830: 76 65 5d 20 26 26 20 24 74 63 6c 5f 69 6e 74 65  ve] && $tcl_inte
0840: 72 61 63 74 69 76 65 7d 20 7b 0a 20 20 20 20 69  ractive} {.    i
0850: 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  f {![info exists
0860: 20 61 75 74 6f 5f 6e 6f 65 78 65 63 5d 7d 20 7b   auto_noexec]} {
0870: 0a 20 20 20 20 20 20 20 20 73 65 74 20 6e 65 77  .        set new
0880: 20 5b 61 75 74 6f 5f 65 78 65 63 6f 6b 20 24 6e   [auto_execok $n
0890: 61 6d 65 5d 0a 20 20 20 20 20 20 20 20 69 66 20  ame].        if 
08a0: 7b 24 6e 65 77 20 21 3d 20 22 22 7d 20 7b 0a 20  {$new != ""} {. 
08b0: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 65             set e
08c0: 72 72 6f 72 43 6f 64 65 20 24 73 61 76 65 64 45  rrorCode $savedE
08d0: 72 72 6f 72 43 6f 64 65 0a 20 20 20 20 20 20 20  rrorCode.       
08e0: 20 20 20 20 20 73 65 74 20 65 72 72 6f 72 49 6e       set errorIn
08f0: 66 6f 20 24 73 61 76 65 64 45 72 72 6f 72 49 6e  fo $savedErrorIn
0900: 66 6f 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  fo.            s
0910: 65 74 20 72 65 64 69 72 20 22 22 0a 20 20 20 20  et redir "".    
0920: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66          if {[inf
0930: 6f 20 63 6f 6d 6d 61 6e 64 73 20 63 6f 6e 73 6f  o commands conso
0940: 6c 65 5d 20 3d 3d 20 22 22 7d 20 7b 0a 20 20 20  le] == ""} {.   
0950: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
0960: 20 72 65 64 69 72 20 22 3e 26 40 73 74 64 6f 75   redir ">&@stdou
0970: 74 20 3c 40 73 74 64 69 6e 22 0a 20 20 20 20 20  t <@stdin".     
0980: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
0990: 20 20 20 20 20 23 20 6c 6f 6f 6b 20 66 6f 72 20       # look for 
09a0: 67 6c 6f 62 20 73 74 75 66 66 20 69 6e 20 24 61  glob stuff in $a
09b0: 72 67 73 0a 20 20 20 20 20 20 20 20 20 20 20 20  rgs.            
09c0: 72 65 74 75 72 6e 20 5b 75 70 6c 65 76 65 6c 20  return [uplevel 
09d0: 65 76 61 6c 20 65 78 65 63 20 24 72 65 64 69 72  eval exec $redir
09e0: 20 24 6e 65 77 20 5b 3a 3a 74 63 6c 72 65 61 64   $new [::tclread
09f0: 6c 69 6e 65 3a 3a 47 6c 6f 62 20 5b 6c 72 61 6e  line::Glob [lran
0a00: 67 65 20 24 61 72 67 73 20 31 20 65 6e 64 5d 5d  ge $args 1 end]]
0a10: 5d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ].        }.    
0a20: 7d 0a 20 20 20 20 73 65 74 20 65 72 72 6f 72 43  }.    set errorC
0a30: 6f 64 65 20 24 73 61 76 65 64 45 72 72 6f 72 43  ode $savedErrorC
0a40: 6f 64 65 0a 20 20 20 20 73 65 74 20 65 72 72 6f  ode.    set erro
0a50: 72 49 6e 66 6f 20 24 73 61 76 65 64 45 72 72 6f  rInfo $savedErro
0a60: 72 49 6e 66 6f 0a 20 20 20 20 69 66 20 7b 24 6e  rInfo.    if {$n
0a70: 61 6d 65 20 3d 3d 20 22 21 21 22 7d 20 7b 0a 20  ame == "!!"} {. 
0a80: 20 20 20 20 20 20 20 73 65 74 20 6e 65 77 63 6d         set newcm
0a90: 64 20 5b 68 69 73 74 6f 72 79 20 65 76 65 6e 74  d [history event
0aa0: 5d 0a 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b  ].    } elseif {
0ab0: 5b 72 65 67 65 78 70 20 7b 5e 21 28 2e 2b 29 24  [regexp {^!(.+)$
0ac0: 7d 20 24 6e 61 6d 65 20 64 75 6d 6d 79 20 65 76  } $name dummy ev
0ad0: 65 6e 74 5d 7d 20 7b 0a 20 20 20 20 20 20 20 20  ent]} {.        
0ae0: 73 65 74 20 6e 65 77 63 6d 64 20 5b 68 69 73 74  set newcmd [hist
0af0: 6f 72 79 20 65 76 65 6e 74 20 24 65 76 65 6e 74  ory event $event
0b00: 5d 0a 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b  ].    } elseif {
0b10: 5b 72 65 67 65 78 70 20 7b 5e 5c 5e 28 5b 5e 5e  [regexp {^\^([^^
0b20: 5d 2a 29 5c 5e 28 5b 5e 5e 5d 2a 29 5c 5e 3f 24  ]*)\^([^^]*)\^?$
0b30: 7d 20 24 6e 61 6d 65 20 64 75 6d 6d 79 20 6f 6c  } $name dummy ol
0b40: 64 20 6e 65 77 5d 7d 20 7b 0a 20 20 20 20 20 20  d new]} {.      
0b50: 20 20 73 65 74 20 6e 65 77 63 6d 64 20 5b 68 69    set newcmd [hi
0b60: 73 74 6f 72 79 20 65 76 65 6e 74 20 2d 31 5d 0a  story event -1].
0b70: 20 20 20 20 20 20 20 20 63 61 74 63 68 20 7b 72          catch {r
0b80: 65 67 73 75 62 20 2d 61 6c 6c 20 2d 2d 20 24 6f  egsub -all -- $o
0b90: 6c 64 20 24 6e 65 77 63 6d 64 20 24 6e 65 77 20  ld $newcmd $new 
0ba0: 6e 65 77 63 6d 64 7d 0a 20 20 20 20 7d 0a 20 20  newcmd}.    }.  
0bb0: 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73    if {[info exis
0bc0: 74 73 20 6e 65 77 63 6d 64 5d 7d 20 7b 0a 20 20  ts newcmd]} {.  
0bd0: 20 20 20 20 20 20 74 63 6c 4c 6f 67 20 24 6e 65        tclLog $ne
0be0: 77 63 6d 64 0a 20 20 20 20 20 20 20 20 68 69 73  wcmd.        his
0bf0: 74 6f 72 79 20 63 68 61 6e 67 65 20 24 6e 65 77  tory change $new
0c00: 63 6d 64 20 30 0a 20 20 20 20 20 20 20 20 72 65  cmd 0.        re
0c10: 74 75 72 6e 20 5b 75 70 6c 65 76 65 6c 20 24 6e  turn [uplevel $n
0c20: 65 77 63 6d 64 5d 0a 20 20 20 20 7d 0a 0a 20 20  ewcmd].    }..  
0c30: 20 20 73 65 74 20 72 65 74 20 5b 63 61 74 63 68    set ret [catch
0c40: 20 7b 73 65 74 20 63 6d 64 73 20 5b 69 6e 66 6f   {set cmds [info
0c50: 20 63 6f 6d 6d 61 6e 64 73 20 24 6e 61 6d 65 2a   commands $name*
0c60: 5d 7d 20 6d 73 67 5d 0a 20 20 20 20 69 66 20 7b  ]} msg].    if {
0c70: 5b 73 74 72 69 6e 67 20 63 6f 6d 70 61 72 65 20  [string compare 
0c80: 24 6e 61 6d 65 20 22 3a 3a 22 5d 20 3d 3d 20 30  $name "::"] == 0
0c90: 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20  } {.        set 
0ca0: 6e 61 6d 65 20 22 22 0a 20 20 20 20 7d 0a 20 20  name "".    }.  
0cb0: 20 20 69 66 20 7b 24 72 65 74 20 21 3d 20 30 7d    if {$ret != 0}
0cc0: 20 7b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72   {.        retur
0cd0: 6e 20 2d 63 6f 64 65 20 24 72 65 74 20 2d 65 72  n -code $ret -er
0ce0: 72 6f 72 63 6f 64 65 20 24 65 72 72 6f 72 43 6f  rorcode $errorCo
0cf0: 64 65 20 5c 0a 20 20 20 20 20 20 20 20 20 20 20  de \.           
0d00: 20 22 65 72 72 6f 72 20 69 6e 20 75 6e 6b 6e 6f   "error in unkno
0d10: 77 6e 20 77 68 69 6c 65 20 63 68 65 63 6b 69 6e  wn while checkin
0d20: 67 20 69 66 20 5c 22 24 6e 61 6d 65 5c 22 20 69  g if \"$name\" i
0d30: 73 20 61 20 75 6e 69 71 75 65 20 63 6f 6d 6d 61  s a unique comma
0d40: 6e 64 20 61 62 62 72 65 76 69 61 74 69 6f 6e 3a  nd abbreviation:
0d50: 20 24 6d 73 67 22 0a 20 20 20 20 7d 0a 20 20 20   $msg".    }.   
0d60: 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 63   if {[llength $c
0d70: 6d 64 73 5d 20 3d 3d 20 31 7d 20 7b 0a 20 20 20  mds] == 1} {.   
0d80: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 75 70 6c       return [upl
0d90: 65 76 65 6c 20 5b 6c 72 65 70 6c 61 63 65 20 24  evel [lreplace $
0da0: 61 72 67 73 20 30 20 30 20 24 63 6d 64 73 5d 5d  args 0 0 $cmds]]
0db0: 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 20 7b 5b  .    }.    if {[
0dc0: 6c 6c 65 6e 67 74 68 20 24 63 6d 64 73 5d 20 21  llength $cmds] !
0dd0: 3d 20 30 7d 20 7b 0a 20 20 20 20 20 20 20 20 69  = 0} {.        i
0de0: 66 20 7b 24 6e 61 6d 65 20 3d 3d 20 22 22 7d 20  f {$name == ""} 
0df0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  {.            re
0e00: 74 75 72 6e 20 2d 63 6f 64 65 20 65 72 72 6f 72  turn -code error
0e10: 20 22 65 6d 70 74 79 20 63 6f 6d 6d 61 6e 64 20   "empty command 
0e20: 6e 61 6d 65 20 5c 22 5c 22 22 0a 20 20 20 20 20  name \"\"".     
0e30: 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20     } else {.    
0e40: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 2d          return -
0e50: 63 6f 64 65 20 65 72 72 6f 72 20 22 61 6d 62 69  code error "ambi
0e60: 67 75 6f 75 73 20 63 6f 6d 6d 61 6e 64 20 6e 61  guous command na
0e70: 6d 65 20 5c 22 24 6e 61 6d 65 5c 22 3a 20 5b 6c  me \"$name\": [l
0e80: 73 6f 72 74 20 24 63 6d 64 73 5d 22 0a 20 20 20  sort $cmds]".   
0e90: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
0ea0: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 2d 63   }.    return -c
0eb0: 6f 64 65 20 65 72 72 6f 72 20 22 69 6e 76 61 6c  ode error "inval
0ec0: 69 64 20 63 6f 6d 6d 61 6e 64 20 6e 61 6d 65 20  id command name 
0ed0: 5c 22 24 6e 61 6d 65 5c 22 22 0a 7d 0a 0a 0a 6e  \"$name\"".}...n
0ee0: 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20 74 63  amespace eval tc
0ef0: 6c 72 65 61 64 6c 69 6e 65 20 7b 0a 0a 20 20 20  lreadline {..   
0f00: 20 6e 61 6d 65 73 70 61 63 65 20 65 78 70 6f 72   namespace expor
0f10: 74 20 53 65 74 75 70 20 4c 6f 6f 70 20 49 6e 69  t Setup Loop Ini
0f20: 74 54 63 6c 43 6d 64 73 20 49 6e 69 74 54 6b 43  tTclCmds InitTkC
0f30: 6d 64 73 20 50 72 69 6e 74 20 6c 73 0a 0a 20 20  mds Print ls..  
0f40: 20 20 70 72 6f 63 20 6c 73 20 7b 61 72 67 73 7d    proc ls {args}
0f50: 20 7b 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b   {.        if {[
0f60: 65 78 65 63 20 75 6e 61 6d 65 20 2d 73 5d 20 3d  exec uname -s] =
0f70: 3d 20 22 4c 69 6e 75 78 22 7d 20 7b 0a 20 20 20  = "Linux"} {.   
0f80: 20 20 20 20 20 20 20 20 20 65 76 61 6c 20 65 78           eval ex
0f90: 65 63 20 6c 73 20 2d 2d 63 6f 6c 6f 72 20 2d 46  ec ls --color -F
0fa0: 43 20 5b 47 6c 6f 62 20 24 61 72 67 73 5d 0a 20  C [Glob $args]. 
0fb0: 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a         } else {.
0fc0: 20 20 20 20 20 20 20 20 20 20 20 20 65 76 61 6c              eval
0fd0: 20 65 78 65 63 20 6c 73 20 2d 46 43 20 5b 47 6c   exec ls -FC [Gl
0fe0: 6f 62 20 24 61 72 67 73 5d 0a 20 20 20 20 20 20  ob $args].      
0ff0: 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70    }.    }..    p
1000: 72 6f 63 20 53 65 74 75 70 20 7b 61 72 67 73 7d  roc Setup {args}
1010: 20 7b 0a 0a 20 20 20 20 20 20 20 20 75 70 6c 65   {..        uple
1020: 76 65 6c 20 23 30 20 7b 0a 0a 20 20 20 20 20 20  vel #0 {..      
1030: 20 20 20 20 20 20 69 66 20 7b 22 22 20 3d 3d 20        if {"" == 
1040: 5b 69 6e 66 6f 20 63 6f 6d 6d 61 6e 64 73 20 3a  [info commands :
1050: 3a 74 63 6c 72 65 61 64 6c 69 6e 65 3a 3a 72 65  :tclreadline::re
1060: 61 64 6c 69 6e 65 5d 7d 20 7b 0a 20 20 20 20 20  adline]} {.     
1070: 20 20 20 20 20 20 20 20 20 20 20 3a 3a 74 63 6c             ::tcl
1080: 72 65 61 64 6c 69 6e 65 3a 3a 49 6e 69 74 0a 20  readline::Init. 
1090: 20 20 20 20 20 20 20 20 20 20 20 7d 0a 0a 20 20             }..  
10a0: 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 22 22            if {""
10b0: 20 3d 3d 20 5b 69 6e 66 6f 20 70 72 6f 63 73 20   == [info procs 
10c0: 3a 3a 74 63 6c 72 65 61 64 6c 69 6e 65 3a 3a 70  ::tclreadline::p
10d0: 72 6f 6d 70 74 31 5d 20 26 26 20 5b 69 6e 66 6f  rompt1] && [info
10e0: 20 6e 61 6d 65 6f 66 65 78 65 63 75 74 61 62 6c   nameofexecutabl
10f0: 65 5d 20 21 3d 20 22 22 7d 20 7b 0a 0a 20 20 20  e] != ""} {..   
1100: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 6d               nam
1110: 65 73 70 61 63 65 20 65 76 61 6c 20 3a 3a 74 63  espace eval ::tc
1120: 6c 72 65 61 64 6c 69 6e 65 20 7b 0a 20 20 20 20  lreadline {.    
1130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1140: 76 61 72 69 61 62 6c 65 20 70 72 6f 6d 70 74 5f  variable prompt_
1150: 73 74 72 69 6e 67 0a 20 20 20 20 20 20 20 20 20  string.         
1160: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 62             set b
1170: 61 73 65 20 5b 66 69 6c 65 20 74 61 69 6c 20 5b  ase [file tail [
1180: 69 6e 66 6f 20 6e 61 6d 65 6f 66 65 78 65 63 75  info nameofexecu
1190: 74 61 62 6c 65 5d 5d 0a 0a 20 20 20 20 20 20 20  table]]..       
11a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
11b0: 7b 5b 73 74 72 69 6e 67 20 6d 61 74 63 68 20 74  {[string match t
11c0: 63 6c 73 68 2a 20 24 62 61 73 65 5d 20 26 26 20  clsh* $base] && 
11d0: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 74 63 6c  [info exists tcl
11e0: 5f 76 65 72 73 69 6f 6e 5d 7d 20 7b 0a 20 20 20  _version]} {.   
11f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1200: 20 20 20 20 20 73 65 74 20 70 72 6f 6d 70 74 5f       set prompt_
1210: 73 74 72 69 6e 67 20 22 01 1b 5c 5b 30 3b 33 31  string "..\[0;31
1220: 6d 02 74 63 6c 73 68 24 74 63 6c 5f 76 65 72 73  m.tclsh$tcl_vers
1230: 69 6f 6e 01 1b 5c 5b 30 6d 02 22 0a 20 20 20 20  ion..\[0m.".    
1240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1250: 7d 20 65 6c 73 65 69 66 20 7b 5b 73 74 72 69 6e  } elseif {[strin
1260: 67 20 6d 61 74 63 68 20 77 69 73 68 2a 20 24 62  g match wish* $b
1270: 61 73 65 5d 20 26 26 20 5b 69 6e 66 6f 20 65 78  ase] && [info ex
1280: 69 73 74 73 20 74 6b 5f 76 65 72 73 69 6f 6e 5d  ists tk_version]
1290: 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  } {.            
12a0: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
12b0: 70 72 6f 6d 70 74 5f 73 74 72 69 6e 67 20 22 01  prompt_string ".
12c0: 1b 5c 5b 30 3b 33 34 6d 02 77 69 73 68 24 74 6b  .\[0;34m.wish$tk
12d0: 5f 76 65 72 73 69 6f 6e 01 1b 5c 5b 30 6d 02 22  _version..\[0m."
12e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12f0: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20       } else {.  
1300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1310: 20 20 20 20 20 20 73 65 74 20 70 72 6f 6d 70 74        set prompt
1320: 5f 73 74 72 69 6e 67 20 22 01 1b 5c 5b 30 3b 33  _string "..\[0;3
1330: 31 6d 02 24 62 61 73 65 01 1b 5c 5b 30 6d 02 22  1m.$base..\[0m."
1340: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1350: 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20       }..        
1360: 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20          }..     
1370: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 22             if {"
1380: 22 20 3d 3d 20 5b 69 6e 66 6f 20 70 72 6f 63 73  " == [info procs
1390: 20 3a 3a 74 63 6c 72 65 61 64 6c 69 6e 65 3a 3a   ::tclreadline::
13a0: 70 72 6f 6d 70 74 31 5d 7d 20 7b 0a 20 20 20 20  prompt1]} {.    
13b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c0: 70 72 6f 63 20 3a 3a 74 63 6c 72 65 61 64 6c 69  proc ::tclreadli
13d0: 6e 65 3a 3a 70 72 6f 6d 70 74 31 20 7b 7d 20 7b  ne::prompt1 {} {
13e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13f0: 20 20 20 20 20 20 20 20 20 76 61 72 69 61 62 6c           variabl
1400: 65 20 70 72 6f 6d 70 74 5f 73 74 72 69 6e 67 0a  e prompt_string.
1410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1420: 20 20 20 20 20 20 20 20 67 6c 6f 62 61 6c 20 65          global e
1430: 6e 76 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  nv.             
1440: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b             if {[
1450: 63 61 74 63 68 20 7b 73 65 74 20 70 77 64 20 5b  catch {set pwd [
1460: 70 77 64 5d 7d 20 74 6d 70 5d 7d 20 7b 0a 20 20  pwd]} tmp]} {.  
1470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1480: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 70 77            set pw
1490: 64 20 22 75 6e 61 62 6c 65 20 74 6f 20 67 65 74  d "unable to get
14a0: 20 70 77 64 22 0a 20 20 20 20 20 20 20 20 20 20   pwd".          
14b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a                }.
14c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14d0: 20 20 20 20 20 20 20 20 20 69 66 20 5b 69 6e 66           if [inf
14e0: 6f 20 65 78 69 73 74 73 20 65 6e 76 28 48 4f 4d  o exists env(HOM
14f0: 45 29 5d 20 7b 0a 20 20 20 20 20 20 20 20 20 20  E)] {.          
1500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1510: 20 20 72 65 67 73 75 62 20 24 65 6e 76 28 48 4f    regsub $env(HO
1520: 4d 45 29 20 24 70 77 64 20 22 7e 22 20 70 77 64  ME) $pwd "~" pwd
1530: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1540: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
1550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1560: 20 20 20 72 65 74 75 72 6e 20 22 24 70 72 6f 6d     return "$prom
1570: 70 74 5f 73 74 72 69 6e 67 20 5c 5b 24 70 77 64  pt_string \[$pwd
1580: 5c 5d 20 22 0a 20 20 20 20 20 20 20 20 20 20 20  \] ".           
1590: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
15a0: 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
15b0: 20 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20           }..    
15c0: 20 20 20 20 20 20 20 20 69 66 20 7b 22 22 20 3d          if {"" =
15d0: 3d 20 5b 69 6e 66 6f 20 70 72 6f 63 73 20 3a 3a  = [info procs ::
15e0: 74 63 6c 72 65 61 64 6c 69 6e 65 3a 3a 70 72 6f  tclreadline::pro
15f0: 6d 70 74 32 5d 20 26 26 20 5b 69 6e 66 6f 20 6e  mpt2] && [info n
1600: 61 6d 65 6f 66 65 78 65 63 75 74 61 62 6c 65 5d  ameofexecutable]
1610: 20 21 3d 20 22 22 7d 20 7b 0a 0a 20 20 20 20 20   != ""} {..     
1620: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 22             if {"
1630: 22 20 3d 3d 20 5b 69 6e 66 6f 20 70 72 6f 63 73  " == [info procs
1640: 20 3a 3a 74 63 6c 72 65 61 64 6c 69 6e 65 3a 3a   ::tclreadline::
1650: 70 72 6f 6d 70 74 32 5d 7d 20 7b 0a 20 20 20 20  prompt2]} {.    
1660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1670: 70 72 6f 63 20 3a 3a 74 63 6c 72 65 61 64 6c 69  proc ::tclreadli
1680: 6e 65 3a 3a 70 72 6f 6d 70 74 32 20 7b 7d 20 7b  ne::prompt2 {} {
1690: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16a0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
16b0: 22 3e 20 22 0a 20 20 20 20 20 20 20 20 20 20 20  "> ".           
16c0: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
16d0: 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
16e0: 20 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20           }..    
16f0: 20 20 20 20 20 20 20 20 69 66 20 7b 22 22 20 3d          if {"" =
1700: 3d 20 5b 69 6e 66 6f 20 70 72 6f 63 73 20 65 78  = [info procs ex
1710: 69 74 5d 7d 20 7b 0a 0a 20 20 20 20 20 20 20 20  it]} {..        
1720: 20 20 20 20 20 20 20 20 63 61 74 63 68 20 7b 72          catch {r
1730: 65 6e 61 6d 65 20 3a 3a 74 63 6c 72 65 61 64 6c  ename ::tclreadl
1740: 69 6e 65 3a 3a 45 78 69 74 20 22 22 7d 0a 20 20  ine::Exit ""}.  
1750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1760: 6e 61 6d 65 20 65 78 69 74 20 3a 3a 74 63 6c 72  name exit ::tclr
1770: 65 61 64 6c 69 6e 65 3a 3a 45 78 69 74 0a 0a 20  eadline::Exit.. 
1780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
1790: 72 6f 63 20 65 78 69 74 20 7b 61 72 67 73 7d 20  roc exit {args} 
17a0: 7b 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
17b0: 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63         if {[catc
17c0: 68 20 7b 3a 3a 74 63 6c 72 65 61 64 6c 69 6e 65  h {::tclreadline
17d0: 3a 3a 72 65 61 64 6c 69 6e 65 20 77 72 69 74 65  ::readline write
17e0: 20 5b 3a 3a 74 63 6c 72 65 61 64 6c 69 6e 65 3a   [::tclreadline:
17f0: 3a 48 69 73 74 6f 72 79 46 69 6c 65 47 65 74 5d  :HistoryFileGet]
1800: 7d 20 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20  } \.            
1810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1820: 20 3a 3a 74 63 6c 72 65 61 64 6c 69 6e 65 3a 3a   ::tclreadline::
1830: 65 72 72 6f 72 4d 73 67 5d 7d 20 7b 0a 20 20 20  errorMsg]} {.   
1840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1850: 20 20 20 20 20 70 75 74 73 20 73 74 64 65 72 72       puts stderr
1860: 20 24 3a 3a 74 63 6c 72 65 61 64 6c 69 6e 65 3a   $::tclreadline:
1870: 3a 65 72 72 6f 72 4d 73 67 0a 20 20 20 20 20 20  :errorMsg.      
1880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a                }.
1890: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18a0: 20 20 20 20 20 23 20 74 68 69 73 20 63 61 6c 6c       # this call
18b0: 20 69 73 20 69 67 6e 6f 72 65 64 2c 20 69 66 20   is ignored, if 
18c0: 74 63 6c 72 65 61 64 6c 69 6e 65 2e 63 0a 20 20  tclreadline.c.  
18d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e0: 20 20 23 20 77 61 73 20 63 6f 6d 70 69 6c 65 64    # was compiled
18f0: 20 77 69 74 68 20 43 4c 45 41 4e 55 50 5f 41 46   with CLEANUP_AF
1900: 45 52 5f 53 49 47 4e 41 4c 0a 20 20 20 20 20 20  ER_SIGNAL.      
1910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20                # 
1920: 6e 6f 74 20 64 65 66 69 6e 65 64 2e 20 54 68 69  not defined. Thi
1930: 73 20 69 73 20 74 68 65 20 63 61 73 65 20 66 6f  s is the case fo
1940: 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r.              
1950: 20 20 20 20 20 20 23 20 6f 6c 64 65 72 20 76 65        # older ve
1960: 72 73 69 6f 6e 73 20 6f 66 20 6c 69 62 72 65 61  rsions of librea
1970: 64 6c 69 6e 65 2e 0a 20 20 20 20 20 20 20 20 20  dline..         
1980: 20 20 20 20 20 20 20 20 20 20 20 23 0a 20 20 20             #.   
1990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a0: 20 3a 3a 74 63 6c 72 65 61 64 6c 69 6e 65 3a 3a   ::tclreadline::
19b0: 72 65 61 64 6c 69 6e 65 20 72 65 73 65 74 2d 74  readline reset-t
19c0: 65 72 6d 69 6e 61 6c 0a 0a 20 20 20 20 20 20 20  erminal..       
19d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
19e0: 7b 5b 63 61 74 63 68 20 22 65 76 61 6c 20 3a 3a  {[catch "eval ::
19f0: 74 63 6c 72 65 61 64 6c 69 6e 65 3a 3a 45 78 69  tclreadline::Exi
1a00: 74 20 24 61 72 67 73 22 20 6d 65 73 73 61 67 65  t $args" message
1a10: 5d 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  ]} {.           
1a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 70 75 74               put
1a30: 73 20 73 74 64 65 72 72 20 22 65 72 72 6f 72 3a  s stderr "error:
1a40: 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ".              
1a50: 20 20 20 20 20 20 20 20 20 20 70 75 74 73 20 73            puts s
1a60: 74 64 65 72 72 20 22 24 6d 65 73 73 61 67 65 22  tderr "$message"
1a70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a80: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
1a90: 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54             # NOT
1aa0: 52 45 41 43 48 45 44 0a 20 20 20 20 20 20 20 20  REACHED.        
1ab0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
1ac0: 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20        }..       
1ad0: 20 7d 0a 0a 20 20 20 20 20 20 20 20 67 6c 6f 62   }..        glob
1ae0: 61 6c 20 65 6e 76 0a 20 20 20 20 20 20 20 20 76  al env.        v
1af0: 61 72 69 61 62 6c 65 20 68 69 73 74 6f 72 79 66  ariable historyf
1b00: 69 6c 65 0a 0a 20 20 20 20 20 20 20 20 69 66 20  ile..        if 
1b10: 7b 5b 73 74 72 69 6e 67 20 74 72 69 6d 20 5b 6c  {[string trim [l
1b20: 6c 65 6e 67 74 68 20 24 61 72 67 73 5d 5d 7d 20  length $args]]} 
1b30: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65  {.            se
1b40: 74 20 68 69 73 74 6f 72 79 66 69 6c 65 20 22 22  t historyfile ""
1b50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74  .            cat
1b60: 63 68 20 7b 73 65 74 20 68 69 73 74 6f 72 79 66  ch {set historyf
1b70: 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65  ile [file native
1b80: 6e 61 6d 65 20 5b 6c 69 6e 64 65 78 20 24 61 72  name [lindex $ar
1b90: 67 73 20 30 5d 5d 7d 0a 20 20 20 20 20 20 20 20  gs 0]]}.        
1ba0: 20 20 20 20 69 66 20 7b 22 22 20 3d 3d 20 5b 73      if {"" == [s
1bb0: 74 72 69 6e 67 20 74 72 69 6d 20 24 68 69 73 74  tring trim $hist
1bc0: 6f 72 79 66 69 6c 65 5d 7d 20 7b 0a 20 20 20 20  oryfile]} {.    
1bd0: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
1be0: 68 69 73 74 6f 72 79 66 69 6c 65 20 5b 6c 69 6e  historyfile [lin
1bf0: 64 65 78 20 24 61 72 67 73 20 30 5d 0a 20 20 20  dex $args 0].   
1c00: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
1c10: 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20     } else {.    
1c20: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66          if {[inf
1c30: 6f 20 65 78 69 73 74 73 20 65 6e 76 28 48 4f 4d  o exists env(HOM
1c40: 45 29 5d 7d 20 7b 0a 20 20 20 20 20 20 20 20 20  E)]} {.         
1c50: 20 20 20 20 20 20 20 73 65 74 20 68 69 73 74 6f         set histo
1c60: 72 79 66 69 6c 65 20 24 65 6e 76 28 48 4f 4d 45  ryfile $env(HOME
1c70: 29 2f 2e 74 63 6c 73 68 2d 68 69 73 74 6f 72 79  )/.tclsh-history
1c80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65  .            } e
1c90: 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20  lse {.          
1ca0: 20 20 20 20 20 20 73 65 74 20 68 69 73 74 6f 72        set histor
1cb0: 79 66 69 6c 65 20 2e 74 63 6c 73 68 2d 68 69 73  yfile .tclsh-his
1cc0: 74 6f 72 79 0a 20 20 20 20 20 20 20 20 20 20 20  tory.           
1cd0: 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20   }.        }.   
1ce0: 20 20 20 20 20 73 65 74 20 3a 3a 74 63 6c 72 65       set ::tclre
1cf0: 61 64 6c 69 6e 65 3a 3a 65 72 72 6f 72 4d 73 67  adline::errorMsg
1d00: 20 5b 72 65 61 64 6c 69 6e 65 20 69 6e 69 74 69   [readline initi
1d10: 61 6c 69 7a 65 20 24 68 69 73 74 6f 72 79 66 69  alize $historyfi
1d20: 6c 65 5d 0a 20 20 20 20 20 20 20 20 69 66 20 7b  le].        if {
1d30: 24 3a 3a 74 63 6c 72 65 61 64 6c 69 6e 65 3a 3a  $::tclreadline::
1d40: 65 72 72 6f 72 4d 73 67 20 21 3d 20 22 22 7d 20  errorMsg != ""} 
1d50: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  {.            pu
1d60: 74 73 20 73 74 64 65 72 72 20 24 3a 3a 74 63 6c  ts stderr $::tcl
1d70: 72 65 61 64 6c 69 6e 65 3a 3a 65 72 72 6f 72 4d  readline::errorM
1d80: 73 67 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20 20  sg.        }..  
1d90: 20 20 20 20 20 20 23 20 49 6e 69 74 43 6d 64 73        # InitCmds
1da0: 0a 0a 20 20 20 20 20 20 20 20 72 65 6e 61 6d 65  ..        rename
1db0: 20 53 65 74 75 70 20 22 22 0a 20 20 20 20 7d 0a   Setup "".    }.
1dc0: 0a 20 20 20 20 70 72 6f 63 20 48 69 73 74 6f 72  .    proc Histor
1dd0: 79 46 69 6c 65 47 65 74 20 7b 7d 20 7b 0a 20 20  yFileGet {} {.  
1de0: 20 20 20 20 20 20 76 61 72 69 61 62 6c 65 20 68        variable h
1df0: 69 73 74 6f 72 79 66 69 6c 65 0a 20 20 20 20 20  istoryfile.     
1e00: 20 20 20 72 65 74 75 72 6e 20 24 68 69 73 74 6f     return $histo
1e10: 72 79 66 69 6c 65 0a 20 20 20 20 7d 0a 0a 20 20  ryfile.    }..  
1e20: 20 20 23 20 6f 62 73 6f 6c 65 74 65 0a 20 20 20    # obsolete.   
1e30: 20 23 0a 20 20 20 20 70 72 6f 63 20 47 6c 6f 62   #.    proc Glob
1e40: 20 7b 73 74 72 69 6e 67 7d 20 7b 0a 0a 20 20 20   {string} {..   
1e50: 20 20 20 20 20 73 65 74 20 63 6f 6d 6d 61 6e 64       set command
1e60: 73 74 72 69 6e 67 20 22 22 0a 20 20 20 20 20 20  string "".      
1e70: 20 20 66 6f 72 65 61 63 68 20 6e 61 6d 65 20 24    foreach name $
1e80: 73 74 72 69 6e 67 20 7b 0a 20 20 20 20 20 20 20  string {.       
1e90: 20 20 20 20 20 73 65 74 20 72 65 70 6c 61 63 65       set replace
1ea0: 20 5b 67 6c 6f 62 20 2d 6e 6f 63 6f 6d 70 6c 61   [glob -nocompla
1eb0: 69 6e 20 2d 2d 20 24 6e 61 6d 65 5d 0a 20 20 20  in -- $name].   
1ec0: 20 20 20 20 20 20 20 20 20 69 66 20 7b 24 72 65           if {$re
1ed0: 70 6c 61 63 65 20 3d 3d 20 22 22 7d 20 7b 0a 20  place == ""} {. 
1ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c                 l
1ef0: 61 70 70 65 6e 64 20 63 6f 6d 6d 61 6e 64 73 74  append commandst
1f00: 72 69 6e 67 20 24 6e 61 6d 65 0a 20 20 20 20 20  ring $name.     
1f10: 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a         } else {.
1f20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f30: 6c 61 70 70 65 6e 64 20 63 6f 6d 6d 61 6e 64 73  lappend commands
1f40: 74 72 69 6e 67 20 24 72 65 70 6c 61 63 65 0a 20  tring $replace. 
1f50: 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
1f60: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 23       }.        #
1f70: 20 72 65 74 75 72 6e 20 24 63 6f 6d 6d 61 6e 64   return $command
1f80: 73 74 72 69 6e 67 0a 20 20 20 20 20 20 20 20 23  string.        #
1f90: 20 43 68 72 69 73 74 69 61 6e 20 4b 72 6f 6e 65   Christian Krone
1fa0: 20 3c 6b 72 69 73 63 68 61 6e 40 73 71 6c 2e 64   <krischan@sql.d
1fb0: 65 3e 20 70 72 6f 70 6f 73 65 64 0a 20 20 20 20  e> proposed.    
1fc0: 20 20 20 20 72 65 74 75 72 6e 20 5b 65 76 61 6c      return [eval
1fd0: 20 63 6f 6e 63 61 74 20 24 63 6f 6d 6d 61 6e 64   concat $command
1fe0: 73 74 72 69 6e 67 5d 0a 20 20 20 20 7d 0a 0a 0a  string].    }...
1ff0: 20 20 20 20 70 72 6f 63 20 4c 6f 6f 70 20 7b 61      proc Loop {a
2000: 72 67 73 7d 20 7b 0a 0a 20 20 20 20 20 20 20 20  rgs} {..        
2010: 65 76 61 6c 20 53 65 74 75 70 20 24 7b 61 72 67  eval Setup ${arg
2020: 73 7d 0a 0a 20 20 20 20 20 20 20 20 75 70 6c 65  s}..        uple
2030: 76 65 6c 20 23 30 20 7b 0a 0a 20 20 20 20 20 20  vel #0 {..      
2040: 20 20 20 20 20 20 77 68 69 6c 65 20 7b 31 7d 20        while {1} 
2050: 7b 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2060: 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0a     if {[catch {.
2070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2080: 20 20 20 20 73 65 74 20 70 72 6f 6d 70 74 20 22      set prompt "
2090: 25 20 22 0a 20 20 20 20 20 20 20 20 20 20 20 20  % ".            
20a0: 20 20 20 20 20 20 20 20 69 66 20 7b 22 22 20 21          if {"" !
20b0: 3d 20 5b 69 6e 66 6f 20 70 72 6f 63 73 20 3a 3a  = [info procs ::
20c0: 74 63 6c 72 65 61 64 6c 69 6e 65 3a 3a 70 72 6f  tclreadline::pro
20d0: 6d 70 74 31 5d 7d 20 7b 0a 20 20 20 20 20 20 20  mpt1]} {.       
20e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20f0: 20 73 65 74 20 70 72 6f 6d 70 74 20 5b 3a 3a 74   set prompt [::t
2100: 63 6c 72 65 61 64 6c 69 6e 65 3a 3a 70 72 6f 6d  clreadline::prom
2110: 70 74 31 5d 0a 20 20 20 20 20 20 20 20 20 20 20  pt1].           
2120: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
2130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
2140: 65 74 20 3a 3a 74 63 6c 72 65 61 64 6c 69 6e 65  et ::tclreadline
2150: 3a 3a 4c 49 4e 45 20 5b 3a 3a 74 63 6c 72 65 61  ::LINE [::tclrea
2160: 64 6c 69 6e 65 3a 3a 72 65 61 64 6c 69 6e 65 20  dline::readline 
2170: 72 65 61 64 20 24 70 72 6f 6d 70 74 5d 0a 20 20  read $prompt].  
2180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2190: 20 20 77 68 69 6c 65 20 7b 21 5b 3a 3a 74 63 6c    while {![::tcl
21a0: 72 65 61 64 6c 69 6e 65 3a 3a 72 65 61 64 6c 69  readline::readli
21b0: 6e 65 20 63 6f 6d 70 6c 65 74 65 20 24 3a 3a 74  ne complete $::t
21c0: 63 6c 72 65 61 64 6c 69 6e 65 3a 3a 4c 49 4e 45  clreadline::LINE
21d0: 5d 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  ]} {.           
21e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 61 70 70               app
21f0: 65 6e 64 20 3a 3a 74 63 6c 72 65 61 64 6c 69 6e  end ::tclreadlin
2200: 65 3a 3a 4c 49 4e 45 20 22 5c 6e 22 0a 20 20 20  e::LINE "\n".   
2210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2220: 20 20 20 20 20 73 65 74 20 70 72 6f 6d 70 74 32       set prompt2
2230: 20 22 3e 20 22 0a 20 20 20 20 20 20 20 20 20 20   "> ".          
2240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2250: 20 7b 22 22 20 21 3d 20 5b 69 6e 66 6f 20 70 72   {"" != [info pr
2260: 6f 63 73 20 3a 3a 74 63 6c 72 65 61 64 6c 69 6e  ocs ::tclreadlin
2270: 65 3a 3a 70 72 6f 6d 70 74 32 5d 7d 20 7b 0a 20  e::prompt2]} {. 
2280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2290: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 70             set p
22a0: 72 6f 6d 70 74 32 20 5b 3a 3a 74 63 6c 72 65 61  rompt2 [::tclrea
22b0: 64 6c 69 6e 65 3a 3a 70 72 6f 6d 70 74 32 5d 0a  dline::prompt2].
22c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22d0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
22e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22f0: 20 20 61 70 70 65 6e 64 20 3a 3a 74 63 6c 72 65    append ::tclre
2300: 61 64 6c 69 6e 65 3a 3a 4c 49 4e 45 20 5b 74 63  adline::LINE [tc
2310: 6c 72 65 61 64 6c 69 6e 65 3a 3a 72 65 61 64 6c  lreadline::readl
2320: 69 6e 65 20 72 65 61 64 20 24 70 72 6f 6d 70 74  ine read $prompt
2330: 32 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  2].             
2340: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
2350: 20 20 20 20 20 20 20 20 20 7d 20 3a 3a 74 63 6c           } ::tcl
2360: 72 65 61 64 6c 69 6e 65 3a 3a 65 72 72 6f 72 4d  readline::errorM
2370: 73 67 5d 7d 20 7b 0a 20 20 20 20 20 20 20 20 20  sg]} {.         
2380: 20 20 20 20 20 20 20 20 20 20 20 70 75 74 73 20             puts 
2390: 73 74 64 65 72 72 20 22 74 63 6c 72 65 61 64 6c  stderr "tclreadl
23a0: 69 6e 65 3a 3a 4c 6f 6f 70 3a 20 65 72 72 6f 72  ine::Loop: error
23b0: 2e 20 24 3a 3a 74 63 6c 72 65 61 64 6c 69 6e 65  . $::tclreadline
23c0: 3a 3a 65 72 72 6f 72 4d 73 67 22 0a 20 20 20 20  ::errorMsg".    
23d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e0: 63 6f 6e 74 69 6e 75 65 0a 20 20 20 20 20 20 20  continue.       
23f0: 20 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20           }..    
2400: 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4d 61              # Ma
2410: 67 6e 75 73 20 45 72 69 6b 73 73 6f 6e 20 3c 6d  gnus Eriksson <m
2420: 61 67 6e 75 73 2e 65 72 69 6b 73 73 6f 6e 40 6e  agnus.eriksson@n
2430: 65 74 69 6e 73 69 67 68 74 2e 73 65 3e 20 70 72  etinsight.se> pr
2440: 6f 70 6f 73 65 64 0a 20 20 20 20 20 20 20 20 20  oposed.         
2450: 20 20 20 20 20 20 20 23 20 74 6f 20 61 64 64 20         # to add 
2460: 74 68 65 20 6c 69 6e 65 20 61 6c 73 6f 20 74 6f  the line also to
2470: 20 74 63 6c 73 68 27 73 20 68 69 73 74 6f 72 79   tclsh's history
2480: 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2490: 20 20 23 0a 20 20 20 20 20 20 20 20 20 20 20 20    #.            
24a0: 20 20 20 20 23 20 49 20 64 65 63 69 64 65 64 20      # I decided 
24b0: 74 6f 20 61 64 64 20 6f 6e 6c 79 20 6c 69 6e 65  to add only line
24c0: 73 20 77 68 69 63 68 20 61 72 65 20 64 69 66 66  s which are diff
24d0: 65 72 65 6e 74 20 66 72 6f 6d 0a 20 20 20 20 20  erent from.     
24e0: 20 20 20 20 20 20 20 20 20 20 20 23 20 74 68 65             # the
24f0: 20 70 72 65 76 69 6f 75 73 20 6f 6e 65 20 74 6f   previous one to
2500: 20 74 68 65 20 68 69 73 74 6f 72 79 2e 20 54 68   the history. Th
2510: 69 73 20 69 73 20 64 69 66 66 65 72 65 6e 74 0a  is is different.
2520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2530: 23 20 66 72 6f 6d 20 74 63 73 68 27 73 20 62 65  # from tcsh's be
2540: 68 61 76 69 6f 75 72 2c 20 62 75 74 20 49 20 66  haviour, but I f
2550: 6f 75 6e 64 20 69 74 20 71 75 69 74 65 20 63 6f  ound it quite co
2560: 6e 76 65 6e 69 65 6e 74 0a 20 20 20 20 20 20 20  nvenient.       
2570: 20 20 20 20 20 20 20 20 20 23 20 77 68 69 6c 65           # while
2580: 20 75 73 69 6e 67 20 6d 73 68 65 6c 6c 20 6f 6e   using mshell on
2590: 20 6f 73 39 2e 0a 20 20 20 20 20 20 20 20 20 20   os9..          
25a0: 20 20 20 20 20 20 23 0a 20 20 20 20 20 20 20 20        #.        
25b0: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72          if {[str
25c0: 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74 63  ing length $::tc
25d0: 6c 72 65 61 64 6c 69 6e 65 3a 3a 4c 49 4e 45 5d  lreadline::LINE]
25e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25f0: 20 20 20 20 20 20 20 20 20 26 26 20 5b 68 69 73           && [his
2600: 74 6f 72 79 20 65 76 65 6e 74 20 30 5d 20 21 3d  tory event 0] !=
2610: 20 24 3a 3a 74 63 6c 72 65 61 64 6c 69 6e 65 3a   $::tclreadline:
2620: 3a 4c 49 4e 45 7d 20 7b 0a 20 20 20 20 20 20 20  :LINE} {.       
2630: 20 20 20 20 20 20 20 20 20 20 20 20 20 68 69 73               his
2640: 74 6f 72 79 20 61 64 64 20 24 3a 3a 74 63 6c 72  tory add $::tclr
2650: 65 61 64 6c 69 6e 65 3a 3a 4c 49 4e 45 0a 20 20  eadline::LINE.  
2660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a                }.
2670: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2680: 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0a 20 20   if {[catch {.  
2690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26a0: 20 20 73 65 74 20 3a 3a 74 63 6c 72 65 61 64 6c    set ::tclreadl
26b0: 69 6e 65 3a 3a 72 65 73 75 6c 74 20 5b 65 76 61  ine::result [eva
26c0: 6c 20 24 3a 3a 74 63 6c 72 65 61 64 6c 69 6e 65  l $::tclreadline
26d0: 3a 3a 4c 49 4e 45 5d 0a 20 20 20 20 20 20 20 20  ::LINE].        
26e0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
26f0: 24 3a 3a 74 63 6c 72 65 61 64 6c 69 6e 65 3a 3a  $::tclreadline::
2700: 72 65 73 75 6c 74 20 21 3d 20 22 22 20 26 26 20  result != "" && 
2710: 5b 74 63 6c 72 65 61 64 6c 69 6e 65 3a 3a 50 72  [tclreadline::Pr
2720: 69 6e 74 5d 7d 20 7b 0a 20 20 20 20 20 20 20 20  int]} {.        
2730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2740: 70 75 74 73 20 24 3a 3a 74 63 6c 72 65 61 64 6c  puts $::tclreadl
2750: 69 6e 65 3a 3a 72 65 73 75 6c 74 0a 20 20 20 20  ine::result.    
2760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2770: 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  }.              
2780: 20 20 20 20 20 20 73 65 74 20 3a 3a 74 63 6c 72        set ::tclr
2790: 65 61 64 6c 69 6e 65 3a 3a 72 65 73 75 6c 74 20  eadline::result 
27a0: 22 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  "".             
27b0: 20 20 20 7d 20 3a 3a 74 63 6c 72 65 61 64 6c 69     } ::tclreadli
27c0: 6e 65 3a 3a 65 72 72 6f 72 4d 73 67 5d 7d 20 7b  ne::errorMsg]} {
27d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27e0: 20 20 20 20 20 70 75 74 73 20 73 74 64 65 72 72       puts stderr
27f0: 20 24 3a 3a 74 63 6c 72 65 61 64 6c 69 6e 65 3a   $::tclreadline:
2800: 3a 65 72 72 6f 72 4d 73 67 0a 20 20 20 20 20 20  :errorMsg.      
2810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 75                pu
2820: 74 73 20 73 74 64 65 72 72 20 22 77 68 69 6c 65  ts stderr "while
2830: 20 65 76 61 6c 75 61 74 69 6e 67 20 24 3a 3a 74   evaluating $::t
2840: 63 6c 72 65 61 64 6c 69 6e 65 3a 3a 4c 49 4e 45  clreadline::LINE
2850: 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ".              
2860: 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
2870: 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20   }.        }.   
2880: 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 50 72 69   }..    proc Pri
2890: 6e 74 20 7b 61 72 67 73 7d 20 7b 0a 20 20 20 20  nt {args} {.    
28a0: 20 20 20 20 76 61 72 69 61 62 6c 65 20 50 52 49      variable PRI
28b0: 4e 54 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21  NT.        if {!
28c0: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 50 52 49  [info exists PRI
28d0: 4e 54 5d 7d 20 7b 0a 20 20 20 20 20 20 20 20 20  NT]} {.         
28e0: 20 20 20 73 65 74 20 50 52 49 4e 54 20 79 65 73     set PRINT yes
28f0: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
2900: 20 20 20 63 61 74 63 68 20 7b 73 65 74 20 50 52     catch {set PR
2910: 49 4e 54 20 5b 65 78 70 72 20 7b 24 61 72 67 73  INT [expr {$args
2920: 20 3f 20 22 79 65 73 22 20 3a 20 22 6e 6f 22 7d   ? "yes" : "no"}
2930: 5d 7d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ]}.        retur
2940: 6e 20 24 50 52 49 4e 54 0a 20 20 20 20 7d 0a 0a  n $PRINT.    }..
2950: 0a 23 20 20 20 20 70 72 6f 63 20 49 6e 69 74 43  .#    proc InitC
2960: 6d 64 73 20 7b 7d 20 7b 0a 23 20 20 20 20 20 20  mds {} {.#      
2970: 20 20 23 20 58 58 58 0a 23 20 20 20 20 20 20 20    # XXX.#       
2980: 20 72 65 74 75 72 6e 0a 23 20 20 20 20 20 20 20   return.#       
2990: 20 23 20 58 58 58 0a 23 20 20 20 20 20 20 20 20   # XXX.#        
29a0: 67 6c 6f 62 61 6c 20 74 63 6c 5f 76 65 72 73 69  global tcl_versi
29b0: 6f 6e 20 74 6b 5f 76 65 72 73 69 6f 6e 0a 23 20  on tk_version.# 
29c0: 20 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f         if {[info
29d0: 20 65 78 69 73 74 73 20 74 63 6c 5f 76 65 72 73   exists tcl_vers
29e0: 69 6f 6e 5d 7d 20 7b 0a 23 20 20 20 20 20 20 20  ion]} {.#       
29f0: 20 20 20 20 20 49 6e 69 74 54 63 6c 43 6d 64 73       InitTclCmds
2a00: 0a 23 20 20 20 20 20 20 20 20 7d 0a 23 20 20 20  .#        }.#   
2a10: 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65       if {[info e
2a20: 78 69 73 74 73 20 74 6b 5f 76 65 72 73 69 6f 6e  xists tk_version
2a30: 5d 7d 20 7b 0a 23 20 20 20 20 20 20 20 20 20 20  ]} {.#          
2a40: 20 20 49 6e 69 74 54 6b 43 6d 64 73 0a 23 20 20    InitTkCmds.#  
2a50: 20 20 20 20 20 20 7d 0a 23 20 20 20 20 20 20 20        }.#       
2a60: 20 72 65 6e 61 6d 65 20 49 6e 69 74 43 6d 64 73   rename InitCmds
2a70: 20 22 22 0a 23 20 20 20 20 7d 0a 23 0a 23 20 20   "".#    }.#.#  
2a80: 20 20 70 72 6f 63 20 49 6e 69 74 54 63 6c 43 6d    proc InitTclCm
2a90: 64 73 20 7b 7d 20 7b 0a 23 20 20 20 20 20 20 20  ds {} {.#       
2aa0: 20 76 61 72 69 61 62 6c 65 20 6b 6e 6f 77 6e 5f   variable known_
2ab0: 63 6d 64 73 0a 23 20 20 20 20 20 20 20 20 66 6f  cmds.#        fo
2ac0: 72 65 61 63 68 20 6c 69 6e 65 20 7b 0a 23 20 20  reach line {.#  
2ad0: 20 20 20 20 20 20 20 20 20 20 22 61 66 74 65 72            "after
2ae0: 20 6f 70 74 69 6f 6e 20 3f 61 72 67 20 61 72 67   option ?arg arg
2af0: 20 2e 2e 2e 3f 22 0a 23 20 20 20 20 20 20 20 20   ...?".#        
2b00: 20 20 20 20 22 61 70 70 65 6e 64 20 76 61 72 4e      "append varN
2b10: 61 6d 65 20 3f 76 61 6c 75 65 20 76 61 6c 75 65  ame ?value value
2b20: 20 2e 2e 2e 3f 22 0a 23 20 20 20 20 20 20 20 20   ...?".#        
2b30: 20 20 20 20 22 61 72 72 61 79 20 6f 70 74 69 6f      "array optio
2b40: 6e 20 61 72 72 61 79 4e 61 6d 65 20 3f 61 72 67  n arrayName ?arg
2b50: 20 2e 2e 2e 3f 22 0a 23 20 20 20 20 20 20 20 20   ...?".#        
2b60: 20 20 20 20 22 62 67 65 72 72 6f 72 22 0a 23 20      "bgerror".# 
2b70: 20 20 20 20 20 20 20 20 20 20 20 22 62 72 65 61             "brea
2b80: 6b 22 0a 23 20 20 20 20 20 20 20 20 20 20 20 20  k".#            
2b90: 22 63 61 74 63 68 20 63 6f 6d 6d 61 6e 64 20 3f  "catch command ?
2ba0: 76 61 72 4e 61 6d 65 3f 22 0a 23 20 20 20 20 20  varName?".#     
2bb0: 20 20 20 20 20 20 20 22 63 64 22 0a 23 20 20 20         "cd".#   
2bc0: 20 20 20 20 20 20 20 20 20 22 63 6c 6f 63 6b 22           "clock"
2bd0: 0a 23 20 20 20 20 20 20 20 20 20 20 20 20 22 63  .#            "c
2be0: 6c 6f 73 65 20 3c 63 68 61 6e 6e 65 6c 49 64 3e  lose <channelId>
2bf0: 22 0a 23 20 20 20 20 20 20 20 20 20 20 20 20 22  ".#            "
2c00: 63 6f 6e 63 61 74 22 0a 23 20 20 20 20 20 20 20  concat".#       
2c10: 20 20 20 20 20 22 63 6f 6e 74 69 6e 75 65 22 0a       "continue".
2c20: 23 20 20 20 20 20 20 20 20 20 20 20 20 22 65 6f  #            "eo
2c30: 66 20 3c 63 68 61 6e 6e 65 6c 49 64 3e 22 0a 23  f <channelId>".#
2c40: 20 20 20 20 20 20 20 20 20 20 20 20 22 65 72 72              "err
2c50: 6f 72 20 6d 65 73 73 61 67 65 20 3f 65 72 72 6f  or message ?erro
2c60: 72 49 6e 66 6f 3f 20 3f 65 72 72 6f 72 43 6f 64  rInfo? ?errorCod
2c70: 65 3f 22 0a 23 20 20 20 20 20 20 20 20 20 20 20  e?".#           
2c80: 20 22 65 76 61 6c 20 61 72 67 20 3f 61 72 67 20   "eval arg ?arg 
2c90: 2e 2e 2e 3f 22 0a 23 20 20 20 20 20 20 20 20 20  ...?".#         
2ca0: 20 20 20 22 65 78 65 63 20 3f 73 77 69 74 63 68     "exec ?switch
2cb0: 65 73 3f 20 61 72 67 20 3f 61 72 67 20 2e 2e 2e  es? arg ?arg ...
2cc0: 3f 22 0a 23 20 20 20 20 20 20 20 20 20 20 20 20  ?".#            
2cd0: 22 65 78 69 74 20 3f 72 65 74 75 72 6e 43 6f 64  "exit ?returnCod
2ce0: 65 3f 22 0a 23 20 20 20 20 20 20 20 20 20 20 20  e?".#           
2cf0: 20 22 66 62 6c 6f 63 6b 65 64 20 3c 63 68 61 6e   "fblocked <chan
2d00: 6e 65 6c 49 64 3e 22 0a 23 20 20 20 20 20 20 20  nelId>".#       
2d10: 20 20 20 20 20 22 66 6f 72 20 73 74 61 72 74 20       "for start 
2d20: 74 65 73 74 20 6e 65 78 74 20 63 6f 6d 6d 61 6e  test next comman
2d30: 64 22 0a 23 20 20 20 20 20 20 20 20 20 20 20 20  d".#            
2d40: 22 66 6f 72 65 61 63 68 20 76 61 72 4c 69 73 74  "foreach varList
2d50: 20 6c 69 73 74 20 3f 76 61 72 4c 69 73 74 20 6c   list ?varList l
2d60: 69 73 74 20 2e 2e 2e 3f 20 63 6f 6d 6d 61 6e 64  ist ...? command
2d70: 22 0a 23 20 20 20 20 20 20 20 20 20 20 20 20 22  ".#            "
2d80: 66 6f 72 6d 61 74 20 66 6f 72 6d 61 74 53 74 72  format formatStr
2d90: 69 6e 67 20 3f 61 72 67 20 61 72 67 20 2e 2e 2e  ing ?arg arg ...
2da0: 3f 22 0a 23 20 20 20 20 20 20 20 20 20 20 20 20  ?".#            
2db0: 22 67 65 74 73 20 63 68 61 6e 6e 65 6c 49 64 20  "gets channelId 
2dc0: 3f 76 61 72 4e 61 6d 65 3f 22 0a 23 20 20 20 20  ?varName?".#    
2dd0: 20 20 20 20 20 20 20 20 22 67 6c 6f 62 22 0a 23          "glob".#
2de0: 20 20 20 20 20 20 20 20 20 20 20 20 22 67 6c 6f              "glo
2df0: 62 61 6c 20 76 61 72 4e 61 6d 65 20 3f 76 61 72  bal varName ?var
2e00: 4e 61 6d 65 20 2e 2e 2e 3f 22 0a 23 20 20 20 20  Name ...?".#    
2e10: 20 20 20 20 20 20 20 20 22 69 6e 63 72 20 76 61          "incr va
2e20: 72 4e 61 6d 65 20 3f 69 6e 63 72 65 6d 65 6e 74  rName ?increment
2e30: 3f 22 0a 23 20 20 20 20 20 20 20 20 20 20 20 20  ?".#            
2e40: 22 69 6e 66 6f 20 6f 70 74 69 6f 6e 20 3f 61 72  "info option ?ar
2e50: 67 20 61 72 67 20 2e 2e 2e 3f 22 0a 23 20 20 20  g arg ...?".#   
2e60: 20 20 20 20 20 20 20 20 20 22 69 6e 74 65 72 70           "interp
2e70: 20 63 6d 64 20 3f 61 72 67 20 2e 2e 2e 3f 22 0a   cmd ?arg ...?".
2e80: 23 20 20 20 20 20 20 20 20 20 20 20 20 22 6a 6f  #            "jo
2e90: 69 6e 20 6c 69 73 74 20 3f 6a 6f 69 6e 53 74 72  in list ?joinStr
2ea0: 69 6e 67 3f 22 0a 23 20 20 20 20 20 20 20 20 20  ing?".#         
2eb0: 20 20 20 22 6c 61 70 70 65 6e 64 20 76 61 72 4e     "lappend varN
2ec0: 61 6d 65 20 3f 76 61 6c 75 65 20 76 61 6c 75 65  ame ?value value
2ed0: 20 2e 2e 2e 3f 22 0a 23 20 20 20 20 20 20 20 20   ...?".#        
2ee0: 20 20 20 20 22 6c 69 6e 64 65 78 20 6c 69 73 74      "lindex list
2ef0: 20 69 6e 64 65 78 22 0a 23 20 20 20 20 20 20 20   index".#       
2f00: 20 20 20 20 20 22 6c 69 6e 73 65 72 74 20 6c 69       "linsert li
2f10: 73 74 20 3c 69 6e 64 65 78 3e 20 3c 65 6c 65 6d  st <index> <elem
2f20: 65 6e 74 3e 20 3f 65 6c 65 6d 65 6e 74 20 2e 2e  ent> ?element ..
2f30: 2e 3f 22 0a 23 20 20 20 20 20 20 20 20 20 20 20  .?".#           
2f40: 20 22 6c 69 73 74 22 0a 23 20 20 20 20 20 20 20   "list".#       
2f50: 20 20 20 20 20 22 6c 6c 65 6e 67 74 68 20 6c 69       "llength li
2f60: 73 74 22 0a 23 20 20 20 20 20 20 20 20 20 20 20  st".#           
2f70: 20 22 6c 72 61 6e 67 65 20 6c 69 73 74 20 66 69   "lrange list fi
2f80: 72 73 74 20 6c 61 73 74 22 0a 23 20 20 20 20 20  rst last".#     
2f90: 20 20 20 20 20 20 20 22 6c 72 65 70 6c 61 63 65         "lreplace
2fa0: 20 6c 69 73 74 20 66 69 72 73 74 20 6c 61 73 74   list first last
2fb0: 20 3f 65 6c 65 6d 65 6e 74 20 65 6c 65 6d 65 6e   ?element elemen
2fc0: 74 20 2e 2e 2e 3f 22 0a 23 20 20 20 20 20 20 20  t ...?".#       
2fd0: 20 20 20 20 20 22 6c 73 65 61 72 63 68 20 3f 6d       "lsearch ?m
2fe0: 6f 64 65 3f 20 6c 69 73 74 20 70 61 74 74 65 72  ode? list patter
2ff0: 6e 22 0a 23 20 20 20 20 20 20 20 20 20 20 20 20  n".#            
3000: 22 6c 73 6f 72 74 20 3f 6f 70 74 69 6f 6e 73 3f  "lsort ?options?
3010: 20 6c 69 73 74 22 0a 23 20 20 20 20 20 20 20 20   list".#        
3020: 20 20 20 20 22 6e 61 6d 65 73 70 61 63 65 22 0a      "namespace".
3030: 23 20 20 20 20 20 20 20 20 20 20 20 20 22 70 61  #            "pa
3040: 63 6b 61 67 65 20 6f 70 74 69 6f 6e 20 3f 61 72  ckage option ?ar
3050: 67 20 61 72 67 20 2e 2e 2e 3f 22 0a 23 20 20 20  g arg ...?".#   
3060: 20 20 20 20 20 20 20 20 20 22 70 72 6f 63 20 6e           "proc n
3070: 61 6d 65 20 61 72 67 73 20 62 6f 64 79 22 0a 23  ame args body".#
3080: 20 20 20 20 20 20 20 20 20 20 20 20 22 72 65 61              "rea
3090: 64 20 3f 2d 6e 6f 6e 65 77 6c 69 6e 65 3f 20 63  d ?-nonewline? c
30a0: 68 61 6e 6e 65 6c 49 64 22 0a 23 20 20 20 20 20  hannelId".#     
30b0: 20 20 20 20 20 20 20 22 72 65 67 65 78 70 20 3f         "regexp ?
30c0: 73 77 69 74 63 68 65 73 3f 20 65 78 70 20 73 74  switches? exp st
30d0: 72 69 6e 67 20 3f 6d 61 74 63 68 56 61 72 3f 20  ring ?matchVar? 
30e0: 3f 73 75 62 4d 61 74 63 68 56 61 72 20 73 75 62  ?subMatchVar sub
30f0: 4d 61 74 63 68 56 61 72 20 2e 2e 2e 3f 22 0a 23  MatchVar ...?".#
3100: 20 20 20 20 20 20 20 20 20 20 20 20 22 72 65 6e              "ren
3110: 61 6d 65 20 6f 6c 64 4e 61 6d 65 20 6e 65 77 4e  ame oldName newN
3120: 61 6d 65 22 0a 23 20 20 20 20 20 20 20 20 20 20  ame".#          
3130: 20 20 22 73 63 61 6e 20 3c 73 74 72 69 6e 67 3e    "scan <string>
3140: 20 3c 66 6f 72 6d 61 74 3e 20 3f 76 61 72 4e 61   <format> ?varNa
3150: 6d 65 20 76 61 72 4e 61 6d 65 20 2e 2e 2e 3f 22  me varName ...?"
3160: 0a 23 20 20 20 20 20 20 20 20 20 20 20 20 22 73  .#            "s
3170: 65 74 20 76 61 72 4e 61 6d 65 20 3f 6e 65 77 56  et varName ?newV
3180: 61 6c 75 65 3f 22 0a 23 20 20 20 20 20 20 20 20  alue?".#        
3190: 20 20 20 20 22 73 70 6c 69 74 20 3c 73 74 72 69      "split <stri
31a0: 6e 67 3e 20 3f 73 70 6c 69 74 43 68 61 72 73 3f  ng> ?splitChars?
31b0: 22 0a 23 20 20 20 20 20 20 20 20 20 20 20 20 22  ".#            "
31c0: 73 75 62 73 74 20 3f 2d 6e 6f 62 61 63 6b 73 6c  subst ?-nobacksl
31d0: 61 73 68 65 73 3f 20 3f 2d 6e 6f 63 6f 6d 6d 61  ashes? ?-nocomma
31e0: 6e 64 73 3f 20 3f 2d 6e 6f 76 61 72 69 61 62 6c  nds? ?-novariabl
31f0: 65 73 3f 20 73 74 72 69 6e 67 22 0a 23 20 20 20  es? string".#   
3200: 20 20 20 20 20 20 20 20 20 22 73 77 69 74 63 68           "switch
3210: 20 3f 73 77 69 74 63 68 65 73 3f 20 73 74 72 69   ?switches? stri
3220: 6e 67 20 70 61 74 74 65 72 6e 20 62 6f 64 79 20  ng pattern body 
3230: 2e 2e 2e 20 3f 64 65 66 61 75 6c 74 20 62 6f 64  ... ?default bod
3240: 79 3f 22 0a 23 20 20 20 20 20 20 20 20 20 20 20  y?".#           
3250: 20 22 74 69 6d 65 20 3c 63 6f 6d 6d 61 6e 64 3e   "time <command>
3260: 20 3f 63 6f 75 6e 74 3f 22 0a 23 20 20 20 20 20   ?count?".#     
3270: 20 20 20 20 20 20 20 22 75 6e 6b 6e 6f 77 6e 20         "unknown 
3280: 3c 63 6d 64 4e 61 6d 65 3e 20 3f 61 72 67 3f 20  <cmdName> ?arg? 
3290: 3f 2e 2e 2e 3f 22 0a 23 20 20 20 20 20 20 20 20  ?...?".#        
32a0: 20 20 20 20 22 75 70 6c 65 76 65 6c 20 3f 6c 65      "uplevel ?le
32b0: 76 65 6c 3f 20 63 6f 6d 6d 61 6e 64 20 3f 61 72  vel? command ?ar
32c0: 67 20 2e 2e 2e 3f 22 0a 23 20 20 20 20 20 20 20  g ...?".#       
32d0: 20 20 20 20 20 22 76 77 61 69 74 20 6e 61 6d 65       "vwait name
32e0: 22 0a 23 20 20 20 20 20 20 20 20 20 20 20 20 22  ".#            "
32f0: 77 68 69 6c 65 20 74 65 73 74 20 63 6f 6d 6d 61  while test comma
3300: 6e 64 22 0a 23 20 20 20 20 20 20 20 20 7d 20 7b  nd".#        } {
3310: 0a 23 20 20 20 20 20 20 20 20 20 20 20 20 72 65  .#            re
3320: 61 64 6c 69 6e 65 20 61 64 64 20 24 6c 69 6e 65  adline add $line
3330: 0a 23 20 20 20 20 20 20 20 20 20 20 20 20 73 65  .#            se
3340: 74 20 6b 6e 6f 77 6e 5f 63 6d 64 73 28 5b 6c 69  t known_cmds([li
3350: 6e 64 65 78 20 24 6c 69 6e 65 20 30 5d 29 20 24  ndex $line 0]) $
3360: 7b 6c 69 6e 65 7d 0a 23 20 20 20 20 20 20 20 20  {line}.#        
3370: 7d 0a 23 20 20 20 20 20 20 20 20 72 65 6e 61 6d  }.#        renam
3380: 65 20 49 6e 69 74 54 63 6c 43 6d 64 73 20 22 22  e InitTclCmds ""
3390: 0a 23 20 20 20 20 7d 0a 23 0a 23 20 20 20 20 70  .#    }.#.#    p
33a0: 72 6f 63 20 49 6e 69 74 54 6b 43 6d 64 73 20 7b  roc InitTkCmds {
33b0: 7d 20 7b 0a 23 20 20 20 20 20 20 20 20 76 61 72  } {.#        var
33c0: 69 61 62 6c 65 20 6b 6e 6f 77 6e 5f 63 6d 64 73  iable known_cmds
33d0: 0a 23 20 20 20 20 20 20 20 20 66 6f 72 65 61 63  .#        foreac
33e0: 68 20 6c 69 6e 65 20 7b 0a 23 20 20 20 20 20 20  h line {.#      
33f0: 20 20 20 20 20 20 22 62 69 6e 64 20 77 69 6e 64        "bind wind
3400: 6f 77 20 3f 70 61 74 74 65 72 6e 3f 20 3f 63 6f  ow ?pattern? ?co
3410: 6d 6d 61 6e 64 3f 22 0a 23 20 20 20 20 20 20 20  mmand?".#       
3420: 20 20 20 20 20 22 62 69 6e 64 74 61 67 73 20 77       "bindtags w
3430: 69 6e 64 6f 77 20 3f 74 61 67 73 3f 22 0a 23 20  indow ?tags?".# 
3440: 20 20 20 20 20 20 20 20 20 20 20 22 62 75 74 74             "butt
3450: 6f 6e 20 70 61 74 68 4e 61 6d 65 20 3f 6f 70 74  on pathName ?opt
3460: 69 6f 6e 73 3f 22 0a 23 20 20 20 20 20 20 20 20  ions?".#        
3470: 20 20 20 20 22 63 61 6e 76 61 73 20 70 61 74 68      "canvas path
3480: 4e 61 6d 65 20 3f 6f 70 74 69 6f 6e 73 3f 22 0a  Name ?options?".
3490: 23 20 20 20 20 20 20 20 20 20 20 20 20 22 63 68  #            "ch
34a0: 65 63 6b 62 75 74 74 6f 6e 20 70 61 74 68 4e 61  eckbutton pathNa
34b0: 6d 65 20 3f 6f 70 74 69 6f 6e 73 3f 22 0a 23 20  me ?options?".# 
34c0: 20 20 20 20 20 20 20 20 20 20 20 22 63 6c 69 70             "clip
34d0: 62 6f 61 72 64 20 6f 70 74 69 6f 6e 20 3f 61 72  board option ?ar
34e0: 67 20 61 72 67 20 2e 2e 2e 3f 22 0a 23 20 20 20  g arg ...?".#   
34f0: 20 20 20 20 20 20 20 20 20 22 65 6e 74 72 79 20           "entry 
3500: 70 61 74 68 4e 61 6d 65 20 3f 6f 70 74 69 6f 6e  pathName ?option
3510: 73 3f 22 0a 23 20 20 20 20 20 20 20 20 20 20 20  s?".#           
3520: 20 22 65 76 65 6e 74 20 6f 70 74 69 6f 6e 20 3f   "event option ?
3530: 61 72 67 31 3f 22 0a 23 20 20 20 20 20 20 20 20  arg1?".#        
3540: 20 20 20 20 22 66 6f 6e 74 20 6f 70 74 69 6f 6e      "font option
3550: 20 3f 61 72 67 3f 22 0a 23 20 20 20 20 20 20 20   ?arg?".#       
3560: 20 20 20 20 20 22 66 72 61 6d 65 20 70 61 74 68       "frame path
3570: 4e 61 6d 65 20 3f 6f 70 74 69 6f 6e 73 3f 22 0a  Name ?options?".
3580: 23 20 20 20 20 20 20 20 20 20 20 20 20 22 67 72  #            "gr
3590: 61 62 20 6f 70 74 69 6f 6e 20 3f 61 72 67 20 61  ab option ?arg a
35a0: 72 67 20 2e 2e 2e 3f 22 0a 23 20 20 20 20 20 20  rg ...?".#      
35b0: 20 20 20 20 20 20 22 67 72 69 64 20 6f 70 74 69        "grid opti
35c0: 6f 6e 20 61 72 67 20 3f 61 72 67 20 2e 2e 2e 3f  on arg ?arg ...?
35d0: 22 0a 23 20 20 20 20 20 20 20 20 20 20 20 20 22  ".#            "
35e0: 69 6d 61 67 65 20 6f 70 74 69 6f 6e 20 3f 61 72  image option ?ar
35f0: 67 73 3f 22 0a 23 20 20 20 20 20 20 20 20 20 20  gs?".#          
3600: 20 20 22 6c 61 62 65 6c 20 70 61 74 68 4e 61 6d    "label pathNam
3610: 65 20 3f 6f 70 74 69 6f 6e 73 3f 22 0a 23 20 20  e ?options?".#  
3620: 20 20 20 20 20 20 20 20 20 20 22 6c 69 73 74 62            "listb
3630: 6f 78 20 70 61 74 68 4e 61 6d 65 20 3f 6f 70 74  ox pathName ?opt
3640: 69 6f 6e 73 3f 22 0a 23 20 20 20 20 20 20 20 20  ions?".#        
3650: 20 20 20 20 22 6c 6f 77 65 72 20 77 69 6e 64 6f      "lower windo
3660: 77 20 3f 62 65 6c 6f 77 54 68 69 73 3f 22 0a 23  w ?belowThis?".#
3670: 20 20 20 20 20 20 20 20 20 20 20 20 22 6d 65 6e              "men
3680: 75 20 70 61 74 68 4e 61 6d 65 20 3f 6f 70 74 69  u pathName ?opti
3690: 6f 6e 73 3f 22 0a 23 20 20 20 20 20 20 20 20 20  ons?".#         
36a0: 20 20 20 22 6d 65 6e 75 62 75 74 74 6f 6e 20 70     "menubutton p
36b0: 61 74 68 4e 61 6d 65 20 3f 6f 70 74 69 6f 6e 73  athName ?options
36c0: 3f 22 0a 23 20 20 20 20 20 20 20 20 20 20 20 20  ?".#            
36d0: 22 6d 65 73 73 61 67 65 20 70 61 74 68 4e 61 6d  "message pathNam
36e0: 65 20 3f 6f 70 74 69 6f 6e 73 3f 22 0a 23 20 20  e ?options?".#  
36f0: 20 20 20 20 20 20 20 20 20 20 22 6f 70 74 69 6f            "optio
3700: 6e 20 63 6d 64 20 61 72 67 20 3f 61 72 67 20 2e  n cmd arg ?arg .
3710: 2e 2e 3f 22 0a 23 20 20 20 20 20 20 20 20 20 20  ..?".#          
3720: 20 20 22 70 61 63 6b 20 6f 70 74 69 6f 6e 20 61    "pack option a
3730: 72 67 20 3f 61 72 67 20 2e 2e 2e 3f 22 0a 23 20  rg ?arg ...?".# 
3740: 20 20 20 20 20 20 20 20 20 20 20 22 72 61 64 69             "radi
3750: 6f 62 75 74 74 6f 6e 20 70 61 74 68 4e 61 6d 65  obutton pathName
3760: 20 3f 6f 70 74 69 6f 6e 73 3f 22 0a 23 20 20 20   ?options?".#   
3770: 20 20 20 20 20 20 20 20 20 22 72 61 69 73 65 20           "raise 
3780: 77 69 6e 64 6f 77 20 3f 61 62 6f 76 65 54 68 69  window ?aboveThi
3790: 73 3f 22 0a 23 20 20 20 20 20 20 20 20 20 20 20  s?".#           
37a0: 20 22 73 63 61 6c 65 20 70 61 74 68 4e 61 6d 65   "scale pathName
37b0: 20 3f 6f 70 74 69 6f 6e 73 3f 22 0a 23 20 20 20   ?options?".#   
37c0: 20 20 20 20 20 20 20 20 20 22 73 63 72 6f 6c 6c           "scroll
37d0: 62 61 72 20 70 61 74 68 4e 61 6d 65 20 3f 6f 70  bar pathName ?op
37e0: 74 69 6f 6e 73 3f 22 0a 23 20 20 20 20 20 20 20  tions?".#       
37f0: 20 20 20 20 20 22 73 65 6c 65 63 74 69 6f 6e 20       "selection 
3800: 6f 70 74 69 6f 6e 20 3f 61 72 67 20 61 72 67 20  option ?arg arg 
3810: 2e 2e 2e 3f 22 0a 23 20 20 20 20 20 20 20 20 20  ...?".#         
3820: 20 20 20 22 73 65 6e 64 20 3f 6f 70 74 69 6f 6e     "send ?option
3830: 73 3f 20 69 6e 74 65 72 70 4e 61 6d 65 20 61 72  s? interpName ar
3840: 67 20 3f 61 72 67 20 2e 2e 2e 3f 22 0a 23 20 20  g ?arg ...?".#  
3850: 20 20 20 20 20 20 20 20 20 20 22 74 65 78 74 20            "text 
3860: 70 61 74 68 4e 61 6d 65 20 3f 6f 70 74 69 6f 6e  pathName ?option
3870: 73 3f 22 0a 23 20 20 20 20 20 20 20 20 20 20 20  s?".#           
3880: 20 22 74 6b 20 6f 70 74 69 6f 6e 20 3f 61 72 67   "tk option ?arg
3890: 3f 22 0a 23 20 20 20 20 20 20 20 20 20 20 20 20  ?".#            
38a0: 22 74 6b 77 61 69 74 20 76 61 72 69 61 62 6c 65  "tkwait variable
38b0: 7c 76 69 73 69 62 69 6c 69 74 79 7c 77 69 6e 64  |visibility|wind
38c0: 6f 77 20 6e 61 6d 65 22 0a 23 20 20 20 20 20 20  ow name".#      
38d0: 20 20 20 20 20 20 22 74 6f 70 6c 65 76 65 6c 20        "toplevel 
38e0: 70 61 74 68 4e 61 6d 65 20 3f 6f 70 74 69 6f 6e  pathName ?option
38f0: 73 3f 22 0a 23 20 20 20 20 20 20 20 20 20 20 20  s?".#           
3900: 20 22 77 69 6e 66 6f 20 6f 70 74 69 6f 6e 20 3f   "winfo option ?
3910: 61 72 67 3f 22 0a 23 20 20 20 20 20 20 20 20 20  arg?".#         
3920: 20 20 20 22 77 6d 20 6f 70 74 69 6f 6e 20 77 69     "wm option wi
3930: 6e 64 6f 77 20 3f 61 72 67 20 2e 2e 2e 3f 22 0a  ndow ?arg ...?".
3940: 23 20 20 20 20 20 20 20 20 7d 20 7b 0a 23 20 20  #        } {.#  
3950: 20 20 20 20 20 20 20 20 20 20 72 65 61 64 6c 69            readli
3960: 6e 65 20 61 64 64 20 24 6c 69 6e 65 0a 23 20 20  ne add $line.#  
3970: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 6b 6e            set kn
3980: 6f 77 6e 5f 63 6d 64 73 28 5b 6c 69 6e 64 65 78  own_cmds([lindex
3990: 20 24 6c 69 6e 65 20 30 5d 29 20 24 7b 6c 69 6e   $line 0]) ${lin
39a0: 65 7d 0a 23 20 20 20 20 20 20 20 20 7d 0a 23 20  e}.#        }.# 
39b0: 20 20 20 20 20 20 20 72 65 6e 61 6d 65 20 49 6e         rename In
39c0: 69 74 54 6b 43 6d 64 73 20 22 22 0a 23 20 20 20  itTkCmds "".#   
39d0: 20 7d 0a 0a 0a 7d 3b 20 23 20 6e 61 6d 65 73 70   }...}; # namesp
39e0: 61 63 65 20 74 63 6c 72 65 61 64 6c 69 6e 65 0a  ace tclreadline.