Hex Artifact Content
Not logged in

Artifact cf379af2f87ce5fd8f6438ce4c7497c0865726e2:


0000: 23 20 2d 2a 2d 20 74 63 6c 73 68 20 2d 2a 2d 0a  # -*- tclsh -*-.
0010: 23 20 46 49 4c 45 3a 20 22 2f 68 6f 6d 65 2f 6a  # FILE: "/home/j
0020: 6f 7a 65 2f 73 72 63 2f 74 63 6c 72 65 61 64 6c  oze/src/tclreadl
0030: 69 6e 65 2f 74 63 6c 72 65 61 64 6c 69 6e 65 43  ine/tclreadlineC
0040: 6f 6d 70 6c 65 74 65 72 2e 74 63 6c 22 0a 23 20  ompleter.tcl".# 
0050: 4c 41 53 54 20 4d 4f 44 49 46 49 43 41 54 49 4f  LAST MODIFICATIO
0060: 4e 3a 20 22 4d 69 74 2c 20 31 30 20 4a 61 6e 20  N: "Mit, 10 Jan 
0070: 32 30 30 31 20 30 36 3a 32 39 3a 33 33 20 2b 30  2001 06:29:33 +0
0080: 31 30 30 20 28 6a 6f 7a 65 29 22 0a 23 20 28 43  100 (joze)".# (C
0090: 29 20 31 39 39 38 20 2d 20 32 30 30 31 20 62 79  ) 1998 - 2001 by
00a0: 20 4a 6f 68 61 6e 6e 65 73 20 5a 65 6c 6c 6e 65   Johannes Zellne
00b0: 72 2c 20 3c 6a 6f 68 61 6e 6e 65 73 40 7a 65 6c  r, <johannes@zel
00c0: 6c 6e 65 72 2e 6f 72 67 3e 0a 23 20 24 49 64 24  lner.org>.# $Id$
00d0: 0a 23 20 76 69 6d 3a 73 65 74 20 74 73 3d 34 3a  .# vim:set ts=4:
00e0: 0a 23 20 2d 2d 2d 0a 23 0a 23 20 74 63 6c 72 65  .# ---.#.# tclre
00f0: 61 64 6c 69 6e 65 20 2d 2d 20 67 6e 75 20 72 65  adline -- gnu re
0100: 61 64 6c 69 6e 65 20 66 6f 72 20 74 63 6c 0a 23  adline for tcl.#
0110: 20 68 74 74 70 3a 2f 2f 77 77 77 2e 7a 65 6c 6c   http://www.zell
0120: 6e 65 72 2e 6f 72 67 2f 74 63 6c 72 65 61 64 6c  ner.org/tclreadl
0130: 69 6e 65 2f 0a 23 20 43 6f 70 79 72 69 67 68 74  ine/.# Copyright
0140: 20 28 63 29 20 31 39 39 38 20 2d 20 32 30 30 31   (c) 1998 - 2001
0150: 2c 20 4a 6f 68 61 6e 6e 65 73 20 5a 65 6c 6c 6e  , Johannes Zelln
0160: 65 72 20 3c 6a 6f 68 61 6e 6e 65 73 40 7a 65 6c  er <johannes@zel
0170: 6c 6e 65 72 2e 6f 72 67 3e 0a 23 0a 23 20 54 68  lner.org>.#.# Th
0180: 69 73 20 73 6f 66 74 77 61 72 65 20 69 73 20 63  is software is c
0190: 6f 70 79 72 69 67 68 74 20 75 6e 64 65 72 20 74  opyright under t
01a0: 68 65 20 42 53 44 20 6c 69 63 65 6e 73 65 2e 0a  he BSD license..
01b0: 23 0a 23 20 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  #.# ============
01c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
01d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
01e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
01f0: 3d 3d 3d 3d 3d 3d 20 0a 0a 0a 23 20 54 4f 44 4f  ====== ...# TODO
0200: 3a 0a 23 0a 23 09 2d 20 74 63 6c 74 65 73 74 20  :.#.#.- tcltest 
0210: 69 73 20 6d 69 73 73 69 6e 67 0a 23 09 2d 20 62  is missing.#.- b
0220: 65 74 74 65 72 20 63 6f 6d 70 6c 65 74 69 6f 6e  etter completion
0230: 20 66 6f 72 20 43 6f 6d 70 6c 65 74 65 4c 69 73   for CompleteLis
0240: 74 46 72 6f 6d 4c 69 73 74 3a 0a 23 09 20 20 52  tFromList:.#.  R
0250: 65 6d 6f 76 65 55 73 65 64 4f 70 74 69 6f 6e 73  emoveUsedOptions
0260: 20 2e 2e 2e 0a 23 09 2d 20 6e 61 6d 65 73 70 61   ....#.- namespa
0270: 63 65 20 65 76 61 6c 20 66 72 65 64 20 7b 2e 2e  ce eval fred {..
0280: 2e 20 3c 2d 2d 20 63 6f 6e 74 69 6e 75 65 20 77  . <-- continue w
0290: 69 74 68 20 61 20 0a 23 09 09 09 09 09 09 09 09  ith a .#........
02a0: 20 20 20 73 75 62 73 74 69 74 75 74 69 6f 6e 20     substitution 
02b0: 69 6e 20 66 72 65 64 2e 0a 23 09 2d 20 73 65 74  in fred..#.- set
02c0: 20 74 63 6c 72 65 61 64 6c 69 6e 65 3a 3a 70 72   tclreadline::pr
02d0: 6f 3c 74 61 62 3e 20 64 6f 65 73 6e 27 74 20 77  o<tab> doesn't w
02e0: 6f 72 6b 0a 23 09 20 20 73 65 74 20 3a 3a 74 63  ork.#.  set ::tc
02f0: 6c 72 65 61 64 6c 69 6e 65 3a 3a 70 72 6f 3c 74  lreadline::pro<t
0300: 61 62 3e 20 64 6f 65 73 0a 23 0a 23 20 20 20 2d  ab> does.#.#   -
0310: 20 54 65 78 74 4f 62 6a 20 2e 2e 2e 0a 23 0a 0a   TextObj ....#..
0320: 0a 0a 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c  ..namespace eval
0330: 20 74 63 6c 72 65 61 64 6c 69 6e 65 20 7b 0a 0a   tclreadline {..
0340: 09 23 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  .# the following
0350: 20 74 68 72 65 65 20 61 72 65 20 66 72 6f 6d 20   three are from 
0360: 74 68 65 20 69 63 63 63 6d 0a 09 23 20 61 6e 64  the icccm..# and
0370: 20 75 73 65 64 20 69 6e 20 63 6f 6d 70 6c 65 74   used in complet
0380: 65 28 73 65 6c 65 63 74 69 6f 6e 29 20 61 6e 64  e(selection) and
0390: 0a 09 23 20 64 65 73 63 65 6e 64 61 6e 74 73 2e  ..# descendants.
03a0: 0a 09 23 0a 09 76 61 72 69 61 62 6c 65 20 73 65  ..#..variable se
03b0: 6c 65 63 74 69 6f 6e 2d 73 65 6c 65 63 74 69 6f  lection-selectio
03c0: 6e 73 20 7b 0a 09 09 50 52 49 4d 41 52 59 20 53  ns {...PRIMARY S
03d0: 45 43 4f 4e 44 41 52 59 20 43 4c 49 50 42 4f 41  ECONDARY CLIPBOA
03e0: 52 44 0a 09 7d 0a 09 76 61 72 69 61 62 6c 65 20  RD..}..variable 
03f0: 73 65 6c 65 63 74 69 6f 6e 2d 74 79 70 65 73 20  selection-types 
0400: 7b 0a 09 09 41 44 4f 42 45 5f 50 4f 52 54 41 42  {...ADOBE_PORTAB
0410: 4c 45 5f 44 4f 43 55 4d 45 4e 54 5f 46 4f 52 4d  LE_DOCUMENT_FORM
0420: 41 54 0a 09 09 41 50 50 4c 45 5f 50 49 43 54 0a  AT...APPLE_PICT.
0430: 09 09 42 41 43 4b 47 52 4f 55 4e 44 0a 09 09 42  ..BACKGROUND...B
0440: 49 54 4d 41 50 0a 09 09 43 48 41 52 41 43 54 45  ITMAP...CHARACTE
0450: 52 5f 50 4f 53 49 54 49 4f 4e 0a 09 09 43 4c 41  R_POSITION...CLA
0460: 53 53 0a 09 09 43 4c 49 45 4e 54 5f 57 49 4e 44  SS...CLIENT_WIND
0470: 4f 57 0a 09 09 43 4f 4c 4f 52 4d 41 50 0a 09 09  OW...COLORMAP...
0480: 43 4f 4c 55 4d 4e 5f 4e 55 4d 42 45 52 0a 09 09  COLUMN_NUMBER...
0490: 43 4f 4d 50 4f 55 4e 44 5f 54 45 58 54 0a 09 09  COMPOUND_TEXT...
04a0: 44 45 4c 45 54 45 0a 09 09 44 52 41 57 41 42 4c  DELETE...DRAWABL
04b0: 45 0a 09 09 45 4e 43 41 50 53 55 4c 41 54 45 44  E...ENCAPSULATED
04c0: 5f 50 4f 53 54 53 43 52 49 50 54 0a 09 09 45 4e  _POSTSCRIPT...EN
04d0: 43 41 50 53 55 4c 41 54 45 44 5f 50 4f 53 54 53  CAPSULATED_POSTS
04e0: 43 52 49 50 54 5f 49 4e 54 45 52 43 48 41 4e 47  CRIPT_INTERCHANG
04f0: 45 0a 09 09 46 49 4c 45 5f 4e 41 4d 45 0a 09 09  E...FILE_NAME...
0500: 46 4f 52 45 47 52 4f 55 4e 44 0a 09 09 48 4f 53  FOREGROUND...HOS
0510: 54 5f 4e 41 4d 45 0a 09 09 49 4e 53 45 52 54 5f  T_NAME...INSERT_
0520: 50 52 4f 50 45 52 54 59 0a 09 09 49 4e 53 45 52  PROPERTY...INSER
0530: 54 5f 53 45 4c 45 43 54 49 4f 4e 0a 09 09 4c 45  T_SELECTION...LE
0540: 4e 47 54 48 0a 09 09 4c 49 4e 45 5f 4e 55 4d 42  NGTH...LINE_NUMB
0550: 45 52 0a 09 09 4c 49 53 54 5f 4c 45 4e 47 54 48  ER...LIST_LENGTH
0560: 0a 09 09 4d 4f 44 55 4c 45 0a 09 09 4d 55 4c 54  ...MODULE...MULT
0570: 49 50 4c 45 0a 09 09 4e 41 4d 45 0a 09 09 4f 44  IPLE...NAME...OD
0580: 49 46 0a 09 09 4f 57 4e 45 52 5f 4f 53 0a 09 09  IF...OWNER_OS...
0590: 50 49 58 4d 41 50 0a 09 09 50 4f 53 54 53 43 52  PIXMAP...POSTSCR
05a0: 49 50 54 0a 09 09 50 52 4f 43 45 44 55 52 45 0a  IPT...PROCEDURE.
05b0: 09 09 50 52 4f 43 45 53 53 0a 09 09 53 54 52 49  ..PROCESS...STRI
05c0: 4e 47 0a 09 09 54 41 52 47 45 54 53 0a 09 09 54  NG...TARGETS...T
05d0: 41 53 4b 0a 09 09 54 45 58 54 0a 09 09 54 49 4d  ASK...TEXT...TIM
05e0: 45 53 54 41 4d 50 0a 09 09 55 53 45 52 0a 09 7d  ESTAMP...USER..}
05f0: 0a 09 76 61 72 69 61 62 6c 65 20 73 65 6c 65 63  ..variable selec
0600: 74 69 6f 6e 2d 66 6f 72 6d 61 74 73 20 7b 0a 09  tion-formats {..
0610: 09 41 50 50 4c 45 5f 50 49 43 54 0a 09 09 41 54  .APPLE_PICT...AT
0620: 4f 4d 0a 09 09 41 54 4f 4d 5f 50 41 49 52 0a 09  OM...ATOM_PAIR..
0630: 09 42 49 54 4d 41 50 0a 09 09 43 4f 4c 4f 52 4d  .BITMAP...COLORM
0640: 41 50 0a 09 09 43 4f 4d 50 4f 55 4e 44 5f 54 45  AP...COMPOUND_TE
0650: 58 54 0a 09 09 44 52 41 57 41 42 4c 45 0a 09 09  XT...DRAWABLE...
0660: 49 4e 54 45 47 45 52 0a 09 09 4e 55 4c 4c 0a 09  INTEGER...NULL..
0670: 09 50 49 58 45 4c 0a 09 09 50 49 58 4d 41 50 37  .PIXEL...PIXMAP7
0680: 0a 09 09 53 50 41 4e 0a 09 09 53 54 52 49 4e 47  ...SPAN...STRING
0690: 0a 09 09 54 45 58 54 0a 09 09 57 49 4e 44 4f 57  ...TEXT...WINDOW
06a0: 0a 09 7d 0a 0a 6e 61 6d 65 73 70 61 63 65 20 65  ..}..namespace e
06b0: 78 70 6f 72 74 20 5c 0a 54 72 79 46 72 6f 6d 4c  xport \.TryFromL
06c0: 69 73 74 20 43 6f 6d 70 6c 65 74 65 46 72 6f 6d  ist CompleteFrom
06d0: 4c 69 73 74 20 44 69 73 70 6c 61 79 48 69 6e 74  List DisplayHint
06e0: 73 20 52 65 68 61 73 68 20 5c 0a 50 72 65 76 69  s Rehash \.Previ
06f0: 6f 75 73 57 6f 72 64 20 43 6f 6d 6d 61 6e 64 43  ousWord CommandC
0700: 6f 6d 70 6c 65 74 69 6f 6e 20 52 65 6d 6f 76 65  ompletion Remove
0710: 55 73 65 64 4f 70 74 69 6f 6e 73 20 5c 0a 48 6f  UsedOptions \.Ho
0720: 73 74 4c 69 73 74 20 43 68 61 6e 6e 65 6c 49 64  stList ChannelId
0730: 20 49 6e 43 68 61 6e 6e 65 6c 49 64 20 4f 75 74   InChannelId Out
0740: 43 68 61 6e 6e 65 6c 49 64 20 5c 0a 4c 69 6e 64  ChannelId \.Lind
0750: 65 78 20 4c 6c 65 6e 67 74 68 20 43 6f 6d 70 6c  ex Llength Compl
0760: 65 74 65 42 6f 6f 6c 65 61 6e 20 57 69 64 67 65  eteBoolean Widge
0770: 74 43 68 69 6c 64 72 65 6e 0a 0a 23 20 73 65 74  tChildren..# set
0780: 20 74 63 6c 72 65 61 64 6c 69 6e 65 3a 3a 74 72   tclreadline::tr
0790: 61 63 65 20 74 6f 20 31 2c 20 69 66 20 79 6f 75  ace to 1, if you
07a0: 0a 23 20 77 61 6e 74 20 74 6f 20 65 6e 61 62 6c  .# want to enabl
07b0: 65 20 65 78 70 6c 69 63 69 74 20 74 72 61 63 65  e explicit trace
07c0: 20 63 61 6c 6c 73 2e 0a 23 0a 76 61 72 69 61 62   calls..#.variab
07d0: 6c 65 20 74 72 61 63 65 0a 0a 23 20 73 65 74 20  le trace..# set 
07e0: 74 63 6c 72 65 61 64 6c 69 6e 65 3a 3a 74 72 61  tclreadline::tra
07f0: 63 65 5f 70 72 6f 63 73 20 74 6f 20 31 2c 20 69  ce_procs to 1, i
0800: 66 20 79 6f 75 0a 23 20 77 61 6e 74 20 74 6f 20  f you.# want to 
0810: 65 6e 61 62 6c 65 20 74 72 61 63 69 6e 67 20 65  enable tracing e
0820: 76 65 72 79 20 65 6e 74 72 79 20 74 6f 20 61 20  very entry to a 
0830: 70 72 6f 63 2e 0a 23 0a 76 61 72 69 61 62 6c 65  proc..#.variable
0840: 20 74 72 61 63 65 5f 70 72 6f 63 73 0a 0a 69 66   trace_procs..if
0850: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 74   {[info exists t
0860: 72 61 63 65 5f 70 72 6f 63 73 5d 20 26 26 20 24  race_procs] && $
0870: 74 72 61 63 65 5f 70 72 6f 63 73 7d 20 7b 0a 09  trace_procs} {..
0880: 3a 3a 70 72 6f 63 20 70 72 6f 63 20 7b 6e 61 6d  ::proc proc {nam
0890: 65 20 61 72 67 75 6d 65 6e 74 73 20 62 6f 64 79  e arguments body
08a0: 7d 20 7b 0a 09 09 3a 3a 70 72 6f 63 20 24 6e 61  } {...::proc $na
08b0: 6d 65 20 24 61 72 67 75 6d 65 6e 74 73 20 5b 73  me $arguments [s
08c0: 75 62 73 74 20 2d 6e 6f 63 6f 6d 6d 61 6e 64 73  ubst -nocommands
08d0: 20 7b 0a 09 09 09 54 72 61 63 65 54 65 78 74 20   {....TraceText 
08e0: 5b 6c 72 61 6e 67 65 20 5b 69 6e 66 6f 20 6c 65  [lrange [info le
08f0: 76 65 6c 20 30 5d 20 31 20 65 6e 64 5d 0a 09 09  vel 0] 1 end]...
0900: 09 24 62 6f 64 79 0a 09 09 7d 5d 0a 09 7d 0a 7d  .$body...}]..}.}
0910: 20 65 6c 73 65 20 7b 20 3b 23 20 21 24 74 72 61   else { ;# !$tra
0920: 63 65 5f 70 72 6f 63 73 0a 09 63 61 74 63 68 20  ce_procs..catch 
0930: 7b 72 65 6e 61 6d 65 20 3a 3a 74 63 6c 72 65 61  {rename ::tclrea
0940: 64 6c 69 6e 65 3a 3a 70 72 6f 63 20 22 22 7d 0a  dline::proc ""}.
0950: 7d 0a 0a 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69  }..if {[info exi
0960: 73 74 73 20 74 72 61 63 65 5d 20 26 26 20 24 74  sts trace] && $t
0970: 72 61 63 65 7d 20 7b 0a 0a 09 3a 3a 70 72 6f 63  race} {...::proc
0980: 20 54 72 61 63 65 52 65 63 6f 6e 66 20 7b 61 72   TraceReconf {ar
0990: 67 73 7d 20 7b 0a 09 09 65 76 61 6c 20 2e 74 63  gs} {...eval .tc
09a0: 6c 72 65 61 64 6c 69 6e 65 5f 74 72 61 63 65 2e  lreadline_trace.
09b0: 73 63 72 6f 6c 6c 20 73 65 74 20 24 61 72 67 73  scroll set $args
09c0: 0a 09 09 2e 74 63 6c 72 65 61 64 6c 69 6e 65 5f  ....tclreadline_
09d0: 74 72 61 63 65 2e 74 65 78 74 20 73 65 65 20 65  trace.text see e
09e0: 6e 64 0a 09 7d 0a 0a 09 3a 3a 70 72 6f 63 20 41  nd..}...::proc A
09f0: 73 73 75 72 65 54 72 61 63 65 57 69 6e 64 6f 77  ssureTraceWindow
0a00: 20 7b 7d 20 7b 0a 09 09 76 61 72 69 61 62 6c 65   {} {...variable
0a10: 20 74 72 61 63 65 0a 09 09 69 66 20 7b 21 5b 69   trace...if {![i
0a20: 6e 66 6f 20 65 78 69 73 74 73 20 74 72 61 63 65  nfo exists trace
0a30: 5d 7d 20 7b 0a 09 09 09 72 65 74 75 72 6e 20 30  ]} {....return 0
0a40: 0a 09 09 7d 0a 09 09 69 66 20 7b 21 24 74 72 61  ...}...if {!$tra
0a50: 63 65 7d 20 7b 0a 09 09 09 72 65 74 75 72 6e 20  ce} {....return 
0a60: 30 0a 09 09 7d 0a 09 09 69 66 20 7b 21 5b 77 69  0...}...if {![wi
0a70: 6e 66 6f 20 65 78 69 73 74 73 20 2e 74 63 6c 72  nfo exists .tclr
0a80: 65 61 64 6c 69 6e 65 5f 74 72 61 63 65 2e 74 65  eadline_trace.te
0a90: 78 74 5d 7d 20 7b 0a 09 09 09 74 6f 70 6c 65 76  xt]} {....toplev
0aa0: 65 6c 20 2e 74 63 6c 72 65 61 64 6c 69 6e 65 5f  el .tclreadline_
0ab0: 74 72 61 63 65 0a 09 09 09 74 65 78 74 20 2e 74  trace....text .t
0ac0: 63 6c 72 65 61 64 6c 69 6e 65 5f 74 72 61 63 65  clreadline_trace
0ad0: 2e 74 65 78 74 20 5c 0a 09 09 09 09 2d 79 73 63  .text \.....-ysc
0ae0: 72 6f 6c 6c 63 6f 6d 6d 61 6e 64 20 7b 20 74 63  rollcommand { tc
0af0: 6c 72 65 61 64 6c 69 6e 65 3a 3a 54 72 61 63 65  lreadline::Trace
0b00: 52 65 63 6f 6e 66 20 7d 20 5c 0a 09 09 09 09 2d  Reconf } \.....-
0b10: 77 72 61 70 20 6e 6f 6e 65 0a 09 09 09 73 63 72  wrap none....scr
0b20: 6f 6c 6c 62 61 72 20 2e 74 63 6c 72 65 61 64 6c  ollbar .tclreadl
0b30: 69 6e 65 5f 74 72 61 63 65 2e 73 63 72 6f 6c 6c  ine_trace.scroll
0b40: 20 5c 0a 09 09 09 09 2d 6f 72 69 65 6e 74 20 76   \.....-orient v
0b50: 65 72 74 69 63 61 6c 20 5c 0a 09 09 09 09 2d 63  ertical \.....-c
0b60: 6f 6d 6d 61 6e 64 20 7b 20 2e 74 63 6c 72 65 61  ommand { .tclrea
0b70: 64 6c 69 6e 65 5f 74 72 61 63 65 2e 74 65 78 74  dline_trace.text
0b80: 20 79 76 69 65 77 20 7d 0a 09 09 09 70 61 63 6b   yview }....pack
0b90: 20 2e 74 63 6c 72 65 61 64 6c 69 6e 65 5f 74 72   .tclreadline_tr
0ba0: 61 63 65 2e 74 65 78 74 20 2d 73 69 64 65 20 6c  ace.text -side l
0bb0: 65 66 74 20 2d 65 78 70 61 6e 64 20 79 65 73 20  eft -expand yes 
0bc0: 2d 66 69 6c 6c 20 62 6f 74 68 0a 09 09 09 70 61  -fill both....pa
0bd0: 63 6b 20 2e 74 63 6c 72 65 61 64 6c 69 6e 65 5f  ck .tclreadline_
0be0: 74 72 61 63 65 2e 73 63 72 6f 6c 6c 20 2d 73 69  trace.scroll -si
0bf0: 64 65 20 72 69 67 68 74 20 2d 65 78 70 61 6e 64  de right -expand
0c00: 20 79 65 73 20 2d 66 69 6c 6c 20 79 0a 09 09 7d   yes -fill y...}
0c10: 20 65 6c 73 65 20 7b 0a 09 09 09 72 61 69 73 65   else {....raise
0c20: 20 2e 74 63 6c 72 65 61 64 6c 69 6e 65 5f 74 72   .tclreadline_tr
0c30: 61 63 65 0a 09 09 7d 0a 09 09 72 65 74 75 72 6e  ace...}...return
0c40: 20 31 0a 09 7d 0a 0a 09 3a 3a 70 72 6f 63 20 54   1..}...::proc T
0c50: 72 61 63 65 56 61 72 20 76 54 20 7b 0a 09 09 69  raceVar vT {...i
0c60: 66 20 7b 21 5b 41 73 73 75 72 65 54 72 61 63 65  f {![AssureTrace
0c70: 57 69 6e 64 6f 77 5d 7d 20 7b 0a 09 09 09 72 65  Window]} {....re
0c80: 74 75 72 6e 0a 09 09 7d 0a 09 09 75 70 76 61 72  turn...}...upvar
0c90: 20 24 76 54 20 76 0a 09 09 69 66 20 7b 5b 69 6e   $vT v...if {[in
0ca0: 66 6f 20 65 78 69 73 74 73 20 76 5d 7d 20 7b 0a  fo exists v]} {.
0cb0: 09 09 09 2e 74 63 6c 72 65 61 64 6c 69 6e 65 5f  ....tclreadline_
0cc0: 74 72 61 63 65 2e 74 65 78 74 20 69 6e 73 65 72  trace.text inser
0cd0: 74 20 65 6e 64 20 5c 0a 09 09 09 22 28 5b 6c 69  t end \...."([li
0ce0: 6e 64 65 78 20 5b 69 6e 66 6f 20 6c 65 76 65 6c  ndex [info level
0cf0: 20 2d 31 5d 20 30 5d 29 20 24 76 54 3d 7c 24 76   -1] 0]) $vT=|$v
0d00: 7c 5c 6e 22 0a 09 09 7d 0a 09 09 23 20 73 69 6c  |\n"...}...# sil
0d10: 65 6e 74 6c 79 20 69 67 6e 6f 72 65 20 75 6e 73  ently ignore uns
0d20: 65 74 20 76 61 72 69 61 62 6c 65 73 2e 0a 09 7d  et variables...}
0d30: 0a 0a 09 3a 3a 70 72 6f 63 20 54 72 61 63 65 54  ...::proc TraceT
0d40: 65 78 74 20 74 78 74 20 7b 0a 09 09 69 66 20 7b  ext txt {...if {
0d50: 21 5b 41 73 73 75 72 65 54 72 61 63 65 57 69 6e  ![AssureTraceWin
0d60: 64 6f 77 5d 7d 20 7b 0a 09 09 09 72 65 74 75 72  dow]} {....retur
0d70: 6e 0a 09 09 7d 0a 09 09 2e 74 63 6c 72 65 61 64  n...}....tclread
0d80: 6c 69 6e 65 5f 74 72 61 63 65 2e 74 65 78 74 20  line_trace.text 
0d90: 69 6e 73 65 72 74 20 65 6e 64 20 5c 0a 09 09 5b  insert end \...[
0da0: 66 6f 72 6d 61 74 20 7b 25 33 32 73 20 25 73 7d  format {%32s %s}
0db0: 20 28 5b 6c 69 6e 64 65 78 20 5b 69 6e 66 6f 20   ([lindex [info 
0dc0: 6c 65 76 65 6c 20 2d 31 5d 20 30 5d 29 20 24 74  level -1] 0]) $t
0dd0: 78 74 5c 6e 5d 0a 09 7d 0a 0a 7d 20 65 6c 73 65  xt\n]..}..} else
0de0: 20 7b 0a 09 3a 3a 70 72 6f 63 20 54 72 61 63 65   {..::proc Trace
0df0: 52 65 63 6f 6e 66 20 61 72 67 73 20 7b 7d 0a 09  Reconf args {}..
0e00: 3a 3a 70 72 6f 63 20 41 73 73 75 72 65 54 72 61  ::proc AssureTra
0e10: 63 65 57 69 6e 64 6f 77 20 61 72 67 73 20 7b 7d  ceWindow args {}
0e20: 0a 09 3a 3a 70 72 6f 63 20 54 72 61 63 65 56 61  ..::proc TraceVa
0e30: 72 20 61 72 67 73 20 7b 7d 0a 09 3a 3a 70 72 6f  r args {}..::pro
0e40: 63 20 54 72 61 63 65 54 65 78 74 20 61 72 67 73  c TraceText args
0e50: 20 7b 7d 0a 7d 0a 0a 23 2a 2a 0a 23 20 54 72 79   {}.}..#**.# Try
0e60: 46 72 6f 6d 4c 69 73 74 20 77 69 6c 6c 20 72 65  FromList will re
0e70: 74 75 72 6e 20 61 6e 20 65 6d 70 74 79 20 73 74  turn an empty st
0e80: 72 69 6e 67 2c 20 69 66 0a 23 20 74 68 65 20 74  ring, if.# the t
0e90: 65 78 74 20 74 79 70 65 64 20 73 6f 20 66 61 72  ext typed so far
0ea0: 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74 63 68 20   does not match 
0eb0: 61 6e 79 20 6f 66 20 74 68 65 0a 23 20 65 6c 65  any of the.# ele
0ec0: 6d 65 6e 74 73 20 69 6e 20 6c 69 73 74 2e 20 54  ments in list. T
0ed0: 68 69 73 20 6d 69 67 68 74 20 62 65 20 75 73 65  his might be use
0ee0: 64 20 74 6f 20 61 6c 6c 6f 77 0a 23 20 73 75 62  d to allow.# sub
0ef0: 73 65 71 75 65 6e 74 20 66 69 6c 65 6e 61 6d 65  sequent filename
0f00: 20 63 6f 6d 70 6c 65 74 69 6f 6e 20 62 79 20 74   completion by t
0f10: 68 65 20 62 75 69 6c 74 69 6e 0a 23 20 63 6f 6d  he builtin.# com
0f20: 70 6c 65 74 65 72 2e 0a 23 20 49 66 20 69 6e 68  pleter..# If inh
0f30: 69 62 69 74 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  ibit is non-zero
0f40: 2c 20 74 68 65 20 72 65 73 75 6c 74 20 77 69 6c  , the result wil
0f50: 6c 20 62 65 0a 23 20 66 6f 72 6d 61 74 74 65 64  l be.# formatted
0f60: 20 73 75 63 68 20 74 68 61 74 20 72 65 61 64 6c   such that readl
0f70: 69 6e 65 20 77 69 6c 6c 20 6e 6f 74 20 69 6e 73  ine will not ins
0f80: 65 72 74 0a 23 20 61 20 73 70 61 63 65 20 61 66  ert.# a space af
0f90: 74 65 72 20 61 20 63 6f 6d 70 6c 65 74 65 20 28  ter a complete (
0fa0: 73 69 6e 67 6c 65 29 20 6d 61 74 63 68 2e 0a 23  single) match..#
0fb0: 0a 70 72 6f 63 20 54 72 79 46 72 6f 6d 4c 69 73  .proc TryFromLis
0fc0: 74 20 7b 74 65 78 74 20 6c 73 74 20 7b 61 6c 6c  t {text lst {all
0fd0: 6f 77 20 22 22 7d 20 7b 69 6e 68 69 62 69 74 20  ow ""} {inhibit 
0fe0: 30 7d 7d 20 7b 0a 0a 09 23 20 70 75 74 73 20 73  0}} {...# puts s
0ff0: 74 64 65 72 72 20 22 28 43 6f 6d 70 6c 65 74 65  tderr "(Complete
1000: 46 72 6f 6d 4c 69 73 74 29 20 5c 6e 74 65 78 74  FromList) \ntext
1010: 3d 7c 24 74 65 78 74 7c 22 0a 09 23 20 70 75 74  =|$text|"..# put
1020: 73 20 73 74 64 65 72 72 20 22 28 43 6f 6d 70 6c  s stderr "(Compl
1030: 65 74 65 46 72 6f 6d 4c 69 73 74 29 20 6c 73 74  eteFromList) lst
1040: 3d 7c 24 6c 73 74 7c 22 0a 09 73 65 74 20 70 72  =|$lst|"..set pr
1050: 65 20 5b 47 65 74 51 75 6f 74 65 64 50 72 65 66  e [GetQuotedPref
1060: 69 78 20 24 7b 74 65 78 74 7d 5d 0a 09 73 65 74  ix ${text}]..set
1070: 20 6d 61 74 63 68 65 73 20 5b 4d 61 74 63 68 65   matches [Matche
1080: 73 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74  sFromList ${text
1090: 7d 20 24 7b 6c 73 74 7d 20 24 7b 61 6c 6c 6f 77  } ${lst} ${allow
10a0: 7d 5d 0a 0a 09 23 20 70 75 74 73 20 73 74 64 65  }]...# puts stde
10b0: 72 72 20 22 28 43 6f 6d 70 6c 65 74 65 46 72 6f  rr "(CompleteFro
10c0: 6d 4c 69 73 74 29 20 6d 61 74 63 68 65 73 3d 7c  mList) matches=|
10d0: 24 6d 61 74 63 68 65 73 7c 22 0a 09 69 66 20 7b  $matches|"..if {
10e0: 31 20 3d 3d 20 5b 6c 6c 65 6e 67 74 68 20 24 6d  1 == [llength $m
10f0: 61 74 63 68 65 73 5d 7d 20 7b 20 3b 20 23 20 75  atches]} { ; # u
1100: 6e 69 71 75 65 20 6d 61 74 63 68 0a 09 09 23 20  nique match...# 
1110: 70 75 74 73 20 73 74 64 65 72 72 20 5c 6e 75 6e  puts stderr \nun
1120: 69 71 75 65 3d 24 6d 61 74 63 68 65 73 5c 6e 0a  ique=$matches\n.
1130: 09 09 23 20 70 75 74 73 20 73 74 64 65 72 72 20  ..# puts stderr 
1140: 22 5c 6e 7c 24 7b 70 72 65 7d 24 7b 6d 61 74 63  "\n|${pre}${matc
1150: 68 65 73 7d 5b 52 69 67 68 74 20 24 7b 70 72 65  hes}[Right ${pre
1160: 7d 5d 7c 5c 6e 22 0a 09 09 73 65 74 20 6e 75 6c  }]|\n"...set nul
1170: 6c 20 5b 73 74 72 69 6e 67 20 69 6e 64 65 78 20  l [string index 
1180: 24 6d 61 74 63 68 65 73 20 30 5d 0a 09 09 69 66  $matches 0]...if
1190: 20 7b 28 22 3c 22 20 3d 3d 20 24 7b 6e 75 6c 6c   {("<" == ${null
11a0: 7d 20 7c 7c 20 22 3f 22 20 3d 3d 20 24 7b 6e 75  } || "?" == ${nu
11b0: 6c 6c 7d 29 20 26 26 20 5c 0a 09 09 09 2d 31 20  ll}) && \....-1 
11c0: 3d 3d 20 5b 73 74 72 69 6e 67 20 66 69 72 73 74  == [string first
11d0: 20 24 7b 6e 75 6c 6c 7d 20 24 7b 61 6c 6c 6f 77   ${null} ${allow
11e0: 7d 5d 0a 09 09 7d 20 7b 0a 09 09 09 73 65 74 20  }]...} {....set 
11f0: 63 6f 6d 70 6c 65 74 69 6f 6e 20 5b 73 74 72 69  completion [stri
1200: 6e 67 20 74 72 69 6d 20 22 5b 6c 69 73 74 20 24  ng trim "[list $
1210: 74 65 78 74 5d 20 24 6c 73 74 22 5d 0a 09 09 7d  text] $lst"]...}
1220: 20 65 6c 73 65 20 7b 0a 09 09 09 73 65 74 20 63   else {....set c
1230: 6f 6d 70 6c 65 74 69 6f 6e 20 5b 73 74 72 69 6e  ompletion [strin
1240: 67 20 74 72 69 6d 20 24 7b 70 72 65 7d 24 7b 6d  g trim ${pre}${m
1250: 61 74 63 68 65 73 7d 5b 52 69 67 68 74 20 24 7b  atches}[Right ${
1260: 70 72 65 7d 5d 5d 0a 09 09 7d 0a 09 09 69 66 20  pre}]]...}...if 
1270: 7b 24 69 6e 68 69 62 69 74 7d 20 7b 0a 09 09 09  {$inhibit} {....
1280: 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 24 63 6f  return [list $co
1290: 6d 70 6c 65 74 69 6f 6e 20 7b 7d 5d 0a 09 09 7d  mpletion {}]...}
12a0: 20 65 6c 73 65 20 7b 0a 09 09 09 72 65 74 75 72   else {....retur
12b0: 6e 20 24 63 6f 6d 70 6c 65 74 69 6f 6e 0a 09 09  n $completion...
12c0: 7d 0a 09 7d 20 65 6c 73 65 69 66 20 7b 22 22 20  }..} elseif {"" 
12d0: 21 3d 20 24 7b 6d 61 74 63 68 65 73 7d 7d 20 7b  != ${matches}} {
12e0: 0a 09 09 23 20 70 75 74 73 20 73 74 64 65 72 72  ...# puts stderr
12f0: 20 5c 6e 6d 6f 72 65 3d 24 6d 61 74 63 68 65 73   \nmore=$matches
1300: 5c 6e 0a 09 09 73 65 74 20 6c 6f 6e 67 65 73 74  \n...set longest
1310: 20 5b 43 6f 6d 70 6c 65 74 65 4c 6f 6e 67 65 73   [CompleteLonges
1320: 74 20 24 7b 6d 61 74 63 68 65 73 7d 5d 0a 09 09  t ${matches}]...
1330: 23 20 70 75 74 73 20 73 74 64 65 72 72 20 6c 6f  # puts stderr lo
1340: 6e 67 65 73 74 3d 7c 24 6c 6f 6e 67 65 73 74 7c  ngest=|$longest|
1350: 0a 09 09 69 66 20 7b 22 22 20 3d 3d 20 24 6c 6f  ...if {"" == $lo
1360: 6e 67 65 73 74 7d 20 7b 0a 09 09 09 72 65 74 75  ngest} {....retu
1370: 72 6e 20 5b 73 74 72 69 6e 67 20 74 72 69 6d 20  rn [string trim 
1380: 22 5b 6c 69 73 74 20 24 74 65 78 74 5d 20 24 7b  "[list $text] ${
1390: 6d 61 74 63 68 65 73 7d 22 5d 0a 09 09 7d 20 65  matches}"]...} e
13a0: 6c 73 65 20 7b 0a 09 09 09 72 65 74 75 72 6e 20  lse {....return 
13b0: 5b 73 74 72 69 6e 67 20 74 72 69 6d 20 22 24 7b  [string trim "${
13c0: 70 72 65 7d 24 7b 6c 6f 6e 67 65 73 74 7d 20 24  pre}${longest} $
13d0: 7b 6d 61 74 63 68 65 73 7d 22 5d 0a 09 09 7d 0a  {matches}"]...}.
13e0: 09 7d 20 65 6c 73 65 20 7b 0a 09 09 72 65 74 75  .} else {...retu
13f0: 72 6e 20 22 22 3b 20 23 20 6e 6f 74 68 69 6e 67  rn ""; # nothing
1400: 20 74 6f 20 63 6f 6d 70 6c 65 74 65 0a 09 7d 0a   to complete..}.
1410: 7d 0a 0a 23 2a 2a 0a 23 20 43 6f 6d 70 6c 65 74  }..#**.# Complet
1420: 65 46 72 6f 6d 4c 69 73 74 20 77 69 6c 6c 20 6e  eFromList will n
1430: 65 76 65 72 20 72 65 74 75 72 6e 20 61 6e 20 65  ever return an e
1440: 6d 70 74 79 20 73 74 72 69 6e 67 2e 0a 23 20 63  mpty string..# c
1450: 6f 6d 70 6c 65 74 65 73 2c 20 69 66 20 61 20 63  ompletes, if a c
1460: 6f 6d 70 6c 65 74 69 6f 6e 20 63 61 6e 20 62 65  ompletion can be
1470: 20 64 6f 6e 65 2c 20 6f 72 20 72 69 6e 67 0a 23   done, or ring.#
1480: 20 74 68 65 20 62 65 6c 6c 20 69 66 20 6e 6f 74   the bell if not
1490: 2e 20 49 66 20 69 6e 68 69 62 69 74 20 69 73 20  . If inhibit is 
14a0: 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 20 72 65  non-zero, the re
14b0: 73 75 6c 74 0a 23 20 77 69 6c 6c 20 62 65 20 66  sult.# will be f
14c0: 6f 72 6d 61 74 74 65 64 20 73 75 63 68 20 74 68  ormatted such th
14d0: 61 74 20 72 65 61 64 6c 69 6e 65 20 77 69 6c 6c  at readline will
14e0: 20 6e 6f 74 20 69 6e 73 65 72 74 0a 23 20 61 20   not insert.# a 
14f0: 73 70 61 63 65 20 61 66 74 65 72 20 61 20 63 6f  space after a co
1500: 6d 70 6c 65 74 65 20 28 73 69 6e 67 6c 65 29 20  mplete (single) 
1510: 6d 61 74 63 68 2e 0a 23 0a 70 72 6f 63 20 43 6f  match..#.proc Co
1520: 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 7b  mpleteFromList {
1530: 74 65 78 74 20 6c 73 74 20 7b 61 6c 6c 6f 77 20  text lst {allow 
1540: 22 22 7d 20 7b 69 6e 68 69 62 69 74 20 30 7d 7d  ""} {inhibit 0}}
1550: 20 7b 0a 09 73 65 74 20 72 65 73 75 6c 74 20 5b   {..set result [
1560: 54 72 79 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65  TryFromList ${te
1570: 78 74 7d 20 24 7b 6c 73 74 7d 20 24 7b 61 6c 6c  xt} ${lst} ${all
1580: 6f 77 7d 20 24 7b 69 6e 68 69 62 69 74 7d 5d 0a  ow} ${inhibit}].
1590: 09 69 66 20 7b 21 5b 6c 6c 65 6e 67 74 68 20 24  .if {![llength $
15a0: 7b 72 65 73 75 6c 74 7d 5d 7d 20 7b 0a 09 09 41  {result}]} {...A
15b0: 6c 65 72 74 0a 09 09 23 20 72 65 74 75 72 6e 20  lert...# return 
15c0: 5b 73 74 72 69 6e 67 20 74 72 69 6d 20 5b 6c 69  [string trim [li
15d0: 73 74 20 24 7b 74 65 78 74 7d 5d 20 24 7b 6c 73  st ${text}] ${ls
15e0: 74 7d 22 5d 0a 09 09 69 66 20 7b 5b 6c 6c 65 6e  t}"]...if {[llen
15f0: 67 74 68 20 24 7b 6c 73 74 7d 5d 7d 20 7b 0a 09  gth ${lst}]} {..
1600: 09 09 72 65 74 75 72 6e 20 5b 73 74 72 69 6e 67  ..return [string
1610: 20 74 72 69 6d 20 22 24 7b 74 65 78 74 7d 20 24   trim "${text} $
1620: 7b 6c 73 74 7d 22 5d 0a 09 09 7d 20 65 6c 73 65  {lst}"]...} else
1630: 20 7b 0a 09 09 09 72 65 74 75 72 6e 20 5b 73 74   {....return [st
1640: 72 69 6e 67 20 74 72 69 6d 20 5b 6c 69 73 74 20  ring trim [list 
1650: 24 7b 74 65 78 74 7d 20 7b 7d 5d 5d 0a 09 09 7d  ${text} {}]]...}
1660: 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 09 72 65 74  ..} else {...ret
1670: 75 72 6e 20 24 7b 72 65 73 75 6c 74 7d 0a 09 7d  urn ${result}..}
1680: 0a 7d 0a 0a 23 2a 2a 0a 23 20 43 6f 6d 70 6c 65  .}..#**.# Comple
1690: 74 65 42 6f 6f 6c 65 61 6e 20 64 6f 65 73 20 61  teBoolean does a
16a0: 20 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73   CompleteFromLis
16b0: 74 0a 23 20 77 69 74 68 20 61 20 6c 69 73 74 20  t.# with a list 
16c0: 6f 66 20 61 6c 6c 20 76 61 6c 69 64 20 62 6f 6f  of all valid boo
16d0: 6c 65 61 6e 20 76 61 6c 75 65 73 2e 0a 23 0a 70  lean values..#.p
16e0: 72 6f 63 20 43 6f 6d 70 6c 65 74 65 42 6f 6f 6c  roc CompleteBool
16f0: 65 61 6e 20 7b 74 65 78 74 7d 20 7b 0a 09 72 65  ean {text} {..re
1700: 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72  turn [CompleteFr
1710: 6f 6d 4c 69 73 74 20 24 74 65 78 74 20 7b 79 65  omList $text {ye
1720: 73 20 6e 6f 20 74 72 75 65 20 66 61 6c 73 65 20  s no true false 
1730: 31 20 30 7d 5d 0a 7d 0a 0a 23 2a 2a 0a 23 20 62  1 0}].}..#**.# b
1740: 75 69 6c 64 20 61 20 6c 69 73 74 20 6f 66 20 61  uild a list of a
1750: 6c 6c 20 65 78 65 63 75 74 61 62 6c 65 73 20 77  ll executables w
1760: 68 69 63 68 20 63 61 6e 20 62 65 0a 23 20 66 6f  hich can be.# fo
1770: 75 6e 64 20 69 6e 20 24 65 6e 76 28 50 41 54 48  und in $env(PATH
1780: 29 2e 20 54 68 69 73 20 69 73 20 28 6e 61 74 75  ). This is (natu
1790: 72 61 6c 6c 79 29 20 61 20 62 69 74 0a 23 20 73  rally) a bit.# s
17a0: 6c 6f 77 2c 20 61 6e 64 20 73 68 6f 75 6c 64 20  low, and should 
17b0: 6e 6f 74 20 63 61 6c 6c 65 64 20 66 72 65 71 75  not called frequ
17c0: 65 6e 74 6c 79 2e 20 49 6e 73 74 65 61 64 0a 23  ently. Instead.#
17d0: 20 69 74 20 69 73 20 61 20 67 6f 6f 64 20 69 64   it is a good id
17e0: 65 61 20 74 6f 20 63 68 65 63 6b 20 69 66 20 74  ea to check if t
17f0: 68 65 20 76 61 72 69 61 62 6c 65 0a 23 20 60 65  he variable.# `e
1800: 78 65 63 75 74 61 62 6c 65 73 27 20 65 78 69 73  xecutables' exis
1810: 74 73 20 61 6e 64 20 74 68 65 6e 20 6a 75 73 74  ts and then just
1820: 20 75 73 65 20 69 74 27 73 0a 23 20 63 6f 6e 74   use it's.# cont
1830: 65 6e 74 20 69 6e 73 74 65 61 64 20 6f 66 20 63  ent instead of c
1840: 61 6c 6c 69 6e 67 20 52 65 68 61 73 68 2e 0a 23  alling Rehash..#
1850: 20 28 73 65 65 20 63 6f 6d 70 6c 65 74 65 28 65   (see complete(e
1860: 78 65 63 29 29 2e 0a 23 20 0a 70 72 6f 63 20 52  xec))..# .proc R
1870: 65 68 61 73 68 20 7b 7d 20 7b 0a 0a 09 67 6c 6f  ehash {} {...glo
1880: 62 61 6c 20 65 6e 76 0a 09 76 61 72 69 61 62 6c  bal env..variabl
1890: 65 20 65 78 65 63 75 74 61 62 6c 65 73 0a 0a 09  e executables...
18a0: 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74  if {![info exist
18b0: 73 20 65 6e 76 5d 20 7c 7c 20 21 5b 61 72 72 61  s env] || ![arra
18c0: 79 20 65 78 69 73 74 73 20 65 6e 76 5d 7d 20 7b  y exists env]} {
18d0: 0a 09 09 72 65 74 75 72 6e 0a 09 7d 0a 09 69 66  ...return..}..if
18e0: 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20   {![info exists 
18f0: 65 6e 76 28 50 41 54 48 29 5d 7d 20 7b 0a 09 09  env(PATH)]} {...
1900: 72 65 74 75 72 6e 0a 09 7d 0a 0a 09 73 65 74 20  return..}...set 
1910: 65 78 65 63 75 74 61 62 6c 65 73 20 30 0a 09 66  executables 0..f
1920: 6f 72 65 61 63 68 20 64 69 72 20 5b 73 70 6c 69  oreach dir [spli
1930: 74 20 24 65 6e 76 28 50 41 54 48 29 20 3a 5d 20  t $env(PATH) :] 
1940: 7b 0a 09 09 69 66 20 7b 5b 63 61 74 63 68 20 5b  {...if {[catch [
1950: 6c 69 73 74 20 73 65 74 20 66 69 6c 65 73 20 5b  list set files [
1960: 67 6c 6f 62 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e  glob -nocomplain
1970: 20 24 7b 64 69 72 7d 2f 2a 5d 5d 5d 7d 20 7b 20   ${dir}/*]]]} { 
1980: 63 6f 6e 74 69 6e 75 65 20 7d 0a 09 09 66 6f 72  continue }...for
1990: 65 61 63 68 20 66 69 6c 65 20 24 66 69 6c 65 73  each file $files
19a0: 20 7b 0a 09 09 09 69 66 20 7b 5b 66 69 6c 65 20   {....if {[file 
19b0: 65 78 65 63 75 74 61 62 6c 65 20 24 66 69 6c 65  executable $file
19c0: 5d 7d 20 7b 0a 09 09 09 09 6c 61 70 70 65 6e 64  ]} {.....lappend
19d0: 20 65 78 65 63 75 74 61 62 6c 65 73 20 5b 66 69   executables [fi
19e0: 6c 65 20 74 61 69 6c 20 24 7b 66 69 6c 65 7d 5d  le tail ${file}]
19f0: 0a 09 09 09 7d 0a 09 09 7d 0a 09 7d 0a 7d 0a 0a  ....}...}..}.}..
1a00: 23 2a 2a 0a 23 20 62 75 69 6c 64 20 61 20 6c 69  #**.# build a li
1a10: 73 74 20 68 6f 73 74 73 20 66 72 6f 6d 20 74 68  st hosts from th
1a20: 65 20 2f 65 74 63 2f 68 6f 73 74 73 20 66 69 6c  e /etc/hosts fil
1a30: 65 2e 0a 23 20 74 68 69 73 20 69 73 20 6f 6e 6c  e..# this is onl
1a40: 79 20 64 6f 6e 65 20 6f 6e 63 65 2e 20 54 68 69  y done once. Thi
1a50: 73 20 69 73 20 73 6f 72 74 20 6f 66 20 61 0a 23  s is sort of a.#
1a60: 20 64 69 72 74 79 20 68 61 63 6b 2c 20 2f 65 74   dirty hack, /et
1a70: 63 2f 68 6f 73 74 73 20 69 73 20 68 61 72 64 63  c/hosts is hardc
1a80: 6f 64 65 64 20 2e 2e 2e 0a 23 20 42 75 74 20 6f  oded ....# But o
1a90: 6e 20 74 68 65 20 6f 74 68 65 72 20 73 69 64 65  n the other side
1aa0: 2c 20 69 66 20 74 68 65 20 75 73 65 72 20 73 75  , if the user su
1ab0: 70 70 6c 69 65 73 0a 23 20 61 20 76 61 6c 69 64  pplies.# a valid
1ac0: 20 68 6f 73 74 20 74 61 62 6c 65 20 69 6e 20 74   host table in t
1ad0: 63 6c 72 65 61 64 6c 69 6e 65 3a 3a 68 6f 73 74  clreadline::host
1ae0: 73 0a 23 20 62 65 66 6f 72 65 20 65 6e 74 65 72  s.# before enter
1af0: 69 6e 67 20 74 68 65 20 65 76 65 6e 74 20 6c 6f  ing the event lo
1b00: 6f 70 2c 20 74 68 69 73 20 70 72 6f 63 0a 23 20  op, this proc.# 
1b10: 77 69 6c 6c 20 72 65 74 75 72 6e 20 74 68 69 73  will return this
1b20: 20 6c 69 73 74 2e 0a 23 20 0a 70 72 6f 63 20 48   list..# .proc H
1b30: 6f 73 74 4c 69 73 74 20 7b 7d 20 7b 0a 09 23 20  ostList {} {..# 
1b40: 72 65 61 64 20 74 68 65 20 68 6f 73 74 20 74 61  read the host ta
1b50: 62 6c 65 20 6f 6e 6c 79 20 6f 6e 63 65 2e 0a 09  ble only once...
1b60: 23 0a 09 76 61 72 69 61 62 6c 65 20 68 6f 73 74  #..variable host
1b70: 73 0a 09 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78  s..if {![info ex
1b80: 69 73 74 73 20 68 6f 73 74 73 5d 7d 20 7b 0a 09  ists hosts]} {..
1b90: 09 63 61 74 63 68 20 7b 0a 09 09 09 73 65 74 20  .catch {....set 
1ba0: 68 6f 73 74 73 20 22 22 0a 09 09 09 73 65 74 20  hosts ""....set 
1bb0: 69 64 20 5b 6f 70 65 6e 20 2f 65 74 63 2f 68 6f  id [open /etc/ho
1bc0: 73 74 73 20 72 5d 0a 09 09 09 69 66 20 7b 30 20  sts r]....if {0 
1bd0: 21 3d 20 24 7b 69 64 7d 7d 20 7b 0a 09 09 09 09  != ${id}} {.....
1be0: 77 68 69 6c 65 20 7b 2d 31 20 21 3d 20 5b 67 65  while {-1 != [ge
1bf0: 74 73 20 24 7b 69 64 7d 20 6c 69 6e 65 5d 7d 20  ts ${id} line]} 
1c00: 7b 0a 09 09 09 09 09 72 65 67 73 75 62 20 7b 23  {......regsub {#
1c10: 2e 2a 7d 20 24 7b 6c 69 6e 65 7d 20 7b 7d 20 6c  .*} ${line} {} l
1c20: 69 6e 65 0a 09 09 09 09 09 69 66 20 7b 5b 6c 6c  ine......if {[ll
1c30: 65 6e 67 74 68 20 24 7b 6c 69 6e 65 7d 5d 20 3e  ength ${line}] >
1c40: 3d 20 32 7d 20 7b 0a 09 09 09 09 09 09 6c 61 70  = 2} {.......lap
1c50: 70 65 6e 64 20 68 6f 73 74 73 20 5b 6c 69 6e 64  pend hosts [lind
1c60: 65 78 20 24 7b 6c 69 6e 65 7d 20 31 5d 0a 09 09  ex ${line} 1]...
1c70: 09 09 09 7d 0a 09 09 09 09 7d 0a 09 09 09 09 63  ...}.....}.....c
1c80: 6c 6f 73 65 20 24 7b 69 64 7d 20 0a 09 09 09 7d  lose ${id} ....}
1c90: 20 0a 09 09 7d 0a 09 7d 0a 09 72 65 74 75 72 6e   ...}..}..return
1ca0: 20 24 7b 68 6f 73 74 73 7d 20 0a 7d 0a 0a 23 2a   ${hosts} .}..#*
1cb0: 2a 0a 23 20 6e 65 76 65 72 20 72 65 74 75 72 6e  *.# never return
1cc0: 20 61 6e 20 65 6d 70 74 79 20 73 74 72 69 6e 67   an empty string
1cd0: 2c 20 6e 65 76 65 72 20 63 6f 6d 70 6c 65 74 65  , never complete
1ce0: 2e 0a 23 20 54 68 69 73 20 69 73 20 75 73 65 66  ..# This is usef
1cf0: 75 6c 20 66 6f 72 20 73 68 6f 77 69 6e 67 20 6f  ul for showing o
1d00: 70 74 69 6f 6e 73 20 6c 69 73 74 73 20 66 6f 72  ptions lists for
1d10: 20 65 78 61 6d 70 6c 65 2e 0a 23 0a 70 72 6f 63   example..#.proc
1d20: 20 44 69 73 70 6c 61 79 48 69 6e 74 73 20 7b 6c   DisplayHints {l
1d30: 73 74 7d 20 7b 0a 09 72 65 74 75 72 6e 20 5b 73  st} {..return [s
1d40: 74 72 69 6e 67 20 74 72 69 6d 20 22 7b 7d 20 24  tring trim "{} $
1d50: 7b 6c 73 74 7d 22 5d 0a 7d 0a 0a 23 2a 2a 0a 23  {lst}"].}..#**.#
1d60: 20 66 69 6e 64 20 28 70 61 72 74 69 61 6c 29 20   find (partial) 
1d70: 6d 61 74 63 68 65 73 20 66 6f 72 20 60 74 65 78  matches for `tex
1d80: 74 27 20 69 6e 20 60 6c 73 74 27 2e 20 52 69 6e  t' in `lst'. Rin
1d90: 67 0a 23 20 74 68 65 20 62 65 6c 6c 20 61 6e 64  g.# the bell and
1da0: 20 72 65 74 75 72 6e 20 74 68 65 20 77 68 6f 6c   return the whol
1db0: 65 20 6c 69 73 74 2c 20 69 66 20 74 68 65 20 75  e list, if the u
1dc0: 73 65 72 0a 23 20 74 72 69 65 73 20 74 6f 20 63  ser.# tries to c
1dd0: 6f 6d 70 6c 65 74 65 20 3f 2e 2e 3f 20 6f 70 74  omplete ?..? opt
1de0: 69 6f 6e 73 20 6f 72 20 3c 2e 2e 3e 20 68 69 6e  ions or <..> hin
1df0: 74 73 2e 0a 23 0a 23 20 4d 61 74 63 68 65 73 46  ts..#.# MatchesF
1e00: 72 6f 6d 4c 69 73 74 20 72 65 74 75 72 6e 73 20  romList returns 
1e10: 61 20 6c 69 73 74 20 77 68 69 63 68 20 69 73 20  a list which is 
1e20: 6e 6f 74 20 73 75 69 74 61 62 6c 65 0a 23 20 66  not suitable.# f
1e30: 6f 72 20 70 61 73 73 69 6e 67 20 74 6f 20 74 68  or passing to th
1e40: 65 20 72 65 61 64 6c 69 6e 65 20 63 6f 6d 70 6c  e readline compl
1e50: 65 74 65 72 2e 20 54 68 75 73 2c 0a 23 20 4d 61  eter. Thus,.# Ma
1e60: 74 63 68 65 73 46 72 6f 6d 4c 69 73 74 20 73 68  tchesFromList sh
1e70: 6f 75 6c 64 20 6e 6f 74 20 62 65 20 63 61 6c 6c  ould not be call
1e80: 65 64 20 64 69 72 65 63 74 6c 79 20 62 75 74 0a  ed directly but.
1e90: 23 20 66 72 6f 6d 20 66 6f 72 6d 61 74 74 69 6e  # from formattin
1ea0: 67 20 72 6f 75 74 69 6e 65 73 20 61 73 20 54 72  g routines as Tr
1eb0: 79 46 72 6f 6d 4c 69 73 74 2e 0a 23 0a 70 72 6f  yFromList..#.pro
1ec0: 63 20 4d 61 74 63 68 65 73 46 72 6f 6d 4c 69 73  c MatchesFromLis
1ed0: 74 20 7b 74 65 78 74 20 6c 73 74 20 7b 61 6c 6c  t {text lst {all
1ee0: 6f 77 20 22 22 7d 7d 20 7b 0a 09 73 65 74 20 72  ow ""}} {..set r
1ef0: 65 73 75 6c 74 20 22 22 0a 09 73 65 74 20 74 65  esult ""..set te
1f00: 78 74 20 5b 53 74 72 69 70 50 72 65 66 69 78 20  xt [StripPrefix 
1f10: 24 74 65 78 74 5d 0a 09 73 65 74 20 6e 75 6c 6c  $text]..set null
1f20: 20 5b 73 74 72 69 6e 67 20 69 6e 64 65 78 20 24   [string index $
1f30: 74 65 78 74 20 30 5d 0a 09 66 6f 72 65 61 63 68  text 0]..foreach
1f40: 20 63 68 61 72 20 7b 3c 20 3f 7d 20 7b 0a 09 09   char {< ?} {...
1f50: 69 66 20 7b 24 63 68 61 72 20 3d 3d 20 24 6e 75  if {$char == $nu
1f60: 6c 6c 20 26 26 20 2d 31 20 3d 3d 20 5b 73 74 72  ll && -1 == [str
1f70: 69 6e 67 20 66 69 72 73 74 20 24 63 68 61 72 20  ing first $char 
1f80: 24 61 6c 6c 6f 77 5d 7d 20 7b 0a 09 09 09 41 6c  $allow]} {....Al
1f90: 65 72 74 0a 09 09 09 72 65 74 75 72 6e 20 24 6c  ert....return $l
1fa0: 73 74 0a 09 09 7d 0a 09 7d 0a 09 23 20 70 75 74  st...}..}..# put
1fb0: 73 20 73 74 64 65 72 72 20 22 28 4d 61 74 63 68  s stderr "(Match
1fc0: 65 73 46 72 6f 6d 4c 69 73 74 29 20 74 65 78 74  esFromList) text
1fd0: 3d 24 74 65 78 74 22 0a 09 23 20 70 75 74 73 20  =$text"..# puts 
1fe0: 73 74 64 65 72 72 20 22 28 4d 61 74 63 68 65 73  stderr "(Matches
1ff0: 46 72 6f 6d 4c 69 73 74 29 20 6c 73 74 3d 24 6c  FromList) lst=$l
2000: 73 74 22 0a 09 66 6f 72 65 61 63 68 20 77 6f 72  st"..foreach wor
2010: 64 20 24 6c 73 74 20 7b 0a 09 09 69 66 20 7b 5b  d $lst {...if {[
2020: 73 74 72 69 6e 67 20 6d 61 74 63 68 20 24 7b 74  string match ${t
2030: 65 78 74 7d 2a 20 24 7b 77 6f 72 64 7d 5d 7d 20  ext}* ${word}]} 
2040: 7b 0a 09 09 09 6c 61 70 70 65 6e 64 20 72 65 73  {....lappend res
2050: 75 6c 74 20 24 7b 77 6f 72 64 7d 0a 09 09 7d 0a  ult ${word}...}.
2060: 09 7d 0a 09 72 65 74 75 72 6e 20 5b 73 74 72 69  .}..return [stri
2070: 6e 67 20 74 72 69 6d 20 24 72 65 73 75 6c 74 5d  ng trim $result]
2080: 0a 7d 0a 0a 23 2a 2a 0a 23 20 69 6e 76 6f 6b 65  .}..#**.# invoke
2090: 20 63 6d 64 20 77 69 74 68 20 61 20 28 68 6f 70   cmd with a (hop
20a0: 65 66 75 6c 6c 79 29 20 69 6e 76 61 6c 69 64 20  efully) invalid 
20b0: 73 74 72 69 6e 67 20 61 6e 64 0a 23 20 70 61 72  string and.# par
20c0: 73 65 20 74 68 65 20 65 72 72 6f 72 20 6d 65 73  se the error mes
20d0: 73 61 67 65 20 74 6f 20 67 65 74 20 61 6e 20 6f  sage to get an o
20e0: 70 74 69 6f 6e 20 6c 69 73 74 2e 0a 23 20 54 68  ption list..# Th
20f0: 65 20 73 74 72 69 6e 67 73 20 61 72 65 20 63 61  e strings are ca
2100: 72 65 66 75 6c 6c 79 20 63 68 6f 73 65 6e 20 74  refully chosen t
2110: 6f 20 6d 61 74 63 68 20 74 68 65 0a 23 20 72 65  o match the.# re
2120: 73 75 6c 74 73 20 70 72 6f 64 75 63 65 64 20 62  sults produced b
2130: 79 20 6b 6e 6f 77 6e 20 74 63 6c 20 72 6f 75 74  y known tcl rout
2140: 69 6e 65 73 2e 20 49 74 27 73 20 61 0a 23 20 70  ines. It's a.# p
2150: 69 74 79 2c 20 74 68 61 74 20 6e 6f 74 20 61 6c  ity, that not al
2160: 6c 20 6f 62 6a 65 63 74 20 63 6f 6d 6d 61 6e 64  l object command
2170: 73 20 67 65 6e 65 72 61 74 65 0a 23 20 73 74 61  s generate.# sta
2180: 6e 64 61 72 64 20 65 72 72 6f 72 20 6d 65 73 73  ndard error mess
2190: 61 67 65 73 21 0a 23 0a 23 20 40 70 61 72 61 6d  ages!.#.# @param
21a0: 20 20 20 63 6d 64 0a 23 20 40 72 65 74 75 72 6e     cmd.# @return
21b0: 20 20 6c 69 73 74 20 6f 66 20 6f 70 74 69 6f 6e    list of option
21c0: 73 20 66 6f 72 20 63 6d 64 0a 23 20 40 64 61 74  s for cmd.# @dat
21d0: 65 20 20 20 20 53 65 70 2d 31 34 2d 31 39 39 39  e    Sep-14-1999
21e0: 0a 23 0a 70 72 6f 63 20 54 72 79 53 75 62 43 6d  .#.proc TrySubCm
21f0: 64 73 20 7b 74 65 78 74 20 63 6d 64 7d 20 7b 0a  ds {text cmd} {.
2200: 0a 09 73 65 74 20 74 72 79 73 74 72 69 6e 67 20  ..set trystring 
2210: 2d 2d 2d 2d 0a 0a 09 23 20 74 72 79 20 74 68 65  ----...# try the
2220: 20 63 6f 6d 6d 61 6e 64 20 77 69 74 68 20 61 6e   command with an
2230: 64 20 77 2f 6f 20 74 72 79 73 74 72 69 6e 67 2e  d w/o trystring.
2240: 0a 09 23 20 53 6f 6d 65 20 63 6f 6d 6d 61 6e 64  ..# Some command
2250: 73 2c 20 65 2e 67 2e 0a 09 23 20 20 20 20 20 2e  s, e.g...#     .
2260: 63 61 6e 76 61 73 20 62 69 6e 64 0a 09 23 20 72  canvas bind..# r
2270: 65 74 75 72 6e 20 61 6e 20 65 72 72 6f 72 20 69  eturn an error i
2280: 66 20 69 6e 76 6f 6b 65 64 20 77 2f 6f 20 61 72  f invoked w/o ar
2290: 67 75 6d 65 6e 74 73 0a 09 23 20 62 75 74 20 6e  guments..# but n
22a0: 6f 74 2c 20 69 66 20 69 6e 76 6f 6b 65 64 20 77  ot, if invoked w
22b0: 69 74 68 20 61 72 67 75 6d 65 6e 74 73 2e 20 42  ith arguments. B
22c0: 72 65 61 6b 69 6e 67 0a 09 23 20 74 68 65 20 6c  reaking..# the l
22d0: 6f 6f 70 20 69 73 20 65 76 65 6e 74 75 61 6c 6c  oop is eventuall
22e0: 79 20 64 6f 6e 65 20 61 74 20 74 68 65 20 65 6e  y done at the en
22f0: 64 20 2e 2e 2e 0a 09 23 0a 09 66 6f 72 20 7b 73  d .....#..for {s
2300: 65 74 20 73 74 72 20 24 7b 74 72 79 73 74 72 69  et str ${trystri
2310: 6e 67 7d 7d 20 7b 31 7d 20 7b 73 65 74 20 73 74  ng}} {1} {set st
2320: 72 20 22 22 7d 20 7b 0a 0a 09 09 73 65 74 20 63  r ""} {....set c
2330: 6f 64 65 20 5b 63 61 74 63 68 20 7b 73 65 74 20  ode [catch {set 
2340: 72 65 73 75 6c 74 20 5b 65 76 61 6c 20 24 7b 63  result [eval ${c
2350: 6d 64 7d 20 24 7b 73 74 72 7d 5d 7d 20 6d 73 67  md} ${str}]} msg
2360: 5d 0a 09 09 73 65 74 20 72 65 73 75 6c 74 20 22  ]...set result "
2370: 22 0a 0a 09 09 69 66 20 7b 24 63 6f 64 65 7d 20  "....if {$code} 
2380: 7b 0a 09 09 09 73 65 74 20 74 63 6d 64 20 5b 73  {....set tcmd [s
2390: 74 72 69 6e 67 20 74 72 69 6d 20 24 7b 63 6d 64  tring trim ${cmd
23a0: 7d 5d 0a 09 09 09 23 20 70 75 74 73 20 73 74 64  }]....# puts std
23b0: 65 72 72 20 6d 73 67 3d 24 6d 73 67 0a 09 09 09  err msg=$msg....
23c0: 23 20 58 58 58 20 73 65 65 0a 09 09 09 23 20 20  # XXX see....#  
23d0: 20 20 20 20 20 20 20 74 63 6c 49 6e 64 65 78 4f         tclIndexO
23e0: 62 6a 2e 63 0a 09 09 09 23 20 20 20 20 20 20 20  bj.c....#       
23f0: 20 20 74 6b 49 6d 67 50 68 6f 74 6f 2e 63 0a 09    tkImgPhoto.c..
2400: 09 09 23 20 58 58 58 0a 09 09 09 69 66 20 7b 5b  ..# XXX....if {[
2410: 72 65 67 65 78 70 20 5c 0a 09 09 09 09 7b 28 62  regexp \.....{(b
2420: 61 64 7c 61 6d 62 69 67 75 6f 75 73 7c 75 6e 72  ad|ambiguous|unr
2430: 65 63 6f 67 6e 69 7a 65 64 29 20 2e 2a 22 2d 2d  ecognized) .*"--
2440: 2d 2d 22 3a 20 2a 6d 75 73 74 20 2a 62 65 28 20  --": *must *be( 
2450: 2e 2a 24 29 7d 20 5c 0a 09 09 09 09 24 7b 6d 73  .*$)} \.....${ms
2460: 67 7d 20 61 6c 6c 20 6a 75 6e 6b 20 72 61 77 5d  g} all junk raw]
2470: 0a 09 09 09 7d 20 7b 0a 09 09 09 09 72 65 67 73  ....} {.....regs
2480: 75 62 20 2d 61 6c 6c 20 2d 2d 20 2c 20 24 7b 72  ub -all -- , ${r
2490: 61 77 7d 20 7b 20 7d 20 72 61 77 0a 09 09 09 09  aw} { } raw.....
24a0: 73 65 74 20 6c 65 6e 20 5b 6c 6c 65 6e 67 74 68  set len [llength
24b0: 20 24 7b 72 61 77 7d 5d 0a 09 09 09 09 73 65 74   ${raw}].....set
24c0: 20 6c 65 6e 5f 32 20 5b 65 78 70 72 20 24 7b 6c   len_2 [expr ${l
24d0: 65 6e 7d 20 2d 20 32 5d 0a 09 09 09 09 66 6f 72  en} - 2].....for
24e0: 20 7b 73 65 74 20 69 20 30 7d 20 7b 24 7b 69 7d   {set i 0} {${i}
24f0: 20 3c 20 24 7b 6c 65 6e 7d 7d 20 7b 69 6e 63 72   < ${len}} {incr
2500: 20 69 7d 20 7b 0a 09 09 09 09 09 73 65 74 20 77   i} {......set w
2510: 6f 72 64 20 5b 6c 69 6e 64 65 78 20 24 7b 72 61  ord [lindex ${ra
2520: 77 7d 20 24 7b 69 7d 5d 0a 09 09 09 09 09 69 66  w} ${i}]......if
2530: 20 7b 22 6f 72 22 20 21 3d 20 24 7b 77 6f 72 64   {"or" != ${word
2540: 7d 20 26 26 20 24 7b 69 7d 20 21 3d 20 24 7b 6c  } && ${i} != ${l
2550: 65 6e 5f 32 7d 7d 20 7b 0a 09 09 09 09 09 09 6c  en_2}} {.......l
2560: 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 24 7b  append result ${
2570: 77 6f 72 64 7d 0a 09 09 09 09 09 7d 0a 09 09 09  word}......}....
2580: 09 7d 0a 09 09 09 09 69 66 20 7b 5b 73 74 72 69  .}.....if {[stri
2590: 6e 67 20 6c 65 6e 67 74 68 20 24 7b 72 65 73 75  ng length ${resu
25a0: 6c 74 7d 5d 20 26 26 20 5c 0a 09 09 09 09 09 2d  lt}] && \......-
25b0: 31 20 3d 3d 20 5b 73 74 72 69 6e 67 20 66 69 72  1 == [string fir
25c0: 73 74 20 24 7b 74 72 79 73 74 72 69 6e 67 7d 20  st ${trystring} 
25d0: 24 7b 72 65 73 75 6c 74 7d 5d 0a 09 09 09 09 7d  ${result}].....}
25e0: 20 7b 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b   {......return [
25f0: 54 72 79 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65  TryFromList ${te
2600: 78 74 7d 20 24 7b 72 65 73 75 6c 74 7d 5d 0a 09  xt} ${result}]..
2610: 09 09 09 7d 0a 0a 09 09 09 7d 20 65 6c 73 65 69  ...}.....} elsei
2620: 66 20 7b 5b 72 65 67 65 78 70 20 5c 0a 09 09 09  f {[regexp \....
2630: 09 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20  ."wrong # args: 
2640: 73 68 6f 75 6c 64 20 62 65 20 5c 22 3f 24 7b 74  should be \"?${t
2650: 63 6d 64 7d 5c 5b 5e 20 5c 74 5c 5d 2a 5c 28 2e  cmd}\[^ \t\]*\(.
2660: 2a 5c 5b 5e 5c 22 5c 5d 5c 29 22 20 5c 0a 09 09  *\[^\"\]\)" \...
2670: 09 09 24 7b 6d 73 67 7d 20 61 6c 6c 20 68 69 6e  ..${msg} all hin
2680: 74 5d 0a 0a 09 09 09 7d 20 7b 0a 0a 09 09 09 09  t].....} {......
2690: 23 20 58 58 58 20 73 65 65 20 74 63 6c 49 6e 64  # XXX see tclInd
26a0: 65 78 4f 62 6a 2e 63 20 58 58 58 0a 09 09 09 09  exObj.c XXX.....
26b0: 69 66 20 7b 2d 31 20 3d 3d 20 5b 73 74 72 69 6e  if {-1 == [strin
26c0: 67 20 66 69 72 73 74 20 24 7b 74 72 79 73 74 72  g first ${trystr
26d0: 69 6e 67 7d 20 24 7b 68 69 6e 74 7d 5d 7d 20 7b  ing} ${hint}]} {
26e0: 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b 44 69  ......return [Di
26f0: 73 70 6c 61 79 48 69 6e 74 73 20 5b 6c 69 73 74  splayHints [list
2700: 20 3c 5b 73 74 72 69 6e 67 20 74 72 69 6d 20 24   <[string trim $
2710: 68 69 6e 74 5d 3e 5d 5d 0a 09 09 09 09 7d 0a 09  hint]>]].....}..
2720: 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09 23  ..} else {.....#
2730: 20 63 68 65 63 6b 2c 20 69 66 20 69 74 27 73 20   check, if it's 
2740: 61 20 62 6c 74 20 65 72 72 6f 72 20 6d 73 67 20  a blt error msg 
2750: 2e 2e 2e 0a 09 09 09 09 23 0a 09 09 09 09 73 65  ........#.....se
2760: 74 20 6d 73 67 6c 73 74 20 5b 73 70 6c 69 74 20  t msglst [split 
2770: 24 7b 6d 73 67 7d 20 5c 6e 5d 0a 09 09 09 09 66  ${msg} \n].....f
2780: 6f 72 65 61 63 68 20 6c 69 6e 65 20 24 7b 6d 73  oreach line ${ms
2790: 67 6c 73 74 7d 20 7b 0a 09 09 09 09 09 69 66 20  glst} {......if 
27a0: 7b 5b 72 65 67 65 78 70 20 22 24 7b 74 63 6d 64  {[regexp "${tcmd
27b0: 7d 5c 5b 20 5c 74 5c 5d 5c 2b 5c 28 5c 5b 5e 20  }\[ \t\]\+\(\[^ 
27c0: 5c 74 5c 5d 2a 5c 29 5c 5b 5e 3a 5c 5d 2a 24 22  \t\]*\)\[^:\]*$"
27d0: 20 5c 0a 09 09 09 09 09 09 24 7b 6c 69 6e 65 7d   \.......${line}
27e0: 20 61 6c 6c 20 73 75 62 5d 0a 09 09 09 09 09 7d   all sub]......}
27f0: 20 7b 0a 09 09 09 09 09 09 6c 61 70 70 65 6e 64   {.......lappend
2800: 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 20 24 7b   result [list ${
2810: 73 75 62 7d 5d 0a 09 09 09 09 09 7d 0a 09 09 09  sub}]......}....
2820: 09 7d 0a 09 09 09 09 69 66 20 7b 5b 73 74 72 69  .}.....if {[stri
2830: 6e 67 20 6c 65 6e 67 74 68 20 24 7b 72 65 73 75  ng length ${resu
2840: 6c 74 7d 5d 20 26 26 20 5c 0a 09 09 09 09 09 2d  lt}] && \......-
2850: 31 20 3d 3d 20 5b 73 74 72 69 6e 67 20 66 69 72  1 == [string fir
2860: 73 74 20 24 7b 74 72 79 73 74 72 69 6e 67 7d 20  st ${trystring} 
2870: 24 7b 72 65 73 75 6c 74 7d 5d 0a 09 09 09 09 7d  ${result}].....}
2880: 20 7b 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b   {......return [
2890: 54 72 79 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65  TryFromList ${te
28a0: 78 74 7d 20 24 7b 72 65 73 75 6c 74 7d 5d 0a 09  xt} ${result}]..
28b0: 09 09 09 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 09  ...}....}...}...
28c0: 69 66 20 7b 22 22 20 3d 3d 20 24 7b 73 74 72 7d  if {"" == ${str}
28d0: 7d 20 7b 0a 09 09 09 62 72 65 61 6b 0a 09 09 7d  } {....break...}
28e0: 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d  ..}..return "".}
28f0: 0a 0a 23 2a 2a 0a 23 20 74 72 79 20 74 6f 20 67  ..#**.# try to g
2900: 65 74 20 63 61 73 73 65 73 20 66 6f 72 20 63 6f  et casses for co
2910: 6d 6d 61 6e 64 73 20 77 68 69 63 68 0a 23 20 61  mmands which.# a
2920: 6c 6c 6f 77 20 60 63 6f 6e 66 69 67 75 72 65 27  llow `configure'
2930: 20 28 63 67 65 74 29 2e 0a 23 20 40 70 61 72 61   (cget)..# @para
2940: 6d 20 20 63 6f 6d 6d 61 6e 64 2e 0a 23 20 40 70  m  command..# @p
2950: 61 72 61 6d 20 20 6f 70 74 69 6f 6e 73 54 20 77  aram  optionsT w
2960: 68 65 72 65 20 74 68 65 20 74 61 62 6c 65 20 77  here the table w
2970: 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 2e 0a 23  ill be stored..#
2980: 20 40 72 65 74 75 72 6e 20 6e 75 6d 62 65 72 20   @return number 
2990: 6f 66 20 6f 70 74 69 6f 6e 73 0a 23 20 40 64 61  of options.# @da
29a0: 74 65 20 20 20 53 61 74 2d 53 65 70 2d 31 38 0a  te   Sat-Sep-18.
29b0: 23 0a 70 72 6f 63 20 43 6c 61 73 73 54 61 62 6c  #.proc ClassTabl
29c0: 65 20 7b 63 6d 64 7d 20 7b 0a 0a 09 23 20 66 69  e {cmd} {...# fi
29d0: 72 73 74 20 77 65 20 62 75 69 6c 64 20 61 6e 20  rst we build an 
29e0: 6f 70 74 69 6f 6e 20 74 61 62 6c 65 2e 0a 09 23  option table...#
29f0: 20 57 65 20 61 6c 77 61 79 73 20 75 73 65 20 60   We always use `
2a00: 63 6f 6e 66 69 67 75 72 65 27 20 68 65 72 65 2c  configure' here,
2a10: 0a 09 23 20 62 65 63 61 75 73 65 20 63 67 65 74  ..# because cget
2a20: 20 77 69 6c 6c 20 6e 6f 74 20 72 65 74 75 72 6e   will not return
2a30: 20 74 68 65 0a 09 23 20 6f 70 74 69 6f 6e 20 74   the..# option t
2a40: 61 62 6c 65 2e 0a 09 23 0a 09 69 66 20 7b 5b 63  able...#..if {[c
2a50: 61 74 63 68 20 5b 6c 69 73 74 20 73 65 74 20 6f  atch [list set o
2a60: 70 74 69 6f 6e 5f 74 61 62 6c 65 20 5b 65 76 61  ption_table [eva
2a70: 6c 20 24 7b 63 6d 64 7d 20 63 6f 6e 66 69 67 75  l ${cmd} configu
2a80: 72 65 5d 5d 20 6d 73 67 5d 7d 20 7b 0a 09 09 72  re]] msg]} {...r
2a90: 65 74 75 72 6e 20 22 22 0a 09 7d 0a 09 73 65 74  eturn ""..}..set
2aa0: 20 63 6c 61 73 73 65 73 20 22 22 0a 09 66 6f 72   classes ""..for
2ab0: 65 61 63 68 20 6f 70 74 6c 69 6e 65 20 24 7b 6f  each optline ${o
2ac0: 70 74 69 6f 6e 5f 74 61 62 6c 65 7d 20 7b 0a 09  ption_table} {..
2ad0: 09 69 66 20 7b 35 20 21 3d 20 5b 6c 6c 65 6e 67  .if {5 != [lleng
2ae0: 74 68 20 24 7b 6f 70 74 6c 69 6e 65 7d 5d 7d 20  th ${optline}]} 
2af0: 63 6f 6e 74 69 6e 75 65 20 65 6c 73 65 20 7b 0a  continue else {.
2b00: 09 09 09 6c 61 70 70 65 6e 64 20 63 6c 61 73 73  ...lappend class
2b10: 65 73 20 5b 6c 69 6e 64 65 78 20 24 7b 6f 70 74  es [lindex ${opt
2b20: 6c 69 6e 65 7d 20 32 5d 0a 09 09 7d 0a 09 7d 0a  line} 2]...}..}.
2b30: 09 72 65 74 75 72 6e 20 24 7b 63 6c 61 73 73 65  .return ${classe
2b40: 73 7d 0a 7d 0a 0a 23 2a 2a 0a 23 20 74 72 79 20  s}.}..#**.# try 
2b50: 74 6f 20 67 65 74 20 6f 70 74 69 6f 6e 73 20 66  to get options f
2b60: 6f 72 20 63 6f 6d 6d 61 6e 64 73 20 77 68 69 63  or commands whic
2b70: 68 0a 23 20 61 6c 6c 6f 77 20 60 63 6f 6e 66 69  h.# allow `confi
2b80: 67 75 72 65 27 20 28 63 67 65 74 29 2e 0a 23 20  gure' (cget)..# 
2b90: 40 70 61 72 61 6d 20 63 6f 6d 6d 61 6e 64 2e 0a  @param command..
2ba0: 23 20 40 70 61 72 61 6d 20 6f 70 74 69 6f 6e 73  # @param options
2bb0: 54 20 77 68 65 72 65 20 74 68 65 20 74 61 62 6c  T where the tabl
2bc0: 65 20 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64  e will be stored
2bd0: 2e 0a 23 20 40 72 65 74 75 72 6e 20 6e 75 6d 62  ..# @return numb
2be0: 65 72 20 6f 66 20 6f 70 74 69 6f 6e 73 0a 23 20  er of options.# 
2bf0: 40 64 61 74 65 20 53 65 70 2d 31 34 2d 31 39 39  @date Sep-14-199
2c00: 39 0a 23 0a 70 72 6f 63 20 4f 70 74 69 6f 6e 54  9.#.proc OptionT
2c10: 61 62 6c 65 20 7b 63 6d 64 20 6f 70 74 69 6f 6e  able {cmd option
2c20: 73 54 7d 20 7b 0a 09 75 70 76 61 72 20 24 6f 70  sT} {..upvar $op
2c30: 74 69 6f 6e 73 54 20 6f 70 74 69 6f 6e 73 0a 09  tionsT options..
2c40: 23 20 66 69 72 73 74 20 77 65 20 62 75 69 6c 64  # first we build
2c50: 20 61 6e 20 6f 70 74 69 6f 6e 20 74 61 62 6c 65   an option table
2c60: 2e 0a 09 23 20 57 65 20 61 6c 77 61 79 73 20 75  ...# We always u
2c70: 73 65 20 60 63 6f 6e 66 69 67 75 72 65 27 20 68  se `configure' h
2c80: 65 72 65 2c 0a 09 23 20 62 65 63 61 75 73 65 20  ere,..# because 
2c90: 63 67 65 74 20 77 69 6c 6c 20 6e 6f 74 20 72 65  cget will not re
2ca0: 74 75 72 6e 20 74 68 65 0a 09 23 20 6f 70 74 69  turn the..# opti
2cb0: 6f 6e 20 74 61 62 6c 65 2e 0a 09 23 0a 09 69 66  on table...#..if
2cc0: 20 7b 5b 63 61 74 63 68 20 5b 6c 69 73 74 20 73   {[catch [list s
2cd0: 65 74 20 6f 70 74 69 6f 6e 5f 74 61 62 6c 65 20  et option_table 
2ce0: 5b 65 76 61 6c 20 24 7b 63 6d 64 7d 20 63 6f 6e  [eval ${cmd} con
2cf0: 66 69 67 75 72 65 5d 5d 20 6d 73 67 5d 7d 20 7b  figure]] msg]} {
2d00: 0a 09 09 72 65 74 75 72 6e 20 30 0a 09 7d 0a 09  ...return 0..}..
2d10: 73 65 74 20 72 65 74 76 61 6c 20 30 0a 09 66 6f  set retval 0..fo
2d20: 72 65 61 63 68 20 6f 70 74 6c 69 6e 65 20 24 7b  reach optline ${
2d30: 6f 70 74 69 6f 6e 5f 74 61 62 6c 65 7d 20 7b 0a  option_table} {.
2d40: 09 09 69 66 20 7b 35 20 3d 3d 20 5b 6c 6c 65 6e  ..if {5 == [llen
2d50: 67 74 68 20 24 7b 6f 70 74 6c 69 6e 65 7d 5d 7d  gth ${optline}]}
2d60: 20 7b 0a 09 09 09 23 20 74 6b 20 72 65 74 75 72   {....# tk retur
2d70: 6e 73 20 61 20 6c 69 73 74 20 6f 66 20 6c 65 6e  ns a list of len
2d80: 67 74 68 20 35 0a 09 09 09 6c 61 70 70 65 6e 64  gth 5....lappend
2d90: 20 6f 70 74 69 6f 6e 73 28 73 77 69 74 63 68 65   options(switche
2da0: 73 29 20 5b 6c 69 6e 64 65 78 20 24 7b 6f 70 74  s) [lindex ${opt
2db0: 6c 69 6e 65 7d 20 30 5d 0a 09 09 09 6c 61 70 70  line} 0]....lapp
2dc0: 65 6e 64 20 6f 70 74 69 6f 6e 73 28 76 61 6c 75  end options(valu
2dd0: 65 29 20 20 20 20 5b 6c 69 6e 64 65 78 20 24 7b  e)    [lindex ${
2de0: 6f 70 74 6c 69 6e 65 7d 20 34 5d 0a 09 09 09 69  optline} 4]....i
2df0: 6e 63 72 20 72 65 74 76 61 6c 0a 09 09 7d 20 65  ncr retval...} e
2e00: 6c 73 65 69 66 20 7b 33 20 3d 3d 20 5b 6c 6c 65  lseif {3 == [lle
2e10: 6e 67 74 68 20 24 7b 6f 70 74 6c 69 6e 65 7d 5d  ngth ${optline}]
2e20: 7d 20 7b 0a 09 09 09 23 20 69 74 63 6c 20 72 65  } {....# itcl re
2e30: 74 75 72 6e 73 20 61 20 6c 69 73 74 20 6f 66 20  turns a list of 
2e40: 6c 65 6e 67 74 68 20 33 0a 09 09 09 6c 61 70 70  length 3....lapp
2e50: 65 6e 64 20 6f 70 74 69 6f 6e 73 28 73 77 69 74  end options(swit
2e60: 63 68 65 73 29 20 5b 6c 69 6e 64 65 78 20 24 7b  ches) [lindex ${
2e70: 6f 70 74 6c 69 6e 65 7d 20 30 5d 0a 09 09 09 6c  optline} 0]....l
2e80: 61 70 70 65 6e 64 20 6f 70 74 69 6f 6e 73 28 76  append options(v
2e90: 61 6c 75 65 29 20 20 20 20 5b 6c 69 6e 64 65 78  alue)    [lindex
2ea0: 20 24 7b 6f 70 74 6c 69 6e 65 7d 20 32 5d 0a 09   ${optline} 2]..
2eb0: 09 09 69 6e 63 72 20 72 65 74 76 61 6c 0a 09 09  ..incr retval...
2ec0: 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20 24 72 65  }..}..return $re
2ed0: 74 76 61 6c 0a 7d 0a 0a 23 2a 2a 0a 23 20 74 72  tval.}..#**.# tr
2ee0: 79 20 74 6f 20 63 6f 6d 70 6c 65 74 65 20 61 20  y to complete a 
2ef0: 60 63 6d 64 20 63 6f 6e 66 69 67 75 72 65 7c 63  `cmd configure|c
2f00: 67 65 74 20 2e 2e 27 20 66 72 6f 6d 20 74 68 65  get ..' from the
2f10: 20 63 6f 6d 6d 61 6e 64 27 73 20 6f 70 74 69 6f   command's optio
2f20: 6e 73 2e 0a 23 20 40 70 61 72 61 6d 20 20 20 74  ns..# @param   t
2f30: 65 78 74 20 73 74 61 72 74 20 6c 69 6e 65 20 63  ext start line c
2f40: 6d 64 2c 20 73 74 61 6e 64 61 72 64 20 74 63 6c  md, standard tcl
2f50: 72 65 61 64 6c 69 6e 65 43 6f 6d 70 6c 65 74 65  readlineComplete
2f60: 72 20 61 72 67 75 6d 65 6e 74 73 2e 0a 23 20 40  r arguments..# @
2f70: 72 65 74 75 72 6e 20 20 2d 2d 20 61 20 66 6c 61  return  -- a fla
2f80: 67 20 69 6e 64 69 63 61 74 69 6e 67 2c 20 69 66  g indicating, if
2f90: 20 28 63 67 65 74 7c 63 6f 6e 66 69 67 75 72 65   (cget|configure
2fa0: 29 20 77 61 73 20 66 6f 75 6e 64 2e 0a 23 20 40  ) was found..# @
2fb0: 72 65 74 75 72 6e 20 20 72 65 73 75 6c 74 54 20  return  resultT 
2fc0: 2d 2d 20 61 20 74 63 6c 72 65 61 64 6c 69 6e 65  -- a tclreadline
2fd0: 20 63 6f 6d 70 6c 65 74 65 72 20 66 6f 72 6d 61   completer forma
2fe0: 74 74 65 64 20 73 74 72 69 6e 67 2e 0a 23 20 40  tted string..# @
2ff0: 64 61 74 65 20 20 20 20 53 65 70 2d 31 34 2d 31  date    Sep-14-1
3000: 39 39 39 0a 23 0a 70 72 6f 63 20 43 6f 6d 70 6c  999.#.proc Compl
3010: 65 74 65 46 72 6f 6d 4f 70 74 69 6f 6e 73 20 7b  eteFromOptions {
3020: 74 65 78 74 20 73 74 61 72 74 20 6c 69 6e 65 20  text start line 
3030: 72 65 73 75 6c 74 54 7d 20 7b 0a 0a 09 75 70 76  resultT} {...upv
3040: 61 72 20 24 7b 72 65 73 75 6c 74 54 7d 20 72 65  ar ${resultT} re
3050: 73 75 6c 74 0a 09 73 65 74 20 72 65 73 75 6c 74  sult..set result
3060: 20 22 22 0a 0a 09 23 20 63 68 65 63 6b 20 69 66   ""...# check if
3070: 20 65 69 74 68 65 72 20 60 63 6f 6e 66 69 67 75   either `configu
3080: 72 65 27 20 6f 72 20 60 63 67 65 74 27 20 69 73  re' or `cget' is
3090: 20 70 72 65 73 65 6e 74 2e 0a 09 23 0a 09 73 65   present...#..se
30a0: 74 20 6c 73 74 20 5b 50 72 6f 70 65 72 4c 69 73  t lst [ProperLis
30b0: 74 20 24 7b 6c 69 6e 65 7d 5d 0a 09 66 6f 72 65  t ${line}]..fore
30c0: 61 63 68 20 6b 65 79 77 6f 72 64 20 7b 63 6f 6e  ach keyword {con
30d0: 66 69 67 75 72 65 20 63 67 65 74 7d 20 7b 0a 09  figure cget} {..
30e0: 09 73 65 74 20 69 64 78 20 5b 6c 73 65 61 72 63  .set idx [lsearc
30f0: 68 20 24 7b 6c 73 74 7d 20 24 7b 6b 65 79 77 6f  h ${lst} ${keywo
3100: 72 64 7d 5d 0a 09 09 69 66 20 7b 2d 31 20 21 3d  rd}]...if {-1 !=
3110: 20 24 7b 69 64 78 7d 7d 20 7b 0a 09 09 09 62 72   ${idx}} {....br
3120: 65 61 6b 0a 09 09 7d 0a 09 7d 0a 09 69 66 20 7b  eak...}..}..if {
3130: 2d 31 20 3d 3d 20 24 7b 69 64 78 7d 7d 20 7b 0a  -1 == ${idx}} {.
3140: 09 09 72 65 74 75 72 6e 20 30 0a 09 7d 0a 0a 09  ..return 0..}...
3150: 69 66 20 7b 5b 72 65 67 65 78 70 20 7b 28 63 67  if {[regexp {(cg
3160: 65 74 7c 63 6f 6e 66 69 67 75 72 65 29 24 7d 20  et|configure)$} 
3170: 24 7b 6c 69 6e 65 7d 5d 7d 20 7b 0a 09 09 23 20  ${line}]} {...# 
3180: 77 65 20 61 72 65 20 61 74 20 74 68 65 20 65 6e  we are at the en
3190: 64 20 6f 66 20 28 63 6f 6e 66 69 67 75 72 65 7c  d of (configure|
31a0: 63 67 65 74 29 0a 09 09 23 20 62 75 74 20 74 68  cget)...# but th
31b0: 65 72 65 27 73 20 6e 6f 20 73 70 61 63 65 20 79  ere's no space y
31c0: 65 74 2e 0a 09 09 23 0a 09 09 73 65 74 20 72 65  et....#...set re
31d0: 73 75 6c 74 20 24 7b 74 65 78 74 7d 0a 09 09 72  sult ${text}...r
31e0: 65 74 75 72 6e 20 31 0a 09 7d 0a 0a 09 23 20 73  eturn 1..}...# s
31f0: 65 70 61 72 61 74 65 20 74 68 65 20 63 6f 6d 6d  eparate the comm
3200: 61 6e 64 2c 20 62 75 74 20 65 78 63 6c 75 64 65  and, but exclude
3210: 20 28 63 67 65 74 7c 63 6f 6e 66 69 67 75 72 65   (cget|configure
3220: 29 0a 09 23 20 62 65 63 61 75 73 65 20 63 67 65  )..# because cge
3230: 74 20 77 6f 6e 27 74 20 72 65 74 75 72 6e 20 74  t won't return t
3240: 68 65 20 6f 70 74 69 6f 6e 20 74 61 62 6c 65 2e  he option table.
3250: 20 49 6e 73 74 65 61 64 0a 09 23 20 4f 70 74 69   Instead..# Opti
3260: 6f 6e 54 61 62 6c 65 20 61 6c 77 61 79 73 20 75  onTable always u
3270: 73 65 73 20 60 63 6f 6e 66 69 67 75 72 65 27 20  ses `configure' 
3280: 74 6f 20 67 65 74 20 74 68 65 0a 09 23 20 6f 70  to get the..# op
3290: 74 69 6f 6e 20 74 61 62 6c 65 2e 0a 09 23 0a 09  tion table...#..
32a0: 73 65 74 20 63 6d 64 20 5b 6c 72 61 6e 67 65 20  set cmd [lrange 
32b0: 24 7b 6c 73 74 7d 20 30 20 5b 65 78 70 72 20 24  ${lst} 0 [expr $
32c0: 7b 69 64 78 7d 20 2d 20 31 5d 5d 0a 0a 09 54 72  {idx} - 1]]...Tr
32d0: 61 63 65 54 65 78 74 20 24 7b 63 6d 64 7d 0a 09  aceText ${cmd}..
32e0: 69 66 20 7b 30 20 3c 20 5b 4f 70 74 69 6f 6e 54  if {0 < [OptionT
32f0: 61 62 6c 65 20 24 7b 63 6d 64 7d 20 6f 70 74 69  able ${cmd} opti
3300: 6f 6e 73 5d 7d 20 7b 0a 0a 09 09 73 65 74 20 70  ons]} {....set p
3310: 72 65 76 20 5b 50 72 65 76 69 6f 75 73 57 6f 72  rev [PreviousWor
3320: 64 20 24 7b 73 74 61 72 74 7d 20 24 7b 6c 69 6e  d ${start} ${lin
3330: 65 7d 5d 0a 09 09 69 66 20 7b 2d 31 20 21 3d 20  e}]...if {-1 != 
3340: 5b 73 65 74 20 66 6f 75 6e 64 20 5b 6c 73 65 61  [set found [lsea
3350: 72 63 68 20 2d 65 78 61 63 74 20 24 6f 70 74 69  rch -exact $opti
3360: 6f 6e 73 28 73 77 69 74 63 68 65 73 29 20 24 7b  ons(switches) ${
3370: 70 72 65 76 7d 5d 5d 7d 20 7b 0a 0a 09 09 09 23  prev}]]} {.....#
3380: 20 63 6f 6d 70 6c 65 74 65 20 6f 6e 6c 79 20 69   complete only i
3390: 66 20 74 68 65 20 75 73 65 72 20 68 61 73 20 6e  f the user has n
33a0: 6f 74 0a 09 09 09 23 20 61 6c 72 65 61 64 79 20  ot....# already 
33b0: 65 6e 74 65 72 65 64 20 73 6f 6d 65 74 68 69 6e  entered somethin
33c0: 67 20 68 65 72 65 2e 0a 09 09 09 23 0a 09 09 09  g here.....#....
33d0: 69 66 20 7b 21 5b 6c 6c 65 6e 67 74 68 20 24 7b  if {![llength ${
33e0: 74 65 78 74 7d 5d 7d 20 7b 0a 0a 09 09 09 09 23  text}]} {......#
33f0: 20 63 68 65 63 6b 20 66 69 72 73 74 2c 20 69 66   check first, if
3400: 20 74 68 65 20 53 70 65 63 69 66 69 63 53 77 69   the SpecificSwi
3410: 74 63 68 43 6f 6d 70 6c 65 74 65 72 0a 09 09 09  tchCompleter....
3420: 09 23 20 6b 6e 6f 77 73 20 73 6f 6d 65 74 68 69  .# knows somethi
3430: 6e 67 20 61 62 6f 75 74 20 74 68 69 73 20 73 77  ng about this sw
3440: 69 74 63 68 2e 20 28 6e 6f 74 65 20 74 68 61 74  itch. (note that
3450: 0a 09 09 09 09 23 20 60 70 72 65 76 27 20 63 6f  .....# `prev' co
3460: 6e 74 61 69 6e 73 20 74 68 65 20 73 77 69 74 63  ntains the switc
3470: 68 29 2e 20 54 68 65 20 60 30 27 20 61 73 20 6c  h). The `0' as l
3480: 61 73 74 0a 09 09 09 09 23 20 61 72 67 75 6d 65  ast.....# argume
3490: 6e 74 20 6d 61 6b 65 73 20 74 68 65 20 53 70 65  nt makes the Spe
34a0: 63 69 66 69 63 53 77 69 74 63 68 43 6f 6d 70 6c  cificSwitchCompl
34b0: 65 74 65 72 0a 09 09 09 09 23 20 72 65 74 75 72  eter.....# retur
34c0: 6e 69 6e 67 20 22 22 20 69 66 20 69 74 20 6b 6e  ning "" if it kn
34d0: 6f 77 73 20 6e 6f 74 68 69 6e 67 20 73 70 65 63  ows nothing spec
34e0: 69 66 69 63 0a 09 09 09 09 23 20 61 62 6f 75 74  ific.....# about
34f0: 20 74 68 69 73 20 73 77 69 74 63 68 2e 0a 09 09   this switch....
3500: 09 09 23 0a 09 09 09 09 73 65 74 20 76 61 6c 75  ..#.....set valu
3510: 65 73 20 5b 53 70 65 63 69 66 69 63 53 77 69 74  es [SpecificSwit
3520: 63 68 43 6f 6d 70 6c 65 74 65 72 20 5c 0a 09 09  chCompleter \...
3530: 09 09 24 7b 74 65 78 74 7d 20 24 7b 73 74 61 72  ..${text} ${star
3540: 74 7d 20 24 7b 6c 69 6e 65 7d 20 24 7b 70 72 65  t} ${line} ${pre
3550: 76 7d 20 30 5d 0a 0a 09 09 09 09 69 66 20 5b 73  v} 0]......if [s
3560: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 7b 76  tring length ${v
3570: 61 6c 75 65 73 7d 5d 20 7b 0a 09 09 09 09 09 73  alues}] {......s
3580: 65 74 20 72 65 73 75 6c 74 20 24 7b 76 61 6c 75  et result ${valu
3590: 65 73 7d 0a 09 09 09 09 09 72 65 74 75 72 6e 20  es}......return 
35a0: 31 0a 09 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09  1.....} else {..
35b0: 09 09 09 09 73 65 74 20 76 61 6c 20 5b 6c 69 6e  ....set val [lin
35c0: 64 65 78 20 24 6f 70 74 69 6f 6e 73 28 76 61 6c  dex $options(val
35d0: 75 65 29 20 24 7b 66 6f 75 6e 64 7d 5d 0a 09 09  ue) ${found}]...
35e0: 09 09 09 69 66 20 5b 73 74 72 69 6e 67 20 6c 65  ...if [string le
35f0: 6e 67 74 68 20 24 7b 76 61 6c 7d 5d 20 7b 0a 09  ngth ${val}] {..
3600: 09 09 09 09 09 23 20 72 65 74 75 72 6e 20 74 68  .....# return th
3610: 65 20 6f 6c 64 20 76 61 6c 75 65 20 6f 6e 6c 79  e old value only
3620: 2c 20 69 66 20 69 74 27 73 20 6e 6f 6e 2d 65 6d  , if it's non-em
3630: 70 74 79 2e 0a 09 09 09 09 09 09 23 20 55 73 65  pty........# Use
3640: 20 74 68 69 73 20 64 6f 75 62 6c 65 20 6c 69 73   this double lis
3650: 74 20 74 6f 20 71 75 6f 74 65 20 6f 70 74 69 6f  t to quote optio
3660: 6e 0a 09 09 09 09 09 09 23 20 76 61 6c 75 65 73  n.......# values
3670: 20 77 68 69 63 68 20 68 61 76 65 20 74 6f 20 62   which have to b
3680: 65 20 71 75 6f 74 65 64 2e 0a 09 09 09 09 09 09  e quoted........
3690: 23 0a 09 09 09 09 09 09 73 65 74 20 72 65 73 75  #.......set resu
36a0: 6c 74 20 5b 6c 69 73 74 20 5b 6c 69 73 74 20 24  lt [list [list $
36b0: 7b 76 61 6c 7d 5d 5d 0a 09 09 09 09 09 09 72 65  {val}]].......re
36c0: 74 75 72 6e 20 31 0a 09 09 09 09 09 7d 20 65 6c  turn 1......} el
36d0: 73 65 20 7b 0a 09 09 09 09 09 09 73 65 74 20 72  se {.......set r
36e0: 65 73 75 6c 74 20 22 22 0a 09 09 09 09 09 09 72  esult "".......r
36f0: 65 74 75 72 6e 20 31 0a 09 09 09 09 09 7d 0a 09  eturn 1......}..
3700: 09 09 09 7d 0a 09 09 09 7d 20 65 6c 73 65 20 7b  ...}....} else {
3710: 0a 09 09 09 09 73 65 74 20 72 65 73 75 6c 74 20  .....set result 
3720: 5b 53 70 65 63 69 66 69 63 53 77 69 74 63 68 43  [SpecificSwitchC
3730: 6f 6d 70 6c 65 74 65 72 20 5c 0a 09 09 09 09 24  ompleter \.....$
3740: 7b 74 65 78 74 7d 20 24 7b 73 74 61 72 74 7d 20  {text} ${start} 
3750: 24 7b 6c 69 6e 65 7d 20 24 7b 70 72 65 76 7d 20  ${line} ${prev} 
3760: 31 5d 0a 09 09 09 09 72 65 74 75 72 6e 20 31 0a  1].....return 1.
3770: 09 09 09 7d 0a 0a 09 09 7d 20 65 6c 73 65 20 7b  ...}....} else {
3780: 0a 09 09 09 73 65 74 20 72 65 73 75 6c 74 20 5b  ....set result [
3790: 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74  CompleteFromList
37a0: 20 24 7b 74 65 78 74 7d 20 5c 0a 09 09 09 5b 52   ${text} \....[R
37b0: 65 6d 6f 76 65 55 73 65 64 4f 70 74 69 6f 6e 73  emoveUsedOptions
37c0: 20 24 7b 6c 69 6e 65 7d 20 24 6f 70 74 69 6f 6e   ${line} $option
37d0: 73 28 73 77 69 74 63 68 65 73 29 5d 5d 0a 09 09  s(switches)]]...
37e0: 09 72 65 74 75 72 6e 20 31 0a 09 09 7d 0a 09 7d  .return 1...}..}
37f0: 0a 09 72 65 74 75 72 6e 20 31 0a 7d 0a 0a 70 72  ..return 1.}..pr
3800: 6f 63 20 4f 62 6a 65 63 74 43 6c 61 73 73 43 6f  oc ObjectClassCo
3810: 6d 70 6c 65 74 65 72 20 7b 74 65 78 74 20 73 74  mpleter {text st
3820: 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73  art end line pos
3830: 20 72 65 73 75 6c 74 54 7d 20 7b 0a 09 75 70 76   resultT} {..upv
3840: 61 72 20 24 7b 72 65 73 75 6c 74 54 7d 20 72 65  ar ${resultT} re
3850: 73 75 6c 74 0a 09 73 65 74 20 63 6d 64 20 5b 4c  sult..set cmd [L
3860: 69 6e 64 65 78 20 24 7b 6c 69 6e 65 7d 20 30 5d  index ${line} 0]
3870: 0a 09 69 66 20 7b 22 2e 22 20 3d 3d 20 5b 73 74  ..if {"." == [st
3880: 72 69 6e 67 20 69 6e 64 65 78 20 24 7b 6c 69 6e  ring index ${lin
3890: 65 7d 20 30 5d 7d 20 7b 0a 09 09 23 20 69 74 27  e} 0]} {...# it'
38a0: 73 20 61 20 77 69 64 67 65 74 2e 20 54 72 79 20  s a widget. Try 
38b0: 74 6f 20 67 65 74 20 69 74 27 73 20 63 6c 61 73  to get it's clas
38c0: 73 20 6e 61 6d 65 2e 0a 09 09 23 0a 09 09 69 66  s name....#...if
38d0: 20 7b 21 5b 63 61 74 63 68 20 5b 6c 69 73 74 20   {![catch [list 
38e0: 73 65 74 20 63 6c 61 73 73 20 5b 77 69 6e 66 6f  set class [winfo
38f0: 20 63 6c 61 73 73 20 5b 4c 69 6e 64 65 78 20 24   class [Lindex $
3900: 7b 6c 69 6e 65 7d 20 30 5d 5d 5d 5d 7d 20 7b 0a  {line} 0]]]]} {.
3910: 09 09 09 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c  ...if {[string l
3920: 65 6e 67 74 68 20 5b 69 6e 66 6f 20 70 72 6f 63  ength [info proc
3930: 20 24 7b 63 6c 61 73 73 7d 4f 62 6a 5d 5d 7d 20   ${class}Obj]]} 
3940: 7b 0a 09 09 09 09 73 65 74 20 72 65 73 75 6c 74  {.....set result
3950: 20 5b 24 7b 63 6c 61 73 73 7d 4f 62 6a 20 24 7b   [${class}Obj ${
3960: 74 65 78 74 7d 20 24 7b 73 74 61 72 74 7d 20 24  text} ${start} $
3970: 7b 65 6e 64 7d 20 24 7b 6c 69 6e 65 7d 20 24 7b  {end} ${line} ${
3980: 70 6f 73 7d 5d 0a 09 09 09 09 23 20 70 75 74 73  pos}].....# puts
3990: 20 73 74 64 65 72 72 20 72 65 73 75 6c 74 3d 7c   stderr result=|
39a0: 24 72 65 73 75 6c 74 7c 0a 09 09 09 09 23 20 6a  $result|.....# j
39b0: 6f 7a 65 2c 20 54 68 75 20 53 65 70 20 33 30 20  oze, Thu Sep 30 
39c0: 31 36 3a 34 33 3a 31 37 20 31 39 39 39 0a 09 09  16:43:17 1999...
39d0: 09 09 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65  ..if {[string le
39e0: 6e 67 74 68 20 24 72 65 73 75 6c 74 5d 7d 20 7b  ngth $result]} {
39f0: 0a 09 09 09 09 09 72 65 74 75 72 6e 20 31 0a 09  ......return 1..
3a00: 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09  ...} else {.....
3a10: 09 72 65 74 75 72 6e 20 30 0a 09 09 09 09 7d 0a  .return 0.....}.
3a20: 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09  ...} else {.....
3a30: 72 65 74 75 72 6e 20 30 0a 09 09 09 7d 0a 09 09  return 0....}...
3a40: 7d 0a 09 7d 0a 09 69 66 20 7b 21 5b 63 61 74 63  }..}..if {![catc
3a50: 68 20 7b 73 65 74 20 74 79 70 65 20 5b 69 6d 61  h {set type [ima
3a60: 67 65 20 74 79 70 65 20 24 63 6d 64 5d 7d 5d 7d  ge type $cmd]}]}
3a70: 20 7b 0a 09 09 73 77 69 74 63 68 20 2d 2d 20 24   {...switch -- $
3a80: 7b 74 79 70 65 7d 20 7b 0a 09 09 09 70 68 6f 74  {type} {....phot
3a90: 6f 20 7b 0a 09 09 09 09 73 65 74 20 72 65 73 75  o {.....set resu
3aa0: 6c 74 20 5b 50 68 6f 74 6f 4f 62 6a 20 24 7b 74  lt [PhotoObj ${t
3ab0: 65 78 74 7d 20 24 7b 73 74 61 72 74 7d 20 24 7b  ext} ${start} ${
3ac0: 65 6e 64 7d 20 24 7b 6c 69 6e 65 7d 20 24 7b 70  end} ${line} ${p
3ad0: 6f 73 7d 5d 0a 09 09 09 09 72 65 74 75 72 6e 20  os}].....return 
3ae0: 31 0a 09 09 09 7d 0a 09 09 09 64 65 66 61 75 6c  1....}....defaul
3af0: 74 20 7b 0a 09 09 09 09 23 20 6c 65 74 20 74 68  t {.....# let th
3b00: 65 20 66 61 6c 6c 62 61 63 6b 20 63 6f 6d 70 6c  e fallback compl
3b10: 65 74 65 72 73 20 64 6f 20 74 68 65 20 6a 6f 62  eters do the job
3b20: 2e 0a 09 09 09 09 72 65 74 75 72 6e 20 30 0a 09  ......return 0..
3b30: 09 09 7d 0a 09 09 7d 0a 09 7d 0a 09 72 65 74 75  ..}...}..}..retu
3b40: 72 6e 20 30 0a 7d 0a 0a 70 72 6f 63 20 43 6f 6d  rn 0.}..proc Com
3b50: 70 6c 65 74 65 46 72 6f 6d 4f 70 74 69 6f 6e 73  pleteFromOptions
3b60: 4f 72 53 75 62 43 6d 64 73 20 7b 74 65 78 74 20  OrSubCmds {text 
3b70: 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70  start end line p
3b80: 6f 73 7d 20 7b 0a 09 69 66 20 5b 43 6f 6d 70 6c  os} {..if [Compl
3b90: 65 74 65 46 72 6f 6d 4f 70 74 69 6f 6e 73 20 24  eteFromOptions $
3ba0: 7b 74 65 78 74 7d 20 24 7b 73 74 61 72 74 7d 20  {text} ${start} 
3bb0: 24 7b 6c 69 6e 65 7d 20 66 72 6f 6d 5f 6f 70 74  ${line} from_opt
3bc0: 73 5d 20 7b 0a 09 09 23 20 61 6c 77 61 79 73 20  s] {...# always 
3bd0: 72 65 74 75 72 6e 2c 20 69 66 20 43 6f 6d 70 6c  return, if Compl
3be0: 65 74 65 46 72 6f 6d 4f 70 74 69 6f 6e 73 20 72  eteFromOptions r
3bf0: 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 2c  eturns non-zero,
3c00: 0a 09 09 23 20 74 68 61 74 20 6d 65 61 6e 73 20  ...# that means 
3c10: 28 63 6f 6e 66 69 67 75 72 65 7c 63 67 65 74 29  (configure|cget)
3c20: 20 77 65 72 65 20 70 72 65 73 65 6e 74 2e 20 54   were present. T
3c30: 68 69 73 20 65 6e 73 75 72 65 73 0a 09 09 23 20  his ensures...# 
3c40: 74 68 61 74 20 54 72 79 53 75 62 43 6d 64 73 20  that TrySubCmds 
3c50: 77 69 6c 6c 20 6e 6f 74 20 63 6f 6e 66 69 67 75  will not configu
3c60: 72 65 20 73 6f 6d 65 74 68 69 6e 67 20 62 79 20  re something by 
3c70: 63 68 61 6e 63 65 2e 0a 09 09 23 0a 09 09 72 65  chance....#...re
3c80: 74 75 72 6e 20 24 7b 66 72 6f 6d 5f 6f 70 74 73  turn ${from_opts
3c90: 7d 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 09 23 20  }..} else {...# 
3ca0: 70 75 74 73 20 73 74 64 65 72 72 20 5c 6e 5c 6e  puts stderr \n\n
3cb0: 5b 6c 72 61 6e 67 65 20 5b 50 72 6f 70 65 72 4c  [lrange [ProperL
3cc0: 69 73 74 20 24 7b 6c 69 6e 65 7d 5d 20 30 20 5b  ist ${line}] 0 [
3cd0: 65 78 70 72 20 24 70 6f 73 20 2d 20 31 5d 5d 5c  expr $pos - 1]]\
3ce0: 6e 0a 09 09 72 65 74 75 72 6e 20 5b 54 72 79 53  n...return [TryS
3cf0: 75 62 43 6d 64 73 20 24 7b 74 65 78 74 7d 20 5c  ubCmds ${text} \
3d00: 0a 09 09 5b 6c 72 61 6e 67 65 20 5b 50 72 6f 70  ...[lrange [Prop
3d10: 65 72 4c 69 73 74 20 24 7b 6c 69 6e 65 7d 5d 20  erList ${line}] 
3d20: 30 20 5b 65 78 70 72 20 24 70 6f 73 20 2d 20 31  0 [expr $pos - 1
3d30: 5d 5d 5d 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22  ]]]..}..return "
3d40: 22 0a 7d 0a 0a 23 2a 2a 0a 23 20 54 4f 44 4f 3a  ".}..#**.# TODO:
3d50: 20 73 68 69 74 2e 20 6d 61 6b 65 20 74 68 69 73   shit. make this
3d60: 20 62 65 74 74 65 72 21 0a 23 20 40 70 61 72 61   better!.# @para
3d70: 6d 20 20 74 65 78 74 2c 20 61 20 73 74 64 20 63  m  text, a std c
3d80: 6f 6d 70 6c 65 74 65 72 20 61 72 67 75 6d 65 6e  ompleter argumen
3d90: 74 20 28 63 75 72 72 65 6e 74 20 77 6f 72 64 29  t (current word)
3da0: 2e 0a 23 20 40 70 61 72 61 6d 20 20 66 75 6c 6c  ..# @param  full
3db0: 70 61 72 74 2c 20 74 68 65 20 66 75 6c 6c 20 74  part, the full t
3dc0: 65 78 74 20 6f 66 20 74 68 65 20 63 75 72 72 65  ext of the curre
3dd0: 6e 74 20 70 6f 73 69 74 69 6f 6e 2e 0a 23 20 40  nt position..# @
3de0: 70 61 72 61 6d 20 20 6c 73 74 2c 20 74 68 65 20  param  lst, the 
3df0: 6c 69 73 74 20 74 6f 20 63 6f 6d 70 6c 65 74 65  list to complete
3e00: 20 66 72 6f 6d 2e 0a 23 20 40 70 61 72 61 6d 20   from..# @param 
3e10: 20 70 72 65 2c 20 6c 65 61 64 69 6e 67 20 60 71   pre, leading `q
3e20: 75 6f 74 65 27 2e 0a 23 20 40 70 61 72 61 6d 20  uote'..# @param 
3e30: 20 73 65 70 2c 20 77 6f 72 64 20 73 65 70 61 72   sep, word separ
3e40: 61 74 6f 72 2e 0a 23 20 40 70 61 72 61 6d 20 20  ator..# @param  
3e50: 70 6f 73 74 2c 20 74 72 61 69 6c 69 6e 67 20 60  post, trailing `
3e60: 71 75 6f 74 65 27 2e 0a 23 20 40 72 65 74 75 72  quote'..# @retur
3e70: 6e 20 61 20 66 6f 72 6d 61 74 74 65 64 20 63 6f  n a formatted co
3e80: 6d 70 6c 65 74 65 72 20 73 74 72 69 6e 67 2e 0a  mpleter string..
3e90: 23 20 40 64 61 74 65 20 20 20 53 65 70 2d 31 35  # @date   Sep-15
3ea0: 2d 31 39 39 39 0a 23 0a 70 72 6f 63 20 43 6f 6d  -1999.#.proc Com
3eb0: 70 6c 65 74 65 4c 69 73 74 46 72 6f 6d 4c 69 73  pleteListFromLis
3ec0: 74 20 7b 74 65 78 74 20 66 75 6c 6c 70 61 72 74  t {text fullpart
3ed0: 20 6c 73 74 20 70 72 65 20 73 65 70 20 70 6f 73   lst pre sep pos
3ee0: 74 7d 20 7b 0a 0a 09 23 20 70 75 74 73 20 73 74  t} {...# puts st
3ef0: 64 65 72 72 20 22 22 0a 09 23 20 70 75 74 73 20  derr ""..# puts 
3f00: 73 74 64 65 72 72 20 74 65 78 74 3d 7c 24 74 65  stderr text=|$te
3f10: 78 74 7c 0a 09 23 20 70 75 74 73 20 73 74 64 65  xt|..# puts stde
3f20: 72 72 20 6c 73 74 3d 7c 24 6c 73 74 7c 0a 09 23  rr lst=|$lst|..#
3f30: 20 70 75 74 73 20 73 74 64 65 72 72 20 70 72 65   puts stderr pre
3f40: 3d 7c 24 70 72 65 7c 0a 09 23 20 70 75 74 73 20  =|$pre|..# puts 
3f50: 73 74 64 65 72 72 20 73 65 70 3d 7c 24 73 65 70  stderr sep=|$sep
3f60: 7c 0a 09 23 20 70 75 74 73 20 73 74 64 65 72 72  |..# puts stderr
3f70: 20 70 6f 73 74 3d 7c 24 70 6f 73 74 7c 0a 0a 09   post=|$post|...
3f80: 69 66 20 7b 21 5b 73 74 72 69 6e 67 20 6c 65 6e  if {![string len
3f90: 67 74 68 20 24 7b 66 75 6c 6c 70 61 72 74 7d 5d  gth ${fullpart}]
3fa0: 7d 20 7b 0a 0a 09 09 23 20 6e 6f 74 68 69 6e 67  } {....# nothing
3fb0: 20 74 79 70 65 64 20 73 6f 20 66 61 72 2e 20 49   typed so far. I
3fc0: 6e 73 65 72 74 20 61 20 24 70 72 65 0a 09 09 23  nsert a $pre...#
3fd0: 20 61 6e 64 20 69 6e 68 69 62 69 74 20 66 75 72   and inhibit fur
3fe0: 74 68 65 72 20 63 6f 6d 70 6c 65 74 69 6f 6e 2e  ther completion.
3ff0: 0a 09 09 23 0a 09 09 72 65 74 75 72 6e 20 5b 6c  ...#...return [l
4000: 69 73 74 20 24 7b 70 72 65 7d 20 7b 7d 5d 0a 0a  ist ${pre} {}]..
4010: 09 7d 20 65 6c 73 65 69 66 20 7b 24 7b 70 6f 73  .} elseif {${pos
4020: 74 7d 20 3d 3d 20 5b 53 74 72 69 6e 67 20 69 6e  t} == [String in
4030: 64 65 78 20 24 7b 74 65 78 74 7d 20 65 6e 64 5d  dex ${text} end]
4040: 7d 20 7b 0a 0a 09 09 23 20 66 69 6e 61 6c 69 7a  } {....# finaliz
4050: 65 2c 20 61 70 70 65 6e 64 20 74 68 65 20 70 6f  e, append the po
4060: 73 74 20 61 6e 64 20 61 20 73 70 61 63 65 2e 0a  st and a space..
4070: 09 09 23 0a 09 09 73 65 74 20 64 69 66 66 20 5c  ..#...set diff \
4080: 0a 09 09 5b 65 78 70 72 20 5b 43 6f 75 6e 74 43  ...[expr [CountC
4090: 68 61 72 20 24 7b 66 75 6c 6c 70 61 72 74 7d 20  har ${fullpart} 
40a0: 24 7b 70 72 65 7d 5d 20 2d 20 5b 43 6f 75 6e 74  ${pre}] - [Count
40b0: 43 68 61 72 20 24 7b 66 75 6c 6c 70 61 72 74 7d  Char ${fullpart}
40c0: 20 24 7b 70 6f 73 74 7d 5d 5d 0a 09 09 66 6f 72   ${post}]]...for
40d0: 20 7b 73 65 74 20 69 20 30 7d 20 7b 24 7b 69 7d   {set i 0} {${i}
40e0: 20 3c 20 24 7b 64 69 66 66 7d 7d 20 7b 69 6e 63   < ${diff}} {inc
40f0: 72 20 69 7d 20 7b 0a 09 09 09 61 70 70 65 6e 64  r i} {....append
4100: 20 74 65 78 74 20 24 7b 70 6f 73 74 7d 0a 09 09   text ${post}...
4110: 7d 0a 09 09 61 70 70 65 6e 64 20 74 65 78 74 20  }...append text 
4120: 22 20 22 0a 09 09 72 65 74 75 72 6e 20 24 7b 74  " "...return ${t
4130: 65 78 74 7d 0a 0a 09 7d 20 65 6c 73 65 69 66 20  ext}...} elseif 
4140: 7b 21 5b 72 65 67 65 78 70 20 2d 2d 20 5e 5c 28  {![regexp -- ^\(
4150: 2e 2a 5c 5b 24 7b 70 72 65 7d 24 7b 73 65 70 7d  .*\[${pre}${sep}
4160: 5c 5d 5c 29 5c 28 5c 5b 5e 24 7b 70 72 65 7d 24  \]\)\(\[^${pre}$
4170: 7b 73 65 70 7d 5c 5d 2a 5c 29 24 20 5c 0a 09 09  {sep}\]*\)$ \...
4180: 24 7b 74 65 78 74 7d 20 61 6c 6c 20 6c 65 66 74  ${text} all left
4190: 20 72 69 67 68 74 5d 0a 09 7d 20 7b 0a 09 09 73   right]..} {...s
41a0: 65 74 20 6c 65 66 74 20 7b 7d 0a 09 09 73 65 74  et left {}...set
41b0: 20 72 69 67 68 74 20 24 7b 74 65 78 74 7d 0a 09   right ${text}..
41c0: 7d 0a 0a 09 23 20 54 72 61 63 65 56 61 72 20 6c  }...# TraceVar l
41d0: 65 66 74 0a 09 23 20 54 72 61 63 65 56 61 72 20  eft..# TraceVar 
41e0: 72 69 67 68 74 0a 0a 09 23 20 70 75 74 73 20 73  right...# puts s
41f0: 74 64 65 72 72 20 5c 6e 6c 65 66 74 3d 7c 24 6c  tderr \nleft=|$l
4200: 65 66 74 7c 0a 09 23 20 70 75 74 73 20 73 74 64  eft|..# puts std
4210: 65 72 72 20 5c 6e 72 69 67 68 74 3d 7c 24 72 69  err \nright=|$ri
4220: 67 68 74 7c 0a 09 73 65 74 20 65 78 61 63 74 5f  ght|..set exact_
4230: 6d 61 74 63 68 65 73 20 5b 4d 61 74 63 68 65 73  matches [Matches
4240: 46 72 6f 6d 4c 69 73 74 20 24 7b 72 69 67 68 74  FromList ${right
4250: 7d 20 24 7b 6c 73 74 7d 5d 0a 09 23 20 54 4f 44  } ${lst}]..# TOD
4260: 4f 20 74 68 69 73 20 69 73 20 61 77 6b 77 61 72  O this is awkwar
4270: 64 2e 20 54 68 69 6e 6b 20 6f 66 20 6d 61 6b 69  d. Think of maki
4280: 6e 67 20 69 74 20 62 65 74 74 65 72 21 0a 09 23  ng it better!..#
4290: 0a 09 69 66 20 7b 31 20 3d 3d 20 5b 6c 6c 65 6e  ..if {1 == [llen
42a0: 67 74 68 20 24 7b 65 78 61 63 74 5f 6d 61 74 63  gth ${exact_matc
42b0: 68 65 73 7d 5d 20 26 26 20 2d 31 20 21 3d 20 5b  hes}] && -1 != [
42c0: 6c 73 65 61 72 63 68 20 24 7b 6c 73 74 7d 20 24  lsearch ${lst} $
42d0: 7b 72 69 67 68 74 7d 5d 0a 09 7d 20 7b 0a 09 09  {right}]..} {...
42e0: 23 73 65 74 20 63 6f 6d 70 6c 65 74 69 6f 6e 20  #set completion 
42f0: 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73  [CompleteFromLis
4300: 74 20 24 7b 72 69 67 68 74 7d 20 5b 6c 69 73 74  t ${right} [list
4310: 20 24 7b 73 65 70 7d 20 24 7b 70 6f 73 74 7d 5d   ${sep} ${post}]
4320: 20 31 5d 0a 09 09 72 65 74 75 72 6e 20 5b 6c 69   1]...return [li
4330: 73 74 20 24 7b 6c 65 66 74 7d 24 7b 72 69 67 68  st ${left}${righ
4340: 74 7d 24 7b 73 65 70 7d 20 7b 7d 5d 0a 09 7d 20  t}${sep} {}]..} 
4350: 65 6c 73 65 20 7b 0a 09 09 73 65 74 20 63 6f 6d  else {...set com
4360: 70 6c 65 74 69 6f 6e 20 5b 43 6f 6d 70 6c 65 74  pletion [Complet
4370: 65 46 72 6f 6d 4c 69 73 74 20 24 7b 72 69 67 68  eFromList ${righ
4380: 74 7d 20 24 7b 6c 73 74 7d 20 22 22 20 31 5d 0a  t} ${lst} "" 1].
4390: 09 7d 0a 09 23 20 70 75 74 73 20 73 74 64 65 72  .}..# puts stder
43a0: 72 20 5c 6e 63 6f 6d 70 6c 65 74 69 6f 6e 3d 7c  r \ncompletion=|
43b0: 24 63 6f 6d 70 6c 65 74 69 6f 6e 7c 0a 09 69 66  $completion|..if
43c0: 20 7b 21 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74   {![string lengt
43d0: 68 20 5b 6c 69 6e 64 65 78 20 24 63 6f 6d 70 6c  h [lindex $compl
43e0: 65 74 69 6f 6e 20 30 5d 5d 7d 20 7b 0a 09 09 72  etion 0]]} {...r
43f0: 65 74 75 72 6e 20 5b 63 6f 6e 63 61 74 20 5b 6c  eturn [concat [l
4400: 69 73 74 20 24 7b 6c 65 66 74 7d 5d 20 5b 6c 72  ist ${left}] [lr
4410: 61 6e 67 65 20 24 63 6f 6d 70 6c 65 74 69 6f 6e  ange $completion
4420: 20 31 20 65 6e 64 5d 5d 0a 09 7d 20 65 6c 73 65   1 end]]..} else
4430: 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67  if {[string leng
4440: 74 68 20 24 7b 6c 65 66 74 7d 5d 7d 20 7b 0a 09  th ${left}]} {..
4450: 09 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 24 7b  .return [list ${
4460: 6c 65 66 74 7d 5d 24 7b 63 6f 6d 70 6c 65 74 69  left}]${completi
4470: 6f 6e 7d 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 09  on}..} else {...
4480: 72 65 74 75 72 6e 20 24 7b 63 6f 6d 70 6c 65 74  return ${complet
4490: 69 6f 6e 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20  ion}..}..return 
44a0: 22 22 0a 7d 0a 0a 70 72 6f 63 20 46 69 72 73 74  "".}..proc First
44b0: 4e 6f 6e 4f 70 74 69 6f 6e 20 7b 6c 69 6e 65 7d  NonOption {line}
44c0: 20 7b 0a 09 73 65 74 20 65 78 70 72 5f 70 6f 73   {..set expr_pos
44d0: 20 31 0a 09 66 6f 72 65 61 63 68 20 77 6f 72 64   1..foreach word
44e0: 20 5b 6c 72 61 6e 67 65 20 24 7b 6c 69 6e 65 7d   [lrange ${line}
44f0: 20 31 20 65 6e 64 5d 20 7b 3b 20 23 20 30 20 69   1 end] {; # 0 i
4500: 73 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 69 74  s the command it
4510: 73 65 6c 66 0a 09 09 69 66 20 7b 22 2d 22 20 21  self...if {"-" !
4520: 3d 20 5b 73 74 72 69 6e 67 20 69 6e 64 65 78 20  = [string index 
4530: 24 7b 77 6f 72 64 7d 20 30 5d 7d 20 7b 0a 09 09  ${word} 0]} {...
4540: 09 62 72 65 61 6b 0a 09 09 7d 20 65 6c 73 65 20  .break...} else 
4550: 7b 0a 09 09 09 69 6e 63 72 20 65 78 70 72 5f 70  {....incr expr_p
4560: 6f 73 0a 09 09 7d 0a 09 7d 0a 09 72 65 74 75 72  os...}..}..retur
4570: 6e 20 24 7b 65 78 70 72 5f 70 6f 73 7d 0a 7d 0a  n ${expr_pos}.}.
4580: 0a 70 72 6f 63 20 52 65 6d 6f 76 65 55 73 65 64  .proc RemoveUsed
4590: 4f 70 74 69 6f 6e 73 20 7b 6c 69 6e 65 20 6f 70  Options {line op
45a0: 74 73 20 7b 74 65 72 6d 69 6e 61 74 65 20 7b 7d  ts {terminate {}
45b0: 7d 7d 20 7b 0a 09 69 66 20 7b 5b 6c 6c 65 6e 67  }} {..if {[lleng
45c0: 74 68 20 24 7b 74 65 72 6d 69 6e 61 74 65 7d 5d  th ${terminate}]
45d0: 7d 20 7b 0a 09 09 69 66 20 7b 5b 72 65 67 65 78  } {...if {[regex
45e0: 70 20 2d 2d 20 24 7b 74 65 72 6d 69 6e 61 74 65  p -- ${terminate
45f0: 7d 20 24 7b 6c 69 6e 65 7d 5d 7d 20 7b 0a 09 09  } ${line}]} {...
4600: 09 72 65 74 75 72 6e 20 22 22 0a 09 09 7d 0a 09  .return ""...}..
4610: 7d 0a 09 73 65 74 20 6e 65 77 20 22 22 0a 09 66  }..set new ""..f
4620: 6f 72 65 61 63 68 20 77 6f 72 64 20 24 7b 6f 70  oreach word ${op
4630: 74 73 7d 20 7b 0a 09 09 69 66 20 7b 2d 31 20 3d  ts} {...if {-1 =
4640: 3d 20 5b 73 74 72 69 6e 67 20 66 69 72 73 74 20  = [string first 
4650: 24 7b 77 6f 72 64 7d 20 24 7b 6c 69 6e 65 7d 5d  ${word} ${line}]
4660: 7d 20 7b 0a 09 09 09 6c 61 70 70 65 6e 64 20 6e  } {....lappend n
4670: 65 77 20 24 7b 77 6f 72 64 7d 0a 09 09 7d 0a 09  ew ${word}...}..
4680: 7d 0a 0a 09 23 20 63 68 65 63 6b 20 69 66 20 74  }...# check if t
4690: 68 65 20 6c 61 73 74 20 77 6f 72 64 20 69 6e 20  he last word in 
46a0: 74 68 65 20 6c 69 6e 65 20 69 73 20 61 6e 20 6f  the line is an o
46b0: 70 74 69 6f 6e 73 0a 09 23 20 61 6e 64 20 69 66  ptions..# and if
46c0: 20 74 68 69 73 20 77 6f 72 64 20 69 73 20 61 74   this word is at
46d0: 20 74 68 65 20 76 65 72 79 20 65 6e 64 20 6f 66   the very end of
46e0: 20 74 68 65 20 6c 69 6e 65 2c 0a 09 23 20 74 68   the line,..# th
46f0: 61 74 20 6d 65 61 6e 73 20 6e 6f 20 73 70 61 63  at means no spac
4700: 65 20 61 66 74 65 72 2e 0a 09 23 20 49 66 20 74  e after...# If t
4710: 68 69 73 20 69 73 20 73 6f 2c 20 74 68 65 20 77  his is so, the w
4720: 6f 72 64 20 69 73 20 73 74 75 66 66 65 64 20 69  ord is stuffed i
4730: 6e 74 6f 20 74 68 65 20 72 65 73 75 6c 74 2c 0a  nto the result,.
4740: 09 23 20 73 6f 20 74 68 61 74 20 69 74 20 63 61  .# so that it ca
4750: 6e 20 62 65 20 63 6f 6d 70 6c 65 74 65 64 20 2d  n be completed -
4760: 2d 20 70 72 6f 62 61 62 6c 79 20 77 69 74 68 20  - probably with 
4770: 61 20 73 70 61 63 65 2e 0a 09 23 0a 09 73 65 74  a space...#..set
4780: 20 6c 61 73 74 20 5b 4c 69 6e 64 65 78 20 24 7b   last [Lindex ${
4790: 6c 69 6e 65 7d 20 65 6e 64 5d 0a 09 69 66 20 7b  line} end]..if {
47a0: 5b 65 78 70 72 20 5b 73 74 72 69 6e 67 20 6c 61  [expr [string la
47b0: 73 74 20 24 7b 6c 61 73 74 7d 20 24 7b 6c 69 6e  st ${last} ${lin
47c0: 65 7d 5d 20 2b 20 5b 73 74 72 69 6e 67 20 6c 65  e}] + [string le
47d0: 6e 67 74 68 20 24 7b 6c 61 73 74 7d 5d 5d 20 3d  ngth ${last}]] =
47e0: 3d 20 5c 0a 09 09 5b 73 74 72 69 6e 67 20 6c 65  = \...[string le
47f0: 6e 67 74 68 20 24 7b 6c 69 6e 65 7d 5d 0a 09 7d  ngth ${line}]..}
4800: 20 7b 0a 09 09 69 66 20 7b 2d 31 20 21 3d 20 5b   {...if {-1 != [
4810: 6c 73 65 61 72 63 68 20 24 7b 6f 70 74 73 7d 20  lsearch ${opts} 
4820: 24 7b 6c 61 73 74 7d 5d 7d 20 7b 0a 09 09 09 6c  ${last}]} {....l
4830: 61 70 70 65 6e 64 20 6e 65 77 20 24 7b 6c 61 73  append new ${las
4840: 74 7d 0a 09 09 7d 0a 09 7d 0a 0a 09 72 65 74 75  t}...}..}...retu
4850: 72 6e 20 5b 73 74 72 69 6e 67 20 74 72 69 6d 20  rn [string trim 
4860: 24 7b 6e 65 77 7d 5d 0a 7d 0a 0a 70 72 6f 63 20  ${new}].}..proc 
4870: 41 6c 65 72 74 20 7b 7d 20 7b 0a 09 3a 3a 74 63  Alert {} {..::tc
4880: 6c 72 65 61 64 6c 69 6e 65 3a 3a 72 65 61 64 6c  lreadline::readl
4890: 69 6e 65 20 62 65 6c 6c 0a 7d 0a 0a 23 2a 2a 0a  ine bell.}..#**.
48a0: 23 20 67 65 74 20 74 68 65 20 6c 6f 6e 67 65 73  # get the longes
48b0: 74 20 63 6f 6d 6d 6f 6e 20 63 6f 6d 70 6c 65 74  t common complet
48c0: 69 6f 6e 0a 23 20 65 2e 67 2e 20 73 74 72 20 3d  ion.# e.g. str =
48d0: 3d 20 7b 74 63 6c 5f 76 65 72 73 69 6f 6e 20 74  = {tcl_version t
48e0: 63 6c 72 65 61 64 6c 69 6e 65 5f 76 65 72 73 69  clreadline_versi
48f0: 6f 6e 20 74 63 6c 72 65 61 64 6c 69 6e 65 5f 6c  on tclreadline_l
4900: 69 62 72 61 72 79 7d 0a 23 20 2d 2d 3e 20 5b 43  ibrary}.# --> [C
4910: 6f 6d 70 6c 65 74 65 4c 6f 6e 67 65 73 74 20 24  ompleteLongest $
4920: 7b 73 74 72 7d 5d 20 3d 3d 20 22 74 63 6c 22 0a  {str}] == "tcl".
4930: 23 0a 70 72 6f 63 20 43 6f 6d 70 6c 65 74 65 4c  #.proc CompleteL
4940: 6f 6e 67 65 73 74 20 7b 73 74 72 7d 20 7b 0a 09  ongest {str} {..
4950: 23 20 70 75 74 73 20 73 74 64 65 72 72 20 73 74  # puts stderr st
4960: 72 3d 24 73 74 72 0a 09 73 65 74 20 6d 61 74 63  r=$str..set matc
4970: 68 30 20 5b 6c 69 6e 64 65 78 20 24 7b 73 74 72  h0 [lindex ${str
4980: 7d 20 30 5d 0a 09 73 65 74 20 6c 65 6e 30 20 5b  } 0]..set len0 [
4990: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 6d  string length $m
49a0: 61 74 63 68 30 5d 0a 09 73 65 74 20 6e 6f 5f 6d  atch0]..set no_m
49b0: 61 74 63 68 65 73 20 5b 6c 6c 65 6e 67 74 68 20  atches [llength 
49c0: 24 7b 73 74 72 7d 5d 0a 09 73 65 74 20 70 61 72  ${str}]..set par
49d0: 74 20 22 22 0a 09 66 6f 72 20 7b 73 65 74 20 69  t ""..for {set i
49e0: 20 30 7d 20 7b 24 69 20 3c 20 24 6c 65 6e 30 7d   0} {$i < $len0}
49f0: 20 7b 69 6e 63 72 20 69 7d 20 7b 0a 09 09 73 65   {incr i} {...se
4a00: 74 20 63 68 61 72 20 5b 73 74 72 69 6e 67 20 69  t char [string i
4a10: 6e 64 65 78 20 24 6d 61 74 63 68 30 20 24 69 5d  ndex $match0 $i]
4a20: 0a 09 09 66 6f 72 20 7b 73 65 74 20 6a 20 31 7d  ...for {set j 1}
4a30: 20 7b 24 6a 20 3c 20 24 6e 6f 5f 6d 61 74 63 68   {$j < $no_match
4a40: 65 73 7d 20 7b 69 6e 63 72 20 6a 7d 20 7b 0a 09  es} {incr j} {..
4a50: 09 09 69 66 20 7b 24 63 68 61 72 20 21 3d 20 5b  ..if {$char != [
4a60: 73 74 72 69 6e 67 20 69 6e 64 65 78 20 5b 6c 69  string index [li
4a70: 6e 64 65 78 20 24 7b 73 74 72 7d 20 24 6a 5d 20  ndex ${str} $j] 
4a80: 24 69 5d 7d 20 7b 0a 09 09 09 09 62 72 65 61 6b  $i]} {.....break
4a90: 0a 09 09 09 7d 0a 09 09 7d 0a 09 09 69 66 20 7b  ....}...}...if {
4aa0: 24 6a 20 3c 20 24 6e 6f 5f 6d 61 74 63 68 65 73  $j < $no_matches
4ab0: 7d 20 7b 0a 09 09 09 62 72 65 61 6b 0a 09 09 7d  } {....break...}
4ac0: 20 65 6c 73 65 20 7b 0a 09 09 09 61 70 70 65 6e   else {....appen
4ad0: 64 20 70 61 72 74 20 24 63 68 61 72 0a 09 09 7d  d part $char...}
4ae0: 0a 09 7d 0a 09 23 20 70 75 74 73 20 73 74 64 65  ..}..# puts stde
4af0: 72 72 20 70 61 72 74 3d 24 70 61 72 74 0a 09 72  rr part=$part..r
4b00: 65 74 75 72 6e 20 24 7b 70 61 72 74 7d 0a 7d 0a  eturn ${part}.}.
4b10: 0a 70 72 6f 63 20 53 70 6c 69 74 4c 69 6e 65 20  .proc SplitLine 
4b20: 7b 73 74 61 72 74 20 6c 69 6e 65 7d 20 7b 0a 09  {start line} {..
4b30: 73 65 74 20 64 65 70 74 68 20 30 0a 09 23 20 70  set depth 0..# p
4b40: 75 74 73 20 73 74 64 65 72 72 20 53 70 6c 69 74  uts stderr Split
4b50: 4c 69 6e 65 0a 09 66 6f 72 20 7b 73 65 74 20 69  Line..for {set i
4b60: 20 24 73 74 61 72 74 7d 20 7b 24 69 20 3e 3d 20   $start} {$i >= 
4b70: 30 7d 20 7b 69 6e 63 72 20 69 20 2d 31 7d 20 7b  0} {incr i -1} {
4b80: 0a 09 09 73 65 74 20 63 20 5b 73 74 72 69 6e 67  ...set c [string
4b90: 20 69 6e 64 65 78 20 24 6c 69 6e 65 20 24 69 5d   index $line $i]
4ba0: 0a 09 09 69 66 20 7b 7b 3b 7d 20 3d 3d 20 24 63  ...if {{;} == $c
4bb0: 7d 20 7b 0a 09 09 09 69 6e 63 72 20 69 3b 20 23  } {....incr i; #
4bc0: 20 64 69 73 63 61 72 64 20 63 6f 6d 6d 61 6e 64   discard command
4bd0: 20 62 72 65 61 6b 20 63 68 61 72 61 63 74 65 72   break character
4be0: 0a 09 09 09 72 65 74 75 72 6e 20 5b 6c 69 73 74  ....return [list
4bf0: 20 5b 65 78 70 72 20 24 73 74 61 72 74 20 2d 20   [expr $start - 
4c00: 24 69 5d 20 5b 53 74 72 69 6e 67 20 72 61 6e 67  $i] [String rang
4c10: 65 20 24 6c 69 6e 65 20 24 69 20 65 6e 64 5d 5d  e $line $i end]]
4c20: 0a 09 09 7d 20 65 6c 73 65 69 66 20 7b 7b 5d 7d  ...} elseif {{]}
4c30: 20 3d 3d 20 24 63 7d 20 7b 0a 09 09 09 69 6e 63   == $c} {....inc
4c40: 72 20 64 65 70 74 68 0a 09 09 7d 20 65 6c 73 65  r depth...} else
4c50: 69 66 20 7b 7b 5b 7d 20 3d 3d 20 24 63 7d 20 7b  if {{[} == $c} {
4c60: 0a 09 09 09 69 6e 63 72 20 64 65 70 74 68 20 2d  ....incr depth -
4c70: 31 0a 09 09 09 69 66 20 7b 24 64 65 70 74 68 20  1....if {$depth 
4c80: 3c 20 30 7d 20 7b 0a 09 09 09 09 69 6e 63 72 20  < 0} {.....incr 
4c90: 69 3b 20 23 20 64 69 73 63 61 72 64 20 63 6f 6d  i; # discard com
4ca0: 6d 61 6e 64 20 62 72 65 61 6b 20 63 68 61 72 61  mand break chara
4cb0: 63 74 65 72 0a 09 09 09 09 72 65 74 75 72 6e 20  cter.....return 
4cc0: 5b 6c 69 73 74 20 5b 65 78 70 72 20 24 73 74 61  [list [expr $sta
4cd0: 72 74 20 2d 20 24 69 5d 20 5b 53 74 72 69 6e 67  rt - $i] [String
4ce0: 20 72 61 6e 67 65 20 24 6c 69 6e 65 20 24 69 20   range $line $i 
4cf0: 65 6e 64 5d 5d 0a 09 09 09 7d 0a 09 09 7d 0a 09  end]]....}...}..
4d00: 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a 0a  }..return "".}..
4d10: 70 72 6f 63 20 49 73 57 68 69 74 65 20 7b 63 68  proc IsWhite {ch
4d20: 61 72 7d 20 7b 0a 09 69 66 20 7b 22 20 22 20 3d  ar} {..if {" " =
4d30: 3d 20 24 63 68 61 72 20 7c 7c 20 22 5c 6e 22 20  = $char || "\n" 
4d40: 3d 3d 20 24 63 68 61 72 20 7c 7c 20 22 5c 74 22  == $char || "\t"
4d50: 20 3d 3d 20 24 63 68 61 72 7d 20 7b 0a 09 09 72   == $char} {...r
4d60: 65 74 75 72 6e 20 31 0a 09 7d 20 65 6c 73 65 20  eturn 1..} else 
4d70: 7b 0a 09 09 72 65 74 75 72 6e 20 30 0a 09 7d 0a  {...return 0..}.
4d80: 7d 0a 0a 70 72 6f 63 20 50 72 65 76 69 6f 75 73  }..proc Previous
4d90: 57 6f 72 64 4f 66 49 6e 63 6f 6d 70 6c 65 74 65  WordOfIncomplete
4da0: 50 6f 73 69 74 69 6f 6e 20 7b 73 74 61 72 74 20  Position {start 
4db0: 6c 69 6e 65 7d 20 7b 0a 09 72 65 74 75 72 6e 20  line} {..return 
4dc0: 5b 6c 69 6e 64 65 78 20 5b 50 72 6f 70 65 72 4c  [lindex [ProperL
4dd0: 69 73 74 20 5b 73 74 72 69 6e 67 20 72 61 6e 67  ist [string rang
4de0: 65 20 24 7b 6c 69 6e 65 7d 20 30 20 24 7b 73 74  e ${line} 0 ${st
4df0: 61 72 74 7d 5d 5d 20 65 6e 64 5d 0a 7d 0a 0a 70  art}]] end].}..p
4e00: 72 6f 63 20 50 72 65 76 69 6f 75 73 57 6f 72 64  roc PreviousWord
4e10: 20 7b 73 74 61 72 74 20 6c 69 6e 65 7d 20 7b 0a   {start line} {.
4e20: 09 69 6e 63 72 20 73 74 61 72 74 20 2d 31 0a 09  .incr start -1..
4e30: 73 65 74 20 66 6f 75 6e 64 20 30 0a 09 66 6f 72  set found 0..for
4e40: 20 7b 73 65 74 20 69 20 24 73 74 61 72 74 7d 20   {set i $start} 
4e50: 7b 24 69 20 3e 20 30 7d 20 7b 69 6e 63 72 20 69  {$i > 0} {incr i
4e60: 20 2d 31 7d 20 7b 0a 09 09 73 65 74 20 63 20 5b   -1} {...set c [
4e70: 73 74 72 69 6e 67 20 69 6e 64 65 78 20 24 6c 69  string index $li
4e80: 6e 65 20 24 69 5d 0a 09 09 69 66 20 7b 24 7b 66  ne $i]...if {${f
4e90: 6f 75 6e 64 7d 20 26 26 20 5b 49 73 57 68 69 74  ound} && [IsWhit
4ea0: 65 20 24 63 5d 7d 20 7b 0a 09 09 09 62 72 65 61  e $c]} {....brea
4eb0: 6b 0a 09 09 7d 20 65 6c 73 65 69 66 20 7b 21 24  k...} elseif {!$
4ec0: 7b 66 6f 75 6e 64 7d 20 26 26 20 21 5b 49 73 57  {found} && ![IsW
4ed0: 68 69 74 65 20 24 63 5d 7d 20 7b 0a 09 09 09 73  hite $c]} {....s
4ee0: 65 74 20 66 6f 75 6e 64 20 31 0a 09 09 7d 0a 09  et found 1...}..
4ef0: 7d 0a 09 72 65 74 75 72 6e 20 5b 73 74 72 69 6e  }..return [strin
4f00: 67 20 74 72 69 6d 20 5b 73 74 72 69 6e 67 20 72  g trim [string r
4f10: 61 6e 67 65 20 24 7b 6c 69 6e 65 7d 20 24 69 20  ange ${line} $i 
4f20: 24 73 74 61 72 74 5d 5d 0a 7d 0a 0a 70 72 6f 63  $start]].}..proc
4f30: 20 51 75 6f 74 65 20 7b 76 61 6c 75 65 20 6c 65   Quote {value le
4f40: 66 74 7d 20 7b 0a 09 73 65 74 20 72 69 67 68 74  ft} {..set right
4f50: 20 5b 52 69 67 68 74 20 24 7b 6c 65 66 74 7d 5d   [Right ${left}]
4f60: 0a 09 69 66 20 7b 31 20 3c 20 5b 6c 6c 65 6e 67  ..if {1 < [lleng
4f70: 74 68 20 24 76 61 6c 75 65 5d 20 26 26 20 22 22  th $value] && ""
4f80: 20 3d 3d 20 24 72 69 67 68 74 7d 20 7b 0a 09 09   == $right} {...
4f90: 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 5c 22 24  return [list \"$
4fa0: 7b 76 61 6c 75 65 7d 5c 22 5d 0a 09 7d 20 65 6c  {value}\"]..} el
4fb0: 73 65 20 7b 0a 09 09 72 65 74 75 72 6e 20 5b 6c  se {...return [l
4fc0: 69 73 74 20 24 7b 6c 65 66 74 7d 24 7b 76 61 6c  ist ${left}${val
4fd0: 75 65 7d 24 7b 72 69 67 68 74 7d 5d 0a 09 7d 0a  ue}${right}]..}.
4fe0: 7d 0a 0a 23 20 74 68 65 20 66 6f 6c 6c 6f 77 69  }..# the followi
4ff0: 6e 67 20 74 77 6f 20 63 68 61 6e 6e 65 6c 20 70  ng two channel p
5000: 72 6f 63 27 73 20 6d 61 6b 65 20 75 73 65 20 6f  roc's make use o
5010: 66 0a 23 20 74 68 65 20 62 72 61 6e 64 6e 65 77  f.# the brandnew
5020: 20 28 53 65 70 20 39 39 29 20 60 66 69 6c 65 20   (Sep 99) `file 
5030: 63 68 61 6e 6e 65 6c 73 27 20 63 6f 6d 6d 61 6e  channels' comman
5040: 64 0a 23 20 62 75 74 20 68 61 76 65 20 73 6f 6d  d.# but have som
5050: 65 20 66 61 6c 6c 62 61 63 6b 20 62 65 68 61 76  e fallback behav
5060: 69 6f 75 72 20 66 6f 72 20 6f 6c 64 65 72 0a 23  iour for older.#
5070: 20 74 63 6c 20 76 65 72 73 69 6f 6e 2e 0a 23 0a   tcl version..#.
5080: 70 72 6f 63 20 49 6e 43 68 61 6e 6e 65 6c 49 64  proc InChannelId
5090: 20 7b 74 65 78 74 20 7b 73 77 69 74 63 68 65 73   {text {switches
50a0: 20 22 22 7d 7d 20 7b 0a 09 69 66 20 5b 63 61 74   ""}} {..if [cat
50b0: 63 68 20 7b 73 65 74 20 63 68 73 20 5b 66 69 6c  ch {set chs [fil
50c0: 65 20 63 68 61 6e 6e 65 6c 73 5d 7d 5d 20 7b 0a  e channels]}] {.
50d0: 09 09 73 65 74 20 63 68 73 20 7b 73 74 64 69 6e  ..set chs {stdin
50e0: 7d 0a 09 7d 0a 09 73 65 74 20 72 65 73 75 6c 74  }..}..set result
50f0: 20 22 22 0a 09 66 6f 72 65 61 63 68 20 63 68 20   ""..foreach ch 
5100: 24 63 68 73 20 7b 0a 09 09 69 66 20 7b 21 5b 63  $chs {...if {![c
5110: 61 74 63 68 20 7b 66 69 6c 65 65 76 65 6e 74 20  atch {fileevent 
5120: 24 63 68 20 72 65 61 64 61 62 6c 65 7d 5d 7d 20  $ch readable}]} 
5130: 7b 0a 09 09 09 6c 61 70 70 65 6e 64 20 72 65 73  {....lappend res
5140: 75 6c 74 20 24 63 68 0a 09 09 7d 0a 09 7d 0a 09  ult $ch...}..}..
5150: 72 65 74 75 72 6e 20 5b 43 68 61 6e 6e 65 6c 49  return [ChannelI
5160: 64 20 24 7b 74 65 78 74 7d 20 3c 69 6e 43 68 61  d ${text} <inCha
5170: 6e 6e 65 6c 3e 20 24 72 65 73 75 6c 74 20 24 73  nnel> $result $s
5180: 77 69 74 63 68 65 73 5d 0a 7d 0a 0a 70 72 6f 63  witches].}..proc
5190: 20 4f 75 74 43 68 61 6e 6e 65 6c 49 64 20 7b 74   OutChannelId {t
51a0: 65 78 74 20 7b 73 77 69 74 63 68 65 73 20 22 22  ext {switches ""
51b0: 7d 7d 20 7b 0a 09 69 66 20 5b 63 61 74 63 68 20  }} {..if [catch 
51c0: 7b 73 65 74 20 63 68 73 20 5b 66 69 6c 65 20 63  {set chs [file c
51d0: 68 61 6e 6e 65 6c 73 5d 7d 5d 20 7b 0a 09 09 73  hannels]}] {...s
51e0: 65 74 20 63 68 73 20 7b 73 74 64 6f 75 74 20 73  et chs {stdout s
51f0: 74 64 65 72 72 7d 0a 09 7d 0a 09 73 65 74 20 72  tderr}..}..set r
5200: 65 73 75 6c 74 20 22 22 0a 09 66 6f 72 65 61 63  esult ""..foreac
5210: 68 20 63 68 20 24 63 68 73 20 7b 0a 09 09 69 66  h ch $chs {...if
5220: 20 7b 21 5b 63 61 74 63 68 20 7b 66 69 6c 65 65   {![catch {filee
5230: 76 65 6e 74 20 24 63 68 20 77 72 69 74 61 62 6c  vent $ch writabl
5240: 65 7d 5d 7d 20 7b 0a 09 09 09 6c 61 70 70 65 6e  e}]} {....lappen
5250: 64 20 72 65 73 75 6c 74 20 24 63 68 0a 09 09 7d  d result $ch...}
5260: 0a 09 7d 0a 09 72 65 74 75 72 6e 20 5b 43 68 61  ..}..return [Cha
5270: 6e 6e 65 6c 49 64 20 24 7b 74 65 78 74 7d 20 3c  nnelId ${text} <
5280: 6f 75 74 43 68 61 6e 6e 65 6c 3e 20 24 72 65 73  outChannel> $res
5290: 75 6c 74 20 24 73 77 69 74 63 68 65 73 5d 0a 7d  ult $switches].}
52a0: 0a 0a 70 72 6f 63 20 43 68 61 6e 6e 65 6c 49 64  ..proc ChannelId
52b0: 20 7b 74 65 78 74 20 7b 64 65 73 63 72 69 70 74   {text {descript
52c0: 20 3c 63 68 61 6e 6e 65 6c 49 64 3e 7d 20 7b 63   <channelId>} {c
52d0: 68 73 20 22 22 7d 20 7b 73 77 69 74 63 68 65 73  hs ""} {switches
52e0: 20 22 22 7d 7d 20 7b 0a 09 69 66 20 7b 22 22 20   ""}} {..if {"" 
52f0: 3d 3d 20 24 7b 63 68 73 7d 7d 20 7b 0a 09 09 23  == ${chs}} {...#
5300: 20 74 68 65 20 60 66 69 6c 65 20 63 68 61 6e 6e   the `file chann
5310: 65 6c 73 27 20 63 6f 6d 6d 61 6e 64 20 69 73 20  els' command is 
5320: 70 72 65 73 65 6e 74 0a 09 09 23 20 6f 6e 6c 79  present...# only
5330: 20 69 6e 20 70 72 65 74 74 79 20 6e 65 77 20 76   in pretty new v
5340: 65 72 73 69 6f 6e 73 2e 0a 09 09 23 0a 09 09 69  ersions....#...i
5350: 66 20 5b 63 61 74 63 68 20 7b 73 65 74 20 63 68  f [catch {set ch
5360: 73 20 5b 66 69 6c 65 20 63 68 61 6e 6e 65 6c 73  s [file channels
5370: 5d 7d 5d 20 7b 0a 09 09 09 73 65 74 20 63 68 73  ]}] {....set chs
5380: 20 7b 73 74 64 69 6e 20 73 74 64 6f 75 74 20 73   {stdin stdout s
5390: 74 64 65 72 72 7d 0a 09 09 7d 0a 09 7d 0a 09 69  tderr}...}..}..i
53a0: 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 5b 73 65 74  f {[llength [set
53b0: 20 63 68 61 6e 6e 65 6c 20 5b 54 72 79 46 72 6f   channel [TryFro
53c0: 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 22 24  mList ${text} "$
53d0: 7b 63 68 73 7d 20 24 7b 73 77 69 74 63 68 65 73  {chs} ${switches
53e0: 7d 22 5d 5d 5d 7d 20 7b 0a 09 09 72 65 74 75 72  }"]]]} {...retur
53f0: 6e 20 24 7b 63 68 61 6e 6e 65 6c 7d 0a 09 7d 20  n ${channel}..} 
5400: 65 6c 73 65 20 7b 0a 09 09 72 65 74 75 72 6e 20  else {...return 
5410: 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 5b 73  [DisplayHints [s
5420: 74 72 69 6e 67 20 74 72 69 6d 20 22 24 7b 64 65  tring trim "${de
5430: 73 63 72 69 70 74 7d 20 24 7b 73 77 69 74 63 68  script} ${switch
5440: 65 73 7d 22 5d 5d 0a 09 7d 0a 7d 0a 0a 70 72 6f  es}"]]..}.}..pro
5450: 63 20 51 75 6f 74 65 51 75 6f 74 65 73 20 7b 6c  c QuoteQuotes {l
5460: 69 6e 65 7d 20 7b 0a 09 72 65 67 73 75 62 20 2d  ine} {..regsub -
5470: 61 6c 6c 20 2d 2d 20 5c 22 20 24 6c 69 6e 65 20  all -- \" $line 
5480: 7b 5c 22 7d 20 6c 69 6e 65 0a 09 72 65 67 73 75  {\"} line..regsu
5490: 62 20 2d 61 6c 6c 20 2d 2d 20 5c 7b 20 24 6c 69  b -all -- \{ $li
54a0: 6e 65 20 7b 5c 7b 7d 20 6c 69 6e 65 3b 20 23 20  ne {\{} line; # 
54b0: 5c 7d 5c 7d 20 28 6b 65 65 70 20 74 68 65 20 65  \}\} (keep the e
54c0: 64 69 74 6f 72 20 68 61 70 70 79 29 0a 09 72 65  ditor happy)..re
54d0: 74 75 72 6e 20 24 6c 69 6e 65 0a 7d 0a 0a 23 2a  turn $line.}..#*
54e0: 2a 0a 23 20 67 65 74 20 74 68 65 20 77 6f 72 64  *.# get the word
54f0: 20 70 6f 73 69 74 69 6f 6e 2e 0a 23 20 40 72 65   position..# @re
5500: 74 75 72 6e 20 74 68 65 20 77 6f 72 64 20 70 6f  turn the word po
5510: 73 69 74 69 6f 6e 0a 23 20 40 6e 6f 74 65 20 77  sition.# @note w
5520: 69 6c 6c 20 72 65 74 75 72 6e 65 64 20 6d 6f 64  ill returned mod
5530: 69 66 69 65 64 20 76 61 6c 75 65 73 2e 0a 23 20  ified values..# 
5540: 40 73 61 20 45 76 65 6e 74 75 61 6c 6c 79 45 76  @sa EventuallyEv
5550: 61 6c 75 61 74 65 46 69 72 73 74 0a 23 20 40 64  aluateFirst.# @d
5560: 61 74 65 20 53 65 70 2d 30 36 2d 31 39 39 39 0a  ate Sep-06-1999.
5570: 23 0a 23 20 25 20 70 3c 54 41 42 3e 0a 23 20 25  #.# % p<TAB>.# %
5580: 20 62 6c 61 20 70 75 74 3c 54 41 42 3e 20 24 62   bla put<TAB> $b
5590: 0a 23 20 25 20 70 75 74 3c 54 41 42 3e 20 24 62  .# % put<TAB> $b
55a0: 0a 23 20 70 61 72 74 20 20 3d 3d 20 70 75 74 0a  .# part  == put.
55b0: 23 20 73 74 61 72 74 20 3d 3d 20 30 0a 23 20 65  # start == 0.# e
55c0: 6e 64 20 20 20 3d 3d 20 33 0a 23 20 6c 69 6e 65  nd   == 3.# line
55d0: 20 20 3d 3d 20 22 70 75 74 20 24 62 22 0a 23 20    == "put $b".# 
55e0: 5b 50 61 72 74 50 6f 73 69 74 69 6f 6e 5d 20 73  [PartPosition] s
55f0: 68 6f 75 6c 64 20 72 65 74 75 72 6e 20 30 0a 23  hould return 0.#
5600: 0a 70 72 6f 63 20 50 61 72 74 50 6f 73 69 74 69  .proc PartPositi
5610: 6f 6e 20 7b 70 61 72 74 54 20 73 74 61 72 74 54  on {partT startT
5620: 20 65 6e 64 54 20 6c 69 6e 65 54 7d 20 7b 0a 0a   endT lineT} {..
5630: 09 75 70 76 61 72 20 24 70 61 72 74 54 20 70 61  .upvar $partT pa
5640: 72 74 20 24 73 74 61 72 74 54 20 73 74 61 72 74  rt $startT start
5650: 20 24 65 6e 64 54 20 65 6e 64 20 24 6c 69 6e 65   $endT end $line
5660: 54 20 6c 69 6e 65 0a 09 45 76 65 6e 74 75 61 6c  T line..Eventual
5670: 6c 79 45 76 61 6c 75 61 74 65 46 69 72 73 74 20  lyEvaluateFirst 
5680: 70 61 72 74 20 73 74 61 72 74 20 65 6e 64 20 6c  part start end l
5690: 69 6e 65 0a 09 72 65 74 75 72 6e 20 5b 4c 6c 65  ine..return [Lle
56a0: 6e 67 74 68 20 5b 73 74 72 69 6e 67 20 72 61 6e  ngth [string ran
56b0: 67 65 20 24 6c 69 6e 65 20 30 20 5b 65 78 70 72  ge $line 0 [expr
56c0: 20 24 73 74 61 72 74 20 2d 20 31 5d 5d 5d 0a 0a   $start - 1]]]..
56d0: 23 20 0a 23 20 20 20 20 20 73 65 74 20 6c 6f 63  # .#     set loc
56e0: 61 6c 5f 73 74 61 72 74 20 5b 65 78 70 72 20 24  al_start [expr $
56f0: 73 74 61 72 74 20 2d 20 31 5d 0a 23 20 20 20 20  start - 1].#    
5700: 20 73 65 74 20 6c 6f 63 61 6c 5f 73 74 61 72 74   set local_start
5710: 5f 63 68 72 20 5b 73 74 72 69 6e 67 20 69 6e 64  _chr [string ind
5720: 65 78 20 24 6c 69 6e 65 20 24 6c 6f 63 61 6c 5f  ex $line $local_
5730: 73 74 61 72 74 5d 0a 23 20 20 20 20 20 69 66 20  start].#     if 
5740: 7b 22 5c 22 22 20 3d 3d 20 24 6c 6f 63 61 6c 5f  {"\"" == $local_
5750: 73 74 61 72 74 5f 63 68 72 20 7c 7c 20 22 5c 7b  start_chr || "\{
5760: 22 20 3d 3d 20 24 6c 6f 63 61 6c 5f 73 74 61 72  " == $local_star
5770: 74 5f 63 68 72 7d 20 7b 0a 23 20 20 20 20 20 20  t_chr} {.#      
5780: 20 20 20 69 6e 63 72 20 6c 6f 63 61 6c 5f 73 74     incr local_st
5790: 61 72 74 20 2d 31 0a 23 20 20 20 20 20 7d 0a 23  art -1.#     }.#
57a0: 20 0a 23 20 20 20 20 20 73 65 74 20 70 72 65 5f   .#     set pre_
57b0: 74 65 78 74 20 5b 51 75 6f 74 65 51 75 6f 74 65  text [QuoteQuote
57c0: 73 20 5b 73 74 72 69 6e 67 20 72 61 6e 67 65 20  s [string range 
57d0: 24 6c 69 6e 65 20 30 20 24 6c 6f 63 61 6c 5f 73  $line 0 $local_s
57e0: 74 61 72 74 5d 5d 0a 23 20 20 20 20 20 72 65 74  tart]].#     ret
57f0: 75 72 6e 20 5b 6c 6c 65 6e 67 74 68 20 24 70 72  urn [llength $pr
5800: 65 5f 74 65 78 74 5d 0a 23 20 0a 7d 0a 0a 70 72  e_text].# .}..pr
5810: 6f 63 20 52 69 67 68 74 20 7b 6c 65 66 74 7d 20  oc Right {left} 
5820: 7b 0a 09 23 20 70 75 74 73 20 6c 65 66 74 3d 24  {..# puts left=$
5830: 6c 65 66 74 0a 09 69 66 20 7b 22 5c 22 22 20 3d  left..if {"\"" =
5840: 3d 20 24 6c 65 66 74 7d 20 7b 0a 09 09 72 65 74  = $left} {...ret
5850: 75 72 6e 20 22 5c 22 22 0a 09 7d 20 65 6c 73 65  urn "\""..} else
5860: 69 66 20 7b 22 5c 5c 5c 22 22 20 3d 3d 20 24 6c  if {"\\\"" == $l
5870: 65 66 74 7d 20 7b 0a 09 09 72 65 74 75 72 6e 20  eft} {...return 
5880: 22 5c 5c 5c 22 22 0a 09 7d 20 65 6c 73 65 69 66  "\\\""..} elseif
5890: 20 7b 22 5c 7b 22 20 3d 3d 20 24 6c 65 66 74 7d   {"\{" == $left}
58a0: 20 7b 0a 09 09 72 65 74 75 72 6e 20 22 5c 7d 22   {...return "\}"
58b0: 0a 09 7d 20 65 6c 73 65 69 66 20 7b 22 5c 5c 5c  ..} elseif {"\\\
58c0: 7b 22 20 3d 3d 20 24 6c 65 66 74 7d 20 7b 0a 09  {" == $left} {..
58d0: 09 72 65 74 75 72 6e 20 22 5c 5c 5c 7d 22 0a 09  .return "\\\}"..
58e0: 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a 0a  }..return "".}..
58f0: 70 72 6f 63 20 47 65 74 51 75 6f 74 65 64 50 72  proc GetQuotedPr
5900: 65 66 69 78 20 7b 74 65 78 74 7d 20 7b 0a 09 73  efix {text} {..s
5910: 65 74 20 6e 75 6c 6c 20 5b 73 74 72 69 6e 67 20  et null [string 
5920: 69 6e 64 65 78 20 24 74 65 78 74 20 30 5d 0a 09  index $text 0]..
5930: 69 66 20 7b 22 5c 22 22 20 3d 3d 20 24 6e 75 6c  if {"\"" == $nul
5940: 6c 20 7c 7c 20 22 5c 7b 22 20 3d 3d 20 24 6e 75  l || "\{" == $nu
5950: 6c 6c 7d 20 7b 0a 09 09 72 65 74 75 72 6e 20 5c  ll} {...return \
5960: 5c 24 6e 75 6c 6c 0a 09 7d 20 65 6c 73 65 20 7b  \$null..} else {
5970: 0a 09 09 72 65 74 75 72 6e 20 7b 7d 0a 09 7d 0a  ...return {}..}.
5980: 7d 0a 0a 70 72 6f 63 20 43 6f 75 6e 74 43 68 61  }..proc CountCha
5990: 72 20 7b 6c 69 6e 65 20 63 68 61 72 7d 20 7b 0a  r {line char} {.
59a0: 09 23 20 70 75 74 73 20 73 74 64 65 72 72 20 63  .# puts stderr c
59b0: 68 61 72 3d 7c 24 63 68 61 72 7c 0a 09 73 65 74  har=|$char|..set
59c0: 20 66 6f 75 6e 64 20 30 0a 09 73 65 74 20 70 6f   found 0..set po
59d0: 73 20 30 0a 09 77 68 69 6c 65 20 7b 2d 31 20 21  s 0..while {-1 !
59e0: 3d 20 5b 73 65 74 20 70 6f 73 20 5b 73 74 72 69  = [set pos [stri
59f0: 6e 67 20 66 69 72 73 74 20 24 63 68 61 72 20 24  ng first $char $
5a00: 6c 69 6e 65 20 24 70 6f 73 5d 5d 7d 20 7b 0a 09  line $pos]]} {..
5a10: 09 69 6e 63 72 20 70 6f 73 0a 09 09 69 6e 63 72  .incr pos...incr
5a20: 20 66 6f 75 6e 64 0a 09 7d 0a 09 72 65 74 75 72   found..}..retur
5a30: 6e 20 24 66 6f 75 6e 64 0a 7d 0a 0a 23 2a 2a 0a  n $found.}..#**.
5a40: 23 20 6d 61 6b 65 20 61 20 70 72 6f 70 65 72 20  # make a proper 
5a50: 74 63 6c 20 6c 69 73 74 20 66 72 6f 6d 20 61 6e  tcl list from an
5a60: 20 69 63 6f 6d 70 6c 65 74 65 0a 23 20 73 74 72   icomplete.# str
5a70: 69 6e 67 2c 20 74 68 61 74 20 69 73 3a 20 72 65  ing, that is: re
5a80: 6d 6f 76 65 20 74 68 65 20 6a 75 6e 6b 2e 20 54  move the junk. T
5a90: 68 69 73 20 69 73 0a 23 20 63 6f 6d 70 6c 65 6d  his is.# complem
5aa0: 65 6e 74 61 72 79 20 74 6f 20 60 49 6e 63 6f 6d  entary to `Incom
5ab0: 70 6c 65 74 65 4c 69 73 74 52 65 6d 61 69 6e 64  pleteListRemaind
5ac0: 65 72 27 2e 0a 23 20 65 2e 67 2e 3a 0a 23 20 20  er'..# e.g.:.#  
5ad0: 20 20 20 20 20 66 6f 72 20 7b 73 65 74 20 69 20       for {set i 
5ae0: 31 7d 20 22 0a 23 20 20 2d 2d 3e 20 20 66 6f 72  1} ".#  -->  for
5af0: 20 7b 73 65 74 20 69 20 31 7d 0a 23 0a 70 72 6f   {set i 1}.#.pro
5b00: 63 20 50 72 6f 70 65 72 4c 69 73 74 20 7b 6c 69  c ProperList {li
5b10: 6e 65 7d 20 7b 0a 09 73 65 74 20 6c 61 73 74 20  ne} {..set last 
5b20: 5b 65 78 70 72 20 5b 73 74 72 69 6e 67 20 6c 65  [expr [string le
5b30: 6e 67 74 68 20 24 6c 69 6e 65 5d 20 2d 20 31 5d  ngth $line] - 1]
5b40: 0a 09 66 6f 72 20 7b 73 65 74 20 69 20 24 6c 61  ..for {set i $la
5b50: 73 74 7d 20 7b 24 69 20 3e 3d 20 30 7d 20 7b 69  st} {$i >= 0} {i
5b60: 6e 63 72 20 69 20 2d 31 7d 20 7b 0a 09 09 69 66  ncr i -1} {...if
5b70: 20 7b 21 5b 63 61 74 63 68 20 7b 6c 6c 65 6e 67   {![catch {lleng
5b80: 74 68 20 5b 73 74 72 69 6e 67 20 72 61 6e 67 65  th [string range
5b90: 20 24 6c 69 6e 65 20 30 20 24 69 5d 7d 5d 7d 20   $line 0 $i]}]} 
5ba0: 7b 0a 09 09 09 62 72 65 61 6b 0a 09 09 7d 0a 09  {....break...}..
5bb0: 7d 0a 09 72 65 74 75 72 6e 20 5b 73 74 72 69 6e  }..return [strin
5bc0: 67 20 72 61 6e 67 65 20 24 6c 69 6e 65 20 30 20  g range $line 0 
5bd0: 24 69 5d 0a 7d 0a 0a 23 2a 2a 0a 23 20 72 65 74  $i].}..#**.# ret
5be0: 75 72 6e 20 74 68 65 20 6c 61 73 74 20 70 61 72  urn the last par
5bf0: 74 20 6f 66 20 61 20 6c 69 6e 65 20 77 68 69 63  t of a line whic
5c00: 68 0a 23 20 70 72 65 76 65 6e 74 73 20 74 68 65  h.# prevents the
5c10: 20 6c 69 6e 65 20 66 72 6f 6d 20 62 65 65 69 6e   line from beein
5c20: 67 20 61 20 6c 69 73 74 2e 0a 23 20 54 68 69 73  g a list..# This
5c30: 20 69 73 20 63 6f 6d 70 6c 65 6d 65 6e 74 61 72   is complementar
5c40: 79 20 74 6f 20 60 50 72 6f 70 65 72 4c 69 73 74  y to `ProperList
5c50: 27 2e 0a 23 0a 70 72 6f 63 20 49 6e 63 6f 6d 70  '..#.proc Incomp
5c60: 6c 65 74 65 4c 69 73 74 52 65 6d 61 69 6e 64 65  leteListRemainde
5c70: 72 20 7b 6c 69 6e 65 7d 20 7b 0a 09 73 65 74 20  r {line} {..set 
5c80: 6c 61 73 74 20 5b 65 78 70 72 20 5b 73 74 72 69  last [expr [stri
5c90: 6e 67 20 6c 65 6e 67 74 68 20 24 6c 69 6e 65 5d  ng length $line]
5ca0: 20 2d 20 31 5d 0a 09 66 6f 72 20 7b 73 65 74 20   - 1]..for {set 
5cb0: 69 20 24 6c 61 73 74 7d 20 7b 24 69 20 3e 3d 20  i $last} {$i >= 
5cc0: 30 7d 20 7b 69 6e 63 72 20 69 20 2d 31 7d 20 7b  0} {incr i -1} {
5cd0: 0a 09 09 69 66 20 7b 21 5b 63 61 74 63 68 20 7b  ...if {![catch {
5ce0: 6c 6c 65 6e 67 74 68 20 5b 73 74 72 69 6e 67 20  llength [string 
5cf0: 72 61 6e 67 65 20 24 6c 69 6e 65 20 30 20 24 69  range $line 0 $i
5d00: 5d 7d 5d 7d 20 7b 0a 09 09 09 62 72 65 61 6b 0a  ]}]} {....break.
5d10: 09 09 7d 0a 09 7d 0a 09 69 6e 63 72 20 69 0a 09  ..}..}..incr i..
5d20: 72 65 74 75 72 6e 20 5b 53 74 72 69 6e 67 20 72  return [String r
5d30: 61 6e 67 65 20 24 6c 69 6e 65 20 24 69 20 65 6e  ange $line $i en
5d40: 64 5d 0a 7d 0a 0a 23 2a 2a 0a 23 20 73 61 76 65  d].}..#**.# save
5d50: 20 60 6c 69 6e 64 65 78 27 2e 20 77 6f 72 6b 73   `lindex'. works
5d60: 20 61 6c 73 6f 20 66 6f 72 20 6e 6f 6e 2d 63 6f   also for non-co
5d70: 6d 70 6c 65 74 65 20 6c 69 6e 65 73 0a 23 20 77  mplete lines.# w
5d80: 69 74 68 20 6f 70 65 6e 69 6e 67 20 70 61 72 65  ith opening pare
5d90: 6e 74 68 65 73 65 73 20 6f 72 20 71 75 6f 74 65  ntheses or quote
5da0: 73 2e 0a 23 20 75 73 61 67 65 20 61 73 20 60 6c  s..# usage as `l
5db0: 69 6e 64 65 78 27 2e 0a 23 20 45 76 65 6e 74 75  index'..# Eventu
5dc0: 61 6c 6c 79 20 72 65 74 75 72 6e 73 20 74 68 65  ally returns the
5dd0: 20 52 65 73 74 20 6f 66 20 61 6e 20 69 6e 63 6f   Rest of an inco
5de0: 6d 70 6c 65 74 65 20 6c 69 6e 65 2c 0a 23 20 69  mplete line,.# i
5df0: 66 20 74 68 65 20 69 6e 64 65 78 20 69 73 20 60  f the index is `
5e00: 65 6e 64 27 20 6f 72 20 3d 3d 20 5b 4c 6c 65 6e  end' or == [Llen
5e10: 67 74 68 20 24 6c 69 6e 65 5d 2e 0a 23 0a 70 72  gth $line]..#.pr
5e20: 6f 63 20 4c 69 6e 64 65 78 20 7b 6c 69 6e 65 20  oc Lindex {line 
5e30: 70 6f 73 7d 20 7b 0a 09 69 66 20 7b 5b 63 61 74  pos} {..if {[cat
5e40: 63 68 20 5b 6c 69 73 74 20 73 65 74 20 73 75 62  ch [list set sub
5e50: 20 5b 6c 69 6e 64 65 78 20 24 7b 6c 69 6e 65 7d   [lindex ${line}
5e60: 20 24 7b 70 6f 73 7d 5d 5d 5d 7d 20 7b 0a 09 09   ${pos}]]]} {...
5e70: 69 66 20 7b 22 65 6e 64 22 20 3d 3d 20 24 7b 70  if {"end" == ${p
5e80: 6f 73 7d 20 7c 7c 20 5b 4c 6c 65 6e 67 74 68 20  os} || [Llength 
5e90: 24 7b 6c 69 6e 65 7d 5d 20 3d 3d 20 24 7b 70 6f  ${line}] == ${po
5ea0: 73 7d 7d 20 7b 0a 09 09 09 72 65 74 75 72 6e 20  s}} {....return 
5eb0: 5b 49 6e 63 6f 6d 70 6c 65 74 65 4c 69 73 74 52  [IncompleteListR
5ec0: 65 6d 61 69 6e 64 65 72 20 24 7b 6c 69 6e 65 7d  emainder ${line}
5ed0: 5d 0a 09 09 7d 0a 09 09 73 65 74 20 6c 69 6e 65  ]...}...set line
5ee0: 20 5b 50 72 6f 70 65 72 4c 69 73 74 20 24 7b 6c   [ProperList ${l
5ef0: 69 6e 65 7d 5d 0a 09 09 23 20 70 75 74 73 20 73  ine}]...# puts s
5f00: 74 64 65 72 72 20 5c 6e 70 72 6f 70 65 72 5f 6c  tderr \nproper_l
5f10: 69 6e 65 3d 7c 24 70 72 6f 70 65 72 5f 6c 69 6e  ine=|$proper_lin
5f20: 65 7c 0a 09 09 69 66 20 7b 5b 63 61 74 63 68 20  e|...if {[catch 
5f30: 5b 6c 69 73 74 20 73 65 74 20 73 75 62 20 5b 6c  [list set sub [l
5f40: 69 6e 64 65 78 20 24 7b 6c 69 6e 65 7d 20 24 7b  index ${line} ${
5f50: 70 6f 73 7d 5d 5d 5d 7d 20 7b 20 72 65 74 75 72  pos}]]]} { retur
5f60: 6e 20 7b 7d 20 7d 0a 09 7d 0a 09 72 65 74 75 72  n {} }..}..retur
5f70: 6e 20 24 7b 73 75 62 7d 0a 7d 0a 0a 23 2a 2a 0a  n ${sub}.}..#**.
5f80: 23 20 73 61 76 65 20 60 6c 6c 65 6e 67 74 68 27  # save `llength'
5f90: 20 28 73 65 65 20 61 62 6f 76 65 29 2e 0a 23 0a   (see above)..#.
5fa0: 70 72 6f 63 20 4c 6c 65 6e 67 74 68 20 7b 6c 69  proc Llength {li
5fb0: 6e 65 7d 20 7b 0a 09 69 66 20 7b 5b 63 61 74 63  ne} {..if {[catc
5fc0: 68 20 5b 6c 69 73 74 20 73 65 74 20 6c 65 6e 20  h [list set len 
5fd0: 5b 6c 6c 65 6e 67 74 68 20 24 7b 6c 69 6e 65 7d  [llength ${line}
5fe0: 5d 5d 5d 7d 20 7b 0a 09 09 73 65 74 20 6c 69 6e  ]]]} {...set lin
5ff0: 65 20 5b 50 72 6f 70 65 72 4c 69 73 74 20 24 7b  e [ProperList ${
6000: 6c 69 6e 65 7d 5d 0a 09 09 69 66 20 7b 5b 63 61  line}]...if {[ca
6010: 74 63 68 20 5b 6c 69 73 74 20 73 65 74 20 6c 65  tch [list set le
6020: 6e 20 5b 6c 6c 65 6e 67 74 68 20 24 7b 6c 69 6e  n [llength ${lin
6030: 65 7d 5d 5d 5d 7d 20 7b 20 72 65 74 75 72 6e 20  e}]]]} { return 
6040: 7b 7d 20 7d 0a 09 7d 0a 09 23 20 70 75 74 73 20  {} }..}..# puts 
6050: 73 74 64 65 72 72 20 5c 6e 6c 69 6e 65 3d 24 6c  stderr \nline=$l
6060: 69 6e 65 0a 09 72 65 74 75 72 6e 20 24 7b 6c 65  ine..return ${le
6070: 6e 7d 0a 7d 0a 0a 23 2a 2a 0a 23 20 73 61 76 65  n}.}..#**.# save
6080: 20 60 6c 72 61 6e 67 65 27 20 28 73 65 65 20 61   `lrange' (see a
6090: 62 6f 76 65 29 2e 0a 23 0a 70 72 6f 63 20 4c 72  bove)..#.proc Lr
60a0: 61 6e 67 65 20 7b 6c 69 6e 65 20 66 69 72 73 74  ange {line first
60b0: 20 6c 61 73 74 7d 20 7b 0a 09 69 66 20 7b 5b 63   last} {..if {[c
60c0: 61 74 63 68 20 5b 6c 69 73 74 20 73 65 74 20 72  atch [list set r
60d0: 61 6e 67 65 20 5b 6c 72 61 6e 67 65 20 24 7b 6c  ange [lrange ${l
60e0: 69 6e 65 7d 20 24 7b 66 69 72 73 74 7d 20 24 7b  ine} ${first} ${
60f0: 6c 61 73 74 7d 5d 5d 5d 7d 20 7b 0a 09 09 73 65  last}]]]} {...se
6100: 74 20 72 65 73 74 20 5b 49 6e 63 6f 6d 70 6c 65  t rest [Incomple
6110: 74 65 4c 69 73 74 52 65 6d 61 69 6e 64 65 72 20  teListRemainder 
6120: 24 7b 6c 69 6e 65 7d 5d 0a 09 09 73 65 74 20 70  ${line}]...set p
6130: 72 6f 70 65 72 20 5b 50 72 6f 70 65 72 4c 69 73  roper [ProperLis
6140: 74 20 24 7b 6c 69 6e 65 7d 5d 0a 09 09 69 66 20  t ${line}]...if 
6150: 7b 5b 63 61 74 63 68 20 5b 6c 69 73 74 20 73 65  {[catch [list se
6160: 74 20 72 61 6e 67 65 20 5b 6c 69 6e 64 65 78 20  t range [lindex 
6170: 24 7b 70 72 6f 70 65 72 7d 20 24 7b 66 69 72 73  ${proper} ${firs
6180: 74 7d 20 24 7b 6c 61 73 74 7d 5d 5d 5d 7d 20 7b  t} ${last}]]]} {
6190: 0a 09 09 09 72 65 74 75 72 6e 20 7b 7d 0a 09 09  ....return {}...
61a0: 7d 0a 09 09 69 66 20 7b 22 65 6e 64 22 20 3d 3d  }...if {"end" ==
61b0: 20 24 7b 6c 61 73 74 7d 20 7c 7c 20 5b 4c 6c 65   ${last} || [Lle
61c0: 6e 67 74 68 20 24 7b 6c 69 6e 65 7d 5d 20 3d 3d  ngth ${line}] ==
61d0: 20 24 7b 6c 61 73 74 7d 7d 20 7b 0a 09 09 09 61   ${last}} {....a
61e0: 70 70 65 6e 64 20 73 75 62 20 22 20 24 7b 72 65  ppend sub " ${re
61f0: 73 74 7d 22 0a 09 09 7d 0a 09 7d 0a 09 72 65 74  st}"...}..}..ret
6200: 75 72 6e 20 24 7b 72 61 6e 67 65 7d 0a 7d 0a 0a  urn ${range}.}..
6210: 23 2a 2a 0a 23 20 4c 75 6e 69 71 75 65 20 2d 2d  #**.# Lunique --
6220: 20 72 65 6d 6f 76 65 20 64 75 70 6c 69 63 61 74   remove duplicat
6230: 65 20 65 6e 74 72 69 65 73 20 66 72 6f 6d 20 61  e entries from a
6240: 20 73 6f 72 74 65 64 20 6c 69 73 74 0a 23 20 40   sorted list.# @
6250: 70 61 72 61 6d 20 20 20 6c 69 73 74 0a 23 20 40  param   list.# @
6260: 72 65 74 75 72 6e 20 20 75 6e 69 71 75 65 20 6c  return  unique l
6270: 69 73 74 0a 23 20 40 61 75 74 68 6f 72 20 20 4a  ist.# @author  J
6280: 6f 68 61 6e 6e 65 73 20 5a 65 6c 6c 6e 65 72 0a  ohannes Zellner.
6290: 23 20 40 64 61 74 65 20 20 20 20 53 65 70 2d 31  # @date    Sep-1
62a0: 39 2d 31 39 39 39 0a 23 0a 70 72 6f 63 20 4c 75  9-1999.#.proc Lu
62b0: 6e 69 71 75 65 20 6c 73 74 20 7b 0a 09 73 65 74  nique lst {..set
62c0: 20 75 6e 69 71 75 65 20 22 22 0a 09 66 6f 72 65   unique ""..fore
62d0: 61 63 68 20 65 6c 65 6d 65 6e 74 20 24 7b 6c 73  ach element ${ls
62e0: 74 7d 20 7b 0a 09 09 69 66 20 7b 24 7b 65 6c 65  t} {...if {${ele
62f0: 6d 65 6e 74 7d 20 21 3d 20 5b 6c 69 6e 64 65 78  ment} != [lindex
6300: 20 24 7b 75 6e 69 71 75 65 7d 20 65 6e 64 5d 7d   ${unique} end]}
6310: 20 7b 0a 09 09 09 6c 61 70 70 65 6e 64 20 75 6e   {....lappend un
6320: 69 71 75 65 20 24 7b 65 6c 65 6d 65 6e 74 7d 0a  ique ${element}.
6330: 09 09 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20 24  ..}..}..return $
6340: 7b 75 6e 69 71 75 65 7d 0a 7d 0a 0a 23 2a 2a 0a  {unique}.}..#**.
6350: 23 20 73 74 72 69 6e 67 20 66 75 6e 63 74 69 6f  # string functio
6360: 6e 2c 20 77 68 69 63 68 20 77 6f 72 6b 73 20 61  n, which works a
6370: 6c 73 6f 20 66 6f 72 20 6f 6c 64 65 72 20 76 65  lso for older ve
6380: 72 73 69 6f 6e 73 0a 23 20 6f 66 20 74 63 6c 2c  rsions.# of tcl,
6390: 20 77 68 69 63 68 20 64 6f 6e 27 74 20 68 61 76   which don't hav
63a0: 65 20 74 68 65 20 60 65 6e 64 27 20 69 6e 64 65  e the `end' inde
63b0: 78 2e 0a 23 20 49 20 74 72 69 65 64 20 61 6c 73  x..# I tried als
63c0: 6f 20 64 65 66 69 6e 69 6e 67 20 60 73 74 72 69  o defining `stri
63d0: 6e 67 27 20 61 6e 64 20 74 68 75 73 20 6f 76 65  ng' and thus ove
63e0: 72 72 69 64 69 6e 67 0a 23 20 74 68 65 20 62 75  rriding.# the bu
63f0: 69 6c 74 69 6e 20 60 73 74 72 69 6e 67 27 20 77  iltin `string' w
6400: 68 69 63 68 20 77 6f 72 6b 65 64 2c 20 62 75 74  hich worked, but
6410: 20 73 6c 6f 77 65 64 20 64 6f 77 6e 0a 23 20 74   slowed down.# t
6420: 68 69 6e 67 73 20 63 6f 6e 73 69 64 65 72 61 62  hings considerab
6430: 6c 79 2e 20 53 6f 20 49 20 64 65 63 69 64 65 64  ly. So I decided
6440: 20 74 6f 20 63 61 6c 6c 20 60 53 74 72 69 6e 67   to call `String
6450: 27 0a 23 20 6f 6e 6c 79 20 69 66 20 49 20 72 65  '.# only if I re
6460: 61 6c 6c 79 20 6e 65 65 64 20 74 68 65 20 60 65  ally need the `e
6470: 6e 64 27 20 69 6e 64 65 78 2e 0a 23 0a 70 72 6f  nd' index..#.pro
6480: 63 20 53 74 72 69 6e 67 20 61 72 67 73 20 7b 0a  c String args {.
6490: 09 69 66 20 7b 5b 69 6e 66 6f 20 74 63 6c 76 65  .if {[info tclve
64a0: 72 73 69 6f 6e 5d 20 3c 20 38 2e 32 7d 20 7b 0a  rsion] < 8.2} {.
64b0: 09 09 73 77 69 74 63 68 20 5b 6c 69 6e 64 65 78  ..switch [lindex
64c0: 20 24 61 72 67 73 20 31 5d 20 7b 0a 09 09 09 72   $args 1] {....r
64d0: 61 6e 67 65 20 2d 0a 09 09 09 69 6e 64 65 78 20  ange -....index 
64e0: 7b 0a 09 09 09 09 69 66 20 7b 22 65 6e 64 22 20  {.....if {"end" 
64f0: 3d 3d 20 5b 6c 69 6e 64 65 78 20 24 61 72 67 73  == [lindex $args
6500: 20 65 6e 64 5d 7d 20 7b 0a 09 09 09 09 09 73 65   end]} {......se
6510: 74 20 73 74 72 20 5b 6c 69 6e 64 65 78 20 24 61  t str [lindex $a
6520: 72 67 73 20 32 5d 0a 09 09 09 09 09 6c 72 65 70  rgs 2]......lrep
6530: 6c 61 63 65 20 61 72 67 73 20 65 6e 64 20 65 6e  lace args end en
6540: 64 20 5b 65 78 70 72 20 5b 73 74 72 69 6e 67 20  d [expr [string 
6550: 6c 65 6e 67 74 68 20 24 73 74 72 5d 20 2d 20 31  length $str] - 1
6560: 5d 0a 09 09 09 09 7d 0a 09 09 09 7d 0a 09 09 7d  ].....}....}...}
6570: 0a 09 7d 0a 09 72 65 74 75 72 6e 20 5b 65 76 61  ..}..return [eva
6580: 6c 20 73 74 72 69 6e 67 20 24 61 72 67 73 5d 0a  l string $args].
6590: 7d 0a 0a 70 72 6f 63 20 53 74 72 69 70 50 72 65  }..proc StripPre
65a0: 66 69 78 20 7b 74 65 78 74 7d 20 7b 0a 09 23 20  fix {text} {..# 
65b0: 70 75 74 73 20 22 28 53 74 72 69 70 50 72 65 66  puts "(StripPref
65c0: 69 78 29 20 74 65 78 74 3d 7c 24 74 65 78 74 7c  ix) text=|$text|
65d0: 22 0a 09 73 65 74 20 6e 75 6c 6c 20 5b 73 74 72  "..set null [str
65e0: 69 6e 67 20 69 6e 64 65 78 20 24 74 65 78 74 20  ing index $text 
65f0: 30 5d 0a 09 69 66 20 7b 22 5c 22 22 20 3d 3d 20  0]..if {"\"" == 
6600: 24 6e 75 6c 6c 20 7c 7c 20 22 5c 7b 22 20 3d 3d  $null || "\{" ==
6610: 20 24 6e 75 6c 6c 7d 20 7b 0a 09 09 72 65 74 75   $null} {...retu
6620: 72 6e 20 5b 53 74 72 69 6e 67 20 72 61 6e 67 65  rn [String range
6630: 20 24 74 65 78 74 20 31 20 65 6e 64 5d 0a 09 7d   $text 1 end]..}
6640: 20 65 6c 73 65 20 7b 0a 09 09 72 65 74 75 72 6e   else {...return
6650: 20 24 74 65 78 74 0a 09 7d 0a 7d 0a 0a 70 72 6f   $text..}.}..pro
6660: 63 20 56 61 72 43 6f 6d 70 6c 65 74 69 6f 6e 20  c VarCompletion 
6670: 7b 74 65 78 74 20 7b 6c 65 76 65 6c 20 2d 31 7d  {text {level -1}
6680: 7d 20 7b 0a 09 69 66 20 7b 22 23 22 20 21 3d 20  } {..if {"#" != 
6690: 5b 73 74 72 69 6e 67 20 69 6e 64 65 78 20 24 7b  [string index ${
66a0: 6c 65 76 65 6c 7d 20 30 5d 7d 20 7b 0a 09 09 69  level} 0]} {...i
66b0: 66 20 7b 2d 31 20 3d 3d 20 24 7b 6c 65 76 65 6c  f {-1 == ${level
66c0: 7d 7d 20 7b 0a 09 09 09 73 65 74 20 6c 65 76 65  }} {....set leve
66d0: 6c 20 5b 69 6e 66 6f 20 6c 65 76 65 6c 5d 0a 09  l [info level]..
66e0: 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 69 6e 63  .} else {....inc
66f0: 72 20 6c 65 76 65 6c 0a 09 09 7d 0a 09 7d 0a 09  r level...}..}..
6700: 73 65 74 20 70 72 65 20 5b 47 65 74 51 75 6f 74  set pre [GetQuot
6710: 65 64 50 72 65 66 69 78 20 24 7b 74 65 78 74 7d  edPrefix ${text}
6720: 5d 0a 09 73 65 74 20 76 61 72 20 5b 53 74 72 69  ]..set var [Stri
6730: 70 50 72 65 66 69 78 20 24 7b 74 65 78 74 7d 5d  pPrefix ${text}]
6740: 0a 09 23 20 70 75 74 73 20 73 74 64 65 72 72 20  ..# puts stderr 
6750: 22 28 56 61 72 43 6f 6d 70 6c 65 74 69 6f 6e 29  "(VarCompletion)
6760: 20 70 72 65 3d 7c 24 70 72 65 7c 22 0a 09 23 20   pre=|$pre|"..# 
6770: 70 75 74 73 20 73 74 64 65 72 72 20 22 28 56 61  puts stderr "(Va
6780: 72 43 6f 6d 70 6c 65 74 69 6f 6e 29 20 76 61 72  rCompletion) var
6790: 3d 7c 24 76 61 72 7c 22 0a 0a 09 23 20 61 72 72  =|$var|"...# arr
67a0: 61 79 73 0a 09 23 0a 09 69 66 20 7b 5b 72 65 67  ays..#..if {[reg
67b0: 65 78 70 20 7b 28 5b 5e 28 5d 2a 29 5c 28 28 2e  exp {([^(]*)\((.
67c0: 2a 29 7d 20 24 7b 76 61 72 7d 20 61 6c 6c 20 61  *)} ${var} all a
67d0: 72 72 61 79 20 6e 61 6d 65 5d 7d 20 7b 0a 09 09  rray name]} {...
67e0: 73 65 74 20 6e 61 6d 65 73 20 5b 75 70 6c 65 76  set names [uplev
67f0: 65 6c 20 24 7b 6c 65 76 65 6c 7d 20 61 72 72 61  el ${level} arra
6800: 79 20 6e 61 6d 65 73 20 24 7b 61 72 72 61 79 7d  y names ${array}
6810: 20 24 7b 6e 61 6d 65 7d 2a 5d 0a 09 09 69 66 20   ${name}*]...if 
6820: 7b 31 20 3d 3d 20 5b 6c 6c 65 6e 67 74 68 20 24  {1 == [llength $
6830: 6e 61 6d 65 73 5d 7d 20 7b 20 3b 20 23 20 75 6e  names]} { ; # un
6840: 69 71 75 65 20 6d 61 74 63 68 0a 09 09 09 72 65  ique match....re
6850: 74 75 72 6e 20 22 24 7b 61 72 72 61 79 7d 28 24  turn "${array}($
6860: 7b 6e 61 6d 65 73 7d 29 22 0a 09 09 7d 20 65 6c  {names})"...} el
6870: 73 65 69 66 20 7b 22 22 20 21 3d 20 24 7b 6e 61  seif {"" != ${na
6880: 6d 65 73 7d 7d 20 7b 0a 09 09 09 72 65 74 75 72  mes}} {....retur
6890: 6e 20 22 24 7b 61 72 72 61 79 7d 28 5b 43 6f 6d  n "${array}([Com
68a0: 70 6c 65 74 65 4c 6f 6e 67 65 73 74 20 24 7b 6e  pleteLongest ${n
68b0: 61 6d 65 73 7d 5d 20 24 7b 6e 61 6d 65 73 7d 22  ames}] ${names}"
68c0: 0a 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 72  ...} else {....r
68d0: 65 74 75 72 6e 20 22 22 3b 20 23 20 6e 6f 74 68  eturn ""; # noth
68e0: 69 6e 67 20 74 6f 20 63 6f 6d 70 6c 65 74 65 0a  ing to complete.
68f0: 09 09 7d 0a 09 7d 0a 0a 09 23 20 6e 6f 6e 2d 61  ..}..}...# non-a
6900: 72 72 61 79 73 0a 09 23 0a 09 72 65 67 73 75 62  rrays..#..regsub
6910: 20 22 3a 24 22 20 24 7b 76 61 72 7d 20 22 3a 3a   ":$" ${var} "::
6920: 22 20 76 61 72 0a 09 73 65 74 20 6e 61 6d 65 73  " var..set names
6930: 70 61 63 65 73 20 5b 6e 61 6d 65 73 70 61 63 65  paces [namespace
6940: 20 63 68 69 6c 64 72 65 6e 20 3a 3a 20 24 7b 76   children :: ${v
6950: 61 72 7d 2a 5d 0a 09 69 66 20 7b 5b 6c 6c 65 6e  ar}*]..if {[llen
6960: 67 74 68 20 24 7b 6e 61 6d 65 73 70 61 63 65 73  gth ${namespaces
6970: 7d 5d 20 26 26 20 22 3a 3a 22 20 21 3d 20 5b 73  }] && "::" != [s
6980: 74 72 69 6e 67 20 72 61 6e 67 65 20 24 7b 76 61  tring range ${va
6990: 72 7d 20 30 20 31 5d 7d 20 7b 0a 09 09 66 6f 72  r} 0 1]} {...for
69a0: 65 61 63 68 20 6e 61 6d 65 20 24 7b 6e 61 6d 65  each name ${name
69b0: 73 70 61 63 65 73 7d 20 7b 0a 09 09 09 72 65 67  spaces} {....reg
69c0: 73 75 62 20 22 5e 3a 3a 22 20 24 7b 6e 61 6d 65  sub "^::" ${name
69d0: 7d 20 22 22 20 6e 61 6d 65 0a 09 09 09 69 66 20  } "" name....if 
69e0: 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20  {[string length 
69f0: 24 7b 6e 61 6d 65 7d 5d 7d 20 7b 0a 09 09 09 09  ${name}]} {.....
6a00: 6c 61 70 70 65 6e 64 20 6e 65 77 20 24 7b 6e 61  lappend new ${na
6a10: 6d 65 7d 3a 3a 0a 09 09 09 7d 0a 09 09 7d 0a 09  me}::....}...}..
6a20: 09 73 65 74 20 6e 61 6d 65 73 70 61 63 65 73 20  .set namespaces 
6a30: 24 7b 6e 65 77 7d 0a 09 09 75 6e 73 65 74 20 6e  ${new}...unset n
6a40: 65 77 0a 09 7d 0a 09 73 65 74 20 6d 61 74 63 68  ew..}..set match
6a50: 65 73 20 5c 0a 09 5b 73 74 72 69 6e 67 20 74 72  es \..[string tr
6a60: 69 6d 20 22 5b 75 70 6c 65 76 65 6c 20 24 7b 6c  im "[uplevel ${l
6a70: 65 76 65 6c 7d 20 69 6e 66 6f 20 76 61 72 73 20  evel} info vars 
6a80: 24 7b 76 61 72 7d 2a 5d 20 24 7b 6e 61 6d 65 73  ${var}*] ${names
6a90: 70 61 63 65 73 7d 22 5d 0a 09 69 66 20 7b 31 20  paces}"]..if {1 
6aa0: 3d 3d 20 5b 6c 6c 65 6e 67 74 68 20 24 6d 61 74  == [llength $mat
6ab0: 63 68 65 73 5d 7d 20 7b 20 3b 20 23 20 75 6e 69  ches]} { ; # uni
6ac0: 71 75 65 20 6d 61 74 63 68 0a 0a 09 09 23 20 63  que match....# c
6ad0: 68 65 63 6b 20 69 66 20 74 68 69 73 20 75 6e 69  heck if this uni
6ae0: 71 75 65 20 6d 61 74 63 68 20 69 73 20 61 6e 0a  que match is an.
6af0: 09 09 23 20 61 72 72 61 79 20 6e 61 6d 65 2c 20  ..# array name, 
6b00: 28 77 68 69 74 68 20 6e 6f 20 22 28 22 20 79 65  (whith no "(" ye
6b10: 74 29 2e 0a 09 09 23 0a 09 09 69 66 20 7b 5b 75  t)....#...if {[u
6b20: 70 6c 65 76 65 6c 20 24 7b 6c 65 76 65 6c 7d 20  plevel ${level} 
6b30: 61 72 72 61 79 20 65 78 69 73 74 73 20 24 6d 61  array exists $ma
6b40: 74 63 68 65 73 5d 7d 20 7b 0a 09 09 09 72 65 74  tches]} {....ret
6b50: 75 72 6e 20 5b 56 61 72 43 6f 6d 70 6c 65 74 69  urn [VarCompleti
6b60: 6f 6e 20 24 7b 6d 61 74 63 68 65 73 7d 28 20 24  on ${matches}( $
6b70: 7b 6c 65 76 65 6c 7d 5d 3b 20 23 20 72 65 63 75  {level}]; # recu
6b80: 72 73 69 6f 6e 0a 09 09 7d 20 65 6c 73 65 20 7b  rsion...} else {
6b90: 0a 09 09 09 72 65 74 75 72 6e 20 24 7b 70 72 65  ....return ${pre
6ba0: 7d 24 7b 6d 61 74 63 68 65 73 7d 5b 52 69 67 68  }${matches}[Righ
6bb0: 74 20 24 7b 70 72 65 7d 5d 0a 09 09 7d 0a 09 7d  t ${pre}]...}..}
6bc0: 20 65 6c 73 65 69 66 20 7b 22 22 20 21 3d 20 24   elseif {"" != $
6bd0: 6d 61 74 63 68 65 73 7d 20 7b 20 3b 20 23 20 6d  matches} { ; # m
6be0: 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 6d 61 74  ore than one mat
6bf0: 63 68 0a 09 09 20 20 72 65 74 75 72 6e 20 5b 43  ch...  return [C
6c00: 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20  ompleteFromList 
6c10: 24 7b 74 65 78 74 7d 20 24 7b 6d 61 74 63 68 65  ${text} ${matche
6c20: 73 7d 5d 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 09  s}]..} else {...
6c30: 72 65 74 75 72 6e 20 22 22 3b 20 23 20 6e 6f 74  return ""; # not
6c40: 68 69 6e 67 20 74 6f 20 63 6f 6d 70 6c 65 74 65  hing to complete
6c50: 0a 09 7d 0a 7d 0a 0a 70 72 6f 63 20 43 6f 6d 70  ..}.}..proc Comp
6c60: 6c 65 74 65 43 6f 6e 74 72 6f 6c 53 74 61 74 65  leteControlState
6c70: 6d 65 6e 74 20 7b 74 65 78 74 20 73 74 61 72 74  ment {text start
6c80: 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f   end line pos mo
6c90: 64 20 70 72 65 20 6e 65 77 5f 6c 69 6e 65 7d 20  d pre new_line} 
6ca0: 7b 0a 09 73 65 74 20 70 72 65 20 5b 47 65 74 51  {..set pre [GetQ
6cb0: 75 6f 74 65 64 50 72 65 66 69 78 20 24 7b 70 72  uotedPrefix ${pr
6cc0: 65 7d 5d 0a 09 73 65 74 20 63 6d 64 20 5b 4c 69  e}]..set cmd [Li
6cd0: 6e 64 65 78 20 24 6e 65 77 5f 6c 69 6e 65 20 30  ndex $new_line 0
6ce0: 5d 0a 09 73 65 74 20 64 69 66 66 20 5b 65 78 70  ]..set diff [exp
6cf0: 72 20 5c 0a 09 5b 73 74 72 69 6e 67 20 6c 65 6e  r \..[string len
6d00: 67 74 68 20 24 6c 69 6e 65 5d 20 2d 20 5b 73 74  gth $line] - [st
6d10: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 6e 65 77  ring length $new
6d20: 5f 6c 69 6e 65 5d 5d 0a 09 69 66 20 7b 24 64 69  _line]]..if {$di
6d30: 66 66 20 3d 3d 20 5b 65 78 70 72 20 24 73 74 61  ff == [expr $sta
6d40: 72 74 20 2b 20 31 5d 7d 20 7b 0a 09 09 73 65 74  rt + 1]} {...set
6d50: 20 6d 6f 64 31 20 24 6d 6f 64 0a 09 7d 20 65 6c   mod1 $mod..} el
6d60: 73 65 20 7b 0a 09 09 73 65 74 20 6d 6f 64 31 20  se {...set mod1 
6d70: 24 74 65 78 74 0a 09 09 73 65 74 20 70 72 65 20  $text...set pre 
6d80: 22 22 0a 09 7d 0a 09 73 65 74 20 6e 65 77 5f 65  ""..}..set new_e
6d90: 6e 64 20 5b 65 78 70 72 20 24 65 6e 64 20 2d 20  nd [expr $end - 
6da0: 24 64 69 66 66 5d 0a 09 73 65 74 20 6e 65 77 5f  $diff]..set new_
6db0: 73 74 61 72 74 20 5b 65 78 70 72 20 24 6e 65 77  start [expr $new
6dc0: 5f 65 6e 64 20 2d 20 5b 73 74 72 69 6e 67 20 6c  _end - [string l
6dd0: 65 6e 67 74 68 20 24 6d 6f 64 31 5d 5d 0a 09 23  ength $mod1]]..#
6de0: 20 70 75 74 73 20 22 22 0a 09 23 20 70 75 74 73   puts ""..# puts
6df0: 20 6e 65 77 5f 73 74 61 72 74 3d 24 6e 65 77 5f   new_start=$new_
6e00: 73 74 61 72 74 0a 09 23 20 70 75 74 73 20 6e 65  start..# puts ne
6e10: 77 5f 65 6e 64 3d 24 6e 65 77 5f 65 6e 64 0a 09  w_end=$new_end..
6e20: 23 20 70 75 74 73 20 6e 65 77 5f 6c 69 6e 65 3d  # puts new_line=
6e30: 24 6e 65 77 5f 6c 69 6e 65 0a 09 23 20 70 75 74  $new_line..# put
6e40: 73 20 6d 6f 64 31 3d 24 6d 6f 64 31 0a 09 69 66  s mod1=$mod1..if
6e50: 20 7b 24 6e 65 77 5f 73 74 61 72 74 20 3c 20 30   {$new_start < 0
6e60: 7d 20 7b 0a 09 09 72 65 74 75 72 6e 20 22 22 3b  } {...return "";
6e70: 20 23 20 77 68 65 6e 20 64 6f 65 73 20 74 68 69   # when does thi
6e80: 73 20 6f 63 63 75 72 3f 0a 09 7d 0a 09 23 20 70  s occur?..}..# p
6e90: 75 74 73 20 73 74 64 65 72 72 20 22 22 0a 09 23  uts stderr ""..#
6ea0: 20 70 75 74 73 20 73 74 64 65 72 72 20 73 74 61   puts stderr sta
6eb0: 72 74 3d 7c 24 73 74 61 72 74 7c 0a 09 23 20 70  rt=|$start|..# p
6ec0: 75 74 73 20 73 74 64 65 72 72 20 65 6e 64 3d 7c  uts stderr end=|
6ed0: 24 65 6e 64 7c 0a 09 23 20 70 75 74 73 20 73 74  $end|..# puts st
6ee0: 64 65 72 72 20 6d 6f 64 3d 7c 24 6d 6f 64 7c 0a  derr mod=|$mod|.
6ef0: 09 23 20 70 75 74 73 20 73 74 64 65 72 72 20 6e  .# puts stderr n
6f00: 65 77 5f 73 74 61 72 74 3d 7c 24 6e 65 77 5f 73  ew_start=|$new_s
6f10: 74 61 72 74 7c 0a 09 23 20 70 75 74 73 20 73 74  tart|..# puts st
6f20: 64 65 72 72 20 6e 65 77 5f 65 6e 64 3d 7c 24 6e  derr new_end=|$n
6f30: 65 77 5f 65 6e 64 7c 0a 09 23 20 70 75 74 73 20  ew_end|..# puts 
6f40: 73 74 64 65 72 72 20 6e 65 77 5f 6c 69 6e 65 3d  stderr new_line=
6f50: 7c 24 6e 65 77 5f 6c 69 6e 65 7c 0a 09 23 20 70  |$new_line|..# p
6f60: 75 74 73 20 73 74 64 65 72 72 20 22 22 0a 09 73  uts stderr ""..s
6f70: 65 74 20 72 65 73 20 5b 53 63 72 69 70 74 43 6f  et res [ScriptCo
6f80: 6d 70 6c 65 74 65 72 20 24 6d 6f 64 31 20 24 6e  mpleter $mod1 $n
6f90: 65 77 5f 73 74 61 72 74 20 24 6e 65 77 5f 65 6e  ew_start $new_en
6fa0: 64 20 24 6e 65 77 5f 6c 69 6e 65 5d 0a 09 23 20  d $new_line]..# 
6fb0: 70 75 74 73 20 73 74 64 65 72 72 20 5c 6e 5c 24  puts stderr \n\$
6fc0: 7b 70 72 65 7d 5c 24 7b 72 65 73 7d 3d 7c 24 7b  {pre}\${res}=|${
6fd0: 70 72 65 7d 24 7b 72 65 73 7d 7c 0a 09 69 66 20  pre}${res}|..if 
6fe0: 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20  {[string length 
6ff0: 5b 4c 69 6e 64 65 78 20 24 7b 72 65 73 7d 20 30  [Lindex ${res} 0
7000: 5d 5d 7d 20 7b 0a 09 09 72 65 74 75 72 6e 20 24  ]]} {...return $
7010: 7b 70 72 65 7d 24 7b 72 65 73 7d 0a 09 7d 20 65  {pre}${res}..} e
7020: 6c 73 65 20 7b 0a 09 09 72 65 74 75 72 6e 20 24  lse {...return $
7030: 7b 72 65 73 7d 0a 09 7d 0a 09 72 65 74 75 72 6e  {res}..}..return
7040: 20 22 22 0a 7d 0a 0a 70 72 6f 63 20 42 72 61 63   "".}..proc Brac
7050: 65 4f 72 43 6f 6d 6d 61 6e 64 20 7b 74 65 78 74  eOrCommand {text
7060: 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20   start end line 
7070: 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 69 66 20 7b  pos mod} {..if {
7080: 21 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20  ![string length 
7090: 5b 4c 69 6e 64 65 78 20 24 6c 69 6e 65 20 24 70  [Lindex $line $p
70a0: 6f 73 5d 5d 7d 20 7b 0a 09 09 72 65 74 75 72 6e  os]]} {...return
70b0: 20 5b 6c 69 73 74 20 5c 7b 20 7b 7d 5d 3b 20 23   [list \{ {}]; #
70c0: 20 5c 7d 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 09   \}..} else {...
70d0: 73 65 74 20 6e 65 77 5f 6c 69 6e 65 20 5b 73 74  set new_line [st
70e0: 72 69 6e 67 20 74 72 69 6d 20 5b 49 6e 63 6f 6d  ring trim [Incom
70f0: 70 6c 65 74 65 4c 69 73 74 52 65 6d 61 69 6e 64  pleteListRemaind
7100: 65 72 20 24 6c 69 6e 65 5d 5d 0a 09 09 69 66 20  er $line]]...if 
7110: 7b 21 5b 72 65 67 65 78 70 20 7b 5e 28 5b 5c 7b  {![regexp {^([\{
7120: 5c 22 5d 29 28 2e 2a 29 24 7d 20 24 6e 65 77 5f  \"])(.*)$} $new_
7130: 6c 69 6e 65 20 61 6c 6c 20 70 72 65 20 6e 65 77  line all pre new
7140: 5f 6c 69 6e 65 5d 7d 20 7b 0a 09 09 09 73 65 74  _line]} {....set
7150: 20 70 72 65 20 22 22 0a 09 09 7d 0a 09 09 72 65   pre ""...}...re
7160: 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 43 6f  turn [CompleteCo
7170: 6e 74 72 6f 6c 53 74 61 74 65 6d 65 6e 74 20 24  ntrolStatement $
7180: 74 65 78 74 20 5c 0a 09 09 24 73 74 61 72 74 20  text \...$start 
7190: 24 65 6e 64 20 24 6c 69 6e 65 20 24 70 6f 73 20  $end $line $pos 
71a0: 24 6d 6f 64 20 24 70 72 65 20 24 6e 65 77 5f 6c  $mod $pre $new_l
71b0: 69 6e 65 5d 0a 09 7d 0a 7d 0a 0a 70 72 6f 63 20  ine]..}.}..proc 
71c0: 46 75 6c 6c 51 75 61 6c 69 66 69 65 64 4d 61 74  FullQualifiedMat
71d0: 63 68 65 73 20 7b 71 75 61 6c 69 66 69 65 72 20  ches {qualifier 
71e0: 6d 61 74 63 68 6c 69 73 74 7d 20 7b 0a 09 73 65  matchlist} {..se
71f0: 74 20 6e 65 77 20 22 22 0a 09 69 66 20 7b 22 22  t new ""..if {""
7200: 20 21 3d 20 24 71 75 61 6c 69 66 69 65 72 20 26   != $qualifier &
7210: 26 20 21 5b 72 65 67 65 78 70 20 3a 3a 24 20 24  & ![regexp ::$ $
7220: 71 75 61 6c 69 66 69 65 72 5d 7d 20 7b 0a 09 09  qualifier]} {...
7230: 61 70 70 65 6e 64 20 71 75 61 6c 69 66 69 65 72  append qualifier
7240: 20 3a 3a 0a 09 7d 0a 09 66 6f 72 65 61 63 68 20   ::..}..foreach 
7250: 65 6e 74 72 79 20 24 7b 6d 61 74 63 68 6c 69 73  entry ${matchlis
7260: 74 7d 20 7b 0a 09 09 73 65 74 20 66 75 6c 6c 20  t} {...set full 
7270: 24 7b 71 75 61 6c 69 66 69 65 72 7d 24 7b 65 6e  ${qualifier}${en
7280: 74 72 79 7d 0a 09 09 69 66 20 7b 22 22 20 21 3d  try}...if {"" !=
7290: 20 5b 6e 61 6d 65 73 70 61 63 65 20 77 68 69 63   [namespace whic
72a0: 68 20 24 7b 66 75 6c 6c 7d 5d 7d 20 7b 0a 09 09  h ${full}]} {...
72b0: 09 6c 61 70 70 65 6e 64 20 6e 65 77 20 24 7b 66  .lappend new ${f
72c0: 75 6c 6c 7d 0a 09 09 7d 0a 09 7d 0a 09 72 65 74  ull}...}..}..ret
72d0: 75 72 6e 20 24 7b 6e 65 77 7d 0a 7d 0a 0a 70 72  urn ${new}.}..pr
72e0: 6f 63 20 50 72 6f 63 73 4f 6e 6c 79 43 6f 6d 70  oc ProcsOnlyComp
72f0: 6c 65 74 69 6f 6e 20 7b 63 6d 64 7d 20 7b 0a 09  letion {cmd} {..
7300: 72 65 74 75 72 6e 20 5b 43 6f 6d 6d 61 6e 64 43  return [CommandC
7310: 6f 6d 70 6c 65 74 69 6f 6e 20 24 7b 63 6d 64 7d  ompletion ${cmd}
7320: 20 70 72 6f 63 73 5d 0a 7d 0a 0a 70 72 6f 63 20   procs].}..proc 
7330: 43 6f 6d 6d 61 6e 64 73 4f 6e 6c 79 43 6f 6d 70  CommandsOnlyComp
7340: 6c 65 74 69 6f 6e 20 7b 63 6d 64 7d 20 7b 0a 09  letion {cmd} {..
7350: 72 65 74 75 72 6e 20 5b 43 6f 6d 6d 61 6e 64 43  return [CommandC
7360: 6f 6d 70 6c 65 74 69 6f 6e 20 24 7b 63 6d 64 7d  ompletion ${cmd}
7370: 20 63 6f 6d 6d 61 6e 64 73 5d 0a 7d 0a 0a 70 72   commands].}..pr
7380: 6f 63 20 43 6f 6d 6d 61 6e 64 43 6f 6d 70 6c 65  oc CommandComple
7390: 74 69 6f 6e 20 7b 63 6d 64 20 7b 61 63 74 69 6f  tion {cmd {actio
73a0: 6e 20 62 6f 74 68 7d 20 7b 73 70 63 20 3a 3a 7d  n both} {spc ::}
73b0: 7d 20 7b 0a 09 23 20 67 65 74 20 74 68 65 20 6c  } {..# get the l
73c0: 65 61 64 69 6e 67 20 63 6f 6c 6f 6e 73 20 69 6e  eading colons in
73d0: 20 60 63 6d 64 27 2e 0a 09 72 65 67 65 78 70 20   `cmd'...regexp 
73e0: 7b 5e 3a 2a 7d 20 24 7b 63 6d 64 7d 20 70 72 65  {^:*} ${cmd} pre
73f0: 0a 09 72 65 74 75 72 6e 20 5b 43 6f 6d 6d 61 6e  ..return [Comman
7400: 64 43 6f 6d 70 6c 65 74 69 6f 6e 57 69 74 68 50  dCompletionWithP
7410: 72 65 20 24 63 6d 64 20 24 61 63 74 69 6f 6e 20  re $cmd $action 
7420: 24 73 70 63 20 24 70 72 65 5d 0a 7d 0a 0a 70 72  $spc $pre].}..pr
7430: 6f 63 20 43 6f 6d 6d 61 6e 64 43 6f 6d 70 6c 65  oc CommandComple
7440: 74 69 6f 6e 57 69 74 68 50 72 65 20 7b 63 6d 64  tionWithPre {cmd
7450: 20 61 63 74 69 6f 6e 20 73 70 63 20 70 72 65 7d   action spc pre}
7460: 20 7b 0a 09 23 20 70 75 74 73 20 73 74 64 65 72   {..# puts stder
7470: 72 20 22 28 43 6f 6d 6d 61 6e 64 43 6f 6d 70 6c  r "(CommandCompl
7480: 65 74 69 6f 6e 29 20 63 6d 64 3d 7c 24 63 6d 64  etion) cmd=|$cmd
7490: 7c 22 0a 09 23 20 70 75 74 73 20 73 74 64 65 72  |"..# puts stder
74a0: 72 20 22 28 43 6f 6d 6d 61 6e 64 43 6f 6d 70 6c  r "(CommandCompl
74b0: 65 74 69 6f 6e 29 20 61 63 74 69 6f 6e 3d 7c 24  etion) action=|$
74c0: 61 63 74 69 6f 6e 7c 22 0a 09 23 20 70 75 74 73  action|"..# puts
74d0: 20 73 74 64 65 72 72 20 22 28 43 6f 6d 6d 61 6e   stderr "(Comman
74e0: 64 43 6f 6d 70 6c 65 74 69 6f 6e 29 20 73 70 63  dCompletion) spc
74f0: 3d 7c 24 73 70 63 7c 22 0a 0a 09 73 65 74 20 63  =|$spc|"...set c
7500: 6d 64 20 5b 53 74 72 69 70 50 72 65 66 69 78 20  md [StripPrefix 
7510: 24 7b 63 6d 64 7d 5d 0a 09 73 65 74 20 71 75 61  ${cmd}]..set qua
7520: 6c 69 20 5b 6e 61 6d 65 73 70 61 63 65 20 71 75  li [namespace qu
7530: 61 6c 69 66 69 65 72 73 20 24 7b 63 6d 64 7d 5d  alifiers ${cmd}]
7540: 0a 09 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65  ..if {[string le
7550: 6e 67 74 68 20 24 7b 71 75 61 6c 69 7d 5d 7d 20  ngth ${quali}]} 
7560: 7b 0a 09 09 23 20 70 75 74 73 20 73 74 64 65 72  {...# puts stder
7570: 72 20 5c 6e 71 75 61 6c 69 3d 7c 24 71 75 61 6c  r \nquali=|$qual
7580: 69 7c 0a 09 09 73 65 74 20 6d 61 74 63 68 65 73  i|...set matches
7590: 20 5b 43 6f 6d 6d 61 6e 64 43 6f 6d 70 6c 65 74   [CommandComplet
75a0: 69 6f 6e 57 69 74 68 50 72 65 20 5c 0a 09 09 5b  ionWithPre \...[
75b0: 6e 61 6d 65 73 70 61 63 65 20 74 61 69 6c 20 24  namespace tail $
75c0: 7b 63 6d 64 7d 5d 20 24 7b 61 63 74 69 6f 6e 7d  {cmd}] ${action}
75d0: 20 24 7b 73 70 63 7d 24 7b 71 75 61 6c 69 7d 20   ${spc}${quali} 
75e0: 24 7b 70 72 65 7d 5d 0a 09 09 23 20 70 75 74 73  ${pre}]...# puts
75f0: 20 73 74 64 65 72 72 20 5c 6e 6d 61 74 63 68 65   stderr \nmatche
7600: 73 31 3d 7c 24 6d 61 74 63 68 65 73 7c 0a 09 09  s1=|$matches|...
7610: 72 65 74 75 72 6e 20 24 6d 61 74 63 68 65 73 0a  return $matches.
7620: 09 7d 0a 09 73 65 74 20 63 6d 64 20 5b 73 74 72  .}..set cmd [str
7630: 69 6e 67 20 74 72 69 6d 20 24 7b 63 6d 64 7d 5d  ing trim ${cmd}]
7640: 2a 0a 09 23 20 70 75 74 73 20 73 74 64 65 72 72  *..# puts stderr
7650: 20 5c 6e 63 6d 64 3d 7c 24 63 6d 64 7c 5c 6e 0a   \ncmd=|$cmd|\n.
7660: 09 69 66 20 7b 22 70 72 6f 63 73 22 20 21 3d 20  .if {"procs" != 
7670: 24 7b 61 63 74 69 6f 6e 7d 7d 20 7b 0a 09 09 73  ${action}} {...s
7680: 65 74 20 61 6c 6c 5f 63 6f 6d 6d 61 6e 64 73 20  et all_commands 
7690: 5b 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20  [namespace eval 
76a0: 24 73 70 63 20 5b 6c 69 73 74 20 69 6e 66 6f 20  $spc [list info 
76b0: 63 6f 6d 6d 61 6e 64 73 20 24 7b 63 6d 64 7d 5d  commands ${cmd}]
76c0: 5d 0a 09 09 23 20 70 75 74 73 20 73 74 64 65 72  ]...# puts stder
76d0: 72 20 61 6c 6c 5f 63 6f 6d 6d 61 6e 64 73 3d 7c  r all_commands=|
76e0: 24 61 6c 6c 5f 63 6f 6d 6d 61 6e 64 73 7c 0a 09  $all_commands|..
76f0: 09 73 65 74 20 63 6f 6d 6d 61 6e 64 73 20 22 22  .set commands ""
7700: 0a 09 09 66 6f 72 65 61 63 68 20 63 6f 6d 6d 61  ...foreach comma
7710: 6e 64 20 24 61 6c 6c 5f 63 6f 6d 6d 61 6e 64 73  nd $all_commands
7720: 20 7b 0a 09 09 09 69 66 20 7b 5b 6e 61 6d 65 73   {....if {[names
7730: 70 61 63 65 20 65 76 61 6c 20 24 73 70 63 20 5b  pace eval $spc [
7740: 6c 69 73 74 20 6e 61 6d 65 73 70 61 63 65 20 6f  list namespace o
7750: 72 69 67 69 6e 20 24 63 6f 6d 6d 61 6e 64 5d 5d  rigin $command]]
7760: 20 3d 3d 20 5c 0a 09 09 09 09 5b 6e 61 6d 65 73   == \.....[names
7770: 70 61 63 65 20 65 76 61 6c 20 24 73 70 63 20 5b  pace eval $spc [
7780: 6c 69 73 74 20 6e 61 6d 65 73 70 61 63 65 20 77  list namespace w
7790: 68 69 63 68 20 24 63 6f 6d 6d 61 6e 64 5d 5d 7d  hich $command]]}
77a0: 20 7b 0a 09 09 09 09 6c 61 70 70 65 6e 64 20 63   {.....lappend c
77b0: 6f 6d 6d 61 6e 64 73 20 24 63 6f 6d 6d 61 6e 64  ommands $command
77c0: 0a 09 09 09 7d 0a 09 09 7d 0a 09 7d 20 65 6c 73  ....}...}..} els
77d0: 65 20 7b 0a 09 09 73 65 74 20 63 6f 6d 6d 61 6e  e {...set comman
77e0: 64 73 20 22 22 0a 09 7d 0a 09 69 66 20 7b 22 63  ds ""..}..if {"c
77f0: 6f 6d 6d 61 6e 64 73 22 20 21 3d 20 24 7b 61 63  ommands" != ${ac
7800: 74 69 6f 6e 7d 7d 20 7b 0a 09 09 73 65 74 20 61  tion}} {...set a
7810: 6c 6c 5f 70 72 6f 63 73 20 5b 6e 61 6d 65 73 70  ll_procs [namesp
7820: 61 63 65 20 65 76 61 6c 20 24 73 70 63 20 5b 6c  ace eval $spc [l
7830: 69 73 74 20 69 6e 66 6f 20 70 72 6f 63 73 20 24  ist info procs $
7840: 7b 63 6d 64 7d 5d 5d 0a 09 09 23 20 70 75 74 73  {cmd}]]...# puts
7850: 20 73 74 64 65 72 72 20 70 72 6f 63 73 3d 7c 24   stderr procs=|$
7860: 70 72 6f 63 73 7c 0a 09 09 73 65 74 20 70 72 6f  procs|...set pro
7870: 63 73 20 22 22 0a 09 09 66 6f 72 65 61 63 68 20  cs ""...foreach 
7880: 70 72 6f 63 20 24 61 6c 6c 5f 70 72 6f 63 73 20  proc $all_procs 
7890: 7b 0a 09 09 09 69 66 20 7b 5b 6e 61 6d 65 73 70  {....if {[namesp
78a0: 61 63 65 20 65 76 61 6c 20 24 73 70 63 20 5b 6c  ace eval $spc [l
78b0: 69 73 74 20 6e 61 6d 65 73 70 61 63 65 20 6f 72  ist namespace or
78c0: 69 67 69 6e 20 24 70 72 6f 63 5d 5d 20 3d 3d 20  igin $proc]] == 
78d0: 5c 0a 09 09 09 09 5b 6e 61 6d 65 73 70 61 63 65  \.....[namespace
78e0: 20 65 76 61 6c 20 24 73 70 63 20 5b 6c 69 73 74   eval $spc [list
78f0: 20 6e 61 6d 65 73 70 61 63 65 20 77 68 69 63 68   namespace which
7900: 20 24 70 72 6f 63 5d 5d 7d 20 7b 0a 09 09 09 09   $proc]]} {.....
7910: 6c 61 70 70 65 6e 64 20 70 72 6f 63 73 20 24 70  lappend procs $p
7920: 72 6f 63 0a 09 09 09 7d 0a 09 09 7d 0a 09 7d 20  roc....}...}..} 
7930: 65 6c 73 65 20 7b 0a 09 09 73 65 74 20 70 72 6f  else {...set pro
7940: 63 73 20 22 22 0a 09 7d 0a 09 73 65 74 20 6d 61  cs ""..}..set ma
7950: 74 63 68 65 73 20 5b 6e 61 6d 65 73 70 61 63 65  tches [namespace
7960: 20 65 76 61 6c 20 24 73 70 63 20 63 6f 6e 63 61   eval $spc conca
7970: 74 20 24 7b 63 6f 6d 6d 61 6e 64 73 7d 20 24 7b  t ${commands} ${
7980: 70 72 6f 63 73 7d 5d 0a 09 73 65 74 20 6e 61 6d  procs}]..set nam
7990: 65 73 70 61 63 65 73 20 5b 6e 61 6d 65 73 70 61  espaces [namespa
79a0: 63 65 20 63 68 69 6c 64 72 65 6e 20 24 73 70 63  ce children $spc
79b0: 20 24 7b 63 6d 64 7d 5d 0a 0a 09 69 66 20 7b 21   ${cmd}]...if {!
79c0: 5b 6c 6c 65 6e 67 74 68 20 24 7b 6d 61 74 63 68  [llength ${match
79d0: 65 73 7d 5d 20 26 26 20 31 20 3d 3d 20 5b 6c 6c  es}] && 1 == [ll
79e0: 65 6e 67 74 68 20 24 7b 6e 61 6d 65 73 70 61 63  ength ${namespac
79f0: 65 73 7d 5d 7d 20 7b 0a 09 09 73 65 74 20 6d 61  es}]} {...set ma
7a00: 74 63 68 65 73 20 5b 43 6f 6d 6d 61 6e 64 43 6f  tches [CommandCo
7a10: 6d 70 6c 65 74 69 6f 6e 57 69 74 68 50 72 65 20  mpletionWithPre 
7a20: 7b 7d 20 24 7b 61 63 74 69 6f 6e 7d 20 24 7b 6e  {} ${action} ${n
7a30: 61 6d 65 73 70 61 63 65 73 7d 20 24 7b 70 72 65  amespaces} ${pre
7a40: 7d 5d 0a 09 09 23 20 70 75 74 73 20 73 74 64 65  }]...# puts stde
7a50: 72 72 20 5c 6e 6d 61 74 63 68 65 73 3d 7c 24 6d  rr \nmatches=|$m
7a60: 61 74 63 68 65 73 7c 0a 09 09 72 65 74 75 72 6e  atches|...return
7a70: 20 24 6d 61 74 63 68 65 73 0a 09 7d 0a 0a 09 23   $matches..}...#
7a80: 20 6d 61 6b 65 20 60 6e 61 6d 65 73 70 61 63 65   make `namespace
7a90: 73 27 20 68 61 76 69 6e 67 20 65 78 61 63 74 6c  s' having exactl
7aa0: 79 0a 09 23 20 74 68 65 20 73 61 6d 65 20 6e 75  y..# the same nu
7ab0: 6d 62 65 72 20 6f 66 20 63 6f 6c 6f 6e 73 20 61  mber of colons a
7ac0: 73 20 60 63 6d 64 27 2e 0a 09 23 0a 09 72 65 67  s `cmd'...#..reg
7ad0: 73 75 62 20 2d 61 6c 6c 20 7b 5e 3a 2a 7d 20 24  sub -all {^:*} $
7ae0: 73 70 63 20 24 70 72 65 20 73 70 63 0a 0a 09 73  spc $pre spc...s
7af0: 65 74 20 6d 61 74 63 68 65 73 20 5b 46 75 6c 6c  et matches [Full
7b00: 51 75 61 6c 69 66 69 65 64 4d 61 74 63 68 65 73  QualifiedMatches
7b10: 20 24 7b 73 70 63 7d 20 24 7b 6d 61 74 63 68 65   ${spc} ${matche
7b20: 73 7d 5d 0a 09 23 20 70 75 74 73 20 73 74 64 65  s}]..# puts stde
7b30: 72 72 20 5c 6e 6d 61 74 63 68 65 73 33 3d 7c 24  rr \nmatches3=|$
7b40: 6d 61 74 63 68 65 73 7c 0a 09 72 65 74 75 72 6e  matches|..return
7b50: 20 5b 73 74 72 69 6e 67 20 74 72 69 6d 20 22 24   [string trim "$
7b60: 7b 6d 61 74 63 68 65 73 7d 20 24 7b 6e 61 6d 65  {matches} ${name
7b70: 73 70 61 63 65 73 7d 22 5d 0a 7d 0a 0a 23 2a 2a  spaces}"].}..#**
7b80: 0a 23 20 63 68 65 63 6b 2c 20 69 66 20 74 68 65  .# check, if the
7b90: 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20   first argument 
7ba0: 73 74 61 72 74 73 20 77 69 74 68 20 61 20 27 5b  starts with a '[
7bb0: 27 0a 23 20 61 6e 64 20 6d 75 73 74 20 62 65 20  '.# and must be 
7bc0: 65 76 61 6c 75 61 74 65 64 20 62 65 66 6f 72 65  evaluated before
7bd0: 20 63 6f 6e 74 69 6e 75 69 6e 67 2e 0a 23 20 4e   continuing..# N
7be0: 4f 54 45 3a 20 74 72 69 6d 73 20 74 68 65 20 60  OTE: trims the `
7bf0: 6c 69 6e 65 27 2e 0a 23 20 20 20 20 20 20 20 65  line'..#       e
7c00: 76 65 6e 74 75 61 6c 6c 79 20 6d 6f 64 69 66 69  ventually modifi
7c10: 65 73 20 61 6c 6c 20 61 72 67 75 6d 65 6e 74 73  es all arguments
7c20: 2e 0a 23 20 44 41 54 45 3a 20 53 65 70 2d 30 36  ..# DATE: Sep-06
7c30: 2d 31 39 39 39 0a 23 0a 70 72 6f 63 20 45 76 65  -1999.#.proc Eve
7c40: 6e 74 75 61 6c 6c 79 45 76 61 6c 75 61 74 65 46  ntuallyEvaluateF
7c50: 69 72 73 74 20 7b 70 61 72 74 54 20 73 74 61 72  irst {partT star
7c60: 74 54 20 65 6e 64 54 20 6c 69 6e 65 54 7d 20 7b  tT endT lineT} {
7c70: 0a 09 23 20 72 65 74 75 72 6e 3b 20 23 20 64 69  ..# return; # di
7c80: 73 61 62 6c 65 64 0a 09 75 70 76 61 72 20 24 70  sabled..upvar $p
7c90: 61 72 74 54 20 70 61 72 74 20 24 73 74 61 72 74  artT part $start
7ca0: 54 20 73 74 61 72 74 20 24 65 6e 64 54 20 65 6e  T start $endT en
7cb0: 64 20 24 6c 69 6e 65 54 20 6c 69 6e 65 0a 0a 09  d $lineT line...
7cc0: 73 65 74 20 6f 6c 64 6c 65 6e 20 5b 73 74 72 69  set oldlen [stri
7cd0: 6e 67 20 6c 65 6e 67 74 68 20 24 7b 6c 69 6e 65  ng length ${line
7ce0: 7d 5d 0a 09 23 20 73 65 74 20 6c 69 6e 65 20 5b  }]..# set line [
7cf0: 73 74 72 69 6e 67 20 74 72 69 6d 20 24 7b 6c 69  string trim ${li
7d00: 6e 65 7d 5d 0a 09 73 65 74 20 6c 69 6e 65 20 5b  ne}]..set line [
7d10: 73 74 72 69 6e 67 20 74 72 69 6d 6c 65 66 74 20  string trimleft 
7d20: 24 7b 6c 69 6e 65 7d 5d 0a 09 73 65 74 20 64 69  ${line}]..set di
7d30: 66 66 20 5b 65 78 70 72 20 5b 73 74 72 69 6e 67  ff [expr [string
7d40: 20 6c 65 6e 67 74 68 20 24 6c 69 6e 65 5d 20 2d   length $line] -
7d50: 20 24 6f 6c 64 6c 65 6e 5d 0a 09 69 6e 63 72 20   $oldlen]..incr 
7d60: 73 74 61 72 74 20 24 64 69 66 66 0a 09 69 6e 63  start $diff..inc
7d70: 72 20 65 6e 64 20 24 64 69 66 66 0a 0a 09 73 65  r end $diff...se
7d80: 74 20 63 68 61 72 20 5b 73 74 72 69 6e 67 20 69  t char [string i
7d90: 6e 64 65 78 20 24 7b 6c 69 6e 65 7d 20 30 5d 0a  ndex ${line} 0].
7da0: 09 69 66 20 7b 7b 5b 7d 20 21 3d 20 24 7b 63 68  .if {{[} != ${ch
7db0: 61 72 7d 20 26 26 20 7b 24 7d 20 21 3d 20 24 7b  ar} && {$} != ${
7dc0: 63 68 61 72 7d 7d 20 7b 72 65 74 75 72 6e 7d 0a  char}} {return}.
7dd0: 0a 09 73 65 74 20 70 6f 73 20 30 0a 09 77 68 69  ..set pos 0..whi
7de0: 6c 65 20 7b 2d 31 20 21 3d 20 5b 73 65 74 20 69  le {-1 != [set i
7df0: 64 78 20 5b 73 74 72 69 6e 67 20 66 69 72 73 74  dx [string first
7e00: 20 7b 5d 7d 20 24 7b 6c 69 6e 65 7d 20 24 7b 70   {]} ${line} ${p
7e10: 6f 73 7d 5d 5d 7d 20 7b 0a 09 09 73 65 74 20 63  os}]]} {...set c
7e20: 6d 64 20 5b 73 74 72 69 6e 67 20 72 61 6e 67 65  md [string range
7e30: 20 24 7b 6c 69 6e 65 7d 20 30 20 24 7b 69 64 78   ${line} 0 ${idx
7e40: 7d 5d 0a 09 09 69 66 20 7b 5b 69 6e 66 6f 20 63  }]...if {[info c
7e50: 6f 6d 70 6c 65 74 65 20 24 7b 63 6d 64 7d 5d 7d  omplete ${cmd}]}
7e60: 20 7b 0a 09 09 09 62 72 65 61 6b 3b 0a 09 09 7d   {....break;...}
7e70: 0a 09 09 73 65 74 20 70 6f 73 20 5b 65 78 70 72  ...set pos [expr
7e80: 20 24 7b 69 64 78 7d 20 2b 20 31 5d 0a 09 7d 0a   ${idx} + 1]..}.
7e90: 0a 09 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69  ..if {![info exi
7ea0: 73 74 73 20 63 6d 64 5d 7d 20 7b 72 65 74 75 72  sts cmd]} {retur
7eb0: 6e 7d 0a 09 69 66 20 7b 21 5b 69 6e 66 6f 20 63  n}..if {![info c
7ec0: 6f 6d 70 6c 65 74 65 20 24 7b 63 6d 64 7d 5d 7d  omplete ${cmd}]}
7ed0: 20 7b 72 65 74 75 72 6e 7d 0a 09 73 65 74 20 63   {return}..set c
7ee0: 6d 64 20 5b 73 74 72 69 6e 67 20 72 61 6e 67 65  md [string range
7ef0: 20 24 7b 63 6d 64 7d 20 31 20 5b 65 78 70 72 20   ${cmd} 1 [expr 
7f00: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $
7f10: 7b 63 6d 64 7d 5d 20 2d 20 32 5d 5d 0a 09 73 65  {cmd}] - 2]]..se
7f20: 74 20 72 65 73 74 20 5b 53 74 72 69 6e 67 20 72  t rest [String r
7f30: 61 6e 67 65 20 24 7b 6c 69 6e 65 7d 20 5b 65 78  ange ${line} [ex
7f40: 70 72 20 24 7b 69 64 78 7d 20 2b 20 31 5d 20 65  pr ${idx} + 1] e
7f50: 6e 64 5d 0a 0a 09 69 66 20 7b 5b 63 61 74 63 68  nd]...if {[catch
7f60: 20 5b 6c 69 73 74 20 73 65 74 20 72 65 73 75 6c   [list set resul
7f70: 74 20 5b 73 74 72 69 6e 67 20 74 72 69 6d 20 5b  t [string trim [
7f80: 65 76 61 6c 20 24 7b 63 6d 64 7d 5d 5d 5d 5d 7d  eval ${cmd}]]]]}
7f90: 20 7b 72 65 74 75 72 6e 7d 0a 0a 09 73 65 74 20   {return}...set 
7fa0: 6c 69 6e 65 20 24 7b 72 65 73 75 6c 74 7d 24 7b  line ${result}${
7fb0: 72 65 73 74 7d 0a 09 73 65 74 20 64 69 66 66 20  rest}..set diff 
7fc0: 5b 65 78 70 72 20 5b 73 74 72 69 6e 67 20 6c 65  [expr [string le
7fd0: 6e 67 74 68 20 24 7b 72 65 73 75 6c 74 7d 5d 20  ngth ${result}] 
7fe0: 2d 20 28 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74  - ([string lengt
7ff0: 68 20 24 7b 63 6d 64 7d 5d 20 2b 20 32 29 5d 0a  h ${cmd}] + 2)].
8000: 09 69 6e 63 72 20 73 74 61 72 74 20 24 7b 64 69  .incr start ${di
8010: 66 66 7d 0a 09 69 6e 63 72 20 65 6e 64 20 24 7b  ff}..incr end ${
8020: 64 69 66 66 7d 0a 7d 0a 0a 23 20 69 66 20 74 68  diff}.}..# if th
8030: 65 20 6c 69 6e 65 20 65 6e 74 65 72 65 64 20 73  e line entered s
8040: 6f 20 66 61 72 20 69 73 0a 23 20 25 20 70 75 74  o far is.# % put
8050: 73 20 24 62 3c 54 41 42 3e 0a 23 20 70 61 72 74  s $b<TAB>.# part
8060: 20 20 3d 3d 20 24 62 0a 23 20 73 74 61 72 74 20    == $b.# start 
8070: 3d 3d 20 35 0a 23 20 65 6e 64 20 20 20 3d 3d 20  == 5.# end   == 
8080: 37 0a 23 20 6c 69 6e 65 20 20 3d 3d 20 22 24 70  7.# line  == "$p
8090: 75 74 73 20 24 62 22 0a 23 0a 70 72 6f 63 20 53  uts $b".#.proc S
80a0: 63 72 69 70 74 43 6f 6d 70 6c 65 74 65 72 20 7b  criptCompleter {
80b0: 70 61 72 74 20 73 74 61 72 74 20 65 6e 64 20 6c  part start end l
80c0: 69 6e 65 7d 20 7b 0a 0a 09 23 20 70 75 74 73 20  ine} {...# puts 
80d0: 73 74 64 65 72 72 20 22 28 53 63 72 69 70 74 43  stderr "(ScriptC
80e0: 6f 6d 70 6c 65 74 65 72 29 20 7c 24 70 61 72 74  ompleter) |$part
80f0: 7c 20 24 73 74 61 72 74 20 24 65 6e 64 20 7c 24  | $start $end |$
8100: 6c 69 6e 65 7c 22 0a 0a 09 23 20 69 66 20 74 68  line|"...# if th
8110: 65 20 63 68 61 72 61 63 74 65 72 20 62 65 66 6f  e character befo
8120: 72 65 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  re the cursor is
8130: 20 61 20 74 65 72 6d 69 6e 61 74 69 6e 67 0a 09   a terminating..
8140: 23 20 71 75 6f 74 65 20 61 6e 64 20 74 68 65 20  # quote and the 
8150: 75 73 65 72 20 77 61 6e 74 73 20 63 6f 6d 70 6c  user wants compl
8160: 65 74 69 6f 6e 2c 20 77 65 20 69 6e 73 65 72 74  etion, we insert
8170: 20 61 20 77 68 69 74 65 0a 09 23 20 73 70 61 63   a white..# spac
8180: 65 20 68 65 72 65 2e 0a 09 23 0a 09 73 65 74 20  e here...#..set 
8190: 63 68 61 72 20 5b 73 74 72 69 6e 67 20 69 6e 64  char [string ind
81a0: 65 78 20 24 6c 69 6e 65 20 5b 65 78 70 72 20 24  ex $line [expr $
81b0: 65 6e 64 20 2d 20 31 5d 5d 0a 09 69 66 20 7b 22  end - 1]]..if {"
81c0: 5c 7d 22 20 3d 3d 20 24 63 68 61 72 7d 20 7b 0a  \}" == $char} {.
81d0: 09 09 61 70 70 65 6e 64 20 24 70 61 72 74 20 22  ..append $part "
81e0: 20 22 0a 09 09 72 65 74 75 72 6e 20 5b 6c 69 73   "...return [lis
81f0: 74 20 24 70 61 72 74 5d 0a 09 7d 0a 0a 09 69 66  t $part]..}...if
8200: 20 7b 7b 24 7d 20 3d 3d 20 5b 73 74 72 69 6e 67   {{$} == [string
8210: 20 69 6e 64 65 78 20 24 70 61 72 74 20 30 5d 7d   index $part 0]}
8220: 20 7b 0a 0a 09 09 23 20 63 68 65 63 6b 20 66 6f   {....# check fo
8230: 72 20 61 20 21 24 20 68 69 73 74 6f 72 79 20 65  r a !$ history e
8240: 76 65 6e 74 0a 09 09 23 0a 09 09 69 66 20 7b 24  vent...#...if {$
8250: 73 74 61 72 74 20 3e 20 30 7d 20 7b 0a 09 09 09  start > 0} {....
8260: 69 66 20 7b 7b 21 7d 20 3d 3d 20 5b 73 74 72 69  if {{!} == [stri
8270: 6e 67 20 69 6e 64 65 78 20 24 6c 69 6e 65 20 5b  ng index $line [
8280: 65 78 70 72 20 24 73 74 61 72 74 20 2d 20 31 5d  expr $start - 1]
8290: 5d 7d 20 7b 0a 09 09 09 09 72 65 74 75 72 6e 20  ]} {.....return 
82a0: 22 22 0a 09 09 09 7d 0a 09 09 7d 0a 09 09 23 20  ""....}...}...# 
82b0: 76 61 72 69 61 62 6c 65 20 63 6f 6d 70 6c 65 74  variable complet
82c0: 69 6f 6e 2e 20 43 68 65 63 6b 20 66 69 72 73 74  ion. Check first
82d0: 2c 20 69 66 20 74 68 65 0a 09 09 23 20 76 61 72  , if the...# var
82e0: 69 61 62 6c 65 20 73 74 61 72 74 73 20 77 69 74  iable starts wit
82f0: 68 20 61 20 70 6c 61 69 6e 20 60 24 27 20 6f 72  h a plain `$' or
8300: 20 73 68 6f 75 6c 64 0a 09 09 23 20 62 65 20 65   should...# be e
8310: 6e 63 6c 6f 73 65 64 20 69 6e 20 62 72 61 63 65  nclosed in brace
8320: 73 2e 0a 09 09 23 0a 09 09 73 65 74 20 76 61 72  s....#...set var
8330: 20 5b 53 74 72 69 6e 67 20 72 61 6e 67 65 20 24   [String range $
8340: 70 61 72 74 20 31 20 65 6e 64 5d 0a 0a 09 09 23  part 1 end]....#
8350: 20 63 68 65 63 6b 20 69 66 20 24 76 61 72 20 69   check if $var i
8360: 73 20 61 6e 20 61 72 72 61 79 20 6e 61 6d 65 2c  s an array name,
8370: 20 77 68 69 63 68 0a 09 09 23 20 61 6c 72 65 61   which...# alrea
8380: 64 79 20 68 61 73 20 61 6c 72 65 61 64 79 20 61  dy has already a
8390: 20 22 28 22 20 73 6f 6d 65 77 68 65 72 65 20 69   "(" somewhere i
83a0: 6e 73 69 64 65 2e 0a 09 09 23 0a 09 09 69 66 20  nside....#...if 
83b0: 7b 22 22 20 21 3d 20 5b 73 65 74 20 76 63 20 5b  {"" != [set vc [
83c0: 56 61 72 43 6f 6d 70 6c 65 74 69 6f 6e 20 24 76  VarCompletion $v
83d0: 61 72 5d 5d 7d 20 7b 0a 09 09 09 69 66 20 7b 22  ar]]} {....if {"
83e0: 22 20 3d 3d 20 5b 6c 69 6e 64 65 78 20 24 76 63  " == [lindex $vc
83f0: 20 30 5d 7d 20 7b 0a 09 09 09 09 72 65 74 75 72   0]} {.....retur
8400: 6e 20 22 5c 24 20 5b 6c 72 61 6e 67 65 20 24 7b  n "\$ [lrange ${
8410: 76 63 7d 20 31 20 65 6e 64 5d 22 0a 09 09 09 7d  vc} 1 end]"....}
8420: 20 65 6c 73 65 20 7b 0a 09 09 09 09 72 65 74 75   else {.....retu
8430: 72 6e 20 5c 24 24 7b 76 63 7d 0a 09 09 09 7d 0a  rn \$${vc}....}.
8440: 09 09 09 23 20 70 75 74 73 20 73 74 64 65 72 72  ...# puts stderr
8450: 20 76 63 3d 7c 24 76 63 7c 0a 09 09 7d 20 65 6c   vc=|$vc|...} el
8460: 73 65 20 7b 0a 09 09 09 72 65 74 75 72 6e 20 22  se {....return "
8470: 22 0a 09 09 7d 0a 0a 09 23 20 53 43 45 4e 41 52  "...}...# SCENAR
8480: 49 4f 3a 0a 09 23 0a 09 23 20 25 20 70 75 74 73  IO:..#..# % puts
8490: 20 62 6c 61 3b 20 70 75 74 3c 54 41 42 3e 20 24   bla; put<TAB> $
84a0: 62 0a 09 23 20 70 61 72 74 20 20 3d 3d 20 70 75  b..# part  == pu
84b0: 74 0a 09 23 20 73 74 61 72 74 20 3d 3d 20 31 30  t..# start == 10
84c0: 0a 09 23 20 65 6e 64 20 20 20 3d 3d 20 31 33 0a  ..# end   == 13.
84d0: 09 23 20 6c 69 6e 65 20 20 3d 3d 20 22 70 75 74  .# line  == "put
84e0: 73 20 62 6c 61 3b 20 70 75 74 20 24 62 22 0a 09  s bla; put $b"..
84f0: 23 20 5b 53 70 6c 69 74 4c 69 6e 65 5d 20 2d 2d  # [SplitLine] --
8500: 3e 20 7b 31 20 22 20 70 75 74 20 24 62 22 7d 20  > {1 " put $b"} 
8510: 3d 3d 20 73 75 62 0a 09 23 20 6e 65 77 5f 73 74  == sub..# new_st
8520: 61 72 74 20 3d 20 5b 6c 69 6e 64 65 78 20 24 73  art = [lindex $s
8530: 75 62 20 30 5d 20 3d 3d 20 31 0a 09 23 20 6e 65  ub 0] == 1..# ne
8540: 77 5f 65 6e 64 20 20 20 3d 20 5b 65 78 70 72 20  w_end   = [expr 
8550: 24 65 6e 64 20 2d 20 28 24 73 74 61 72 74 20 2d  $end - ($start -
8560: 20 24 6e 65 77 5f 73 74 61 72 74 29 5d 20 3d 3d   $new_start)] ==
8570: 20 34 0a 09 23 20 6e 65 77 5f 70 61 72 74 20 20   4..# new_part  
8580: 3d 3d 20 24 70 61 72 74 20 3d 3d 20 70 75 74 0a  == $part == put.
8590: 09 23 20 6e 65 77 5f 6c 69 6e 65 20 20 3d 20 5b  .# new_line  = [
85a0: 6c 69 6e 64 65 78 20 24 73 75 62 20 31 5d 20 3d  lindex $sub 1] =
85b0: 3d 20 22 20 70 75 74 20 24 62 22 0a 09 23 20 0a  = " put $b"..# .
85c0: 09 7d 20 65 6c 73 65 69 66 20 7b 22 22 20 21 3d  .} elseif {"" !=
85d0: 20 5b 73 65 74 20 73 75 62 20 5b 53 70 6c 69 74   [set sub [Split
85e0: 4c 69 6e 65 20 24 73 74 61 72 74 20 24 6c 69 6e  Line $start $lin
85f0: 65 5d 5d 7d 20 7b 0a 0a 09 09 73 65 74 20 6e 65  e]]} {....set ne
8600: 77 5f 73 74 61 72 74 20 5b 6c 69 6e 64 65 78 20  w_start [lindex 
8610: 24 73 75 62 20 30 5d 0a 09 09 73 65 74 20 6e 65  $sub 0]...set ne
8620: 77 5f 65 6e 64 20 5b 65 78 70 72 20 24 65 6e 64  w_end [expr $end
8630: 20 2d 20 28 24 73 74 61 72 74 20 2d 20 24 6e 65   - ($start - $ne
8640: 77 5f 73 74 61 72 74 29 5d 0a 09 09 73 65 74 20  w_start)]...set 
8650: 6e 65 77 5f 6c 69 6e 65 20 5b 6c 69 6e 64 65 78  new_line [lindex
8660: 20 24 73 75 62 20 31 5d 0a 09 09 23 20 70 75 74   $sub 1]...# put
8670: 73 20 73 74 64 65 72 72 20 22 28 53 70 6c 69 74  s stderr "(Split
8680: 4c 69 6e 65 29 20 24 6e 65 77 5f 73 74 61 72 74  Line) $new_start
8690: 20 24 6e 65 77 5f 65 6e 64 20 24 6e 65 77 5f 6c   $new_end $new_l
86a0: 69 6e 65 22 0a 09 09 72 65 74 75 72 6e 20 5b 53  ine"...return [S
86b0: 63 72 69 70 74 43 6f 6d 70 6c 65 74 65 72 20 24  criptCompleter $
86c0: 70 61 72 74 20 24 6e 65 77 5f 73 74 61 72 74 20  part $new_start 
86d0: 24 6e 65 77 5f 65 6e 64 20 24 6e 65 77 5f 6c 69  $new_end $new_li
86e0: 6e 65 5d 0a 0a 09 7d 20 65 6c 73 65 69 66 20 7b  ne]...} elseif {
86f0: 30 20 3d 3d 20 5b 73 65 74 20 70 6f 73 20 5b 50  0 == [set pos [P
8700: 61 72 74 50 6f 73 69 74 69 6f 6e 20 70 61 72 74  artPosition part
8710: 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 5d   start end line]
8720: 5d 7d 20 7b 0a 0a 09 09 23 20 58 58 58 0a 09 09  ]} {....# XXX...
8730: 23 20 20 20 20 20 6e 6f 74 65 20 74 68 61 74 20  #     note that 
8740: 6c 69 6e 65 20 77 69 6c 6c 20 62 65 20 5b 73 74  line will be [st
8750: 72 69 6e 67 20 74 72 69 6d 6c 65 66 74 27 65 64  ring trimleft'ed
8760: 5d 0a 09 09 23 20 20 20 20 20 61 66 74 65 72 20  ]...#     after 
8770: 50 61 72 74 50 6f 73 69 74 69 6f 6e 2e 0a 09 09  PartPosition....
8780: 23 20 58 58 58 0a 0a 09 09 23 20 70 75 74 73 20  # XXX....# puts 
8790: 73 74 64 65 72 72 20 22 28 50 61 72 74 50 6f 73  stderr "(PartPos
87a0: 69 74 69 6f 6e 29 20 24 70 61 72 74 20 24 73 74  ition) $part $st
87b0: 61 72 74 20 24 65 6e 64 20 24 6c 69 6e 65 22 0a  art $end $line".
87c0: 09 09 73 65 74 20 61 6c 6c 20 5b 43 6f 6d 6d 61  ..set all [Comma
87d0: 6e 64 43 6f 6d 70 6c 65 74 69 6f 6e 20 24 7b 70  ndCompletion ${p
87e0: 61 72 74 7d 5d 0a 09 09 23 20 70 75 74 73 20 73  art}]...# puts s
87f0: 74 64 65 72 72 20 22 28 53 63 72 69 70 74 43 6f  tderr "(ScriptCo
8800: 6d 70 6c 65 74 65 72 29 20 61 6c 6c 3d 24 61 6c  mpleter) all=$al
8810: 6c 22 0a 09 09 23 70 75 74 73 20 5c 6e 6d 61 74  l"...#puts \nmat
8820: 63 68 65 73 3d 24 6d 61 74 63 68 65 73 5c 6e 0a  ches=$matches\n.
8830: 09 09 23 20 72 65 74 75 72 6e 20 5b 46 6f 72 6d  ..# return [Form
8840: 61 74 20 24 61 6c 6c 20 24 70 61 72 74 5d 0a 09  at $all $part]..
8850: 09 72 65 74 75 72 6e 20 5b 54 72 79 46 72 6f 6d  .return [TryFrom
8860: 4c 69 73 74 20 24 70 61 72 74 20 24 61 6c 6c 5d  List $part $all]
8870: 0a 0a 09 7d 20 65 6c 73 65 20 7b 0a 0a 09 09 23  ...} else {....#
8880: 20 74 72 79 20 74 6f 20 75 73 65 20 24 70 6f 73   try to use $pos
8890: 20 66 75 72 74 68 65 72 20 2e 2e 2e 0a 09 09 23   further ......#
88a0: 20 70 75 74 73 20 73 74 64 65 72 72 20 7c 24 6c   puts stderr |$l
88b0: 69 6e 65 7c 0a 09 09 23 0a 09 09 23 20 69 66 20  ine|...#...# if 
88c0: 7b 22 2e 22 20 3d 3d 20 5b 73 74 72 69 6e 67 20  {"." == [string 
88d0: 69 6e 64 65 78 20 5b 73 74 72 69 6e 67 20 74 72  index [string tr
88e0: 69 6d 20 24 7b 6c 69 6e 65 7d 5d 20 30 5d 7d 20  im ${line}] 0]} 
88f0: 7b 0a 09 09 23 20 09 73 65 74 20 61 6c 69 61 73  {...# .set alias
8900: 20 57 49 44 47 45 54 0a 09 09 23 20 09 73 65 74   WIDGET...# .set
8910: 20 6e 61 6d 65 73 70 63 20 22 22 3b 20 23 20 77   namespc ""; # w
8920: 69 64 67 65 74 73 20 61 72 65 20 61 6c 77 61 79  idgets are alway
8930: 73 20 69 6e 20 74 68 65 20 67 6c 6f 62 61 6c 0a  s in the global.
8940: 09 09 23 20 7d 20 65 6c 73 65 20 7b 0a 0a 09 09  ..# } else {....
8950: 09 23 20 74 68 65 20 64 6f 75 62 6c 65 20 60 6c  .# the double `l
8960: 69 6e 64 65 78 27 20 73 74 72 69 70 73 20 7b 7d  index' strips {}
8970: 20 6f 72 20 71 75 6f 74 65 73 2e 0a 09 09 09 23   or quotes.....#
8980: 20 74 68 65 20 73 75 62 73 74 20 65 6e 61 62 6c   the subst enabl
8990: 65 73 20 76 61 72 69 61 62 6c 65 73 20 63 6f 6e  es variables con
89a0: 74 61 69 6e 69 6e 67 0a 09 09 09 23 20 63 6f 6d  taining....# com
89b0: 6d 61 6e 64 20 6e 61 6d 65 73 2e 0a 09 09 09 23  mand names.....#
89c0: 0a 09 09 09 73 65 74 20 61 6c 69 61 73 20 5b 75  ....set alias [u
89d0: 70 6c 65 76 65 6c 20 5b 69 6e 66 6f 20 6c 65 76  plevel [info lev
89e0: 65 6c 5d 20 5c 0a 09 09 09 73 75 62 73 74 20 5b  el] \....subst [
89f0: 6c 69 6e 64 65 78 20 5b 6c 69 6e 64 65 78 20 5b  lindex [lindex [
8a00: 51 75 6f 74 65 51 75 6f 74 65 73 20 24 7b 6c 69  QuoteQuotes ${li
8a10: 6e 65 7d 5d 20 30 5d 20 30 5d 5d 0a 0a 09 09 09  ne}] 0] 0]].....
8a20: 23 20 6d 61 6b 65 20 60 61 6c 69 61 73 27 20 61  # make `alias' a
8a30: 20 66 75 6c 6c 79 20 71 75 61 6c 69 66 69 65 64   fully qualified
8a40: 20 6e 61 6d 65 2e 0a 09 09 09 23 20 74 68 69 73   name.....# this
8a50: 20 63 61 6e 20 72 61 69 73 65 20 61 6e 20 65 72   can raise an er
8a60: 72 6f 72 2c 20 69 66 20 61 6c 69 61 73 20 69 73  ror, if alias is
8a70: 0a 09 09 09 23 20 6e 6f 20 76 61 6c 69 64 20 63  ....# no valid c
8a80: 6f 6d 6d 61 6e 64 2e 0a 09 09 09 23 0a 09 09 09  ommand.....#....
8a90: 69 66 20 7b 5b 63 61 74 63 68 20 7b 73 65 74 20  if {[catch {set 
8aa0: 61 6c 69 61 73 20 5b 6e 61 6d 65 73 70 61 63 65  alias [namespace
8ab0: 20 6f 72 69 67 69 6e 20 24 61 6c 69 61 73 5d 7d   origin $alias]}
8ac0: 5d 7d 20 7b 0a 09 09 09 09 72 65 74 75 72 6e 20  ]} {.....return 
8ad0: 22 22 0a 09 09 09 7d 0a 0a 09 09 09 23 20 73 74  ""....}.....# st
8ae0: 72 69 70 20 6c 65 61 64 69 6e 67 20 3a 3a 27 73  rip leading ::'s
8af0: 2e 0a 09 09 09 23 0a 09 09 09 72 65 67 73 75 62  .....#....regsub
8b00: 20 2d 61 6c 6c 20 7b 5e 3a 3a 7d 20 24 61 6c 69   -all {^::} $ali
8b10: 61 73 20 7b 7d 20 61 6c 69 61 73 0a 09 09 09 73  as {} alias....s
8b20: 65 74 20 6e 61 6d 65 73 70 63 20 5b 6e 61 6d 65  et namespc [name
8b30: 73 70 61 63 65 20 71 75 61 6c 69 66 69 65 72 73  space qualifiers
8b40: 20 24 61 6c 69 61 73 5d 0a 09 09 09 73 65 74 20   $alias]....set 
8b50: 61 6c 69 61 73 20 5b 6e 61 6d 65 73 70 61 63 65  alias [namespace
8b60: 20 74 61 69 6c 20 24 61 6c 69 61 73 5d 0a 09 09   tail $alias]...
8b70: 23 20 7d 0a 0a 09 09 23 20 74 72 79 20 66 69 72  # }....# try fir
8b80: 73 74 20 61 20 73 70 65 63 69 66 69 63 20 63 6f  st a specific co
8b90: 6d 70 6c 65 74 65 72 2c 20 74 68 65 6e 2c 20 61  mpleter, then, a
8ba0: 6e 64 20 6f 6e 6c 79 20 74 68 65 6e 0a 09 09 23  nd only then...#
8bb0: 20 74 68 65 20 74 63 6c 72 65 61 64 6c 69 6e 65   the tclreadline
8bc0: 5f 63 6f 6d 70 6c 65 74 65 5f 75 6e 6b 6e 6f 77  _complete_unknow
8bd0: 6e 2e 0a 09 09 23 0a 09 09 66 6f 72 65 61 63 68  n....#...foreach
8be0: 20 63 6d 64 20 5b 6c 69 73 74 20 24 7b 61 6c 69   cmd [list ${ali
8bf0: 61 73 7d 20 74 63 6c 72 65 61 64 6c 69 6e 65 5f  as} tclreadline_
8c00: 63 6f 6d 70 6c 65 74 65 5f 75 6e 6b 6e 6f 77 6e  complete_unknown
8c10: 5d 20 7b 0a 09 09 09 23 20 70 75 74 73 20 73 74  ] {....# puts st
8c20: 64 65 72 72 20 24 7b 6e 61 6d 65 73 70 63 7d 63  derr ${namespc}c
8c30: 6f 6d 70 6c 65 74 65 28 24 7b 63 6d 64 7d 29 0a  omplete(${cmd}).
8c40: 09 09 09 69 66 20 7b 22 22 20 21 3d 20 5b 6e 61  ...if {"" != [na
8c50: 6d 65 73 70 61 63 65 20 65 76 61 6c 20 3a 3a 74  mespace eval ::t
8c60: 63 6c 72 65 61 64 6c 69 6e 65 3a 3a 24 7b 6e 61  clreadline::${na
8c70: 6d 65 73 70 63 7d 20 5c 0a 09 09 09 09 5b 6c 69  mespc} \.....[li
8c80: 73 74 20 69 6e 66 6f 20 70 72 6f 63 73 20 63 6f  st info procs co
8c90: 6d 70 6c 65 74 65 28 24 7b 63 6d 64 7d 29 5d 5d  mplete(${cmd})]]
8ca0: 0a 09 09 09 7d 20 7b 0a 09 09 09 09 23 20 70 75  ....} {.....# pu
8cb0: 74 73 20 66 6f 75 6e 64 3d 7c 63 6f 6d 70 6c 65  ts found=|comple
8cc0: 74 65 28 24 63 6d 64 29 7c 0a 09 09 09 09 23 20  te($cmd)|.....# 
8cd0: 74 6f 20 62 65 20 6d 6f 72 65 20 65 72 72 6f 72  to be more error
8ce0: 2d 70 72 6f 6f 66 2c 20 77 65 20 63 68 65 63 6b  -proof, we check
8cf0: 20 68 65 72 65 2c 0a 09 09 09 09 23 20 69 66 20   here,.....# if 
8d00: 63 6f 6d 70 6c 65 74 65 28 24 63 6d 64 29 20 74  complete($cmd) t
8d10: 61 6b 65 73 20 65 78 61 63 74 6c 79 20 35 20 61  akes exactly 5 a
8d20: 72 67 75 6d 65 6e 74 73 2e 0a 09 09 09 09 23 0a  rguments......#.
8d30: 09 09 09 09 69 66 20 7b 36 20 21 3d 20 5b 73 65  ....if {6 != [se
8d40: 74 20 61 72 67 75 6d 65 6e 74 73 20 5b 6c 6c 65  t arguments [lle
8d50: 6e 67 74 68 20 5c 0a 09 09 09 09 09 5b 6e 61 6d  ngth \......[nam
8d60: 65 73 70 61 63 65 20 65 76 61 6c 20 3a 3a 74 63  espace eval ::tc
8d70: 6c 72 65 61 64 6c 69 6e 65 3a 3a 24 7b 6e 61 6d  lreadline::${nam
8d80: 65 73 70 63 7d 20 5c 0a 09 09 09 09 09 5b 6c 69  espc} \......[li
8d90: 73 74 20 69 6e 66 6f 20 61 72 67 73 20 63 6f 6d  st info args com
8da0: 70 6c 65 74 65 28 24 63 6d 64 29 5d 5d 5d 5d 0a  plete($cmd)]]]].
8db0: 09 09 09 09 7d 20 7b 0a 09 09 09 09 09 65 72 72  ....} {......err
8dc0: 6f 72 20 5b 6c 69 73 74 20 63 6f 6d 70 6c 65 74  or [list complet
8dd0: 65 28 24 7b 63 6d 64 7d 29 20 74 61 6b 65 73 20  e(${cmd}) takes 
8de0: 24 7b 61 72 67 75 6d 65 6e 74 73 7d 20 5c 0a 09  ${arguments} \..
8df0: 09 09 09 09 61 72 67 75 6d 65 6e 74 73 2c 20 62  ....arguments, b
8e00: 75 74 20 73 68 6f 75 6c 64 20 74 61 6b 65 20 65  ut should take e
8e10: 78 61 63 74 6c 79 20 36 2e 5d 0a 09 09 09 09 7d  xactly 6.].....}
8e20: 0a 0a 09 09 09 09 23 20 72 65 6d 6f 76 65 20 6c  ......# remove l
8e30: 65 61 64 69 6e 67 20 71 75 6f 74 65 73 0a 09 09  eading quotes...
8e40: 09 09 23 0a 09 09 09 09 73 65 74 20 6d 6f 64 20  ..#.....set mod 
8e50: 5b 53 74 72 69 70 50 72 65 66 69 78 20 24 70 61  [StripPrefix $pa
8e60: 72 74 5d 0a 09 09 09 09 23 20 70 75 74 73 20 73  rt].....# puts s
8e70: 74 64 65 72 72 20 6d 6f 64 3d 24 6d 6f 64 0a 0a  tderr mod=$mod..
8e80: 09 09 09 09 69 66 20 7b 5b 63 61 74 63 68 20 5b  ....if {[catch [
8e90: 6c 69 73 74 20 73 65 74 20 73 63 72 69 70 74 5f  list set script_
8ea0: 72 65 73 75 6c 74 20 5c 0a 09 09 09 09 09 5b 6e  result \......[n
8eb0: 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20 3a 3a  amespace eval ::
8ec0: 74 63 6c 72 65 61 64 6c 69 6e 65 3a 3a 24 7b 6e  tclreadline::${n
8ed0: 61 6d 65 73 70 63 7d 20 5c 0a 09 09 09 09 09 5b  amespc} \......[
8ee0: 6c 69 73 74 20 63 6f 6d 70 6c 65 74 65 28 24 7b  list complete(${
8ef0: 63 6d 64 7d 29 20 24 70 61 72 74 20 24 73 74 61  cmd}) $part $sta
8f00: 72 74 20 24 65 6e 64 20 24 6c 69 6e 65 20 24 70  rt $end $line $p
8f10: 6f 73 20 24 6d 6f 64 5d 5d 5d 5c 0a 09 09 09 09  os $mod]]]\.....
8f20: 09 3a 3a 74 63 6c 72 65 61 64 6c 69 6e 65 3a 3a  .::tclreadline::
8f30: 65 72 72 6f 72 4d 73 67 5d 0a 09 09 09 09 7d 20  errorMsg].....} 
8f40: 7b 0a 09 09 09 09 09 65 72 72 6f 72 20 5b 6c 69  {......error [li
8f50: 73 74 20 65 72 72 6f 72 20 64 75 72 69 6e 67 20  st error during 
8f60: 65 76 61 6c 75 61 74 69 6f 6e 20 6f 66 20 60 63  evaluation of `c
8f70: 6f 6d 70 6c 65 74 65 28 24 7b 63 6d 64 7d 29 27  omplete(${cmd})'
8f80: 5d 0a 09 09 09 09 7d 0a 09 09 09 09 23 20 70 75  ].....}.....# pu
8f90: 74 73 20 73 74 64 65 72 72 20 5c 6e 73 63 72 69  ts stderr \nscri
8fa0: 70 74 5f 72 65 73 75 6c 74 3d 7c 24 7b 73 63 72  pt_result=|${scr
8fb0: 69 70 74 5f 72 65 73 75 6c 74 7d 7c 0a 09 09 09  ipt_result}|....
8fc0: 09 69 66 20 7b 21 5b 73 74 72 69 6e 67 20 6c 65  .if {![string le
8fd0: 6e 67 74 68 20 24 7b 73 63 72 69 70 74 5f 72 65  ngth ${script_re
8fe0: 73 75 6c 74 7d 5d 20 26 26 20 5c 0a 09 09 09 09  sult}] && \.....
8ff0: 09 22 74 63 6c 72 65 61 64 6c 69 6e 65 5f 63 6f  ."tclreadline_co
9000: 6d 70 6c 65 74 65 5f 75 6e 6b 6e 6f 77 6e 22 20  mplete_unknown" 
9010: 3d 3d 20 24 7b 63 6d 64 7d 0a 09 09 09 09 7d 20  == ${cmd}.....} 
9020: 7b 0a 09 09 09 09 09 23 20 61 73 20 77 65 27 72  {......# as we'r
9030: 65 20 68 65 72 65 2c 20 74 68 65 20 74 63 6c 72  e here, the tclr
9040: 65 61 64 6c 69 6e 65 5f 63 6f 6d 70 6c 65 74 65  eadline_complete
9050: 5f 75 6e 6b 6e 6f 77 6e 0a 09 09 09 09 09 23 20  _unknown......# 
9060: 72 65 74 75 72 6e 65 64 20 61 6e 20 65 6d 70 74  returned an empt
9070: 79 20 73 74 72 69 6e 67 2e 20 46 61 6c 6c 20 74  y string. Fall t
9080: 68 72 75 20 61 6e 64 20 74 72 79 0a 09 09 09 09  hru and try.....
9090: 09 23 20 66 75 72 74 68 65 72 20 66 61 6c 6c 62  .# further fallb
90a0: 61 63 6b 20 63 6f 6d 70 6c 65 74 65 72 73 2e 0a  ack completers..
90b0: 09 09 09 09 09 23 0a 09 09 09 09 7d 20 65 6c 73  .....#.....} els
90c0: 65 20 7b 0a 09 09 09 09 09 23 20 72 65 74 75 72  e {......# retur
90d0: 6e 20 61 6c 73 6f 20 65 6d 70 74 79 20 73 74 72  n also empty str
90e0: 69 6e 67 73 2c 20 69 66 0a 09 09 09 09 09 23 20  ings, if......# 
90f0: 74 68 65 79 27 72 65 20 66 72 6f 6d 20 61 20 73  they're from a s
9100: 70 65 63 69 66 69 63 20 63 6f 6d 70 6c 65 74 65  pecific complete
9110: 72 2e 0a 09 09 09 09 09 23 0a 09 09 09 09 09 54  r.......#......T
9120: 72 61 63 65 54 65 78 74 20 73 63 72 69 70 74 5f  raceText script_
9130: 72 65 73 75 6c 74 3d 7c 24 7b 73 63 72 69 70 74  result=|${script
9140: 5f 72 65 73 75 6c 74 7d 7c 0a 09 09 09 09 09 72  _result}|......r
9150: 65 74 75 72 6e 20 24 7b 73 63 72 69 70 74 5f 72  eturn ${script_r
9160: 65 73 75 6c 74 7d 0a 09 09 09 09 7d 0a 09 09 09  esult}.....}....
9170: 7d 0a 09 09 09 23 20 73 65 74 20 6e 61 6d 65 73  }....# set names
9180: 70 63 20 22 22 3b 20 23 20 6e 6f 20 71 75 61 6c  pc ""; # no qual
9190: 69 66 69 65 72 73 20 66 6f 72 20 74 63 6c 72 65  ifiers for tclre
91a0: 61 64 6c 69 6e 65 5f 63 6f 6d 70 6c 65 74 65 5f  adline_complete_
91b0: 75 6e 6b 6e 6f 77 6e 0a 09 09 7d 0a 0a 09 09 23  unknown...}....#
91c0: 20 61 73 20 77 65 27 76 65 20 72 65 61 63 68 65   as we've reache
91d0: 64 20 68 65 72 65 20 6e 6f 20 76 61 6c 69 64 20  d here no valid 
91e0: 73 70 65 63 69 66 69 63 20 63 6f 6d 70 6c 65 74  specific complet
91f0: 65 72 0a 09 09 23 20 77 61 73 20 66 6f 75 6e 64  er...# was found
9200: 2e 20 43 68 65 63 6b 2c 20 69 66 20 69 74 27 73  . Check, if it's
9210: 20 61 20 70 72 6f 63 20 61 6e 64 20 72 65 74 75   a proc and retu
9220: 72 6e 20 74 68 65 0a 09 09 23 20 61 72 67 75 6d  rn the...# argum
9230: 65 6e 74 73 2e 0a 09 09 23 0a 09 09 69 66 20 7b  ents....#...if {
9240: 21 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20  ![string length 
9250: 24 7b 6e 61 6d 65 73 70 63 7d 5d 7d 20 7b 0a 09  ${namespc}]} {..
9260: 09 09 73 65 74 20 6e 61 6d 65 73 70 63 20 3a 3a  ..set namespc ::
9270: 0a 09 09 7d 0a 09 09 69 66 20 7b 5b 73 74 72 69  ...}...if {[stri
9280: 6e 67 20 6c 65 6e 67 74 68 20 5b 75 70 6c 65 76  ng length [uplev
9290: 65 6c 20 5b 69 6e 66 6f 20 6c 65 76 65 6c 5d 20  el [info level] 
92a0: 5c 0a 09 09 09 6e 61 6d 65 73 70 61 63 65 20 65  \....namespace e
92b0: 76 61 6c 20 24 7b 6e 61 6d 65 73 70 63 7d 20 5b  val ${namespc} [
92c0: 6c 69 73 74 20 3a 3a 69 6e 66 6f 20 70 72 6f 63  list ::info proc
92d0: 20 24 61 6c 69 61 73 5d 5d 5d 0a 09 09 7d 20 7b   $alias]]]...} {
92e0: 0a 09 09 09 69 66 20 21 5b 73 74 72 69 6e 67 20  ....if ![string 
92f0: 6c 65 6e 67 74 68 20 5b 73 74 72 69 6e 67 20 74  length [string t
9300: 72 69 6d 20 24 70 61 72 74 5d 5d 20 7b 0a 09 09  rim $part]] {...
9310: 09 09 73 65 74 20 61 72 67 73 20 5b 75 70 6c 65  ..set args [uple
9320: 76 65 6c 20 5b 69 6e 66 6f 20 6c 65 76 65 6c 5d  vel [info level]
9330: 20 5c 0a 09 09 09 09 6e 61 6d 65 73 70 61 63 65   \.....namespace
9340: 20 65 76 61 6c 20 24 7b 6e 61 6d 65 73 70 63 7d   eval ${namespc}
9350: 20 5b 6c 69 73 74 20 69 6e 66 6f 20 61 72 67 73   [list info args
9360: 20 24 61 6c 69 61 73 5d 5d 0a 09 09 09 09 73 65   $alias]].....se
9370: 74 20 61 72 67 20 5b 6c 69 6e 64 65 78 20 24 61  t arg [lindex $a
9380: 72 67 73 20 5b 65 78 70 72 20 24 70 6f 73 20 2d  rgs [expr $pos -
9390: 20 31 5d 5d 0a 09 09 09 09 69 66 20 7b 22 22 20   1]].....if {"" 
93a0: 21 3d 20 24 61 72 67 20 26 26 20 22 61 72 67 73  != $arg && "args
93b0: 22 20 21 3d 20 24 61 72 67 7d 20 7b 0a 09 09 09  " != $arg} {....
93c0: 09 09 69 66 20 7b 5b 75 70 6c 65 76 65 6c 20 5b  ..if {[uplevel [
93d0: 69 6e 66 6f 20 6c 65 76 65 6c 5d 20 6e 61 6d 65  info level] name
93e0: 73 70 61 63 65 20 65 76 61 6c 20 5c 0a 09 09 09  space eval \....
93f0: 09 09 09 24 7b 6e 61 6d 65 73 70 63 7d 20 5b 6c  ...${namespc} [l
9400: 69 73 74 20 69 6e 66 6f 20 64 65 66 61 75 6c 74  ist info default
9410: 20 24 61 6c 69 61 73 20 24 61 72 67 20 6a 75 6e   $alias $arg jun
9420: 6b 5d 5d 7d 20 7b 0a 09 09 09 09 09 09 09 72 65  k]]} {........re
9430: 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
9440: 74 73 20 3f 24 61 72 67 3f 5d 0a 09 09 09 09 09  ts ?$arg?]......
9450: 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09 09 09  .} else {.......
9460: 09 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79  .return [Display
9470: 48 69 6e 74 73 20 3c 24 61 72 67 3e 5d 0a 09 09  Hints <$arg>]...
9480: 09 09 09 09 7d 0a 09 09 09 09 7d 0a 09 09 09 7d  ....}.....}....}
9490: 20 65 6c 73 65 20 7b 0a 09 09 09 09 72 65 74 75   else {.....retu
94a0: 72 6e 20 22 22 3b 20 23 20 65 6e 61 62 6c 65 20  rn ""; # enable 
94b0: 66 69 6c 65 20 6e 61 6d 65 20 63 6f 6d 70 6c 65  file name comple
94c0: 74 69 6f 6e 0a 09 09 09 7d 0a 09 09 7d 0a 0a 09  tion....}...}...
94d0: 09 23 20 63 68 65 63 6b 20 69 66 20 74 68 65 20  .# check if the 
94e0: 63 6f 6d 6d 61 6e 64 20 69 73 20 61 6e 20 6f 62  command is an ob
94f0: 6a 65 63 74 20 6f 66 20 6b 6e 6f 77 6e 20 63 6c  ject of known cl
9500: 61 73 73 2e 0a 09 09 23 20 0a 09 09 69 66 20 5b  ass....# ...if [
9510: 4f 62 6a 65 63 74 43 6c 61 73 73 43 6f 6d 70 6c  ObjectClassCompl
9520: 65 74 65 72 20 24 7b 70 61 72 74 7d 20 24 7b 73  eter ${part} ${s
9530: 74 61 72 74 7d 20 24 7b 65 6e 64 7d 20 24 7b 6c  tart} ${end} ${l
9540: 69 6e 65 7d 20 24 7b 70 6f 73 7d 20 72 65 73 5d  ine} ${pos} res]
9550: 20 7b 0a 09 09 09 72 65 74 75 72 6e 20 24 7b 72   {....return ${r
9560: 65 73 7d 0a 09 09 7d 0a 0a 09 09 23 20 4f 6b 2c  es}...}....# Ok,
9570: 20 61 6c 73 6f 20 6e 6f 20 70 72 6f 63 2e 20 54   also no proc. T
9580: 72 79 20 74 6f 20 64 6f 20 74 68 65 20 73 61 6d  ry to do the sam
9590: 65 20 61 73 20 66 6f 72 20 77 69 64 67 65 74 73  e as for widgets
95a0: 20 6e 6f 77 3a 0a 09 09 23 20 74 72 79 20 74 6f   now:...# try to
95b0: 20 63 6f 6d 70 6c 65 74 65 20 66 72 6f 6d 20 74   complete from t
95c0: 68 65 20 6f 70 74 69 6f 6e 20 74 61 62 6c 65 20  he option table 
95d0: 69 66 20 74 68 65 20 73 75 62 63 6f 6d 6d 61 6e  if the subcomman
95e0: 64 0a 09 09 23 20 69 73 20 60 63 6f 6e 66 69 67  d...# is `config
95f0: 75 72 65 27 20 6f 72 20 60 63 67 65 74 27 20 6f  ure' or `cget' o
9600: 74 68 65 72 77 69 73 65 20 74 72 79 20 74 6f 20  therwise try to 
9610: 67 65 74 20 66 75 72 74 68 65 72 0a 09 09 23 20  get further...# 
9620: 73 75 62 63 6f 6d 6d 61 6e 64 73 2e 0a 09 09 23  subcommands....#
9630: 0a 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c  ...return [Compl
9640: 65 74 65 46 72 6f 6d 4f 70 74 69 6f 6e 73 4f 72  eteFromOptionsOr
9650: 53 75 62 43 6d 64 73 20 5c 0a 09 09 24 7b 70 61  SubCmds \...${pa
9660: 72 74 7d 20 24 7b 73 74 61 72 74 7d 20 24 7b 65  rt} ${start} ${e
9670: 6e 64 7d 20 24 7b 6c 69 6e 65 7d 20 24 7b 70 6f  nd} ${line} ${po
9680: 73 7d 5d 0a 09 7d 0a 09 65 72 72 6f 72 20 22 7b  s}]..}..error "{
9690: 4e 4f 54 52 45 41 43 48 45 44 20 28 74 68 69 73  NOTREACHED (this
96a0: 20 69 73 20 70 72 6f 62 61 62 6c 79 20 61 6e 20   is probably an 
96b0: 65 72 72 6f 72 29 7d 22 0a 7d 0a 0a 0a 23 20 65  error)}".}...# e
96c0: 78 70 6c 69 63 69 74 20 63 6f 6d 6d 61 6e 64 20  xplicit command 
96d0: 63 6f 6d 70 6c 65 74 65 72 73 0a 23 0a 0a 23 20  completers.#..# 
96e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
96f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9700: 2d 2d 2d 2d 2d 0a 23 20 20 20 20 20 20 20 20 20  -----.#         
9710: 20 20 20 20 20 20 20 20 54 43 4c 0a 23 20 2d 2d          TCL.# --
9720: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9730: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9740: 2d 2d 2d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65  ---..proc comple
9750: 74 65 28 61 66 74 65 72 29 20 7b 74 65 78 74 20  te(after) {text 
9760: 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70  start end line p
9770: 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73 65 74 20 73  os mod} {..set s
9780: 75 62 20 5b 4c 69 6e 64 65 78 20 24 6c 69 6e 65  ub [Lindex $line
9790: 20 31 5d 0a 09 23 20 70 75 74 73 20 5c 6e 70 6f   1]..# puts \npo
97a0: 73 3d 24 70 6f 73 0a 09 73 77 69 74 63 68 20 2d  s=$pos..switch -
97b0: 2d 20 24 70 6f 73 20 7b 0a 09 09 31 20 7b 0a 09  - $pos {...1 {..
97c0: 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65  ..return [Comple
97d0: 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78  teFromList ${tex
97e0: 74 7d 20 7b 3c 6d 73 3e 20 63 61 6e 63 65 6c 20  t} {<ms> cancel 
97f0: 69 64 6c 65 20 69 6e 66 6f 7d 5d 0a 09 09 7d 0a  idle info}]...}.
9800: 09 09 32 20 7b 0a 09 09 09 73 77 69 74 63 68 20  ..2 {....switch 
9810: 2d 2d 20 24 73 75 62 20 7b 0a 09 09 09 09 63 61  -- $sub {.....ca
9820: 6e 63 65 6c 20 7b 0a 09 09 09 09 09 72 65 74 75  ncel {......retu
9830: 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d  rn [CompleteFrom
9840: 4c 69 73 74 20 24 74 65 78 74 20 22 3c 73 63 72  List $text "<scr
9850: 69 70 74 3e 20 5b 61 66 74 65 72 20 69 6e 66 6f  ipt> [after info
9860: 5d 22 5d 0a 09 09 09 09 7d 0a 09 09 09 09 69 64  ]"].....}.....id
9870: 6c 65 20 7b 0a 09 09 09 09 09 72 65 74 75 72 6e  le {......return
9880: 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c   [DisplayHints <
9890: 73 63 72 69 70 74 3e 5d 0a 09 09 09 09 7d 0a 09  script>].....}..
98a0: 09 09 09 69 6e 66 6f 20 7b 0a 09 09 09 09 09 72  ...info {......r
98b0: 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46  eturn [CompleteF
98c0: 72 6f 6d 4c 69 73 74 20 24 74 65 78 74 20 5b 61  romList $text [a
98d0: 66 74 65 72 20 69 6e 66 6f 5d 5d 0a 09 09 09 09  fter info]].....
98e0: 7d 0a 09 09 09 09 64 65 66 61 75 6c 74 20 7b 20  }.....default { 
98f0: 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
9900: 69 6e 74 73 20 3f 73 63 72 69 70 74 3f 5d 20 7d  ints ?script?] }
9910: 0a 09 09 09 7d 0a 09 09 7d 0a 09 09 64 65 66 61  ....}...}...defa
9920: 75 6c 74 20 7b 0a 09 09 09 73 77 69 74 63 68 20  ult {....switch 
9930: 2d 2d 20 24 73 75 62 20 7b 0a 09 09 09 09 69 6e  -- $sub {.....in
9940: 66 6f 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73  fo { return [Dis
9950: 70 6c 61 79 48 69 6e 74 73 20 7b 7d 5d 20 7d 0a  playHints {}] }.
9960: 09 09 09 09 64 65 66 61 75 6c 74 20 7b 20 72 65  ....default { re
9970: 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
9980: 74 73 20 3f 73 63 72 69 70 74 3f 5d 20 7d 0a 09  ts ?script?] }..
9990: 09 09 7d 0a 09 09 7d 0a 09 7d 0a 09 72 65 74 75  ..}...}..}..retu
99a0: 72 6e 20 22 22 0a 7d 0a 0a 70 72 6f 63 20 63 6f  rn "".}..proc co
99b0: 6d 70 6c 65 74 65 28 61 70 70 65 6e 64 29 20 7b  mplete(append) {
99c0: 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c  text start end l
99d0: 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09  ine pos mod} {..
99e0: 73 77 69 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b  switch -- $pos {
99f0: 0a 09 09 31 20 20 20 20 20 20 20 7b 20 72 65 74  ...1       { ret
9a00: 75 72 6e 20 5b 56 61 72 43 6f 6d 70 6c 65 74 69  urn [VarCompleti
9a10: 6f 6e 20 24 7b 74 65 78 74 7d 5d 20 7d 0a 09 09  on ${text}] }...
9a20: 64 65 66 61 75 6c 74 20 7b 20 72 65 74 75 72 6e  default { return
9a30: 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3f   [DisplayHints ?
9a40: 76 61 6c 75 65 3f 5d 20 7d 0a 09 7d 0a 09 72 65  value?] }..}..re
9a50: 74 75 72 6e 20 22 22 0a 7d 0a 0a 70 72 6f 63 20  turn "".}..proc 
9a60: 63 6f 6d 70 6c 65 74 65 28 61 72 72 61 79 29 20  complete(array) 
9a70: 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20  {text start end 
9a80: 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a  line pos mod} {.
9a90: 09 73 77 69 74 63 68 20 2d 2d 20 24 70 6f 73 20  .switch -- $pos 
9aa0: 7b 0a 09 09 31 20 7b 0a 09 09 09 73 65 74 20 63  {...1 {....set c
9ab0: 6d 64 73 20 7b 0a 09 09 09 09 61 6e 79 6d 6f 72  mds {.....anymor
9ac0: 65 20 64 6f 6e 65 73 65 61 72 63 68 20 65 78 69  e donesearch exi
9ad0: 73 74 73 20 67 65 74 20 6e 61 6d 65 73 0a 09 09  sts get names...
9ae0: 09 09 6e 65 78 74 65 6c 65 6d 65 6e 74 20 73 65  ..nextelement se
9af0: 74 20 73 69 7a 65 20 73 74 61 72 74 73 65 61 72  t size startsear
9b00: 63 68 0a 09 09 09 7d 0a 09 09 09 72 65 74 75 72  ch....}....retur
9b10: 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c  n [CompleteFromL
9b20: 69 73 74 20 24 74 65 78 74 20 24 63 6d 64 73 5d  ist $text $cmds]
9b30: 0a 09 09 7d 0a 09 09 32 20 7b 0a 09 09 09 73 65  ...}...2 {....se
9b40: 74 20 6d 61 74 63 68 65 73 20 22 22 0a 09 09 09  t matches ""....
9b50: 23 20 73 65 74 20 76 61 72 73 20 5b 75 70 6c 65  # set vars [uple
9b60: 76 65 6c 20 5b 69 6e 66 6f 20 6c 65 76 65 6c 5d  vel [info level]
9b70: 20 69 6e 66 6f 20 76 61 72 73 20 24 7b 6d 6f 64   info vars ${mod
9b80: 7d 2a 5d 0a 09 09 09 23 0a 09 09 09 23 20 62 65  }*]....#....# be
9b90: 74 74 65 72 3a 20 74 68 69 73 20 64 69 73 70 6c  tter: this displ
9ba0: 61 79 73 20 61 20 6c 69 73 74 20 6f 66 20 61 72  ays a list of ar
9bb0: 72 61 79 20 6e 61 6d 65 73 20 69 66 20 74 68 65  ray names if the
9bc0: 0a 09 09 09 23 20 75 73 65 72 20 69 6e 74 65 72  ....# user inter
9bd0: 73 20 77 69 74 68 20 73 6f 6d 65 74 68 69 6e 67  s with something
9be0: 20 77 68 69 63 68 20 63 61 6e 6e 6f 74 20 62 65   which cannot be
9bf0: 20 6d 61 74 63 68 65 64 2e 0a 09 09 09 23 20 54   matched.....# T
9c00: 68 65 20 6d 61 74 63 68 69 6e 67 20 61 67 61 69  he matching agai
9c10: 6e 73 74 20 60 74 65 78 74 27 20 69 73 20 64 6f  nst `text' is do
9c20: 6e 65 20 62 79 20 43 6f 6d 70 6c 65 74 65 46 72  ne by CompleteFr
9c30: 6f 6d 4c 69 73 74 2e 0a 09 09 09 23 0a 09 09 09  omList.....#....
9c40: 73 65 74 20 76 61 72 73 20 5b 75 70 6c 65 76 65  set vars [upleve
9c50: 6c 20 5b 69 6e 66 6f 20 6c 65 76 65 6c 5d 20 69  l [info level] i
9c60: 6e 66 6f 20 76 61 72 73 5d 0a 09 09 09 66 6f 72  nfo vars]....for
9c70: 65 61 63 68 20 76 61 72 20 24 7b 76 61 72 73 7d  each var ${vars}
9c80: 20 7b 0a 09 09 09 09 69 66 20 7b 5b 75 70 6c 65   {.....if {[uple
9c90: 76 65 6c 20 5b 69 6e 66 6f 20 6c 65 76 65 6c 5d  vel [info level]
9ca0: 20 61 72 72 61 79 20 65 78 69 73 74 73 20 24 7b   array exists ${
9cb0: 76 61 72 7d 5d 7d 20 7b 0a 09 09 09 09 09 6c 61  var}]} {......la
9cc0: 70 70 65 6e 64 20 6d 61 74 63 68 65 73 20 24 7b  ppend matches ${
9cd0: 76 61 72 7d 0a 09 09 09 09 7d 0a 09 09 09 7d 0a  var}.....}....}.
9ce0: 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c  ...return [Compl
9cf0: 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65  eteFromList ${te
9d00: 78 74 7d 20 24 7b 6d 61 74 63 68 65 73 7d 5d 0a  xt} ${matches}].
9d10: 09 09 7d 0a 09 09 33 20 7b 0a 09 09 09 73 65 74  ..}...3 {....set
9d20: 20 63 6d 64 20 5b 4c 69 6e 64 65 78 20 24 6c 69   cmd [Lindex $li
9d30: 6e 65 20 31 5d 0a 09 09 09 73 65 74 20 61 72 72  ne 1]....set arr
9d40: 61 79 5f 6e 61 6d 65 20 5b 4c 69 6e 64 65 78 20  ay_name [Lindex 
9d50: 24 6c 69 6e 65 20 32 5d 0a 09 09 09 73 77 69 74  $line 2]....swit
9d60: 63 68 20 2d 2d 20 24 63 6d 64 20 7b 0a 09 09 09  ch -- $cmd {....
9d70: 09 67 65 74 20 2d 0a 09 09 09 09 6e 61 6d 65 73  .get -.....names
9d80: 20 7b 0a 09 09 09 09 09 73 65 74 20 70 61 74 74   {......set patt
9d90: 65 72 6e 20 5b 4c 69 6e 64 65 78 20 24 6c 69 6e  ern [Lindex $lin
9da0: 65 20 33 5d 0a 09 09 09 09 09 73 65 74 20 6d 61  e 3]......set ma
9db0: 74 63 68 65 73 20 5b 75 70 6c 65 76 65 6c 20 5b  tches [uplevel [
9dc0: 69 6e 66 6f 20 6c 65 76 65 6c 5d 20 5c 0a 09 09  info level] \...
9dd0: 09 09 09 61 72 72 61 79 20 6e 61 6d 65 73 20 24  ...array names $
9de0: 7b 61 72 72 61 79 5f 6e 61 6d 65 7d 20 24 7b 70  {array_name} ${p
9df0: 61 74 74 65 72 6e 7d 2a 5d 0a 09 09 09 09 09 69  attern}*]......i
9e00: 66 20 7b 21 5b 6c 6c 65 6e 67 74 68 20 24 6d 61  f {![llength $ma
9e10: 74 63 68 65 73 5d 7d 20 7b 0a 09 09 09 09 09 09  tches]} {.......
9e20: 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
9e30: 69 6e 74 73 20 3f 70 61 74 74 65 72 6e 3f 5d 0a  ints ?pattern?].
9e40: 09 09 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09  .....} else {...
9e50: 09 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70  ....return [Comp
9e60: 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74  leteFromList ${t
9e70: 65 78 74 7d 20 24 7b 6d 61 74 63 68 65 73 7d 5d  ext} ${matches}]
9e80: 0a 09 09 09 09 09 7d 0a 09 09 09 09 7d 0a 09 09  ......}.....}...
9e90: 09 09 61 6e 79 6d 6f 72 65 20 2d 0a 09 09 09 09  ..anymore -.....
9ea0: 64 6f 6e 65 73 65 61 72 63 68 20 2d 0a 09 09 09  donesearch -....
9eb0: 09 6e 65 78 74 65 6c 65 6d 65 6e 74 20 7b 20 72  .nextelement { r
9ec0: 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
9ed0: 6e 74 73 20 3c 73 65 61 72 63 68 49 64 3e 5d 20  nts <searchId>] 
9ee0: 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 7d 0a 09 72  }....}...}..}..r
9ef0: 65 74 75 72 6e 20 22 22 0a 7d 0a 0a 23 20 70 72  eturn "".}..# pr
9f00: 6f 63 20 63 6f 6d 70 6c 65 74 65 28 62 67 65 72  oc complete(bger
9f10: 72 6f 72 29 20 7b 74 65 78 74 20 73 74 61 72 74  ror) {text start
9f20: 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f   end line pos mo
9f30: 64 7d 20 7b 0a 23 20 7d 0a 0a 70 72 6f 63 20 63  d} {.# }..proc c
9f40: 6f 6d 70 6c 65 74 65 28 62 69 6e 61 72 79 29 20  omplete(binary) 
9f50: 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20  {text start end 
9f60: 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a  line pos mod} {.
9f70: 09 73 65 74 20 63 6d 64 20 5b 4c 69 6e 64 65 78  .set cmd [Lindex
9f80: 20 24 6c 69 6e 65 20 31 5d 0a 09 73 77 69 74 63   $line 1]..switc
9f90: 68 20 2d 2d 20 24 70 6f 73 20 7b 0a 09 09 31 20  h -- $pos {...1 
9fa0: 7b 0a 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d  {....return [Com
9fb0: 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 74  pleteFromList $t
9fc0: 65 78 74 20 7b 66 6f 72 6d 61 74 20 73 63 61 6e  ext {format scan
9fd0: 7d 5d 0a 09 09 7d 0a 09 09 32 20 7b 0a 09 09 09  }]...}...2 {....
9fe0: 73 77 69 74 63 68 20 2d 2d 20 24 63 6d 64 20 7b  switch -- $cmd {
9ff0: 0a 09 09 09 09 66 6f 72 6d 61 74 20 7b 20 72 65  .....format { re
a000: 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
a010: 74 73 20 3c 66 6f 72 6d 61 74 53 74 72 69 6e 67  ts <formatString
a020: 3e 5d 20 7d 0a 09 09 09 09 73 63 61 6e 20 20 20  >] }.....scan   
a030: 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
a040: 79 48 69 6e 74 73 20 3c 73 74 72 69 6e 67 3e 5d  yHints <string>]
a050: 20 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 09 33 20   }....}...}...3 
a060: 7b 0a 09 09 09 73 77 69 74 63 68 20 2d 2d 20 24  {....switch -- $
a070: 63 6d 64 20 7b 0a 09 09 09 09 66 6f 72 6d 61 74  cmd {.....format
a080: 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
a090: 61 79 48 69 6e 74 73 20 3f 61 72 67 3f 5d 20 7d  ayHints ?arg?] }
a0a0: 0a 09 09 09 09 73 63 61 6e 20 20 20 7b 20 72 65  .....scan   { re
a0b0: 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
a0c0: 74 73 20 3c 66 6f 72 6d 61 74 53 74 72 69 6e 67  ts <formatString
a0d0: 3e 5d 20 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 09  >] }....}...}...
a0e0: 64 65 66 61 75 6c 74 20 7b 0a 09 09 09 73 77 69  default {....swi
a0f0: 74 63 68 20 2d 2d 20 24 63 6d 64 20 7b 0a 09 09  tch -- $cmd {...
a100: 09 09 66 6f 72 6d 61 74 20 7b 20 72 65 74 75 72  ..format { retur
a110: 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
a120: 3f 61 72 67 3f 5d 20 7d 0a 09 09 09 09 73 63 61  ?arg?] }.....sca
a130: 6e 20 20 20 7b 20 72 65 74 75 72 6e 20 5b 44 69  n   { return [Di
a140: 73 70 6c 61 79 48 69 6e 74 73 20 3f 76 61 72 4e  splayHints ?varN
a150: 61 6d 65 3f 5d 20 7d 0a 09 09 09 7d 0a 09 09 7d  ame?] }....}...}
a160: 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d  ..}..return "".}
a170: 0a 0a 23 20 70 72 6f 63 20 63 6f 6d 70 6c 65 74  ..# proc complet
a180: 65 28 62 72 65 61 6b 29 20 7b 74 65 78 74 20 73  e(break) {text s
a190: 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f  tart end line po
a1a0: 73 20 6d 6f 64 7d 20 7b 0a 23 20 7d 0a 0a 70 72  s mod} {.# }..pr
a1b0: 6f 63 20 63 6f 6d 70 6c 65 74 65 28 63 61 74 63  oc complete(catc
a1c0: 68 29 20 7b 74 65 78 74 20 73 74 61 72 74 20 65  h) {text start e
a1d0: 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d  nd line pos mod}
a1e0: 20 7b 0a 09 73 77 69 74 63 68 20 2d 2d 20 24 70   {..switch -- $p
a1f0: 6f 73 20 7b 0a 09 09 31 20 7b 20 72 65 74 75 72  os {...1 { retur
a200: 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
a210: 3c 73 63 72 69 70 74 3e 5d 20 7d 0a 09 09 32 20  <script>] }...2 
a220: 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
a230: 79 48 69 6e 74 73 20 3f 76 61 72 4e 61 6d 65 3f  yHints ?varName?
a240: 5d 20 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22  ] }..}..return "
a250: 22 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65  ".}..proc comple
a260: 74 65 28 63 64 29 20 7b 74 65 78 74 20 73 74 61  te(cd) {text sta
a270: 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20  rt end line pos 
a280: 6d 6f 64 7d 20 7b 0a 09 72 65 74 75 72 6e 20 22  mod} {..return "
a290: 22 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65  ".}..proc comple
a2a0: 74 65 28 63 6c 6f 63 6b 29 20 7b 74 65 78 74 20  te(clock) {text 
a2b0: 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70  start end line p
a2c0: 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73 65 74 20 63  os mod} {..set c
a2d0: 6d 64 20 5b 4c 69 6e 64 65 78 20 24 6c 69 6e 65  md [Lindex $line
a2e0: 20 31 5d 0a 09 73 77 69 74 63 68 20 2d 2d 20 24   1]..switch -- $
a2f0: 70 6f 73 20 7b 0a 09 09 31 20 7b 0a 09 09 09 72  pos {...1 {....r
a300: 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46  eturn [CompleteF
a310: 72 6f 6d 4c 69 73 74 20 24 74 65 78 74 20 7b 63  romList $text {c
a320: 6c 69 63 6b 73 20 66 6f 72 6d 61 74 20 73 63 61  licks format sca
a330: 6e 20 73 65 63 6f 6e 64 73 7d 5d 0a 09 09 7d 0a  n seconds}]...}.
a340: 09 09 32 20 7b 0a 09 09 09 73 77 69 74 63 68 20  ..2 {....switch 
a350: 2d 2d 20 24 63 6d 64 20 7b 0a 09 09 09 09 66 6f  -- $cmd {.....fo
a360: 72 6d 61 74 20 20 7b 20 72 65 74 75 72 6e 20 5b  rmat  { return [
a370: 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 63 6c  DisplayHints <cl
a380: 6f 63 6b 56 61 6c 75 65 3e 5d 20 7d 0a 09 09 09  ockValue>] }....
a390: 09 73 63 61 6e 20 20 20 20 7b 20 72 65 74 75 72  .scan    { retur
a3a0: 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
a3b0: 3c 64 61 74 65 53 74 72 69 6e 67 3e 5d 20 7d 0a  <dateString>] }.
a3c0: 09 09 09 09 63 6c 69 63 6b 73 20 20 2d 0a 09 09  ....clicks  -...
a3d0: 09 09 73 65 63 6f 6e 64 73 20 7b 7d 0a 09 09 09  ..seconds {}....
a3e0: 7d 0a 09 09 7d 0a 09 09 33 20 2d 0a 09 09 35 20  }...}...3 -...5 
a3f0: 7b 0a 09 09 09 73 77 69 74 63 68 20 2d 2d 20 24  {....switch -- $
a400: 63 6d 64 20 7b 0a 09 09 09 09 66 6f 72 6d 61 74  cmd {.....format
a410: 20 7b 0a 09 09 09 09 09 73 65 74 20 73 75 62 63   {......set subc
a420: 6d 64 73 20 5b 52 65 6d 6f 76 65 55 73 65 64 4f  mds [RemoveUsedO
a430: 70 74 69 6f 6e 73 20 24 6c 69 6e 65 20 7b 2d 66  ptions $line {-f
a440: 6f 72 6d 61 74 20 2d 67 6d 74 7d 5d 0a 09 09 09  ormat -gmt}]....
a450: 09 09 72 65 74 75 72 6e 20 5b 54 72 79 46 72 6f  ..return [TryFro
a460: 6d 4c 69 73 74 20 24 74 65 78 74 20 24 73 75 62  mList $text $sub
a470: 63 6d 64 73 5d 0a 09 09 09 09 7d 0a 09 09 09 09  cmds].....}.....
a480: 73 63 61 6e 20 7b 0a 09 09 09 09 09 73 65 74 20  scan {......set 
a490: 73 75 62 63 6d 64 73 20 5b 52 65 6d 6f 76 65 55  subcmds [RemoveU
a4a0: 73 65 64 4f 70 74 69 6f 6e 73 20 24 6c 69 6e 65  sedOptions $line
a4b0: 20 7b 2d 62 61 73 65 20 2d 67 6d 74 7d 5d 0a 09   {-base -gmt}]..
a4c0: 09 09 09 09 72 65 74 75 72 6e 20 5b 54 72 79 46  ....return [TryF
a4d0: 72 6f 6d 4c 69 73 74 20 24 74 65 78 74 20 24 73  romList $text $s
a4e0: 75 62 63 6d 64 73 5d 0a 09 09 09 09 7d 0a 09 09  ubcmds].....}...
a4f0: 09 09 63 6c 69 63 6b 73 20 20 2d 0a 09 09 09 09  ..clicks  -.....
a500: 73 65 63 6f 6e 64 73 20 7b 7d 0a 09 09 09 7d 0a  seconds {}....}.
a510: 09 09 7d 0a 09 09 34 20 2d 0a 09 09 36 20 7b 0a  ..}...4 -...6 {.
a520: 09 09 09 73 65 74 20 73 75 62 20 5b 4c 69 6e 64  ...set sub [Lind
a530: 65 78 20 24 6c 69 6e 65 20 5b 65 78 70 72 20 24  ex $line [expr $
a540: 70 6f 73 20 2d 20 31 5d 5d 0a 09 09 09 73 77 69  pos - 1]]....swi
a550: 74 63 68 20 2d 2d 20 24 63 6d 64 20 7b 0a 09 09  tch -- $cmd {...
a560: 09 09 66 6f 72 6d 61 74 20 7b 0a 09 09 09 09 09  ..format {......
a570: 73 77 69 74 63 68 20 2d 2d 20 24 73 75 62 20 7b  switch -- $sub {
a580: 0a 09 09 09 09 09 09 2d 66 6f 72 6d 61 74 20 7b  .......-format {
a590: 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
a5a0: 48 69 6e 74 73 20 3c 73 74 72 69 6e 67 3e 5d 20  Hints <string>] 
a5b0: 7d 0a 09 09 09 09 09 09 2d 67 6d 74 20 20 20 20  }.......-gmt    
a5c0: 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
a5d0: 79 48 69 6e 74 73 20 3c 62 6f 6f 6c 65 61 6e 3e  yHints <boolean>
a5e0: 5d 20 7d 0a 09 09 09 09 09 7d 0a 09 09 09 09 7d  ] }......}.....}
a5f0: 0a 09 09 09 09 73 63 61 6e 20 7b 0a 09 09 09 09  .....scan {.....
a600: 09 73 77 69 74 63 68 20 2d 2d 20 24 73 75 62 20  .switch -- $sub 
a610: 7b 0a 09 09 09 09 09 09 2d 62 61 73 65 20 7b 20  {.......-base { 
a620: 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
a630: 69 6e 74 73 20 3c 63 6c 6f 63 6b 56 61 6c 3e 5d  ints <clockVal>]
a640: 20 7d 0a 09 09 09 09 09 09 2d 67 6d 74 20 20 7b   }.......-gmt  {
a650: 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
a660: 48 69 6e 74 73 20 3c 62 6f 6f 6c 65 61 6e 3e 5d  Hints <boolean>]
a670: 20 7d 0a 09 09 09 09 09 7d 0a 09 09 09 09 7d 0a   }......}.....}.
a680: 09 09 09 09 63 6c 69 63 6b 73 20 20 2d 0a 09 09  ....clicks  -...
a690: 09 09 73 65 63 6f 6e 64 73 20 7b 7d 0a 09 09 09  ..seconds {}....
a6a0: 7d 0a 09 09 7d 0a 09 7d 0a 09 72 65 74 75 72 6e  }...}..}..return
a6b0: 20 22 22 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70   "".}..proc comp
a6c0: 6c 65 74 65 28 63 6c 6f 73 65 29 20 7b 74 65 78  lete(close) {tex
a6d0: 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65  t start end line
a6e0: 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73 77 69   pos mod} {..swi
a6f0: 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a 09 09  tch -- $pos {...
a700: 31 20 7b 20 72 65 74 75 72 6e 20 5b 43 68 61 6e  1 { return [Chan
a710: 6e 65 6c 49 64 20 24 74 65 78 74 5d 20 7d 0a 09  nelId $text] }..
a720: 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a 0a  }..return "".}..
a730: 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 63 6f  proc complete(co
a740: 6e 63 61 74 29 20 7b 74 65 78 74 20 73 74 61 72  ncat) {text star
a750: 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d  t end line pos m
a760: 6f 64 7d 20 7b 0a 09 72 65 74 75 72 6e 20 5b 44  od} {..return [D
a770: 69 73 70 6c 61 79 48 69 6e 74 73 20 3f 61 72 67  isplayHints ?arg
a780: 3f 5d 0a 7d 0a 0a 23 20 70 72 6f 63 20 63 6f 6d  ?].}..# proc com
a790: 70 6c 65 74 65 28 63 6f 6e 74 69 6e 75 65 29 20  plete(continue) 
a7a0: 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20  {text start end 
a7b0: 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a  line pos mod} {.
a7c0: 23 20 7d 0a 0a 23 20 70 72 6f 63 20 63 6f 6d 70  # }..# proc comp
a7d0: 6c 65 74 65 28 64 64 65 29 20 7b 74 65 78 74 20  lete(dde) {text 
a7e0: 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70  start end line p
a7f0: 6f 73 20 6d 6f 64 7d 20 7b 0a 23 20 20 20 20 20  os mod} {.#     
a800: 57 65 27 72 65 20 6e 6f 74 20 6f 6e 20 77 69 6e  We're not on win
a810: 64 6f 7a 65 20 68 65 72 65 20 2e 2e 2e 0a 23 20  doze here ....# 
a820: 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65  }..proc complete
a830: 28 65 6e 63 6f 64 69 6e 67 29 20 7b 74 65 78 74  (encoding) {text
a840: 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20   start end line 
a850: 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73 65 74 20  pos mod} {..set 
a860: 63 6d 64 20 5b 4c 69 6e 64 65 78 20 24 6c 69 6e  cmd [Lindex $lin
a870: 65 20 31 5d 0a 09 73 77 69 74 63 68 20 2d 2d 20  e 1]..switch -- 
a880: 24 70 6f 73 20 7b 0a 09 09 31 20 7b 0a 09 09 09  $pos {...1 {....
a890: 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65  return [Complete
a8a0: 46 72 6f 6d 4c 69 73 74 20 24 74 65 78 74 20 7b  FromList $text {
a8b0: 63 6f 6e 76 65 72 74 66 72 6f 6d 20 63 6f 6e 76  convertfrom conv
a8c0: 65 72 74 74 6f 20 6e 61 6d 65 73 20 73 79 73 74  ertto names syst
a8d0: 65 6d 7d 5d 0a 09 09 7d 0a 09 09 32 20 7b 0a 09  em}]...}...2 {..
a8e0: 09 09 73 77 69 74 63 68 20 2d 2d 20 24 63 6d 64  ..switch -- $cmd
a8f0: 20 7b 0a 09 09 09 09 63 6f 6e 76 65 72 74 66 72   {.....convertfr
a900: 6f 6d 20 2d 0a 09 09 09 09 63 6f 6e 76 65 72 74  om -.....convert
a910: 74 6f 20 2d 0a 09 09 09 09 73 79 73 74 65 6d 20  to -.....system 
a920: 7b 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b 43  {......return [C
a930: 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20  ompleteFromList 
a940: 24 7b 74 65 78 74 7d 20 5b 65 6e 63 6f 64 69 6e  ${text} [encodin
a950: 67 20 6e 61 6d 65 73 5d 5d 0a 09 09 09 09 7d 0a  g names]].....}.
a960: 09 09 09 7d 0a 09 09 7d 0a 09 09 33 20 7b 0a 09  ...}...}...3 {..
a970: 09 09 73 77 69 74 63 68 20 2d 2d 20 24 63 6d 64  ..switch -- $cmd
a980: 20 7b 0a 09 09 09 09 63 6f 6e 76 65 72 74 66 72   {.....convertfr
a990: 6f 6d 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73  om { return [Dis
a9a0: 70 6c 61 79 48 69 6e 74 73 20 3c 64 61 74 61 3e  playHints <data>
a9b0: 5d 20 7d 0a 09 09 09 09 63 6f 6e 76 65 72 74 74  ] }.....convertt
a9c0: 6f 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70  o { return [Disp
a9d0: 6c 61 79 48 69 6e 74 73 20 3c 73 74 72 69 6e 67  layHints <string
a9e0: 3e 5d 20 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 7d  >] }....}...}..}
a9f0: 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a 0a 70  ..return "".}..p
aa00: 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 65 6f 66  roc complete(eof
aa10: 29 20 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e  ) {text start en
aa20: 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20  d line pos mod} 
aa30: 7b 0a 09 73 77 69 74 63 68 20 2d 2d 20 24 70 6f  {..switch -- $po
aa40: 73 20 7b 0a 09 09 31 20 7b 20 72 65 74 75 72 6e  s {...1 { return
aa50: 20 5b 49 6e 43 68 61 6e 6e 65 6c 49 64 20 24 74   [InChannelId $t
aa60: 65 78 74 5d 20 7d 0a 09 7d 0a 09 72 65 74 75 72  ext] }..}..retur
aa70: 6e 20 22 22 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d  n "".}..proc com
aa80: 70 6c 65 74 65 28 65 72 72 6f 72 29 20 7b 74 65  plete(error) {te
aa90: 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e  xt start end lin
aaa0: 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73 77  e pos mod} {..sw
aab0: 69 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a 09  itch -- $pos {..
aac0: 09 31 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73  .1 { return [Dis
aad0: 70 6c 61 79 48 69 6e 74 73 20 3c 6d 65 73 73 61  playHints <messa
aae0: 67 65 3e 5d 20 7d 0a 09 09 32 20 7b 20 72 65 74  ge>] }...2 { ret
aaf0: 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
ab00: 73 20 3f 69 6e 66 6f 3f 5d 20 7d 0a 09 09 33 20  s ?info?] }...3 
ab10: 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
ab20: 79 48 69 6e 74 73 20 3f 63 6f 64 65 3f 5d 20 7d  yHints ?code?] }
ab30: 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d  ..}..return "".}
ab40: 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28  ..proc complete(
ab50: 65 76 61 6c 29 20 7b 74 65 78 74 20 73 74 61 72  eval) {text star
ab60: 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d  t end line pos m
ab70: 6f 64 7d 20 7b 0a 09 73 77 69 74 63 68 20 2d 2d  od} {..switch --
ab80: 20 24 70 6f 73 20 7b 0a 09 09 31 20 7b 20 72 65   $pos {...1 { re
ab90: 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
aba0: 74 73 20 3c 61 72 67 3e 5d 20 7d 0a 09 09 64 65  ts <arg>] }...de
abb0: 66 61 75 6c 74 20 7b 20 72 65 74 75 72 6e 20 5b  fault { return [
abc0: 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3f 61 72  DisplayHints ?ar
abd0: 67 3f 5d 20 7d 0a 09 7d 0a 09 72 65 74 75 72 6e  g?] }..}..return
abe0: 20 22 22 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70   "".}..proc comp
abf0: 6c 65 74 65 28 65 78 65 63 29 20 7b 74 65 78 74  lete(exec) {text
ac00: 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20   start end line 
ac10: 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73 65 74 20  pos mod} {..set 
ac20: 72 65 64 69 72 20 5b 6c 69 73 74 20 7c 20 7c 26  redir [list | |&
ac30: 20 3c 20 3c 40 20 3c 3c 20 3e 20 32 3e 20 3e 26   < <@ << > 2> >&
ac40: 20 3e 3e 20 32 3e 3e 20 3e 3e 26 20 3e 40 20 32   >> 2>> >>& >@ 2
ac50: 3e 40 20 3e 26 40 5d 0a 09 76 61 72 69 61 62 6c  >@ >&@]..variabl
ac60: 65 20 65 78 65 63 75 74 61 62 6c 65 73 0a 09 69  e executables..i
ac70: 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  f {![info exists
ac80: 20 65 78 65 63 75 74 61 62 6c 65 73 5d 7d 20 7b   executables]} {
ac90: 0a 09 09 52 65 68 61 73 68 0a 09 7d 0a 09 73 77  ...Rehash..}..sw
aca0: 69 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a 09  itch -- $pos {..
acb0: 09 31 20 7b 0a 09 09 09 72 65 74 75 72 6e 20 5b  .1 {....return [
acc0: 54 72 79 46 72 6f 6d 4c 69 73 74 20 24 74 65 78  TryFromList $tex
acd0: 74 20 22 2d 6b 65 65 70 6e 65 77 6c 69 6e 65 20  t "-keepnewline 
ace0: 2d 2d 20 24 65 78 65 63 75 74 61 62 6c 65 73 22  -- $executables"
acf0: 5d 0a 09 09 7d 0a 09 09 64 65 66 61 75 6c 74 20  ]...}...default 
ad00: 7b 0a 09 09 09 73 65 74 20 70 72 65 76 20 5b 50  {....set prev [P
ad10: 72 65 76 69 6f 75 73 57 6f 72 64 20 24 7b 73 74  reviousWord ${st
ad20: 61 72 74 7d 20 24 7b 6c 69 6e 65 7d 5d 0a 09 09  art} ${line}]...
ad30: 09 69 66 20 7b 22 2d 6b 65 65 70 6e 65 77 6c 69  .if {"-keepnewli
ad40: 6e 65 22 20 3d 3d 20 24 70 72 65 76 20 26 26 20  ne" == $prev && 
ad50: 32 20 3d 3d 20 24 70 6f 73 7d 20 7b 0a 09 09 09  2 == $pos} {....
ad60: 09 72 65 74 75 72 6e 20 5b 54 72 79 46 72 6f 6d  .return [TryFrom
ad70: 4c 69 73 74 20 24 74 65 78 74 20 22 2d 2d 20 24  List $text "-- $
ad80: 65 78 65 63 75 74 61 62 6c 65 73 22 5d 0a 09 09  executables"]...
ad90: 09 7d 0a 09 09 09 73 77 69 74 63 68 20 2d 65 78  .}....switch -ex
ada0: 61 63 74 20 2d 2d 20 24 70 72 65 76 20 7b 0a 09  act -- $prev {..
adb0: 09 09 09 7c 20 2d 0a 09 09 09 09 7c 26 20 7b 20  ...| -.....|& { 
adc0: 72 65 74 75 72 6e 20 5b 54 72 79 46 72 6f 6d 4c  return [TryFromL
add0: 69 73 74 20 24 74 65 78 74 20 24 65 78 65 63 75  ist $text $execu
ade0: 74 61 62 6c 65 73 5d 20 7d 0a 09 09 09 09 3c 20  tables] }.....< 
adf0: 2d 0a 09 09 09 09 3e 20 2d 0a 09 09 09 09 32 3e  -.....> -.....2>
ae00: 20 2d 0a 09 09 09 09 3e 26 20 2d 0a 09 09 09 09   -.....>& -.....
ae10: 3e 3e 20 2d 0a 09 09 09 09 32 3e 3e 20 2d 0a 09  >> -.....2>> -..
ae20: 09 09 09 3e 3e 26 20 7b 20 72 65 74 75 72 6e 20  ...>>& { return 
ae30: 22 22 20 7d 0a 09 09 09 09 3c 40 20 2d 0a 09 09  "" }.....<@ -...
ae40: 09 09 3e 40 20 2d 0a 09 09 09 09 32 3e 40 20 2d  ..>@ -.....2>@ -
ae50: 0a 09 09 09 09 3e 26 40 20 7b 20 72 65 74 75 72  .....>&@ { retur
ae60: 6e 20 5b 43 68 61 6e 6e 65 6c 49 64 20 24 74 65  n [ChannelId $te
ae70: 78 74 5d 20 7d 0a 09 09 09 09 3c 3c 20 7b 20 72  xt] }.....<< { r
ae80: 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
ae90: 6e 74 73 20 3c 76 61 6c 75 65 3e 5d 20 7d 0a 09  nts <value>] }..
aea0: 09 09 09 64 65 66 61 75 6c 74 20 7b 20 72 65 74  ...default { ret
aeb0: 75 72 6e 20 5b 54 72 79 46 72 6f 6d 4c 69 73 74  urn [TryFromList
aec0: 20 24 74 65 78 74 20 24 72 65 64 69 72 20 22 3c   $text $redir "<
aed0: 3e 22 5d 20 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09  >"] }....}...}..
aee0: 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a 0a  }..return "".}..
aef0: 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 65 78  proc complete(ex
af00: 69 74 29 20 7b 74 65 78 74 20 73 74 61 72 74 20  it) {text start 
af10: 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64  end line pos mod
af20: 7d 20 7b 0a 09 73 77 69 74 63 68 20 2d 2d 20 24  } {..switch -- $
af30: 70 6f 73 20 7b 0a 09 09 31 20 7b 20 72 65 74 75  pos {...1 { retu
af40: 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
af50: 20 3f 72 65 74 75 72 6e 43 6f 64 65 3f 5d 20 7d   ?returnCode?] }
af60: 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d  ..}..return "".}
af70: 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28  ..proc complete(
af80: 65 78 70 72 29 20 7b 74 65 78 74 20 73 74 61 72  expr) {text star
af90: 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d  t end line pos m
afa0: 6f 64 7d 20 7b 0a 09 73 65 74 20 6c 65 66 74 20  od} {..set left 
afb0: 24 74 65 78 74 0a 09 73 65 74 20 72 69 67 68 74  $text..set right
afc0: 20 22 22 0a 09 73 65 74 20 73 75 62 73 74 69 74   ""..set substit
afd0: 75 74 69 6f 6e 20 5b 72 65 67 65 78 70 20 2d 2d  ution [regexp --
afe0: 20 7b 28 2e 2a 29 28 5c 28 2e 2a 29 7d 20 24 74   {(.*)(\(.*)} $t
aff0: 65 78 74 20 61 6c 6c 20 6c 65 66 74 20 72 69 67  ext all left rig
b000: 68 74 5d 3b 20 23 2d 29 0a 0a 09 73 65 74 20 63  ht]; #-)...set c
b010: 6d 64 73 20 7b 0a 09 09 2d 20 2b 20 7e 20 21 20  mds {...- + ~ ! 
b020: 20 2a 20 2f 20 25 20 2b 20 2d 20 3c 3c 20 3e 3e   * / % + - << >>
b030: 20 3c 20 3e 20 3c 3d 20 3e 3d 20 3d 3d 20 21 3d   < > <= >= == !=
b040: 20 26 20 5e 20 7c 20 26 26 20 7c 7c 20 3c 78 3f   & ^ | && || <x?
b050: 79 3a 7a 3e 0a 09 09 61 63 6f 73 20 20 20 20 63  y:z>...acos    c
b060: 6f 73 20 20 20 20 20 68 79 70 6f 74 20 20 20 73  os     hypot   s
b070: 69 6e 68 20 0a 09 09 61 73 69 6e 20 20 20 20 63  inh ...asin    c
b080: 6f 73 68 20 20 20 20 6c 6f 67 20 20 20 20 20 73  osh    log     s
b090: 71 72 74 20 0a 09 09 61 74 61 6e 20 20 20 20 65  qrt ...atan    e
b0a0: 78 70 20 20 20 20 20 6c 6f 67 31 30 20 20 20 74  xp     log10   t
b0b0: 61 6e 20 0a 09 09 61 74 61 6e 32 20 20 20 66 6c  an ...atan2   fl
b0c0: 6f 6f 72 20 20 20 70 6f 77 20 20 20 20 20 74 61  oor   pow     ta
b0d0: 6e 68 20 0a 09 09 63 65 69 6c 20 20 20 20 66 6d  nh ...ceil    fm
b0e0: 6f 64 20 20 20 20 73 69 6e 20 20 20 20 20 61 62  od    sin     ab
b0f0: 73 20 0a 09 09 64 6f 75 62 6c 65 20 20 69 6e 74  s ...double  int
b100: 20 20 20 20 20 72 61 6e 64 20 20 20 20 72 6f 75       rand    rou
b110: 6e 64 20 0a 09 09 73 72 61 6e 64 20 0a 09 7d 0a  nd ...srand ..}.
b120: 0a 09 69 66 20 7b 22 29 22 20 3d 3d 20 5b 53 74  ..if {")" == [St
b130: 72 69 6e 67 20 69 6e 64 65 78 20 24 74 65 78 74  ring index $text
b140: 20 65 6e 64 5d 20 26 26 20 2d 31 20 21 3d 20 5b   end] && -1 != [
b150: 6c 73 65 61 72 63 68 20 24 63 6d 64 73 20 24 6c  lsearch $cmds $l
b160: 65 66 74 5d 7d 20 7b 0a 09 09 72 65 74 75 72 6e  eft]} {...return
b170: 20 22 24 74 65 78 74 20 22 3b 20 23 20 61 70 70   "$text "; # app
b180: 65 6e 64 20 61 20 73 70 61 63 65 20 61 66 74 65  end a space afte
b190: 72 20 61 20 63 6c 6f 73 69 6e 67 20 27 29 27 0a  r a closing ')'.
b1a0: 09 7d 0a 0a 09 73 77 69 74 63 68 20 2d 2d 20 24  .}...switch -- $
b1b0: 6c 65 66 74 20 7b 0a 09 09 72 61 6e 64 20 7b 20  left {...rand { 
b1c0: 72 65 74 75 72 6e 20 22 72 61 6e 64 28 29 20 22  return "rand() "
b1d0: 20 7d 0a 0a 09 09 61 62 73 20 20 2d 0a 09 09 61   }....abs  -...a
b1e0: 63 6f 73 20 2d 0a 09 09 61 73 69 6e 20 2d 0a 09  cos -...asin -..
b1f0: 09 61 74 61 6e 20 2d 0a 09 09 63 65 69 6c 20 20  .atan -...ceil  
b200: 2d 0a 09 09 63 6f 73 20 2d 0a 09 09 63 6f 73 68  -...cos -...cosh
b210: 20 2d 0a 09 09 64 6f 75 62 6c 65 20 2d 0a 09 09   -...double -...
b220: 65 78 70 20 2d 0a 09 09 66 6c 6f 6f 72 20 2d 0a  exp -...floor -.
b230: 09 09 69 6e 74 20 2d 0a 09 09 6c 6f 67 20 2d 0a  ..int -...log -.
b240: 09 09 6c 6f 67 31 30 20 2d 0a 09 09 72 6f 75 6e  ..log10 -...roun
b250: 64 20 20 2d 0a 09 09 73 69 6e 20 20 2d 0a 09 09  d  -...sin  -...
b260: 73 69 6e 68 20 20 2d 0a 09 09 73 71 72 74 20 20  sinh  -...sqrt  
b270: 2d 0a 09 09 73 72 61 6e 64 20 20 2d 0a 09 09 74  -...srand  -...t
b280: 61 6e 20 20 2d 0a 09 09 74 61 6e 68 20 7b 20 72  an  -...tanh { r
b290: 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
b2a0: 6e 74 73 20 3c 76 61 6c 75 65 3e 5d 20 7d 0a 0a  nts <value>] }..
b2b0: 0a 09 09 61 74 61 6e 32 20 2d 0a 09 09 66 6d 6f  ...atan2 -...fmo
b2c0: 64 20 2d 0a 09 09 68 79 70 6f 74 20 2d 0a 09 09  d -...hypot -...
b2d0: 70 6f 77 20 7b 20 72 65 74 75 72 6e 20 5b 44 69  pow { return [Di
b2e0: 73 70 6c 61 79 48 69 6e 74 73 20 3c 76 61 6c 75  splayHints <valu
b2f0: 65 3e 2c 3c 76 61 6c 75 65 3e 5d 20 7d 0a 09 7d  e>,<value>] }..}
b300: 0a 0a 09 73 65 74 20 63 6f 6d 70 6c 65 74 69 6f  ...set completio
b310: 6e 73 20 5b 54 72 79 46 72 6f 6d 4c 69 73 74 20  ns [TryFromList 
b320: 24 6c 65 66 74 20 24 63 6d 64 73 20 3c 3e 5d 0a  $left $cmds <>].
b330: 09 69 66 20 7b 31 20 3d 3d 20 5b 6c 6c 65 6e 67  .if {1 == [lleng
b340: 74 68 20 24 63 6f 6d 70 6c 65 74 69 6f 6e 73 5d  th $completions]
b350: 7d 20 7b 0a 09 09 69 66 20 7b 21 24 73 75 62 73  } {...if {!$subs
b360: 74 69 74 75 74 69 6f 6e 7d 20 7b 0a 09 09 09 69  titution} {....i
b370: 66 20 7b 22 72 61 6e 64 22 20 3d 3d 20 24 63 6f  f {"rand" == $co
b380: 6d 70 6c 65 74 69 6f 6e 73 7d 20 7b 0a 09 09 09  mpletions} {....
b390: 09 72 65 74 75 72 6e 20 22 72 61 6e 64 28 29 20  .return "rand() 
b3a0: 22 3b 20 23 20 72 61 6e 64 28 29 20 74 61 6b 65  "; # rand() take
b3b0: 73 20 6e 6f 20 61 72 67 75 6d 65 6e 74 73 0a 09  s no arguments..
b3c0: 09 09 7d 0a 09 09 09 61 70 70 65 6e 64 20 63 6f  ..}....append co
b3d0: 6d 70 6c 65 74 69 6f 6e 73 20 28 3b 20 23 2d 29  mpletions (; #-)
b3e0: 0a 09 09 09 72 65 74 75 72 6e 20 5b 6c 69 73 74  ....return [list
b3f0: 20 24 63 6f 6d 70 6c 65 74 69 6f 6e 73 20 7b 7d   $completions {}
b400: 5d 0a 09 09 7d 0a 09 7d 20 65 6c 73 65 20 7b 0a  ]...}..} else {.
b410: 09 09 72 65 74 75 72 6e 20 24 63 6f 6d 70 6c 65  ..return $comple
b420: 74 69 6f 6e 73 0a 09 7d 0a 09 72 65 74 75 72 6e  tions..}..return
b430: 20 22 22 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70   "".}..proc comp
b440: 6c 65 74 65 28 66 62 6c 6f 63 6b 65 64 29 20 7b  lete(fblocked) {
b450: 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c  text start end l
b460: 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09  ine pos mod} {..
b470: 73 77 69 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b  switch -- $pos {
b480: 0a 09 09 31 20 7b 20 72 65 74 75 72 6e 20 5b 49  ...1 { return [I
b490: 6e 43 68 61 6e 6e 65 6c 49 64 20 24 74 65 78 74  nChannelId $text
b4a0: 5d 20 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22  ] }..}..return "
b4b0: 22 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65  ".}..proc comple
b4c0: 74 65 28 66 63 6f 6e 66 69 67 75 72 65 29 20 7b  te(fconfigure) {
b4d0: 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c  text start end l
b4e0: 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09  ine pos mod} {..
b4f0: 73 65 74 20 63 6d 64 20 5b 4c 69 6e 64 65 78 20  set cmd [Lindex 
b500: 24 6c 69 6e 65 20 31 5d 0a 09 73 77 69 74 63 68  $line 1]..switch
b510: 20 2d 2d 20 24 70 6f 73 20 7b 0a 09 09 31 20 7b   -- $pos {...1 {
b520: 0a 09 09 09 72 65 74 75 72 6e 20 5b 43 68 61 6e  ....return [Chan
b530: 6e 65 6c 49 64 20 24 7b 74 65 78 74 7d 5d 0a 09  nelId ${text}]..
b540: 09 7d 0a 09 09 64 65 66 61 75 6c 74 20 7b 0a 09  .}...default {..
b550: 09 09 73 65 74 20 6f 70 74 69 6f 6e 20 5b 50 72  ..set option [Pr
b560: 65 76 69 6f 75 73 57 6f 72 64 20 24 7b 73 74 61  eviousWord ${sta
b570: 72 74 7d 20 24 7b 6c 69 6e 65 7d 5d 0a 09 09 09  rt} ${line}]....
b580: 73 77 69 74 63 68 20 2d 2d 20 24 6f 70 74 69 6f  switch -- $optio
b590: 6e 20 7b 0a 09 09 09 09 2d 62 6c 6f 63 6b 69 6e  n {.....-blockin
b5a0: 67 20 7b 0a 09 09 09 09 09 72 65 74 75 72 6e 20  g {......return 
b5b0: 5b 43 6f 6d 70 6c 65 74 65 42 6f 6f 6c 65 61 6e  [CompleteBoolean
b5c0: 20 24 7b 74 65 78 74 7d 5d 0a 09 09 09 09 7d 0a   ${text}].....}.
b5d0: 09 09 09 09 2d 62 75 66 66 65 72 69 6e 67 20 7b  ....-buffering {
b5e0: 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b 43 6f  ......return [Co
b5f0: 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24  mpleteFromList $
b600: 7b 74 65 78 74 7d 20 7b 66 75 6c 6c 20 6c 69 6e  {text} {full lin
b610: 65 20 6e 6f 6e 65 7d 5d 0a 09 09 09 09 7d 0a 09  e none}].....}..
b620: 09 09 09 2d 62 75 66 66 65 72 73 69 7a 65 20 7b  ...-buffersize {
b630: 0a 09 09 09 09 09 69 66 20 7b 21 5b 6c 6c 65 6e  ......if {![llen
b640: 67 74 68 20 24 7b 74 65 78 74 7d 5d 7d 20 7b 0a  gth ${text}]} {.
b650: 09 09 09 09 09 09 72 65 74 75 72 6e 20 5b 44 69  ......return [Di
b660: 73 70 6c 61 79 48 69 6e 74 73 20 3c 6e 65 77 53  splayHints <newS
b670: 69 7a 65 3e 5d 0a 09 09 09 09 09 7d 0a 09 09 09  ize>]......}....
b680: 09 7d 0a 09 09 09 09 2d 65 6e 63 6f 64 69 6e 67  .}.....-encoding
b690: 20 7b 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b   {......return [
b6a0: 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74  CompleteFromList
b6b0: 20 24 7b 74 65 78 74 7d 20 5b 65 6e 63 6f 64 69   ${text} [encodi
b6c0: 6e 67 20 6e 61 6d 65 73 5d 5d 0a 09 09 09 09 7d  ng names]].....}
b6d0: 0a 09 09 09 09 2d 65 6f 66 63 68 61 72 20 7b 0a  .....-eofchar {.
b6e0: 09 09 09 09 09 72 65 74 75 72 6e 20 5b 44 69 73  .....return [Dis
b6f0: 70 6c 61 79 48 69 6e 74 73 20 7b 5c 7b 3c 69 6e  playHints {\{<in
b700: 43 68 61 72 3e 5c 20 3c 6f 75 74 43 68 61 72 3e  Char>\ <outChar>
b710: 5c 7d 7d 5d 0a 09 09 09 09 7d 0a 09 09 09 09 2d  \}}].....}.....-
b720: 74 72 61 6e 73 6c 61 74 69 6f 6e 20 7b 0a 09 09  translation {...
b730: 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c  ...return [Compl
b740: 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65  eteFromList ${te
b750: 78 74 7d 20 7b 61 75 74 6f 20 62 69 6e 61 72 79  xt} {auto binary
b760: 20 63 72 20 63 72 6c 66 20 6c 66 7d 5d 0a 09 09   cr crlf lf}]...
b770: 09 09 7d 0a 09 09 09 09 64 65 66 61 75 6c 74 20  ..}.....default 
b780: 7b 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74  {return [Complet
b790: 65 46 72 6f 6d 4c 69 73 74 20 24 74 65 78 74 20  eFromList $text 
b7a0: 5c 0a 09 09 09 09 09 5b 52 65 6d 6f 76 65 55 73  \......[RemoveUs
b7b0: 65 64 4f 70 74 69 6f 6e 73 20 24 6c 69 6e 65 20  edOptions $line 
b7c0: 7b 0a 09 09 09 09 09 2d 62 6c 6f 63 6b 69 6e 67  {......-blocking
b7d0: 20 2d 62 75 66 66 65 72 69 6e 67 20 2d 62 75 66   -buffering -buf
b7e0: 66 65 72 73 69 7a 65 0a 09 09 09 09 09 2d 65 6e  fersize......-en
b7f0: 63 6f 64 69 6e 67 20 2d 65 6f 66 63 68 61 72 20  coding -eofchar 
b800: 2d 74 72 61 6e 73 6c 61 74 69 6f 6e 7d 5d 5d 0a  -translation}]].
b810: 09 09 09 09 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09  ....}....}...}..
b820: 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a 0a  }..return "".}..
b830: 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 66 63  proc complete(fc
b840: 6f 70 79 29 20 7b 74 65 78 74 20 73 74 61 72 74  opy) {text start
b850: 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f   end line pos mo
b860: 64 7d 20 7b 0a 09 73 77 69 74 63 68 20 2d 2d 20  d} {..switch -- 
b870: 24 70 6f 73 20 7b 0a 09 09 31 20 7b 0a 09 09 09  $pos {...1 {....
b880: 72 65 74 75 72 6e 20 5b 49 6e 43 68 61 6e 6e 65  return [InChanne
b890: 6c 49 64 20 24 7b 74 65 78 74 7d 5d 0a 09 09 7d  lId ${text}]...}
b8a0: 0a 09 09 32 20 7b 0a 09 09 09 72 65 74 75 72 6e  ...2 {....return
b8b0: 20 5b 4f 75 74 43 68 61 6e 6e 65 6c 49 64 20 24   [OutChannelId $
b8c0: 7b 74 65 78 74 7d 5d 0a 09 09 7d 0a 09 09 64 65  {text}]...}...de
b8d0: 66 61 75 6c 74 20 7b 0a 09 09 09 73 65 74 20 6f  fault {....set o
b8e0: 70 74 69 6f 6e 20 5b 50 72 65 76 69 6f 75 73 57  ption [PreviousW
b8f0: 6f 72 64 20 24 7b 73 74 61 72 74 7d 20 24 7b 6c  ord ${start} ${l
b900: 69 6e 65 7d 5d 0a 09 09 09 73 77 69 74 63 68 20  ine}]....switch 
b910: 2d 2d 20 24 6f 70 74 69 6f 6e 20 7b 0a 09 09 09  -- $option {....
b920: 09 2d 73 69 7a 65 20 20 20 20 7b 20 72 65 74 75  .-size    { retu
b930: 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
b940: 20 3c 73 69 7a 65 3e 5d 20 7d 0a 09 09 09 09 2d   <size>] }.....-
b950: 63 6f 6d 6d 61 6e 64 20 7b 20 72 65 74 75 72 6e  command { return
b960: 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c   [DisplayHints <
b970: 63 61 6c 6c 62 61 63 6b 3e 5d 20 7d 0a 09 09 09  callback>] }....
b980: 09 64 65 66 61 75 6c 74 20 20 7b 20 72 65 74 75  .default  { retu
b990: 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d  rn [CompleteFrom
b9a0: 4c 69 73 74 20 24 74 65 78 74 20 5c 0a 09 09 09  List $text \....
b9b0: 09 09 5b 52 65 6d 6f 76 65 55 73 65 64 4f 70 74  ..[RemoveUsedOpt
b9c0: 69 6f 6e 73 20 24 6c 69 6e 65 20 7b 2d 73 69 7a  ions $line {-siz
b9d0: 65 20 2d 63 6f 6d 6d 61 6e 64 7d 5d 5d 0a 09 09  e -command}]]...
b9e0: 09 09 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 7d 0a  ..}....}...}..}.
b9f0: 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a 0a 70 72  .return "".}..pr
ba00: 6f 63 20 63 6f 6d 70 6c 65 74 65 28 66 69 6c 65  oc complete(file
ba10: 29 20 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e  ) {text start en
ba20: 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20  d line pos mod} 
ba30: 7b 0a 09 73 77 69 74 63 68 20 2d 2d 20 24 70 6f  {..switch -- $po
ba40: 73 20 7b 0a 09 09 31 20 7b 0a 09 09 09 73 65 74  s {...1 {....set
ba50: 20 63 6d 64 73 20 7b 0a 09 09 09 09 61 74 69 6d   cmds {.....atim
ba60: 65 20 61 74 74 72 69 62 75 74 65 73 20 63 68 61  e attributes cha
ba70: 6e 6e 65 6c 73 20 63 6f 70 79 20 64 65 6c 65 74  nnels copy delet
ba80: 65 20 64 69 72 6e 61 6d 65 20 65 78 65 63 75 74  e dirname execut
ba90: 61 62 6c 65 20 65 78 69 73 74 73 0a 09 09 09 09  able exists.....
baa0: 65 78 74 65 6e 73 69 6f 6e 20 69 73 64 69 72 65  extension isdire
bab0: 63 74 6f 72 79 20 69 73 66 69 6c 65 20 6a 6f 69  ctory isfile joi
bac0: 6e 20 6c 73 74 61 74 20 6d 6b 64 69 72 20 6d 74  n lstat mkdir mt
bad0: 69 6d 65 0a 09 09 09 09 6e 61 74 69 76 65 6e 61  ime.....nativena
bae0: 6d 65 20 6f 77 6e 65 64 20 70 61 74 68 74 79 70  me owned pathtyp
baf0: 65 20 72 65 61 64 61 62 6c 65 20 72 65 61 64 6c  e readable readl
bb00: 69 6e 6b 20 72 65 6e 61 6d 65 0a 09 09 09 09 72  ink rename.....r
bb10: 6f 6f 74 6e 61 6d 65 20 73 69 7a 65 20 73 70 6c  ootname size spl
bb20: 69 74 20 73 74 61 74 20 74 61 69 6c 20 74 79 70  it stat tail typ
bb30: 65 20 76 6f 6c 75 6d 65 73 20 77 72 69 74 61 62  e volumes writab
bb40: 6c 65 0a 09 09 09 7d 0a 09 09 09 72 65 74 75 72  le....}....retur
bb50: 6e 20 5b 54 72 79 46 72 6f 6d 4c 69 73 74 20 24  n [TryFromList $
bb60: 74 65 78 74 20 24 63 6d 64 73 5d 0a 09 09 7d 0a  text $cmds]...}.
bb70: 09 09 32 20 7b 0a 09 09 09 73 65 74 20 63 6d 64  ..2 {....set cmd
bb80: 20 5b 4c 69 6e 64 65 78 20 24 6c 69 6e 65 20 31   [Lindex $line 1
bb90: 5d 0a 09 09 09 73 77 69 74 63 68 20 2d 2d 20 24  ]....switch -- $
bba0: 63 6d 64 20 7b 0a 09 09 09 09 61 74 69 6d 65 20  cmd {.....atime 
bbb0: 2d 0a 09 09 09 09 61 74 74 72 69 62 75 74 65 73  -.....attributes
bbc0: 20 2d 0a 09 09 09 09 63 68 61 6e 6e 65 6c 73 20   -.....channels 
bbd0: 2d 0a 09 09 09 09 64 69 72 6e 61 6d 65 20 2d 0a  -.....dirname -.
bbe0: 09 09 09 09 65 78 65 63 75 74 61 62 6c 65 20 2d  ....executable -
bbf0: 0a 09 09 09 09 65 78 69 73 74 73 20 2d 0a 09 09  .....exists -...
bc00: 09 09 65 78 74 65 6e 73 69 6f 6e 20 2d 0a 09 09  ..extension -...
bc10: 09 09 69 73 64 69 72 65 63 74 6f 72 79 20 2d 0a  ..isdirectory -.
bc20: 09 09 09 09 69 73 66 69 6c 65 20 2d 0a 09 09 09  ....isfile -....
bc30: 09 6a 6f 69 6e 20 2d 0a 09 09 09 09 6c 73 74 61  .join -.....lsta
bc40: 74 20 2d 0a 09 09 09 09 6d 74 69 6d 65 20 2d 0a  t -.....mtime -.
bc50: 09 09 09 09 6d 6b 64 69 72 20 2d 0a 09 09 09 09  ....mkdir -.....
bc60: 6e 61 74 69 76 65 6e 61 6d 65 20 2d 0a 09 09 09  nativename -....
bc70: 09 6f 77 6e 65 64 20 2d 0a 09 09 09 09 70 61 74  .owned -.....pat
bc80: 68 74 79 70 65 20 2d 0a 09 09 09 09 72 65 61 64  htype -.....read
bc90: 61 62 6c 65 20 2d 0a 09 09 09 09 72 65 61 64 6c  able -.....readl
bca0: 69 6e 6b 20 2d 0a 09 09 09 09 72 6f 6f 74 6e 61  ink -.....rootna
bcb0: 6d 65 20 2d 0a 09 09 09 09 73 69 7a 65 20 2d 0a  me -.....size -.
bcc0: 09 09 09 09 73 70 6c 69 74 20 2d 0a 09 09 09 09  ....split -.....
bcd0: 73 74 61 74 20 2d 0a 09 09 09 09 74 61 69 6c 20  stat -.....tail 
bce0: 2d 0a 09 09 09 09 74 79 70 65 20 2d 0a 09 09 09  -.....type -....
bcf0: 09 76 6f 6c 75 6d 65 73 20 2d 0a 09 09 09 09 77  .volumes -.....w
bd00: 72 69 74 61 62 6c 65 20 7b 0a 09 09 09 09 09 72  ritable {......r
bd10: 65 74 75 72 6e 20 22 22 0a 09 09 09 09 7d 0a 0a  eturn "".....}..
bd20: 09 09 09 09 63 6f 70 79 20 2d 0a 09 09 09 09 64  ....copy -.....d
bd30: 65 6c 65 74 65 20 2d 0a 09 09 09 09 72 65 6e 61  elete -.....rena
bd40: 6d 65 20 7b 0a 09 09 09 09 09 23 20 72 65 74 75  me {......# retu
bd50: 72 6e 20 5b 54 72 79 46 72 6f 6d 4c 69 73 74 20  rn [TryFromList 
bd60: 24 74 65 78 74 20 22 2d 66 6f 72 63 65 20 5b 67  $text "-force [g
bd70: 6c 6f 62 20 2a 5d 22 5d 0a 09 09 09 09 09 23 20  lob *]"]......# 
bd80: 74 68 69 73 20 69 73 20 6e 6f 74 20 70 65 72 66  this is not perf
bd90: 65 63 74 2e 20 54 68 65 20 20 60 2d 66 6f 72 63  ect. The  `-forc
bda0: 65 27 20 61 6e 64 20 60 2d 2d 27 0a 09 09 09 09  e' and `--'.....
bdb0: 09 23 20 6f 70 74 69 6f 6e 73 20 77 69 6c 6c 20  .# options will 
bdc0: 6e 6f 74 20 62 65 20 64 69 73 70 6c 61 79 65 64  not be displayed
bdd0: 2e 0a 09 09 09 09 09 72 65 74 75 72 6e 20 22 22  .......return ""
bde0: 0a 09 09 09 09 7d 0a 09 09 09 7d 0a 09 09 7d 0a  .....}....}...}.
bdf0: 09 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a  .}..return "".}.
be00: 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 66  .proc complete(f
be10: 69 6c 65 65 76 65 6e 74 29 20 7b 74 65 78 74 20  ileevent) {text 
be20: 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70  start end line p
be30: 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73 77 69 74 63  os mod} {..switc
be40: 68 20 2d 2d 20 24 70 6f 73 20 7b 0a 09 09 31 20  h -- $pos {...1 
be50: 7b 0a 09 09 09 72 65 74 75 72 6e 20 5b 43 68 61  {....return [Cha
be60: 6e 6e 65 6c 49 64 20 24 7b 74 65 78 74 7d 5d 0a  nnelId ${text}].
be70: 09 09 7d 0a 09 09 32 20 7b 0a 09 09 09 72 65 74  ..}...2 {....ret
be80: 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f  urn [CompleteFro
be90: 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 7b 72  mList ${text} {r
bea0: 65 61 64 61 62 6c 65 20 77 72 69 74 61 62 6c 65  eadable writable
beb0: 7d 5d 0a 09 09 7d 0a 09 09 33 20 7b 0a 09 09 09  }]...}...3 {....
bec0: 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
bed0: 69 6e 74 73 20 3f 73 63 72 69 70 74 3f 5d 0a 09  ints ?script?]..
bee0: 09 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22 22  .}..}..return ""
bef0: 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74  .}..proc complet
bf00: 65 28 66 6c 75 73 68 29 20 7b 74 65 78 74 20 73  e(flush) {text s
bf10: 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f  tart end line po
bf20: 73 20 6d 6f 64 7d 20 7b 0a 09 73 77 69 74 63 68  s mod} {..switch
bf30: 20 2d 2d 20 24 70 6f 73 20 7b 0a 09 09 31 20 7b   -- $pos {...1 {
bf40: 20 72 65 74 75 72 6e 20 5b 4f 75 74 43 68 61 6e   return [OutChan
bf50: 6e 65 6c 49 64 20 24 7b 74 65 78 74 7d 5d 20 7d  nelId ${text}] }
bf60: 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d  ..}..return "".}
bf70: 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28  ..proc complete(
bf80: 66 6f 72 29 20 7b 74 65 78 74 20 73 74 61 72 74  for) {text start
bf90: 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f   end line pos mo
bfa0: 64 7d 20 7b 0a 09 73 77 69 74 63 68 20 2d 2d 20  d} {..switch -- 
bfb0: 24 70 6f 73 20 7b 0a 09 09 31 20 2d 0a 09 09 32  $pos {...1 -...2
bfc0: 20 2d 0a 09 09 33 20 2d 0a 09 09 34 20 7b 0a 09   -...3 -...4 {..
bfd0: 09 09 72 65 74 75 72 6e 20 5b 42 72 61 63 65 4f  ..return [BraceO
bfe0: 72 43 6f 6d 6d 61 6e 64 20 24 74 65 78 74 20 24  rCommand $text $
bff0: 73 74 61 72 74 20 24 65 6e 64 20 24 6c 69 6e 65  start $end $line
c000: 20 24 70 6f 73 20 24 6d 6f 64 5d 0a 09 09 7d 0a   $pos $mod]...}.
c010: 09 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a  .}..return "".}.
c020: 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 66  .proc complete(f
c030: 6f 72 65 61 63 68 29 20 7b 74 65 78 74 20 73 74  oreach) {text st
c040: 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73  art end line pos
c050: 20 6d 6f 64 7d 20 7b 0a 09 73 77 69 74 63 68 20   mod} {..switch 
c060: 2d 2d 20 24 70 6f 73 20 7b 0a 09 09 31 20 7b 20  -- $pos {...1 { 
c070: 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
c080: 69 6e 74 73 20 3c 76 61 72 6e 61 6d 65 3e 5d 20  ints <varname>] 
c090: 7d 0a 09 09 32 20 7b 20 72 65 74 75 72 6e 20 5b  }...2 { return [
c0a0: 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 6c 69  DisplayHints <li
c0b0: 73 74 3e 5d 20 7d 0a 09 09 64 65 66 61 75 6c 74  st>] }...default
c0c0: 20 7b 0a 09 09 09 69 66 20 7b 5b 65 78 70 72 20   {....if {[expr 
c0d0: 24 70 6f 73 20 25 20 32 5d 7d 20 7b 0a 09 09 09  $pos % 2]} {....
c0e0: 09 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79  .return [Display
c0f0: 48 69 6e 74 73 20 5b 6c 69 73 74 20 3f 76 61 72  Hints [list ?var
c100: 6e 61 6d 65 3f 20 3c 62 6f 64 79 3e 5d 5d 0a 09  name? <body>]]..
c110: 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09 72  ..} else {.....r
c120: 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
c130: 6e 74 73 20 3f 6c 69 73 74 3f 5d 0a 09 09 09 7d  nts ?list?]....}
c140: 0a 09 09 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20  ...}..}..return 
c150: 22 22 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c  "".}..proc compl
c160: 65 74 65 28 66 6f 72 6d 61 74 29 20 7b 74 65 78  ete(format) {tex
c170: 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65  t start end line
c180: 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73 77 69   pos mod} {..swi
c190: 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a 09 09  tch -- $pos {...
c1a0: 31 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70  1 { return [Disp
c1b0: 6c 61 79 48 69 6e 74 73 20 3c 66 6f 72 6d 61 74  layHints <format
c1c0: 53 74 72 69 6e 67 3e 5d 20 7d 0a 09 09 64 65 66  String>] }...def
c1d0: 61 75 6c 74 20 7b 20 72 65 74 75 72 6e 20 5b 44  ault { return [D
c1e0: 69 73 70 6c 61 79 48 69 6e 74 73 20 3f 61 72 67  isplayHints ?arg
c1f0: 3f 5d 20 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20  ?] }..}..return 
c200: 22 22 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c  "".}..proc compl
c210: 65 74 65 28 67 65 74 73 29 20 7b 74 65 78 74 20  ete(gets) {text 
c220: 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70  start end line p
c230: 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73 77 69 74 63  os mod} {..switc
c240: 68 20 2d 2d 20 24 70 6f 73 20 7b 0a 09 09 31 20  h -- $pos {...1 
c250: 7b 20 72 65 74 75 72 6e 20 5b 49 6e 43 68 61 6e  { return [InChan
c260: 6e 65 6c 49 64 20 24 7b 74 65 78 74 7d 5d 20 7d  nelId ${text}] }
c270: 0a 09 09 32 20 7b 20 72 65 74 75 72 6e 20 5b 56  ...2 { return [V
c280: 61 72 43 6f 6d 70 6c 65 74 69 6f 6e 20 24 7b 74  arCompletion ${t
c290: 65 78 74 7d 5d 7d 0a 09 7d 0a 09 72 65 74 75 72  ext}]}..}..retur
c2a0: 6e 20 22 22 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d  n "".}..proc com
c2b0: 70 6c 65 74 65 28 67 6c 6f 62 29 20 7b 74 65 78  plete(glob) {tex
c2c0: 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65  t start end line
c2d0: 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73 77 69   pos mod} {..swi
c2e0: 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a 09 09  tch -- $pos {...
c2f0: 31 20 7b 0a 09 09 09 23 20 54 68 69 73 20 61 6c  1 {....# This al
c300: 73 6f 20 69 73 20 6e 6f 74 20 70 65 72 66 65 63  so is not perfec
c310: 74 2e 0a 09 09 09 23 20 54 68 69 73 20 77 69 6c  t.....# This wil
c320: 6c 20 6e 6f 74 20 64 69 73 70 6c 61 79 20 74 68  l not display th
c330: 65 20 6f 70 74 69 6f 6e 73 20 61 73 20 68 69 6e  e options as hin
c340: 74 73 21 0a 09 09 09 73 65 74 20 6d 61 74 63 68  ts!....set match
c350: 65 73 20 5b 54 72 79 46 72 6f 6d 4c 69 73 74 20  es [TryFromList 
c360: 24 7b 74 65 78 74 7d 20 7b 2d 6e 6f 63 6f 6d 70  ${text} {-nocomp
c370: 6c 61 69 6e 20 2d 2d 7d 5d 0a 09 09 09 69 66 20  lain --}]....if 
c380: 7b 5b 6c 6c 65 6e 67 74 68 20 5b 73 74 72 69 6e  {[llength [strin
c390: 67 20 74 72 69 6d 20 24 7b 74 65 78 74 7d 5d 5d  g trim ${text}]]
c3a0: 20 26 26 20 5b 6c 6c 65 6e 67 74 68 20 24 7b 6d   && [llength ${m
c3b0: 61 74 63 68 65 73 7d 5d 7d 20 7b 0a 09 09 09 09  atches}]} {.....
c3c0: 72 65 74 75 72 6e 20 24 7b 6d 61 74 63 68 65 73  return ${matches
c3d0: 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 7d 0a 09 72  }....}...}..}..r
c3e0: 65 74 75 72 6e 20 22 22 0a 7d 0a 0a 70 72 6f 63  eturn "".}..proc
c3f0: 20 63 6f 6d 70 6c 65 74 65 28 67 6c 6f 62 61 6c   complete(global
c400: 29 20 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e  ) {text start en
c410: 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20  d line pos mod} 
c420: 7b 0a 09 72 65 74 75 72 6e 20 5b 56 61 72 43 6f  {..return [VarCo
c430: 6d 70 6c 65 74 69 6f 6e 20 24 7b 74 65 78 74 7d  mpletion ${text}
c440: 5d 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65  ].}..proc comple
c450: 74 65 28 68 69 73 74 6f 72 79 29 20 7b 74 65 78  te(history) {tex
c460: 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65  t start end line
c470: 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73 77 69   pos mod} {..swi
c480: 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a 09 09  tch -- $pos {...
c490: 31 20 7b 0a 09 09 09 73 65 74 20 63 6d 64 73 20  1 {....set cmds 
c4a0: 7b 61 64 64 20 63 68 61 6e 67 65 20 63 6c 65 61  {add change clea
c4b0: 72 20 65 76 65 6e 74 20 69 6e 66 6f 20 6b 65 65  r event info kee
c4c0: 70 20 6e 65 78 74 69 64 20 72 65 64 6f 7d 0a 09  p nextid redo}..
c4d0: 09 09 72 65 74 75 72 6e 20 5b 54 72 79 46 72 6f  ..return [TryFro
c4e0: 6d 4c 69 73 74 20 24 74 65 78 74 20 24 63 6d 64  mList $text $cmd
c4f0: 73 5d 0a 09 09 7d 0a 09 09 32 20 7b 0a 09 09 09  s]...}...2 {....
c500: 73 65 74 20 63 6d 64 20 5b 4c 69 6e 64 65 78 20  set cmd [Lindex 
c510: 24 6c 69 6e 65 20 31 5d 0a 09 09 09 73 77 69 74  $line 1]....swit
c520: 63 68 20 2d 2d 20 24 63 6d 64 20 7b 0a 09 09 09  ch -- $cmd {....
c530: 09 61 64 64 20 7b 20 72 65 74 75 72 6e 20 5b 44  .add { return [D
c540: 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 63 6f 6d  isplayHints <com
c550: 6d 61 6e 64 3e 5d 20 7d 0a 09 09 09 09 63 68 61  mand>] }.....cha
c560: 6e 67 65 20 7b 20 72 65 74 75 72 6e 20 5b 44 69  nge { return [Di
c570: 73 70 6c 61 79 48 69 6e 74 73 20 3c 6e 65 77 56  splayHints <newV
c580: 61 6c 75 65 3e 5d 20 7d 0a 0a 09 09 09 09 69 6e  alue>] }......in
c590: 66 6f 20 2d 0a 09 09 09 09 6b 65 65 70 20 7b 20  fo -.....keep { 
c5a0: 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
c5b0: 69 6e 74 73 20 3f 63 6f 75 6e 74 3f 5d 20 7d 0a  ints ?count?] }.
c5c0: 0a 09 09 09 09 65 76 65 6e 74 20 2d 0a 09 09 09  .....event -....
c5d0: 09 72 65 64 6f 20 7b 20 72 65 74 75 72 6e 20 5b  .redo { return [
c5e0: 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3f 65 76  DisplayHints ?ev
c5f0: 65 6e 74 3f 5d 20 7d 0a 0a 09 09 09 09 63 6c 65  ent?] }......cle
c600: 61 72 20 2d 0a 09 09 09 09 6e 65 78 74 69 64 20  ar -.....nextid 
c610: 7b 20 72 65 74 75 72 6e 20 22 22 20 7d 0a 09 09  { return "" }...
c620: 09 7d 0a 09 09 7d 0a 09 7d 0a 09 72 65 74 75 72  .}...}..}..retur
c630: 6e 20 22 22 0a 7d 0a 0a 23 20 2d 2d 2d 20 48 54  n "".}..# --- HT
c640: 54 50 20 50 41 43 4b 41 47 45 20 2d 2d 2d 0a 0a  TP PACKAGE ---..
c650: 23 20 63 72 65 61 74 65 20 61 20 68 74 74 70 20  # create a http 
c660: 6e 61 6d 65 73 70 61 63 65 20 69 6e 73 69 64 65  namespace inside
c670: 0a 23 20 74 63 6c 72 65 61 64 6c 69 6e 65 20 61  .# tclreadline a
c680: 6e 64 20 69 6d 70 6f 72 74 20 73 6f 6d 65 20 63  nd import some c
c690: 6f 6d 6d 61 6e 64 73 2e 0a 23 0a 6e 61 6d 65 73  ommands..#.names
c6a0: 70 61 63 65 20 65 76 61 6c 20 68 74 74 70 20 7b  pace eval http {
c6b0: 0a 09 63 61 74 63 68 20 7b 0a 09 09 6e 61 6d 65  ..catch {...name
c6c0: 73 70 61 63 65 20 69 6d 70 6f 72 74 20 5c 0a 09  space import \..
c6d0: 09 3a 3a 74 63 6c 72 65 61 64 6c 69 6e 65 3a 3a  .::tclreadline::
c6e0: 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3a 3a 74  DisplayHints ::t
c6f0: 63 6c 72 65 61 64 6c 69 6e 65 3a 3a 50 72 65 76  clreadline::Prev
c700: 69 6f 75 73 57 6f 72 64 20 5c 0a 09 09 3a 3a 74  iousWord \...::t
c710: 63 6c 72 65 61 64 6c 69 6e 65 3a 3a 43 6f 6d 70  clreadline::Comp
c720: 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 3a 3a 74  leteFromList ::t
c730: 63 6c 72 65 61 64 6c 69 6e 65 3a 3a 43 6f 6d 6d  clreadline::Comm
c740: 61 6e 64 43 6f 6d 70 6c 65 74 69 6f 6e 20 5c 0a  andCompletion \.
c750: 09 09 3a 3a 74 63 6c 72 65 61 64 6c 69 6e 65 3a  ..::tclreadline:
c760: 3a 52 65 6d 6f 76 65 55 73 65 64 4f 70 74 69 6f  :RemoveUsedOptio
c770: 6e 73 20 3a 3a 74 63 6c 72 65 61 64 6c 69 6e 65  ns ::tclreadline
c780: 3a 3a 48 6f 73 74 4c 69 73 74 20 5c 0a 09 09 3a  ::HostList \...:
c790: 3a 74 63 6c 72 65 61 64 6c 69 6e 65 3a 3a 43 68  :tclreadline::Ch
c7a0: 61 6e 6e 65 6c 49 64 20 3a 3a 74 63 6c 72 65 61  annelId ::tclrea
c7b0: 64 6c 69 6e 65 3a 3a 4c 69 6e 64 65 78 20 5c 0a  dline::Lindex \.
c7c0: 09 09 3a 3a 74 63 6c 72 65 61 64 6c 69 6e 65 3a  ..::tclreadline:
c7d0: 3a 43 6f 6d 70 6c 65 74 65 42 6f 6f 6c 65 61 6e  :CompleteBoolean
c7e0: 0a 09 7d 0a 7d 0a 0a 70 72 6f 63 20 68 74 74 70  ..}.}..proc http
c7f0: 3a 3a 63 6f 6d 70 6c 65 74 65 28 63 6f 6e 66 69  ::complete(confi
c800: 67 29 20 7b 74 65 78 74 20 73 74 61 72 74 20 65  g) {text start e
c810: 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d  nd line pos mod}
c820: 20 7b 0a 09 73 65 74 20 70 72 65 76 20 5b 50 72   {..set prev [Pr
c830: 65 76 69 6f 75 73 57 6f 72 64 20 24 7b 73 74 61  eviousWord ${sta
c840: 72 74 7d 20 24 7b 6c 69 6e 65 7d 5d 0a 09 73 77  rt} ${line}]..sw
c850: 69 74 63 68 20 2d 2d 20 24 70 72 65 76 20 7b 0a  itch -- $prev {.
c860: 09 09 2d 61 63 63 65 70 74 20 7b 20 72 65 74 75  ..-accept { retu
c870: 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
c880: 20 3c 6d 69 6d 65 74 79 70 65 73 3e 5d 20 7d 0a   <mimetypes>] }.
c890: 09 09 2d 70 72 6f 78 79 68 6f 73 74 20 7b 0a 09  ..-proxyhost {..
c8a0: 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65  ..return [Comple
c8b0: 74 65 46 72 6f 6d 4c 69 73 74 20 24 74 65 78 74  teFromList $text
c8c0: 20 5b 48 6f 73 74 4c 69 73 74 5d 5d 0a 09 09 7d   [HostList]]...}
c8d0: 0a 09 09 2d 70 72 6f 78 79 70 6f 72 74 20 7b 20  ...-proxyport { 
c8e0: 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
c8f0: 69 6e 74 73 20 3c 6e 75 6d 62 65 72 3e 5d 20 7d  ints <number>] }
c900: 0a 09 09 2d 70 72 6f 78 79 66 69 6c 74 65 72 20  ...-proxyfilter 
c910: 7b 0a 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d  {....return [Com
c920: 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 74  pleteFromList $t
c930: 65 78 74 20 5b 43 6f 6d 6d 61 6e 64 43 6f 6d 70  ext [CommandComp
c940: 6c 65 74 69 6f 6e 20 24 74 65 78 74 5d 5d 0a 09  letion $text]]..
c950: 09 7d 0a 09 09 2d 75 73 65 72 61 67 65 6e 74 20  .}...-useragent 
c960: 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
c970: 79 48 69 6e 74 73 20 3c 73 74 72 69 6e 67 3e 5d  yHints <string>]
c980: 20 7d 0a 09 09 64 65 66 61 75 6c 74 20 7b 0a 09   }...default {..
c990: 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65  ..return [Comple
c9a0: 74 65 46 72 6f 6d 4c 69 73 74 20 24 74 65 78 74  teFromList $text
c9b0: 20 5b 52 65 6d 6f 76 65 55 73 65 64 4f 70 74 69   [RemoveUsedOpti
c9c0: 6f 6e 73 20 24 6c 69 6e 65 20 7b 0a 09 09 09 09  ons $line {.....
c9d0: 2d 61 63 63 65 70 74 20 2d 70 72 6f 78 79 68 6f  -accept -proxyho
c9e0: 73 74 20 2d 70 72 6f 78 79 70 6f 72 74 20 2d 70  st -proxyport -p
c9f0: 72 6f 78 79 66 69 6c 74 65 72 20 2d 75 73 65 72  roxyfilter -user
ca00: 61 67 65 6e 74 0a 09 09 09 7d 5d 5d 0a 09 09 7d  agent....}]]...}
ca10: 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d  ..}..return "".}
ca20: 0a 0a 70 72 6f 63 20 68 74 74 70 3a 3a 63 6f 6d  ..proc http::com
ca30: 70 6c 65 74 65 28 67 65 74 75 72 6c 29 20 7b 74  plete(geturl) {t
ca40: 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69  ext start end li
ca50: 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73  ne pos mod} {..s
ca60: 77 69 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a  witch -- $pos {.
ca70: 09 09 31 20 7b 20 72 65 74 75 72 6e 20 5b 44 69  ..1 { return [Di
ca80: 73 70 6c 61 79 48 69 6e 74 73 20 3c 75 72 6c 3e  splayHints <url>
ca90: 5d 20 7d 0a 09 09 64 65 66 61 75 6c 74 20 7b 0a  ] }...default {.
caa0: 09 09 09 73 65 74 20 70 72 65 76 20 5b 50 72 65  ...set prev [Pre
cab0: 76 69 6f 75 73 57 6f 72 64 20 24 7b 73 74 61 72  viousWord ${star
cac0: 74 7d 20 24 7b 6c 69 6e 65 7d 5d 0a 09 09 09 73  t} ${line}]....s
cad0: 77 69 74 63 68 20 2d 2d 20 24 70 72 65 76 20 7b  witch -- $prev {
cae0: 0a 09 09 09 09 2d 62 6c 6f 63 6b 73 69 7a 65 20  .....-blocksize 
caf0: 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
cb00: 79 48 69 6e 74 73 20 3c 73 69 7a 65 3e 5d 20 7d  yHints <size>] }
cb10: 0a 09 09 09 09 2d 63 68 61 6e 6e 65 6c 20 7b 20  .....-channel { 
cb20: 72 65 74 75 72 6e 20 5b 43 68 61 6e 6e 65 6c 49  return [ChannelI
cb30: 64 20 24 7b 74 65 78 74 7d 5d 20 7d 0a 09 09 09  d ${text}] }....
cb40: 09 2d 63 6f 6d 6d 61 6e 64 20 2d 0a 09 09 09 09  .-command -.....
cb50: 2d 68 61 6e 64 6c 65 72 20 2d 0a 09 09 09 09 2d  -handler -.....-
cb60: 70 72 6f 67 72 65 73 73 20 7b 0a 09 09 09 09 09  progress {......
cb70: 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65  return [Complete
cb80: 46 72 6f 6d 4c 69 73 74 20 24 74 65 78 74 20 5b  FromList $text [
cb90: 43 6f 6d 6d 61 6e 64 43 6f 6d 70 6c 65 74 69 6f  CommandCompletio
cba0: 6e 20 24 74 65 78 74 5d 5d 0a 09 09 09 09 7d 0a  n $text]].....}.
cbb0: 09 09 09 09 2d 68 65 61 64 65 72 73 20 7b 20 72  ....-headers { r
cbc0: 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
cbd0: 6e 74 73 20 3c 6b 65 79 76 61 6c 75 65 6c 69 73  nts <keyvaluelis
cbe0: 74 3e 5d 20 7d 0a 09 09 09 09 2d 71 75 65 72 79  t>] }.....-query
cbf0: 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
cc00: 61 79 48 69 6e 74 73 20 3c 71 75 65 72 79 3e 5d  ayHints <query>]
cc10: 20 7d 0a 09 09 09 09 2d 74 69 6d 65 6f 75 74 20   }.....-timeout 
cc20: 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
cc30: 79 48 69 6e 74 73 20 3c 6d 69 6c 6c 69 73 65 63  yHints <millisec
cc40: 6f 6e 64 73 3e 5d 20 7d 0a 09 09 09 09 2d 76 61  onds>] }.....-va
cc50: 6c 69 64 61 74 65 20 7b 20 72 65 74 75 72 6e 20  lidate { return 
cc60: 5b 43 6f 6d 70 6c 65 74 65 42 6f 6f 6c 65 61 6e  [CompleteBoolean
cc70: 20 24 74 65 78 74 5d 20 7d 0a 09 09 09 09 64 65   $text] }.....de
cc80: 66 61 75 6c 74 20 7b 0a 09 09 09 09 09 72 65 74  fault {......ret
cc90: 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f  urn [CompleteFro
cca0: 6d 4c 69 73 74 20 24 74 65 78 74 20 5b 52 65 6d  mList $text [Rem
ccb0: 6f 76 65 55 73 65 64 4f 70 74 69 6f 6e 73 20 24  oveUsedOptions $
ccc0: 6c 69 6e 65 20 7b 0a 09 09 09 09 09 09 2d 62 6c  line {.......-bl
ccd0: 6f 63 6b 73 69 7a 65 20 2d 63 68 61 6e 6e 65 6c  ocksize -channel
cce0: 20 2d 63 6f 6d 6d 61 6e 64 20 2d 68 61 6e 64 6c   -command -handl
ccf0: 65 72 20 2d 68 65 61 64 65 72 73 0a 09 09 09 09  er -headers.....
cd00: 09 09 2d 70 72 6f 67 72 65 73 73 20 2d 71 75 65  ..-progress -que
cd10: 72 79 20 2d 74 69 6d 65 6f 75 74 20 2d 76 61 6c  ry -timeout -val
cd20: 69 64 61 74 65 0a 09 09 09 09 09 7d 5d 5d 0a 09  idate......}]]..
cd30: 09 09 09 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 7d  ...}....}...}..}
cd40: 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a 0a 70  ..return "".}..p
cd50: 72 6f 63 20 68 74 74 70 3a 3a 63 6f 6d 70 6c 65  roc http::comple
cd60: 74 65 28 66 6f 72 6d 61 74 51 75 65 72 79 29 20  te(formatQuery) 
cd70: 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20  {text start end 
cd80: 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a  line pos mod} {.
cd90: 09 73 77 69 74 63 68 20 2d 2d 20 24 70 6f 73 20  .switch -- $pos 
cda0: 7b 0a 09 09 31 20 7b 20 72 65 74 75 72 6e 20 5b  {...1 { return [
cdb0: 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 6b 65  DisplayHints <ke
cdc0: 79 3e 5d 20 7d 0a 09 09 32 20 7b 20 72 65 74 75  y>] }...2 { retu
cdd0: 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
cde0: 20 3c 76 61 6c 75 65 3e 5d 20 7d 0a 09 09 64 65   <value>] }...de
cdf0: 66 61 75 6c 74 20 7b 0a 09 09 09 73 77 69 74 63  fault {....switc
ce00: 68 20 5b 65 78 70 72 20 24 70 6f 73 20 25 20 32  h [expr $pos % 2
ce10: 5d 20 7b 0a 09 09 09 09 30 20 7b 20 72 65 74 75  ] {.....0 { retu
ce20: 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
ce30: 20 3f 76 61 6c 75 65 3f 5d 20 7d 0a 09 09 09 09   ?value?] }.....
ce40: 31 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70  1 { return [Disp
ce50: 6c 61 79 48 69 6e 74 73 20 3f 6b 65 79 3f 5d 20  layHints ?key?] 
ce60: 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 7d 0a 09 72  }....}...}..}..r
ce70: 65 74 75 72 6e 20 22 22 0a 7d 0a 0a 70 72 6f 63  eturn "".}..proc
ce80: 20 68 74 74 70 3a 3a 63 6f 6d 70 6c 65 74 65 28   http::complete(
ce90: 72 65 73 65 74 29 20 7b 74 65 78 74 20 73 74 61  reset) {text sta
cea0: 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20  rt end line pos 
ceb0: 6d 6f 64 7d 20 7b 0a 09 73 77 69 74 63 68 20 2d  mod} {..switch -
cec0: 2d 20 24 70 6f 73 20 7b 0a 09 09 31 20 7b 20 72  - $pos {...1 { r
ced0: 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
cee0: 6e 74 73 20 3c 74 6f 6b 65 6e 3e 5d 20 7d 0a 09  nts <token>] }..
cef0: 09 32 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73  .2 { return [Dis
cf00: 70 6c 61 79 48 69 6e 74 73 20 3f 77 68 79 3f 5d  playHints ?why?]
cf10: 20 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22 22   }..}..return ""
cf20: 0a 7d 0a 0a 23 20 74 68 65 20 75 6e 6b 6e 6f 77  .}..# the unknow
cf30: 6e 20 70 72 6f 63 20 68 61 6e 64 6c 65 73 20 74  n proc handles t
cf40: 68 65 20 72 65 73 74 0a 23 0a 70 72 6f 63 20 68  he rest.#.proc h
cf50: 74 74 70 3a 3a 63 6f 6d 70 6c 65 74 65 28 74 63  ttp::complete(tc
cf60: 6c 72 65 61 64 6c 69 6e 65 5f 63 6f 6d 70 6c 65  lreadline_comple
cf70: 74 65 5f 75 6e 6b 6e 6f 77 6e 29 20 7b 74 65 78  te_unknown) {tex
cf80: 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65  t start end line
cf90: 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73 65 74   pos mod} {..set
cfa0: 20 63 6d 64 20 5b 4c 69 6e 64 65 78 20 24 6c 69   cmd [Lindex $li
cfb0: 6e 65 20 30 5d 0a 09 72 65 67 73 75 62 20 2d 61  ne 0]..regsub -a
cfc0: 6c 6c 20 7b 5e 2e 2a 3a 3a 7d 20 24 63 6d 64 20  ll {^.*::} $cmd 
cfd0: 22 22 20 63 6d 64 0a 09 73 77 69 74 63 68 20 2d  "" cmd..switch -
cfe0: 2d 20 24 70 6f 73 20 7b 0a 09 09 31 20 7b 0a 09  - $pos {...1 {..
cff0: 09 09 73 77 69 74 63 68 20 2d 2d 20 24 63 6d 64  ..switch -- $cmd
d000: 20 7b 0a 09 09 09 09 72 65 73 65 74 20 2d 0a 09   {.....reset -..
d010: 09 09 09 77 61 69 74 20 2d 0a 09 09 09 09 64 61  ...wait -.....da
d020: 74 61 20 2d 0a 09 09 09 09 73 74 61 74 75 73 20  ta -.....status 
d030: 2d 0a 09 09 09 09 63 6f 64 65 20 2d 0a 09 09 09  -.....code -....
d040: 09 73 69 7a 65 20 2d 0a 09 09 09 09 63 6c 65 61  .size -.....clea
d050: 6e 75 70 20 7b 0a 09 09 09 09 09 72 65 74 75 72  nup {......retur
d060: 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
d070: 3c 74 6f 6b 65 6e 3e 5d 0a 09 09 09 09 7d 0a 09  <token>].....}..
d080: 09 09 7d 0a 09 09 7d 0a 09 7d 0a 09 72 65 74 75  ..}...}..}..retu
d090: 72 6e 20 22 22 0a 7d 0a 0a 23 20 2d 2d 2d 20 45  rn "".}..# --- E
d0a0: 4e 44 20 4f 46 20 48 54 54 50 20 50 41 43 4b 41  ND OF HTTP PACKA
d0b0: 47 45 20 2d 2d 2d 0a 0a 70 72 6f 63 20 63 6f 6d  GE ---..proc com
d0c0: 70 6c 65 74 65 28 69 66 29 20 7b 74 65 78 74 20  plete(if) {text 
d0d0: 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70  start end line p
d0e0: 6f 73 20 6d 6f 64 7d 20 7b 0a 09 23 20 77 65 20  os mod} {..# we 
d0f0: 64 6f 6e 27 74 20 6f 66 66 65 72 20 74 68 65 20  don't offer the 
d100: 63 6f 6d 70 6c 65 74 69 6f 6e 20 60 74 68 65 6e  completion `then
d110: 27 3a 0a 09 23 20 69 74 27 73 20 6f 70 74 69 6f  ':..# it's optio
d120: 6e 61 6c 2c 20 6d 6f 72 65 20 64 69 66 66 69 63  nal, more diffic
d130: 75 6c 74 20 74 6f 20 70 61 72 73 65 0a 09 23 20  ult to parse..# 
d140: 61 6e 64 20 77 68 6f 20 75 73 65 73 20 69 74 20  and who uses it 
d150: 61 6e 79 77 61 79 3f 0a 09 23 0a 09 73 77 69 74  anyway?..#..swit
d160: 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a 09 09 31  ch -- $pos {...1
d170: 20 2d 0a 09 09 32 20 7b 0a 09 09 09 72 65 74 75   -...2 {....retu
d180: 72 6e 20 5b 42 72 61 63 65 4f 72 43 6f 6d 6d 61  rn [BraceOrComma
d190: 6e 64 20 24 74 65 78 74 20 24 73 74 61 72 74 20  nd $text $start 
d1a0: 24 65 6e 64 20 24 6c 69 6e 65 20 24 70 6f 73 20  $end $line $pos 
d1b0: 24 6d 6f 64 5d 0a 09 09 7d 0a 09 09 64 65 66 61  $mod]...}...defa
d1c0: 75 6c 74 20 7b 0a 09 09 09 73 65 74 20 70 72 65  ult {....set pre
d1d0: 76 20 5b 50 72 65 76 69 6f 75 73 57 6f 72 64 20  v [PreviousWord 
d1e0: 24 7b 73 74 61 72 74 7d 20 24 7b 6c 69 6e 65 7d  ${start} ${line}
d1f0: 5d 0a 09 09 09 73 77 69 74 63 68 20 2d 2d 20 24  ]....switch -- $
d200: 70 72 65 76 20 7b 0a 09 09 09 09 74 68 65 6e 20  prev {.....then 
d210: 2d 0a 09 09 09 09 65 6c 73 65 20 2d 0a 09 09 09  -.....else -....
d220: 09 65 6c 73 65 69 66 20 7b 0a 09 09 09 09 09 72  .elseif {......r
d230: 65 74 75 72 6e 20 5b 42 72 61 63 65 4f 72 43 6f  eturn [BraceOrCo
d240: 6d 6d 61 6e 64 20 5c 0a 09 09 09 09 09 24 74 65  mmand \......$te
d250: 78 74 20 24 73 74 61 72 74 20 24 65 6e 64 20 24  xt $start $end $
d260: 6c 69 6e 65 20 24 70 6f 73 20 24 6d 6f 64 5d 0a  line $pos $mod].
d270: 09 09 09 09 7d 0a 09 09 09 09 64 65 66 61 75 6c  ....}.....defaul
d280: 74 20 7b 0a 09 09 09 09 09 69 66 20 7b 2d 31 20  t {......if {-1 
d290: 3d 3d 20 5b 6c 73 65 61 72 63 68 20 5b 50 72 6f  == [lsearch [Pro
d2a0: 70 65 72 4c 69 73 74 20 24 6c 69 6e 65 5d 20 65  perList $line] e
d2b0: 6c 73 65 5d 7d 20 7b 0a 09 09 09 09 09 09 72 65  lse]} {.......re
d2c0: 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72  turn [CompleteFr
d2d0: 6f 6d 4c 69 73 74 20 24 74 65 78 74 20 7b 65 6c  omList $text {el
d2e0: 73 65 20 65 6c 73 65 69 66 7d 5d 0a 09 09 09 09  se elseif}].....
d2f0: 09 7d 0a 09 09 09 09 7d 0a 09 09 09 7d 0a 09 09  .}.....}....}...
d300: 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a  }..}..return "".
d310: 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65  }..proc complete
d320: 28 69 6e 63 72 29 20 7b 74 65 78 74 20 73 74 61  (incr) {text sta
d330: 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20  rt end line pos 
d340: 6d 6f 64 7d 20 7b 0a 09 73 77 69 74 63 68 20 2d  mod} {..switch -
d350: 2d 20 24 70 6f 73 20 7b 0a 09 09 31 20 7b 0a 09  - $pos {...1 {..
d360: 09 09 73 65 74 20 6d 61 74 63 68 65 73 20 5b 75  ..set matches [u
d370: 70 6c 65 76 65 6c 20 5b 69 6e 66 6f 20 6c 65 76  plevel [info lev
d380: 65 6c 5d 20 69 6e 66 6f 20 76 61 72 73 20 24 7b  el] info vars ${
d390: 6d 6f 64 7d 2a 5d 0a 09 09 09 73 65 74 20 69 6e  mod}*]....set in
d3a0: 74 65 67 65 72 73 20 22 22 0a 09 09 09 23 20 63  tegers ""....# c
d3b0: 68 65 63 6b 20 66 6f 72 20 69 6e 74 65 67 65 72  heck for integer
d3c0: 73 0a 09 09 09 23 0a 09 09 09 66 6f 72 65 61 63  s....#....foreac
d3d0: 68 20 6d 61 74 63 68 20 24 6d 61 74 63 68 65 73  h match $matches
d3e0: 20 7b 0a 09 09 09 09 69 66 20 7b 5b 75 70 6c 65   {.....if {[uple
d3f0: 76 65 6c 20 5b 69 6e 66 6f 20 6c 65 76 65 6c 5d  vel [info level]
d400: 20 61 72 72 61 79 20 65 78 69 73 74 73 20 24 6d   array exists $m
d410: 61 74 63 68 5d 7d 20 7b 0a 09 09 09 09 09 63 6f  atch]} {......co
d420: 6e 74 69 6e 75 65 0a 09 09 09 09 7d 0a 09 09 09  ntinue.....}....
d430: 09 69 66 20 7b 5b 72 65 67 65 78 70 20 7b 5e 5b  .if {[regexp {^[
d440: 30 2d 39 5d 2b 24 7d 20 5b 75 70 6c 65 76 65 6c  0-9]+$} [uplevel
d450: 20 5b 69 6e 66 6f 20 6c 65 76 65 6c 5d 20 73 65   [info level] se
d460: 74 20 24 6d 61 74 63 68 5d 5d 7d 20 7b 0a 09 09  t $match]]} {...
d470: 09 09 09 6c 61 70 70 65 6e 64 20 69 6e 74 65 67  ...lappend integ
d480: 65 72 73 20 24 6d 61 74 63 68 0a 09 09 09 09 7d  ers $match.....}
d490: 0a 09 09 09 7d 0a 09 09 09 72 65 74 75 72 6e 20  ....}....return 
d4a0: 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73  [CompleteFromLis
d4b0: 74 20 24 7b 74 65 78 74 7d 20 24 7b 69 6e 74 65  t ${text} ${inte
d4c0: 67 65 72 73 7d 5d 0a 09 09 7d 0a 09 09 32 20 7b  gers}]...}...2 {
d4d0: 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
d4e0: 48 69 6e 74 73 20 3f 69 6e 63 72 65 6d 65 6e 74  Hints ?increment
d4f0: 3f 5d 20 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20  ?] }..}..return 
d500: 22 22 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c  "".}..proc compl
d510: 65 74 65 28 69 6e 66 6f 29 20 7b 74 65 78 74 20  ete(info) {text 
d520: 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70  start end line p
d530: 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73 65 74 20 63  os mod} {..set c
d540: 6d 64 20 5b 4c 69 6e 64 65 78 20 24 6c 69 6e 65  md [Lindex $line
d550: 20 31 5d 0a 09 73 77 69 74 63 68 20 2d 2d 20 24   1]..switch -- $
d560: 70 6f 73 20 7b 0a 09 09 31 20 7b 0a 09 09 09 73  pos {...1 {....s
d570: 65 74 20 63 6d 64 73 20 7b 0a 09 09 09 09 61 72  et cmds {.....ar
d580: 67 73 20 62 6f 64 79 20 63 6d 64 63 6f 75 6e 74  gs body cmdcount
d590: 20 63 6f 6d 6d 61 6e 64 73 20 63 6f 6d 70 6c 65   commands comple
d5a0: 74 65 20 64 65 66 61 75 6c 74 20 65 78 69 73 74  te default exist
d5b0: 73 0a 09 09 09 09 67 6c 6f 62 61 6c 73 20 68 6f  s.....globals ho
d5c0: 73 74 6e 61 6d 65 20 6c 65 76 65 6c 20 6c 69 62  stname level lib
d5d0: 72 61 72 79 20 6c 6f 61 64 65 64 20 6c 6f 63 61  rary loaded loca
d5e0: 6c 73 20 6e 61 6d 65 6f 66 65 78 65 63 75 74 61  ls nameofexecuta
d5f0: 62 6c 65 0a 09 09 09 09 70 61 74 63 68 6c 65 76  ble.....patchlev
d600: 65 6c 20 70 72 6f 63 73 20 73 63 72 69 70 74 20  el procs script 
d610: 73 68 61 72 65 64 6c 69 62 65 78 74 65 6e 73 69  sharedlibextensi
d620: 6f 6e 20 74 63 6c 76 65 72 73 69 6f 6e 20 76 61  on tclversion va
d630: 72 73 7d 0a 09 09 09 72 65 74 75 72 6e 20 5b 43  rs}....return [C
d640: 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20  ompleteFromList 
d650: 24 74 65 78 74 20 24 63 6d 64 73 5d 0a 09 09 7d  $text $cmds]...}
d660: 0a 09 09 32 20 7b 0a 09 09 09 73 77 69 74 63 68  ...2 {....switch
d670: 20 2d 2d 20 24 63 6d 64 20 7b 0a 09 09 09 09 61   -- $cmd {.....a
d680: 72 67 73 20 2d 0a 09 09 09 09 62 6f 64 79 20 2d  rgs -.....body -
d690: 0a 09 09 09 09 64 65 66 61 75 6c 74 20 2d 0a 09  .....default -..
d6a0: 09 09 09 70 72 6f 63 73 20 7b 20 72 65 74 75 72  ...procs { retur
d6b0: 6e 20 5b 63 6f 6d 70 6c 65 74 65 28 70 72 6f 63  n [complete(proc
d6c0: 29 20 24 7b 74 65 78 74 7d 20 30 20 30 20 24 7b  ) ${text} 0 0 ${
d6d0: 6c 69 6e 65 7d 20 31 20 24 7b 6d 6f 64 7d 5d 20  line} 1 ${mod}] 
d6e0: 7d 0a 09 09 09 09 63 6f 6d 70 6c 65 74 65 20 7b  }.....complete {
d6f0: 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
d700: 48 69 6e 74 73 20 3c 63 6f 6d 6d 61 6e 64 3e 5d  Hints <command>]
d710: 20 7d 0a 09 09 09 09 6c 65 76 65 6c 20 7b 20 72   }.....level { r
d720: 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
d730: 6e 74 73 20 3f 6e 75 6d 62 65 72 3f 5d 20 7d 0a  nts ?number?] }.
d740: 09 09 09 09 6c 6f 61 64 65 64 20 7b 20 72 65 74  ....loaded { ret
d750: 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
d760: 73 20 3f 69 6e 74 65 72 70 3f 5d 20 7d 0a 09 09  s ?interp?] }...
d770: 09 09 63 6f 6d 6d 61 6e 64 73 20 2d 0a 09 09 09  ..commands -....
d780: 09 65 78 69 73 74 73 20 2d 0a 09 09 09 09 67 6c  .exists -.....gl
d790: 6f 62 61 6c 73 20 2d 0a 09 09 09 09 6c 6f 63 61  obals -.....loca
d7a0: 6c 73 20 2d 0a 09 09 09 09 76 61 72 73 20 7b 0a  ls -.....vars {.
d7b0: 09 09 09 09 09 69 66 20 7b 22 65 78 69 73 74 73  .....if {"exists
d7c0: 22 20 3d 3d 20 24 63 6d 64 7d 20 7b 0a 09 09 09  " == $cmd} {....
d7d0: 09 09 09 73 65 74 20 64 6f 20 76 61 72 73 0a 09  ...set do vars..
d7e0: 09 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09  ....} else {....
d7f0: 09 09 09 73 65 74 20 64 6f 20 24 63 6d 64 0a 09  ...set do $cmd..
d800: 09 09 09 09 7d 0a 09 09 09 09 09 23 20 70 75 74  ....}......# put
d810: 73 20 73 74 64 65 72 72 20 5b 6c 69 73 74 20 63  s stderr [list c
d820: 6f 6d 70 6c 65 74 65 28 69 6e 66 6f 29 20 6c 65  omplete(info) le
d830: 76 65 6c 20 3d 20 5b 69 6e 66 6f 20 6c 65 76 65  vel = [info leve
d840: 6c 5d 5d 0a 09 09 09 09 09 72 65 74 75 72 6e 20  l]]......return 
d850: 5c 0a 09 09 09 09 09 5b 43 6f 6d 70 6c 65 74 65  \......[Complete
d860: 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d  FromList ${text}
d870: 20 5b 75 70 6c 65 76 65 6c 20 5b 69 6e 66 6f 20   [uplevel [info 
d880: 6c 65 76 65 6c 5d 20 69 6e 66 6f 20 24 7b 64 6f  level] info ${do
d890: 7d 5d 5d 0a 09 09 09 09 7d 0a 09 09 09 7d 0a 09  }]].....}....}..
d8a0: 09 7d 0a 09 09 33 20 7b 0a 09 09 09 73 77 69 74  .}...3 {....swit
d8b0: 63 68 20 2d 2d 20 24 63 6d 64 20 7b 0a 09 09 09  ch -- $cmd {....
d8c0: 09 64 65 66 61 75 6c 74 20 7b 0a 09 09 09 09 09  .default {......
d8d0: 73 65 74 20 70 72 6f 63 20 5b 4c 69 6e 64 65 78  set proc [Lindex
d8e0: 20 24 6c 69 6e 65 20 32 5d 0a 09 09 09 09 09 72   $line 2]......r
d8f0: 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46  eturn [CompleteF
d900: 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20  romList ${text} 
d910: 5c 0a 09 09 09 09 09 5b 75 70 6c 65 76 65 6c 20  \......[uplevel 
d920: 5b 69 6e 66 6f 20 6c 65 76 65 6c 5d 20 69 6e 66  [info level] inf
d930: 6f 20 61 72 67 73 20 24 70 72 6f 63 5d 5d 0a 09  o args $proc]]..
d940: 09 09 09 7d 0a 09 09 09 09 64 65 66 61 75 6c 74  ...}.....default
d950: 20 7b 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 09 34   {}....}...}...4
d960: 20 7b 0a 09 09 09 73 77 69 74 63 68 20 2d 2d 20   {....switch -- 
d970: 24 63 6d 64 20 7b 0a 09 09 09 09 64 65 66 61 75  $cmd {.....defau
d980: 6c 74 20 7b 0a 09 09 09 09 09 72 65 74 75 72 6e  lt {......return
d990: 20 5b 56 61 72 43 6f 6d 70 6c 65 74 69 6f 6e 20   [VarCompletion 
d9a0: 24 7b 74 65 78 74 7d 5d 0a 09 09 09 09 7d 0a 09  ${text}].....}..
d9b0: 09 09 09 64 65 66 61 75 6c 74 20 7b 7d 0a 09 09  ...default {}...
d9c0: 09 7d 0a 09 09 7d 0a 09 7d 0a 09 72 65 74 75 72  .}...}..}..retur
d9d0: 6e 20 22 22 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d  n "".}..proc com
d9e0: 70 6c 65 74 65 28 69 6e 74 65 72 70 29 20 7b 74  plete(interp) {t
d9f0: 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69  ext start end li
da00: 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73  ne pos mod} {..s
da10: 65 74 20 63 6d 64 20 5b 4c 69 6e 64 65 78 20 24  et cmd [Lindex $
da20: 6c 69 6e 65 20 31 5d 0a 09 73 77 69 74 63 68 20  line 1]..switch 
da30: 2d 2d 20 24 70 6f 73 20 7b 0a 09 09 31 20 7b 0a  -- $pos {...1 {.
da40: 09 09 09 73 65 74 20 63 6d 64 73 20 7b 0a 09 09  ...set cmds {...
da50: 09 09 61 6c 69 61 73 20 61 6c 69 61 73 65 73 20  ..alias aliases 
da60: 63 72 65 61 74 65 20 64 65 6c 65 74 65 20 65 76  create delete ev
da70: 61 6c 20 65 78 69 73 74 73 20 65 78 70 6f 73 65  al exists expose
da80: 20 68 69 64 65 20 68 69 64 64 65 6e 0a 09 09 09   hide hidden....
da90: 09 69 6e 76 6f 6b 65 68 69 64 64 65 6e 20 69 73  .invokehidden is
daa0: 73 61 66 65 20 6d 61 72 6b 74 72 75 73 74 65 64  safe marktrusted
dab0: 20 73 68 61 72 65 20 73 6c 61 76 65 73 20 74 61   share slaves ta
dac0: 72 67 65 74 20 74 72 61 6e 73 66 65 72 7d 0a 09  rget transfer}..
dad0: 09 09 72 65 74 75 72 6e 20 5b 54 72 79 46 72 6f  ..return [TryFro
dae0: 6d 4c 69 73 74 20 24 74 65 78 74 20 24 63 6d 64  mList $text $cmd
daf0: 73 5d 0a 09 09 7d 0a 09 09 32 20 7b 0a 09 09 09  s]...}...2 {....
db00: 73 77 69 74 63 68 20 2d 2d 20 24 63 6d 64 20 7b  switch -- $cmd {
db10: 0a 0a 09 09 09 09 63 72 65 61 74 65 20 7b 0a 09  ......create {..
db20: 09 09 09 09 73 65 74 20 63 6d 64 73 20 5b 52 65  ....set cmds [Re
db30: 6d 6f 76 65 55 73 65 64 4f 70 74 69 6f 6e 73 20  moveUsedOptions 
db40: 24 7b 6c 69 6e 65 7d 20 7b 2d 73 61 76 65 20 2d  ${line} {-save -
db50: 2d 7d 20 7b 2d 2d 7d 5d 0a 09 09 09 09 09 69 66  -} {--}]......if
db60: 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 63 6d 64 73   {[llength $cmds
db70: 5d 7d 20 7b 0a 09 09 09 09 09 09 72 65 74 75 72  ]} {.......retur
db80: 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c  n [CompleteFromL
db90: 69 73 74 20 24 74 65 78 74 20 22 24 63 6d 64 73  ist $text "$cmds
dba0: 20 3f 70 61 74 68 3f 22 5d 0a 09 09 09 09 09 7d   ?path?"]......}
dbb0: 20 65 6c 73 65 20 7b 0a 09 09 09 09 09 09 72 65   else {.......re
dbc0: 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
dbd0: 74 73 20 3f 70 61 74 68 3f 5d 0a 09 09 09 09 09  ts ?path?]......
dbe0: 7d 0a 09 09 09 09 7d 0a 0a 09 09 09 09 65 76 61  }.....}......eva
dbf0: 6c 20 2d 0a 09 09 09 09 65 78 69 73 74 73 20 2d  l -.....exists -
dc00: 0a 09 09 09 09 65 78 70 6f 73 65 20 2d 0a 09 09  .....expose -...
dc10: 09 09 68 69 64 65 20 2d 0a 09 09 09 09 68 69 64  ..hide -.....hid
dc20: 64 65 6e 20 2d 0a 09 09 09 09 69 6e 76 6f 6b 65  den -.....invoke
dc30: 68 69 64 64 65 6e 20 2d 0a 09 09 09 09 6d 61 72  hidden -.....mar
dc40: 6b 74 72 75 73 74 65 64 20 2d 0a 09 09 09 09 74  ktrusted -.....t
dc50: 61 72 67 65 74 20 7b 20 72 65 74 75 72 6e 20 5b  arget { return [
dc60: 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74  CompleteFromList
dc70: 20 24 7b 74 65 78 74 7d 20 5b 69 6e 74 65 72 70   ${text} [interp
dc80: 20 73 6c 61 76 65 73 5d 5d 20 7d 0a 0a 09 09 09   slaves]] }.....
dc90: 09 61 6c 69 61 73 65 73 20 2d 0a 09 09 09 09 64  .aliases -.....d
dca0: 65 6c 65 74 65 20 2d 0a 09 09 09 09 69 73 73 61  elete -.....issa
dcb0: 66 65 20 2d 0a 09 09 09 09 73 6c 61 76 65 73 20  fe -.....slaves 
dcc0: 7b 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65  { return [Comple
dcd0: 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78  teFromList ${tex
dce0: 74 7d 20 5b 69 6e 74 65 72 70 20 73 6c 61 76 65  t} [interp slave
dcf0: 73 5d 5d 20 7d 0a 0a 09 09 09 09 61 6c 69 61 73  s]] }......alias
dd00: 20 2d 0a 09 09 09 09 73 68 61 72 65 20 2d 0a 09   -.....share -..
dd10: 09 09 09 74 72 61 6e 73 66 65 72 20 7b 20 72 65  ...transfer { re
dd20: 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
dd30: 74 73 20 3c 73 72 63 50 61 74 68 3e 5d 20 7d 0a  ts <srcPath>] }.
dd40: 09 09 09 7d 0a 09 09 7d 0a 09 09 33 20 7b 0a 09  ...}...}...3 {..
dd50: 09 09 73 77 69 74 63 68 20 2d 2d 20 24 63 6d 64  ..switch -- $cmd
dd60: 20 7b 0a 0a 09 09 09 09 61 6c 69 61 73 20 7b 20   {......alias { 
dd70: 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
dd80: 69 6e 74 73 20 3c 73 72 63 43 6d 64 3e 5d 20 7d  ints <srcCmd>] }
dd90: 0a 0a 09 09 09 09 63 72 65 61 74 65 20 7b 0a 09  ......create {..
dda0: 09 09 09 09 73 65 74 20 63 6d 64 73 20 5b 52 65  ....set cmds [Re
ddb0: 6d 6f 76 65 55 73 65 64 4f 70 74 69 6f 6e 73 20  moveUsedOptions 
ddc0: 24 7b 6c 69 6e 65 7d 20 7b 2d 73 61 76 65 20 2d  ${line} {-save -
ddd0: 2d 7d 20 7b 2d 2d 7d 5d 0a 09 09 09 09 09 69 66  -} {--}]......if
dde0: 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 63 6d 64 73   {[llength $cmds
ddf0: 5d 7d 20 7b 0a 09 09 09 09 09 09 72 65 74 75 72  ]} {.......retur
de00: 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c  n [CompleteFromL
de10: 69 73 74 20 24 74 65 78 74 20 22 24 63 6d 64 73  ist $text "$cmds
de20: 20 3f 70 61 74 68 3f 22 5d 0a 09 09 09 09 09 7d   ?path?"]......}
de30: 20 65 6c 73 65 20 7b 0a 09 09 09 09 09 09 72 65   else {.......re
de40: 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
de50: 74 73 20 3f 70 61 74 68 3f 5d 0a 09 09 09 09 09  ts ?path?]......
de60: 7d 0a 09 09 09 09 7d 0a 0a 09 09 09 09 65 76 61  }.....}......eva
de70: 6c 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70  l { return [Disp
de80: 6c 61 79 48 69 6e 74 73 20 3c 61 72 67 3e 5d 20  layHints <arg>] 
de90: 7d 0a 09 09 09 09 64 65 6c 65 74 65 20 7b 20 72  }.....delete { r
dea0: 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46  eturn [CompleteF
deb0: 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20  romList ${text} 
dec0: 5b 69 6e 74 65 72 70 20 73 6c 61 76 65 73 5d 5d  [interp slaves]]
ded0: 20 7d 0a 0a 09 09 09 09 65 78 70 6f 73 65 20 7b   }......expose {
dee0: 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
def0: 48 69 6e 74 73 20 3c 68 69 64 64 65 6e 4e 61 6d  Hints <hiddenNam
df00: 65 3e 5d 20 7d 0a 09 09 09 09 68 69 64 65 20 7b  e>] }.....hide {
df10: 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
df20: 48 69 6e 74 73 20 3c 65 78 70 6f 73 65 64 43 6d  Hints <exposedCm
df30: 64 4e 61 6d 65 3e 5d 20 7d 0a 0a 09 09 09 09 69  dName>] }......i
df40: 6e 76 6f 6b 65 68 69 64 64 65 6e 20 7b 0a 09 09  nvokehidden {...
df50: 09 09 09 72 65 74 75 72 6e 20 5c 0a 09 09 09 09  ...return \.....
df60: 09 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69  .[CompleteFromLi
df70: 73 74 20 24 74 65 78 74 20 7b 3f 2d 67 6c 6f 62  st $text {?-glob
df80: 61 6c 3f 20 3c 68 69 64 64 65 6e 43 6d 64 4e 61  al? <hiddenCmdNa
df90: 6d 65 3e 7d 5d 0a 09 09 09 09 7d 0a 0a 09 09 09  me>}].....}.....
dfa0: 09 74 61 72 67 65 74 20 7b 20 72 65 74 75 72 6e  .target { return
dfb0: 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c   [DisplayHints <
dfc0: 61 6c 69 61 73 3e 5d 20 7d 0a 0a 09 09 09 09 65  alias>] }......e
dfd0: 78 69 73 74 73 20 7b 7d 0a 09 09 09 09 68 69 64  xists {}.....hid
dfe0: 64 65 6e 20 7b 7d 0a 09 09 09 09 6d 61 72 6b 74  den {}.....markt
dff0: 72 75 73 74 65 64 20 7b 7d 0a 09 09 09 09 61 6c  rusted {}.....al
e000: 69 61 73 65 73 20 7b 7d 0a 09 09 09 09 69 73 73  iases {}.....iss
e010: 61 66 65 20 7b 7d 0a 09 09 09 09 73 6c 61 76 65  afe {}.....slave
e020: 73 20 7b 7d 0a 0a 09 09 09 09 73 68 61 72 65 20  s {}......share 
e030: 2d 0a 09 09 09 09 74 72 61 6e 73 66 65 72 20 7b  -.....transfer {
e040: 72 65 74 75 72 6e 20 5b 43 68 61 6e 6e 65 6c 49  return [ChannelI
e050: 64 20 24 7b 74 65 78 74 7d 5d 7d 0a 09 09 09 7d  d ${text}]}....}
e060: 0a 09 09 7d 0a 09 09 34 20 7b 0a 09 09 09 73 77  ...}...4 {....sw
e070: 69 74 63 68 20 2d 2d 20 24 63 6d 64 20 7b 0a 0a  itch -- $cmd {..
e080: 09 09 09 09 61 6c 69 61 73 20 7b 20 72 65 74 75  ....alias { retu
e090: 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
e0a0: 20 3c 74 61 72 67 65 74 50 61 74 68 3e 5d 20 7d   <targetPath>] }
e0b0: 0a 09 09 09 09 65 76 61 6c 20 7b 20 72 65 74 75  .....eval { retu
e0c0: 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
e0d0: 20 3f 61 72 67 3f 5d 20 7d 0a 0a 09 09 09 09 69   ?arg?] }......i
e0e0: 6e 76 6f 6b 65 68 69 64 64 65 6e 20 7b 0a 09 09  nvokehidden {...
e0f0: 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c  ...return [Compl
e100: 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 74 65 78  eteFromList $tex
e110: 74 20 7b 3c 68 69 64 64 65 6e 43 6d 64 4e 61 6d  t {<hiddenCmdNam
e120: 65 3e 20 3f 61 72 67 3f 7d 5d 0a 09 09 09 09 7d  e> ?arg?}].....}
e130: 0a 0a 09 09 09 09 63 72 65 61 74 65 20 7b 0a 09  ......create {..
e140: 09 09 09 09 73 65 74 20 63 6d 64 73 20 5b 52 65  ....set cmds [Re
e150: 6d 6f 76 65 55 73 65 64 4f 70 74 69 6f 6e 73 20  moveUsedOptions 
e160: 24 7b 6c 69 6e 65 7d 20 7b 2d 73 61 76 65 20 2d  ${line} {-save -
e170: 2d 7d 20 7b 2d 2d 7d 5d 0a 09 09 09 09 09 69 66  -} {--}]......if
e180: 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 63 6d 64 73   {[llength $cmds
e190: 5d 7d 20 7b 0a 09 09 09 09 09 09 72 65 74 75 72  ]} {.......retur
e1a0: 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c  n [CompleteFromL
e1b0: 69 73 74 20 24 74 65 78 74 20 22 24 63 6d 64 73  ist $text "$cmds
e1c0: 20 3f 70 61 74 68 3f 22 5d 0a 09 09 09 09 09 7d   ?path?"]......}
e1d0: 20 65 6c 73 65 20 7b 0a 09 09 09 09 09 09 72 65   else {.......re
e1e0: 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
e1f0: 74 73 20 3f 70 61 74 68 3f 5d 0a 09 09 09 09 09  ts ?path?]......
e200: 7d 0a 09 09 09 09 7d 0a 0a 09 09 09 09 65 78 70  }.....}......exp
e210: 6f 73 65 20 7b 20 72 65 74 75 72 6e 20 5b 44 69  ose { return [Di
e220: 73 70 6c 61 79 48 69 6e 74 73 20 3f 65 78 70 6f  splayHints ?expo
e230: 73 65 64 43 6d 64 4e 61 6d 65 3f 5d 20 7d 0a 09  sedCmdName?] }..
e240: 09 09 09 68 69 64 65 20 7b 20 72 65 74 75 72 6e  ...hide { return
e250: 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3f   [DisplayHints ?
e260: 68 69 64 64 65 6e 43 6d 64 4e 61 6d 65 3f 5d 20  hiddenCmdName?] 
e270: 7d 0a 0a 09 09 09 09 73 68 61 72 65 20 2d 0a 09  }......share -..
e280: 09 09 09 74 72 61 6e 73 66 65 72 20 7b 20 72 65  ...transfer { re
e290: 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72  turn [CompleteFr
e2a0: 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 5b  omList ${text} [
e2b0: 69 6e 74 65 72 70 20 73 6c 61 76 65 73 5d 5d 20  interp slaves]] 
e2c0: 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 09 35 20 7b  }....}...}...5 {
e2d0: 0a 09 09 09 73 77 69 74 63 68 20 2d 2d 20 24 63  ....switch -- $c
e2e0: 6d 64 20 7b 0a 0a 09 09 09 09 61 6c 69 61 73 20  md {......alias 
e2f0: 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
e300: 79 48 69 6e 74 73 20 3c 74 61 72 67 65 74 43 6d  yHints <targetCm
e310: 64 3e 5d 20 7d 0a 09 09 09 09 69 6e 76 6f 6b 65  d>] }.....invoke
e320: 68 69 64 64 65 6e 20 2d 0a 09 09 09 09 65 76 61  hidden -.....eva
e330: 6c 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70  l { return [Disp
e340: 6c 61 79 48 69 6e 74 73 20 3f 61 72 67 3f 5d 20  layHints ?arg?] 
e350: 7d 0a 0a 09 09 09 09 65 78 70 6f 73 65 20 7b 20  }......expose { 
e360: 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
e370: 69 6e 74 73 20 3f 65 78 70 6f 73 65 64 43 6d 64  ints ?exposedCmd
e380: 4e 61 6d 65 3f 5d 20 7d 0a 09 09 09 09 68 69 64  Name?] }.....hid
e390: 65 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70  e { return [Disp
e3a0: 6c 61 79 48 69 6e 74 73 20 3f 68 69 64 64 65 6e  layHints ?hidden
e3b0: 43 6d 64 4e 61 6d 65 3f 5d 20 7d 0a 0a 09 09 09  CmdName?] }.....
e3c0: 09 73 68 61 72 65 20 2d 0a 09 09 09 09 74 72 61  .share -.....tra
e3d0: 6e 73 66 65 72 20 7b 20 72 65 74 75 72 6e 20 5b  nsfer { return [
e3e0: 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74  CompleteFromList
e3f0: 20 24 7b 74 65 78 74 7d 20 5b 69 6e 74 65 72 70   ${text} [interp
e400: 20 73 6c 61 76 65 73 5d 5d 20 7d 0a 09 09 09 7d   slaves]] }....}
e410: 0a 09 09 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20  ...}..}..return 
e420: 22 22 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c  "".}..proc compl
e430: 65 74 65 28 6a 6f 69 6e 29 20 7b 74 65 78 74 20  ete(join) {text 
e440: 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70  start end line p
e450: 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73 77 69 74 63  os mod} {..switc
e460: 68 20 2d 2d 20 24 70 6f 73 20 7b 0a 09 09 31 20  h -- $pos {...1 
e470: 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
e480: 79 48 69 6e 74 73 20 3c 6c 69 73 74 3e 5d 20 7d  yHints <list>] }
e490: 0a 09 09 32 20 7b 20 72 65 74 75 72 6e 20 5b 44  ...2 { return [D
e4a0: 69 73 70 6c 61 79 48 69 6e 74 73 20 3f 6a 6f 69  isplayHints ?joi
e4b0: 6e 53 74 72 69 6e 67 3f 5d 20 7d 0a 09 7d 0a 09  nString?] }..}..
e4c0: 72 65 74 75 72 6e 20 22 22 0a 7d 0a 0a 70 72 6f  return "".}..pro
e4d0: 63 20 63 6f 6d 70 6c 65 74 65 28 6c 61 70 70 65  c complete(lappe
e4e0: 6e 64 29 20 7b 74 65 78 74 20 73 74 61 72 74 20  nd) {text start 
e4f0: 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64  end line pos mod
e500: 7d 20 7b 0a 09 73 77 69 74 63 68 20 2d 2d 20 24  } {..switch -- $
e510: 70 6f 73 20 7b 0a 09 09 31 20 7b 20 72 65 74 75  pos {...1 { retu
e520: 72 6e 20 5b 56 61 72 43 6f 6d 70 6c 65 74 69 6f  rn [VarCompletio
e530: 6e 20 24 7b 74 65 78 74 7d 5d 20 7d 0a 09 09 64  n ${text}] }...d
e540: 65 66 61 75 6c 74 20 7b 20 72 65 74 75 72 6e 20  efault { return 
e550: 5b 54 72 79 46 72 6f 6d 4c 69 73 74 20 24 7b 74  [TryFromList ${t
e560: 65 78 74 7d 20 3f 76 61 6c 75 65 3f 5d 20 7d 0a  ext} ?value?] }.
e570: 09 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a  .}..return "".}.
e580: 0a 23 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  .# the following
e590: 20 72 6f 75 74 69 6e 65 73 20 61 72 65 20 64 65   routines are de
e5a0: 73 63 72 69 62 65 64 20 69 6e 20 74 68 65 0a 23  scribed in the.#
e5b0: 20 60 6c 69 62 72 61 72 79 27 20 6d 61 6e 20 70   `library' man p
e5c0: 61 67 65 2e 0a 23 20 2d 2d 2d 20 4c 49 42 52 41  age..# --- LIBRA
e5d0: 52 59 20 2d 2d 2d 0a 0a 70 72 6f 63 20 63 6f 6d  RY ---..proc com
e5e0: 70 6c 65 74 65 28 61 75 74 6f 5f 65 78 65 63 6f  plete(auto_execo
e5f0: 6b 29 20 7b 74 65 78 74 20 73 74 61 72 74 20 65  k) {text start e
e600: 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d  nd line pos mod}
e610: 20 7b 0a 09 73 77 69 74 63 68 20 2d 2d 20 24 70   {..switch -- $p
e620: 6f 73 20 7b 0a 09 09 31 20 7b 20 72 65 74 75 72  os {...1 { retur
e630: 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
e640: 3c 63 6d 64 3e 5d 20 7d 0a 09 7d 0a 09 72 65 74  <cmd>] }..}..ret
e650: 75 72 6e 20 22 22 0a 7d 0a 0a 70 72 6f 63 20 63  urn "".}..proc c
e660: 6f 6d 70 6c 65 74 65 28 61 75 74 6f 5f 6c 6f 61  omplete(auto_loa
e670: 64 29 20 7b 74 65 78 74 20 73 74 61 72 74 20 65  d) {text start e
e680: 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d  nd line pos mod}
e690: 20 7b 0a 09 73 77 69 74 63 68 20 2d 2d 20 24 70   {..switch -- $p
e6a0: 6f 73 20 7b 0a 09 09 31 20 7b 20 72 65 74 75 72  os {...1 { retur
e6b0: 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
e6c0: 3c 63 6d 64 3e 5d 20 7d 0a 09 7d 0a 09 72 65 74  <cmd>] }..}..ret
e6d0: 75 72 6e 20 22 22 0a 7d 0a 0a 70 72 6f 63 20 63  urn "".}..proc c
e6e0: 6f 6d 70 6c 65 74 65 28 61 75 74 6f 5f 6d 6b 69  omplete(auto_mki
e6f0: 6e 64 65 78 29 20 7b 74 65 78 74 20 73 74 61 72  ndex) {text star
e700: 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d  t end line pos m
e710: 6f 64 7d 20 7b 0a 09 73 77 69 74 63 68 20 2d 2d  od} {..switch --
e720: 20 24 70 6f 73 20 7b 0a 09 09 31 20 7b 20 72 65   $pos {...1 { re
e730: 74 75 72 6e 20 22 22 20 7d 0a 09 09 64 65 66 61  turn "" }...defa
e740: 75 6c 74 20 7b 20 72 65 74 75 72 6e 20 5b 44 69  ult { return [Di
e750: 73 70 6c 61 79 48 69 6e 74 73 20 3f 70 61 74 74  splayHints ?patt
e760: 65 72 6e 3f 5d 20 7d 0a 09 7d 0a 09 72 65 74 75  ern?] }..}..retu
e770: 72 6e 20 22 22 0a 7d 0a 0a 23 20 70 72 6f 63 20  rn "".}..# proc 
e780: 63 6f 6d 70 6c 65 74 65 28 61 75 74 6f 5f 72 65  complete(auto_re
e790: 73 65 74 29 20 7b 74 65 78 74 20 73 74 61 72 74  set) {text start
e7a0: 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f   end line pos mo
e7b0: 64 7d 20 7b 0a 23 20 7d 0a 0a 70 72 6f 63 20 63  d} {.# }..proc c
e7c0: 6f 6d 70 6c 65 74 65 28 74 63 6c 5f 66 69 6e 64  omplete(tcl_find
e7d0: 4c 69 62 72 61 72 79 29 20 7b 74 65 78 74 20 73  Library) {text s
e7e0: 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f  tart end line po
e7f0: 73 20 6d 6f 64 7d 20 7b 0a 09 73 77 69 74 63 68  s mod} {..switch
e800: 20 2d 2d 20 24 70 6f 73 20 7b 0a 09 09 31 20 7b   -- $pos {...1 {
e810: 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
e820: 48 69 6e 74 73 20 3c 62 61 73 65 6e 61 6d 65 3e  Hints <basename>
e830: 5d 20 7d 0a 09 09 32 20 7b 20 72 65 74 75 72 6e  ] }...2 { return
e840: 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c   [DisplayHints <
e850: 76 65 72 73 69 6f 6e 3e 5d 20 7d 0a 09 09 33 20  version>] }...3 
e860: 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
e870: 79 48 69 6e 74 73 20 3c 70 61 74 63 68 3e 5d 20  yHints <patch>] 
e880: 7d 0a 09 09 34 20 7b 20 72 65 74 75 72 6e 20 5b  }...4 { return [
e890: 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 69 6e  DisplayHints <in
e8a0: 69 74 53 63 72 69 70 74 3e 5d 20 7d 0a 09 09 35  itScript>] }...5
e8b0: 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
e8c0: 61 79 48 69 6e 74 73 20 3c 65 6e 56 61 72 4e 61  ayHints <enVarNa
e8d0: 6d 65 3e 5d 20 7d 0a 09 09 36 20 7b 20 72 65 74  me>] }...6 { ret
e8e0: 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
e8f0: 73 20 3c 76 61 72 4e 61 6d 65 3e 5d 20 7d 0a 09  s <varName>] }..
e900: 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a 0a  }..return "".}..
e910: 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 70 61  proc complete(pa
e920: 72 72 61 79 29 20 7b 74 65 78 74 20 73 74 61 72  rray) {text star
e930: 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d  t end line pos m
e940: 6f 64 7d 20 7b 0a 09 73 77 69 74 63 68 20 2d 2d  od} {..switch --
e950: 20 24 70 6f 73 20 7b 0a 09 09 31 20 7b 0a 09 09   $pos {...1 {...
e960: 09 73 65 74 20 76 61 72 73 20 5b 75 70 6c 65 76  .set vars [uplev
e970: 65 6c 20 5b 69 6e 66 6f 20 6c 65 76 65 6c 5d 20  el [info level] 
e980: 69 6e 66 6f 20 76 61 72 73 5d 0a 09 09 09 66 6f  info vars]....fo
e990: 72 65 61 63 68 20 76 61 72 20 24 7b 76 61 72 73  reach var ${vars
e9a0: 7d 20 7b 0a 09 09 09 09 69 66 20 7b 5b 75 70 6c  } {.....if {[upl
e9b0: 65 76 65 6c 20 5b 69 6e 66 6f 20 6c 65 76 65 6c  evel [info level
e9c0: 5d 20 61 72 72 61 79 20 65 78 69 73 74 73 20 24  ] array exists $
e9d0: 7b 76 61 72 7d 5d 7d 20 7b 0a 09 09 09 09 09 6c  {var}]} {......l
e9e0: 61 70 70 65 6e 64 20 6d 61 74 63 68 65 73 20 24  append matches $
e9f0: 7b 76 61 72 7d 0a 09 09 09 09 7d 0a 09 09 09 7d  {var}.....}....}
ea00: 0a 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70  ....return [Comp
ea10: 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 74 65  leteFromList $te
ea20: 78 74 20 24 6d 61 74 63 68 65 73 5d 0a 09 09 7d  xt $matches]...}
ea30: 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d  ..}..return "".}
ea40: 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28  ..proc complete(
ea50: 74 63 6c 5f 65 6e 64 4f 66 57 6f 72 64 29 20 7b  tcl_endOfWord) {
ea60: 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c  text start end l
ea70: 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09  ine pos mod} {..
ea80: 73 77 69 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b  switch -- $pos {
ea90: 0a 09 09 31 20 7b 20 72 65 74 75 72 6e 20 5b 44  ...1 { return [D
eaa0: 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 73 74 72  isplayHints <str
eab0: 3e 5d 20 7d 0a 09 09 32 20 7b 20 72 65 74 75 72  >] }...2 { retur
eac0: 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
ead0: 3c 73 74 61 72 74 3e 5d 20 7d 0a 09 7d 0a 09 72  <start>] }..}..r
eae0: 65 74 75 72 6e 20 22 22 0a 7d 0a 0a 70 72 6f 63  eturn "".}..proc
eaf0: 20 63 6f 6d 70 6c 65 74 65 28 74 63 6c 5f 73 74   complete(tcl_st
eb00: 61 72 74 4f 66 4e 65 78 74 57 6f 72 64 29 20 7b  artOfNextWord) {
eb10: 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c  text start end l
eb20: 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09  ine pos mod} {..
eb30: 72 65 74 75 72 6e 20 5b 63 6f 6d 70 6c 65 74 65  return [complete
eb40: 28 74 63 6c 5f 65 6e 64 4f 66 57 6f 72 64 29 20  (tcl_endOfWord) 
eb50: 24 74 65 78 74 20 24 73 74 61 72 74 20 24 65 6e  $text $start $en
eb60: 64 20 24 6c 69 6e 65 20 24 70 6f 73 20 24 6d 6f  d $line $pos $mo
eb70: 64 5d 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c  d].}..proc compl
eb80: 65 74 65 28 74 63 6c 5f 73 74 61 72 74 4f 66 50  ete(tcl_startOfP
eb90: 72 65 76 69 6f 75 73 57 6f 72 64 29 20 7b 74 65  reviousWord) {te
eba0: 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e  xt start end lin
ebb0: 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 72 65  e pos mod} {..re
ebc0: 74 75 72 6e 20 5b 63 6f 6d 70 6c 65 74 65 28 74  turn [complete(t
ebd0: 63 6c 5f 65 6e 64 4f 66 57 6f 72 64 29 20 24 74  cl_endOfWord) $t
ebe0: 65 78 74 20 24 73 74 61 72 74 20 24 65 6e 64 20  ext $start $end 
ebf0: 24 6c 69 6e 65 20 24 70 6f 73 20 24 6d 6f 64 5d  $line $pos $mod]
ec00: 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74  .}..proc complet
ec10: 65 28 74 63 6c 5f 77 6f 72 64 42 72 65 61 6b 41  e(tcl_wordBreakA
ec20: 66 74 65 72 29 20 7b 74 65 78 74 20 73 74 61 72  fter) {text star
ec30: 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d  t end line pos m
ec40: 6f 64 7d 20 7b 0a 09 72 65 74 75 72 6e 20 5b 63  od} {..return [c
ec50: 6f 6d 70 6c 65 74 65 28 74 63 6c 5f 65 6e 64 4f  omplete(tcl_endO
ec60: 66 57 6f 72 64 29 20 24 74 65 78 74 20 24 73 74  fWord) $text $st
ec70: 61 72 74 20 24 65 6e 64 20 24 6c 69 6e 65 20 24  art $end $line $
ec80: 70 6f 73 20 24 6d 6f 64 5d 0a 7d 0a 0a 70 72 6f  pos $mod].}..pro
ec90: 63 20 63 6f 6d 70 6c 65 74 65 28 74 63 6c 5f 77  c complete(tcl_w
eca0: 6f 72 64 42 72 65 61 6b 42 65 66 6f 72 65 29 20  ordBreakBefore) 
ecb0: 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20  {text start end 
ecc0: 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a  line pos mod} {.
ecd0: 09 72 65 74 75 72 6e 20 5b 63 6f 6d 70 6c 65 74  .return [complet
ece0: 65 28 74 63 6c 5f 65 6e 64 4f 66 57 6f 72 64 29  e(tcl_endOfWord)
ecf0: 20 24 74 65 78 74 20 24 73 74 61 72 74 20 24 65   $text $start $e
ed00: 6e 64 20 24 6c 69 6e 65 20 24 70 6f 73 20 24 6d  nd $line $pos $m
ed10: 6f 64 5d 0a 7d 0a 0a 23 20 2d 2d 2d 20 45 4e 44  od].}..# --- END
ed20: 20 4f 46 20 60 4c 49 42 52 41 52 59 27 20 2d 2d   OF `LIBRARY' --
ed30: 2d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65  -..proc complete
ed40: 28 6c 69 6e 64 65 78 29 20 7b 74 65 78 74 20 73  (lindex) {text s
ed50: 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f  tart end line po
ed60: 73 20 6d 6f 64 7d 20 7b 0a 09 73 77 69 74 63 68  s mod} {..switch
ed70: 20 2d 2d 20 24 70 6f 73 20 7b 0a 09 09 31 20 7b   -- $pos {...1 {
ed80: 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
ed90: 48 69 6e 74 73 20 3c 6c 69 73 74 3e 5d 20 7d 0a  Hints <list>] }.
eda0: 09 09 32 20 7b 20 72 65 74 75 72 6e 20 5b 44 69  ..2 { return [Di
edb0: 73 70 6c 61 79 48 69 6e 74 73 20 3c 69 6e 64 65  splayHints <inde
edc0: 78 3e 5d 20 7d 0a 09 7d 0a 09 72 65 74 75 72 6e  x>] }..}..return
edd0: 20 22 22 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70   "".}..proc comp
ede0: 6c 65 74 65 28 6c 69 6e 73 65 72 74 29 20 7b 74  lete(linsert) {t
edf0: 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69  ext start end li
ee00: 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73  ne pos mod} {..s
ee10: 77 69 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a  witch -- $pos {.
ee20: 09 09 31 20 7b 20 72 65 74 75 72 6e 20 5b 44 69  ..1 { return [Di
ee30: 73 70 6c 61 79 48 69 6e 74 73 20 3c 6c 69 73 74  splayHints <list
ee40: 3e 5d 20 7d 0a 09 09 32 20 7b 20 72 65 74 75 72  >] }...2 { retur
ee50: 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
ee60: 3c 69 6e 64 65 78 3e 5d 20 7d 0a 09 09 33 20 7b  <index>] }...3 {
ee70: 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
ee80: 48 69 6e 74 73 20 3c 65 6c 65 6d 65 6e 74 3e 5d  Hints <element>]
ee90: 20 7d 0a 09 09 64 65 66 61 75 6c 74 20 7b 20 72   }...default { r
eea0: 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
eeb0: 6e 74 73 20 3f 65 6c 65 6d 65 6e 74 3f 5d 20 7d  nts ?element?] }
eec0: 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d  ..}..return "".}
eed0: 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28  ..proc complete(
eee0: 6c 69 73 74 29 20 7b 74 65 78 74 20 73 74 61 72  list) {text star
eef0: 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d  t end line pos m
ef00: 6f 64 7d 20 7b 0a 09 72 65 74 75 72 6e 20 5b 44  od} {..return [D
ef10: 69 73 70 6c 61 79 48 69 6e 74 73 20 3f 61 72 67  isplayHints ?arg
ef20: 3f 5d 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c  ?].}..proc compl
ef30: 65 74 65 28 6c 6c 65 6e 67 74 68 29 20 7b 74 65  ete(llength) {te
ef40: 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e  xt start end lin
ef50: 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73 77  e pos mod} {..sw
ef60: 69 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a 09  itch -- $pos {..
ef70: 09 31 20 7b 0a 09 09 09 72 65 74 75 72 6e 20 5b  .1 {....return [
ef80: 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 6c 69  DisplayHints <li
ef90: 73 74 3e 5d 0a 09 09 7d 0a 09 7d 0a 09 72 65 74  st>]...}..}..ret
efa0: 75 72 6e 20 22 22 0a 7d 0a 0a 70 72 6f 63 20 63  urn "".}..proc c
efb0: 6f 6d 70 6c 65 74 65 28 6c 6f 61 64 29 20 7b 74  omplete(load) {t
efc0: 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69  ext start end li
efd0: 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73  ne pos mod} {..s
efe0: 77 69 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a  witch -- $pos {.
eff0: 09 09 31 20 7b 0a 09 09 09 72 65 74 75 72 6e 20  ..1 {....return 
f000: 22 22 3b 20 23 20 66 69 6c 65 6e 61 6d 65 0a 09  ""; # filename..
f010: 09 7d 0a 09 09 32 20 7b 0a 09 09 09 69 66 20 7b  .}...2 {....if {
f020: 21 5b 6c 6c 65 6e 67 74 68 20 24 7b 6d 6f 64 7d  ![llength ${mod}
f030: 5d 7d 20 7b 0a 09 09 09 09 72 65 74 75 72 6e 20  ]} {.....return 
f040: 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3f 70  [DisplayHints ?p
f050: 61 63 6b 61 67 65 4e 61 6d 65 3f 5d 0a 09 09 09  ackageName?]....
f060: 7d 0a 09 09 7d 0a 09 09 33 20 7b 0a 09 09 09 69  }...}...3 {....i
f070: 66 20 7b 21 5b 6c 6c 65 6e 67 74 68 20 24 7b 6d  f {![llength ${m
f080: 6f 64 7d 5d 7d 20 7b 0a 09 09 09 09 72 65 74 75  od}]} {.....retu
f090: 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
f0a0: 20 3f 69 6e 74 65 72 70 3f 5d 0a 09 09 09 7d 0a   ?interp?]....}.
f0b0: 09 09 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22  ..}..}..return "
f0c0: 22 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65  ".}..proc comple
f0d0: 74 65 28 6c 72 61 6e 67 65 29 20 7b 74 65 78 74  te(lrange) {text
f0e0: 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20   start end line 
f0f0: 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73 77 69 74  pos mod} {..swit
f100: 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a 09 09 31  ch -- $pos {...1
f110: 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
f120: 61 79 48 69 6e 74 73 20 3c 6c 69 73 74 3e 5d 20  ayHints <list>] 
f130: 7d 0a 09 09 32 20 7b 20 72 65 74 75 72 6e 20 5b  }...2 { return [
f140: 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 66 69  DisplayHints <fi
f150: 72 73 74 3e 5d 20 7d 0a 09 09 33 20 7b 20 72 65  rst>] }...3 { re
f160: 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
f170: 74 73 20 3c 6c 61 73 74 3e 5d 20 7d 0a 09 7d 0a  ts <last>] }..}.
f180: 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a 0a 70 72  .return "".}..pr
f190: 6f 63 20 63 6f 6d 70 6c 65 74 65 28 6c 72 65 70  oc complete(lrep
f1a0: 6c 61 63 65 29 20 7b 74 65 78 74 20 73 74 61 72  lace) {text star
f1b0: 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d  t end line pos m
f1c0: 6f 64 7d 20 7b 0a 09 73 77 69 74 63 68 20 2d 2d  od} {..switch --
f1d0: 20 24 70 6f 73 20 7b 0a 09 09 31 20 7b 20 72 65   $pos {...1 { re
f1e0: 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
f1f0: 74 73 20 3c 6c 69 73 74 3e 5d 20 7d 0a 09 09 32  ts <list>] }...2
f200: 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
f210: 61 79 48 69 6e 74 73 20 3c 66 69 72 73 74 3e 5d  ayHints <first>]
f220: 20 7d 0a 09 09 33 20 7b 20 72 65 74 75 72 6e 20   }...3 { return 
f230: 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 6c  [DisplayHints <l
f240: 61 73 74 3e 5d 20 7d 0a 09 09 64 65 66 61 75 6c  ast>] }...defaul
f250: 74 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70  t { return [Disp
f260: 6c 61 79 48 69 6e 74 73 20 3f 65 6c 65 6d 65 6e  layHints ?elemen
f270: 74 3f 5d 20 7d 0a 09 7d 0a 09 72 65 74 75 72 6e  t?] }..}..return
f280: 20 22 22 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70   "".}..proc comp
f290: 6c 65 74 65 28 6c 73 65 61 72 63 68 29 20 7b 74  lete(lsearch) {t
f2a0: 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69  ext start end li
f2b0: 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73  ne pos mod} {..s
f2c0: 65 74 20 6f 70 74 69 6f 6e 73 20 7b 2d 65 78 61  et options {-exa
f2d0: 63 74 20 2d 67 6c 6f 62 20 2d 72 65 67 65 78 70  ct -glob -regexp
f2e0: 7d 0a 09 73 77 69 74 63 68 20 2d 2d 20 24 70 6f  }..switch -- $po
f2f0: 73 20 7b 0a 09 09 31 20 7b 0a 09 09 09 72 65 74  s {...1 {....ret
f300: 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f  urn [CompleteFro
f310: 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 22 24  mList ${text} "$
f320: 6f 70 74 69 6f 6e 73 20 3c 6c 69 73 74 3e 22 5d  options <list>"]
f330: 0a 09 09 7d 0a 09 09 32 20 2d 0a 09 09 33 20 2d  ...}...2 -...3 -
f340: 0a 09 09 34 20 7b 0a 09 09 09 73 65 74 20 73 75  ...4 {....set su
f350: 62 20 5b 4c 69 6e 64 65 78 20 24 6c 69 6e 65 20  b [Lindex $line 
f360: 31 5d 0a 09 09 09 69 66 20 7b 2d 31 20 21 3d 20  1]....if {-1 != 
f370: 5b 6c 73 65 61 72 63 68 20 24 6f 70 74 69 6f 6e  [lsearch $option
f380: 73 20 24 73 75 62 5d 7d 20 7b 0a 09 09 09 09 69  s $sub]} {.....i
f390: 6e 63 72 20 70 6f 73 20 2d 31 0a 09 09 09 7d 0a  ncr pos -1....}.
f3a0: 09 09 09 73 77 69 74 63 68 20 2d 2d 20 24 70 6f  ...switch -- $po
f3b0: 73 20 7b 0a 09 09 09 09 31 20 7b 20 72 65 74 75  s {.....1 { retu
f3c0: 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
f3d0: 20 3c 6c 69 73 74 3e 5d 20 7d 0a 09 09 09 09 32   <list>] }.....2
f3e0: 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
f3f0: 61 79 48 69 6e 74 73 20 3c 70 61 74 74 65 72 6e  ayHints <pattern
f400: 3e 5d 20 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 7d  >] }....}...}..}
f410: 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a 0a 70  ..return "".}..p
f420: 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 6c 73 6f  roc complete(lso
f430: 72 74 29 20 7b 74 65 78 74 20 73 74 61 72 74 20  rt) {text start 
f440: 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64  end line pos mod
f450: 7d 20 7b 0a 09 73 65 74 20 6f 70 74 69 6f 6e 73  } {..set options
f460: 20 5b 52 65 6d 6f 76 65 55 73 65 64 4f 70 74 69   [RemoveUsedOpti
f470: 6f 6e 73 20 24 7b 6c 69 6e 65 7d 20 7b 0a 09 09  ons ${line} {...
f480: 2d 61 73 63 69 69 20 2d 64 69 63 74 69 6f 6e 61  -ascii -dictiona
f490: 72 79 20 2d 69 6e 74 65 67 65 72 20 2d 72 65 61  ry -integer -rea
f4a0: 6c 20 2d 63 6f 6d 6d 61 6e 64 0a 09 09 2d 69 6e  l -command...-in
f4b0: 63 72 65 61 73 69 6e 67 20 2d 64 65 63 72 65 61  creasing -decrea
f4c0: 73 69 6e 67 20 2d 69 6e 64 65 78 20 3c 6c 69 73  sing -index <lis
f4d0: 74 3e 0a 09 7d 5d 0a 09 73 77 69 74 63 68 20 2d  t>..}]..switch -
f4e0: 2d 20 24 70 6f 73 20 7b 0a 09 09 31 20 7b 20 72  - $pos {...1 { r
f4f0: 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46  eturn [CompleteF
f500: 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20  romList ${text} 
f510: 24 7b 6f 70 74 69 6f 6e 73 7d 5d 20 7d 0a 09 09  ${options}] }...
f520: 64 65 66 61 75 6c 74 20 7b 0a 09 09 09 73 77 69  default {....swi
f530: 74 63 68 20 2d 2d 20 5b 50 72 65 76 69 6f 75 73  tch -- [Previous
f540: 57 6f 72 64 20 24 7b 73 74 61 72 74 7d 20 24 7b  Word ${start} ${
f550: 6c 69 6e 65 7d 5d 20 7b 0a 09 09 09 09 2d 63 6f  line}] {.....-co
f560: 6d 6d 61 6e 64 20 7b 0a 09 09 09 09 09 72 65 74  mmand {......ret
f570: 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f  urn [CompleteFro
f580: 6d 4c 69 73 74 20 24 74 65 78 74 20 5b 43 6f 6d  mList $text [Com
f590: 6d 61 6e 64 43 6f 6d 70 6c 65 74 69 6f 6e 20 24  mandCompletion $
f5a0: 74 65 78 74 5d 5d 0a 09 09 09 09 7d 0a 09 09 09  text]].....}....
f5b0: 09 2d 69 6e 64 65 78 20 7b 20 72 65 74 75 72 6e  .-index { return
f5c0: 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c   [DisplayHints <
f5d0: 69 6e 64 65 78 3e 5d 20 7d 0a 09 09 09 09 64 65  index>] }.....de
f5e0: 66 61 75 6c 74 20 7b 20 72 65 74 75 72 6e 20 5b  fault { return [
f5f0: 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74  CompleteFromList
f600: 20 24 7b 74 65 78 74 7d 20 24 7b 6f 70 74 69 6f   ${text} ${optio
f610: 6e 73 7d 5d 20 7d 0a 09 09 09 7d 0a 09 09 7d 0a  ns}] }....}...}.
f620: 09 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a  .}..return "".}.
f630: 0a 23 20 2d 2d 2d 20 4d 53 47 43 41 54 20 50 41  .# --- MSGCAT PA
f640: 43 4b 41 47 45 20 2d 2d 2d 0a 0a 23 20 63 72 65  CKAGE ---..# cre
f650: 61 74 65 20 61 20 6d 73 67 63 61 74 20 6e 61 6d  ate a msgcat nam
f660: 65 73 70 61 63 65 20 69 6e 73 69 64 65 0a 23 20  espace inside.# 
f670: 74 63 6c 72 65 61 64 6c 69 6e 65 20 61 6e 64 20  tclreadline and 
f680: 69 6d 70 6f 72 74 20 73 6f 6d 65 20 63 6f 6d 6d  import some comm
f690: 61 6e 64 73 2e 0a 23 0a 6e 61 6d 65 73 70 61 63  ands..#.namespac
f6a0: 65 20 65 76 61 6c 20 6d 73 67 63 61 74 20 7b 0a  e eval msgcat {.
f6b0: 09 63 61 74 63 68 20 7b 6e 61 6d 65 73 70 61 63  .catch {namespac
f6c0: 65 20 69 6d 70 6f 72 74 20 3a 3a 74 63 6c 72 65  e import ::tclre
f6d0: 61 64 6c 69 6e 65 3a 3a 44 69 73 70 6c 61 79 48  adline::DisplayH
f6e0: 69 6e 74 73 7d 0a 7d 0a 0a 70 72 6f 63 20 6d 73  ints}.}..proc ms
f6f0: 67 63 61 74 3a 3a 63 6f 6d 70 6c 65 74 65 28 6d  gcat::complete(m
f700: 63 29 20 7b 74 65 78 74 20 73 74 61 72 74 20 65  c) {text start e
f710: 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d  nd line pos mod}
f720: 20 7b 0a 09 73 77 69 74 63 68 20 2d 2d 20 24 70   {..switch -- $p
f730: 6f 73 20 7b 0a 09 09 31 20 7b 20 72 65 74 75 72  os {...1 { retur
f740: 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
f750: 3c 73 72 63 2d 73 74 72 69 6e 67 3e 5d 20 7d 0a  <src-string>] }.
f760: 09 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a  .}..return "".}.
f770: 0a 70 72 6f 63 20 6d 73 67 63 61 74 3a 3a 63 6f  .proc msgcat::co
f780: 6d 70 6c 65 74 65 28 6d 63 6c 6f 63 61 6c 65 29  mplete(mclocale)
f790: 20 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64   {text start end
f7a0: 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b   line pos mod} {
f7b0: 0a 09 73 77 69 74 63 68 20 2d 2d 20 24 70 6f 73  ..switch -- $pos
f7c0: 20 7b 0a 09 09 31 20 7b 20 72 65 74 75 72 6e 20   {...1 { return 
f7d0: 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3f 6e  [DisplayHints ?n
f7e0: 65 77 4c 6f 63 61 6c 65 3f 5d 20 7d 0a 09 7d 0a  ewLocale?] }..}.
f7f0: 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a 0a 23 20  .return "".}..# 
f800: 70 72 6f 63 20 6d 73 67 63 61 74 3a 3a 63 6f 6d  proc msgcat::com
f810: 70 6c 65 74 65 28 6d 63 70 72 65 66 65 72 65 6e  plete(mcpreferen
f820: 63 65 73 29 20 7b 74 65 78 74 20 73 74 61 72 74  ces) {text start
f830: 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f   end line pos mo
f840: 64 7d 20 7b 0a 23 20 7d 0a 0a 70 72 6f 63 20 6d  d} {.# }..proc m
f850: 73 67 63 61 74 3a 3a 63 6f 6d 70 6c 65 74 65 28  sgcat::complete(
f860: 6d 63 6c 6f 61 64 29 20 7b 74 65 78 74 20 73 74  mcload) {text st
f870: 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73  art end line pos
f880: 20 6d 6f 64 7d 20 7b 0a 09 73 77 69 74 63 68 20   mod} {..switch 
f890: 2d 2d 20 24 70 6f 73 20 7b 0a 09 09 31 20 7b 20  -- $pos {...1 { 
f8a0: 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
f8b0: 69 6e 74 73 20 3c 64 69 72 6e 61 6d 65 3e 5d 20  ints <dirname>] 
f8c0: 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a  }..}..return "".
f8d0: 7d 0a 0a 70 72 6f 63 20 6d 73 67 63 61 74 3a 3a  }..proc msgcat::
f8e0: 63 6f 6d 70 6c 65 74 65 28 6d 63 73 65 74 29 20  complete(mcset) 
f8f0: 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20  {text start end 
f900: 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a  line pos mod} {.
f910: 09 73 77 69 74 63 68 20 2d 2d 20 24 70 6f 73 20  .switch -- $pos 
f920: 7b 0a 09 09 31 20 7b 20 72 65 74 75 72 6e 20 5b  {...1 { return [
f930: 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 6c 6f  DisplayHints <lo
f940: 63 61 6c 65 3e 5d 20 7d 0a 09 09 32 20 7b 20 72  cale>] }...2 { r
f950: 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
f960: 6e 74 73 20 3c 73 72 63 2d 73 74 72 69 6e 67 3e  nts <src-string>
f970: 5d 20 7d 0a 09 09 33 20 7b 20 72 65 74 75 72 6e  ] }...3 { return
f980: 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3f   [DisplayHints ?
f990: 74 72 61 6e 73 6c 61 74 65 2d 73 74 72 69 6e 67  translate-string
f9a0: 3f 5d 20 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20  ?] }..}..return 
f9b0: 22 22 0a 7d 0a 0a 70 72 6f 63 20 6d 73 67 63 61  "".}..proc msgca
f9c0: 74 3a 3a 63 6f 6d 70 6c 65 74 65 28 6d 63 75 6e  t::complete(mcun
f9d0: 6b 6e 6f 77 6e 29 20 7b 74 65 78 74 20 73 74 61  known) {text sta
f9e0: 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20  rt end line pos 
f9f0: 6d 6f 64 7d 20 7b 0a 09 73 77 69 74 63 68 20 2d  mod} {..switch -
fa00: 2d 20 24 70 6f 73 20 7b 0a 09 09 31 20 7b 20 72  - $pos {...1 { r
fa10: 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
fa20: 6e 74 73 20 3c 6c 6f 63 61 6c 65 3e 5d 20 7d 0a  nts <locale>] }.
fa30: 09 09 32 20 7b 20 72 65 74 75 72 6e 20 5b 44 69  ..2 { return [Di
fa40: 73 70 6c 61 79 48 69 6e 74 73 20 3c 73 72 63 2d  splayHints <src-
fa50: 73 74 72 69 6e 67 3e 5d 20 7d 0a 09 7d 0a 09 72  string>] }..}..r
fa60: 65 74 75 72 6e 20 22 22 0a 7d 0a 0a 23 20 2d 2d  eturn "".}..# --
fa70: 2d 20 45 4e 44 20 4f 46 20 4d 53 47 43 41 54 20  - END OF MSGCAT 
fa80: 50 41 43 4b 41 47 45 20 2d 2d 2d 0a 0a 23 20 54  PACKAGE ---..# T
fa90: 4f 44 4f 20 69 6d 70 6f 72 74 20 21 20 2d 66 6f  ODO import ! -fo
faa0: 72 63 65 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74  rce.proc complet
fab0: 65 28 6e 61 6d 65 73 70 61 63 65 29 20 7b 74 65  e(namespace) {te
fac0: 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e  xt start end lin
fad0: 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 23 20  e pos mod} {..# 
fae0: 54 4f 44 4f 20 64 6f 73 6e 27 74 20 77 6f 72 6b  TODO dosn't work
faf0: 20 3f 3f 3f 0a 09 73 65 74 20 73 70 61 63 65 5f   ???..set space_
fb00: 6d 61 74 63 68 65 73 20 5b 6e 61 6d 65 73 70 61  matches [namespa
fb10: 63 65 20 63 68 69 6c 64 72 65 6e 20 3a 3a 20 5b  ce children :: [
fb20: 73 74 72 69 6e 67 20 74 72 69 6d 20 24 7b 6d 6f  string trim ${mo
fb30: 64 7d 2a 5d 5d 0a 09 23 20 70 75 74 73 20 5c 6e  d}*]]..# puts \n
fb40: 73 70 61 63 65 5f 6d 61 74 63 68 65 73 3d 7c 24  space_matches=|$
fb50: 7b 73 70 61 63 65 5f 6d 61 74 63 68 65 73 7d 7c  {space_matches}|
fb60: 0a 09 73 65 74 20 63 6d 64 20 5b 4c 69 6e 64 65  ..set cmd [Linde
fb70: 78 20 24 6c 69 6e 65 20 31 5d 0a 09 73 77 69 74  x $line 1]..swit
fb80: 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a 09 09 31  ch -- $pos {...1
fb90: 20 7b 0a 09 09 09 73 65 74 20 63 6d 64 73 20 7b   {....set cmds {
fba0: 0a 09 09 09 09 63 68 69 6c 64 72 65 6e 20 63 6f  .....children co
fbb0: 64 65 20 63 75 72 72 65 6e 74 20 64 65 6c 65 74  de current delet
fbc0: 65 20 65 76 61 6c 20 65 78 70 6f 72 74 20 66 6f  e eval export fo
fbd0: 72 67 65 74 0a 09 09 09 09 69 6d 70 6f 72 74 20  rget.....import 
fbe0: 69 6e 73 63 6f 70 65 20 6f 72 69 67 69 6e 20 70  inscope origin p
fbf0: 61 72 65 6e 74 20 71 75 61 6c 69 66 69 65 72 73  arent qualifiers
fc00: 20 74 61 69 6c 20 77 68 69 63 68 7d 0a 09 09 09   tail which}....
fc10: 72 65 74 75 72 6e 20 5b 54 72 79 46 72 6f 6d 4c  return [TryFromL
fc20: 69 73 74 20 24 74 65 78 74 20 24 63 6d 64 73 5d  ist $text $cmds]
fc30: 0a 09 09 7d 0a 09 09 32 20 7b 0a 09 09 09 73 77  ...}...2 {....sw
fc40: 69 74 63 68 20 2d 2d 20 24 63 6d 64 20 7b 0a 09  itch -- $cmd {..
fc50: 09 09 09 63 68 69 6c 64 72 65 6e 20 2d 0a 09 09  ...children -...
fc60: 09 09 64 65 6c 65 74 65 20 2d 0a 09 09 09 09 65  ..delete -.....e
fc70: 76 61 6c 20 2d 0a 09 09 09 09 69 6e 73 63 6f 70  val -.....inscop
fc80: 65 20 2d 0a 09 09 09 09 66 6f 72 67 65 74 20 2d  e -.....forget -
fc90: 0a 09 09 09 09 70 61 72 65 6e 74 20 2d 0a 09 09  .....parent -...
fca0: 09 09 71 75 61 6c 69 66 69 65 72 73 20 2d 0a 09  ..qualifiers -..
fcb0: 09 09 09 74 61 69 6c 20 7b 0a 09 09 09 09 09 72  ...tail {......r
fcc0: 65 67 73 75 62 20 7b 5e 28 5b 5e 3a 5d 29 7d 20  egsub {^([^:])} 
fcd0: 24 7b 6d 6f 64 7d 20 7b 3a 3a 5c 31 7d 20 6d 6f  ${mod} {::\1} mo
fce0: 64 3b 20 23 20 66 75 6c 6c 20 71 75 61 6c 2e 20  d; # full qual. 
fcf0: 6e 61 6d 65 0a 09 09 09 09 09 72 65 74 75 72 6e  name......return
fd00: 20 5b 54 72 79 46 72 6f 6d 4c 69 73 74 20 24 7b   [TryFromList ${
fd10: 6d 6f 64 7d 20 24 73 70 61 63 65 5f 6d 61 74 63  mod} $space_matc
fd20: 68 65 73 5d 0a 09 09 09 09 7d 0a 09 09 09 09 63  hes].....}.....c
fd30: 6f 64 65 20 7b 20 72 65 74 75 72 6e 20 5b 44 69  ode { return [Di
fd40: 73 70 6c 61 79 48 69 6e 74 73 20 3c 73 63 72 69  splayHints <scri
fd50: 70 74 3e 20 5d 20 7d 0a 09 09 09 09 63 75 72 72  pt> ] }.....curr
fd60: 65 6e 74 20 7b 7d 0a 09 09 09 09 65 78 70 6f 72  ent {}.....expor
fd70: 74 20 7b 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70  t { return [Comp
fd80: 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74  leteFromList ${t
fd90: 65 78 74 7d 20 7b 2d 63 6c 65 61 72 20 3f 70 61  ext} {-clear ?pa
fda0: 74 74 65 72 6e 3f 7d 5d 20 7d 0a 09 09 09 09 69  ttern?}] }.....i
fdb0: 6d 70 6f 72 74 20 7b 0a 09 09 09 09 09 69 66 20  mport {......if 
fdc0: 7b 22 2d 22 20 21 3d 20 5b 73 74 72 69 6e 67 20  {"-" != [string 
fdd0: 69 6e 64 65 78 20 24 7b 6d 6f 64 7d 20 30 5d 7d  index ${mod} 0]}
fde0: 20 7b 0a 09 09 09 09 09 09 72 65 67 73 75 62 20   {.......regsub 
fdf0: 7b 5e 28 5b 5e 3a 5d 29 7d 20 24 7b 6d 6f 64 7d  {^([^:])} ${mod}
fe00: 20 7b 3a 3a 5c 31 7d 20 6d 6f 64 3b 20 23 20 66   {::\1} mod; # f
fe10: 75 6c 6c 20 71 75 61 6c 2e 20 6e 61 6d 65 0a 09  ull qual. name..
fe20: 09 09 09 09 7d 0a 09 09 09 09 09 72 65 74 75 72  ....}......retur
fe30: 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c  n [CompleteFromL
fe40: 69 73 74 20 24 7b 6d 6f 64 7d 20 22 2d 66 6f 72  ist ${mod} "-for
fe50: 63 65 20 24 73 70 61 63 65 5f 6d 61 74 63 68 65  ce $space_matche
fe60: 73 22 5d 0a 09 09 09 09 7d 0a 09 09 09 09 6f 72  s"].....}.....or
fe70: 69 67 69 6e 20 7b 20 72 65 74 75 72 6e 20 5b 44  igin { return [D
fe80: 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 63 6f 6d  isplayHints <com
fe90: 6d 61 6e 64 3e 5d 20 7d 0a 09 09 09 09 23 20 71  mand>] }.....# q
fea0: 75 61 6c 69 66 69 65 72 73 20 2d 0a 09 09 09 09  ualifiers -.....
feb0: 23 20 74 61 69 6c 20 7b 20 72 65 74 75 72 6e 20  # tail { return 
fec0: 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 73  [DisplayHints <s
fed0: 74 72 69 6e 67 3e 5d 20 7d 0a 09 09 09 09 77 68  tring>] }.....wh
fee0: 69 63 68 20 7b 20 72 65 74 75 72 6e 20 5b 43 6f  ich { return [Co
fef0: 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24  mpleteFromList $
ff00: 7b 6d 6f 64 7d 20 7b 0a 09 09 09 09 09 2d 63 6f  {mod} {......-co
ff10: 6d 6d 61 6e 64 20 2d 76 61 72 69 61 62 6c 65 20  mmand -variable 
ff20: 3c 6e 61 6d 65 3e 7d 5d 20 7d 0a 09 09 09 7d 0a  <name>}] }....}.
ff30: 09 09 7d 0a 09 09 33 20 7b 0a 09 09 09 73 77 69  ..}...3 {....swi
ff40: 74 63 68 20 2d 2d 20 24 63 6d 64 20 7b 0a 09 09  tch -- $cmd {...
ff50: 09 09 63 68 69 6c 64 72 65 6e 20 2d 0a 09 09 09  ..children -....
ff60: 09 65 78 70 6f 72 74 20 2d 0a 09 09 09 09 66 6f  .export -.....fo
ff70: 72 67 65 74 20 2d 0a 09 09 09 09 69 6d 70 6f 72  rget -.....impor
ff80: 74 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70  t { return [Disp
ff90: 6c 61 79 48 69 6e 74 73 20 3f 70 61 74 74 65 72  layHints ?patter
ffa0: 6e 3f 5d 20 7d 0a 09 09 09 09 64 65 6c 65 74 65  n?] }.....delete
ffb0: 20 7b 20 72 65 74 75 72 6e 20 5b 54 72 79 46 72   { return [TryFr
ffc0: 6f 6d 4c 69 73 74 20 24 7b 6d 6f 64 7d 20 24 73  omList ${mod} $s
ffd0: 70 61 63 65 5f 6d 61 74 63 68 65 73 5d 20 7d 0a  pace_matches] }.
ffe0: 09 09 09 09 65 76 61 6c 20 2d 0a 09 09 09 09 69  ....eval -.....i
fff0: 6e 73 63 6f 70 65 20 7b 0a 09 09 09 09 09 72 65  nscope {......re
10000 74 75 72 6e 20 5b 42 72 61 63 65 4f 72 43 6f 6d  turn [BraceOrCom
10010 6d 61 6e 64 20 5c 0a 09 09 09 09 09 24 74 65 78  mand \......$tex
10020 74 20 24 73 74 61 72 74 20 24 65 6e 64 20 24 6c  t $start $end $l
10030 69 6e 65 20 24 70 6f 73 20 24 6d 6f 64 5d 0a 09  ine $pos $mod]..
10040 09 09 09 7d 0a 09 09 09 09 77 68 69 63 68 20 7b  ...}.....which {
10050 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74   return [Complet
10060 65 46 72 6f 6d 4c 69 73 74 20 24 7b 6d 6f 64 7d  eFromList ${mod}
10070 20 7b 2d 76 61 72 69 61 62 6c 65 20 3c 6e 61 6d   {-variable <nam
10080 65 3e 7d 5d 20 7d 0a 09 09 09 7d 0a 09 09 7d 0a  e>}] }....}...}.
10090 09 09 34 20 7b 0a 09 09 09 73 77 69 74 63 68 20  ..4 {....switch 
100a0 2d 2d 20 24 63 6d 64 20 7b 0a 09 09 09 09 65 78  -- $cmd {.....ex
100b0 70 6f 72 74 20 2d 0a 09 09 09 09 66 6f 72 67 65  port -.....forge
100c0 74 20 2d 0a 09 09 09 09 69 6d 70 6f 72 74 20 7b  t -.....import {
100d0 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
100e0 48 69 6e 74 73 20 3f 70 61 74 74 65 72 6e 3f 5d  Hints ?pattern?]
100f0 20 7d 0a 09 09 09 09 64 65 6c 65 74 65 20 7b 20   }.....delete { 
10100 72 65 74 75 72 6e 20 5b 54 72 79 46 72 6f 6d 4c  return [TryFromL
10110 69 73 74 20 24 7b 6d 6f 64 7d 20 24 73 70 61 63  ist ${mod} $spac
10120 65 5f 6d 61 74 63 68 65 73 5d 20 7d 0a 09 09 09  e_matches] }....
10130 09 65 76 61 6c 20 2d 0a 09 09 09 09 69 6e 73 63  .eval -.....insc
10140 6f 70 65 20 7b 20 72 65 74 75 72 6e 20 5b 44 69  ope { return [Di
10150 73 70 6c 61 79 48 69 6e 74 73 20 3f 61 72 67 3f  splayHints ?arg?
10160 5d 20 7d 0a 09 09 09 09 77 68 69 63 68 20 7b 20  ] }.....which { 
10170 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65  return [Complete
10180 46 72 6f 6d 4c 69 73 74 20 24 7b 6d 6f 64 7d 20  FromList ${mod} 
10190 7b 3c 6e 61 6d 65 3e 7d 5d 20 7d 0a 09 09 09 7d  {<name>}] }....}
101a0 0a 09 09 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20  ...}..}..return 
101b0 22 22 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c  "".}..proc compl
101c0 65 74 65 28 6f 70 65 6e 29 20 7b 74 65 78 74 20  ete(open) {text 
101d0 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70  start end line p
101e0 6f 73 20 6d 6f 64 7d 20 7b 0a 09 09 23 20 32 20  os mod} {...# 2 
101f0 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
10200 79 48 69 6e 74 73 20 3f 61 63 63 65 73 73 3f 5d  yHints ?access?]
10210 20 7d 0a 09 73 77 69 74 63 68 20 2d 2d 20 24 70   }..switch -- $p
10220 6f 73 20 7b 0a 09 09 32 20 7b 0a 09 09 09 73 65  os {...2 {....se
10230 74 20 61 63 63 65 73 73 20 7b 72 20 72 2b 20 77  t access {r r+ w
10240 20 77 2b 20 61 20 61 2b 20 0a 09 09 09 09 52 44   w+ a a+ .....RD
10250 4f 4e 4c 59 20 57 52 4f 4e 4c 59 20 52 44 57 52  ONLY WRONLY RDWR
10260 20 41 50 50 45 4e 44 20 43 52 45 41 54 20 45 58   APPEND CREAT EX
10270 43 4c 20 4e 4f 43 54 54 59 20 4e 4f 4e 42 4c 4f  CL NOCTTY NONBLO
10280 43 4b 20 54 52 55 4e 43 7d 0a 09 09 09 72 65 74  CK TRUNC}....ret
10290 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f  urn [CompleteFro
102a0 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 24 7b  mList ${text} ${
102b0 61 63 63 65 73 73 7d 5d 0a 09 09 7d 0a 09 09 33  access}]...}...3
102c0 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
102d0 61 79 48 69 6e 74 73 20 3f 70 65 72 6d 69 73 73  ayHints ?permiss
102e0 69 6f 6e 73 3f 5d 20 7d 0a 09 7d 0a 09 72 65 74  ions?] }..}..ret
102f0 75 72 6e 20 22 22 0a 7d 0a 0a 70 72 6f 63 20 63  urn "".}..proc c
10300 6f 6d 70 6c 65 74 65 28 70 61 63 6b 61 67 65 29  omplete(package)
10310 20 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64   {text start end
10320 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b   line pos mod} {
10330 0a 09 73 65 74 20 63 6d 64 20 5b 4c 69 6e 64 65  ..set cmd [Linde
10340 78 20 24 6c 69 6e 65 20 31 5d 0a 09 73 77 69 74  x $line 1]..swit
10350 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a 09 09 31  ch -- $pos {...1
10360 20 7b 0a 09 09 09 73 65 74 20 63 6d 64 73 20 7b   {....set cmds {
10370 0a 09 09 09 09 66 6f 72 67 65 74 20 69 66 6e 65  .....forget ifne
10380 65 64 65 64 20 6e 61 6d 65 73 20 70 72 65 73 65  eded names prese
10390 6e 74 20 70 72 6f 76 69 64 65 20 72 65 71 75 69  nt provide requi
103a0 72 65 0a 09 09 09 09 75 6e 6b 6e 6f 77 6e 20 76  re.....unknown v
103b0 63 6f 6d 70 61 72 65 20 76 65 72 73 69 6f 6e 73  compare versions
103c0 20 76 73 61 74 69 73 66 69 65 73 7d 0a 09 09 09   vsatisfies}....
103d0 72 65 74 75 72 6e 20 5b 54 72 79 46 72 6f 6d 4c  return [TryFromL
103e0 69 73 74 20 24 74 65 78 74 20 24 63 6d 64 73 5d  ist $text $cmds]
103f0 0a 09 09 7d 0a 09 09 32 20 7b 0a 09 09 09 73 77  ...}...2 {....sw
10400 69 74 63 68 20 2d 2d 20 24 7b 63 6d 64 7d 20 7b  itch -- ${cmd} {
10410 0a 09 09 09 09 66 6f 72 67 65 74 20 2d 0a 09 09  .....forget -...
10420 09 09 69 66 6e 65 65 64 65 64 20 2d 0a 09 09 09  ..ifneeded -....
10430 09 70 72 6f 76 69 64 65 20 2d 0a 09 09 09 09 76  .provide -.....v
10440 65 72 73 69 6f 6e 73 20 7b 20 72 65 74 75 72 6e  ersions { return
10450 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69   [CompleteFromLi
10460 73 74 20 24 7b 6d 6f 64 7d 20 5b 70 61 63 6b 61  st ${mod} [packa
10470 67 65 20 6e 61 6d 65 73 5d 5d 20 7d 0a 09 09 09  ge names]] }....
10480 09 70 72 65 73 65 6e 74 20 2d 0a 09 09 09 09 72  .present -.....r
10490 65 71 75 69 72 65 20 7b 0a 09 09 09 09 09 72 65  equire {......re
104a0 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72  turn [CompleteFr
104b0 6f 6d 4c 69 73 74 20 24 7b 6d 6f 64 7d 20 22 2d  omList ${mod} "-
104c0 65 78 61 63 74 20 5b 70 61 63 6b 61 67 65 20 6e  exact [package n
104d0 61 6d 65 73 5d 22 5d 20 7d 0a 09 09 09 09 6e 61  ames]"] }.....na
104e0 6d 65 73 20 7b 7d 0a 09 09 09 09 75 6e 6b 6e 6f  mes {}.....unkno
104f0 77 6e 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73  wn { return [Dis
10500 70 6c 61 79 48 69 6e 74 73 20 3f 63 6f 6d 6d 61  playHints ?comma
10510 6e 64 3f 5d 20 7d 0a 09 09 09 09 76 63 6f 6d 70  nd?] }.....vcomp
10520 61 72 65 20 2d 0a 09 09 09 09 76 73 61 74 69 73  are -.....vsatis
10530 66 69 65 73 20 7b 20 72 65 74 75 72 6e 20 5b 44  fies { return [D
10540 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 76 65 72  isplayHints <ver
10550 73 69 6f 6e 31 3e 5d 20 7d 0a 09 09 09 7d 0a 09  sion1>] }....}..
10560 09 7d 0a 09 09 33 20 7b 0a 09 09 09 73 65 74 20  .}...3 {....set 
10570 76 65 72 73 69 6f 6e 73 20 22 22 0a 09 09 09 63  versions ""....c
10580 61 74 63 68 20 5b 6c 69 73 74 20 73 65 74 20 76  atch [list set v
10590 65 72 73 69 6f 6e 73 20 5b 70 61 63 6b 61 67 65  ersions [package
105a0 20 76 65 72 73 69 6f 6e 73 20 5b 4c 69 6e 64 65   versions [Linde
105b0 78 20 24 7b 6c 69 6e 65 7d 20 32 5d 5d 5d 0a 09  x ${line} 2]]]..
105c0 09 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 63 6d  ..switch -- ${cm
105d0 64 7d 20 7b 0a 09 09 09 09 66 6f 72 67 65 74 20  d} {.....forget 
105e0 7b 7d 0a 09 09 09 09 69 66 6e 65 65 64 65 64 20  {}.....ifneeded 
105f0 7b 0a 09 09 09 09 09 69 66 20 7b 22 22 20 21 3d  {......if {"" !=
10600 20 24 76 65 72 73 69 6f 6e 73 7d 20 7b 0a 09 09   $versions} {...
10610 09 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70  ....return [Comp
10620 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74  leteFromList ${t
10630 65 78 74 7d 20 24 7b 76 65 72 73 69 6f 6e 73 7d  ext} ${versions}
10640 5d 0a 09 09 09 09 09 7d 20 65 6c 73 65 20 7b 0a  ]......} else {.
10650 09 09 09 09 09 09 72 65 74 75 72 6e 20 5b 44 69  ......return [Di
10660 73 70 6c 61 79 48 69 6e 74 73 20 3c 76 65 72 73  splayHints <vers
10670 69 6f 6e 3e 5d 0a 09 09 09 09 09 7d 0a 09 09 09  ion>]......}....
10680 09 7d 0a 09 09 09 09 70 72 6f 76 69 64 65 20 7b  .}.....provide {
10690 0a 09 09 09 09 09 69 66 20 7b 22 22 20 21 3d 20  ......if {"" != 
106a0 24 7b 76 65 72 73 69 6f 6e 73 7d 7d 20 7b 0a 09  ${versions}} {..
106b0 09 09 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d  .....return [Com
106c0 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b  pleteFromList ${
106d0 74 65 78 74 7d 20 24 7b 76 65 72 73 69 6f 6e 73  text} ${versions
106e0 7d 5d 0a 09 09 09 09 09 7d 20 65 6c 73 65 20 7b  }]......} else {
106f0 0a 09 09 09 09 09 09 72 65 74 75 72 6e 20 5b 44  .......return [D
10700 69 73 70 6c 61 79 48 69 6e 74 73 20 3f 76 65 72  isplayHints ?ver
10710 73 69 6f 6e 3f 5d 0a 09 09 09 09 09 7d 0a 09 09  sion?]......}...
10720 09 09 7d 0a 09 09 09 09 76 65 72 73 69 6f 6e 73  ..}.....versions
10730 20 7b 7d 0a 09 09 09 09 70 72 65 73 65 6e 74 20   {}.....present 
10740 2d 0a 09 09 09 09 72 65 71 75 69 72 65 20 7b 0a  -.....require {.
10750 09 09 09 09 09 69 66 20 7b 22 2d 65 78 61 63 74  .....if {"-exact
10760 22 20 3d 3d 20 5b 50 72 65 76 69 6f 75 73 57 6f  " == [PreviousWo
10770 72 64 20 24 7b 73 74 61 72 74 7d 20 24 7b 6c 69  rd ${start} ${li
10780 6e 65 7d 5d 7d 20 7b 0a 09 09 09 09 09 09 72 65  ne}]} {.......re
10790 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72  turn [CompleteFr
107a0 6f 6d 4c 69 73 74 20 24 7b 6d 6f 64 7d 20 5b 70  omList ${mod} [p
107b0 61 63 6b 61 67 65 20 6e 61 6d 65 73 5d 5d 0a 09  ackage names]]..
107c0 09 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09  ....} else {....
107d0 09 09 09 69 66 20 7b 22 22 20 21 3d 20 24 7b 76  ...if {"" != ${v
107e0 65 72 73 69 6f 6e 73 7d 7d 20 7b 0a 09 09 09 09  ersions}} {.....
107f0 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c  ...return [Compl
10800 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65  eteFromList ${te
10810 78 74 7d 20 24 7b 76 65 72 73 69 6f 6e 73 7d 5d  xt} ${versions}]
10820 0a 09 09 09 09 09 09 7d 20 65 6c 73 65 20 7b 0a  .......} else {.
10830 09 09 09 09 09 09 09 72 65 74 75 72 6e 20 5b 44  .......return [D
10840 69 73 70 6c 61 79 48 69 6e 74 73 20 3f 76 65 72  isplayHints ?ver
10850 73 69 6f 6e 3f 5d 0a 09 09 09 09 09 09 7d 0a 09  sion?].......}..
10860 09 09 09 09 7d 0a 09 09 09 09 7d 0a 09 09 09 09  ....}.....}.....
10870 6e 61 6d 65 73 20 7b 7d 0a 09 09 09 09 75 6e 6b  names {}.....unk
10880 6e 6f 77 6e 20 7b 7d 0a 09 09 09 09 76 63 6f 6d  nown {}.....vcom
10890 70 61 72 65 20 2d 0a 09 09 09 09 76 73 61 74 69  pare -.....vsati
108a0 73 66 69 65 73 20 7b 20 72 65 74 75 72 6e 20 5b  sfies { return [
108b0 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 76 65  DisplayHints <ve
108c0 72 73 69 6f 6e 32 3e 5d 20 7d 0a 09 09 09 7d 0a  rsion2>] }....}.
108d0 09 09 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22  ..}..}..return "
108e0 22 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65  ".}..proc comple
108f0 74 65 28 70 69 64 29 20 7b 74 65 78 74 20 73 74  te(pid) {text st
10900 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73  art end line pos
10910 20 6d 6f 64 7d 20 7b 0a 09 73 77 69 74 63 68 20   mod} {..switch 
10920 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09 09 31 20  -- ${pos} {...1 
10930 7b 20 72 65 74 75 72 6e 20 5b 43 68 61 6e 6e 65  { return [Channe
10940 6c 49 64 20 24 7b 74 65 78 74 7d 5d 20 7d 0a 09  lId ${text}] }..
10950 7d 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65  }.}..proc comple
10960 74 65 28 70 6b 67 5f 6d 6b 49 6e 64 65 78 29 20  te(pkg_mkIndex) 
10970 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20  {text start end 
10980 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a  line pos mod} {.
10990 09 73 65 74 20 63 6d 64 73 20 5b 52 65 6d 6f 76  .set cmds [Remov
109a0 65 55 73 65 64 4f 70 74 69 6f 6e 73 20 24 7b 6c  eUsedOptions ${l
109b0 69 6e 65 7d 20 7b 2d 64 69 72 65 63 74 20 2d 6c  ine} {-direct -l
109c0 6f 61 64 20 2d 76 65 72 62 6f 73 65 20 2d 2d 20  oad -verbose -- 
109d0 3c 64 69 72 3e 7d 20 7b 2d 2d 7d 5d 0a 09 73 65  <dir>} {--}]..se
109e0 74 20 72 65 73 20 5b 73 74 72 69 6e 67 20 74 72  t res [string tr
109f0 69 6d 20 5b 54 72 79 46 72 6f 6d 4c 69 73 74 20  im [TryFromList 
10a00 24 7b 74 65 78 74 7d 20 24 7b 63 6d 64 73 7d 5d  ${text} ${cmds}]
10a10 5d 0a 09 73 65 74 20 70 72 65 76 20 5b 50 72 65  ]..set prev [Pre
10a20 76 69 6f 75 73 57 6f 72 64 20 24 7b 73 74 61 72  viousWord ${star
10a30 74 7d 20 24 7b 6c 69 6e 65 7d 5d 0a 09 69 66 20  t} ${line}]..if 
10a40 7b 22 2d 6c 6f 61 64 22 20 3d 3d 20 24 7b 70 72  {"-load" == ${pr
10a50 65 76 7d 7d 20 7b 0a 09 09 72 65 74 75 72 6e 20  ev}} {...return 
10a60 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 70  [DisplayHints <p
10a70 6b 67 50 61 74 3e 5d 0a 09 7d 20 65 6c 73 65 69  kgPat>]..} elsei
10a80 66 20 7b 22 2d 2d 22 20 3d 3d 20 24 7b 70 72 65  f {"--" == ${pre
10a90 76 7d 7d 20 7b 0a 09 09 72 65 74 75 72 6e 20 5b  v}} {...return [
10aa0 54 72 79 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65  TryFromList ${te
10ab0 78 74 7d 20 3c 64 69 72 3e 5d 0a 09 7d 0a 09 72  xt} <dir>]..}..r
10ac0 65 74 75 72 6e 20 24 7b 72 65 73 7d 0a 7d 0a 0a  eturn ${res}.}..
10ad0 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 70 72  proc complete(pr
10ae0 6f 63 29 20 7b 74 65 78 74 20 73 74 61 72 74 20  oc) {text start 
10af0 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64  end line pos mod
10b00 7d 20 7b 0a 09 73 77 69 74 63 68 20 2d 2d 20 24  } {..switch -- $
10b10 7b 70 6f 73 7d 20 7b 0a 09 09 31 20 7b 0a 09 09  {pos} {...1 {...
10b20 09 73 65 74 20 6b 6e 6f 77 6e 5f 70 72 6f 63 73  .set known_procs
10b30 20 5b 50 72 6f 63 73 4f 6e 6c 79 43 6f 6d 70 6c   [ProcsOnlyCompl
10b40 65 74 69 6f 6e 20 24 7b 74 65 78 74 7d 5d 0a 09  etion ${text}]..
10b50 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65  ..return [Comple
10b60 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78  teFromList ${tex
10b70 74 7d 20 24 7b 6b 6e 6f 77 6e 5f 70 72 6f 63 73  t} ${known_procs
10b80 7d 5d 0a 09 09 7d 0a 09 09 32 20 7b 0a 09 09 09  }]...}...2 {....
10b90 73 65 74 20 70 72 6f 63 20 5b 4c 69 6e 64 65 78  set proc [Lindex
10ba0 20 24 7b 6c 69 6e 65 7d 20 31 5d 0a 09 09 09 69   ${line} 1]....i
10bb0 66 20 7b 5b 63 61 74 63 68 20 7b 73 65 74 20 61  f {[catch {set a
10bc0 72 67 73 20 5b 75 70 6c 65 76 65 6c 20 5b 69 6e  rgs [uplevel [in
10bd0 66 6f 20 6c 65 76 65 6c 5d 20 69 6e 66 6f 20 61  fo level] info a
10be0 72 67 73 20 24 7b 70 72 6f 63 7d 5d 7d 5d 7d 20  rgs ${proc}]}]} 
10bf0 7b 0a 09 09 09 09 72 65 74 75 72 6e 20 5b 44 69  {.....return [Di
10c00 73 70 6c 61 79 48 69 6e 74 73 20 3c 61 72 67 73  splayHints <args
10c10 3e 5d 0a 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09  >]....} else {..
10c20 09 09 09 72 65 74 75 72 6e 20 5b 6c 69 73 74 20  ...return [list 
10c30 22 5c 7b 24 7b 61 72 67 73 7d 5c 7d 22 5d 0a 09  "\{${args}\}"]..
10c40 09 09 7d 0a 09 09 7d 0a 09 09 33 20 7b 0a 09 09  ..}...}...3 {...
10c50 09 69 66 20 7b 21 5b 73 74 72 69 6e 67 20 6c 65  .if {![string le
10c60 6e 67 74 68 20 5b 4c 69 6e 64 65 78 20 24 7b 6c  ngth [Lindex ${l
10c70 69 6e 65 7d 20 24 7b 70 6f 73 7d 5d 5d 7d 20 7b  ine} ${pos}]]} {
10c80 0a 09 09 09 09 72 65 74 75 72 6e 20 5b 6c 69 73  .....return [lis
10c90 74 20 5c 7b 20 7b 7d 5d 3b 20 23 20 5c 7d 0a 09  t \{ {}]; # \}..
10ca0 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09 23  ..} else {.....#
10cb0 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
10cc0 48 69 6e 74 73 20 3c 62 6f 64 79 3e 5d 0a 09 09  Hints <body>]...
10cd0 09 09 72 65 74 75 72 6e 20 5b 42 72 61 63 65 4f  ..return [BraceO
10ce0 72 43 6f 6d 6d 61 6e 64 20 5c 0a 09 09 09 09 24  rCommand \.....$
10cf0 7b 74 65 78 74 7d 20 24 7b 73 74 61 72 74 7d 20  {text} ${start} 
10d00 24 7b 65 6e 64 7d 20 24 7b 6c 69 6e 65 7d 20 24  ${end} ${line} $
10d10 7b 70 6f 73 7d 20 24 7b 6d 6f 64 7d 5d 0a 09 09  {pos} ${mod}]...
10d20 09 7d 0a 09 09 7d 0a 09 7d 0a 09 72 65 74 75 72  .}...}..}..retur
10d30 6e 20 22 22 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d  n "".}..proc com
10d40 70 6c 65 74 65 28 70 75 74 73 29 20 7b 74 65 78  plete(puts) {tex
10d50 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65  t start end line
10d60 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73 65 74   pos mod} {..set
10d70 20 63 6d 64 20 5b 4c 69 6e 64 65 78 20 24 6c 69   cmd [Lindex $li
10d80 6e 65 20 31 5d 0a 09 73 77 69 74 63 68 20 2d 2d  ne 1]..switch --
10d90 20 24 70 6f 73 20 7b 0a 09 09 31 20 7b 0a 09 09   $pos {...1 {...
10da0 09 72 65 74 75 72 6e 20 5b 4f 75 74 43 68 61 6e  .return [OutChan
10db0 6e 65 6c 49 64 20 24 7b 74 65 78 74 7d 20 22 2d  nelId ${text} "-
10dc0 6e 6f 6e 65 77 6c 69 6e 65 22 5d 0a 09 09 7d 0a  nonewline"]...}.
10dd0 09 09 32 20 7b 0a 09 09 09 73 77 69 74 63 68 20  ..2 {....switch 
10de0 2d 2d 20 24 63 6d 64 20 7b 0a 09 09 09 09 2d 6e  -- $cmd {.....-n
10df0 6f 6e 65 77 6c 69 6e 65 20 7b 20 72 65 74 75 72  onewline { retur
10e00 6e 20 5b 4f 75 74 43 68 61 6e 6e 65 6c 49 64 20  n [OutChannelId 
10e10 24 7b 74 65 78 74 7d 5d 20 7d 0a 09 09 09 09 64  ${text}] }.....d
10e20 65 66 61 75 6c 74 20 7b 20 72 65 74 75 72 6e 20  efault { return 
10e30 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 73  [DisplayHints <s
10e40 74 72 69 6e 67 3e 5d 20 7d 0a 09 09 09 7d 0a 09  tring>] }....}..
10e50 09 7d 0a 09 09 33 20 7b 0a 09 09 09 73 77 69 74  .}...3 {....swit
10e60 63 68 20 2d 2d 20 24 63 6d 64 20 7b 0a 09 09 09  ch -- $cmd {....
10e70 09 2d 6e 6f 6e 65 77 6c 69 6e 65 20 7b 20 72 65  .-nonewline { re
10e80 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
10e90 74 73 20 3c 73 74 72 69 6e 67 3e 5d 20 7d 0a 09  ts <string>] }..
10ea0 09 09 7d 0a 09 09 7d 0a 09 7d 0a 09 72 65 74 75  ..}...}..}..retu
10eb0 72 6e 20 22 22 0a 7d 0a 0a 23 20 70 72 6f 63 20  rn "".}..# proc 
10ec0 63 6f 6d 70 6c 65 74 65 28 70 77 64 29 20 7b 74  complete(pwd) {t
10ed0 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69  ext start end li
10ee0 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 23 20  ne pos mod} {.# 
10ef0 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65  }..proc complete
10f00 28 72 65 61 64 29 20 7b 74 65 78 74 20 73 74 61  (read) {text sta
10f10 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20  rt end line pos 
10f20 6d 6f 64 7d 20 7b 0a 09 73 65 74 20 63 6d 64 20  mod} {..set cmd 
10f30 5b 4c 69 6e 64 65 78 20 24 6c 69 6e 65 20 31 5d  [Lindex $line 1]
10f40 0a 09 73 77 69 74 63 68 20 2d 2d 20 24 70 6f 73  ..switch -- $pos
10f50 20 7b 0a 09 09 31 20 7b 0a 09 09 09 72 65 74 75   {...1 {....retu
10f60 72 6e 20 5b 49 6e 43 68 61 6e 6e 65 6c 49 64 20  rn [InChannelId 
10f70 24 7b 74 65 78 74 7d 20 22 2d 6e 6f 6e 65 77 6c  ${text} "-nonewl
10f80 69 6e 65 22 5d 0a 09 09 7d 0a 09 09 32 20 7b 0a  ine"]...}...2 {.
10f90 09 09 09 73 77 69 74 63 68 20 2d 2d 20 24 63 6d  ...switch -- $cm
10fa0 64 20 7b 0a 09 09 09 09 2d 6e 6f 6e 65 77 6c 69  d {.....-nonewli
10fb0 6e 65 20 7b 20 72 65 74 75 72 6e 20 5b 49 6e 43  ne { return [InC
10fc0 68 61 6e 6e 65 6c 49 64 20 24 7b 74 65 78 74 7d  hannelId ${text}
10fd0 5d 20 7d 0a 09 09 09 09 64 65 66 61 75 6c 74 20  ] }.....default 
10fe0 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
10ff0 79 48 69 6e 74 73 20 3c 6e 75 6d 43 68 61 72 73  yHints <numChars
11000 3e 5d 20 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 7d  >] }....}...}..}
11010 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a 0a 70  ..return "".}..p
11020 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 72 65 67  roc complete(reg
11030 65 78 70 29 20 7b 74 65 78 74 20 73 74 61 72 74  exp) {text start
11040 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f   end line pos mo
11050 64 7d 20 7b 0a 09 73 65 74 20 70 72 65 76 20 5b  d} {..set prev [
11060 50 72 65 76 69 6f 75 73 57 6f 72 64 20 24 7b 73  PreviousWord ${s
11070 74 61 72 74 7d 20 24 7b 6c 69 6e 65 7d 5d 0a 09  tart} ${line}]..
11080 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 7b 70  if {[llength ${p
11090 72 65 76 7d 5d 20 26 26 20 22 2d 2d 22 20 21 3d  rev}] && "--" !=
110a0 20 24 70 72 65 76 20 26 26 20 5c 0a 09 09 28 22   $prev && \...("
110b0 2d 22 20 3d 3d 20 5b 73 74 72 69 6e 67 20 69 6e  -" == [string in
110c0 64 65 78 20 24 7b 70 72 65 76 7d 20 30 5d 20 7c  dex ${prev} 0] |
110d0 7c 20 31 20 3d 3d 20 24 70 6f 73 29 7d 20 7b 0a  | 1 == $pos)} {.
110e0 09 09 73 65 74 20 63 6d 64 73 20 5b 52 65 6d 6f  ..set cmds [Remo
110f0 76 65 55 73 65 64 4f 70 74 69 6f 6e 73 20 24 7b  veUsedOptions ${
11100 6c 69 6e 65 7d 20 7b 0a 09 09 09 2d 6e 6f 63 61  line} {....-noca
11110 73 65 20 2d 69 6e 64 69 63 65 73 20 2d 65 78 70  se -indices -exp
11120 61 6e 64 65 64 20 2d 6c 69 6e 65 20 0a 09 09 09  anded -line ....
11130 2d 6c 69 6e 65 73 74 6f 70 20 2d 6c 69 6e 65 61  -linestop -linea
11140 6e 63 68 6f 72 20 2d 61 62 6f 75 74 20 3c 65 78  nchor -about <ex
11150 70 72 65 73 73 69 6f 6e 3e 20 2d 2d 7d 20 7b 2d  pression> --} {-
11160 2d 7d 5d 0a 09 09 69 66 20 7b 5b 6c 6c 65 6e 67  -}]...if {[lleng
11170 74 68 20 24 7b 63 6d 64 73 7d 5d 7d 20 7b 0a 09  th ${cmds}]} {..
11180 09 09 72 65 74 75 72 6e 20 5b 73 74 72 69 6e 67  ..return [string
11190 20 74 72 69 6d 20 5b 43 6f 6d 70 6c 65 74 65 46   trim [CompleteF
111a0 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20  romList ${text} 
111b0 24 7b 63 6d 64 73 7d 5d 5d 0a 09 09 7d 0a 09 7d  ${cmds}]]...}..}
111c0 20 65 6c 73 65 20 7b 0a 09 09 73 65 74 20 76 69   else {...set vi
111d0 72 74 75 61 6c 5f 70 6f 73 20 5b 65 78 70 72 20  rtual_pos [expr 
111e0 24 7b 70 6f 73 7d 20 2d 20 5b 46 69 72 73 74 4e  ${pos} - [FirstN
111f0 6f 6e 4f 70 74 69 6f 6e 20 24 7b 6c 69 6e 65 7d  onOption ${line}
11200 5d 5d 0a 09 09 73 77 69 74 63 68 20 2d 2d 20 24  ]]...switch -- $
11210 7b 76 69 72 74 75 61 6c 5f 70 6f 73 7d 20 7b 0a  {virtual_pos} {.
11220 09 09 09 30 20 7b 20 72 65 74 75 72 6e 20 5b 44  ...0 { return [D
11230 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 73 74 72  isplayHints <str
11240 69 6e 67 3e 5d 20 7d 0a 09 09 09 31 20 7b 20 72  ing>] }....1 { r
11250 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
11260 6e 74 73 20 3f 6d 61 74 63 68 56 61 72 3f 5d 20  nts ?matchVar?] 
11270 7d 0a 09 09 09 64 65 66 61 75 6c 74 20 7b 20 72  }....default { r
11280 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
11290 6e 74 73 20 3f 73 75 62 4d 61 74 63 68 56 61 72  nts ?subMatchVar
112a0 3f 5d 20 7d 0a 09 09 7d 0a 09 7d 0a 09 72 65 74  ?] }...}..}..ret
112b0 75 72 6e 20 22 22 0a 7d 0a 0a 23 20 70 72 6f 63  urn "".}..# proc
112c0 20 63 6f 6d 70 6c 65 74 65 28 72 65 67 65 78 70   complete(regexp
112d0 29 20 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e  ) {text start en
112e0 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20  d line pos mod} 
112f0 7b 0a 23 20 20 20 20 20 57 65 27 72 65 20 6e 6f  {.#     We're no
11300 74 20 6f 6e 20 77 69 6e 64 6f 7a 65 20 68 65 72  t on windoze her
11310 65 20 2e 2e 2e 0a 23 20 7d 0a 0a 70 72 6f 63 20  e ....# }..proc 
11320 63 6f 6d 70 6c 65 74 65 28 72 65 67 73 75 62 29  complete(regsub)
11330 20 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64   {text start end
11340 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b   line pos mod} {
11350 0a 09 73 65 74 20 70 72 65 76 20 5b 50 72 65 76  ..set prev [Prev
11360 69 6f 75 73 57 6f 72 64 20 24 7b 73 74 61 72 74  iousWord ${start
11370 7d 20 24 7b 6c 69 6e 65 7d 5d 0a 09 69 66 20 7b  } ${line}]..if {
11380 5b 6c 6c 65 6e 67 74 68 20 24 7b 70 72 65 76 7d  [llength ${prev}
11390 5d 20 26 26 20 22 2d 2d 22 20 21 3d 20 24 70 72  ] && "--" != $pr
113a0 65 76 20 26 26 20 5c 0a 09 09 28 22 2d 22 20 3d  ev && \...("-" =
113b0 3d 20 5b 73 74 72 69 6e 67 20 69 6e 64 65 78 20  = [string index 
113c0 24 7b 70 72 65 76 7d 20 30 5d 20 7c 7c 20 31 20  ${prev} 0] || 1 
113d0 3d 3d 20 24 7b 70 6f 73 7d 29 7d 20 7b 0a 09 09  == ${pos})} {...
113e0 73 65 74 20 63 6d 64 73 20 5b 52 65 6d 6f 76 65  set cmds [Remove
113f0 55 73 65 64 4f 70 74 69 6f 6e 73 20 24 7b 6c 69  UsedOptions ${li
11400 6e 65 7d 20 7b 0a 09 09 09 2d 61 6c 6c 20 2d 6e  ne} {....-all -n
11410 6f 63 61 73 65 20 2d 2d 7d 20 7b 2d 2d 7d 5d 0a  ocase --} {--}].
11420 09 09 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24  ..if {[llength $
11430 7b 63 6d 64 73 7d 5d 7d 20 7b 0a 09 09 09 72 65  {cmds}]} {....re
11440 74 75 72 6e 20 5b 73 74 72 69 6e 67 20 74 72 69  turn [string tri
11450 6d 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c  m [CompleteFromL
11460 69 73 74 20 24 7b 74 65 78 74 7d 20 24 7b 63 6d  ist ${text} ${cm
11470 64 73 7d 5d 5d 0a 09 09 7d 0a 09 7d 20 65 6c 73  ds}]]...}..} els
11480 65 20 7b 0a 09 09 73 65 74 20 76 69 72 74 75 61  e {...set virtua
11490 6c 5f 70 6f 73 20 5b 65 78 70 72 20 24 7b 70 6f  l_pos [expr ${po
114a0 73 7d 20 2d 20 5b 46 69 72 73 74 4e 6f 6e 4f 70  s} - [FirstNonOp
114b0 74 69 6f 6e 20 24 7b 6c 69 6e 65 7d 5d 5d 0a 09  tion ${line}]]..
114c0 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 76 69 72  .switch -- ${vir
114d0 74 75 61 6c 5f 70 6f 73 7d 20 7b 0a 09 09 09 30  tual_pos} {....0
114e0 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
114f0 61 79 48 69 6e 74 73 20 3c 65 78 70 72 65 73 73  ayHints <express
11500 69 6f 6e 3e 5d 20 7d 0a 09 09 09 31 20 7b 20 72  ion>] }....1 { r
11510 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
11520 6e 74 73 20 3c 73 74 72 69 6e 67 3e 5d 20 7d 0a  nts <string>] }.
11530 09 09 09 32 20 7b 20 72 65 74 75 72 6e 20 5b 44  ...2 { return [D
11540 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 73 75 62  isplayHints <sub
11550 53 70 65 63 3e 5d 20 7d 0a 09 09 09 33 20 7b 20  Spec>] }....3 { 
11560 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
11570 69 6e 74 73 20 3c 76 61 72 4e 61 6d 65 3e 5d 20  ints <varName>] 
11580 7d 0a 09 09 7d 0a 09 7d 0a 09 72 65 74 75 72 6e  }...}..}..return
11590 20 22 22 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70   "".}..proc comp
115a0 6c 65 74 65 28 72 65 6e 61 6d 65 29 20 7b 74 65  lete(rename) {te
115b0 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e  xt start end lin
115c0 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73 77  e pos mod} {..sw
115d0 69 74 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a 09  itch -- $pos {..
115e0 09 31 20 7b 0a 09 09 09 72 65 74 75 72 6e 20 5b  .1 {....return [
115f0 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74  CompleteFromList
11600 20 24 7b 74 65 78 74 7d 20 5b 43 6f 6d 6d 61 6e   ${text} [Comman
11610 64 43 6f 6d 70 6c 65 74 69 6f 6e 20 24 7b 74 65  dCompletion ${te
11620 78 74 7d 5d 5d 0a 09 09 7d 0a 09 09 32 20 7b 0a  xt}]]...}...2 {.
11630 09 09 09 72 65 74 75 72 6e 20 5b 44 69 73 70 6c  ...return [Displ
11640 61 79 48 69 6e 74 73 20 3c 6e 65 77 4e 61 6d 65  ayHints <newName
11650 3e 5d 0a 09 09 7d 0a 09 7d 0a 09 72 65 74 75 72  >]...}..}..retur
11660 6e 20 22 22 0a 7d 0a 0a 23 20 70 72 6f 63 20 63  n "".}..# proc c
11670 6f 6d 70 6c 65 74 65 28 72 65 73 6f 75 72 63 65  omplete(resource
11680 29 20 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e  ) {text start en
11690 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20  d line pos mod} 
116a0 7b 0a 23 20 20 20 20 20 54 68 69 73 20 69 73 20  {.#     This is 
116b0 6e 6f 74 20 61 20 6d 61 63 20 2e 2e 2e 0a 23 20  not a mac ....# 
116c0 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65  }..proc complete
116d0 28 72 65 74 75 72 6e 29 20 7b 74 65 78 74 20 73  (return) {text s
116e0 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f  tart end line po
116f0 73 20 6d 6f 64 7d 20 7b 0a 09 23 20 54 4f 44 4f  s mod} {..# TODO
11700 20 74 68 69 73 20 69 73 20 6e 6f 74 20 70 65 72   this is not per
11710 66 65 63 74 20 79 65 74 0a 09 73 65 74 20 63 6d  fect yet..set cm
11720 64 73 20 7b 2d 63 6f 64 65 20 2d 65 72 72 6f 72  ds {-code -error
11730 69 6e 66 6f 20 2d 65 72 72 6f 72 63 6f 64 65 20  info -errorcode 
11740 3f 73 74 72 69 6e 67 3f 7d 0a 09 73 65 74 20 72  ?string?}..set r
11750 65 73 20 5b 50 72 65 76 69 6f 75 73 57 6f 72 64  es [PreviousWord
11760 20 24 7b 73 74 61 72 74 7d 20 24 7b 6c 69 6e 65   ${start} ${line
11770 7d 5d 0a 09 73 77 69 74 63 68 20 2d 2d 20 24 7b  }]..switch -- ${
11780 72 65 73 7d 20 7b 0a 09 09 2d 65 72 72 6f 72 69  res} {...-errori
11790 6e 66 6f 20 7b 20 72 65 74 75 72 6e 20 5b 44 69  nfo { return [Di
117a0 73 70 6c 61 79 48 69 6e 74 73 20 3c 69 6e 66 6f  splayHints <info
117b0 3e 5d 20 7d 0a 09 09 2d 63 6f 64 65 20 2d 0a 09  >] }...-code -..
117c0 09 2d 65 72 72 6f 72 63 6f 64 65 20 7b 0a 09 09  .-errorcode {...
117d0 09 73 65 74 20 63 6f 64 65 73 20 7b 6f 6b 20 65  .set codes {ok e
117e0 72 72 6f 72 20 72 65 74 75 72 6e 20 62 72 65 61  rror return brea
117f0 6b 20 63 6f 6e 74 69 6e 75 65 7d 0a 09 09 09 72  k continue}....r
11800 65 74 75 72 6e 20 5b 54 72 79 46 72 6f 6d 4c 69  eturn [TryFromLi
11810 73 74 20 24 7b 6d 6f 64 7d 20 24 7b 63 6f 64 65  st ${mod} ${code
11820 73 7d 5d 0a 09 09 7d 0a 09 7d 0a 09 72 65 74 75  s}]...}..}..retu
11830 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d  rn [CompleteFrom
11840 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 5b 52 65  List ${text} [Re
11850 6d 6f 76 65 55 73 65 64 4f 70 74 69 6f 6e 73 20  moveUsedOptions 
11860 24 7b 6c 69 6e 65 7d 20 24 7b 63 6d 64 73 7d 5d  ${line} ${cmds}]
11870 5d 0a 7d 0a 0a 23 20 2d 2d 2d 20 53 41 46 45 20  ].}..# --- SAFE 
11880 50 41 43 4b 41 47 45 20 2d 2d 2d 0a 0a 23 20 63  PACKAGE ---..# c
11890 72 65 61 74 65 20 61 20 73 61 66 65 20 6e 61 6d  reate a safe nam
118a0 65 73 70 61 63 65 20 69 6e 73 69 64 65 0a 23 20  espace inside.# 
118b0 74 63 6c 72 65 61 64 6c 69 6e 65 20 61 6e 64 20  tclreadline and 
118c0 69 6d 70 6f 72 74 20 73 6f 6d 65 20 63 6f 6d 6d  import some comm
118d0 61 6e 64 73 2e 0a 23 0a 6e 61 6d 65 73 70 61 63  ands..#.namespac
118e0 65 20 65 76 61 6c 20 73 61 66 65 20 7b 0a 09 63  e eval safe {..c
118f0 61 74 63 68 20 7b 0a 09 09 6e 61 6d 65 73 70 61  atch {...namespa
11900 63 65 20 69 6d 70 6f 72 74 20 5c 0a 09 09 3a 3a  ce import \...::
11910 74 63 6c 72 65 61 64 6c 69 6e 65 3a 3a 44 69 73  tclreadline::Dis
11920 70 6c 61 79 48 69 6e 74 73 20 3a 3a 74 63 6c 72  playHints ::tclr
11930 65 61 64 6c 69 6e 65 3a 3a 50 72 65 76 69 6f 75  eadline::Previou
11940 73 57 6f 72 64 20 5c 0a 09 09 3a 3a 74 63 6c 72  sWord \...::tclr
11950 65 61 64 6c 69 6e 65 3a 3a 43 6f 6d 70 6c 65 74  eadline::Complet
11960 65 46 72 6f 6d 4c 69 73 74 20 3a 3a 74 63 6c 72  eFromList ::tclr
11970 65 61 64 6c 69 6e 65 3a 3a 43 6f 6d 6d 61 6e 64  eadline::Command
11980 43 6f 6d 70 6c 65 74 69 6f 6e 20 5c 0a 09 09 3a  Completion \...:
11990 3a 74 63 6c 72 65 61 64 6c 69 6e 65 3a 3a 52 65  :tclreadline::Re
119a0 6d 6f 76 65 55 73 65 64 4f 70 74 69 6f 6e 73 20  moveUsedOptions 
119b0 3a 3a 74 63 6c 72 65 61 64 6c 69 6e 65 3a 3a 48  ::tclreadline::H
119c0 6f 73 74 4c 69 73 74 20 5c 0a 09 09 3a 3a 74 63  ostList \...::tc
119d0 6c 72 65 61 64 6c 69 6e 65 3a 3a 43 68 61 6e 6e  lreadline::Chann
119e0 65 6c 49 64 20 3a 3a 74 63 6c 72 65 61 64 6c 69  elId ::tclreadli
119f0 6e 65 3a 3a 4c 69 6e 64 65 78 20 5c 0a 09 09 3a  ne::Lindex \...:
11a00 3a 74 63 6c 72 65 61 64 6c 69 6e 65 3a 3a 43 6f  :tclreadline::Co
11a10 6d 70 6c 65 74 65 42 6f 6f 6c 65 61 6e 20 5c 0a  mpleteBoolean \.
11a20 09 09 3a 3a 74 63 6c 72 65 61 64 6c 69 6e 65 3a  ..::tclreadline:
11a30 3a 57 69 64 67 65 74 43 68 69 6c 64 72 65 6e 0a  :WidgetChildren.
11a40 09 7d 0a 09 76 61 72 69 61 62 6c 65 20 6f 70 74  .}..variable opt
11a50 73 0a 09 73 65 74 20 6f 70 74 73 20 7b 0a 09 09  s..set opts {...
11a60 2d 61 63 63 65 73 73 50 61 74 68 20 2d 73 74 61  -accessPath -sta
11a70 74 69 63 73 20 2d 6e 6f 53 74 61 74 69 63 73 20  tics -noStatics 
11a80 2d 6e 65 73 74 65 64 20 2d 6e 65 73 74 65 64 4c  -nested -nestedL
11a90 6f 61 64 4f 6b 20 2d 64 65 6c 65 74 65 48 6f 6f  oadOk -deleteHoo
11aa0 6b 0a 09 7d 0a 09 70 72 6f 63 20 53 6c 61 76 65  k..}..proc Slave
11ab0 4f 72 4f 70 74 73 20 7b 74 65 78 74 20 73 74 61  OrOpts {text sta
11ac0 72 74 20 6c 69 6e 65 20 70 6f 73 20 73 6c 61 76  rt line pos slav
11ad0 65 7d 20 7b 0a 09 09 73 65 74 20 70 72 65 76 20  e} {...set prev 
11ae0 5b 50 72 65 76 69 6f 75 73 57 6f 72 64 20 24 7b  [PreviousWord ${
11af0 73 74 61 72 74 7d 20 24 7b 6c 69 6e 65 7d 5d 0a  start} ${line}].
11b00 09 09 76 61 72 69 61 62 6c 65 20 6f 70 74 73 0a  ..variable opts.
11b10 09 09 69 66 20 7b 24 70 6f 73 20 3e 20 31 7d 20  ..if {$pos > 1} 
11b20 7b 0a 09 09 09 73 65 74 20 73 6c 61 76 65 20 22  {....set slave "
11b30 22 0a 09 09 7d 0a 09 09 73 77 69 74 63 68 20 2d  "...}...switch -
11b40 2d 20 24 70 72 65 76 20 7b 0a 09 09 09 2d 61 63  - $prev {....-ac
11b50 63 65 73 73 50 61 74 68 20 7b 20 72 65 74 75 72  cessPath { retur
11b60 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
11b70 3c 64 69 72 65 63 74 6f 72 79 4c 69 73 74 3e 5d  <directoryList>]
11b80 20 7d 0a 09 09 09 2d 73 74 61 74 69 63 73 20 7b   }....-statics {
11b90 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74   return [Complet
11ba0 65 42 6f 6f 6c 65 61 6e 20 24 74 65 78 74 5d 20  eBoolean $text] 
11bb0 7d 0a 09 09 09 2d 6e 65 73 74 65 64 20 7b 20 72  }....-nested { r
11bc0 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 42  eturn [CompleteB
11bd0 6f 6f 6c 65 61 6e 20 24 74 65 78 74 5d 20 7d 0a  oolean $text] }.
11be0 09 09 09 2d 64 65 6c 65 74 65 48 6f 6f 6b 20 7b  ...-deleteHook {
11bf0 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
11c00 48 69 6e 74 73 20 3c 73 63 72 69 70 74 3e 5d 20  Hints <script>] 
11c10 7d 0a 09 09 09 64 65 66 61 75 6c 74 20 7b 0a 09  }....default {..
11c20 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c  ...return [Compl
11c30 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65  eteFromList ${te
11c40 78 74 7d 20 5c 0a 09 09 09 09 5b 52 65 6d 6f 76  xt} \.....[Remov
11c50 65 55 73 65 64 4f 70 74 69 6f 6e 73 20 24 7b 6c  eUsedOptions ${l
11c60 69 6e 65 7d 20 22 24 7b 6f 70 74 73 7d 20 24 73  ine} "${opts} $s
11c70 6c 61 76 65 22 5d 5d 0a 09 09 09 7d 0a 09 09 7d  lave"]]....}...}
11c80 0a 09 7d 0a 7d 0a 0a 70 72 6f 63 20 73 61 66 65  ..}.}..proc safe
11c90 3a 3a 63 6f 6d 70 6c 65 74 65 28 69 6e 74 65 72  ::complete(inter
11ca0 70 43 72 65 61 74 65 29 20 7b 74 65 78 74 20 73  pCreate) {text s
11cb0 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f  tart end line po
11cc0 73 20 6d 6f 64 7d 20 7b 0a 09 72 65 74 75 72 6e  s mod} {..return
11cd0 20 5b 53 6c 61 76 65 4f 72 4f 70 74 73 20 24 7b   [SlaveOrOpts ${
11ce0 74 65 78 74 7d 20 24 7b 73 74 61 72 74 7d 20 24  text} ${start} $
11cf0 7b 6c 69 6e 65 7d 20 24 7b 70 6f 73 7d 20 3f 73  {line} ${pos} ?s
11d00 6c 61 76 65 3f 5d 0a 7d 0a 0a 70 72 6f 63 20 73  lave?].}..proc s
11d10 61 66 65 3a 3a 63 6f 6d 70 6c 65 74 65 28 69 6e  afe::complete(in
11d20 74 65 72 70 49 6e 69 74 29 20 7b 74 65 78 74 20  terpInit) {text 
11d30 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70  start end line p
11d40 6f 73 20 6d 6f 64 7d 20 7b 0a 09 72 65 74 75 72  os mod} {..retur
11d50 6e 20 5b 53 6c 61 76 65 4f 72 4f 70 74 73 20 24  n [SlaveOrOpts $
11d60 7b 74 65 78 74 7d 20 24 7b 73 74 61 72 74 7d 20  {text} ${start} 
11d70 24 7b 6c 69 6e 65 7d 20 24 7b 70 6f 73 7d 20 5b  ${line} ${pos} [
11d80 69 6e 74 65 72 70 20 73 6c 61 76 65 73 5d 5d 0a  interp slaves]].
11d90 7d 0a 0a 70 72 6f 63 20 73 61 66 65 3a 3a 63 6f  }..proc safe::co
11da0 6d 70 6c 65 74 65 28 69 6e 74 65 72 70 43 6f 6e  mplete(interpCon
11db0 66 69 67 75 72 65 29 20 7b 74 65 78 74 20 73 74  figure) {text st
11dc0 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73  art end line pos
11dd0 20 6d 6f 64 7d 20 7b 0a 09 72 65 74 75 72 6e 20   mod} {..return 
11de0 5b 53 6c 61 76 65 4f 72 4f 70 74 73 20 24 74 65  [SlaveOrOpts $te
11df0 78 74 20 24 73 74 61 72 74 20 24 6c 69 6e 65 20  xt $start $line 
11e00 24 70 6f 73 20 5b 69 6e 74 65 72 70 20 73 6c 61  $pos [interp sla
11e10 76 65 73 5d 5d 0a 7d 0a 0a 70 72 6f 63 20 73 61  ves]].}..proc sa
11e20 66 65 3a 3a 63 6f 6d 70 6c 65 74 65 28 69 6e 74  fe::complete(int
11e30 65 72 70 44 65 6c 65 74 65 29 20 7b 74 65 78 74  erpDelete) {text
11e40 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20   start end line 
11e50 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 72 65 74 75  pos mod} {..retu
11e60 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d  rn [CompleteFrom
11e70 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 5b 69 6e  List ${text} [in
11e80 74 65 72 70 20 73 6c 61 76 65 73 5d 5d 0a 7d 0a  terp slaves]].}.
11e90 0a 70 72 6f 63 20 73 61 66 65 3a 3a 63 6f 6d 70  .proc safe::comp
11ea0 6c 65 74 65 28 69 6e 74 65 72 70 41 64 64 54 6f  lete(interpAddTo
11eb0 41 63 63 65 73 73 50 61 74 68 29 20 7b 74 65 78  AccessPath) {tex
11ec0 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65  t start end line
11ed0 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73 77 69   pos mod} {..swi
11ee0 74 63 68 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a  tch -- ${pos} {.
11ef0 09 09 31 20 7b 20 72 65 74 75 72 6e 20 5b 43 6f  ..1 { return [Co
11f00 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24  mpleteFromList $
11f10 7b 74 65 78 74 7d 20 5b 69 6e 74 65 72 70 20 73  {text} [interp s
11f20 6c 61 76 65 73 5d 5d 20 7d 0a 09 7d 0a 7d 0a 0a  laves]] }..}.}..
11f30 70 72 6f 63 20 73 61 66 65 3a 3a 63 6f 6d 70 6c  proc safe::compl
11f40 65 74 65 28 69 6e 74 65 72 70 46 69 6e 64 49 6e  ete(interpFindIn
11f50 41 63 63 65 73 73 50 61 74 68 29 20 7b 74 65 78  AccessPath) {tex
11f60 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65  t start end line
11f70 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73 77 69   pos mod} {..swi
11f80 74 63 68 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a  tch -- ${pos} {.
11f90 09 09 31 20 7b 20 72 65 74 75 72 6e 20 5b 43 6f  ..1 { return [Co
11fa0 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24  mpleteFromList $
11fb0 7b 74 65 78 74 7d 20 5b 69 6e 74 65 72 70 20 73  {text} [interp s
11fc0 6c 61 76 65 73 5d 5d 20 7d 0a 09 7d 0a 7d 0a 0a  laves]] }..}.}..
11fd0 70 72 6f 63 20 73 61 66 65 3a 3a 63 6f 6d 70 6c  proc safe::compl
11fe0 65 74 65 28 73 65 74 4c 6f 67 43 6d 64 29 20 7b  ete(setLogCmd) {
11ff0 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c  text start end l
12000 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09  ine pos mod} {..
12010 73 77 69 74 63 68 20 2d 2d 20 24 7b 70 6f 73 7d  switch -- ${pos}
12020 20 7b 0a 09 09 31 20 7b 20 72 65 74 75 72 6e 20   {...1 { return 
12030 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3f 63  [DisplayHints ?c
12040 6d 64 3f 5d 20 7d 0a 09 09 64 65 66 61 75 6c 74  md?] }...default
12050 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
12060 61 79 48 69 6e 74 73 20 3f 61 72 67 3f 5d 20 7d  ayHints ?arg?] }
12070 0a 09 7d 0a 7d 0a 0a 70 72 6f 63 20 73 61 66 65  ..}.}..proc safe
12080 3a 3a 63 6f 6d 70 6c 65 74 65 28 6c 6f 61 64 54  ::complete(loadT
12090 6b 29 20 7b 74 65 78 74 20 73 74 61 72 74 20 65  k) {text start e
120a0 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d  nd line pos mod}
120b0 20 7b 0a 09 73 77 69 74 63 68 20 2d 2d 20 24 7b   {..switch -- ${
120c0 70 6f 73 7d 20 7b 0a 09 09 31 20 7b 20 72 65 74  pos} {...1 { ret
120d0 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
120e0 73 20 3c 73 6c 61 76 65 3e 5d 20 7d 0a 09 09 64  s <slave>] }...d
120f0 65 66 61 75 6c 74 20 7b 0a 09 09 09 73 77 69 74  efault {....swit
12100 63 68 20 2d 2d 20 5b 50 72 65 76 69 6f 75 73 57  ch -- [PreviousW
12110 6f 72 64 20 24 7b 73 74 61 72 74 7d 20 24 7b 6c  ord ${start} ${l
12120 69 6e 65 7d 5d 20 7b 0a 09 09 09 09 2d 75 73 65  ine}] {.....-use
12130 20 7b 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b   {......return [
12140 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74  CompleteFromList
12150 20 24 7b 74 65 78 74 7d 20 5c 0a 09 09 09 09 09   ${text} \......
12160 5b 3a 3a 74 63 6c 72 65 61 64 6c 69 6e 65 3a 3a  [::tclreadline::
12170 57 69 64 67 65 74 43 68 69 6c 64 72 65 6e 20 24  WidgetChildren $
12180 7b 74 65 78 74 7d 5d 5d 0a 09 09 09 09 7d 0a 09  {text}]].....}..
12190 09 09 09 2d 64 69 73 70 6c 61 79 20 7b 0a 09 09  ...-display {...
121a0 09 09 09 72 65 74 75 72 6e 20 5b 44 69 73 70 6c  ...return [Displ
121b0 61 79 48 69 6e 74 73 20 3c 64 69 73 70 6c 61 79  ayHints <display
121c0 3e 5d 0a 09 09 09 09 7d 0a 09 09 09 09 64 65 66  >].....}.....def
121d0 61 75 6c 74 20 7b 0a 09 09 09 09 09 72 65 74 75  ault {......retu
121e0 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d  rn [CompleteFrom
121f0 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 5c 0a 09  List ${text} \..
12200 09 09 09 09 5b 52 65 6d 6f 76 65 55 73 65 64 4f  ....[RemoveUsedO
12210 70 74 69 6f 6e 73 20 24 7b 6c 69 6e 65 7d 20 7b  ptions ${line} {
12220 2d 75 73 65 20 2d 64 69 73 70 6c 61 79 7d 5d 5d  -use -display}]]
12230 0a 09 09 09 09 7d 0a 09 09 09 7d 0a 09 09 7d 0a  .....}....}...}.
12240 09 7d 0a 7d 0a 0a 23 20 2d 2d 2d 20 45 4e 44 20  .}.}..# --- END 
12250 4f 46 20 53 41 46 45 20 50 41 43 4b 41 47 45 20  OF SAFE PACKAGE 
12260 2d 2d 2d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65  ---..proc comple
12270 74 65 28 73 63 61 6e 29 20 7b 74 65 78 74 20 73  te(scan) {text s
12280 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f  tart end line po
12290 73 20 6d 6f 64 7d 20 7b 0a 09 73 77 69 74 63 68  s mod} {..switch
122a0 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09 09 31   -- ${pos} {...1
122b0 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
122c0 61 79 48 69 6e 74 73 20 3c 73 74 72 69 6e 67 3e  ayHints <string>
122d0 5d 20 7d 0a 09 09 32 20 7b 20 72 65 74 75 72 6e  ] }...2 { return
122e0 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c   [DisplayHints <
122f0 66 6f 72 6d 61 74 3e 5d 20 7d 0a 09 09 64 65 66  format>] }...def
12300 61 75 6c 74 20 7b 20 72 65 74 75 72 6e 20 5b 56  ault { return [V
12310 61 72 43 6f 6d 70 6c 65 74 69 6f 6e 20 24 7b 74  arCompletion ${t
12320 65 78 74 7d 5d 20 7d 0a 09 7d 0a 09 72 65 74 75  ext}] }..}..retu
12330 72 6e 20 22 22 0a 7d 0a 0a 70 72 6f 63 20 63 6f  rn "".}..proc co
12340 6d 70 6c 65 74 65 28 73 65 65 6b 29 20 7b 74 65  mplete(seek) {te
12350 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e  xt start end lin
12360 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73 77  e pos mod} {..sw
12370 69 74 63 68 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b  itch -- ${pos} {
12380 0a 09 09 31 20 7b 20 72 65 74 75 72 6e 20 5b 43  ...1 { return [C
12390 68 61 6e 6e 65 6c 49 64 20 24 7b 74 65 78 74 7d  hannelId ${text}
123a0 5d 20 7d 0a 09 09 32 20 7b 20 72 65 74 75 72 6e  ] }...2 { return
123b0 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c   [DisplayHints <
123c0 6f 66 66 73 65 74 3e 5d 20 7d 0a 09 09 33 20 7b  offset>] }...3 {
123d0 20 72 65 74 75 72 6e 20 5b 54 72 79 46 72 6f 6d   return [TryFrom
123e0 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 7b 73 74  List ${text} {st
123f0 61 72 74 20 63 75 72 72 65 6e 74 20 65 6e 64 7d  art current end}
12400 5d 20 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22  ] }..}..return "
12410 22 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65  ".}..proc comple
12420 74 65 28 73 65 74 29 20 7b 74 65 78 74 20 73 74  te(set) {text st
12430 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73  art end line pos
12440 20 6d 6f 64 7d 20 7b 0a 09 73 77 69 74 63 68 20   mod} {..switch 
12450 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09 09 31 20  -- ${pos} {...1 
12460 7b 20 72 65 74 75 72 6e 20 5b 56 61 72 43 6f 6d  { return [VarCom
12470 70 6c 65 74 69 6f 6e 20 24 7b 74 65 78 74 7d 5d  pletion ${text}]
12480 20 7d 0a 09 09 32 20 7b 0a 09 09 09 69 66 20 7b   }...2 {....if {
12490 24 7b 74 65 78 74 7d 20 3d 3d 20 22 22 20 7c 7c  ${text} == "" ||
124a0 20 24 7b 74 65 78 74 7d 20 3d 3d 20 22 5c 22 22   ${text} == "\""
124b0 20 7c 7c 20 24 7b 74 65 78 74 7d 20 3d 3d 20 22   || ${text} == "
124c0 5c 7b 22 7d 20 7b 0a 09 09 09 09 23 20 73 65 74  \{"} {.....# set
124d0 20 6c 69 6e 65 20 5b 51 75 6f 74 65 51 75 6f 74   line [QuoteQuot
124e0 65 73 20 24 6c 69 6e 65 5d 0a 09 09 09 09 69 66  es $line].....if
124f0 20 7b 5b 63 61 74 63 68 20 5b 6c 69 73 74 20 73   {[catch [list s
12500 65 74 20 76 61 6c 75 65 20 5b 6c 69 73 74 20 5b  et value [list [
12510 75 70 6c 65 76 65 6c 20 5b 69 6e 66 6f 20 6c 65  uplevel [info le
12520 76 65 6c 5d 20 5c 0a 09 09 09 09 09 73 65 74 20  vel] \......set 
12530 5b 4c 69 6e 64 65 78 20 24 7b 6c 69 6e 65 7d 20  [Lindex ${line} 
12540 31 5d 5d 5d 5d 20 6d 73 67 5d 0a 09 09 09 09 7d  1]]]] msg].....}
12550 20 7b 0a 09 09 09 09 09 72 65 74 75 72 6e 20 22   {......return "
12560 22 0a 09 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09  ".....} else {..
12570 09 09 09 09 72 65 74 75 72 6e 20 5b 51 75 6f 74  ....return [Quot
12580 65 20 24 7b 76 61 6c 75 65 7d 20 24 7b 74 65 78  e ${value} ${tex
12590 74 7d 5d 0a 09 09 09 09 7d 0a 09 09 09 7d 0a 09  t}].....}....}..
125a0 09 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22 22  .}..}..return ""
125b0 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74  .}..proc complet
125c0 65 28 73 6f 63 6b 65 74 29 20 7b 74 65 78 74 20  e(socket) {text 
125d0 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70  start end line p
125e0 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73 65 74 20 63  os mod} {..set c
125f0 6d 64 20 5b 4c 69 6e 64 65 78 20 24 7b 6c 69 6e  md [Lindex ${lin
12600 65 7d 20 31 5d 0a 09 73 65 74 20 70 72 65 76 20  e} 1]..set prev 
12610 5b 50 72 65 76 69 6f 75 73 57 6f 72 64 20 24 7b  [PreviousWord ${
12620 73 74 61 72 74 7d 20 24 7b 6c 69 6e 65 7d 5d 0a  start} ${line}].
12630 09 69 66 20 7b 22 2d 73 65 72 76 65 72 22 20 3d  .if {"-server" =
12640 3d 20 24 7b 63 6d 64 7d 7d 20 7b 0a 09 09 23 20  = ${cmd}} {...# 
12650 73 65 72 76 65 72 20 73 6f 63 6b 65 74 73 0a 09  server sockets..
12660 09 23 0a 09 09 73 77 69 74 63 68 20 2d 2d 20 24  .#...switch -- $
12670 7b 70 6f 73 7d 20 7b 0a 09 09 09 32 20 7b 20 72  {pos} {....2 { r
12680 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
12690 6e 74 73 20 3c 63 6f 6d 6d 61 6e 64 3e 5d 20 7d  nts <command>] }
126a0 0a 09 09 09 64 65 66 61 75 6c 74 20 7b 0a 09 09  ....default {...
126b0 09 09 69 66 20 7b 22 2d 6d 79 61 64 64 72 22 20  ..if {"-myaddr" 
126c0 3d 3d 20 24 7b 70 72 65 76 7d 7d 20 7b 0a 09 09  == ${prev}} {...
126d0 09 09 09 72 65 74 75 72 6e 20 5b 44 69 73 70 6c  ...return [Displ
126e0 61 79 48 69 6e 74 73 20 3c 61 64 64 72 3e 5d 0a  ayHints <addr>].
126f0 09 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09  ....} else {....
12700 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65  ..return [Comple
12710 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 6d 6f 64  teFromList ${mod
12720 7d 20 5c 0a 09 09 09 09 09 5b 52 65 6d 6f 76 65  } \......[Remove
12730 55 73 65 64 4f 70 74 69 6f 6e 73 20 24 6c 69 6e  UsedOptions $lin
12740 65 20 7b 2d 6d 79 61 64 64 72 20 2d 65 72 72 6f  e {-myaddr -erro
12750 72 20 2d 73 6f 63 6b 6e 61 6d 65 20 3c 70 6f 72  r -sockname <por
12760 74 3e 7d 5d 5d 0a 09 09 09 09 7d 0a 09 09 09 7d  t>}]].....}....}
12770 0a 09 09 7d 0a 09 7d 20 65 6c 73 65 20 7b 0a 09  ...}..} else {..
12780 09 23 20 63 6c 69 65 6e 74 20 73 6f 63 6b 65 74  .# client socket
12790 73 0a 09 09 23 0a 09 09 73 77 69 74 63 68 20 2d  s...#...switch -
127a0 2d 20 24 7b 70 72 65 76 7d 20 7b 0a 09 09 09 2d  - ${prev} {....-
127b0 6d 79 61 64 64 72 20 7b 20 72 65 74 75 72 6e 20  myaddr { return 
127c0 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 61  [DisplayHints <a
127d0 64 64 72 3e 5d 20 7d 0a 09 09 09 2d 6d 79 70 6f  ddr>] }....-mypo
127e0 72 74 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73  rt { return [Dis
127f0 70 6c 61 79 48 69 6e 74 73 20 3c 70 6f 72 74 3e  playHints <port>
12800 5d 20 7d 0a 09 09 7d 0a 0a 09 09 73 65 74 20 68  ] }...}....set h
12810 6f 73 74 73 20 5b 48 6f 73 74 4c 69 73 74 5d 0a  osts [HostList].
12820 09 09 73 65 74 20 63 6d 64 73 20 7b 2d 6d 79 61  ..set cmds {-mya
12830 64 64 72 20 2d 6d 79 70 6f 72 74 20 2d 61 73 79  ddr -myport -asy
12840 6e 63 20 2d 6d 79 61 64 64 72 20 2d 65 72 72 6f  nc -myaddr -erro
12850 72 20 2d 73 6f 63 6b 6e 61 6d 65 20 2d 70 65 65  r -sockname -pee
12860 72 6e 61 6d 65 7d 0a 09 09 69 66 20 7b 24 7b 70  rname}...if {${p
12870 6f 73 7d 20 3c 3d 20 31 7d 20 7b 0a 09 09 09 6c  os} <= 1} {....l
12880 61 70 70 65 6e 64 20 63 6d 64 73 20 2d 73 65 72  append cmds -ser
12890 76 65 72 0a 09 09 7d 0a 09 09 73 65 74 20 63 6d  ver...}...set cm
128a0 64 73 20 5b 52 65 6d 6f 76 65 55 73 65 64 4f 70  ds [RemoveUsedOp
128b0 74 69 6f 6e 73 20 24 7b 6c 69 6e 65 7d 20 24 7b  tions ${line} ${
128c0 63 6d 64 73 7d 5d 0a 09 09 69 66 20 7b 2d 31 20  cmds}]...if {-1 
128d0 21 3d 20 5b 6c 73 65 61 72 63 68 20 24 7b 68 6f  != [lsearch ${ho
128e0 73 74 73 7d 20 24 7b 70 72 65 76 7d 5d 7d 20 7b  sts} ${prev}]} {
128f0 0a 09 09 09 72 65 74 75 72 6e 20 5b 44 69 73 70  ....return [Disp
12900 6c 61 79 48 69 6e 74 73 20 3c 70 6f 72 74 3e 5d  layHints <port>]
12910 0a 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 72  ...} else {....r
12920 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46  eturn [CompleteF
12930 72 6f 6d 4c 69 73 74 20 24 7b 6d 6f 64 7d 20 5b  romList ${mod} [
12940 63 6f 6e 63 61 74 20 24 7b 63 6d 64 73 7d 20 24  concat ${cmds} $
12950 7b 68 6f 73 74 73 7d 5d 5d 0a 09 09 7d 0a 09 7d  {hosts}]]...}..}
12960 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a 0a 70  ..return "".}..p
12970 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 73 6f 75  roc complete(sou
12980 72 63 65 29 20 7b 74 65 78 74 20 73 74 61 72 74  rce) {text start
12990 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f   end line pos mo
129a0 64 7d 20 7b 0a 09 23 20 61 6c 6c 6f 77 20 66 69  d} {..# allow fi
129b0 6c 65 20 6e 61 6d 65 20 63 6f 6d 70 6c 65 74 69  le name completi
129c0 6f 6e 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a  on..return "".}.
129d0 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 73  .proc complete(s
129e0 70 6c 69 74 29 20 7b 74 65 78 74 20 73 74 61 72  plit) {text star
129f0 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d  t end line pos m
12a00 6f 64 7d 20 7b 0a 09 73 77 69 74 63 68 20 2d 2d  od} {..switch --
12a10 20 24 7b 70 6f 73 7d 20 7b 0a 09 09 31 20 7b 20   ${pos} {...1 { 
12a20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
12a30 69 6e 74 73 20 3c 73 74 72 69 6e 67 3e 5d 20 7d  ints <string>] }
12a40 0a 09 09 32 20 7b 20 72 65 74 75 72 6e 20 5b 44  ...2 { return [D
12a50 69 73 70 6c 61 79 48 69 6e 74 73 20 3f 73 70 6c  isplayHints ?spl
12a60 69 74 43 68 61 72 73 3f 5d 20 7d 0a 09 7d 0a 7d  itChars?] }..}.}
12a70 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28  ..proc complete(
12a80 73 74 72 69 6e 67 29 20 7b 74 65 78 74 20 73 74  string) {text st
12a90 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73  art end line pos
12aa0 20 6d 6f 64 7d 20 7b 0a 09 73 65 74 20 63 6d 64   mod} {..set cmd
12ab0 20 5b 4c 69 6e 64 65 78 20 24 7b 6c 69 6e 65 7d   [Lindex ${line}
12ac0 20 31 5d 0a 09 73 65 74 20 70 72 65 76 20 5b 50   1]..set prev [P
12ad0 72 65 76 69 6f 75 73 57 6f 72 64 20 24 7b 73 74  reviousWord ${st
12ae0 61 72 74 7d 20 24 7b 6c 69 6e 65 7d 5d 0a 09 73  art} ${line}]..s
12af0 65 74 20 63 6d 64 73 20 7b 0a 09 09 62 79 74 65  et cmds {...byte
12b00 6c 65 6e 67 74 68 20 63 6f 6d 70 61 72 65 20 65  length compare e
12b10 71 75 61 6c 20 66 69 72 73 74 20 69 6e 64 65 78  qual first index
12b20 20 69 73 20 6c 61 73 74 20 6c 65 6e 67 74 68 20   is last length 
12b30 6d 61 70 20 6d 61 74 63 68 0a 09 09 72 61 6e 67  map match...rang
12b40 65 20 72 65 70 65 61 74 20 72 65 70 6c 61 63 65  e repeat replace
12b50 20 74 6f 6c 6f 77 65 72 20 74 6f 75 70 70 65 72   tolower toupper
12b60 20 74 6f 74 69 74 6c 65 20 74 72 69 6d 20 74 72   totitle trim tr
12b70 69 6d 6c 65 66 74 0a 09 09 74 72 69 6d 72 69 67  imleft...trimrig
12b80 68 74 20 77 6f 72 64 65 6e 64 20 77 6f 72 64 73  ht wordend words
12b90 74 61 72 74 7d 0a 09 73 77 69 74 63 68 20 2d 2d  tart}..switch --
12ba0 20 24 7b 70 6f 73 7d 20 7b 0a 09 09 31 20 7b 0a   ${pos} {...1 {.
12bb0 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c  ...return [Compl
12bc0 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65  eteFromList ${te
12bd0 78 74 7d 20 24 7b 63 6d 64 73 7d 5d 0a 09 09 7d  xt} ${cmds}]...}
12be0 0a 09 09 32 20 7b 0a 09 09 09 73 77 69 74 63 68  ...2 {....switch
12bf0 20 2d 2d 20 24 7b 63 6d 64 7d 20 7b 0a 09 09 09   -- ${cmd} {....
12c00 09 63 6f 6d 70 61 72 65 20 2d 0a 09 09 09 09 65  .compare -.....e
12c10 71 75 61 6c 20 7b 0a 09 09 09 09 09 72 65 74 75  qual {......retu
12c20 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d  rn [CompleteFrom
12c30 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 7b 0a 09  List ${text} {..
12c40 09 09 09 09 09 2d 6e 6f 63 61 73 65 20 2d 6c 65  .....-nocase -le
12c50 6e 67 74 68 20 3c 73 74 72 69 6e 67 3e 20 7d 5d  ngth <string> }]
12c60 0a 09 09 09 09 7d 0a 0a 09 09 09 09 66 69 72 73  .....}......firs
12c70 74 20 2d 0a 09 09 09 09 6c 61 73 74 20 7b 20 72  t -.....last { r
12c80 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
12c90 6e 74 73 20 3c 73 74 72 69 6e 67 31 3e 5d 20 7d  nts <string1>] }
12ca0 0a 0a 09 09 09 09 6d 61 70 20 7b 20 72 65 74 75  ......map { retu
12cb0 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d  rn [CompleteFrom
12cc0 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 7b 2d 6e  List ${text} {-n
12cd0 6f 63 61 73 65 20 3c 63 68 61 72 4d 61 70 3e 5d  ocase <charMap>]
12ce0 7d 20 7d 0a 09 09 09 09 6d 61 74 63 68 20 7b 20  } }.....match { 
12cf0 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65  return [Complete
12d00 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d  FromList ${text}
12d10 20 7b 2d 6e 6f 63 61 73 65 20 3c 70 61 74 74 65   {-nocase <patte
12d20 72 6e 3e 5d 7d 20 7d 0a 0a 09 09 09 09 69 73 20  rn>]} }......is 
12d30 7b 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b 43  {......return [C
12d40 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20  ompleteFromList 
12d50 24 7b 74 65 78 74 7d 20 7b 0a 09 09 09 09 09 09  ${text} {.......
12d60 61 6c 6e 75 6d 20 61 6c 70 68 61 20 61 73 63 69  alnum alpha asci
12d70 69 20 62 6f 6f 6c 65 61 6e 20 63 6f 6e 74 72 6f  i boolean contro
12d80 6c 20 64 69 67 69 74 20 64 6f 75 62 6c 65 20 0a  l digit double .
12d90 09 09 09 09 09 09 66 61 6c 73 65 20 67 72 61 70  ......false grap
12da0 68 20 69 6e 74 65 67 65 72 20 6c 6f 77 65 72 20  h integer lower 
12db0 70 72 69 6e 74 20 70 75 6e 63 74 20 73 70 61 63  print punct spac
12dc0 65 20 0a 09 09 09 09 09 09 74 72 75 65 20 75 70  e .......true up
12dd0 70 65 72 20 77 6f 72 64 63 68 61 72 20 78 64 69  per wordchar xdi
12de0 67 69 74 20 0a 09 09 09 09 09 7d 5d 0a 09 09 09  git ......}]....
12df0 09 7d 0a 0a 09 09 09 09 62 79 74 65 6c 65 6e 67  .}......byteleng
12e00 74 68 20 2d 0a 09 09 09 09 69 6e 64 65 78 20 2d  th -.....index -
12e10 0a 09 09 09 09 6c 65 6e 67 74 68 20 2d 0a 09 09  .....length -...
12e20 09 09 72 61 6e 67 65 20 2d 0a 09 09 09 09 72 65  ..range -.....re
12e30 70 65 61 74 20 2d 0a 09 09 09 09 72 65 70 6c 61  peat -.....repla
12e40 63 65 20 2d 0a 09 09 09 09 74 6f 6c 6f 77 65 72  ce -.....tolower
12e50 20 2d 0a 09 09 09 09 74 6f 74 69 74 6c 65 20 2d   -.....totitle -
12e60 0a 09 09 09 09 74 6f 75 70 70 65 72 20 2d 0a 09  .....toupper -..
12e70 09 09 09 74 72 69 6d 20 2d 0a 09 09 09 09 74 72  ...trim -.....tr
12e80 69 6d 6c 65 66 74 20 2d 0a 09 09 09 09 74 72 69  imleft -.....tri
12e90 6d 72 69 67 68 74 20 2d 0a 09 09 09 09 77 6f 72  mright -.....wor
12ea0 64 65 6e 64 20 2d 0a 09 09 09 09 77 6f 72 64 73  dend -.....words
12eb0 74 61 72 74 20 7b 20 72 65 74 75 72 6e 20 5b 44  tart { return [D
12ec0 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 73 74 72  isplayHints <str
12ed0 69 6e 67 3e 5d 20 7d 0a 09 09 09 7d 0a 09 09 7d  ing>] }....}...}
12ee0 0a 09 09 33 20 7b 0a 09 09 09 73 77 69 74 63 68  ...3 {....switch
12ef0 20 2d 2d 20 24 7b 63 6d 64 7d 20 7b 0a 09 09 09   -- ${cmd} {....
12f00 09 63 6f 6d 70 61 72 65 20 2d 0a 09 09 09 09 65  .compare -.....e
12f10 71 75 61 6c 20 7b 0a 09 09 09 09 09 69 66 20 7b  qual {......if {
12f20 22 2d 6c 65 6e 67 74 68 22 20 3d 3d 20 24 7b 70  "-length" == ${p
12f30 72 65 76 7d 7d 20 7b 0a 09 09 09 09 09 09 72 65  rev}} {.......re
12f40 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
12f50 74 73 20 3c 69 6e 74 3e 5d 0a 09 09 09 09 09 7d  ts <int>]......}
12f60 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b 43 6f  ......return [Co
12f70 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24  mpleteFromList $
12f80 7b 74 65 78 74 7d 20 5c 0a 09 09 09 09 09 5b 52  {text} \......[R
12f90 65 6d 6f 76 65 55 73 65 64 4f 70 74 69 6f 6e 73  emoveUsedOptions
12fa0 20 24 7b 6c 69 6e 65 7d 20 7b 2d 6e 6f 63 61 73   ${line} {-nocas
12fb0 65 20 2d 6c 65 6e 67 74 68 20 3c 73 74 72 69 6e  e -length <strin
12fc0 67 3e 7d 5d 5d 0a 09 09 09 09 7d 0a 0a 09 09 09  g>}]].....}.....
12fd0 09 66 69 72 73 74 20 2d 0a 09 09 09 09 6c 61 73  .first -.....las
12fe0 74 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70  t { return [Disp
12ff0 6c 61 79 48 69 6e 74 73 20 3c 73 74 72 69 6e 67  layHints <string
13000 32 3e 5d 20 7d 0a 0a 09 09 09 09 6d 61 70 20 7b  2>] }......map {
13010 0a 09 09 09 09 09 69 66 20 7b 22 2d 6e 6f 63 61  ......if {"-noca
13020 73 65 22 20 3d 3d 20 24 7b 70 72 65 76 7d 7d 20  se" == ${prev}} 
13030 7b 0a 09 09 09 09 09 09 72 65 74 75 72 6e 20 5b  {.......return [
13040 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 63 68  DisplayHints <ch
13050 61 72 4d 61 70 3e 5d 0a 09 09 09 09 09 7d 20 65  arMap>]......} e
13060 6c 73 65 20 7b 0a 09 09 09 09 09 09 72 65 74 75  lse {.......retu
13070 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
13080 20 3c 73 74 72 69 6e 67 3e 5d 0a 09 09 09 09 09   <string>]......
13090 7d 0a 09 09 09 09 7d 0a 09 09 09 09 6d 61 74 63  }.....}.....matc
130a0 68 20 7b 0a 09 09 09 09 09 69 66 20 7b 22 2d 6e  h {......if {"-n
130b0 6f 63 61 73 65 22 20 3d 3d 20 24 7b 70 72 65 76  ocase" == ${prev
130c0 7d 7d 20 7b 0a 09 09 09 09 09 09 72 65 74 75 72  }} {.......retur
130d0 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
130e0 3c 70 61 74 74 65 72 6e 3e 5d 0a 09 09 09 09 09  <pattern>]......
130f0 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09 09 09 72  } else {.......r
13100 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
13110 6e 74 73 20 3c 73 74 72 69 6e 67 3e 5d 0a 09 09  nts <string>]...
13120 09 09 09 7d 0a 09 09 09 09 7d 0a 0a 09 09 09 09  ...}.....}......
13130 69 73 20 7b 0a 09 09 09 09 09 72 65 74 75 72 6e  is {......return
13140 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69   [CompleteFromLi
13150 73 74 20 24 7b 74 65 78 74 7d 20 5c 0a 09 09 09  st ${text} \....
13160 09 09 5b 52 65 6d 6f 76 65 55 73 65 64 4f 70 74  ..[RemoveUsedOpt
13170 69 6f 6e 73 20 24 7b 6c 69 6e 65 7d 20 7b 2d 73  ions ${line} {-s
13180 74 72 69 63 74 20 2d 66 61 69 6c 69 6e 64 65 78  trict -failindex
13190 20 3c 73 74 72 69 6e 67 3e 7d 5d 5d 0a 09 09 09   <string>}]]....
131a0 09 7d 0a 0a 09 09 09 09 62 79 74 65 6c 65 6e 67  .}......byteleng
131b0 74 68 20 7b 7d 0a 09 09 09 09 69 6e 64 65 78 20  th {}.....index 
131c0 2d 0a 09 09 09 09 77 6f 72 64 65 6e 64 20 2d 0a  -.....wordend -.
131d0 09 09 09 09 77 6f 72 64 73 74 61 72 74 20 7b 20  ....wordstart { 
131e0 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
131f0 69 6e 74 73 20 3c 63 68 61 72 49 6e 64 65 78 3e  ints <charIndex>
13200 5d 20 7d 0a 09 09 09 09 72 61 6e 67 65 20 2d 0a  ] }.....range -.
13210 09 09 09 09 72 65 70 6c 61 63 65 20 7b 20 72 65  ....replace { re
13220 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
13230 74 73 20 3c 66 69 72 73 74 3e 5d 20 7d 0a 09 09  ts <first>] }...
13240 09 09 72 65 70 65 61 74 20 7b 20 72 65 74 75 72  ..repeat { retur
13250 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
13260 3c 63 6f 75 6e 74 3e 5d 20 7d 0a 09 09 09 09 74  <count>] }.....t
13270 6f 6c 6f 77 65 72 20 2d 0a 09 09 09 09 74 6f 74  olower -.....tot
13280 69 74 6c 65 20 2d 0a 09 09 09 09 74 6f 75 70 70  itle -.....toupp
13290 65 72 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73  er { return [Dis
132a0 70 6c 61 79 48 69 6e 74 73 20 3f 66 69 72 73 74  playHints ?first
132b0 3f 5d 20 7d 0a 09 09 09 09 74 72 69 6d 20 2d 0a  ?] }.....trim -.
132c0 09 09 09 09 74 72 69 6d 6c 65 66 74 20 2d 0a 09  ....trimleft -..
132d0 09 09 09 74 72 69 6d 72 69 67 68 74 20 7b 20 72  ...trimright { r
132e0 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
132f0 6e 74 73 20 3f 63 68 61 72 73 3f 5d 20 7d 0a 09  nts ?chars?] }..
13300 09 09 7d 0a 09 09 7d 0a 09 09 34 20 7b 0a 09 09  ..}...}...4 {...
13310 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 63 6d 64  .switch -- ${cmd
13320 7d 20 7b 0a 09 09 09 09 63 6f 6d 70 61 72 65 20  } {.....compare 
13330 2d 0a 09 09 09 09 65 71 75 61 6c 20 7b 0a 09 09  -.....equal {...
13340 09 09 09 69 66 20 7b 22 2d 6c 65 6e 67 74 68 22  ...if {"-length"
13350 20 3d 3d 20 24 7b 70 72 65 76 7d 7d 20 7b 0a 09   == ${prev}} {..
13360 09 09 09 09 09 72 65 74 75 72 6e 20 5b 44 69 73  .....return [Dis
13370 70 6c 61 79 48 69 6e 74 73 20 3c 69 6e 74 3e 5d  playHints <int>]
13380 0a 09 09 09 09 09 7d 0a 09 09 09 09 09 72 65 74  ......}......ret
13390 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f  urn [CompleteFro
133a0 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 5c 0a  mList ${text} \.
133b0 09 09 09 09 09 5b 52 65 6d 6f 76 65 55 73 65 64  .....[RemoveUsed
133c0 4f 70 74 69 6f 6e 73 20 24 6c 69 6e 65 20 7b 2d  Options $line {-
133d0 6e 6f 63 61 73 65 20 2d 6c 65 6e 67 74 68 20 3c  nocase -length <
133e0 73 74 72 69 6e 67 3e 7d 5d 5d 0a 09 09 09 09 7d  string>}]].....}
133f0 0a 0a 09 09 09 09 66 69 72 73 74 20 2d 0a 09 09  ......first -...
13400 09 09 6c 61 73 74 20 7b 20 72 65 74 75 72 6e 20  ..last { return 
13410 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3f 73  [DisplayHints ?s
13420 74 61 72 74 49 6e 64 65 78 3f 5d 20 7d 0a 0a 09  tartIndex?] }...
13430 09 09 09 6d 61 70 20 2d 0a 09 09 09 09 6d 61 74  ...map -.....mat
13440 63 68 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73  ch { return [Dis
13450 70 6c 61 79 48 69 6e 74 73 20 3c 73 74 72 69 6e  playHints <strin
13460 67 3e 5d 20 7d 0a 0a 09 09 09 09 69 73 20 7b 0a  g>] }......is {.
13470 09 09 09 09 09 69 66 20 7b 22 2d 66 61 69 6c 69  .....if {"-faili
13480 6e 64 65 78 22 20 3d 3d 20 24 7b 70 72 65 76 7d  ndex" == ${prev}
13490 7d 20 7b 0a 09 09 09 09 09 09 72 65 74 75 72 6e  } {.......return
134a0 20 5b 56 61 72 43 6f 6d 70 6c 65 74 69 6f 6e 20   [VarCompletion 
134b0 24 7b 74 65 78 74 7d 5d 0a 09 09 09 09 09 7d 0a  ${text}]......}.
134c0 09 09 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d  .....return [Com
134d0 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b  pleteFromList ${
134e0 74 65 78 74 7d 20 5c 0a 09 09 09 09 09 5b 52 65  text} \......[Re
134f0 6d 6f 76 65 55 73 65 64 4f 70 74 69 6f 6e 73 20  moveUsedOptions 
13500 24 6c 69 6e 65 20 7b 2d 73 74 72 69 63 74 20 2d  $line {-strict -
13510 66 61 69 6c 69 6e 64 65 78 20 3c 73 74 72 69 6e  failindex <strin
13520 67 3e 7d 5d 5d 0a 09 09 09 09 7d 0a 0a 09 09 09  g>}]].....}.....
13530 09 62 79 74 65 6c 65 6e 67 74 68 20 7b 7d 0a 09  .bytelength {}..
13540 09 09 09 69 6e 64 65 78 20 7b 7d 0a 09 09 09 09  ...index {}.....
13550 6c 65 6e 67 74 68 20 7b 7d 0a 09 09 09 09 72 61  length {}.....ra
13560 6e 67 65 20 2d 0a 09 09 09 09 72 65 70 6c 61 63  nge -.....replac
13570 65 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70  e { return [Disp
13580 6c 61 79 48 69 6e 74 73 20 3c 6c 61 73 74 3e 5d  layHints <last>]
13590 20 7d 0a 09 09 09 09 72 65 70 65 61 74 20 7b 7d   }.....repeat {}
135a0 0a 09 09 09 09 74 6f 6c 6f 77 65 72 20 2d 0a 09  .....tolower -..
135b0 09 09 09 74 6f 74 69 74 6c 65 20 2d 0a 09 09 09  ...totitle -....
135c0 09 74 6f 75 70 70 65 72 20 7b 20 72 65 74 75 72  .toupper { retur
135d0 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
135e0 3f 6c 61 73 74 3f 5d 20 7d 0a 09 09 09 09 74 72  ?last?] }.....tr
135f0 69 6d 20 2d 0a 09 09 09 09 74 72 69 6d 6c 65 66  im -.....trimlef
13600 74 20 2d 0a 09 09 09 09 74 72 69 6d 72 69 67 68  t -.....trimrigh
13610 74 20 7b 7d 0a 09 09 09 09 77 6f 72 64 65 6e 64  t {}.....wordend
13620 20 2d 0a 09 09 09 09 77 6f 72 64 73 74 61 72 74   -.....wordstart
13630 20 7b 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 09 64   {}....}...}...d
13640 65 66 61 75 6c 74 20 7b 0a 09 09 09 73 77 69 74  efault {....swit
13650 63 68 20 2d 2d 20 24 7b 63 6d 64 7d 20 7b 0a 09  ch -- ${cmd} {..
13660 09 09 09 63 6f 6d 70 61 72 65 20 2d 0a 09 09 09  ...compare -....
13670 09 65 71 75 61 6c 20 7b 0a 09 09 09 09 09 69 66  .equal {......if
13680 20 7b 22 2d 6c 65 6e 67 74 68 22 20 3d 3d 20 24   {"-length" == $
13690 7b 70 72 65 76 7d 7d 20 7b 0a 09 09 09 09 09 09  {prev}} {.......
136a0 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
136b0 69 6e 74 73 20 3c 69 6e 74 3e 5d 0a 09 09 09 09  ints <int>].....
136c0 09 7d 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b  .}......return [
136d0 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74  CompleteFromList
136e0 20 24 7b 74 65 78 74 7d 20 5c 0a 09 09 09 09 09   ${text} \......
136f0 5b 52 65 6d 6f 76 65 55 73 65 64 4f 70 74 69 6f  [RemoveUsedOptio
13700 6e 73 20 24 6c 69 6e 65 20 7b 2d 6e 6f 63 61 73  ns $line {-nocas
13710 65 20 2d 6c 65 6e 67 74 68 20 3c 73 74 72 69 6e  e -length <strin
13720 67 3e 7d 5d 5d 0a 09 09 09 09 7d 0a 0a 09 09 09  g>}]].....}.....
13730 09 69 73 20 7b 0a 09 09 09 09 09 69 66 20 7b 22  .is {......if {"
13740 2d 66 61 69 6c 69 6e 64 65 78 22 20 3d 3d 20 24  -failindex" == $
13750 7b 70 72 65 76 7d 7d 20 7b 0a 09 09 09 09 09 09  {prev}} {.......
13760 72 65 74 75 72 6e 20 5b 56 61 72 43 6f 6d 70 6c  return [VarCompl
13770 65 74 69 6f 6e 20 24 7b 74 65 78 74 7d 5d 0a 09  etion ${text}]..
13780 09 09 09 09 7d 0a 09 09 09 09 09 72 65 74 75 72  ....}......retur
13790 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c  n [CompleteFromL
137a0 69 73 74 20 24 7b 74 65 78 74 7d 20 5c 0a 09 09  ist ${text} \...
137b0 09 09 09 5b 52 65 6d 6f 76 65 55 73 65 64 4f 70  ...[RemoveUsedOp
137c0 74 69 6f 6e 73 20 24 7b 6c 69 6e 65 7d 20 7b 2d  tions ${line} {-
137d0 73 74 72 69 63 74 20 2d 66 61 69 6c 69 6e 64 65  strict -failinde
137e0 78 20 3c 73 74 72 69 6e 67 3e 7d 5d 5d 0a 09 09  x <string>}]]...
137f0 09 09 7d 0a 0a 09 09 09 09 72 65 70 6c 61 63 65  ..}......replace
13800 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
13810 61 79 48 69 6e 74 73 20 3f 6e 65 77 53 74 72 69  ayHints ?newStri
13820 6e 67 3f 5d 20 7d 0a 09 09 09 7d 0a 09 09 7d 0a  ng?] }....}...}.
13830 09 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a  .}..return "".}.
13840 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 73  .proc complete(s
13850 75 62 73 74 29 20 7b 74 65 78 74 20 73 74 61 72  ubst) {text star
13860 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d  t end line pos m
13870 6f 64 7d 20 7b 0a 09 72 65 74 75 72 6e 20 5b 43  od} {..return [C
13880 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20  ompleteFromList 
13890 24 7b 74 65 78 74 7d 20 5b 52 65 6d 6f 76 65 55  ${text} [RemoveU
138a0 73 65 64 4f 70 74 69 6f 6e 73 20 24 7b 6c 69 6e  sedOptions ${lin
138b0 65 7d 20 7b 0a 09 09 2d 6e 6f 62 61 63 6b 73 6c  e} {...-nobacksl
138c0 61 73 68 65 73 20 2d 6e 6f 63 6f 6d 6d 61 6e 64  ashes -nocommand
138d0 73 20 2d 6e 6f 76 61 72 69 61 62 6c 65 73 20 3c  s -novariables <
138e0 73 74 72 69 6e 67 3e 7d 5d 5d 0a 7d 0a 0a 70 72  string>}]].}..pr
138f0 6f 63 20 63 6f 6d 70 6c 65 74 65 28 73 77 69 74  oc complete(swit
13900 63 68 29 20 7b 74 65 78 74 20 73 74 61 72 74 20  ch) {text start 
13910 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64  end line pos mod
13920 7d 20 7b 0a 09 73 65 74 20 70 72 65 76 20 5b 50  } {..set prev [P
13930 72 65 76 69 6f 75 73 57 6f 72 64 20 24 7b 73 74  reviousWord ${st
13940 61 72 74 7d 20 24 7b 6c 69 6e 65 7d 5d 0a 09 69  art} ${line}]..i
13950 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 7b 70 72  f {[llength ${pr
13960 65 76 7d 5d 20 26 26 20 22 2d 2d 22 20 21 3d 20  ev}] && "--" != 
13970 24 7b 70 72 65 76 7d 20 26 26 20 5c 0a 09 09 28  ${prev} && \...(
13980 22 2d 22 20 3d 3d 20 5b 73 74 72 69 6e 67 20 69  "-" == [string i
13990 6e 64 65 78 20 24 7b 70 72 65 76 7d 20 30 5d 20  ndex ${prev} 0] 
139a0 7c 7c 20 31 20 3d 3d 20 24 7b 70 6f 73 7d 29 7d  || 1 == ${pos})}
139b0 20 7b 0a 09 09 73 65 74 20 63 6d 64 73 20 5b 52   {...set cmds [R
139c0 65 6d 6f 76 65 55 73 65 64 4f 70 74 69 6f 6e 73  emoveUsedOptions
139d0 20 24 7b 6c 69 6e 65 7d 20 7b 0a 09 09 09 2d 65   ${line} {....-e
139e0 78 61 63 74 20 2d 67 6c 6f 62 20 2d 72 65 67 65  xact -glob -rege
139f0 78 70 20 2d 2d 7d 20 7b 2d 2d 7d 5d 0a 09 09 69  xp --} {--}]...i
13a00 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 7b 63 6d  f {[llength ${cm
13a10 64 73 7d 5d 7d 20 7b 0a 09 09 09 72 65 74 75 72  ds}]} {....retur
13a20 6e 20 5b 73 74 72 69 6e 67 20 74 72 69 6d 20 5b  n [string trim [
13a30 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74  CompleteFromList
13a40 20 24 7b 74 65 78 74 7d 20 24 7b 63 6d 64 73 7d   ${text} ${cmds}
13a50 5d 5d 0a 09 09 7d 0a 09 7d 20 65 6c 73 65 20 7b  ]]...}..} else {
13a60 0a 09 09 73 65 74 20 76 69 72 74 75 61 6c 5f 70  ...set virtual_p
13a70 6f 73 20 5b 65 78 70 72 20 24 7b 70 6f 73 7d 20  os [expr ${pos} 
13a80 2d 20 5b 46 69 72 73 74 4e 6f 6e 4f 70 74 69 6f  - [FirstNonOptio
13a90 6e 20 24 7b 6c 69 6e 65 7d 5d 5d 0a 09 09 73 77  n ${line}]]...sw
13aa0 69 74 63 68 20 2d 2d 20 24 7b 76 69 72 74 75 61  itch -- ${virtua
13ab0 6c 5f 70 6f 73 7d 20 7b 0a 09 09 09 30 20 7b 20  l_pos} {....0 { 
13ac0 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
13ad0 69 6e 74 73 20 3c 73 74 72 69 6e 67 3e 5d 20 7d  ints <string>] }
13ae0 0a 09 09 09 31 20 7b 20 72 65 74 75 72 6e 20 5b  ....1 { return [
13af0 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 70 61  DisplayHints <pa
13b00 74 74 65 72 6e 3e 5d 20 7d 0a 09 09 09 32 20 7b  ttern>] }....2 {
13b10 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
13b20 48 69 6e 74 73 20 3c 62 6f 64 79 3e 5d 20 7d 0a  Hints <body>] }.
13b30 09 09 09 64 65 66 61 75 6c 74 20 7b 20 0a 09 09  ...default { ...
13b40 09 09 73 77 69 74 63 68 20 5b 65 78 70 72 20 24  ..switch [expr $
13b50 7b 76 69 72 74 75 61 6c 5f 70 6f 73 7d 20 25 20  {virtual_pos} % 
13b60 32 5d 20 7b 0a 09 09 09 09 09 30 20 7b 20 72 65  2] {......0 { re
13b70 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
13b80 74 73 20 3f 62 6f 64 79 3f 5d 20 7d 0a 09 09 09  ts ?body?] }....
13b90 09 09 31 20 7b 20 72 65 74 75 72 6e 20 5b 44 69  ..1 { return [Di
13ba0 73 70 6c 61 79 48 69 6e 74 73 20 3f 70 61 74 74  splayHints ?patt
13bb0 65 72 6e 3f 5d 20 7d 0a 09 09 09 09 7d 0a 09 09  ern?] }.....}...
13bc0 09 7d 0a 09 09 7d 0a 09 7d 0a 09 72 65 74 75 72  .}...}..}..retur
13bd0 6e 20 22 22 0a 7d 0a 0a 23 20 2d 2d 2d 20 54 43  n "".}..# --- TC
13be0 4c 52 45 41 44 4c 49 4e 45 20 50 41 43 4b 41 47  LREADLINE PACKAG
13bf0 45 20 2d 2d 2d 0a 0a 23 20 63 72 65 61 74 65 20  E ---..# create 
13c00 61 20 74 63 6c 72 65 61 64 6c 69 6e 65 20 6e 61  a tclreadline na
13c10 6d 65 73 70 61 63 65 20 69 6e 73 69 64 65 0a 23  mespace inside.#
13c20 20 74 63 6c 72 65 61 64 6c 69 6e 65 20 61 6e 64   tclreadline and
13c30 20 69 6d 70 6f 72 74 20 73 6f 6d 65 20 63 6f 6d   import some com
13c40 6d 61 6e 64 73 2e 0a 23 0a 6e 61 6d 65 73 70 61  mands..#.namespa
13c50 63 65 20 65 76 61 6c 20 74 63 6c 72 65 61 64 6c  ce eval tclreadl
13c60 69 6e 65 20 7b 0a 09 63 61 74 63 68 20 7b 0a 09  ine {..catch {..
13c70 09 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72  .namespace impor
13c80 74 20 5c 0a 09 09 3a 3a 74 63 6c 72 65 61 64 6c  t \...::tclreadl
13c90 69 6e 65 3a 3a 44 69 73 70 6c 61 79 48 69 6e 74  ine::DisplayHint
13ca0 73 20 5c 0a 09 09 3a 3a 74 63 6c 72 65 61 64 6c  s \...::tclreadl
13cb0 69 6e 65 3a 3a 43 6f 6d 70 6c 65 74 65 46 72 6f  ine::CompleteFro
13cc0 6d 4c 69 73 74 20 5c 0a 09 09 3a 3a 74 63 6c 72  mList \...::tclr
13cd0 65 61 64 6c 69 6e 65 3a 3a 4c 69 6e 64 65 78 20  eadline::Lindex 
13ce0 5c 0a 09 09 3a 3a 74 63 6c 72 65 61 64 6c 69 6e  \...::tclreadlin
13cf0 65 3a 3a 43 6f 6d 70 6c 65 74 65 42 6f 6f 6c 65  e::CompleteBoole
13d00 61 6e 0a 09 7d 0a 7d 0a 0a 70 72 6f 63 20 74 63  an..}.}..proc tc
13d10 6c 72 65 61 64 6c 69 6e 65 3a 3a 63 6f 6d 70 6c  lreadline::compl
13d20 65 74 65 28 72 65 61 64 6c 69 6e 65 29 20 7b 74  ete(readline) {t
13d30 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69  ext start end li
13d40 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73  ne pos mod} {..s
13d50 65 74 20 63 6d 64 20 5b 4c 69 6e 64 65 78 20 24  et cmd [Lindex $
13d60 7b 6c 69 6e 65 7d 20 31 5d 0a 09 73 77 69 74 63  {line} 1]..switc
13d70 68 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09 09  h -- ${pos} {...
13d80 31 20 7b 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70  1 { return [Comp
13d90 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74  leteFromList ${t
13da0 65 78 74 7d 20 7b 0a 09 09 09 72 65 61 64 20 69  ext} {....read i
13db0 6e 69 74 69 61 6c 69 7a 65 20 77 72 69 74 65 20  nitialize write 
13dc0 61 64 64 20 63 6f 6d 70 6c 65 74 65 20 63 75 73  add complete cus
13dd0 74 6f 6d 63 6f 6d 70 6c 65 74 65 72 0a 09 09 09  tomcompleter....
13de0 62 75 69 6c 74 69 6e 63 6f 6d 70 6c 65 74 65 72  builtincompleter
13df0 20 65 6f 66 63 68 61 72 20 72 65 73 65 74 2d 74   eofchar reset-t
13e00 65 72 6d 69 6e 61 6c 20 62 65 6c 6c 7d 5d 0a 09  erminal bell}]..
13e10 09 7d 0a 09 09 32 20 7b 0a 09 09 09 73 77 69 74  .}...2 {....swit
13e20 63 68 20 2d 2d 20 24 7b 63 6d 64 7d 20 7b 0a 09  ch -- ${cmd} {..
13e30 09 09 09 72 65 61 64 20 7b 7d 0a 09 09 09 09 69  ...read {}.....i
13e40 6e 69 74 69 61 6c 69 7a 65 20 7b 7d 0a 09 09 09  nitialize {}....
13e50 09 77 72 69 74 65 20 7b 7d 0a 09 09 09 09 61 64  .write {}.....ad
13e60 64 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70  d { return [Disp
13e70 6c 61 79 48 69 6e 74 73 20 3c 63 6f 6d 70 6c 65  layHints <comple
13e80 74 65 72 4c 69 6e 65 3e 5d 20 7d 0a 09 09 09 09  terLine>] }.....
13e90 63 6f 6d 70 6c 65 74 65 72 20 7b 20 72 65 74 75  completer { retu
13ea0 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
13eb0 20 3c 6c 69 6e 65 3e 5d 20 7d 0a 09 09 09 09 63   <line>] }.....c
13ec0 75 73 74 6f 6d 63 6f 6d 70 6c 65 74 65 72 20 7b  ustomcompleter {
13ed0 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
13ee0 48 69 6e 74 73 20 3f 73 63 72 69 70 74 43 6f 6d  Hints ?scriptCom
13ef0 70 6c 65 74 65 72 3f 5d 20 7d 0a 09 09 09 09 62  pleter?] }.....b
13f00 75 69 6c 74 69 6e 63 6f 6d 70 6c 65 74 65 72 20  uiltincompleter 
13f10 7b 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65  { return [Comple
13f20 74 65 42 6f 6f 6c 65 61 6e 20 24 7b 74 65 78 74  teBoolean ${text
13f30 7d 5d 20 7d 0a 09 09 09 09 65 6f 66 63 68 61 72  }] }.....eofchar
13f40 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
13f50 61 79 48 69 6e 74 73 20 3f 73 63 72 69 70 74 3f  ayHints ?script?
13f60 5d 20 7d 0a 09 09 09 09 72 65 73 65 74 2d 74 65  ] }.....reset-te
13f70 72 6d 69 6e 61 6c 20 7b 0a 09 09 09 09 09 69 66  rminal {......if
13f80 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a   {[info exists :
13f90 3a 65 6e 76 28 54 45 52 4d 29 5d 7d 20 7b 0a 09  :env(TERM)]} {..
13fa0 09 09 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d  .....return [Com
13fb0 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b  pleteFromList ${
13fc0 74 65 78 74 7d 20 24 3a 3a 65 6e 76 28 54 45 52  text} $::env(TER
13fd0 4d 29 5d 0a 09 09 09 09 09 7d 20 65 6c 73 65 20  M)]......} else 
13fe0 7b 0a 09 09 09 09 09 09 72 65 74 75 72 6e 20 5b  {.......return [
13ff0 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3f 74 65  DisplayHints ?te
14000 72 6d 69 6e 61 6c 4e 61 6d 65 3f 5d 0a 09 09 09  rminalName?]....
14010 09 09 7d 0a 09 09 09 09 7d 0a 09 09 09 7d 0a 09  ..}.....}....}..
14020 09 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22 22  .}..}..return ""
14030 0a 7d 0a 0a 23 20 2d 2d 2d 20 45 4e 44 20 4f 46  .}..# --- END OF
14040 20 54 43 4c 52 45 41 44 4c 49 4e 45 20 50 41 43   TCLREADLINE PAC
14050 4b 41 47 45 20 2d 2d 2d 0a 0a 70 72 6f 63 20 63  KAGE ---..proc c
14060 6f 6d 70 6c 65 74 65 28 74 65 6c 6c 29 20 7b 74  omplete(tell) {t
14070 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69  ext start end li
14080 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73  ne pos mod} {..s
14090 77 69 74 63 68 20 2d 2d 20 24 7b 70 6f 73 7d 20  witch -- ${pos} 
140a0 7b 0a 09 09 31 20 7b 20 72 65 74 75 72 6e 20 5b  {...1 { return [
140b0 43 68 61 6e 6e 65 6c 49 64 20 24 7b 74 65 78 74  ChannelId ${text
140c0 7d 5d 20 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20  }] }..}..return 
140d0 22 22 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c  "".}..proc compl
140e0 65 74 65 28 74 65 73 74 74 68 72 65 61 64 29 20  ete(testthread) 
140f0 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20  {text start end 
14100 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a  line pos mod} {.
14110 0a 09 73 65 74 20 63 6d 64 20 5b 4c 69 6e 64 65  ..set cmd [Linde
14120 78 20 24 7b 6c 69 6e 65 7d 20 31 5d 0a 09 73 77  x ${line} 1]..sw
14130 69 74 63 68 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b  itch -- ${pos} {
14140 0a 09 09 31 20 7b 0a 09 09 09 72 65 74 75 72 6e  ...1 {....return
14150 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69   [CompleteFromLi
14160 73 74 20 24 7b 74 65 78 74 7d 20 7b 0a 09 09 09  st ${text} {....
14170 09 2d 61 73 79 6e 63 20 63 72 65 61 74 65 20 65  .-async create e
14180 72 72 6f 72 70 72 6f 63 20 65 78 69 74 20 69 64  rrorproc exit id
14190 20 6e 61 6d 65 73 20 73 65 6e 64 20 77 61 69 74   names send wait
141a0 0a 09 09 09 7d 5d 0a 09 09 7d 0a 09 09 32 20 7b  ....}]...}...2 {
141b0 0a 09 09 09 73 77 69 74 63 68 20 2d 2d 20 5b 50  ....switch -- [P
141c0 72 65 76 69 6f 75 73 57 6f 72 64 20 24 7b 73 74  reviousWord ${st
141d0 61 72 74 7d 20 24 7b 6c 69 6e 65 7d 5d 20 7b 0a  art} ${line}] {.
141e0 09 09 09 09 63 72 65 61 74 65 20 7b 0a 09 09 09  ....create {....
141f0 09 09 72 65 74 75 72 6e 20 5b 42 72 61 63 65 4f  ..return [BraceO
14200 72 43 6f 6d 6d 61 6e 64 20 5c 0a 09 09 09 09 09  rCommand \......
14210 24 7b 74 65 78 74 7d 20 24 7b 73 74 61 72 74 7d  ${text} ${start}
14220 20 24 7b 65 6e 64 7d 20 24 7b 6c 69 6e 65 7d 20   ${end} ${line} 
14230 24 7b 70 6f 73 7d 20 24 7b 6d 6f 64 7d 5d 0a 09  ${pos} ${mod}]..
14240 09 09 09 7d 0a 09 09 09 09 2d 61 73 79 6e 63 20  ...}.....-async 
14250 7b 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b 43  {......return [C
14260 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20  ompleteFromList 
14270 24 7b 74 65 78 74 7d 20 73 65 6e 64 5d 0a 09 09  ${text} send]...
14280 09 09 7d 0a 09 09 09 09 73 65 6e 64 20 7b 0a 09  ..}.....send {..
14290 09 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70  ....return [Comp
142a0 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74  leteFromList ${t
142b0 65 78 74 7d 20 5b 74 65 73 74 74 68 72 65 61 64  ext} [testthread
142c0 20 6e 61 6d 65 73 5d 5d 0a 09 09 09 09 7d 0a 09   names]].....}..
142d0 09 09 09 64 65 66 61 75 6c 74 20 7b 7d 0a 09 09  ...default {}...
142e0 09 7d 0a 09 09 7d 0a 09 09 33 20 7b 0a 09 09 09  .}...}...3 {....
142f0 69 66 20 7b 22 73 65 6e 64 22 20 3d 3d 20 5b 50  if {"send" == [P
14300 72 65 76 69 6f 75 73 57 6f 72 64 20 24 7b 73 74  reviousWord ${st
14310 61 72 74 7d 20 24 7b 6c 69 6e 65 7d 5d 7d 20 7b  art} ${line}]} {
14320 0a 09 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d  .....return [Com
14330 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b  pleteFromList ${
14340 74 65 78 74 7d 20 5b 74 65 73 74 74 68 72 65 61  text} [testthrea
14350 64 20 6e 61 6d 65 73 5d 5d 0a 09 09 09 7d 20 65  d names]]....} e
14360 6c 73 65 69 66 20 7b 22 73 65 6e 64 22 20 3d 3d  lseif {"send" ==
14370 20 24 7b 63 6d 64 7d 7d 20 7b 0a 09 09 09 09 72   ${cmd}} {.....r
14380 65 74 75 72 6e 20 5b 42 72 61 63 65 4f 72 43 6f  eturn [BraceOrCo
14390 6d 6d 61 6e 64 20 5c 0a 09 09 09 09 24 7b 74 65  mmand \.....${te
143a0 78 74 7d 20 24 7b 73 74 61 72 74 7d 20 24 7b 65  xt} ${start} ${e
143b0 6e 64 7d 20 24 7b 6c 69 6e 65 7d 20 24 7b 70 6f  nd} ${line} ${po
143c0 73 7d 20 24 7b 6d 6f 64 7d 5d 0a 09 09 09 7d 0a  s} ${mod}]....}.
143d0 09 09 7d 0a 09 09 34 20 7b 0a 09 09 09 69 66 20  ..}...4 {....if 
143e0 7b 22 73 65 6e 64 22 20 3d 3d 20 5b 4c 69 6e 64  {"send" == [Lind
143f0 65 78 20 24 7b 6c 69 6e 65 7d 20 32 5d 7d 20 7b  ex ${line} 2]} {
14400 0a 09 09 09 09 72 65 74 75 72 6e 20 5b 42 72 61  .....return [Bra
14410 63 65 4f 72 43 6f 6d 6d 61 6e 64 20 5c 0a 09 09  ceOrCommand \...
14420 09 09 24 7b 74 65 78 74 7d 20 24 7b 73 74 61 72  ..${text} ${star
14430 74 7d 20 24 7b 65 6e 64 7d 20 24 7b 6c 69 6e 65  t} ${end} ${line
14440 7d 20 24 7b 70 6f 73 7d 20 24 7b 6d 6f 64 7d 5d  } ${pos} ${mod}]
14450 0a 09 09 09 7d 0a 09 09 7d 0a 09 7d 0a 09 72 65  ....}...}..}..re
14460 74 75 72 6e 20 22 22 0a 7d 0a 0a 70 72 6f 63 20  turn "".}..proc 
14470 63 6f 6d 70 6c 65 74 65 28 74 69 6d 65 29 20 7b  complete(time) {
14480 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c  text start end l
14490 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09  ine pos mod} {..
144a0 73 77 69 74 63 68 20 2d 2d 20 24 7b 70 6f 73 7d  switch -- ${pos}
144b0 20 7b 0a 09 09 31 20 7b 20 72 65 74 75 72 6e 20   {...1 { return 
144c0 5b 42 72 61 63 65 4f 72 43 6f 6d 6d 61 6e 64 20  [BraceOrCommand 
144d0 5c 0a 09 09 09 24 7b 74 65 78 74 7d 20 24 7b 73  \....${text} ${s
144e0 74 61 72 74 7d 20 24 7b 65 6e 64 7d 20 24 7b 6c  tart} ${end} ${l
144f0 69 6e 65 7d 20 24 7b 70 6f 73 7d 20 24 7b 6d 6f  ine} ${pos} ${mo
14500 64 7d 5d 0a 09 09 7d 0a 09 09 32 20 7b 20 72 65  d}]...}...2 { re
14510 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
14520 74 73 20 3f 63 6f 75 6e 74 3f 5d 20 7d 0a 09 7d  ts ?count?] }..}
14530 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a 0a 70  ..return "".}..p
14540 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 74 72 61  roc complete(tra
14550 63 65 29 20 7b 74 65 78 74 20 73 74 61 72 74 20  ce) {text start 
14560 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64  end line pos mod
14570 7d 20 7b 0a 09 73 65 74 20 63 6d 64 20 5b 4c 69  } {..set cmd [Li
14580 6e 64 65 78 20 24 7b 6c 69 6e 65 7d 20 31 5d 0a  ndex ${line} 1].
14590 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 70 6f 73  .switch -- ${pos
145a0 7d 20 7b 0a 09 09 31 20 7b 0a 09 09 09 72 65 74  } {...1 {....ret
145b0 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f  urn [CompleteFro
145c0 6d 4c 69 73 74 20 24 7b 6d 6f 64 7d 20 7b 76 61  mList ${mod} {va
145d0 72 69 61 62 6c 65 20 76 64 65 6c 65 74 65 20 76  riable vdelete v
145e0 69 6e 66 6f 7d 5d 0a 09 09 7d 0a 09 09 32 20 7b  info}]...}...2 {
145f0 0a 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70  ....return [Comp
14600 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74  leteFromList ${t
14610 65 78 74 7d 20 5c 0a 09 09 09 5b 75 70 6c 65 76  ext} \....[uplev
14620 65 6c 20 5b 69 6e 66 6f 20 6c 65 76 65 6c 5d 20  el [info level] 
14630 69 6e 66 6f 20 76 61 72 73 20 22 24 7b 6d 6f 64  info vars "${mod
14640 7d 2a 22 5d 5d 0a 09 09 7d 0a 09 09 33 20 7b 0a  }*"]]...}...3 {.
14650 09 09 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 63  ...switch -- ${c
14660 6d 64 7d 20 7b 0a 09 09 09 09 76 61 72 69 61 62  md} {.....variab
14670 6c 65 20 2d 0a 09 09 09 09 76 61 72 69 61 62 6c  le -.....variabl
14680 65 20 7b 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70  e { return [Comp
14690 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74  leteFromList ${t
146a0 65 78 74 7d 20 7b 72 20 77 20 75 7d 5d 20 7d 0a  ext} {r w u}] }.
146b0 09 09 09 09 76 64 65 6c 65 74 65 20 7b 0a 09 09  ....vdelete {...
146c0 09 09 09 73 65 74 20 76 61 72 20 5b 50 72 65 76  ...set var [Prev
146d0 69 6f 75 73 57 6f 72 64 20 24 7b 73 74 61 72 74  iousWord ${start
146e0 7d 20 24 7b 6c 69 6e 65 7d 5d 0a 09 09 09 09 09  } ${line}]......
146f0 73 65 74 20 6d 6f 64 65 73 20 22 22 0a 09 09 09  set modes ""....
14700 09 09 66 6f 72 65 61 63 68 20 69 6e 66 6f 20 5b  ..foreach info [
14710 75 70 6c 65 76 65 6c 20 5b 69 6e 66 6f 20 6c 65  uplevel [info le
14720 76 65 6c 5d 20 74 72 61 63 65 20 76 69 6e 66 6f  vel] trace vinfo
14730 20 24 7b 76 61 72 7d 5d 20 7b 0a 09 09 09 09 09   ${var}] {......
14740 09 6c 61 70 70 65 6e 64 20 6d 6f 64 65 73 20 5b  .lappend modes [
14750 6c 69 6e 64 65 78 20 24 7b 69 6e 66 6f 7d 20 30  lindex ${info} 0
14760 5d 0a 09 09 09 09 09 7d 0a 09 09 09 09 09 72 65  ]......}......re
14770 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72  turn [CompleteFr
14780 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 24  omList ${text} $
14790 7b 6d 6f 64 65 73 7d 5d 0a 09 09 09 09 7d 0a 09  {modes}].....}..
147a0 09 09 7d 0a 09 09 7d 0a 09 09 34 20 7b 0a 09 09  ..}...}...4 {...
147b0 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 63 6d 64  .switch -- ${cmd
147c0 7d 20 7b 0a 09 09 09 09 76 61 72 69 61 62 6c 65  } {.....variable
147d0 20 7b 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b   {......return [
147e0 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74  CompleteFromList
147f0 20 24 7b 74 65 78 74 7d 20 5c 0a 09 09 09 09 09   ${text} \......
14800 5b 43 6f 6d 6d 61 6e 64 43 6f 6d 70 6c 65 74 69  [CommandCompleti
14810 6f 6e 20 24 7b 74 65 78 74 7d 5d 5d 0a 09 09 09  on ${text}]]....
14820 09 7d 0a 09 09 09 09 76 64 65 6c 65 74 65 20 7b  .}.....vdelete {
14830 0a 09 09 09 09 09 73 65 74 20 76 61 72 20 5b 4c  ......set var [L
14840 69 6e 64 65 78 20 24 7b 6c 69 6e 65 7d 20 32 5d  index ${line} 2]
14850 0a 09 09 09 09 09 73 65 74 20 6d 6f 64 65 20 5b  ......set mode [
14860 50 72 65 76 69 6f 75 73 57 6f 72 64 20 24 7b 73  PreviousWord ${s
14870 74 61 72 74 7d 20 24 7b 6c 69 6e 65 7d 5d 0a 09  tart} ${line}]..
14880 09 09 09 09 73 65 74 20 73 63 72 69 70 74 73 20  ....set scripts 
14890 22 22 0a 09 09 09 09 09 66 6f 72 65 61 63 68 20  ""......foreach 
148a0 69 6e 66 6f 20 5b 75 70 6c 65 76 65 6c 20 5b 69  info [uplevel [i
148b0 6e 66 6f 20 6c 65 76 65 6c 5d 20 74 72 61 63 65  nfo level] trace
148c0 20 76 69 6e 66 6f 20 24 7b 76 61 72 7d 5d 20 7b   vinfo ${var}] {
148d0 0a 09 09 09 09 09 09 69 66 20 7b 24 7b 6d 6f 64  .......if {${mod
148e0 65 7d 20 3d 3d 20 5b 6c 69 6e 64 65 78 20 24 7b  e} == [lindex ${
148f0 69 6e 66 6f 7d 20 30 5d 7d 20 7b 0a 09 09 09 09  info} 0]} {.....
14900 09 09 09 6c 61 70 70 65 6e 64 20 73 63 72 69 70  ...lappend scrip
14910 74 73 20 5b 6c 69 73 74 20 5b 6c 69 6e 64 65 78  ts [list [lindex
14920 20 24 7b 69 6e 66 6f 7d 20 31 5d 5d 0a 09 09 09   ${info} 1]]....
14930 09 09 09 7d 0a 09 09 09 09 09 7d 0a 09 09 09 09  ...}......}.....
14940 09 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79  .return [Display
14950 48 69 6e 74 73 20 24 7b 73 63 72 69 70 74 73 7d  Hints ${scripts}
14960 5d 0a 09 09 09 09 7d 0a 09 09 09 7d 0a 09 09 7d  ].....}....}...}
14970 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d  ..}..return "".}
14980 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28  ..proc complete(
14990 75 6e 6b 6e 6f 77 6e 29 20 7b 74 65 78 74 20 73  unknown) {text s
149a0 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f  tart end line po
149b0 73 20 6d 6f 64 7d 20 7b 0a 09 73 77 69 74 63 68  s mod} {..switch
149c0 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09 09 31   -- ${pos} {...1
149d0 20 7b 0a 09 09 09 72 65 74 75 72 6e 20 5b 43 6f   {....return [Co
149e0 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24  mpleteFromList $
149f0 7b 74 65 78 74 7d 20 5b 43 6f 6d 6d 61 6e 64 43  {text} [CommandC
14a00 6f 6d 70 6c 65 74 69 6f 6e 20 24 7b 74 65 78 74  ompletion ${text
14a10 7d 5d 5d 0a 09 09 7d 0a 09 09 64 65 66 61 75 6c  }]]...}...defaul
14a20 74 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70  t { return [Disp
14a30 6c 61 79 48 69 6e 74 73 20 3f 61 72 67 3f 5d 20  layHints ?arg?] 
14a40 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a  }..}..return "".
14a50 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65  }..proc complete
14a60 28 75 6e 73 65 74 29 20 7b 74 65 78 74 20 73 74  (unset) {text st
14a70 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73  art end line pos
14a80 20 6d 6f 64 7d 20 7b 0a 09 72 65 74 75 72 6e 20   mod} {..return 
14a90 5b 56 61 72 43 6f 6d 70 6c 65 74 69 6f 6e 20 24  [VarCompletion $
14aa0 7b 74 65 78 74 7d 5d 0a 7d 0a 0a 70 72 6f 63 20  {text}].}..proc 
14ab0 63 6f 6d 70 6c 65 74 65 28 75 70 64 61 74 65 29  complete(update)
14ac0 20 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64   {text start end
14ad0 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b   line pos mod} {
14ae0 0a 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 70 6f  ..switch -- ${po
14af0 73 7d 20 7b 0a 09 09 31 20 7b 20 72 65 74 75 72  s} {...1 { retur
14b00 6e 20 69 64 6c 65 74 61 73 6b 73 20 7d 0a 09 7d  n idletasks }..}
14b10 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a 0a 70  ..return "".}..p
14b20 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 75 70 6c  roc complete(upl
14b30 65 76 65 6c 29 20 7b 74 65 78 74 20 73 74 61 72  evel) {text star
14b40 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d  t end line pos m
14b50 6f 64 7d 20 7b 0a 09 73 65 74 20 6f 6e 65 20 5b  od} {..set one [
14b60 4c 69 6e 64 65 78 20 24 7b 6c 69 6e 65 7d 20 31  Lindex ${line} 1
14b70 5d 0a 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 70  ]..switch -- ${p
14b80 6f 73 7d 20 7b 0a 09 09 31 20 7b 0a 09 09 09 72  os} {...1 {....r
14b90 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46  eturn [CompleteF
14ba0 72 6f 6d 4c 69 73 74 20 5c 0a 09 09 09 24 7b 74  romList \....${t
14bb0 65 78 74 7d 20 22 3f 6c 65 76 65 6c 3f 20 5b 43  ext} "?level? [C
14bc0 6f 6d 6d 61 6e 64 43 6f 6d 70 6c 65 74 69 6f 6e  ommandCompletion
14bd0 20 24 7b 74 65 78 74 7d 5d 22 5d 0a 09 09 7d 0a   ${text}]"]...}.
14be0 09 09 32 20 7b 0a 09 09 09 69 66 20 7b 22 23 22  ..2 {....if {"#"
14bf0 20 3d 3d 20 5b 73 74 72 69 6e 67 20 69 6e 64 65   == [string inde
14c00 78 20 24 7b 6f 6e 65 7d 20 30 5d 20 7c 7c 20 5b  x ${one} 0] || [
14c10 72 65 67 65 78 70 20 7b 5e 5b 30 2d 39 5d 2a 24  regexp {^[0-9]*$
14c20 7d 20 24 7b 6f 6e 65 7d 5d 7d 20 7b 0a 09 09 09  } ${one}]} {....
14c30 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74  .return [Complet
14c40 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74  eFromList ${text
14c50 7d 20 5b 43 6f 6d 6d 61 6e 64 43 6f 6d 70 6c 65  } [CommandComple
14c60 74 69 6f 6e 20 24 7b 74 65 78 74 7d 5d 5d 0a 09  tion ${text}]]..
14c70 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09 72  ..} else {.....r
14c80 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
14c90 6e 74 73 20 3f 61 72 67 3f 5d 0a 09 09 09 7d 0a  nts ?arg?]....}.
14ca0 09 09 7d 0a 09 09 64 65 66 61 75 6c 74 20 7b 20  ..}...default { 
14cb0 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
14cc0 69 6e 74 73 20 3f 61 72 67 3f 5d 20 7d 0a 09 7d  ints ?arg?] }..}
14cd0 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a 0a 70  ..return "".}..p
14ce0 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 75 70 76  roc complete(upv
14cf0 61 72 29 20 7b 74 65 78 74 20 73 74 61 72 74 20  ar) {text start 
14d00 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64  end line pos mod
14d10 7d 20 7b 0a 09 73 65 74 20 6f 6e 65 20 5b 4c 69  } {..set one [Li
14d20 6e 64 65 78 20 24 7b 6c 69 6e 65 7d 20 31 5d 0a  ndex ${line} 1].
14d30 09 73 77 69 74 63 68 20 2d 2d 20 24 70 6f 73 20  .switch -- $pos 
14d40 7b 0a 09 09 31 20 7b 0a 09 09 09 72 65 74 75 72  {...1 {....retur
14d50 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
14d60 7b 3f 6c 65 76 65 6c 3f 20 3c 6f 74 68 65 72 56  {?level? <otherV
14d70 61 72 3e 7d 5d 0a 09 09 7d 0a 09 09 32 20 7b 0a  ar>}]...}...2 {.
14d80 09 09 09 69 66 20 7b 22 23 22 20 3d 3d 20 5b 73  ...if {"#" == [s
14d90 74 72 69 6e 67 20 69 6e 64 65 78 20 24 6f 6e 65  tring index $one
14da0 20 30 5d 20 7c 7c 20 5b 72 65 67 65 78 70 20 7b   0] || [regexp {
14db0 5e 5b 30 2d 39 5d 2a 24 7d 20 24 6f 6e 65 5d 7d  ^[0-9]*$} $one]}
14dc0 20 7b 0a 09 09 09 09 72 65 74 75 72 6e 20 5b 44   {.....return [D
14dd0 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 6f 74 68  isplayHints <oth
14de0 65 72 56 61 72 3e 5d 0a 09 09 09 7d 20 65 6c 73  erVar>]....} els
14df0 65 20 7b 0a 09 09 09 09 72 65 74 75 72 6e 20 5b  e {.....return [
14e00 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 6d 79  DisplayHints <my
14e10 56 61 72 3e 5d 0a 09 09 09 7d 0a 09 09 7d 0a 09  Var>]....}...}..
14e20 09 33 20 7b 0a 09 09 09 69 66 20 7b 22 23 22 20  .3 {....if {"#" 
14e30 3d 3d 20 5b 73 74 72 69 6e 67 20 69 6e 64 65 78  == [string index
14e40 20 24 6f 6e 65 20 30 5d 20 7c 7c 20 5b 72 65 67   $one 0] || [reg
14e50 65 78 70 20 7b 5e 5b 30 2d 39 5d 2a 24 7d 20 24  exp {^[0-9]*$} $
14e60 6f 6e 65 5d 7d 20 7b 0a 09 09 09 09 72 65 74 75  one]} {.....retu
14e70 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
14e80 20 3c 6d 79 56 61 72 3e 5d 0a 09 09 09 7d 20 65   <myVar>]....} e
14e90 6c 73 65 20 7b 0a 09 09 09 09 72 65 74 75 72 6e  lse {.....return
14ea0 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3f   [DisplayHints ?
14eb0 6f 74 68 65 72 56 61 72 3f 5d 0a 09 09 09 7d 0a  otherVar?]....}.
14ec0 09 09 7d 0a 09 09 64 65 66 61 75 6c 74 20 7b 0a  ..}...default {.
14ed0 09 09 09 73 65 74 20 76 69 72 74 75 61 6c 5f 70  ...set virtual_p
14ee0 6f 73 20 24 70 6f 73 0a 09 09 09 69 66 20 7b 22  os $pos....if {"
14ef0 23 22 20 3d 3d 20 5b 73 74 72 69 6e 67 20 69 6e  #" == [string in
14f00 64 65 78 20 24 6f 6e 65 20 30 5d 20 7c 7c 20 5b  dex $one 0] || [
14f10 72 65 67 65 78 70 20 7b 5e 5b 30 2d 39 5d 2a 24  regexp {^[0-9]*$
14f20 7d 20 24 6f 6e 65 5d 7d 20 7b 0a 09 09 09 09 69  } $one]} {.....i
14f30 6e 63 72 20 76 69 72 74 75 61 6c 5f 70 6f 73 0a  ncr virtual_pos.
14f40 09 09 09 7d 0a 09 09 09 73 77 69 74 63 68 20 5b  ...}....switch [
14f50 65 78 70 72 20 24 76 69 72 74 75 61 6c 5f 70 6f  expr $virtual_po
14f60 73 20 25 20 32 5d 20 7b 0a 09 09 09 09 30 20 7b  s % 2] {.....0 {
14f70 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
14f80 48 69 6e 74 73 20 3f 6d 79 56 61 72 3f 5d 20 7d  Hints ?myVar?] }
14f90 0a 09 09 09 09 31 20 7b 20 72 65 74 75 72 6e 20  .....1 { return 
14fa0 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3f 6f  [DisplayHints ?o
14fb0 74 68 65 72 56 61 72 3f 5d 20 7d 0a 09 09 09 7d  therVar?] }....}
14fc0 0a 09 09 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20  ...}..}..return 
14fd0 22 22 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c  "".}..proc compl
14fe0 65 74 65 28 76 61 72 69 61 62 6c 65 29 20 7b 74  ete(variable) {t
14ff0 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69  ext start end li
15000 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73  ne pos mod} {..s
15010 65 74 20 6d 6f 64 75 6c 6f 20 5b 65 78 70 72 20  et modulo [expr 
15020 24 70 6f 73 20 25 20 32 5d 0a 09 73 77 69 74 63  $pos % 2]..switc
15030 68 20 2d 2d 20 24 6d 6f 64 75 6c 6f 20 7b 0a 09  h -- $modulo {..
15040 09 31 20 7b 20 72 65 74 75 72 6e 20 5b 56 61 72  .1 { return [Var
15050 43 6f 6d 70 6c 65 74 69 6f 6e 20 24 7b 74 65 78  Completion ${tex
15060 74 7d 5d 20 7d 0a 09 09 30 20 7b 0a 09 09 09 69  t}] }...0 {....i
15070 66 20 7b 24 74 65 78 74 20 3d 3d 20 22 22 20 7c  f {$text == "" |
15080 7c 20 24 74 65 78 74 20 3d 3d 20 22 5c 22 22 20  | $text == "\"" 
15090 7c 7c 20 24 74 65 78 74 20 3d 3d 20 22 5c 7b 22  || $text == "\{"
150a0 7d 20 7b 0a 09 09 09 09 73 65 74 20 6c 69 6e 65  } {.....set line
150b0 20 5b 51 75 6f 74 65 51 75 6f 74 65 73 20 24 6c   [QuoteQuotes $l
150c0 69 6e 65 5d 0a 09 09 09 09 69 66 20 7b 5b 63 61  ine].....if {[ca
150d0 74 63 68 20 5b 6c 69 73 74 20 73 65 74 20 76 61  tch [list set va
150e0 6c 75 65 20 5b 6c 69 73 74 20 5b 75 70 6c 65 76  lue [list [uplev
150f0 65 6c 20 5b 69 6e 66 6f 20 6c 65 76 65 6c 5d 20  el [info level] 
15100 5c 0a 09 09 09 09 09 73 65 74 20 5b 50 72 65 76  \......set [Prev
15110 69 6f 75 73 57 6f 72 64 20 24 73 74 61 72 74 20  iousWord $start 
15120 24 6c 69 6e 65 5d 5d 5d 5d 20 6d 73 67 5d 0a 09  $line]]]] msg]..
15130 09 09 09 7d 20 7b 0a 09 09 09 09 09 72 65 74 75  ...} {......retu
15140 72 6e 20 22 22 0a 09 09 09 09 7d 20 65 6c 73 65  rn "".....} else
15150 20 7b 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b   {......return [
15160 51 75 6f 74 65 20 24 76 61 6c 75 65 20 24 7b 74  Quote $value ${t
15170 65 78 74 7d 5d 0a 09 09 09 09 7d 0a 09 09 09 7d  ext}].....}....}
15180 0a 09 09 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20  ...}..}..return 
15190 22 22 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c  "".}..proc compl
151a0 65 74 65 28 76 77 61 69 74 29 20 7b 74 65 78 74  ete(vwait) {text
151b0 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20   start end line 
151c0 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73 77 69 74  pos mod} {..swit
151d0 63 68 20 2d 2d 20 24 70 6f 73 20 7b 0a 09 09 31  ch -- $pos {...1
151e0 20 7b 20 72 65 74 75 72 6e 20 5b 56 61 72 43 6f   { return [VarCo
151f0 6d 70 6c 65 74 69 6f 6e 20 24 7b 6d 6f 64 7d 5d  mpletion ${mod}]
15200 20 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22 22   }..}..return ""
15210 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74  .}..proc complet
15220 65 28 77 68 69 6c 65 29 20 7b 74 65 78 74 20 73  e(while) {text s
15230 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f  tart end line po
15240 73 20 6d 6f 64 7d 20 7b 0a 09 73 77 69 74 63 68  s mod} {..switch
15250 20 2d 2d 20 24 70 6f 73 20 7b 0a 09 09 31 20 2d   -- $pos {...1 -
15260 0a 09 09 32 20 7b 0a 09 09 09 72 65 74 75 72 6e  ...2 {....return
15270 20 5b 42 72 61 63 65 4f 72 43 6f 6d 6d 61 6e 64   [BraceOrCommand
15280 20 24 74 65 78 74 20 24 73 74 61 72 74 20 24 65   $text $start $e
15290 6e 64 20 24 6c 69 6e 65 20 24 70 6f 73 20 24 6d  nd $line $pos $m
152a0 6f 64 5d 0a 09 09 7d 0a 09 7d 0a 09 72 65 74 75  od]...}..}..retu
152b0 72 6e 20 22 22 0a 7d 0a 0a 23 20 2d 2d 2d 2d 2d  rn "".}..# -----
152c0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
152d0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
152e0 0a 23 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .#              
152f0 20 20 20 20 54 4b 0a 23 20 2d 2d 2d 2d 2d 2d 2d      TK.# -------
15300 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15310 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a  --------------..
15320 23 20 47 45 4e 45 52 49 43 20 57 49 44 47 45 54  # GENERIC WIDGET
15330 20 43 4f 4e 46 49 47 55 52 41 54 49 4f 4e 0a 0a   CONFIGURATION..
15340 70 72 6f 63 20 57 69 64 67 65 74 43 68 69 6c 64  proc WidgetChild
15350 72 65 6e 20 7b 7b 70 61 74 74 65 72 6e 20 2e 7d  ren {{pattern .}
15360 7d 20 7b 0a 09 72 65 67 73 75 62 20 7b 5e 28 5b  } {..regsub {^([
15370 5e 5c 2e 5d 29 7d 20 24 7b 70 61 74 74 65 72 6e  ^\.])} ${pattern
15380 7d 20 7b 5c 2e 5c 31 7d 20 70 61 74 74 65 72 6e  } {\.\1} pattern
15390 0a 09 69 66 20 7b 21 5b 73 74 72 69 6e 67 20 6c  ..if {![string l
153a0 65 6e 67 74 68 20 24 7b 70 61 74 74 65 72 6e 7d  ength ${pattern}
153b0 5d 7d 20 7b 0a 09 09 73 65 74 20 70 61 74 74 65  ]} {...set patte
153c0 72 6e 20 2e 0a 09 7d 0a 09 69 66 20 7b 5b 77 69  rn ...}..if {[wi
153d0 6e 66 6f 20 65 78 69 73 74 73 20 24 7b 70 61 74  nfo exists ${pat
153e0 74 65 72 6e 7d 5d 7d 20 7b 0a 09 09 72 65 74 75  tern}]} {...retu
153f0 72 6e 20 5b 63 6f 6e 63 61 74 20 24 7b 70 61 74  rn [concat ${pat
15400 74 65 72 6e 7d 20 5b 77 69 6e 66 6f 20 63 68 69  tern} [winfo chi
15410 6c 64 72 65 6e 20 24 7b 70 61 74 74 65 72 6e 7d  ldren ${pattern}
15420 5d 5d 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 09 72  ]]..} else {...r
15430 65 67 73 75 62 20 7b 2e 5b 5e 2e 5d 2a 24 7d 20  egsub {.[^.]*$} 
15440 24 70 61 74 74 65 72 6e 20 7b 2e 7d 20 70 61 74  $pattern {.} pat
15450 74 65 72 6e 0a 09 09 69 66 20 7b 5b 77 69 6e 66  tern...if {[winf
15460 6f 20 65 78 69 73 74 73 20 24 7b 70 61 74 74 65  o exists ${patte
15470 72 6e 7d 5d 7d 20 7b 0a 09 09 09 72 65 74 75 72  rn}]} {....retur
15480 6e 20 5b 63 6f 6e 63 61 74 20 24 7b 70 61 74 74  n [concat ${patt
15490 65 72 6e 7d 20 5b 77 69 6e 66 6f 20 63 68 69 6c  ern} [winfo chil
154a0 64 72 65 6e 20 24 7b 70 61 74 74 65 72 6e 7d 5d  dren ${pattern}]
154b0 5d 0a 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09  ]...} else {....
154c0 72 65 74 75 72 6e 20 22 22 0a 09 09 7d 0a 09 7d  return ""...}..}
154d0 0a 7d 0a 0a 70 72 6f 63 20 57 69 64 67 65 74 44  .}..proc WidgetD
154e0 65 73 63 65 6e 64 61 6e 74 73 20 7b 7b 70 61 74  escendants {{pat
154f0 74 65 72 6e 20 2e 7d 7d 20 7b 0a 09 73 65 74 20  tern .}} {..set 
15500 74 72 65 65 20 5b 57 69 64 67 65 74 43 68 69 6c  tree [WidgetChil
15510 64 72 65 6e 20 24 7b 70 61 74 74 65 72 6e 7d 5d  dren ${pattern}]
15520 0a 09 66 6f 72 65 61 63 68 20 77 69 64 67 65 74  ..foreach widget
15530 20 24 74 72 65 65 20 7b 0a 09 09 61 70 70 65 6e   $tree {...appen
15540 64 20 74 72 65 65 20 22 20 5b 57 69 64 67 65 74  d tree " [Widget
15550 44 65 73 63 65 6e 64 61 6e 74 73 20 24 77 69 64  Descendants $wid
15560 67 65 74 5d 22 0a 09 7d 0a 09 72 65 74 75 72 6e  get]"..}..return
15570 20 24 74 72 65 65 0a 7d 0a 0a 70 72 6f 63 20 54   $tree.}..proc T
15580 6f 70 6c 65 76 65 6c 57 69 6e 64 6f 77 73 20 7b  oplevelWindows {
15590 7d 20 7b 0a 09 73 65 74 20 63 68 69 6c 64 72 65  } {..set childre
155a0 6e 20 5b 57 69 64 67 65 74 43 68 69 6c 64 72 65  n [WidgetChildre
155b0 6e 20 22 22 5d 0a 09 73 65 74 20 74 6f 70 6c 65  n ""]..set tople
155c0 76 65 6c 73 20 22 22 0a 09 66 6f 72 65 61 63 68  vels ""..foreach
155d0 20 77 69 64 67 65 74 20 24 63 68 69 6c 64 72 65   widget $childre
155e0 6e 20 7b 0a 09 09 73 65 74 20 74 6f 70 6c 65 76  n {...set toplev
155f0 65 6c 20 5b 77 69 6e 66 6f 20 74 6f 70 6c 65 76  el [winfo toplev
15600 65 6c 20 24 77 69 64 67 65 74 5d 0a 09 09 69 66  el $widget]...if
15610 20 7b 2d 31 20 3d 3d 20 5b 6c 73 65 61 72 63 68   {-1 == [lsearch
15620 20 24 74 6f 70 6c 65 76 65 6c 73 20 24 74 6f 70   $toplevels $top
15630 6c 65 76 65 6c 5d 7d 20 7b 0a 09 09 09 6c 61 70  level]} {....lap
15640 70 65 6e 64 20 74 6f 70 6c 65 76 65 6c 73 20 24  pend toplevels $
15650 74 6f 70 6c 65 76 65 6c 0a 09 09 7d 0a 09 7d 0a  toplevel...}..}.
15660 09 72 65 74 75 72 6e 20 24 74 6f 70 6c 65 76 65  .return $topleve
15670 6c 73 0a 7d 0a 0a 23 20 54 4f 44 4f 0a 23 20 77  ls.}..# TODO.# w
15680 72 69 74 65 20 61 20 64 69 73 70 61 74 63 68 65  rite a dispatche
15690 72 20 68 65 72 65 2c 20 77 68 69 63 68 20 67 65  r here, which ge
156a0 74 73 20 74 68 65 20 77 69 64 67 65 74 20 63 6c  ts the widget cl
156b0 61 73 73 20 6e 61 6d 65 0a 23 20 61 6e 64 20 63  ass name.# and c
156c0 61 6c 6c 73 20 73 70 65 63 69 66 69 63 20 63 6f  alls specific co
156d0 6d 70 6c 65 74 65 72 73 2e 0a 23 0a 23 20 70 72  mpleters..#.# pr
156e0 6f 63 20 63 6f 6d 70 6c 65 74 65 28 57 49 44 47  oc complete(WIDG
156f0 45 54 5f 43 4f 4d 4d 41 4e 44 29 20 7b 74 65 78  ET_COMMAND) {tex
15700 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65  t start end line
15710 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 23 20 09 72   pos mod} {.# .r
15720 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46  eturn [CompleteF
15730 72 6f 6d 4f 70 74 69 6f 6e 73 4f 72 53 75 62 43  romOptionsOrSubC
15740 6d 64 73 20 24 7b 74 65 78 74 7d 20 24 7b 73 74  mds ${text} ${st
15750 61 72 74 7d 20 24 7b 65 6e 64 7d 20 24 7b 6c 69  art} ${end} ${li
15760 6e 65 7d 20 24 7b 70 6f 73 7d 5d 0a 23 20 7d 0a  ne} ${pos}].# }.
15770 0a 70 72 6f 63 20 45 76 65 6e 74 75 61 6c 6c 79  .proc Eventually
15780 49 6e 73 65 72 74 4c 65 61 64 69 6e 67 44 6f 74  InsertLeadingDot
15790 20 7b 74 65 78 74 20 66 61 6c 6c 62 61 63 6b 7d   {text fallback}
157a0 20 7b 0a 09 69 66 20 7b 21 5b 73 74 72 69 6e 67   {..if {![string
157b0 20 6c 65 6e 67 74 68 20 24 7b 74 65 78 74 7d 5d   length ${text}]
157c0 7d 20 7b 0a 09 09 72 65 74 75 72 6e 20 5b 6c 69  } {...return [li
157d0 73 74 20 2e 20 7b 7d 5d 0a 09 7d 20 65 6c 73 65  st . {}]..} else
157e0 20 7b 0a 09 09 72 65 74 75 72 6e 20 5b 44 69 73   {...return [Dis
157f0 70 6c 61 79 48 69 6e 74 73 20 24 7b 66 61 6c 6c  playHints ${fall
15800 62 61 63 6b 7d 5d 0a 09 7d 0a 7d 0a 0a 23 20 54  back}]..}.}..# T
15810 4f 44 4f 0a 70 72 6f 63 20 43 6f 6d 70 6c 65 74  ODO.proc Complet
15820 65 43 6f 6c 6f 72 20 7b 74 65 78 74 20 7b 61 64  eColor {text {ad
15830 64 20 22 22 7d 7d 20 7b 0a 0a 09 23 20 77 65 20  d ""}} {...# we 
15840 73 65 74 20 74 68 65 20 76 61 72 69 61 62 6c 65  set the variable
15850 20 6f 6e 6c 79 20 6f 6e 63 65 20 74 6f 20 73 70   only once to sp
15860 65 65 64 20 75 70 2e 0a 09 23 0a 09 76 61 72 69  eed up...#..vari
15870 61 62 6c 65 20 63 6f 6c 6f 72 73 0a 09 76 61 72  able colors..var
15880 69 61 62 6c 65 20 6e 75 6d 62 65 72 6c 65 73 73  iable numberless
15890 5f 63 6f 6c 6f 72 73 0a 0a 09 69 66 20 21 5b 69  _colors...if ![i
158a0 6e 66 6f 20 65 78 69 73 74 73 20 63 6f 6c 6f 72  nfo exists color
158b0 73 5d 20 7b 0a 09 09 23 20 66 72 6f 6d 20 2e 2e  s] {...# from ..
158c0 20 58 31 31 52 36 2f 6c 69 62 2f 58 31 31 2f 72   X11R6/lib/X11/r
158d0 67 62 2e 74 78 74 0a 09 09 23 20 0a 09 09 73 65  gb.txt...# ...se
158e0 74 20 63 6f 6c 6f 72 73 20 7b 0a 09 09 09 73 6e  t colors {....sn
158f0 6f 77 20 47 68 6f 73 74 57 68 69 74 65 20 57 68  ow GhostWhite Wh
15900 69 74 65 53 6d 6f 6b 65 20 67 61 69 6e 73 62 6f  iteSmoke gainsbo
15910 72 6f 20 46 6c 6f 72 61 6c 57 68 69 74 65 20 4f  ro FloralWhite O
15920 6c 64 4c 61 63 65 20 6c 69 6e 65 6e 0a 09 09 09  ldLace linen....
15930 41 6e 74 69 71 75 65 57 68 69 74 65 20 50 61 70  AntiqueWhite Pap
15940 61 79 61 57 68 69 70 20 42 6c 61 6e 63 68 65 64  ayaWhip Blanched
15950 41 6c 6d 6f 6e 64 20 62 69 73 71 75 65 20 50 65  Almond bisque Pe
15960 61 63 68 50 75 66 66 20 4e 61 76 61 6a 6f 57 68  achPuff NavajoWh
15970 69 74 65 0a 09 09 09 6d 6f 63 63 61 73 69 6e 20  ite....moccasin 
15980 63 6f 72 6e 73 69 6c 6b 20 69 76 6f 72 79 20 4c  cornsilk ivory L
15990 65 6d 6f 6e 43 68 69 66 66 6f 6e 20 73 65 61 73  emonChiffon seas
159a0 68 65 6c 6c 20 68 6f 6e 65 79 64 65 77 20 4d 69  hell honeydew Mi
159b0 6e 74 43 72 65 61 6d 0a 09 09 09 61 7a 75 72 65  ntCream....azure
159c0 20 41 6c 69 63 65 42 6c 75 65 20 6c 61 76 65 6e   AliceBlue laven
159d0 64 65 72 20 4c 61 76 65 6e 64 65 72 42 6c 75 73  der LavenderBlus
159e0 68 20 4d 69 73 74 79 52 6f 73 65 20 77 68 69 74  h MistyRose whit
159f0 65 20 62 6c 61 63 6b 0a 09 09 09 44 61 72 6b 53  e black....DarkS
15a00 6c 61 74 65 47 72 61 79 20 44 61 72 6b 53 6c 61  lateGray DarkSla
15a10 74 65 47 72 65 79 20 44 69 6d 47 72 61 79 20 44  teGrey DimGray D
15a20 69 6d 47 72 65 79 20 53 6c 61 74 65 47 72 61 79  imGrey SlateGray
15a30 20 53 6c 61 74 65 47 72 65 79 0a 09 09 09 4c 69   SlateGrey....Li
15a40 67 68 74 53 6c 61 74 65 47 72 61 79 20 4c 69 67  ghtSlateGray Lig
15a50 68 74 53 6c 61 74 65 47 72 65 79 20 67 72 61 79  htSlateGrey gray
15a60 20 67 72 65 79 20 4c 69 67 68 74 47 72 65 79 20   grey LightGrey 
15a70 4c 69 67 68 74 47 72 61 79 0a 09 09 09 4d 69 64  LightGray....Mid
15a80 6e 69 67 68 74 42 6c 75 65 20 6e 61 76 79 20 4e  nightBlue navy N
15a90 61 76 79 42 6c 75 65 20 43 6f 72 6e 66 6c 6f 77  avyBlue Cornflow
15aa0 65 72 42 6c 75 65 20 44 61 72 6b 53 6c 61 74 65  erBlue DarkSlate
15ab0 42 6c 75 65 20 53 6c 61 74 65 42 6c 75 65 0a 09  Blue SlateBlue..
15ac0 09 09 4d 65 64 69 75 6d 53 6c 61 74 65 42 6c 75  ..MediumSlateBlu
15ad0 65 20 4c 69 67 68 74 53 6c 61 74 65 42 6c 75 65  e LightSlateBlue
15ae0 20 4d 65 64 69 75 6d 42 6c 75 65 20 52 6f 79 61   MediumBlue Roya
15af0 6c 42 6c 75 65 20 62 6c 75 65 20 44 6f 64 67 65  lBlue blue Dodge
15b00 72 42 6c 75 65 0a 09 09 09 44 65 65 70 53 6b 79  rBlue....DeepSky
15b10 42 6c 75 65 20 53 6b 79 42 6c 75 65 20 4c 69 67  Blue SkyBlue Lig
15b20 68 74 53 6b 79 42 6c 75 65 20 53 74 65 65 6c 42  htSkyBlue SteelB
15b30 6c 75 65 20 4c 69 67 68 74 53 74 65 65 6c 42 6c  lue LightSteelBl
15b40 75 65 20 4c 69 67 68 74 42 6c 75 65 0a 09 09 09  ue LightBlue....
15b50 50 6f 77 64 65 72 42 6c 75 65 20 50 61 6c 65 54  PowderBlue PaleT
15b60 75 72 71 75 6f 69 73 65 20 44 61 72 6b 54 75 72  urquoise DarkTur
15b70 71 75 6f 69 73 65 20 4d 65 64 69 75 6d 54 75 72  quoise MediumTur
15b80 71 75 6f 69 73 65 20 74 75 72 71 75 6f 69 73 65  quoise turquoise
15b90 0a 09 09 09 63 79 61 6e 20 4c 69 67 68 74 43 79  ....cyan LightCy
15ba0 61 6e 20 43 61 64 65 74 42 6c 75 65 20 4d 65 64  an CadetBlue Med
15bb0 69 75 6d 41 71 75 61 6d 61 72 69 6e 65 20 61 71  iumAquamarine aq
15bc0 75 61 6d 61 72 69 6e 65 20 44 61 72 6b 47 72 65  uamarine DarkGre
15bd0 65 6e 0a 09 09 09 44 61 72 6b 4f 6c 69 76 65 47  en....DarkOliveG
15be0 72 65 65 6e 20 44 61 72 6b 53 65 61 47 72 65 65  reen DarkSeaGree
15bf0 6e 20 53 65 61 47 72 65 65 6e 20 4d 65 64 69 75  n SeaGreen Mediu
15c00 6d 53 65 61 47 72 65 65 6e 20 4c 69 67 68 74 53  mSeaGreen LightS
15c10 65 61 47 72 65 65 6e 0a 09 09 09 50 61 6c 65 47  eaGreen....PaleG
15c20 72 65 65 6e 20 53 70 72 69 6e 67 47 72 65 65 6e  reen SpringGreen
15c30 20 4c 61 77 6e 47 72 65 65 6e 20 67 72 65 65 6e   LawnGreen green
15c40 20 63 68 61 72 74 72 65 75 73 65 20 4d 65 64 69   chartreuse Medi
15c50 75 6d 53 70 72 69 6e 67 47 72 65 65 6e 0a 09 09  umSpringGreen...
15c60 09 47 72 65 65 6e 59 65 6c 6c 6f 77 20 4c 69 6d  .GreenYellow Lim
15c70 65 47 72 65 65 6e 20 59 65 6c 6c 6f 77 47 72 65  eGreen YellowGre
15c80 65 6e 20 46 6f 72 65 73 74 47 72 65 65 6e 20 4f  en ForestGreen O
15c90 6c 69 76 65 44 72 61 62 20 44 61 72 6b 4b 68 61  liveDrab DarkKha
15ca0 6b 69 0a 09 09 09 6b 68 61 6b 69 20 50 61 6c 65  ki....khaki Pale
15cb0 47 6f 6c 64 65 6e 72 6f 64 20 4c 69 67 68 74 47  Goldenrod LightG
15cc0 6f 6c 64 65 6e 72 6f 64 59 65 6c 6c 6f 77 20 4c  oldenrodYellow L
15cd0 69 67 68 74 59 65 6c 6c 6f 77 20 79 65 6c 6c 6f  ightYellow yello
15ce0 77 0a 09 09 09 67 6f 6c 64 20 4c 69 67 68 74 47  w....gold LightG
15cf0 6f 6c 64 65 6e 72 6f 64 20 67 6f 6c 64 65 6e 72  oldenrod goldenr
15d00 6f 64 20 44 61 72 6b 47 6f 6c 64 65 6e 72 6f 64  od DarkGoldenrod
15d10 20 52 6f 73 79 42 72 6f 77 6e 20 49 6e 64 69 61   RosyBrown India
15d20 6e 52 65 64 0a 09 09 09 53 61 64 64 6c 65 42 72  nRed....SaddleBr
15d30 6f 77 6e 20 73 69 65 6e 6e 61 20 70 65 72 75 20  own sienna peru 
15d40 62 75 72 6c 79 77 6f 6f 64 20 62 65 69 67 65 20  burlywood beige 
15d50 77 68 65 61 74 20 53 61 6e 64 79 42 72 6f 77 6e  wheat SandyBrown
15d60 20 74 61 6e 0a 09 09 09 63 68 6f 63 6f 6c 61 74   tan....chocolat
15d70 65 20 66 69 72 65 62 72 69 63 6b 20 62 72 6f 77  e firebrick brow
15d80 6e 20 44 61 72 6b 53 61 6c 6d 6f 6e 20 73 61 6c  n DarkSalmon sal
15d90 6d 6f 6e 20 4c 69 67 68 74 53 61 6c 6d 6f 6e 20  mon LightSalmon 
15da0 6f 72 61 6e 67 65 0a 09 09 09 44 61 72 6b 4f 72  orange....DarkOr
15db0 61 6e 67 65 20 63 6f 72 61 6c 20 4c 69 67 68 74  ange coral Light
15dc0 43 6f 72 61 6c 20 74 6f 6d 61 74 6f 20 4f 72 61  Coral tomato Ora
15dd0 6e 67 65 52 65 64 20 72 65 64 20 48 6f 74 50 69  ngeRed red HotPi
15de0 6e 6b 20 44 65 65 70 50 69 6e 6b 0a 09 09 09 70  nk DeepPink....p
15df0 69 6e 6b 20 4c 69 67 68 74 50 69 6e 6b 20 50 61  ink LightPink Pa
15e00 6c 65 56 69 6f 6c 65 74 52 65 64 20 6d 61 72 6f  leVioletRed maro
15e10 6f 6e 20 4d 65 64 69 75 6d 56 69 6f 6c 65 74 52  on MediumVioletR
15e20 65 64 20 56 69 6f 6c 65 74 52 65 64 0a 09 09 09  ed VioletRed....
15e30 6d 61 67 65 6e 74 61 20 76 69 6f 6c 65 74 20 70  magenta violet p
15e40 6c 75 6d 20 6f 72 63 68 69 64 20 4d 65 64 69 75  lum orchid Mediu
15e50 6d 4f 72 63 68 69 64 20 44 61 72 6b 4f 72 63 68  mOrchid DarkOrch
15e60 69 64 20 44 61 72 6b 56 69 6f 6c 65 74 0a 09 09  id DarkViolet...
15e70 09 42 6c 75 65 56 69 6f 6c 65 74 20 70 75 72 70  .BlueViolet purp
15e80 6c 65 20 4d 65 64 69 75 6d 50 75 72 70 6c 65 20  le MediumPurple 
15e90 74 68 69 73 74 6c 65 20 73 6e 6f 77 31 20 73 6e  thistle snow1 sn
15ea0 6f 77 32 20 73 6e 6f 77 33 20 73 6e 6f 77 34 0a  ow2 snow3 snow4.
15eb0 09 09 09 73 65 61 73 68 65 6c 6c 31 20 73 65 61  ...seashell1 sea
15ec0 73 68 65 6c 6c 32 20 73 65 61 73 68 65 6c 6c 33  shell2 seashell3
15ed0 20 73 65 61 73 68 65 6c 6c 34 20 41 6e 74 69 71   seashell4 Antiq
15ee0 75 65 57 68 69 74 65 31 20 41 6e 74 69 71 75 65  ueWhite1 Antique
15ef0 57 68 69 74 65 32 0a 09 09 09 41 6e 74 69 71 75  White2....Antiqu
15f00 65 57 68 69 74 65 33 20 41 6e 74 69 71 75 65 57  eWhite3 AntiqueW
15f10 68 69 74 65 34 20 62 69 73 71 75 65 31 20 62 69  hite4 bisque1 bi
15f20 73 71 75 65 32 20 62 69 73 71 75 65 33 20 62 69  sque2 bisque3 bi
15f30 73 71 75 65 34 0a 09 09 09 50 65 61 63 68 50 75  sque4....PeachPu
15f40 66 66 31 20 50 65 61 63 68 50 75 66 66 32 20 50  ff1 PeachPuff2 P
15f50 65 61 63 68 50 75 66 66 33 20 50 65 61 63 68 50  eachPuff3 PeachP
15f60 75 66 66 34 20 4e 61 76 61 6a 6f 57 68 69 74 65  uff4 NavajoWhite
15f70 31 0a 09 09 09 4e 61 76 61 6a 6f 57 68 69 74 65  1....NavajoWhite
15f80 32 20 4e 61 76 61 6a 6f 57 68 69 74 65 33 20 4e  2 NavajoWhite3 N
15f90 61 76 61 6a 6f 57 68 69 74 65 34 20 4c 65 6d 6f  avajoWhite4 Lemo
15fa0 6e 43 68 69 66 66 6f 6e 31 20 4c 65 6d 6f 6e 43  nChiffon1 LemonC
15fb0 68 69 66 66 6f 6e 32 0a 09 09 09 4c 65 6d 6f 6e  hiffon2....Lemon
15fc0 43 68 69 66 66 6f 6e 33 20 4c 65 6d 6f 6e 43 68  Chiffon3 LemonCh
15fd0 69 66 66 6f 6e 34 20 63 6f 72 6e 73 69 6c 6b 31  iffon4 cornsilk1
15fe0 20 63 6f 72 6e 73 69 6c 6b 32 20 63 6f 72 6e 73   cornsilk2 corns
15ff0 69 6c 6b 33 20 63 6f 72 6e 73 69 6c 6b 34 0a 09  ilk3 cornsilk4..
16000 09 09 69 76 6f 72 79 31 20 69 76 6f 72 79 32 20  ..ivory1 ivory2 
16010 69 76 6f 72 79 33 20 69 76 6f 72 79 34 20 68 6f  ivory3 ivory4 ho
16020 6e 65 79 64 65 77 31 20 68 6f 6e 65 79 64 65 77  neydew1 honeydew
16030 32 20 68 6f 6e 65 79 64 65 77 33 20 68 6f 6e 65  2 honeydew3 hone
16040 79 64 65 77 34 0a 09 09 09 4c 61 76 65 6e 64 65  ydew4....Lavende
16050 72 42 6c 75 73 68 31 20 4c 61 76 65 6e 64 65 72  rBlush1 Lavender
16060 42 6c 75 73 68 32 20 4c 61 76 65 6e 64 65 72 42  Blush2 LavenderB
16070 6c 75 73 68 33 20 4c 61 76 65 6e 64 65 72 42 6c  lush3 LavenderBl
16080 75 73 68 34 0a 09 09 09 4d 69 73 74 79 52 6f 73  ush4....MistyRos
16090 65 31 20 4d 69 73 74 79 52 6f 73 65 32 20 4d 69  e1 MistyRose2 Mi
160a0 73 74 79 52 6f 73 65 33 20 4d 69 73 74 79 52 6f  styRose3 MistyRo
160b0 73 65 34 20 61 7a 75 72 65 31 20 61 7a 75 72 65  se4 azure1 azure
160c0 32 20 61 7a 75 72 65 33 0a 09 09 09 61 7a 75 72  2 azure3....azur
160d0 65 34 20 53 6c 61 74 65 42 6c 75 65 31 20 53 6c  e4 SlateBlue1 Sl
160e0 61 74 65 42 6c 75 65 32 20 53 6c 61 74 65 42 6c  ateBlue2 SlateBl
160f0 75 65 33 20 53 6c 61 74 65 42 6c 75 65 34 20 52  ue3 SlateBlue4 R
16100 6f 79 61 6c 42 6c 75 65 31 0a 09 09 09 52 6f 79  oyalBlue1....Roy
16110 61 6c 42 6c 75 65 32 20 52 6f 79 61 6c 42 6c 75  alBlue2 RoyalBlu
16120 65 33 20 52 6f 79 61 6c 42 6c 75 65 34 20 62 6c  e3 RoyalBlue4 bl
16130 75 65 31 20 62 6c 75 65 32 20 62 6c 75 65 33 20  ue1 blue2 blue3 
16140 62 6c 75 65 34 0a 09 09 09 44 6f 64 67 65 72 42  blue4....DodgerB
16150 6c 75 65 31 20 44 6f 64 67 65 72 42 6c 75 65 32  lue1 DodgerBlue2
16160 20 44 6f 64 67 65 72 42 6c 75 65 33 20 44 6f 64   DodgerBlue3 Dod
16170 67 65 72 42 6c 75 65 34 20 53 74 65 65 6c 42 6c  gerBlue4 SteelBl
16180 75 65 31 0a 09 09 09 53 74 65 65 6c 42 6c 75 65  ue1....SteelBlue
16190 32 20 53 74 65 65 6c 42 6c 75 65 33 20 53 74 65  2 SteelBlue3 Ste
161a0 65 6c 42 6c 75 65 34 20 44 65 65 70 53 6b 79 42  elBlue4 DeepSkyB
161b0 6c 75 65 31 20 44 65 65 70 53 6b 79 42 6c 75 65  lue1 DeepSkyBlue
161c0 32 0a 09 09 09 44 65 65 70 53 6b 79 42 6c 75 65  2....DeepSkyBlue
161d0 33 20 44 65 65 70 53 6b 79 42 6c 75 65 34 20 53  3 DeepSkyBlue4 S
161e0 6b 79 42 6c 75 65 31 20 53 6b 79 42 6c 75 65 32  kyBlue1 SkyBlue2
161f0 20 53 6b 79 42 6c 75 65 33 20 53 6b 79 42 6c 75   SkyBlue3 SkyBlu
16200 65 34 0a 09 09 09 4c 69 67 68 74 53 6b 79 42 6c  e4....LightSkyBl
16210 75 65 31 20 4c 69 67 68 74 53 6b 79 42 6c 75 65  ue1 LightSkyBlue
16220 32 20 4c 69 67 68 74 53 6b 79 42 6c 75 65 33 20  2 LightSkyBlue3 
16230 4c 69 67 68 74 53 6b 79 42 6c 75 65 34 20 53 6c  LightSkyBlue4 Sl
16240 61 74 65 47 72 61 79 31 0a 09 09 09 53 6c 61 74  ateGray1....Slat
16250 65 47 72 61 79 32 20 53 6c 61 74 65 47 72 61 79  eGray2 SlateGray
16260 33 20 53 6c 61 74 65 47 72 61 79 34 20 4c 69 67  3 SlateGray4 Lig
16270 68 74 53 74 65 65 6c 42 6c 75 65 31 20 4c 69 67  htSteelBlue1 Lig
16280 68 74 53 74 65 65 6c 42 6c 75 65 32 0a 09 09 09  htSteelBlue2....
16290 4c 69 67 68 74 53 74 65 65 6c 42 6c 75 65 33 20  LightSteelBlue3 
162a0 4c 69 67 68 74 53 74 65 65 6c 42 6c 75 65 34 20  LightSteelBlue4 
162b0 4c 69 67 68 74 42 6c 75 65 31 20 4c 69 67 68 74  LightBlue1 Light
162c0 42 6c 75 65 32 20 4c 69 67 68 74 42 6c 75 65 33  Blue2 LightBlue3
162d0 0a 09 09 09 4c 69 67 68 74 42 6c 75 65 34 20 4c  ....LightBlue4 L
162e0 69 67 68 74 43 79 61 6e 31 20 4c 69 67 68 74 43  ightCyan1 LightC
162f0 79 61 6e 32 20 4c 69 67 68 74 43 79 61 6e 33 20  yan2 LightCyan3 
16300 4c 69 67 68 74 43 79 61 6e 34 0a 09 09 09 50 61  LightCyan4....Pa
16310 6c 65 54 75 72 71 75 6f 69 73 65 31 20 50 61 6c  leTurquoise1 Pal
16320 65 54 75 72 71 75 6f 69 73 65 32 20 50 61 6c 65  eTurquoise2 Pale
16330 54 75 72 71 75 6f 69 73 65 33 20 50 61 6c 65 54  Turquoise3 PaleT
16340 75 72 71 75 6f 69 73 65 34 0a 09 09 09 43 61 64  urquoise4....Cad
16350 65 74 42 6c 75 65 31 20 43 61 64 65 74 42 6c 75  etBlue1 CadetBlu
16360 65 32 20 43 61 64 65 74 42 6c 75 65 33 20 43 61  e2 CadetBlue3 Ca
16370 64 65 74 42 6c 75 65 34 20 74 75 72 71 75 6f 69  detBlue4 turquoi
16380 73 65 31 0a 09 09 09 74 75 72 71 75 6f 69 73 65  se1....turquoise
16390 32 20 74 75 72 71 75 6f 69 73 65 33 20 74 75 72  2 turquoise3 tur
163a0 71 75 6f 69 73 65 34 20 63 79 61 6e 31 20 63 79  quoise4 cyan1 cy
163b0 61 6e 32 20 63 79 61 6e 33 20 63 79 61 6e 34 0a  an2 cyan3 cyan4.
163c0 09 09 09 44 61 72 6b 53 6c 61 74 65 47 72 61 79  ...DarkSlateGray
163d0 31 20 44 61 72 6b 53 6c 61 74 65 47 72 61 79 32  1 DarkSlateGray2
163e0 20 44 61 72 6b 53 6c 61 74 65 47 72 61 79 33 20   DarkSlateGray3 
163f0 44 61 72 6b 53 6c 61 74 65 47 72 61 79 34 0a 09  DarkSlateGray4..
16400 09 09 61 71 75 61 6d 61 72 69 6e 65 31 20 61 71  ..aquamarine1 aq
16410 75 61 6d 61 72 69 6e 65 32 20 61 71 75 61 6d 61  uamarine2 aquama
16420 72 69 6e 65 33 20 61 71 75 61 6d 61 72 69 6e 65  rine3 aquamarine
16430 34 20 44 61 72 6b 53 65 61 47 72 65 65 6e 31 0a  4 DarkSeaGreen1.
16440 09 09 09 44 61 72 6b 53 65 61 47 72 65 65 6e 32  ...DarkSeaGreen2
16450 20 44 61 72 6b 53 65 61 47 72 65 65 6e 33 20 44   DarkSeaGreen3 D
16460 61 72 6b 53 65 61 47 72 65 65 6e 34 20 53 65 61  arkSeaGreen4 Sea
16470 47 72 65 65 6e 31 20 53 65 61 47 72 65 65 6e 32  Green1 SeaGreen2
16480 0a 09 09 09 53 65 61 47 72 65 65 6e 33 20 53 65  ....SeaGreen3 Se
16490 61 47 72 65 65 6e 34 20 50 61 6c 65 47 72 65 65  aGreen4 PaleGree
164a0 6e 31 20 50 61 6c 65 47 72 65 65 6e 32 20 50 61  n1 PaleGreen2 Pa
164b0 6c 65 47 72 65 65 6e 33 20 50 61 6c 65 47 72 65  leGreen3 PaleGre
164c0 65 6e 34 0a 09 09 09 53 70 72 69 6e 67 47 72 65  en4....SpringGre
164d0 65 6e 31 20 53 70 72 69 6e 67 47 72 65 65 6e 32  en1 SpringGreen2
164e0 20 53 70 72 69 6e 67 47 72 65 65 6e 33 20 53 70   SpringGreen3 Sp
164f0 72 69 6e 67 47 72 65 65 6e 34 20 67 72 65 65 6e  ringGreen4 green
16500 31 20 67 72 65 65 6e 32 0a 09 09 09 67 72 65 65  1 green2....gree
16510 6e 33 20 67 72 65 65 6e 34 20 63 68 61 72 74 72  n3 green4 chartr
16520 65 75 73 65 31 20 63 68 61 72 74 72 65 75 73 65  euse1 chartreuse
16530 32 20 63 68 61 72 74 72 65 75 73 65 33 20 63 68  2 chartreuse3 ch
16540 61 72 74 72 65 75 73 65 34 0a 09 09 09 4f 6c 69  artreuse4....Oli
16550 76 65 44 72 61 62 31 20 4f 6c 69 76 65 44 72 61  veDrab1 OliveDra
16560 62 32 20 4f 6c 69 76 65 44 72 61 62 33 20 4f 6c  b2 OliveDrab3 Ol
16570 69 76 65 44 72 61 62 34 20 44 61 72 6b 4f 6c 69  iveDrab4 DarkOli
16580 76 65 47 72 65 65 6e 31 0a 09 09 09 44 61 72 6b  veGreen1....Dark
16590 4f 6c 69 76 65 47 72 65 65 6e 32 20 44 61 72 6b  OliveGreen2 Dark
165a0 4f 6c 69 76 65 47 72 65 65 6e 33 20 44 61 72 6b  OliveGreen3 Dark
165b0 4f 6c 69 76 65 47 72 65 65 6e 34 20 6b 68 61 6b  OliveGreen4 khak
165c0 69 31 20 6b 68 61 6b 69 32 0a 09 09 09 6b 68 61  i1 khaki2....kha
165d0 6b 69 33 20 6b 68 61 6b 69 34 20 4c 69 67 68 74  ki3 khaki4 Light
165e0 47 6f 6c 64 65 6e 72 6f 64 31 20 4c 69 67 68 74  Goldenrod1 Light
165f0 47 6f 6c 64 65 6e 72 6f 64 32 20 4c 69 67 68 74  Goldenrod2 Light
16600 47 6f 6c 64 65 6e 72 6f 64 33 0a 09 09 09 4c 69  Goldenrod3....Li
16610 67 68 74 47 6f 6c 64 65 6e 72 6f 64 34 20 4c 69  ghtGoldenrod4 Li
16620 67 68 74 59 65 6c 6c 6f 77 31 20 4c 69 67 68 74  ghtYellow1 Light
16630 59 65 6c 6c 6f 77 32 20 4c 69 67 68 74 59 65 6c  Yellow2 LightYel
16640 6c 6f 77 33 20 4c 69 67 68 74 59 65 6c 6c 6f 77  low3 LightYellow
16650 34 0a 09 09 09 79 65 6c 6c 6f 77 31 20 79 65 6c  4....yellow1 yel
16660 6c 6f 77 32 20 79 65 6c 6c 6f 77 33 20 79 65 6c  low2 yellow3 yel
16670 6c 6f 77 34 20 67 6f 6c 64 31 20 67 6f 6c 64 32  low4 gold1 gold2
16680 20 67 6f 6c 64 33 20 67 6f 6c 64 34 20 67 6f 6c   gold3 gold4 gol
16690 64 65 6e 72 6f 64 31 0a 09 09 09 67 6f 6c 64 65  denrod1....golde
166a0 6e 72 6f 64 32 20 67 6f 6c 64 65 6e 72 6f 64 33  nrod2 goldenrod3
166b0 20 67 6f 6c 64 65 6e 72 6f 64 34 20 44 61 72 6b   goldenrod4 Dark
166c0 47 6f 6c 64 65 6e 72 6f 64 31 20 44 61 72 6b 47  Goldenrod1 DarkG
166d0 6f 6c 64 65 6e 72 6f 64 32 0a 09 09 09 44 61 72  oldenrod2....Dar
166e0 6b 47 6f 6c 64 65 6e 72 6f 64 33 20 44 61 72 6b  kGoldenrod3 Dark
166f0 47 6f 6c 64 65 6e 72 6f 64 34 20 52 6f 73 79 42  Goldenrod4 RosyB
16700 72 6f 77 6e 31 20 52 6f 73 79 42 72 6f 77 6e 32  rown1 RosyBrown2
16710 20 52 6f 73 79 42 72 6f 77 6e 33 0a 09 09 09 52   RosyBrown3....R
16720 6f 73 79 42 72 6f 77 6e 34 20 49 6e 64 69 61 6e  osyBrown4 Indian
16730 52 65 64 31 20 49 6e 64 69 61 6e 52 65 64 32 20  Red1 IndianRed2 
16740 49 6e 64 69 61 6e 52 65 64 33 20 49 6e 64 69 61  IndianRed3 India
16750 6e 52 65 64 34 20 73 69 65 6e 6e 61 31 0a 09 09  nRed4 sienna1...
16760 09 73 69 65 6e 6e 61 32 20 73 69 65 6e 6e 61 33  .sienna2 sienna3
16770 20 73 69 65 6e 6e 61 34 20 62 75 72 6c 79 77 6f   sienna4 burlywo
16780 6f 64 31 20 62 75 72 6c 79 77 6f 6f 64 32 20 62  od1 burlywood2 b
16790 75 72 6c 79 77 6f 6f 64 33 20 62 75 72 6c 79 77  urlywood3 burlyw
167a0 6f 6f 64 34 0a 09 09 09 77 68 65 61 74 31 20 77  ood4....wheat1 w
167b0 68 65 61 74 32 20 77 68 65 61 74 33 20 77 68 65  heat2 wheat3 whe
167c0 61 74 34 20 74 61 6e 31 20 74 61 6e 32 20 74 61  at4 tan1 tan2 ta
167d0 6e 33 20 74 61 6e 34 20 63 68 6f 63 6f 6c 61 74  n3 tan4 chocolat
167e0 65 31 0a 09 09 09 63 68 6f 63 6f 6c 61 74 65 32  e1....chocolate2
167f0 20 63 68 6f 63 6f 6c 61 74 65 33 20 63 68 6f 63   chocolate3 choc
16800 6f 6c 61 74 65 34 20 66 69 72 65 62 72 69 63 6b  olate4 firebrick
16810 31 20 66 69 72 65 62 72 69 63 6b 32 20 66 69 72  1 firebrick2 fir
16820 65 62 72 69 63 6b 33 0a 09 09 09 66 69 72 65 62  ebrick3....fireb
16830 72 69 63 6b 34 20 62 72 6f 77 6e 31 20 62 72 6f  rick4 brown1 bro
16840 77 6e 32 20 62 72 6f 77 6e 33 20 62 72 6f 77 6e  wn2 brown3 brown
16850 34 20 73 61 6c 6d 6f 6e 31 20 73 61 6c 6d 6f 6e  4 salmon1 salmon
16860 32 20 73 61 6c 6d 6f 6e 33 0a 09 09 09 73 61 6c  2 salmon3....sal
16870 6d 6f 6e 34 20 4c 69 67 68 74 53 61 6c 6d 6f 6e  mon4 LightSalmon
16880 31 20 4c 69 67 68 74 53 61 6c 6d 6f 6e 32 20 4c  1 LightSalmon2 L
16890 69 67 68 74 53 61 6c 6d 6f 6e 33 20 4c 69 67 68  ightSalmon3 Ligh
168a0 74 53 61 6c 6d 6f 6e 34 20 6f 72 61 6e 67 65 31  tSalmon4 orange1
168b0 0a 09 09 09 6f 72 61 6e 67 65 32 20 6f 72 61 6e  ....orange2 oran
168c0 67 65 33 20 6f 72 61 6e 67 65 34 20 44 61 72 6b  ge3 orange4 Dark
168d0 4f 72 61 6e 67 65 31 20 44 61 72 6b 4f 72 61 6e  Orange1 DarkOran
168e0 67 65 32 20 44 61 72 6b 4f 72 61 6e 67 65 33 0a  ge2 DarkOrange3.
168f0 09 09 09 44 61 72 6b 4f 72 61 6e 67 65 34 20 63  ...DarkOrange4 c
16900 6f 72 61 6c 31 20 63 6f 72 61 6c 32 20 63 6f 72  oral1 coral2 cor
16910 61 6c 33 20 63 6f 72 61 6c 34 20 74 6f 6d 61 74  al3 coral4 tomat
16920 6f 31 20 74 6f 6d 61 74 6f 32 20 74 6f 6d 61 74  o1 tomato2 tomat
16930 6f 33 0a 09 09 09 74 6f 6d 61 74 6f 34 20 4f 72  o3....tomato4 Or
16940 61 6e 67 65 52 65 64 31 20 4f 72 61 6e 67 65 52  angeRed1 OrangeR
16950 65 64 32 20 4f 72 61 6e 67 65 52 65 64 33 20 4f  ed2 OrangeRed3 O
16960 72 61 6e 67 65 52 65 64 34 20 72 65 64 31 20 72  rangeRed4 red1 r
16970 65 64 32 0a 09 09 09 72 65 64 33 20 72 65 64 34  ed2....red3 red4
16980 20 44 65 65 70 50 69 6e 6b 31 20 44 65 65 70 50   DeepPink1 DeepP
16990 69 6e 6b 32 20 44 65 65 70 50 69 6e 6b 33 20 44  ink2 DeepPink3 D
169a0 65 65 70 50 69 6e 6b 34 20 48 6f 74 50 69 6e 6b  eepPink4 HotPink
169b0 31 0a 09 09 09 48 6f 74 50 69 6e 6b 32 20 48 6f  1....HotPink2 Ho
169c0 74 50 69 6e 6b 33 20 48 6f 74 50 69 6e 6b 34 20  tPink3 HotPink4 
169d0 70 69 6e 6b 31 20 70 69 6e 6b 32 20 70 69 6e 6b  pink1 pink2 pink
169e0 33 20 70 69 6e 6b 34 20 4c 69 67 68 74 50 69 6e  3 pink4 LightPin
169f0 6b 31 0a 09 09 09 4c 69 67 68 74 50 69 6e 6b 32  k1....LightPink2
16a00 20 4c 69 67 68 74 50 69 6e 6b 33 20 4c 69 67 68   LightPink3 Ligh
16a10 74 50 69 6e 6b 34 20 50 61 6c 65 56 69 6f 6c 65  tPink4 PaleViole
16a20 74 52 65 64 31 20 50 61 6c 65 56 69 6f 6c 65 74  tRed1 PaleViolet
16a30 52 65 64 32 0a 09 09 09 50 61 6c 65 56 69 6f 6c  Red2....PaleViol
16a40 65 74 52 65 64 33 20 50 61 6c 65 56 69 6f 6c 65  etRed3 PaleViole
16a50 74 52 65 64 34 20 6d 61 72 6f 6f 6e 31 20 6d 61  tRed4 maroon1 ma
16a60 72 6f 6f 6e 32 20 6d 61 72 6f 6f 6e 33 20 6d 61  roon2 maroon3 ma
16a70 72 6f 6f 6e 34 0a 09 09 09 56 69 6f 6c 65 74 52  roon4....VioletR
16a80 65 64 31 20 56 69 6f 6c 65 74 52 65 64 32 20 56  ed1 VioletRed2 V
16a90 69 6f 6c 65 74 52 65 64 33 20 56 69 6f 6c 65 74  ioletRed3 Violet
16aa0 52 65 64 34 20 6d 61 67 65 6e 74 61 31 20 6d 61  Red4 magenta1 ma
16ab0 67 65 6e 74 61 32 0a 09 09 09 6d 61 67 65 6e 74  genta2....magent
16ac0 61 33 20 6d 61 67 65 6e 74 61 34 20 6f 72 63 68  a3 magenta4 orch
16ad0 69 64 31 20 6f 72 63 68 69 64 32 20 6f 72 63 68  id1 orchid2 orch
16ae0 69 64 33 20 6f 72 63 68 69 64 34 20 70 6c 75 6d  id3 orchid4 plum
16af0 31 20 70 6c 75 6d 32 0a 09 09 09 70 6c 75 6d 33  1 plum2....plum3
16b00 20 70 6c 75 6d 34 20 4d 65 64 69 75 6d 4f 72 63   plum4 MediumOrc
16b10 68 69 64 31 20 4d 65 64 69 75 6d 4f 72 63 68 69  hid1 MediumOrchi
16b20 64 32 20 4d 65 64 69 75 6d 4f 72 63 68 69 64 33  d2 MediumOrchid3
16b30 0a 09 09 09 4d 65 64 69 75 6d 4f 72 63 68 69 64  ....MediumOrchid
16b40 34 20 44 61 72 6b 4f 72 63 68 69 64 31 20 44 61  4 DarkOrchid1 Da
16b50 72 6b 4f 72 63 68 69 64 32 20 44 61 72 6b 4f 72  rkOrchid2 DarkOr
16b60 63 68 69 64 33 20 44 61 72 6b 4f 72 63 68 69 64  chid3 DarkOrchid
16b70 34 0a 09 09 09 70 75 72 70 6c 65 31 20 70 75 72  4....purple1 pur
16b80 70 6c 65 32 20 70 75 72 70 6c 65 33 20 70 75 72  ple2 purple3 pur
16b90 70 6c 65 34 20 4d 65 64 69 75 6d 50 75 72 70 6c  ple4 MediumPurpl
16ba0 65 31 20 4d 65 64 69 75 6d 50 75 72 70 6c 65 32  e1 MediumPurple2
16bb0 0a 09 09 09 4d 65 64 69 75 6d 50 75 72 70 6c 65  ....MediumPurple
16bc0 33 20 4d 65 64 69 75 6d 50 75 72 70 6c 65 34 20  3 MediumPurple4 
16bd0 74 68 69 73 74 6c 65 31 20 74 68 69 73 74 6c 65  thistle1 thistle
16be0 32 20 74 68 69 73 74 6c 65 33 20 74 68 69 73 74  2 thistle3 thist
16bf0 6c 65 34 0a 09 09 09 67 72 61 79 30 20 67 72 65  le4....gray0 gre
16c00 79 30 20 67 72 61 79 31 20 67 72 65 79 31 20 67  y0 gray1 grey1 g
16c10 72 61 79 32 20 67 72 65 79 32 20 67 72 61 79 33  ray2 grey2 gray3
16c20 20 67 72 65 79 33 20 67 72 61 79 34 20 67 72 65   grey3 gray4 gre
16c30 79 34 20 67 72 61 79 35 0a 09 09 09 67 72 65 79  y4 gray5....grey
16c40 35 20 67 72 61 79 36 20 67 72 65 79 36 20 67 72  5 gray6 grey6 gr
16c50 61 79 37 20 67 72 65 79 37 20 67 72 61 79 38 20  ay7 grey7 gray8 
16c60 67 72 65 79 38 20 67 72 61 79 39 20 67 72 65 79  grey8 gray9 grey
16c70 39 20 67 72 61 79 31 30 20 67 72 65 79 31 30 0a  9 gray10 grey10.
16c80 09 09 09 67 72 61 79 31 31 20 67 72 65 79 31 31  ...gray11 grey11
16c90 20 67 72 61 79 31 32 20 67 72 65 79 31 32 20 67   gray12 grey12 g
16ca0 72 61 79 31 33 20 67 72 65 79 31 33 20 67 72 61  ray13 grey13 gra
16cb0 79 31 34 20 67 72 65 79 31 34 20 67 72 61 79 31  y14 grey14 gray1
16cc0 35 0a 09 09 09 67 72 65 79 31 35 20 67 72 61 79  5....grey15 gray
16cd0 31 36 20 67 72 65 79 31 36 20 67 72 61 79 31 37  16 grey16 gray17
16ce0 20 67 72 65 79 31 37 20 67 72 61 79 31 38 20 67   grey17 gray18 g
16cf0 72 65 79 31 38 20 67 72 61 79 31 39 20 67 72 65  rey18 gray19 gre
16d00 79 31 39 0a 09 09 09 67 72 61 79 32 30 20 67 72  y19....gray20 gr
16d10 65 79 32 30 20 67 72 61 79 32 31 20 67 72 65 79  ey20 gray21 grey
16d20 32 31 20 67 72 61 79 32 32 20 67 72 65 79 32 32  21 gray22 grey22
16d30 20 67 72 61 79 32 33 20 67 72 65 79 32 33 20 67   gray23 grey23 g
16d40 72 61 79 32 34 0a 09 09 09 67 72 65 79 32 34 20  ray24....grey24 
16d50 67 72 61 79 32 35 20 67 72 65 79 32 35 20 67 72  gray25 grey25 gr
16d60 61 79 32 36 20 67 72 65 79 32 36 20 67 72 61 79  ay26 grey26 gray
16d70 32 37 20 67 72 65 79 32 37 20 67 72 61 79 32 38  27 grey27 gray28
16d80 20 67 72 65 79 32 38 0a 09 09 09 67 72 61 79 32   grey28....gray2
16d90 39 20 67 72 65 79 32 39 20 67 72 61 79 33 30 20  9 grey29 gray30 
16da0 67 72 65 79 33 30 20 67 72 61 79 33 31 20 67 72  grey30 gray31 gr
16db0 65 79 33 31 20 67 72 61 79 33 32 20 67 72 65 79  ey31 gray32 grey
16dc0 33 32 20 67 72 61 79 33 33 0a 09 09 09 67 72 65  32 gray33....gre
16dd0 79 33 33 20 67 72 61 79 33 34 20 67 72 65 79 33  y33 gray34 grey3
16de0 34 20 67 72 61 79 33 35 20 67 72 65 79 33 35 20  4 gray35 grey35 
16df0 67 72 61 79 33 36 20 67 72 65 79 33 36 20 67 72  gray36 grey36 gr
16e00 61 79 33 37 20 67 72 65 79 33 37 0a 09 09 09 67  ay37 grey37....g
16e10 72 61 79 33 38 20 67 72 65 79 33 38 20 67 72 61  ray38 grey38 gra
16e20 79 33 39 20 67 72 65 79 33 39 20 67 72 61 79 34  y39 grey39 gray4
16e30 30 20 67 72 65 79 34 30 20 67 72 61 79 34 31 20  0 grey40 gray41 
16e40 67 72 65 79 34 31 20 67 72 61 79 34 32 0a 09 09  grey41 gray42...
16e50 09 67 72 65 79 34 32 20 67 72 61 79 34 33 20 67  .grey42 gray43 g
16e60 72 65 79 34 33 20 67 72 61 79 34 34 20 67 72 65  rey43 gray44 gre
16e70 79 34 34 20 67 72 61 79 34 35 20 67 72 65 79 34  y44 gray45 grey4
16e80 35 20 67 72 61 79 34 36 20 67 72 65 79 34 36 0a  5 gray46 grey46.
16e90 09 09 09 67 72 61 79 34 37 20 67 72 65 79 34 37  ...gray47 grey47
16ea0 20 67 72 61 79 34 38 20 67 72 65 79 34 38 20 67   gray48 grey48 g
16eb0 72 61 79 34 39 20 67 72 65 79 34 39 20 67 72 61  ray49 grey49 gra
16ec0 79 35 30 20 67 72 65 79 35 30 20 67 72 61 79 35  y50 grey50 gray5
16ed0 31 0a 09 09 09 67 72 65 79 35 31 20 67 72 61 79  1....grey51 gray
16ee0 35 32 20 67 72 65 79 35 32 20 67 72 61 79 35 33  52 grey52 gray53
16ef0 20 67 72 65 79 35 33 20 67 72 61 79 35 34 20 67   grey53 gray54 g
16f00 72 65 79 35 34 20 67 72 61 79 35 35 20 67 72 65  rey54 gray55 gre
16f10 79 35 35 0a 09 09 09 67 72 61 79 35 36 20 67 72  y55....gray56 gr
16f20 65 79 35 36 20 67 72 61 79 35 37 20 67 72 65 79  ey56 gray57 grey
16f30 35 37 20 67 72 61 79 35 38 20 67 72 65 79 35 38  57 gray58 grey58
16f40 20 67 72 61 79 35 39 20 67 72 65 79 35 39 20 67   gray59 grey59 g
16f50 72 61 79 36 30 0a 09 09 09 67 72 65 79 36 30 20  ray60....grey60 
16f60 67 72 61 79 36 31 20 67 72 65 79 36 31 20 67 72  gray61 grey61 gr
16f70 61 79 36 32 20 67 72 65 79 36 32 20 67 72 61 79  ay62 grey62 gray
16f80 36 33 20 67 72 65 79 36 33 20 67 72 61 79 36 34  63 grey63 gray64
16f90 20 67 72 65 79 36 34 0a 09 09 09 67 72 61 79 36   grey64....gray6
16fa0 35 20 67 72 65 79 36 35 20 67 72 61 79 36 36 20  5 grey65 gray66 
16fb0 67 72 65 79 36 36 20 67 72 61 79 36 37 20 67 72  grey66 gray67 gr
16fc0 65 79 36 37 20 67 72 61 79 36 38 20 67 72 65 79  ey67 gray68 grey
16fd0 36 38 20 67 72 61 79 36 39 0a 09 09 09 67 72 65  68 gray69....gre
16fe0 79 36 39 20 67 72 61 79 37 30 20 67 72 65 79 37  y69 gray70 grey7
16ff0 30 20 67 72 61 79 37 31 20 67 72 65 79 37 31 20  0 gray71 grey71 
17000 67 72 61 79 37 32 20 67 72 65 79 37 32 20 67 72  gray72 grey72 gr
17010 61 79 37 33 20 67 72 65 79 37 33 0a 09 09 09 67  ay73 grey73....g
17020 72 61 79 37 34 20 67 72 65 79 37 34 20 67 72 61  ray74 grey74 gra
17030 79 37 35 20 67 72 65 79 37 35 20 67 72 61 79 37  y75 grey75 gray7
17040 36 20 67 72 65 79 37 36 20 67 72 61 79 37 37 20  6 grey76 gray77 
17050 67 72 65 79 37 37 20 67 72 61 79 37 38 0a 09 09  grey77 gray78...
17060 09 67 72 65 79 37 38 20 67 72 61 79 37 39 20 67  .grey78 gray79 g
17070 72 65 79 37 39 20 67 72 61 79 38 30 20 67 72 65  rey79 gray80 gre
17080 79 38 30 20 67 72 61 79 38 31 20 67 72 65 79 38  y80 gray81 grey8
17090 31 20 67 72 61 79 38 32 20 67 72 65 79 38 32 0a  1 gray82 grey82.
170a0 09 09 09 67 72 61 79 38 33 20 67 72 65 79 38 33  ...gray83 grey83
170b0 20 67 72 61 79 38 34 20 67 72 65 79 38 34 20 67   gray84 grey84 g
170c0 72 61 79 38 35 20 67 72 65 79 38 35 20 67 72 61  ray85 grey85 gra
170d0 79 38 36 20 67 72 65 79 38 36 20 67 72 61 79 38  y86 grey86 gray8
170e0 37 0a 09 09 09 67 72 65 79 38 37 20 67 72 61 79  7....grey87 gray
170f0 38 38 20 67 72 65 79 38 38 20 67 72 61 79 38 39  88 grey88 gray89
17100 20 67 72 65 79 38 39 20 67 72 61 79 39 30 20 67   grey89 gray90 g
17110 72 65 79 39 30 20 67 72 61 79 39 31 20 67 72 65  rey90 gray91 gre
17120 79 39 31 0a 09 09 09 67 72 61 79 39 32 20 67 72  y91....gray92 gr
17130 65 79 39 32 20 67 72 61 79 39 33 20 67 72 65 79  ey92 gray93 grey
17140 39 33 20 67 72 61 79 39 34 20 67 72 65 79 39 34  93 gray94 grey94
17150 20 67 72 61 79 39 35 20 67 72 65 79 39 35 20 67   gray95 grey95 g
17160 72 61 79 39 36 0a 09 09 09 67 72 65 79 39 36 20  ray96....grey96 
17170 67 72 61 79 39 37 20 67 72 65 79 39 37 20 67 72  gray97 grey97 gr
17180 61 79 39 38 20 67 72 65 79 39 38 20 67 72 61 79  ay98 grey98 gray
17190 39 39 20 67 72 65 79 39 39 20 67 72 61 79 31 30  99 grey99 gray10
171a0 30 20 67 72 65 79 31 30 30 0a 09 09 09 44 61 72  0 grey100....Dar
171b0 6b 47 72 65 79 20 44 61 72 6b 47 72 61 79 20 44  kGrey DarkGray D
171c0 61 72 6b 42 6c 75 65 20 44 61 72 6b 43 79 61 6e  arkBlue DarkCyan
171d0 20 44 61 72 6b 4d 61 67 65 6e 74 61 20 44 61 72   DarkMagenta Dar
171e0 6b 52 65 64 20 4c 69 67 68 74 47 72 65 65 6e 0a  kRed LightGreen.
171f0 09 09 7d 0a 09 7d 0a 09 69 66 20 21 5b 69 6e 66  ..}..}..if ![inf
17200 6f 20 65 78 69 73 74 73 20 6e 75 6d 62 65 72 6c  o exists numberl
17210 65 73 73 5f 63 6f 6c 6f 72 73 5d 20 7b 0a 09 09  ess_colors] {...
17220 73 65 74 20 6e 75 6d 62 65 72 6c 65 73 73 5f 63  set numberless_c
17230 6f 6c 6f 72 73 20 22 22 0a 09 09 66 6f 72 65 61  olors ""...forea
17240 63 68 20 63 6f 6c 6f 72 20 24 7b 63 6f 6c 6f 72  ch color ${color
17250 73 7d 20 7b 0a 09 09 09 72 65 67 73 75 62 20 2d  s} {....regsub -
17260 61 6c 6c 20 7b 5b 30 2d 39 5d 2a 7d 20 24 7b 63  all {[0-9]*} ${c
17270 6f 6c 6f 72 7d 20 22 22 20 63 6f 6c 6f 72 0a 09  olor} "" color..
17280 09 09 6c 61 70 70 65 6e 64 20 6e 75 6d 62 65 72  ..lappend number
17290 6c 65 73 73 5f 63 6f 6c 6f 72 73 20 24 7b 63 6f  less_colors ${co
172a0 6c 6f 72 7d 0a 09 09 7d 0a 09 09 73 65 74 20 6e  lor}...}...set n
172b0 75 6d 62 65 72 6c 65 73 73 5f 63 6f 6c 6f 72 73  umberless_colors
172c0 20 5b 4c 75 6e 69 71 75 65 20 5b 6c 73 6f 72 74   [Lunique [lsort
172d0 20 24 7b 6e 75 6d 62 65 72 6c 65 73 73 5f 63 6f   ${numberless_co
172e0 6c 6f 72 73 7d 5d 5d 0a 09 7d 0a 09 73 65 74 20  lors}]]..}..set 
172f0 6d 61 74 63 68 65 73 20 5b 4d 61 74 63 68 65 73  matches [Matches
17300 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d  FromList ${text}
17310 20 24 7b 6e 75 6d 62 65 72 6c 65 73 73 5f 63 6f   ${numberless_co
17320 6c 6f 72 73 7d 5d 0a 09 69 66 20 7b 5b 6c 6c 65  lors}]..if {[lle
17330 6e 67 74 68 20 24 7b 6d 61 74 63 68 65 73 7d 5d  ngth ${matches}]
17340 20 3c 20 35 7d 20 7b 0a 09 09 73 65 74 20 6d 61   < 5} {...set ma
17350 74 63 68 65 73 20 5b 4d 61 74 63 68 65 73 46 72  tches [MatchesFr
17360 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 24  omList ${text} $
17370 7b 63 6f 6c 6f 72 73 7d 5d 0a 09 09 69 66 20 7b  {colors}]...if {
17380 5b 6c 6c 65 6e 67 74 68 20 24 7b 6d 61 74 63 68  [llength ${match
17390 65 73 7d 5d 7d 20 7b 0a 09 09 09 72 65 74 75 72  es}]} {....retur
173a0 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c  n [CompleteFromL
173b0 69 73 74 20 24 7b 74 65 78 74 7d 20 5b 63 6f 6e  ist ${text} [con
173c0 63 61 74 20 24 7b 63 6f 6c 6f 72 73 7d 20 24 7b  cat ${colors} ${
173d0 61 64 64 7d 5d 5d 0a 09 09 7d 20 65 6c 73 65 20  add}]]...} else 
173e0 7b 0a 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d  {....return [Com
173f0 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b  pleteFromList ${
17400 74 65 78 74 7d 20 5c 0a 09 09 09 5b 63 6f 6e 63  text} \....[conc
17410 61 74 20 24 7b 6e 75 6d 62 65 72 6c 65 73 73 5f  at ${numberless_
17420 63 6f 6c 6f 72 73 7d 20 24 7b 61 64 64 7d 5d 5d  colors} ${add}]]
17430 0a 09 09 7d 0a 09 7d 20 65 6c 73 65 20 7b 0a 09  ...}..} else {..
17440 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74  .return [Complet
17450 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74  eFromList ${text
17460 7d 20 5b 63 6f 6e 63 61 74 20 24 7b 6e 75 6d 62  } [concat ${numb
17470 65 72 6c 65 73 73 5f 63 6f 6c 6f 72 73 7d 20 24  erless_colors} $
17480 7b 61 64 64 7d 5d 5d 0a 09 7d 0a 7d 0a 0a 70 72  {add}]]..}.}..pr
17490 6f 63 20 43 6f 6d 70 6c 65 74 65 43 75 72 73 6f  oc CompleteCurso
174a0 72 20 74 65 78 74 20 7b 0a 09 23 20 66 72 6f 6d  r text {..# from
174b0 20 3c 58 31 31 2f 63 75 72 73 6f 72 66 6f 6e 74   <X11/cursorfont
174c0 2e 68 3e 0a 09 23 20 0a 09 72 65 74 75 72 6e 20  .h>..# ..return 
174d0 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73  [CompleteFromLis
174e0 74 20 24 7b 74 65 78 74 7d 20 7b 0a 09 09 6e 75  t ${text} {...nu
174f0 6d 5f 67 6c 79 70 68 73 20 78 5f 63 75 72 73 6f  m_glyphs x_curso
17500 72 20 61 72 72 6f 77 20 62 61 73 65 64 5f 61 72  r arrow based_ar
17510 72 6f 77 5f 64 6f 77 6e 20 62 61 73 65 64 5f 61  row_down based_a
17520 72 72 6f 77 5f 75 70 0a 09 09 62 6f 61 74 20 62  rrow_up...boat b
17530 6f 67 6f 73 69 74 79 20 62 6f 74 74 6f 6d 5f 6c  ogosity bottom_l
17540 65 66 74 5f 63 6f 72 6e 65 72 20 62 6f 74 74 6f  eft_corner botto
17550 6d 5f 72 69 67 68 74 5f 63 6f 72 6e 65 72 0a 09  m_right_corner..
17560 09 62 6f 74 74 6f 6d 5f 73 69 64 65 20 62 6f 74  .bottom_side bot
17570 74 6f 6d 5f 74 65 65 20 62 6f 78 5f 73 70 69 72  tom_tee box_spir
17580 61 6c 20 63 65 6e 74 65 72 5f 70 74 72 20 63 69  al center_ptr ci
17590 72 63 6c 65 20 63 6c 6f 63 6b 0a 09 09 63 6f 66  rcle clock...cof
175a0 66 65 65 5f 6d 75 67 20 63 72 6f 73 73 20 63 72  fee_mug cross cr
175b0 6f 73 73 5f 72 65 76 65 72 73 65 20 63 72 6f 73  oss_reverse cros
175c0 73 68 61 69 72 20 64 69 61 6d 6f 6e 64 5f 63 72  shair diamond_cr
175d0 6f 73 73 20 64 6f 74 0a 09 09 64 6f 74 62 6f 78  oss dot...dotbox
175e0 20 64 6f 75 62 6c 65 5f 61 72 72 6f 77 20 64 72   double_arrow dr
175f0 61 66 74 5f 6c 61 72 67 65 20 64 72 61 66 74 5f  aft_large draft_
17600 73 6d 61 6c 6c 20 64 72 61 70 65 64 5f 62 6f 78  small draped_box
17610 0a 09 09 65 78 63 68 61 6e 67 65 20 66 6c 65 75  ...exchange fleu
17620 72 20 67 6f 62 62 6c 65 72 20 67 75 6d 62 79 20  r gobbler gumby 
17630 68 61 6e 64 31 20 68 61 6e 64 32 20 68 65 61 72  hand1 hand2 hear
17640 74 20 69 63 6f 6e 20 69 72 6f 6e 5f 63 72 6f 73  t icon iron_cros
17650 73 0a 09 09 6c 65 66 74 5f 70 74 72 20 6c 65 66  s...left_ptr lef
17660 74 5f 73 69 64 65 20 6c 65 66 74 5f 74 65 65 20  t_side left_tee 
17670 6c 65 66 74 62 75 74 74 6f 6e 20 6c 6c 5f 61 6e  leftbutton ll_an
17680 67 6c 65 20 6c 72 5f 61 6e 67 6c 65 0a 09 09 6d  gle lr_angle...m
17690 61 6e 20 6d 69 64 64 6c 65 62 75 74 74 6f 6e 20  an middlebutton 
176a0 6d 6f 75 73 65 20 70 65 6e 63 69 6c 20 70 69 72  mouse pencil pir
176b0 61 74 65 20 70 6c 75 73 20 71 75 65 73 74 69 6f  ate plus questio
176c0 6e 5f 61 72 72 6f 77 0a 09 09 72 69 67 68 74 5f  n_arrow...right_
176d0 70 74 72 20 72 69 67 68 74 5f 73 69 64 65 20 72  ptr right_side r
176e0 69 67 68 74 5f 74 65 65 20 72 69 67 68 74 62 75  ight_tee rightbu
176f0 74 74 6f 6e 20 72 74 6c 5f 6c 6f 67 6f 20 73 61  tton rtl_logo sa
17700 69 6c 62 6f 61 74 0a 09 09 73 62 5f 64 6f 77 6e  ilboat...sb_down
17710 5f 61 72 72 6f 77 20 73 62 5f 68 5f 64 6f 75 62  _arrow sb_h_doub
17720 6c 65 5f 61 72 72 6f 77 20 73 62 5f 6c 65 66 74  le_arrow sb_left
17730 5f 61 72 72 6f 77 20 73 62 5f 72 69 67 68 74 5f  _arrow sb_right_
17740 61 72 72 6f 77 0a 09 09 73 62 5f 75 70 5f 61 72  arrow...sb_up_ar
17750 72 6f 77 20 73 62 5f 76 5f 64 6f 75 62 6c 65 5f  row sb_v_double_
17760 61 72 72 6f 77 20 73 68 75 74 74 6c 65 20 73 69  arrow shuttle si
17770 7a 69 6e 67 20 73 70 69 64 65 72 20 73 70 72 61  zing spider spra
17780 79 63 61 6e 0a 09 09 73 74 61 72 20 74 61 72 67  ycan...star targ
17790 65 74 20 74 63 72 6f 73 73 20 74 6f 70 5f 6c 65  et tcross top_le
177a0 66 74 5f 61 72 72 6f 77 20 74 6f 70 5f 6c 65 66  ft_arrow top_lef
177b0 74 5f 63 6f 72 6e 65 72 0a 09 09 74 6f 70 5f 72  t_corner...top_r
177c0 69 67 68 74 5f 63 6f 72 6e 65 72 20 74 6f 70 5f  ight_corner top_
177d0 73 69 64 65 20 74 6f 70 5f 74 65 65 20 74 72 65  side top_tee tre
177e0 6b 20 75 6c 5f 61 6e 67 6c 65 20 75 6d 62 72 65  k ul_angle umbre
177f0 6c 6c 61 0a 09 09 75 72 5f 61 6e 67 6c 65 20 77  lla...ur_angle w
17800 61 74 63 68 20 78 74 65 72 6d 0a 09 7d 5d 0a 7d  atch xterm..}].}
17810 0a 0a 23 2a 2a 0a 23 20 53 70 65 63 69 66 69 63  ..#**.# Specific
17820 53 77 69 74 63 68 43 6f 6d 70 6c 65 74 65 72 0a  SwitchCompleter.
17830 23 20 2d 2d 2d 0a 23 20 40 70 61 72 61 6d 20 20  # ---.# @param  
17840 20 20 74 65 78 74 20 20 20 2d 2d 20 74 68 65 20    text   -- the 
17850 77 6f 72 64 20 74 6f 20 63 6f 6d 70 6c 65 74 65  word to complete
17860 2e 0a 23 20 40 70 61 72 61 6d 20 20 20 20 73 74  ..# @param    st
17870 61 72 74 20 20 2d 2d 20 74 68 65 20 63 68 61 72  art  -- the char
17880 20 69 6e 64 65 78 20 6f 66 20 74 65 78 74 27 73   index of text's
17890 20 73 74 61 72 74 20 69 6e 20 6c 69 6e 65 0a 23   start in line.#
178a0 20 40 70 61 72 61 6d 20 20 20 20 6c 69 6e 65 20   @param    line 
178b0 20 20 2d 2d 20 74 68 65 20 6c 69 6e 65 20 67 61    -- the line ga
178c0 74 68 65 72 65 64 20 73 6f 20 66 61 72 2e 0a 23  thered so far..#
178d0 20 40 70 61 72 61 6d 20 20 20 20 73 77 69 74 63   @param    switc
178e0 68 20 2d 2d 20 74 68 65 20 73 77 69 74 63 68 20  h -- the switch 
178f0 74 6f 20 63 6f 6d 70 6c 65 74 65 20 66 6f 72 2e  to complete for.
17900 0a 23 20 40 72 65 74 75 72 6e 20 20 20 61 20 73  .# @return   a s
17910 74 64 20 74 63 6c 72 65 61 64 6c 69 6e 65 20 66  td tclreadline f
17920 6f 72 6d 61 74 74 65 64 20 63 6f 6d 70 6c 65 74  ormatted complet
17930 65 72 20 73 74 72 69 6e 67 2e 0a 23 20 40 73 61  er string..# @sa
17940 20 20 20 20 20 20 20 43 6f 6d 70 6c 65 74 65 57         CompleteW
17950 69 64 67 65 74 43 6f 6e 66 69 67 75 72 61 74 69  idgetConfigurati
17960 6f 6e 73 0a 23 20 40 64 61 74 65 20 20 20 20 20  ons.# @date     
17970 53 65 70 2d 31 37 2d 31 39 39 39 0a 23 0a 70 72  Sep-17-1999.#.pr
17980 6f 63 20 53 70 65 63 69 66 69 63 53 77 69 74 63  oc SpecificSwitc
17990 68 43 6f 6d 70 6c 65 74 65 72 20 7b 74 65 78 74  hCompleter {text
179a0 20 73 74 61 72 74 20 6c 69 6e 65 20 73 77 69 74   start line swit
179b0 63 68 20 7b 61 6c 77 61 79 73 20 31 7d 7d 20 7b  ch {always 1}} {
179c0 0a 0a 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 73  ...switch -- ${s
179d0 77 69 74 63 68 7d 20 7b 0a 0a 09 09 2d 61 63 74  witch} {....-act
179e0 69 76 65 62 61 63 6b 67 72 6f 75 6e 64 20 2d 0a  ivebackground -.
179f0 09 09 2d 61 63 74 69 76 65 66 6f 72 65 67 72 6f  ..-activeforegro
17a00 75 6e 64 20 2d 0a 09 09 2d 66 67 20 2d 0a 09 09  und -...-fg -...
17a10 2d 66 6f 72 65 67 72 6f 75 6e 64 20 2d 0a 09 09  -foreground -...
17a20 2d 62 67 20 2d 0a 09 09 2d 62 61 63 6b 67 72 6f  -bg -...-backgro
17a30 75 6e 64 20 2d 0a 09 09 2d 64 69 73 61 62 6c 65  und -...-disable
17a40 64 66 6f 72 65 67 72 6f 75 6e 64 20 2d 0a 09 09  dforeground -...
17a50 2d 68 69 67 68 6c 69 67 68 74 62 61 63 6b 67 72  -highlightbackgr
17a60 6f 75 6e 64 20 2d 0a 09 09 2d 68 69 67 68 6c 69  ound -...-highli
17a70 67 68 74 63 6f 6c 6f 72 20 2d 0a 09 09 2d 69 6e  ghtcolor -...-in
17a80 73 65 72 74 62 61 63 6b 67 72 6f 75 6e 64 20 2d  sertbackground -
17a90 0a 09 09 2d 74 72 6f 75 67 68 63 6f 6c 6f 72 20  ...-troughcolor 
17aa0 2d 0a 09 09 2d 73 65 6c 65 63 74 62 61 63 6b 67  -...-selectbackg
17ab0 72 6f 75 6e 64 20 2d 0a 09 09 2d 73 65 6c 65 63  round -...-selec
17ac0 74 66 6f 72 65 67 72 6f 75 6e 64 20 7b 20 72 65  tforeground { re
17ad0 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 43 6f  turn [CompleteCo
17ae0 6c 6f 72 20 24 7b 74 65 78 74 7d 5d 20 7d 0a 0a  lor ${text}] }..
17af0 09 09 2d 61 63 74 69 76 65 62 6f 72 64 65 72 77  ..-activeborderw
17b00 69 64 74 68 20 2d 0a 09 09 2d 62 64 20 2d 0a 09  idth -...-bd -..
17b10 09 2d 62 6f 72 64 65 72 77 69 64 74 68 20 2d 0a  .-borderwidth -.
17b20 09 09 2d 69 6e 73 65 72 74 62 6f 72 64 65 72 77  ..-insertborderw
17b30 69 64 74 68 20 2d 0a 09 09 2d 69 6e 73 65 72 74  idth -...-insert
17b40 77 69 64 74 68 20 2d 0a 09 09 2d 73 65 6c 65 63  width -...-selec
17b50 74 62 6f 72 64 65 72 77 69 64 74 68 20 2d 0a 09  tborderwidth -..
17b60 09 2d 68 69 67 68 6c 69 67 68 74 74 68 69 63 6b  .-highlightthick
17b70 6e 65 73 73 20 2d 0a 09 09 2d 70 61 64 78 20 2d  ness -...-padx -
17b80 0a 09 09 2d 70 61 64 79 20 2d 0a 09 09 2d 77 72  ...-pady -...-wr
17b90 61 70 6c 65 6e 67 74 68 20 7b 0a 09 09 09 69 66  aplength {....if
17ba0 20 24 7b 61 6c 77 61 79 73 7d 20 7b 0a 09 09 09   ${always} {....
17bb0 09 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79  .return [Display
17bc0 48 69 6e 74 73 20 3c 70 69 78 65 6c 73 3e 5d 0a  Hints <pixels>].
17bd0 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09  ...} else {.....
17be0 72 65 74 75 72 6e 20 22 22 0a 09 09 09 7d 0a 09  return ""....}..
17bf0 09 7d 0a 0a 09 09 2d 61 6e 63 68 6f 72 20 7b 0a  .}....-anchor {.
17c00 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c  ...return [Compl
17c10 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65  eteFromList ${te
17c20 78 74 7d 20 7b 0a 09 09 09 09 6e 20 6e 65 20 65  xt} {.....n ne e
17c30 20 73 65 20 73 20 73 77 20 77 20 6e 77 20 63 65   se s sw w nw ce
17c40 6e 74 65 72 0a 09 09 09 7d 5d 0a 09 09 7d 0a 0a  nter....}]...}..
17c50 0a 09 09 2d 62 69 74 6d 61 70 20 7b 20 72 65 74  ...-bitmap { ret
17c60 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f  urn [CompleteFro
17c70 6d 42 69 74 6d 61 70 73 20 24 7b 74 65 78 74 7d  mBitmaps ${text}
17c80 20 24 7b 61 6c 77 61 79 73 7d 5d 20 7d 0a 0a 0a   ${always}] }...
17c90 09 09 2d 63 75 72 73 6f 72 20 7b 0a 09 09 09 72  ..-cursor {....r
17ca0 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 43  eturn [CompleteC
17cb0 75 72 73 6f 72 20 24 7b 74 65 78 74 7d 5d 0a 09  ursor ${text}]..
17cc0 09 09 23 20 72 65 74 75 72 6e 20 5b 44 69 73 70  ..# return [Disp
17cd0 6c 61 79 48 69 6e 74 73 20 3c 63 75 72 73 6f 72  layHints <cursor
17ce0 3e 5d 0a 09 09 7d 0a 09 09 2d 65 78 70 6f 72 74  >]...}...-export
17cf0 73 65 6c 65 63 74 69 6f 6e 20 2d 0a 09 09 2d 6a  selection -...-j
17d00 75 6d 70 20 2d 0a 09 09 2d 73 65 74 67 72 69 64  ump -...-setgrid
17d10 20 2d 0a 09 09 2d 74 61 6b 65 66 6f 63 75 73 20   -...-takefocus 
17d20 7b 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65  { return [Comple
17d30 74 65 42 6f 6f 6c 65 61 6e 20 24 7b 74 65 78 74  teBoolean ${text
17d40 7d 5d 20 7d 0a 09 09 2d 66 6f 6e 74 20 7b 0a 09  }] }...-font {..
17d50 09 09 73 65 74 20 6e 61 6d 65 73 20 5b 66 6f 6e  ..set names [fon
17d60 74 20 6e 61 6d 65 73 5d 0a 09 09 09 69 66 20 7b  t names]....if {
17d70 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $
17d80 7b 6e 61 6d 65 73 7d 5d 7d 20 7b 0a 09 09 09 09  {names}]} {.....
17d90 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65  return [Complete
17da0 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d  FromList ${text}
17db0 20 24 7b 6e 61 6d 65 73 7d 5d 0a 09 09 09 7d 20   ${names}]....} 
17dc0 65 6c 73 65 20 7b 0a 09 09 09 09 69 66 20 24 7b  else {.....if ${
17dd0 61 6c 77 61 79 73 7d 20 7b 0a 09 09 09 09 09 72  always} {......r
17de0 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
17df0 6e 74 73 20 3c 66 6f 6e 74 3e 5d 0a 09 09 09 09  nts <font>].....
17e00 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09 09 72 65  } else {......re
17e10 74 75 72 6e 20 22 22 0a 09 09 09 09 7d 0a 09 09  turn "".....}...
17e20 09 7d 0a 09 09 7d 0a 0a 0a 09 09 2d 69 6d 61 67  .}...}.....-imag
17e30 65 20 2d 0a 09 09 2d 73 65 6c 65 63 74 69 6d 61  e -...-selectima
17e40 67 65 20 7b 20 72 65 74 75 72 6e 20 5b 43 6f 6d  ge { return [Com
17e50 70 6c 65 74 65 46 72 6f 6d 49 6d 61 67 65 73 20  pleteFromImages 
17e60 24 7b 74 65 78 74 7d 20 24 7b 61 6c 77 61 79 73  ${text} ${always
17e70 7d 5d 20 7d 0a 09 09 2d 73 65 6c 65 63 74 6d 6f  }] }...-selectmo
17e80 64 65 20 7b 0a 09 09 09 72 65 74 75 72 6e 20 5b  de {....return [
17e90 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74  CompleteFromList
17ea0 20 24 7b 74 65 78 74 7d 20 7b 0a 09 09 09 09 73   ${text} {.....s
17eb0 69 6e 67 6c 65 20 62 72 6f 77 73 65 20 6d 75 6c  ingle browse mul
17ec0 74 69 70 6c 65 20 65 78 74 65 6e 64 65 64 0a 09  tiple extended..
17ed0 09 09 7d 5d 0a 09 09 7d 0a 0a 09 09 2d 69 6e 73  ..}]...}....-ins
17ee0 65 72 74 6f 66 66 74 69 6d 65 20 2d 0a 09 09 2d  ertofftime -...-
17ef0 69 6e 73 65 72 74 6f 6e 74 69 6d 65 20 2d 0a 09  insertontime -..
17f00 09 2d 72 65 70 65 61 74 64 65 6c 61 79 20 2d 0a  .-repeatdelay -.
17f10 09 09 2d 72 65 70 65 61 74 69 6e 74 65 72 76 61  ..-repeatinterva
17f20 6c 20 7b 0a 09 09 09 69 66 20 24 7b 61 6c 77 61  l {....if ${alwa
17f30 79 73 7d 20 7b 0a 09 09 09 09 72 65 74 75 72 6e  ys} {.....return
17f40 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c   [DisplayHints <
17f50 6d 69 6c 6c 69 53 65 63 3e 5d 0a 09 09 09 7d 20  milliSec>]....} 
17f60 65 6c 73 65 20 7b 0a 09 09 09 09 72 65 74 75 72  else {.....retur
17f70 6e 20 22 22 0a 09 09 09 7d 0a 09 09 7d 0a 09 09  n ""....}...}...
17f80 2d 6a 75 73 74 69 66 79 20 7b 0a 09 09 09 72 65  -justify {....re
17f90 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72  turn [CompleteFr
17fa0 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 7b  omList ${text} {
17fb0 0a 09 09 09 09 6c 65 66 74 20 63 65 6e 74 65 72  .....left center
17fc0 20 72 69 67 68 74 0a 09 09 09 7d 5d 0a 09 09 7d   right....}]...}
17fd0 0a 09 09 2d 6f 72 69 65 6e 74 20 7b 0a 09 09 09  ...-orient {....
17fe0 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65  return [Complete
17ff0 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d  FromList ${text}
18000 20 7b 0a 09 09 09 09 76 65 72 74 69 63 61 6c 20   {.....vertical 
18010 68 6f 72 69 7a 6f 6e 74 61 6c 0a 09 09 09 7d 5d  horizontal....}]
18020 0a 09 09 7d 0a 09 09 2d 72 65 6c 69 65 66 20 7b  ...}...-relief {
18030 0a 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70  ....return [Comp
18040 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74  leteFromList ${t
18050 65 78 74 7d 20 7b 0a 09 09 09 09 72 61 69 73 65  ext} {.....raise
18060 64 20 73 75 6e 6b 65 6e 20 66 6c 61 74 20 72 69  d sunken flat ri
18070 64 67 65 20 73 6f 6c 69 64 20 67 72 6f 6f 76 65  dge solid groove
18080 0a 09 09 09 7d 5d 0a 09 09 7d 0a 0a 09 09 2d 74  ....}]...}....-t
18090 65 78 74 20 7b 0a 09 09 09 69 66 20 24 7b 61 6c  ext {....if ${al
180a0 77 61 79 73 7d 20 7b 0a 09 09 09 09 72 65 74 75  ways} {.....retu
180b0 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
180c0 20 3c 74 65 78 74 3e 5d 0a 09 09 09 7d 20 65 6c   <text>]....} el
180d0 73 65 20 7b 0a 09 09 09 09 72 65 74 75 72 6e 20  se {.....return 
180e0 22 22 0a 09 09 09 7d 0a 09 09 7d 0a 09 09 2d 74  ""....}...}...-t
180f0 65 78 74 76 61 72 69 61 62 6c 65 20 7b 20 72 65  extvariable { re
18100 74 75 72 6e 20 5b 56 61 72 43 6f 6d 70 6c 65 74  turn [VarComplet
18110 69 6f 6e 20 24 7b 74 65 78 74 7d 20 23 30 5d 20  ion ${text} #0] 
18120 7d 0a 09 09 2d 75 6e 64 65 72 6c 69 6e 65 20 7b  }...-underline {
18130 0a 09 09 09 69 66 20 24 7b 61 6c 77 61 79 73 7d  ....if ${always}
18140 20 7b 0a 09 09 09 09 72 65 74 75 72 6e 20 5b 44   {.....return [D
18150 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 69 6e 64  isplayHints <ind
18160 65 78 3e 5d 0a 09 09 09 7d 20 65 6c 73 65 20 7b  ex>]....} else {
18170 0a 09 09 09 09 72 65 74 75 72 6e 20 22 22 0a 09  .....return ""..
18180 09 09 7d 0a 09 09 7d 0a 0a 2d 78 73 63 72 6f 6c  ..}...}..-xscrol
18190 6c 63 6f 6d 6d 61 6e 64 20 2d 0a 2d 79 73 63 72  lcommand -.-yscr
181a0 6f 6c 6c 63 6f 6d 6d 61 6e 64 20 7b 0a 7d 0a 20  ollcommand {.}. 
181b0 0a 20 20 20 20 20 20 20 20 23 20 57 49 44 47 45  .        # WIDGE
181c0 54 20 53 50 45 43 49 46 49 43 20 4f 50 54 49 4f  T SPECIFIC OPTIO
181d0 4e 53 0a 09 09 23 20 2d 2d 2d 0a 20 0a 09 09 2d  NS...# ---. ...-
181e0 73 74 61 74 65 20 7b 0a 09 09 09 72 65 74 75 72  state {....retur
181f0 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c  n [CompleteFromL
18200 69 73 74 20 24 7b 74 65 78 74 7d 20 7b 0a 09 09  ist ${text} {...
18210 09 09 6e 6f 72 6d 61 6c 20 61 63 74 69 76 65 20  ..normal active 
18220 64 69 73 61 62 6c 65 64 0a 09 09 09 7d 5d 0a 09  disabled....}]..
18230 09 7d 0a 0a 09 09 2d 63 6f 6c 75 6d 6e 62 72 65  .}....-columnbre
18240 61 6b 20 2d 0a 09 09 2d 68 69 64 65 6d 61 72 67  ak -...-hidemarg
18250 69 6e 20 2d 0a 09 09 2d 69 6e 64 69 63 61 74 6f  in -...-indicato
18260 72 6f 6e 20 7b 0a 09 09 09 72 65 74 75 72 6e 20  ron {....return 
18270 5b 43 6f 6d 70 6c 65 74 65 42 6f 6f 6c 65 61 6e  [CompleteBoolean
18280 20 24 7b 74 65 78 74 7d 5d 0a 09 09 7d 0a 0a 09   ${text}]...}...
18290 09 2d 76 61 72 69 61 62 6c 65 20 7b 0a 09 09 09  .-variable {....
182a0 72 65 74 75 72 6e 20 5b 56 61 72 43 6f 6d 70 6c  return [VarCompl
182b0 65 74 69 6f 6e 20 24 7b 74 65 78 74 7d 20 23 30  etion ${text} #0
182c0 5d 0a 09 09 7d 0a 0a 09 09 64 65 66 61 75 6c 74  ]...}....default
182d0 20 7b 0a 09 09 09 23 20 69 66 20 24 7b 61 6c 77   {....# if ${alw
182e0 61 79 73 7d 20 7b 0a 09 09 09 23 09 73 65 74 20  ays} {....#.set 
182f0 70 72 65 76 20 5b 50 72 65 76 69 6f 75 73 57 6f  prev [PreviousWo
18300 72 64 20 24 7b 73 74 61 72 74 7d 20 24 7b 6c 69  rd ${start} ${li
18310 6e 65 7d 5d 0a 09 09 09 23 09 72 65 74 75 72 6e  ne}]....#.return
18320 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c   [DisplayHints <
18330 5b 53 74 72 69 6e 67 20 72 61 6e 67 65 20 24 7b  [String range ${
18340 70 72 65 76 7d 20 31 20 65 6e 64 5d 3e 5d 0a 09  prev} 1 end]>]..
18350 09 09 23 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09  ..#} else {.....
18360 72 65 74 75 72 6e 20 22 22 0a 09 09 09 23 7d 0a  return ""....#}.
18370 09 09 7d 0a 09 7d 0a 7d 0a 09 09 09 23 20 72 65  ..}..}.}....# re
18380 74 75 72 6e 20 5b 42 72 61 63 65 4f 72 43 6f 6d  turn [BraceOrCom
18390 6d 61 6e 64 20 24 7b 74 65 78 74 7d 20 5c 0a 09  mand ${text} \..
183a0 09 09 23 20 24 7b 73 74 61 72 74 7d 20 20 24 7b  ..# ${start}  ${
183b0 6c 69 6e 65 7d 20 24 7b 70 6f 73 7d 20 24 7b 6d  line} ${pos} ${m
183c0 6f 64 7d 5d 0a 0a 23 2a 2a 0a 23 20 43 6f 6d 70  od}]..#**.# Comp
183d0 6c 65 74 65 57 69 64 67 65 74 43 6f 6e 66 69 67  leteWidgetConfig
183e0 75 72 61 74 69 6f 6e 73 0a 23 20 2d 2d 2d 0a 23  urations.# ---.#
183f0 20 40 70 61 72 61 6d 20 20 20 20 74 65 78 74 20   @param    text 
18400 20 2d 2d 20 74 68 65 20 77 6f 72 64 20 74 6f 20   -- the word to 
18410 63 6f 6d 70 6c 65 74 65 2e 0a 23 20 40 70 61 72  complete..# @par
18420 61 6d 20 20 20 20 73 74 61 72 74 20 2d 2d 20 74  am    start -- t
18430 68 65 20 61 63 74 75 61 6c 20 63 75 72 73 6f 72  he actual cursor
18440 20 70 6f 73 69 74 69 6f 6e 2e 0a 23 20 40 70 61   position..# @pa
18450 72 61 6d 20 20 20 20 6c 69 6e 65 20 20 2d 2d 20  ram    line  -- 
18460 74 68 65 20 6c 69 6e 65 20 67 61 74 68 65 72 65  the line gathere
18470 64 20 73 6f 20 66 61 72 2e 0a 23 20 40 70 61 72  d so far..# @par
18480 61 6d 20 20 20 20 6c 73 74 20 20 20 2d 2d 20 61  am    lst   -- a
18490 20 6c 69 73 74 20 6f 66 20 70 6f 73 73 69 62 6c   list of possibl
184a0 65 20 63 6f 6d 70 6c 65 74 69 6f 6e 73 2e 0a 23  e completions..#
184b0 20 40 72 65 74 75 72 6e 20 20 20 61 20 73 74 64   @return   a std
184c0 20 74 63 6c 72 65 61 64 6c 69 6e 65 20 66 6f 72   tclreadline for
184d0 6d 61 74 74 65 64 20 63 6f 6d 70 6c 65 74 65 72  matted completer
184e0 20 73 74 72 69 6e 67 2e 0a 23 20 40 73 61 20 20   string..# @sa  
184f0 20 20 20 20 20 53 70 65 63 69 66 69 63 53 77 69       SpecificSwi
18500 74 63 68 43 6f 6d 70 6c 65 74 65 72 0a 23 20 40  tchCompleter.# @
18510 64 61 74 65 20 20 20 20 20 53 65 70 2d 31 37 2d  date     Sep-17-
18520 31 39 39 39 0a 23 0a 70 72 6f 63 20 43 6f 6d 70  1999.#.proc Comp
18530 6c 65 74 65 57 69 64 67 65 74 43 6f 6e 66 69 67  leteWidgetConfig
18540 75 72 61 74 69 6f 6e 73 20 7b 74 65 78 74 20 73  urations {text s
18550 74 61 72 74 20 6c 69 6e 65 20 6c 73 74 7d 20 7b  tart line lst} {
18560 0a 09 73 65 74 20 70 72 65 76 20 5b 50 72 65 76  ..set prev [Prev
18570 69 6f 75 73 57 6f 72 64 20 24 7b 73 74 61 72 74  iousWord ${start
18580 7d 20 24 7b 6c 69 6e 65 7d 5d 0a 09 69 66 20 7b  } ${line}]..if {
18590 22 2d 22 20 3d 3d 20 5b 73 74 72 69 6e 67 20 69  "-" == [string i
185a0 6e 64 65 78 20 24 7b 70 72 65 76 7d 20 30 5d 7d  ndex ${prev} 0]}
185b0 20 7b 0a 09 09 72 65 74 75 72 6e 20 5b 53 70 65   {...return [Spe
185c0 63 69 66 69 63 53 77 69 74 63 68 43 6f 6d 70 6c  cificSwitchCompl
185d0 65 74 65 72 20 24 7b 74 65 78 74 7d 20 24 7b 73  eter ${text} ${s
185e0 74 61 72 74 7d 20 24 7b 6c 69 6e 65 7d 20 24 7b  tart} ${line} ${
185f0 70 72 65 76 7d 5d 0a 09 7d 20 65 6c 73 65 20 7b  prev}]..} else {
18600 0a 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c  ...return [Compl
18610 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65  eteFromList ${te
18620 78 74 7d 20 5c 0a 09 09 5b 52 65 6d 6f 76 65 55  xt} \...[RemoveU
18630 73 65 64 4f 70 74 69 6f 6e 73 20 24 7b 6c 69 6e  sedOptions ${lin
18640 65 7d 20 24 7b 6c 73 74 7d 5d 5d 0a 09 7d 0a 7d  e} ${lst}]]..}.}
18650 0a 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ..# ------------
18660 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
18670 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 3d 3d 3d  ----------.# ===
18680 20 53 50 45 43 49 46 49 43 20 54 4b 20 43 4f 4d   SPECIFIC TK COM
18690 4d 41 4e 44 20 43 4f 4d 50 4c 45 54 45 52 53 20  MAND COMPLETERS 
186a0 3d 3d 3d 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ===.# ----------
186b0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
186c0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 70 72  ------------..pr
186d0 6f 63 20 63 6f 6d 70 6c 65 74 65 28 62 65 6c 6c  oc complete(bell
186e0 29 20 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e  ) {text start en
186f0 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20  d line pos mod} 
18700 7b 0a 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 70  {..switch -- ${p
18710 6f 73 7d 20 7b 0a 09 09 31 20 7b 20 72 65 74 75  os} {...1 { retu
18720 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d  rn [CompleteFrom
18730 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 2d 64 69  List ${text} -di
18740 73 70 6c 61 79 6f 66 5d 20 7d 0a 09 09 32 20 7b  splayof] }...2 {
18750 0a 09 09 09 69 66 20 7b 22 2d 64 69 73 70 6c 61  ....if {"-displa
18760 79 6f 66 22 20 3d 3d 20 5b 50 72 65 76 69 6f 75  yof" == [Previou
18770 73 57 6f 72 64 20 24 7b 73 74 61 72 74 7d 20 24  sWord ${start} $
18780 7b 6c 69 6e 65 7d 5d 7d 20 7b 0a 09 09 09 09 72  {line}]} {.....r
18790 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46  eturn [CompleteF
187a0 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20  romList ${text} 
187b0 5b 54 6f 70 6c 65 76 65 6c 57 69 6e 64 6f 77 73  [ToplevelWindows
187c0 5d 5d 0a 09 09 09 7d 0a 09 09 7d 0a 09 7d 0a 7d  ]]....}...}..}.}
187d0 0a 0a 70 72 6f 63 20 43 6f 6d 70 6c 65 74 65 53  ..proc CompleteS
187e0 65 71 75 65 6e 63 65 20 7b 74 65 78 74 20 66 75  equence {text fu
187f0 6c 6c 74 65 78 74 7d 20 7b 0a 09 73 65 74 20 6d  lltext} {..set m
18800 6f 64 69 66 69 65 72 73 20 7b 0a 09 09 41 6c 74  odifiers {...Alt
18810 20 43 6f 6e 74 72 6f 6c 20 53 68 69 66 74 20 4c   Control Shift L
18820 6f 63 6b 20 44 6f 75 62 6c 65 20 54 72 69 70 6c  ock Double Tripl
18830 65 0a 09 09 42 31 20 42 32 20 42 33 20 42 34 20  e...B1 B2 B3 B4 
18840 42 35 20 42 75 74 74 6f 6e 31 20 42 75 74 74 6f  B5 Button1 Butto
18850 6e 32 20 42 75 74 74 6f 6e 33 20 42 75 74 74 6f  n2 Button3 Butto
18860 6e 34 20 42 75 74 74 6f 6e 35 0a 09 09 4d 20 4d  n4 Button5...M M
18870 31 20 4d 32 20 4d 33 20 4d 34 20 4d 35 20 20 20  1 M2 M3 M4 M5   
18880 20 20 20 20 20 0a 09 09 4d 65 74 61 20 4d 6f 64       ...Meta Mod
18890 31 20 4d 6f 64 32 20 4d 6f 64 33 20 4d 6f 64 34  1 Mod2 Mod3 Mod4
188a0 20 4d 6f 64 35 0a 09 7d 0a 09 73 65 74 20 65 76   Mod5..}..set ev
188b0 65 6e 74 73 20 7b 0a 09 09 41 63 74 69 76 61 74  ents {...Activat
188c0 65 20 42 75 74 74 6f 6e 20 42 75 74 74 6f 6e 50  e Button ButtonP
188d0 72 65 73 73 20 42 75 74 74 6f 6e 52 65 6c 65 61  ress ButtonRelea
188e0 73 65 0a 09 09 43 69 72 63 75 6c 61 74 65 20 43  se...Circulate C
188f0 6f 6c 6f 72 6d 61 70 20 43 6f 6e 66 69 67 75 72  olormap Configur
18900 65 20 44 65 61 63 74 69 76 61 74 65 20 44 65 73  e Deactivate Des
18910 74 72 6f 79 0a 09 09 45 6e 74 65 72 20 45 78 70  troy...Enter Exp
18920 6f 73 65 20 46 6f 63 75 73 49 6e 20 46 6f 63 75  ose FocusIn Focu
18930 73 4f 75 74 20 47 72 61 76 69 74 79 0a 09 09 4b  sOut Gravity...K
18940 65 79 20 4b 65 79 50 72 65 73 73 20 4b 65 79 52  ey KeyPress KeyR
18950 65 6c 65 61 73 65 20 4c 65 61 76 65 20 4d 61 70  elease Leave Map
18960 20 4d 6f 74 69 6f 6e 0a 09 09 4d 6f 75 73 65 57   Motion...MouseW
18970 68 65 65 6c 20 50 72 6f 70 65 72 74 79 20 52 65  heel Property Re
18980 70 61 72 65 6e 74 20 55 6e 6d 61 70 20 56 69 73  parent Unmap Vis
18990 69 62 69 6c 69 74 79 0a 09 7d 0a 09 73 65 74 20  ibility..}..set 
189a0 73 65 71 75 65 6e 63 65 20 5b 63 6f 6e 63 61 74  sequence [concat
189b0 20 24 7b 6d 6f 64 69 66 69 65 72 73 7d 20 24 7b   ${modifiers} ${
189c0 65 76 65 6e 74 73 7d 5d 0a 09 72 65 74 75 72 6e  events}]..return
189d0 20 5b 43 6f 6d 70 6c 65 74 65 4c 69 73 74 46 72   [CompleteListFr
189e0 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 24  omList ${text} $
189f0 7b 66 75 6c 6c 74 65 78 74 7d 20 24 7b 73 65 71  {fulltext} ${seq
18a00 75 65 6e 63 65 7d 20 3c 20 2d 20 3e 5d 0a 7d 0a  uence} < - >].}.
18a10 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 62  .proc complete(b
18a20 69 6e 64 29 20 7b 74 65 78 74 20 73 74 61 72 74  ind) {text start
18a30 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f   end line pos mo
18a40 64 7d 20 7b 0a 09 73 77 69 74 63 68 20 2d 2d 20  d} {..switch -- 
18a50 24 7b 70 6f 73 7d 20 7b 0a 09 09 31 20 7b 0a 09  ${pos} {...1 {..
18a60 09 09 73 65 74 20 77 69 64 67 65 74 73 20 5b 57  ..set widgets [W
18a70 69 64 67 65 74 43 68 69 6c 64 72 65 6e 20 24 7b  idgetChildren ${
18a80 74 65 78 74 7d 5d 0a 09 09 09 73 65 74 20 74 6f  text}]....set to
18a90 70 6c 65 76 65 6c 73 20 5b 54 6f 70 6c 65 76 65  plevels [Topleve
18aa0 6c 57 69 6e 64 6f 77 73 5d 0a 09 09 09 69 66 20  lWindows]....if 
18ab0 7b 5b 63 61 74 63 68 20 7b 73 65 74 20 74 6f 70  {[catch {set top
18ac0 6c 65 76 65 6c 43 6c 61 73 73 20 5b 77 69 6e 66  levelClass [winf
18ad0 6f 20 63 6c 61 73 73 20 2e 5d 7d 5d 7d 20 7b 0a  o class .]}]} {.
18ae0 09 09 09 09 73 65 74 20 74 6f 70 6c 65 76 65 6c  ....set toplevel
18af0 43 6c 61 73 73 20 22 22 0a 09 09 09 7d 0a 09 09  Class ""....}...
18b00 09 73 65 74 20 72 65 73 74 20 7b 0a 09 09 09 09  .set rest {.....
18b10 42 75 74 74 6f 6e 20 43 61 6e 76 61 73 20 43 68  Button Canvas Ch
18b20 65 63 6b 62 75 74 74 6f 6e 20 45 6e 74 72 79 20  eckbutton Entry 
18b30 46 72 61 6d 65 20 4c 61 62 65 6c 0a 09 09 09 09  Frame Label.....
18b40 4c 69 73 74 62 6f 78 20 4d 65 6e 75 20 4d 65 6e  Listbox Menu Men
18b50 75 62 75 74 74 6f 6e 20 4d 65 73 73 61 67 65 20  ubutton Message 
18b60 52 61 64 69 6f 62 75 74 74 6f 6e 0a 09 09 09 09  Radiobutton.....
18b70 53 63 61 6c 65 20 53 63 72 6f 6c 6c 62 61 72 20  Scale Scrollbar 
18b80 54 65 78 74 0a 09 09 09 09 61 6c 6c 0a 09 09 09  Text.....all....
18b90 7d 0a 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d  }....return [Com
18ba0 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b  pleteFromList ${
18bb0 74 65 78 74 7d 20 5c 0a 09 09 09 5b 63 6f 6e 63  text} \....[conc
18bc0 61 74 20 24 7b 74 6f 70 6c 65 76 65 6c 73 7d 20  at ${toplevels} 
18bd0 24 7b 77 69 64 67 65 74 73 7d 20 24 7b 74 6f 70  ${widgets} ${top
18be0 6c 65 76 65 6c 43 6c 61 73 73 7d 20 24 72 65 73  levelClass} $res
18bf0 74 5d 5d 0a 09 09 7d 0a 09 09 32 20 7b 0a 09 09  t]]...}...2 {...
18c00 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74  .return [Complet
18c10 65 53 65 71 75 65 6e 63 65 20 24 7b 74 65 78 74  eSequence ${text
18c20 7d 20 5b 4c 69 6e 64 65 78 20 24 7b 6c 69 6e 65  } [Lindex ${line
18c30 7d 20 32 5d 5d 0a 09 09 7d 0a 09 09 64 65 66 61  } 2]]...}...defa
18c40 75 6c 74 20 7b 0a 09 09 09 23 20 72 65 74 75 72  ult {....# retur
18c50 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
18c60 7b 3c 73 63 72 69 70 74 3e 20 3c 2b 73 63 72 69  {<script> <+scri
18c70 70 74 3e 7d 5d 0a 09 09 09 72 65 74 75 72 6e 20  pt>}]....return 
18c80 5b 42 72 61 63 65 4f 72 43 6f 6d 6d 61 6e 64 20  [BraceOrCommand 
18c90 24 7b 74 65 78 74 7d 20 5c 0a 09 09 09 24 7b 73  ${text} \....${s
18ca0 74 61 72 74 7d 20 24 7b 65 6e 64 7d 20 24 7b 6c  tart} ${end} ${l
18cb0 69 6e 65 7d 20 24 7b 70 6f 73 7d 20 24 7b 6d 6f  ine} ${pos} ${mo
18cc0 64 7d 5d 0a 09 09 7d 0a 09 7d 0a 09 72 65 74 75  d}]...}..}..retu
18cd0 72 6e 20 22 22 0a 7d 0a 0a 70 72 6f 63 20 63 6f  rn "".}..proc co
18ce0 6d 70 6c 65 74 65 28 62 69 6e 64 74 61 67 73 29  mplete(bindtags)
18cf0 20 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64   {text start end
18d00 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b   line pos mod} {
18d10 0a 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 70 6f  ..switch -- ${po
18d20 73 7d 20 7b 0a 09 09 31 20 7b 20 72 65 74 75 72  s} {...1 { retur
18d30 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c  n [CompleteFromL
18d40 69 73 74 20 24 7b 74 65 78 74 7d 20 5b 57 69 64  ist ${text} [Wid
18d50 67 65 74 43 68 69 6c 64 72 65 6e 20 24 7b 74 65  getChildren ${te
18d60 78 74 7d 5d 5d 20 7d 0a 09 09 32 20 7b 0a 09 09  xt}]] }...2 {...
18d70 09 23 20 73 65 74 20 63 75 72 72 65 6e 74 5f 74  .# set current_t
18d80 61 67 73 20 5c 0a 09 09 09 23 20 5b 52 65 6d 6f  ags \....# [Remo
18d90 76 65 55 73 65 64 4f 70 74 69 6f 6e 73 20 24 7b  veUsedOptions ${
18da0 6c 69 6e 65 7d 20 5b 62 69 6e 64 74 61 67 73 20  line} [bindtags 
18db0 5b 4c 69 6e 64 65 78 20 24 7b 6c 69 6e 65 7d 20  [Lindex ${line} 
18dc0 31 5d 5d 5d 0a 09 09 09 73 65 74 20 63 75 72 72  1]]]....set curr
18dd0 65 6e 74 5f 74 61 67 73 20 5b 62 69 6e 64 74 61  ent_tags [bindta
18de0 67 73 20 5b 4c 69 6e 64 65 78 20 24 7b 6c 69 6e  gs [Lindex ${lin
18df0 65 7d 20 31 5d 5d 0a 09 09 09 72 65 74 75 72 6e  e} 1]]....return
18e00 20 5b 43 6f 6d 70 6c 65 74 65 4c 69 73 74 46 72   [CompleteListFr
18e10 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 5b  omList ${text} [
18e20 4c 69 6e 64 65 78 20 24 7b 6c 69 6e 65 7d 20 32  Lindex ${line} 2
18e30 5d 20 5c 0a 09 09 09 24 7b 63 75 72 72 65 6e 74  ] \....${current
18e40 5f 74 61 67 73 7d 20 5c 7b 20 7b 20 7d 20 5c 7d  _tags} \{ { } \}
18e50 5d 0a 09 09 7d 0a 09 7d 0a 09 72 65 74 75 72 6e  ]...}..}..return
18e60 20 22 22 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70   "".}..proc comp
18e70 6c 65 74 65 28 62 75 74 74 6f 6e 29 20 7b 74 65  lete(button) {te
18e80 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e  xt start end lin
18e90 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73 77  e pos mod} {..sw
18ea0 69 74 63 68 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b  itch -- ${pos} {
18eb0 0a 09 09 31 20 7b 20 72 65 74 75 72 6e 20 5b 45  ...1 { return [E
18ec0 76 65 6e 74 75 61 6c 6c 79 49 6e 73 65 72 74 4c  ventuallyInsertL
18ed0 65 61 64 69 6e 67 44 6f 74 20 24 7b 74 65 78 74  eadingDot ${text
18ee0 7d 20 3c 70 61 74 68 4e 61 6d 65 3e 5d 20 7d 0a  } <pathName>] }.
18ef0 09 09 64 65 66 61 75 6c 74 20 7b 0a 09 09 09 72  ..default {....r
18f00 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 57  eturn [CompleteW
18f10 69 64 67 65 74 43 6f 6e 66 69 67 75 72 61 74 69  idgetConfigurati
18f20 6f 6e 73 20 24 7b 74 65 78 74 7d 20 24 7b 73 74  ons ${text} ${st
18f30 61 72 74 7d 20 24 7b 6c 69 6e 65 7d 20 7b 0a 09  art} ${line} {..
18f40 09 09 09 2d 61 63 74 69 76 65 62 61 63 6b 67 72  ...-activebackgr
18f50 6f 75 6e 64 20 2d 61 63 74 69 76 65 66 6f 72 65  ound -activefore
18f60 67 72 6f 75 6e 64 20 2d 61 6e 63 68 6f 72 0a 09  ground -anchor..
18f70 09 09 09 2d 62 61 63 6b 67 72 6f 75 6e 64 20 2d  ...-background -
18f80 62 69 74 6d 61 70 20 2d 62 6f 72 64 65 72 77 69  bitmap -borderwi
18f90 64 74 68 20 2d 63 75 72 73 6f 72 0a 09 09 09 09  dth -cursor.....
18fa0 2d 64 69 73 61 62 6c 65 64 66 6f 72 65 67 72 6f  -disabledforegro
18fb0 75 6e 64 20 2d 66 6f 6e 74 20 2d 66 6f 72 65 67  und -font -foreg
18fc0 72 6f 75 6e 64 0a 09 09 09 09 2d 68 69 67 68 6c  round.....-highl
18fd0 69 67 68 74 62 61 63 6b 67 72 6f 75 6e 64 20 2d  ightbackground -
18fe0 68 69 67 68 6c 69 67 68 74 63 6f 6c 6f 72 0a 09  highlightcolor..
18ff0 09 09 09 2d 68 69 67 68 6c 69 67 68 74 74 68 69  ...-highlightthi
19000 63 6b 6e 65 73 73 20 2d 69 6d 61 67 65 20 2d 6a  ckness -image -j
19010 75 73 74 69 66 79 0a 09 09 09 09 2d 70 61 64 78  ustify.....-padx
19020 20 2d 70 61 64 79 20 2d 72 65 6c 69 65 66 20 2d   -pady -relief -
19030 74 61 6b 65 66 6f 63 75 73 20 2d 74 65 78 74 0a  takefocus -text.
19040 09 09 09 09 2d 74 65 78 74 76 61 72 69 61 62 6c  ....-textvariabl
19050 65 20 2d 75 6e 64 65 72 6c 69 6e 65 20 2d 77 72  e -underline -wr
19060 61 70 6c 65 6e 67 74 68 0a 09 09 09 09 2d 63 6f  aplength.....-co
19070 6d 6d 61 6e 64 20 2d 64 65 66 61 75 6c 74 20 2d  mmand -default -
19080 68 65 69 67 68 74 20 2d 73 74 61 74 65 20 2d 77  height -state -w
19090 69 64 74 68 0a 09 09 09 7d 5d 0a 09 09 7d 0a 09  idth....}]...}..
190a0 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a 0a  }..return "".}..
190b0 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 63 61  proc complete(ca
190c0 6e 76 61 73 29 20 7b 74 65 78 74 20 73 74 61 72  nvas) {text star
190d0 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d  t end line pos m
190e0 6f 64 7d 20 7b 0a 09 73 77 69 74 63 68 20 2d 2d  od} {..switch --
190f0 20 24 7b 70 6f 73 7d 20 7b 0a 09 09 31 20 7b 20   ${pos} {...1 { 
19100 72 65 74 75 72 6e 20 5b 45 76 65 6e 74 75 61 6c  return [Eventual
19110 6c 79 49 6e 73 65 72 74 4c 65 61 64 69 6e 67 44  lyInsertLeadingD
19120 6f 74 20 24 7b 74 65 78 74 7d 20 3c 70 61 74 68  ot ${text} <path
19130 4e 61 6d 65 3e 5d 20 7d 0a 09 09 64 65 66 61 75  Name>] }...defau
19140 6c 74 20 7b 0a 09 09 09 72 65 74 75 72 6e 20 5b  lt {....return [
19150 43 6f 6d 70 6c 65 74 65 57 69 64 67 65 74 43 6f  CompleteWidgetCo
19160 6e 66 69 67 75 72 61 74 69 6f 6e 73 20 24 7b 74  nfigurations ${t
19170 65 78 74 7d 20 24 7b 73 74 61 72 74 7d 20 24 7b  ext} ${start} ${
19180 6c 69 6e 65 7d 20 7b 0a 09 09 09 09 2d 62 61 63  line} {.....-bac
19190 6b 67 72 6f 75 6e 64 20 2d 62 6f 72 64 65 72 77  kground -borderw
191a0 69 64 74 68 20 2d 63 75 72 73 6f 72 20 2d 68 69  idth -cursor -hi
191b0 67 68 6c 69 67 68 74 62 61 63 6b 67 72 6f 75 6e  ghlightbackgroun
191c0 64 0a 09 09 09 09 2d 68 69 67 68 6c 69 67 68 74  d.....-highlight
191d0 63 6f 6c 6f 72 20 2d 68 69 67 68 6c 69 67 68 74  color -highlight
191e0 74 68 69 63 6b 6e 65 73 73 20 2d 69 6e 73 65 72  thickness -inser
191f0 74 62 61 63 6b 67 72 6f 75 6e 64 0a 09 09 09 09  tbackground.....
19200 2d 69 6e 73 65 72 74 62 6f 72 64 65 72 77 69 64  -insertborderwid
19210 74 68 20 2d 69 6e 73 65 72 74 6f 66 66 74 69 6d  th -insertofftim
19220 65 20 2d 69 6e 73 65 72 74 6f 6e 74 69 6d 65 0a  e -insertontime.
19230 09 09 09 09 2d 69 6e 73 65 72 74 77 69 64 74 68  ....-insertwidth
19240 20 2d 72 65 6c 69 65 66 20 2d 73 65 6c 65 63 74   -relief -select
19250 62 61 63 6b 67 72 6f 75 6e 64 20 2d 73 65 6c 65  background -sele
19260 63 74 62 6f 72 64 65 72 77 69 64 74 68 0a 09 09  ctborderwidth...
19270 09 09 2d 73 65 6c 65 63 74 66 6f 72 65 67 72 6f  ..-selectforegro
19280 75 6e 64 20 2d 74 61 6b 65 66 6f 63 75 73 20 2d  und -takefocus -
19290 78 73 63 72 6f 6c 6c 63 6f 6d 6d 61 6e 64 20 2d  xscrollcommand -
192a0 79 73 63 72 6f 6c 6c 63 6f 6d 6d 61 6e 64 0a 09  yscrollcommand..
192b0 09 09 09 2d 63 6c 6f 73 65 65 6e 6f 75 67 68 20  ...-closeenough 
192c0 2d 63 6f 6e 66 69 6e 65 20 2d 68 65 69 67 68 74  -confine -height
192d0 20 2d 73 63 72 6f 6c 6c 72 65 67 69 6f 6e 20 2d   -scrollregion -
192e0 77 69 64 74 68 0a 09 09 09 09 2d 78 73 63 72 6f  width.....-xscro
192f0 6c 6c 69 6e 63 72 65 6d 65 6e 74 20 2d 79 73 63  llincrement -ysc
19300 72 6f 6c 6c 69 6e 63 72 65 6d 65 6e 74 0a 09 09  rollincrement...
19310 09 7d 5d 0a 09 09 7d 0a 09 7d 0a 09 72 65 74 75  .}]...}..}..retu
19320 72 6e 20 22 22 0a 7d 0a 0a 70 72 6f 63 20 63 6f  rn "".}..proc co
19330 6d 70 6c 65 74 65 28 63 68 65 63 6b 62 75 74 74  mplete(checkbutt
19340 6f 6e 29 20 7b 74 65 78 74 20 73 74 61 72 74 20  on) {text start 
19350 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64  end line pos mod
19360 7d 20 7b 0a 09 73 77 69 74 63 68 20 2d 2d 20 24  } {..switch -- $
19370 7b 70 6f 73 7d 20 7b 0a 09 09 31 20 7b 20 72 65  {pos} {...1 { re
19380 74 75 72 6e 20 5b 45 76 65 6e 74 75 61 6c 6c 79  turn [Eventually
19390 49 6e 73 65 72 74 4c 65 61 64 69 6e 67 44 6f 74  InsertLeadingDot
193a0 20 24 7b 74 65 78 74 7d 20 3c 70 61 74 68 4e 61   ${text} <pathNa
193b0 6d 65 3e 5d 20 7d 0a 09 09 64 65 66 61 75 6c 74  me>] }...default
193c0 20 7b 0a 09 09 09 72 65 74 75 72 6e 20 5b 43 6f   {....return [Co
193d0 6d 70 6c 65 74 65 57 69 64 67 65 74 43 6f 6e 66  mpleteWidgetConf
193e0 69 67 75 72 61 74 69 6f 6e 73 20 24 7b 74 65 78  igurations ${tex
193f0 74 7d 20 24 7b 73 74 61 72 74 7d 20 24 7b 6c 69  t} ${start} ${li
19400 6e 65 7d 20 7b 0a 09 09 09 09 2d 61 63 74 69 76  ne} {.....-activ
19410 65 62 61 63 6b 67 72 6f 75 6e 64 20 61 63 74 69  ebackground acti
19420 76 65 42 61 63 6b 67 72 6f 75 6e 64 20 46 6f 72  veBackground For
19430 65 67 72 6f 75 6e 64 20 0a 09 09 09 09 2d 61 63  eground .....-ac
19440 74 69 76 65 66 6f 72 65 67 72 6f 75 6e 64 20 2d  tiveforeground -
19450 61 6e 63 68 6f 72 20 2d 62 61 63 6b 67 72 6f 75  anchor -backgrou
19460 6e 64 20 2d 62 69 74 6d 61 70 0a 09 09 09 09 2d  nd -bitmap.....-
19470 62 6f 72 64 65 72 77 69 64 74 68 20 2d 63 75 72  borderwidth -cur
19480 73 6f 72 20 2d 64 69 73 61 62 6c 65 64 66 6f 72  sor -disabledfor
19490 65 67 72 6f 75 6e 64 20 2d 66 6f 6e 74 0a 09 09  eground -font...
194a0 09 09 2d 66 6f 72 65 67 72 6f 75 6e 64 20 2d 68  ..-foreground -h
194b0 69 67 68 6c 69 67 68 74 62 61 63 6b 67 72 6f 75  ighlightbackgrou
194c0 6e 64 20 2d 68 69 67 68 6c 69 67 68 74 63 6f 6c  nd -highlightcol
194d0 6f 72 0a 09 09 09 09 2d 68 69 67 68 6c 69 67 68  or.....-highligh
194e0 74 74 68 69 63 6b 6e 65 73 73 20 2d 69 6d 61 67  tthickness -imag
194f0 65 20 2d 6a 75 73 74 69 66 79 20 2d 70 61 64 78  e -justify -padx
19500 20 2d 70 61 64 79 0a 09 09 09 09 2d 72 65 6c 69   -pady.....-reli
19510 65 66 20 2d 74 61 6b 65 66 6f 63 75 73 20 2d 74  ef -takefocus -t
19520 65 78 74 20 2d 74 65 78 74 76 61 72 69 61 62 6c  ext -textvariabl
19530 65 20 2d 75 6e 64 65 72 6c 69 6e 65 0a 09 09 09  e -underline....
19540 09 2d 77 72 61 70 6c 65 6e 67 74 68 20 2d 63 6f  .-wraplength -co
19550 6d 6d 61 6e 64 20 2d 68 65 69 67 68 74 20 2d 69  mmand -height -i
19560 6e 64 69 63 61 74 6f 72 6f 6e 20 2d 6f 66 66 76  ndicatoron -offv
19570 61 6c 75 65 0a 09 09 09 09 2d 6f 6e 76 61 6c 75  alue.....-onvalu
19580 65 20 2d 73 65 6c 65 63 74 63 6f 6c 6f 72 20 2d  e -selectcolor -
19590 73 65 6c 65 63 74 69 6d 61 67 65 20 2d 73 74 61  selectimage -sta
195a0 74 65 20 2d 76 61 72 69 61 62 6c 65 0a 09 09 09  te -variable....
195b0 09 2d 77 69 64 74 68 0a 09 09 09 7d 5d 0a 09 09  .-width....}]...
195c0 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a  }..}..return "".
195d0 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65  }..proc complete
195e0 28 63 6c 69 70 62 6f 61 72 64 29 20 7b 74 65 78  (clipboard) {tex
195f0 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65  t start end line
19600 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73 77 69   pos mod} {..swi
19610 74 63 68 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a  tch -- ${pos} {.
19620 09 09 31 20 7b 20 72 65 74 75 72 6e 20 5b 43 6f  ..1 { return [Co
19630 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24  mpleteFromList $
19640 7b 74 65 78 74 7d 20 7b 61 70 70 65 6e 64 20 63  {text} {append c
19650 6c 65 61 72 7d 5d 20 7d 0a 09 09 64 65 66 61 75  lear}] }...defau
19660 6c 74 20 7b 0a 09 09 09 73 65 74 20 73 75 62 20  lt {....set sub 
19670 5b 4c 69 6e 64 65 78 20 24 7b 6c 69 6e 65 7d 20  [Lindex ${line} 
19680 31 5d 0a 09 09 09 73 65 74 20 70 72 65 76 20 5b  1]....set prev [
19690 50 72 65 76 69 6f 75 73 57 6f 72 64 20 24 7b 73  PreviousWord ${s
196a0 74 61 72 74 7d 20 24 7b 6c 69 6e 65 7d 5d 0a 09  tart} ${line}]..
196b0 09 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 73 75  ..switch -- ${su
196c0 62 7d 20 7b 0a 09 09 09 09 61 70 70 65 6e 64 20  b} {.....append 
196d0 7b 0a 09 09 09 09 09 73 77 69 74 63 68 20 2d 2d  {......switch --
196e0 20 24 7b 70 72 65 76 7d 20 7b 0a 09 09 09 09 09   ${prev} {......
196f0 09 2d 64 69 73 70 6c 61 79 6f 66 20 7b 0a 09 09  .-displayof {...
19700 09 09 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d  .....return [Com
19710 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b  pleteFromList ${
19720 74 65 78 74 7d 20 5b 54 6f 70 6c 65 76 65 6c 57  text} [ToplevelW
19730 69 6e 64 6f 77 73 5d 5d 0a 09 09 09 09 09 09 7d  indows]].......}
19740 0a 09 09 09 09 09 09 2d 66 6f 72 6d 61 74 20 7b  .......-format {
19750 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
19760 48 69 6e 74 73 20 3c 66 6f 72 6d 61 74 3e 5d 20  Hints <format>] 
19770 7d 0a 09 09 09 09 09 09 2d 74 79 70 65 20 7b 20  }.......-type { 
19780 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
19790 69 6e 74 73 20 3c 74 79 70 65 3e 5d 20 7d 0a 09  ints <type>] }..
197a0 09 09 09 09 09 64 65 66 61 75 6c 74 20 7b 0a 09  .....default {..
197b0 09 09 09 09 09 09 73 65 74 20 6f 70 74 73 20 5b  ......set opts [
197c0 52 65 6d 6f 76 65 55 73 65 64 4f 70 74 69 6f 6e  RemoveUsedOption
197d0 73 20 24 7b 6c 69 6e 65 7d 20 7b 0a 09 09 09 09  s ${line} {.....
197e0 09 09 09 09 2d 64 69 73 70 6c 61 79 6f 66 20 2d  ....-displayof -
197f0 66 6f 72 6d 61 74 20 2d 74 79 70 65 20 2d 2d 0a  format -type --.
19800 09 09 09 09 09 09 09 7d 20 7b 2d 2d 7d 5d 0a 09  .......} {--}]..
19810 09 09 09 09 09 09 69 66 20 7b 21 5b 73 74 72 69  ......if {![stri
19820 6e 67 20 6c 65 6e 67 74 68 20 24 7b 6f 70 74 73  ng length ${opts
19830 7d 5d 7d 20 7b 0a 09 09 09 09 09 09 09 09 72 65  }]} {.........re
19840 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
19850 74 73 20 3c 64 61 74 61 3e 5d 0a 09 09 09 09 09  ts <data>]......
19860 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09 09  ..} else {......
19870 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c  ...return [Compl
19880 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65  eteFromList ${te
19890 78 74 7d 20 24 7b 6f 70 74 73 7d 5d 0a 09 09 09  xt} ${opts}]....
198a0 09 09 09 09 7d 0a 09 09 09 09 09 09 7d 0a 09 09  ....}.......}...
198b0 09 09 09 7d 0a 09 09 09 09 7d 0a 09 09 09 09 63  ...}.....}.....c
198c0 6c 65 61 72 20 7b 0a 09 09 09 09 09 73 77 69 74  lear {......swit
198d0 63 68 20 2d 2d 20 24 7b 70 72 65 76 7d 20 7b 0a  ch -- ${prev} {.
198e0 09 09 09 09 09 09 2d 64 69 73 70 6c 61 79 6f 66  ......-displayof
198f0 20 7b 0a 09 09 09 09 09 09 09 72 65 74 75 72 6e   {........return
19900 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69   [CompleteFromLi
19910 73 74 20 24 7b 74 65 78 74 7d 20 5b 54 6f 70 6c  st ${text} [Topl
19920 65 76 65 6c 57 69 6e 64 6f 77 73 5d 5d 0a 09 09  evelWindows]]...
19930 09 09 09 09 7d 0a 09 09 09 09 09 09 64 65 66 61  ....}.......defa
19940 75 6c 74 20 7b 0a 09 09 09 09 09 09 09 72 65 74  ult {........ret
19950 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f  urn [CompleteFro
19960 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 5c 0a  mList ${text} \.
19970 09 09 09 09 09 09 09 5b 52 65 6d 6f 76 65 55 73  .......[RemoveUs
19980 65 64 4f 70 74 69 6f 6e 73 20 24 7b 6c 69 6e 65  edOptions ${line
19990 7d 20 7b 0a 09 09 09 09 09 09 09 09 2d 64 69 73  } {.........-dis
199a0 70 6c 61 79 6f 66 0a 09 09 09 09 09 09 09 7d 5d  playof........}]
199b0 5d 0a 09 09 09 09 09 09 7d 0a 09 09 09 09 09 7d  ].......}......}
199c0 0a 09 09 09 09 7d 0a 09 09 09 7d 0a 09 09 7d 0a  .....}....}...}.
199d0 09 7d 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c  .}.}..proc compl
199e0 65 74 65 28 64 65 73 74 72 6f 79 29 20 7b 74 65  ete(destroy) {te
199f0 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e  xt start end lin
19a00 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73 65  e pos mod} {..se
19a10 74 20 72 65 6d 61 69 6e 69 6e 67 20 5b 52 65 6d  t remaining [Rem
19a20 6f 76 65 55 73 65 64 4f 70 74 69 6f 6e 73 20 24  oveUsedOptions $
19a30 7b 6c 69 6e 65 7d 20 5b 57 69 64 67 65 74 43 68  {line} [WidgetCh
19a40 69 6c 64 72 65 6e 20 24 7b 74 65 78 74 7d 5d 5d  ildren ${text}]]
19a50 0a 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65  ..return [Comple
19a60 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78  teFromList ${tex
19a70 74 7d 20 24 7b 72 65 6d 61 69 6e 69 6e 67 7d 5d  t} ${remaining}]
19a80 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74  .}..proc complet
19a90 65 28 65 6e 74 72 79 29 20 7b 74 65 78 74 20 73  e(entry) {text s
19aa0 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f  tart end line po
19ab0 73 20 6d 6f 64 7d 20 7b 0a 09 73 77 69 74 63 68  s mod} {..switch
19ac0 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09 09 31   -- ${pos} {...1
19ad0 20 7b 20 72 65 74 75 72 6e 20 5b 45 76 65 6e 74   { return [Event
19ae0 75 61 6c 6c 79 49 6e 73 65 72 74 4c 65 61 64 69  uallyInsertLeadi
19af0 6e 67 44 6f 74 20 24 7b 74 65 78 74 7d 20 3c 70  ngDot ${text} <p
19b00 61 74 68 4e 61 6d 65 3e 5d 20 7d 0a 09 09 64 65  athName>] }...de
19b10 66 61 75 6c 74 20 7b 0a 09 09 09 72 65 74 75 72  fault {....retur
19b20 6e 20 5b 43 6f 6d 70 6c 65 74 65 57 69 64 67 65  n [CompleteWidge
19b30 74 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 20  tConfigurations 
19b40 24 7b 74 65 78 74 7d 20 24 7b 73 74 61 72 74 7d  ${text} ${start}
19b50 20 24 7b 6c 69 6e 65 7d 20 7b 0a 09 09 09 09 2d   ${line} {.....-
19b60 62 61 63 6b 67 72 6f 75 6e 64 20 2d 62 6f 72 64  background -bord
19b70 65 72 77 69 64 74 68 20 2d 63 75 72 73 6f 72 20  erwidth -cursor 
19b80 2d 65 78 70 6f 72 74 73 65 6c 65 63 74 69 6f 6e  -exportselection
19b90 0a 09 09 09 09 2d 66 6f 6e 74 20 2d 66 6f 72 65  .....-font -fore
19ba0 67 72 6f 75 6e 64 20 2d 68 69 67 68 6c 69 67 68  ground -highligh
19bb0 74 62 61 63 6b 67 72 6f 75 6e 64 20 2d 68 69 67  tbackground -hig
19bc0 68 6c 69 67 68 74 63 6f 6c 6f 72 0a 09 09 09 09  hlightcolor.....
19bd0 2d 68 69 67 68 6c 69 67 68 74 74 68 69 63 6b 6e  -highlightthickn
19be0 65 73 73 20 2d 69 6e 73 65 72 74 62 61 63 6b 67  ess -insertbackg
19bf0 72 6f 75 6e 64 20 2d 69 6e 73 65 72 74 62 6f 72  round -insertbor
19c00 64 65 72 77 69 64 74 68 0a 09 09 09 09 2d 69 6e  derwidth.....-in
19c10 73 65 72 74 6f 66 66 74 69 6d 65 20 2d 69 6e 73  sertofftime -ins
19c20 65 72 74 6f 6e 74 69 6d 65 20 2d 69 6e 73 65 72  ertontime -inser
19c30 74 77 69 64 74 68 20 2d 6a 75 73 74 69 66 79 20  twidth -justify 
19c40 2d 72 65 6c 69 65 66 0a 09 09 09 09 2d 73 65 6c  -relief.....-sel
19c50 65 63 74 62 61 63 6b 67 72 6f 75 6e 64 20 2d 73  ectbackground -s
19c60 65 6c 65 63 74 62 6f 72 64 65 72 77 69 64 74 68  electborderwidth
19c70 20 2d 73 65 6c 65 63 74 66 6f 72 65 67 72 6f 75   -selectforegrou
19c80 6e 64 0a 09 09 09 09 2d 74 61 6b 65 66 6f 63 75  nd.....-takefocu
19c90 73 20 2d 74 65 78 74 76 61 72 69 61 62 6c 65 20  s -textvariable 
19ca0 2d 78 73 63 72 6f 6c 6c 63 6f 6d 6d 61 6e 64 20  -xscrollcommand 
19cb0 2d 73 68 6f 77 20 2d 73 74 61 74 65 0a 09 09 09  -show -state....
19cc0 09 2d 77 69 64 74 68 0a 09 09 09 7d 5d 0a 09 09  .-width....}]...
19cd0 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a  }..}..return "".
19ce0 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65  }..proc complete
19cf0 28 65 76 65 6e 74 29 20 7b 74 65 78 74 20 73 74  (event) {text st
19d00 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73  art end line pos
19d10 20 6d 6f 64 7d 20 7b 0a 09 73 65 74 20 73 75 62   mod} {..set sub
19d20 20 5b 4c 69 6e 64 65 78 20 24 7b 6c 69 6e 65 7d   [Lindex ${line}
19d30 20 31 5d 0a 09 73 77 69 74 63 68 20 2d 2d 20 24   1]..switch -- $
19d40 7b 70 6f 73 7d 20 7b 0a 09 09 31 20 7b 0a 09 09  {pos} {...1 {...
19d50 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74  .return [Complet
19d60 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74  eFromList ${text
19d70 7d 20 7b 20 61 64 64 20 64 65 6c 65 74 65 20 67  } { add delete g
19d80 65 6e 65 72 61 74 65 20 69 6e 66 6f 20 7d 5d 0a  enerate info }].
19d90 09 09 7d 0a 09 09 32 20 7b 0a 09 09 09 73 77 69  ..}...2 {....swi
19da0 74 63 68 20 2d 2d 20 24 7b 73 75 62 7d 20 7b 0a  tch -- ${sub} {.
19db0 09 09 09 09 61 64 64 20 7b 20 72 65 74 75 72 6e  ....add { return
19dc0 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c   [DisplayHints <
19dd0 3c 76 69 72 74 75 61 6c 3e 3e 5d 20 7d 0a 09 09  <virtual>>] }...
19de0 09 09 69 6e 66 6f 20 2d 0a 09 09 09 09 64 65 6c  ..info -.....del
19df0 65 74 65 20 7b 0a 09 09 09 09 09 72 65 74 75 72  ete {......retur
19e00 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c  n [CompleteFromL
19e10 69 73 74 20 24 7b 74 65 78 74 7d 20 5b 65 76 65  ist ${text} [eve
19e20 6e 74 20 69 6e 66 6f 5d 20 22 3c 22 5d 0a 09 09  nt info] "<"]...
19e30 09 09 7d 0a 09 09 09 09 67 65 6e 65 72 61 74 65  ..}.....generate
19e40 20 7b 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b   {......return [
19e50 54 72 79 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65  TryFromList ${te
19e60 78 74 7d 20 5b 57 69 64 67 65 74 43 68 69 6c 64  xt} [WidgetChild
19e70 72 65 6e 20 24 7b 74 65 78 74 7d 5d 5d 0a 09 09  ren ${text}]]...
19e80 09 09 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 09 33  ..}....}...}...3
19e90 20 7b 0a 09 09 09 73 77 69 74 63 68 20 2d 2d 20   {....switch -- 
19ea0 24 7b 73 75 62 7d 20 7b 0a 09 09 09 09 61 64 64  ${sub} {.....add
19eb0 20 2d 0a 09 09 09 09 64 65 6c 65 74 65 20 2d 0a   -.....delete -.
19ec0 09 09 09 09 67 65 6e 65 72 61 74 65 20 7b 0a 09  ....generate {..
19ed0 09 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70  ....return [Comp
19ee0 6c 65 74 65 53 65 71 75 65 6e 63 65 20 24 7b 74  leteSequence ${t
19ef0 65 78 74 7d 20 5b 4c 69 6e 64 65 78 20 24 7b 6c  ext} [Lindex ${l
19f00 69 6e 65 7d 20 33 5d 5d 0a 09 09 09 09 7d 0a 09  ine} 3]].....}..
19f10 09 09 09 69 6e 66 6f 20 7b 7d 0a 09 09 09 7d 0a  ...info {}....}.
19f20 09 09 7d 0a 09 09 64 65 66 61 75 6c 74 20 7b 0a  ..}...default {.
19f30 09 09 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 73  ...switch -- ${s
19f40 75 62 7d 20 7b 0a 09 09 09 09 61 64 64 20 2d 0a  ub} {.....add -.
19f50 09 09 09 09 64 65 6c 65 74 65 20 7b 0a 09 09 09  ....delete {....
19f60 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65  ..return [Comple
19f70 74 65 53 65 71 75 65 6e 63 65 20 24 7b 74 65 78  teSequence ${tex
19f80 74 7d 20 5b 4c 69 6e 64 65 78 20 24 7b 6c 69 6e  t} [Lindex ${lin
19f90 65 7d 20 33 5d 5d 0a 09 09 09 09 7d 0a 09 09 09  e} 3]].....}....
19fa0 09 69 6e 66 6f 20 7b 7d 0a 09 09 09 09 67 65 6e  .info {}.....gen
19fb0 65 72 61 74 65 20 7b 0a 0a 09 09 09 09 09 73 77  erate {.......sw
19fc0 69 74 63 68 20 2d 2d 20 5b 50 72 65 76 69 6f 75  itch -- [Previou
19fd0 73 57 6f 72 64 20 24 7b 73 74 61 72 74 7d 20 24  sWord ${start} $
19fe0 7b 6c 69 6e 65 7d 5d 20 7b 0a 0a 09 09 09 09 09  {line}] {.......
19ff0 09 2d 61 62 6f 76 65 20 2d 0a 09 09 09 09 09 09  .-above -.......
1a000 2d 72 6f 6f 74 20 2d 0a 09 09 09 09 09 09 2d 73  -root -.......-s
1a010 75 62 77 69 6e 64 6f 77 20 7b 0a 09 09 09 09 09  ubwindow {......
1a020 09 09 72 65 74 75 72 6e 20 5b 54 72 79 46 72 6f  ..return [TryFro
1a030 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 5c 0a  mList ${text} \.
1a040 09 09 09 09 09 09 09 5b 57 69 64 67 65 74 43 68  .......[WidgetCh
1a050 69 6c 64 72 65 6e 20 24 7b 74 65 78 74 7d 5d 5d  ildren ${text}]]
1a060 0a 09 09 09 09 09 09 7d 0a 0a 09 09 09 09 09 09  .......}........
1a070 2d 62 6f 72 64 65 72 77 69 64 74 68 20 7b 20 72  -borderwidth { r
1a080 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
1a090 6e 74 73 20 3c 73 69 7a 65 3e 5d 20 7d 0a 0a 09  nts <size>] }...
1a0a0 09 09 09 09 09 2d 62 75 74 74 6f 6e 20 2d 0a 09  .....-button -..
1a0b0 09 09 09 09 09 2d 64 65 6c 74 61 20 2d 0a 09 09  .....-delta -...
1a0c0 09 09 09 09 2d 6b 65 79 63 6f 64 65 20 2d 0a 09  ....-keycode -..
1a0d0 09 09 09 09 09 2d 73 65 72 69 61 6c 20 2d 0a 09  .....-serial -..
1a0e0 09 09 09 09 09 2d 63 6f 75 6e 74 20 7b 20 72 65  .....-count { re
1a0f0 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
1a100 74 73 20 3c 6e 75 6d 62 65 72 3e 5d 20 7d 0a 0a  ts <number>] }..
1a110 09 09 09 09 09 09 2d 64 65 74 61 69 6c 20 7b 0a  ......-detail {.
1a120 09 09 09 09 09 09 09 72 65 74 75 72 6e 20 5b 43  .......return [C
1a130 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20  ompleteFromList 
1a140 24 7b 74 65 78 74 7d 20 7b 20 0a 09 09 09 09 09  ${text} { ......
1a150 09 09 09 4e 6f 74 69 66 79 41 6e 63 65 73 74 6f  ...NotifyAncesto
1a160 72 20 20 20 20 4e 6f 74 69 66 79 4e 6f 6e 6c 69  r    NotifyNonli
1a170 6e 65 61 72 56 69 72 74 75 61 6c 0a 09 09 09 09  nearVirtual.....
1a180 09 09 09 09 4e 6f 74 69 66 79 44 65 74 61 69 6c  ....NotifyDetail
1a190 4e 6f 6e 65 20 20 4e 6f 74 69 66 79 50 6f 69 6e  None  NotifyPoin
1a1a0 74 65 72 0a 09 09 09 09 09 09 09 09 4e 6f 74 69  ter.........Noti
1a1b0 66 79 49 6e 66 65 72 69 6f 72 20 20 20 20 4e 6f  fyInferior    No
1a1c0 74 69 66 79 50 6f 69 6e 74 65 72 52 6f 6f 74 0a  tifyPointerRoot.
1a1d0 09 09 09 09 09 09 09 09 4e 6f 74 69 66 79 4e 6f  ........NotifyNo
1a1e0 6e 6c 69 6e 65 61 72 20 20 20 4e 6f 74 69 66 79  nlinear   Notify
1a1f0 56 69 72 74 75 61 6c 0a 09 09 09 09 09 09 09 7d  Virtual........}
1a200 5d 0a 09 09 09 09 09 09 7d 0a 0a 09 09 09 09 09  ].......}.......
1a210 09 2d 66 6f 63 75 73 20 2d 0a 09 09 09 09 09 09  .-focus -.......
1a220 2d 6f 76 65 72 72 69 64 65 20 2d 0a 09 09 09 09  -override -.....
1a230 09 09 2d 73 65 6e 64 65 76 65 6e 74 20 7b 20 72  ..-sendevent { r
1a240 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 42  eturn [CompleteB
1a250 6f 6f 6c 65 61 6e 20 24 7b 74 65 78 74 7d 5d 20  oolean ${text}] 
1a260 7d 0a 0a 09 09 09 09 09 09 2d 68 65 69 67 68 74  }........-height
1a270 20 2d 0a 09 09 09 09 09 09 2d 77 69 64 74 68 20   -.......-width 
1a280 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
1a290 79 48 69 6e 74 73 20 3c 73 69 7a 65 3e 5d 20 7d  yHints <size>] }
1a2a0 0a 0a 09 09 09 09 09 09 2d 6b 65 79 73 79 6d 20  ........-keysym 
1a2b0 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
1a2c0 79 48 69 6e 74 73 20 3c 6e 61 6d 65 3e 5d 20 7d  yHints <name>] }
1a2d0 0a 0a 09 09 09 09 09 09 2d 6d 6f 64 65 20 7b 0a  ........-mode {.
1a2e0 09 09 09 09 09 09 09 72 65 74 75 72 6e 20 5b 43  .......return [C
1a2f0 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20  ompleteFromList 
1a300 24 7b 74 65 78 74 7d 20 7b 20 0a 09 09 09 09 09  ${text} { ......
1a310 09 09 09 4e 6f 74 69 66 79 4e 6f 72 6d 61 6c 20  ...NotifyNormal 
1a320 4e 6f 74 69 66 79 47 72 61 62 0a 09 09 09 09 09  NotifyGrab......
1a330 09 09 09 4e 6f 74 69 66 79 55 6e 67 72 61 62 20  ...NotifyUngrab 
1a340 4e 6f 74 69 66 79 57 68 69 6c 65 47 72 61 62 62  NotifyWhileGrabb
1a350 65 64 0a 09 09 09 09 09 09 09 7d 5d 0a 09 09 09  ed........}]....
1a360 09 09 09 7d 0a 0a 09 09 09 09 09 09 2d 70 6c 61  ...}........-pla
1a370 63 65 20 7b 0a 09 09 09 09 09 09 09 72 65 74 75  ce {........retu
1a380 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d  rn [CompleteFrom
1a390 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 7b 20 0a  List ${text} { .
1a3a0 09 09 09 09 09 09 09 09 50 6c 61 63 65 4f 6e 54  ........PlaceOnT
1a3b0 6f 70 20 50 6c 61 63 65 4f 6e 42 6f 74 74 6f 6d  op PlaceOnBottom
1a3c0 0a 09 09 09 09 09 09 09 7d 5d 0a 09 09 09 09 09  ........}]......
1a3d0 09 7d 0a 0a 09 09 09 09 09 09 2d 72 6f 6f 74 78  .}........-rootx
1a3e0 20 2d 0a 09 09 09 09 09 09 2d 72 6f 6f 74 79 20   -.......-rooty 
1a3f0 2d 0a 09 09 09 09 09 09 2d 78 20 2d 0a 09 09 09  -.......-x -....
1a400 09 09 09 2d 79 20 7b 20 72 65 74 75 72 6e 20 5b  ...-y { return [
1a410 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 63 6f  DisplayHints <co
1a420 6f 72 64 3e 5d 20 7d 0a 0a 09 09 09 09 09 09 2d  ord>] }........-
1a430 73 74 61 74 65 20 7b 0a 09 09 09 09 09 09 09 72  state {........r
1a440 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46  eturn [CompleteF
1a450 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20  romList ${text} 
1a460 7b 20 0a 09 09 09 09 09 09 09 09 56 69 73 69 62  { .........Visib
1a470 69 6c 69 74 79 55 6e 6f 62 73 63 75 72 65 64 0a  ilityUnobscured.
1a480 09 09 09 09 09 09 09 09 56 69 73 69 62 69 6c 69  ........Visibili
1a490 74 79 50 61 72 74 69 61 6c 6c 79 4f 62 73 63 75  tyPartiallyObscu
1a4a0 72 65 64 0a 09 09 09 09 09 09 09 09 56 69 73 69  red.........Visi
1a4b0 62 69 6c 69 74 79 46 75 6c 6c 79 4f 62 73 63 75  bilityFullyObscu
1a4c0 72 65 64 0a 09 09 09 09 09 09 09 09 3c 69 6e 74  red.........<int
1a4d0 65 67 65 72 3e 0a 09 09 09 09 09 09 09 7d 5d 0a  eger>........}].
1a4e0 09 09 09 09 09 09 7d 0a 0a 09 09 09 09 09 09 2d  ......}........-
1a4f0 74 69 6d 65 20 7b 20 72 65 74 75 72 6e 20 5b 44  time { return [D
1a500 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 69 6e 74  isplayHints <int
1a510 65 67 65 72 3e 5d 20 7d 0a 09 09 09 09 09 09 2d  eger>] }.......-
1a520 77 68 65 6e 20 7b 0a 09 09 09 09 09 09 09 72 65  when {........re
1a530 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72  turn [CompleteFr
1a540 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 7b  omList ${text} {
1a550 20 0a 09 09 09 09 09 09 09 09 6e 6f 77 20 74 61   .........now ta
1a560 69 6c 20 68 65 61 64 20 6d 61 72 6b 0a 09 09 09  il head mark....
1a570 09 09 09 09 7d 5d 0a 09 09 09 09 09 09 7d 0a 0a  ....}].......}..
1a580 09 09 09 09 09 09 64 65 66 61 75 6c 74 20 7b 0a  ......default {.
1a590 09 09 09 09 09 09 09 72 65 74 75 72 6e 20 5b 43  .......return [C
1a5a0 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20  ompleteFromList 
1a5b0 24 7b 74 65 78 74 7d 20 5c 0a 09 09 09 09 09 09  ${text} \.......
1a5c0 09 5b 52 65 6d 6f 76 65 55 73 65 64 4f 70 74 69  .[RemoveUsedOpti
1a5d0 6f 6e 73 20 24 7b 6c 69 6e 65 7d 20 7b 0a 09 09  ons ${line} {...
1a5e0 09 09 09 09 09 09 2d 61 62 6f 76 65 20 2d 62 6f  ......-above -bo
1a5f0 72 64 65 72 77 69 64 74 68 20 2d 62 75 74 74 6f  rderwidth -butto
1a600 6e 20 2d 63 6f 75 6e 74 20 2d 64 65 6c 74 61 0a  n -count -delta.
1a610 09 09 09 09 09 09 09 09 2d 64 65 74 61 69 6c 20  ........-detail 
1a620 2d 66 6f 63 75 73 20 2d 68 65 69 67 68 74 20 2d  -focus -height -
1a630 6b 65 79 63 6f 64 65 20 2d 6b 65 79 73 79 6d 0a  keycode -keysym.
1a640 09 09 09 09 09 09 09 09 2d 6d 6f 64 65 20 2d 6f  ........-mode -o
1a650 76 65 72 72 69 64 65 20 2d 70 6c 61 63 65 20 2d  verride -place -
1a660 72 6f 6f 74 20 2d 72 6f 6f 74 78 20 2d 72 6f 6f  root -rootx -roo
1a670 74 79 0a 09 09 09 09 09 09 09 09 2d 73 65 6e 64  ty.........-send
1a680 65 76 65 6e 74 20 2d 73 65 72 69 61 6c 20 2d 73  event -serial -s
1a690 74 61 74 65 20 2d 73 75 62 77 69 6e 64 6f 77 20  tate -subwindow 
1a6a0 2d 74 69 6d 65 0a 09 09 09 09 09 09 09 09 2d 77  -time.........-w
1a6b0 69 64 74 68 20 2d 77 68 65 6e 20 2d 78 20 2d 79  idth -when -x -y
1a6c0 0a 09 09 09 09 09 09 09 7d 5d 5d 0a 0a 09 09 09  ........}]].....
1a6d0 09 09 09 7d 0a 09 09 09 09 09 7d 0a 09 09 09 09  ...}......}.....
1a6e0 09 64 65 66 61 75 6c 74 20 7b 20 7d 0a 09 09 09  .default { }....
1a6f0 09 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 7d 0a 09  .}....}...}..}..
1a700 72 65 74 75 72 6e 20 22 22 0a 7d 0a 0a 70 72 6f  return "".}..pro
1a710 63 20 63 6f 6d 70 6c 65 74 65 28 66 6f 63 75 73  c complete(focus
1a720 29 20 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e  ) {text start en
1a730 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20  d line pos mod} 
1a740 7b 0a 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 70  {..switch -- ${p
1a750 6f 73 7d 20 7b 0a 09 09 31 20 7b 0a 09 09 09 72  os} {...1 {....r
1a760 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46  eturn [CompleteF
1a770 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20  romList ${text} 
1a780 5c 0a 09 09 09 5b 63 6f 6e 63 61 74 20 5b 57 69  \....[concat [Wi
1a790 64 67 65 74 43 68 69 6c 64 72 65 6e 20 24 7b 74  dgetChildren ${t
1a7a0 65 78 74 7d 5d 20 2d 64 69 73 70 6c 61 79 6f 66  ext}] -displayof
1a7b0 20 2d 66 6f 72 63 65 20 2d 6c 61 73 74 66 6f 72   -force -lastfor
1a7c0 5d 5d 0a 09 09 7d 0a 09 09 64 65 66 61 75 6c 74  ]]...}...default
1a7d0 20 7b 0a 09 09 09 73 77 69 74 63 68 20 2d 2d 20   {....switch -- 
1a7e0 5b 50 72 65 76 69 6f 75 73 57 6f 72 64 20 24 7b  [PreviousWord ${
1a7f0 73 74 61 72 74 7d 20 24 7b 6c 69 6e 65 7d 5d 20  start} ${line}] 
1a800 7b 0a 09 09 09 09 2d 64 69 73 70 6c 61 79 6f 66  {.....-displayof
1a810 20 2d 0a 09 09 09 09 2d 66 6f 72 63 65 20 2d 0a   -.....-force -.
1a820 09 09 09 09 2d 6c 61 73 74 66 6f 72 20 7b 0a 09  ....-lastfor {..
1a830 09 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70  ....return [Comp
1a840 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74  leteFromList ${t
1a850 65 78 74 7d 20 5c 0a 09 09 09 09 09 5b 57 69 64  ext} \......[Wid
1a860 67 65 74 43 68 69 6c 64 72 65 6e 20 24 7b 74 65  getChildren ${te
1a870 78 74 7d 5d 5d 0a 09 09 09 09 7d 0a 09 09 09 7d  xt}]].....}....}
1a880 0a 09 09 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20  ...}..}..return 
1a890 22 22 0a 7d 0a 0a 70 72 6f 63 20 46 6f 6e 74 43  "".}..proc FontC
1a8a0 6f 6e 66 69 67 75 72 65 20 7b 74 65 78 74 20 6c  onfigure {text l
1a8b0 69 6e 65 20 70 72 65 76 7d 20 7b 0a 09 73 65 74  ine prev} {..set
1a8c0 20 66 6f 6e 74 6f 70 74 73 20 7b 2d 66 61 6d 69   fontopts {-fami
1a8d0 6c 79 20 2d 6f 76 65 72 73 74 72 69 6b 65 20 2d  ly -overstrike -
1a8e0 73 69 7a 65 20 2d 73 6c 61 6e 74 20 2d 75 6e 64  size -slant -und
1a8f0 65 72 6c 69 6e 65 20 2d 77 65 69 67 68 74 7d 0a  erline -weight}.
1a900 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 70 72 65  .switch -- ${pre
1a910 76 7d 20 7b 0a 09 09 2d 66 61 6d 69 6c 79 20 7b  v} {...-family {
1a920 0a 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70  ....return [Comp
1a930 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74  leteFromList ${t
1a940 65 78 74 7d 20 5b 66 6f 6e 74 20 66 61 6d 69 6c  ext} [font famil
1a950 69 65 73 5d 5d 0a 09 09 7d 0a 09 09 2d 75 6e 64  ies]]...}...-und
1a960 65 72 6c 69 6e 65 20 2d 0a 09 09 2d 6f 76 65 72  erline -...-over
1a970 73 74 72 69 6b 65 20 7b 20 72 65 74 75 72 6e 20  strike { return 
1a980 5b 43 6f 6d 70 6c 65 74 65 42 6f 6f 6c 65 61 6e  [CompleteBoolean
1a990 20 24 7b 74 65 78 74 7d 5d 20 7d 0a 09 09 2d 73   ${text}] }...-s
1a9a0 69 7a 65 20 7b 20 72 65 74 75 72 6e 20 5b 44 69  ize { return [Di
1a9b0 73 70 6c 61 79 48 69 6e 74 73 20 3c 73 69 7a 65  splayHints <size
1a9c0 3e 5d 20 7d 0a 09 09 2d 73 6c 61 6e 74 20 7b 0a  >] }...-slant {.
1a9d0 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c  ...return [Compl
1a9e0 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65  eteFromList ${te
1a9f0 78 74 7d 20 7b 20 72 6f 6d 61 6e 20 69 74 61 6c  xt} { roman ital
1aa00 69 63 20 7d 5d 0a 09 09 7d 0a 09 09 2d 77 65 69  ic }]...}...-wei
1aa10 67 68 74 20 7b 0a 09 09 09 72 65 74 75 72 6e 20  ght {....return 
1aa20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73  [CompleteFromLis
1aa30 74 20 24 7b 74 65 78 74 7d 20 7b 20 6e 6f 72 6d  t ${text} { norm
1aa40 61 6c 20 62 6f 6c 64 20 7d 5d 0a 09 09 7d 0a 09  al bold }]...}..
1aa50 09 64 65 66 61 75 6c 74 20 7b 0a 09 09 09 72 65  .default {....re
1aa60 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72  turn [CompleteFr
1aa70 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 5c  omList ${text} \
1aa80 0a 09 09 09 5b 52 65 6d 6f 76 65 55 73 65 64 4f  ....[RemoveUsedO
1aa90 70 74 69 6f 6e 73 20 24 7b 6c 69 6e 65 7d 20 24  ptions ${line} $
1aaa0 7b 66 6f 6e 74 6f 70 74 73 7d 5d 5d 0a 09 09 7d  {fontopts}]]...}
1aab0 0a 09 7d 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70  ..}.}..proc comp
1aac0 6c 65 74 65 28 66 6f 6e 74 29 20 7b 74 65 78 74  lete(font) {text
1aad0 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20   start end line 
1aae0 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73 65 74 20  pos mod} {..set 
1aaf0 66 6f 6e 74 6f 70 74 73 20 7b 2d 66 61 6d 69 6c  fontopts {-famil
1ab00 79 20 2d 6f 76 65 72 73 74 72 69 6b 65 20 2d 73  y -overstrike -s
1ab10 69 7a 65 20 2d 73 6c 61 6e 74 20 2d 75 6e 64 65  ize -slant -unde
1ab20 72 6c 69 6e 65 20 2d 77 65 69 67 68 74 7d 0a 09  rline -weight}..
1ab30 73 65 74 20 66 6f 6e 74 6d 65 74 72 69 63 73 20  set fontmetrics 
1ab40 7b 2d 61 73 63 65 6e 74 20 2d 64 65 73 63 65 6e  {-ascent -descen
1ab50 74 20 2d 6c 69 6e 65 73 70 61 63 65 20 2d 66 69  t -linespace -fi
1ab60 78 65 64 7d 0a 09 73 65 74 20 73 75 62 20 5b 4c  xed}..set sub [L
1ab70 69 6e 64 65 78 20 24 7b 6c 69 6e 65 7d 20 31 5d  index ${line} 1]
1ab80 0a 09 73 65 74 20 70 72 65 76 20 5b 50 72 65 76  ..set prev [Prev
1ab90 69 6f 75 73 57 6f 72 64 20 24 7b 73 74 61 72 74  iousWord ${start
1aba0 7d 20 24 7b 6c 69 6e 65 7d 5d 0a 09 73 77 69 74  } ${line}]..swit
1abb0 63 68 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09  ch -- ${pos} {..
1abc0 09 31 20 7b 0a 09 09 09 72 65 74 75 72 6e 20 5b  .1 {....return [
1abd0 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74  CompleteFromList
1abe0 20 24 7b 74 65 78 74 7d 20 7b 0a 09 09 09 09 61   ${text} {.....a
1abf0 63 74 75 61 6c 20 63 6f 6e 66 69 67 75 72 65 20  ctual configure 
1ac00 63 72 65 61 74 65 20 64 65 6c 65 74 65 20 66 61  create delete fa
1ac10 6d 69 6c 69 65 73 20 6d 65 61 73 75 72 65 20 6d  milies measure m
1ac20 65 74 72 69 63 73 20 6e 61 6d 65 73 0a 09 09 09  etrics names....
1ac30 7d 5d 0a 09 09 7d 0a 09 09 32 20 7b 0a 09 09 09  }]...}...2 {....
1ac40 73 77 69 74 63 68 20 2d 2d 20 24 7b 73 75 62 7d  switch -- ${sub}
1ac50 20 7b 0a 09 09 09 09 61 63 74 75 61 6c 20 2d 0a   {.....actual -.
1ac60 09 09 09 09 6d 65 61 73 75 72 65 20 2d 0a 09 09  ....measure -...
1ac70 09 09 6d 65 74 72 69 63 73 20 7b 0a 09 09 09 09  ..metrics {.....
1ac80 09 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79  .return [Display
1ac90 48 69 6e 74 73 20 3c 66 6f 6e 74 3e 5d 0a 09 09  Hints <font>]...
1aca0 09 09 7d 0a 09 09 09 09 63 6f 6e 66 69 67 75 72  ..}.....configur
1acb0 65 20 2d 0a 09 09 09 09 64 65 6c 65 74 65 20 7b  e -.....delete {
1acc0 0a 09 09 09 09 09 73 65 74 20 6e 61 6d 65 73 20  ......set names 
1acd0 5b 66 6f 6e 74 20 6e 61 6d 65 73 5d 0a 09 09 09  [font names]....
1ace0 09 09 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65  ..if {[string le
1acf0 6e 67 74 68 20 24 7b 6e 61 6d 65 73 7d 5d 7d 20  ngth ${names}]} 
1ad00 7b 0a 09 09 09 09 09 09 72 65 74 75 72 6e 20 5b  {.......return [
1ad10 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74  CompleteFromList
1ad20 20 24 7b 74 65 78 74 7d 20 24 7b 6e 61 6d 65 73   ${text} ${names
1ad30 7d 5d 0a 09 09 09 09 09 7d 20 65 6c 73 65 20 7b  }]......} else {
1ad40 0a 09 09 09 09 09 09 72 65 74 75 72 6e 20 5b 44  .......return [D
1ad50 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 66 6f 6e  isplayHints <fon
1ad60 74 6e 61 6d 65 3e 5d 0a 09 09 09 09 09 7d 0a 09  tname>]......}..
1ad70 09 09 09 7d 0a 09 09 09 09 63 72 65 61 74 65 20  ...}.....create 
1ad80 7b 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b 43  {......return [C
1ad90 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20  ompleteFromList 
1ada0 24 7b 74 65 78 74 7d 20 5c 0a 09 09 09 09 09 5b  ${text} \......[
1adb0 63 6f 6e 63 61 74 20 3f 66 6f 6e 74 6e 61 6d 65  concat ?fontname
1adc0 3f 20 24 7b 66 6f 6e 74 6f 70 74 73 7d 5d 5d 0a  ? ${fontopts}]].
1add0 09 09 09 09 7d 0a 09 09 09 09 66 61 6d 69 6c 69  ....}.....famili
1ade0 65 73 20 7b 0a 09 09 09 09 09 72 65 74 75 72 6e  es {......return
1adf0 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69   [CompleteFromLi
1ae00 73 74 20 24 7b 74 65 78 74 7d 20 2d 64 69 73 70  st ${text} -disp
1ae10 6c 61 79 6f 66 5d 0a 09 09 09 09 7d 0a 09 09 09  layof].....}....
1ae20 09 6e 61 6d 65 73 20 7b 7d 0a 09 09 09 7d 0a 09  .names {}....}..
1ae30 09 7d 0a 09 09 33 20 7b 0a 09 09 09 73 77 69 74  .}...3 {....swit
1ae40 63 68 20 2d 2d 20 24 7b 73 75 62 7d 20 7b 0a 09  ch -- ${sub} {..
1ae50 09 09 09 61 63 74 75 61 6c 20 7b 0a 09 09 09 09  ...actual {.....
1ae60 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74  .return [Complet
1ae70 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74  eFromList ${text
1ae80 7d 20 5c 0a 09 09 09 09 09 5b 63 6f 6e 63 61 74  } \......[concat
1ae90 20 2d 64 69 73 70 6c 61 79 6f 66 20 24 7b 66 6f   -displayof ${fo
1aea0 6e 74 6f 70 74 73 7d 5d 5d 0a 09 09 09 09 7d 0a  ntopts}]].....}.
1aeb0 09 09 09 09 63 6f 6e 66 69 67 75 72 65 20 2d 0a  ....configure -.
1aec0 09 09 09 09 63 72 65 61 74 65 20 7b 0a 09 09 09  ....create {....
1aed0 09 09 72 65 74 75 72 6e 20 5b 46 6f 6e 74 43 6f  ..return [FontCo
1aee0 6e 66 69 67 75 72 65 20 24 7b 74 65 78 74 7d 20  nfigure ${text} 
1aef0 24 7b 6c 69 6e 65 7d 20 24 7b 70 72 65 76 7d 5d  ${line} ${prev}]
1af00 0a 09 09 09 09 7d 0a 09 09 09 09 64 65 6c 65 74  .....}.....delet
1af10 65 20 7b 0a 09 09 09 09 09 73 65 74 20 6e 61 6d  e {......set nam
1af20 65 73 20 5b 66 6f 6e 74 20 6e 61 6d 65 73 5d 0a  es [font names].
1af30 09 09 09 09 09 69 66 20 7b 5b 73 74 72 69 6e 67  .....if {[string
1af40 20 6c 65 6e 67 74 68 20 24 7b 6e 61 6d 65 73 7d   length ${names}
1af50 5d 7d 20 7b 0a 09 09 09 09 09 09 72 65 74 75 72  ]} {.......retur
1af60 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c  n [CompleteFromL
1af70 69 73 74 20 24 7b 74 65 78 74 7d 20 24 7b 6e 61  ist ${text} ${na
1af80 6d 65 73 7d 5d 0a 09 09 09 09 09 7d 20 65 6c 73  mes}]......} els
1af90 65 20 7b 0a 09 09 09 09 09 09 72 65 74 75 72 6e  e {.......return
1afa0 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c   [DisplayHints <
1afb0 66 6f 6e 74 6e 61 6d 65 3e 5d 0a 09 09 09 09 09  fontname>]......
1afc0 7d 0a 09 09 09 09 7d 0a 09 09 09 09 66 61 6d 69  }.....}.....fami
1afd0 6c 69 65 73 20 7b 0a 09 09 09 09 09 73 77 69 74  lies {......swit
1afe0 63 68 20 2d 2d 20 24 7b 70 72 65 76 7d 20 7b 0a  ch -- ${prev} {.
1aff0 09 09 09 09 09 09 2d 64 69 73 70 6c 61 79 6f 66  ......-displayof
1b000 20 7b 0a 09 09 09 09 09 09 09 72 65 74 75 72 6e   {........return
1b010 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69   [CompleteFromLi
1b020 73 74 20 24 7b 74 65 78 74 7d 20 5c 0a 09 09 09  st ${text} \....
1b030 09 09 09 09 5b 57 69 64 67 65 74 43 68 69 6c 64  ....[WidgetChild
1b040 72 65 6e 20 24 7b 74 65 78 74 7d 5d 5d 0a 09 09  ren ${text}]]...
1b050 09 09 09 09 7d 0a 09 09 09 09 09 7d 0a 09 09 09  ....}......}....
1b060 09 7d 0a 09 09 09 09 6d 65 61 73 75 72 65 20 7b  .}.....measure {
1b070 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b 43 6f  ......return [Co
1b080 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24  mpleteFromList $
1b090 7b 74 65 78 74 7d 20 7b 2d 64 69 73 70 6c 61 79  {text} {-display
1b0a0 6f 66 20 3c 74 65 78 74 3e 7d 5d 0a 09 09 09 09  of <text>}].....
1b0b0 7d 0a 09 09 09 09 6d 65 74 72 69 63 73 20 7b 0a  }.....metrics {.
1b0c0 09 09 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d  .....return [Com
1b0d0 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b  pleteFromList ${
1b0e0 74 65 78 74 7d 20 5c 0a 09 09 09 09 09 5b 63 6f  text} \......[co
1b0f0 6e 63 61 74 20 2d 64 69 73 70 6c 61 79 6f 66 20  ncat -displayof 
1b100 24 7b 66 6f 6e 74 6d 65 74 72 69 63 73 7d 5d 5d  ${fontmetrics}]]
1b110 0a 09 09 09 09 7d 0a 09 09 09 09 6e 61 6d 65 73  .....}.....names
1b120 20 7b 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 09 34   {}....}...}...4
1b130 20 7b 0a 09 09 09 73 77 69 74 63 68 20 2d 2d 20   {....switch -- 
1b140 24 7b 73 75 62 7d 20 7b 0a 09 09 09 09 61 63 74  ${sub} {.....act
1b150 75 61 6c 20 7b 0a 09 09 09 09 09 73 77 69 74 63  ual {......switc
1b160 68 20 2d 2d 20 24 7b 70 72 65 76 7d 20 7b 0a 09  h -- ${prev} {..
1b170 09 09 09 09 09 2d 64 69 73 70 6c 61 79 6f 66 20  .....-displayof 
1b180 7b 0a 09 09 09 09 09 09 09 72 65 74 75 72 6e 20  {........return 
1b190 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73  [CompleteFromLis
1b1a0 74 20 24 7b 74 65 78 74 7d 20 5c 0a 09 09 09 09  t ${text} \.....
1b1b0 09 09 09 5b 57 69 64 67 65 74 43 68 69 6c 64 72  ...[WidgetChildr
1b1c0 65 6e 20 24 7b 74 65 78 74 7d 5d 5d 0a 09 09 09  en ${text}]]....
1b1d0 09 09 09 7d 0a 09 09 09 09 09 09 64 65 66 61 75  ...}.......defau
1b1e0 6c 74 20 7b 0a 09 09 09 09 09 09 09 72 65 74 75  lt {........retu
1b1f0 72 6e 20 5b 46 6f 6e 74 43 6f 6e 66 69 67 75 72  rn [FontConfigur
1b200 65 20 24 7b 74 65 78 74 7d 20 24 7b 6c 69 6e 65  e ${text} ${line
1b210 7d 20 24 7b 70 72 65 76 7d 5d 0a 09 09 09 09 09  } ${prev}]......
1b220 09 7d 0a 09 09 09 09 09 7d 0a 09 09 09 09 7d 0a  .}......}.....}.
1b230 09 09 09 09 63 6f 6e 66 69 67 75 72 65 20 2d 0a  ....configure -.
1b240 09 09 09 09 63 72 65 61 74 65 20 7b 0a 09 09 09  ....create {....
1b250 09 09 72 65 74 75 72 6e 20 5b 46 6f 6e 74 43 6f  ..return [FontCo
1b260 6e 66 69 67 75 72 65 20 24 7b 74 65 78 74 7d 20  nfigure ${text} 
1b270 24 7b 6c 69 6e 65 7d 20 24 7b 70 72 65 76 7d 5d  ${line} ${prev}]
1b280 0a 09 09 09 09 7d 0a 09 09 09 09 64 65 6c 65 74  .....}.....delet
1b290 65 20 7b 0a 09 09 09 09 09 73 65 74 20 6e 61 6d  e {......set nam
1b2a0 65 73 20 5b 66 6f 6e 74 20 6e 61 6d 65 73 5d 0a  es [font names].
1b2b0 09 09 09 09 09 69 66 20 7b 5b 73 74 72 69 6e 67  .....if {[string
1b2c0 20 6c 65 6e 67 74 68 20 24 7b 6e 61 6d 65 73 7d   length ${names}
1b2d0 5d 7d 20 7b 0a 09 09 09 09 09 09 72 65 74 75 72  ]} {.......retur
1b2e0 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c  n [CompleteFromL
1b2f0 69 73 74 20 24 7b 74 65 78 74 7d 20 24 7b 6e 61  ist ${text} ${na
1b300 6d 65 73 7d 5d 0a 09 09 09 09 09 7d 20 65 6c 73  mes}]......} els
1b310 65 20 7b 0a 09 09 09 09 09 09 72 65 74 75 72 6e  e {.......return
1b320 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c   [DisplayHints <
1b330 66 6f 6e 74 6e 61 6d 65 3e 5d 0a 09 09 09 09 09  fontname>]......
1b340 7d 0a 09 09 09 09 7d 0a 09 09 09 09 66 61 6d 69  }.....}.....fami
1b350 6c 69 65 73 20 7b 7d 0a 09 09 09 09 6d 65 61 73  lies {}.....meas
1b360 75 72 65 20 7b 0a 09 09 09 09 09 73 77 69 74 63  ure {......switc
1b370 68 20 2d 2d 20 24 7b 70 72 65 76 7d 20 7b 0a 09  h -- ${prev} {..
1b380 09 09 09 09 09 2d 64 69 73 70 6c 61 79 6f 66 20  .....-displayof 
1b390 7b 0a 09 09 09 09 09 09 09 72 65 74 75 72 6e 20  {........return 
1b3a0 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73  [CompleteFromLis
1b3b0 74 20 24 7b 74 65 78 74 7d 20 5c 0a 09 09 09 09  t ${text} \.....
1b3c0 09 09 09 5b 57 69 64 67 65 74 43 68 69 6c 64 72  ...[WidgetChildr
1b3d0 65 6e 20 24 7b 74 65 78 74 7d 5d 5d 0a 09 09 09  en ${text}]]....
1b3e0 09 09 09 7d 0a 09 09 09 09 09 09 64 65 66 61 75  ...}.......defau
1b3f0 6c 74 20 7b 0a 09 09 09 09 09 09 09 72 65 74 75  lt {........retu
1b400 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
1b410 20 3c 74 65 78 74 3e 5d 0a 09 09 09 09 09 09 7d   <text>].......}
1b420 0a 09 09 09 09 09 7d 0a 09 09 09 09 7d 0a 09 09  ......}.....}...
1b430 09 09 6d 65 74 72 69 63 73 20 7b 0a 09 09 09 09  ..metrics {.....
1b440 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 70 72 65  .switch -- ${pre
1b450 76 7d 20 7b 0a 09 09 09 09 09 09 2d 64 69 73 70  v} {.......-disp
1b460 6c 61 79 6f 66 20 7b 0a 09 09 09 09 09 09 09 72  layof {........r
1b470 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46  eturn [CompleteF
1b480 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20  romList ${text} 
1b490 5c 0a 09 09 09 09 09 09 09 5b 57 69 64 67 65 74  \........[Widget
1b4a0 43 68 69 6c 64 72 65 6e 20 24 7b 74 65 78 74 7d  Children ${text}
1b4b0 5d 5d 0a 09 09 09 09 09 09 7d 0a 09 09 09 09 09  ]].......}......
1b4c0 09 64 65 66 61 75 6c 74 20 7b 0a 09 09 09 09 09  .default {......
1b4d0 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65  ..return [Comple
1b4e0 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78  teFromList ${tex
1b4f0 74 7d 20 24 7b 66 6f 6e 74 6d 65 74 72 69 63 73  t} ${fontmetrics
1b500 7d 5d 0a 09 09 09 09 09 09 7d 0a 09 09 09 09 09  }].......}......
1b510 7d 0a 09 09 09 09 7d 0a 09 09 09 09 6e 61 6d 65  }.....}.....name
1b520 73 20 7b 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 09  s {}....}...}...
1b530 64 65 66 61 75 6c 74 20 7b 0a 09 09 09 73 77 69  default {....swi
1b540 74 63 68 20 2d 2d 20 24 7b 73 75 62 7d 20 7b 0a  tch -- ${sub} {.
1b550 09 09 09 09 61 63 74 75 61 6c 20 2d 0a 09 09 09  ....actual -....
1b560 09 63 6f 6e 66 69 67 75 72 65 20 2d 0a 09 09 09  .configure -....
1b570 09 63 72 65 61 74 65 20 7b 0a 09 09 09 09 09 72  .create {......r
1b580 65 74 75 72 6e 20 5b 46 6f 6e 74 43 6f 6e 66 69  eturn [FontConfi
1b590 67 75 72 65 20 24 7b 74 65 78 74 7d 20 24 7b 6c  gure ${text} ${l
1b5a0 69 6e 65 7d 20 24 7b 70 72 65 76 7d 5d 0a 09 09  ine} ${prev}]...
1b5b0 09 09 7d 0a 09 09 09 09 64 65 6c 65 74 65 20 7b  ..}.....delete {
1b5c0 0a 09 09 09 09 09 73 65 74 20 6e 61 6d 65 73 20  ......set names 
1b5d0 5b 66 6f 6e 74 20 6e 61 6d 65 73 5d 0a 09 09 09  [font names]....
1b5e0 09 09 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65  ..if {[string le
1b5f0 6e 67 74 68 20 24 7b 6e 61 6d 65 73 7d 5d 7d 20  ngth ${names}]} 
1b600 7b 0a 09 09 09 09 09 09 72 65 74 75 72 6e 20 5b  {.......return [
1b610 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74  CompleteFromList
1b620 20 24 7b 74 65 78 74 7d 20 24 7b 6e 61 6d 65 73   ${text} ${names
1b630 7d 5d 0a 09 09 09 09 09 7d 20 65 6c 73 65 20 7b  }]......} else {
1b640 0a 09 09 09 09 09 09 72 65 74 75 72 6e 20 5b 44  .......return [D
1b650 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 66 6f 6e  isplayHints <fon
1b660 74 6e 61 6d 65 3e 5d 0a 09 09 09 09 09 7d 0a 09  tname>]......}..
1b670 09 09 09 7d 0a 09 09 09 09 66 61 6d 69 6c 69 65  ...}.....familie
1b680 73 20 7b 7d 0a 09 09 09 09 6d 65 61 73 75 72 65  s {}.....measure
1b690 20 7b 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b   {......return [
1b6a0 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 74 65  DisplayHints <te
1b6b0 78 74 3e 5d 0a 09 09 09 09 7d 0a 09 09 09 09 6d  xt>].....}.....m
1b6c0 65 74 72 69 63 73 20 7b 0a 09 09 09 09 09 72 65  etrics {......re
1b6d0 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72  turn [CompleteFr
1b6e0 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 24  omList ${text} $
1b6f0 7b 66 6f 6e 74 6d 65 74 72 69 63 73 7d 5d 0a 09  {fontmetrics}]..
1b700 09 09 09 7d 0a 09 09 09 09 6e 61 6d 65 73 20 7b  ...}.....names {
1b710 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 7d 0a 09 72  }....}...}..}..r
1b720 65 74 75 72 6e 20 22 22 0a 7d 0a 0a 70 72 6f 63  eturn "".}..proc
1b730 20 63 6f 6d 70 6c 65 74 65 28 66 72 61 6d 65 29   complete(frame)
1b740 20 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64   {text start end
1b750 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b   line pos mod} {
1b760 0a 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 70 6f  ..switch -- ${po
1b770 73 7d 20 7b 0a 09 09 31 20 7b 20 72 65 74 75 72  s} {...1 { retur
1b780 6e 20 5b 45 76 65 6e 74 75 61 6c 6c 79 49 6e 73  n [EventuallyIns
1b790 65 72 74 4c 65 61 64 69 6e 67 44 6f 74 20 24 7b  ertLeadingDot ${
1b7a0 74 65 78 74 7d 20 3c 70 61 74 68 4e 61 6d 65 3e  text} <pathName>
1b7b0 5d 20 7d 0a 09 09 64 65 66 61 75 6c 74 20 7b 0a  ] }...default {.
1b7c0 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c  ...return [Compl
1b7d0 65 74 65 57 69 64 67 65 74 43 6f 6e 66 69 67 75  eteWidgetConfigu
1b7e0 72 61 74 69 6f 6e 73 20 24 7b 74 65 78 74 7d 20  rations ${text} 
1b7f0 24 7b 73 74 61 72 74 7d 20 24 7b 6c 69 6e 65 7d  ${start} ${line}
1b800 20 7b 0a 09 09 09 09 2d 62 6f 72 64 65 72 77 69   {.....-borderwi
1b810 64 74 68 20 2d 63 75 72 73 6f 72 20 2d 68 69 67  dth -cursor -hig
1b820 68 6c 69 67 68 74 62 61 63 6b 67 72 6f 75 6e 64  hlightbackground
1b830 20 2d 68 69 67 68 6c 69 67 68 74 63 6f 6c 6f 72   -highlightcolor
1b840 0a 09 09 09 09 2d 68 69 67 68 6c 69 67 68 74 74  .....-highlightt
1b850 68 69 63 6b 6e 65 73 73 20 2d 72 65 6c 69 65 66  hickness -relief
1b860 20 2d 74 61 6b 65 66 6f 63 75 73 20 2d 62 61 63   -takefocus -bac
1b870 6b 67 72 6f 75 6e 64 0a 09 09 09 09 2d 63 6c 61  kground.....-cla
1b880 73 73 20 2d 63 6f 6c 6f 72 6d 61 70 20 2d 63 6f  ss -colormap -co
1b890 6e 74 61 69 6e 65 72 20 2d 68 65 69 67 68 74 20  ntainer -height 
1b8a0 2d 76 69 73 75 61 6c 20 2d 77 69 64 74 68 0a 09  -visual -width..
1b8b0 09 09 7d 5d 0a 09 09 7d 0a 09 7d 0a 09 72 65 74  ..}]...}..}..ret
1b8c0 75 72 6e 20 22 22 0a 7d 0a 0a 70 72 6f 63 20 63  urn "".}..proc c
1b8d0 6f 6d 70 6c 65 74 65 28 67 72 61 62 29 20 7b 74  omplete(grab) {t
1b8e0 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69  ext start end li
1b8f0 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73  ne pos mod} {..s
1b900 77 69 74 63 68 20 2d 2d 20 24 7b 70 6f 73 7d 20  witch -- ${pos} 
1b910 7b 0a 09 09 31 20 7b 0a 09 09 09 72 65 74 75 72  {...1 {....retur
1b920 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c  n [CompleteFromL
1b930 69 73 74 20 24 7b 74 65 78 74 7d 20 5b 63 6f 6e  ist ${text} [con
1b940 63 61 74 20 5c 0a 09 09 09 63 75 72 72 65 6e 74  cat \....current
1b950 20 72 65 6c 65 61 73 65 20 73 65 74 20 73 74 61   release set sta
1b960 74 75 73 20 2d 67 6c 6f 62 61 6c 20 5b 57 69 64  tus -global [Wid
1b970 67 65 74 43 68 69 6c 64 72 65 6e 20 24 7b 74 65  getChildren ${te
1b980 78 74 7d 5d 5d 5d 0a 09 09 7d 0a 09 09 32 20 7b  xt}]]]...}...2 {
1b990 0a 09 09 09 73 77 69 74 63 68 20 2d 2d 20 5b 4c  ....switch -- [L
1b9a0 69 6e 64 65 78 20 24 7b 6c 69 6e 65 7d 20 31 5d  index ${line} 1]
1b9b0 20 7b 0a 09 09 09 09 2d 67 6c 6f 62 61 6c 20 2d   {.....-global -
1b9c0 0a 09 09 09 09 63 75 72 72 65 6e 74 20 2d 0a 09  .....current -..
1b9d0 09 09 09 72 65 6c 65 61 73 65 20 2d 0a 09 09 09  ...release -....
1b9e0 09 73 74 61 74 75 73 20 7b 0a 09 09 09 09 09 72  .status {......r
1b9f0 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46  eturn [CompleteF
1ba00 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20  romList ${text} 
1ba10 5b 57 69 64 67 65 74 43 68 69 6c 64 72 65 6e 20  [WidgetChildren 
1ba20 24 7b 74 65 78 74 7d 5d 5d 0a 09 09 09 09 7d 0a  ${text}]].....}.
1ba30 09 09 09 09 73 65 74 20 7b 0a 09 09 09 09 09 72  ....set {......r
1ba40 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46  eturn [CompleteF
1ba50 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20  romList ${text} 
1ba60 5c 0a 09 09 09 09 09 5b 63 6f 6e 63 61 74 20 2d  \......[concat -
1ba70 67 6c 6f 62 61 6c 20 5b 57 69 64 67 65 74 43 68  global [WidgetCh
1ba80 69 6c 64 72 65 6e 20 24 7b 74 65 78 74 7d 5d 5d  ildren ${text}]]
1ba90 5d 0a 09 09 09 09 7d 0a 09 09 09 7d 0a 09 09 7d  ].....}....}...}
1baa0 0a 09 09 33 20 7b 0a 09 09 09 73 77 69 74 63 68  ...3 {....switch
1bab0 20 2d 2d 20 5b 4c 69 6e 64 65 78 20 24 7b 6c 69   -- [Lindex ${li
1bac0 6e 65 7d 20 31 5d 20 7b 0a 09 09 09 09 73 65 74  ne} 1] {.....set
1bad0 20 7b 0a 09 09 09 09 09 73 77 69 74 63 68 20 2d   {......switch -
1bae0 2d 20 5b 50 72 65 76 69 6f 75 73 57 6f 72 64 20  - [PreviousWord 
1baf0 24 7b 73 74 61 72 74 7d 20 24 7b 6c 69 6e 65 7d  ${start} ${line}
1bb00 5d 20 7b 0a 09 09 09 09 09 09 2d 67 6c 6f 62 61  ] {.......-globa
1bb10 6c 20 7b 0a 09 09 09 09 09 09 09 72 65 74 75 72  l {........retur
1bb20 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c  n [CompleteFromL
1bb30 69 73 74 20 24 7b 74 65 78 74 7d 20 5c 0a 09 09  ist ${text} \...
1bb40 09 09 09 09 09 5b 57 69 64 67 65 74 43 68 69 6c  .....[WidgetChil
1bb50 64 72 65 6e 20 24 7b 74 65 78 74 7d 5d 5d 0a 09  dren ${text}]]..
1bb60 09 09 09 09 09 7d 0a 09 09 09 09 09 7d 0a 09 09  .....}......}...
1bb70 09 09 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 7d 0a  ..}....}...}..}.
1bb80 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a 0a 70 72  .return "".}..pr
1bb90 6f 63 20 47 72 69 64 43 6f 6e 66 69 67 20 7b 74  oc GridConfig {t
1bba0 65 78 74 20 73 74 61 72 74 20 6c 69 6e 65 20 70  ext start line p
1bbb0 72 65 76 7d 20 7b 0a 09 73 65 74 20 6f 70 74 73  rev} {..set opts
1bbc0 20 7b 0a 09 09 2d 63 6f 6c 75 6d 6e 20 2d 63 6f   {...-column -co
1bbd0 6c 75 6d 6e 73 70 61 6e 20 2d 69 6e 20 2d 69 70  lumnspan -in -ip
1bbe0 61 64 78 20 2d 69 70 61 64 79 0a 09 09 2d 70 61  adx -ipady...-pa
1bbf0 64 78 20 2d 70 61 64 79 20 2d 72 6f 77 20 2d 72  dx -pady -row -r
1bc00 6f 77 73 70 61 6e 20 2d 73 74 69 63 6b 79 0a 09  owspan -sticky..
1bc10 7d 0a 09 69 66 20 7b 2d 31 20 3d 3d 20 5b 73 74  }..if {-1 == [st
1bc20 72 69 6e 67 20 66 69 72 73 74 20 22 2d 22 20 24  ring first "-" $
1bc30 7b 6c 69 6e 65 7d 5d 7d 20 7b 0a 09 09 73 65 74  {line}]} {...set
1bc40 20 73 6c 61 76 65 20 5b 57 69 64 67 65 74 43 68   slave [WidgetCh
1bc50 69 6c 64 72 65 6e 20 24 7b 74 65 78 74 7d 5d 0a  ildren ${text}].
1bc60 09 7d 20 65 6c 73 65 20 7b 0a 09 09 73 65 74 20  .} else {...set 
1bc70 73 6c 61 76 65 20 22 22 0a 09 7d 0a 09 73 77 69  slave ""..}..swi
1bc80 74 63 68 20 2d 2d 20 24 7b 70 72 65 76 7d 20 7b  tch -- ${prev} {
1bc90 0a 09 09 2d 63 6f 6c 75 6d 6e 20 2d 0a 09 09 2d  ...-column -...-
1bca0 63 6f 6c 75 6d 6e 73 70 61 6e 20 2d 0a 09 09 2d  columnspan -...-
1bcb0 72 6f 77 20 2d 0a 09 09 2d 72 6f 77 73 70 61 6e  row -...-rowspan
1bcc0 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
1bcd0 61 79 48 69 6e 74 73 20 3c 6e 3e 5d 20 7d 0a 0a  ayHints <n>] }..
1bce0 09 09 2d 69 70 61 64 78 20 2d 0a 09 09 2d 69 70  ..-ipadx -...-ip
1bcf0 61 64 79 20 2d 0a 09 09 2d 70 61 64 78 20 2d 0a  ady -...-padx -.
1bd00 09 09 2d 70 61 64 79 20 7b 20 72 65 74 75 72 6e  ..-pady { return
1bd10 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c   [DisplayHints <
1bd20 61 6d 6f 75 6e 74 3e 5d 20 7d 0a 0a 09 09 2d 69  amount>] }....-i
1bd30 6e 20 7b 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70  n { return [Comp
1bd40 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74  leteFromList ${t
1bd50 65 78 74 7d 20 5b 57 69 64 67 65 74 43 68 69 6c  ext} [WidgetChil
1bd60 64 72 65 6e 20 24 7b 74 65 78 74 7d 5d 5d 20 7d  dren ${text}]] }
1bd70 0a 09 09 2d 73 74 69 63 6b 79 20 7b 0a 09 09 09  ...-sticky {....
1bd80 73 65 74 20 70 72 65 76 20 5b 50 72 65 76 69 6f  set prev [Previo
1bd90 75 73 57 6f 72 64 4f 66 49 6e 63 6f 6d 70 6c 65  usWordOfIncomple
1bda0 74 65 50 6f 73 69 74 69 6f 6e 20 24 7b 73 74 61  tePosition ${sta
1bdb0 72 74 7d 20 24 7b 6c 69 6e 65 7d 5d 0a 09 09 09  rt} ${line}]....
1bdc0 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65  return [Complete
1bdd0 4c 69 73 74 46 72 6f 6d 4c 69 73 74 20 24 7b 74  ListFromList ${t
1bde0 65 78 74 7d 20 5c 0a 09 09 09 5b 73 74 72 69 6e  ext} \....[strin
1bdf0 67 20 74 72 69 6d 6c 65 66 74 20 5b 49 6e 63 6f  g trimleft [Inco
1be00 6d 70 6c 65 74 65 4c 69 73 74 52 65 6d 61 69 6e  mpleteListRemain
1be10 64 65 72 20 24 7b 6c 69 6e 65 7d 5d 5d 20 5c 0a  der ${line}]] \.
1be20 09 09 09 7b 6e 20 65 20 73 20 77 7d 20 5c 7b 20  ...{n e s w} \{ 
1be30 7b 20 7d 20 5c 7d 5d 0a 09 09 7d 0a 0a 0a 09 09  { } \}]...}.....
1be40 64 65 66 61 75 6c 74 20 7b 0a 09 09 09 72 65 74  default {....ret
1be50 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f  urn [CompleteFro
1be60 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 5c 0a  mList ${text} \.
1be70 09 09 09 5b 52 65 6d 6f 76 65 55 73 65 64 4f 70  ...[RemoveUsedOp
1be80 74 69 6f 6e 73 20 24 7b 6c 69 6e 65 7d 20 5b 63  tions ${line} [c
1be90 6f 6e 63 61 74 20 24 7b 6f 70 74 73 7d 20 24 7b  oncat ${opts} ${
1bea0 73 6c 61 76 65 7d 5d 5d 5d 0a 09 09 7d 0a 09 7d  slave}]]]...}..}
1beb0 0a 7d 0a 20 0a 70 72 6f 63 20 63 6f 6d 70 6c 65  .}. .proc comple
1bec0 74 65 28 67 72 69 64 29 20 7b 74 65 78 74 20 73  te(grid) {text s
1bed0 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f  tart end line po
1bee0 73 20 6d 6f 64 7d 20 7b 0a 09 73 65 74 20 73 75  s mod} {..set su
1bef0 62 20 5b 4c 69 6e 64 65 78 20 24 7b 6c 69 6e 65  b [Lindex ${line
1bf00 7d 20 31 5d 0a 09 73 65 74 20 70 72 65 76 20 5b  } 1]..set prev [
1bf10 50 72 65 76 69 6f 75 73 57 6f 72 64 20 24 7b 73  PreviousWord ${s
1bf20 74 61 72 74 7d 20 24 7b 6c 69 6e 65 7d 5d 0a 09  tart} ${line}]..
1bf30 73 77 69 74 63 68 20 2d 2d 20 24 7b 70 6f 73 7d  switch -- ${pos}
1bf40 20 7b 0a 09 09 31 20 7b 0a 09 09 09 72 65 74 75   {...1 {....retu
1bf50 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d  rn [CompleteFrom
1bf60 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 5c 0a 09  List ${text} \..
1bf70 09 09 5b 63 6f 6e 63 61 74 20 5b 57 69 64 67 65  ..[concat [Widge
1bf80 74 43 68 69 6c 64 72 65 6e 20 24 7b 74 65 78 74  tChildren ${text
1bf90 7d 5d 20 7b 0a 09 09 09 09 62 62 6f 78 20 63 6f  }] {.....bbox co
1bfa0 6c 75 6d 6e 63 6f 6e 66 69 67 75 72 65 20 63 6f  lumnconfigure co
1bfb0 6e 66 69 67 75 72 65 20 66 6f 72 67 65 74 0a 09  nfigure forget..
1bfc0 09 09 09 69 6e 66 6f 20 6c 6f 63 61 74 69 6f 6e  ...info location
1bfd0 20 70 72 6f 70 61 67 61 74 65 20 72 6f 77 63 6f   propagate rowco
1bfe0 6e 66 69 67 75 72 65 0a 09 09 09 09 72 65 6d 6f  nfigure.....remo
1bff0 76 65 20 73 69 7a 65 20 73 6c 61 76 65 73 0a 09  ve size slaves..
1c000 09 09 7d 5d 5d 0a 09 09 7d 0a 09 09 32 20 7b 0a  ..}]]...}...2 {.
1c010 09 09 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 73  ...switch -- ${s
1c020 75 62 7d 20 7b 0a 09 09 09 09 62 62 6f 78 20 2d  ub} {.....bbox -
1c030 0a 09 09 09 09 63 6f 6c 75 6d 6e 63 6f 6e 66 69  .....columnconfi
1c040 67 75 72 65 20 2d 0a 09 09 09 09 63 6f 6e 66 69  gure -.....confi
1c050 67 75 72 65 20 2d 0a 09 09 09 09 66 6f 72 67 65  gure -.....forge
1c060 74 20 2d 0a 09 09 09 09 69 6e 66 6f 20 2d 0a 09  t -.....info -..
1c070 09 09 09 6c 6f 63 61 74 69 6f 6e 20 2d 0a 09 09  ...location -...
1c080 09 09 70 72 6f 70 61 67 61 74 65 20 2d 0a 09 09  ..propagate -...
1c090 09 09 72 6f 77 63 6f 6e 66 69 67 75 72 65 20 2d  ..rowconfigure -
1c0a0 0a 09 09 09 09 72 65 6d 6f 76 65 20 2d 0a 09 09  .....remove -...
1c0b0 09 09 73 69 7a 65 20 2d 0a 09 09 09 09 73 6c 61  ..size -.....sla
1c0c0 76 65 73 20 7b 0a 09 09 09 09 09 72 65 74 75 72  ves {......retur
1c0d0 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c  n [CompleteFromL
1c0e0 69 73 74 20 24 7b 74 65 78 74 7d 20 5b 57 69 64  ist ${text} [Wid
1c0f0 67 65 74 43 68 69 6c 64 72 65 6e 20 24 7b 74 65  getChildren ${te
1c100 78 74 7d 5d 5d 0a 09 09 09 09 7d 0a 09 09 09 09  xt}]].....}.....
1c110 64 65 66 61 75 6c 74 20 7b 0a 09 09 09 09 09 72  default {......r
1c120 65 74 75 72 6e 20 5b 47 72 69 64 43 6f 6e 66 69  eturn [GridConfi
1c130 67 20 24 7b 74 65 78 74 7d 20 24 7b 73 74 61 72  g ${text} ${star
1c140 74 7d 20 24 7b 6c 69 6e 65 7d 20 24 7b 70 72 65  t} ${line} ${pre
1c150 76 7d 5d 0a 09 09 09 09 7d 0a 09 09 09 7d 0a 09  v}].....}....}..
1c160 09 7d 0a 09 09 64 65 66 61 75 6c 74 20 7b 0a 09  .}...default {..
1c170 09 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 73 75  ..switch -- ${su
1c180 62 7d 20 7b 0a 09 09 09 09 62 62 6f 78 20 7b 0a  b} {.....bbox {.
1c190 09 09 09 09 09 73 77 69 74 63 68 20 5b 65 78 70  .....switch [exp
1c1a0 72 20 24 7b 70 6f 73 7d 20 25 20 32 5d 20 7b 0a  r ${pos} % 2] {.
1c1b0 09 09 09 09 09 09 30 20 7b 20 72 65 74 75 72 6e  ......0 { return
1c1c0 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3f   [DisplayHints ?
1c1d0 72 6f 77 3f 5d 20 7d 0a 09 09 09 09 09 09 31 20  row?] }.......1 
1c1e0 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
1c1f0 79 48 69 6e 74 73 20 3f 63 6f 6c 75 6d 6e 3f 5d  yHints ?column?]
1c200 20 7d 0a 09 09 09 09 09 7d 0a 09 09 09 09 7d 0a   }......}.....}.
1c210 09 09 09 09 72 6f 77 63 6f 6e 66 69 67 75 72 65  ....rowconfigure
1c220 20 2d 0a 09 09 09 09 63 6f 6c 75 6d 6e 63 6f 6e   -.....columncon
1c230 66 69 67 75 72 65 20 7b 0a 09 09 09 09 09 73 77  figure {......sw
1c240 69 74 63 68 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b  itch -- ${pos} {
1c250 0a 09 09 09 09 09 09 33 20 7b 20 72 65 74 75 72  .......3 { retur
1c260 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
1c270 3c 69 6e 64 65 78 3e 5d 20 7d 0a 09 09 09 09 09  <index>] }......
1c280 09 64 65 66 61 75 6c 74 20 7b 0a 09 09 09 09 09  .default {......
1c290 09 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 70 72  ..switch -- ${pr
1c2a0 65 76 7d 20 7b 0a 09 09 09 09 09 09 09 09 2d 6d  ev} {.........-m
1c2b0 69 6e 73 69 7a 65 20 7b 20 72 65 74 75 72 6e 20  insize { return 
1c2c0 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 6d  [DisplayHints <m
1c2d0 69 6e 73 69 7a 65 3e 5d 20 7d 0a 09 09 09 09 09  insize>] }......
1c2e0 09 09 09 2d 77 65 69 67 68 74 20 7b 20 72 65 74  ...-weight { ret
1c2f0 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
1c300 73 20 3c 77 65 69 67 68 74 3e 5d 20 7d 0a 09 09  s <weight>] }...
1c310 09 09 09 09 09 09 2d 70 61 64 20 7b 20 72 65 74  ......-pad { ret
1c320 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
1c330 73 20 3c 70 61 64 3e 5d 20 7d 0a 09 09 09 09 09  s <pad>] }......
1c340 09 09 09 64 65 66 61 75 6c 74 20 7b 0a 09 09 09  ...default {....
1c350 09 09 09 09 09 09 72 65 74 75 72 6e 20 5b 43 6f  ......return [Co
1c360 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24  mpleteFromList $
1c370 7b 74 65 78 74 7d 20 5c 0a 09 09 09 09 09 09 09  {text} \........
1c380 09 09 5b 52 65 6d 6f 76 65 55 73 65 64 4f 70 74  ..[RemoveUsedOpt
1c390 69 6f 6e 73 20 24 7b 6c 69 6e 65 7d 20 20 7b 0a  ions ${line}  {.
1c3a0 09 09 09 09 09 09 09 09 09 09 2d 6d 69 6e 73 69  ..........-minsi
1c3b0 7a 65 20 2d 77 65 69 67 68 74 20 2d 70 61 64 0a  ze -weight -pad.
1c3c0 09 09 09 09 09 09 09 09 09 7d 5d 5d 0a 09 09 09  .........}]]....
1c3d0 09 09 09 09 09 7d 0a 09 09 09 09 09 09 09 7d 0a  .....}........}.
1c3e0 09 09 09 09 09 09 7d 0a 09 09 09 09 09 7d 0a 09  ......}......}..
1c3f0 09 09 09 7d 0a 09 09 09 09 63 6f 6e 66 69 67 75  ...}.....configu
1c400 72 65 20 7b 0a 09 09 09 09 09 72 65 74 75 72 6e  re {......return
1c410 20 5b 47 72 69 64 43 6f 6e 66 69 67 20 24 7b 74   [GridConfig ${t
1c420 65 78 74 7d 20 24 7b 73 74 61 72 74 7d 20 24 7b  ext} ${start} ${
1c430 6c 69 6e 65 7d 20 24 7b 70 72 65 76 7d 5d 0a 09  line} ${prev}]..
1c440 09 09 09 7d 0a 09 09 09 09 66 6f 72 67 65 74 20  ...}.....forget 
1c450 2d 0a 09 09 09 09 72 65 6d 6f 76 65 20 7b 0a 09  -.....remove {..
1c460 09 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70  ....return [Comp
1c470 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74  leteFromList ${t
1c480 65 78 74 7d 20 5b 57 69 64 67 65 74 43 68 69 6c  ext} [WidgetChil
1c490 64 72 65 6e 20 24 7b 74 65 78 74 7d 5d 5d 0a 09  dren ${text}]]..
1c4a0 09 09 09 7d 0a 09 09 09 09 69 6e 66 6f 20 7b 7d  ...}.....info {}
1c4b0 0a 09 09 09 09 6c 6f 63 61 74 69 6f 6e 20 7b 0a  .....location {.
1c4c0 09 09 09 09 09 73 77 69 74 63 68 20 2d 2d 20 24  .....switch -- $
1c4d0 7b 70 6f 73 7d 20 7b 0a 09 09 09 09 09 09 33 20  {pos} {.......3 
1c4e0 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
1c4f0 79 48 69 6e 74 73 20 3c 78 3e 5d 20 7d 0a 09 09  yHints <x>] }...
1c500 09 09 09 09 34 20 7b 20 72 65 74 75 72 6e 20 5b  ....4 { return [
1c510 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 79 3e  DisplayHints <y>
1c520 5d 20 7d 0a 09 09 09 09 09 7d 0a 09 09 09 09 7d  ] }......}.....}
1c530 0a 09 09 09 09 70 72 6f 70 61 67 61 74 65 20 7b  .....propagate {
1c540 0a 09 09 09 09 09 73 77 69 74 63 68 20 2d 2d 20  ......switch -- 
1c550 24 7b 70 6f 73 7d 20 7b 0a 09 09 09 09 09 09 33  ${pos} {.......3
1c560 20 7b 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c   { return [Compl
1c570 65 74 65 42 6f 6f 6c 65 61 6e 20 24 7b 74 65 78  eteBoolean ${tex
1c580 74 7d 5d 20 7d 0a 09 09 09 09 09 7d 0a 09 09 09  t}] }......}....
1c590 09 7d 0a 09 09 09 09 73 69 7a 65 20 7b 7d 0a 09  .}.....size {}..
1c5a0 09 09 09 73 6c 61 76 65 73 20 7b 0a 09 09 09 09  ...slaves {.....
1c5b0 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 70 72 65  .switch -- ${pre
1c5c0 76 7d 20 7b 0a 09 09 09 09 09 09 2d 72 6f 77 20  v} {.......-row 
1c5d0 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
1c5e0 79 48 69 6e 74 73 20 3c 72 6f 77 3e 5d 20 7d 0a  yHints <row>] }.
1c5f0 09 09 09 09 09 09 2d 63 6f 6c 75 6d 6e 20 7b 20  ......-column { 
1c600 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
1c610 69 6e 74 73 20 3c 63 6f 6c 75 6d 6e 3e 5d 20 7d  ints <column>] }
1c620 0a 09 09 09 09 09 09 64 65 66 61 75 6c 74 20 7b  .......default {
1c630 0a 09 09 09 09 09 09 09 72 65 74 75 72 6e 20 5b  ........return [
1c640 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74  CompleteFromList
1c650 20 24 7b 74 65 78 74 7d 20 5c 0a 09 09 09 09 09   ${text} \......
1c660 09 09 5b 52 65 6d 6f 76 65 55 73 65 64 4f 70 74  ..[RemoveUsedOpt
1c670 69 6f 6e 73 20 24 7b 6c 69 6e 65 7d 20 20 7b 20  ions ${line}  { 
1c680 2d 72 6f 77 20 2d 63 6f 6c 75 6d 6e 20 7d 5d 5d  -row -column }]]
1c690 0a 09 09 09 09 09 09 7d 0a 09 09 09 09 09 7d 0a  .......}......}.
1c6a0 09 09 09 09 7d 0a 09 09 09 09 64 65 66 61 75 6c  ....}.....defaul
1c6b0 74 20 7b 0a 09 09 09 09 09 72 65 74 75 72 6e 20  t {......return 
1c6c0 5b 47 72 69 64 43 6f 6e 66 69 67 20 24 7b 74 65  [GridConfig ${te
1c6d0 78 74 7d 20 24 7b 73 74 61 72 74 7d 20 24 7b 6c  xt} ${start} ${l
1c6e0 69 6e 65 7d 20 24 7b 70 72 65 76 7d 5d 0a 09 09  ine} ${prev}]...
1c6f0 09 09 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 7d 0a  ..}....}...}..}.
1c700 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a 0a 70 72  .return "".}..pr
1c710 6f 63 20 63 6f 6d 70 6c 65 74 65 28 69 6d 61 67  oc complete(imag
1c720 65 29 20 7b 74 65 78 74 20 73 74 61 72 74 20 65  e) {text start e
1c730 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d  nd line pos mod}
1c740 20 7b 0a 73 65 74 20 73 75 62 20 5b 4c 69 6e 64   {.set sub [Lind
1c750 65 78 20 24 7b 6c 69 6e 65 7d 20 31 5d 0a 09 73  ex ${line} 1]..s
1c760 77 69 74 63 68 20 2d 2d 20 24 7b 70 6f 73 7d 20  witch -- ${pos} 
1c770 7b 0a 09 09 31 20 7b 20 72 65 74 75 72 6e 20 5b  {...1 { return [
1c780 54 72 79 53 75 62 43 6d 64 73 20 24 7b 74 65 78  TrySubCmds ${tex
1c790 74 7d 20 69 6d 61 67 65 5d 20 7d 0a 09 09 32 20  t} image] }...2 
1c7a0 7b 0a 09 09 09 73 77 69 74 63 68 20 2d 2d 20 24  {....switch -- $
1c7b0 7b 73 75 62 7d 20 7b 0a 09 09 09 09 63 72 65 61  {sub} {.....crea
1c7c0 74 65 20 7b 20 72 65 74 75 72 6e 20 5b 43 6f 6d  te { return [Com
1c7d0 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b  pleteFromList ${
1c7e0 74 65 78 74 7d 20 5b 69 6d 61 67 65 20 74 79 70  text} [image typ
1c7f0 65 73 5d 5d 20 7d 0a 09 09 09 09 64 65 6c 65 74  es]] }.....delet
1c800 65 20 2d 0a 09 09 09 09 68 65 69 67 68 74 20 2d  e -.....height -
1c810 0a 09 09 09 09 74 79 70 65 20 2d 0a 09 09 09 09  .....type -.....
1c820 77 69 64 74 68 20 7b 20 72 65 74 75 72 6e 20 5b  width { return [
1c830 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74  CompleteFromList
1c840 20 24 7b 74 65 78 74 7d 20 5b 69 6d 61 67 65 20   ${text} [image 
1c850 6e 61 6d 65 73 5d 5d 20 7d 0a 09 09 09 09 6e 61  names]] }.....na
1c860 6d 65 73 20 7b 7d 0a 09 09 09 09 74 79 70 65 73  mes {}.....types
1c870 20 7b 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 09 33   {}....}...}...3
1c880 20 7b 0a 09 09 09 73 77 69 74 63 68 20 2d 2d 20   {....switch -- 
1c890 24 7b 73 75 62 7d 20 7b 0a 09 09 09 09 63 72 65  ${sub} {.....cre
1c8a0 61 74 65 20 7b 0a 09 09 09 09 09 73 65 74 20 74  ate {......set t
1c8b0 79 70 65 20 5b 4c 69 6e 64 65 78 20 24 7b 6c 69  ype [Lindex ${li
1c8c0 6e 65 7d 20 32 5d 0a 09 09 09 09 09 73 77 69 74  ne} 2]......swit
1c8d0 63 68 20 2d 2d 20 24 7b 74 79 70 65 7d 20 7b 0a  ch -- ${type} {.
1c8e0 09 09 09 09 09 09 62 69 74 6d 61 70 20 7b 0a 09  ......bitmap {..
1c8f0 09 09 09 09 09 09 72 65 74 75 72 6e 20 5b 43 6f  ......return [Co
1c900 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24  mpleteFromList $
1c910 7b 74 65 78 74 7d 20 7b 0a 09 09 09 09 09 09 09  {text} {........
1c920 09 3f 6e 61 6d 65 3f 20 2d 62 61 63 6b 67 72 6f  .?name? -backgro
1c930 75 6e 64 20 2d 64 61 74 61 20 2d 66 69 6c 65 0a  und -data -file.
1c940 09 09 09 09 09 09 09 09 2d 66 6f 72 65 67 72 6f  ........-foregro
1c950 75 6e 64 20 2d 6d 61 73 6b 64 61 74 61 20 2d 6d  und -maskdata -m
1c960 61 73 6b 66 69 6c 65 0a 09 09 09 09 09 09 09 7d  askfile........}
1c970 5d 0a 09 09 09 09 09 09 7d 0a 09 09 09 09 09 09  ].......}.......
1c980 70 68 6f 74 6f 20 7b 0a 09 09 09 09 09 09 09 72  photo {........r
1c990 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46  eturn [CompleteF
1c9a0 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20  romList ${text} 
1c9b0 7b 0a 09 09 09 09 09 09 09 09 3f 6e 61 6d 65 3f  {.........?name?
1c9c0 20 2d 64 61 74 61 20 2d 66 6f 72 6d 61 74 20 2d   -data -format -
1c9d0 66 69 6c 65 20 2d 67 61 6d 6d 61 0a 09 09 09 09  file -gamma.....
1c9e0 09 09 09 09 2d 68 65 69 67 68 74 20 2d 70 61 6c  ....-height -pal
1c9f0 65 74 74 65 20 2d 77 69 64 74 68 0a 09 09 09 09  ette -width.....
1ca00 09 09 09 7d 5d 0a 09 09 09 09 09 09 7d 0a 09 09  ...}].......}...
1ca10 09 09 09 09 64 65 66 61 75 6c 74 20 7b 7d 0a 09  ....default {}..
1ca20 09 09 09 09 7d 0a 09 09 09 09 7d 0a 09 09 09 09  ....}.....}.....
1ca30 64 65 6c 65 74 65 20 7b 20 72 65 74 75 72 6e 20  delete { return 
1ca40 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73  [CompleteFromLis
1ca50 74 20 24 7b 74 65 78 74 7d 20 5b 69 6d 61 67 65  t ${text} [image
1ca60 20 6e 61 6d 65 73 5d 5d 20 7d 0a 09 09 09 09 64   names]] }.....d
1ca70 65 66 61 75 6c 74 20 7b 7d 0a 09 09 09 7d 0a 09  efault {}....}..
1ca80 09 7d 0a 09 09 64 65 66 61 75 6c 74 20 7b 0a 09  .}...default {..
1ca90 09 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 73 75  ..switch -- ${su
1caa0 62 7d 20 7b 0a 09 09 09 09 63 72 65 61 74 65 20  b} {.....create 
1cab0 7b 0a 09 09 09 09 09 73 65 74 20 74 79 70 65 20  {......set type 
1cac0 5b 4c 69 6e 64 65 78 20 24 7b 6c 69 6e 65 7d 20  [Lindex ${line} 
1cad0 32 5d 0a 09 09 09 09 09 73 65 74 20 70 72 65 76  2]......set prev
1cae0 20 5b 50 72 65 76 69 6f 75 73 57 6f 72 64 20 24   [PreviousWord $
1caf0 7b 73 74 61 72 74 7d 20 24 7b 6c 69 6e 65 7d 5d  {start} ${line}]
1cb00 0a 09 09 09 09 09 23 20 70 75 74 73 20 73 74 64  ......# puts std
1cb10 65 72 72 20 70 72 65 76 3d 24 70 72 65 76 0a 09  err prev=$prev..
1cb20 09 09 09 09 73 77 69 74 63 68 20 2d 2d 20 24 7b  ....switch -- ${
1cb30 74 79 70 65 7d 20 7b 0a 09 09 09 09 09 09 62 69  type} {.......bi
1cb40 74 6d 61 70 20 7b 0a 09 09 09 09 09 09 09 73 77  tmap {........sw
1cb50 69 74 63 68 20 2d 2d 20 24 7b 70 72 65 76 7d 20  itch -- ${prev} 
1cb60 7b 0a 09 09 09 09 09 09 09 09 2d 62 61 63 6b 67  {.........-backg
1cb70 72 6f 75 6e 64 20 2d 0a 09 09 09 09 09 09 09 09  round -.........
1cb80 2d 66 6f 72 65 67 72 6f 75 6e 64 20 7b 20 72 65  -foreground { re
1cb90 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
1cba0 74 73 20 3c 63 6f 6c 6f 72 3e 5d 20 7d 0a 09 09  ts <color>] }...
1cbb0 09 09 09 09 09 09 2d 64 61 74 61 20 2d 0a 09 09  ......-data -...
1cbc0 09 09 09 09 09 09 2d 6d 61 73 6b 64 61 74 61 20  ......-maskdata 
1cbd0 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
1cbe0 79 48 69 6e 74 73 20 3c 73 74 72 69 6e 67 3e 5d  yHints <string>]
1cbf0 20 7d 0a 09 09 09 09 09 09 09 09 2d 66 69 6c 65   }.........-file
1cc00 20 2d 0a 09 09 09 09 09 09 09 09 2d 6d 61 73 6b   -.........-mask
1cc10 66 69 6c 65 20 7b 20 72 65 74 75 72 6e 20 22 22  file { return ""
1cc20 20 7d 0a 09 09 09 09 09 09 09 09 64 65 66 61 75   }.........defau
1cc30 6c 74 20 7b 0a 09 09 09 09 09 09 09 09 09 72 65  lt {..........re
1cc40 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72  turn [CompleteFr
1cc50 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 5c  omList ${text} \
1cc60 0a 09 09 09 09 09 09 09 09 09 5b 52 65 6d 6f 76  ..........[Remov
1cc70 65 55 73 65 64 4f 70 74 69 6f 6e 73 20 24 7b 6c  eUsedOptions ${l
1cc80 69 6e 65 7d 20 7b 0a 09 09 09 09 09 09 09 09 09  ine} {..........
1cc90 09 2d 62 61 63 6b 67 72 6f 75 6e 64 20 2d 64 61  .-background -da
1cca0 74 61 20 2d 66 69 6c 65 0a 09 09 09 09 09 09 09  ta -file........
1ccb0 09 09 09 2d 66 6f 72 65 67 72 6f 75 6e 64 20 2d  ...-foreground -
1ccc0 6d 61 73 6b 64 61 74 61 20 2d 6d 61 73 6b 66 69  maskdata -maskfi
1ccd0 6c 65 0a 09 09 09 09 09 09 09 09 09 7d 5d 5d 0a  le..........}]].
1cce0 09 09 09 09 09 09 09 09 7d 0a 09 09 09 09 09 09  ........}.......
1ccf0 09 7d 0a 09 09 09 09 09 09 7d 0a 09 09 09 09 09  .}.......}......
1cd00 09 70 68 6f 74 6f 20 7b 0a 09 09 09 09 09 09 09  .photo {........
1cd10 73 77 69 74 63 68 20 2d 2d 20 24 7b 70 72 65 76  switch -- ${prev
1cd20 7d 20 7b 0a 09 09 09 09 09 09 09 09 2d 64 61 74  } {.........-dat
1cd30 61 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70  a { return [Disp
1cd40 6c 61 79 48 69 6e 74 73 20 3c 73 74 72 69 6e 67  layHints <string
1cd50 3e 5d 20 7d 0a 09 09 09 09 09 09 09 09 2d 66 69  >] }.........-fi
1cd60 6c 65 20 7b 20 72 65 74 75 72 6e 20 22 22 20 7d  le { return "" }
1cd70 0a 09 09 09 09 09 09 09 09 2d 66 6f 72 6d 61 74  .........-format
1cd80 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
1cd90 61 79 48 69 6e 74 73 20 3c 66 6f 72 6d 61 74 2d  ayHints <format-
1cda0 6e 61 6d 65 3e 5d 20 7d 0a 09 09 09 09 09 09 09  name>] }........
1cdb0 09 2d 67 61 6d 6d 61 20 7b 20 72 65 74 75 72 6e  .-gamma { return
1cdc0 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c   [DisplayHints <
1cdd0 76 61 6c 75 65 3e 5d 20 7d 0a 09 09 09 09 09 09  value>] }.......
1cde0 09 09 2d 68 65 69 67 68 74 20 2d 0a 09 09 09 09  ..-height -.....
1cdf0 09 09 09 09 2d 77 69 64 74 68 20 7b 20 72 65 74  ....-width { ret
1ce00 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
1ce10 73 20 3c 6e 75 6d 62 65 72 3e 5d 20 7d 0a 09 09  s <number>] }...
1ce20 09 09 09 09 09 09 2d 70 61 6c 65 74 74 65 20 7b  ......-palette {
1ce30 0a 09 09 09 09 09 09 09 09 09 72 65 74 75 72 6e  ..........return
1ce40 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c   [DisplayHints <
1ce50 70 61 6c 65 74 74 65 2d 73 70 65 63 3e 5d 0a 09  palette-spec>]..
1ce60 09 09 09 09 09 09 09 7d 0a 09 09 09 09 09 09 09  .......}........
1ce70 09 64 65 66 61 75 6c 74 20 7b 0a 09 09 09 09 09  .default {......
1ce80 09 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70  ....return [Comp
1ce90 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74  leteFromList ${t
1cea0 65 78 74 7d 20 5c 0a 09 09 09 09 09 09 09 09 09  ext} \..........
1ceb0 5b 52 65 6d 6f 76 65 55 73 65 64 4f 70 74 69 6f  [RemoveUsedOptio
1cec0 6e 73 20 24 7b 6c 69 6e 65 7d 20 7b 0a 09 09 09  ns ${line} {....
1ced0 09 09 09 09 09 09 09 2d 64 61 74 61 20 2d 66 6f  .......-data -fo
1cee0 72 6d 61 74 20 2d 66 69 6c 65 20 2d 67 61 6d 6d  rmat -file -gamm
1cef0 61 0a 09 09 09 09 09 09 09 09 09 09 2d 68 65 69  a...........-hei
1cf00 67 68 74 20 2d 70 61 6c 65 74 74 65 20 2d 77 69  ght -palette -wi
1cf10 64 74 68 0a 09 09 09 09 09 09 09 09 09 7d 5d 5d  dth..........}]]
1cf20 0a 09 09 09 09 09 09 09 09 7d 0a 09 09 09 09 09  .........}......
1cf30 09 09 7d 0a 09 09 09 09 09 09 7d 0a 09 09 09 09  ..}.......}.....
1cf40 09 7d 0a 09 09 09 09 7d 0a 09 09 09 09 64 65 6c  .}.....}.....del
1cf50 65 74 65 20 7b 20 72 65 74 75 72 6e 20 5b 43 6f  ete { return [Co
1cf60 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24  mpleteFromList $
1cf70 7b 74 65 78 74 7d 20 5b 69 6d 61 67 65 20 6e 61  {text} [image na
1cf80 6d 65 73 5d 5d 20 7d 0a 09 09 09 09 64 65 66 61  mes]] }.....defa
1cf90 75 6c 74 20 7b 7d 0a 09 09 09 7d 0a 09 09 7d 0a  ult {}....}...}.
1cfa0 09 7d 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c  .}.}..proc compl
1cfb0 65 74 65 28 6c 61 62 65 6c 29 20 7b 74 65 78 74  ete(label) {text
1cfc0 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20   start end line 
1cfd0 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73 77 69 74  pos mod} {..swit
1cfe0 63 68 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09  ch -- ${pos} {..
1cff0 09 31 20 7b 20 72 65 74 75 72 6e 20 5b 45 76 65  .1 { return [Eve
1d000 6e 74 75 61 6c 6c 79 49 6e 73 65 72 74 4c 65 61  ntuallyInsertLea
1d010 64 69 6e 67 44 6f 74 20 24 7b 74 65 78 74 7d 20  dingDot ${text} 
1d020 3c 70 61 74 68 4e 61 6d 65 3e 5d 20 7d 0a 09 09  <pathName>] }...
1d030 64 65 66 61 75 6c 74 20 7b 0a 09 09 09 72 65 74  default {....ret
1d040 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 57 69 64  urn [CompleteWid
1d050 67 65 74 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e  getConfiguration
1d060 73 20 24 7b 74 65 78 74 7d 20 24 7b 73 74 61 72  s ${text} ${star
1d070 74 7d 20 24 7b 6c 69 6e 65 7d 20 7b 0a 09 09 09  t} ${line} {....
1d080 09 2d 61 6e 63 68 6f 72 20 2d 62 61 63 6b 67 72  .-anchor -backgr
1d090 6f 75 6e 64 20 2d 62 69 74 6d 61 70 20 2d 62 6f  ound -bitmap -bo
1d0a0 72 64 65 72 77 69 64 74 68 20 2d 63 75 72 73 6f  rderwidth -curso
1d0b0 72 20 2d 66 6f 6e 74 0a 09 09 09 09 2d 66 6f 72  r -font.....-for
1d0c0 65 67 72 6f 75 6e 64 20 2d 68 69 67 68 6c 69 67  eground -highlig
1d0d0 68 74 62 61 63 6b 67 72 6f 75 6e 64 20 2d 68 69  htbackground -hi
1d0e0 67 68 6c 69 67 68 74 63 6f 6c 6f 72 0a 09 09 09  ghlightcolor....
1d0f0 09 2d 68 69 67 68 6c 69 67 68 74 74 68 69 63 6b  .-highlightthick
1d100 6e 65 73 73 20 2d 69 6d 61 67 65 20 2d 6a 75 73  ness -image -jus
1d110 74 69 66 79 20 2d 70 61 64 78 20 2d 70 61 64 79  tify -padx -pady
1d120 20 2d 72 65 6c 69 65 66 0a 09 09 09 09 2d 74 61   -relief.....-ta
1d130 6b 65 66 6f 63 75 73 20 2d 74 65 78 74 20 2d 74  kefocus -text -t
1d140 65 78 74 76 61 72 69 61 62 6c 65 20 2d 75 6e 64  extvariable -und
1d150 65 72 6c 69 6e 65 20 2d 77 72 61 70 6c 65 6e 67  erline -wrapleng
1d160 74 68 0a 09 09 09 09 2d 68 65 69 67 68 74 20 2d  th.....-height -
1d170 77 69 64 74 68 0a 09 09 09 7d 5d 0a 09 09 7d 0a  width....}]...}.
1d180 09 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a  .}..return "".}.
1d190 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 6c  .proc complete(l
1d1a0 69 73 74 62 6f 78 29 20 7b 74 65 78 74 20 73 74  istbox) {text st
1d1b0 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73  art end line pos
1d1c0 20 6d 6f 64 7d 20 7b 0a 09 73 77 69 74 63 68 20   mod} {..switch 
1d1d0 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09 09 31 20  -- ${pos} {...1 
1d1e0 7b 20 72 65 74 75 72 6e 20 5b 45 76 65 6e 74 75  { return [Eventu
1d1f0 61 6c 6c 79 49 6e 73 65 72 74 4c 65 61 64 69 6e  allyInsertLeadin
1d200 67 44 6f 74 20 24 7b 74 65 78 74 7d 20 3c 70 61  gDot ${text} <pa
1d210 74 68 4e 61 6d 65 3e 5d 20 7d 0a 09 09 64 65 66  thName>] }...def
1d220 61 75 6c 74 20 7b 0a 09 09 09 72 65 74 75 72 6e  ault {....return
1d230 20 5b 43 6f 6d 70 6c 65 74 65 57 69 64 67 65 74   [CompleteWidget
1d240 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 20 24  Configurations $
1d250 7b 74 65 78 74 7d 20 24 7b 73 74 61 72 74 7d 20  {text} ${start} 
1d260 24 7b 6c 69 6e 65 7d 20 7b 0a 09 09 09 09 2d 62  ${line} {.....-b
1d270 61 63 6b 67 72 6f 75 6e 64 20 2d 62 6f 72 64 65  ackground -borde
1d280 72 77 69 64 74 68 20 2d 63 75 72 73 6f 72 20 2d  rwidth -cursor -
1d290 65 78 70 6f 72 74 73 65 6c 65 63 74 69 6f 6e 20  exportselection 
1d2a0 2d 66 6f 6e 74 0a 09 09 09 09 2d 66 6f 72 65 67  -font.....-foreg
1d2b0 72 6f 75 6e 64 20 2d 68 65 69 67 68 74 20 2d 68  round -height -h
1d2c0 69 67 68 6c 69 67 68 74 62 61 63 6b 67 72 6f 75  ighlightbackgrou
1d2d0 6e 64 20 2d 68 69 67 68 6c 69 67 68 74 63 6f 6c  nd -highlightcol
1d2e0 6f 72 0a 09 09 09 09 2d 68 69 67 68 6c 69 67 68  or.....-highligh
1d2f0 74 74 68 69 63 6b 6e 65 73 73 20 2d 72 65 6c 69  tthickness -reli
1d300 65 66 20 2d 73 65 6c 65 63 74 62 61 63 6b 67 72  ef -selectbackgr
1d310 6f 75 6e 64 0a 09 09 09 09 2d 73 65 6c 65 63 74  ound.....-select
1d320 62 6f 72 64 65 72 77 69 64 74 68 20 2d 73 65 6c  borderwidth -sel
1d330 65 63 74 66 6f 72 65 67 72 6f 75 6e 64 20 2d 73  ectforeground -s
1d340 65 74 67 72 69 64 20 2d 74 61 6b 65 66 6f 63 75  etgrid -takefocu
1d350 73 0a 09 09 09 09 2d 77 69 64 74 68 20 2d 78 73  s.....-width -xs
1d360 63 72 6f 6c 6c 63 6f 6d 6d 61 6e 64 20 2d 79 73  crollcommand -ys
1d370 63 72 6f 6c 6c 63 6f 6d 6d 61 6e 64 20 2d 68 65  crollcommand -he
1d380 69 67 68 74 20 2d 73 65 6c 65 63 74 6d 6f 64 65  ight -selectmode
1d390 0a 09 09 09 09 2d 77 69 64 74 68 0a 09 09 09 7d  .....-width....}
1d3a0 5d 0a 09 09 7d 0a 09 7d 0a 09 72 65 74 75 72 6e  ]...}..}..return
1d3b0 20 22 22 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70   "".}..proc comp
1d3c0 6c 65 74 65 28 6c 6f 77 65 72 29 20 7b 74 65 78  lete(lower) {tex
1d3d0 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65  t start end line
1d3e0 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73 77 69   pos mod} {..swi
1d3f0 74 63 68 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a  tch -- ${pos} {.
1d400 09 09 31 20 2d 0a 09 09 32 20 7b 0a 09 09 09 72  ..1 -...2 {....r
1d410 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46  eturn [CompleteF
1d420 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20  romList ${text} 
1d430 5b 57 69 64 67 65 74 43 68 69 6c 64 72 65 6e 20  [WidgetChildren 
1d440 24 7b 74 65 78 74 7d 5d 5d 0a 09 09 7d 0a 09 7d  ${text}]]...}..}
1d450 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74  .}..proc complet
1d460 65 28 6d 65 6e 75 29 20 7b 74 65 78 74 20 73 74  e(menu) {text st
1d470 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73  art end line pos
1d480 20 6d 6f 64 7d 20 7b 0a 09 73 77 69 74 63 68 20   mod} {..switch 
1d490 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09 09 31 20  -- ${pos} {...1 
1d4a0 7b 20 72 65 74 75 72 6e 20 5b 45 76 65 6e 74 75  { return [Eventu
1d4b0 61 6c 6c 79 49 6e 73 65 72 74 4c 65 61 64 69 6e  allyInsertLeadin
1d4c0 67 44 6f 74 20 24 7b 74 65 78 74 7d 20 3c 70 61  gDot ${text} <pa
1d4d0 74 68 4e 61 6d 65 3e 5d 20 7d 0a 09 09 64 65 66  thName>] }...def
1d4e0 61 75 6c 74 20 7b 0a 09 09 09 72 65 74 75 72 6e  ault {....return
1d4f0 20 5b 43 6f 6d 70 6c 65 74 65 57 69 64 67 65 74   [CompleteWidget
1d500 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 20 24  Configurations $
1d510 7b 74 65 78 74 7d 20 24 7b 73 74 61 72 74 7d 20  {text} ${start} 
1d520 24 7b 6c 69 6e 65 7d 20 7b 0a 09 09 09 09 2d 61  ${line} {.....-a
1d530 63 74 69 76 65 62 61 63 6b 67 72 6f 75 6e 64 20  ctivebackground 
1d540 2d 61 63 74 69 76 65 62 6f 72 64 65 72 77 69 64  -activeborderwid
1d550 74 68 20 2d 61 63 74 69 76 65 66 6f 72 65 67 72  th -activeforegr
1d560 6f 75 6e 64 0a 09 09 09 09 2d 62 61 63 6b 67 72  ound.....-backgr
1d570 6f 75 6e 64 20 2d 62 6f 72 64 65 72 77 69 64 74  ound -borderwidt
1d580 68 20 2d 63 75 72 73 6f 72 20 2d 64 69 73 61 62  h -cursor -disab
1d590 6c 65 64 66 6f 72 65 67 72 6f 75 6e 64 0a 09 09  ledforeground...
1d5a0 09 09 2d 66 6f 6e 74 20 2d 66 6f 72 65 67 72 6f  ..-font -foregro
1d5b0 75 6e 64 20 2d 72 65 6c 69 65 66 20 2d 74 61 6b  und -relief -tak
1d5c0 65 66 6f 63 75 73 20 2d 70 6f 73 74 63 6f 6d 6d  efocus -postcomm
1d5d0 61 6e 64 0a 09 09 09 09 2d 73 65 6c 65 63 74 63  and.....-selectc
1d5e0 6f 6c 6f 72 20 2d 74 65 61 72 6f 66 66 20 2d 74  olor -tearoff -t
1d5f0 65 61 72 6f 66 66 63 6f 6d 6d 61 6e 64 20 2d 74  earoffcommand -t
1d600 69 74 6c 65 20 2d 74 79 70 65 0a 09 09 09 7d 5d  itle -type....}]
1d610 0a 09 09 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20  ...}..}..return 
1d620 22 22 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c  "".}..proc compl
1d630 65 74 65 28 6d 65 6e 75 62 75 74 74 6f 6e 29 20  ete(menubutton) 
1d640 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20  {text start end 
1d650 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a  line pos mod} {.
1d660 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 70 6f 73  .switch -- ${pos
1d670 7d 20 7b 0a 09 09 31 20 7b 20 72 65 74 75 72 6e  } {...1 { return
1d680 20 5b 45 76 65 6e 74 75 61 6c 6c 79 49 6e 73 65   [EventuallyInse
1d690 72 74 4c 65 61 64 69 6e 67 44 6f 74 20 24 7b 74  rtLeadingDot ${t
1d6a0 65 78 74 7d 20 3c 70 61 74 68 4e 61 6d 65 3e 5d  ext} <pathName>]
1d6b0 20 7d 0a 09 09 64 65 66 61 75 6c 74 20 7b 0a 09   }...default {..
1d6c0 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65  ..return [Comple
1d6d0 74 65 57 69 64 67 65 74 43 6f 6e 66 69 67 75 72  teWidgetConfigur
1d6e0 61 74 69 6f 6e 73 20 24 7b 74 65 78 74 7d 20 24  ations ${text} $
1d6f0 7b 73 74 61 72 74 7d 20 24 7b 6c 69 6e 65 7d 20  {start} ${line} 
1d700 7b 0a 09 09 09 09 2d 61 63 74 69 76 65 62 61 63  {.....-activebac
1d710 6b 67 72 6f 75 6e 64 20 2d 61 63 74 69 76 65 66  kground -activef
1d720 6f 72 65 67 72 6f 75 6e 64 20 2d 61 6e 63 68 6f  oreground -ancho
1d730 72 20 2d 62 61 63 6b 67 72 6f 75 6e 64 0a 09 09  r -background...
1d740 09 09 2d 62 69 74 6d 61 70 20 2d 62 6f 72 64 65  ..-bitmap -borde
1d750 72 77 69 64 74 68 20 2d 63 75 72 73 6f 72 20 2d  rwidth -cursor -
1d760 64 69 73 61 62 6c 65 64 66 6f 72 65 67 72 6f 75  disabledforegrou
1d770 6e 64 20 2d 66 6f 6e 74 0a 09 09 09 09 2d 66 6f  nd -font.....-fo
1d780 72 65 67 72 6f 75 6e 64 20 2d 68 69 67 68 6c 69  reground -highli
1d790 67 68 74 62 61 63 6b 67 72 6f 75 6e 64 20 2d 68  ghtbackground -h
1d7a0 69 67 68 6c 69 67 68 74 63 6f 6c 6f 72 0a 09 09  ighlightcolor...
1d7b0 09 09 2d 68 69 67 68 6c 69 67 68 74 74 68 69 63  ..-highlightthic
1d7c0 6b 6e 65 73 73 20 2d 69 6d 61 67 65 20 2d 6a 75  kness -image -ju
1d7d0 73 74 69 66 79 20 2d 70 61 64 78 20 2d 70 61 64  stify -padx -pad
1d7e0 79 20 2d 72 65 6c 69 65 66 0a 09 09 09 09 2d 74  y -relief.....-t
1d7f0 61 6b 65 66 6f 63 75 73 20 2d 74 65 78 74 20 2d  akefocus -text -
1d800 74 65 78 74 76 61 72 69 61 62 6c 65 20 2d 75 6e  textvariable -un
1d810 64 65 72 6c 69 6e 65 20 2d 77 72 61 70 6c 65 6e  derline -wraplen
1d820 67 74 68 0a 09 09 09 09 2d 64 69 72 65 63 74 69  gth.....-directi
1d830 6f 6e 20 2d 68 65 69 67 68 74 20 2d 69 6e 64 69  on -height -indi
1d840 63 61 74 6f 72 6f 6e 20 2d 6d 65 6e 75 20 2d 73  catoron -menu -s
1d850 74 61 74 65 20 2d 77 69 64 74 68 0a 09 09 09 7d  tate -width....}
1d860 5d 0a 09 09 7d 0a 09 7d 0a 09 72 65 74 75 72 6e  ]...}..}..return
1d870 20 22 22 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70   "".}..proc comp
1d880 6c 65 74 65 28 6d 65 73 73 61 67 65 29 20 7b 74  lete(message) {t
1d890 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69  ext start end li
1d8a0 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73  ne pos mod} {..s
1d8b0 77 69 74 63 68 20 2d 2d 20 24 7b 70 6f 73 7d 20  witch -- ${pos} 
1d8c0 7b 0a 09 09 31 20 7b 20 72 65 74 75 72 6e 20 5b  {...1 { return [
1d8d0 45 76 65 6e 74 75 61 6c 6c 79 49 6e 73 65 72 74  EventuallyInsert
1d8e0 4c 65 61 64 69 6e 67 44 6f 74 20 24 7b 74 65 78  LeadingDot ${tex
1d8f0 74 7d 20 3c 70 61 74 68 4e 61 6d 65 3e 5d 20 7d  t} <pathName>] }
1d900 0a 09 09 64 65 66 61 75 6c 74 20 7b 0a 09 09 09  ...default {....
1d910 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65  return [Complete
1d920 57 69 64 67 65 74 43 6f 6e 66 69 67 75 72 61 74  WidgetConfigurat
1d930 69 6f 6e 73 20 24 7b 74 65 78 74 7d 20 24 7b 73  ions ${text} ${s
1d940 74 61 72 74 7d 20 24 7b 6c 69 6e 65 7d 20 7b 0a  tart} ${line} {.
1d950 09 09 09 09 2d 61 6e 63 68 6f 72 20 2d 62 61 63  ....-anchor -bac
1d960 6b 67 72 6f 75 6e 64 20 2d 62 6f 72 64 65 72 77  kground -borderw
1d970 69 64 74 68 20 2d 63 75 72 73 6f 72 20 2d 66 6f  idth -cursor -fo
1d980 6e 74 20 2d 66 6f 72 65 67 72 6f 75 6e 64 0a 09  nt -foreground..
1d990 09 09 09 2d 68 69 67 68 6c 69 67 68 74 62 61 63  ...-highlightbac
1d9a0 6b 67 72 6f 75 6e 64 20 2d 68 69 67 68 6c 69 67  kground -highlig
1d9b0 68 74 63 6f 6c 6f 72 20 2d 68 69 67 68 6c 69 67  htcolor -highlig
1d9c0 68 74 74 68 69 63 6b 6e 65 73 73 0a 09 09 09 09  htthickness.....
1d9d0 2d 70 61 64 78 20 2d 70 61 64 79 20 2d 72 65 6c  -padx -pady -rel
1d9e0 69 65 66 20 2d 74 61 6b 65 66 6f 63 75 73 20 2d  ief -takefocus -
1d9f0 74 65 78 74 20 2d 74 65 78 74 76 61 72 69 61 62  text -textvariab
1da00 6c 65 20 2d 77 69 64 74 68 20 0a 09 09 09 09 2d  le -width .....-
1da10 61 73 70 65 63 74 20 2d 6a 75 73 74 69 66 79 20  aspect -justify 
1da20 2d 77 69 64 74 68 0a 09 09 09 7d 5d 0a 09 09 7d  -width....}]...}
1da30 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d  ..}..return "".}
1da40 0a 0a 70 72 6f 63 20 4f 70 74 69 6f 6e 50 72 69  ..proc OptionPri
1da50 6f 72 69 74 79 20 74 65 78 74 20 7b 0a 09 72 65  ority text {..re
1da60 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72  turn [CompleteFr
1da70 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 7b  omList ${text} {
1da80 0a 09 09 77 69 64 67 65 74 44 65 66 61 75 6c 74  ...widgetDefault
1da90 20 73 74 61 72 74 75 70 46 69 6c 65 20 75 73 65   startupFile use
1daa0 72 44 65 66 61 75 6c 74 20 69 6e 74 65 72 61 63  rDefault interac
1dab0 74 69 76 65 0a 09 7d 5d 0a 7d 0a 0a 70 72 6f 63  tive..}].}..proc
1dac0 20 63 6f 6d 70 6c 65 74 65 28 6f 70 74 69 6f 6e   complete(option
1dad0 29 20 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e  ) {text start en
1dae0 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20  d line pos mod} 
1daf0 7b 0a 09 73 65 74 20 73 75 62 20 5b 4c 69 6e 64  {..set sub [Lind
1db00 65 78 20 24 7b 6c 69 6e 65 7d 20 31 5d 0a 09 73  ex ${line} 1]..s
1db10 77 69 74 63 68 20 2d 2d 20 24 7b 70 6f 73 7d 20  witch -- ${pos} 
1db20 7b 0a 09 09 31 20 7b 0a 09 09 09 72 65 74 75 72  {...1 {....retur
1db30 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c  n [CompleteFromL
1db40 69 73 74 20 24 7b 74 65 78 74 7d 20 7b 0a 09 09  ist ${text} {...
1db50 09 09 61 64 64 20 63 6c 65 61 72 20 67 65 74 20  ..add clear get 
1db60 72 65 61 64 66 69 6c 65 0a 09 09 09 7d 5d 0a 09  readfile....}]..
1db70 09 7d 0a 09 09 32 20 7b 0a 09 09 09 73 77 69 74  .}...2 {....swit
1db80 63 68 20 2d 2d 20 24 7b 73 75 62 7d 20 7b 0a 09  ch -- ${sub} {..
1db90 09 09 09 61 64 64 20 7b 20 72 65 74 75 72 6e 20  ...add { return 
1dba0 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 70  [DisplayHints <p
1dbb0 61 74 74 65 72 6e 3e 5d 20 7d 0a 09 09 09 09 67  attern>] }.....g
1dbc0 65 74 20 7b 0a 09 09 09 09 09 72 65 74 75 72 6e  et {......return
1dbd0 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69   [CompleteFromLi
1dbe0 73 74 20 24 7b 74 65 78 74 7d 20 5b 57 69 64 67  st ${text} [Widg
1dbf0 65 74 43 68 69 6c 64 72 65 6e 20 24 7b 74 65 78  etChildren ${tex
1dc00 74 7d 5d 5d 0a 09 09 09 09 7d 0a 09 09 09 09 72  t}]].....}.....r
1dc10 65 61 64 66 69 6c 65 20 7b 20 72 65 74 75 72 6e  eadfile { return
1dc20 20 22 22 20 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09   "" }....}...}..
1dc30 09 33 20 7b 0a 09 09 09 73 77 69 74 63 68 20 2d  .3 {....switch -
1dc40 2d 20 24 7b 73 75 62 7d 20 7b 0a 09 09 09 09 61  - ${sub} {.....a
1dc50 64 64 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73  dd { return [Dis
1dc60 70 6c 61 79 48 69 6e 74 73 20 3c 76 61 6c 75 65  playHints <value
1dc70 3e 5d 20 7d 0a 09 09 09 09 67 65 74 20 7b 20 72  >] }.....get { r
1dc80 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
1dc90 6e 74 73 20 3c 6e 61 6d 65 3e 5d 20 7d 0a 09 09  nts <name>] }...
1dca0 09 09 72 65 61 64 66 69 6c 65 20 7b 20 72 65 74  ..readfile { ret
1dcb0 75 72 6e 20 5b 4f 70 74 69 6f 6e 50 72 69 6f 72  urn [OptionPrior
1dcc0 69 74 79 20 24 7b 74 65 78 74 7d 5d 20 7d 0a 09  ity ${text}] }..
1dcd0 09 09 7d 0a 09 09 7d 0a 09 09 34 20 7b 0a 09 09  ..}...}...4 {...
1dce0 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 73 75 62  .switch -- ${sub
1dcf0 7d 20 7b 0a 09 09 09 09 61 64 64 20 7b 20 72 65  } {.....add { re
1dd00 74 75 72 6e 20 5b 4f 70 74 69 6f 6e 50 72 69 6f  turn [OptionPrio
1dd10 72 69 74 79 20 24 7b 74 65 78 74 7d 5d 20 7d 0a  rity ${text}] }.
1dd20 09 09 09 09 67 65 74 20 7b 0a 09 09 09 09 09 72  ....get {......r
1dd30 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46  eturn [CompleteF
1dd40 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20  romList ${text} 
1dd50 5c 0a 09 09 09 09 09 5b 43 6c 61 73 73 54 61 62  \......[ClassTab
1dd60 6c 65 20 5b 4c 69 6e 64 65 78 20 24 7b 6c 69 6e  le [Lindex ${lin
1dd70 65 7d 20 32 5d 5d 5d 0a 09 09 09 09 7d 0a 09 09  e} 2]]].....}...
1dd80 09 09 72 65 61 64 66 69 6c 65 20 7b 7d 0a 09 09  ..readfile {}...
1dd90 09 7d 0a 09 09 7d 0a 09 7d 0a 7d 0a 0a 70 72 6f  .}...}..}.}..pro
1dda0 63 20 50 61 63 6b 43 6f 6e 66 69 67 20 7b 74 65  c PackConfig {te
1ddb0 78 74 20 6c 69 6e 65 20 70 72 65 76 7d 20 7b 0a  xt line prev} {.
1ddc0 09 73 65 74 20 6f 70 74 73 20 7b 0a 09 09 2d 61  .set opts {...-a
1ddd0 66 74 65 72 20 2d 61 6e 63 68 6f 72 20 2d 62 65  fter -anchor -be
1dde0 66 6f 72 65 20 2d 65 78 70 61 6e 64 20 2d 66 69  fore -expand -fi
1ddf0 6c 6c 0a 09 09 2d 69 6e 20 2d 69 70 61 64 78 20  ll...-in -ipadx 
1de00 2d 69 70 61 64 79 20 2d 70 61 64 78 20 2d 70 61  -ipady -padx -pa
1de10 64 79 20 2d 73 69 64 65 0a 09 7d 0a 09 69 66 20  dy -side..}..if 
1de20 7b 2d 31 20 3d 3d 20 5b 73 74 72 69 6e 67 20 66  {-1 == [string f
1de30 69 72 73 74 20 22 2d 22 20 24 7b 6c 69 6e 65 7d  irst "-" ${line}
1de40 5d 7d 20 7b 0a 09 09 73 65 74 20 73 6c 61 76 65  ]} {...set slave
1de50 20 5b 57 69 64 67 65 74 43 68 69 6c 64 72 65 6e   [WidgetChildren
1de60 20 24 7b 74 65 78 74 7d 5d 0a 09 7d 20 65 6c 73   ${text}]..} els
1de70 65 20 7b 0a 09 09 73 65 74 20 73 6c 61 76 65 20  e {...set slave 
1de80 22 22 0a 09 7d 0a 09 73 77 69 74 63 68 20 2d 2d  ""..}..switch --
1de90 20 24 7b 70 72 65 76 7d 20 7b 0a 09 09 2d 61 66   ${prev} {...-af
1dea0 74 65 72 20 2d 0a 09 09 2d 62 65 66 6f 72 65 20  ter -...-before 
1deb0 20 7b 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c   { return [Compl
1dec0 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65  eteFromList ${te
1ded0 78 74 7d 20 5b 57 69 64 67 65 74 43 68 69 6c 64  xt} [WidgetChild
1dee0 72 65 6e 20 24 7b 74 65 78 74 7d 5d 5d 20 7d 0a  ren ${text}]] }.
1def0 09 09 2d 61 6e 63 68 6f 72 20 7b 20 72 65 74 75  ..-anchor { retu
1df00 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 41 6e 63 68  rn [CompleteAnch
1df10 6f 72 20 24 7b 74 65 78 74 7d 5d 20 7d 0a 09 09  or ${text}] }...
1df20 2d 65 78 70 61 6e 64 20 7b 20 72 65 74 75 72 6e  -expand { return
1df30 20 5b 43 6f 6d 70 6c 65 74 65 42 6f 6f 6c 65 61   [CompleteBoolea
1df40 6e 20 24 7b 74 65 78 74 7d 5d 20 7d 0a 09 09 2d  n ${text}] }...-
1df50 66 69 6c 6c 20 7b 20 72 65 74 75 72 6e 20 5b 43  fill { return [C
1df60 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20  ompleteFromList 
1df70 24 7b 74 65 78 74 7d 20 7b 20 6e 6f 6e 65 20 78  ${text} { none x
1df80 20 79 20 62 6f 74 68 20 7d 5d 20 7d 0a 0a 09 09   y both }] }....
1df90 2d 69 70 61 64 78 20 2d 0a 09 09 2d 69 70 61 64  -ipadx -...-ipad
1dfa0 79 20 2d 0a 09 09 2d 70 61 64 78 20 2d 0a 09 09  y -...-padx -...
1dfb0 2d 70 61 64 79 20 7b 20 72 65 74 75 72 6e 20 5b  -pady { return [
1dfc0 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 61 6d  DisplayHints <am
1dfd0 6f 75 6e 74 3e 5d 20 7d 0a 0a 09 09 2d 69 6e 20  ount>] }....-in 
1dfe0 7b 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65  { return [Comple
1dff0 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78  teFromList ${tex
1e000 74 7d 20 5b 57 69 64 67 65 74 43 68 69 6c 64 72  t} [WidgetChildr
1e010 65 6e 20 24 7b 74 65 78 74 7d 5d 5d 20 7d 0a 09  en ${text}]] }..
1e020 09 2d 73 69 64 65 20 7b 20 72 65 74 75 72 6e 20  .-side { return 
1e030 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73  [CompleteFromLis
1e040 74 20 24 7b 74 65 78 74 7d 20 7b 20 6c 65 66 74  t ${text} { left
1e050 20 72 69 67 68 74 20 74 6f 70 20 62 6f 74 74 6f   right top botto
1e060 6d 20 7d 5d 20 7d 0a 0a 09 09 64 65 66 61 75 6c  m }] }....defaul
1e070 74 20 7b 0a 09 09 09 72 65 74 75 72 6e 20 5b 43  t {....return [C
1e080 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20  ompleteFromList 
1e090 24 7b 74 65 78 74 7d 20 5c 0a 09 09 09 5b 52 65  ${text} \....[Re
1e0a0 6d 6f 76 65 55 73 65 64 4f 70 74 69 6f 6e 73 20  moveUsedOptions 
1e0b0 24 7b 6c 69 6e 65 7d 20 5b 63 6f 6e 63 61 74 20  ${line} [concat 
1e0c0 24 7b 6f 70 74 73 7d 20 24 7b 73 6c 61 76 65 7d  ${opts} ${slave}
1e0d0 5d 5d 5d 0a 09 09 7d 0a 09 7d 0a 7d 0a 0a 70 72  ]]]...}..}.}..pr
1e0e0 6f 63 20 63 6f 6d 70 6c 65 74 65 28 70 61 63 6b  oc complete(pack
1e0f0 29 20 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e  ) {text start en
1e100 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20  d line pos mod} 
1e110 7b 0a 09 73 65 74 20 73 75 62 20 5b 4c 69 6e 64  {..set sub [Lind
1e120 65 78 20 24 7b 6c 69 6e 65 7d 20 31 5d 0a 09 73  ex ${line} 1]..s
1e130 65 74 20 70 72 65 76 20 5b 50 72 65 76 69 6f 75  et prev [Previou
1e140 73 57 6f 72 64 20 24 7b 73 74 61 72 74 7d 20 24  sWord ${start} $
1e150 7b 6c 69 6e 65 7d 5d 0a 09 73 77 69 74 63 68 20  {line}]..switch 
1e160 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09 09 31 20  -- ${pos} {...1 
1e170 7b 0a 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d  {....return [Com
1e180 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b  pleteFromList ${
1e190 74 65 78 74 7d 20 5c 0a 09 09 09 5b 63 6f 6e 63  text} \....[conc
1e1a0 61 74 20 5b 57 69 64 67 65 74 43 68 69 6c 64 72  at [WidgetChildr
1e1b0 65 6e 20 24 7b 74 65 78 74 7d 5d 20 7b 0a 09 09  en ${text}] {...
1e1c0 09 09 63 6f 6e 66 69 67 75 72 65 20 66 6f 72 67  ..configure forg
1e1d0 65 74 20 69 6e 66 6f 20 70 72 6f 70 61 67 61 74  et info propagat
1e1e0 65 20 73 6c 61 76 65 73 0a 09 09 09 7d 5d 5d 0a  e slaves....}]].
1e1f0 09 09 7d 0a 09 09 32 20 7b 0a 09 09 09 73 77 69  ..}...2 {....swi
1e200 74 63 68 20 2d 2d 20 24 7b 73 75 62 7d 20 7b 0a  tch -- ${sub} {.
1e210 09 09 09 09 63 6f 6e 66 69 67 75 72 65 20 2d 0a  ....configure -.
1e220 09 09 09 09 66 6f 72 67 65 74 20 2d 0a 09 09 09  ....forget -....
1e230 09 69 6e 66 6f 20 2d 0a 09 09 09 09 70 72 6f 70  .info -.....prop
1e240 61 67 61 74 65 20 2d 0a 09 09 09 09 73 6c 61 76  agate -.....slav
1e250 65 73 20 7b 0a 09 09 09 09 09 72 65 74 75 72 6e  es {......return
1e260 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69   [CompleteFromLi
1e270 73 74 20 24 7b 74 65 78 74 7d 20 5b 57 69 64 67  st ${text} [Widg
1e280 65 74 43 68 69 6c 64 72 65 6e 20 24 7b 74 65 78  etChildren ${tex
1e290 74 7d 5d 5d 0a 09 09 09 09 7d 0a 09 09 09 09 64  t}]].....}.....d
1e2a0 65 66 61 75 6c 74 20 7b 0a 09 09 09 09 09 72 65  efault {......re
1e2b0 74 75 72 6e 20 5b 50 61 63 6b 43 6f 6e 66 69 67  turn [PackConfig
1e2c0 20 24 7b 74 65 78 74 7d 20 24 7b 6c 69 6e 65 7d   ${text} ${line}
1e2d0 20 24 7b 70 72 65 76 7d 5d 0a 09 09 09 09 7d 0a   ${prev}].....}.
1e2e0 09 09 09 7d 0a 09 09 7d 0a 09 09 64 65 66 61 75  ...}...}...defau
1e2f0 6c 74 20 7b 0a 09 09 09 73 77 69 74 63 68 20 2d  lt {....switch -
1e300 2d 20 24 7b 73 75 62 7d 20 7b 0a 09 09 09 09 63  - ${sub} {.....c
1e310 6f 6e 66 69 67 75 72 65 20 7b 0a 09 09 09 09 09  onfigure {......
1e320 72 65 74 75 72 6e 20 5b 50 61 63 6b 43 6f 6e 66  return [PackConf
1e330 69 67 20 24 7b 74 65 78 74 7d 20 24 7b 6c 69 6e  ig ${text} ${lin
1e340 65 7d 20 24 7b 70 72 65 76 7d 5d 0a 09 09 09 09  e} ${prev}].....
1e350 7d 0a 09 09 09 09 66 6f 72 67 65 74 20 7b 0a 09  }.....forget {..
1e360 09 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70  ....return [Comp
1e370 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74  leteFromList ${t
1e380 65 78 74 7d 20 5b 57 69 64 67 65 74 43 68 69 6c  ext} [WidgetChil
1e390 64 72 65 6e 20 24 7b 74 65 78 74 7d 5d 5d 0a 09  dren ${text}]]..
1e3a0 09 09 09 7d 0a 09 09 09 09 69 6e 66 6f 20 7b 7d  ...}.....info {}
1e3b0 0a 09 09 09 09 70 72 6f 70 61 67 61 74 65 20 7b  .....propagate {
1e3c0 0a 09 09 09 09 09 73 77 69 74 63 68 20 2d 2d 20  ......switch -- 
1e3d0 24 7b 70 6f 73 7d 20 7b 0a 09 09 09 09 09 09 33  ${pos} {.......3
1e3e0 20 7b 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c   { return [Compl
1e3f0 65 74 65 42 6f 6f 6c 65 61 6e 20 24 7b 74 65 78  eteBoolean ${tex
1e400 74 7d 5d 20 7d 0a 09 09 09 09 09 7d 0a 09 09 09  t}] }......}....
1e410 09 7d 0a 09 09 09 09 73 6c 61 76 65 73 20 7b 7d  .}.....slaves {}
1e420 0a 09 09 09 09 64 65 66 61 75 6c 74 20 7b 0a 09  .....default {..
1e430 09 09 09 09 72 65 74 75 72 6e 20 5b 50 61 63 6b  ....return [Pack
1e440 43 6f 6e 66 69 67 20 24 7b 74 65 78 74 7d 20 24  Config ${text} $
1e450 7b 6c 69 6e 65 7d 20 24 7b 70 72 65 76 7d 5d 0a  {line} ${prev}].
1e460 09 09 09 09 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09  ....}....}...}..
1e470 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a 0a  }..return "".}..
1e480 70 72 6f 63 20 50 6c 61 63 65 43 6f 6e 66 69 67  proc PlaceConfig
1e490 20 7b 74 65 78 74 20 6c 69 6e 65 20 70 72 65 76   {text line prev
1e4a0 7d 20 7b 0a 09 73 65 74 20 6f 70 74 73 20 7b 0a  } {..set opts {.
1e4b0 09 09 2d 69 6e 20 2d 78 20 2d 72 65 6c 78 20 2d  ..-in -x -relx -
1e4c0 79 20 2d 72 65 6c 79 20 2d 61 6e 63 68 6f 72 20  y -rely -anchor 
1e4d0 2d 77 69 64 74 68 0a 09 09 2d 72 65 6c 77 69 64  -width...-relwid
1e4e0 74 68 20 2d 68 65 69 67 68 74 20 2d 72 65 6c 68  th -height -relh
1e4f0 65 69 67 68 74 20 2d 62 6f 72 64 65 72 6d 6f 64  eight -bordermod
1e500 65 0a 09 7d 0a 09 73 77 69 74 63 68 20 2d 2d 20  e..}..switch -- 
1e510 24 7b 70 72 65 76 7d 20 7b 0a 0a 09 09 2d 69 6e  ${prev} {....-in
1e520 20 7b 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c   { return [Compl
1e530 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65  eteFromList ${te
1e540 78 74 7d 20 5b 57 69 64 67 65 74 43 68 69 6c 64  xt} [WidgetChild
1e550 72 65 6e 20 24 7b 74 65 78 74 7d 5d 5d 20 7d 0a  ren ${text}]] }.
1e560 0a 09 09 2d 78 20 2d 0a 09 09 2d 72 65 6c 78 20  ...-x -...-relx 
1e570 2d 0a 09 09 2d 79 20 2d 0a 09 09 2d 72 65 6c 79  -...-y -...-rely
1e580 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
1e590 61 79 48 69 6e 74 73 20 3c 6c 6f 63 61 74 69 6f  ayHints <locatio
1e5a0 6e 3e 5d 20 7d 0a 0a 09 09 2d 61 6e 63 68 6f 72  n>] }....-anchor
1e5b0 20 7b 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c   { return [Compl
1e5c0 65 74 65 41 6e 63 68 6f 72 20 24 7b 74 65 78 74  eteAnchor ${text
1e5d0 7d 5d 20 7d 0a 0a 09 09 2d 77 69 64 74 68 20 2d  }] }....-width -
1e5e0 0a 09 09 2d 72 65 6c 77 69 64 74 68 20 2d 0a 09  ...-relwidth -..
1e5f0 09 2d 68 65 69 67 68 74 20 2d 0a 09 09 2d 72 65  .-height -...-re
1e600 6c 68 65 69 67 68 74 20 7b 20 72 65 74 75 72 6e  lheight { return
1e610 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c   [DisplayHints <
1e620 73 69 7a 65 3e 5d 20 7d 0a 0a 09 09 2d 62 6f 72  size>] }....-bor
1e630 64 65 72 6d 6f 64 65 20 7b 0a 09 09 09 72 65 74  dermode {....ret
1e640 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f  urn [CompleteFro
1e650 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 7b 69  mList ${text} {i
1e660 67 6e 6f 72 65 20 69 6e 73 69 64 65 20 6f 75 74  gnore inside out
1e670 73 69 64 65 7d 5d 0a 09 09 7d 0a 0a 09 09 64 65  side}]...}....de
1e680 66 61 75 6c 74 20 7b 0a 09 09 09 72 65 74 75 72  fault {....retur
1e690 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c  n [CompleteFromL
1e6a0 69 73 74 20 24 7b 74 65 78 74 7d 20 5c 0a 09 09  ist ${text} \...
1e6b0 09 5b 52 65 6d 6f 76 65 55 73 65 64 4f 70 74 69  .[RemoveUsedOpti
1e6c0 6f 6e 73 20 24 7b 6c 69 6e 65 7d 20 24 7b 6f 70  ons ${line} ${op
1e6d0 74 73 7d 5d 5d 0a 09 09 7d 0a 09 7d 0a 7d 0a 0a  ts}]]...}..}.}..
1e6e0 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 70 6c  proc complete(pl
1e6f0 61 63 65 29 20 7b 74 65 78 74 20 73 74 61 72 74  ace) {text start
1e700 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f   end line pos mo
1e710 64 7d 20 7b 0a 09 73 65 74 20 73 75 62 20 5b 4c  d} {..set sub [L
1e720 69 6e 64 65 78 20 24 7b 6c 69 6e 65 7d 20 31 5d  index ${line} 1]
1e730 0a 09 73 65 74 20 70 72 65 76 20 5b 50 72 65 76  ..set prev [Prev
1e740 69 6f 75 73 57 6f 72 64 20 24 7b 73 74 61 72 74  iousWord ${start
1e750 7d 20 24 7b 6c 69 6e 65 7d 5d 0a 09 73 77 69 74  } ${line}]..swit
1e760 63 68 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09  ch -- ${pos} {..
1e770 09 31 20 7b 0a 09 09 09 72 65 74 75 72 6e 20 5b  .1 {....return [
1e780 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74  CompleteFromList
1e790 20 24 7b 74 65 78 74 7d 20 5c 0a 09 09 09 5b 63   ${text} \....[c
1e7a0 6f 6e 63 61 74 20 5b 57 69 64 67 65 74 43 68 69  oncat [WidgetChi
1e7b0 6c 64 72 65 6e 20 24 7b 74 65 78 74 7d 5d 20 7b  ldren ${text}] {
1e7c0 0a 09 09 09 09 63 6f 6e 66 69 67 75 72 65 20 66  .....configure f
1e7d0 6f 72 67 65 74 20 69 6e 66 6f 20 73 6c 61 76 65  orget info slave
1e7e0 73 0a 09 09 09 7d 5d 5d 0a 09 09 7d 0a 09 09 32  s....}]]...}...2
1e7f0 20 7b 0a 09 09 09 73 77 69 74 63 68 20 2d 2d 20   {....switch -- 
1e800 24 7b 73 75 62 7d 20 7b 0a 09 09 09 09 63 6f 6e  ${sub} {.....con
1e810 66 69 67 75 72 65 20 2d 0a 09 09 09 09 66 6f 72  figure -.....for
1e820 67 65 74 20 2d 0a 09 09 09 09 69 6e 66 6f 20 2d  get -.....info -
1e830 0a 09 09 09 09 73 6c 61 76 65 73 20 7b 0a 09 09  .....slaves {...
1e840 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c  ...return [Compl
1e850 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65  eteFromList ${te
1e860 78 74 7d 20 5b 57 69 64 67 65 74 43 68 69 6c 64  xt} [WidgetChild
1e870 72 65 6e 20 24 7b 74 65 78 74 7d 5d 5d 0a 09 09  ren ${text}]]...
1e880 09 09 7d 0a 09 09 09 09 64 65 66 61 75 6c 74 20  ..}.....default 
1e890 7b 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b 50  {......return [P
1e8a0 6c 61 63 65 43 6f 6e 66 69 67 20 24 7b 74 65 78  laceConfig ${tex
1e8b0 74 7d 20 24 7b 6c 69 6e 65 7d 20 24 7b 70 72 65  t} ${line} ${pre
1e8c0 76 7d 5d 0a 09 09 09 09 7d 0a 09 09 09 7d 0a 09  v}].....}....}..
1e8d0 09 7d 0a 09 09 64 65 66 61 75 6c 74 20 7b 0a 09  .}...default {..
1e8e0 09 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 73 75  ..switch -- ${su
1e8f0 62 7d 20 7b 0a 09 09 09 09 63 6f 6e 66 69 67 75  b} {.....configu
1e900 72 65 20 7b 0a 09 09 09 09 09 72 65 74 75 72 6e  re {......return
1e910 20 5b 50 6c 61 63 65 43 6f 6e 66 69 67 20 24 7b   [PlaceConfig ${
1e920 74 65 78 74 7d 20 24 7b 6c 69 6e 65 7d 20 24 7b  text} ${line} ${
1e930 70 72 65 76 7d 5d 0a 09 09 09 09 7d 0a 09 09 09  prev}].....}....
1e940 09 66 6f 72 67 65 74 20 7b 7d 0a 09 09 09 09 69  .forget {}.....i
1e950 6e 66 6f 20 7b 7d 0a 09 09 09 09 73 6c 61 76 65  nfo {}.....slave
1e960 73 20 7b 7d 0a 09 09 09 09 64 65 66 61 75 6c 74  s {}.....default
1e970 20 7b 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b   {......return [
1e980 50 6c 61 63 65 43 6f 6e 66 69 67 20 24 7b 74 65  PlaceConfig ${te
1e990 78 74 7d 20 24 7b 6c 69 6e 65 7d 20 24 7b 70 72  xt} ${line} ${pr
1e9a0 65 76 7d 5d 0a 09 09 09 09 7d 0a 09 09 09 7d 0a  ev}].....}....}.
1e9b0 09 09 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22  ..}..}..return "
1e9c0 22 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65  ".}..proc comple
1e9d0 74 65 28 72 61 64 69 6f 62 75 74 74 6f 6e 29 20  te(radiobutton) 
1e9e0 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20  {text start end 
1e9f0 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a  line pos mod} {.
1ea00 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 70 6f 73  .switch -- ${pos
1ea10 7d 20 7b 0a 09 09 31 20 7b 20 72 65 74 75 72 6e  } {...1 { return
1ea20 20 5b 45 76 65 6e 74 75 61 6c 6c 79 49 6e 73 65   [EventuallyInse
1ea30 72 74 4c 65 61 64 69 6e 67 44 6f 74 20 24 7b 74  rtLeadingDot ${t
1ea40 65 78 74 7d 20 3c 70 61 74 68 4e 61 6d 65 3e 5d  ext} <pathName>]
1ea50 20 7d 0a 09 09 64 65 66 61 75 6c 74 20 7b 0a 09   }...default {..
1ea60 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65  ..return [Comple
1ea70 74 65 57 69 64 67 65 74 43 6f 6e 66 69 67 75 72  teWidgetConfigur
1ea80 61 74 69 6f 6e 73 20 24 7b 74 65 78 74 7d 20 24  ations ${text} $
1ea90 7b 73 74 61 72 74 7d 20 24 7b 6c 69 6e 65 7d 20  {start} ${line} 
1eaa0 7b 0a 09 09 09 09 2d 61 63 74 69 76 65 62 61 63  {.....-activebac
1eab0 6b 67 72 6f 75 6e 64 20 2d 61 63 74 69 76 65 66  kground -activef
1eac0 6f 72 65 67 72 6f 75 6e 64 20 2d 61 6e 63 68 6f  oreground -ancho
1ead0 72 20 2d 62 61 63 6b 67 72 6f 75 6e 64 0a 09 09  r -background...
1eae0 09 09 2d 62 69 74 6d 61 70 20 2d 62 6f 72 64 65  ..-bitmap -borde
1eaf0 72 77 69 64 74 68 20 2d 63 75 72 73 6f 72 20 2d  rwidth -cursor -
1eb00 64 69 73 61 62 6c 65 64 66 6f 72 65 67 72 6f 75  disabledforegrou
1eb10 6e 64 20 2d 66 6f 6e 74 0a 09 09 09 09 2d 66 6f  nd -font.....-fo
1eb20 72 65 67 72 6f 75 6e 64 20 2d 68 69 67 68 6c 69  reground -highli
1eb30 67 68 74 62 61 63 6b 67 72 6f 75 6e 64 20 2d 68  ghtbackground -h
1eb40 69 67 68 6c 69 67 68 74 63 6f 6c 6f 72 0a 09 09  ighlightcolor...
1eb50 09 09 2d 68 69 67 68 6c 69 67 68 74 74 68 69 63  ..-highlightthic
1eb60 6b 6e 65 73 73 20 2d 69 6d 61 67 65 20 2d 6a 75  kness -image -ju
1eb70 73 74 69 66 79 20 2d 70 61 64 78 20 2d 70 61 64  stify -padx -pad
1eb80 79 20 2d 72 65 6c 69 65 66 0a 09 09 09 09 2d 74  y -relief.....-t
1eb90 61 6b 65 66 6f 63 75 73 20 2d 74 65 78 74 20 2d  akefocus -text -
1eba0 74 65 78 74 76 61 72 69 61 62 6c 65 20 2d 75 6e  textvariable -un
1ebb0 64 65 72 6c 69 6e 65 20 2d 77 72 61 70 6c 65 6e  derline -wraplen
1ebc0 67 74 68 20 2d 63 6f 6d 6d 61 6e 64 0a 09 09 09  gth -command....
1ebd0 09 2d 68 65 69 67 68 74 20 2d 69 6e 64 69 63 61  .-height -indica
1ebe0 74 6f 72 6f 6e 20 2d 73 65 6c 65 63 74 63 6f 6c  toron -selectcol
1ebf0 6f 72 20 2d 73 65 6c 65 63 74 69 6d 61 67 65 20  or -selectimage 
1ec00 2d 73 74 61 74 65 20 2d 76 61 6c 75 65 0a 09 09  -state -value...
1ec10 09 09 2d 76 61 72 69 61 62 6c 65 20 2d 77 69 64  ..-variable -wid
1ec20 74 68 0a 09 09 09 7d 5d 0a 09 09 7d 0a 09 7d 0a  th....}]...}..}.
1ec30 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a 0a 70 72  .return "".}..pr
1ec40 6f 63 20 63 6f 6d 70 6c 65 74 65 28 72 61 69 73  oc complete(rais
1ec50 65 29 20 7b 74 65 78 74 20 73 74 61 72 74 20 65  e) {text start e
1ec60 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d  nd line pos mod}
1ec70 20 7b 0a 09 72 65 74 75 72 6e 20 5b 63 6f 6d 70   {..return [comp
1ec80 6c 65 74 65 28 6c 6f 77 65 72 29 20 24 7b 74 65  lete(lower) ${te
1ec90 78 74 7d 20 24 7b 73 74 61 72 74 7d 20 24 7b 65  xt} ${start} ${e
1eca0 6e 64 7d 20 24 7b 6c 69 6e 65 7d 20 24 7b 70 6f  nd} ${line} ${po
1ecb0 73 7d 20 24 7b 6d 6f 64 7d 5d 0a 7d 0a 0a 70 72  s} ${mod}].}..pr
1ecc0 6f 63 20 63 6f 6d 70 6c 65 74 65 28 73 63 61 6c  oc complete(scal
1ecd0 65 29 20 7b 74 65 78 74 20 73 74 61 72 74 20 65  e) {text start e
1ece0 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d  nd line pos mod}
1ecf0 20 7b 0a 09 73 77 69 74 63 68 20 2d 2d 20 24 7b   {..switch -- ${
1ed00 70 6f 73 7d 20 7b 0a 09 09 31 20 7b 20 72 65 74  pos} {...1 { ret
1ed10 75 72 6e 20 5b 45 76 65 6e 74 75 61 6c 6c 79 49  urn [EventuallyI
1ed20 6e 73 65 72 74 4c 65 61 64 69 6e 67 44 6f 74 20  nsertLeadingDot 
1ed30 24 7b 74 65 78 74 7d 20 3c 70 61 74 68 4e 61 6d  ${text} <pathNam
1ed40 65 3e 5d 20 7d 0a 09 09 64 65 66 61 75 6c 74 20  e>] }...default 
1ed50 7b 0a 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d  {....return [Com
1ed60 70 6c 65 74 65 57 69 64 67 65 74 43 6f 6e 66 69  pleteWidgetConfi
1ed70 67 75 72 61 74 69 6f 6e 73 20 24 7b 74 65 78 74  gurations ${text
1ed80 7d 20 24 7b 73 74 61 72 74 7d 20 24 7b 6c 69 6e  } ${start} ${lin
1ed90 65 7d 20 7b 0a 09 09 09 09 2d 61 63 74 69 76 65  e} {.....-active
1eda0 62 61 63 6b 67 72 6f 75 6e 64 20 2d 62 61 63 6b  background -back
1edb0 67 72 6f 75 6e 64 20 2d 62 6f 72 64 65 72 77 69  ground -borderwi
1edc0 64 74 68 20 2d 63 75 72 73 6f 72 20 2d 66 6f 6e  dth -cursor -fon
1edd0 74 0a 09 09 09 09 2d 66 6f 72 65 67 72 6f 75 6e  t.....-foregroun
1ede0 64 20 2d 68 69 67 68 6c 69 67 68 74 62 61 63 6b  d -highlightback
1edf0 67 72 6f 75 6e 64 20 2d 68 69 67 68 6c 69 67 68  ground -highligh
1ee00 74 63 6f 6c 6f 72 0a 09 09 09 09 2d 68 69 67 68  tcolor.....-high
1ee10 6c 69 67 68 74 74 68 69 63 6b 6e 65 73 73 20 2d  lightthickness -
1ee20 6f 72 69 65 6e 74 20 2d 72 65 6c 69 65 66 20 2d  orient -relief -
1ee30 72 65 70 65 61 74 64 65 6c 61 79 0a 09 09 09 09  repeatdelay.....
1ee40 2d 72 65 70 65 61 74 69 6e 74 65 72 76 61 6c 20  -repeatinterval 
1ee50 2d 74 61 6b 65 66 6f 63 75 73 20 2d 74 72 6f 75  -takefocus -trou
1ee60 67 68 63 6f 6c 6f 72 20 2d 62 69 67 69 6e 63 72  ghcolor -bigincr
1ee70 65 6d 65 6e 74 0a 09 09 09 09 2d 63 6f 6d 6d 61  ement.....-comma
1ee80 6e 64 20 2d 64 69 67 69 74 73 20 2d 66 72 6f 6d  nd -digits -from
1ee90 20 2d 6c 61 62 65 6c 20 2d 6c 65 6e 67 74 68 20   -label -length 
1eea0 2d 72 65 73 6f 6c 75 74 69 6f 6e 0a 09 09 09 09  -resolution.....
1eeb0 2d 73 68 6f 77 76 61 6c 75 65 20 2d 73 6c 69 64  -showvalue -slid
1eec0 65 72 6c 65 6e 67 74 68 20 2d 73 6c 69 64 65 72  erlength -slider
1eed0 72 65 6c 69 65 66 20 2d 73 74 61 74 65 20 2d 74  relief -state -t
1eee0 69 63 6b 69 6e 74 65 72 76 61 6c 0a 09 09 09 09  ickinterval.....
1eef0 2d 74 6f 20 2d 76 61 72 69 61 62 6c 65 20 2d 77  -to -variable -w
1ef00 69 64 74 68 0a 09 09 09 7d 5d 0a 09 09 7d 0a 09  idth....}]...}..
1ef10 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a 0a  }..return "".}..
1ef20 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 73 63  proc complete(sc
1ef30 72 6f 6c 6c 62 61 72 29 20 7b 74 65 78 74 20 73  rollbar) {text s
1ef40 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f  tart end line po
1ef50 73 20 6d 6f 64 7d 20 7b 0a 09 73 77 69 74 63 68  s mod} {..switch
1ef60 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09 09 31   -- ${pos} {...1
1ef70 20 7b 20 72 65 74 75 72 6e 20 5b 45 76 65 6e 74   { return [Event
1ef80 75 61 6c 6c 79 49 6e 73 65 72 74 4c 65 61 64 69  uallyInsertLeadi
1ef90 6e 67 44 6f 74 20 24 7b 74 65 78 74 7d 20 3c 70  ngDot ${text} <p
1efa0 61 74 68 4e 61 6d 65 3e 5d 20 7d 0a 09 09 64 65  athName>] }...de
1efb0 66 61 75 6c 74 20 7b 0a 09 09 09 72 65 74 75 72  fault {....retur
1efc0 6e 20 5b 43 6f 6d 70 6c 65 74 65 57 69 64 67 65  n [CompleteWidge
1efd0 74 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 20  tConfigurations 
1efe0 24 7b 74 65 78 74 7d 20 24 7b 73 74 61 72 74 7d  ${text} ${start}
1eff0 20 24 7b 6c 69 6e 65 7d 20 7b 0a 09 09 09 09 2d   ${line} {.....-
1f000 61 63 74 69 76 65 62 61 63 6b 67 72 6f 75 6e 64  activebackground
1f010 20 2d 62 61 63 6b 67 72 6f 75 6e 64 20 2d 62 6f   -background -bo
1f020 72 64 65 72 77 69 64 74 68 20 2d 63 75 72 73 6f  rderwidth -curso
1f030 72 0a 09 09 09 09 2d 68 69 67 68 6c 69 67 68 74  r.....-highlight
1f040 62 61 63 6b 67 72 6f 75 6e 64 20 2d 68 69 67 68  background -high
1f050 6c 69 67 68 74 63 6f 6c 6f 72 20 2d 68 69 67 68  lightcolor -high
1f060 6c 69 67 68 74 74 68 69 63 6b 6e 65 73 73 0a 09  lightthickness..
1f070 09 09 09 2d 6a 75 6d 70 20 2d 6f 72 69 65 6e 74  ...-jump -orient
1f080 20 2d 72 65 6c 69 65 66 20 2d 72 65 70 65 61 74   -relief -repeat
1f090 64 65 6c 61 79 20 2d 72 65 70 65 61 74 69 6e 74  delay -repeatint
1f0a0 65 72 76 61 6c 0a 09 09 09 09 2d 74 61 6b 65 66  erval.....-takef
1f0b0 6f 63 75 73 20 2d 74 72 6f 75 67 68 63 6f 6c 6f  ocus -troughcolo
1f0c0 72 20 2d 61 63 74 69 76 65 72 65 6c 69 65 66 20  r -activerelief 
1f0d0 2d 63 6f 6d 6d 61 6e 64 0a 09 09 09 09 2d 65 6c  -command.....-el
1f0e0 65 6d 65 6e 74 62 6f 72 64 65 72 77 69 64 74 68  ementborderwidth
1f0f0 20 2d 77 69 64 74 68 0a 09 09 09 7d 5d 0a 09 09   -width....}]...
1f100 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a  }..}..return "".
1f110 7d 0a 0a 70 72 6f 63 20 53 65 6c 65 63 74 69 6f  }..proc Selectio
1f120 6e 4f 70 74 73 20 7b 74 65 78 74 20 73 74 61 72  nOpts {text star
1f130 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d  t end line pos m
1f140 6f 64 20 6c 73 74 7d 20 7b 0a 09 73 65 74 20 70  od lst} {..set p
1f150 72 65 76 20 5b 50 72 65 76 69 6f 75 73 57 6f 72  rev [PreviousWor
1f160 64 20 24 7b 73 74 61 72 74 7d 20 24 7b 6c 69 6e  d ${start} ${lin
1f170 65 7d 5d 0a 09 69 66 20 7b 2d 31 20 3d 3d 20 5b  e}]..if {-1 == [
1f180 6c 73 65 61 72 63 68 20 24 7b 6c 73 74 7d 20 24  lsearch ${lst} $
1f190 7b 70 72 65 76 7d 5d 7d 20 7b 0a 09 09 73 65 74  {prev}]} {...set
1f1a0 20 70 72 65 76 20 22 22 20 3b 23 20 66 6f 72 63   prev "" ;# forc
1f1b0 65 20 74 68 65 20 64 65 66 61 75 6c 74 20 61 72  e the default ar
1f1c0 6d 0a 09 7d 0a 09 73 77 69 74 63 68 20 2d 2d 20  m..}..switch -- 
1f1d0 24 7b 70 72 65 76 7d 20 7b 0a 09 09 2d 64 69 73  ${prev} {...-dis
1f1e0 70 6c 61 79 6f 66 20 7b 0a 09 09 09 72 65 74 75  playof {....retu
1f1f0 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d  rn [CompleteFrom
1f200 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 5c 0a 09  List ${text} \..
1f210 09 09 5b 57 69 64 67 65 74 43 68 69 6c 64 72 65  ..[WidgetChildre
1f220 6e 20 24 7b 74 65 78 74 7d 5d 5d 0a 09 09 7d 0a  n ${text}]]...}.
1f230 09 09 2d 73 65 6c 65 63 74 69 6f 6e 20 7b 0a 09  ..-selection {..
1f240 09 09 76 61 72 69 61 62 6c 65 20 73 65 6c 65 63  ..variable selec
1f250 74 69 6f 6e 2d 73 65 6c 65 63 74 69 6f 6e 73 0a  tion-selections.
1f260 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c  ...return [Compl
1f270 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65  eteFromList ${te
1f280 78 74 7d 20 24 7b 73 65 6c 65 63 74 69 6f 6e 2d  xt} ${selection-
1f290 73 65 6c 65 63 74 69 6f 6e 73 7d 5d 0a 09 09 7d  selections}]...}
1f2a0 0a 09 09 2d 74 79 70 65 20 7b 0a 09 09 09 76 61  ...-type {....va
1f2b0 72 69 61 62 6c 65 20 73 65 6c 65 63 74 69 6f 6e  riable selection
1f2c0 2d 74 79 70 65 73 0a 09 09 09 72 65 74 75 72 6e  -types....return
1f2d0 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69   [CompleteFromLi
1f2e0 73 74 20 24 7b 74 65 78 74 7d 20 24 7b 73 65 6c  st ${text} ${sel
1f2f0 65 63 74 69 6f 6e 2d 74 79 70 65 73 7d 5d 0a 09  ection-types}]..
1f300 09 7d 0a 09 09 2d 63 6f 6d 6d 61 6e 64 20 7b 0a  .}...-command {.
1f310 09 09 09 72 65 74 75 72 6e 20 5b 42 72 61 63 65  ...return [Brace
1f320 4f 72 43 6f 6d 6d 61 6e 64 20 24 7b 74 65 78 74  OrCommand ${text
1f330 7d 20 5c 0a 09 09 09 24 7b 73 74 61 72 74 7d 20  } \....${start} 
1f340 24 7b 65 6e 64 7d 20 24 7b 6c 69 6e 65 7d 20 24  ${end} ${line} $
1f350 7b 70 6f 73 7d 20 24 7b 6d 6f 64 7d 5d 0a 09 09  {pos} ${mod}]...
1f360 7d 0a 09 09 2d 66 6f 72 6d 61 74 20 7b 0a 09 09  }...-format {...
1f370 09 76 61 72 69 61 62 6c 65 20 73 65 6c 65 63 74  .variable select
1f380 69 6f 6e 2d 66 6f 72 6d 61 74 73 0a 09 09 09 72  ion-formats....r
1f390 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46  eturn [CompleteF
1f3a0 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20  romList ${text} 
1f3b0 24 7b 73 65 6c 65 63 74 69 6f 6e 2d 66 6f 72 6d  ${selection-form
1f3c0 61 74 73 7d 5d 0a 09 09 7d 0a 09 09 64 65 66 61  ats}]...}...defa
1f3d0 75 6c 74 20 7b 0a 09 09 09 72 65 74 75 72 6e 20  ult {....return 
1f3e0 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73  [CompleteFromLis
1f3f0 74 20 24 7b 74 65 78 74 7d 20 5c 0a 09 09 09 5b  t ${text} \....[
1f400 52 65 6d 6f 76 65 55 73 65 64 4f 70 74 69 6f 6e  RemoveUsedOption
1f410 73 20 24 7b 6c 69 6e 65 7d 20 24 7b 6c 73 74 7d  s ${line} ${lst}
1f420 5d 5d 0a 09 09 7d 0a 09 7d 0a 7d 0a 0a 70 72 6f  ]]...}..}.}..pro
1f430 63 20 63 6f 6d 70 6c 65 74 65 28 73 65 6c 65 63  c complete(selec
1f440 74 69 6f 6e 29 20 7b 74 65 78 74 20 73 74 61 72  tion) {text star
1f450 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d  t end line pos m
1f460 6f 64 7d 20 7b 0a 09 73 77 69 74 63 68 20 2d 2d  od} {..switch --
1f470 20 24 7b 70 6f 73 7d 20 7b 0a 09 09 31 20 7b 0a   ${pos} {...1 {.
1f480 09 09 09 72 65 74 75 72 6e 20 5b 54 72 79 53 75  ...return [TrySu
1f490 62 43 6d 64 73 20 24 7b 74 65 78 74 7d 20 5b 4c  bCmds ${text} [L
1f4a0 69 6e 64 65 78 20 24 7b 6c 69 6e 65 7d 20 30 5d  index ${line} 0]
1f4b0 5d 0a 09 09 7d 0a 09 09 64 65 66 61 75 6c 74 20  ]...}...default 
1f4c0 7b 0a 09 09 09 73 65 74 20 73 75 62 20 5b 4c 69  {....set sub [Li
1f4d0 6e 64 65 78 20 24 7b 6c 69 6e 65 7d 20 31 5d 0a  ndex ${line} 1].
1f4e0 09 09 09 73 65 74 20 77 69 64 67 65 74 73 20 5b  ...set widgets [
1f4f0 57 69 64 67 65 74 43 68 69 6c 64 72 65 6e 20 24  WidgetChildren $
1f500 7b 74 65 78 74 7d 5d 0a 09 09 09 73 77 69 74 63  {text}]....switc
1f510 68 20 2d 2d 20 24 7b 73 75 62 7d 20 7b 0a 09 09  h -- ${sub} {...
1f520 09 09 63 6c 65 61 72 20 7b 0a 09 09 09 09 09 72  ..clear {......r
1f530 65 74 75 72 6e 20 5b 53 65 6c 65 63 74 69 6f 6e  eturn [Selection
1f540 4f 70 74 73 20 5c 0a 09 09 09 09 09 24 7b 74 65  Opts \......${te
1f550 78 74 7d 20 24 7b 73 74 61 72 74 7d 20 24 7b 65  xt} ${start} ${e
1f560 6e 64 7d 20 24 7b 6c 69 6e 65 7d 20 24 7b 70 6f  nd} ${line} ${po
1f570 73 7d 20 24 7b 6d 6f 64 7d 20 7b 0a 09 09 09 09  s} ${mod} {.....
1f580 09 09 2d 64 69 73 70 6c 61 79 6f 66 20 2d 73 65  ..-displayof -se
1f590 6c 65 63 74 69 6f 6e 0a 09 09 09 09 09 7d 5d 0a  lection......}].
1f5a0 09 09 09 09 7d 0a 09 09 09 09 67 65 74 20 7b 0a  ....}.....get {.
1f5b0 09 09 09 09 09 72 65 74 75 72 6e 20 5b 53 65 6c  .....return [Sel
1f5c0 65 63 74 69 6f 6e 4f 70 74 73 20 5c 0a 09 09 09  ectionOpts \....
1f5d0 09 09 24 7b 74 65 78 74 7d 20 24 7b 73 74 61 72  ..${text} ${star
1f5e0 74 7d 20 24 7b 65 6e 64 7d 20 24 7b 6c 69 6e 65  t} ${end} ${line
1f5f0 7d 20 24 7b 70 6f 73 7d 20 24 7b 6d 6f 64 7d 20  } ${pos} ${mod} 
1f600 7b 0a 09 09 09 09 09 09 2d 64 69 73 70 6c 61 79  {.......-display
1f610 6f 66 20 2d 73 65 6c 65 63 74 69 6f 6e 20 2d 74  of -selection -t
1f620 79 70 65 0a 09 09 09 09 09 7d 5d 0a 09 09 09 09  ype......}].....
1f630 7d 0a 09 09 09 09 68 61 6e 64 6c 65 20 7b 0a 09  }.....handle {..
1f640 09 09 09 09 72 65 74 75 72 6e 20 5b 53 65 6c 65  ....return [Sele
1f650 63 74 69 6f 6e 4f 70 74 73 20 5c 0a 09 09 09 09  ctionOpts \.....
1f660 09 24 7b 74 65 78 74 7d 20 24 7b 73 74 61 72 74  .${text} ${start
1f670 7d 20 24 7b 65 6e 64 7d 20 24 7b 6c 69 6e 65 7d  } ${end} ${line}
1f680 20 24 7b 70 6f 73 7d 20 24 7b 6d 6f 64 7d 20 5c   ${pos} ${mod} \
1f690 0a 09 09 09 09 09 5b 63 6f 6e 63 61 74 20 7b 2d  ......[concat {-
1f6a0 73 65 6c 65 63 74 69 6f 6e 20 2d 74 79 70 65 20  selection -type 
1f6b0 2d 66 6f 72 6d 61 74 7d 20 24 7b 77 69 64 67 65  -format} ${widge
1f6c0 74 73 7d 5d 5d 0a 09 09 09 09 7d 0a 09 09 09 09  ts}]].....}.....
1f6d0 6f 77 6e 20 7b 0a 09 09 09 09 09 72 65 74 75 72  own {......retur
1f6e0 6e 20 5b 53 65 6c 65 63 74 69 6f 6e 4f 70 74 73  n [SelectionOpts
1f6f0 20 5c 0a 09 09 09 09 09 24 7b 74 65 78 74 7d 20   \......${text} 
1f700 24 7b 73 74 61 72 74 7d 20 24 7b 65 6e 64 7d 20  ${start} ${end} 
1f710 24 7b 6c 69 6e 65 7d 20 24 7b 70 6f 73 7d 20 24  ${line} ${pos} $
1f720 7b 6d 6f 64 7d 20 5c 0a 09 09 09 09 09 5b 63 6f  {mod} \......[co
1f730 6e 63 61 74 20 7b 2d 63 6f 6d 6d 61 6e 64 20 2d  ncat {-command -
1f740 73 65 6c 65 63 74 69 6f 6e 7d 20 24 7b 77 69 64  selection} ${wid
1f750 67 65 74 73 7d 5d 5d 0a 09 09 09 09 7d 0a 09 09  gets}]].....}...
1f760 09 7d 0a 09 09 7d 0a 09 7d 0a 7d 0a 0a 70 72 6f  .}...}..}.}..pro
1f770 63 20 63 6f 6d 70 6c 65 74 65 28 73 65 6e 64 29  c complete(send)
1f780 20 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64   {text start end
1f790 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b   line pos mod} {
1f7a0 0a 09 73 65 74 20 70 72 65 76 20 5b 50 72 65 76  ..set prev [Prev
1f7b0 69 6f 75 73 57 6f 72 64 20 24 7b 73 74 61 72 74  iousWord ${start
1f7c0 7d 20 24 7b 6c 69 6e 65 7d 5d 0a 09 69 66 20 7b  } ${line}]..if {
1f7d0 22 2d 64 69 73 70 6c 61 79 6f 66 22 20 3d 3d 20  "-displayof" == 
1f7e0 24 7b 70 72 65 76 7d 7d 20 7b 0a 09 09 72 65 74  ${prev}} {...ret
1f7f0 75 72 6e 20 5b 54 72 79 46 72 6f 6d 4c 69 73 74  urn [TryFromList
1f800 20 24 7b 74 65 78 74 7d 20 5b 57 69 64 67 65 74   ${text} [Widget
1f810 43 68 69 6c 64 72 65 6e 20 24 7b 74 65 78 74 7d  Children ${text}
1f820 5d 5d 0a 09 7d 0a 09 73 65 74 20 63 6d 64 73 20  ]]..}..set cmds 
1f830 5b 52 65 6d 6f 76 65 55 73 65 64 4f 70 74 69 6f  [RemoveUsedOptio
1f840 6e 73 20 24 7b 6c 69 6e 65 7d 20 7b 0a 09 09 2d  ns ${line} {...-
1f850 61 73 79 6e 63 20 2d 64 69 73 70 6c 61 79 6f 66  async -displayof
1f860 20 2d 2d 0a 09 7d 20 7b 2d 2d 7d 5d 0a 09 69 66   --..} {--}]..if
1f870 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 7b 63 6d 64   {[llength ${cmd
1f880 73 7d 5d 7d 20 7b 0a 09 09 72 65 74 75 72 6e 20  s}]} {...return 
1f890 5b 73 74 72 69 6e 67 20 74 72 69 6d 20 5b 43 6f  [string trim [Co
1f8a0 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24  mpleteFromList $
1f8b0 7b 74 65 78 74 7d 20 5c 0a 09 09 5b 63 6f 6e 63  {text} \...[conc
1f8c0 61 74 20 24 7b 63 6d 64 73 7d 20 3c 61 70 70 3e  at ${cmds} <app>
1f8d0 5d 5d 5d 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 09  ]]]..} else {...
1f8e0 69 66 20 7b 5b 72 65 67 65 78 70 20 2d 2d 20 2d  if {[regexp -- -
1f8f0 2d 24 20 24 7b 6c 69 6e 65 7d 5d 7d 20 7b 0a 09  -$ ${line}]} {..
1f900 09 09 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 7b  ..return [list {
1f910 2d 2d 7d 5d 3b 20 23 20 61 70 70 65 6e 64 20 61  --}]; # append a
1f920 20 62 6c 61 6e 6b 0a 09 09 7d 20 65 6c 73 65 20   blank...} else 
1f930 7b 0a 09 09 09 23 20 54 4f 44 4f 20 6d 61 6b 65  {....# TODO make
1f940 20 74 68 69 73 20 62 65 74 74 65 72 21 0a 09 09   this better!...
1f950 09 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79  .return [Display
1f960 48 69 6e 74 73 20 5b 6c 69 73 74 20 7b 3c 61 70  Hints [list {<ap
1f970 70 20 63 6d 64 20 3f 61 72 67 20 2e 2e 2e 3f 3e  p cmd ?arg ...?>
1f980 7d 5d 5d 0a 09 09 7d 0a 09 7d 0a 09 72 65 74 75  }]]...}..}..retu
1f990 72 6e 20 22 22 0a 7d 0a 0a 70 72 6f 63 20 63 6f  rn "".}..proc co
1f9a0 6d 70 6c 65 74 65 28 74 65 78 74 29 20 7b 74 65  mplete(text) {te
1f9b0 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e  xt start end lin
1f9c0 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73 77  e pos mod} {..sw
1f9d0 69 74 63 68 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b  itch -- ${pos} {
1f9e0 0a 09 09 31 20 7b 20 72 65 74 75 72 6e 20 5b 45  ...1 { return [E
1f9f0 76 65 6e 74 75 61 6c 6c 79 49 6e 73 65 72 74 4c  ventuallyInsertL
1fa00 65 61 64 69 6e 67 44 6f 74 20 24 7b 74 65 78 74  eadingDot ${text
1fa10 7d 20 3c 70 61 74 68 4e 61 6d 65 3e 5d 20 7d 0a  } <pathName>] }.
1fa20 09 09 64 65 66 61 75 6c 74 20 7b 0a 09 09 09 72  ..default {....r
1fa30 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 57  eturn [CompleteW
1fa40 69 64 67 65 74 43 6f 6e 66 69 67 75 72 61 74 69  idgetConfigurati
1fa50 6f 6e 73 20 24 7b 74 65 78 74 7d 20 24 7b 73 74  ons ${text} ${st
1fa60 61 72 74 7d 20 24 7b 6c 69 6e 65 7d 20 7b 0a 09  art} ${line} {..
1fa70 09 09 09 2d 62 61 63 6b 67 72 6f 75 6e 64 20 2d  ...-background -
1fa80 62 6f 72 64 65 72 77 69 64 74 68 20 2d 63 75 72  borderwidth -cur
1fa90 73 6f 72 20 2d 65 78 70 6f 72 74 73 65 6c 65 63  sor -exportselec
1faa0 74 69 6f 6e 20 2d 66 6f 6e 74 0a 09 09 09 09 2d  tion -font.....-
1fab0 66 6f 72 65 67 72 6f 75 6e 64 20 2d 68 69 67 68  foreground -high
1fac0 6c 69 67 68 74 62 61 63 6b 67 72 6f 75 6e 64 20  lightbackground 
1fad0 2d 68 69 67 68 6c 69 67 68 74 63 6f 6c 6f 72 0a  -highlightcolor.
1fae0 09 09 09 09 2d 68 69 67 68 6c 69 67 68 74 74 68  ....-highlightth
1faf0 69 63 6b 6e 65 73 73 20 2d 69 6e 73 65 72 74 62  ickness -insertb
1fb00 61 63 6b 67 72 6f 75 6e 64 20 2d 69 6e 73 65 72  ackground -inser
1fb10 74 62 6f 72 64 65 72 77 69 64 74 68 0a 09 09 09  tborderwidth....
1fb20 09 2d 69 6e 73 65 72 74 6f 66 66 74 69 6d 65 20  .-insertofftime 
1fb30 2d 69 6e 73 65 72 74 6f 6e 74 69 6d 65 20 2d 69  -insertontime -i
1fb40 6e 73 65 72 74 77 69 64 74 68 20 2d 70 61 64 78  nsertwidth -padx
1fb50 20 2d 70 61 64 79 0a 09 09 09 09 2d 72 65 6c 69   -pady.....-reli
1fb60 65 66 20 2d 73 65 6c 65 63 74 62 61 63 6b 67 72  ef -selectbackgr
1fb70 6f 75 6e 64 20 2d 73 65 6c 65 63 74 62 6f 72 64  ound -selectbord
1fb80 65 72 77 69 64 74 68 0a 09 09 09 09 2d 73 65 6c  erwidth.....-sel
1fb90 65 63 74 66 6f 72 65 67 72 6f 75 6e 64 20 2d 73  ectforeground -s
1fba0 65 74 67 72 69 64 20 2d 74 61 6b 65 66 6f 63 75  etgrid -takefocu
1fbb0 73 20 2d 78 73 63 72 6f 6c 6c 63 6f 6d 6d 61 6e  s -xscrollcomman
1fbc0 64 0a 09 09 09 09 2d 79 73 63 72 6f 6c 6c 63 6f  d.....-yscrollco
1fbd0 6d 6d 61 6e 64 20 2d 68 65 69 67 68 74 20 2d 73  mmand -height -s
1fbe0 70 61 63 69 6e 67 31 20 2d 73 70 61 63 69 6e 67  pacing1 -spacing
1fbf0 32 20 2d 73 70 61 63 69 6e 67 33 0a 09 09 09 09  2 -spacing3.....
1fc00 2d 73 74 61 74 65 20 2d 74 61 62 73 20 2d 77 69  -state -tabs -wi
1fc10 64 74 68 20 2d 77 72 61 70 0a 09 09 09 7d 5d 0a  dth -wrap....}].
1fc20 09 09 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22  ..}..}..return "
1fc30 22 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65  ".}..proc comple
1fc40 74 65 28 74 6b 29 20 7b 74 65 78 74 20 73 74 61  te(tk) {text sta
1fc50 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20  rt end line pos 
1fc60 6d 6f 64 7d 20 7b 0a 09 73 77 69 74 63 68 20 2d  mod} {..switch -
1fc70 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09 09 31 20 7b  - ${pos} {...1 {
1fc80 0a 09 09 09 72 65 74 75 72 6e 20 5b 54 72 79 53  ....return [TryS
1fc90 75 62 43 6d 64 73 20 24 7b 74 65 78 74 7d 20 5b  ubCmds ${text} [
1fca0 4c 69 6e 64 65 78 20 24 7b 6c 69 6e 65 7d 20 30  Lindex ${line} 0
1fcb0 5d 5d 0a 09 09 7d 0a 09 09 64 65 66 61 75 6c 74  ]]...}...default
1fcc0 20 7b 0a 09 09 09 73 77 69 74 63 68 20 2d 2d 20   {....switch -- 
1fcd0 5b 4c 69 6e 64 65 78 20 24 7b 6c 69 6e 65 7d 20  [Lindex ${line} 
1fce0 31 5d 20 7b 0a 09 09 09 09 61 70 70 6e 61 6d 65  1] {.....appname
1fcf0 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
1fd00 61 79 48 69 6e 74 73 20 3f 6e 65 77 4e 61 6d 65  ayHints ?newName
1fd10 3f 5d 20 20 7d 0a 09 09 09 09 73 63 61 6c 69 6e  ?]  }.....scalin
1fd20 67 20 7b 0a 09 09 09 09 09 73 77 69 74 63 68 20  g {......switch 
1fd30 2d 2d 20 5b 50 72 65 76 69 6f 75 73 57 6f 72 64  -- [PreviousWord
1fd40 20 24 7b 73 74 61 72 74 7d 20 24 7b 6c 69 6e 65   ${start} ${line
1fd50 7d 5d 20 7b 0a 09 09 09 09 09 09 2d 64 69 73 70  }] {.......-disp
1fd60 6c 61 79 6f 66 20 7b 0a 09 09 09 09 09 09 09 72  layof {........r
1fd70 65 74 75 72 6e 20 5b 54 72 79 46 72 6f 6d 4c 69  eturn [TryFromLi
1fd80 73 74 20 24 7b 74 65 78 74 7d 20 5c 0a 09 09 09  st ${text} \....
1fd90 09 09 09 09 5b 57 69 64 67 65 74 43 68 69 6c 64  ....[WidgetChild
1fda0 72 65 6e 20 24 7b 74 65 78 74 7d 5d 5d 0a 09 09  ren ${text}]]...
1fdb0 09 09 09 09 7d 0a 09 09 09 09 09 09 64 65 66 61  ....}.......defa
1fdc0 75 6c 74 20 7b 0a 09 09 09 09 09 09 09 72 65 74  ult {........ret
1fdd0 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f  urn [CompleteFro
1fde0 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 5c 0a  mList ${text} \.
1fdf0 09 09 09 09 09 09 09 5b 52 65 6d 6f 76 65 55 73  .......[RemoveUs
1fe00 65 64 4f 70 74 69 6f 6e 73 20 24 7b 6c 69 6e 65  edOptions ${line
1fe10 7d 20 7b 2d 64 69 73 70 6c 61 79 6f 66 20 3f 6e  } {-displayof ?n
1fe20 75 6d 62 65 72 3f 7d 5d 5d 0a 09 09 09 09 09 09  umber?}]].......
1fe30 7d 0a 09 09 09 09 09 7d 0a 09 09 09 09 7d 0a 09  }......}.....}..
1fe40 09 09 7d 0a 09 09 7d 0a 09 7d 0a 7d 0a 0a 23 20  ..}...}..}.}..# 
1fe50 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 74 6b  proc complete(tk
1fe60 5f 62 69 73 71 75 65 29 20 7b 74 65 78 74 20 73  _bisque) {text s
1fe70 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f  tart end line po
1fe80 73 20 6d 6f 64 7d 20 7b 0a 23 20 7d 0a 0a 70 72  s mod} {.# }..pr
1fe90 6f 63 20 63 6f 6d 70 6c 65 74 65 28 74 6b 5f 63  oc complete(tk_c
1fea0 68 6f 6f 73 65 43 6f 6c 6f 72 29 20 7b 74 65 78  hooseColor) {tex
1feb0 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65  t start end line
1fec0 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73 77 69   pos mod} {..swi
1fed0 74 63 68 20 2d 2d 20 5b 50 72 65 76 69 6f 75 73  tch -- [Previous
1fee0 57 6f 72 64 20 24 7b 73 74 61 72 74 7d 20 24 7b  Word ${start} ${
1fef0 6c 69 6e 65 7d 5d 20 7b 0a 09 09 2d 69 6e 69 74  line}] {...-init
1ff00 69 61 6c 63 6f 6c 6f 72 20 7b 20 72 65 74 75 72  ialcolor { retur
1ff10 6e 20 5b 43 6f 6d 70 6c 65 74 65 43 6f 6c 6f 72  n [CompleteColor
1ff20 20 24 7b 74 65 78 74 7d 5d 20 7d 0a 09 09 2d 70   ${text}] }...-p
1ff30 61 72 65 6e 74 20 7b 20 72 65 74 75 72 6e 20 5b  arent { return [
1ff40 54 72 79 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65  TryFromList ${te
1ff50 78 74 7d 20 5b 57 69 64 67 65 74 43 68 69 6c 64  xt} [WidgetChild
1ff60 72 65 6e 20 24 7b 74 65 78 74 7d 5d 5d 20 7d 0a  ren ${text}]] }.
1ff70 09 09 2d 74 69 74 6c 65 20 7b 20 72 65 74 75 72  ..-title { retur
1ff80 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
1ff90 3c 73 74 72 69 6e 67 3e 5d 20 7d 0a 09 09 64 65  <string>] }...de
1ffa0 66 61 75 6c 74 20 7b 0a 09 09 09 72 65 74 75 72  fault {....retur
1ffb0 6e 20 5b 54 72 79 46 72 6f 6d 4c 69 73 74 20 24  n [TryFromList $
1ffc0 7b 74 65 78 74 7d 20 5c 0a 09 09 09 5b 52 65 6d  {text} \....[Rem
1ffd0 6f 76 65 55 73 65 64 4f 70 74 69 6f 6e 73 20 24  oveUsedOptions $
1ffe0 7b 6c 69 6e 65 7d 20 7b 2d 69 6e 69 74 69 61 6c  {line} {-initial
1fff0 63 6f 6c 6f 72 20 2d 70 61 72 65 6e 74 20 2d 74  color -parent -t
20000 69 74 6c 65 7d 5d 5d 0a 09 09 7d 0a 09 7d 0a 7d  itle}]]...}..}.}
20010 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28  ..proc complete(
20020 74 6b 5f 64 69 61 6c 6f 67 29 20 7b 74 65 78 74  tk_dialog) {text
20030 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20   start end line 
20040 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73 77 69 74  pos mod} {..swit
20050 63 68 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09  ch -- ${pos} {..
20060 09 31 20 7b 20 72 65 74 75 72 6e 20 5b 43 6f 6d  .1 { return [Com
20070 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b  pleteFromList ${
20080 74 65 78 74 7d 20 5b 54 6f 70 6c 65 76 65 6c 57  text} [ToplevelW
20090 69 6e 64 6f 77 73 5d 5d 20 7d 0a 09 09 32 20 7b  indows]] }...2 {
200a0 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
200b0 48 69 6e 74 73 20 3c 74 69 74 6c 65 3e 5d 20 7d  Hints <title>] }
200c0 0a 09 09 33 20 7b 20 72 65 74 75 72 6e 20 5b 44  ...3 { return [D
200d0 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 74 65 78  isplayHints <tex
200e0 74 3e 5d 20 7d 0a 09 09 34 20 7b 20 72 65 74 75  t>] }...4 { retu
200f0 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d  rn [CompleteFrom
20100 42 69 74 6d 61 70 73 20 24 7b 74 65 78 74 7d 5d  Bitmaps ${text}]
20110 20 7d 0a 09 09 35 20 7b 20 72 65 74 75 72 6e 20   }...5 { return 
20120 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 64  [DisplayHints <d
20130 65 66 61 75 6c 74 49 6e 64 65 78 3e 5d 20 7d 0a  efaultIndex>] }.
20140 09 09 64 65 66 61 75 6c 74 20 7b 20 72 65 74 75  ..default { retu
20150 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
20160 20 3f 62 75 74 74 6f 6e 4e 61 6d 65 3f 5d 20 7d   ?buttonName?] }
20170 0a 09 7d 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70  ..}.}..proc comp
20180 6c 65 74 65 28 74 6b 5f 66 6f 63 75 73 4e 65 78  lete(tk_focusNex
20190 74 29 20 7b 74 65 78 74 20 73 74 61 72 74 20 65  t) {text start e
201a0 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d  nd line pos mod}
201b0 20 7b 0a 09 73 77 69 74 63 68 20 2d 2d 20 24 7b   {..switch -- ${
201c0 70 6f 73 7d 20 7b 0a 09 09 31 20 7b 20 72 65 74  pos} {...1 { ret
201d0 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f  urn [CompleteFro
201e0 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 5b 57  mList ${text} [W
201f0 69 64 67 65 74 43 68 69 6c 64 72 65 6e 20 24 7b  idgetChildren ${
20200 74 65 78 74 7d 5d 5d 20 7d 0a 09 7d 0a 7d 0a 0a  text}]] }..}.}..
20210 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 74 6b  proc complete(tk
20220 5f 66 6f 63 75 73 50 72 65 76 29 20 7b 74 65 78  _focusPrev) {tex
20230 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65  t start end line
20240 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73 77 69   pos mod} {..swi
20250 74 63 68 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a  tch -- ${pos} {.
20260 09 09 31 20 7b 20 72 65 74 75 72 6e 20 5b 43 6f  ..1 { return [Co
20270 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24  mpleteFromList $
20280 7b 74 65 78 74 7d 20 5b 57 69 64 67 65 74 43 68  {text} [WidgetCh
20290 69 6c 64 72 65 6e 20 24 7b 74 65 78 74 7d 5d 5d  ildren ${text}]]
202a0 20 7d 0a 09 7d 0a 7d 0a 0a 23 20 70 72 6f 63 20   }..}.}..# proc 
202b0 63 6f 6d 70 6c 65 74 65 28 74 6b 5f 66 6f 63 75  complete(tk_focu
202c0 73 46 6f 6c 6c 6f 77 73 4d 6f 75 73 65 29 20 7b  sFollowsMouse) {
202d0 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c  text start end l
202e0 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 23  ine pos mod} {.#
202f0 20 7d 0a 0a 70 72 6f 63 20 47 65 74 4f 70 65 6e   }..proc GetOpen
20300 53 61 76 65 46 69 6c 65 20 7b 74 65 78 74 20 73  SaveFile {text s
20310 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f  tart end line po
20320 73 20 6d 6f 64 20 7b 61 64 64 20 22 22 7d 7d 20  s mod {add ""}} 
20330 7b 0a 09 23 20 65 6e 61 62 6c 65 20 66 69 6c 65  {..# enable file
20340 6e 61 6d 65 20 63 6f 6d 70 6c 65 74 69 6f 6e 20  name completion 
20350 66 6f 72 20 74 68 65 20 66 69 72 73 74 20 66 6f  for the first fo
20360 75 72 20 73 77 69 74 63 68 65 73 2e 0a 09 73 77  ur switches...sw
20370 69 74 63 68 20 2d 2d 20 5b 50 72 65 76 69 6f 75  itch -- [Previou
20380 73 57 6f 72 64 20 24 7b 73 74 61 72 74 7d 20 24  sWord ${start} $
20390 7b 6c 69 6e 65 7d 5d 20 7b 0a 09 09 2d 64 65 66  {line}] {...-def
203a0 61 75 6c 74 65 78 74 65 6e 73 69 6f 6e 20 7b 7d  aultextension {}
203b0 0a 09 09 2d 66 69 6c 65 74 79 70 65 73 20 7b 7d  ...-filetypes {}
203c0 0a 09 09 2d 69 6e 69 74 69 61 6c 64 69 72 20 7b  ...-initialdir {
203d0 7d 0a 09 09 2d 69 6e 69 74 69 61 6c 66 69 6c 65  }...-initialfile
203e0 20 7b 7d 0a 09 09 2d 70 61 72 65 6e 74 20 7b 0a   {}...-parent {.
203f0 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c  ...return [Compl
20400 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65  eteFromList ${te
20410 78 74 7d 20 5b 57 69 64 67 65 74 43 68 69 6c 64  xt} [WidgetChild
20420 72 65 6e 20 24 7b 74 65 78 74 7d 5d 5d 0a 09 09  ren ${text}]]...
20430 7d 0a 09 09 2d 74 69 74 6c 65 20 7b 20 72 65 74  }...-title { ret
20440 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
20450 73 20 3c 74 69 74 6c 65 53 74 72 69 6e 67 3e 5d  s <titleString>]
20460 20 7d 0a 09 09 64 65 66 61 75 6c 74 20 7b 0a 09   }...default {..
20470 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65  ..return [Comple
20480 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78  teFromList ${tex
20490 74 7d 20 5c 0a 09 09 09 5b 52 65 6d 6f 76 65 55  t} \....[RemoveU
204a0 73 65 64 4f 70 74 69 6f 6e 73 20 24 7b 6c 69 6e  sedOptions ${lin
204b0 65 7d 20 5b 63 6f 6e 63 61 74 20 7b 0a 09 09 09  e} [concat {....
204c0 09 2d 64 65 66 61 75 6c 74 65 78 74 65 6e 73 69  .-defaultextensi
204d0 6f 6e 20 2d 66 69 6c 65 74 79 70 65 73 20 2d 69  on -filetypes -i
204e0 6e 69 74 69 61 6c 64 69 72 20 2d 70 61 72 65 6e  nitialdir -paren
204f0 74 20 2d 74 69 74 6c 65 0a 09 09 09 7d 20 24 7b  t -title....} ${
20500 61 64 64 7d 5d 5d 5d 0a 09 09 7d 0a 09 7d 0a 7d  add}]]]...}..}.}
20510 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28  ..proc complete(
20520 74 6b 5f 67 65 74 4f 70 65 6e 46 69 6c 65 29 20  tk_getOpenFile) 
20530 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20  {text start end 
20540 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a  line pos mod} {.
20550 09 72 65 74 75 72 6e 20 5b 47 65 74 4f 70 65 6e  .return [GetOpen
20560 53 61 76 65 46 69 6c 65 20 5c 0a 09 24 7b 74 65  SaveFile \..${te
20570 78 74 7d 20 24 7b 73 74 61 72 74 7d 20 24 7b 65  xt} ${start} ${e
20580 6e 64 7d 20 24 7b 6c 69 6e 65 7d 20 24 7b 70 6f  nd} ${line} ${po
20590 73 7d 20 24 7b 6d 6f 64 7d 5d 0a 7d 0a 0a 70 72  s} ${mod}].}..pr
205a0 6f 63 20 63 6f 6d 70 6c 65 74 65 28 74 6b 5f 67  oc complete(tk_g
205b0 65 74 53 61 76 65 46 69 6c 65 29 20 7b 74 65 78  etSaveFile) {tex
205c0 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65  t start end line
205d0 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 72 65 74   pos mod} {..ret
205e0 75 72 6e 20 5b 47 65 74 4f 70 65 6e 53 61 76 65  urn [GetOpenSave
205f0 46 69 6c 65 20 5c 0a 09 24 7b 74 65 78 74 7d 20  File \..${text} 
20600 24 7b 73 74 61 72 74 7d 20 24 7b 65 6e 64 7d 20  ${start} ${end} 
20610 24 7b 6c 69 6e 65 7d 20 24 7b 70 6f 73 7d 20 24  ${line} ${pos} $
20620 7b 6d 6f 64 7d 20 2d 69 6e 69 74 69 61 6c 66 69  {mod} -initialfi
20630 6c 65 5d 0a 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70  le].}..proc comp
20640 6c 65 74 65 28 74 6b 5f 6d 65 73 73 61 67 65 42  lete(tk_messageB
20650 6f 78 29 20 7b 74 65 78 74 20 73 74 61 72 74 20  ox) {text start 
20660 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64  end line pos mod
20670 7d 20 7b 0a 09 73 77 69 74 63 68 20 2d 2d 20 5b  } {..switch -- [
20680 50 72 65 76 69 6f 75 73 57 6f 72 64 20 24 7b 73  PreviousWord ${s
20690 74 61 72 74 7d 20 24 7b 6c 69 6e 65 7d 5d 20 7b  tart} ${line}] {
206a0 0a 09 09 2d 64 65 66 61 75 6c 74 20 7b 0a 09 09  ...-default {...
206b0 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74  .return [Complet
206c0 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74  eFromList ${text
206d0 7d 20 7b 0a 09 09 09 09 61 62 6f 72 74 20 63 61  } {.....abort ca
206e0 6e 63 65 6c 20 69 67 6e 6f 72 65 20 6e 6f 20 6f  ncel ignore no o
206f0 6b 20 72 65 74 72 79 20 79 65 73 0a 09 09 09 7d  k retry yes....}
20700 5d 0a 09 09 7d 0a 09 09 2d 69 63 6f 6e 20 7b 0a  ]...}...-icon {.
20710 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c  ...return [Compl
20720 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65  eteFromList ${te
20730 78 74 7d 20 7b 0a 09 09 09 09 65 72 72 6f 72 20  xt} {.....error 
20740 69 6e 66 6f 20 71 75 65 73 74 69 6f 6e 20 77 61  info question wa
20750 72 6e 69 6e 67 0a 09 09 09 7d 5d 0a 09 09 7d 0a  rning....}]...}.
20760 09 09 2d 6d 65 73 73 61 67 65 20 7b 20 72 65 74  ..-message { ret
20770 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
20780 73 20 3c 73 74 72 69 6e 67 3e 5d 20 7d 0a 09 09  s <string>] }...
20790 2d 70 61 72 65 6e 74 20 7b 0a 09 09 09 72 65 74  -parent {....ret
207a0 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f  urn [CompleteFro
207b0 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 5b 57  mList ${text} [W
207c0 69 64 67 65 74 43 68 69 6c 64 72 65 6e 20 24 7b  idgetChildren ${
207d0 74 65 78 74 7d 5d 5d 0a 09 09 7d 0a 09 09 2d 74  text}]]...}...-t
207e0 69 74 6c 65 20 7b 20 72 65 74 75 72 6e 20 5b 44  itle { return [D
207f0 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 74 69 74  isplayHints <tit
20800 6c 65 53 74 72 69 6e 67 3e 5d 20 7d 0a 09 09 2d  leString>] }...-
20810 74 79 70 65 20 7b 0a 09 09 09 72 65 74 75 72 6e  type {....return
20820 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69   [CompleteFromLi
20830 73 74 20 24 7b 74 65 78 74 7d 20 7b 0a 09 09 09  st ${text} {....
20840 09 61 62 6f 72 74 72 65 74 72 79 69 67 6e 6f 72  .abortretryignor
20850 65 20 6f 6b 20 6f 6b 63 61 6e 63 65 6c 20 72 65  e ok okcancel re
20860 74 72 79 63 61 6e 63 65 6c 20 79 65 73 6e 6f 20  trycancel yesno 
20870 79 65 73 6e 6f 63 61 6e 63 65 6c 0a 09 09 09 7d  yesnocancel....}
20880 5d 0a 09 09 7d 0a 09 09 64 65 66 61 75 6c 74 20  ]...}...default 
20890 7b 0a 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d  {....return [Com
208a0 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b  pleteFromList ${
208b0 74 65 78 74 7d 20 5c 0a 09 09 09 5b 52 65 6d 6f  text} \....[Remo
208c0 76 65 55 73 65 64 4f 70 74 69 6f 6e 73 20 24 7b  veUsedOptions ${
208d0 6c 69 6e 65 7d 20 7b 0a 09 09 09 09 2d 64 65 66  line} {.....-def
208e0 61 75 6c 74 20 2d 69 63 6f 6e 20 2d 6d 65 73 73  ault -icon -mess
208f0 61 67 65 20 2d 70 61 72 65 6e 74 20 2d 74 69 74  age -parent -tit
20900 6c 65 20 2d 74 79 70 65 0a 09 09 09 7d 5d 5d 0a  le -type....}]].
20910 09 09 7d 0a 09 7d 0a 7d 0a 0a 70 72 6f 63 20 63  ..}..}.}..proc c
20920 6f 6d 70 6c 65 74 65 28 74 6b 5f 6f 70 74 69 6f  omplete(tk_optio
20930 6e 4d 65 6e 75 29 20 7b 74 65 78 74 20 73 74 61  nMenu) {text sta
20940 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20  rt end line pos 
20950 6d 6f 64 7d 20 7b 0a 09 73 77 69 74 63 68 20 2d  mod} {..switch -
20960 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09 09 31 20 7b  - ${pos} {...1 {
20970 20 72 65 74 75 72 6e 20 5b 45 76 65 6e 74 75 61   return [Eventua
20980 6c 6c 79 49 6e 73 65 72 74 4c 65 61 64 69 6e 67  llyInsertLeading
20990 44 6f 74 20 24 7b 74 65 78 74 7d 20 3c 70 61 74  Dot ${text} <pat
209a0 68 4e 61 6d 65 3e 5d 20 7d 0a 09 09 32 20 7b 20  hName>] }...2 { 
209b0 72 65 74 75 72 6e 20 5b 56 61 72 43 6f 6d 70 6c  return [VarCompl
209c0 65 74 69 6f 6e 20 24 7b 74 65 78 74 7d 20 23 30  etion ${text} #0
209d0 5d 20 7d 0a 09 09 33 20 7b 20 72 65 74 75 72 6e  ] }...3 { return
209e0 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c   [DisplayHints <
209f0 76 61 6c 75 65 3e 5d 20 7d 0a 09 09 64 65 66 61  value>] }...defa
20a00 75 6c 74 20 7b 20 72 65 74 75 72 6e 20 5b 44 69  ult { return [Di
20a10 73 70 6c 61 79 48 69 6e 74 73 20 3f 76 61 6c 75  splayHints ?valu
20a20 65 3f 5d 20 7d 0a 09 7d 0a 7d 0a 0a 70 72 6f 63  e?] }..}.}..proc
20a30 20 63 6f 6d 70 6c 65 74 65 28 74 6b 5f 70 6f 70   complete(tk_pop
20a40 75 70 29 20 7b 74 65 78 74 20 73 74 61 72 74 20  up) {text start 
20a50 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64  end line pos mod
20a60 7d 20 7b 0a 09 73 77 69 74 63 68 20 2d 2d 20 24  } {..switch -- $
20a70 7b 70 6f 73 7d 20 7b 0a 09 09 31 20 7b 0a 09 09  {pos} {...1 {...
20a80 09 23 20 64 69 73 70 6c 61 79 20 6f 6e 6c 79 20  .# display only 
20a90 6d 65 6e 75 20 77 69 64 67 65 74 73 0a 09 09 09  menu widgets....
20aa0 23 0a 09 09 09 73 65 74 20 77 69 64 67 65 74 73  #....set widgets
20ab0 20 5b 57 69 64 67 65 74 43 68 69 6c 64 72 65 6e   [WidgetChildren
20ac0 20 24 7b 74 65 78 74 7d 5d 0a 09 09 09 73 65 74   ${text}]....set
20ad0 20 6d 65 6e 75 5f 77 69 64 67 65 74 73 20 22 22   menu_widgets ""
20ae0 0a 09 09 09 66 6f 72 65 61 63 68 20 77 69 64 67  ....foreach widg
20af0 65 74 20 24 7b 77 69 64 67 65 74 73 7d 20 7b 0a  et ${widgets} {.
20b00 09 09 09 09 69 66 20 7b 22 4d 65 6e 75 22 20 3d  ....if {"Menu" =
20b10 3d 20 5b 77 69 6e 66 6f 20 63 6c 61 73 73 20 24  = [winfo class $
20b20 7b 77 69 64 67 65 74 7d 5d 7d 20 7b 0a 09 09 09  {widget}]} {....
20b30 09 09 6c 61 70 70 65 6e 64 20 6d 65 6e 75 5f 77  ..lappend menu_w
20b40 69 64 67 65 74 73 20 24 7b 77 69 64 67 65 74 7d  idgets ${widget}
20b50 0a 09 09 09 09 7d 0a 09 09 09 7d 0a 09 09 09 69  .....}....}....i
20b60 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 7b 6d 65  f {[llength ${me
20b70 6e 75 5f 77 69 64 67 65 74 73 7d 5d 7d 20 7b 0a  nu_widgets}]} {.
20b80 09 09 09 09 72 65 74 75 72 6e 20 5b 54 72 79 46  ....return [TryF
20b90 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20  romList ${text} 
20ba0 24 7b 6d 65 6e 75 5f 77 69 64 67 65 74 73 7d 5d  ${menu_widgets}]
20bb0 0a 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09  ....} else {....
20bc0 09 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79  .return [Display
20bd0 48 69 6e 74 73 20 3c 6d 65 6e 75 3e 5d 0a 09 09  Hints <menu>]...
20be0 09 7d 0a 09 09 7d 0a 09 09 32 20 7b 20 72 65 74  .}...}...2 { ret
20bf0 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
20c00 73 20 3c 78 3e 5d 20 7d 0a 09 09 33 20 7b 20 72  s <x>] }...3 { r
20c10 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
20c20 6e 74 73 20 3c 79 3e 5d 20 7d 0a 09 09 34 20 7b  nts <y>] }...4 {
20c30 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
20c40 48 69 6e 74 73 20 3f 65 6e 74 72 79 49 6e 64 65  Hints ?entryInde
20c50 78 3f 5d 20 7d 0a 09 7d 0a 7d 0a 0a 23 20 54 4f  x?] }..}.}..# TO
20c60 44 4f 3a 20 74 68 65 20 6e 61 6d 65 20 2d 20 76  DO: the name - v
20c70 61 6c 75 65 20 63 6f 6e 73 74 72 75 63 74 20 64  alue construct d
20c80 69 64 6e 27 74 20 77 6f 72 6b 20 69 6e 20 6d 79  idn't work in my
20c90 20 77 69 73 68 2e 0a 23 0a 70 72 6f 63 20 63 6f   wish..#.proc co
20ca0 6d 70 6c 65 74 65 28 74 6b 5f 73 65 74 50 61 6c  mplete(tk_setPal
20cb0 65 74 74 65 29 20 7b 74 65 78 74 20 73 74 61 72  ette) {text star
20cc0 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d  t end line pos m
20cd0 6f 64 7d 20 7b 0a 09 73 65 74 20 64 61 74 61 62  od} {..set datab
20ce0 61 73 65 20 7b 0a 09 09 61 63 74 69 76 65 42 61  ase {...activeBa
20cf0 63 6b 67 72 6f 75 6e 64 20 20 20 20 20 20 20 20  ckground        
20d00 66 6f 72 65 67 72 6f 75 6e 64 20 20 20 20 20 20  foreground      
20d10 20 20 20 20 20 20 20 20 73 65 6c 65 63 74 43 6f          selectCo
20d20 6c 6f 72 0a 09 09 61 63 74 69 76 65 46 6f 72 65  lor...activeFore
20d30 67 72 6f 75 6e 64 20 20 20 20 20 20 20 20 68 69  ground        hi
20d40 67 68 6c 69 67 68 74 42 61 63 6b 67 72 6f 75 6e  ghlightBackgroun
20d50 64 20 20 20 20 20 73 65 6c 65 63 74 42 61 63 6b  d     selectBack
20d60 67 72 6f 75 6e 64 0a 09 09 62 61 63 6b 67 72 6f  ground...backgro
20d70 75 6e 64 20 20 20 20 20 20 20 20 20 20 20 20 20  und             
20d80 20 68 69 67 68 6c 69 67 68 74 43 6f 6c 6f 72 20   highlightColor 
20d90 20 20 20 20 20 20 20 20 20 73 65 6c 65 63 74 46           selectF
20da0 6f 72 65 67 72 6f 75 6e 64 0a 09 09 64 69 73 61  oreground...disa
20db0 62 6c 65 64 46 6f 72 65 67 72 6f 75 6e 64 20 20  bledForeground  
20dc0 20 20 20 20 69 6e 73 65 72 74 42 61 63 6b 67 72      insertBackgr
20dd0 6f 75 6e 64 20 20 20 20 20 20 20 20 74 72 6f 75  ound        trou
20de0 67 68 43 6f 6c 6f 72 0a 09 7d 0a 09 73 77 69 74  ghColor..}..swit
20df0 63 68 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09  ch -- ${pos} {..
20e00 09 31 20 7b 0a 09 09 09 72 65 74 75 72 6e 20 5b  .1 {....return [
20e10 43 6f 6d 70 6c 65 74 65 43 6f 6c 6f 72 20 24 7b  CompleteColor ${
20e20 74 65 78 74 7d 20 24 7b 64 61 74 61 62 61 73 65  text} ${database
20e30 7d 5d 0a 09 09 7d 0a 09 09 64 65 66 61 75 6c 74  }]...}...default
20e40 20 7b 0a 09 09 09 73 77 69 74 63 68 20 5b 65 78   {....switch [ex
20e50 70 72 20 24 7b 70 6f 73 7d 20 25 20 32 5d 20 7b  pr ${pos} % 2] {
20e60 0a 09 09 09 09 31 20 7b 0a 09 09 09 09 09 72 65  .....1 {......re
20e70 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72  turn [CompleteFr
20e80 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 24  omList ${text} $
20e90 7b 64 61 74 61 62 61 73 65 7d 5d 0a 09 09 09 09  {database}].....
20ea0 7d 0a 09 09 09 09 30 20 7b 0a 09 09 09 09 09 72  }.....0 {......r
20eb0 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 43  eturn [CompleteC
20ec0 6f 6c 6f 72 20 24 7b 74 65 78 74 7d 5d 0a 09 09  olor ${text}]...
20ed0 09 09 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 7d 0a  ..}....}...}..}.
20ee0 7d 0a 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65  }..proc complete
20ef0 28 74 6b 77 61 69 74 29 20 7b 74 65 78 74 20 73  (tkwait) {text s
20f00 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f  tart end line po
20f10 73 20 6d 6f 64 7d 20 7b 0a 09 73 77 69 74 63 68  s mod} {..switch
20f20 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09 09 31   -- ${pos} {...1
20f30 20 7b 0a 09 09 09 72 65 74 75 72 6e 20 5b 43 6f   {....return [Co
20f40 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24  mpleteFromList $
20f50 7b 74 65 78 74 7d 20 7b 0a 09 09 09 09 76 61 72  {text} {.....var
20f60 69 61 62 6c 65 20 76 69 73 69 62 69 6c 69 74 79  iable visibility
20f70 20 77 69 6e 64 6f 77 0a 09 09 09 7d 5d 0a 09 09   window....}]...
20f80 7d 0a 09 09 32 20 7b 0a 09 09 09 73 77 69 74 63  }...2 {....switc
20f90 68 20 5b 4c 69 6e 64 65 78 20 24 7b 6c 69 6e 65  h [Lindex ${line
20fa0 7d 20 31 5d 20 7b 0a 09 09 09 09 76 61 72 69 61  } 1] {.....varia
20fb0 62 6c 65 20 7b 0a 09 09 09 09 09 72 65 74 75 72  ble {......retur
20fc0 6e 20 5b 56 61 72 43 6f 6d 70 6c 65 74 69 6f 6e  n [VarCompletion
20fd0 20 24 7b 74 65 78 74 7d 20 23 30 5d 0a 09 09 09   ${text} #0]....
20fe0 09 7d 0a 09 09 09 09 76 69 73 69 62 69 6c 69 74  .}.....visibilit
20ff0 79 20 2d 0a 09 09 09 09 77 69 6e 64 6f 77 20 7b  y -.....window {
21000 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b 54 72  ......return [Tr
21010 79 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74  yFromList ${text
21020 7d 20 5b 57 69 64 67 65 74 43 68 69 6c 64 72 65  } [WidgetChildre
21030 6e 20 24 7b 74 65 78 74 7d 5d 5d 0a 09 09 09 09  n ${text}]].....
21040 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 7d 0a 7d 0a  }....}...}..}.}.
21050 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 74  .proc complete(t
21060 6f 70 6c 65 76 65 6c 29 20 7b 74 65 78 74 20 73  oplevel) {text s
21070 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f  tart end line po
21080 73 20 6d 6f 64 7d 20 7b 0a 09 73 77 69 74 63 68  s mod} {..switch
21090 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09 09 31   -- ${pos} {...1
210a0 20 7b 20 72 65 74 75 72 6e 20 5b 45 76 65 6e 74   { return [Event
210b0 75 61 6c 6c 79 49 6e 73 65 72 74 4c 65 61 64 69  uallyInsertLeadi
210c0 6e 67 44 6f 74 20 24 7b 74 65 78 74 7d 20 3c 70  ngDot ${text} <p
210d0 61 74 68 4e 61 6d 65 3e 5d 20 7d 0a 09 09 64 65  athName>] }...de
210e0 66 61 75 6c 74 20 7b 0a 09 09 09 72 65 74 75 72  fault {....retur
210f0 6e 20 5b 43 6f 6d 70 6c 65 74 65 57 69 64 67 65  n [CompleteWidge
21100 74 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 20  tConfigurations 
21110 24 7b 74 65 78 74 7d 20 24 7b 73 74 61 72 74 7d  ${text} ${start}
21120 20 24 7b 6c 69 6e 65 7d 20 7b 0a 09 09 09 09 2d   ${line} {.....-
21130 62 6f 72 64 65 72 77 69 64 74 68 20 2d 63 75 72  borderwidth -cur
21140 73 6f 72 20 2d 68 69 67 68 6c 69 67 68 74 62 61  sor -highlightba
21150 63 6b 67 72 6f 75 6e 64 20 2d 68 69 67 68 6c 69  ckground -highli
21160 67 68 74 63 6f 6c 6f 72 0a 09 09 09 09 2d 68 69  ghtcolor.....-hi
21170 67 68 6c 69 67 68 74 74 68 69 63 6b 6e 65 73 73  ghlightthickness
21180 20 2d 72 65 6c 69 65 66 20 2d 74 61 6b 65 66 6f   -relief -takefo
21190 63 75 73 20 2d 62 61 63 6b 67 72 6f 75 6e 64 0a  cus -background.
211a0 09 09 09 09 2d 63 6c 61 73 73 20 2d 63 6f 6c 6f  ....-class -colo
211b0 72 6d 61 70 20 2d 63 6f 6e 74 61 69 6e 65 72 20  rmap -container 
211c0 2d 68 65 69 67 68 74 20 2d 6d 65 6e 75 20 2d 73  -height -menu -s
211d0 63 72 65 65 6e 0a 09 09 09 09 2d 75 73 65 20 2d  creen.....-use -
211e0 76 69 73 75 61 6c 20 2d 77 69 64 74 68 0a 09 09  visual -width...
211f0 09 7d 5d 0a 09 09 7d 0a 09 7d 0a 09 72 65 74 75  .}]...}..}..retu
21200 72 6e 20 22 22 0a 7d 0a 0a 70 72 6f 63 20 63 6f  rn "".}..proc co
21210 6d 70 6c 65 74 65 28 77 69 6e 66 6f 29 20 7b 74  mplete(winfo) {t
21220 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69  ext start end li
21230 6e 65 20 70 6f 73 20 6d 6f 64 7d 20 7b 0a 09 73  ne pos mod} {..s
21240 65 74 20 73 75 62 20 5b 4c 69 6e 64 65 78 20 24  et sub [Lindex $
21250 7b 6c 69 6e 65 7d 20 31 5d 0a 09 73 77 69 74 63  {line} 1]..switc
21260 68 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09 09  h -- ${pos} {...
21270 31 20 7b 0a 09 09 09 72 65 74 75 72 6e 20 5b 54  1 {....return [T
21280 72 79 53 75 62 43 6d 64 73 20 24 7b 74 65 78 74  rySubCmds ${text
21290 7d 20 77 69 6e 66 6f 5d 0a 09 09 7d 0a 09 09 32  } winfo]...}...2
212a0 20 7b 0a 09 09 09 73 77 69 74 63 68 20 2d 2d 20   {....switch -- 
212b0 24 7b 73 75 62 7d 20 7b 0a 09 09 09 09 61 74 6f  ${sub} {.....ato
212c0 6d 20 7b 0a 09 09 09 09 09 72 65 74 75 72 6e 20  m {......return 
212d0 5b 54 72 79 46 72 6f 6d 4c 69 73 74 20 24 7b 74  [TryFromList ${t
212e0 65 78 74 7d 20 7b 2d 64 69 73 70 6c 61 79 6f 66  ext} {-displayof
212f0 20 3c 6e 61 6d 65 3e 7d 5d 0a 09 09 09 09 7d 0a   <name>}].....}.
21300 09 09 09 09 63 6f 6e 74 61 69 6e 69 6e 67 20 7b  ....containing {
21310 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b 54 72  ......return [Tr
21320 79 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74  yFromList ${text
21330 7d 20 7b 2d 64 69 73 70 6c 61 79 6f 66 20 3c 72  } {-displayof <r
21340 6f 6f 74 58 3e 7d 5d 0a 09 09 09 09 7d 0a 09 09  ootX>}].....}...
21350 09 09 69 6e 74 65 72 70 73 20 7b 0a 09 09 09 09  ..interps {.....
21360 09 72 65 74 75 72 6e 20 5b 54 72 79 46 72 6f 6d  .return [TryFrom
21370 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 2d 64 69  List ${text} -di
21380 73 70 6c 61 79 6f 66 5d 0a 09 09 09 09 7d 0a 09  splayof].....}..
21390 09 09 09 61 74 6f 6d 6e 61 6d 65 20 2d 0a 09 09  ...atomname -...
213a0 09 09 70 61 74 68 6e 61 6d 65 20 7b 0a 09 09 09  ..pathname {....
213b0 09 09 72 65 74 75 72 6e 20 5b 54 72 79 46 72 6f  ..return [TryFro
213c0 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 7b 2d  mList ${text} {-
213d0 64 69 73 70 6c 61 79 6f 66 20 3c 69 64 3e 7d 5d  displayof <id>}]
213e0 0a 09 09 09 09 7d 0a 09 09 09 09 64 65 66 61 75  .....}.....defau
213f0 6c 74 20 7b 0a 09 09 09 09 09 72 65 74 75 72 6e  lt {......return
21400 20 5b 54 72 79 46 72 6f 6d 4c 69 73 74 20 24 7b   [TryFromList ${
21410 74 65 78 74 7d 20 5b 57 69 64 67 65 74 43 68 69  text} [WidgetChi
21420 6c 64 72 65 6e 20 24 7b 74 65 78 74 7d 5d 5d 0a  ldren ${text}]].
21430 09 09 09 09 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09  ....}....}...}..
21440 09 64 65 66 61 75 6c 74 20 7b 0a 09 09 09 73 77  .default {....sw
21450 69 74 63 68 20 2d 2d 20 24 7b 73 75 62 7d 20 7b  itch -- ${sub} {
21460 0a 09 09 09 09 61 74 6f 6d 20 7b 0a 09 09 09 09  .....atom {.....
21470 09 73 77 69 74 63 68 20 2d 2d 20 5b 50 72 65 76  .switch -- [Prev
21480 69 6f 75 73 57 6f 72 64 20 24 7b 73 74 61 72 74  iousWord ${start
21490 7d 20 24 7b 6c 69 6e 65 7d 5d 20 7b 0a 09 09 09  } ${line}] {....
214a0 09 09 09 2d 64 69 73 70 6c 61 79 6f 66 20 7b 0a  ...-displayof {.
214b0 09 09 09 09 09 09 09 72 65 74 75 72 6e 20 5b 54  .......return [T
214c0 72 79 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78  ryFromList ${tex
214d0 74 7d 20 5c 0a 09 09 09 09 09 09 09 5b 57 69 64  t} \........[Wid
214e0 67 65 74 43 68 69 6c 64 72 65 6e 20 24 7b 74 65  getChildren ${te
214f0 78 74 7d 5d 5d 0a 09 09 09 09 09 09 7d 0a 09 09  xt}]].......}...
21500 09 09 09 09 64 65 66 61 75 6c 74 20 7b 20 72 65  ....default { re
21510 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
21520 74 73 20 3c 6e 61 6d 65 3e 5d 20 7d 0a 09 09 09  ts <name>] }....
21530 09 09 7d 0a 09 09 09 09 7d 0a 09 09 09 09 63 6f  ..}.....}.....co
21540 6e 74 61 69 6e 69 6e 67 20 7b 0a 09 09 09 09 09  ntaining {......
21550 73 77 69 74 63 68 20 2d 2d 20 5b 4c 69 6e 64 65  switch -- [Linde
21560 78 20 24 7b 6c 69 6e 65 7d 20 32 5d 20 7b 0a 09  x ${line} 2] {..
21570 09 09 09 09 09 2d 64 69 73 70 6c 61 79 6f 66 20  .....-displayof 
21580 7b 0a 09 09 09 09 09 09 09 73 77 69 74 63 68 20  {........switch 
21590 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09 09 09 09  -- ${pos} {.....
215a0 09 09 09 09 33 20 7b 0a 09 09 09 09 09 09 09 09  ....3 {.........
215b0 09 72 65 74 75 72 6e 20 5b 54 72 79 46 72 6f 6d  .return [TryFrom
215c0 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 5c 0a 09  List ${text} \..
215d0 09 09 09 09 09 09 09 09 5b 57 69 64 67 65 74 43  ........[WidgetC
215e0 68 69 6c 64 72 65 6e 20 24 7b 74 65 78 74 7d 5d  hildren ${text}]
215f0 5d 0a 09 09 09 09 09 09 09 09 7d 0a 09 09 09 09  ].........}.....
21600 09 09 09 09 34 20 7b 0a 09 09 09 09 09 09 09 09  ....4 {.........
21610 09 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79  .return [Display
21620 48 69 6e 74 73 20 3c 72 6f 6f 74 58 3e 5d 0a 09  Hints <rootX>]..
21630 09 09 09 09 09 09 09 7d 0a 09 09 09 09 09 09 09  .......}........
21640 09 35 20 7b 0a 09 09 09 09 09 09 09 09 09 72 65  .5 {..........re
21650 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
21660 74 73 20 3c 72 6f 6f 74 59 3e 5d 0a 09 09 09 09  ts <rootY>].....
21670 09 09 09 09 7d 0a 09 09 09 09 09 09 09 7d 0a 09  ....}........}..
21680 09 09 09 09 09 7d 0a 09 09 09 09 09 09 64 65 66  .....}.......def
21690 61 75 6c 74 20 7b 20 72 65 74 75 72 6e 20 5b 44  ault { return [D
216a0 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 72 6f 6f  isplayHints <roo
216b0 74 59 3e 5d 20 7d 0a 09 09 09 09 09 7d 0a 09 09  tY>] }......}...
216c0 09 09 7d 0a 09 09 09 09 69 6e 74 65 72 70 73 20  ..}.....interps 
216d0 7b 0a 09 09 09 09 09 73 77 69 74 63 68 20 2d 2d  {......switch --
216e0 20 5b 50 72 65 76 69 6f 75 73 57 6f 72 64 20 24   [PreviousWord $
216f0 7b 73 74 61 72 74 7d 20 24 7b 6c 69 6e 65 7d 5d  {start} ${line}]
21700 20 7b 0a 09 09 09 09 09 09 2d 64 69 73 70 6c 61   {.......-displa
21710 79 6f 66 20 7b 0a 09 09 09 09 09 09 09 72 65 74  yof {........ret
21720 75 72 6e 20 5b 54 72 79 46 72 6f 6d 4c 69 73 74  urn [TryFromList
21730 20 24 7b 74 65 78 74 7d 20 5c 0a 09 09 09 09 09   ${text} \......
21740 09 09 5b 57 69 64 67 65 74 43 68 69 6c 64 72 65  ..[WidgetChildre
21750 6e 20 24 7b 74 65 78 74 7d 5d 5d 0a 09 09 09 09  n ${text}]].....
21760 09 09 7d 0a 09 09 09 09 09 09 64 65 66 61 75 6c  ..}.......defaul
21770 74 20 7b 7d 0a 09 09 09 09 09 7d 0a 09 09 09 09  t {}......}.....
21780 7d 0a 09 09 09 09 61 74 6f 6d 6e 61 6d 65 20 2d  }.....atomname -
21790 0a 09 09 09 09 70 61 74 68 6e 61 6d 65 20 7b 0a  .....pathname {.
217a0 09 09 09 09 09 73 77 69 74 63 68 20 2d 2d 20 5b  .....switch -- [
217b0 50 72 65 76 69 6f 75 73 57 6f 72 64 20 24 7b 73  PreviousWord ${s
217c0 74 61 72 74 7d 20 24 7b 6c 69 6e 65 7d 5d 20 7b  tart} ${line}] {
217d0 0a 09 09 09 09 09 09 2d 64 69 73 70 6c 61 79 6f  .......-displayo
217e0 66 20 7b 0a 09 09 09 09 09 09 09 72 65 74 75 72  f {........retur
217f0 6e 20 5b 54 72 79 46 72 6f 6d 4c 69 73 74 20 24  n [TryFromList $
21800 7b 74 65 78 74 7d 20 5c 0a 09 09 09 09 09 09 09  {text} \........
21810 5b 57 69 64 67 65 74 43 68 69 6c 64 72 65 6e 20  [WidgetChildren 
21820 24 7b 74 65 78 74 7d 5d 5d 0a 09 09 09 09 09 09  ${text}]].......
21830 7d 0a 09 09 09 09 09 09 64 65 66 61 75 6c 74 20  }.......default 
21840 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
21850 79 48 69 6e 74 73 20 3c 69 64 3e 5d 20 7d 0a 09  yHints <id>] }..
21860 09 09 09 09 7d 0a 09 09 09 09 7d 0a 09 09 09 09  ....}.....}.....
21870 76 69 73 75 61 6c 73 61 76 61 69 6c 61 62 6c 65  visualsavailable
21880 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
21890 61 79 48 69 6e 74 73 20 3f 69 6e 63 6c 75 64 65  ayHints ?include
218a0 69 64 73 3f 5d 20 7d 0a 09 09 09 09 64 65 66 61  ids?] }.....defa
218b0 75 6c 74 20 7b 0a 09 09 09 09 09 72 65 74 75 72  ult {......retur
218c0 6e 20 5b 54 72 79 46 72 6f 6d 4c 69 73 74 20 24  n [TryFromList $
218d0 7b 74 65 78 74 7d 20 5b 57 69 64 67 65 74 43 68  {text} [WidgetCh
218e0 69 6c 64 72 65 6e 20 24 7b 74 65 78 74 7d 5d 5d  ildren ${text}]]
218f0 0a 09 09 09 09 7d 0a 09 09 09 7d 0a 09 09 7d 0a  .....}....}...}.
21900 09 7d 0a 09 72 65 74 75 72 6e 20 22 22 0a 7d 0a  .}..return "".}.
21910 0a 70 72 6f 63 20 63 6f 6d 70 6c 65 74 65 28 77  .proc complete(w
21920 6d 29 20 7b 74 65 78 74 20 73 74 61 72 74 20 65  m) {text start e
21930 6e 64 20 6c 69 6e 65 20 70 6f 73 20 6d 6f 64 7d  nd line pos mod}
21940 20 7b 0a 09 73 65 74 20 73 75 62 20 5b 4c 69 6e   {..set sub [Lin
21950 64 65 78 20 24 7b 6c 69 6e 65 7d 20 31 5d 0a 09  dex ${line} 1]..
21960 73 77 69 74 63 68 20 2d 2d 20 24 7b 70 6f 73 7d  switch -- ${pos}
21970 20 7b 0a 09 09 31 20 7b 0a 09 09 09 72 65 74 75   {...1 {....retu
21980 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d  rn [CompleteFrom
21990 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 7b 0a 09  List ${text} {..
219a0 09 09 09 61 73 70 65 63 74 20 63 6c 69 65 6e 74  ...aspect client
219b0 20 63 6f 6c 6f 72 6d 61 70 77 69 6e 64 6f 77 73   colormapwindows
219c0 20 63 6f 6d 6d 61 6e 64 20 64 65 69 63 6f 6e 69   command deiconi
219d0 66 79 20 66 6f 63 75 73 6d 6f 64 65 6c 0a 09 09  fy focusmodel...
219e0 09 09 66 72 61 6d 65 20 67 65 6f 6d 65 74 72 79  ..frame geometry
219f0 20 67 72 69 64 20 67 72 6f 75 70 20 69 63 6f 6e   grid group icon
21a00 62 69 74 6d 61 70 20 69 63 6f 6e 69 66 79 20 69  bitmap iconify i
21a10 63 6f 6e 6d 61 73 6b 20 69 63 6f 6e 6e 61 6d 65  conmask iconname
21a20 0a 09 09 09 09 69 63 6f 6e 70 6f 73 69 74 69 6f  .....iconpositio
21a30 6e 20 69 63 6f 6e 77 69 6e 64 6f 77 20 6d 61 78  n iconwindow max
21a40 73 69 7a 65 20 6d 69 6e 73 69 7a 65 20 6f 76 65  size minsize ove
21a50 72 72 69 64 65 72 65 64 69 72 65 63 74 0a 09 09  rrideredirect...
21a60 09 09 70 6f 73 69 74 69 6f 6e 66 72 6f 6d 20 70  ..positionfrom p
21a70 72 6f 74 6f 63 6f 6c 20 72 65 73 69 7a 61 62 6c  rotocol resizabl
21a80 65 20 73 69 7a 65 66 72 6f 6d 20 73 74 61 74 65  e sizefrom state
21a90 20 74 69 74 6c 65 20 74 72 61 6e 73 69 65 6e 74   title transient
21aa0 0a 09 09 09 09 77 69 74 68 64 72 61 77 0a 09 09  .....withdraw...
21ab0 09 7d 5d 0a 09 09 7d 0a 09 09 32 20 7b 0a 09 09  .}]...}...2 {...
21ac0 09 72 65 74 75 72 6e 20 5b 54 72 79 46 72 6f 6d  .return [TryFrom
21ad0 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 5b 54 6f  List ${text} [To
21ae0 70 6c 65 76 65 6c 57 69 6e 64 6f 77 73 5d 5d 0a  plevelWindows]].
21af0 09 09 7d 0a 09 09 33 20 7b 0a 09 09 09 73 77 69  ..}...3 {....swi
21b00 74 63 68 20 2d 2d 20 24 7b 73 75 62 7d 20 7b 0a  tch -- ${sub} {.
21b10 09 09 09 09 61 73 70 65 63 74 20 7b 20 72 65 74  ....aspect { ret
21b20 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
21b30 73 20 3f 6d 69 6e 4e 75 6d 65 72 3f 5d 20 7d 0a  s ?minNumer?] }.
21b40 09 09 09 09 63 6c 69 65 6e 74 20 7b 20 72 65 74  ....client { ret
21b50 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
21b60 73 20 3f 6e 61 6d 65 3f 5d 20 7d 0a 09 09 09 09  s ?name?] }.....
21b70 63 6f 6c 6f 72 6d 61 70 77 69 6e 64 6f 77 73 20  colormapwindows 
21b80 7b 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b 43  {......return [C
21b90 6f 6d 70 6c 65 74 65 4c 69 73 74 46 72 6f 6d 4c  ompleteListFromL
21ba0 69 73 74 20 24 7b 74 65 78 74 7d 20 5c 0a 09 09  ist ${text} \...
21bb0 09 09 09 5b 73 74 72 69 6e 67 20 74 72 69 6d 6c  ...[string triml
21bc0 65 66 74 20 5b 49 6e 63 6f 6d 70 6c 65 74 65 4c  eft [IncompleteL
21bd0 69 73 74 52 65 6d 61 69 6e 64 65 72 20 24 7b 6c  istRemainder ${l
21be0 69 6e 65 7d 5d 5d 20 5c 0a 09 09 09 09 09 5b 57  ine}]] \......[W
21bf0 69 64 67 65 74 43 68 69 6c 64 72 65 6e 20 2e 5d  idgetChildren .]
21c00 20 5c 7b 20 7b 20 7d 20 5c 7d 5d 0a 09 09 09 09   \{ { } \}].....
21c10 7d 0a 09 09 09 09 63 6f 6d 6d 61 6e 64 20 7b 20  }.....command { 
21c20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
21c30 69 6e 74 73 20 3f 76 61 6c 75 65 3f 5d 20 7d 0a  ints ?value?] }.
21c40 09 09 09 09 66 6f 63 75 73 6d 6f 64 65 6c 20 7b  ....focusmodel {
21c50 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b 43 6f  ......return [Co
21c60 6d 70 6c 65 74 65 4c 69 73 74 46 72 6f 6d 4c 69  mpleteListFromLi
21c70 73 74 20 24 7b 74 65 78 74 7d 20 7b 61 63 74 69  st ${text} {acti
21c80 76 65 20 70 61 73 73 69 76 65 7d 5d 0a 09 09 09  ve passive}]....
21c90 09 7d 0a 09 09 09 09 67 65 6f 6d 65 74 72 79 20  .}.....geometry 
21ca0 7b 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b 44  {......return [D
21cb0 69 73 70 6c 61 79 48 69 6e 74 73 20 3f 3c 77 69  isplayHints ?<wi
21cc0 64 74 68 3e 78 3c 68 65 69 67 68 74 3e 2b 2d 3c  dth>x<height>+-<
21cd0 78 3e 2b 2d 3c 79 3e 3f 5d 0a 09 09 09 09 7d 0a  x>+-<y>?].....}.
21ce0 09 09 09 09 67 72 69 64 20 7b 20 72 65 74 75 72  ....grid { retur
21cf0 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
21d00 3f 62 61 73 65 57 69 64 74 68 3f 5d 20 7d 0a 09  ?baseWidth?] }..
21d10 09 09 09 67 72 6f 75 70 20 7b 0a 09 09 09 09 09  ...group {......
21d20 72 65 74 75 72 6e 20 5b 54 72 79 46 72 6f 6d 4c  return [TryFromL
21d30 69 73 74 20 24 7b 74 65 78 74 7d 20 5b 57 69 64  ist ${text} [Wid
21d40 67 65 74 43 68 69 6c 64 72 65 6e 20 24 7b 74 65  getChildren ${te
21d50 78 74 7d 5d 5d 0a 09 09 09 09 7d 0a 09 09 09 09  xt}]].....}.....
21d60 69 63 6f 6e 62 69 74 6d 61 70 20 2d 0a 09 09 09  iconbitmap -....
21d70 09 69 63 6f 6e 6d 61 73 6b 20 7b 20 72 65 74 75  .iconmask { retu
21d80 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d  rn [CompleteFrom
21d90 42 69 74 6d 61 70 73 20 24 7b 74 65 78 74 7d 5d  Bitmaps ${text}]
21da0 20 7d 0a 09 09 09 09 69 63 6f 6e 6e 61 6d 65 20   }.....iconname 
21db0 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
21dc0 79 48 69 6e 74 73 20 3f 6e 65 77 4e 61 6d 65 3f  yHints ?newName?
21dd0 5d 20 7d 0a 09 09 09 09 69 63 6f 6e 70 6f 73 69  ] }.....iconposi
21de0 74 69 6f 6e 20 7b 20 72 65 74 75 72 6e 20 5b 44  tion { return [D
21df0 69 73 70 6c 61 79 48 69 6e 74 73 20 3f 78 3f 5d  isplayHints ?x?]
21e00 20 7d 0a 09 09 09 09 69 63 6f 6e 77 69 6e 64 6f   }.....iconwindo
21e10 77 20 7b 0a 09 09 09 09 09 72 65 74 75 72 6e 20  w {......return 
21e20 5b 54 72 79 46 72 6f 6d 4c 69 73 74 20 24 7b 74  [TryFromList ${t
21e30 65 78 74 7d 20 5b 57 69 64 67 65 74 43 68 69 6c  ext} [WidgetChil
21e40 64 72 65 6e 20 24 7b 74 65 78 74 7d 5d 5d 0a 09  dren ${text}]]..
21e50 09 09 09 7d 0a 09 09 09 09 6d 61 78 73 69 7a 65  ...}.....maxsize
21e60 20 2d 0a 09 09 09 09 6d 69 6e 73 69 7a 65 20 7b   -.....minsize {
21e70 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
21e80 48 69 6e 74 73 20 3f 77 69 64 74 68 3f 5d 20 7d  Hints ?width?] }
21e90 0a 09 09 09 09 6f 76 65 72 72 69 64 65 72 65 64  .....overridered
21ea0 69 72 65 63 74 20 7b 20 72 65 74 75 72 6e 20 5b  irect { return [
21eb0 43 6f 6d 70 6c 65 74 65 42 6f 6f 6c 65 61 6e 20  CompleteBoolean 
21ec0 24 7b 74 65 78 74 7d 5d 20 7d 0a 09 09 09 09 70  ${text}] }.....p
21ed0 6f 73 69 74 69 6f 6e 66 72 6f 6d 20 2d 0a 09 09  ositionfrom -...
21ee0 09 09 73 69 7a 65 66 72 6f 6d 20 7b 0a 09 09 09  ..sizefrom {....
21ef0 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65  ..return [Comple
21f00 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78  teFromList ${tex
21f10 74 7d 20 7b 70 6f 73 69 74 69 6f 6e 20 75 73 65  t} {position use
21f20 72 7d 5d 0a 09 09 09 09 7d 0a 09 09 09 09 70 72  r}].....}.....pr
21f30 6f 74 6f 63 6f 6c 20 7b 0a 09 09 09 09 09 72 65  otocol {......re
21f40 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72  turn [CompleteFr
21f50 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 7b  omList ${text} {
21f60 0a 09 09 09 09 09 09 57 4d 5f 54 41 4b 45 5f 46  .......WM_TAKE_F
21f70 4f 43 55 53 20 57 4d 5f 53 41 56 45 5f 59 4f 55  OCUS WM_SAVE_YOU
21f80 52 53 45 4c 46 20 57 4d 5f 44 45 4c 45 54 45 5f  RSELF WM_DELETE_
21f90 57 49 4e 44 4f 57 0a 09 09 09 09 09 7d 5d 0a 09  WINDOW......}]..
21fa0 09 09 09 7d 0a 09 09 09 09 72 65 73 69 7a 61 62  ...}.....resizab
21fb0 6c 65 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73  le { return [Dis
21fc0 70 6c 61 79 48 69 6e 74 73 20 3f 77 69 64 74 68  playHints ?width
21fd0 3f 5d 20 7d 0a 09 09 09 09 74 69 74 6c 65 20 7b  ?] }.....title {
21fe0 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
21ff0 48 69 6e 74 73 20 3f 73 74 72 69 6e 67 3f 5d 20  Hints ?string?] 
22000 7d 0a 09 09 09 09 74 72 61 6e 73 69 65 6e 74 20  }.....transient 
22010 7b 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b 54  {......return [T
22020 72 79 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78  ryFromList ${tex
22030 74 7d 20 5b 57 69 64 67 65 74 43 68 69 6c 64 72  t} [WidgetChildr
22040 65 6e 20 24 7b 74 65 78 74 7d 5d 5d 0a 09 09 09  en ${text}]]....
22050 09 7d 0a 09 09 09 09 64 65 66 61 75 6c 74 20 7b  .}.....default {
22060 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b 54 72  ......return [Tr
22070 79 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74  yFromList ${text
22080 7d 20 5b 54 6f 70 6c 65 76 65 6c 57 69 6e 64 6f  } [ToplevelWindo
22090 77 73 5d 5d 0a 09 09 09 09 7d 0a 09 09 09 7d 0a  ws]].....}....}.
220a0 09 09 7d 0a 09 09 34 20 7b 0a 09 09 09 73 77 69  ..}...4 {....swi
220b0 74 63 68 20 2d 2d 20 24 7b 73 75 62 7d 20 7b 0a  tch -- ${sub} {.
220c0 09 09 09 09 61 73 70 65 63 74 20 7b 20 72 65 74  ....aspect { ret
220d0 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
220e0 73 20 3f 6d 69 6e 44 65 6e 6f 6d 3f 5d 20 7d 0a  s ?minDenom?] }.
220f0 09 09 09 09 67 72 69 64 20 7b 20 72 65 74 75 72  ....grid { retur
22100 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
22110 3f 62 61 73 65 48 65 69 67 68 74 3f 5d 20 7d 0a  ?baseHeight?] }.
22120 09 09 09 09 69 63 6f 6e 70 6f 73 69 74 69 6f 6e  ....iconposition
22130 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
22140 61 79 48 69 6e 74 73 20 3f 79 3f 5d 20 7d 0a 09  ayHints ?y?] }..
22150 09 09 09 6d 61 78 73 69 7a 65 20 2d 0a 09 09 09  ...maxsize -....
22160 09 6d 69 6e 73 69 7a 65 20 7b 20 72 65 74 75 72  .minsize { retur
22170 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
22180 3f 68 65 69 67 68 74 3f 5d 20 7d 0a 09 09 09 09  ?height?] }.....
22190 70 72 6f 74 6f 63 6f 6c 20 7b 0a 09 09 09 09 09  protocol {......
221a0 72 65 74 75 72 6e 20 5b 42 72 61 63 65 4f 72 43  return [BraceOrC
221b0 6f 6d 6d 61 6e 64 20 24 7b 74 65 78 74 7d 20 5c  ommand ${text} \
221c0 0a 09 09 09 09 09 24 7b 73 74 61 72 74 7d 20 24  ......${start} $
221d0 7b 65 6e 64 7d 20 24 7b 6c 69 6e 65 7d 20 24 7b  {end} ${line} ${
221e0 70 6f 73 7d 20 24 7b 6d 6f 64 7d 5d 0a 09 09 09  pos} ${mod}]....
221f0 09 7d 0a 09 09 09 09 72 65 73 69 7a 61 62 6c 65  .}.....resizable
22200 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
22210 61 79 48 69 6e 74 73 20 3f 68 65 69 67 68 74 3f  ayHints ?height?
22220 5d 20 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 09 35  ] }....}...}...5
22230 20 7b 0a 09 09 09 73 77 69 74 63 68 20 2d 2d 20   {....switch -- 
22240 24 7b 73 75 62 7d 20 7b 0a 09 09 09 09 61 73 70  ${sub} {.....asp
22250 65 63 74 20 7b 20 72 65 74 75 72 6e 20 5b 44 69  ect { return [Di
22260 73 70 6c 61 79 48 69 6e 74 73 20 3f 6d 61 78 4e  splayHints ?maxN
22270 75 6d 65 72 3f 5d 20 7d 0a 09 09 09 09 67 72 69  umer?] }.....gri
22280 64 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70  d { return [Disp
22290 6c 61 79 48 69 6e 74 73 20 3f 77 69 64 74 68 49  layHints ?widthI
222a0 6e 63 3f 5d 20 7d 0a 09 09 09 7d 0a 09 09 7d 0a  nc?] }....}...}.
222b0 09 09 36 20 7b 0a 09 09 09 73 77 69 74 63 68 20  ..6 {....switch 
222c0 2d 2d 20 24 7b 73 75 62 7d 20 7b 0a 09 09 09 09  -- ${sub} {.....
222d0 61 73 70 65 63 74 20 7b 20 72 65 74 75 72 6e 20  aspect { return 
222e0 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3f 6d  [DisplayHints ?m
222f0 61 78 44 65 6e 6f 6d 3f 5d 20 7d 0a 09 09 09 09  axDenom?] }.....
22300 67 72 69 64 20 7b 20 72 65 74 75 72 6e 20 5b 44  grid { return [D
22310 69 73 70 6c 61 79 48 69 6e 74 73 20 3f 68 65 69  isplayHints ?hei
22320 67 68 74 49 6e 63 3f 5d 20 7d 0a 09 09 09 7d 0a  ghtInc?] }....}.
22330 09 09 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20 22  ..}..}..return "
22340 22 0a 7d 0a 0a 23 20 3d 3d 3d 3d 20 4f 62 6a 43  ".}..# ==== ObjC
22350 6d 64 20 63 6f 6d 70 6c 65 74 65 72 73 20 3d 3d  md completers ==
22360 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
22370 3d 3d 3d 3d 3d 3d 3d 3d 0a 23 0a 23 20 40 6e 6f  ========.#.# @no
22380 74 65 20 77 68 65 6e 20 61 20 70 72 6f 63 20 69  te when a proc i
22390 73 20 63 6f 6d 6d 65 6e 74 65 64 20 6f 75 74 2c  s commented out,
223a0 20 74 68 65 20 66 61 6c 6c 62 61 63 6b 0a 23 20   the fallback.# 
223b0 20 20 20 20 20 20 63 6f 6d 70 6c 65 74 65 72 73        completers
223c0 20 64 6f 20 74 68 65 20 6a 6f 62 20 72 61 74 68   do the job rath
223d0 65 72 20 77 65 6c 6c 2e 0a 23 0a 23 20 3d 3d 3d  er well..#.# ===
223e0 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
223f0 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
22400 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a  ==============..
22410 0a 23 20 70 72 6f 63 20 42 75 74 74 6f 6e 4f 62  .# proc ButtonOb
22420 6a 20 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e  j {text start en
22430 64 20 6c 69 6e 65 20 70 6f 73 7d 20 7b 0a 23 20  d line pos} {.# 
22440 09 72 65 74 75 72 6e 20 22 22 0a 23 20 7d 0a 0a  .return "".# }..
22450 70 72 6f 63 20 43 6f 6d 70 6c 65 74 65 46 72 6f  proc CompleteFro
22460 6d 42 69 74 6d 61 70 73 20 7b 74 65 78 74 20 7b  mBitmaps {text {
22470 61 6c 77 61 79 73 20 31 7d 7d 20 7b 0a 09 73 65  always 1}} {..se
22480 74 20 69 6e 61 6d 65 73 20 5b 69 6d 61 67 65 20  t inames [image 
22490 6e 61 6d 65 73 5d 0a 09 73 65 74 20 62 69 74 6d  names]..set bitm
224a0 61 70 73 20 22 22 0a 09 66 6f 72 65 61 63 68 20  aps ""..foreach 
224b0 6e 61 6d 65 20 24 69 6e 61 6d 65 73 20 7b 0a 09  name $inames {..
224c0 09 69 66 20 7b 22 62 69 74 6d 61 70 22 20 3d 3d  .if {"bitmap" ==
224d0 20 5b 69 6d 61 67 65 20 74 79 70 65 20 24 6e 61   [image type $na
224e0 6d 65 5d 7d 20 7b 0a 09 09 09 6c 61 70 70 65 6e  me]} {....lappen
224f0 64 20 62 69 74 6d 61 70 73 20 24 7b 6e 61 6d 65  d bitmaps ${name
22500 7d 0a 09 09 7d 0a 09 7d 0a 09 69 66 20 7b 5b 73  }...}..}..if {[s
22510 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 7b 62  tring length ${b
22520 69 74 6d 61 70 73 7d 5d 7d 20 7b 0a 09 09 72 65  itmaps}]} {...re
22530 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72  turn [CompleteFr
22540 6f 6d 4c 69 73 74 20 5c 0a 09 09 24 7b 74 65 78  omList \...${tex
22550 74 7d 20 24 7b 62 69 74 6d 61 70 73 7d 5d 0a 09  t} ${bitmaps}]..
22560 7d 20 65 6c 73 65 20 7b 0a 09 09 69 66 20 24 7b  } else {...if ${
22570 61 6c 77 61 79 73 7d 20 7b 0a 09 09 09 72 65 74  always} {....ret
22580 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
22590 73 20 3c 62 69 74 6d 61 70 73 3e 5d 0a 09 09 7d  s <bitmaps>]...}
225a0 20 65 6c 73 65 20 7b 0a 09 09 09 72 65 74 75 72   else {....retur
225b0 6e 20 22 22 0a 09 09 7d 0a 09 7d 0a 7d 0a 0a 70  n ""...}..}.}..p
225c0 72 6f 63 20 43 6f 6d 70 6c 65 74 65 46 72 6f 6d  roc CompleteFrom
225d0 49 6d 61 67 65 73 20 7b 74 65 78 74 20 7b 61 6c  Images {text {al
225e0 77 61 79 73 20 31 7d 7d 20 7b 0a 09 73 65 74 20  ways 1}} {..set 
225f0 69 6e 61 6d 65 73 20 5b 69 6d 61 67 65 20 6e 61  inames [image na
22600 6d 65 73 5d 0a 09 69 66 20 7b 5b 73 74 72 69 6e  mes]..if {[strin
22610 67 20 6c 65 6e 67 74 68 20 24 7b 69 6e 61 6d 65  g length ${iname
22620 73 7d 5d 7d 20 7b 0a 09 09 72 65 74 75 72 6e 20  s}]} {...return 
22630 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73  [CompleteFromLis
22640 74 20 24 7b 74 65 78 74 7d 20 24 7b 69 6e 61 6d  t ${text} ${inam
22650 65 73 7d 5d 0a 09 7d 20 65 6c 73 65 20 7b 0a 09  es}]..} else {..
22660 09 69 66 20 24 7b 61 6c 77 61 79 73 7d 20 7b 0a  .if ${always} {.
22670 09 09 09 72 65 74 75 72 6e 20 5b 44 69 73 70 6c  ...return [Displ
22680 61 79 48 69 6e 74 73 20 3c 69 6d 61 67 65 3e 5d  ayHints <image>]
22690 0a 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 72  ...} else {....r
226a0 65 74 75 72 6e 20 22 22 0a 09 09 7d 0a 09 7d 0a  eturn ""...}..}.
226b0 7d 0a 0a 70 72 6f 63 20 43 6f 6d 70 6c 65 74 65  }..proc Complete
226c0 41 6e 63 68 6f 72 20 74 65 78 74 20 7b 0a 09 72  Anchor text {..r
226d0 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46  eturn [CompleteF
226e0 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20  romList ${text} 
226f0 7b 0a 09 09 6e 20 6e 65 20 65 20 73 65 20 73 20  {...n ne e se s 
22700 73 77 20 77 20 6e 77 20 63 65 6e 74 65 72 0a 09  sw w nw center..
22710 7d 5d 0a 7d 0a 0a 70 72 6f 63 20 43 6f 6d 70 6c  }].}..proc Compl
22720 65 74 65 4a 75 73 74 69 66 79 20 74 65 78 74 20  eteJustify text 
22730 7b 0a 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c  {..return [Compl
22740 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65  eteFromList ${te
22750 78 74 7d 20 7b 0a 09 09 6c 65 66 74 20 63 65 6e  xt} {...left cen
22760 74 65 72 20 72 69 67 68 74 0a 09 7d 5d 0a 7d 0a  ter right..}].}.
22770 0a 70 72 6f 63 20 43 61 6e 76 61 73 49 74 65 6d  .proc CanvasItem
22780 20 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64   {text start end
22790 20 6c 69 6e 65 20 70 6f 73 20 70 72 65 76 20 74   line pos prev t
227a0 79 70 65 7d 20 7b 0a 0a 09 73 77 69 74 63 68 20  ype} {...switch 
227b0 2d 2d 20 24 7b 74 79 70 65 7d 20 7b 0a 09 09 61  -- ${type} {...a
227c0 72 63 20 7b 0a 09 09 09 73 77 69 74 63 68 20 2d  rc {....switch -
227d0 2d 20 24 7b 70 72 65 76 7d 20 7b 0a 09 09 09 09  - ${prev} {.....
227e0 2d 65 78 74 65 6e 74 20 7b 20 72 65 74 75 72 6e  -extent { return
227f0 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c   [DisplayHints <
22800 64 65 67 72 65 65 73 3e 5d 20 7d 0a 09 09 09 09  degrees>] }.....
22810 2d 66 69 6c 6c 20 2d 0a 09 09 09 09 2d 6f 75 74  -fill -.....-out
22820 6c 69 6e 65 20 7b 20 72 65 74 75 72 6e 20 5b 44  line { return [D
22830 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 63 6f 6c  isplayHints <col
22840 6f 72 3e 5d 20 7d 0a 09 09 09 09 2d 6f 75 74 6c  or>] }.....-outl
22850 69 6e 65 73 74 69 70 70 6c 65 20 2d 0a 09 09 09  inestipple -....
22860 09 2d 73 74 69 70 70 6c 65 20 7b 0a 09 09 09 09  .-stipple {.....
22870 09 73 65 74 20 69 6e 61 6d 65 73 20 5b 69 6d 61  .set inames [ima
22880 67 65 20 6e 61 6d 65 73 5d 0a 09 09 09 09 09 73  ge names]......s
22890 65 74 20 62 69 74 6d 61 70 73 20 22 22 0a 09 09  et bitmaps ""...
228a0 09 09 09 66 6f 72 65 61 63 68 20 6e 61 6d 65 20  ...foreach name 
228b0 24 69 6e 61 6d 65 73 20 7b 0a 09 09 09 09 09 09  $inames {.......
228c0 69 66 20 7b 22 62 69 74 6d 61 70 22 20 3d 3d 20  if {"bitmap" == 
228d0 5b 69 6d 61 67 65 20 74 79 70 65 20 24 6e 61 6d  [image type $nam
228e0 65 5d 7d 20 7b 0a 09 09 09 09 09 09 09 6c 61 70  e]} {........lap
228f0 70 65 6e 64 20 62 69 74 6d 61 70 73 20 24 7b 6e  pend bitmaps ${n
22900 61 6d 65 7d 0a 09 09 09 09 09 09 7d 0a 09 09 09  ame}.......}....
22910 09 09 7d 0a 09 09 09 09 09 69 66 20 7b 5b 73 74  ..}......if {[st
22920 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 7b 62 69  ring length ${bi
22930 74 6d 61 70 73 7d 5d 7d 20 7b 0a 09 09 09 09 09  tmaps}]} {......
22940 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74  .return [Complet
22950 65 46 72 6f 6d 4c 69 73 74 20 5c 0a 09 09 09 09  eFromList \.....
22960 09 09 24 7b 74 65 78 74 7d 20 24 7b 62 69 74 6d  ..${text} ${bitm
22970 61 70 73 7d 5d 0a 09 09 09 09 09 7d 20 65 6c 73  aps}]......} els
22980 65 20 7b 0a 09 09 09 09 09 09 72 65 74 75 72 6e  e {.......return
22990 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c   [DisplayHints <
229a0 62 69 74 6d 61 70 73 3e 5d 0a 09 09 09 09 09 7d  bitmaps>]......}
229b0 0a 09 09 09 09 7d 0a 09 09 09 09 2d 73 74 61 72  .....}.....-star
229c0 74 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70  t { return [Disp
229d0 6c 61 79 48 69 6e 74 73 20 3c 64 65 67 72 65 65  layHints <degree
229e0 73 3e 5d 20 7d 0a 09 09 09 09 2d 73 74 79 6c 65  s>] }.....-style
229f0 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
22a00 61 79 48 69 6e 74 73 20 3c 74 79 70 65 3e 5d 20  ayHints <type>] 
22a10 7d 0a 09 09 09 09 2d 74 61 67 73 20 7b 20 72 65  }.....-tags { re
22a20 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
22a30 74 73 20 3c 74 61 67 4c 69 73 74 3e 5d 20 7d 0a  ts <tagList>] }.
22a40 09 09 09 09 2d 77 69 64 74 68 20 7b 20 72 65 74  ....-width { ret
22a50 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
22a60 73 20 3c 6f 75 74 6c 69 6e 65 57 69 64 74 68 3e  s <outlineWidth>
22a70 5d 20 7d 0a 09 09 09 09 64 65 66 61 75 6c 74 20  ] }.....default 
22a80 7b 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b 43  {......return [C
22a90 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20  ompleteFromList 
22aa0 24 7b 74 65 78 74 7d 20 5c 0a 09 09 09 09 09 5b  ${text} \......[
22ab0 52 65 6d 6f 76 65 55 73 65 64 4f 70 74 69 6f 6e  RemoveUsedOption
22ac0 73 20 24 7b 6c 69 6e 65 7d 20 7b 0a 09 09 09 09  s ${line} {.....
22ad0 09 09 2d 65 78 74 65 6e 74 20 2d 66 69 6c 6c 20  ..-extent -fill 
22ae0 2d 6f 75 74 6c 69 6e 65 20 2d 6f 75 74 6c 69 6e  -outline -outlin
22af0 65 73 74 69 70 70 6c 65 0a 09 09 09 09 09 09 2d  estipple.......-
22b00 73 74 61 72 74 20 2d 73 74 69 70 70 6c 65 20 2d  start -stipple -
22b10 73 74 79 6c 65 20 2d 74 61 67 73 20 2d 77 69 64  style -tags -wid
22b20 74 68 0a 09 09 09 09 09 7d 5d 5d 0a 09 09 09 09  th......}]].....
22b30 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 09 62 69 74  }....}...}...bit
22b40 6d 61 70 20 7b 0a 09 09 09 73 77 69 74 63 68 20  map {....switch 
22b50 2d 2d 20 24 7b 70 72 65 76 7d 20 7b 0a 09 09 09  -- ${prev} {....
22b60 09 2d 61 6e 63 68 6f 72 20 7b 20 72 65 74 75 72  .-anchor { retur
22b70 6e 20 5b 43 6f 6d 70 6c 65 74 65 41 6e 63 68 6f  n [CompleteAncho
22b80 72 20 24 7b 74 65 78 74 7d 5d 20 7d 0a 09 09 09  r ${text}] }....
22b90 09 2d 62 61 63 6b 67 72 6f 75 6e 64 20 2d 0a 09  .-background -..
22ba0 09 09 09 2d 66 6f 72 65 67 72 6f 75 6e 64 20 7b  ...-foreground {
22bb0 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
22bc0 48 69 6e 74 73 20 3c 63 6f 6c 6f 72 3e 5d 20 7d  Hints <color>] }
22bd0 0a 09 09 09 09 2d 62 69 74 6d 61 70 20 7b 20 72  .....-bitmap { r
22be0 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46  eturn [CompleteF
22bf0 72 6f 6d 42 69 74 6d 61 70 73 20 24 7b 74 65 78  romBitmaps ${tex
22c00 74 7d 5d 20 7d 0a 09 09 09 09 2d 74 61 67 73 20  t}] }.....-tags 
22c10 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
22c20 79 48 69 6e 74 73 20 3c 74 61 67 4c 69 73 74 3e  yHints <tagList>
22c30 5d 20 7d 0a 09 09 09 09 64 65 66 61 75 6c 74 20  ] }.....default 
22c40 7b 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b 43  {......return [C
22c50 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20  ompleteFromList 
22c60 24 7b 74 65 78 74 7d 20 5c 0a 09 09 09 09 09 5b  ${text} \......[
22c70 52 65 6d 6f 76 65 55 73 65 64 4f 70 74 69 6f 6e  RemoveUsedOption
22c80 73 20 24 7b 6c 69 6e 65 7d 20 7b 0a 09 09 09 09  s ${line} {.....
22c90 09 09 2d 61 6e 63 68 6f 72 20 2d 62 61 63 6b 67  ..-anchor -backg
22ca0 72 6f 75 6e 64 20 2d 62 69 74 6d 61 70 0a 09 09  round -bitmap...
22cb0 09 09 09 09 2d 66 6f 72 65 67 72 6f 75 6e 64 20  ....-foreground 
22cc0 2d 74 61 67 73 0a 09 09 09 09 09 7d 5d 5d 0a 09  -tags......}]]..
22cd0 09 09 09 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 09  ...}....}...}...
22ce0 69 6d 61 67 65 20 7b 0a 09 09 09 73 77 69 74 63  image {....switc
22cf0 68 20 2d 2d 20 24 7b 70 72 65 76 7d 20 7b 0a 09  h -- ${prev} {..
22d00 09 09 09 2d 61 6e 63 68 6f 72 20 7b 20 72 65 74  ...-anchor { ret
22d10 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 41 6e 63  urn [CompleteAnc
22d20 68 6f 72 20 24 7b 74 65 78 74 7d 5d 20 7d 0a 09  hor ${text}] }..
22d30 09 09 09 2d 69 6d 61 67 65 20 7b 20 72 65 74 75  ...-image { retu
22d40 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d  rn [CompleteFrom
22d50 49 6d 61 67 65 73 20 24 7b 74 65 78 74 7d 5d 20  Images ${text}] 
22d60 7d 0a 09 09 09 09 2d 74 61 67 73 20 7b 20 72 65  }.....-tags { re
22d70 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
22d80 74 73 20 3c 74 61 67 4c 69 73 74 3e 5d 20 7d 0a  ts <tagList>] }.
22d90 09 09 09 09 64 65 66 61 75 6c 74 20 7b 0a 09 09  ....default {...
22da0 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c  ...return [Compl
22db0 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65  eteFromList ${te
22dc0 78 74 7d 20 5c 0a 09 09 09 09 09 5b 52 65 6d 6f  xt} \......[Remo
22dd0 76 65 55 73 65 64 4f 70 74 69 6f 6e 73 20 24 7b  veUsedOptions ${
22de0 6c 69 6e 65 7d 20 7b 0a 09 09 09 09 09 09 2d 61  line} {.......-a
22df0 6e 63 68 6f 72 20 2d 69 6d 61 67 65 20 2d 74 61  nchor -image -ta
22e00 67 73 0a 09 09 09 09 09 7d 5d 5d 0a 09 09 09 09  gs......}]].....
22e10 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 09 6c 69 6e  }....}...}...lin
22e20 65 20 7b 0a 09 09 09 73 77 69 74 63 68 20 2d 2d  e {....switch --
22e30 20 24 7b 70 72 65 76 7d 20 7b 0a 09 09 09 09 2d   ${prev} {.....-
22e40 61 72 72 6f 77 20 7b 0a 09 09 09 09 09 72 65 74  arrow {......ret
22e50 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f  urn [CompleteFro
22e60 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 7b 0a  mList ${text} {.
22e70 09 09 09 09 09 09 6e 6f 6e 65 20 66 69 72 73 74  ......none first
22e80 20 6c 61 73 74 20 62 6f 74 68 0a 09 09 09 09 09   last both......
22e90 7d 5d 0a 09 09 09 09 7d 0a 09 09 09 09 2d 61 72  }].....}.....-ar
22ea0 72 6f 77 73 68 61 70 65 20 7b 20 72 65 74 75 72  rowshape { retur
22eb0 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
22ec0 3c 73 68 61 70 65 3e 5d 20 7d 0a 09 09 09 09 2d  <shape>] }.....-
22ed0 63 61 70 73 74 79 6c 65 20 7b 0a 09 09 09 09 09  capstyle {......
22ee0 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65  return [Complete
22ef0 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d  FromList ${text}
22f00 20 7b 0a 09 09 09 09 09 09 62 75 74 74 20 70 72   {.......butt pr
22f10 6f 6a 65 63 74 69 6e 67 20 72 6f 75 6e 64 0a 09  ojecting round..
22f20 09 09 09 09 7d 5d 0a 09 09 09 09 7d 0a 09 09 09  ....}].....}....
22f30 09 2d 66 69 6c 6c 20 7b 20 72 65 74 75 72 6e 20  .-fill { return 
22f40 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 63  [DisplayHints <c
22f50 6f 6c 6f 72 3e 5d 20 7d 0a 09 09 09 09 2d 6a 6f  olor>] }.....-jo
22f60 69 6e 73 74 79 6c 65 20 7b 0a 09 09 09 09 09 72  instyle {......r
22f70 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46  eturn [CompleteF
22f80 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20  romList ${text} 
22f90 7b 0a 09 09 09 09 09 09 62 65 76 65 6c 20 6d 69  {.......bevel mi
22fa0 74 65 72 20 72 6f 75 6e 64 0a 09 09 09 09 09 7d  ter round......}
22fb0 5d 0a 09 09 09 09 7d 0a 09 09 09 09 2d 73 6d 6f  ].....}.....-smo
22fc0 6f 74 68 20 7b 20 72 65 74 75 72 6e 20 5b 43 6f  oth { return [Co
22fd0 6d 70 6c 65 74 65 42 6f 6f 6c 65 61 6e 20 24 7b  mpleteBoolean ${
22fe0 74 65 78 74 7d 5d 20 7d 0a 09 09 09 09 2d 73 70  text}] }.....-sp
22ff0 6c 69 6e 65 73 74 65 70 73 20 7b 20 72 65 74 75  linesteps { retu
23000 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
23010 20 3c 6e 75 6d 62 65 72 3e 5d 20 7d 0a 09 09 09   <number>] }....
23020 09 2d 73 74 69 70 70 6c 65 20 7b 20 72 65 74 75  .-stipple { retu
23030 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d  rn [CompleteFrom
23040 42 69 74 6d 61 70 73 20 24 7b 74 65 78 74 7d 5d  Bitmaps ${text}]
23050 20 7d 0a 09 09 09 09 2d 74 61 67 73 20 7b 20 72   }.....-tags { r
23060 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
23070 6e 74 73 20 3c 74 61 67 4c 69 73 74 3e 5d 20 7d  nts <tagList>] }
23080 0a 09 09 09 09 2d 77 69 64 74 68 20 7b 20 72 65  .....-width { re
23090 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
230a0 74 73 20 3c 6c 69 6e 65 57 69 64 74 68 3e 5d 20  ts <lineWidth>] 
230b0 7d 0a 09 09 09 09 64 65 66 61 75 6c 74 20 7b 0a  }.....default {.
230c0 09 09 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d  .....return [Com
230d0 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b  pleteFromList ${
230e0 74 65 78 74 7d 20 5c 0a 09 09 09 09 09 5b 52 65  text} \......[Re
230f0 6d 6f 76 65 55 73 65 64 4f 70 74 69 6f 6e 73 20  moveUsedOptions 
23100 24 7b 6c 69 6e 65 7d 20 7b 0a 09 09 09 09 09 09  ${line} {.......
23110 2d 61 72 72 6f 77 20 2d 61 72 72 6f 77 73 68 61  -arrow -arrowsha
23120 70 65 20 2d 63 61 70 73 74 79 6c 65 20 2d 66 69  pe -capstyle -fi
23130 6c 6c 20 2d 6a 6f 69 6e 73 74 79 6c 65 0a 09 09  ll -joinstyle...
23140 09 09 09 09 2d 73 6d 6f 6f 74 68 20 2d 73 70 6c  ....-smooth -spl
23150 69 6e 65 73 74 65 70 73 20 2d 73 74 69 70 70 6c  inesteps -stippl
23160 65 20 2d 74 61 67 73 20 2d 77 69 64 74 68 0a 09  e -tags -width..
23170 09 09 09 09 7d 5d 5d 0a 09 09 09 09 7d 0a 09 09  ....}]].....}...
23180 09 7d 0a 09 09 7d 0a 09 09 6f 76 61 6c 20 7b 0a  .}...}...oval {.
23190 09 09 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 70  ...switch -- ${p
231a0 72 65 76 7d 20 7b 0a 09 09 09 09 2d 66 69 6c 6c  rev} {.....-fill
231b0 20 2d 0a 09 09 09 09 2d 6f 75 74 6c 69 6e 65 20   -.....-outline 
231c0 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
231d0 79 48 69 6e 74 73 20 3c 63 6f 6c 6f 72 3e 5d 20  yHints <color>] 
231e0 7d 0a 09 09 09 09 2d 73 74 69 70 70 6c 65 20 7b  }.....-stipple {
231f0 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74   return [Complet
23200 65 46 72 6f 6d 42 69 74 6d 61 70 73 20 24 7b 74  eFromBitmaps ${t
23210 65 78 74 7d 5d 20 7d 0a 09 09 09 09 2d 74 61 67  ext}] }.....-tag
23220 73 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70  s { return [Disp
23230 6c 61 79 48 69 6e 74 73 20 3c 74 61 67 4c 69 73  layHints <tagLis
23240 74 3e 5d 20 7d 0a 09 09 09 09 2d 77 69 64 74 68  t>] }.....-width
23250 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
23260 61 79 48 69 6e 74 73 20 3c 6c 69 6e 65 57 69 64  ayHints <lineWid
23270 74 68 3e 5d 20 7d 0a 09 09 09 09 64 65 66 61 75  th>] }.....defau
23280 6c 74 20 7b 0a 09 09 09 09 09 72 65 74 75 72 6e  lt {......return
23290 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69   [CompleteFromLi
232a0 73 74 20 24 7b 74 65 78 74 7d 20 5c 0a 09 09 09  st ${text} \....
232b0 09 09 5b 52 65 6d 6f 76 65 55 73 65 64 4f 70 74  ..[RemoveUsedOpt
232c0 69 6f 6e 73 20 24 7b 6c 69 6e 65 7d 20 7b 0a 09  ions ${line} {..
232d0 09 09 09 09 09 2d 66 69 6c 6c 20 2d 6f 75 74 6c  .....-fill -outl
232e0 69 6e 65 20 2d 73 74 69 70 70 6c 65 20 2d 74 61  ine -stipple -ta
232f0 67 73 20 2d 77 69 64 74 68 0a 09 09 09 09 09 7d  gs -width......}
23300 5d 5d 0a 09 09 09 09 7d 0a 09 09 09 7d 0a 09 09  ]].....}....}...
23310 7d 0a 09 09 70 6f 6c 79 67 6f 6e 20 7b 0a 09 09  }...polygon {...
23320 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 70 72 65  .switch -- ${pre
23330 76 7d 20 7b 0a 09 09 09 09 2d 66 69 6c 6c 20 2d  v} {.....-fill -
23340 0a 09 09 09 09 2d 6f 75 74 6c 69 6e 65 20 7b 20  .....-outline { 
23350 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
23360 69 6e 74 73 20 3c 63 6f 6c 6f 72 3e 5d 20 7d 0a  ints <color>] }.
23370 09 09 09 09 2d 73 6d 6f 6f 74 68 20 7b 20 72 65  ....-smooth { re
23380 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 42 6f  turn [CompleteBo
23390 6f 6c 65 61 6e 20 24 7b 74 65 78 74 7d 5d 20 7d  olean ${text}] }
233a0 0a 09 09 09 09 2d 73 70 6c 69 6e 65 73 74 65 70  .....-splinestep
233b0 73 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70  s { return [Disp
233c0 6c 61 79 48 69 6e 74 73 20 3c 6e 75 6d 62 65 72  layHints <number
233d0 3e 5d 20 7d 0a 09 09 09 09 2d 73 74 69 70 70 6c  >] }.....-stippl
233e0 65 20 7b 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70  e { return [Comp
233f0 6c 65 74 65 46 72 6f 6d 42 69 74 6d 61 70 73 20  leteFromBitmaps 
23400 24 7b 74 65 78 74 7d 5d 20 7d 0a 09 09 09 09 2d  ${text}] }.....-
23410 74 61 67 73 20 7b 20 72 65 74 75 72 6e 20 5b 44  tags { return [D
23420 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 74 61 67  isplayHints <tag
23430 4c 69 73 74 3e 5d 20 7d 0a 09 09 09 09 2d 77 69  List>] }.....-wi
23440 64 74 68 20 7b 20 72 65 74 75 72 6e 20 5b 44 69  dth { return [Di
23450 73 70 6c 61 79 48 69 6e 74 73 20 3c 6f 75 74 6c  splayHints <outl
23460 69 6e 65 57 69 64 74 68 3e 5d 20 7d 0a 09 09 09  ineWidth>] }....
23470 09 64 65 66 61 75 6c 74 20 7b 0a 09 09 09 09 09  .default {......
23480 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65  return [Complete
23490 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d  FromList ${text}
234a0 20 5c 0a 09 09 09 09 09 5b 52 65 6d 6f 76 65 55   \......[RemoveU
234b0 73 65 64 4f 70 74 69 6f 6e 73 20 24 7b 6c 69 6e  sedOptions ${lin
234c0 65 7d 20 7b 0a 09 09 09 09 09 09 2d 66 69 6c 6c  e} {.......-fill
234d0 20 2d 6f 75 74 6c 69 6e 65 20 2d 73 6d 6f 6f 74   -outline -smoot
234e0 68 20 2d 73 70 6c 69 6e 65 73 74 65 70 73 0a 09  h -splinesteps..
234f0 09 09 09 09 09 2d 73 74 69 70 70 6c 65 20 2d 74  .....-stipple -t
23500 61 67 73 20 2d 77 69 64 74 68 0a 09 09 09 09 09  ags -width......
23510 7d 5d 5d 0a 09 09 09 09 7d 0a 09 09 09 7d 0a 09  }]].....}....}..
23520 09 7d 0a 09 09 72 65 63 74 61 6e 67 6c 65 20 7b  .}...rectangle {
23530 0a 09 09 09 73 77 69 74 63 68 20 2d 2d 20 24 7b  ....switch -- ${
23540 70 72 65 76 7d 20 7b 0a 09 09 09 09 2d 66 69 6c  prev} {.....-fil
23550 6c 20 2d 0a 09 09 09 09 2d 6f 75 74 6c 69 6e 65  l -.....-outline
23560 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
23570 61 79 48 69 6e 74 73 20 3c 63 6f 6c 6f 72 3e 5d  ayHints <color>]
23580 20 7d 0a 09 09 09 09 2d 73 74 69 70 70 6c 65 20   }.....-stipple 
23590 7b 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65  { return [Comple
235a0 74 65 46 72 6f 6d 42 69 74 6d 61 70 73 20 24 7b  teFromBitmaps ${
235b0 74 65 78 74 7d 5d 20 7d 0a 09 09 09 09 2d 74 61  text}] }.....-ta
235c0 67 73 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73  gs { return [Dis
235d0 70 6c 61 79 48 69 6e 74 73 20 3c 74 61 67 4c 69  playHints <tagLi
235e0 73 74 3e 5d 20 7d 0a 09 09 09 09 2d 77 69 64 74  st>] }.....-widt
235f0 68 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70  h { return [Disp
23600 6c 61 79 48 69 6e 74 73 20 3c 6c 69 6e 65 57 69  layHints <lineWi
23610 64 74 68 3e 5d 20 7d 0a 09 09 09 09 64 65 66 61  dth>] }.....defa
23620 75 6c 74 20 7b 0a 09 09 09 09 09 72 65 74 75 72  ult {......retur
23630 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c  n [CompleteFromL
23640 69 73 74 20 24 7b 74 65 78 74 7d 20 5c 0a 09 09  ist ${text} \...
23650 09 09 09 5b 52 65 6d 6f 76 65 55 73 65 64 4f 70  ...[RemoveUsedOp
23660 74 69 6f 6e 73 20 24 7b 6c 69 6e 65 7d 20 7b 0a  tions ${line} {.
23670 09 09 09 09 09 09 2d 66 69 6c 6c 20 2d 6f 75 74  ......-fill -out
23680 6c 69 6e 65 20 2d 73 74 69 70 70 6c 65 20 2d 74  line -stipple -t
23690 61 67 73 20 2d 77 69 64 74 68 0a 09 09 09 09 09  ags -width......
236a0 7d 5d 5d 0a 09 09 09 09 7d 0a 09 09 09 7d 0a 09  }]].....}....}..
236b0 09 7d 0a 09 09 74 65 78 74 20 7b 0a 09 09 09 73  .}...text {....s
236c0 77 69 74 63 68 20 2d 2d 20 24 7b 70 72 65 76 7d  witch -- ${prev}
236d0 20 7b 0a 09 09 09 09 2d 61 6e 63 68 6f 72 20 7b   {.....-anchor {
236e0 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74   return [Complet
236f0 65 41 6e 63 68 6f 72 20 24 7b 74 65 78 74 7d 5d  eAnchor ${text}]
23700 20 7d 0a 09 09 09 09 2d 66 69 6c 6c 20 7b 20 72   }.....-fill { r
23710 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
23720 6e 74 73 20 3c 63 6f 6c 6f 72 3e 5d 20 7d 0a 09  nts <color>] }..
23730 09 09 09 2d 66 6f 6e 74 20 7b 20 72 65 74 75 72  ...-font { retur
23740 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
23750 3c 66 6f 6e 74 3e 5d 20 7d 0a 09 09 09 09 2d 6a  <font>] }.....-j
23760 75 73 74 69 66 79 20 7b 20 72 65 74 75 72 6e 20  ustify { return 
23770 5b 43 6f 6d 70 6c 65 74 65 4a 75 73 74 69 66 79  [CompleteJustify
23780 20 24 7b 74 65 78 74 7d 5d 20 7d 0a 09 09 09 09   ${text}] }.....
23790 2d 73 74 69 70 70 6c 65 20 7b 20 72 65 74 75 72  -stipple { retur
237a0 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 42  n [CompleteFromB
237b0 69 74 6d 61 70 73 20 24 7b 74 65 78 74 7d 5d 20  itmaps ${text}] 
237c0 7d 0a 09 09 09 09 2d 74 61 67 73 20 7b 20 72 65  }.....-tags { re
237d0 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
237e0 74 73 20 3c 74 61 67 4c 69 73 74 3e 5d 20 7d 0a  ts <tagList>] }.
237f0 09 09 09 09 2d 74 65 78 74 20 7b 20 72 65 74 75  ....-text { retu
23800 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
23810 20 3c 73 74 72 69 6e 67 3e 5d 20 7d 0a 09 09 09   <string>] }....
23820 09 2d 77 69 64 74 68 20 7b 20 72 65 74 75 72 6e  .-width { return
23830 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c   [DisplayHints <
23840 6c 69 6e 65 4c 65 6e 67 74 68 3e 5d 20 7d 0a 09  lineLength>] }..
23850 09 09 09 64 65 66 61 75 6c 74 20 7b 0a 09 09 09  ...default {....
23860 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65  ..return [Comple
23870 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78  teFromList ${tex
23880 74 7d 20 5c 0a 09 09 09 09 09 5b 52 65 6d 6f 76  t} \......[Remov
23890 65 55 73 65 64 4f 70 74 69 6f 6e 73 20 24 7b 6c  eUsedOptions ${l
238a0 69 6e 65 7d 20 7b 0a 09 09 09 09 09 09 2d 61 6e  ine} {.......-an
238b0 63 68 6f 72 20 2d 66 69 6c 6c 20 2d 66 6f 6e 74  chor -fill -font
238c0 20 2d 6a 75 73 74 69 66 79 0a 09 09 09 09 09 09   -justify.......
238d0 2d 73 74 69 70 70 6c 65 20 2d 74 61 67 73 20 2d  -stipple -tags -
238e0 74 65 78 74 20 2d 77 69 64 74 68 0a 09 09 09 09  text -width.....
238f0 09 7d 5d 5d 0a 09 09 09 09 7d 0a 09 09 09 7d 0a  .}]].....}....}.
23900 09 09 7d 0a 09 09 77 69 6e 64 6f 77 20 7b 0a 09  ..}...window {..
23910 09 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 70 72  ..switch -- ${pr
23920 65 76 7d 20 7b 0a 09 09 09 09 2d 61 6e 63 68 6f  ev} {.....-ancho
23930 72 20 7b 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70  r { return [Comp
23940 6c 65 74 65 41 6e 63 68 6f 72 20 24 7b 74 65 78  leteAnchor ${tex
23950 74 7d 5d 20 7d 0a 09 09 09 09 2d 68 65 69 67 68  t}] }.....-heigh
23960 74 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70  t { return [Disp
23970 6c 61 79 48 69 6e 74 73 20 3c 70 69 78 65 6c 73  layHints <pixels
23980 3e 5d 20 7d 0a 09 09 09 09 2d 74 61 67 73 20 7b  >] }.....-tags {
23990 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
239a0 48 69 6e 74 73 20 3c 74 61 67 4c 69 73 74 3e 5d  Hints <tagList>]
239b0 20 7d 0a 09 09 09 09 2d 77 69 64 74 68 20 7b 20   }.....-width { 
239c0 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
239d0 69 6e 74 73 20 3c 6c 69 6e 65 57 69 64 74 68 3e  ints <lineWidth>
239e0 5d 20 7d 0a 09 09 09 09 2d 77 69 6e 64 6f 77 20  ] }.....-window 
239f0 7b 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b 54  {......return [T
23a00 72 79 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78  ryFromList ${tex
23a10 74 7d 20 5b 57 69 64 67 65 74 43 68 69 6c 64 72  t} [WidgetChildr
23a20 65 6e 20 24 7b 74 65 78 74 7d 5d 5d 0a 09 09 09  en ${text}]]....
23a30 09 7d 0a 09 09 09 09 64 65 66 61 75 6c 74 20 7b  .}.....default {
23a40 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b 43 6f  ......return [Co
23a50 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24  mpleteFromList $
23a60 7b 74 65 78 74 7d 20 5c 0a 09 09 09 09 09 5b 52  {text} \......[R
23a70 65 6d 6f 76 65 55 73 65 64 4f 70 74 69 6f 6e 73  emoveUsedOptions
23a80 20 24 7b 6c 69 6e 65 7d 20 7b 0a 09 09 09 09 09   ${line} {......
23a90 09 2d 61 6e 63 68 6f 72 20 2d 68 65 69 67 68 74  .-anchor -height
23aa0 20 2d 74 61 67 73 20 2d 77 69 64 74 68 20 2d 77   -tags -width -w
23ab0 69 6e 64 6f 77 0a 09 09 09 09 09 7d 5d 5d 0a 09  indow......}]]..
23ac0 09 09 09 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 7d  ...}....}...}..}
23ad0 0a 7d 0a 0a 23 2a 2a 0a 23 20 57 69 64 67 65 74  .}..#**.# Widget
23ae0 58 76 69 65 77 59 76 69 65 77 0a 23 20 0a 23 20  XviewYview.# .# 
23af0 40 70 61 72 61 6d 20 20 20 20 74 65 78 74 20 20  @param    text  
23b00 2d 2d 20 74 68 65 20 77 6f 72 64 20 74 6f 20 63  -- the word to c
23b10 6f 6d 70 6c 65 74 65 2e 0a 23 20 40 70 61 72 61  omplete..# @para
23b20 6d 20 20 20 20 6c 69 6e 65 20 20 2d 2d 20 74 68  m    line  -- th
23b30 65 20 6c 69 6e 65 20 67 61 74 68 65 72 65 64 20  e line gathered 
23b40 73 6f 20 66 61 72 2e 0a 23 20 40 70 61 72 61 6d  so far..# @param
23b50 20 20 20 20 70 6f 73 20 20 20 2d 2d 20 74 68 65      pos   -- the
23b60 20 63 75 72 72 65 6e 74 20 77 6f 72 64 20 70 6f   current word po
23b70 73 69 74 69 6f 6e 2e 0a 23 20 40 70 61 72 61 6d  sition..# @param
23b80 20 20 20 20 70 72 65 76 20 20 2d 2d 20 74 68 65      prev  -- the
23b90 20 70 72 65 76 69 6f 75 73 20 77 6f 72 64 2e 0a   previous word..
23ba0 23 20 40 72 65 74 75 72 6e 20 20 20 61 20 73 74  # @return   a st
23bb0 64 20 74 63 6c 72 65 61 64 6c 69 6e 65 20 66 6f  d tclreadline fo
23bc0 72 6d 61 74 74 65 64 20 63 6f 6d 70 6c 65 74 65  rmatted complete
23bd0 72 20 73 74 72 69 6e 67 2e 0a 23 20 40 73 61 20  r string..# @sa 
23be0 20 20 20 20 20 20 43 61 6e 76 61 73 4f 62 6a 2c        CanvasObj,
23bf0 20 45 6e 74 72 79 4f 62 6a 0a 23 20 40 64 61 74   EntryObj.# @dat
23c00 65 20 20 20 20 20 53 65 70 2d 31 38 2d 31 39 39  e     Sep-18-199
23c10 39 0a 23 0a 70 72 6f 63 20 57 69 64 67 65 74 58  9.#.proc WidgetX
23c20 76 69 65 77 59 76 69 65 77 20 7b 74 65 78 74 20  viewYview {text 
23c30 6c 69 6e 65 20 70 6f 73 20 70 72 65 76 7d 20 7b  line pos prev} {
23c40 0a 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 70 6f  ..switch -- ${po
23c50 73 7d 20 7b 0a 09 09 32 20 7b 20 72 65 74 75 72  s} {...2 { retur
23c60 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c  n [CompleteFromL
23c70 69 73 74 20 24 7b 74 65 78 74 7d 20 7b 3c 69 6e  ist ${text} {<in
23c80 64 65 78 3e 20 6d 6f 76 65 74 6f 20 73 63 72 6f  dex> moveto scro
23c90 6c 6c 7d 5d 20 7d 0a 09 09 33 20 7b 0a 09 09 09  ll}] }...3 {....
23ca0 73 77 69 74 63 68 20 2d 2d 20 24 7b 70 72 65 76  switch -- ${prev
23cb0 7d 20 7b 0a 09 09 09 09 6d 6f 76 65 74 6f 20 7b  } {.....moveto {
23cc0 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
23cd0 48 69 6e 74 73 20 3c 66 72 61 63 74 69 6f 6e 3e  Hints <fraction>
23ce0 5d 20 7d 0a 09 09 09 09 73 63 72 6f 6c 6c 20 7b  ] }.....scroll {
23cf0 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
23d00 48 69 6e 74 73 20 3c 6e 75 6d 62 65 72 3e 5d 20  Hints <number>] 
23d10 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 09 34 20 7b  }....}...}...4 {
23d20 0a 09 09 09 73 65 74 20 73 75 62 63 6d 64 20 5b  ....set subcmd [
23d30 4c 69 6e 64 65 78 20 24 7b 6c 69 6e 65 7d 20 32  Lindex ${line} 2
23d40 5d 0a 09 09 09 73 77 69 74 63 68 20 2d 2d 20 24  ]....switch -- $
23d50 7b 73 75 62 63 6d 64 7d 20 7b 0a 09 09 09 09 73  {subcmd} {.....s
23d60 63 72 6f 6c 6c 20 7b 20 72 65 74 75 72 6e 20 5b  croll { return [
23d70 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 77 68  DisplayHints <wh
23d80 61 74 3e 5d 20 7d 0a 09 09 09 7d 0a 09 09 7d 0a  at>] }....}...}.
23d90 09 7d 0a 7d 0a 0a 23 2a 2a 0a 23 20 57 69 64 67  .}.}..#**.# Widg
23da0 65 74 53 63 61 6e 0a 23 20 0a 23 20 40 70 61 72  etScan.# .# @par
23db0 61 6d 20 20 20 20 74 65 78 74 20 20 2d 2d 20 74  am    text  -- t
23dc0 68 65 20 77 6f 72 64 20 74 6f 20 63 6f 6d 70 6c  he word to compl
23dd0 65 74 65 2e 0a 23 20 40 70 61 72 61 6d 20 20 20  ete..# @param   
23de0 20 70 6f 73 20 20 20 2d 2d 20 74 68 65 20 63 75   pos   -- the cu
23df0 72 72 65 6e 74 20 77 6f 72 64 20 70 6f 73 69 74  rrent word posit
23e00 69 6f 6e 2e 0a 23 20 40 72 65 74 75 72 6e 20 20  ion..# @return  
23e10 20 61 20 73 74 64 20 74 63 6c 72 65 61 64 6c 69   a std tclreadli
23e20 6e 65 20 66 6f 72 6d 61 74 74 65 64 20 63 6f 6d  ne formatted com
23e30 70 6c 65 74 65 72 20 73 74 72 69 6e 67 2e 0a 23  pleter string..#
23e40 20 40 73 61 20 20 20 20 20 20 20 43 61 6e 76 61   @sa       Canva
23e50 73 4f 62 6a 2c 20 45 6e 74 72 79 4f 62 6a 0a 23  sObj, EntryObj.#
23e60 20 40 64 61 74 65 20 20 20 20 20 53 65 70 2d 31   @date     Sep-1
23e70 38 2d 31 39 39 39 0a 23 0a 70 72 6f 63 20 57 69  8-1999.#.proc Wi
23e80 64 67 65 74 53 63 61 6e 20 7b 74 65 78 74 20 70  dgetScan {text p
23e90 6f 73 7d 20 7b 0a 09 73 77 69 74 63 68 20 2d 2d  os} {..switch --
23ea0 20 24 7b 70 6f 73 7d 20 7b 0a 09 09 32 20 7b 20   ${pos} {...2 { 
23eb0 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65  return [Complete
23ec0 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d  FromList ${text}
23ed0 20 7b 6d 61 72 6b 20 64 72 61 67 74 6f 7d 5d 20   {mark dragto}] 
23ee0 7d 0a 09 09 33 20 7b 20 72 65 74 75 72 6e 20 5b  }...3 { return [
23ef0 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 78 3e  DisplayHints <x>
23f00 5d 20 7d 0a 09 09 34 20 7b 20 72 65 74 75 72 6e  ] }...4 { return
23f10 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c   [DisplayHints <
23f20 79 3e 5d 20 7d 0a 09 7d 0a 7d 0a 0a 70 72 6f 63  y>] }..}.}..proc
23f30 20 43 61 6e 76 61 73 4f 62 6a 20 7b 74 65 78 74   CanvasObj {text
23f40 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20   start end line 
23f50 70 6f 73 7d 20 7b 0a 09 73 65 74 20 73 75 62 20  pos} {..set sub 
23f60 5b 4c 69 6e 64 65 78 20 24 7b 6c 69 6e 65 7d 20  [Lindex ${line} 
23f70 31 5d 0a 09 73 65 74 20 70 72 65 76 20 5b 50 72  1]..set prev [Pr
23f80 65 76 69 6f 75 73 57 6f 72 64 20 24 7b 73 74 61  eviousWord ${sta
23f90 72 74 7d 20 24 7b 6c 69 6e 65 7d 5d 0a 09 69 66  rt} ${line}]..if
23fa0 20 7b 31 20 3d 3d 20 24 70 6f 73 7d 20 7b 0a 09   {1 == $pos} {..
23fb0 09 72 65 74 75 72 6e 20 5b 54 72 79 53 75 62 43  .return [TrySubC
23fc0 6d 64 73 20 24 7b 74 65 78 74 7d 20 5b 4c 69 6e  mds ${text} [Lin
23fd0 64 65 78 20 24 7b 6c 69 6e 65 7d 20 30 5d 5d 0a  dex ${line} 0]].
23fe0 09 7d 0a 09 73 77 69 74 63 68 20 2d 2d 20 24 7b  .}..switch -- ${
23ff0 73 75 62 7d 20 7b 0a 09 09 61 64 64 74 61 67 20  sub} {...addtag 
24000 7b 0a 09 09 09 73 77 69 74 63 68 20 2d 2d 20 24  {....switch -- $
24010 7b 70 6f 73 7d 20 7b 0a 09 09 09 09 32 20 7b 20  {pos} {.....2 { 
24020 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
24030 69 6e 74 73 20 3c 74 61 67 3e 5d 20 7d 0a 09 09  ints <tag>] }...
24040 09 09 33 20 7b 0a 09 09 09 09 09 72 65 74 75 72  ..3 {......retur
24050 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c  n [CompleteFromL
24060 69 73 74 20 24 7b 74 65 78 74 7d 20 7b 0a 09 09  ist ${text} {...
24070 09 09 09 09 61 62 6f 76 65 20 61 6c 6c 20 62 65  ....above all be
24080 6c 6f 77 20 63 6c 6f 73 65 73 74 20 65 6e 63 6c  low closest encl
24090 6f 73 65 64 0a 09 09 09 09 09 09 6f 76 65 72 6c  osed.......overl
240a0 61 70 70 69 6e 67 20 77 69 74 68 74 61 67 0a 09  apping withtag..
240b0 09 09 09 09 7d 5d 0a 09 09 09 09 7d 0a 09 09 09  ....}].....}....
240c0 09 64 65 66 61 75 6c 74 20 7b 0a 09 09 09 09 09  .default {......
240d0 73 65 74 20 73 65 61 72 63 68 20 5b 4c 69 6e 64  set search [Lind
240e0 65 78 20 24 7b 6c 69 6e 65 7d 20 33 5d 0a 09 09  ex ${line} 3]...
240f0 09 09 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 73  ...switch -- ${s
24100 65 61 72 63 68 7d 20 7b 0a 09 09 09 09 09 09 61  earch} {.......a
24110 6c 6c 20 7b 7d 0a 09 09 09 09 09 09 61 62 6f 76  ll {}.......abov
24120 65 20 2d 0a 09 09 09 09 09 09 77 69 74 68 74 61  e -.......withta
24130 67 20 2d 0a 09 09 09 09 09 09 62 65 6c 6f 77 20  g -.......below 
24140 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
24150 79 48 69 6e 74 73 20 3c 74 61 67 4f 72 49 64 3e  yHints <tagOrId>
24160 5d 20 7d 0a 09 09 09 09 09 09 63 6c 6f 73 65 73  ] }.......closes
24170 74 20 7b 0a 09 09 09 09 09 09 09 73 77 69 74 63  t {........switc
24180 68 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09 09  h -- ${pos} {...
24190 09 09 09 09 09 09 34 20 7b 20 72 65 74 75 72 6e  ......4 { return
241a0 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c   [DisplayHints <
241b0 78 3e 5d 20 7d 0a 09 09 09 09 09 09 09 09 35 20  x>] }.........5 
241c0 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
241d0 79 48 69 6e 74 73 20 3c 79 3e 5d 20 7d 0a 09 09  yHints <y>] }...
241e0 09 09 09 09 09 09 36 20 7b 20 72 65 74 75 72 6e  ......6 { return
241f0 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3f   [DisplayHints ?
24200 68 61 6c 6f 3f 5d 20 7d 0a 09 09 09 09 09 09 09  halo?] }........
24210 09 37 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73  .7 { return [Dis
24220 70 6c 61 79 48 69 6e 74 73 20 3f 73 74 61 72 74  playHints ?start
24230 3f 5d 20 7d 0a 09 09 09 09 09 09 09 7d 0a 09 09  ?] }........}...
24240 09 09 09 09 7d 0a 09 09 09 09 09 09 65 6e 63 6c  ....}.......encl
24250 6f 73 65 64 20 2d 0a 09 09 09 09 09 09 6f 76 65  osed -.......ove
24260 72 6c 61 70 70 69 6e 67 20 7b 0a 09 09 09 09 09  rlapping {......
24270 09 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 70 6f  ..switch -- ${po
24280 73 7d 20 7b 0a 09 09 09 09 09 09 09 09 34 20 7b  s} {.........4 {
24290 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
242a0 48 69 6e 74 73 20 3c 78 31 3e 5d 20 7d 0a 09 09  Hints <x1>] }...
242b0 09 09 09 09 09 09 35 20 7b 20 72 65 74 75 72 6e  ......5 { return
242c0 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c   [DisplayHints <
242d0 79 31 3e 5d 20 7d 0a 09 09 09 09 09 09 09 09 36  y1>] }.........6
242e0 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
242f0 61 79 48 69 6e 74 73 20 3c 78 32 3e 5d 20 7d 0a  ayHints <x2>] }.
24300 09 09 09 09 09 09 09 09 37 20 7b 20 72 65 74 75  ........7 { retu
24310 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
24320 20 3c 79 32 3e 5d 20 7d 0a 09 09 09 09 09 09 09   <y2>] }........
24330 7d 0a 09 09 09 09 09 09 7d 0a 09 09 09 09 09 7d  }.......}......}
24340 0a 09 09 09 09 7d 0a 09 09 09 7d 0a 09 09 7d 0a  .....}....}...}.
24350 09 09 62 62 6f 78 20 7b 0a 09 09 09 73 77 69 74  ..bbox {....swit
24360 63 68 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09  ch -- ${pos} {..
24370 09 09 09 32 20 7b 20 72 65 74 75 72 6e 20 5b 44  ...2 { return [D
24380 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 74 61 67  isplayHints <tag
24390 4f 72 49 64 3e 5d 20 7d 0a 09 09 09 09 64 65 66  OrId>] }.....def
243a0 61 75 6c 74 20 7b 20 72 65 74 75 72 6e 20 5b 44  ault { return [D
243b0 69 73 70 6c 61 79 48 69 6e 74 73 20 3f 74 61 67  isplayHints ?tag
243c0 4f 72 49 64 3f 5d 20 7d 0a 09 09 09 7d 0a 09 09  OrId?] }....}...
243d0 7d 0a 09 09 62 69 6e 64 20 7b 0a 09 09 09 73 77  }...bind {....sw
243e0 69 74 63 68 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b  itch -- ${pos} {
243f0 0a 09 09 09 09 32 20 7b 20 72 65 74 75 72 6e 20  .....2 { return 
24400 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 74  [DisplayHints <t
24410 61 67 4f 72 49 64 3e 5d 20 7d 0a 09 09 09 09 33  agOrId>] }.....3
24420 20 7b 0a 09 09 09 09 09 73 65 74 20 66 75 6c 6c   {......set full
24430 74 65 78 74 20 5b 4c 69 6e 64 65 78 20 24 7b 6c  text [Lindex ${l
24440 69 6e 65 7d 20 33 5d 0a 09 09 09 09 09 72 65 74  ine} 3]......ret
24450 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 53 65 71  urn [CompleteSeq
24460 75 65 6e 63 65 20 24 7b 74 65 78 74 7d 20 24 7b  uence ${text} ${
24470 66 75 6c 6c 74 65 78 74 7d 5d 0a 09 09 09 09 09  fulltext}]......
24480 23 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  # return [Displa
24490 79 48 69 6e 74 73 20 3f 73 65 71 75 65 6e 63 65  yHints ?sequence
244a0 3f 5d 0a 09 09 09 09 7d 0a 09 09 09 09 64 65 66  ?].....}.....def
244b0 61 75 6c 74 20 7b 0a 09 09 09 09 09 72 65 74 75  ault {......retu
244c0 72 6e 20 5b 42 72 61 63 65 4f 72 43 6f 6d 6d 61  rn [BraceOrComma
244d0 6e 64 20 24 7b 74 65 78 74 7d 20 5c 0a 09 09 09  nd ${text} \....
244e0 09 09 24 7b 73 74 61 72 74 7d 20 24 7b 65 6e 64  ..${start} ${end
244f0 7d 20 24 7b 6c 69 6e 65 7d 20 24 7b 70 6f 73 7d  } ${line} ${pos}
24500 20 24 7b 74 65 78 74 7d 5d 0a 09 09 09 09 7d 0a   ${text}].....}.
24510 09 09 09 7d 0a 09 09 7d 0a 09 09 63 61 6e 76 61  ...}...}...canva
24520 73 78 20 7b 0a 09 09 09 73 77 69 74 63 68 20 2d  sx {....switch -
24530 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09 09 09 09 32  - ${pos} {.....2
24540 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
24550 61 79 48 69 6e 74 73 20 3c 73 63 72 65 65 6e 78  ayHints <screenx
24560 3e 5d 20 7d 0a 09 09 09 09 33 20 7b 20 72 65 74  >] }.....3 { ret
24570 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
24580 73 20 3f 67 72 69 64 73 70 61 63 69 6e 67 3f 5d  s ?gridspacing?]
24590 20 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 09 63 61   }....}...}...ca
245a0 6e 76 61 73 79 20 7b 0a 09 09 09 73 77 69 74 63  nvasy {....switc
245b0 68 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09 09  h -- ${pos} {...
245c0 09 09 32 20 7b 20 72 65 74 75 72 6e 20 5b 44 69  ..2 { return [Di
245d0 73 70 6c 61 79 48 69 6e 74 73 20 3c 73 63 72 65  splayHints <scre
245e0 65 6e 79 3e 5d 20 7d 0a 09 09 09 09 33 20 7b 20  eny>] }.....3 { 
245f0 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
24600 69 6e 74 73 20 3f 67 72 69 64 73 70 61 63 69 6e  ints ?gridspacin
24610 67 3f 5d 20 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09  g?] }....}...}..
24620 09 63 6f 6f 72 64 73 20 7b 0a 09 09 09 73 77 69  .coords {....swi
24630 74 63 68 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a  tch -- ${pos} {.
24640 09 09 09 09 32 20 7b 20 72 65 74 75 72 6e 20 5b  ....2 { return [
24650 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 74 61  DisplayHints <ta
24660 67 4f 72 49 64 3e 5d 20 7d 0a 09 09 09 09 64 65  gOrId>] }.....de
24670 66 61 75 6c 74 20 7b 0a 09 09 09 09 09 73 77 69  fault {......swi
24680 74 63 68 20 5b 65 78 70 72 20 24 7b 70 6f 73 7d  tch [expr ${pos}
24690 20 25 20 32 5d 20 7b 0a 09 09 09 09 09 09 31 20   % 2] {.......1 
246a0 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
246b0 79 48 69 6e 74 73 20 3f 78 3f 5d 20 7d 0a 09 09  yHints ?x?] }...
246c0 09 09 09 09 30 20 7b 20 72 65 74 75 72 6e 20 5b  ....0 { return [
246d0 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3f 79 3f  DisplayHints ?y?
246e0 5d 20 7d 0a 09 09 09 09 09 7d 0a 09 09 09 09 7d  ] }......}.....}
246f0 0a 09 09 09 7d 0a 09 09 7d 0a 09 09 64 63 68 61  ....}...}...dcha
24700 72 73 20 7b 0a 09 09 09 73 77 69 74 63 68 20 2d  rs {....switch -
24710 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09 09 09 09 32  - ${pos} {.....2
24720 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
24730 61 79 48 69 6e 74 73 20 3c 74 61 67 4f 72 49 64  ayHints <tagOrId
24740 3e 5d 20 7d 0a 09 09 09 09 33 20 7b 20 72 65 74  >] }.....3 { ret
24750 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
24760 73 20 3c 66 69 72 73 74 3e 5d 20 7d 0a 09 09 09  s <first>] }....
24770 09 34 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73  .4 { return [Dis
24780 70 6c 61 79 48 69 6e 74 73 20 3f 6c 61 73 74 3f  playHints ?last?
24790 5d 20 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 09 64  ] }....}...}...d
247a0 65 6c 65 74 65 20 7b 20 72 65 74 75 72 6e 20 5b  elete { return [
247b0 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3f 74 61  DisplayHints ?ta
247c0 67 4f 72 49 64 3f 5d 20 7d 0a 09 09 64 74 61 67  gOrId?] }...dtag
247d0 20 7b 0a 09 09 09 73 77 69 74 63 68 20 2d 2d 20   {....switch -- 
247e0 24 7b 70 6f 73 7d 20 7b 0a 09 09 09 09 32 20 7b  ${pos} {.....2 {
247f0 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
24800 48 69 6e 74 73 20 3c 74 61 67 4f 72 49 64 3e 5d  Hints <tagOrId>]
24810 20 7d 0a 09 09 09 09 33 20 7b 20 72 65 74 75 72   }.....3 { retur
24820 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
24830 3f 74 61 67 54 6f 44 65 6c 65 74 65 3f 5d 20 7d  ?tagToDelete?] }
24840 0a 09 09 09 7d 0a 09 09 7d 0a 09 09 66 69 6e 64  ....}...}...find
24850 20 7b 0a 09 09 09 73 77 69 74 63 68 20 2d 2d 20   {....switch -- 
24860 24 7b 70 6f 73 7d 20 7b 0a 09 09 09 09 32 20 7b  ${pos} {.....2 {
24870 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b 54 72  ......return [Tr
24880 79 53 75 62 43 6d 64 73 20 24 7b 74 65 78 74 7d  ySubCmds ${text}
24890 20 5b 4c 72 61 6e 67 65 20 24 7b 6c 69 6e 65 7d   [Lrange ${line}
248a0 20 30 20 31 5d 5d 0a 09 09 09 09 7d 0a 09 09 09   0 1]].....}....
248b0 09 64 65 66 61 75 6c 74 20 7b 20 72 65 74 75 72  .default { retur
248c0 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
248d0 3f 61 72 67 3f 5d 20 7d 0a 09 09 09 7d 0a 09 09  ?arg?] }....}...
248e0 7d 0a 09 09 66 6f 63 75 73 20 7b 0a 09 09 09 73  }...focus {....s
248f0 77 69 74 63 68 20 2d 2d 20 24 7b 70 6f 73 7d 20  witch -- ${pos} 
24900 7b 0a 09 09 09 09 32 20 7b 20 72 65 74 75 72 6e  {.....2 { return
24910 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3f   [DisplayHints ?
24920 74 61 67 4f 72 49 64 3f 5d 20 7d 0a 09 09 09 7d  tagOrId?] }....}
24930 0a 09 09 7d 0a 09 09 67 65 74 74 61 67 73 20 7b  ...}...gettags {
24940 0a 09 09 09 73 77 69 74 63 68 20 2d 2d 20 24 7b  ....switch -- ${
24950 70 6f 73 7d 20 7b 0a 09 09 09 09 32 20 7b 20 72  pos} {.....2 { r
24960 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
24970 6e 74 73 20 3c 74 61 67 4f 72 49 64 3e 5d 20 7d  nts <tagOrId>] }
24980 0a 09 09 09 7d 0a 09 09 7d 0a 09 09 69 63 75 72  ....}...}...icur
24990 73 6f 72 20 2d 0a 09 09 69 6e 64 65 78 20 7b 0a  sor -...index {.
249a0 09 09 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 70  ...switch -- ${p
249b0 6f 73 7d 20 7b 0a 09 09 09 09 32 20 7b 20 72 65  os} {.....2 { re
249c0 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
249d0 74 73 20 3c 74 61 67 4f 72 49 64 3e 5d 20 7d 0a  ts <tagOrId>] }.
249e0 09 09 09 09 33 20 7b 20 72 65 74 75 72 6e 20 5b  ....3 { return [
249f0 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 69 6e  DisplayHints <in
24a00 64 65 78 3e 5d 20 7d 0a 09 09 09 7d 0a 09 09 7d  dex>] }....}...}
24a10 0a 09 09 69 6e 73 65 72 74 20 7b 0a 09 09 09 73  ...insert {....s
24a20 77 69 74 63 68 20 2d 2d 20 24 7b 70 6f 73 7d 20  witch -- ${pos} 
24a30 7b 0a 09 09 09 09 32 20 7b 20 72 65 74 75 72 6e  {.....2 { return
24a40 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c   [DisplayHints <
24a50 74 61 67 4f 72 49 64 3e 5d 20 7d 0a 09 09 09 09  tagOrId>] }.....
24a60 33 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70  3 { return [Disp
24a70 6c 61 79 48 69 6e 74 73 20 3c 62 65 66 6f 72 65  layHints <before
24a80 54 68 69 73 3e 5d 20 7d 0a 09 09 09 09 34 20 7b  This>] }.....4 {
24a90 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
24aa0 48 69 6e 74 73 20 3c 73 74 72 69 6e 67 3e 5d 20  Hints <string>] 
24ab0 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 09 6c 6f 77  }....}...}...low
24ac0 65 72 20 7b 0a 09 09 09 73 77 69 74 63 68 20 2d  er {....switch -
24ad0 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09 09 09 09 32  - ${pos} {.....2
24ae0 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
24af0 61 79 48 69 6e 74 73 20 3c 74 61 67 4f 72 49 64  ayHints <tagOrId
24b00 3e 5d 20 7d 0a 09 09 09 09 33 20 7b 20 72 65 74  >] }.....3 { ret
24b10 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
24b20 73 20 3f 62 65 6c 6f 77 54 68 69 73 3f 5d 20 7d  s ?belowThis?] }
24b30 0a 09 09 09 7d 0a 09 09 7d 0a 09 09 6d 6f 76 65  ....}...}...move
24b40 20 7b 0a 09 09 09 73 77 69 74 63 68 20 2d 2d 20   {....switch -- 
24b50 24 7b 70 6f 73 7d 20 7b 0a 09 09 09 09 32 20 7b  ${pos} {.....2 {
24b60 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
24b70 48 69 6e 74 73 20 3c 74 61 67 4f 72 49 64 3e 5d  Hints <tagOrId>]
24b80 20 7d 0a 09 09 09 09 33 20 7b 20 72 65 74 75 72   }.....3 { retur
24b90 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
24ba0 3c 78 41 6d 6f 75 6e 74 3e 5d 20 7d 0a 09 09 09  <xAmount>] }....
24bb0 09 34 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73  .4 { return [Dis
24bc0 70 6c 61 79 48 69 6e 74 73 20 3c 79 41 6d 6f 75  playHints <yAmou
24bd0 6e 74 3e 5d 20 7d 0a 09 09 09 7d 0a 09 09 7d 0a  nt>] }....}...}.
24be0 09 09 70 6f 73 74 73 63 72 69 70 74 20 7b 0a 09  ..postscript {..
24bf0 09 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 70 72  ..switch -- ${pr
24c00 65 76 7d 20 7b 0a 09 09 09 09 2d 66 69 6c 65 20  ev} {.....-file 
24c10 7b 20 72 65 74 75 72 6e 20 22 22 20 7d 0a 09 09  { return "" }...
24c20 09 09 2d 63 6f 6c 6f 72 6d 61 70 20 2d 0a 09 09  ..-colormap -...
24c30 09 09 2d 63 6f 6c 6f 72 6d 6f 64 65 20 2d 0a 09  ..-colormode -..
24c40 09 09 09 2d 66 6f 6e 74 6d 61 70 20 2d 0a 09 09  ...-fontmap -...
24c50 09 09 2d 68 65 69 67 68 74 20 2d 0a 09 09 09 09  ..-height -.....
24c60 2d 70 61 67 65 61 6e 63 68 6f 72 20 2d 0a 09 09  -pageanchor -...
24c70 09 09 2d 70 61 67 65 68 65 69 67 68 74 20 2d 0a  ..-pageheight -.
24c80 09 09 09 09 2d 70 61 67 65 77 69 64 74 68 20 2d  ....-pagewidth -
24c90 0a 09 09 09 09 2d 70 61 67 65 78 20 2d 0a 09 09  .....-pagex -...
24ca0 09 09 2d 70 61 67 65 79 20 2d 0a 09 09 09 09 2d  ..-pagey -.....-
24cb0 72 6f 74 61 74 65 20 2d 0a 09 09 09 09 2d 77 69  rotate -.....-wi
24cc0 64 74 68 20 2d 0a 09 09 09 09 2d 78 20 2d 0a 09  dth -.....-x -..
24cd0 09 09 09 2d 79 20 7b 20 72 65 74 75 72 6e 20 5b  ...-y { return [
24ce0 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 5b 53  DisplayHints <[S
24cf0 74 72 69 6e 67 20 72 61 6e 67 65 20 24 7b 70 72  tring range ${pr
24d00 65 76 7d 20 31 20 65 6e 64 5d 3e 5d 20 7d 0a 09  ev} 1 end]>] }..
24d10 09 09 09 64 65 66 61 75 6c 74 20 7b 0a 09 09 09  ...default {....
24d20 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65  ..return [Comple
24d30 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78  teFromList ${tex
24d40 74 7d 20 5c 0a 09 09 09 09 09 5b 52 65 6d 6f 76  t} \......[Remov
24d50 65 55 73 65 64 4f 70 74 69 6f 6e 73 20 24 7b 6c  eUsedOptions ${l
24d60 69 6e 65 7d 20 7b 0a 09 09 09 09 09 09 2d 63 6f  ine} {.......-co
24d70 6c 6f 72 6d 61 70 20 2d 63 6f 6c 6f 72 6d 6f 64  lormap -colormod
24d80 65 20 2d 66 69 6c 65 20 2d 66 6f 6e 74 6d 61 70  e -file -fontmap
24d90 20 2d 68 65 69 67 68 74 0a 09 09 09 09 09 09 2d   -height.......-
24da0 70 61 67 65 61 6e 63 68 6f 72 20 2d 70 61 67 65  pageanchor -page
24db0 68 65 69 67 68 74 20 2d 70 61 67 65 77 69 64 74  height -pagewidt
24dc0 68 20 2d 70 61 67 65 78 0a 09 09 09 09 09 09 2d  h -pagex.......-
24dd0 70 61 67 65 79 20 2d 72 6f 74 61 74 65 20 2d 77  pagey -rotate -w
24de0 69 64 74 68 20 2d 78 20 2d 79 0a 09 09 09 09 09  idth -x -y......
24df0 7d 5d 5d 0a 09 09 09 09 7d 0a 09 09 09 7d 0a 09  }]].....}....}..
24e00 09 7d 0a 09 09 72 61 69 73 65 20 7b 0a 09 09 09  .}...raise {....
24e10 73 77 69 74 63 68 20 2d 2d 20 24 7b 70 6f 73 7d  switch -- ${pos}
24e20 20 7b 0a 09 09 09 09 32 20 7b 20 72 65 74 75 72   {.....2 { retur
24e30 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
24e40 3c 74 61 67 4f 72 49 64 3e 5d 20 7d 0a 09 09 09  <tagOrId>] }....
24e50 09 33 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73  .3 { return [Dis
24e60 70 6c 61 79 48 69 6e 74 73 20 3f 61 62 6f 76 65  playHints ?above
24e70 54 68 69 73 3f 5d 20 7d 0a 09 09 09 7d 0a 09 09  This?] }....}...
24e80 7d 0a 09 09 73 63 61 6c 65 20 7b 0a 09 09 09 73  }...scale {....s
24e90 77 69 74 63 68 20 2d 2d 20 24 7b 70 6f 73 7d 20  witch -- ${pos} 
24ea0 7b 0a 09 09 09 09 32 20 7b 20 72 65 74 75 72 6e  {.....2 { return
24eb0 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c   [DisplayHints <
24ec0 74 61 67 4f 72 49 64 3e 5d 20 7d 0a 09 09 09 09  tagOrId>] }.....
24ed0 33 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70  3 { return [Disp
24ee0 6c 61 79 48 69 6e 74 73 20 3c 78 4f 72 69 67 69  layHints <xOrigi
24ef0 6e 3e 5d 20 7d 0a 09 09 09 09 34 20 7b 20 72 65  n>] }.....4 { re
24f00 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
24f10 74 73 20 3c 79 4f 72 69 67 69 6e 3e 5d 20 7d 0a  ts <yOrigin>] }.
24f20 09 09 09 09 35 20 7b 20 72 65 74 75 72 6e 20 5b  ....5 { return [
24f30 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 78 53  DisplayHints <xS
24f40 63 61 6c 65 3e 5d 20 7d 0a 09 09 09 09 36 20 7b  cale>] }.....6 {
24f50 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
24f60 48 69 6e 74 73 20 3c 79 53 63 61 6c 65 3e 5d 20  Hints <yScale>] 
24f70 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 09 73 63 61  }....}...}...sca
24f80 6e 20 7b 20 72 65 74 75 72 6e 20 5b 57 69 64 67  n { return [Widg
24f90 65 74 53 63 61 6e 20 24 7b 74 65 78 74 7d 20 24  etScan ${text} $
24fa0 7b 70 6f 73 7d 5d 20 7d 0a 09 09 73 65 6c 65 63  {pos}] }...selec
24fb0 74 20 7b 0a 09 09 09 73 77 69 74 63 68 20 2d 2d  t {....switch --
24fc0 20 24 7b 70 6f 73 7d 20 7b 0a 09 09 09 09 32 20   ${pos} {.....2 
24fd0 7b 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b 43  {......return [C
24fe0 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20  ompleteFromList 
24ff0 24 7b 74 65 78 74 7d 20 7b 0a 09 09 09 09 09 09  ${text} {.......
25000 61 64 6a 75 73 74 20 63 6c 65 61 72 20 69 74 65  adjust clear ite
25010 6d 20 66 72 6f 6d 20 74 6f 0a 09 09 09 09 09 7d  m from to......}
25020 5d 0a 09 09 09 09 7d 0a 09 09 09 09 33 20 7b 0a  ].....}.....3 {.
25030 09 09 09 09 09 73 65 74 20 73 75 62 20 5b 4c 69  .....set sub [Li
25040 6e 64 65 78 20 24 7b 6c 69 6e 65 7d 20 32 5d 0a  ndex ${line} 2].
25050 09 09 09 09 09 73 77 69 74 63 68 20 2d 2d 20 24  .....switch -- $
25060 7b 73 75 62 7d 20 7b 0a 09 09 09 09 09 09 61 64  {sub} {.......ad
25070 6a 75 73 74 20 2d 0a 09 09 09 09 09 09 66 72 6f  just -.......fro
25080 6d 20 2d 0a 09 09 09 09 09 09 74 6f 20 7b 20 72  m -.......to { r
25090 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
250a0 6e 74 73 20 3c 74 61 67 4f 72 49 64 3e 5d 20 7d  nts <tagOrId>] }
250b0 0a 09 09 09 09 09 7d 0a 09 09 09 09 7d 0a 09 09  ......}.....}...
250c0 09 09 34 20 7b 0a 09 09 09 09 09 73 65 74 20 73  ..4 {......set s
250d0 75 62 20 5b 4c 69 6e 64 65 78 20 24 7b 6c 69 6e  ub [Lindex ${lin
250e0 65 7d 20 32 5d 0a 09 09 09 09 09 73 77 69 74 63  e} 2]......switc
250f0 68 20 2d 2d 20 24 7b 73 75 62 7d 20 7b 0a 09 09  h -- ${sub} {...
25100 09 09 09 09 61 64 6a 75 73 74 20 2d 0a 09 09 09  ....adjust -....
25110 09 09 09 66 72 6f 6d 20 2d 0a 09 09 09 09 09 09  ...from -.......
25120 74 6f 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73  to { return [Dis
25130 70 6c 61 79 48 69 6e 74 73 20 3c 69 6e 64 65 78  playHints <index
25140 3e 5d 20 7d 0a 09 09 09 09 09 7d 0a 09 09 09 09  >] }......}.....
25150 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 09 78 76 69  }....}...}...xvi
25160 65 77 20 2d 0a 09 09 79 76 69 65 77 20 7b 20 72  ew -...yview { r
25170 65 74 75 72 6e 20 5b 58 76 69 65 77 59 76 69 65  eturn [XviewYvie
25180 77 20 24 7b 74 65 78 74 7d 20 24 7b 6c 69 6e 65  w ${text} ${line
25190 7d 20 24 7b 70 6f 73 7d 20 24 7b 70 72 65 76 7d  } ${pos} ${prev}
251a0 5d 20 7d 0a 09 09 63 72 65 61 74 65 20 7b 0a 09  ] }...create {..
251b0 09 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 70 6f  ..switch -- ${po
251c0 73 7d 20 7b 0a 09 09 09 09 32 20 7b 0a 09 09 09  s} {.....2 {....
251d0 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65  ..return [Comple
251e0 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78  teFromList ${tex
251f0 74 7d 20 7b 0a 09 09 09 09 09 09 61 72 63 20 62  t} {.......arc b
25200 69 74 6d 61 70 20 69 6d 61 67 65 20 6c 69 6e 65  itmap image line
25210 20 6f 76 61 6c 0a 09 09 09 09 09 09 70 6f 6c 79   oval.......poly
25220 67 6f 6e 20 72 65 63 74 61 6e 67 6c 65 20 74 65  gon rectangle te
25230 78 74 20 77 69 6e 64 6f 77 0a 09 09 09 09 09 7d  xt window......}
25240 5d 0a 09 09 09 09 7d 0a 09 09 09 09 33 20 7b 20  ].....}.....3 { 
25250 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
25260 69 6e 74 73 20 3c 78 31 3e 5d 20 7d 0a 09 09 09  ints <x1>] }....
25270 09 34 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73  .4 { return [Dis
25280 70 6c 61 79 48 69 6e 74 73 20 3c 79 31 3e 5d 20  playHints <y1>] 
25290 7d 0a 09 09 09 09 35 20 7b 0a 09 09 09 09 09 73  }.....5 {......s
252a0 65 74 20 74 79 70 65 20 5b 4c 69 6e 64 65 78 20  et type [Lindex 
252b0 24 7b 6c 69 6e 65 7d 20 32 5d 0a 09 09 09 09 09  ${line} 2]......
252c0 73 77 69 74 63 68 20 2d 2d 20 24 7b 74 79 70 65  switch -- ${type
252d0 7d 20 7b 0a 09 09 09 09 09 09 61 72 63 20 2d 0a  } {.......arc -.
252e0 09 09 09 09 09 09 6f 76 61 6c 20 2d 0a 09 09 09  ......oval -....
252f0 09 09 09 72 65 63 74 61 6e 67 6c 65 20 7b 20 72  ...rectangle { r
25300 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
25310 6e 74 73 20 3c 78 32 3e 5d 20 7d 0a 09 09 09 09  nts <x2>] }.....
25320 09 09 23 20 54 4f 44 4f 20 69 74 65 6d 73 20 77  ..# TODO items w
25330 69 74 68 20 6d 6f 72 65 20 74 68 61 6e 20 34 20  ith more than 4 
25340 63 6f 6f 72 64 69 6e 61 74 65 73 0a 09 09 09 09  coordinates.....
25350 09 09 64 65 66 61 75 6c 74 20 7b 0a 09 09 09 09  ..default {.....
25360 09 09 09 72 65 74 75 72 6e 20 5b 43 61 6e 76 61  ...return [Canva
25370 73 49 74 65 6d 20 24 7b 74 65 78 74 7d 20 24 7b  sItem ${text} ${
25380 73 74 61 72 74 7d 20 5c 0a 09 09 09 09 09 09 09  start} \........
25390 24 7b 65 6e 64 7d 20 24 7b 6c 69 6e 65 7d 20 24  ${end} ${line} $
253a0 7b 70 6f 73 7d 20 24 7b 70 72 65 76 7d 20 24 7b  {pos} ${prev} ${
253b0 74 79 70 65 7d 5d 0a 09 09 09 09 09 09 7d 0a 09  type}].......}..
253c0 09 09 09 09 7d 0a 09 09 09 09 7d 0a 09 09 09 09  ....}.....}.....
253d0 36 20 7b 0a 09 09 09 09 09 73 65 74 20 74 79 70  6 {......set typ
253e0 65 20 5b 4c 69 6e 64 65 78 20 24 7b 6c 69 6e 65  e [Lindex ${line
253f0 7d 20 32 5d 0a 09 09 09 09 09 73 77 69 74 63 68  } 2]......switch
25400 20 2d 2d 20 24 7b 74 79 70 65 7d 20 7b 0a 09 09   -- ${type} {...
25410 09 09 09 09 61 72 63 20 2d 0a 09 09 09 09 09 09  ....arc -.......
25420 6f 76 61 6c 20 2d 0a 09 09 09 09 09 09 72 65 63  oval -.......rec
25430 74 61 6e 67 6c 65 20 7b 20 72 65 74 75 72 6e 20  tangle { return 
25440 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 79  [DisplayHints <y
25450 32 3e 5d 20 7d 0a 09 09 09 09 09 09 23 20 54 4f  2>] }.......# TO
25460 44 4f 20 69 74 65 6d 73 20 77 69 74 68 20 6d 6f  DO items with mo
25470 72 65 20 74 68 61 6e 20 34 20 63 6f 6f 72 64 69  re than 4 coordi
25480 6e 61 74 65 73 0a 09 09 09 09 09 09 64 65 66 61  nates.......defa
25490 75 6c 74 20 7b 0a 09 09 09 09 09 09 09 72 65 74  ult {........ret
254a0 75 72 6e 20 5b 43 61 6e 76 61 73 49 74 65 6d 20  urn [CanvasItem 
254b0 24 7b 74 65 78 74 7d 20 24 7b 73 74 61 72 74 7d  ${text} ${start}
254c0 20 5c 0a 09 09 09 09 09 09 09 24 7b 65 6e 64 7d   \........${end}
254d0 20 24 7b 6c 69 6e 65 7d 20 24 7b 70 6f 73 7d 20   ${line} ${pos} 
254e0 24 7b 70 72 65 76 7d 20 24 7b 74 79 70 65 7d 5d  ${prev} ${type}]
254f0 0a 09 09 09 09 09 09 7d 0a 09 09 09 09 09 7d 0a  .......}......}.
25500 09 09 09 09 7d 0a 09 09 09 09 64 65 66 61 75 6c  ....}.....defaul
25510 74 20 7b 0a 09 09 09 09 09 73 65 74 20 74 79 70  t {......set typ
25520 65 20 5b 4c 69 6e 64 65 78 20 24 7b 6c 69 6e 65  e [Lindex ${line
25530 7d 20 32 5d 0a 09 09 09 09 09 23 20 54 4f 44 4f  } 2]......# TODO
25540 20 69 74 65 6d 73 20 77 69 74 68 20 6d 6f 72 65   items with more
25550 20 74 68 61 6e 20 34 20 63 6f 6f 72 64 69 6e 61   than 4 coordina
25560 74 65 73 0a 09 09 09 09 09 72 65 74 75 72 6e 20  tes......return 
25570 5b 43 61 6e 76 61 73 49 74 65 6d 20 24 7b 74 65  [CanvasItem ${te
25580 78 74 7d 20 24 7b 73 74 61 72 74 7d 20 5c 0a 09  xt} ${start} \..
25590 09 09 09 09 24 7b 65 6e 64 7d 20 24 7b 6c 69 6e  ....${end} ${lin
255a0 65 7d 20 24 7b 70 6f 73 7d 20 24 7b 70 72 65 76  e} ${pos} ${prev
255b0 7d 20 24 7b 74 79 70 65 7d 5d 0a 09 09 09 09 7d  } ${type}].....}
255c0 0a 09 09 09 7d 0a 09 09 7d 0a 09 09 69 74 65 6d  ....}...}...item
255d0 63 6f 6e 66 69 67 75 72 65 20 2d 0a 09 09 69 74  configure -...it
255e0 65 6d 63 67 65 74 20 7b 0a 09 09 09 73 77 69 74  emcget {....swit
255f0 63 68 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09  ch -- ${pos} {..
25600 09 09 09 32 20 7b 20 72 65 74 75 72 6e 20 5b 44  ...2 { return [D
25610 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 74 61 67  isplayHints <tag
25620 4f 72 49 64 3e 5d 20 7d 0a 09 09 09 09 64 65 66  OrId>] }.....def
25630 61 75 6c 74 20 7b 0a 0a 09 09 09 09 09 73 65 74  ault {.......set
25640 20 69 64 20 5b 4c 69 6e 64 65 78 20 24 7b 6c 69   id [Lindex ${li
25650 6e 65 7d 20 32 5d 0a 09 09 09 09 09 73 65 74 20  ne} 2]......set 
25660 74 79 70 65 20 5b 5b 4c 69 6e 64 65 78 20 24 7b  type [[Lindex ${
25670 6c 69 6e 65 7d 20 30 5d 20 74 79 70 65 20 24 7b  line} 0] type ${
25680 69 64 7d 5d 0a 09 09 09 09 09 69 66 20 7b 21 5b  id}]......if {![
25690 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 7b  string length ${
256a0 74 79 70 65 7d 5d 7d 20 7b 0a 09 09 09 09 09 09  type}]} {.......
256b0 72 65 74 75 72 6e 20 22 22 3b 20 23 20 6e 6f 20  return ""; # no 
256c0 73 75 63 68 20 65 6c 65 6d 65 6e 74 0a 09 09 09  such element....
256d0 09 09 7d 0a 0a 09 09 09 09 09 72 65 74 75 72 6e  ..}.......return
256e0 20 5b 43 61 6e 76 61 73 49 74 65 6d 20 24 7b 74   [CanvasItem ${t
256f0 65 78 74 7d 20 24 7b 73 74 61 72 74 7d 20 5c 0a  ext} ${start} \.
25700 09 09 09 09 09 24 7b 65 6e 64 7d 20 24 7b 6c 69  .....${end} ${li
25710 6e 65 7d 20 24 7b 70 6f 73 7d 20 24 7b 70 72 65  ne} ${pos} ${pre
25720 76 7d 20 24 7b 74 79 70 65 7d 5d 0a 09 09 09 09  v} ${type}].....
25730 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 7d 0a 09 72  }....}...}..}..r
25740 65 74 75 72 6e 20 22 22 0a 7d 0a 0a 70 72 6f 63  eturn "".}..proc
25750 20 45 6e 74 72 79 49 6e 64 65 78 20 74 65 78 74   EntryIndex text
25760 20 7b 0a 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70   {..return [Comp
25770 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74  leteFromList ${t
25780 65 78 74 7d 20 7b 0a 09 09 3c 6e 75 6d 62 65 72  ext} {...<number
25790 3e 20 3c 40 6e 75 6d 62 65 72 3e 20 61 6e 63 68  > <@number> anch
257a0 6f 72 20 65 6e 64 20 73 65 6c 2e 66 69 72 73 74  or end sel.first
257b0 20 73 65 6c 2e 6c 61 73 74 0a 09 7d 5d 0a 7d 0a   sel.last..}].}.
257c0 0a 70 72 6f 63 20 45 6e 74 72 79 4f 62 6a 20 7b  .proc EntryObj {
257d0 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c  text start end l
257e0 69 6e 65 20 70 6f 73 7d 20 7b 0a 09 73 65 74 20  ine pos} {..set 
257f0 73 75 62 20 5b 4c 69 6e 64 65 78 20 24 7b 6c 69  sub [Lindex ${li
25800 6e 65 7d 20 31 5d 0a 09 73 65 74 20 70 72 65 76  ne} 1]..set prev
25810 20 5b 50 72 65 76 69 6f 75 73 57 6f 72 64 20 24   [PreviousWord $
25820 7b 73 74 61 72 74 7d 20 24 7b 6c 69 6e 65 7d 5d  {start} ${line}]
25830 0a 09 69 66 20 7b 31 20 3d 3d 20 24 70 6f 73 7d  ..if {1 == $pos}
25840 20 7b 0a 09 09 72 65 74 75 72 6e 20 5b 54 72 79   {...return [Try
25850 53 75 62 43 6d 64 73 20 24 7b 74 65 78 74 7d 20  SubCmds ${text} 
25860 5b 4c 69 6e 64 65 78 20 24 7b 6c 69 6e 65 7d 20  [Lindex ${line} 
25870 30 5d 5d 0a 09 7d 0a 09 73 77 69 74 63 68 20 2d  0]]..}..switch -
25880 2d 20 24 7b 73 75 62 7d 20 7b 0a 09 09 62 62 6f  - ${sub} {...bbo
25890 78 20 2d 0a 09 09 69 63 75 72 73 6f 72 20 2d 0a  x -...icursor -.
258a0 09 09 69 6e 64 65 78 20 7b 20 72 65 74 75 72 6e  ..index { return
258b0 20 5b 45 6e 74 72 79 49 6e 64 65 78 20 24 7b 74   [EntryIndex ${t
258c0 65 78 74 7d 5d 20 7d 0a 09 09 63 67 65 74 20 7b  ext}] }...cget {
258d0 7d 0a 09 09 63 6f 6e 66 69 67 75 72 65 20 7b 7d  }...configure {}
258e0 0a 09 09 67 65 74 20 7b 7d 0a 09 09 69 6e 73 65  ...get {}...inse
258f0 72 74 20 7b 0a 09 09 09 73 77 69 74 63 68 20 2d  rt {....switch -
25900 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09 09 09 09 32  - ${pos} {.....2
25910 20 7b 20 72 65 74 75 72 6e 20 5b 45 6e 74 72 79   { return [Entry
25920 49 6e 64 65 78 20 24 7b 74 65 78 74 7d 5d 20 7d  Index ${text}] }
25930 0a 09 09 09 09 33 20 7b 20 72 65 74 75 72 6e 20  .....3 { return 
25940 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 73  [DisplayHints <s
25950 74 72 69 6e 67 3e 5d 20 7d 0a 09 09 09 7d 0a 09  tring>] }....}..
25960 09 7d 0a 09 09 73 63 61 6e 20 7b 20 72 65 74 75  .}...scan { retu
25970 72 6e 20 5b 57 69 64 67 65 74 53 63 61 6e 20 24  rn [WidgetScan $
25980 7b 74 65 78 74 7d 20 24 7b 70 6f 73 7d 5d 20 7d  {text} ${pos}] }
25990 0a 09 09 73 65 6c 65 63 74 69 6f 6e 20 7b 0a 09  ...selection {..
259a0 09 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 70 6f  ..switch -- ${po
259b0 73 7d 20 7b 0a 09 09 09 09 32 20 7b 0a 09 09 09  s} {.....2 {....
259c0 09 09 72 65 74 75 72 6e 20 5b 54 72 79 53 75 62  ..return [TrySub
259d0 43 6d 64 73 20 24 7b 74 65 78 74 7d 20 5b 4c 72  Cmds ${text} [Lr
259e0 61 6e 67 65 20 24 7b 6c 69 6e 65 7d 20 30 20 31  ange ${line} 0 1
259f0 5d 5d 0a 09 09 09 09 7d 0a 09 09 09 09 33 20 7b  ]].....}.....3 {
25a00 0a 09 09 09 09 09 73 77 69 74 63 68 20 2d 2d 20  ......switch -- 
25a10 24 7b 70 72 65 76 7d 20 7b 0a 09 09 09 09 09 09  ${prev} {.......
25a20 61 64 6a 75 73 74 20 2d 0a 09 09 09 09 09 09 66  adjust -.......f
25a30 72 6f 6d 20 2d 0a 09 09 09 09 09 09 74 6f 20 7b  rom -.......to {
25a40 20 72 65 74 75 72 6e 20 5b 45 6e 74 72 79 49 6e   return [EntryIn
25a50 64 65 78 20 24 7b 74 65 78 74 7d 5d 20 7d 0a 09  dex ${text}] }..
25a60 09 09 09 09 09 63 6c 65 61 72 20 2d 0a 09 09 09  .....clear -....
25a70 09 09 09 70 72 65 73 65 6e 74 20 7b 7d 0a 09 09  ...present {}...
25a80 09 09 09 09 72 61 6e 67 65 20 7b 20 72 65 74 75  ....range { retu
25a90 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
25aa0 20 3c 73 74 61 72 74 3e 5d 20 7d 0a 09 09 09 09   <start>] }.....
25ab0 09 7d 0a 09 09 09 09 7d 0a 09 09 09 09 34 20 7b  .}.....}.....4 {
25ac0 0a 09 09 09 09 09 73 77 69 74 63 68 20 2d 2d 20  ......switch -- 
25ad0 5b 4c 69 6e 64 65 78 20 24 7b 6c 69 6e 65 7d 20  [Lindex ${line} 
25ae0 32 5d 20 7b 0a 09 09 09 09 09 09 72 61 6e 67 65  2] {.......range
25af0 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
25b00 61 79 48 69 6e 74 73 20 3c 65 6e 64 3e 5d 20 7d  ayHints <end>] }
25b10 0a 09 09 09 09 09 7d 0a 09 09 09 09 7d 0a 09 09  ......}.....}...
25b20 09 7d 0a 09 09 7d 0a 09 09 78 76 69 65 77 20 2d  .}...}...xview -
25b30 0a 09 09 79 76 69 65 77 20 7b 20 72 65 74 75 72  ...yview { retur
25b40 6e 20 5b 57 69 64 67 65 74 58 76 69 65 77 59 76  n [WidgetXviewYv
25b50 69 65 77 20 24 7b 74 65 78 74 7d 20 24 7b 6c 69  iew ${text} ${li
25b60 6e 65 7d 20 24 7b 70 6f 73 7d 20 24 7b 70 72 65  ne} ${pos} ${pre
25b70 76 7d 5d 20 7d 0a 09 7d 0a 09 72 65 74 75 72 6e  v}] }..}..return
25b80 20 22 22 0a 7d 0a 0a 23 20 70 72 6f 63 20 43 68   "".}..# proc Ch
25b90 65 63 6b 62 75 74 74 6f 6e 4f 62 6a 20 7b 74 65  eckbuttonObj {te
25ba0 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e  xt start end lin
25bb0 65 20 70 6f 73 7d 20 7b 0a 23 20 74 68 65 20 66  e pos} {.# the f
25bc0 61 6c 6c 62 61 63 6b 20 72 6f 75 74 69 6e 65 73  allback routines
25bd0 20 64 6f 20 74 68 65 20 6a 6f 62 20 70 72 65 74   do the job pret
25be0 74 79 20 77 65 6c 6c 2e 0a 23 20 7d 0a 0a 23 20  ty well..# }..# 
25bf0 70 72 6f 63 20 46 72 61 6d 65 4f 62 6a 20 7b 74  proc FrameObj {t
25c00 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c 69  ext start end li
25c10 6e 65 20 70 6f 73 7d 20 7b 0a 23 20 74 68 65 20  ne pos} {.# the 
25c20 66 61 6c 6c 62 61 63 6b 20 72 6f 75 74 69 6e 65  fallback routine
25c30 73 20 64 6f 20 74 68 65 20 6a 6f 62 20 70 72 65  s do the job pre
25c40 74 74 79 20 77 65 6c 6c 2e 0a 23 20 7d 0a 0a 23  tty well..# }..#
25c50 20 70 72 6f 63 20 4c 61 62 65 6c 4f 62 6a 20 7b   proc LabelObj {
25c60 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20 6c  text start end l
25c70 69 6e 65 20 70 6f 73 7d 20 7b 0a 23 20 74 68 65  ine pos} {.# the
25c80 20 66 61 6c 6c 62 61 63 6b 20 72 6f 75 74 69 6e   fallback routin
25c90 65 73 20 64 6f 20 74 68 65 20 6a 6f 62 20 70 72  es do the job pr
25ca0 65 74 74 79 20 77 65 6c 6c 2e 0a 23 20 7d 0a 0a  etty well..# }..
25cb0 70 72 6f 63 20 4c 69 73 74 62 6f 78 4f 62 6a 20  proc ListboxObj 
25cc0 7b 74 65 78 74 20 73 74 61 72 74 20 65 6e 64 20  {text start end 
25cd0 6c 69 6e 65 20 70 6f 73 7d 20 7b 0a 09 73 65 74  line pos} {..set
25ce0 20 73 75 62 20 5b 4c 69 6e 64 65 78 20 24 7b 6c   sub [Lindex ${l
25cf0 69 6e 65 7d 20 31 5d 0a 09 73 65 74 20 70 72 65  ine} 1]..set pre
25d00 76 20 5b 50 72 65 76 69 6f 75 73 57 6f 72 64 20  v [PreviousWord 
25d10 24 7b 73 74 61 72 74 7d 20 24 7b 6c 69 6e 65 7d  ${start} ${line}
25d20 5d 0a 09 69 66 20 7b 31 20 3d 3d 20 24 70 6f 73  ]..if {1 == $pos
25d30 7d 20 7b 0a 09 09 72 65 74 75 72 6e 20 5b 54 72  } {...return [Tr
25d40 79 53 75 62 43 6d 64 73 20 24 7b 74 65 78 74 7d  ySubCmds ${text}
25d50 20 5b 4c 69 6e 64 65 78 20 24 7b 6c 69 6e 65 7d   [Lindex ${line}
25d60 20 30 5d 5d 0a 09 7d 0a 09 73 77 69 74 63 68 20   0]]..}..switch 
25d70 2d 2d 20 24 7b 73 75 62 7d 20 7b 0a 09 09 61 63  -- ${sub} {...ac
25d80 74 69 76 61 74 65 20 2d 0a 09 09 62 62 6f 78 20  tivate -...bbox 
25d90 2d 0a 09 09 69 6e 64 65 78 20 2d 0a 09 09 73 65  -...index -...se
25da0 65 20 7b 0a 09 09 09 73 77 69 74 63 68 20 2d 2d  e {....switch --
25db0 20 24 7b 70 6f 73 7d 20 7b 0a 09 09 09 09 32 20   ${pos} {.....2 
25dc0 7b 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b 44  {......return [D
25dd0 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 69 6e 64  isplayHints <ind
25de0 65 78 3e 5d 0a 09 09 09 09 7d 0a 09 09 09 7d 0a  ex>].....}....}.
25df0 09 09 7d 0a 09 09 69 6e 73 65 72 74 20 7b 0a 09  ..}...insert {..
25e00 09 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 70 6f  ..switch -- ${po
25e10 73 7d 20 7b 0a 09 09 09 09 32 20 7b 0a 09 09 09  s} {.....2 {....
25e20 09 09 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  ..return [Displa
25e30 79 48 69 6e 74 73 20 3c 69 6e 64 65 78 3e 5d 0a  yHints <index>].
25e40 09 09 09 09 7d 0a 09 09 09 09 64 65 66 61 75 6c  ....}.....defaul
25e50 74 20 7b 0a 09 09 09 09 09 72 65 74 75 72 6e 20  t {......return 
25e60 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3f 65  [DisplayHints ?e
25e70 6c 65 6d 65 6e 74 3f 5d 0a 09 09 09 09 7d 0a 09  lement?].....}..
25e80 09 09 7d 0a 09 09 7d 0a 09 09 63 67 65 74 20 7b  ..}...}...cget {
25e90 7d 0a 09 09 63 6f 6e 66 69 67 75 72 65 20 7b 7d  }...configure {}
25ea0 0a 09 09 63 75 72 73 65 6c 65 63 74 69 6f 6e 20  ...curselection 
25eb0 7b 7d 0a 09 09 64 65 6c 65 74 65 20 2d 0a 09 09  {}...delete -...
25ec0 67 65 74 20 7b 0a 09 09 09 73 77 69 74 63 68 20  get {....switch 
25ed0 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09 09 09 09  -- ${pos} {.....
25ee0 32 20 7b 0a 09 09 09 09 09 72 65 74 75 72 6e 20  2 {......return 
25ef0 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 66  [DisplayHints <f
25f00 69 72 73 74 3e 5d 0a 09 09 09 09 7d 0a 09 09 09  irst>].....}....
25f10 09 33 20 7b 0a 09 09 09 09 09 72 65 74 75 72 6e  .3 {......return
25f20 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3f   [DisplayHints ?
25f30 6c 61 73 74 3f 5d 0a 09 09 09 09 7d 0a 09 09 09  last?].....}....
25f40 7d 0a 09 09 7d 0a 09 09 6e 65 61 72 65 73 74 20  }...}...nearest 
25f50 7b 0a 09 09 09 73 77 69 74 63 68 20 2d 2d 20 24  {....switch -- $
25f60 7b 70 6f 73 7d 20 7b 0a 09 09 09 09 32 20 7b 0a  {pos} {.....2 {.
25f70 09 09 09 09 09 72 65 74 75 72 6e 20 5b 44 69 73  .....return [Dis
25f80 70 6c 61 79 48 69 6e 74 73 20 3c 79 3e 5d 0a 09  playHints <y>]..
25f90 09 09 09 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 09  ...}....}...}...
25fa0 73 69 7a 65 20 7b 7d 20 20 20 20 20 0a 0a 09 09  size {}     ....
25fb0 73 63 61 6e 20 7b 20 72 65 74 75 72 6e 20 5b 57  scan { return [W
25fc0 69 64 67 65 74 53 63 61 6e 20 24 7b 74 65 78 74  idgetScan ${text
25fd0 7d 20 24 7b 70 6f 73 7d 5d 20 7d 0a 0a 09 09 78  } ${pos}] }....x
25fe0 76 69 65 77 20 2d 0a 09 09 79 76 69 65 77 20 7b  view -...yview {
25ff0 20 72 65 74 75 72 6e 20 5b 57 69 64 67 65 74 58   return [WidgetX
26000 76 69 65 77 59 76 69 65 77 20 24 7b 74 65 78 74  viewYview ${text
26010 7d 20 24 7b 6c 69 6e 65 7d 20 24 7b 70 6f 73 7d  } ${line} ${pos}
26020 20 24 7b 70 72 65 76 7d 5d 20 7d 0a 0a 09 09 73   ${prev}] }....s
26030 65 6c 65 63 74 69 6f 6e 20 7b 0a 09 09 09 73 77  election {....sw
26040 69 74 63 68 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b  itch -- ${pos} {
26050 0a 09 09 09 09 32 20 7b 0a 09 09 09 09 09 72 65  .....2 {......re
26060 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72  turn [CompleteFr
26070 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 7b  omList ${text} {
26080 0a 09 09 09 09 09 09 61 6e 63 68 6f 72 20 63 6c  .......anchor cl
26090 65 61 72 20 69 6e 63 6c 75 64 65 73 20 73 65 74  ear includes set
260a0 0a 09 09 09 09 09 7d 5d 0a 09 09 09 09 7d 0a 09  ......}].....}..
260b0 09 09 09 33 20 7b 0a 09 09 09 09 09 73 77 69 74  ...3 {......swit
260c0 63 68 20 2d 2d 20 24 7b 70 72 65 76 7d 20 7b 0a  ch -- ${prev} {.
260d0 09 09 09 09 09 09 61 6e 63 68 6f 72 20 2d 0a 09  ......anchor -..
260e0 09 09 09 09 09 69 6e 63 6c 75 64 65 73 20 7b 0a  .....includes {.
260f0 09 09 09 09 09 09 09 72 65 74 75 72 6e 20 5b 43  .......return [C
26100 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20  ompleteFromList 
26110 24 7b 74 65 78 74 7d 20 7b 0a 09 09 09 09 09 09  ${text} {.......
26120 09 09 61 63 74 69 76 65 20 61 6e 63 68 6f 72 20  ..active anchor 
26130 65 6e 64 20 40 78 20 40 79 20 3c 6e 75 6d 62 65  end @x @y <numbe
26140 72 3e 0a 09 09 09 09 09 09 09 7d 5d 0a 09 09 09  r>........}]....
26150 09 09 09 7d 0a 09 09 09 09 09 09 63 6c 65 61 72  ...}.......clear
26160 20 2d 0a 09 09 09 09 09 09 73 65 74 20 7b 20 72   -.......set { r
26170 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
26180 6e 74 73 20 3c 66 69 72 73 74 3e 5d 20 7d 0a 09  nts <first>] }..
26190 09 09 09 09 7d 0a 09 09 09 09 7d 0a 09 09 09 09  ....}.....}.....
261a0 34 20 7b 0a 09 09 09 09 09 73 77 69 74 63 68 20  4 {......switch 
261b0 2d 2d 20 5b 4c 69 6e 64 65 78 20 24 7b 6c 69 6e  -- [Lindex ${lin
261c0 65 7d 20 32 5d 20 7b 0a 09 09 09 09 09 09 63 6c  e} 2] {.......cl
261d0 65 61 72 20 2d 0a 09 09 09 09 09 09 73 65 74 20  ear -.......set 
261e0 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
261f0 79 48 69 6e 74 73 20 3f 6c 61 73 74 3f 5d 20 7d  yHints ?last?] }
26200 0a 09 09 09 09 09 7d 0a 09 09 09 09 7d 0a 09 09  ......}.....}...
26210 09 7d 0a 09 09 7d 0a 09 7d 0a 7d 0a 0a 70 72 6f  .}...}..}.}..pro
26220 63 20 4d 65 6e 75 49 6e 64 65 78 20 74 65 78 74  c MenuIndex text
26230 20 7b 0a 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70   {..return [Comp
26240 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74  leteFromList ${t
26250 65 78 74 7d 20 7b 0a 09 09 3c 6e 75 6d 62 65 72  ext} {...<number
26260 3e 20 61 63 74 69 76 65 20 65 6e 64 20 6c 61 73  > active end las
26270 74 20 6e 6f 6e 65 20 3c 40 6e 75 6d 62 65 72 3e  t none <@number>
26280 20 3c 6c 61 62 65 6c 50 61 74 74 65 72 6e 3e 0a   <labelPattern>.
26290 09 7d 5d 0a 7d 0a 0a 70 72 6f 63 20 4d 65 6e 75  .}].}..proc Menu
262a0 49 74 65 6d 20 7b 74 65 78 74 20 73 74 61 72 74  Item {text start
262b0 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73 20 76 69   end line pos vi
262c0 72 74 75 61 6c 70 6f 73 7d 20 7b 0a 09 73 77 69  rtualpos} {..swi
262d0 74 63 68 20 2d 2d 20 24 7b 76 69 72 74 75 61 6c  tch -- ${virtual
262e0 70 6f 73 7d 20 7b 0a 09 09 32 20 7b 0a 09 09 09  pos} {...2 {....
262f0 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65  return [Complete
26300 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d  FromList ${text}
26310 20 7b 0a 09 09 09 09 63 61 73 63 61 64 65 20 63   {.....cascade c
26320 68 65 63 6b 62 75 74 74 6f 6e 20 63 6f 6d 6d 61  heckbutton comma
26330 6e 64 20 72 61 64 69 6f 62 75 74 74 6f 6e 20 73  nd radiobutton s
26340 65 70 61 72 61 74 6f 72 0a 09 09 09 7d 5d 0a 09  eparator....}]..
26350 09 7d 0a 09 09 64 65 66 61 75 6c 74 20 7b 0a 09  .}...default {..
26360 09 09 73 77 69 74 63 68 20 2d 2d 20 5b 50 72 65  ..switch -- [Pre
26370 76 69 6f 75 73 57 6f 72 64 20 24 7b 73 74 61 72  viousWord ${star
26380 74 7d 20 24 7b 6c 69 6e 65 7d 5d 20 7b 0a 09 09  t} ${line}] {...
26390 09 09 2d 61 63 74 69 76 65 62 61 63 6b 67 72 6f  ..-activebackgro
263a0 75 6e 64 20 2d 0a 09 09 09 09 2d 61 63 74 69 76  und -.....-activ
263b0 65 66 6f 72 65 67 72 6f 75 6e 64 20 2d 0a 09 09  eforeground -...
263c0 09 09 2d 62 61 63 6b 67 72 6f 75 6e 64 20 2d 0a  ..-background -.
263d0 09 09 09 09 2d 66 6f 72 65 67 72 6f 75 6e 64 20  ....-foreground 
263e0 2d 0a 09 09 09 09 2d 73 65 6c 65 63 74 63 6f 6c  -.....-selectcol
263f0 6f 72 20 7b 0a 09 09 09 09 09 72 65 74 75 72 6e  or {......return
26400 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c   [DisplayHints <
26410 63 6f 6c 6f 72 3e 5d 0a 09 09 09 09 7d 0a 0a 09  color>].....}...
26420 09 09 09 2d 61 63 63 65 6c 65 72 61 74 6f 72 20  ...-accelerator 
26430 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
26440 79 48 69 6e 74 73 20 3c 61 63 63 65 6c 3e 5d 20  yHints <accel>] 
26450 7d 0a 09 09 09 09 2d 62 69 74 6d 61 70 20 7b 20  }.....-bitmap { 
26460 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65  return [Complete
26470 46 72 6f 6d 42 69 74 6d 61 70 73 20 24 7b 74 65  FromBitmaps ${te
26480 78 74 7d 5d 20 7d 0a 0a 09 09 09 09 2d 63 6f 6c  xt}] }......-col
26490 75 6d 6e 62 72 65 61 6b 20 2d 0a 09 09 09 09 2d  umnbreak -.....-
264a0 68 69 64 65 6d 61 72 67 69 6e 20 2d 0a 09 09 09  hidemargin -....
264b0 09 2d 69 6e 64 69 63 61 74 6f 72 6f 6e 20 7b 0a  .-indicatoron {.
264c0 09 09 09 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d  .....return [Com
264d0 70 6c 65 74 65 42 6f 6f 6c 65 61 6e 20 24 7b 74  pleteBoolean ${t
264e0 65 78 74 7d 5d 0a 09 09 09 09 7d 0a 09 09 09 09  ext}].....}.....
264f0 2d 63 6f 6d 6d 61 6e 64 20 7b 0a 09 09 09 09 09  -command {......
26500 72 65 74 75 72 6e 20 5b 42 72 61 63 65 4f 72 43  return [BraceOrC
26510 6f 6d 6d 61 6e 64 20 24 7b 74 65 78 74 7d 20 5c  ommand ${text} \
26520 0a 09 09 09 09 09 24 7b 73 74 61 72 74 7d 20 24  ......${start} $
26530 7b 65 6e 64 7d 20 24 7b 6c 69 6e 65 7d 20 24 7b  {end} ${line} ${
26540 70 6f 73 7d 20 24 7b 74 65 78 74 7d 5d 0a 09 09  pos} ${text}]...
26550 09 09 7d 0a 09 09 09 09 2d 66 6f 6e 74 20 7b 0a  ..}.....-font {.
26560 09 09 09 09 09 73 65 74 20 6e 61 6d 65 73 20 5b  .....set names [
26570 66 6f 6e 74 20 6e 61 6d 65 73 5d 0a 09 09 09 09  font names].....
26580 09 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e  .if {[string len
26590 67 74 68 20 24 7b 6e 61 6d 65 73 7d 5d 7d 20 7b  gth ${names}]} {
265a0 0a 09 09 09 09 09 09 72 65 74 75 72 6e 20 5b 43  .......return [C
265b0 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20  ompleteFromList 
265c0 24 7b 74 65 78 74 7d 20 24 7b 6e 61 6d 65 73 7d  ${text} ${names}
265d0 5d 0a 09 09 09 09 09 7d 20 65 6c 73 65 20 7b 0a  ]......} else {.
265e0 09 09 09 09 09 09 72 65 74 75 72 6e 20 5b 44 69  ......return [Di
265f0 73 70 6c 61 79 48 69 6e 74 73 20 3c 66 6f 6e 74  splayHints <font
26600 6e 61 6d 65 3e 5d 0a 09 09 09 09 09 7d 0a 09 09  name>]......}...
26610 09 09 7d 0a 09 09 09 09 2d 69 6d 61 67 65 20 2d  ..}.....-image -
26620 0a 09 09 09 09 2d 73 65 6c 65 63 74 69 6d 61 67  .....-selectimag
26630 65 20 7b 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70  e { return [Comp
26640 6c 65 74 65 46 72 6f 6d 49 6d 61 67 65 73 20 24  leteFromImages $
26650 7b 74 65 78 74 7d 5d 20 7d 0a 0a 09 09 09 09 2d  {text}] }......-
26660 6c 61 62 65 6c 20 7b 20 72 65 74 75 72 6e 20 5b  label { return [
26670 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 6c 61  DisplayHints <la
26680 62 65 6c 3e 5d 20 7d 0a 09 09 09 09 2d 6d 65 6e  bel>] }.....-men
26690 75 20 7b 0a 09 09 09 09 09 73 65 74 20 6e 61 6d  u {......set nam
266a0 65 73 20 5b 57 69 64 67 65 74 43 68 69 6c 64 72  es [WidgetChildr
266b0 65 6e 20 5b 4c 69 6e 64 65 78 20 24 7b 6c 69 6e  en [Lindex ${lin
266c0 65 7d 20 30 5d 5d 0a 09 09 09 09 09 69 66 20 7b  e} 0]]......if {
266d0 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $
266e0 7b 6e 61 6d 65 73 7d 5d 7d 20 7b 0a 09 09 09 09  {names}]} {.....
266f0 09 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65  ..return [Comple
26700 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78  teFromList ${tex
26710 74 7d 20 24 7b 6e 61 6d 65 73 7d 5d 0a 09 09 09  t} ${names}]....
26720 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09 09  ..} else {......
26730 09 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79  .return [Display
26740 48 69 6e 74 73 20 3c 6d 65 6e 75 3e 5d 0a 09 09  Hints <menu>]...
26750 09 09 09 7d 0a 09 09 09 09 7d 0a 0a 09 09 09 09  ...}.....}......
26760 2d 6f 66 66 76 61 6c 75 65 20 2d 0a 09 09 09 09  -offvalue -.....
26770 2d 6f 6e 76 61 6c 75 65 20 7b 20 72 65 74 75 72  -onvalue { retur
26780 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
26790 3c 76 61 6c 75 65 3e 5d 20 7d 0a 0a 09 09 09 09  <value>] }......
267a0 2d 73 74 61 74 65 20 7b 0a 09 09 09 09 09 72 65  -state {......re
267b0 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72  turn [CompleteFr
267c0 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 7b  omList ${text} {
267d0 0a 09 09 09 09 09 09 6e 6f 72 6d 61 6c 20 61 63  .......normal ac
267e0 74 69 76 65 20 64 69 73 61 62 6c 65 64 0a 09 09  tive disabled...
267f0 09 09 09 7d 5d 0a 09 09 09 09 7d 0a 09 09 09 09  ...}].....}.....
26800 2d 75 6e 64 65 72 6c 69 6e 65 20 7b 20 72 65 74  -underline { ret
26810 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74  urn [DisplayHint
26820 73 20 3c 69 6e 74 65 67 65 72 3e 5d 20 7d 0a 09  s <integer>] }..
26830 09 09 09 2d 76 61 6c 75 65 20 7b 20 72 65 74 75  ...-value { retu
26840 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
26850 20 3c 76 61 6c 75 65 3e 5d 20 7d 0a 09 09 09 09   <value>] }.....
26860 2d 76 61 72 69 61 62 6c 65 20 7b 0a 09 09 09 09  -variable {.....
26870 09 72 65 74 75 72 6e 20 5b 56 61 72 43 6f 6d 70  .return [VarComp
26880 6c 65 74 69 6f 6e 20 24 7b 74 65 78 74 7d 20 23  letion ${text} #
26890 30 5d 0a 09 09 09 09 7d 0a 0a 09 09 09 09 64 65  0].....}......de
268a0 66 61 75 6c 74 20 7b 0a 09 09 09 09 09 72 65 74  fault {......ret
268b0 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f  urn [CompleteFro
268c0 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 5c 0a  mList ${text} \.
268d0 09 09 09 09 09 5b 52 65 6d 6f 76 65 55 73 65 64  .....[RemoveUsed
268e0 4f 70 74 69 6f 6e 73 20 24 7b 6c 69 6e 65 7d 20  Options ${line} 
268f0 7b 0a 09 09 09 09 09 09 2d 61 63 74 69 76 65 62  {.......-activeb
26900 61 63 6b 67 72 6f 75 6e 64 20 2d 61 63 74 69 76  ackground -activ
26910 65 66 6f 72 65 67 72 6f 75 6e 64 0a 09 09 09 09  eforeground.....
26920 09 09 2d 61 63 63 65 6c 65 72 61 74 6f 72 20 2d  ..-accelerator -
26930 62 61 63 6b 67 72 6f 75 6e 64 20 2d 62 69 74 6d  background -bitm
26940 61 70 20 2d 63 6f 6c 75 6d 6e 62 72 65 61 6b 0a  ap -columnbreak.
26950 09 09 09 09 09 09 2d 63 6f 6d 6d 61 6e 64 20 2d  ......-command -
26960 66 6f 6e 74 20 2d 66 6f 72 65 67 72 6f 75 6e 64  font -foreground
26970 20 2d 68 69 64 65 6d 61 72 67 69 6e 20 2d 69 6d   -hidemargin -im
26980 61 67 65 0a 09 09 09 09 09 09 2d 69 6e 64 69 63  age.......-indic
26990 61 74 6f 72 6f 6e 20 2d 6c 61 62 65 6c 20 2d 6d  atoron -label -m
269a0 65 6e 75 20 2d 6f 66 66 76 61 6c 75 65 20 2d 6f  enu -offvalue -o
269b0 6e 76 61 6c 75 65 0a 09 09 09 09 09 09 2d 73 65  nvalue.......-se
269c0 6c 65 63 74 63 6f 6c 6f 72 20 2d 73 65 6c 65 63  lectcolor -selec
269d0 74 69 6d 61 67 65 20 2d 73 74 61 74 65 20 2d 75  timage -state -u
269e0 6e 64 65 72 6c 69 6e 65 0a 09 09 09 09 09 09 2d  nderline.......-
269f0 76 61 6c 75 65 20 2d 76 61 72 69 61 62 6c 65 0a  value -variable.
26a00 09 09 09 09 09 7d 5d 5d 0a 09 09 09 09 7d 0a 09  .....}]].....}..
26a10 09 09 7d 0a 09 09 7d 0a 09 7d 0a 7d 0a 0a 70 72  ..}...}..}.}..pr
26a20 6f 63 20 4d 65 6e 75 4f 62 6a 20 7b 74 65 78 74  oc MenuObj {text
26a30 20 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20   start end line 
26a40 70 6f 73 7d 20 7b 0a 09 73 65 74 20 73 75 62 20  pos} {..set sub 
26a50 5b 4c 69 6e 64 65 78 20 24 7b 6c 69 6e 65 7d 20  [Lindex ${line} 
26a60 31 5d 0a 09 73 65 74 20 70 72 65 76 20 5b 50 72  1]..set prev [Pr
26a70 65 76 69 6f 75 73 57 6f 72 64 20 24 7b 73 74 61  eviousWord ${sta
26a80 72 74 7d 20 24 7b 6c 69 6e 65 7d 5d 0a 09 69 66  rt} ${line}]..if
26a90 20 7b 31 20 3d 3d 20 24 70 6f 73 7d 20 7b 0a 09   {1 == $pos} {..
26aa0 09 72 65 74 75 72 6e 20 5b 54 72 79 53 75 62 43  .return [TrySubC
26ab0 6d 64 73 20 24 7b 74 65 78 74 7d 20 5b 4c 69 6e  mds ${text} [Lin
26ac0 64 65 78 20 24 7b 6c 69 6e 65 7d 20 30 5d 5d 0a  dex ${line} 0]].
26ad0 09 7d 0a 09 73 77 69 74 63 68 20 2d 2d 20 24 7b  .}..switch -- ${
26ae0 73 75 62 7d 20 7b 0a 09 09 61 63 74 69 76 61 74  sub} {...activat
26af0 65 20 2d 0a 09 09 69 6e 64 65 78 20 2d 0a 09 09  e -...index -...
26b00 69 6e 76 6f 6b 65 20 2d 0a 09 09 70 6f 73 74 63  invoke -...postc
26b10 61 73 63 61 64 65 20 2d 0a 09 09 74 79 70 65 20  ascade -...type 
26b20 2d 0a 09 09 79 70 6f 73 69 74 69 6f 6e 20 7b 0a  -...yposition {.
26b30 09 09 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 70  ...switch -- ${p
26b40 6f 73 7d 20 7b 0a 09 09 09 09 32 20 7b 0a 09 09  os} {.....2 {...
26b50 09 09 09 72 65 74 75 72 6e 20 5b 4d 65 6e 75 49  ...return [MenuI
26b60 6e 64 65 78 20 24 7b 74 65 78 74 7d 5d 0a 09 09  ndex ${text}]...
26b70 09 09 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 09 63  ..}....}...}...c
26b80 6f 6e 66 69 67 75 72 65 20 7b 7d 0a 09 09 63 67  onfigure {}...cg
26b90 65 74 20 7b 7d 0a 0a 09 09 61 64 64 20 7b 0a 09  et {}....add {..
26ba0 09 09 72 65 74 75 72 6e 20 5b 4d 65 6e 75 49 74  ..return [MenuIt
26bb0 65 6d 20 24 7b 74 65 78 74 7d 20 24 7b 73 74 61  em ${text} ${sta
26bc0 72 74 7d 20 24 7b 65 6e 64 7d 20 24 7b 6c 69 6e  rt} ${end} ${lin
26bd0 65 7d 20 24 7b 70 6f 73 7d 20 24 7b 70 6f 73 7d  e} ${pos} ${pos}
26be0 5d 0a 09 09 7d 0a 09 09 63 6c 6f 6e 65 20 7b 0a  ]...}...clone {.
26bf0 09 09 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 70  ...switch -- ${p
26c00 6f 73 7d 20 7b 0a 09 09 09 09 32 20 7b 20 72 65  os} {.....2 { re
26c10 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
26c20 74 73 20 3c 6e 65 77 50 61 74 68 6e 61 6d 65 3e  ts <newPathname>
26c30 5d 20 7d 0a 09 09 09 09 33 20 7b 0a 09 09 09 09  ] }.....3 {.....
26c40 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74  .return [Complet
26c50 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74  eFromList ${text
26c60 7d 20 7b 0a 09 09 09 09 09 09 6e 6f 72 6d 61 6c  } {.......normal
26c70 20 6d 65 6e 75 62 61 72 20 74 65 61 72 6f 66 66   menubar tearoff
26c80 0a 09 09 09 09 09 7d 5d 0a 09 09 09 09 7d 0a 09  ......}].....}..
26c90 09 09 7d 0a 09 09 7d 0a 09 09 64 65 6c 65 74 65  ..}...}...delete
26ca0 20 7b 0a 09 09 09 73 77 69 74 63 68 20 2d 2d 20   {....switch -- 
26cb0 24 7b 70 6f 73 7d 20 7b 0a 09 09 09 09 32 20 2d  ${pos} {.....2 -
26cc0 0a 09 09 09 09 33 20 7b 20 72 65 74 75 72 6e 20  .....3 { return 
26cd0 5b 4d 65 6e 75 49 6e 64 65 78 20 24 7b 74 65 78  [MenuIndex ${tex
26ce0 74 7d 5d 20 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09  t}] }....}...}..
26cf0 09 69 6e 73 65 72 74 20 7b 0a 09 09 09 73 77 69  .insert {....swi
26d00 74 63 68 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a  tch -- ${pos} {.
26d10 09 09 09 09 32 20 7b 20 72 65 74 75 72 6e 20 5b  ....2 { return [
26d20 4d 65 6e 75 49 6e 64 65 78 20 24 7b 74 65 78 74  MenuIndex ${text
26d30 7d 5d 20 7d 0a 09 09 09 09 64 65 66 61 75 6c 74  }] }.....default
26d40 20 7b 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b   {......return [
26d50 4d 65 6e 75 49 74 65 6d 20 24 7b 74 65 78 74 7d  MenuItem ${text}
26d60 20 24 7b 73 74 61 72 74 7d 20 24 7b 65 6e 64 7d   ${start} ${end}
26d70 20 5c 0a 09 09 09 09 09 24 7b 6c 69 6e 65 7d 20   \......${line} 
26d80 24 7b 70 6f 73 7d 20 5b 65 78 70 72 20 24 7b 70  ${pos} [expr ${p
26d90 6f 73 7d 20 2d 20 31 5d 5d 0a 09 09 09 09 7d 0a  os} - 1]].....}.
26da0 09 09 09 7d 0a 09 09 7d 0a 09 09 65 6e 74 72 79  ...}...}...entry
26db0 63 67 65 74 20 2d 0a 09 09 65 6e 74 72 79 63 6f  cget -...entryco
26dc0 6e 66 69 67 75 72 65 20 7b 0a 09 09 09 73 77 69  nfigure {....swi
26dd0 74 63 68 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a  tch -- ${pos} {.
26de0 09 09 09 09 32 20 7b 20 72 65 74 75 72 6e 20 5b  ....2 { return [
26df0 4d 65 6e 75 49 6e 64 65 78 20 24 7b 74 65 78 74  MenuIndex ${text
26e00 7d 5d 20 7d 0a 09 09 09 09 64 65 66 61 75 6c 74  }] }.....default
26e10 20 7b 0a 09 09 09 09 09 72 65 74 75 72 6e 20 5b   {......return [
26e20 4d 65 6e 75 49 74 65 6d 20 24 7b 74 65 78 74 7d  MenuItem ${text}
26e30 20 24 7b 73 74 61 72 74 7d 20 5c 0a 09 09 09 09   ${start} \.....
26e40 09 24 7b 65 6e 64 7d 20 24 7b 6c 69 6e 65 7d 20  .${end} ${line} 
26e50 24 7b 70 6f 73 7d 20 24 7b 70 6f 73 7d 5d 0a 09  ${pos} ${pos}]..
26e60 09 09 09 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 09  ...}....}...}...
26e70 70 6f 73 74 20 7b 0a 09 09 09 73 77 69 74 63 68  post {....switch
26e80 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09 09 09   -- ${pos} {....
26e90 09 32 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73  .2 { return [Dis
26ea0 70 6c 61 79 48 69 6e 74 73 20 3c 78 3e 5d 20 7d  playHints <x>] }
26eb0 0a 09 09 09 09 33 20 7b 20 72 65 74 75 72 6e 20  .....3 { return 
26ec0 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 79  [DisplayHints <y
26ed0 3e 5d 20 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 09  >] }....}...}...
26ee0 23 20 3f 3f 3f 20 58 58 58 0a 09 09 75 6e 70 6f  # ??? XXX...unpo
26ef0 73 74 20 7b 7d 0a 09 7d 0a 7d 0a 0a 70 72 6f 63  st {}..}.}..proc
26f00 20 50 68 6f 74 6f 4f 62 6a 20 7b 74 65 78 74 20   PhotoObj {text 
26f10 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70  start end line p
26f20 6f 73 7d 20 7b 0a 09 73 65 74 20 73 75 62 20 5b  os} {..set sub [
26f30 4c 69 6e 64 65 78 20 24 7b 6c 69 6e 65 7d 20 31  Lindex ${line} 1
26f40 5d 0a 09 73 65 74 20 70 72 65 76 20 5b 50 72 65  ]..set prev [Pre
26f50 76 69 6f 75 73 57 6f 72 64 20 24 7b 73 74 61 72  viousWord ${star
26f60 74 7d 20 24 7b 6c 69 6e 65 7d 5d 0a 09 73 65 74  t} ${line}]..set
26f70 20 63 6f 70 79 5f 6f 70 74 73 20 7b 20 2d 66 72   copy_opts { -fr
26f80 6f 6d 20 2d 74 6f 20 2d 73 68 72 69 6e 6b 20 2d  om -to -shrink -
26f90 7a 6f 6f 6d 20 2d 73 75 62 73 61 6d 70 6c 65 20  zoom -subsample 
26fa0 7d 0a 09 73 65 74 20 72 65 61 64 5f 6f 70 74 73  }..set read_opts
26fb0 20 7b 20 2d 66 72 6f 6d 20 2d 74 6f 20 2d 73 68   { -from -to -sh
26fc0 72 69 6e 6b 20 2d 66 6f 72 6d 61 74 20 7d 0a 09  rink -format }..
26fd0 73 65 74 20 77 72 69 74 65 5f 6f 70 74 73 20 7b  set write_opts {
26fe0 20 2d 66 72 6f 6d 20 2d 66 6f 72 6d 61 74 20 7d   -from -format }
26ff0 0a 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 70 6f  ..switch -- ${po
27000 73 7d 20 7b 0a 09 09 31 20 7b 0a 09 09 09 72 65  s} {...1 {....re
27010 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72  turn [CompleteFr
27020 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d 20 7b  omList ${text} {
27030 0a 09 09 09 09 62 6c 61 6e 6b 20 63 67 65 74 20  .....blank cget 
27040 63 6f 6e 66 69 67 75 72 65 20 63 6f 70 79 20 67  configure copy g
27050 65 74 20 70 75 74 20 72 65 61 64 20 72 65 64 69  et put read redi
27060 74 68 65 72 20 77 72 69 74 65 20 20 0a 09 09 09  ther write  ....
27070 7d 5d 0a 09 09 7d 0a 09 09 32 20 7b 0a 09 09 09  }]...}...2 {....
27080 73 77 69 74 63 68 20 2d 2d 20 24 7b 73 75 62 7d  switch -- ${sub}
27090 20 7b 0a 09 09 09 09 62 6c 61 6e 6b 20 7b 7d 0a   {.....blank {}.
270a0 09 09 09 09 63 67 65 74 20 7b 7d 0a 09 09 09 09  ....cget {}.....
270b0 63 6f 6e 66 69 67 75 72 65 20 7b 7d 0a 09 09 09  configure {}....
270c0 09 72 65 64 69 74 68 65 72 20 7b 7d 0a 09 09 09  .redither {}....
270d0 09 63 6f 70 79 20 7b 20 72 65 74 75 72 6e 20 5b  .copy { return [
270e0 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 49 6d 61 67  CompleteFromImag
270f0 65 73 20 24 7b 74 65 78 74 7d 5d 20 7d 0a 09 09  es ${text}] }...
27100 09 09 67 65 74 20 7b 20 72 65 74 75 72 6e 20 5b  ..get { return [
27110 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 78 3e  DisplayHints <x>
27120 5d 20 7d 0a 09 09 09 09 70 75 74 20 7b 20 72 65  ] }.....put { re
27130 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
27140 74 73 20 3c 64 61 74 61 3e 5d 20 7d 0a 09 09 09  ts <data>] }....
27150 09 72 65 61 64 20 7b 7d 0a 09 09 09 09 77 72 69  .read {}.....wri
27160 74 65 20 7b 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09  te {}....}...}..
27170 09 33 20 7b 0a 09 09 09 73 77 69 74 63 68 20 2d  .3 {....switch -
27180 2d 20 24 7b 73 75 62 7d 20 7b 0a 09 09 09 09 62  - ${sub} {.....b
27190 6c 61 6e 6b 20 7b 7d 0a 09 09 09 09 63 67 65 74  lank {}.....cget
271a0 20 7b 7d 0a 09 09 09 09 63 6f 6e 66 69 67 75 72   {}.....configur
271b0 65 20 7b 7d 0a 09 09 09 09 72 65 64 69 74 68 65  e {}.....redithe
271c0 72 20 7b 7d 0a 09 09 09 09 63 6f 70 79 20 7b 20  r {}.....copy { 
271d0 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74 65  return [Complete
271e0 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74 7d  FromList ${text}
271f0 20 24 7b 63 6f 70 79 5f 6f 70 74 73 7d 5d 20 7d   ${copy_opts}] }
27200 0a 09 09 09 09 67 65 74 20 7b 20 72 65 74 75 72  .....get { retur
27210 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
27220 3c 79 3e 5d 20 7d 0a 09 09 09 09 70 75 74 20 7b  <y>] }.....put {
27230 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74   return [Complet
27240 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74  eFromList ${text
27250 7d 20 2d 74 6f 5d 20 7d 0a 09 09 09 09 72 65 61  } -to] }.....rea
27260 64 20 7b 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70  d { return [Comp
27270 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74  leteFromList ${t
27280 65 78 74 7d 20 24 7b 72 65 61 64 5f 6f 70 74 73  ext} ${read_opts
27290 7d 5d 20 7d 0a 09 09 09 09 77 72 69 74 65 20 7b  }] }.....write {
272a0 20 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65 74   return [Complet
272b0 65 46 72 6f 6d 4c 69 73 74 20 24 7b 74 65 78 74  eFromList ${text
272c0 7d 20 24 7b 77 72 69 74 65 5f 6f 70 74 73 7d 5d  } ${write_opts}]
272d0 20 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 09 64 65   }....}...}...de
272e0 66 61 75 6c 74 20 7b 0a 09 09 09 73 77 69 74 63  fault {....switc
272f0 68 20 2d 2d 20 24 7b 73 75 62 7d 20 7b 0a 09 09  h -- ${sub} {...
27300 09 09 62 6c 61 6e 6b 20 7b 7d 0a 09 09 09 09 63  ..blank {}.....c
27310 67 65 74 20 7b 7d 0a 09 09 09 09 63 6f 6e 66 69  get {}.....confi
27320 67 75 72 65 20 7b 7d 0a 09 09 09 09 72 65 64 69  gure {}.....redi
27330 74 68 65 72 20 7b 7d 0a 09 09 09 09 67 65 74 20  ther {}.....get 
27340 7b 7d 0a 09 09 09 09 63 6f 70 79 20 7b 0a 09 09  {}.....copy {...
27350 09 09 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 70  ...switch -- ${p
27360 72 65 76 7d 20 7b 0a 09 09 09 09 09 09 2d 66 72  rev} {.......-fr
27370 6f 6d 20 2d 0a 09 09 09 09 09 09 2d 74 6f 20 7b  om -.......-to {
27380 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
27390 48 69 6e 74 73 20 5b 6c 69 73 74 20 3c 78 31 20  Hints [list <x1 
273a0 79 31 20 78 32 20 79 32 3e 5d 5d 20 7d 0a 09 09  y1 x2 y2>]] }...
273b0 09 09 09 09 2d 7a 6f 6f 6d 20 2d 0a 09 09 09 09  ....-zoom -.....
273c0 09 09 2d 73 75 62 73 61 6d 70 6c 65 20 7b 20 72  ..-subsample { r
273d0 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
273e0 6e 74 73 20 5b 6c 69 73 74 20 3c 78 20 79 3e 5d  nts [list <x y>]
273f0 5d 20 7d 0a 09 09 09 09 09 09 64 65 66 61 75 6c  ] }.......defaul
27400 74 20 7b 0a 09 09 09 09 09 09 09 72 65 74 75 72  t {........retur
27410 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c  n [CompleteFromL
27420 69 73 74 20 24 7b 74 65 78 74 7d 20 5c 0a 09 09  ist ${text} \...
27430 09 09 09 09 09 5b 52 65 6d 6f 76 65 55 73 65 64  .....[RemoveUsed
27440 4f 70 74 69 6f 6e 73 20 24 7b 6c 69 6e 65 7d 20  Options ${line} 
27450 24 7b 63 6f 70 79 5f 6f 70 74 73 7d 5d 5d 0a 09  ${copy_opts}]]..
27460 09 09 09 09 09 7d 0a 09 09 09 09 09 7d 0a 09 09  .....}......}...
27470 09 09 7d 0a 09 09 09 09 70 75 74 20 7b 0a 09 09  ..}.....put {...
27480 09 09 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 70  ...switch -- ${p
27490 72 65 76 7d 20 7b 0a 09 09 09 09 09 09 2d 74 6f  rev} {.......-to
274a0 20 7b 0a 09 09 09 09 09 09 09 72 65 74 75 72 6e   {........return
274b0 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 5b   [DisplayHints [
274c0 6c 69 73 74 20 3c 78 31 20 79 31 20 78 32 20 79  list <x1 y1 x2 y
274d0 32 3e 5d 5d 0a 09 09 09 09 09 09 7d 0a 09 09 09  2>]].......}....
274e0 09 09 7d 0a 09 09 09 09 7d 0a 09 09 09 09 72 65  ..}.....}.....re
274f0 61 64 20 7b 0a 09 09 09 09 09 73 77 69 74 63 68  ad {......switch
27500 20 2d 2d 20 24 7b 70 72 65 76 7d 20 7b 0a 09 09   -- ${prev} {...
27510 09 09 09 09 2d 66 72 6f 6d 20 7b 20 72 65 74 75  ....-from { retu
27520 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
27530 20 5b 6c 69 73 74 20 3c 78 31 20 79 31 20 78 32   [list <x1 y1 x2
27540 20 79 32 3e 5d 5d 20 7d 0a 09 09 09 09 09 09 2d   y2>]] }.......-
27550 74 6f 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73  to { return [Dis
27560 70 6c 61 79 48 69 6e 74 73 20 5b 6c 69 73 74 20  playHints [list 
27570 3c 78 20 79 3e 5d 5d 20 7d 0a 09 09 09 09 09 09  <x y>]] }.......
27580 2d 66 6f 72 6d 61 74 20 7b 20 72 65 74 75 72 6e  -format { return
27590 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20 3c   [DisplayHints <
275a0 66 6f 72 6d 61 74 4e 61 6d 65 3e 5d 20 7d 0a 09  formatName>] }..
275b0 09 09 09 09 09 64 65 66 61 75 6c 74 20 7b 0a 09  .....default {..
275c0 09 09 09 09 09 09 72 65 74 75 72 6e 20 5b 43 6f  ......return [Co
275d0 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73 74 20 24  mpleteFromList $
275e0 7b 74 65 78 74 7d 20 5c 0a 09 09 09 09 09 09 09  {text} \........
275f0 5b 52 65 6d 6f 76 65 55 73 65 64 4f 70 74 69 6f  [RemoveUsedOptio
27600 6e 73 20 24 7b 6c 69 6e 65 7d 20 24 7b 72 65 61  ns ${line} ${rea
27610 64 5f 6f 70 74 73 7d 5d 5d 0a 09 09 09 09 09 09  d_opts}]].......
27620 7d 0a 09 09 09 09 09 7d 0a 09 09 09 09 7d 0a 09  }......}.....}..
27630 09 09 09 77 72 69 74 65 20 7b 0a 09 09 09 09 09  ...write {......
27640 73 77 69 74 63 68 20 2d 2d 20 24 7b 70 72 65 76  switch -- ${prev
27650 7d 20 7b 0a 09 09 09 09 09 09 2d 66 72 6f 6d 20  } {.......-from 
27660 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61  { return [Displa
27670 79 48 69 6e 74 73 20 5b 6c 69 73 74 20 3c 78 31  yHints [list <x1
27680 20 79 31 20 78 32 20 79 32 3e 5d 5d 20 7d 0a 09   y1 x2 y2>]] }..
27690 09 09 09 09 09 2d 66 6f 72 6d 61 74 20 7b 20 72  .....-format { r
276a0 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69  eturn [DisplayHi
276b0 6e 74 73 20 3c 66 6f 72 6d 61 74 4e 61 6d 65 3e  nts <formatName>
276c0 5d 20 7d 0a 09 09 09 09 09 09 64 65 66 61 75 6c  ] }.......defaul
276d0 74 20 7b 0a 09 09 09 09 09 09 09 72 65 74 75 72  t {........retur
276e0 6e 20 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c  n [CompleteFromL
276f0 69 73 74 20 24 7b 74 65 78 74 7d 20 5c 0a 09 09  ist ${text} \...
27700 09 09 09 09 09 5b 52 65 6d 6f 76 65 55 73 65 64  .....[RemoveUsed
27710 4f 70 74 69 6f 6e 73 20 24 7b 6c 69 6e 65 7d 20  Options ${line} 
27720 24 7b 77 72 69 74 65 5f 6f 70 74 73 7d 5d 5d 0a  ${write_opts}]].
27730 09 09 09 09 09 09 7d 0a 09 09 09 09 09 7d 0a 09  ......}......}..
27740 09 09 09 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 7d  ...}....}...}..}
27750 0a 7d 0a 0a 23 20 70 72 6f 63 20 52 61 64 69 6f  .}..# proc Radio
27760 62 75 74 74 6f 6e 4f 62 6a 20 7b 74 65 78 74 20  buttonObj {text 
27770 73 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70  start end line p
27780 6f 73 7d 20 7b 0a 23 20 74 68 65 20 66 61 6c 6c  os} {.# the fall
27790 62 61 63 6b 20 72 6f 75 74 69 6e 65 73 20 64 6f  back routines do
277a0 20 74 68 65 20 6a 6f 62 20 70 72 65 74 74 79 20   the job pretty 
277b0 77 65 6c 6c 2e 0a 23 20 7d 0a 0a 70 72 6f 63 20  well..# }..proc 
277c0 53 63 61 6c 65 4f 62 6a 20 7b 74 65 78 74 20 73  ScaleObj {text s
277d0 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f  tart end line po
277e0 73 7d 20 7b 0a 0a 09 73 65 74 20 73 75 62 20 5b  s} {...set sub [
277f0 4c 69 6e 64 65 78 20 24 7b 6c 69 6e 65 7d 20 31  Lindex ${line} 1
27800 5d 0a 09 73 65 74 20 70 72 65 76 20 5b 50 72 65  ]..set prev [Pre
27810 76 69 6f 75 73 57 6f 72 64 20 24 7b 73 74 61 72  viousWord ${star
27820 74 7d 20 24 7b 6c 69 6e 65 7d 5d 0a 0a 09 73 77  t} ${line}]...sw
27830 69 74 63 68 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b  itch -- ${pos} {
27840 0a 09 09 31 20 7b 0a 09 09 09 72 65 74 75 72 6e  ...1 {....return
27850 20 5b 54 72 79 53 75 62 43 6d 64 73 20 24 7b 74   [TrySubCmds ${t
27860 65 78 74 7d 20 5b 4c 69 6e 64 65 78 20 24 7b 6c  ext} [Lindex ${l
27870 69 6e 65 7d 20 30 5d 5d 0a 09 09 7d 0a 09 09 32  ine} 0]]...}...2
27880 20 7b 0a 09 09 09 73 77 69 74 63 68 20 2d 2d 20   {....switch -- 
27890 24 7b 73 75 62 7d 20 7b 0a 09 09 09 09 63 6f 6f  ${sub} {.....coo
278a0 72 64 73 20 7b 20 72 65 74 75 72 6e 20 5b 44 69  rds { return [Di
278b0 73 70 6c 61 79 48 69 6e 74 73 20 3f 76 61 6c 75  splayHints ?valu
278c0 65 3f 5d 20 7d 0a 09 09 09 09 67 65 74 20 7b 20  e?] }.....get { 
278d0 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
278e0 69 6e 74 73 20 3f 78 3f 5d 20 7d 0a 09 09 09 09  ints ?x?] }.....
278f0 69 64 65 6e 74 69 66 79 20 7b 20 72 65 74 75 72  identify { retur
27900 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
27910 3c 78 3e 5d 20 7d 0a 09 09 09 09 73 65 74 20 7b  <x>] }.....set {
27920 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79   return [Display
27930 48 69 6e 74 73 20 3c 76 61 6c 75 65 3e 5d 20 7d  Hints <value>] }
27940 0a 09 09 09 7d 0a 09 09 7d 0a 09 09 33 20 7b 0a  ....}...}...3 {.
27950 09 09 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 73  ...switch -- ${s
27960 75 62 7d 20 7b 0a 09 09 09 09 67 65 74 20 7b 20  ub} {.....get { 
27970 72 65 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48  return [DisplayH
27980 69 6e 74 73 20 3f 79 3f 5d 20 7d 0a 09 09 09 09  ints ?y?] }.....
27990 69 64 65 6e 74 69 66 79 20 7b 20 72 65 74 75 72  identify { retur
279a0 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
279b0 3c 79 3e 5d 20 7d 0a 09 09 09 7d 0a 09 09 7d 0a  <y>] }....}...}.
279c0 09 7d 0a 7d 0a 0a 70 72 6f 63 20 53 63 72 6f 6c  .}.}..proc Scrol
279d0 6c 62 61 72 4f 62 6a 20 7b 74 65 78 74 20 73 74  lbarObj {text st
279e0 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f 73  art end line pos
279f0 7d 20 7b 0a 0a 09 73 65 74 20 73 75 62 20 5b 4c  } {...set sub [L
27a00 69 6e 64 65 78 20 24 7b 6c 69 6e 65 7d 20 31 5d  index ${line} 1]
27a10 0a 09 73 65 74 20 70 72 65 76 20 5b 50 72 65 76  ..set prev [Prev
27a20 69 6f 75 73 57 6f 72 64 20 24 7b 73 74 61 72 74  iousWord ${start
27a30 7d 20 24 7b 6c 69 6e 65 7d 5d 0a 0a 09 23 20 6e  } ${line}]...# n
27a40 6f 74 65 20 74 68 61 74 20 74 68 65 20 60 70 72  ote that the `pr
27a50 65 66 69 78 20 6d 6f 76 65 74 6f 7c 73 63 72 6f  efix moveto|scro
27a60 6c 6c 27 0a 09 23 20 63 6f 6e 73 74 72 75 63 74  ll'..# construct
27a70 20 69 73 20 68 61 72 64 20 74 6f 20 63 6f 6d 70   is hard to comp
27a80 6c 65 74 65 2e 0a 09 23 0a 09 73 77 69 74 63 68  lete...#..switch
27a90 20 2d 2d 20 24 7b 70 6f 73 7d 20 7b 0a 09 09 31   -- ${pos} {...1
27aa0 20 7b 0a 09 09 09 72 65 74 75 72 6e 20 5b 54 72   {....return [Tr
27ab0 79 53 75 62 43 6d 64 73 20 24 7b 74 65 78 74 7d  ySubCmds ${text}
27ac0 20 5b 4c 69 6e 64 65 78 20 24 7b 6c 69 6e 65 7d   [Lindex ${line}
27ad0 20 30 5d 5d 0a 09 09 7d 0a 09 09 32 20 7b 0a 09   0]]...}...2 {..
27ae0 09 09 73 77 69 74 63 68 20 2d 2d 20 24 7b 73 75  ..switch -- ${su
27af0 62 7d 20 7b 0a 09 09 09 09 61 63 74 69 76 61 74  b} {.....activat
27b00 65 20 7b 0a 09 09 09 09 09 72 65 74 75 72 6e 20  e {......return 
27b10 5b 43 6f 6d 70 6c 65 74 65 46 72 6f 6d 4c 69 73  [CompleteFromLis
27b20 74 20 24 7b 74 65 78 74 7d 20 7b 0a 09 09 09 09  t ${text} {.....
27b30 09 09 61 72 72 6f 77 31 20 73 6c 69 64 65 72 20  ..arrow1 slider 
27b40 61 72 72 6f 77 32 0a 09 09 09 09 09 7d 5d 0a 09  arrow2......}]..
27b50 09 09 09 7d 0a 0a 09 09 09 09 66 72 61 63 74 69  ...}......fracti
27b60 6f 6e 20 2d 0a 09 09 09 09 69 64 65 6e 74 69 66  on -.....identif
27b70 79 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70  y { return [Disp
27b80 6c 61 79 48 69 6e 74 73 20 3c 78 3e 5d 20 7d 0a  layHints <x>] }.
27b90 09 09 09 09 64 65 6c 74 61 20 7b 20 72 65 74 75  ....delta { retu
27ba0 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73  rn [DisplayHints
27bb0 20 3c 64 65 6c 74 61 58 3e 5d 20 7d 0a 09 09 09   <deltaX>] }....
27bc0 09 73 65 74 20 7b 20 72 65 74 75 72 6e 20 5b 44  .set { return [D
27bd0 69 73 70 6c 61 79 48 69 6e 74 73 20 3c 66 69 72  isplayHints <fir
27be0 73 74 3e 5d 20 7d 0a 09 09 09 7d 0a 09 09 7d 0a  st>] }....}...}.
27bf0 09 09 33 20 7b 0a 09 09 09 73 77 69 74 63 68 20  ..3 {....switch 
27c00 2d 2d 20 24 7b 73 75 62 7d 20 7b 0a 0a 09 09 09  -- ${sub} {.....
27c10 09 66 72 61 63 74 69 6f 6e 20 2d 0a 09 09 09 09  .fraction -.....
27c20 69 64 65 6e 74 69 66 79 20 7b 20 72 65 74 75 72  identify { retur
27c30 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e 74 73 20  n [DisplayHints 
27c40 3c 79 3e 5d 20 7d 0a 09 09 09 09 64 65 6c 74 61  <y>] }.....delta
27c50 20 7b 20 72 65 74 75 72 6e 20 5b 44 69 73 70 6c   { return [Displ
27c60 61 79 48 69 6e 74 73 20 3c 64 65 6c 74 61 59 3e  ayHints <deltaY>
27c70 5d 20 7d 0a 09 09 09 09 73 65 74 20 7b 20 72 65  ] }.....set { re
27c80 74 75 72 6e 20 5b 44 69 73 70 6c 61 79 48 69 6e  turn [DisplayHin
27c90 74 73 20 3c 6c 61 73 74 3e 5d 20 7d 0a 09 09 09  ts <last>] }....
27ca0 7d 0a 09 09 7d 0a 09 7d 0a 7d 0a 0a 70 72 6f 63  }...}..}.}..proc
27cb0 20 54 65 78 74 4f 62 6a 20 7b 74 65 78 74 20 73   TextObj {text s
27cc0 74 61 72 74 20 65 6e 64 20 6c 69 6e 65 20 70 6f  tart end line po
27cd0 73 7d 20 7b 0a 09 23 20 54 4f 44 4f 20 2e 2e 2e  s} {..# TODO ...
27ce0 0a 09 72 65 74 75 72 6e 20 5b 43 6f 6d 70 6c 65  ..return [Comple
27cf0 74 65 46 72 6f 6d 4f 70 74 69 6f 6e 73 4f 72 53  teFromOptionsOrS
27d00 75 62 43 6d 64 73 20 5c 0a 09 24 7b 74 65 78 74  ubCmds \..${text
27d10 7d 20 24 7b 73 74 61 72 74 7d 20 24 7b 65 6e 64  } ${start} ${end
27d20 7d 20 24 7b 6c 69 6e 65 7d 20 24 7b 70 6f 73 7d  } ${line} ${pos}
27d30 5d 0a 7d 0a 0a 7d 3b 20 23 20 6e 61 6d 65 73 70  ].}..}; # namesp
27d40 61 63 65 20 74 63 6c 72 65 61 64 6c 69 6e 65 0a  ace tclreadline.