Hex Artifact Content

Artifact ae96be075943bfef64d0d3031c5b3b19216d1e1d:


0000: 2f 2a 20 0a 20 2a 20 74 6b 43 6f 6e 66 69 67 2e  /* . * tkConfig.
0010: 63 20 28 43 54 6b 29 20 2d 2d 0a 20 2a 0a 20 2a  c (CTk) --. *. *
0020: 09 54 68 69 73 20 66 69 6c 65 20 63 6f 6e 74 61  .This file conta
0030: 69 6e 73 20 74 68 65 20 54 6b 5f 43 6f 6e 66 69  ins the Tk_Confi
0040: 67 75 72 65 57 69 64 67 65 74 20 70 72 6f 63 65  gureWidget proce
0050: 64 75 72 65 2e 0a 20 2a 0a 20 2a 20 43 6f 70 79  dure.. *. * Copy
0060: 72 69 67 68 74 20 28 63 29 20 31 39 39 30 2d 31  right (c) 1990-1
0070: 39 39 34 20 54 68 65 20 52 65 67 65 6e 74 73 20  994 The Regents 
0080: 6f 66 20 74 68 65 20 55 6e 69 76 65 72 73 69 74  of the Universit
0090: 79 20 6f 66 20 43 61 6c 69 66 6f 72 6e 69 61 2e  y of California.
00a0: 0a 20 2a 20 43 6f 70 79 72 69 67 68 74 20 28 63  . * Copyright (c
00b0: 29 20 31 39 39 34 2d 31 39 39 35 20 53 75 6e 20  ) 1994-1995 Sun 
00c0: 4d 69 63 72 6f 73 79 73 74 65 6d 73 2c 20 49 6e  Microsystems, In
00d0: 63 2e 0a 20 2a 20 43 6f 70 79 72 69 67 68 74 20  c.. * Copyright 
00e0: 28 63 29 20 31 39 39 34 2d 31 39 39 35 20 43 6c  (c) 1994-1995 Cl
00f0: 65 76 65 6c 61 6e 64 20 43 6c 69 6e 69 63 20 46  eveland Clinic F
0100: 6f 75 6e 64 61 74 69 6f 6e 0a 20 2a 0a 20 2a 20  oundation. *. * 
0110: 53 65 65 20 74 68 65 20 66 69 6c 65 20 22 6c 69  See the file "li
0120: 63 65 6e 73 65 2e 74 65 72 6d 73 22 20 66 6f 72  cense.terms" for
0130: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6f 6e 20   information on 
0140: 75 73 61 67 65 20 61 6e 64 20 72 65 64 69 73 74  usage and redist
0150: 72 69 62 75 74 69 6f 6e 0a 20 2a 20 6f 66 20 74  ribution. * of t
0160: 68 69 73 20 66 69 6c 65 2c 20 61 6e 64 20 66 6f  his file, and fo
0170: 72 20 61 20 44 49 53 43 4c 41 49 4d 45 52 20 4f  r a DISCLAIMER O
0180: 46 20 41 4c 4c 20 57 41 52 52 41 4e 54 49 45 53  F ALL WARRANTIES
0190: 2e 0a 20 2a 0a 20 2a 20 40 28 23 29 20 24 49 64  .. *. * @(#) $Id
01a0: 3a 20 63 74 6b 2e 73 68 61 72 2c 76 20 31 2e 35  : ctk.shar,v 1.5
01b0: 30 20 31 39 39 36 2f 30 31 2f 31 35 20 31 34 3a  0 1996/01/15 14:
01c0: 34 37 3a 31 36 20 61 6e 64 72 65 77 6d 20 45 78  47:16 andrewm Ex
01d0: 70 20 61 6e 64 72 65 77 6d 20 24 0a 20 2a 2f 0a  p andrewm $. */.
01e0: 0a 23 69 6e 63 6c 75 64 65 20 22 74 6b 50 6f 72  .#include "tkPor
01f0: 74 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 74  t.h".#include "t
0200: 6b 2e 68 22 0a 0a 2f 2a 0a 20 2a 20 56 61 6c 75  k.h"../*. * Valu
0210: 65 73 20 66 6f 72 20 22 66 6c 61 67 73 22 20 66  es for "flags" f
0220: 69 65 6c 64 20 6f 66 20 54 6b 5f 43 6f 6e 66 69  ield of Tk_Confi
0230: 67 53 70 65 63 20 73 74 72 75 63 74 75 72 65 73  gSpec structures
0240: 2e 20 20 42 65 20 73 75 72 65 0a 20 2a 20 74 6f  .  Be sure. * to
0250: 20 63 6f 6f 72 64 69 6e 61 74 65 20 74 68 65 73   coordinate thes
0260: 65 20 76 61 6c 75 65 73 20 77 69 74 68 20 74 68  e values with th
0270: 6f 73 65 20 64 65 66 69 6e 65 64 20 69 6e 20 74  ose defined in t
0280: 6b 2e 68 0a 20 2a 20 28 54 4b 5f 43 4f 4e 46 49  k.h. * (TK_CONFI
0290: 47 5f 43 4f 4c 4f 52 5f 4f 4e 4c 59 2c 20 65 74  G_COLOR_ONLY, et
02a0: 63 2e 29 2e 20 20 54 68 65 72 65 20 6d 75 73 74  c.).  There must
02b0: 20 6e 6f 74 20 62 65 20 6f 76 65 72 6c 61 70 21   not be overlap!
02c0: 0a 20 2a 0a 20 2a 20 49 4e 49 54 20 2d 09 09 4e  . *. * INIT -..N
02d0: 6f 6e 2d 7a 65 72 6f 20 6d 65 61 6e 73 20 28 63  on-zero means (c
02e0: 68 61 72 20 2a 29 20 74 68 69 6e 67 73 20 68 61  har *) things ha
02f0: 76 65 20 62 65 65 6e 0a 20 2a 09 09 09 63 6f 6e  ve been. *...con
0300: 76 65 72 74 65 64 20 74 6f 20 54 6b 5f 55 69 64  verted to Tk_Uid
0310: 27 73 2e 0a 20 2a 2f 0a 0a 23 64 65 66 69 6e 65  's.. */..#define
0320: 20 49 4e 49 54 09 09 30 78 32 30 0a 0a 2f 2a 0a   INIT..0x20../*.
0330: 20 2a 20 56 61 6c 69 64 20 54 6b 20 6f 70 74 69   * Valid Tk opti
0340: 6f 6e 73 20 74 68 61 74 20 61 72 65 20 6e 6f 74  ons that are not
0350: 20 73 75 70 70 6f 72 74 65 64 20 62 79 20 43 54   supported by CT
0360: 6b 2c 20 61 6e 64 20 74 68 65 69 72 20 66 69 78  k, and their fix
0370: 65 64 20 76 61 6c 75 65 73 2e 0a 20 2a 20 4e 65  ed values.. * Ne
0380: 65 64 20 74 6f 20 73 65 74 20 6d 6f 72 65 20 6f  ed to set more o
0390: 66 20 74 68 65 20 64 65 66 61 75 6c 74 73 20 74  f the defaults t
03a0: 6f 20 73 65 6e 73 69 62 6c 65 20 76 61 6c 75 65  o sensible value
03b0: 73 2e 0a 20 2a 2f 0a 73 74 61 74 69 63 20 63 68  s.. */.static ch
03c0: 61 72 20 2a 75 6e 73 75 70 70 6f 72 74 65 64 4f  ar *unsupportedO
03d0: 70 74 69 6f 6e 73 5b 5d 20 3d 20 7b 0a 20 20 20  ptions[] = {.   
03e0: 20 22 2d 61 63 74 69 76 65 62 61 63 6b 67 72 6f   "-activebackgro
03f0: 75 6e 64 22 2c 0a 20 20 20 20 22 22 2c 0a 20 20  und",.    "",.  
0400: 20 20 22 2d 61 63 74 69 76 65 62 6f 72 64 65 72    "-activeborder
0410: 77 69 64 74 68 22 2c 0a 20 20 20 20 22 30 22 2c  width",.    "0",
0420: 0a 20 20 20 20 22 2d 61 63 74 69 76 65 72 65 6c  .    "-activerel
0430: 69 65 66 22 2c 0a 20 20 20 20 22 22 2c 0a 20 20  ief",.    "",.  
0440: 20 20 22 2d 62 61 63 6b 67 72 6f 75 6e 64 22 2c    "-background",
0450: 0a 20 20 20 20 22 62 6c 61 63 6b 22 2c 0a 20 20  .    "black",.  
0460: 20 20 22 2d 62 67 22 2c 0a 20 20 20 20 22 62 6c    "-bg",.    "bl
0470: 61 63 6b 22 2c 0a 20 20 20 20 22 2d 62 69 74 6d  ack",.    "-bitm
0480: 61 70 22 2c 0a 20 20 20 20 22 22 2c 0a 20 20 20  ap",.    "",.   
0490: 20 22 2d 62 6f 72 64 65 72 77 69 64 74 68 22 2c   "-borderwidth",
04a0: 0a 20 20 20 20 22 30 22 2c 0a 20 20 20 20 22 2d  .    "0",.    "-
04b0: 63 6f 6c 6f 72 6d 61 70 22 2c 0a 20 20 20 20 22  colormap",.    "
04c0: 22 2c 0a 20 20 20 20 22 2d 63 75 72 73 6f 72 22  ",.    "-cursor"
04d0: 2c 0a 20 20 20 20 22 22 2c 0a 20 20 20 20 22 2d  ,.    "",.    "-
04e0: 64 69 73 61 62 6c 65 64 66 6f 72 65 67 72 6f 75  disabledforegrou
04f0: 6e 64 22 2c 0a 20 20 20 20 22 22 2c 0a 20 20 20  nd",.    "",.   
0500: 20 22 2d 65 78 70 6f 72 74 73 65 6c 65 63 74 69   "-exportselecti
0510: 6f 6e 22 2c 0a 20 20 20 20 22 22 2c 0a 20 20 20  on",.    "",.   
0520: 20 22 2d 66 67 22 2c 0a 20 20 20 20 22 77 68 69   "-fg",.    "whi
0530: 74 65 22 2c 0a 20 20 20 20 22 2d 66 6f 6e 74 22  te",.    "-font"
0540: 2c 0a 20 20 20 20 22 66 69 78 65 64 22 2c 0a 20  ,.    "fixed",. 
0550: 20 20 20 22 2d 66 6f 72 65 67 72 6f 75 6e 64 22     "-foreground"
0560: 2c 0a 20 20 20 20 22 77 68 69 74 65 22 2c 0a 20  ,.    "white",. 
0570: 20 20 20 22 2d 68 69 67 68 6c 69 67 68 74 63 6f     "-highlightco
0580: 6c 6f 72 22 2c 0a 20 20 20 20 22 22 2c 0a 20 20  lor",.    "",.  
0590: 20 20 22 2d 68 69 67 68 6c 69 67 68 74 62 61 63    "-highlightbac
05a0: 6b 67 72 6f 75 6e 64 22 2c 0a 20 20 20 20 22 22  kground",.    ""
05b0: 2c 0a 20 20 20 20 22 2d 68 69 67 68 6c 69 67 68  ,.    "-highligh
05c0: 74 74 68 69 63 6b 6e 65 73 73 22 2c 0a 20 20 20  tthickness",.   
05d0: 20 22 30 22 2c 0a 20 20 20 20 22 2d 69 6d 61 67   "0",.    "-imag
05e0: 65 22 2c 0a 20 20 20 20 22 22 2c 0a 20 20 20 20  e",.    "",.    
05f0: 22 2d 69 6e 73 65 72 74 62 61 63 6b 67 72 6f 75  "-insertbackgrou
0600: 6e 64 22 2c 0a 20 20 20 20 22 22 2c 0a 20 20 20  nd",.    "",.   
0610: 20 22 2d 69 6e 73 65 72 74 62 6f 72 64 65 72 77   "-insertborderw
0620: 69 64 74 68 22 2c 0a 20 20 20 20 22 22 2c 0a 20  idth",.    "",. 
0630: 20 20 20 22 2d 69 6e 73 65 72 74 6f 66 66 74 69     "-insertoffti
0640: 6d 65 22 2c 0a 20 20 20 20 22 22 2c 0a 20 20 20  me",.    "",.   
0650: 20 22 2d 69 6e 73 65 72 74 6f 6e 74 69 6d 65 22   "-insertontime"
0660: 2c 0a 20 20 20 20 22 22 2c 0a 20 20 20 20 22 2d  ,.    "",.    "-
0670: 69 6e 73 65 72 74 77 69 64 74 68 22 2c 0a 20 20  insertwidth",.  
0680: 20 20 22 22 2c 0a 20 20 20 20 22 2d 69 6e 64 69    "",.    "-indi
0690: 63 61 74 6f 72 6f 6e 22 2c 0a 20 20 20 20 22 22  catoron",.    ""
06a0: 2c 0a 20 20 20 20 22 2d 6a 75 6d 70 22 2c 0a 20  ,.    "-jump",. 
06b0: 20 20 20 22 22 2c 0a 20 20 20 20 22 2d 72 65 6c     "",.    "-rel
06c0: 69 65 66 22 2c 0a 20 20 20 20 22 22 2c 0a 20 20  ief",.    "",.  
06d0: 20 20 22 2d 72 65 70 65 61 74 64 65 6c 61 79 22    "-repeatdelay"
06e0: 2c 0a 20 20 20 20 22 22 2c 0a 20 20 20 20 22 2d  ,.    "",.    "-
06f0: 72 65 70 65 61 74 69 6e 74 65 72 76 61 6c 22 2c  repeatinterval",
0700: 0a 20 20 20 20 22 22 2c 0a 20 20 20 20 22 2d 73  .    "",.    "-s
0710: 63 72 65 65 6e 22 2c 0a 20 20 20 20 22 22 2c 0a  creen",.    "",.
0720: 20 20 20 20 22 2d 73 65 6c 65 63 74 62 61 63 6b      "-selectback
0730: 67 72 6f 75 6e 64 22 2c 0a 20 20 20 20 22 22 2c  ground",.    "",
0740: 0a 20 20 20 20 22 2d 73 65 6c 65 63 74 62 6f 72  .    "-selectbor
0750: 64 65 72 77 69 64 74 68 22 2c 0a 20 20 20 20 22  derwidth",.    "
0760: 22 2c 0a 20 20 20 20 22 2d 73 65 6c 65 63 74 63  ",.    "-selectc
0770: 6f 6c 6f 72 22 2c 0a 20 20 20 20 22 22 2c 0a 20  olor",.    "",. 
0780: 20 20 20 22 2d 73 65 6c 65 63 74 66 6f 72 65 67     "-selectforeg
0790: 72 6f 75 6e 64 22 2c 0a 20 20 20 20 22 22 2c 0a  round",.    "",.
07a0: 20 20 20 20 22 2d 73 65 6c 65 63 74 69 6d 61 67      "-selectimag
07b0: 65 22 2c 0a 20 20 20 20 22 22 2c 0a 20 20 20 20  e",.    "",.    
07c0: 22 2d 73 65 74 67 72 69 64 22 2c 0a 20 20 20 20  "-setgrid",.    
07d0: 22 22 2c 0a 20 20 20 20 22 2d 74 65 61 72 6f 66  "",.    "-tearof
07e0: 66 22 2c 0a 20 20 20 20 22 22 2c 0a 20 20 20 20  f",.    "",.    
07f0: 22 2d 74 72 6f 75 67 68 63 6f 6c 6f 72 22 2c 0a  "-troughcolor",.
0800: 20 20 20 20 22 22 2c 0a 20 20 20 20 22 2d 76 69      "",.    "-vi
0810: 73 75 61 6c 22 2c 0a 20 20 20 20 22 22 2c 0a 20  sual",.    "",. 
0820: 20 20 20 28 63 68 61 72 20 2a 29 20 4e 55 4c 4c     (char *) NULL
0830: 0a 7d 3b 0a 0a 2f 2a 0a 20 2a 20 46 6f 72 77 61  .};../*. * Forwa
0840: 72 64 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20  rd declarations 
0850: 66 6f 72 20 70 72 6f 63 65 64 75 72 65 73 20 64  for procedures d
0860: 65 66 69 6e 65 64 20 6c 61 74 65 72 20 69 6e 20  efined later in 
0870: 74 68 69 73 20 66 69 6c 65 3a 0a 20 2a 2f 0a 0a  this file:. */..
0880: 73 74 61 74 69 63 20 69 6e 74 09 09 44 6f 43 6f  static int..DoCo
0890: 6e 66 69 67 20 5f 41 4e 53 49 5f 41 52 47 53 5f  nfig _ANSI_ARGS_
08a0: 28 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e  ((Tcl_Interp *in
08b0: 74 65 72 70 2c 0a 09 09 09 20 20 20 20 54 6b 5f  terp,....    Tk_
08c0: 57 69 6e 64 6f 77 20 74 6b 77 69 6e 2c 20 54 6b  Window tkwin, Tk
08d0: 5f 43 6f 6e 66 69 67 53 70 65 63 20 2a 73 70 65  _ConfigSpec *spe
08e0: 63 50 74 72 2c 0a 09 09 09 20 20 20 20 54 6b 5f  cPtr,....    Tk_
08f0: 55 69 64 20 76 61 6c 75 65 2c 20 69 6e 74 20 76  Uid value, int v
0900: 61 6c 75 65 49 73 55 69 64 2c 20 63 68 61 72 20  alueIsUid, char 
0910: 2a 77 69 64 67 52 65 63 29 29 3b 0a 73 74 61 74  *widgRec));.stat
0920: 69 63 20 54 6b 5f 43 6f 6e 66 69 67 53 70 65 63  ic Tk_ConfigSpec
0930: 20 2a 09 46 69 6e 64 43 6f 6e 66 69 67 53 70 65   *.FindConfigSpe
0940: 63 20 5f 41 4e 53 49 5f 41 52 47 53 5f 28 28 54  c _ANSI_ARGS_((T
0950: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
0960: 70 2c 0a 09 09 09 20 20 20 20 54 6b 5f 43 6f 6e  p,....    Tk_Con
0970: 66 69 67 53 70 65 63 20 2a 73 70 65 63 73 2c 20  figSpec *specs, 
0980: 63 68 61 72 20 2a 61 72 67 76 4e 61 6d 65 2c 0a  char *argvName,.
0990: 09 09 09 20 20 20 20 69 6e 74 20 6e 65 65 64 46  ...    int needF
09a0: 6c 61 67 73 2c 20 69 6e 74 20 68 61 74 65 46 6c  lags, int hateFl
09b0: 61 67 73 29 29 3b 0a 73 74 61 74 69 63 20 63 68  ags));.static ch
09c0: 61 72 20 2a 09 09 46 6f 72 6d 61 74 43 6f 6e 66  ar *..FormatConf
09d0: 69 67 49 6e 66 6f 20 5f 41 4e 53 49 5f 41 52 47  igInfo _ANSI_ARG
09e0: 53 5f 28 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a  S_((Tcl_Interp *
09f0: 69 6e 74 65 72 70 2c 0a 09 09 09 20 20 20 20 54  interp,....    T
0a00: 6b 5f 57 69 6e 64 6f 77 20 74 6b 77 69 6e 2c 20  k_Window tkwin, 
0a10: 54 6b 5f 43 6f 6e 66 69 67 53 70 65 63 20 2a 73  Tk_ConfigSpec *s
0a20: 70 65 63 50 74 72 2c 0a 09 09 09 20 20 20 20 63  pecPtr,....    c
0a30: 68 61 72 20 2a 77 69 64 67 52 65 63 29 29 3b 0a  har *widgRec));.
0a40: 73 74 61 74 69 63 20 63 68 61 72 20 2a 09 09 46  static char *..F
0a50: 6f 72 6d 61 74 43 6f 6e 66 69 67 56 61 6c 75 65  ormatConfigValue
0a60: 20 5f 41 4e 53 49 5f 41 52 47 53 5f 28 28 54 63   _ANSI_ARGS_((Tc
0a70: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
0a80: 2c 0a 09 09 09 20 20 20 20 54 6b 5f 57 69 6e 64  ,....    Tk_Wind
0a90: 6f 77 20 74 6b 77 69 6e 2c 20 54 6b 5f 43 6f 6e  ow tkwin, Tk_Con
0aa0: 66 69 67 53 70 65 63 20 2a 73 70 65 63 50 74 72  figSpec *specPtr
0ab0: 2c 0a 09 09 09 20 20 20 20 63 68 61 72 20 2a 77  ,....    char *w
0ac0: 69 64 67 52 65 63 2c 20 63 68 61 72 20 2a 62 75  idgRec, char *bu
0ad0: 66 66 65 72 2c 0a 09 09 09 20 20 20 20 54 63 6c  ffer,....    Tcl
0ae0: 5f 46 72 65 65 50 72 6f 63 20 2a 2a 66 72 65 65  _FreeProc **free
0af0: 50 72 6f 63 50 74 72 29 29 3b 0a 0c 0a 2f 2a 0a  ProcPtr));.../*.
0b00: 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d   *--------------
0b10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0b20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0b30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0b40: 0a 20 2a 0a 20 2a 20 54 6b 5f 43 6f 6e 66 69 67  . *. * Tk_Config
0b50: 75 72 65 57 69 64 67 65 74 20 2d 2d 0a 20 2a 0a  ureWidget --. *.
0b60: 20 2a 09 50 72 6f 63 65 73 73 20 63 6f 6d 6d 61   *.Process comma
0b70: 6e 64 2d 6c 69 6e 65 20 6f 70 74 69 6f 6e 73 20  nd-line options 
0b80: 61 6e 64 20 64 61 74 61 62 61 73 65 20 6f 70 74  and database opt
0b90: 69 6f 6e 73 20 74 6f 0a 20 2a 09 66 69 6c 6c 20  ions to. *.fill 
0ba0: 69 6e 20 66 69 65 6c 64 73 20 6f 66 20 61 20 77  in fields of a w
0bb0: 69 64 67 65 74 20 72 65 63 6f 72 64 20 77 69 74  idget record wit
0bc0: 68 20 72 65 73 6f 75 72 63 65 73 20 61 6e 64 0a  h resources and.
0bd0: 20 2a 09 6f 74 68 65 72 20 70 61 72 61 6d 65 74   *.other paramet
0be0: 65 72 73 2e 0a 20 2a 0a 20 2a 20 52 65 73 75 6c  ers.. *. * Resul
0bf0: 74 73 3a 0a 20 2a 09 41 20 73 74 61 6e 64 61 72  ts:. *.A standar
0c00: 64 20 54 63 6c 20 72 65 74 75 72 6e 20 76 61 6c  d Tcl return val
0c10: 75 65 2e 20 20 49 6e 20 63 61 73 65 20 6f 66 20  ue.  In case of 
0c20: 61 6e 20 65 72 72 6f 72 2c 0a 20 2a 09 69 6e 74  an error,. *.int
0c30: 65 72 70 2d 3e 72 65 73 75 6c 74 20 77 69 6c 6c  erp->result will
0c40: 20 68 6f 6c 64 20 61 6e 20 65 72 72 6f 72 20 6d   hold an error m
0c50: 65 73 73 61 67 65 2e 0a 20 2a 0a 20 2a 20 53 69  essage.. *. * Si
0c60: 64 65 20 65 66 66 65 63 74 73 3a 0a 20 2a 09 54  de effects:. *.T
0c70: 68 65 20 66 69 65 6c 64 73 20 6f 66 20 77 69 64  he fields of wid
0c80: 67 52 65 63 20 67 65 74 20 66 69 6c 6c 65 64 20  gRec get filled 
0c90: 69 6e 20 77 69 74 68 20 69 6e 66 6f 72 6d 61 74  in with informat
0ca0: 69 6f 6e 0a 20 2a 09 66 72 6f 6d 20 61 72 67 63  ion. *.from argc
0cb0: 2f 61 72 67 76 20 61 6e 64 20 74 68 65 20 6f 70  /argv and the op
0cc0: 74 69 6f 6e 20 64 61 74 61 62 61 73 65 2e 20 20  tion database.  
0cd0: 4f 6c 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a  Old information.
0ce0: 20 2a 09 69 6e 20 77 69 64 67 52 65 63 27 73 20   *.in widgRec's 
0cf0: 66 69 65 6c 64 73 20 67 65 74 73 20 72 65 63 79  fields gets recy
0d00: 63 6c 65 64 2e 0a 20 2a 0a 20 2a 2d 2d 2d 2d 2d  cled.. *. *-----
0d10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0d20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0d30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0d40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 2f 0a 0a 69  ---------. */..i
0d50: 6e 74 0a 54 6b 5f 43 6f 6e 66 69 67 75 72 65 57  nt.Tk_ConfigureW
0d60: 69 64 67 65 74 28 69 6e 74 65 72 70 2c 20 74 6b  idget(interp, tk
0d70: 77 69 6e 2c 20 73 70 65 63 73 2c 20 61 72 67 63  win, specs, argc
0d80: 2c 20 61 72 67 76 2c 20 77 69 64 67 52 65 63 2c  , argv, widgRec,
0d90: 20 66 6c 61 67 73 29 0a 20 20 20 20 54 63 6c 5f   flags).    Tcl_
0da0: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 3b 09  Interp *interp;.
0db0: 09 2f 2a 20 49 6e 74 65 72 70 72 65 74 65 72 20  ./* Interpreter 
0dc0: 66 6f 72 20 65 72 72 6f 72 20 72 65 70 6f 72 74  for error report
0dd0: 69 6e 67 2e 20 2a 2f 0a 20 20 20 20 54 6b 5f 57  ing. */.    Tk_W
0de0: 69 6e 64 6f 77 20 74 6b 77 69 6e 3b 09 09 2f 2a  indow tkwin;../*
0df0: 20 57 69 6e 64 6f 77 20 63 6f 6e 74 61 69 6e 69   Window containi
0e00: 6e 67 20 77 69 64 67 65 74 20 28 6e 65 65 64 65  ng widget (neede
0e10: 64 20 74 6f 0a 09 09 09 09 20 2a 20 73 65 74 20  d to..... * set 
0e20: 75 70 20 58 20 72 65 73 6f 75 72 63 65 73 29 2e  up X resources).
0e30: 20 2a 2f 0a 20 20 20 20 54 6b 5f 43 6f 6e 66 69   */.    Tk_Confi
0e40: 67 53 70 65 63 20 2a 73 70 65 63 73 3b 09 2f 2a  gSpec *specs;./*
0e50: 20 44 65 73 63 72 69 62 65 73 20 6c 65 67 61 6c   Describes legal
0e60: 20 6f 70 74 69 6f 6e 73 2e 20 2a 2f 0a 20 20 20   options. */.   
0e70: 20 69 6e 74 20 61 72 67 63 3b 09 09 09 2f 2a 20   int argc;.../* 
0e80: 4e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e  Number of elemen
0e90: 74 73 20 69 6e 20 61 72 67 76 2e 20 2a 2f 0a 20  ts in argv. */. 
0ea0: 20 20 20 63 68 61 72 20 2a 2a 61 72 67 76 3b 09     char **argv;.
0eb0: 09 2f 2a 20 43 6f 6d 6d 61 6e 64 2d 6c 69 6e 65  ./* Command-line
0ec0: 20 6f 70 74 69 6f 6e 73 2e 20 2a 2f 0a 20 20 20   options. */.   
0ed0: 20 63 68 61 72 20 2a 77 69 64 67 52 65 63 3b 09   char *widgRec;.
0ee0: 09 2f 2a 20 52 65 63 6f 72 64 20 77 68 6f 73 65  ./* Record whose
0ef0: 20 66 69 65 6c 64 73 20 61 72 65 20 74 6f 20 62   fields are to b
0f00: 65 0a 09 09 09 09 20 2a 20 6d 6f 64 69 66 69 65  e..... * modifie
0f10: 64 2e 20 20 56 61 6c 75 65 73 20 6d 75 73 74 20  d.  Values must 
0f20: 62 65 20 70 72 6f 70 65 72 6c 79 0a 09 09 09 09  be properly.....
0f30: 20 2a 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 20   * initialized. 
0f40: 2a 2f 0a 20 20 20 20 69 6e 74 20 66 6c 61 67 73  */.    int flags
0f50: 3b 09 09 09 2f 2a 20 55 73 65 64 20 74 6f 20 73  ;.../* Used to s
0f60: 70 65 63 69 66 79 20 61 64 64 69 74 69 6f 6e 61  pecify additiona
0f70: 6c 20 66 6c 61 67 73 0a 09 09 09 09 20 2a 20 74  l flags..... * t
0f80: 68 61 74 20 6d 75 73 74 20 62 65 20 70 72 65 73  hat must be pres
0f90: 65 6e 74 20 69 6e 20 63 6f 6e 66 69 67 20 73 70  ent in config sp
0fa0: 65 63 73 0a 09 09 09 09 20 2a 20 66 6f 72 20 74  ecs..... * for t
0fb0: 68 65 6d 20 74 6f 20 62 65 20 63 6f 6e 73 69 64  hem to be consid
0fc0: 65 72 65 64 2e 20 20 41 6c 73 6f 2c 0a 09 09 09  ered.  Also,....
0fd0: 09 20 2a 20 6d 61 79 20 68 61 76 65 20 54 4b 5f  . * may have TK_
0fe0: 43 4f 4e 46 49 47 5f 41 52 47 56 5f 4f 4e 4c 59  CONFIG_ARGV_ONLY
0ff0: 20 73 65 74 2e 20 2a 2f 0a 7b 0a 20 20 20 20 72   set. */.{.    r
1000: 65 67 69 73 74 65 72 20 54 6b 5f 43 6f 6e 66 69  egister Tk_Confi
1010: 67 53 70 65 63 20 2a 73 70 65 63 50 74 72 3b 0a  gSpec *specPtr;.
1020: 20 20 20 20 54 6b 5f 55 69 64 20 76 61 6c 75 65      Tk_Uid value
1030: 3b 09 09 2f 2a 20 56 61 6c 75 65 20 6f 66 20 6f  ;../* Value of o
1040: 70 74 69 6f 6e 20 66 72 6f 6d 20 64 61 74 61 62  ption from datab
1050: 61 73 65 2e 20 2a 2f 0a 20 20 20 20 69 6e 74 20  ase. */.    int 
1060: 6e 65 65 64 46 6c 61 67 73 3b 09 09 2f 2a 20 53  needFlags;../* S
1070: 70 65 63 73 20 6d 75 73 74 20 63 6f 6e 74 61 69  pecs must contai
1080: 6e 20 74 68 69 73 20 73 65 74 20 6f 66 20 66 6c  n this set of fl
1090: 61 67 73 0a 09 09 09 09 20 2a 20 6f 72 20 65 6c  ags..... * or el
10a0: 73 65 20 74 68 65 79 20 61 72 65 20 6e 6f 74 20  se they are not 
10b0: 63 6f 6e 73 69 64 65 72 65 64 2e 20 2a 2f 0a 20  considered. */. 
10c0: 20 20 20 69 6e 74 20 68 61 74 65 46 6c 61 67 73     int hateFlags
10d0: 3b 09 09 2f 2a 20 49 66 20 61 20 73 70 65 63 20  ;../* If a spec 
10e0: 63 6f 6e 74 61 69 6e 73 20 61 6e 79 20 62 69 74  contains any bit
10f0: 73 20 68 65 72 65 2c 20 69 74 27 73 0a 09 09 09  s here, it's....
1100: 09 20 2a 20 6e 6f 74 20 63 6f 6e 73 69 64 65 72  . * not consider
1110: 65 64 2e 20 2a 2f 0a 0a 20 20 20 20 6e 65 65 64  ed. */..    need
1120: 46 6c 61 67 73 20 3d 20 66 6c 61 67 73 20 26 20  Flags = flags & 
1130: 7e 28 54 4b 5f 43 4f 4e 46 49 47 5f 55 53 45 52  ~(TK_CONFIG_USER
1140: 5f 42 49 54 20 2d 20 31 29 3b 0a 20 20 20 20 69  _BIT - 1);.    i
1150: 66 20 28 54 6b 5f 44 65 70 74 68 28 74 6b 77 69  f (Tk_Depth(tkwi
1160: 6e 29 20 3c 3d 20 31 29 20 7b 0a 09 68 61 74 65  n) <= 1) {..hate
1170: 46 6c 61 67 73 20 3d 20 54 4b 5f 43 4f 4e 46 49  Flags = TK_CONFI
1180: 47 5f 43 4f 4c 4f 52 5f 4f 4e 4c 59 3b 0a 20 20  G_COLOR_ONLY;.  
1190: 20 20 7d 20 65 6c 73 65 20 7b 0a 09 68 61 74 65    } else {..hate
11a0: 46 6c 61 67 73 20 3d 20 54 4b 5f 43 4f 4e 46 49  Flags = TK_CONFI
11b0: 47 5f 4d 4f 4e 4f 5f 4f 4e 4c 59 3b 0a 20 20 20  G_MONO_ONLY;.   
11c0: 20 7d 0a 0a 20 20 20 20 2f 2a 0a 20 20 20 20 20   }..    /*.     
11d0: 2a 20 50 61 73 73 20 6f 6e 65 3a 20 20 73 63 61  * Pass one:  sca
11e0: 6e 20 74 68 72 6f 75 67 68 20 61 6c 6c 20 74 68  n through all th
11f0: 65 20 6f 70 74 69 6f 6e 20 73 70 65 63 73 2c 20  e option specs, 
1200: 72 65 70 6c 61 63 69 6e 67 20 73 74 72 69 6e 67  replacing string
1210: 73 0a 20 20 20 20 20 2a 20 77 69 74 68 20 54 6b  s.     * with Tk
1220: 5f 55 69 64 73 20 28 69 66 20 74 68 69 73 20 68  _Uids (if this h
1230: 61 73 6e 27 74 20 62 65 65 6e 20 64 6f 6e 65 20  asn't been done 
1240: 61 6c 72 65 61 64 79 29 20 61 6e 64 20 63 6c 65  already) and cle
1250: 61 72 69 6e 67 0a 20 20 20 20 20 2a 20 74 68 65  aring.     * the
1260: 20 54 4b 5f 43 4f 4e 46 49 47 5f 4f 50 54 49 4f   TK_CONFIG_OPTIO
1270: 4e 5f 53 50 45 43 49 46 49 45 44 20 66 6c 61 67  N_SPECIFIED flag
1280: 73 2e 0a 20 20 20 20 20 2a 2f 0a 0a 20 20 20 20  s..     */..    
1290: 66 6f 72 20 28 73 70 65 63 50 74 72 20 3d 20 73  for (specPtr = s
12a0: 70 65 63 73 3b 20 73 70 65 63 50 74 72 2d 3e 74  pecs; specPtr->t
12b0: 79 70 65 20 21 3d 20 54 4b 5f 43 4f 4e 46 49 47  ype != TK_CONFIG
12c0: 5f 45 4e 44 3b 20 73 70 65 63 50 74 72 2b 2b 29  _END; specPtr++)
12d0: 20 7b 0a 09 69 66 20 28 21 28 73 70 65 63 50 74   {..if (!(specPt
12e0: 72 2d 3e 73 70 65 63 46 6c 61 67 73 20 26 20 49  r->specFlags & I
12f0: 4e 49 54 29 20 26 26 20 28 73 70 65 63 50 74 72  NIT) && (specPtr
1300: 2d 3e 61 72 67 76 4e 61 6d 65 20 21 3d 20 4e 55  ->argvName != NU
1310: 4c 4c 29 29 20 7b 0a 09 20 20 20 20 69 66 20 28  LL)) {..    if (
1320: 73 70 65 63 50 74 72 2d 3e 64 62 4e 61 6d 65 20  specPtr->dbName 
1330: 21 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 73 70 65  != NULL) {...spe
1340: 63 50 74 72 2d 3e 64 62 4e 61 6d 65 20 3d 20 54  cPtr->dbName = T
1350: 6b 5f 47 65 74 55 69 64 28 73 70 65 63 50 74 72  k_GetUid(specPtr
1360: 2d 3e 64 62 4e 61 6d 65 29 3b 0a 09 20 20 20 20  ->dbName);..    
1370: 7d 0a 09 20 20 20 20 69 66 20 28 73 70 65 63 50  }..    if (specP
1380: 74 72 2d 3e 64 62 43 6c 61 73 73 20 21 3d 20 4e  tr->dbClass != N
1390: 55 4c 4c 29 20 7b 0a 09 09 73 70 65 63 50 74 72  ULL) {...specPtr
13a0: 2d 3e 64 62 43 6c 61 73 73 20 3d 20 54 6b 5f 47  ->dbClass = Tk_G
13b0: 65 74 55 69 64 28 73 70 65 63 50 74 72 2d 3e 64  etUid(specPtr->d
13c0: 62 43 6c 61 73 73 29 3b 0a 09 20 20 20 20 7d 0a  bClass);..    }.
13d0: 09 20 20 20 20 69 66 20 28 73 70 65 63 50 74 72  .    if (specPtr
13e0: 2d 3e 64 65 66 56 61 6c 75 65 20 21 3d 20 4e 55  ->defValue != NU
13f0: 4c 4c 29 20 7b 0a 09 09 73 70 65 63 50 74 72 2d  LL) {...specPtr-
1400: 3e 64 65 66 56 61 6c 75 65 20 3d 20 54 6b 5f 47  >defValue = Tk_G
1410: 65 74 55 69 64 28 73 70 65 63 50 74 72 2d 3e 64  etUid(specPtr->d
1420: 65 66 56 61 6c 75 65 29 3b 0a 09 20 20 20 20 7d  efValue);..    }
1430: 0a 09 7d 0a 09 73 70 65 63 50 74 72 2d 3e 73 70  ..}..specPtr->sp
1440: 65 63 46 6c 61 67 73 20 3d 20 28 73 70 65 63 50  ecFlags = (specP
1450: 74 72 2d 3e 73 70 65 63 46 6c 61 67 73 20 26 20  tr->specFlags & 
1460: 7e 54 4b 5f 43 4f 4e 46 49 47 5f 4f 50 54 49 4f  ~TK_CONFIG_OPTIO
1470: 4e 5f 53 50 45 43 49 46 49 45 44 29 0a 09 09 7c  N_SPECIFIED)...|
1480: 20 49 4e 49 54 3b 0a 20 20 20 20 7d 0a 0a 20 20   INIT;.    }..  
1490: 20 20 2f 2a 0a 20 20 20 20 20 2a 20 50 61 73 73    /*.     * Pass
14a0: 20 74 77 6f 3a 20 20 73 63 61 6e 20 74 68 72 6f   two:  scan thro
14b0: 75 67 68 20 61 6c 6c 20 6f 66 20 74 68 65 20 61  ugh all of the a
14c0: 72 67 75 6d 65 6e 74 73 2c 20 70 72 6f 63 65 73  rguments, proces
14d0: 73 69 6e 67 20 74 68 6f 73 65 0a 20 20 20 20 20  sing those.     
14e0: 2a 20 74 68 61 74 20 6d 61 74 63 68 20 65 6e 74  * that match ent
14f0: 72 69 65 73 20 69 6e 20 74 68 65 20 73 70 65 63  ries in the spec
1500: 73 2e 0a 20 20 20 20 20 2a 2f 0a 0a 20 20 20 20  s..     */..    
1510: 66 6f 72 20 28 20 3b 20 61 72 67 63 20 3e 20 30  for ( ; argc > 0
1520: 3b 20 61 72 67 63 20 2d 3d 20 32 2c 20 61 72 67  ; argc -= 2, arg
1530: 76 20 2b 3d 20 32 29 20 7b 0a 09 73 70 65 63 50  v += 2) {..specP
1540: 74 72 20 3d 20 46 69 6e 64 43 6f 6e 66 69 67 53  tr = FindConfigS
1550: 70 65 63 28 69 6e 74 65 72 70 2c 20 73 70 65 63  pec(interp, spec
1560: 73 2c 20 2a 61 72 67 76 2c 20 6e 65 65 64 46 6c  s, *argv, needFl
1570: 61 67 73 2c 20 68 61 74 65 46 6c 61 67 73 29 3b  ags, hateFlags);
1580: 0a 09 69 66 20 28 73 70 65 63 50 74 72 20 3d 3d  ..if (specPtr ==
1590: 20 4e 55 4c 4c 29 20 7b 0a 09 20 20 20 20 73 69   NULL) {..    si
15a0: 7a 65 5f 74 20 6c 65 6e 67 74 68 20 3d 20 73 74  ze_t length = st
15b0: 72 6c 65 6e 28 2a 61 72 67 76 29 3b 0a 09 20 20  rlen(*argv);..  
15c0: 20 20 63 68 61 72 20 2a 2a 6f 70 74 69 6f 6e 50    char **optionP
15d0: 74 72 3b 0a 0a 09 20 20 20 20 66 6f 72 20 28 6f  tr;...    for (o
15e0: 70 74 69 6f 6e 50 74 72 20 3d 20 75 6e 73 75 70  ptionPtr = unsup
15f0: 70 6f 72 74 65 64 4f 70 74 69 6f 6e 73 3b 0a 09  portedOptions;..
1600: 20 20 20 20 09 20 20 20 20 2a 6f 70 74 69 6f 6e      .    *option
1610: 50 74 72 20 21 3d 20 28 63 68 61 72 20 2a 29 20  Ptr != (char *) 
1620: 4e 55 4c 4c 3b 0a 09 20 20 20 20 09 20 20 20 20  NULL;..    .    
1630: 6f 70 74 69 6f 6e 50 74 72 20 2b 3d 20 32 29 20  optionPtr += 2) 
1640: 7b 0a 09 09 69 66 20 28 2a 6f 70 74 69 6f 6e 50  {...if (*optionP
1650: 74 72 5b 30 5d 20 3d 3d 20 2a 61 72 67 76 5b 30  tr[0] == *argv[0
1660: 5d 20 26 26 0a 09 09 09 73 74 72 6e 63 6d 70 28  ] &&....strncmp(
1670: 2a 6f 70 74 69 6f 6e 50 74 72 2c 20 2a 61 72 67  *optionPtr, *arg
1680: 76 2c 20 6c 65 6e 67 74 68 29 20 3d 3d 20 30 29  v, length) == 0)
1690: 20 7b 0a 09 09 20 20 20 20 54 63 6c 5f 52 65 73   {...    Tcl_Res
16a0: 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70 29  etResult(interp)
16b0: 3b 0a 09 09 20 20 20 20 67 6f 74 6f 20 6d 61 74  ;...    goto mat
16c0: 63 68 3b 0a 09 09 7d 0a 09 20 20 20 20 7d 0a 09  ch;...}..    }..
16d0: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
16e0: 52 52 4f 52 3b 0a 6d 61 74 63 68 3a 0a 09 20 20  RROR;.match:..  
16f0: 20 20 63 6f 6e 74 69 6e 75 65 3b 0a 09 7d 0a 0a    continue;..}..
1700: 09 2f 2a 0a 09 20 2a 20 50 72 6f 63 65 73 73 20  ./*.. * Process 
1710: 74 68 65 20 65 6e 74 72 79 2e 0a 09 20 2a 2f 0a  the entry... */.
1720: 0a 09 69 66 20 28 61 72 67 63 20 3c 20 32 29 20  ..if (argc < 2) 
1730: 7b 0a 09 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  {..    Tcl_Appen
1740: 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
1750: 22 76 61 6c 75 65 20 66 6f 72 20 5c 22 22 2c 20  "value for \"", 
1760: 2a 61 72 67 76 2c 0a 09 09 20 20 20 20 22 5c 22  *argv,...    "\"
1770: 20 6d 69 73 73 69 6e 67 22 2c 20 28 63 68 61 72   missing", (char
1780: 20 2a 29 20 4e 55 4c 4c 29 3b 0a 09 20 20 20 20   *) NULL);..    
1790: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
17a0: 3b 0a 09 7d 0a 09 69 66 20 28 44 6f 43 6f 6e 66  ;..}..if (DoConf
17b0: 69 67 28 69 6e 74 65 72 70 2c 20 74 6b 77 69 6e  ig(interp, tkwin
17c0: 2c 20 73 70 65 63 50 74 72 2c 20 61 72 67 76 5b  , specPtr, argv[
17d0: 31 5d 2c 20 30 2c 20 77 69 64 67 52 65 63 29 20  1], 0, widgRec) 
17e0: 21 3d 20 54 43 4c 5f 4f 4b 29 20 7b 0a 09 20 20  != TCL_OK) {..  
17f0: 20 20 63 68 61 72 20 6d 73 67 5b 31 30 30 5d 3b    char msg[100];
1800: 0a 0a 09 20 20 20 20 73 70 72 69 6e 74 66 28 6d  ...    sprintf(m
1810: 73 67 2c 20 22 5c 6e 20 20 20 20 28 70 72 6f 63  sg, "\n    (proc
1820: 65 73 73 69 6e 67 20 5c 22 25 2e 34 30 73 5c 22  essing \"%.40s\"
1830: 20 6f 70 74 69 6f 6e 29 22 2c 0a 09 09 20 20 20   option)",...   
1840: 20 73 70 65 63 50 74 72 2d 3e 61 72 67 76 4e 61   specPtr->argvNa
1850: 6d 65 29 3b 0a 09 20 20 20 20 54 63 6c 5f 41 64  me);..    Tcl_Ad
1860: 64 45 72 72 6f 72 49 6e 66 6f 28 69 6e 74 65 72  dErrorInfo(inter
1870: 70 2c 20 6d 73 67 29 3b 0a 09 20 20 20 20 72 65  p, msg);..    re
1880: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
1890: 09 7d 0a 09 73 70 65 63 50 74 72 2d 3e 73 70 65  .}..specPtr->spe
18a0: 63 46 6c 61 67 73 20 7c 3d 20 54 4b 5f 43 4f 4e  cFlags |= TK_CON
18b0: 46 49 47 5f 4f 50 54 49 4f 4e 5f 53 50 45 43 49  FIG_OPTION_SPECI
18c0: 46 49 45 44 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  FIED;.    }..   
18d0: 20 2f 2a 0a 20 20 20 20 20 2a 20 50 61 73 73 20   /*.     * Pass 
18e0: 74 68 72 65 65 3a 20 20 73 63 61 6e 20 74 68 72  three:  scan thr
18f0: 6f 75 67 68 20 61 6c 6c 20 6f 66 20 74 68 65 20  ough all of the 
1900: 73 70 65 63 73 20 61 67 61 69 6e 3b 20 20 69 66  specs again;  if
1910: 20 6e 6f 0a 20 20 20 20 20 2a 20 63 6f 6d 6d 61   no.     * comma
1920: 6e 64 2d 6c 69 6e 65 20 61 72 67 75 6d 65 6e 74  nd-line argument
1930: 20 6d 61 74 63 68 65 64 20 61 20 73 70 65 63 2c   matched a spec,
1940: 20 74 68 65 6e 20 63 68 65 63 6b 20 66 6f 72 20   then check for 
1950: 69 6e 66 6f 0a 20 20 20 20 20 2a 20 69 6e 20 74  info.     * in t
1960: 68 65 20 6f 70 74 69 6f 6e 20 64 61 74 61 62 61  he option databa
1970: 73 65 2e 20 20 49 66 20 74 68 65 72 65 20 77 61  se.  If there wa
1980: 73 20 6e 6f 74 68 69 6e 67 20 69 6e 20 74 68 65  s nothing in the
1990: 0a 20 20 20 20 20 2a 20 64 61 74 61 62 61 73 65  .     * database
19a0: 2c 20 74 68 65 6e 20 75 73 65 20 74 68 65 20 64  , then use the d
19b0: 65 66 61 75 6c 74 2e 0a 20 20 20 20 20 2a 2f 0a  efault..     */.
19c0: 0a 20 20 20 20 69 66 20 28 21 28 66 6c 61 67 73  .    if (!(flags
19d0: 20 26 20 54 4b 5f 43 4f 4e 46 49 47 5f 41 52 47   & TK_CONFIG_ARG
19e0: 56 5f 4f 4e 4c 59 29 29 20 7b 0a 09 66 6f 72 20  V_ONLY)) {..for 
19f0: 28 73 70 65 63 50 74 72 20 3d 20 73 70 65 63 73  (specPtr = specs
1a00: 3b 20 73 70 65 63 50 74 72 2d 3e 74 79 70 65 20  ; specPtr->type 
1a10: 21 3d 20 54 4b 5f 43 4f 4e 46 49 47 5f 45 4e 44  != TK_CONFIG_END
1a20: 3b 20 73 70 65 63 50 74 72 2b 2b 29 20 7b 0a 09  ; specPtr++) {..
1a30: 20 20 20 20 69 66 20 28 28 73 70 65 63 50 74 72      if ((specPtr
1a40: 2d 3e 73 70 65 63 46 6c 61 67 73 20 26 20 54 4b  ->specFlags & TK
1a50: 5f 43 4f 4e 46 49 47 5f 4f 50 54 49 4f 4e 5f 53  _CONFIG_OPTION_S
1a60: 50 45 43 49 46 49 45 44 29 0a 09 09 20 20 20 20  PECIFIED)...    
1a70: 7c 7c 20 28 73 70 65 63 50 74 72 2d 3e 61 72 67  || (specPtr->arg
1a80: 76 4e 61 6d 65 20 3d 3d 20 4e 55 4c 4c 29 0a 09  vName == NULL)..
1a90: 09 20 20 20 20 7c 7c 20 28 73 70 65 63 50 74 72  .    || (specPtr
1aa0: 2d 3e 74 79 70 65 20 3d 3d 20 54 4b 5f 43 4f 4e  ->type == TK_CON
1ab0: 46 49 47 5f 53 59 4e 4f 4e 59 4d 29 29 20 7b 0a  FIG_SYNONYM)) {.
1ac0: 09 09 63 6f 6e 74 69 6e 75 65 3b 0a 09 20 20 20  ..continue;..   
1ad0: 20 7d 0a 09 20 20 20 20 69 66 20 28 28 28 73 70   }..    if (((sp
1ae0: 65 63 50 74 72 2d 3e 73 70 65 63 46 6c 61 67 73  ecPtr->specFlags
1af0: 20 26 20 6e 65 65 64 46 6c 61 67 73 29 20 21 3d   & needFlags) !=
1b00: 20 6e 65 65 64 46 6c 61 67 73 29 0a 09 09 20 20   needFlags)...  
1b10: 20 20 7c 7c 20 28 73 70 65 63 50 74 72 2d 3e 73    || (specPtr->s
1b20: 70 65 63 46 6c 61 67 73 20 26 20 68 61 74 65 46  pecFlags & hateF
1b30: 6c 61 67 73 29 29 20 7b 0a 09 09 63 6f 6e 74 69  lags)) {...conti
1b40: 6e 75 65 3b 0a 09 20 20 20 20 7d 0a 09 20 20 20  nue;..    }..   
1b50: 20 76 61 6c 75 65 20 3d 20 4e 55 4c 4c 3b 0a 09   value = NULL;..
1b60: 20 20 20 20 69 66 20 28 73 70 65 63 50 74 72 2d      if (specPtr-
1b70: 3e 64 62 4e 61 6d 65 20 21 3d 20 4e 55 4c 4c 29  >dbName != NULL)
1b80: 20 7b 0a 09 09 76 61 6c 75 65 20 3d 20 54 6b 5f   {...value = Tk_
1b90: 47 65 74 4f 70 74 69 6f 6e 28 74 6b 77 69 6e 2c  GetOption(tkwin,
1ba0: 20 73 70 65 63 50 74 72 2d 3e 64 62 4e 61 6d 65   specPtr->dbName
1bb0: 2c 20 73 70 65 63 50 74 72 2d 3e 64 62 43 6c 61  , specPtr->dbCla
1bc0: 73 73 29 3b 0a 09 20 20 20 20 7d 0a 09 20 20 20  ss);..    }..   
1bd0: 20 69 66 20 28 76 61 6c 75 65 20 21 3d 20 4e 55   if (value != NU
1be0: 4c 4c 29 20 7b 0a 09 09 69 66 20 28 44 6f 43 6f  LL) {...if (DoCo
1bf0: 6e 66 69 67 28 69 6e 74 65 72 70 2c 20 74 6b 77  nfig(interp, tkw
1c00: 69 6e 2c 20 73 70 65 63 50 74 72 2c 20 76 61 6c  in, specPtr, val
1c10: 75 65 2c 20 31 2c 20 77 69 64 67 52 65 63 29 20  ue, 1, widgRec) 
1c20: 21 3d 0a 09 09 09 54 43 4c 5f 4f 4b 29 20 7b 0a  !=....TCL_OK) {.
1c30: 09 09 20 20 20 20 63 68 61 72 20 6d 73 67 5b 32  ..    char msg[2
1c40: 30 30 5d 3b 0a 20 20 20 20 0a 09 09 20 20 20 20  00];.    ...    
1c50: 73 70 72 69 6e 74 66 28 6d 73 67 2c 20 22 5c 6e  sprintf(msg, "\n
1c60: 20 20 20 20 28 25 73 20 5c 22 25 2e 35 30 73 5c      (%s \"%.50s\
1c70: 22 20 69 6e 20 77 69 64 67 65 74 20 5c 22 25 2e  " in widget \"%.
1c80: 35 30 73 5c 22 29 22 2c 0a 09 09 09 20 20 20 20  50s\")",....    
1c90: 22 64 61 74 61 62 61 73 65 20 65 6e 74 72 79 20  "database entry 
1ca0: 66 6f 72 22 2c 0a 09 09 09 20 20 20 20 73 70 65  for",....    spe
1cb0: 63 50 74 72 2d 3e 64 62 4e 61 6d 65 2c 20 54 6b  cPtr->dbName, Tk
1cc0: 5f 50 61 74 68 4e 61 6d 65 28 74 6b 77 69 6e 29  _PathName(tkwin)
1cd0: 29 3b 0a 09 09 20 20 20 20 54 63 6c 5f 41 64 64  );...    Tcl_Add
1ce0: 45 72 72 6f 72 49 6e 66 6f 28 69 6e 74 65 72 70  ErrorInfo(interp
1cf0: 2c 20 6d 73 67 29 3b 0a 09 09 20 20 20 20 72 65  , msg);...    re
1d00: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
1d10: 09 09 7d 0a 09 20 20 20 20 7d 20 65 6c 73 65 20  ..}..    } else 
1d20: 7b 0a 09 09 76 61 6c 75 65 20 3d 20 73 70 65 63  {...value = spec
1d30: 50 74 72 2d 3e 64 65 66 56 61 6c 75 65 3b 0a 09  Ptr->defValue;..
1d40: 09 69 66 20 28 28 76 61 6c 75 65 20 21 3d 20 4e  .if ((value != N
1d50: 55 4c 4c 29 20 26 26 20 21 28 73 70 65 63 50 74  ULL) && !(specPt
1d60: 72 2d 3e 73 70 65 63 46 6c 61 67 73 0a 09 09 09  r->specFlags....
1d70: 26 20 54 4b 5f 43 4f 4e 46 49 47 5f 44 4f 4e 54  & TK_CONFIG_DONT
1d80: 5f 53 45 54 5f 44 45 46 41 55 4c 54 29 29 20 7b  _SET_DEFAULT)) {
1d90: 0a 09 09 20 20 20 20 69 66 20 28 44 6f 43 6f 6e  ...    if (DoCon
1da0: 66 69 67 28 69 6e 74 65 72 70 2c 20 74 6b 77 69  fig(interp, tkwi
1db0: 6e 2c 20 73 70 65 63 50 74 72 2c 20 76 61 6c 75  n, specPtr, valu
1dc0: 65 2c 20 31 2c 20 77 69 64 67 52 65 63 29 20 21  e, 1, widgRec) !
1dd0: 3d 0a 09 09 09 20 20 20 20 54 43 4c 5f 4f 4b 29  =....    TCL_OK)
1de0: 20 7b 0a 09 09 09 63 68 61 72 20 6d 73 67 5b 32   {....char msg[2
1df0: 30 30 5d 3b 0a 09 0a 09 09 09 73 70 72 69 6e 74  00];......sprint
1e00: 66 28 6d 73 67 2c 0a 09 09 09 09 22 5c 6e 20 20  f(msg,....."\n  
1e10: 20 20 28 25 73 20 5c 22 25 2e 35 30 73 5c 22 20    (%s \"%.50s\" 
1e20: 69 6e 20 77 69 64 67 65 74 20 5c 22 25 2e 35 30  in widget \"%.50
1e30: 73 5c 22 29 22 2c 0a 09 09 09 09 22 64 65 66 61  s\")",....."defa
1e40: 75 6c 74 20 76 61 6c 75 65 20 66 6f 72 22 2c 0a  ult value for",.
1e50: 09 09 09 09 73 70 65 63 50 74 72 2d 3e 64 62 4e  ....specPtr->dbN
1e60: 61 6d 65 2c 20 54 6b 5f 50 61 74 68 4e 61 6d 65  ame, Tk_PathName
1e70: 28 74 6b 77 69 6e 29 29 3b 0a 09 09 09 54 63 6c  (tkwin));....Tcl
1e80: 5f 41 64 64 45 72 72 6f 72 49 6e 66 6f 28 69 6e  _AddErrorInfo(in
1e90: 74 65 72 70 2c 20 6d 73 67 29 3b 0a 09 09 09 72  terp, msg);....r
1ea0: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
1eb0: 0a 09 09 20 20 20 20 7d 0a 09 09 7d 0a 09 20 20  ...    }...}..  
1ec0: 20 20 7d 0a 09 7d 0a 20 20 20 20 7d 0a 0a 20 20    }..}.    }..  
1ed0: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
1ee0: 0a 7d 0a 0c 0a 2f 2a 0a 20 2a 2d 2d 2d 2d 2d 2d  .}.../*. *------
1ef0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1f00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1f10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1f20: 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 0a 20 2a 20 46  --------. *. * F
1f30: 69 6e 64 43 6f 6e 66 69 67 53 70 65 63 20 2d 2d  indConfigSpec --
1f40: 0a 20 2a 0a 20 2a 09 53 65 61 72 63 68 20 74 68  . *. *.Search th
1f50: 72 6f 75 67 68 20 61 20 74 61 62 6c 65 20 6f 66  rough a table of
1f60: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 73   configuration s
1f70: 70 65 63 73 2c 20 6c 6f 6f 6b 69 6e 67 20 66 6f  pecs, looking fo
1f80: 72 0a 20 2a 09 6f 6e 65 20 74 68 61 74 20 6d 61  r. *.one that ma
1f90: 74 63 68 65 73 20 61 20 67 69 76 65 6e 20 61 72  tches a given ar
1fa0: 67 76 4e 61 6d 65 2e 0a 20 2a 0a 20 2a 20 52 65  gvName.. *. * Re
1fb0: 73 75 6c 74 73 3a 0a 20 2a 09 54 68 65 20 72 65  sults:. *.The re
1fc0: 74 75 72 6e 20 76 61 6c 75 65 20 69 73 20 61 20  turn value is a 
1fd0: 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 6d  pointer to the m
1fe0: 61 74 63 68 69 6e 67 20 65 6e 74 72 79 2c 20 6f  atching entry, o
1ff0: 72 20 4e 55 4c 4c 0a 20 2a 09 69 66 20 6e 6f 74  r NULL. *.if not
2000: 68 69 6e 67 20 6d 61 74 63 68 65 64 2e 20 20 49  hing matched.  I
2010: 6e 20 74 68 61 74 20 63 61 73 65 20 61 6e 20 65  n that case an e
2020: 72 72 6f 72 20 6d 65 73 73 61 67 65 20 69 73 20  rror message is 
2030: 6c 65 66 74 0a 20 2a 09 69 6e 20 69 6e 74 65 72  left. *.in inter
2040: 70 2d 3e 72 65 73 75 6c 74 2e 0a 20 2a 0a 20 2a  p->result.. *. *
2050: 20 53 69 64 65 20 65 66 66 65 63 74 73 3a 0a 20   Side effects:. 
2060: 2a 09 4e 6f 6e 65 2e 0a 20 2a 0a 20 2a 2d 2d 2d  *.None.. *. *---
2070: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2080: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2090: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
20a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 2f 0a  -----------. */.
20b0: 0a 73 74 61 74 69 63 20 54 6b 5f 43 6f 6e 66 69  .static Tk_Confi
20c0: 67 53 70 65 63 20 2a 0a 46 69 6e 64 43 6f 6e 66  gSpec *.FindConf
20d0: 69 67 53 70 65 63 28 69 6e 74 65 72 70 2c 20 73  igSpec(interp, s
20e0: 70 65 63 73 2c 20 61 72 67 76 4e 61 6d 65 2c 20  pecs, argvName, 
20f0: 6e 65 65 64 46 6c 61 67 73 2c 20 68 61 74 65 46  needFlags, hateF
2100: 6c 61 67 73 29 0a 20 20 20 20 54 63 6c 5f 49 6e  lags).    Tcl_In
2110: 74 65 72 70 20 2a 69 6e 74 65 72 70 3b 09 09 2f  terp *interp;../
2120: 2a 20 55 73 65 64 20 66 6f 72 20 72 65 70 6f 72  * Used for repor
2130: 74 69 6e 67 20 65 72 72 6f 72 73 2e 20 2a 2f 0a  ting errors. */.
2140: 20 20 20 20 54 6b 5f 43 6f 6e 66 69 67 53 70 65      Tk_ConfigSpe
2150: 63 20 2a 73 70 65 63 73 3b 09 2f 2a 20 50 6f 69  c *specs;./* Poi
2160: 6e 74 65 72 20 74 6f 20 74 61 62 6c 65 20 6f 66  nter to table of
2170: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 0a 09   configuration..
2180: 09 09 09 20 2a 20 73 70 65 63 69 66 69 63 61 74  ... * specificat
2190: 69 6f 6e 73 20 66 6f 72 20 61 20 77 69 64 67 65  ions for a widge
21a0: 74 2e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a  t. */.    char *
21b0: 61 72 67 76 4e 61 6d 65 3b 09 09 2f 2a 20 4e 61  argvName;../* Na
21c0: 6d 65 20 28 73 75 69 74 61 62 6c 65 20 66 6f 72  me (suitable for
21d0: 20 75 73 65 20 69 6e 20 61 20 22 63 6f 6e 66 69   use in a "confi
21e0: 67 22 0a 09 09 09 09 20 2a 20 63 6f 6d 6d 61 6e  g"..... * comman
21f0: 64 29 20 69 64 65 6e 74 69 66 79 69 6e 67 20 70  d) identifying p
2200: 61 72 74 69 63 75 6c 61 72 20 6f 70 74 69 6f 6e  articular option
2210: 2e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 65 65  . */.    int nee
2220: 64 46 6c 61 67 73 3b 09 09 2f 2a 20 46 6c 61 67  dFlags;../* Flag
2230: 73 20 74 68 61 74 20 6d 75 73 74 20 62 65 20 70  s that must be p
2240: 72 65 73 65 6e 74 20 69 6e 20 6d 61 74 63 68 69  resent in matchi
2250: 6e 67 0a 09 09 09 09 20 2a 20 65 6e 74 72 79 2e  ng..... * entry.
2260: 20 2a 2f 0a 20 20 20 20 69 6e 74 20 68 61 74 65   */.    int hate
2270: 46 6c 61 67 73 3b 09 09 2f 2a 20 46 6c 61 67 73  Flags;../* Flags
2280: 20 74 68 61 74 20 6d 75 73 74 20 4e 4f 54 20 62   that must NOT b
2290: 65 20 70 72 65 73 65 6e 74 20 69 6e 0a 09 09 09  e present in....
22a0: 09 20 2a 20 6d 61 74 63 68 69 6e 67 20 65 6e 74  . * matching ent
22b0: 72 79 2e 20 2a 2f 0a 7b 0a 20 20 20 20 72 65 67  ry. */.{.    reg
22c0: 69 73 74 65 72 20 54 6b 5f 43 6f 6e 66 69 67 53  ister Tk_ConfigS
22d0: 70 65 63 20 2a 73 70 65 63 50 74 72 3b 0a 20 20  pec *specPtr;.  
22e0: 20 20 72 65 67 69 73 74 65 72 20 63 68 61 72 20    register char 
22f0: 63 3b 09 09 2f 2a 20 46 69 72 73 74 20 63 68 61  c;../* First cha
2300: 72 61 63 74 65 72 20 6f 66 20 63 75 72 72 65 6e  racter of curren
2310: 74 20 61 72 67 75 6d 65 6e 74 2e 20 2a 2f 0a 20  t argument. */. 
2320: 20 20 20 54 6b 5f 43 6f 6e 66 69 67 53 70 65 63     Tk_ConfigSpec
2330: 20 2a 6d 61 74 63 68 50 74 72 3b 09 2f 2a 20 4d   *matchPtr;./* M
2340: 61 74 63 68 69 6e 67 20 73 70 65 63 2c 20 6f 72  atching spec, or
2350: 20 4e 55 4c 4c 2e 20 2a 2f 0a 20 20 20 20 73 69   NULL. */.    si
2360: 7a 65 5f 74 20 6c 65 6e 67 74 68 3b 0a 0a 20 20  ze_t length;..  
2370: 20 20 63 20 3d 20 61 72 67 76 4e 61 6d 65 5b 31    c = argvName[1
2380: 5d 3b 0a 20 20 20 20 6c 65 6e 67 74 68 20 3d 20  ];.    length = 
2390: 73 74 72 6c 65 6e 28 61 72 67 76 4e 61 6d 65 29  strlen(argvName)
23a0: 3b 0a 20 20 20 20 6d 61 74 63 68 50 74 72 20 3d  ;.    matchPtr =
23b0: 20 4e 55 4c 4c 3b 0a 20 20 20 20 66 6f 72 20 28   NULL;.    for (
23c0: 73 70 65 63 50 74 72 20 3d 20 73 70 65 63 73 3b  specPtr = specs;
23d0: 20 73 70 65 63 50 74 72 2d 3e 74 79 70 65 20 21   specPtr->type !
23e0: 3d 20 54 4b 5f 43 4f 4e 46 49 47 5f 45 4e 44 3b  = TK_CONFIG_END;
23f0: 20 73 70 65 63 50 74 72 2b 2b 29 20 7b 0a 09 69   specPtr++) {..i
2400: 66 20 28 73 70 65 63 50 74 72 2d 3e 61 72 67 76  f (specPtr->argv
2410: 4e 61 6d 65 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a  Name == NULL) {.
2420: 09 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0a 09  .    continue;..
2430: 7d 0a 09 69 66 20 28 28 73 70 65 63 50 74 72 2d  }..if ((specPtr-
2440: 3e 61 72 67 76 4e 61 6d 65 5b 31 5d 20 21 3d 20  >argvName[1] != 
2450: 63 29 0a 09 09 7c 7c 20 28 73 74 72 6e 63 6d 70  c)...|| (strncmp
2460: 28 73 70 65 63 50 74 72 2d 3e 61 72 67 76 4e 61  (specPtr->argvNa
2470: 6d 65 2c 20 61 72 67 76 4e 61 6d 65 2c 20 6c 65  me, argvName, le
2480: 6e 67 74 68 29 20 21 3d 20 30 29 29 20 7b 0a 09  ngth) != 0)) {..
2490: 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0a 09 7d      continue;..}
24a0: 0a 09 69 66 20 28 28 28 73 70 65 63 50 74 72 2d  ..if (((specPtr-
24b0: 3e 73 70 65 63 46 6c 61 67 73 20 26 20 6e 65 65  >specFlags & nee
24c0: 64 46 6c 61 67 73 29 20 21 3d 20 6e 65 65 64 46  dFlags) != needF
24d0: 6c 61 67 73 29 0a 09 09 7c 7c 20 28 73 70 65 63  lags)...|| (spec
24e0: 50 74 72 2d 3e 73 70 65 63 46 6c 61 67 73 20 26  Ptr->specFlags &
24f0: 20 68 61 74 65 46 6c 61 67 73 29 29 20 7b 0a 09   hateFlags)) {..
2500: 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0a 09 7d      continue;..}
2510: 0a 09 69 66 20 28 73 70 65 63 50 74 72 2d 3e 61  ..if (specPtr->a
2520: 72 67 76 4e 61 6d 65 5b 6c 65 6e 67 74 68 5d 20  rgvName[length] 
2530: 3d 3d 20 30 29 20 7b 0a 09 20 20 20 20 6d 61 74  == 0) {..    mat
2540: 63 68 50 74 72 20 3d 20 73 70 65 63 50 74 72 3b  chPtr = specPtr;
2550: 0a 09 20 20 20 20 67 6f 74 6f 20 67 6f 74 4d 61  ..    goto gotMa
2560: 74 63 68 3b 0a 09 7d 0a 09 69 66 20 28 6d 61 74  tch;..}..if (mat
2570: 63 68 50 74 72 20 21 3d 20 4e 55 4c 4c 29 20 7b  chPtr != NULL) {
2580: 0a 09 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  ..    Tcl_Append
2590: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
25a0: 61 6d 62 69 67 75 6f 75 73 20 6f 70 74 69 6f 6e  ambiguous option
25b0: 20 5c 22 22 2c 20 61 72 67 76 4e 61 6d 65 2c 0a   \"", argvName,.
25c0: 09 09 20 20 20 20 22 5c 22 22 2c 20 28 63 68 61  ..    "\"", (cha
25d0: 72 20 2a 29 20 4e 55 4c 4c 29 3b 0a 09 20 20 20  r *) NULL);..   
25e0: 20 72 65 74 75 72 6e 20 28 54 6b 5f 43 6f 6e 66   return (Tk_Conf
25f0: 69 67 53 70 65 63 20 2a 29 20 4e 55 4c 4c 3b 0a  igSpec *) NULL;.
2600: 09 7d 0a 09 6d 61 74 63 68 50 74 72 20 3d 20 73  .}..matchPtr = s
2610: 70 65 63 50 74 72 3b 0a 20 20 20 20 7d 0a 0a 20  pecPtr;.    }.. 
2620: 20 20 20 69 66 20 28 6d 61 74 63 68 50 74 72 20     if (matchPtr 
2630: 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 54 63 6c 5f  == NULL) {..Tcl_
2640: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
2650: 65 72 70 2c 20 22 75 6e 6b 6e 6f 77 6e 20 6f 70  erp, "unknown op
2660: 74 69 6f 6e 20 5c 22 22 2c 20 61 72 67 76 4e 61  tion \"", argvNa
2670: 6d 65 2c 0a 09 09 22 5c 22 22 2c 20 28 63 68 61  me,..."\"", (cha
2680: 72 20 2a 29 20 4e 55 4c 4c 29 3b 0a 09 72 65 74  r *) NULL);..ret
2690: 75 72 6e 20 28 54 6b 5f 43 6f 6e 66 69 67 53 70  urn (Tk_ConfigSp
26a0: 65 63 20 2a 29 20 4e 55 4c 4c 3b 0a 20 20 20 20  ec *) NULL;.    
26b0: 7d 0a 0a 20 20 20 20 2f 2a 0a 20 20 20 20 20 2a  }..    /*.     *
26c0: 20 46 6f 75 6e 64 20 61 20 6d 61 74 63 68 69 6e   Found a matchin
26d0: 67 20 65 6e 74 72 79 2e 20 20 49 66 20 69 74 27  g entry.  If it'
26e0: 73 20 61 20 73 79 6e 6f 6e 79 6d 2c 20 74 68 65  s a synonym, the
26f0: 6e 20 66 69 6e 64 20 74 68 65 0a 20 20 20 20 20  n find the.     
2700: 2a 20 65 6e 74 72 79 20 74 68 61 74 20 69 74 27  * entry that it'
2710: 73 20 61 20 73 79 6e 6f 6e 79 6d 20 66 6f 72 2e  s a synonym for.
2720: 0a 20 20 20 20 20 2a 2f 0a 0a 20 20 20 20 67 6f  .     */..    go
2730: 74 4d 61 74 63 68 3a 0a 20 20 20 20 73 70 65 63  tMatch:.    spec
2740: 50 74 72 20 3d 20 6d 61 74 63 68 50 74 72 3b 0a  Ptr = matchPtr;.
2750: 20 20 20 20 69 66 20 28 73 70 65 63 50 74 72 2d      if (specPtr-
2760: 3e 74 79 70 65 20 3d 3d 20 54 4b 5f 43 4f 4e 46  >type == TK_CONF
2770: 49 47 5f 53 59 4e 4f 4e 59 4d 29 20 7b 0a 09 66  IG_SYNONYM) {..f
2780: 6f 72 20 28 73 70 65 63 50 74 72 20 3d 20 73 70  or (specPtr = sp
2790: 65 63 73 3b 20 3b 20 73 70 65 63 50 74 72 2b 2b  ecs; ; specPtr++
27a0: 29 20 7b 0a 09 20 20 20 20 69 66 20 28 73 70 65  ) {..    if (spe
27b0: 63 50 74 72 2d 3e 74 79 70 65 20 3d 3d 20 54 4b  cPtr->type == TK
27c0: 5f 43 4f 4e 46 49 47 5f 45 4e 44 29 20 7b 0a 09  _CONFIG_END) {..
27d0: 09 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c  .Tcl_AppendResul
27e0: 74 28 69 6e 74 65 72 70 2c 0a 09 09 09 22 63 6f  t(interp,...."co
27f0: 75 6c 64 6e 27 74 20 66 69 6e 64 20 73 79 6e 6f  uldn't find syno
2800: 6e 79 6d 20 66 6f 72 20 6f 70 74 69 6f 6e 20 5c  nym for option \
2810: 22 22 2c 0a 09 09 09 61 72 67 76 4e 61 6d 65 2c  "",....argvName,
2820: 20 22 5c 22 22 2c 20 28 63 68 61 72 20 2a 29 20   "\"", (char *) 
2830: 4e 55 4c 4c 29 3b 0a 09 09 72 65 74 75 72 6e 20  NULL);...return 
2840: 28 54 6b 5f 43 6f 6e 66 69 67 53 70 65 63 20 2a  (Tk_ConfigSpec *
2850: 29 20 4e 55 4c 4c 3b 0a 09 20 20 20 20 7d 0a 09  ) NULL;..    }..
2860: 20 20 20 20 69 66 20 28 28 73 70 65 63 50 74 72      if ((specPtr
2870: 2d 3e 64 62 4e 61 6d 65 20 3d 3d 20 6d 61 74 63  ->dbName == matc
2880: 68 50 74 72 2d 3e 64 62 4e 61 6d 65 29 20 0a 09  hPtr->dbName) ..
2890: 09 20 20 20 20 26 26 20 28 73 70 65 63 50 74 72  .    && (specPtr
28a0: 2d 3e 74 79 70 65 20 21 3d 20 54 4b 5f 43 4f 4e  ->type != TK_CON
28b0: 46 49 47 5f 53 59 4e 4f 4e 59 4d 29 0a 09 09 20  FIG_SYNONYM)... 
28c0: 20 20 20 26 26 20 28 28 73 70 65 63 50 74 72 2d     && ((specPtr-
28d0: 3e 73 70 65 63 46 6c 61 67 73 20 26 20 6e 65 65  >specFlags & nee
28e0: 64 46 6c 61 67 73 29 20 3d 3d 20 6e 65 65 64 46  dFlags) == needF
28f0: 6c 61 67 73 29 0a 09 09 20 20 20 20 26 26 20 21  lags)...    && !
2900: 28 73 70 65 63 50 74 72 2d 3e 73 70 65 63 46 6c  (specPtr->specFl
2910: 61 67 73 20 26 20 68 61 74 65 46 6c 61 67 73 29  ags & hateFlags)
2920: 29 20 7b 0a 09 09 62 72 65 61 6b 3b 0a 09 20 20  ) {...break;..  
2930: 20 20 7d 0a 09 7d 0a 20 20 20 20 7d 0a 20 20 20    }..}.    }.   
2940: 20 72 65 74 75 72 6e 20 73 70 65 63 50 74 72 3b   return specPtr;
2950: 0a 7d 0a 0c 0a 2f 2a 0a 20 2a 2d 2d 2d 2d 2d 2d  .}.../*. *------
2960: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2970: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2980: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2990: 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 0a 20 2a 20 44  --------. *. * D
29a0: 6f 43 6f 6e 66 69 67 20 2d 2d 0a 20 2a 0a 20 2a  oConfig --. *. *
29b0: 09 54 68 69 73 20 70 72 6f 63 65 64 75 72 65 20  .This procedure 
29c0: 61 70 70 6c 69 65 73 20 61 20 73 69 6e 67 6c 65  applies a single
29d0: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 6f   configuration o
29e0: 70 74 69 6f 6e 0a 20 2a 09 74 6f 20 61 20 77 69  ption. *.to a wi
29f0: 64 67 65 74 20 72 65 63 6f 72 64 2e 0a 20 2a 0a  dget record.. *.
2a00: 20 2a 20 52 65 73 75 6c 74 73 3a 0a 20 2a 09 41   * Results:. *.A
2a10: 20 73 74 61 6e 64 61 72 64 20 54 63 6c 20 72 65   standard Tcl re
2a20: 74 75 72 6e 20 76 61 6c 75 65 2e 0a 20 2a 0a 20  turn value.. *. 
2a30: 2a 20 53 69 64 65 20 65 66 66 65 63 74 73 3a 0a  * Side effects:.
2a40: 20 2a 09 57 69 64 67 52 65 63 20 69 73 20 6d 6f   *.WidgRec is mo
2a50: 64 69 66 69 65 64 20 61 73 20 69 6e 64 69 63 61  dified as indica
2a60: 74 65 64 20 62 79 20 73 70 65 63 50 74 72 20 61  ted by specPtr a
2a70: 6e 64 20 76 61 6c 75 65 2e 0a 20 2a 09 54 68 65  nd value.. *.The
2a80: 20 6f 6c 64 20 76 61 6c 75 65 20 69 73 20 72 65   old value is re
2a90: 63 79 63 6c 65 64 2c 20 69 66 20 74 68 61 74 20  cycled, if that 
2aa0: 69 73 20 61 70 70 72 6f 70 72 69 61 74 65 20 66  is appropriate f
2ab0: 6f 72 0a 20 2a 09 74 68 65 20 76 61 6c 75 65 20  or. *.the value 
2ac0: 74 79 70 65 2e 0a 20 2a 0a 20 2a 2d 2d 2d 2d 2d  type.. *. *-----
2ad0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2ae0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2af0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2b00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 2f 0a 0a 73  ---------. */..s
2b10: 74 61 74 69 63 20 69 6e 74 0a 44 6f 43 6f 6e 66  tatic int.DoConf
2b20: 69 67 28 69 6e 74 65 72 70 2c 20 74 6b 77 69 6e  ig(interp, tkwin
2b30: 2c 20 73 70 65 63 50 74 72 2c 20 76 61 6c 75 65  , specPtr, value
2b40: 2c 20 76 61 6c 75 65 49 73 55 69 64 2c 20 77 69  , valueIsUid, wi
2b50: 64 67 52 65 63 29 0a 20 20 20 20 54 63 6c 5f 49  dgRec).    Tcl_I
2b60: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 3b 09 09  nterp *interp;..
2b70: 2f 2a 20 49 6e 74 65 72 70 72 65 74 65 72 20 66  /* Interpreter f
2b80: 6f 72 20 65 72 72 6f 72 20 72 65 70 6f 72 74 69  or error reporti
2b90: 6e 67 2e 20 2a 2f 0a 20 20 20 20 54 6b 5f 57 69  ng. */.    Tk_Wi
2ba0: 6e 64 6f 77 20 74 6b 77 69 6e 3b 09 09 2f 2a 20  ndow tkwin;../* 
2bb0: 57 69 6e 64 6f 77 20 63 6f 6e 74 61 69 6e 69 6e  Window containin
2bc0: 67 20 77 69 64 67 65 74 20 28 6e 65 65 64 65 64  g widget (needed
2bd0: 20 74 6f 0a 09 09 09 09 20 2a 20 73 65 74 20 75   to..... * set u
2be0: 70 20 58 20 72 65 73 6f 75 72 63 65 73 29 2e 20  p X resources). 
2bf0: 2a 2f 0a 20 20 20 20 54 6b 5f 43 6f 6e 66 69 67  */.    Tk_Config
2c00: 53 70 65 63 20 2a 73 70 65 63 50 74 72 3b 09 2f  Spec *specPtr;./
2c10: 2a 20 53 70 65 63 69 66 69 65 72 20 74 6f 20 61  * Specifier to a
2c20: 70 70 6c 79 2e 20 2a 2f 0a 20 20 20 20 63 68 61  pply. */.    cha
2c30: 72 20 2a 76 61 6c 75 65 3b 09 09 2f 2a 20 56 61  r *value;../* Va
2c40: 6c 75 65 20 74 6f 20 75 73 65 20 74 6f 20 66 69  lue to use to fi
2c50: 6c 6c 20 69 6e 20 77 69 64 67 52 65 63 2e 20 2a  ll in widgRec. *
2c60: 2f 0a 20 20 20 20 69 6e 74 20 76 61 6c 75 65 49  /.    int valueI
2c70: 73 55 69 64 3b 09 09 2f 2a 20 4e 6f 6e 2d 7a 65  sUid;../* Non-ze
2c80: 72 6f 20 6d 65 61 6e 73 20 76 61 6c 75 65 20 69  ro means value i
2c90: 73 20 61 20 54 6b 5f 55 69 64 3b 0a 09 09 09 09  s a Tk_Uid;.....
2ca0: 20 2a 20 7a 65 72 6f 20 6d 65 61 6e 73 20 69 74   * zero means it
2cb0: 27 73 20 61 6e 20 6f 72 64 69 6e 61 72 79 20 73  's an ordinary s
2cc0: 74 72 69 6e 67 2e 20 2a 2f 0a 20 20 20 20 63 68  tring. */.    ch
2cd0: 61 72 20 2a 77 69 64 67 52 65 63 3b 09 09 2f 2a  ar *widgRec;../*
2ce0: 20 52 65 63 6f 72 64 20 77 68 6f 73 65 20 66 69   Record whose fi
2cf0: 65 6c 64 73 20 61 72 65 20 74 6f 20 62 65 0a 09  elds are to be..
2d00: 09 09 09 20 2a 20 6d 6f 64 69 66 69 65 64 2e 20  ... * modified. 
2d10: 20 56 61 6c 75 65 73 20 6d 75 73 74 20 62 65 20   Values must be 
2d20: 70 72 6f 70 65 72 6c 79 0a 09 09 09 09 20 2a 20  properly..... * 
2d30: 69 6e 69 74 69 61 6c 69 7a 65 64 2e 20 2a 2f 0a  initialized. */.
2d40: 7b 0a 20 20 20 20 63 68 61 72 20 2a 70 74 72 3b  {.    char *ptr;
2d50: 0a 20 20 20 20 54 6b 5f 55 69 64 20 75 69 64 3b  .    Tk_Uid uid;
2d60: 0a 20 20 20 20 69 6e 74 20 6e 75 6c 6c 56 61 6c  .    int nullVal
2d70: 75 65 3b 0a 0a 20 20 20 20 6e 75 6c 6c 56 61 6c  ue;..    nullVal
2d80: 75 65 20 3d 20 30 3b 0a 20 20 20 20 69 66 20 28  ue = 0;.    if (
2d90: 28 2a 76 61 6c 75 65 20 3d 3d 20 30 29 20 26 26  (*value == 0) &&
2da0: 20 28 73 70 65 63 50 74 72 2d 3e 73 70 65 63 46   (specPtr->specF
2db0: 6c 61 67 73 20 26 20 54 4b 5f 43 4f 4e 46 49 47  lags & TK_CONFIG
2dc0: 5f 4e 55 4c 4c 5f 4f 4b 29 29 20 7b 0a 09 6e 75  _NULL_OK)) {..nu
2dd0: 6c 6c 56 61 6c 75 65 20 3d 20 31 3b 0a 20 20 20  llValue = 1;.   
2de0: 20 7d 0a 0a 20 20 20 20 64 6f 20 7b 0a 09 70 74   }..    do {..pt
2df0: 72 20 3d 20 77 69 64 67 52 65 63 20 2b 20 73 70  r = widgRec + sp
2e00: 65 63 50 74 72 2d 3e 6f 66 66 73 65 74 3b 0a 09  ecPtr->offset;..
2e10: 73 77 69 74 63 68 20 28 73 70 65 63 50 74 72 2d  switch (specPtr-
2e20: 3e 74 79 70 65 29 20 7b 0a 09 20 20 20 20 63 61  >type) {..    ca
2e30: 73 65 20 54 4b 5f 43 4f 4e 46 49 47 5f 42 4f 4f  se TK_CONFIG_BOO
2e40: 4c 45 41 4e 3a 0a 09 09 69 66 20 28 54 63 6c 5f  LEAN:...if (Tcl_
2e50: 47 65 74 42 6f 6f 6c 65 61 6e 28 69 6e 74 65 72  GetBoolean(inter
2e60: 70 2c 20 76 61 6c 75 65 2c 20 28 69 6e 74 20 2a  p, value, (int *
2e70: 29 20 70 74 72 29 20 21 3d 20 54 43 4c 5f 4f 4b  ) ptr) != TCL_OK
2e80: 29 20 7b 0a 09 09 20 20 20 20 72 65 74 75 72 6e  ) {...    return
2e90: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 09 09 7d 0a   TCL_ERROR;...}.
2ea0: 09 09 62 72 65 61 6b 3b 0a 09 20 20 20 20 63 61  ..break;..    ca
2eb0: 73 65 20 54 4b 5f 43 4f 4e 46 49 47 5f 49 4e 54  se TK_CONFIG_INT
2ec0: 3a 0a 09 09 69 66 20 28 54 63 6c 5f 47 65 74 49  :...if (Tcl_GetI
2ed0: 6e 74 28 69 6e 74 65 72 70 2c 20 76 61 6c 75 65  nt(interp, value
2ee0: 2c 20 28 69 6e 74 20 2a 29 20 70 74 72 29 20 21  , (int *) ptr) !
2ef0: 3d 20 54 43 4c 5f 4f 4b 29 20 7b 0a 09 09 20 20  = TCL_OK) {...  
2f00: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
2f10: 4f 52 3b 0a 09 09 7d 0a 09 09 62 72 65 61 6b 3b  OR;...}...break;
2f20: 0a 09 20 20 20 20 63 61 73 65 20 54 4b 5f 43 4f  ..    case TK_CO
2f30: 4e 46 49 47 5f 44 4f 55 42 4c 45 3a 0a 09 09 69  NFIG_DOUBLE:...i
2f40: 66 20 28 54 63 6c 5f 47 65 74 44 6f 75 62 6c 65  f (Tcl_GetDouble
2f50: 28 69 6e 74 65 72 70 2c 20 76 61 6c 75 65 2c 20  (interp, value, 
2f60: 28 64 6f 75 62 6c 65 20 2a 29 20 70 74 72 29 20  (double *) ptr) 
2f70: 21 3d 20 54 43 4c 5f 4f 4b 29 20 7b 0a 09 09 20  != TCL_OK) {... 
2f80: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
2f90: 52 4f 52 3b 0a 09 09 7d 0a 09 09 62 72 65 61 6b  ROR;...}...break
2fa0: 3b 0a 09 20 20 20 20 63 61 73 65 20 54 4b 5f 43  ;..    case TK_C
2fb0: 4f 4e 46 49 47 5f 53 54 52 49 4e 47 3a 20 7b 0a  ONFIG_STRING: {.
2fc0: 09 09 63 68 61 72 20 2a 6f 6c 64 2c 20 2a 6e 65  ..char *old, *ne
2fd0: 77 3b 0a 0a 09 09 69 66 20 28 6e 75 6c 6c 56 61  w;....if (nullVa
2fe0: 6c 75 65 29 20 7b 0a 09 09 20 20 20 20 6e 65 77  lue) {...    new
2ff0: 20 3d 20 4e 55 4c 4c 3b 0a 09 09 7d 20 65 6c 73   = NULL;...} els
3000: 65 20 7b 0a 09 09 20 20 20 20 6e 65 77 20 3d 20  e {...    new = 
3010: 28 63 68 61 72 20 2a 29 20 63 6b 61 6c 6c 6f 63  (char *) ckalloc
3020: 28 28 75 6e 73 69 67 6e 65 64 29 20 28 73 74 72  ((unsigned) (str
3030: 6c 65 6e 28 76 61 6c 75 65 29 20 2b 20 31 29 29  len(value) + 1))
3040: 3b 0a 09 09 20 20 20 20 73 74 72 63 70 79 28 6e  ;...    strcpy(n
3050: 65 77 2c 20 76 61 6c 75 65 29 3b 0a 09 09 7d 0a  ew, value);...}.
3060: 09 09 6f 6c 64 20 3d 20 2a 28 28 63 68 61 72 20  ..old = *((char 
3070: 2a 2a 29 20 70 74 72 29 3b 0a 09 09 69 66 20 28  **) ptr);...if (
3080: 6f 6c 64 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 09  old != NULL) {..
3090: 09 20 20 20 20 63 6b 66 72 65 65 28 6f 6c 64 29  .    ckfree(old)
30a0: 3b 0a 09 09 7d 0a 09 09 2a 28 28 63 68 61 72 20  ;...}...*((char 
30b0: 2a 2a 29 20 70 74 72 29 20 3d 20 6e 65 77 3b 0a  **) ptr) = new;.
30c0: 09 09 62 72 65 61 6b 3b 0a 09 20 20 20 20 7d 0a  ..break;..    }.
30d0: 09 20 20 20 20 63 61 73 65 20 54 4b 5f 43 4f 4e  .    case TK_CON
30e0: 46 49 47 5f 55 49 44 3a 0a 09 09 69 66 20 28 6e  FIG_UID:...if (n
30f0: 75 6c 6c 56 61 6c 75 65 29 20 7b 0a 09 09 20 20  ullValue) {...  
3100: 20 20 2a 28 28 54 6b 5f 55 69 64 20 2a 29 20 70    *((Tk_Uid *) p
3110: 74 72 29 20 3d 20 4e 55 4c 4c 3b 0a 09 09 7d 20  tr) = NULL;...} 
3120: 65 6c 73 65 20 7b 0a 09 09 20 20 20 20 75 69 64  else {...    uid
3130: 20 3d 20 76 61 6c 75 65 49 73 55 69 64 20 3f 20   = valueIsUid ? 
3140: 28 54 6b 5f 55 69 64 29 20 76 61 6c 75 65 20 3a  (Tk_Uid) value :
3150: 20 54 6b 5f 47 65 74 55 69 64 28 76 61 6c 75 65   Tk_GetUid(value
3160: 29 3b 0a 09 09 20 20 20 20 2a 28 28 54 6b 5f 55  );...    *((Tk_U
3170: 69 64 20 2a 29 20 70 74 72 29 20 3d 20 75 69 64  id *) ptr) = uid
3180: 3b 0a 09 09 7d 0a 09 09 62 72 65 61 6b 3b 0a 09  ;...}...break;..
3190: 20 20 20 20 63 61 73 65 20 54 4b 5f 43 4f 4e 46      case TK_CONF
31a0: 49 47 5f 4a 55 53 54 49 46 59 3a 0a 09 09 75 69  IG_JUSTIFY:...ui
31b0: 64 20 3d 20 76 61 6c 75 65 49 73 55 69 64 20 3f  d = valueIsUid ?
31c0: 20 28 54 6b 5f 55 69 64 29 20 76 61 6c 75 65 20   (Tk_Uid) value 
31d0: 3a 20 54 6b 5f 47 65 74 55 69 64 28 76 61 6c 75  : Tk_GetUid(valu
31e0: 65 29 3b 0a 09 09 69 66 20 28 54 6b 5f 47 65 74  e);...if (Tk_Get
31f0: 4a 75 73 74 69 66 79 28 69 6e 74 65 72 70 2c 20  Justify(interp, 
3200: 75 69 64 2c 20 28 54 6b 5f 4a 75 73 74 69 66 79  uid, (Tk_Justify
3210: 20 2a 29 20 70 74 72 29 20 21 3d 20 54 43 4c 5f   *) ptr) != TCL_
3220: 4f 4b 29 20 7b 0a 09 09 20 20 20 20 72 65 74 75  OK) {...    retu
3230: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 09 09  rn TCL_ERROR;...
3240: 7d 0a 09 09 62 72 65 61 6b 3b 0a 09 20 20 20 20  }...break;..    
3250: 63 61 73 65 20 54 4b 5f 43 4f 4e 46 49 47 5f 41  case TK_CONFIG_A
3260: 4e 43 48 4f 52 3a 0a 09 09 75 69 64 20 3d 20 76  NCHOR:...uid = v
3270: 61 6c 75 65 49 73 55 69 64 20 3f 20 28 54 6b 5f  alueIsUid ? (Tk_
3280: 55 69 64 29 20 76 61 6c 75 65 20 3a 20 54 6b 5f  Uid) value : Tk_
3290: 47 65 74 55 69 64 28 76 61 6c 75 65 29 3b 0a 09  GetUid(value);..
32a0: 09 69 66 20 28 54 6b 5f 47 65 74 41 6e 63 68 6f  .if (Tk_GetAncho
32b0: 72 28 69 6e 74 65 72 70 2c 20 75 69 64 2c 20 28  r(interp, uid, (
32c0: 54 6b 5f 41 6e 63 68 6f 72 20 2a 29 20 70 74 72  Tk_Anchor *) ptr
32d0: 29 20 21 3d 20 54 43 4c 5f 4f 4b 29 20 7b 0a 09  ) != TCL_OK) {..
32e0: 09 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
32f0: 45 52 52 4f 52 3b 0a 09 09 7d 0a 09 09 62 72 65  ERROR;...}...bre
3300: 61 6b 3b 0a 09 20 20 20 20 63 61 73 65 20 54 4b  ak;..    case TK
3310: 5f 43 4f 4e 46 49 47 5f 50 49 58 45 4c 53 3a 0a  _CONFIG_PIXELS:.
3320: 09 09 69 66 20 28 54 6b 5f 47 65 74 50 69 78 65  ..if (Tk_GetPixe
3330: 6c 73 28 69 6e 74 65 72 70 2c 20 74 6b 77 69 6e  ls(interp, tkwin
3340: 2c 20 76 61 6c 75 65 2c 20 28 69 6e 74 20 2a 29  , value, (int *)
3350: 20 70 74 72 29 0a 09 09 09 21 3d 20 54 43 4c 5f   ptr)....!= TCL_
3360: 4f 4b 29 20 7b 0a 09 09 20 20 20 20 72 65 74 75  OK) {...    retu
3370: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 09 09  rn TCL_ERROR;...
3380: 7d 0a 09 09 62 72 65 61 6b 3b 0a 09 20 20 20 20  }...break;..    
3390: 63 61 73 65 20 54 4b 5f 43 4f 4e 46 49 47 5f 4d  case TK_CONFIG_M
33a0: 4d 3a 0a 09 09 69 66 20 28 54 6b 5f 47 65 74 53  M:...if (Tk_GetS
33b0: 63 72 65 65 6e 4d 4d 28 69 6e 74 65 72 70 2c 20  creenMM(interp, 
33c0: 74 6b 77 69 6e 2c 20 76 61 6c 75 65 2c 20 28 64  tkwin, value, (d
33d0: 6f 75 62 6c 65 20 2a 29 20 70 74 72 29 0a 09 09  ouble *) ptr)...
33e0: 09 21 3d 20 54 43 4c 5f 4f 4b 29 20 7b 0a 09 09  .!= TCL_OK) {...
33f0: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
3400: 52 52 4f 52 3b 0a 09 09 7d 0a 09 09 62 72 65 61  RROR;...}...brea
3410: 6b 3b 0a 09 20 20 20 20 63 61 73 65 20 54 4b 5f  k;..    case TK_
3420: 43 4f 4e 46 49 47 5f 57 49 4e 44 4f 57 3a 20 7b  CONFIG_WINDOW: {
3430: 0a 09 09 54 6b 5f 57 69 6e 64 6f 77 20 74 6b 77  ...Tk_Window tkw
3440: 69 6e 32 3b 0a 0a 09 09 69 66 20 28 6e 75 6c 6c  in2;....if (null
3450: 56 61 6c 75 65 29 20 7b 0a 09 09 20 20 20 20 74  Value) {...    t
3460: 6b 77 69 6e 32 20 3d 20 4e 55 4c 4c 3b 0a 09 09  kwin2 = NULL;...
3470: 7d 20 65 6c 73 65 20 7b 0a 09 09 20 20 20 20 74  } else {...    t
3480: 6b 77 69 6e 32 20 3d 20 54 6b 5f 4e 61 6d 65 54  kwin2 = Tk_NameT
3490: 6f 57 69 6e 64 6f 77 28 69 6e 74 65 72 70 2c 20  oWindow(interp, 
34a0: 76 61 6c 75 65 2c 20 74 6b 77 69 6e 29 3b 0a 09  value, tkwin);..
34b0: 09 20 20 20 20 69 66 20 28 74 6b 77 69 6e 32 20  .    if (tkwin2 
34c0: 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 09 72 65  == NULL) {....re
34d0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
34e0: 09 09 20 20 20 20 7d 0a 09 09 7d 0a 09 09 2a 28  ..    }...}...*(
34f0: 28 54 6b 5f 57 69 6e 64 6f 77 20 2a 29 20 70 74  (Tk_Window *) pt
3500: 72 29 20 3d 20 74 6b 77 69 6e 32 3b 0a 09 09 62  r) = tkwin2;...b
3510: 72 65 61 6b 3b 0a 09 20 20 20 20 7d 0a 09 20 20  reak;..    }..  
3520: 20 20 63 61 73 65 20 54 4b 5f 43 4f 4e 46 49 47    case TK_CONFIG
3530: 5f 43 55 53 54 4f 4d 3a 0a 09 09 69 66 20 28 28  _CUSTOM:...if ((
3540: 2a 73 70 65 63 50 74 72 2d 3e 63 75 73 74 6f 6d  *specPtr->custom
3550: 50 74 72 2d 3e 70 61 72 73 65 50 72 6f 63 29 28  Ptr->parseProc)(
3560: 0a 09 09 09 73 70 65 63 50 74 72 2d 3e 63 75 73  ....specPtr->cus
3570: 74 6f 6d 50 74 72 2d 3e 63 6c 69 65 6e 74 44 61  tomPtr->clientDa
3580: 74 61 2c 20 69 6e 74 65 72 70 2c 20 74 6b 77 69  ta, interp, tkwi
3590: 6e 2c 0a 09 09 09 76 61 6c 75 65 2c 20 77 69 64  n,....value, wid
35a0: 67 52 65 63 2c 20 73 70 65 63 50 74 72 2d 3e 6f  gRec, specPtr->o
35b0: 66 66 73 65 74 29 20 21 3d 20 54 43 4c 5f 4f 4b  ffset) != TCL_OK
35c0: 29 20 7b 0a 09 09 20 20 20 20 72 65 74 75 72 6e  ) {...    return
35d0: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 09 09 7d 0a   TCL_ERROR;...}.
35e0: 09 09 62 72 65 61 6b 3b 0a 09 20 20 20 20 64 65  ..break;..    de
35f0: 66 61 75 6c 74 3a 20 7b 0a 09 09 63 68 61 72 20  fault: {...char 
3600: 62 75 66 66 65 72 5b 31 30 30 5d 3b 0a 09 09 73  buffer[100];...s
3610: 70 72 69 6e 74 66 28 62 75 66 66 65 72 2c 20 22  printf(buffer, "
3620: 62 61 64 20 63 6f 6e 66 69 67 20 74 61 62 6c 65  bad config table
3630: 3a 20 75 6e 6b 6e 6f 77 6e 20 74 79 70 65 20 25  : unknown type %
3640: 64 22 2c 0a 09 09 09 73 70 65 63 50 74 72 2d 3e  d",....specPtr->
3650: 74 79 70 65 29 3b 0a 09 09 54 63 6c 5f 53 65 74  type);...Tcl_Set
3660: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 62  Result(interp, b
3670: 75 66 66 65 72 2c 20 54 43 4c 5f 56 4f 4c 41 54  uffer, TCL_VOLAT
3680: 49 4c 45 29 3b 0a 09 09 72 65 74 75 72 6e 20 54  ILE);...return T
3690: 43 4c 5f 45 52 52 4f 52 3b 0a 09 20 20 20 20 7d  CL_ERROR;..    }
36a0: 0a 09 7d 0a 09 73 70 65 63 50 74 72 2b 2b 3b 0a  ..}..specPtr++;.
36b0: 20 20 20 20 7d 20 77 68 69 6c 65 20 28 28 73 70      } while ((sp
36c0: 65 63 50 74 72 2d 3e 61 72 67 76 4e 61 6d 65 20  ecPtr->argvName 
36d0: 3d 3d 20 4e 55 4c 4c 29 20 26 26 20 28 73 70 65  == NULL) && (spe
36e0: 63 50 74 72 2d 3e 74 79 70 65 20 21 3d 20 54 4b  cPtr->type != TK
36f0: 5f 43 4f 4e 46 49 47 5f 45 4e 44 29 29 3b 0a 20  _CONFIG_END));. 
3700: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b     return TCL_OK
3710: 3b 0a 7d 0a 0c 0a 2f 2a 0a 20 2a 2d 2d 2d 2d 2d  ;.}.../*. *-----
3720: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3730: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3740: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3750: 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 0a 20 2a 20  ---------. *. * 
3760: 54 6b 5f 43 6f 6e 66 69 67 75 72 65 49 6e 66 6f  Tk_ConfigureInfo
3770: 20 2d 2d 0a 20 2a 0a 20 2a 09 52 65 74 75 72 6e   --. *. *.Return
3780: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   information abo
3790: 75 74 20 74 68 65 20 63 6f 6e 66 69 67 75 72 61  ut the configura
37a0: 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 0a 20 2a 09  tion options. *.
37b0: 66 6f 72 20 61 20 77 69 6e 64 6f 77 2c 20 61 6e  for a window, an
37c0: 64 20 74 68 65 69 72 20 63 75 72 72 65 6e 74 20  d their current 
37d0: 76 61 6c 75 65 73 2e 0a 20 2a 0a 20 2a 20 52 65  values.. *. * Re
37e0: 73 75 6c 74 73 3a 0a 20 2a 09 41 6c 77 61 79 73  sults:. *.Always
37f0: 20 72 65 74 75 72 6e 73 20 54 43 4c 5f 4f 4b 2e   returns TCL_OK.
3800: 20 20 49 6e 74 65 72 70 2d 3e 72 65 73 75 6c 74    Interp->result
3810: 20 77 69 6c 6c 20 62 65 20 6d 6f 64 69 66 69 65   will be modifie
3820: 64 0a 20 2a 09 68 6f 6c 64 20 61 20 64 65 73 63  d. *.hold a desc
3830: 72 69 70 74 69 6f 6e 20 6f 66 20 65 69 74 68 65  ription of eithe
3840: 72 20 61 20 73 69 6e 67 6c 65 20 63 6f 6e 66 69  r a single confi
3850: 67 75 72 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 0a  guration option.
3860: 20 2a 09 61 76 61 69 6c 61 62 6c 65 20 66 6f 72   *.available for
3870: 20 22 77 69 64 67 52 65 63 22 20 76 69 61 20 22   "widgRec" via "
3880: 73 70 65 63 73 22 2c 20 6f 72 20 61 6c 6c 20 74  specs", or all t
3890: 68 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  he configuration
38a0: 0a 20 2a 09 6f 70 74 69 6f 6e 73 20 61 76 61 69  . *.options avai
38b0: 6c 61 62 6c 65 2e 20 20 49 6e 20 74 68 65 20 22  lable.  In the "
38c0: 61 6c 6c 22 20 63 61 73 65 2c 20 74 68 65 20 72  all" case, the r
38d0: 65 73 75 6c 74 20 77 69 6c 6c 0a 20 2a 09 61 76  esult will. *.av
38e0: 61 69 6c 61 62 6c 65 20 66 6f 72 20 22 77 69 64  ailable for "wid
38f0: 67 52 65 63 22 20 76 69 61 20 22 73 70 65 63 73  gRec" via "specs
3900: 22 2e 20 20 54 68 65 20 72 65 73 75 6c 74 20 77  ".  The result w
3910: 69 6c 6c 0a 20 2a 09 62 65 20 61 20 6c 69 73 74  ill. *.be a list
3920: 2c 20 65 61 63 68 20 6f 66 20 77 68 6f 73 65 20  , each of whose 
3930: 65 6e 74 72 69 65 73 20 64 65 73 63 72 69 62 65  entries describe
3940: 73 20 6f 6e 65 20 6f 70 74 69 6f 6e 2e 0a 20 2a  s one option.. *
3950: 09 45 61 63 68 20 65 6e 74 72 79 20 77 69 6c 6c  .Each entry will
3960: 20 69 74 73 65 6c 66 20 62 65 20 61 20 6c 69 73   itself be a lis
3970: 74 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  t containing the
3980: 20 6f 70 74 69 6f 6e 27 73 0a 20 2a 09 6e 61 6d   option's. *.nam
3990: 65 20 66 6f 72 20 75 73 65 20 6f 6e 20 63 6f 6d  e for use on com
39a0: 6d 61 6e 64 20 6c 69 6e 65 73 2c 20 64 61 74 61  mand lines, data
39b0: 62 61 73 65 20 6e 61 6d 65 2c 20 64 61 74 61 62  base name, datab
39c0: 61 73 65 0a 20 2a 09 63 6c 61 73 73 2c 20 64 65  ase. *.class, de
39d0: 66 61 75 6c 74 20 76 61 6c 75 65 2c 20 61 6e 64  fault value, and
39e0: 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65 20 28   current value (
39f0: 65 6d 70 74 79 20 73 74 72 69 6e 67 0a 20 2a 09  empty string. *.
3a00: 69 66 20 6e 6f 6e 65 29 2e 20 20 46 6f 72 20 6f  if none).  For o
3a10: 70 74 69 6f 6e 73 20 74 68 61 74 20 61 72 65 20  ptions that are 
3a20: 73 79 6e 6f 6e 79 6d 73 2c 20 74 68 65 20 6c 69  synonyms, the li
3a30: 73 74 20 77 69 6c 6c 0a 20 2a 09 63 6f 6e 74 61  st will. *.conta
3a40: 69 6e 20 6f 6e 6c 79 20 74 77 6f 20 76 61 6c 75  in only two valu
3a50: 65 73 3a 20 20 6e 61 6d 65 20 61 6e 64 20 73 79  es:  name and sy
3a60: 6e 6f 6e 79 6d 20 6e 61 6d 65 2e 20 20 49 66 20  nonym name.  If 
3a70: 74 68 65 0a 20 2a 09 22 6e 61 6d 65 22 20 61 72  the. *."name" ar
3a80: 67 75 6d 65 6e 74 20 69 73 20 6e 6f 6e 2d 4e 55  gument is non-NU
3a90: 4c 4c 2c 20 74 68 65 6e 20 74 68 65 20 6f 6e 6c  LL, then the onl
3aa0: 79 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 20 2a  y information. *
3ab0: 09 72 65 74 75 72 6e 65 64 20 69 73 20 74 68 61  .returned is tha
3ac0: 74 20 66 6f 72 20 74 68 65 20 6e 61 6d 65 64 20  t for the named 
3ad0: 61 72 67 75 6d 65 6e 74 20 28 69 2e 65 2e 20 74  argument (i.e. t
3ae0: 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
3af0: 0a 20 2a 09 65 6e 74 72 79 20 69 6e 20 74 68 65  . *.entry in the
3b00: 20 6f 76 65 72 61 6c 6c 20 6c 69 73 74 20 69 73   overall list is
3b10: 20 72 65 74 75 72 6e 65 64 29 2e 0a 20 2a 0a 20   returned).. *. 
3b20: 2a 20 53 69 64 65 20 65 66 66 65 63 74 73 3a 0a  * Side effects:.
3b30: 20 2a 09 4e 6f 6e 65 2e 0a 20 2a 0a 20 2a 2d 2d   *.None.. *. *--
3b40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3b50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3b60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3b70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 2f  ------------. */
3b80: 0a 0a 69 6e 74 0a 54 6b 5f 43 6f 6e 66 69 67 75  ..int.Tk_Configu
3b90: 72 65 49 6e 66 6f 28 69 6e 74 65 72 70 2c 20 74  reInfo(interp, t
3ba0: 6b 77 69 6e 2c 20 73 70 65 63 73 2c 20 77 69 64  kwin, specs, wid
3bb0: 67 52 65 63 2c 20 61 72 67 76 4e 61 6d 65 2c 20  gRec, argvName, 
3bc0: 66 6c 61 67 73 29 0a 20 20 20 20 54 63 6c 5f 49  flags).    Tcl_I
3bd0: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 3b 09 09  nterp *interp;..
3be0: 2f 2a 20 49 6e 74 65 72 70 72 65 74 65 72 20 66  /* Interpreter f
3bf0: 6f 72 20 65 72 72 6f 72 20 72 65 70 6f 72 74 69  or error reporti
3c00: 6e 67 2e 20 2a 2f 0a 20 20 20 20 54 6b 5f 57 69  ng. */.    Tk_Wi
3c10: 6e 64 6f 77 20 74 6b 77 69 6e 3b 09 09 2f 2a 20  ndow tkwin;../* 
3c20: 57 69 6e 64 6f 77 20 63 6f 72 72 65 73 70 6f 6e  Window correspon
3c30: 64 69 6e 67 20 74 6f 20 77 69 64 67 52 65 63 2e  ding to widgRec.
3c40: 20 2a 2f 0a 20 20 20 20 54 6b 5f 43 6f 6e 66 69   */.    Tk_Confi
3c50: 67 53 70 65 63 20 2a 73 70 65 63 73 3b 09 2f 2a  gSpec *specs;./*
3c60: 20 44 65 73 63 72 69 62 65 73 20 6c 65 67 61 6c   Describes legal
3c70: 20 6f 70 74 69 6f 6e 73 2e 20 2a 2f 0a 20 20 20   options. */.   
3c80: 20 63 68 61 72 20 2a 77 69 64 67 52 65 63 3b 09   char *widgRec;.
3c90: 09 2f 2a 20 52 65 63 6f 72 64 20 77 68 6f 73 65  ./* Record whose
3ca0: 20 66 69 65 6c 64 73 20 63 6f 6e 74 61 69 6e 20   fields contain 
3cb0: 63 75 72 72 65 6e 74 0a 09 09 09 09 20 2a 20 76  current..... * v
3cc0: 61 6c 75 65 73 20 66 6f 72 20 6f 70 74 69 6f 6e  alues for option
3cd0: 73 2e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a  s. */.    char *
3ce0: 61 72 67 76 4e 61 6d 65 3b 09 09 2f 2a 20 49 66  argvName;../* If
3cf0: 20 6e 6f 6e 2d 4e 55 4c 4c 2c 20 69 6e 64 69 63   non-NULL, indic
3d00: 61 74 65 73 20 61 20 73 69 6e 67 6c 65 20 6f 70  ates a single op
3d10: 74 69 6f 6e 0a 09 09 09 09 20 2a 20 77 68 6f 73  tion..... * whos
3d20: 65 20 69 6e 66 6f 20 69 73 20 74 6f 20 62 65 20  e info is to be 
3d30: 72 65 74 75 72 6e 65 64 2e 20 20 4f 74 68 65 72  returned.  Other
3d40: 77 69 73 65 0a 09 09 09 09 20 2a 20 69 6e 66 6f  wise..... * info
3d50: 20 69 73 20 72 65 74 75 72 6e 65 64 20 66 6f 72   is returned for
3d60: 20 61 6c 6c 20 6f 70 74 69 6f 6e 73 2e 20 2a 2f   all options. */
3d70: 0a 20 20 20 20 69 6e 74 20 66 6c 61 67 73 3b 09  .    int flags;.
3d80: 09 09 2f 2a 20 55 73 65 64 20 74 6f 20 73 70 65  ../* Used to spe
3d90: 63 69 66 79 20 61 64 64 69 74 69 6f 6e 61 6c 20  cify additional 
3da0: 66 6c 61 67 73 0a 09 09 09 09 20 2a 20 74 68 61  flags..... * tha
3db0: 74 20 6d 75 73 74 20 62 65 20 70 72 65 73 65 6e  t must be presen
3dc0: 74 20 69 6e 20 63 6f 6e 66 69 67 20 73 70 65 63  t in config spec
3dd0: 73 0a 09 09 09 09 20 2a 20 66 6f 72 20 74 68 65  s..... * for the
3de0: 6d 20 74 6f 20 62 65 20 63 6f 6e 73 69 64 65 72  m to be consider
3df0: 65 64 2e 20 2a 2f 0a 7b 0a 20 20 20 20 72 65 67  ed. */.{.    reg
3e00: 69 73 74 65 72 20 54 6b 5f 43 6f 6e 66 69 67 53  ister Tk_ConfigS
3e10: 70 65 63 20 2a 73 70 65 63 50 74 72 3b 0a 20 20  pec *specPtr;.  
3e20: 20 20 69 6e 74 20 6e 65 65 64 46 6c 61 67 73 2c    int needFlags,
3e30: 20 68 61 74 65 46 6c 61 67 73 3b 0a 20 20 20 20   hateFlags;.    
3e40: 63 68 61 72 20 2a 6c 69 73 74 3b 0a 20 20 20 20  char *list;.    
3e50: 63 68 61 72 20 2a 6c 65 61 64 65 72 20 3d 20 22  char *leader = "
3e60: 7b 22 3b 0a 0a 20 20 20 20 6e 65 65 64 46 6c 61  {";..    needFla
3e70: 67 73 20 3d 20 66 6c 61 67 73 20 26 20 7e 28 54  gs = flags & ~(T
3e80: 4b 5f 43 4f 4e 46 49 47 5f 55 53 45 52 5f 42 49  K_CONFIG_USER_BI
3e90: 54 20 2d 20 31 29 3b 0a 20 20 20 20 69 66 20 28  T - 1);.    if (
3ea0: 54 6b 5f 44 65 70 74 68 28 74 6b 77 69 6e 29 20  Tk_Depth(tkwin) 
3eb0: 3c 3d 20 31 29 20 7b 0a 09 68 61 74 65 46 6c 61  <= 1) {..hateFla
3ec0: 67 73 20 3d 20 54 4b 5f 43 4f 4e 46 49 47 5f 43  gs = TK_CONFIG_C
3ed0: 4f 4c 4f 52 5f 4f 4e 4c 59 3b 0a 20 20 20 20 7d  OLOR_ONLY;.    }
3ee0: 20 65 6c 73 65 20 7b 0a 09 68 61 74 65 46 6c 61   else {..hateFla
3ef0: 67 73 20 3d 20 54 4b 5f 43 4f 4e 46 49 47 5f 4d  gs = TK_CONFIG_M
3f00: 4f 4e 4f 5f 4f 4e 4c 59 3b 0a 20 20 20 20 7d 0a  ONO_ONLY;.    }.
3f10: 0a 20 20 20 20 2f 2a 0a 20 20 20 20 20 2a 20 49  .    /*.     * I
3f20: 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73  f information is
3f30: 20 6f 6e 6c 79 20 77 61 6e 74 65 64 20 66 6f 72   only wanted for
3f40: 20 61 20 73 69 6e 67 6c 65 20 63 6f 6e 66 69 67   a single config
3f50: 75 72 61 74 69 6f 6e 0a 20 20 20 20 20 2a 20 73  uration.     * s
3f60: 70 65 63 2c 20 74 68 65 6e 20 68 61 6e 64 6c 65  pec, then handle
3f70: 20 74 68 61 74 20 6f 6e 65 20 73 70 65 63 20 73   that one spec s
3f80: 70 65 63 69 61 6c 6c 79 2e 0a 20 20 20 20 20 2a  pecially..     *
3f90: 2f 0a 0a 20 20 20 20 54 63 6c 5f 53 65 74 52 65  /..    Tcl_SetRe
3fa0: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 28 63 68  sult(interp, (ch
3fb0: 61 72 20 2a 29 20 4e 55 4c 4c 2c 20 54 43 4c 5f  ar *) NULL, TCL_
3fc0: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 69 66 20  STATIC);.    if 
3fd0: 28 61 72 67 76 4e 61 6d 65 20 21 3d 20 4e 55 4c  (argvName != NUL
3fe0: 4c 29 20 7b 0a 09 73 70 65 63 50 74 72 20 3d 20  L) {..specPtr = 
3ff0: 46 69 6e 64 43 6f 6e 66 69 67 53 70 65 63 28 69  FindConfigSpec(i
4000: 6e 74 65 72 70 2c 20 73 70 65 63 73 2c 20 61 72  nterp, specs, ar
4010: 67 76 4e 61 6d 65 2c 20 6e 65 65 64 46 6c 61 67  gvName, needFlag
4020: 73 2c 0a 09 09 68 61 74 65 46 6c 61 67 73 29 3b  s,...hateFlags);
4030: 0a 09 69 66 20 28 73 70 65 63 50 74 72 20 3d 3d  ..if (specPtr ==
4040: 20 4e 55 4c 4c 29 20 7b 0a 09 20 20 20 20 72 65   NULL) {..    re
4050: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
4060: 09 7d 0a 09 54 63 6c 5f 53 65 74 52 65 73 75 6c  .}..Tcl_SetResul
4070: 74 28 69 6e 74 65 72 70 2c 20 0a 09 09 09 46 6f  t(interp, ....Fo
4080: 72 6d 61 74 43 6f 6e 66 69 67 49 6e 66 6f 28 69  rmatConfigInfo(i
4090: 6e 74 65 72 70 2c 20 74 6b 77 69 6e 2c 20 73 70  nterp, tkwin, sp
40a0: 65 63 50 74 72 2c 20 77 69 64 67 52 65 63 29 2c  ecPtr, widgRec),
40b0: 20 0a 09 09 09 28 54 63 6c 5f 46 72 65 65 50 72   ....(Tcl_FreePr
40c0: 6f 63 20 2a 29 20 66 72 65 65 29 3b 0a 09 72 65  oc *) free);..re
40d0: 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 20 20 20  turn TCL_OK;.   
40e0: 20 7d 0a 0a 20 20 20 20 2f 2a 0a 20 20 20 20 20   }..    /*.     
40f0: 2a 20 4c 6f 6f 70 20 74 68 72 6f 75 67 68 20 61  * Loop through a
4100: 6c 6c 20 74 68 65 20 73 70 65 63 73 2c 20 63 72  ll the specs, cr
4110: 65 61 74 69 6e 67 20 61 20 62 69 67 20 6c 69 73  eating a big lis
4120: 74 20 77 69 74 68 20 61 6c 6c 0a 20 20 20 20 20  t with all.     
4130: 2a 20 74 68 65 69 72 20 69 6e 66 6f 72 6d 61 74  * their informat
4140: 69 6f 6e 2e 0a 20 20 20 20 20 2a 2f 0a 0a 20 20  ion..     */..  
4150: 20 20 66 6f 72 20 28 73 70 65 63 50 74 72 20 3d    for (specPtr =
4160: 20 73 70 65 63 73 3b 20 73 70 65 63 50 74 72 2d   specs; specPtr-
4170: 3e 74 79 70 65 20 21 3d 20 54 4b 5f 43 4f 4e 46  >type != TK_CONF
4180: 49 47 5f 45 4e 44 3b 20 73 70 65 63 50 74 72 2b  IG_END; specPtr+
4190: 2b 29 20 7b 0a 09 69 66 20 28 28 61 72 67 76 4e  +) {..if ((argvN
41a0: 61 6d 65 20 21 3d 20 4e 55 4c 4c 29 20 26 26 20  ame != NULL) && 
41b0: 28 73 70 65 63 50 74 72 2d 3e 61 72 67 76 4e 61  (specPtr->argvNa
41c0: 6d 65 20 21 3d 20 61 72 67 76 4e 61 6d 65 29 29  me != argvName))
41d0: 20 7b 0a 09 20 20 20 20 63 6f 6e 74 69 6e 75 65   {..    continue
41e0: 3b 0a 09 7d 0a 09 69 66 20 28 28 28 73 70 65 63  ;..}..if (((spec
41f0: 50 74 72 2d 3e 73 70 65 63 46 6c 61 67 73 20 26  Ptr->specFlags &
4200: 20 6e 65 65 64 46 6c 61 67 73 29 20 21 3d 20 6e   needFlags) != n
4210: 65 65 64 46 6c 61 67 73 29 0a 09 09 7c 7c 20 28  eedFlags)...|| (
4220: 73 70 65 63 50 74 72 2d 3e 73 70 65 63 46 6c 61  specPtr->specFla
4230: 67 73 20 26 20 68 61 74 65 46 6c 61 67 73 29 29  gs & hateFlags))
4240: 20 7b 0a 09 20 20 20 20 63 6f 6e 74 69 6e 75 65   {..    continue
4250: 3b 0a 09 7d 0a 09 69 66 20 28 73 70 65 63 50 74  ;..}..if (specPt
4260: 72 2d 3e 61 72 67 76 4e 61 6d 65 20 3d 3d 20 4e  r->argvName == N
4270: 55 4c 4c 29 20 7b 0a 09 20 20 20 20 63 6f 6e 74  ULL) {..    cont
4280: 69 6e 75 65 3b 0a 09 7d 0a 09 6c 69 73 74 20 3d  inue;..}..list =
4290: 20 46 6f 72 6d 61 74 43 6f 6e 66 69 67 49 6e 66   FormatConfigInf
42a0: 6f 28 69 6e 74 65 72 70 2c 20 74 6b 77 69 6e 2c  o(interp, tkwin,
42b0: 20 73 70 65 63 50 74 72 2c 20 77 69 64 67 52 65   specPtr, widgRe
42c0: 63 29 3b 0a 09 54 63 6c 5f 41 70 70 65 6e 64 52  c);..Tcl_AppendR
42d0: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 6c 65  esult(interp, le
42e0: 61 64 65 72 2c 20 6c 69 73 74 2c 20 22 7d 22 2c  ader, list, "}",
42f0: 20 28 63 68 61 72 20 2a 29 20 4e 55 4c 4c 29 3b   (char *) NULL);
4300: 0a 09 63 6b 66 72 65 65 28 6c 69 73 74 29 3b 0a  ..ckfree(list);.
4310: 09 6c 65 61 64 65 72 20 3d 20 22 20 7b 22 3b 0a  .leader = " {";.
4320: 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
4330: 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0c 0a 2f 2a 0a   TCL_OK;.}.../*.
4340: 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d   *--------------
4350: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4360: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4370: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4380: 0a 20 2a 0a 20 2a 20 46 6f 72 6d 61 74 43 6f 6e  . *. * FormatCon
4390: 66 69 67 49 6e 66 6f 20 2d 2d 0a 20 2a 0a 20 2a  figInfo --. *. *
43a0: 09 43 72 65 61 74 65 20 61 20 76 61 6c 69 64 20  .Create a valid 
43b0: 54 63 6c 20 6c 69 73 74 20 68 6f 6c 64 69 6e 67  Tcl list holding
43c0: 20 74 68 65 20 63 6f 6e 66 69 67 75 72 61 74 69   the configurati
43d0: 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 20  on information. 
43e0: 2a 09 66 6f 72 20 61 20 73 69 6e 67 6c 65 20 63  *.for a single c
43f0: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 6f 70 74  onfiguration opt
4400: 69 6f 6e 2e 0a 20 2a 0a 20 2a 20 52 65 73 75 6c  ion.. *. * Resul
4410: 74 73 3a 0a 20 2a 09 41 20 54 63 6c 20 6c 69 73  ts:. *.A Tcl lis
4420: 74 2c 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61  t, dynamically a
4430: 6c 6c 6f 63 61 74 65 64 2e 20 20 54 68 65 20 63  llocated.  The c
4440: 61 6c 6c 65 72 20 69 73 20 65 78 70 65 63 74 65  aller is expecte
4450: 64 20 74 6f 0a 20 2a 09 61 72 72 61 6e 67 65 20  d to. *.arrange 
4460: 66 6f 72 20 74 68 69 73 20 6c 69 73 74 20 74 6f  for this list to
4470: 20 62 65 20 66 72 65 65 64 20 65 76 65 6e 74 75   be freed eventu
4480: 61 6c 6c 79 2e 0a 20 2a 0a 20 2a 20 53 69 64 65  ally.. *. * Side
4490: 20 65 66 66 65 63 74 73 3a 0a 20 2a 09 4d 65 6d   effects:. *.Mem
44a0: 6f 72 79 20 69 73 20 61 6c 6c 6f 63 61 74 65 64  ory is allocated
44b0: 2e 0a 20 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d  .. *. *---------
44c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
44d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
44e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
44f0: 2d 2d 2d 2d 2d 0a 20 2a 2f 0a 0a 73 74 61 74 69  -----. */..stati
4500: 63 20 63 68 61 72 20 2a 0a 46 6f 72 6d 61 74 43  c char *.FormatC
4510: 6f 6e 66 69 67 49 6e 66 6f 28 69 6e 74 65 72 70  onfigInfo(interp
4520: 2c 20 74 6b 77 69 6e 2c 20 73 70 65 63 50 74 72  , tkwin, specPtr
4530: 2c 20 77 69 64 67 52 65 63 29 0a 20 20 20 20 54  , widgRec).    T
4540: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
4550: 70 3b 09 09 09 2f 2a 20 49 6e 74 65 72 70 72 65  p;.../* Interpre
4560: 74 65 72 20 74 6f 20 75 73 65 20 66 6f 72 20 74  ter to use for t
4570: 68 69 6e 67 73 0a 09 09 09 09 09 20 2a 20 6c 69  hings...... * li
4580: 6b 65 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e  ke floating-poin
4590: 74 20 70 72 65 63 69 73 69 6f 6e 2e 20 2a 2f 0a  t precision. */.
45a0: 20 20 20 20 54 6b 5f 57 69 6e 64 6f 77 20 74 6b      Tk_Window tk
45b0: 77 69 6e 3b 09 09 09 2f 2a 20 57 69 6e 64 6f 77  win;.../* Window
45c0: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74   corresponding t
45d0: 6f 20 77 69 64 67 65 74 2e 20 2a 2f 0a 20 20 20  o widget. */.   
45e0: 20 72 65 67 69 73 74 65 72 20 54 6b 5f 43 6f 6e   register Tk_Con
45f0: 66 69 67 53 70 65 63 20 2a 73 70 65 63 50 74 72  figSpec *specPtr
4600: 3b 09 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20  ;./* Pointer to 
4610: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 64 65 73 63  information desc
4620: 72 69 62 69 6e 67 0a 09 09 09 09 09 20 2a 20 6f  ribing...... * o
4630: 70 74 69 6f 6e 2e 20 2a 2f 0a 20 20 20 20 63 68  ption. */.    ch
4640: 61 72 20 2a 77 69 64 67 52 65 63 3b 09 09 09 2f  ar *widgRec;.../
4650: 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 72 65 63  * Pointer to rec
4660: 6f 72 64 20 68 6f 6c 64 69 6e 67 20 63 75 72 72  ord holding curr
4670: 65 6e 74 0a 09 09 09 09 09 20 2a 20 76 61 6c 75  ent...... * valu
4680: 65 73 20 6f 66 20 69 6e 66 6f 20 66 6f 72 20 77  es of info for w
4690: 69 64 67 65 74 2e 20 2a 2f 0a 7b 0a 20 20 20 20  idget. */.{.    
46a0: 63 68 61 72 20 2a 61 72 67 76 5b 36 5d 2c 20 2a  char *argv[6], *
46b0: 72 65 73 75 6c 74 3b 0a 20 20 20 20 63 68 61 72  result;.    char
46c0: 20 62 75 66 66 65 72 5b 32 30 30 5d 3b 0a 20 20   buffer[200];.  
46d0: 20 20 54 63 6c 5f 46 72 65 65 50 72 6f 63 20 2a    Tcl_FreeProc *
46e0: 66 72 65 65 50 72 6f 63 20 3d 20 28 54 63 6c 5f  freeProc = (Tcl_
46f0: 46 72 65 65 50 72 6f 63 20 2a 29 20 4e 55 4c 4c  FreeProc *) NULL
4700: 3b 0a 0a 20 20 20 20 61 72 67 76 5b 30 5d 20 3d  ;..    argv[0] =
4710: 20 73 70 65 63 50 74 72 2d 3e 61 72 67 76 4e 61   specPtr->argvNa
4720: 6d 65 3b 0a 20 20 20 20 61 72 67 76 5b 31 5d 20  me;.    argv[1] 
4730: 3d 20 73 70 65 63 50 74 72 2d 3e 64 62 4e 61 6d  = specPtr->dbNam
4740: 65 3b 0a 20 20 20 20 61 72 67 76 5b 32 5d 20 3d  e;.    argv[2] =
4750: 20 73 70 65 63 50 74 72 2d 3e 64 62 43 6c 61 73   specPtr->dbClas
4760: 73 3b 0a 20 20 20 20 61 72 67 76 5b 33 5d 20 3d  s;.    argv[3] =
4770: 20 73 70 65 63 50 74 72 2d 3e 64 65 66 56 61 6c   specPtr->defVal
4780: 75 65 3b 0a 20 20 20 20 69 66 20 28 73 70 65 63  ue;.    if (spec
4790: 50 74 72 2d 3e 74 79 70 65 20 3d 3d 20 54 4b 5f  Ptr->type == TK_
47a0: 43 4f 4e 46 49 47 5f 53 59 4e 4f 4e 59 4d 29 20  CONFIG_SYNONYM) 
47b0: 7b 0a 09 72 65 74 75 72 6e 20 54 63 6c 5f 4d 65  {..return Tcl_Me
47c0: 72 67 65 28 32 2c 20 61 72 67 76 29 3b 0a 20 20  rge(2, argv);.  
47d0: 20 20 7d 0a 20 20 20 20 61 72 67 76 5b 34 5d 20    }.    argv[4] 
47e0: 3d 20 46 6f 72 6d 61 74 43 6f 6e 66 69 67 56 61  = FormatConfigVa
47f0: 6c 75 65 28 69 6e 74 65 72 70 2c 20 74 6b 77 69  lue(interp, tkwi
4800: 6e 2c 20 73 70 65 63 50 74 72 2c 20 77 69 64 67  n, specPtr, widg
4810: 52 65 63 2c 20 62 75 66 66 65 72 2c 0a 09 20 20  Rec, buffer,..  
4820: 20 20 26 66 72 65 65 50 72 6f 63 29 3b 0a 20 20    &freeProc);.  
4830: 20 20 69 66 20 28 61 72 67 76 5b 31 5d 20 3d 3d    if (argv[1] ==
4840: 20 4e 55 4c 4c 29 20 7b 0a 09 61 72 67 76 5b 31   NULL) {..argv[1
4850: 5d 20 3d 20 22 22 3b 0a 20 20 20 20 7d 0a 20 20  ] = "";.    }.  
4860: 20 20 69 66 20 28 61 72 67 76 5b 32 5d 20 3d 3d    if (argv[2] ==
4870: 20 4e 55 4c 4c 29 20 7b 0a 09 61 72 67 76 5b 32   NULL) {..argv[2
4880: 5d 20 3d 20 22 22 3b 0a 20 20 20 20 7d 0a 20 20  ] = "";.    }.  
4890: 20 20 69 66 20 28 61 72 67 76 5b 33 5d 20 3d 3d    if (argv[3] ==
48a0: 20 4e 55 4c 4c 29 20 7b 0a 09 61 72 67 76 5b 33   NULL) {..argv[3
48b0: 5d 20 3d 20 22 22 3b 0a 20 20 20 20 7d 0a 20 20  ] = "";.    }.  
48c0: 20 20 69 66 20 28 61 72 67 76 5b 34 5d 20 3d 3d    if (argv[4] ==
48d0: 20 4e 55 4c 4c 29 20 7b 0a 09 61 72 67 76 5b 34   NULL) {..argv[4
48e0: 5d 20 3d 20 22 22 3b 0a 20 20 20 20 7d 0a 20 20  ] = "";.    }.  
48f0: 20 20 72 65 73 75 6c 74 20 3d 20 54 63 6c 5f 4d    result = Tcl_M
4900: 65 72 67 65 28 35 2c 20 61 72 67 76 29 3b 0a 20  erge(5, argv);. 
4910: 20 20 20 69 66 20 28 66 72 65 65 50 72 6f 63 20     if (freeProc 
4920: 21 3d 20 4e 55 4c 4c 29 20 7b 0a 09 69 66 20 28  != NULL) {..if (
4930: 66 72 65 65 50 72 6f 63 20 3d 3d 20 28 54 63 6c  freeProc == (Tcl
4940: 5f 46 72 65 65 50 72 6f 63 20 2a 29 20 66 72 65  _FreeProc *) fre
4950: 65 29 20 7b 0a 09 20 20 20 20 63 6b 66 72 65 65  e) {..    ckfree
4960: 28 61 72 67 76 5b 34 5d 29 3b 0a 09 7d 20 65 6c  (argv[4]);..} el
4970: 73 65 20 7b 0a 09 20 20 20 20 28 2a 66 72 65 65  se {..    (*free
4980: 50 72 6f 63 29 28 61 72 67 76 5b 34 5d 29 3b 0a  Proc)(argv[4]);.
4990: 09 7d 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74  .}.    }.    ret
49a0: 75 72 6e 20 72 65 73 75 6c 74 3b 0a 7d 0a 0c 0a  urn result;.}...
49b0: 2f 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  /*. *-----------
49c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
49d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
49e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
49f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 0a 20  -----------. *. 
4a00: 2a 20 46 6f 72 6d 61 74 43 6f 6e 66 69 67 56 61  * FormatConfigVa
4a10: 6c 75 65 20 2d 2d 0a 20 2a 0a 20 2a 09 54 68 69  lue --. *. *.Thi
4a20: 73 20 70 72 6f 63 65 64 75 72 65 20 66 6f 72 6d  s procedure form
4a30: 61 74 73 20 74 68 65 20 63 75 72 72 65 6e 74 20  ats the current 
4a40: 76 61 6c 75 65 20 6f 66 20 61 20 63 6f 6e 66 69  value of a confi
4a50: 67 75 72 61 74 69 6f 6e 0a 20 2a 09 6f 70 74 69  guration. *.opti
4a60: 6f 6e 2e 0a 20 2a 0a 20 2a 20 52 65 73 75 6c 74  on.. *. * Result
4a70: 73 3a 0a 20 2a 09 54 68 65 20 72 65 74 75 72 6e  s:. *.The return
4a80: 20 76 61 6c 75 65 20 69 73 20 74 68 65 20 66 6f   value is the fo
4a90: 72 6d 61 74 74 65 64 20 76 61 6c 75 65 20 6f 66  rmatted value of
4aa0: 20 74 68 65 20 6f 70 74 69 6f 6e 20 67 69 76 65   the option give
4ab0: 6e 0a 20 2a 09 62 79 20 73 70 65 63 50 74 72 20  n. *.by specPtr 
4ac0: 61 6e 64 20 77 69 64 67 52 65 63 2e 20 20 49 66  and widgRec.  If
4ad0: 20 74 68 65 20 76 61 6c 75 65 20 69 73 20 73 74   the value is st
4ae0: 61 74 69 63 2c 20 73 6f 20 74 68 61 74 20 69 74  atic, so that it
4af0: 0a 20 2a 09 6e 65 65 64 20 6e 6f 74 20 62 65 20  . *.need not be 
4b00: 66 72 65 65 64 2c 20 2a 66 72 65 65 50 72 6f 63  freed, *freeProc
4b10: 50 74 72 20 77 69 6c 6c 20 62 65 20 73 65 74 20  Ptr will be set 
4b20: 74 6f 20 4e 55 4c 4c 3b 20 20 6f 74 68 65 72 77  to NULL;  otherw
4b30: 69 73 65 0a 20 2a 09 2a 66 72 65 65 50 72 6f 63  ise. *.*freeProc
4b40: 50 74 72 20 77 69 6c 6c 20 62 65 20 73 65 74 20  Ptr will be set 
4b50: 74 6f 20 74 68 65 20 61 64 64 72 65 73 73 20 6f  to the address o
4b60: 66 20 61 20 70 72 6f 63 65 64 75 72 65 20 74 6f  f a procedure to
4b70: 0a 20 2a 09 66 72 65 65 20 74 68 65 20 72 65 73  . *.free the res
4b80: 75 6c 74 2c 20 61 6e 64 20 74 68 65 20 63 61 6c  ult, and the cal
4b90: 6c 65 72 20 6d 75 73 74 20 69 6e 76 6f 6b 65 20  ler must invoke 
4ba0: 74 68 69 73 20 70 72 6f 63 65 64 75 72 65 0a 20  this procedure. 
4bb0: 2a 09 77 68 65 6e 20 69 74 20 69 73 20 66 69 6e  *.when it is fin
4bc0: 69 73 68 65 64 20 77 69 74 68 20 74 68 65 20 72  ished with the r
4bd0: 65 73 75 6c 74 2e 0a 20 2a 0a 20 2a 20 53 69 64  esult.. *. * Sid
4be0: 65 20 65 66 66 65 63 74 73 3a 0a 20 2a 09 4e 6f  e effects:. *.No
4bf0: 6e 65 2e 0a 20 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d  ne.. *. *-------
4c00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4c10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4c20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4c30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a  ---------------.
4c40: 20 2a 2f 0a 0a 73 74 61 74 69 63 20 63 68 61 72   */..static char
4c50: 20 2a 0a 46 6f 72 6d 61 74 43 6f 6e 66 69 67 56   *.FormatConfigV
4c60: 61 6c 75 65 28 69 6e 74 65 72 70 2c 20 74 6b 77  alue(interp, tkw
4c70: 69 6e 2c 20 73 70 65 63 50 74 72 2c 20 77 69 64  in, specPtr, wid
4c80: 67 52 65 63 2c 20 62 75 66 66 65 72 2c 20 66 72  gRec, buffer, fr
4c90: 65 65 50 72 6f 63 50 74 72 29 0a 20 20 20 20 54  eeProcPtr).    T
4ca0: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
4cb0: 70 3b 09 09 2f 2a 20 49 6e 74 65 72 70 72 65 74  p;../* Interpret
4cc0: 65 72 20 66 6f 72 20 75 73 65 20 69 6e 20 72 65  er for use in re
4cd0: 61 6c 20 63 6f 6e 76 65 72 73 69 6f 6e 73 2e 20  al conversions. 
4ce0: 2a 2f 0a 20 20 20 20 54 6b 5f 57 69 6e 64 6f 77  */.    Tk_Window
4cf0: 20 74 6b 77 69 6e 3b 09 09 2f 2a 20 57 69 6e 64   tkwin;../* Wind
4d00: 6f 77 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  ow corresponding
4d10: 20 74 6f 20 77 69 64 67 65 74 2e 20 2a 2f 0a 20   to widget. */. 
4d20: 20 20 20 54 6b 5f 43 6f 6e 66 69 67 53 70 65 63     Tk_ConfigSpec
4d30: 20 2a 73 70 65 63 50 74 72 3b 09 2f 2a 20 50 6f   *specPtr;./* Po
4d40: 69 6e 74 65 72 20 74 6f 20 69 6e 66 6f 72 6d 61  inter to informa
4d50: 74 69 6f 6e 20 64 65 73 63 72 69 62 69 6e 67 20  tion describing 
4d60: 6f 70 74 69 6f 6e 2e 0a 09 09 09 09 20 2a 20 4d  option...... * M
4d70: 75 73 74 20 6e 6f 74 20 70 6f 69 6e 74 20 74 6f  ust not point to
4d80: 20 61 20 73 79 6e 6f 6e 79 6d 20 6f 70 74 69 6f   a synonym optio
4d90: 6e 2e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a  n. */.    char *
4da0: 77 69 64 67 52 65 63 3b 09 09 2f 2a 20 50 6f 69  widgRec;../* Poi
4db0: 6e 74 65 72 20 74 6f 20 72 65 63 6f 72 64 20 68  nter to record h
4dc0: 6f 6c 64 69 6e 67 20 63 75 72 72 65 6e 74 0a 09  olding current..
4dd0: 09 09 09 20 2a 20 76 61 6c 75 65 73 20 6f 66 20  ... * values of 
4de0: 69 6e 66 6f 20 66 6f 72 20 77 69 64 67 65 74 2e  info for widget.
4df0: 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 62 75   */.    char *bu
4e00: 66 66 65 72 3b 09 09 2f 2a 20 53 74 61 74 69 63  ffer;../* Static
4e10: 20 62 75 66 66 65 72 20 74 6f 20 75 73 65 20 66   buffer to use f
4e20: 6f 72 20 73 6d 61 6c 6c 20 76 61 6c 75 65 73 2e  or small values.
4e30: 0a 09 09 09 09 20 2a 20 4d 75 73 74 20 68 61 76  ..... * Must hav
4e40: 65 20 61 74 20 6c 65 61 73 74 20 32 30 30 20 62  e at least 200 b
4e50: 79 74 65 73 20 6f 66 20 73 74 6f 72 61 67 65 2e  ytes of storage.
4e60: 20 2a 2f 0a 20 20 20 20 54 63 6c 5f 46 72 65 65   */.    Tcl_Free
4e70: 50 72 6f 63 20 2a 2a 66 72 65 65 50 72 6f 63 50  Proc **freeProcP
4e80: 74 72 3b 09 2f 2a 20 50 6f 69 6e 74 65 72 20 74  tr;./* Pointer t
4e90: 6f 20 77 6f 72 64 20 74 6f 20 66 69 6c 6c 20 69  o word to fill i
4ea0: 6e 20 77 69 74 68 20 61 64 64 72 65 73 73 0a 09  n with address..
4eb0: 09 09 09 20 2a 20 6f 66 20 70 72 6f 63 65 64 75  ... * of procedu
4ec0: 72 65 20 74 6f 20 66 72 65 65 20 74 68 65 20 72  re to free the r
4ed0: 65 73 75 6c 74 2c 20 6f 72 20 4e 55 4c 4c 0a 09  esult, or NULL..
4ee0: 09 09 09 20 2a 20 69 66 20 72 65 73 75 6c 74 20  ... * if result 
4ef0: 69 73 20 73 74 61 74 69 63 2e 20 2a 2f 0a 7b 0a  is static. */.{.
4f00: 20 20 20 20 63 68 61 72 20 2a 70 74 72 2c 20 2a      char *ptr, *
4f10: 72 65 73 75 6c 74 3b 0a 0a 20 20 20 20 2a 66 72  result;..    *fr
4f20: 65 65 50 72 6f 63 50 74 72 20 3d 20 4e 55 4c 4c  eeProcPtr = NULL
4f30: 3b 0a 20 20 20 20 70 74 72 20 3d 20 77 69 64 67  ;.    ptr = widg
4f40: 52 65 63 20 2b 20 73 70 65 63 50 74 72 2d 3e 6f  Rec + specPtr->o
4f50: 66 66 73 65 74 3b 0a 20 20 20 20 72 65 73 75 6c  ffset;.    resul
4f60: 74 20 3d 20 22 22 3b 0a 20 20 20 20 73 77 69 74  t = "";.    swit
4f70: 63 68 20 28 73 70 65 63 50 74 72 2d 3e 74 79 70  ch (specPtr->typ
4f80: 65 29 20 7b 0a 09 63 61 73 65 20 54 4b 5f 43 4f  e) {..case TK_CO
4f90: 4e 46 49 47 5f 42 4f 4f 4c 45 41 4e 3a 0a 09 20  NFIG_BOOLEAN:.. 
4fa0: 20 20 20 69 66 20 28 2a 28 28 69 6e 74 20 2a 29     if (*((int *)
4fb0: 20 70 74 72 29 20 3d 3d 20 30 29 20 7b 0a 09 09   ptr) == 0) {...
4fc0: 72 65 73 75 6c 74 20 3d 20 22 30 22 3b 0a 09 20  result = "0";.. 
4fd0: 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 09 72 65     } else {...re
4fe0: 73 75 6c 74 20 3d 20 22 31 22 3b 0a 09 20 20 20  sult = "1";..   
4ff0: 20 7d 0a 09 20 20 20 20 62 72 65 61 6b 3b 0a 09   }..    break;..
5000: 63 61 73 65 20 54 4b 5f 43 4f 4e 46 49 47 5f 49  case TK_CONFIG_I
5010: 4e 54 3a 0a 09 20 20 20 20 73 70 72 69 6e 74 66  NT:..    sprintf
5020: 28 62 75 66 66 65 72 2c 20 22 25 64 22 2c 20 2a  (buffer, "%d", *
5030: 28 28 69 6e 74 20 2a 29 20 70 74 72 29 29 3b 0a  ((int *) ptr));.
5040: 09 20 20 20 20 72 65 73 75 6c 74 20 3d 20 62 75  .    result = bu
5050: 66 66 65 72 3b 0a 09 20 20 20 20 62 72 65 61 6b  ffer;..    break
5060: 3b 0a 09 63 61 73 65 20 54 4b 5f 43 4f 4e 46 49  ;..case TK_CONFI
5070: 47 5f 44 4f 55 42 4c 45 3a 0a 09 20 20 20 20 54  G_DOUBLE:..    T
5080: 63 6c 5f 50 72 69 6e 74 44 6f 75 62 6c 65 28 69  cl_PrintDouble(i
5090: 6e 74 65 72 70 2c 20 2a 28 28 64 6f 75 62 6c 65  nterp, *((double
50a0: 20 2a 29 20 70 74 72 29 2c 20 62 75 66 66 65 72   *) ptr), buffer
50b0: 29 3b 0a 09 20 20 20 20 72 65 73 75 6c 74 20 3d  );..    result =
50c0: 20 62 75 66 66 65 72 3b 0a 09 20 20 20 20 62 72   buffer;..    br
50d0: 65 61 6b 3b 0a 09 63 61 73 65 20 54 4b 5f 43 4f  eak;..case TK_CO
50e0: 4e 46 49 47 5f 53 54 52 49 4e 47 3a 0a 09 20 20  NFIG_STRING:..  
50f0: 20 20 72 65 73 75 6c 74 20 3d 20 28 2a 28 63 68    result = (*(ch
5100: 61 72 20 2a 2a 29 20 70 74 72 29 3b 0a 09 20 20  ar **) ptr);..  
5110: 20 20 69 66 20 28 72 65 73 75 6c 74 20 3d 3d 20    if (result == 
5120: 4e 55 4c 4c 29 20 7b 0a 09 09 72 65 73 75 6c 74  NULL) {...result
5130: 20 3d 20 22 22 3b 0a 09 20 20 20 20 7d 0a 09 20   = "";..    }.. 
5140: 20 20 20 62 72 65 61 6b 3b 0a 09 63 61 73 65 20     break;..case 
5150: 54 4b 5f 43 4f 4e 46 49 47 5f 55 49 44 3a 20 7b  TK_CONFIG_UID: {
5160: 0a 09 20 20 20 20 54 6b 5f 55 69 64 20 75 69 64  ..    Tk_Uid uid
5170: 20 3d 20 2a 28 28 54 6b 5f 55 69 64 20 2a 29 20   = *((Tk_Uid *) 
5180: 70 74 72 29 3b 0a 09 20 20 20 20 69 66 20 28 75  ptr);..    if (u
5190: 69 64 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09  id != NULL) {...
51a0: 72 65 73 75 6c 74 20 3d 20 75 69 64 3b 0a 09 20  result = uid;.. 
51b0: 20 20 20 7d 0a 09 20 20 20 20 62 72 65 61 6b 3b     }..    break;
51c0: 0a 09 7d 0a 09 63 61 73 65 20 54 4b 5f 43 4f 4e  ..}..case TK_CON
51d0: 46 49 47 5f 4a 55 53 54 49 46 59 3a 0a 09 20 20  FIG_JUSTIFY:..  
51e0: 20 20 72 65 73 75 6c 74 20 3d 20 54 6b 5f 4e 61    result = Tk_Na
51f0: 6d 65 4f 66 4a 75 73 74 69 66 79 28 2a 28 28 54  meOfJustify(*((T
5200: 6b 5f 4a 75 73 74 69 66 79 20 2a 29 20 70 74 72  k_Justify *) ptr
5210: 29 29 3b 0a 09 20 20 20 20 62 72 65 61 6b 3b 0a  ));..    break;.
5220: 09 63 61 73 65 20 54 4b 5f 43 4f 4e 46 49 47 5f  .case TK_CONFIG_
5230: 41 4e 43 48 4f 52 3a 0a 09 20 20 20 20 72 65 73  ANCHOR:..    res
5240: 75 6c 74 20 3d 20 54 6b 5f 4e 61 6d 65 4f 66 41  ult = Tk_NameOfA
5250: 6e 63 68 6f 72 28 2a 28 28 54 6b 5f 41 6e 63 68  nchor(*((Tk_Anch
5260: 6f 72 20 2a 29 20 70 74 72 29 29 3b 0a 09 20 20  or *) ptr));..  
5270: 20 20 62 72 65 61 6b 3b 0a 09 63 61 73 65 20 54    break;..case T
5280: 4b 5f 43 4f 4e 46 49 47 5f 50 49 58 45 4c 53 3a  K_CONFIG_PIXELS:
5290: 0a 09 20 20 20 20 73 70 72 69 6e 74 66 28 62 75  ..    sprintf(bu
52a0: 66 66 65 72 2c 20 22 25 64 22 2c 20 2a 28 28 69  ffer, "%d", *((i
52b0: 6e 74 20 2a 29 20 70 74 72 29 29 3b 0a 09 20 20  nt *) ptr));..  
52c0: 20 20 72 65 73 75 6c 74 20 3d 20 62 75 66 66 65    result = buffe
52d0: 72 3b 0a 09 20 20 20 20 62 72 65 61 6b 3b 0a 09  r;..    break;..
52e0: 63 61 73 65 20 54 4b 5f 43 4f 4e 46 49 47 5f 4d  case TK_CONFIG_M
52f0: 4d 3a 0a 09 20 20 20 20 54 63 6c 5f 50 72 69 6e  M:..    Tcl_Prin
5300: 74 44 6f 75 62 6c 65 28 69 6e 74 65 72 70 2c 20  tDouble(interp, 
5310: 2a 28 28 64 6f 75 62 6c 65 20 2a 29 20 70 74 72  *((double *) ptr
5320: 29 2c 20 62 75 66 66 65 72 29 3b 0a 09 20 20 20  ), buffer);..   
5330: 20 72 65 73 75 6c 74 20 3d 20 62 75 66 66 65 72   result = buffer
5340: 3b 0a 09 20 20 20 20 62 72 65 61 6b 3b 0a 09 63  ;..    break;..c
5350: 61 73 65 20 54 4b 5f 43 4f 4e 46 49 47 5f 57 49  ase TK_CONFIG_WI
5360: 4e 44 4f 57 3a 20 7b 0a 09 20 20 20 20 54 6b 5f  NDOW: {..    Tk_
5370: 57 69 6e 64 6f 77 20 74 6b 77 69 6e 3b 0a 0a 09  Window tkwin;...
5380: 20 20 20 20 74 6b 77 69 6e 20 3d 20 2a 28 28 54      tkwin = *((T
5390: 6b 5f 57 69 6e 64 6f 77 20 2a 29 20 70 74 72 29  k_Window *) ptr)
53a0: 3b 0a 09 20 20 20 20 69 66 20 28 74 6b 77 69 6e  ;..    if (tkwin
53b0: 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 72 65   != NULL) {...re
53c0: 73 75 6c 74 20 3d 20 54 6b 5f 50 61 74 68 4e 61  sult = Tk_PathNa
53d0: 6d 65 28 74 6b 77 69 6e 29 3b 0a 09 20 20 20 20  me(tkwin);..    
53e0: 7d 0a 09 20 20 20 20 62 72 65 61 6b 3b 0a 09 7d  }..    break;..}
53f0: 0a 09 63 61 73 65 20 54 4b 5f 43 4f 4e 46 49 47  ..case TK_CONFIG
5400: 5f 43 55 53 54 4f 4d 3a 0a 09 20 20 20 20 72 65  _CUSTOM:..    re
5410: 73 75 6c 74 20 3d 20 28 2a 73 70 65 63 50 74 72  sult = (*specPtr
5420: 2d 3e 63 75 73 74 6f 6d 50 74 72 2d 3e 70 72 69  ->customPtr->pri
5430: 6e 74 50 72 6f 63 29 28 0a 09 09 20 20 20 20 73  ntProc)(...    s
5440: 70 65 63 50 74 72 2d 3e 63 75 73 74 6f 6d 50 74  pecPtr->customPt
5450: 72 2d 3e 63 6c 69 65 6e 74 44 61 74 61 2c 20 74  r->clientData, t
5460: 6b 77 69 6e 2c 20 77 69 64 67 52 65 63 2c 0a 09  kwin, widgRec,..
5470: 09 20 20 20 20 73 70 65 63 50 74 72 2d 3e 6f 66  .    specPtr->of
5480: 66 73 65 74 2c 20 66 72 65 65 50 72 6f 63 50 74  fset, freeProcPt
5490: 72 29 3b 0a 09 20 20 20 20 62 72 65 61 6b 3b 0a  r);..    break;.
54a0: 09 64 65 66 61 75 6c 74 3a 20 0a 09 20 20 20 20  .default: ..    
54b0: 72 65 73 75 6c 74 20 3d 20 22 3f 3f 20 75 6e 6b  result = "?? unk
54c0: 6e 6f 77 6e 20 74 79 70 65 20 3f 3f 22 3b 0a 20  nown type ??";. 
54d0: 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20     }.    return 
54e0: 72 65 73 75 6c 74 3b 0a 7d 0a 0c 0a 2f 2a 0a 20  result;.}.../*. 
54f0: 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  *---------------
5500: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5510: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5520: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5530: 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 0a 20 2a 20 54 6b  -------. *. * Tk
5540: 5f 43 6f 6e 66 69 67 75 72 65 56 61 6c 75 65 20  _ConfigureValue 
5550: 2d 2d 0a 20 2a 0a 20 2a 09 54 68 69 73 20 70 72  --. *. *.This pr
5560: 6f 63 65 64 75 72 65 20 72 65 74 75 72 6e 73 20  ocedure returns 
5570: 74 68 65 20 63 75 72 72 65 6e 74 20 76 61 6c 75  the current valu
5580: 65 20 6f 66 20 61 20 63 6f 6e 66 69 67 75 72 61  e of a configura
5590: 74 69 6f 6e 0a 20 2a 09 6f 70 74 69 6f 6e 20 66  tion. *.option f
55a0: 6f 72 20 61 20 77 69 64 67 65 74 2e 0a 20 2a 0a  or a widget.. *.
55b0: 20 2a 20 52 65 73 75 6c 74 73 3a 0a 20 2a 09 54   * Results:. *.T
55c0: 68 65 20 72 65 74 75 72 6e 20 76 61 6c 75 65 20  he return value 
55d0: 69 73 20 61 20 73 74 61 6e 64 61 72 64 20 54 63  is a standard Tc
55e0: 6c 20 63 6f 6d 70 6c 65 74 69 6f 6e 20 63 6f 64  l completion cod
55f0: 65 20 28 54 43 4c 5f 4f 4b 20 6f 72 0a 20 2a 09  e (TCL_OK or. *.
5600: 54 43 4c 5f 45 52 52 4f 52 29 2e 20 20 49 6e 74  TCL_ERROR).  Int
5610: 65 72 70 2d 3e 72 65 73 75 6c 74 20 77 69 6c 6c  erp->result will
5620: 20 62 65 20 73 65 74 20 74 6f 20 68 6f 6c 64 20   be set to hold 
5630: 65 69 74 68 65 72 20 74 68 65 20 76 61 6c 75 65  either the value
5640: 0a 20 2a 09 6f 66 20 74 68 65 20 6f 70 74 69 6f  . *.of the optio
5650: 6e 20 67 69 76 65 6e 20 62 79 20 61 72 67 76 4e  n given by argvN
5660: 61 6d 65 20 28 69 66 20 54 43 4c 5f 4f 4b 20 69  ame (if TCL_OK i
5670: 73 20 72 65 74 75 72 6e 65 64 29 20 6f 72 0a 20  s returned) or. 
5680: 2a 09 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61  *.an error messa
5690: 67 65 20 28 69 66 20 54 43 4c 5f 45 52 52 4f 52  ge (if TCL_ERROR
56a0: 20 69 73 20 72 65 74 75 72 6e 65 64 29 2e 0a 20   is returned).. 
56b0: 2a 0a 20 2a 20 53 69 64 65 20 65 66 66 65 63 74  *. * Side effect
56c0: 73 3a 0a 20 2a 09 4e 6f 6e 65 2e 0a 20 2a 0a 20  s:. *.None.. *. 
56d0: 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  *---------------
56e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
56f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5700: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5710: 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 2f 0a 0a 69 6e 74  -------. */..int
5720: 0a 54 6b 5f 43 6f 6e 66 69 67 75 72 65 56 61 6c  .Tk_ConfigureVal
5730: 75 65 28 69 6e 74 65 72 70 2c 20 74 6b 77 69 6e  ue(interp, tkwin
5740: 2c 20 73 70 65 63 73 2c 20 77 69 64 67 52 65 63  , specs, widgRec
5750: 2c 20 61 72 67 76 4e 61 6d 65 2c 20 66 6c 61 67  , argvName, flag
5760: 73 29 0a 20 20 20 20 54 63 6c 5f 49 6e 74 65 72  s).    Tcl_Inter
5770: 70 20 2a 69 6e 74 65 72 70 3b 09 09 2f 2a 20 49  p *interp;../* I
5780: 6e 74 65 72 70 72 65 74 65 72 20 66 6f 72 20 65  nterpreter for e
5790: 72 72 6f 72 20 72 65 70 6f 72 74 69 6e 67 2e 20  rror reporting. 
57a0: 2a 2f 0a 20 20 20 20 54 6b 5f 57 69 6e 64 6f 77  */.    Tk_Window
57b0: 20 74 6b 77 69 6e 3b 09 09 2f 2a 20 57 69 6e 64   tkwin;../* Wind
57c0: 6f 77 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  ow corresponding
57d0: 20 74 6f 20 77 69 64 67 52 65 63 2e 20 2a 2f 0a   to widgRec. */.
57e0: 20 20 20 20 54 6b 5f 43 6f 6e 66 69 67 53 70 65      Tk_ConfigSpe
57f0: 63 20 2a 73 70 65 63 73 3b 09 2f 2a 20 44 65 73  c *specs;./* Des
5800: 63 72 69 62 65 73 20 6c 65 67 61 6c 20 6f 70 74  cribes legal opt
5810: 69 6f 6e 73 2e 20 2a 2f 0a 20 20 20 20 63 68 61  ions. */.    cha
5820: 72 20 2a 77 69 64 67 52 65 63 3b 09 09 2f 2a 20  r *widgRec;../* 
5830: 52 65 63 6f 72 64 20 77 68 6f 73 65 20 66 69 65  Record whose fie
5840: 6c 64 73 20 63 6f 6e 74 61 69 6e 20 63 75 72 72  lds contain curr
5850: 65 6e 74 0a 09 09 09 09 20 2a 20 76 61 6c 75 65  ent..... * value
5860: 73 20 66 6f 72 20 6f 70 74 69 6f 6e 73 2e 20 2a  s for options. *
5870: 2f 0a 20 20 20 20 63 68 61 72 20 2a 61 72 67 76  /.    char *argv
5880: 4e 61 6d 65 3b 09 09 2f 2a 20 47 69 76 65 73 20  Name;../* Gives 
5890: 74 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65  the command-line
58a0: 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 0a 09 09   name for the...
58b0: 09 09 20 2a 20 6f 70 74 69 6f 6e 20 77 68 6f 73  .. * option whos
58c0: 65 20 76 61 6c 75 65 20 69 73 20 74 6f 20 62 65  e value is to be
58d0: 20 72 65 74 75 72 6e 65 64 2e 20 2a 2f 0a 20 20   returned. */.  
58e0: 20 20 69 6e 74 20 66 6c 61 67 73 3b 09 09 09 2f    int flags;.../
58f0: 2a 20 55 73 65 64 20 74 6f 20 73 70 65 63 69 66  * Used to specif
5900: 79 20 61 64 64 69 74 69 6f 6e 61 6c 20 66 6c 61  y additional fla
5910: 67 73 0a 09 09 09 09 20 2a 20 74 68 61 74 20 6d  gs..... * that m
5920: 75 73 74 20 62 65 20 70 72 65 73 65 6e 74 20 69  ust be present i
5930: 6e 20 63 6f 6e 66 69 67 20 73 70 65 63 73 0a 09  n config specs..
5940: 09 09 09 20 2a 20 66 6f 72 20 74 68 65 6d 20 74  ... * for them t
5950: 6f 20 62 65 20 63 6f 6e 73 69 64 65 72 65 64 2e  o be considered.
5960: 20 2a 2f 0a 7b 0a 20 20 20 20 54 6b 5f 43 6f 6e   */.{.    Tk_Con
5970: 66 69 67 53 70 65 63 20 2a 73 70 65 63 50 74 72  figSpec *specPtr
5980: 3b 0a 20 20 20 20 69 6e 74 20 6e 65 65 64 46 6c  ;.    int needFl
5990: 61 67 73 2c 20 68 61 74 65 46 6c 61 67 73 3b 0a  ags, hateFlags;.
59a0: 0a 20 20 20 20 6e 65 65 64 46 6c 61 67 73 20 3d  .    needFlags =
59b0: 20 66 6c 61 67 73 20 26 20 7e 28 54 4b 5f 43 4f   flags & ~(TK_CO
59c0: 4e 46 49 47 5f 55 53 45 52 5f 42 49 54 20 2d 20  NFIG_USER_BIT - 
59d0: 31 29 3b 0a 20 20 20 20 69 66 20 28 54 6b 5f 44  1);.    if (Tk_D
59e0: 65 70 74 68 28 74 6b 77 69 6e 29 20 3c 3d 20 31  epth(tkwin) <= 1
59f0: 29 20 7b 0a 09 68 61 74 65 46 6c 61 67 73 20 3d  ) {..hateFlags =
5a00: 20 54 4b 5f 43 4f 4e 46 49 47 5f 43 4f 4c 4f 52   TK_CONFIG_COLOR
5a10: 5f 4f 4e 4c 59 3b 0a 20 20 20 20 7d 20 65 6c 73  _ONLY;.    } els
5a20: 65 20 7b 0a 09 68 61 74 65 46 6c 61 67 73 20 3d  e {..hateFlags =
5a30: 20 54 4b 5f 43 4f 4e 46 49 47 5f 4d 4f 4e 4f 5f   TK_CONFIG_MONO_
5a40: 4f 4e 4c 59 3b 0a 20 20 20 20 7d 0a 20 20 20 20  ONLY;.    }.    
5a50: 73 70 65 63 50 74 72 20 3d 20 46 69 6e 64 43 6f  specPtr = FindCo
5a60: 6e 66 69 67 53 70 65 63 28 69 6e 74 65 72 70 2c  nfigSpec(interp,
5a70: 20 73 70 65 63 73 2c 20 61 72 67 76 4e 61 6d 65   specs, argvName
5a80: 2c 20 6e 65 65 64 46 6c 61 67 73 2c 20 68 61 74  , needFlags, hat
5a90: 65 46 6c 61 67 73 29 3b 0a 20 20 20 20 69 66 20  eFlags);.    if 
5aa0: 28 73 70 65 63 50 74 72 20 3d 3d 20 4e 55 4c 4c  (specPtr == NULL
5ab0: 29 20 7b 0a 09 73 69 7a 65 5f 74 20 6c 65 6e 67  ) {..size_t leng
5ac0: 74 68 20 3d 20 73 74 72 6c 65 6e 28 61 72 67 76  th = strlen(argv
5ad0: 4e 61 6d 65 29 3b 0a 09 63 68 61 72 20 2a 2a 6f  Name);..char **o
5ae0: 70 74 69 6f 6e 50 74 72 3b 0a 0a 09 66 6f 72 20  ptionPtr;...for 
5af0: 28 6f 70 74 69 6f 6e 50 74 72 20 3d 20 75 6e 73  (optionPtr = uns
5b00: 75 70 70 6f 72 74 65 64 4f 70 74 69 6f 6e 73 3b  upportedOptions;
5b10: 0a 09 09 2a 6f 70 74 69 6f 6e 50 74 72 20 21 3d  ...*optionPtr !=
5b20: 20 28 63 68 61 72 20 2a 29 20 4e 55 4c 4c 3b 0a   (char *) NULL;.
5b30: 09 09 6f 70 74 69 6f 6e 50 74 72 20 2b 3d 20 32  ..optionPtr += 2
5b40: 29 20 7b 0a 09 20 20 20 20 69 66 20 28 2a 6f 70  ) {..    if (*op
5b50: 74 69 6f 6e 50 74 72 5b 30 5d 20 3d 3d 20 61 72  tionPtr[0] == ar
5b60: 67 76 4e 61 6d 65 5b 30 5d 20 26 26 0a 09 09 20  gvName[0] &&... 
5b70: 20 20 20 73 74 72 6e 63 6d 70 28 2a 6f 70 74 69     strncmp(*opti
5b80: 6f 6e 50 74 72 2c 20 61 72 67 76 4e 61 6d 65 2c  onPtr, argvName,
5b90: 20 6c 65 6e 67 74 68 29 20 3d 3d 20 30 29 20 7b   length) == 0) {
5ba0: 0a 09 09 54 63 6c 5f 53 65 74 52 65 73 75 6c 74  ...Tcl_SetResult
5bb0: 28 69 6e 74 65 72 70 2c 20 2a 28 6f 70 74 69 6f  (interp, *(optio
5bc0: 6e 50 74 72 2b 31 29 2c 20 54 43 4c 5f 53 54 41  nPtr+1), TCL_STA
5bd0: 54 49 43 29 3b 0a 09 09 72 65 74 75 72 6e 20 54  TIC);...return T
5be0: 43 4c 5f 4f 4b 3b 0a 09 20 20 20 20 7d 0a 09 7d  CL_OK;..    }..}
5bf0: 0a 09 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ..return TCL_ERR
5c00: 4f 52 3b 0a 20 20 20 20 7d 0a 20 20 20 20 7b 0a  OR;.    }.    {.
5c10: 20 20 20 20 20 20 63 68 61 72 20 62 75 66 66 65        char buffe
5c20: 72 5b 32 30 30 5d 3b 0a 20 20 20 20 20 20 63 68  r[200];.      ch
5c30: 61 72 20 2a 63 70 3b 0a 20 20 20 20 20 20 54 63  ar *cp;.      Tc
5c40: 6c 5f 46 72 65 65 50 72 6f 63 20 2a 66 70 20 3d  l_FreeProc *fp =
5c50: 20 30 3b 0a 20 20 20 20 20 20 63 70 20 3d 20 46   0;.      cp = F
5c60: 6f 72 6d 61 74 43 6f 6e 66 69 67 56 61 6c 75 65  ormatConfigValue
5c70: 28 69 6e 74 65 72 70 2c 20 74 6b 77 69 6e 2c 20  (interp, tkwin, 
5c80: 73 70 65 63 50 74 72 2c 20 77 69 64 67 52 65 63  specPtr, widgRec
5c90: 2c 0a 09 20 20 20 20 62 75 66 66 65 72 2c 20 26  ,..    buffer, &
5ca0: 66 70 29 3b 0a 20 20 20 20 20 20 54 63 6c 5f 53  fp);.      Tcl_S
5cb0: 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  etResult(interp,
5cc0: 20 63 70 2c 20 66 70 29 3b 0a 20 20 20 20 7d 0a   cp, fp);.    }.
5cd0: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f      return TCL_O
5ce0: 4b 3b 0a 7d 0a 0c 0a 2f 2a 0a 20 2a 2d 2d 2d 2d  K;.}.../*. *----
5cf0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5d00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5d10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5d20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5d30: 2d 2d 0a 20 2a 0a 20 2a 20 54 6b 5f 46 72 65 65  --. *. * Tk_Free
5d40: 4f 70 74 69 6f 6e 73 20 2d 2d 0a 20 2a 0a 20 2a  Options --. *. *
5d50: 09 46 72 65 65 20 75 70 20 61 6c 6c 20 72 65 73  .Free up all res
5d60: 6f 75 72 63 65 73 20 61 73 73 6f 63 69 61 74 65  ources associate
5d70: 64 20 77 69 74 68 20 63 6f 6e 66 69 67 75 72 61  d with configura
5d80: 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 2e 0a 20 2a  tion options.. *
5d90: 0a 20 2a 20 52 65 73 75 6c 74 73 3a 0a 20 2a 09  . * Results:. *.
5da0: 4e 6f 6e 65 2e 0a 20 2a 0a 20 2a 20 53 69 64 65  None.. *. * Side
5db0: 20 65 66 66 65 63 74 73 3a 0a 20 2a 09 41 6e 79   effects:. *.Any
5dc0: 20 72 65 73 6f 75 72 63 65 20 69 6e 20 77 69 64   resource in wid
5dd0: 67 52 65 63 20 74 68 61 74 20 69 73 20 63 6f 6e  gRec that is con
5de0: 74 72 6f 6c 6c 65 64 20 62 79 20 61 20 63 6f 6e  trolled by a con
5df0: 66 69 67 75 72 61 74 69 6f 6e 0a 20 2a 09 6f 70  figuration. *.op
5e00: 74 69 6f 6e 20 28 65 2e 67 2e 20 61 20 54 6b 5f  tion (e.g. a Tk_
5e10: 33 44 42 6f 72 64 65 72 20 6f 72 20 58 43 6f 6c  3DBorder or XCol
5e20: 6f 72 29 20 69 73 20 66 72 65 65 64 20 69 6e 20  or) is freed in 
5e30: 74 68 65 20 61 70 70 72 6f 70 72 69 61 74 65 0a  the appropriate.
5e40: 20 2a 09 66 61 73 68 69 6f 6e 2e 0a 20 2a 0a 20   *.fashion.. *. 
5e50: 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  *---------------
5e60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5e70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5e80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5e90: 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 2f 0a 0a 09 2f 2a  -------. */.../*
5ea0: 20 41 52 47 53 55 53 45 44 20 2a 2f 0a 76 6f 69   ARGSUSED */.voi
5eb0: 64 0a 54 6b 5f 46 72 65 65 4f 70 74 69 6f 6e 73  d.Tk_FreeOptions
5ec0: 28 73 70 65 63 73 2c 20 77 69 64 67 52 65 63 2c  (specs, widgRec,
5ed0: 20 6e 65 65 64 46 6c 61 67 73 29 0a 20 20 20 20   needFlags).    
5ee0: 54 6b 5f 43 6f 6e 66 69 67 53 70 65 63 20 2a 73  Tk_ConfigSpec *s
5ef0: 70 65 63 73 3b 09 2f 2a 20 44 65 73 63 72 69 62  pecs;./* Describ
5f00: 65 73 20 6c 65 67 61 6c 20 6f 70 74 69 6f 6e 73  es legal options
5f10: 2e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 77  . */.    char *w
5f20: 69 64 67 52 65 63 3b 09 09 2f 2a 20 52 65 63 6f  idgRec;../* Reco
5f30: 72 64 20 77 68 6f 73 65 20 66 69 65 6c 64 73 20  rd whose fields 
5f40: 63 6f 6e 74 61 69 6e 20 63 75 72 72 65 6e 74 0a  contain current.
5f50: 09 09 09 09 20 2a 20 76 61 6c 75 65 73 20 66 6f  .... * values fo
5f60: 72 20 6f 70 74 69 6f 6e 73 2e 20 2a 2f 0a 20 20  r options. */.  
5f70: 20 20 69 6e 74 20 6e 65 65 64 46 6c 61 67 73 3b    int needFlags;
5f80: 09 09 2f 2a 20 55 73 65 64 20 74 6f 20 73 70 65  ../* Used to spe
5f90: 63 69 66 79 20 61 64 64 69 74 69 6f 6e 61 6c 20  cify additional 
5fa0: 66 6c 61 67 73 0a 09 09 09 09 20 2a 20 74 68 61  flags..... * tha
5fb0: 74 20 6d 75 73 74 20 62 65 20 70 72 65 73 65 6e  t must be presen
5fc0: 74 20 69 6e 20 63 6f 6e 66 69 67 20 73 70 65 63  t in config spec
5fd0: 73 0a 09 09 09 09 20 2a 20 66 6f 72 20 74 68 65  s..... * for the
5fe0: 6d 20 74 6f 20 62 65 20 63 6f 6e 73 69 64 65 72  m to be consider
5ff0: 65 64 2e 20 2a 2f 0a 7b 0a 20 20 20 20 72 65 67  ed. */.{.    reg
6000: 69 73 74 65 72 20 54 6b 5f 43 6f 6e 66 69 67 53  ister Tk_ConfigS
6010: 70 65 63 20 2a 73 70 65 63 50 74 72 3b 0a 20 20  pec *specPtr;.  
6020: 20 20 63 68 61 72 20 2a 70 74 72 3b 0a 0a 20 20    char *ptr;..  
6030: 20 20 66 6f 72 20 28 73 70 65 63 50 74 72 20 3d    for (specPtr =
6040: 20 73 70 65 63 73 3b 20 73 70 65 63 50 74 72 2d   specs; specPtr-
6050: 3e 74 79 70 65 20 21 3d 20 54 4b 5f 43 4f 4e 46  >type != TK_CONF
6060: 49 47 5f 45 4e 44 3b 20 73 70 65 63 50 74 72 2b  IG_END; specPtr+
6070: 2b 29 20 7b 0a 09 69 66 20 28 28 73 70 65 63 50  +) {..if ((specP
6080: 74 72 2d 3e 73 70 65 63 46 6c 61 67 73 20 26 20  tr->specFlags & 
6090: 6e 65 65 64 46 6c 61 67 73 29 20 21 3d 20 6e 65  needFlags) != ne
60a0: 65 64 46 6c 61 67 73 29 20 7b 0a 09 20 20 20 20  edFlags) {..    
60b0: 63 6f 6e 74 69 6e 75 65 3b 0a 09 7d 0a 09 70 74  continue;..}..pt
60c0: 72 20 3d 20 77 69 64 67 52 65 63 20 2b 20 73 70  r = widgRec + sp
60d0: 65 63 50 74 72 2d 3e 6f 66 66 73 65 74 3b 0a 09  ecPtr->offset;..
60e0: 73 77 69 74 63 68 20 28 73 70 65 63 50 74 72 2d  switch (specPtr-
60f0: 3e 74 79 70 65 29 20 7b 0a 09 20 20 20 20 63 61  >type) {..    ca
6100: 73 65 20 54 4b 5f 43 4f 4e 46 49 47 5f 53 54 52  se TK_CONFIG_STR
6110: 49 4e 47 3a 0a 09 09 69 66 20 28 2a 28 28 63 68  ING:...if (*((ch
6120: 61 72 20 2a 2a 29 20 70 74 72 29 20 21 3d 20 4e  ar **) ptr) != N
6130: 55 4c 4c 29 20 7b 0a 09 09 20 20 20 20 63 6b 66  ULL) {...    ckf
6140: 72 65 65 28 2a 28 28 63 68 61 72 20 2a 2a 29 20  ree(*((char **) 
6150: 70 74 72 29 29 3b 0a 09 09 20 20 20 20 2a 28 28  ptr));...    *((
6160: 63 68 61 72 20 2a 2a 29 20 70 74 72 29 20 3d 20  char **) ptr) = 
6170: 4e 55 4c 4c 3b 0a 09 09 7d 0a 09 09 62 72 65 61  NULL;...}...brea
6180: 6b 3b 0a 09 7d 0a 20 20 20 20 7d 0a 7d 0a        k;..}.    }.}.