Hex Artifact Content

Artifact d0839e879e27375aed65b642dba2b29d955d0a06:


0000: 2f 2a 20 0a 20 2a 20 74 6b 4c 69 73 74 62 6f 78  /* . * tkListbox
0010: 2e 63 20 28 43 54 6b 29 20 2d 2d 0a 20 2a 0a 20  .c (CTk) --. *. 
0020: 2a 09 54 68 69 73 20 6d 6f 64 75 6c 65 20 69 6d  *.This module im
0030: 70 6c 65 6d 65 6e 74 73 20 6c 69 73 74 62 6f 78  plements listbox
0040: 20 77 69 64 67 65 74 73 20 66 6f 72 20 74 68 65   widgets for the
0050: 20 54 6b 0a 20 2a 09 74 6f 6f 6c 6b 69 74 2e 20   Tk. *.toolkit. 
0060: 20 41 20 6c 69 73 74 62 6f 78 20 64 69 73 70 6c   A listbox displ
0070: 61 79 73 20 61 20 63 6f 6c 6c 65 63 74 69 6f 6e  ays a collection
0080: 20 6f 66 20 73 74 72 69 6e 67 73 2c 0a 20 2a 09   of strings,. *.
0090: 6f 6e 65 20 70 65 72 20 6c 69 6e 65 2c 20 61 6e  one per line, an
00a0: 64 20 70 72 6f 76 69 64 65 73 20 73 63 72 6f 6c  d provides scrol
00b0: 6c 69 6e 67 20 61 6e 64 20 73 65 6c 65 63 74 69  ling and selecti
00c0: 6f 6e 2e 0a 20 2a 0a 20 2a 20 43 6f 70 79 72 69  on.. *. * Copyri
00d0: 67 68 74 20 28 63 29 20 31 39 39 30 2d 31 39 39  ght (c) 1990-199
00e0: 34 20 54 68 65 20 52 65 67 65 6e 74 73 20 6f 66  4 The Regents of
00f0: 20 74 68 65 20 55 6e 69 76 65 72 73 69 74 79 20   the University 
0100: 6f 66 20 43 61 6c 69 66 6f 72 6e 69 61 2e 0a 20  of California.. 
0110: 2a 20 43 6f 70 79 72 69 67 68 74 20 28 63 29 20  * Copyright (c) 
0120: 31 39 39 34 2d 31 39 39 35 20 53 75 6e 20 4d 69  1994-1995 Sun Mi
0130: 63 72 6f 73 79 73 74 65 6d 73 2c 20 49 6e 63 2e  crosystems, Inc.
0140: 0a 20 2a 20 43 6f 70 79 72 69 67 68 74 20 28 63  . * Copyright (c
0150: 29 20 31 39 39 34 2d 31 39 39 35 20 43 6c 65 76  ) 1994-1995 Clev
0160: 65 6c 61 6e 64 20 43 6c 69 6e 69 63 20 46 6f 75  eland Clinic Fou
0170: 6e 64 61 74 69 6f 6e 0a 20 2a 0a 20 2a 20 53 65  ndation. *. * Se
0180: 65 20 74 68 65 20 66 69 6c 65 20 22 6c 69 63 65  e the file "lice
0190: 6e 73 65 2e 74 65 72 6d 73 22 20 66 6f 72 20 69  nse.terms" for i
01a0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 6f 6e 20 75 73  nformation on us
01b0: 61 67 65 20 61 6e 64 20 72 65 64 69 73 74 72 69  age and redistri
01c0: 62 75 74 69 6f 6e 0a 20 2a 20 6f 66 20 74 68 69  bution. * of thi
01d0: 73 20 66 69 6c 65 2c 20 61 6e 64 20 66 6f 72 20  s file, and for 
01e0: 61 20 44 49 53 43 4c 41 49 4d 45 52 20 4f 46 20  a DISCLAIMER OF 
01f0: 41 4c 4c 20 57 41 52 52 41 4e 54 49 45 53 2e 0a  ALL WARRANTIES..
0200: 20 2a 0a 20 2a 20 40 28 23 29 20 24 49 64 3a 20   *. * @(#) $Id: 
0210: 63 74 6b 2e 73 68 61 72 2c 76 20 31 2e 35 30 20  ctk.shar,v 1.50 
0220: 31 39 39 36 2f 30 31 2f 31 35 20 31 34 3a 34 37  1996/01/15 14:47
0230: 3a 31 36 20 61 6e 64 72 65 77 6d 20 45 78 70 20  :16 andrewm Exp 
0240: 61 6e 64 72 65 77 6d 20 24 0a 20 2a 2f 0a 0a 23  andrewm $. */..#
0250: 69 6e 63 6c 75 64 65 20 22 74 6b 50 6f 72 74 2e  include "tkPort.
0260: 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 64 65 66  h".#include "def
0270: 61 75 6c 74 2e 68 22 0a 23 69 6e 63 6c 75 64 65  ault.h".#include
0280: 20 22 74 6b 49 6e 74 2e 68 22 0a 0a 2f 2a 0a 20   "tkInt.h"../*. 
0290: 2a 20 4f 6e 65 20 72 65 63 6f 72 64 20 6f 66 20  * One record of 
02a0: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 79  the following ty
02b0: 70 65 20 69 73 20 6b 65 70 74 20 66 6f 72 20 65  pe is kept for e
02c0: 61 63 68 20 65 6c 65 6d 65 6e 74 0a 20 2a 20 61  ach element. * a
02d0: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61  ssociated with a
02e0: 20 6c 69 73 74 62 6f 78 20 77 69 64 67 65 74 3a   listbox widget:
02f0: 0a 20 2a 2f 0a 0a 74 79 70 65 64 65 66 20 73 74  . */..typedef st
0300: 72 75 63 74 20 45 6c 65 6d 65 6e 74 20 7b 0a 20  ruct Element {. 
0310: 20 20 20 69 6e 74 20 74 65 78 74 4c 65 6e 67 74     int textLengt
0320: 68 3b 09 09 2f 2a 20 23 20 6e 6f 6e 2d 4e 55 4c  h;../* # non-NUL
0330: 4c 20 63 68 61 72 61 63 74 65 72 73 20 69 6e 20  L characters in 
0340: 74 65 78 74 2e 20 2a 2f 0a 20 20 20 20 69 6e 74  text. */.    int
0350: 20 73 65 6c 65 63 74 65 64 3b 09 09 2f 2a 20 31   selected;../* 1
0360: 20 6d 65 61 6e 73 20 74 68 69 73 20 69 74 65 6d   means this item
0370: 20 69 73 20 73 65 6c 65 63 74 65 64 2c 20 30 20   is selected, 0 
0380: 6d 65 61 6e 73 0a 09 09 09 09 20 2a 20 69 74 20  means..... * it 
0390: 69 73 6e 27 74 2e 20 2a 2f 0a 20 20 20 20 73 74  isn't. */.    st
03a0: 72 75 63 74 20 45 6c 65 6d 65 6e 74 20 2a 6e 65  ruct Element *ne
03b0: 78 74 50 74 72 3b 09 2f 2a 20 4e 65 78 74 20 69  xtPtr;./* Next i
03c0: 6e 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 65 6c  n list of all el
03d0: 65 6d 65 6e 74 73 20 6f 66 20 74 68 69 73 0a 09  ements of this..
03e0: 09 09 09 20 2a 20 6c 69 73 74 62 6f 78 2c 20 6f  ... * listbox, o
03f0: 72 20 4e 55 4c 4c 20 66 6f 72 20 6c 61 73 74 20  r NULL for last 
0400: 65 6c 65 6d 65 6e 74 2e 20 2a 2f 0a 20 20 20 20  element. */.    
0410: 63 68 61 72 20 74 65 78 74 5b 34 5d 3b 09 09 2f  char text[4];../
0420: 2a 20 43 68 61 72 61 63 74 65 72 73 20 6f 66 20  * Characters of 
0430: 74 68 69 73 20 65 6c 65 6d 65 6e 74 2c 20 4e 55  this element, NU
0440: 4c 4c 2d 0a 09 09 09 09 20 2a 20 74 65 72 6d 69  LL-..... * termi
0450: 6e 61 74 65 64 2e 20 20 54 68 65 20 61 63 74 75  nated.  The actu
0460: 61 6c 20 73 70 61 63 65 20 61 6c 6c 6f 63 61 74  al space allocat
0470: 65 64 0a 09 09 09 09 20 2a 20 68 65 72 65 20 77  ed..... * here w
0480: 69 6c 6c 20 62 65 20 61 73 20 6c 61 72 67 65 20  ill be as large 
0490: 61 73 20 6e 65 65 64 65 64 20 28 3e 20 34 2c 0a  as needed (> 4,.
04a0: 09 09 09 09 20 2a 20 6d 6f 73 74 20 6c 69 6b 65  .... * most like
04b0: 6c 79 29 2e 20 20 4d 75 73 74 20 62 65 20 74 68  ly).  Must be th
04c0: 65 20 6c 61 73 74 20 66 69 65 6c 64 0a 09 09 09  e last field....
04d0: 09 20 2a 20 6f 66 20 74 68 65 20 72 65 63 6f 72  . * of the recor
04e0: 64 2e 20 2a 2f 0a 7d 20 45 6c 65 6d 65 6e 74 3b  d. */.} Element;
04f0: 0a 0a 23 64 65 66 69 6e 65 20 45 6c 65 6d 65 6e  ..#define Elemen
0500: 74 53 69 7a 65 28 73 74 72 69 6e 67 4c 65 6e 67  tSize(stringLeng
0510: 74 68 29 20 5c 0a 09 28 28 75 6e 73 69 67 6e 65  th) \..((unsigne
0520: 64 29 20 28 73 69 7a 65 6f 66 28 45 6c 65 6d 65  d) (sizeof(Eleme
0530: 6e 74 29 20 2d 20 33 20 2b 20 73 74 72 69 6e 67  nt) - 3 + string
0540: 4c 65 6e 67 74 68 29 29 0a 0a 2f 2a 0a 20 2a 20  Length))../*. * 
0550: 41 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65  A data structure
0560: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
0570: 67 20 74 79 70 65 20 69 73 20 6b 65 70 74 20 66  g type is kept f
0580: 6f 72 20 65 61 63 68 20 6c 69 73 74 62 6f 78 0a  or each listbox.
0590: 20 2a 20 77 69 64 67 65 74 20 6d 61 6e 61 67 65   * widget manage
05a0: 64 20 62 79 20 74 68 69 73 20 66 69 6c 65 3a 0a  d by this file:.
05b0: 20 2a 2f 0a 0a 74 79 70 65 64 65 66 20 73 74 72   */..typedef str
05c0: 75 63 74 20 7b 0a 20 20 20 20 54 6b 5f 57 69 6e  uct {.    Tk_Win
05d0: 64 6f 77 20 74 6b 77 69 6e 3b 09 09 2f 2a 20 57  dow tkwin;../* W
05e0: 69 6e 64 6f 77 20 74 68 61 74 20 65 6d 62 6f 64  indow that embod
05f0: 69 65 73 20 74 68 65 20 6c 69 73 74 62 6f 78 2e  ies the listbox.
0600: 20 20 4e 55 4c 4c 0a 09 09 09 09 20 2a 20 6d 65    NULL..... * me
0610: 61 6e 73 20 74 68 61 74 20 74 68 65 20 77 69 6e  ans that the win
0620: 64 6f 77 20 68 61 73 20 62 65 65 6e 20 64 65 73  dow has been des
0630: 74 72 6f 79 65 64 0a 09 09 09 09 20 2a 20 62 75  troyed..... * bu
0640: 74 20 74 68 65 20 64 61 74 61 20 73 74 72 75 63  t the data struc
0650: 74 75 72 65 73 20 68 61 76 65 6e 27 74 20 79 65  tures haven't ye
0660: 74 20 62 65 65 6e 0a 09 09 09 09 20 2a 20 63 6c  t been..... * cl
0670: 65 61 6e 65 64 20 75 70 2e 2a 2f 0a 20 20 20 20  eaned up.*/.    
0680: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
0690: 72 70 3b 09 09 2f 2a 20 49 6e 74 65 72 70 72 65  rp;../* Interpre
06a0: 74 65 72 20 61 73 73 6f 63 69 61 74 65 64 20 77  ter associated w
06b0: 69 74 68 20 6c 69 73 74 62 6f 78 2e 20 2a 2f 0a  ith listbox. */.
06c0: 20 20 20 20 54 63 6c 5f 43 6f 6d 6d 61 6e 64 20      Tcl_Command 
06d0: 77 69 64 67 65 74 43 6d 64 3b 09 2f 2a 20 54 6f  widgetCmd;./* To
06e0: 6b 65 6e 20 66 6f 72 20 6c 69 73 74 62 6f 78 27  ken for listbox'
06f0: 73 20 77 69 64 67 65 74 20 63 6f 6d 6d 61 6e 64  s widget command
0700: 2e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 75 6d  . */.    int num
0710: 45 6c 65 6d 65 6e 74 73 3b 09 09 2f 2a 20 54 6f  Elements;../* To
0720: 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 65 6c  tal number of el
0730: 65 6d 65 6e 74 73 20 69 6e 20 74 68 69 73 20 6c  ements in this l
0740: 69 73 74 62 6f 78 2e 20 2a 2f 0a 20 20 20 20 45  istbox. */.    E
0750: 6c 65 6d 65 6e 74 20 2a 66 69 72 73 74 50 74 72  lement *firstPtr
0760: 3b 09 09 2f 2a 20 46 69 72 73 74 20 69 6e 20 6c  ;../* First in l
0770: 69 73 74 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20  ist of elements 
0780: 28 4e 55 4c 4c 20 69 66 20 6e 6f 0a 09 09 09 09  (NULL if no.....
0790: 20 2a 20 65 6c 65 6d 65 6e 74 73 29 2e 20 2a 2f   * elements). */
07a0: 0a 20 20 20 20 45 6c 65 6d 65 6e 74 20 2a 6c 61  .    Element *la
07b0: 73 74 50 74 72 3b 09 09 2f 2a 20 4c 61 73 74 20  stPtr;../* Last 
07c0: 69 6e 20 6c 69 73 74 20 6f 66 20 65 6c 65 6d 65  in list of eleme
07d0: 6e 74 73 20 28 4e 55 4c 4c 20 69 66 20 6e 6f 0a  nts (NULL if no.
07e0: 09 09 09 09 20 2a 20 65 6c 65 6d 65 6e 74 73 29  .... * elements)
07f0: 2e 20 2a 2f 0a 0a 20 20 20 20 2f 2a 0a 20 20 20  . */..    /*.   
0800: 20 20 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20    * Information 
0810: 75 73 65 64 20 77 68 65 6e 20 64 69 73 70 6c 61  used when displa
0820: 79 69 6e 67 20 77 69 64 67 65 74 3a 0a 20 20 20  ying widget:.   
0830: 20 20 2a 2f 0a 0a 20 20 20 20 69 6e 74 20 62 6f    */..    int bo
0840: 72 64 65 72 57 69 64 74 68 3b 09 09 2f 2a 20 57  rderWidth;../* W
0850: 69 64 74 68 20 6f 66 20 33 2d 44 20 62 6f 72 64  idth of 3-D bord
0860: 65 72 20 61 72 6f 75 6e 64 20 77 69 6e 64 6f 77  er around window
0870: 2e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 77 69 64  . */.    int wid
0880: 74 68 3b 09 09 09 2f 2a 20 44 65 73 69 72 65 64  th;.../* Desired
0890: 20 77 69 64 74 68 20 6f 66 20 77 69 6e 64 6f 77   width of window
08a0: 2c 20 69 6e 20 63 68 61 72 61 63 74 65 72 73 2e  , in characters.
08b0: 20 2a 2f 0a 20 20 20 20 69 6e 74 20 68 65 69 67   */.    int heig
08c0: 68 74 3b 09 09 09 2f 2a 20 44 65 73 69 72 65 64  ht;.../* Desired
08d0: 20 68 65 69 67 68 74 20 6f 66 20 77 69 6e 64 6f   height of windo
08e0: 77 2c 20 69 6e 20 6c 69 6e 65 73 2e 20 2a 2f 0a  w, in lines. */.
08f0: 20 20 20 20 69 6e 74 20 74 6f 70 49 6e 64 65 78      int topIndex
0900: 3b 09 09 2f 2a 20 49 6e 64 65 78 20 6f 66 20 74  ;../* Index of t
0910: 6f 70 2d 6d 6f 73 74 20 65 6c 65 6d 65 6e 74 20  op-most element 
0920: 76 69 73 69 62 6c 65 20 69 6e 0a 09 09 09 09 20  visible in..... 
0930: 2a 20 77 69 6e 64 6f 77 2e 20 2a 2f 0a 20 20 20  * window. */.   
0940: 20 69 6e 74 20 6e 75 6d 4c 69 6e 65 73 3b 09 09   int numLines;..
0950: 2f 2a 20 41 63 74 75 61 6c 20 6e 75 6d 62 65 72  /* Actual number
0960: 20 6f 66 20 6c 69 6e 65 73 20 28 65 6c 65 6d 65   of lines (eleme
0970: 6e 74 73 29 20 74 68 61 74 20 0a 09 09 09 09 20  nts) that ..... 
0980: 2a 20 63 75 72 72 65 6e 74 6c 79 20 66 69 74 20  * currently fit 
0990: 69 6e 20 77 69 6e 64 6f 77 2e 20 2a 2f 0a 0a 20  in window. */.. 
09a0: 20 20 20 2f 2a 0a 20 20 20 20 20 2a 20 49 6e 66     /*.     * Inf
09b0: 6f 72 6d 61 74 69 6f 6e 20 74 6f 20 73 75 70 70  ormation to supp
09c0: 6f 72 74 20 68 6f 72 69 7a 6f 6e 74 61 6c 20 73  ort horizontal s
09d0: 63 72 6f 6c 6c 69 6e 67 3a 0a 20 20 20 20 20 2a  crolling:.     *
09e0: 2f 0a 0a 20 20 20 20 69 6e 74 20 6d 61 78 57 69  /..    int maxWi
09f0: 64 74 68 3b 09 09 2f 2a 20 57 69 64 74 68 20 28  dth;../* Width (
0a00: 69 6e 20 70 69 78 65 6c 73 29 20 6f 66 20 77 69  in pixels) of wi
0a10: 64 65 73 74 20 73 74 72 69 6e 67 20 69 6e 0a 09  dest string in..
0a20: 09 09 09 20 2a 20 6c 69 73 74 62 6f 78 2e 20 2a  ... * listbox. *
0a30: 2f 0a 20 20 20 20 69 6e 74 20 78 4f 66 66 73 65  /.    int xOffse
0a40: 74 3b 09 09 2f 2a 20 54 68 65 20 6c 65 66 74 20  t;../* The left 
0a50: 65 64 67 65 20 6f 66 20 65 61 63 68 20 73 74 72  edge of each str
0a60: 69 6e 67 20 69 6e 20 74 68 65 0a 09 09 09 09 20  ing in the..... 
0a70: 2a 20 6c 69 73 74 62 6f 78 20 69 73 20 6f 66 66  * listbox is off
0a80: 73 65 74 20 74 6f 20 74 68 65 20 6c 65 66 74 20  set to the left 
0a90: 62 79 20 74 68 69 73 0a 09 09 09 09 20 2a 20 6d  by this..... * m
0aa0: 61 6e 79 20 70 69 78 65 6c 73 20 28 30 20 6d 65  any pixels (0 me
0ab0: 61 6e 73 20 6e 6f 20 6f 66 66 73 65 74 2c 20 70  ans no offset, p
0ac0: 6f 73 69 74 69 76 65 0a 09 09 09 09 20 2a 20 6d  ositive..... * m
0ad0: 65 61 6e 73 20 74 68 65 72 65 20 69 73 20 61 6e  eans there is an
0ae0: 20 6f 66 66 73 65 74 29 2e 20 2a 2f 0a 0a 20 20   offset). */..  
0af0: 20 20 2f 2a 0a 20 20 20 20 20 2a 20 49 6e 66 6f    /*.     * Info
0b00: 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 77 68  rmation about wh
0b10: 61 74 27 73 20 73 65 6c 65 63 74 65 64 20 6f 72  at's selected or
0b20: 20 61 63 74 69 76 65 2c 20 69 66 20 61 6e 79 2e   active, if any.
0b30: 0a 20 20 20 20 20 2a 2f 0a 0a 20 20 20 20 54 6b  .     */..    Tk
0b40: 5f 55 69 64 20 73 65 6c 65 63 74 4d 6f 64 65 3b  _Uid selectMode;
0b50: 09 09 2f 2a 20 53 65 6c 65 63 74 69 6f 6e 20 73  ../* Selection s
0b60: 74 79 6c 65 3a 20 73 69 6e 67 6c 65 2c 20 62 72  tyle: single, br
0b70: 6f 77 73 65 2c 20 6d 75 6c 74 69 70 6c 65 2c 0a  owse, multiple,.
0b80: 09 09 09 09 20 2a 20 6f 72 20 65 78 74 65 6e 64  .... * or extend
0b90: 65 64 2e 20 20 54 68 69 73 20 76 61 6c 75 65 20  ed.  This value 
0ba0: 69 73 6e 27 74 20 75 73 65 64 20 69 6e 20 43 0a  isn't used in C.
0bb0: 09 09 09 09 20 2a 20 63 6f 64 65 2c 20 62 75 74  .... * code, but
0bc0: 20 74 68 65 20 54 63 6c 20 62 69 6e 64 69 6e 67   the Tcl binding
0bd0: 73 20 75 73 65 20 69 74 2e 20 2a 2f 0a 20 20 20  s use it. */.   
0be0: 20 69 6e 74 20 6e 75 6d 53 65 6c 65 63 74 65 64   int numSelected
0bf0: 3b 09 09 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20  ;../* Number of 
0c00: 65 6c 65 6d 65 6e 74 73 20 63 75 72 72 65 6e 74  elements current
0c10: 6c 79 20 73 65 6c 65 63 74 65 64 2e 20 2a 2f 0a  ly selected. */.
0c20: 20 20 20 20 69 6e 74 20 73 65 6c 65 63 74 41 6e      int selectAn
0c30: 63 68 6f 72 3b 09 09 2f 2a 20 46 69 78 65 64 20  chor;../* Fixed 
0c40: 65 6e 64 20 6f 66 20 73 65 6c 65 63 74 69 6f 6e  end of selection
0c50: 20 28 69 2e 65 2e 20 65 6c 65 6d 65 6e 74 0a 09   (i.e. element..
0c60: 09 09 09 20 2a 20 61 74 20 77 68 69 63 68 20 73  ... * at which s
0c70: 65 6c 65 63 74 69 6f 6e 20 77 61 73 20 73 74 61  election was sta
0c80: 72 74 65 64 2e 29 20 2a 2f 0a 20 20 20 20 69 6e  rted.) */.    in
0c90: 74 20 61 63 74 69 76 65 3b 09 09 09 2f 2a 20 49  t active;.../* I
0ca0: 6e 64 65 78 20 6f 66 20 22 61 63 74 69 76 65 22  ndex of "active"
0cb0: 20 65 6c 65 6d 65 6e 74 20 28 74 68 65 20 6f 6e   element (the on
0cc0: 65 20 74 68 61 74 0a 09 09 09 09 20 2a 20 68 61  e that..... * ha
0cd0: 73 20 62 65 65 6e 20 73 65 6c 65 63 74 65 64 20  s been selected 
0ce0: 62 79 20 6b 65 79 62 6f 61 72 64 20 74 72 61 76  by keyboard trav
0cf0: 65 72 73 61 6c 29 2e 0a 09 09 09 09 20 2a 20 2d  ersal)...... * -
0d00: 31 20 6d 65 61 6e 73 20 6e 6f 6e 65 2e 20 2a 2f  1 means none. */
0d10: 0a 0a 20 20 20 20 2f 2a 0a 20 20 20 20 20 2a 20  ..    /*.     * 
0d20: 4d 69 73 63 65 6c 6c 61 6e 65 6f 75 73 20 69 6e  Miscellaneous in
0d30: 66 6f 72 6d 61 74 69 6f 6e 3a 0a 20 20 20 20 20  formation:.     
0d40: 2a 2f 0a 0a 20 20 20 20 63 68 61 72 20 2a 74 61  */..    char *ta
0d50: 6b 65 46 6f 63 75 73 3b 09 09 2f 2a 20 56 61 6c  keFocus;../* Val
0d60: 75 65 20 6f 66 20 2d 74 61 6b 65 66 6f 63 75 73  ue of -takefocus
0d70: 20 6f 70 74 69 6f 6e 3b 20 20 6e 6f 74 20 75 73   option;  not us
0d80: 65 64 20 69 6e 0a 09 09 09 09 20 2a 20 74 68 65  ed in..... * the
0d90: 20 43 20 63 6f 64 65 2c 20 62 75 74 20 75 73 65   C code, but use
0da0: 64 20 62 79 20 6b 65 79 62 6f 61 72 64 20 74 72  d by keyboard tr
0db0: 61 76 65 72 73 61 6c 0a 09 09 09 09 20 2a 20 73  aversal..... * s
0dc0: 63 72 69 70 74 73 2e 20 20 4d 61 6c 6c 6f 63 27  cripts.  Malloc'
0dd0: 65 64 2c 20 62 75 74 20 6d 61 79 20 62 65 20 4e  ed, but may be N
0de0: 55 4c 4c 2e 20 2a 2f 0a 20 20 20 20 63 68 61 72  ULL. */.    char
0df0: 20 2a 79 53 63 72 6f 6c 6c 43 6d 64 3b 09 09 2f   *yScrollCmd;../
0e00: 2a 20 43 6f 6d 6d 61 6e 64 20 70 72 65 66 69 78  * Command prefix
0e10: 20 66 6f 72 20 63 6f 6d 6d 75 6e 69 63 61 74 69   for communicati
0e20: 6e 67 20 77 69 74 68 0a 09 09 09 09 20 2a 20 76  ng with..... * v
0e30: 65 72 74 69 63 61 6c 20 73 63 72 6f 6c 6c 62 61  ertical scrollba
0e40: 72 2e 20 20 4e 55 4c 4c 20 6d 65 61 6e 73 20 6e  r.  NULL means n
0e50: 6f 20 63 6f 6d 6d 61 6e 64 0a 09 09 09 09 20 2a  o command..... *
0e60: 20 74 6f 20 69 73 73 75 65 2e 20 20 4d 61 6c 6c   to issue.  Mall
0e70: 6f 63 27 65 64 2e 20 2a 2f 0a 20 20 20 20 63 68  oc'ed. */.    ch
0e80: 61 72 20 2a 78 53 63 72 6f 6c 6c 43 6d 64 3b 09  ar *xScrollCmd;.
0e90: 09 2f 2a 20 43 6f 6d 6d 61 6e 64 20 70 72 65 66  ./* Command pref
0ea0: 69 78 20 66 6f 72 20 63 6f 6d 6d 75 6e 69 63 61  ix for communica
0eb0: 74 69 6e 67 20 77 69 74 68 0a 09 09 09 09 20 2a  ting with..... *
0ec0: 20 68 6f 72 69 7a 6f 6e 74 61 6c 20 73 63 72 6f   horizontal scro
0ed0: 6c 6c 62 61 72 2e 20 20 4e 55 4c 4c 20 6d 65 61  llbar.  NULL mea
0ee0: 6e 73 20 6e 6f 20 63 6f 6d 6d 61 6e 64 0a 09 09  ns no command...
0ef0: 09 09 20 2a 20 74 6f 20 69 73 73 75 65 2e 20 20  .. * to issue.  
0f00: 4d 61 6c 6c 6f 63 27 65 64 2e 20 2a 2f 0a 20 20  Malloc'ed. */.  
0f10: 20 20 69 6e 74 20 66 6c 61 67 73 3b 09 09 09 2f    int flags;.../
0f20: 2a 20 56 61 72 69 6f 75 73 20 66 6c 61 67 20 62  * Various flag b
0f30: 69 74 73 3a 20 20 73 65 65 20 62 65 6c 6f 77 20  its:  see below 
0f40: 66 6f 72 0a 09 09 09 09 20 2a 20 64 65 66 69 6e  for..... * defin
0f50: 69 74 69 6f 6e 73 2e 20 2a 2f 0a 7d 20 4c 69 73  itions. */.} Lis
0f60: 74 62 6f 78 3b 0a 0a 2f 2a 0a 20 2a 20 46 6c 61  tbox;../*. * Fla
0f70: 67 20 62 69 74 73 20 66 6f 72 20 6c 69 73 74 62  g bits for listb
0f80: 6f 78 65 73 3a 0a 20 2a 0a 20 2a 20 52 45 44 52  oxes:. *. * REDR
0f90: 41 57 5f 50 45 4e 44 49 4e 47 3a 09 09 4e 6f 6e  AW_PENDING:..Non
0fa0: 2d 7a 65 72 6f 20 6d 65 61 6e 73 20 61 20 44 6f  -zero means a Do
0fb0: 57 68 65 6e 49 64 6c 65 20 68 61 6e 64 6c 65 72  WhenIdle handler
0fc0: 0a 20 2a 09 09 09 09 68 61 73 20 61 6c 72 65 61  . *....has alrea
0fd0: 64 79 20 62 65 65 6e 20 71 75 65 75 65 64 20 74  dy been queued t
0fe0: 6f 20 72 65 64 72 61 77 0a 20 2a 09 09 09 09 74  o redraw. *....t
0ff0: 68 69 73 20 77 69 6e 64 6f 77 2e 0a 20 2a 20 55  his window.. * U
1000: 50 44 41 54 45 5f 56 5f 53 43 52 4f 4c 4c 42 41  PDATE_V_SCROLLBA
1010: 52 3a 09 09 4e 6f 6e 2d 7a 65 72 6f 20 6d 65 61  R:..Non-zero mea
1020: 6e 73 20 76 65 72 74 69 63 61 6c 20 73 63 72 6f  ns vertical scro
1030: 6c 6c 62 61 72 20 6e 65 65 64 73 0a 20 2a 09 09  llbar needs. *..
1040: 09 09 74 6f 20 62 65 20 75 70 64 61 74 65 64 2e  ..to be updated.
1050: 0a 20 2a 20 55 50 44 41 54 45 5f 48 5f 53 43 52  . * UPDATE_H_SCR
1060: 4f 4c 4c 42 41 52 3a 09 09 4e 6f 6e 2d 7a 65 72  OLLBAR:..Non-zer
1070: 6f 20 6d 65 61 6e 73 20 68 6f 72 69 7a 6f 6e 74  o means horizont
1080: 61 6c 20 73 63 72 6f 6c 6c 62 61 72 20 6e 65 65  al scrollbar nee
1090: 64 73 0a 20 2a 09 09 09 09 74 6f 20 62 65 20 75  ds. *....to be u
10a0: 70 64 61 74 65 64 2e 0a 20 2a 20 47 4f 54 5f 46  pdated.. * GOT_F
10b0: 4f 43 55 53 3a 09 09 09 4e 6f 6e 2d 7a 65 72 6f  OCUS:...Non-zero
10c0: 20 6d 65 61 6e 73 20 74 68 69 73 20 77 69 64 67   means this widg
10d0: 65 74 20 63 75 72 72 65 6e 74 6c 79 0a 20 2a 09  et currently. *.
10e0: 09 09 09 68 61 73 20 74 68 65 20 69 6e 70 75 74  ...has the input
10f0: 20 66 6f 63 75 73 2e 0a 20 2a 20 42 4f 52 44 45   focus.. * BORDE
1100: 52 5f 4e 45 45 44 45 44 3a 20 20 20 20 20 20 20  R_NEEDED:       
1110: 20 20 20 20 20 20 20 20 4e 6f 6e 2d 7a 65 72 6f          Non-zero
1120: 20 6d 65 61 6e 73 20 33 2d 44 20 62 6f 72 64 65   means 3-D borde
1130: 72 20 6d 75 73 74 20 62 65 20 72 65 64 72 61 77  r must be redraw
1140: 6e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  n. *            
1150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1160: 20 20 61 72 6f 75 6e 64 20 77 69 6e 64 6f 77 20    around window 
1170: 64 75 72 69 6e 67 20 72 65 64 69 73 70 6c 61 79  during redisplay
1180: 2e 20 20 4e 6f 72 6d 61 6c 6c 79 0a 20 2a 20 20  .  Normally. *  
1190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a0: 20 20 20 20 20 20 20 20 20 20 20 20 6f 6e 6c 79              only
11b0: 20 65 6c 65 6d 65 6e 74 73 20 6e 65 65 64 73 20   elements needs 
11c0: 74 6f 20 62 65 20 72 65 64 72 61 77 6e 2e 0a 20  to be redrawn.. 
11d0: 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 52 45 44 52  */..#define REDR
11e0: 41 57 5f 50 45 4e 44 49 4e 47 09 09 31 0a 23 64  AW_PENDING..1.#d
11f0: 65 66 69 6e 65 20 55 50 44 41 54 45 5f 56 5f 53  efine UPDATE_V_S
1200: 43 52 4f 4c 4c 42 41 52 09 32 0a 23 64 65 66 69  CROLLBAR.2.#defi
1210: 6e 65 20 55 50 44 41 54 45 5f 48 5f 53 43 52 4f  ne UPDATE_H_SCRO
1220: 4c 4c 42 41 52 09 34 0a 23 64 65 66 69 6e 65 20  LLBAR.4.#define 
1230: 47 4f 54 5f 46 4f 43 55 53 09 09 38 0a 23 64 65  GOT_FOCUS..8.#de
1240: 66 69 6e 65 20 42 4f 52 44 45 52 5f 4e 45 45 44  fine BORDER_NEED
1250: 45 44 09 09 31 36 0a 0a 2f 2a 0a 20 2a 20 49 6e  ED..16../*. * In
1260: 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 66  formation used f
1270: 6f 72 20 61 72 67 76 20 70 61 72 73 69 6e 67 3a  or argv parsing:
1280: 0a 20 2a 2f 0a 0a 73 74 61 74 69 63 20 54 6b 5f  . */..static Tk_
1290: 43 6f 6e 66 69 67 53 70 65 63 20 63 6f 6e 66 69  ConfigSpec confi
12a0: 67 53 70 65 63 73 5b 5d 20 3d 20 7b 0a 20 20 20  gSpecs[] = {.   
12b0: 20 7b 54 4b 5f 43 4f 4e 46 49 47 5f 53 59 4e 4f   {TK_CONFIG_SYNO
12c0: 4e 59 4d 2c 20 22 2d 62 64 22 2c 20 22 62 6f 72  NYM, "-bd", "bor
12d0: 64 65 72 57 69 64 74 68 22 2c 20 28 63 68 61 72  derWidth", (char
12e0: 20 2a 29 20 4e 55 4c 4c 2c 0a 09 28 63 68 61 72   *) NULL,..(char
12f0: 20 2a 29 20 4e 55 4c 4c 2c 20 30 2c 20 30 7d 2c   *) NULL, 0, 0},
1300: 0a 20 20 20 20 7b 54 4b 5f 43 4f 4e 46 49 47 5f  .    {TK_CONFIG_
1310: 50 49 58 45 4c 53 2c 20 22 2d 62 6f 72 64 65 72  PIXELS, "-border
1320: 77 69 64 74 68 22 2c 20 22 62 6f 72 64 65 72 57  width", "borderW
1330: 69 64 74 68 22 2c 20 22 42 6f 72 64 65 72 57 69  idth", "BorderWi
1340: 64 74 68 22 2c 0a 09 44 45 46 5f 4c 49 53 54 42  dth",..DEF_LISTB
1350: 4f 58 5f 42 4f 52 44 45 52 5f 57 49 44 54 48 2c  OX_BORDER_WIDTH,
1360: 20 54 6b 5f 4f 66 66 73 65 74 28 4c 69 73 74 62   Tk_Offset(Listb
1370: 6f 78 2c 20 62 6f 72 64 65 72 57 69 64 74 68 29  ox, borderWidth)
1380: 2c 20 30 7d 2c 0a 20 20 20 20 7b 54 4b 5f 43 4f  , 0},.    {TK_CO
1390: 4e 46 49 47 5f 49 4e 54 2c 20 22 2d 68 65 69 67  NFIG_INT, "-heig
13a0: 68 74 22 2c 20 22 68 65 69 67 68 74 22 2c 20 22  ht", "height", "
13b0: 48 65 69 67 68 74 22 2c 0a 09 44 45 46 5f 4c 49  Height",..DEF_LI
13c0: 53 54 42 4f 58 5f 48 45 49 47 48 54 2c 20 54 6b  STBOX_HEIGHT, Tk
13d0: 5f 4f 66 66 73 65 74 28 4c 69 73 74 62 6f 78 2c  _Offset(Listbox,
13e0: 20 68 65 69 67 68 74 29 2c 20 30 7d 2c 0a 20 20   height), 0},.  
13f0: 20 20 7b 54 4b 5f 43 4f 4e 46 49 47 5f 55 49 44    {TK_CONFIG_UID
1400: 2c 20 22 2d 73 65 6c 65 63 74 6d 6f 64 65 22 2c  , "-selectmode",
1410: 20 22 73 65 6c 65 63 74 4d 6f 64 65 22 2c 20 22   "selectMode", "
1420: 53 65 6c 65 63 74 4d 6f 64 65 22 2c 0a 09 44 45  SelectMode",..DE
1430: 46 5f 4c 49 53 54 42 4f 58 5f 53 45 4c 45 43 54  F_LISTBOX_SELECT
1440: 5f 4d 4f 44 45 2c 20 54 6b 5f 4f 66 66 73 65 74  _MODE, Tk_Offset
1450: 28 4c 69 73 74 62 6f 78 2c 20 73 65 6c 65 63 74  (Listbox, select
1460: 4d 6f 64 65 29 2c 20 30 7d 2c 0a 20 20 20 20 7b  Mode), 0},.    {
1470: 54 4b 5f 43 4f 4e 46 49 47 5f 53 54 52 49 4e 47  TK_CONFIG_STRING
1480: 2c 20 22 2d 74 61 6b 65 66 6f 63 75 73 22 2c 20  , "-takefocus", 
1490: 22 74 61 6b 65 46 6f 63 75 73 22 2c 20 22 54 61  "takeFocus", "Ta
14a0: 6b 65 46 6f 63 75 73 22 2c 0a 09 44 45 46 5f 4c  keFocus",..DEF_L
14b0: 49 53 54 42 4f 58 5f 54 41 4b 45 5f 46 4f 43 55  ISTBOX_TAKE_FOCU
14c0: 53 2c 20 54 6b 5f 4f 66 66 73 65 74 28 4c 69 73  S, Tk_Offset(Lis
14d0: 74 62 6f 78 2c 20 74 61 6b 65 46 6f 63 75 73 29  tbox, takeFocus)
14e0: 2c 0a 09 54 4b 5f 43 4f 4e 46 49 47 5f 4e 55 4c  ,..TK_CONFIG_NUL
14f0: 4c 5f 4f 4b 7d 2c 0a 20 20 20 20 7b 54 4b 5f 43  L_OK},.    {TK_C
1500: 4f 4e 46 49 47 5f 49 4e 54 2c 20 22 2d 77 69 64  ONFIG_INT, "-wid
1510: 74 68 22 2c 20 22 77 69 64 74 68 22 2c 20 22 57  th", "width", "W
1520: 69 64 74 68 22 2c 0a 09 44 45 46 5f 4c 49 53 54  idth",..DEF_LIST
1530: 42 4f 58 5f 57 49 44 54 48 2c 20 54 6b 5f 4f 66  BOX_WIDTH, Tk_Of
1540: 66 73 65 74 28 4c 69 73 74 62 6f 78 2c 20 77 69  fset(Listbox, wi
1550: 64 74 68 29 2c 20 30 7d 2c 0a 20 20 20 20 7b 54  dth), 0},.    {T
1560: 4b 5f 43 4f 4e 46 49 47 5f 53 54 52 49 4e 47 2c  K_CONFIG_STRING,
1570: 20 22 2d 78 73 63 72 6f 6c 6c 63 6f 6d 6d 61 6e   "-xscrollcomman
1580: 64 22 2c 20 22 78 53 63 72 6f 6c 6c 43 6f 6d 6d  d", "xScrollComm
1590: 61 6e 64 22 2c 20 22 53 63 72 6f 6c 6c 43 6f 6d  and", "ScrollCom
15a0: 6d 61 6e 64 22 2c 0a 09 44 45 46 5f 4c 49 53 54  mand",..DEF_LIST
15b0: 42 4f 58 5f 53 43 52 4f 4c 4c 5f 43 4f 4d 4d 41  BOX_SCROLL_COMMA
15c0: 4e 44 2c 20 54 6b 5f 4f 66 66 73 65 74 28 4c 69  ND, Tk_Offset(Li
15d0: 73 74 62 6f 78 2c 20 78 53 63 72 6f 6c 6c 43 6d  stbox, xScrollCm
15e0: 64 29 2c 0a 09 54 4b 5f 43 4f 4e 46 49 47 5f 4e  d),..TK_CONFIG_N
15f0: 55 4c 4c 5f 4f 4b 7d 2c 0a 20 20 20 20 7b 54 4b  ULL_OK},.    {TK
1600: 5f 43 4f 4e 46 49 47 5f 53 54 52 49 4e 47 2c 20  _CONFIG_STRING, 
1610: 22 2d 79 73 63 72 6f 6c 6c 63 6f 6d 6d 61 6e 64  "-yscrollcommand
1620: 22 2c 20 22 79 53 63 72 6f 6c 6c 43 6f 6d 6d 61  ", "yScrollComma
1630: 6e 64 22 2c 20 22 53 63 72 6f 6c 6c 43 6f 6d 6d  nd", "ScrollComm
1640: 61 6e 64 22 2c 0a 09 44 45 46 5f 4c 49 53 54 42  and",..DEF_LISTB
1650: 4f 58 5f 53 43 52 4f 4c 4c 5f 43 4f 4d 4d 41 4e  OX_SCROLL_COMMAN
1660: 44 2c 20 54 6b 5f 4f 66 66 73 65 74 28 4c 69 73  D, Tk_Offset(Lis
1670: 74 62 6f 78 2c 20 79 53 63 72 6f 6c 6c 43 6d 64  tbox, yScrollCmd
1680: 29 2c 0a 09 54 4b 5f 43 4f 4e 46 49 47 5f 4e 55  ),..TK_CONFIG_NU
1690: 4c 4c 5f 4f 4b 7d 2c 0a 20 20 20 20 7b 54 4b 5f  LL_OK},.    {TK_
16a0: 43 4f 4e 46 49 47 5f 45 4e 44 2c 20 28 63 68 61  CONFIG_END, (cha
16b0: 72 20 2a 29 20 4e 55 4c 4c 2c 20 28 63 68 61 72  r *) NULL, (char
16c0: 20 2a 29 20 4e 55 4c 4c 2c 20 28 63 68 61 72 20   *) NULL, (char 
16d0: 2a 29 20 4e 55 4c 4c 2c 0a 09 28 63 68 61 72 20  *) NULL,..(char 
16e0: 2a 29 20 4e 55 4c 4c 2c 20 30 2c 20 30 7d 0a 7d  *) NULL, 0, 0}.}
16f0: 3b 0a 0a 2f 2a 0a 20 2a 20 57 69 64 74 68 20 6f  ;../*. * Width o
1700: 66 20 65 6c 65 6d 65 6e 74 20 69 6e 64 69 63 61  f element indica
1710: 74 6f 72 20 69 6e 20 63 68 61 72 61 63 74 65 72  tor in character
1720: 73 2e 0a 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20  s.. */..#define 
1730: 49 4e 44 49 43 41 54 4f 52 5f 57 49 44 54 48 09  INDICATOR_WIDTH.
1740: 09 30 0a 0a 2f 2a 0a 20 2a 20 46 6f 72 77 61 72  .0../*. * Forwar
1750: 64 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 66  d declarations f
1760: 6f 72 20 70 72 6f 63 65 64 75 72 65 73 20 64 65  or procedures de
1770: 66 69 6e 65 64 20 6c 61 74 65 72 20 69 6e 20 74  fined later in t
1780: 68 69 73 20 66 69 6c 65 3a 0a 20 2a 2f 0a 0a 73  his file:. */..s
1790: 74 61 74 69 63 20 76 6f 69 64 09 09 43 68 61 6e  tatic void..Chan
17a0: 67 65 4c 69 73 74 62 6f 78 4f 66 66 73 65 74 20  geListboxOffset 
17b0: 5f 41 4e 53 49 5f 41 52 47 53 5f 28 28 4c 69 73  _ANSI_ARGS_((Lis
17c0: 74 62 6f 78 20 2a 6c 69 73 74 50 74 72 2c 0a 09  tbox *listPtr,..
17d0: 09 09 20 20 20 20 69 6e 74 20 6f 66 66 73 65 74  ..    int offset
17e0: 29 29 3b 0a 73 74 61 74 69 63 20 76 6f 69 64 09  ));.static void.
17f0: 09 43 68 61 6e 67 65 4c 69 73 74 62 6f 78 56 69  .ChangeListboxVi
1800: 65 77 20 5f 41 4e 53 49 5f 41 52 47 53 5f 28 28  ew _ANSI_ARGS_((
1810: 4c 69 73 74 62 6f 78 20 2a 6c 69 73 74 50 74 72  Listbox *listPtr
1820: 2c 0a 09 09 09 20 20 20 20 69 6e 74 20 69 6e 64  ,....    int ind
1830: 65 78 29 29 3b 0a 73 74 61 74 69 63 20 69 6e 74  ex));.static int
1840: 09 09 43 6f 6e 66 69 67 75 72 65 4c 69 73 74 62  ..ConfigureListb
1850: 6f 78 20 5f 41 4e 53 49 5f 41 52 47 53 5f 28 28  ox _ANSI_ARGS_((
1860: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
1870: 72 70 2c 0a 09 09 09 20 20 20 20 4c 69 73 74 62  rp,....    Listb
1880: 6f 78 20 2a 6c 69 73 74 50 74 72 2c 20 69 6e 74  ox *listPtr, int
1890: 20 61 72 67 63 2c 20 63 68 61 72 20 2a 2a 61 72   argc, char **ar
18a0: 67 76 2c 0a 09 09 09 20 20 20 20 69 6e 74 20 66  gv,....    int f
18b0: 6c 61 67 73 29 29 3b 0a 73 74 61 74 69 63 20 76  lags));.static v
18c0: 6f 69 64 09 09 44 65 6c 65 74 65 45 6c 73 20 5f  oid..DeleteEls _
18d0: 41 4e 53 49 5f 41 52 47 53 5f 28 28 4c 69 73 74  ANSI_ARGS_((List
18e0: 62 6f 78 20 2a 6c 69 73 74 50 74 72 2c 20 69 6e  box *listPtr, in
18f0: 74 20 66 69 72 73 74 2c 0a 09 09 09 20 20 20 20  t first,....    
1900: 69 6e 74 20 6c 61 73 74 29 29 3b 0a 73 74 61 74  int last));.stat
1910: 69 63 20 76 6f 69 64 09 09 44 65 73 74 72 6f 79  ic void..Destroy
1920: 4c 69 73 74 62 6f 78 20 5f 41 4e 53 49 5f 41 52  Listbox _ANSI_AR
1930: 47 53 5f 28 28 43 6c 69 65 6e 74 44 61 74 61 20  GS_((ClientData 
1940: 63 6c 69 65 6e 74 44 61 74 61 29 29 3b 0a 73 74  clientData));.st
1950: 61 74 69 63 20 76 6f 69 64 09 09 44 69 73 70 6c  atic void..Displ
1960: 61 79 4c 69 73 74 62 6f 78 20 5f 41 4e 53 49 5f  ayListbox _ANSI_
1970: 41 52 47 53 5f 28 28 43 6c 69 65 6e 74 44 61 74  ARGS_((ClientDat
1980: 61 20 63 6c 69 65 6e 74 44 61 74 61 29 29 3b 0a  a clientData));.
1990: 73 74 61 74 69 63 20 69 6e 74 09 09 47 65 74 4c  static int..GetL
19a0: 69 73 74 62 6f 78 49 6e 64 65 78 20 5f 41 4e 53  istboxIndex _ANS
19b0: 49 5f 41 52 47 53 5f 28 28 54 63 6c 5f 49 6e 74  I_ARGS_((Tcl_Int
19c0: 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 09 09 09  erp *interp,....
19d0: 20 20 20 20 4c 69 73 74 62 6f 78 20 2a 6c 69 73      Listbox *lis
19e0: 74 50 74 72 2c 20 63 68 61 72 20 2a 73 74 72 69  tPtr, char *stri
19f0: 6e 67 2c 20 69 6e 74 20 6e 75 6d 45 6c 73 4f 4b  ng, int numElsOK
1a00: 2c 0a 09 09 09 20 20 20 20 69 6e 74 20 2a 69 6e  ,....    int *in
1a10: 64 65 78 50 74 72 29 29 3b 0a 73 74 61 74 69 63  dexPtr));.static
1a20: 20 76 6f 69 64 09 09 49 6e 73 65 72 74 45 6c 73   void..InsertEls
1a30: 20 5f 41 4e 53 49 5f 41 52 47 53 5f 28 28 4c 69   _ANSI_ARGS_((Li
1a40: 73 74 62 6f 78 20 2a 6c 69 73 74 50 74 72 2c 20  stbox *listPtr, 
1a50: 69 6e 74 20 69 6e 64 65 78 2c 0a 09 09 09 20 20  int index,....  
1a60: 20 20 69 6e 74 20 61 72 67 63 2c 20 63 68 61 72    int argc, char
1a70: 20 2a 2a 61 72 67 76 29 29 3b 0a 73 74 61 74 69   **argv));.stati
1a80: 63 20 76 6f 69 64 09 09 4c 69 73 74 62 6f 78 43  c void..ListboxC
1a90: 6d 64 44 65 6c 65 74 65 64 50 72 6f 63 20 5f 41  mdDeletedProc _A
1aa0: 4e 53 49 5f 41 52 47 53 5f 28 28 0a 09 09 09 20  NSI_ARGS_((.... 
1ab0: 20 20 20 43 6c 69 65 6e 74 44 61 74 61 20 63 6c     ClientData cl
1ac0: 69 65 6e 74 44 61 74 61 29 29 3b 0a 73 74 61 74  ientData));.stat
1ad0: 69 63 20 76 6f 69 64 09 09 4c 69 73 74 62 6f 78  ic void..Listbox
1ae0: 43 6f 6d 70 75 74 65 47 65 6f 6d 65 74 72 79 20  ComputeGeometry 
1af0: 5f 41 4e 53 49 5f 41 52 47 53 5f 28 28 4c 69 73  _ANSI_ARGS_((Lis
1b00: 74 62 6f 78 20 2a 6c 69 73 74 50 74 72 2c 0a 09  tbox *listPtr,..
1b10: 09 09 20 20 20 20 69 6e 74 20 6d 61 78 49 73 53  ..    int maxIsS
1b20: 74 61 6c 65 29 29 3b 0a 73 74 61 74 69 63 20 76  tale));.static v
1b30: 6f 69 64 09 09 4c 69 73 74 62 6f 78 45 76 65 6e  oid..ListboxEven
1b40: 74 50 72 6f 63 20 5f 41 4e 53 49 5f 41 52 47 53  tProc _ANSI_ARGS
1b50: 5f 28 28 43 6c 69 65 6e 74 44 61 74 61 20 63 6c  _((ClientData cl
1b60: 69 65 6e 74 44 61 74 61 2c 0a 09 09 09 20 20 20  ientData,....   
1b70: 20 58 45 76 65 6e 74 20 2a 65 76 65 6e 74 50 74   XEvent *eventPt
1b80: 72 29 29 3b 0a 73 74 61 74 69 63 20 76 6f 69 64  r));.static void
1b90: 09 09 4c 69 73 74 62 6f 78 52 65 64 72 61 77 52  ..ListboxRedrawR
1ba0: 61 6e 67 65 20 5f 41 4e 53 49 5f 41 52 47 53 5f  ange _ANSI_ARGS_
1bb0: 28 28 4c 69 73 74 62 6f 78 20 2a 6c 69 73 74 50  ((Listbox *listP
1bc0: 74 72 2c 0a 09 09 09 20 20 20 20 69 6e 74 20 66  tr,....    int f
1bd0: 69 72 73 74 2c 20 69 6e 74 20 6c 61 73 74 29 29  irst, int last))
1be0: 3b 0a 73 74 61 74 69 63 20 76 6f 69 64 09 09 4c  ;.static void..L
1bf0: 69 73 74 62 6f 78 53 65 6c 65 63 74 20 5f 41 4e  istboxSelect _AN
1c00: 53 49 5f 41 52 47 53 5f 28 28 4c 69 73 74 62 6f  SI_ARGS_((Listbo
1c10: 78 20 2a 6c 69 73 74 50 74 72 2c 0a 09 09 09 20  x *listPtr,.... 
1c20: 20 20 20 69 6e 74 20 66 69 72 73 74 2c 20 69 6e     int first, in
1c30: 74 20 6c 61 73 74 2c 20 69 6e 74 20 73 65 6c 65  t last, int sele
1c40: 63 74 29 29 3b 0a 73 74 61 74 69 63 20 76 6f 69  ct));.static voi
1c50: 64 09 09 4c 69 73 74 62 6f 78 55 70 64 61 74 65  d..ListboxUpdate
1c60: 48 53 63 72 6f 6c 6c 62 61 72 20 5f 41 4e 53 49  HScrollbar _ANSI
1c70: 5f 41 52 47 53 5f 28 28 4c 69 73 74 62 6f 78 20  _ARGS_((Listbox 
1c80: 2a 6c 69 73 74 50 74 72 29 29 3b 0a 73 74 61 74  *listPtr));.stat
1c90: 69 63 20 76 6f 69 64 09 09 4c 69 73 74 62 6f 78  ic void..Listbox
1ca0: 55 70 64 61 74 65 56 53 63 72 6f 6c 6c 62 61 72  UpdateVScrollbar
1cb0: 20 5f 41 4e 53 49 5f 41 52 47 53 5f 28 28 4c 69   _ANSI_ARGS_((Li
1cc0: 73 74 62 6f 78 20 2a 6c 69 73 74 50 74 72 29 29  stbox *listPtr))
1cd0: 3b 0a 73 74 61 74 69 63 20 69 6e 74 09 09 4c 69  ;.static int..Li
1ce0: 73 74 62 6f 78 57 69 64 67 65 74 43 6d 64 20 5f  stboxWidgetCmd _
1cf0: 41 4e 53 49 5f 41 52 47 53 5f 28 28 43 6c 69 65  ANSI_ARGS_((Clie
1d00: 6e 74 44 61 74 61 20 63 6c 69 65 6e 74 44 61 74  ntData clientDat
1d10: 61 2c 0a 09 09 09 20 20 20 20 54 63 6c 5f 49 6e  a,....    Tcl_In
1d20: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 69 6e  terp *interp, in
1d30: 74 20 61 72 67 63 2c 20 63 68 61 72 20 2a 2a 61  t argc, char **a
1d40: 72 67 76 29 29 3b 0a 73 74 61 74 69 63 20 69 6e  rgv));.static in
1d50: 74 09 09 4e 65 61 72 65 73 74 4c 69 73 74 62 6f  t..NearestListbo
1d60: 78 45 6c 65 6d 65 6e 74 20 5f 41 4e 53 49 5f 41  xElement _ANSI_A
1d70: 52 47 53 5f 28 28 4c 69 73 74 62 6f 78 20 2a 6c  RGS_((Listbox *l
1d80: 69 73 74 50 74 72 2c 0a 09 09 09 20 20 20 20 69  istPtr,....    i
1d90: 6e 74 20 79 29 29 3b 0a 0c 0a 2f 2a 0a 20 2a 2d  nt y));.../*. *-
1da0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1db0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1dc0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1dd0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a  -------------. *
1de0: 0a 20 2a 20 54 6b 5f 4c 69 73 74 62 6f 78 43 6d  . * Tk_ListboxCm
1df0: 64 20 2d 2d 0a 20 2a 0a 20 2a 09 54 68 69 73 20  d --. *. *.This 
1e00: 70 72 6f 63 65 64 75 72 65 20 69 73 20 69 6e 76  procedure is inv
1e10: 6f 6b 65 64 20 74 6f 20 70 72 6f 63 65 73 73 20  oked to process 
1e20: 74 68 65 20 22 6c 69 73 74 62 6f 78 22 20 54 63  the "listbox" Tc
1e30: 6c 0a 20 2a 09 63 6f 6d 6d 61 6e 64 2e 20 20 53  l. *.command.  S
1e40: 65 65 20 74 68 65 20 75 73 65 72 20 64 6f 63 75  ee the user docu
1e50: 6d 65 6e 74 61 74 69 6f 6e 20 66 6f 72 20 64 65  mentation for de
1e60: 74 61 69 6c 73 20 6f 6e 20 77 68 61 74 0a 20 2a  tails on what. *
1e70: 09 69 74 20 64 6f 65 73 2e 0a 20 2a 0a 20 2a 20  .it does.. *. * 
1e80: 52 65 73 75 6c 74 73 3a 0a 20 2a 09 41 20 73 74  Results:. *.A st
1e90: 61 6e 64 61 72 64 20 54 63 6c 20 72 65 73 75 6c  andard Tcl resul
1ea0: 74 2e 0a 20 2a 0a 20 2a 20 53 69 64 65 20 65 66  t.. *. * Side ef
1eb0: 66 65 63 74 73 3a 0a 20 2a 09 53 65 65 20 74 68  fects:. *.See th
1ec0: 65 20 75 73 65 72 20 64 6f 63 75 6d 65 6e 74 61  e user documenta
1ed0: 74 69 6f 6e 2e 0a 20 2a 0a 20 2a 2d 2d 2d 2d 2d  tion.. *. *-----
1ee0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 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 0a 20 2a 2f 0a 0a 69  ---------. */..i
1f20: 6e 74 0a 54 6b 5f 4c 69 73 74 62 6f 78 43 6d 64  nt.Tk_ListboxCmd
1f30: 28 63 6c 69 65 6e 74 44 61 74 61 2c 20 69 6e 74  (clientData, int
1f40: 65 72 70 2c 20 61 72 67 63 2c 20 61 72 67 76 29  erp, argc, argv)
1f50: 0a 20 20 20 20 43 6c 69 65 6e 74 44 61 74 61 20  .    ClientData 
1f60: 63 6c 69 65 6e 74 44 61 74 61 3b 09 2f 2a 20 4d  clientData;./* M
1f70: 61 69 6e 20 77 69 6e 64 6f 77 20 61 73 73 6f 63  ain window assoc
1f80: 69 61 74 65 64 20 77 69 74 68 0a 09 09 09 09 20  iated with..... 
1f90: 2a 20 69 6e 74 65 72 70 72 65 74 65 72 2e 20 2a  * interpreter. *
1fa0: 2f 0a 20 20 20 20 54 63 6c 5f 49 6e 74 65 72 70  /.    Tcl_Interp
1fb0: 20 2a 69 6e 74 65 72 70 3b 09 09 2f 2a 20 43 75   *interp;../* Cu
1fc0: 72 72 65 6e 74 20 69 6e 74 65 72 70 72 65 74 65  rrent interprete
1fd0: 72 2e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 61 72  r. */.    int ar
1fe0: 67 63 3b 09 09 09 2f 2a 20 4e 75 6d 62 65 72 20  gc;.../* Number 
1ff0: 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e 20 2a 2f  of arguments. */
2000: 0a 20 20 20 20 63 68 61 72 20 2a 2a 61 72 67 76  .    char **argv
2010: 3b 09 09 2f 2a 20 41 72 67 75 6d 65 6e 74 20 73  ;../* Argument s
2020: 74 72 69 6e 67 73 2e 20 2a 2f 0a 7b 0a 20 20 20  trings. */.{.   
2030: 20 72 65 67 69 73 74 65 72 20 4c 69 73 74 62 6f   register Listbo
2040: 78 20 2a 6c 69 73 74 50 74 72 3b 0a 20 20 20 20  x *listPtr;.    
2050: 54 6b 5f 57 69 6e 64 6f 77 20 6e 65 77 3b 0a 20  Tk_Window new;. 
2060: 20 20 20 54 6b 5f 57 69 6e 64 6f 77 20 74 6b 77     Tk_Window tkw
2070: 69 6e 20 3d 20 28 54 6b 5f 57 69 6e 64 6f 77 29  in = (Tk_Window)
2080: 20 63 6c 69 65 6e 74 44 61 74 61 3b 0a 0a 20 20   clientData;..  
2090: 20 20 69 66 20 28 61 72 67 63 20 3c 20 32 29 20    if (argc < 2) 
20a0: 7b 0a 09 54 63 6c 5f 41 70 70 65 6e 64 52 65 73  {..Tcl_AppendRes
20b0: 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
20c0: 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
20d0: 64 20 62 65 20 5c 22 22 2c 0a 09 09 61 72 67 76  d be \"",...argv
20e0: 5b 30 5d 2c 20 22 20 70 61 74 68 4e 61 6d 65 20  [0], " pathName 
20f0: 3f 6f 70 74 69 6f 6e 73 3f 5c 22 22 2c 20 28 63  ?options?\"", (c
2100: 68 61 72 20 2a 29 20 4e 55 4c 4c 29 3b 0a 09 72  har *) NULL);..r
2110: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
2120: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6e 65 77 20  .    }..    new 
2130: 3d 20 54 6b 5f 43 72 65 61 74 65 57 69 6e 64 6f  = Tk_CreateWindo
2140: 77 46 72 6f 6d 50 61 74 68 28 69 6e 74 65 72 70  wFromPath(interp
2150: 2c 20 74 6b 77 69 6e 2c 20 61 72 67 76 5b 31 5d  , tkwin, argv[1]
2160: 2c 20 28 63 68 61 72 20 2a 29 20 4e 55 4c 4c 29  , (char *) NULL)
2170: 3b 0a 20 20 20 20 69 66 20 28 6e 65 77 20 3d 3d  ;.    if (new ==
2180: 20 4e 55 4c 4c 29 20 7b 0a 09 72 65 74 75 72 6e   NULL) {..return
2190: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 20 20   TCL_ERROR;.    
21a0: 7d 0a 0a 20 20 20 20 2f 2a 0a 20 20 20 20 20 2a  }..    /*.     *
21b0: 20 49 6e 69 74 69 61 6c 69 7a 65 20 74 68 65 20   Initialize the 
21c0: 66 69 65 6c 64 73 20 6f 66 20 74 68 65 20 73 74  fields of the st
21d0: 72 75 63 74 75 72 65 20 74 68 61 74 20 77 6f 6e  ructure that won
21e0: 27 74 20 62 65 20 69 6e 69 74 69 61 6c 69 7a 65  't be initialize
21f0: 64 0a 20 20 20 20 20 2a 20 62 79 20 43 6f 6e 66  d.     * by Conf
2200: 69 67 75 72 65 4c 69 73 74 62 6f 78 2c 20 6f 72  igureListbox, or
2210: 20 74 68 61 74 20 43 6f 6e 66 69 67 75 72 65 4c   that ConfigureL
2220: 69 73 74 62 6f 78 20 72 65 71 75 69 72 65 73 20  istbox requires 
2230: 74 6f 20 62 65 0a 20 20 20 20 20 2a 20 69 6e 69  to be.     * ini
2240: 74 69 61 6c 69 7a 65 64 20 61 6c 72 65 61 64 79  tialized already
2250: 20 28 65 2e 67 2e 20 72 65 73 6f 75 72 63 65 20   (e.g. resource 
2260: 70 6f 69 6e 74 65 72 73 29 2e 0a 20 20 20 20 20  pointers)..     
2270: 2a 2f 0a 0a 20 20 20 20 6c 69 73 74 50 74 72 20  */..    listPtr 
2280: 3d 20 28 4c 69 73 74 62 6f 78 20 2a 29 20 63 6b  = (Listbox *) ck
2290: 61 6c 6c 6f 63 28 73 69 7a 65 6f 66 28 4c 69 73  alloc(sizeof(Lis
22a0: 74 62 6f 78 29 29 3b 0a 20 20 20 20 6c 69 73 74  tbox));.    list
22b0: 50 74 72 2d 3e 74 6b 77 69 6e 20 3d 20 6e 65 77  Ptr->tkwin = new
22c0: 3b 0a 20 20 20 20 6c 69 73 74 50 74 72 2d 3e 69  ;.    listPtr->i
22d0: 6e 74 65 72 70 20 3d 20 69 6e 74 65 72 70 3b 0a  nterp = interp;.
22e0: 20 20 20 20 6c 69 73 74 50 74 72 2d 3e 77 69 64      listPtr->wid
22f0: 67 65 74 43 6d 64 20 3d 20 54 63 6c 5f 43 72 65  getCmd = Tcl_Cre
2300: 61 74 65 43 6f 6d 6d 61 6e 64 28 69 6e 74 65 72  ateCommand(inter
2310: 70 2c 0a 09 20 20 20 20 54 6b 5f 50 61 74 68 4e  p,..    Tk_PathN
2320: 61 6d 65 28 6c 69 73 74 50 74 72 2d 3e 74 6b 77  ame(listPtr->tkw
2330: 69 6e 29 2c 20 4c 69 73 74 62 6f 78 57 69 64 67  in), ListboxWidg
2340: 65 74 43 6d 64 2c 0a 09 20 20 20 20 28 43 6c 69  etCmd,..    (Cli
2350: 65 6e 74 44 61 74 61 29 20 6c 69 73 74 50 74 72  entData) listPtr
2360: 2c 20 4c 69 73 74 62 6f 78 43 6d 64 44 65 6c 65  , ListboxCmdDele
2370: 74 65 64 50 72 6f 63 29 3b 0a 20 20 20 20 6c 69  tedProc);.    li
2380: 73 74 50 74 72 2d 3e 6e 75 6d 45 6c 65 6d 65 6e  stPtr->numElemen
2390: 74 73 20 3d 20 30 3b 0a 20 20 20 20 6c 69 73 74  ts = 0;.    list
23a0: 50 74 72 2d 3e 66 69 72 73 74 50 74 72 20 3d 20  Ptr->firstPtr = 
23b0: 4e 55 4c 4c 3b 0a 20 20 20 20 6c 69 73 74 50 74  NULL;.    listPt
23c0: 72 2d 3e 6c 61 73 74 50 74 72 20 3d 20 4e 55 4c  r->lastPtr = NUL
23d0: 4c 3b 0a 20 20 20 20 6c 69 73 74 50 74 72 2d 3e  L;.    listPtr->
23e0: 62 6f 72 64 65 72 57 69 64 74 68 20 3d 20 30 3b  borderWidth = 0;
23f0: 0a 20 20 20 20 6c 69 73 74 50 74 72 2d 3e 77 69  .    listPtr->wi
2400: 64 74 68 20 3d 20 30 3b 0a 20 20 20 20 6c 69 73  dth = 0;.    lis
2410: 74 50 74 72 2d 3e 68 65 69 67 68 74 20 3d 20 30  tPtr->height = 0
2420: 3b 0a 20 20 20 20 6c 69 73 74 50 74 72 2d 3e 74  ;.    listPtr->t
2430: 6f 70 49 6e 64 65 78 20 3d 20 30 3b 0a 20 20 20  opIndex = 0;.   
2440: 20 6c 69 73 74 50 74 72 2d 3e 6e 75 6d 4c 69 6e   listPtr->numLin
2450: 65 73 20 3d 20 31 3b 0a 20 20 20 20 6c 69 73 74  es = 1;.    list
2460: 50 74 72 2d 3e 6d 61 78 57 69 64 74 68 20 3d 20  Ptr->maxWidth = 
2470: 30 3b 0a 20 20 20 20 6c 69 73 74 50 74 72 2d 3e  0;.    listPtr->
2480: 78 4f 66 66 73 65 74 20 3d 20 30 3b 0a 20 20 20  xOffset = 0;.   
2490: 20 6c 69 73 74 50 74 72 2d 3e 73 65 6c 65 63 74   listPtr->select
24a0: 4d 6f 64 65 20 3d 20 4e 55 4c 4c 3b 0a 20 20 20  Mode = NULL;.   
24b0: 20 6c 69 73 74 50 74 72 2d 3e 6e 75 6d 53 65 6c   listPtr->numSel
24c0: 65 63 74 65 64 20 3d 20 30 3b 0a 20 20 20 20 6c  ected = 0;.    l
24d0: 69 73 74 50 74 72 2d 3e 73 65 6c 65 63 74 41 6e  istPtr->selectAn
24e0: 63 68 6f 72 20 3d 20 30 3b 0a 20 20 20 20 6c 69  chor = 0;.    li
24f0: 73 74 50 74 72 2d 3e 61 63 74 69 76 65 20 3d 20  stPtr->active = 
2500: 30 3b 0a 20 20 20 20 6c 69 73 74 50 74 72 2d 3e  0;.    listPtr->
2510: 74 61 6b 65 46 6f 63 75 73 20 3d 20 4e 55 4c 4c  takeFocus = NULL
2520: 3b 0a 20 20 20 20 6c 69 73 74 50 74 72 2d 3e 78  ;.    listPtr->x
2530: 53 63 72 6f 6c 6c 43 6d 64 20 3d 20 4e 55 4c 4c  ScrollCmd = NULL
2540: 3b 0a 20 20 20 20 6c 69 73 74 50 74 72 2d 3e 79  ;.    listPtr->y
2550: 53 63 72 6f 6c 6c 43 6d 64 20 3d 20 4e 55 4c 4c  ScrollCmd = NULL
2560: 3b 0a 20 20 20 20 6c 69 73 74 50 74 72 2d 3e 66  ;.    listPtr->f
2570: 6c 61 67 73 20 3d 20 30 3b 0a 0a 20 20 20 20 54  lags = 0;..    T
2580: 6b 5f 53 65 74 43 6c 61 73 73 28 6c 69 73 74 50  k_SetClass(listP
2590: 74 72 2d 3e 74 6b 77 69 6e 2c 20 22 4c 69 73 74  tr->tkwin, "List
25a0: 62 6f 78 22 29 3b 0a 20 20 20 20 54 6b 5f 43 72  box");.    Tk_Cr
25b0: 65 61 74 65 45 76 65 6e 74 48 61 6e 64 6c 65 72  eateEventHandler
25c0: 28 6c 69 73 74 50 74 72 2d 3e 74 6b 77 69 6e 2c  (listPtr->tkwin,
25d0: 0a 09 20 20 20 20 43 54 4b 5f 45 58 50 4f 53 45  ..    CTK_EXPOSE
25e0: 5f 45 56 45 4e 54 5f 4d 41 53 4b 7c 43 54 4b 5f  _EVENT_MASK|CTK_
25f0: 4d 41 50 5f 45 56 45 4e 54 5f 4d 41 53 4b 7c 43  MAP_EVENT_MASK|C
2600: 54 4b 5f 44 45 53 54 52 4f 59 5f 45 56 45 4e 54  TK_DESTROY_EVENT
2610: 5f 4d 41 53 4b 0a 09 20 20 20 20 7c 43 54 4b 5f  _MASK..    |CTK_
2620: 46 4f 43 55 53 5f 45 56 45 4e 54 5f 4d 41 53 4b  FOCUS_EVENT_MASK
2630: 2c 0a 09 20 20 20 20 4c 69 73 74 62 6f 78 45 76  ,..    ListboxEv
2640: 65 6e 74 50 72 6f 63 2c 20 28 43 6c 69 65 6e 74  entProc, (Client
2650: 44 61 74 61 29 20 6c 69 73 74 50 74 72 29 3b 0a  Data) listPtr);.
2660: 20 20 20 20 69 66 20 28 43 6f 6e 66 69 67 75 72      if (Configur
2670: 65 4c 69 73 74 62 6f 78 28 69 6e 74 65 72 70 2c  eListbox(interp,
2680: 20 6c 69 73 74 50 74 72 2c 20 61 72 67 63 2d 32   listPtr, argc-2
2690: 2c 20 61 72 67 76 2b 32 2c 20 30 29 20 21 3d 20  , argv+2, 0) != 
26a0: 54 43 4c 5f 4f 4b 29 20 7b 0a 09 67 6f 74 6f 20  TCL_OK) {..goto 
26b0: 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 0a 20 20  error;.    }..  
26c0: 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28    Tcl_SetResult(
26d0: 69 6e 74 65 72 70 2c 54 6b 5f 50 61 74 68 4e 61  interp,Tk_PathNa
26e0: 6d 65 28 6c 69 73 74 50 74 72 2d 3e 74 6b 77 69  me(listPtr->tkwi
26f0: 6e 29 2c 54 43 4c 5f 56 4f 4c 41 54 49 4c 45 29  n),TCL_VOLATILE)
2700: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
2710: 5f 4f 4b 3b 0a 0a 20 20 20 20 65 72 72 6f 72 3a  _OK;..    error:
2720: 0a 20 20 20 20 54 6b 5f 44 65 73 74 72 6f 79 57  .    Tk_DestroyW
2730: 69 6e 64 6f 77 28 6c 69 73 74 50 74 72 2d 3e 74  indow(listPtr->t
2740: 6b 77 69 6e 29 3b 0a 20 20 20 20 72 65 74 75 72  kwin);.    retur
2750: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 7d 0a 0c  n TCL_ERROR;.}..
2760: 0a 2f 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ./*. *----------
2770: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2780: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2790: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
27a0: 2d 2d 2d 2d 0a 20 2a 0a 20 2a 20 4c 69 73 74 62  ----. *. * Listb
27b0: 6f 78 57 69 64 67 65 74 43 6d 64 20 2d 2d 0a 20  oxWidgetCmd --. 
27c0: 2a 0a 20 2a 09 54 68 69 73 20 70 72 6f 63 65 64  *. *.This proced
27d0: 75 72 65 20 69 73 20 69 6e 76 6f 6b 65 64 20 74  ure is invoked t
27e0: 6f 20 70 72 6f 63 65 73 73 20 74 68 65 20 54 63  o process the Tc
27f0: 6c 20 63 6f 6d 6d 61 6e 64 0a 20 2a 09 74 68 61  l command. *.tha
2800: 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  t corresponds to
2810: 20 61 20 77 69 64 67 65 74 20 6d 61 6e 61 67 65   a widget manage
2820: 64 20 62 79 20 74 68 69 73 20 6d 6f 64 75 6c 65  d by this module
2830: 2e 0a 20 2a 09 53 65 65 20 74 68 65 20 75 73 65  .. *.See the use
2840: 72 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20  r documentation 
2850: 66 6f 72 20 64 65 74 61 69 6c 73 20 6f 6e 20 77  for details on w
2860: 68 61 74 20 69 74 20 64 6f 65 73 2e 0a 20 2a 0a  hat it does.. *.
2870: 20 2a 20 52 65 73 75 6c 74 73 3a 0a 20 2a 09 41   * Results:. *.A
2880: 20 73 74 61 6e 64 61 72 64 20 54 63 6c 20 72 65   standard Tcl re
2890: 73 75 6c 74 2e 0a 20 2a 0a 20 2a 20 53 69 64 65  sult.. *. * Side
28a0: 20 65 66 66 65 63 74 73 3a 0a 20 2a 09 53 65 65   effects:. *.See
28b0: 20 74 68 65 20 75 73 65 72 20 64 6f 63 75 6d 65   the user docume
28c0: 6e 74 61 74 69 6f 6e 2e 0a 20 2a 0a 20 2a 2d 2d  ntation.. *. *--
28d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
28e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
28f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2900: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 2f  ------------. */
2910: 0a 0a 73 74 61 74 69 63 20 69 6e 74 0a 4c 69 73  ..static int.Lis
2920: 74 62 6f 78 57 69 64 67 65 74 43 6d 64 28 63 6c  tboxWidgetCmd(cl
2930: 69 65 6e 74 44 61 74 61 2c 20 69 6e 74 65 72 70  ientData, interp
2940: 2c 20 61 72 67 63 2c 20 61 72 67 76 29 0a 20 20  , argc, argv).  
2950: 20 20 43 6c 69 65 6e 74 44 61 74 61 20 63 6c 69    ClientData cli
2960: 65 6e 74 44 61 74 61 3b 09 09 2f 2a 20 49 6e 66  entData;../* Inf
2970: 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 6c  ormation about l
2980: 69 73 74 62 6f 78 20 77 69 64 67 65 74 2e 20 2a  istbox widget. *
2990: 2f 0a 20 20 20 20 54 63 6c 5f 49 6e 74 65 72 70  /.    Tcl_Interp
29a0: 20 2a 69 6e 74 65 72 70 3b 09 09 09 2f 2a 20 43   *interp;.../* C
29b0: 75 72 72 65 6e 74 20 69 6e 74 65 72 70 72 65 74  urrent interpret
29c0: 65 72 2e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 61  er. */.    int a
29d0: 72 67 63 3b 09 09 09 09 2f 2a 20 4e 75 6d 62 65  rgc;..../* Numbe
29e0: 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e 20  r of arguments. 
29f0: 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 2a 61 72  */.    char **ar
2a00: 67 76 3b 09 09 09 2f 2a 20 41 72 67 75 6d 65 6e  gv;.../* Argumen
2a10: 74 20 73 74 72 69 6e 67 73 2e 20 2a 2f 0a 7b 0a  t strings. */.{.
2a20: 20 20 20 20 72 65 67 69 73 74 65 72 20 4c 69 73      register Lis
2a30: 74 62 6f 78 20 2a 6c 69 73 74 50 74 72 20 3d 20  tbox *listPtr = 
2a40: 28 4c 69 73 74 62 6f 78 20 2a 29 20 63 6c 69 65  (Listbox *) clie
2a50: 6e 74 44 61 74 61 3b 0a 20 20 20 20 69 6e 74 20  ntData;.    int 
2a60: 72 65 73 75 6c 74 20 3d 20 54 43 4c 5f 4f 4b 3b  result = TCL_OK;
2a70: 0a 20 20 20 20 73 69 7a 65 5f 74 20 6c 65 6e 67  .    size_t leng
2a80: 74 68 3b 0a 20 20 20 20 69 6e 74 20 63 3b 0a 0a  th;.    int c;..
2a90: 20 20 20 20 69 66 20 28 61 72 67 63 20 3c 20 32      if (argc < 2
2aa0: 29 20 7b 0a 09 54 63 6c 5f 41 70 70 65 6e 64 52  ) {..Tcl_AppendR
2ab0: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
2ac0: 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
2ad0: 75 6c 64 20 62 65 20 5c 22 22 2c 0a 09 09 61 72  uld be \"",...ar
2ae0: 67 76 5b 30 5d 2c 20 22 20 6f 70 74 69 6f 6e 20  gv[0], " option 
2af0: 3f 61 72 67 20 61 72 67 20 2e 2e 2e 3f 5c 22 22  ?arg arg ...?\""
2b00: 2c 20 28 63 68 61 72 20 2a 29 20 4e 55 4c 4c 29  , (char *) NULL)
2b10: 3b 0a 09 72 65 74 75 72 6e 20 54 43 4c 5f 45 52  ;..return TCL_ER
2b20: 52 4f 52 3b 0a 20 20 20 20 7d 0a 20 20 20 20 54  ROR;.    }.    T
2b30: 6b 5f 50 72 65 73 65 72 76 65 28 28 43 6c 69 65  k_Preserve((Clie
2b40: 6e 74 44 61 74 61 29 20 6c 69 73 74 50 74 72 29  ntData) listPtr)
2b50: 3b 0a 20 20 20 20 63 20 3d 20 61 72 67 76 5b 31  ;.    c = argv[1
2b60: 5d 5b 30 5d 3b 0a 20 20 20 20 6c 65 6e 67 74 68  ][0];.    length
2b70: 20 3d 20 73 74 72 6c 65 6e 28 61 72 67 76 5b 31   = strlen(argv[1
2b80: 5d 29 3b 0a 20 20 20 20 69 66 20 28 28 63 20 3d  ]);.    if ((c =
2b90: 3d 20 27 61 27 29 20 26 26 20 28 73 74 72 6e 63  = 'a') && (strnc
2ba0: 6d 70 28 61 72 67 76 5b 31 5d 2c 20 22 61 63 74  mp(argv[1], "act
2bb0: 69 76 61 74 65 22 2c 20 6c 65 6e 67 74 68 29 20  ivate", length) 
2bc0: 3d 3d 20 30 29 29 20 7b 0a 09 69 6e 74 20 69 6e  == 0)) {..int in
2bd0: 64 65 78 3b 0a 0a 09 69 66 20 28 61 72 67 63 20  dex;...if (argc 
2be0: 21 3d 20 33 29 20 7b 0a 09 20 20 20 20 54 63 6c  != 3) {..    Tcl
2bf0: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
2c00: 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
2c10: 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
2c20: 22 22 2c 0a 09 09 20 20 20 20 61 72 67 76 5b 30  "",...    argv[0
2c30: 5d 2c 20 22 20 61 63 74 69 76 61 74 65 20 69 6e  ], " activate in
2c40: 64 65 78 5c 22 22 2c 0a 09 09 20 20 20 20 28 63  dex\"",...    (c
2c50: 68 61 72 20 2a 29 20 4e 55 4c 4c 29 3b 0a 09 20  har *) NULL);.. 
2c60: 20 20 20 67 6f 74 6f 20 65 72 72 6f 72 3b 0a 09     goto error;..
2c70: 7d 0a 09 4c 69 73 74 62 6f 78 52 65 64 72 61 77  }..ListboxRedraw
2c80: 52 61 6e 67 65 28 6c 69 73 74 50 74 72 2c 20 6c  Range(listPtr, l
2c90: 69 73 74 50 74 72 2d 3e 61 63 74 69 76 65 2c 20  istPtr->active, 
2ca0: 6c 69 73 74 50 74 72 2d 3e 61 63 74 69 76 65 29  listPtr->active)
2cb0: 3b 0a 09 69 66 20 28 47 65 74 4c 69 73 74 62 6f  ;..if (GetListbo
2cc0: 78 49 6e 64 65 78 28 69 6e 74 65 72 70 2c 20 6c  xIndex(interp, l
2cd0: 69 73 74 50 74 72 2c 20 61 72 67 76 5b 32 5d 2c  istPtr, argv[2],
2ce0: 20 30 2c 20 26 69 6e 64 65 78 29 0a 09 09 21 3d   0, &index)...!=
2cf0: 20 54 43 4c 5f 4f 4b 29 20 7b 0a 09 20 20 20 20   TCL_OK) {..    
2d00: 67 6f 74 6f 20 65 72 72 6f 72 3b 0a 09 7d 0a 09  goto error;..}..
2d10: 6c 69 73 74 50 74 72 2d 3e 61 63 74 69 76 65 20  listPtr->active 
2d20: 3d 20 69 6e 64 65 78 3b 0a 09 4c 69 73 74 62 6f  = index;..Listbo
2d30: 78 52 65 64 72 61 77 52 61 6e 67 65 28 6c 69 73  xRedrawRange(lis
2d40: 74 50 74 72 2c 20 6c 69 73 74 50 74 72 2d 3e 61  tPtr, listPtr->a
2d50: 63 74 69 76 65 2c 20 6c 69 73 74 50 74 72 2d 3e  ctive, listPtr->
2d60: 61 63 74 69 76 65 29 3b 0a 20 20 20 20 7d 20 65  active);.    } e
2d70: 6c 73 65 20 69 66 20 28 28 63 20 3d 3d 20 27 62  lse if ((c == 'b
2d80: 27 29 20 26 26 20 28 73 74 72 6e 63 6d 70 28 61  ') && (strncmp(a
2d90: 72 67 76 5b 31 5d 2c 20 22 62 62 6f 78 22 2c 20  rgv[1], "bbox", 
2da0: 6c 65 6e 67 74 68 29 20 3d 3d 20 30 29 29 20 7b  length) == 0)) {
2db0: 0a 09 69 6e 74 20 69 6e 64 65 78 2c 20 78 2c 20  ..int index, x, 
2dc0: 79 2c 20 69 3b 0a 09 45 6c 65 6d 65 6e 74 20 2a  y, i;..Element *
2dd0: 65 6c 50 74 72 3b 0a 0a 09 69 66 20 28 61 72 67  elPtr;...if (arg
2de0: 63 20 21 3d 20 33 29 20 7b 0a 09 20 20 20 20 54  c != 3) {..    T
2df0: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
2e00: 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
2e10: 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
2e20: 20 5c 22 22 2c 0a 09 09 20 20 20 20 61 72 67 76   \"",...    argv
2e30: 5b 30 5d 2c 20 22 20 62 62 6f 78 20 69 6e 64 65  [0], " bbox inde
2e40: 78 5c 22 22 2c 20 28 63 68 61 72 20 2a 29 20 4e  x\"", (char *) N
2e50: 55 4c 4c 29 3b 0a 09 20 20 20 20 67 6f 74 6f 20  ULL);..    goto 
2e60: 65 72 72 6f 72 3b 0a 09 7d 0a 09 69 66 20 28 47  error;..}..if (G
2e70: 65 74 4c 69 73 74 62 6f 78 49 6e 64 65 78 28 69  etListboxIndex(i
2e80: 6e 74 65 72 70 2c 20 6c 69 73 74 50 74 72 2c 20  nterp, listPtr, 
2e90: 61 72 67 76 5b 32 5d 2c 20 30 2c 20 26 69 6e 64  argv[2], 0, &ind
2ea0: 65 78 29 20 21 3d 20 54 43 4c 5f 4f 4b 29 20 7b  ex) != TCL_OK) {
2eb0: 0a 09 20 20 20 20 67 6f 74 6f 20 65 72 72 6f 72  ..    goto error
2ec0: 3b 0a 09 7d 0a 09 66 6f 72 20 28 69 20 3d 20 30  ;..}..for (i = 0
2ed0: 2c 20 65 6c 50 74 72 20 3d 20 6c 69 73 74 50 74  , elPtr = listPt
2ee0: 72 2d 3e 66 69 72 73 74 50 74 72 3b 20 69 20 3c  r->firstPtr; i <
2ef0: 20 69 6e 64 65 78 3b 0a 09 09 69 2b 2b 2c 20 65   index;...i++, e
2f00: 6c 50 74 72 20 3d 20 65 6c 50 74 72 2d 3e 6e 65  lPtr = elPtr->ne
2f10: 78 74 50 74 72 29 20 7b 0a 09 20 20 20 20 2f 2a  xtPtr) {..    /*
2f20: 20 45 6d 70 74 79 20 6c 6f 6f 70 20 62 6f 64 79   Empty loop body
2f30: 2e 20 2a 2f 0a 09 7d 0a 09 69 66 20 28 28 69 6e  . */..}..if ((in
2f40: 64 65 78 20 3e 3d 20 6c 69 73 74 50 74 72 2d 3e  dex >= listPtr->
2f50: 74 6f 70 49 6e 64 65 78 29 20 26 26 20 28 69 6e  topIndex) && (in
2f60: 64 65 78 20 3c 20 6c 69 73 74 50 74 72 2d 3e 6e  dex < listPtr->n
2f70: 75 6d 45 6c 65 6d 65 6e 74 73 29 0a 09 09 20 20  umElements)...  
2f80: 20 20 26 26 20 28 69 6e 64 65 78 20 3c 20 28 6c    && (index < (l
2f90: 69 73 74 50 74 72 2d 3e 74 6f 70 49 6e 64 65 78  istPtr->topIndex
2fa0: 20 2b 20 6c 69 73 74 50 74 72 2d 3e 6e 75 6d 4c   + listPtr->numL
2fb0: 69 6e 65 73 29 29 29 20 7b 0a 09 20 20 20 20 63  ines))) {..    c
2fc0: 68 61 72 20 62 75 66 66 65 72 5b 36 30 5d 3b 0a  har buffer[60];.
2fd0: 09 20 20 20 20 78 20 3d 20 6c 69 73 74 50 74 72  .    x = listPtr
2fe0: 2d 3e 62 6f 72 64 65 72 57 69 64 74 68 20 2d 20  ->borderWidth - 
2ff0: 6c 69 73 74 50 74 72 2d 3e 78 4f 66 66 73 65 74  listPtr->xOffset
3000: 3b 0a 09 20 20 20 20 79 20 3d 20 69 6e 64 65 78  ;..    y = index
3010: 20 2d 20 6c 69 73 74 50 74 72 2d 3e 74 6f 70 49   - listPtr->topI
3020: 6e 64 65 78 20 2b 20 6c 69 73 74 50 74 72 2d 3e  ndex + listPtr->
3030: 62 6f 72 64 65 72 57 69 64 74 68 3b 0a 09 20 20  borderWidth;..  
3040: 20 20 73 70 72 69 6e 74 66 28 62 75 66 66 65 72    sprintf(buffer
3050: 2c 20 22 25 64 20 25 64 20 25 64 20 25 64 22 2c  , "%d %d %d %d",
3060: 20 78 2c 20 79 2c 20 65 6c 50 74 72 2d 3e 74 65   x, y, elPtr->te
3070: 78 74 4c 65 6e 67 74 68 2c 20 31 29 3b 0a 09 20  xtLength, 1);.. 
3080: 20 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74     Tcl_SetResult
3090: 28 69 6e 74 65 72 70 2c 62 75 66 66 65 72 2c 54  (interp,buffer,T
30a0: 43 4c 5f 56 4f 4c 41 54 49 4c 45 29 3b 0a 09 7d  CL_VOLATILE);..}
30b0: 0a 20 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28  .    } else if (
30c0: 28 63 20 3d 3d 20 27 63 27 29 20 26 26 20 28 73  (c == 'c') && (s
30d0: 74 72 6e 63 6d 70 28 61 72 67 76 5b 31 5d 2c 20  trncmp(argv[1], 
30e0: 22 63 67 65 74 22 2c 20 6c 65 6e 67 74 68 29 20  "cget", length) 
30f0: 3d 3d 20 30 29 0a 09 20 20 20 20 26 26 20 28 6c  == 0)..    && (l
3100: 65 6e 67 74 68 20 3e 3d 20 32 29 29 20 7b 0a 09  ength >= 2)) {..
3110: 69 66 20 28 61 72 67 63 20 21 3d 20 33 29 20 7b  if (argc != 3) {
3120: 0a 09 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  ..    Tcl_Append
3130: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
3140: 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
3150: 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a 09 09 20  ould be \"",... 
3160: 20 20 20 61 72 67 76 5b 30 5d 2c 20 22 20 63 67     argv[0], " cg
3170: 65 74 20 6f 70 74 69 6f 6e 5c 22 22 2c 0a 09 09  et option\"",...
3180: 20 20 20 20 28 63 68 61 72 20 2a 29 20 4e 55 4c      (char *) NUL
3190: 4c 29 3b 0a 09 20 20 20 20 67 6f 74 6f 20 65 72  L);..    goto er
31a0: 72 6f 72 3b 0a 09 7d 0a 09 72 65 73 75 6c 74 20  ror;..}..result 
31b0: 3d 20 54 6b 5f 43 6f 6e 66 69 67 75 72 65 56 61  = Tk_ConfigureVa
31c0: 6c 75 65 28 69 6e 74 65 72 70 2c 20 6c 69 73 74  lue(interp, list
31d0: 50 74 72 2d 3e 74 6b 77 69 6e 2c 20 63 6f 6e 66  Ptr->tkwin, conf
31e0: 69 67 53 70 65 63 73 2c 0a 09 09 28 63 68 61 72  igSpecs,...(char
31f0: 20 2a 29 20 6c 69 73 74 50 74 72 2c 20 61 72 67   *) listPtr, arg
3200: 76 5b 32 5d 2c 20 30 29 3b 0a 20 20 20 20 7d 20  v[2], 0);.    } 
3210: 65 6c 73 65 20 69 66 20 28 28 63 20 3d 3d 20 27  else if ((c == '
3220: 63 27 29 20 26 26 20 28 73 74 72 6e 63 6d 70 28  c') && (strncmp(
3230: 61 72 67 76 5b 31 5d 2c 20 22 63 6f 6e 66 69 67  argv[1], "config
3240: 75 72 65 22 2c 20 6c 65 6e 67 74 68 29 20 3d 3d  ure", length) ==
3250: 20 30 29 0a 09 20 20 20 20 26 26 20 28 6c 65 6e   0)..    && (len
3260: 67 74 68 20 3e 3d 20 32 29 29 20 7b 0a 09 69 66  gth >= 2)) {..if
3270: 20 28 61 72 67 63 20 3d 3d 20 32 29 20 7b 0a 09   (argc == 2) {..
3280: 20 20 20 20 72 65 73 75 6c 74 20 3d 20 54 6b 5f      result = Tk_
3290: 43 6f 6e 66 69 67 75 72 65 49 6e 66 6f 28 69 6e  ConfigureInfo(in
32a0: 74 65 72 70 2c 20 6c 69 73 74 50 74 72 2d 3e 74  terp, listPtr->t
32b0: 6b 77 69 6e 2c 20 63 6f 6e 66 69 67 53 70 65 63  kwin, configSpec
32c0: 73 2c 0a 09 09 20 20 20 20 28 63 68 61 72 20 2a  s,...    (char *
32d0: 29 20 6c 69 73 74 50 74 72 2c 20 28 63 68 61 72  ) listPtr, (char
32e0: 20 2a 29 20 4e 55 4c 4c 2c 20 30 29 3b 0a 09 7d   *) NULL, 0);..}
32f0: 20 65 6c 73 65 20 69 66 20 28 61 72 67 63 20 3d   else if (argc =
3300: 3d 20 33 29 20 7b 0a 09 20 20 20 20 72 65 73 75  = 3) {..    resu
3310: 6c 74 20 3d 20 54 6b 5f 43 6f 6e 66 69 67 75 72  lt = Tk_Configur
3320: 65 49 6e 66 6f 28 69 6e 74 65 72 70 2c 20 6c 69  eInfo(interp, li
3330: 73 74 50 74 72 2d 3e 74 6b 77 69 6e 2c 20 63 6f  stPtr->tkwin, co
3340: 6e 66 69 67 53 70 65 63 73 2c 0a 09 09 20 20 20  nfigSpecs,...   
3350: 20 28 63 68 61 72 20 2a 29 20 6c 69 73 74 50 74   (char *) listPt
3360: 72 2c 20 61 72 67 76 5b 32 5d 2c 20 30 29 3b 0a  r, argv[2], 0);.
3370: 09 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20 20 72  .} else {..    r
3380: 65 73 75 6c 74 20 3d 20 43 6f 6e 66 69 67 75 72  esult = Configur
3390: 65 4c 69 73 74 62 6f 78 28 69 6e 74 65 72 70 2c  eListbox(interp,
33a0: 20 6c 69 73 74 50 74 72 2c 20 61 72 67 63 2d 32   listPtr, argc-2
33b0: 2c 20 61 72 67 76 2b 32 2c 0a 09 09 20 20 20 20  , argv+2,...    
33c0: 54 4b 5f 43 4f 4e 46 49 47 5f 41 52 47 56 5f 4f  TK_CONFIG_ARGV_O
33d0: 4e 4c 59 29 3b 0a 09 7d 0a 20 20 20 20 7d 20 65  NLY);..}.    } e
33e0: 6c 73 65 20 69 66 20 28 28 63 20 3d 3d 20 27 63  lse if ((c == 'c
33f0: 27 29 20 26 26 20 28 73 74 72 6e 63 6d 70 28 61  ') && (strncmp(a
3400: 72 67 76 5b 31 5d 2c 20 22 63 75 72 73 65 6c 65  rgv[1], "cursele
3410: 63 74 69 6f 6e 22 2c 20 6c 65 6e 67 74 68 29 20  ction", length) 
3420: 3d 3d 20 30 29 0a 09 20 20 20 20 26 26 20 28 6c  == 0)..    && (l
3430: 65 6e 67 74 68 20 3e 3d 20 32 29 29 20 7b 0a 09  ength >= 2)) {..
3440: 69 6e 74 20 69 2c 20 63 6f 75 6e 74 3b 0a 09 63  int i, count;..c
3450: 68 61 72 20 69 6e 64 65 78 5b 32 30 5d 3b 0a 09  har index[20];..
3460: 45 6c 65 6d 65 6e 74 20 2a 65 6c 50 74 72 3b 0a  Element *elPtr;.
3470: 0a 09 69 66 20 28 61 72 67 63 20 21 3d 20 32 29  ..if (argc != 2)
3480: 20 7b 0a 09 20 20 20 20 54 63 6c 5f 41 70 70 65   {..    Tcl_Appe
3490: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
34a0: 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20   "wrong # args: 
34b0: 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a 09  should be \"",..
34c0: 09 20 20 20 20 61 72 67 76 5b 30 5d 2c 20 22 20  .    argv[0], " 
34d0: 63 75 72 73 65 6c 65 63 74 69 6f 6e 5c 22 22 2c  curselection\"",
34e0: 0a 09 09 20 20 20 20 28 63 68 61 72 20 2a 29 20  ...    (char *) 
34f0: 4e 55 4c 4c 29 3b 0a 09 20 20 20 20 67 6f 74 6f  NULL);..    goto
3500: 20 65 72 72 6f 72 3b 0a 09 7d 0a 09 63 6f 75 6e   error;..}..coun
3510: 74 20 3d 20 30 3b 0a 09 66 6f 72 20 28 69 20 3d  t = 0;..for (i =
3520: 20 30 2c 20 65 6c 50 74 72 20 3d 20 6c 69 73 74   0, elPtr = list
3530: 50 74 72 2d 3e 66 69 72 73 74 50 74 72 3b 20 65  Ptr->firstPtr; e
3540: 6c 50 74 72 20 21 3d 20 4e 55 4c 4c 3b 0a 09 09  lPtr != NULL;...
3550: 69 2b 2b 2c 20 65 6c 50 74 72 20 3d 20 65 6c 50  i++, elPtr = elP
3560: 74 72 2d 3e 6e 65 78 74 50 74 72 29 20 7b 0a 09  tr->nextPtr) {..
3570: 20 20 20 20 69 66 20 28 65 6c 50 74 72 2d 3e 73      if (elPtr->s
3580: 65 6c 65 63 74 65 64 29 20 7b 0a 09 09 73 70 72  elected) {...spr
3590: 69 6e 74 66 28 69 6e 64 65 78 2c 20 22 25 64 22  intf(index, "%d"
35a0: 2c 20 69 29 3b 0a 09 09 54 63 6c 5f 41 70 70 65  , i);...Tcl_Appe
35b0: 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70  ndElement(interp
35c0: 2c 20 69 6e 64 65 78 29 3b 0a 09 09 63 6f 75 6e  , index);...coun
35d0: 74 2b 2b 3b 0a 09 20 20 20 20 7d 0a 09 7d 0a 09  t++;..    }..}..
35e0: 69 66 20 28 63 6f 75 6e 74 20 21 3d 20 6c 69 73  if (count != lis
35f0: 74 50 74 72 2d 3e 6e 75 6d 53 65 6c 65 63 74 65  tPtr->numSelecte
3600: 64 29 20 7b 0a 09 20 20 20 20 70 61 6e 69 63 28  d) {..    panic(
3610: 22 4c 69 73 74 62 6f 78 57 69 64 67 65 74 43 6d  "ListboxWidgetCm
3620: 64 3a 20 73 65 6c 65 63 74 69 6f 6e 20 63 6f 75  d: selection cou
3630: 6e 74 20 69 6e 63 6f 72 72 65 63 74 22 29 3b 0a  nt incorrect");.
3640: 09 7d 0a 20 20 20 20 7d 20 65 6c 73 65 20 69 66  .}.    } else if
3650: 20 28 28 63 20 3d 3d 20 27 64 27 29 20 26 26 20   ((c == 'd') && 
3660: 28 73 74 72 6e 63 6d 70 28 61 72 67 76 5b 31 5d  (strncmp(argv[1]
3670: 2c 20 22 64 65 6c 65 74 65 22 2c 20 6c 65 6e 67  , "delete", leng
3680: 74 68 29 20 3d 3d 20 30 29 29 20 7b 0a 09 69 6e  th) == 0)) {..in
3690: 74 20 66 69 72 73 74 2c 20 6c 61 73 74 3b 0a 0a  t first, last;..
36a0: 09 69 66 20 28 28 61 72 67 63 20 3c 20 33 29 20  .if ((argc < 3) 
36b0: 7c 7c 20 28 61 72 67 63 20 3e 20 34 29 29 20 7b  || (argc > 4)) {
36c0: 0a 09 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  ..    Tcl_Append
36d0: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
36e0: 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
36f0: 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a 09 09 20  ould be \"",... 
3700: 20 20 20 61 72 67 76 5b 30 5d 2c 20 22 20 64 65     argv[0], " de
3710: 6c 65 74 65 20 66 69 72 73 74 49 6e 64 65 78 20  lete firstIndex 
3720: 3f 6c 61 73 74 49 6e 64 65 78 3f 5c 22 22 2c 0a  ?lastIndex?\"",.
3730: 09 09 20 20 20 20 28 63 68 61 72 20 2a 29 20 4e  ..    (char *) N
3740: 55 4c 4c 29 3b 0a 09 20 20 20 20 67 6f 74 6f 20  ULL);..    goto 
3750: 65 72 72 6f 72 3b 0a 09 7d 0a 09 69 66 20 28 47  error;..}..if (G
3760: 65 74 4c 69 73 74 62 6f 78 49 6e 64 65 78 28 69  etListboxIndex(i
3770: 6e 74 65 72 70 2c 20 6c 69 73 74 50 74 72 2c 20  nterp, listPtr, 
3780: 61 72 67 76 5b 32 5d 2c 20 30 2c 20 26 66 69 72  argv[2], 0, &fir
3790: 73 74 29 20 21 3d 20 54 43 4c 5f 4f 4b 29 20 7b  st) != TCL_OK) {
37a0: 0a 09 20 20 20 20 67 6f 74 6f 20 65 72 72 6f 72  ..    goto error
37b0: 3b 0a 09 7d 0a 09 69 66 20 28 61 72 67 63 20 3d  ;..}..if (argc =
37c0: 3d 20 33 29 20 7b 0a 09 20 20 20 20 6c 61 73 74  = 3) {..    last
37d0: 20 3d 20 66 69 72 73 74 3b 0a 09 7d 20 65 6c 73   = first;..} els
37e0: 65 20 7b 0a 09 20 20 20 20 69 66 20 28 47 65 74  e {..    if (Get
37f0: 4c 69 73 74 62 6f 78 49 6e 64 65 78 28 69 6e 74  ListboxIndex(int
3800: 65 72 70 2c 20 6c 69 73 74 50 74 72 2c 20 61 72  erp, listPtr, ar
3810: 67 76 5b 33 5d 2c 20 30 2c 20 26 6c 61 73 74 29  gv[3], 0, &last)
3820: 20 21 3d 20 54 43 4c 5f 4f 4b 29 20 7b 0a 09 09   != TCL_OK) {...
3830: 67 6f 74 6f 20 65 72 72 6f 72 3b 0a 09 20 20 20  goto error;..   
3840: 20 7d 0a 09 7d 0a 09 44 65 6c 65 74 65 45 6c 73   }..}..DeleteEls
3850: 28 6c 69 73 74 50 74 72 2c 20 66 69 72 73 74 2c  (listPtr, first,
3860: 20 6c 61 73 74 29 3b 0a 20 20 20 20 7d 20 65 6c   last);.    } el
3870: 73 65 20 69 66 20 28 28 63 20 3d 3d 20 27 67 27  se if ((c == 'g'
3880: 29 20 26 26 20 28 73 74 72 6e 63 6d 70 28 61 72  ) && (strncmp(ar
3890: 67 76 5b 31 5d 2c 20 22 67 65 74 22 2c 20 6c 65  gv[1], "get", le
38a0: 6e 67 74 68 29 20 3d 3d 20 30 29 29 20 7b 0a 09  ngth) == 0)) {..
38b0: 69 6e 74 20 66 69 72 73 74 2c 20 6c 61 73 74 2c  int first, last,
38c0: 20 69 3b 0a 09 45 6c 65 6d 65 6e 74 20 2a 65 6c   i;..Element *el
38d0: 50 74 72 3b 0a 0a 09 69 66 20 28 28 61 72 67 63  Ptr;...if ((argc
38e0: 20 21 3d 20 33 29 20 26 26 20 28 61 72 67 63 20   != 3) && (argc 
38f0: 21 3d 20 34 29 29 20 7b 0a 09 20 20 20 20 54 63  != 4)) {..    Tc
3900: 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
3910: 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20  nterp, "wrong # 
3920: 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
3930: 5c 22 22 2c 0a 09 09 20 20 20 20 61 72 67 76 5b  \"",...    argv[
3940: 30 5d 2c 20 22 20 67 65 74 20 66 69 72 73 74 20  0], " get first 
3950: 3f 6c 61 73 74 3f 5c 22 22 2c 20 28 63 68 61 72  ?last?\"", (char
3960: 20 2a 29 20 4e 55 4c 4c 29 3b 0a 09 20 20 20 20   *) NULL);..    
3970: 67 6f 74 6f 20 65 72 72 6f 72 3b 0a 09 7d 0a 09  goto error;..}..
3980: 69 66 20 28 47 65 74 4c 69 73 74 62 6f 78 49 6e  if (GetListboxIn
3990: 64 65 78 28 69 6e 74 65 72 70 2c 20 6c 69 73 74  dex(interp, list
39a0: 50 74 72 2c 20 61 72 67 76 5b 32 5d 2c 20 30 2c  Ptr, argv[2], 0,
39b0: 20 26 66 69 72 73 74 29 20 21 3d 20 54 43 4c 5f   &first) != TCL_
39c0: 4f 4b 29 20 7b 0a 09 20 20 20 20 67 6f 74 6f 20  OK) {..    goto 
39d0: 65 72 72 6f 72 3b 0a 09 7d 0a 09 69 66 20 28 28  error;..}..if ((
39e0: 61 72 67 63 20 3d 3d 20 34 29 20 26 26 20 28 47  argc == 4) && (G
39f0: 65 74 4c 69 73 74 62 6f 78 49 6e 64 65 78 28 69  etListboxIndex(i
3a00: 6e 74 65 72 70 2c 20 6c 69 73 74 50 74 72 2c 20  nterp, listPtr, 
3a10: 61 72 67 76 5b 33 5d 2c 0a 09 09 30 2c 20 26 6c  argv[3],...0, &l
3a20: 61 73 74 29 20 21 3d 20 54 43 4c 5f 4f 4b 29 29  ast) != TCL_OK))
3a30: 20 7b 0a 09 20 20 20 20 67 6f 74 6f 20 65 72 72   {..    goto err
3a40: 6f 72 3b 0a 09 7d 0a 09 66 6f 72 20 28 65 6c 50  or;..}..for (elP
3a50: 74 72 20 3d 20 6c 69 73 74 50 74 72 2d 3e 66 69  tr = listPtr->fi
3a60: 72 73 74 50 74 72 2c 20 69 20 3d 20 30 3b 20 69  rstPtr, i = 0; i
3a70: 20 3c 20 66 69 72 73 74 3b 0a 09 09 69 2b 2b 2c   < first;...i++,
3a80: 20 65 6c 50 74 72 20 3d 20 65 6c 50 74 72 2d 3e   elPtr = elPtr->
3a90: 6e 65 78 74 50 74 72 29 20 7b 0a 09 20 20 20 20  nextPtr) {..    
3aa0: 2f 2a 20 45 6d 70 74 79 20 6c 6f 6f 70 20 62 6f  /* Empty loop bo
3ab0: 64 79 2e 20 2a 2f 0a 09 7d 0a 09 69 66 20 28 65  dy. */..}..if (e
3ac0: 6c 50 74 72 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a  lPtr != NULL) {.
3ad0: 09 20 20 20 20 69 66 20 28 61 72 67 63 20 3d 3d  .    if (argc ==
3ae0: 20 33 29 20 7b 0a 09 09 54 63 6c 5f 53 65 74 52   3) {...Tcl_SetR
3af0: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 65 6c 50  esult(interp,elP
3b00: 74 72 2d 3e 74 65 78 74 2c 54 43 4c 5f 56 4f 4c  tr->text,TCL_VOL
3b10: 41 54 49 4c 45 29 3b 0a 09 20 20 20 20 7d 20 65  ATILE);..    } e
3b20: 6c 73 65 20 7b 0a 09 09 66 6f 72 20 28 20 20 3b  lse {...for (  ;
3b30: 20 69 20 3c 3d 20 6c 61 73 74 3b 20 69 2b 2b 2c   i <= last; i++,
3b40: 20 65 6c 50 74 72 20 3d 20 65 6c 50 74 72 2d 3e   elPtr = elPtr->
3b50: 6e 65 78 74 50 74 72 29 20 7b 0a 09 09 20 20 20  nextPtr) {...   
3b60: 20 54 63 6c 5f 41 70 70 65 6e 64 45 6c 65 6d 65   Tcl_AppendEleme
3b70: 6e 74 28 69 6e 74 65 72 70 2c 20 65 6c 50 74 72  nt(interp, elPtr
3b80: 2d 3e 74 65 78 74 29 3b 0a 09 09 7d 0a 09 20 20  ->text);...}..  
3b90: 20 20 7d 0a 09 7d 0a 20 20 20 20 7d 20 65 6c 73    }..}.    } els
3ba0: 65 20 69 66 20 28 28 63 20 3d 3d 20 27 69 27 29  e if ((c == 'i')
3bb0: 20 26 26 20 28 73 74 72 6e 63 6d 70 28 61 72 67   && (strncmp(arg
3bc0: 76 5b 31 5d 2c 20 22 69 6e 64 65 78 22 2c 20 6c  v[1], "index", l
3bd0: 65 6e 67 74 68 29 20 3d 3d 20 30 29 0a 09 20 20  ength) == 0)..  
3be0: 20 20 26 26 20 28 6c 65 6e 67 74 68 20 3e 3d 20    && (length >= 
3bf0: 33 29 29 20 7b 0a 09 69 6e 74 20 69 6e 64 65 78  3)) {..int index
3c00: 3b 0a 0a 09 69 66 20 28 61 72 67 63 20 21 3d 20  ;...if (argc != 
3c10: 33 29 20 7b 0a 09 20 20 20 20 54 63 6c 5f 41 70  3) {..    Tcl_Ap
3c20: 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
3c30: 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
3c40: 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
3c50: 0a 09 09 20 20 20 20 61 72 67 76 5b 30 5d 2c 20  ...    argv[0], 
3c60: 22 20 69 6e 64 65 78 20 69 6e 64 65 78 5c 22 22  " index index\""
3c70: 2c 0a 09 09 20 20 20 20 28 63 68 61 72 20 2a 29  ,...    (char *)
3c80: 20 4e 55 4c 4c 29 3b 0a 09 20 20 20 20 67 6f 74   NULL);..    got
3c90: 6f 20 65 72 72 6f 72 3b 0a 09 7d 0a 09 69 66 20  o error;..}..if 
3ca0: 28 47 65 74 4c 69 73 74 62 6f 78 49 6e 64 65 78  (GetListboxIndex
3cb0: 28 69 6e 74 65 72 70 2c 20 6c 69 73 74 50 74 72  (interp, listPtr
3cc0: 2c 20 61 72 67 76 5b 32 5d 2c 20 31 2c 20 26 69  , argv[2], 1, &i
3cd0: 6e 64 65 78 29 0a 09 09 21 3d 20 54 43 4c 5f 4f  ndex)...!= TCL_O
3ce0: 4b 29 20 7b 0a 09 20 20 20 20 67 6f 74 6f 20 65  K) {..    goto e
3cf0: 72 72 6f 72 3b 0a 09 7d 0a 09 7b 0a 09 20 20 63  rror;..}..{..  c
3d00: 68 61 72 20 62 75 66 66 65 72 5b 32 30 5d 3b 0a  har buffer[20];.
3d10: 09 20 20 73 70 72 69 6e 74 66 28 62 75 66 66 65  .  sprintf(buffe
3d20: 72 2c 20 22 25 64 22 2c 20 69 6e 64 65 78 29 3b  r, "%d", index);
3d30: 0a 09 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c  ..  Tcl_SetResul
3d40: 74 28 69 6e 74 65 72 70 2c 62 75 66 66 65 72 2c  t(interp,buffer,
3d50: 54 43 4c 5f 56 4f 4c 41 54 49 4c 45 29 3b 0a 09  TCL_VOLATILE);..
3d60: 7d 0a 20 20 20 20 7d 20 65 6c 73 65 20 69 66 20  }.    } else if 
3d70: 28 28 63 20 3d 3d 20 27 69 27 29 20 26 26 20 28  ((c == 'i') && (
3d80: 73 74 72 6e 63 6d 70 28 61 72 67 76 5b 31 5d 2c  strncmp(argv[1],
3d90: 20 22 69 6e 73 65 72 74 22 2c 20 6c 65 6e 67 74   "insert", lengt
3da0: 68 29 20 3d 3d 20 30 29 0a 09 20 20 20 20 26 26  h) == 0)..    &&
3db0: 20 28 6c 65 6e 67 74 68 20 3e 3d 20 33 29 29 20   (length >= 3)) 
3dc0: 7b 0a 09 69 6e 74 20 69 6e 64 65 78 3b 0a 0a 09  {..int index;...
3dd0: 69 66 20 28 61 72 67 63 20 3c 20 33 29 20 7b 0a  if (argc < 3) {.
3de0: 09 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
3df0: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
3e00: 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
3e10: 75 6c 64 20 62 65 20 5c 22 22 2c 0a 09 09 20 20  uld be \"",...  
3e20: 20 20 61 72 67 76 5b 30 5d 2c 20 22 20 69 6e 73    argv[0], " ins
3e30: 65 72 74 20 69 6e 64 65 78 20 3f 65 6c 65 6d 65  ert index ?eleme
3e40: 6e 74 20 65 6c 65 6d 65 6e 74 20 2e 2e 2e 3f 5c  nt element ...?\
3e50: 22 22 2c 0a 09 09 20 20 20 20 28 63 68 61 72 20  "",...    (char 
3e60: 2a 29 20 4e 55 4c 4c 29 3b 0a 09 20 20 20 20 67  *) NULL);..    g
3e70: 6f 74 6f 20 65 72 72 6f 72 3b 0a 09 7d 0a 09 69  oto error;..}..i
3e80: 66 20 28 47 65 74 4c 69 73 74 62 6f 78 49 6e 64  f (GetListboxInd
3e90: 65 78 28 69 6e 74 65 72 70 2c 20 6c 69 73 74 50  ex(interp, listP
3ea0: 74 72 2c 20 61 72 67 76 5b 32 5d 2c 20 31 2c 20  tr, argv[2], 1, 
3eb0: 26 69 6e 64 65 78 29 0a 09 09 21 3d 20 54 43 4c  &index)...!= TCL
3ec0: 5f 4f 4b 29 20 7b 0a 09 20 20 20 20 67 6f 74 6f  _OK) {..    goto
3ed0: 20 65 72 72 6f 72 3b 0a 09 7d 0a 09 49 6e 73 65   error;..}..Inse
3ee0: 72 74 45 6c 73 28 6c 69 73 74 50 74 72 2c 20 69  rtEls(listPtr, i
3ef0: 6e 64 65 78 2c 20 61 72 67 63 2d 33 2c 20 61 72  ndex, argc-3, ar
3f00: 67 76 2b 33 29 3b 0a 20 20 20 20 7d 20 65 6c 73  gv+3);.    } els
3f10: 65 20 69 66 20 28 28 63 20 3d 3d 20 27 6e 27 29  e if ((c == 'n')
3f20: 20 26 26 20 28 73 74 72 6e 63 6d 70 28 61 72 67   && (strncmp(arg
3f30: 76 5b 31 5d 2c 20 22 6e 65 61 72 65 73 74 22 2c  v[1], "nearest",
3f40: 20 6c 65 6e 67 74 68 29 20 3d 3d 20 30 29 29 20   length) == 0)) 
3f50: 7b 0a 09 69 6e 74 20 69 6e 64 65 78 2c 20 79 3b  {..int index, y;
3f60: 0a 0a 09 69 66 20 28 61 72 67 63 20 21 3d 20 33  ...if (argc != 3
3f70: 29 20 7b 0a 09 20 20 20 20 54 63 6c 5f 41 70 70  ) {..    Tcl_App
3f80: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
3f90: 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  , "wrong # args:
3fa0: 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a   should be \"",.
3fb0: 09 09 20 20 20 20 61 72 67 76 5b 30 5d 2c 20 22  ..    argv[0], "
3fc0: 20 6e 65 61 72 65 73 74 20 79 5c 22 22 2c 20 28   nearest y\"", (
3fd0: 63 68 61 72 20 2a 29 20 4e 55 4c 4c 29 3b 0a 09  char *) NULL);..
3fe0: 20 20 20 20 67 6f 74 6f 20 65 72 72 6f 72 3b 0a      goto error;.
3ff0: 09 7d 0a 09 69 66 20 28 54 63 6c 5f 47 65 74 49  .}..if (Tcl_GetI
4000: 6e 74 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b  nt(interp, argv[
4010: 32 5d 2c 20 26 79 29 20 21 3d 20 54 43 4c 5f 4f  2], &y) != TCL_O
4020: 4b 29 20 7b 0a 09 20 20 20 20 67 6f 74 6f 20 65  K) {..    goto e
4030: 72 72 6f 72 3b 0a 09 7d 0a 09 69 6e 64 65 78 20  rror;..}..index 
4040: 3d 20 4e 65 61 72 65 73 74 4c 69 73 74 62 6f 78  = NearestListbox
4050: 45 6c 65 6d 65 6e 74 28 6c 69 73 74 50 74 72 2c  Element(listPtr,
4060: 20 79 29 3b 0a 09 7b 0a 09 20 20 63 68 61 72 20   y);..{..  char 
4070: 62 75 66 66 65 72 5b 32 30 5d 3b 0a 09 20 20 73  buffer[20];..  s
4080: 70 72 69 6e 74 66 28 62 75 66 66 65 72 2c 20 22  printf(buffer, "
4090: 25 64 22 2c 20 69 6e 64 65 78 29 3b 0a 09 20 20  %d", index);..  
40a0: 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e  Tcl_SetResult(in
40b0: 74 65 72 70 2c 62 75 66 66 65 72 2c 54 43 4c 5f  terp,buffer,TCL_
40c0: 56 4f 4c 41 54 49 4c 45 29 3b 0a 09 7d 0a 20 20  VOLATILE);..}.  
40d0: 20 20 7d 20 65 6c 73 65 20 69 66 20 28 28 63 20    } else if ((c 
40e0: 3d 3d 20 27 73 27 29 20 26 26 20 28 6c 65 6e 67  == 's') && (leng
40f0: 74 68 20 3e 3d 20 32 29 0a 09 20 20 20 20 26 26  th >= 2)..    &&
4100: 20 28 73 74 72 6e 63 6d 70 28 61 72 67 76 5b 31   (strncmp(argv[1
4110: 5d 2c 20 22 73 63 61 6e 22 2c 20 6c 65 6e 67 74  ], "scan", lengt
4120: 68 29 20 3d 3d 20 30 29 29 20 7b 0a 09 72 65 73  h) == 0)) {..res
4130: 75 6c 74 20 3d 20 43 74 6b 5f 55 6e 73 75 70 70  ult = Ctk_Unsupp
4140: 6f 72 74 65 64 28 69 6e 74 65 72 70 2c 20 22 6c  orted(interp, "l
4150: 69 73 74 62 6f 78 20 73 63 61 6e 22 29 3b 0a 20  istbox scan");. 
4160: 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28 28 63     } else if ((c
4170: 20 3d 3d 20 27 73 27 29 20 26 26 20 28 73 74 72   == 's') && (str
4180: 6e 63 6d 70 28 61 72 67 76 5b 31 5d 2c 20 22 73  ncmp(argv[1], "s
4190: 65 65 22 2c 20 6c 65 6e 67 74 68 29 20 3d 3d 20  ee", length) == 
41a0: 30 29 0a 09 20 20 20 20 26 26 20 28 6c 65 6e 67  0)..    && (leng
41b0: 74 68 20 3e 3d 20 33 29 29 20 7b 0a 09 69 6e 74  th >= 3)) {..int
41c0: 20 69 6e 64 65 78 2c 20 64 69 66 66 3b 0a 09 69   index, diff;..i
41d0: 66 20 28 61 72 67 63 20 21 3d 20 33 29 20 7b 0a  f (argc != 3) {.
41e0: 09 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
41f0: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
4200: 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
4210: 75 6c 64 20 62 65 20 5c 22 22 2c 0a 09 09 20 20  uld be \"",...  
4220: 20 20 61 72 67 76 5b 30 5d 2c 20 22 20 73 65 65    argv[0], " see
4230: 20 69 6e 64 65 78 5c 22 22 2c 0a 09 09 20 20 20   index\"",...   
4240: 20 28 63 68 61 72 20 2a 29 20 4e 55 4c 4c 29 3b   (char *) NULL);
4250: 0a 09 20 20 20 20 67 6f 74 6f 20 65 72 72 6f 72  ..    goto error
4260: 3b 0a 09 7d 0a 09 69 66 20 28 47 65 74 4c 69 73  ;..}..if (GetLis
4270: 74 62 6f 78 49 6e 64 65 78 28 69 6e 74 65 72 70  tboxIndex(interp
4280: 2c 20 6c 69 73 74 50 74 72 2c 20 61 72 67 76 5b  , listPtr, argv[
4290: 32 5d 2c 20 30 2c 20 26 69 6e 64 65 78 29 20 21  2], 0, &index) !
42a0: 3d 20 54 43 4c 5f 4f 4b 29 20 7b 0a 09 20 20 20  = TCL_OK) {..   
42b0: 20 67 6f 74 6f 20 65 72 72 6f 72 3b 0a 09 7d 0a   goto error;..}.
42c0: 09 64 69 66 66 20 3d 20 6c 69 73 74 50 74 72 2d  .diff = listPtr-
42d0: 3e 74 6f 70 49 6e 64 65 78 2d 69 6e 64 65 78 3b  >topIndex-index;
42e0: 0a 09 69 66 20 28 64 69 66 66 20 3e 20 30 29 20  ..if (diff > 0) 
42f0: 7b 0a 09 20 20 20 20 69 66 20 28 64 69 66 66 20  {..    if (diff 
4300: 3c 3d 20 28 6c 69 73 74 50 74 72 2d 3e 6e 75 6d  <= (listPtr->num
4310: 4c 69 6e 65 73 2f 33 29 29 20 7b 0a 09 09 43 68  Lines/3)) {...Ch
4320: 61 6e 67 65 4c 69 73 74 62 6f 78 56 69 65 77 28  angeListboxView(
4330: 6c 69 73 74 50 74 72 2c 20 69 6e 64 65 78 29 3b  listPtr, index);
4340: 0a 09 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09  ..    } else {..
4350: 09 43 68 61 6e 67 65 4c 69 73 74 62 6f 78 56 69  .ChangeListboxVi
4360: 65 77 28 6c 69 73 74 50 74 72 2c 20 69 6e 64 65  ew(listPtr, inde
4370: 78 20 2d 20 28 6c 69 73 74 50 74 72 2d 3e 6e 75  x - (listPtr->nu
4380: 6d 4c 69 6e 65 73 2d 31 29 2f 32 29 3b 0a 09 20  mLines-1)/2);.. 
4390: 20 20 20 7d 0a 09 7d 20 65 6c 73 65 20 7b 0a 09     }..} else {..
43a0: 20 20 20 20 64 69 66 66 20 3d 20 69 6e 64 65 78      diff = index
43b0: 20 2d 20 28 6c 69 73 74 50 74 72 2d 3e 74 6f 70   - (listPtr->top
43c0: 49 6e 64 65 78 20 2b 20 6c 69 73 74 50 74 72 2d  Index + listPtr-
43d0: 3e 6e 75 6d 4c 69 6e 65 73 20 2d 20 31 29 3b 0a  >numLines - 1);.
43e0: 09 20 20 20 20 69 66 20 28 64 69 66 66 20 3e 20  .    if (diff > 
43f0: 30 29 20 7b 0a 09 09 69 66 20 28 64 69 66 66 20  0) {...if (diff 
4400: 3c 3d 20 28 6c 69 73 74 50 74 72 2d 3e 6e 75 6d  <= (listPtr->num
4410: 4c 69 6e 65 73 2f 33 29 29 20 7b 0a 09 09 20 20  Lines/3)) {...  
4420: 20 20 43 68 61 6e 67 65 4c 69 73 74 62 6f 78 56    ChangeListboxV
4430: 69 65 77 28 6c 69 73 74 50 74 72 2c 20 6c 69 73  iew(listPtr, lis
4440: 74 50 74 72 2d 3e 74 6f 70 49 6e 64 65 78 20 2b  tPtr->topIndex +
4450: 20 64 69 66 66 29 3b 0a 09 09 7d 20 65 6c 73 65   diff);...} else
4460: 20 7b 0a 09 09 20 20 20 20 43 68 61 6e 67 65 4c   {...    ChangeL
4470: 69 73 74 62 6f 78 56 69 65 77 28 6c 69 73 74 50  istboxView(listP
4480: 74 72 2c 0a 09 09 09 20 20 20 20 69 6e 64 65 78  tr,....    index
4490: 20 2d 20 28 6c 69 73 74 50 74 72 2d 3e 6e 75 6d   - (listPtr->num
44a0: 4c 69 6e 65 73 2d 31 29 2f 32 29 3b 0a 09 09 7d  Lines-1)/2);...}
44b0: 0a 09 20 20 20 20 7d 0a 09 7d 0a 20 20 20 20 7d  ..    }..}.    }
44c0: 20 65 6c 73 65 20 69 66 20 28 28 63 20 3d 3d 20   else if ((c == 
44d0: 27 73 27 29 20 26 26 20 28 6c 65 6e 67 74 68 20  's') && (length 
44e0: 3e 3d 20 33 29 0a 09 20 20 20 20 26 26 20 28 73  >= 3)..    && (s
44f0: 74 72 6e 63 6d 70 28 61 72 67 76 5b 31 5d 2c 20  trncmp(argv[1], 
4500: 22 73 65 6c 65 63 74 69 6f 6e 22 2c 20 6c 65 6e  "selection", len
4510: 67 74 68 29 20 3d 3d 20 30 29 29 20 7b 0a 09 69  gth) == 0)) {..i
4520: 6e 74 20 66 69 72 73 74 2c 20 6c 61 73 74 3b 0a  nt first, last;.
4530: 0a 09 69 66 20 28 28 61 72 67 63 20 21 3d 20 34  ..if ((argc != 4
4540: 29 20 26 26 20 28 61 72 67 63 20 21 3d 20 35 29  ) && (argc != 5)
4550: 29 20 7b 0a 09 20 20 20 20 54 63 6c 5f 41 70 70  ) {..    Tcl_App
4560: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
4570: 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  , "wrong # args:
4580: 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a   should be \"",.
4590: 09 09 20 20 20 20 61 72 67 76 5b 30 5d 2c 20 22  ..    argv[0], "
45a0: 20 73 65 6c 65 63 74 69 6f 6e 20 6f 70 74 69 6f   selection optio
45b0: 6e 20 69 6e 64 65 78 20 3f 69 6e 64 65 78 3f 5c  n index ?index?\
45c0: 22 22 2c 0a 09 09 20 20 20 20 28 63 68 61 72 20  "",...    (char 
45d0: 2a 29 20 4e 55 4c 4c 29 3b 0a 09 20 20 20 20 67  *) NULL);..    g
45e0: 6f 74 6f 20 65 72 72 6f 72 3b 0a 09 7d 0a 09 69  oto error;..}..i
45f0: 66 20 28 47 65 74 4c 69 73 74 62 6f 78 49 6e 64  f (GetListboxInd
4600: 65 78 28 69 6e 74 65 72 70 2c 20 6c 69 73 74 50  ex(interp, listP
4610: 74 72 2c 20 61 72 67 76 5b 33 5d 2c 20 30 2c 20  tr, argv[3], 0, 
4620: 26 66 69 72 73 74 29 20 21 3d 20 54 43 4c 5f 4f  &first) != TCL_O
4630: 4b 29 20 7b 0a 09 20 20 20 20 67 6f 74 6f 20 65  K) {..    goto e
4640: 72 72 6f 72 3b 0a 09 7d 0a 09 69 66 20 28 61 72  rror;..}..if (ar
4650: 67 63 20 3d 3d 20 35 29 20 7b 0a 09 20 20 20 20  gc == 5) {..    
4660: 69 66 20 28 47 65 74 4c 69 73 74 62 6f 78 49 6e  if (GetListboxIn
4670: 64 65 78 28 69 6e 74 65 72 70 2c 20 6c 69 73 74  dex(interp, list
4680: 50 74 72 2c 20 61 72 67 76 5b 34 5d 2c 20 30 2c  Ptr, argv[4], 0,
4690: 20 26 6c 61 73 74 29 20 21 3d 20 54 43 4c 5f 4f   &last) != TCL_O
46a0: 4b 29 20 7b 0a 09 09 67 6f 74 6f 20 65 72 72 6f  K) {...goto erro
46b0: 72 3b 0a 09 20 20 20 20 7d 0a 09 7d 20 65 6c 73  r;..    }..} els
46c0: 65 20 7b 0a 09 20 20 20 20 6c 61 73 74 20 3d 20  e {..    last = 
46d0: 66 69 72 73 74 3b 0a 09 7d 0a 09 6c 65 6e 67 74  first;..}..lengt
46e0: 68 20 3d 20 73 74 72 6c 65 6e 28 61 72 67 76 5b  h = strlen(argv[
46f0: 32 5d 29 3b 0a 09 63 20 3d 20 61 72 67 76 5b 32  2]);..c = argv[2
4700: 5d 5b 30 5d 3b 0a 09 69 66 20 28 28 63 20 3d 3d  ][0];..if ((c ==
4710: 20 27 61 27 29 20 26 26 20 28 73 74 72 6e 63 6d   'a') && (strncm
4720: 70 28 61 72 67 76 5b 32 5d 2c 20 22 61 6e 63 68  p(argv[2], "anch
4730: 6f 72 22 2c 20 6c 65 6e 67 74 68 29 20 3d 3d 20  or", length) == 
4740: 30 29 29 20 7b 0a 09 20 20 20 20 69 66 20 28 61  0)) {..    if (a
4750: 72 67 63 20 21 3d 20 34 29 20 7b 0a 09 09 54 63  rgc != 4) {...Tc
4760: 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
4770: 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20  nterp, "wrong # 
4780: 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
4790: 5c 22 22 2c 0a 09 09 20 20 20 20 61 72 67 76 5b  \"",...    argv[
47a0: 30 5d 2c 20 22 20 73 65 6c 65 63 74 69 6f 6e 20  0], " selection 
47b0: 61 6e 63 68 6f 72 20 69 6e 64 65 78 5c 22 22 2c  anchor index\"",
47c0: 20 28 63 68 61 72 20 2a 29 20 4e 55 4c 4c 29 3b   (char *) NULL);
47d0: 0a 09 09 67 6f 74 6f 20 65 72 72 6f 72 3b 0a 09  ...goto error;..
47e0: 20 20 20 20 7d 0a 09 20 20 20 20 6c 69 73 74 50      }..    listP
47f0: 74 72 2d 3e 73 65 6c 65 63 74 41 6e 63 68 6f 72  tr->selectAnchor
4800: 20 3d 20 66 69 72 73 74 3b 0a 09 7d 20 65 6c 73   = first;..} els
4810: 65 20 69 66 20 28 28 63 20 3d 3d 20 27 63 27 29  e if ((c == 'c')
4820: 20 26 26 20 28 73 74 72 6e 63 6d 70 28 61 72 67   && (strncmp(arg
4830: 76 5b 32 5d 2c 20 22 63 6c 65 61 72 22 2c 20 6c  v[2], "clear", l
4840: 65 6e 67 74 68 29 20 3d 3d 20 30 29 29 20 7b 0a  ength) == 0)) {.
4850: 09 20 20 20 20 4c 69 73 74 62 6f 78 53 65 6c 65  .    ListboxSele
4860: 63 74 28 6c 69 73 74 50 74 72 2c 20 66 69 72 73  ct(listPtr, firs
4870: 74 2c 20 6c 61 73 74 2c 20 30 29 3b 0a 09 7d 20  t, last, 0);..} 
4880: 65 6c 73 65 20 69 66 20 28 28 63 20 3d 3d 20 27  else if ((c == '
4890: 69 27 29 20 26 26 20 28 73 74 72 6e 63 6d 70 28  i') && (strncmp(
48a0: 61 72 67 76 5b 32 5d 2c 20 22 69 6e 63 6c 75 64  argv[2], "includ
48b0: 65 73 22 2c 20 6c 65 6e 67 74 68 29 20 3d 3d 20  es", length) == 
48c0: 30 29 29 20 7b 0a 09 20 20 20 20 69 6e 74 20 69  0)) {..    int i
48d0: 3b 0a 09 20 20 20 20 45 6c 65 6d 65 6e 74 20 2a  ;..    Element *
48e0: 65 6c 50 74 72 3b 0a 20 20 20 20 0a 09 20 20 20  elPtr;.    ..   
48f0: 20 69 66 20 28 61 72 67 63 20 21 3d 20 34 29 20   if (argc != 4) 
4900: 7b 0a 09 09 54 63 6c 5f 41 70 70 65 6e 64 52 65  {...Tcl_AppendRe
4910: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
4920: 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
4930: 6c 64 20 62 65 20 5c 22 22 2c 0a 09 09 09 61 72  ld be \"",....ar
4940: 67 76 5b 30 5d 2c 20 22 20 73 65 6c 65 63 74 69  gv[0], " selecti
4950: 6f 6e 20 69 6e 63 6c 75 64 65 73 20 69 6e 64 65  on includes inde
4960: 78 5c 22 22 2c 20 28 63 68 61 72 20 2a 29 20 4e  x\"", (char *) N
4970: 55 4c 4c 29 3b 0a 09 09 67 6f 74 6f 20 65 72 72  ULL);...goto err
4980: 6f 72 3b 0a 09 20 20 20 20 7d 0a 09 20 20 20 20  or;..    }..    
4990: 66 6f 72 20 28 65 6c 50 74 72 20 3d 20 6c 69 73  for (elPtr = lis
49a0: 74 50 74 72 2d 3e 66 69 72 73 74 50 74 72 2c 20  tPtr->firstPtr, 
49b0: 69 20 3d 20 30 3b 20 69 20 3c 20 66 69 72 73 74  i = 0; i < first
49c0: 3b 0a 09 09 20 20 20 20 69 2b 2b 2c 20 65 6c 50  ;...    i++, elP
49d0: 74 72 20 3d 20 65 6c 50 74 72 2d 3e 6e 65 78 74  tr = elPtr->next
49e0: 50 74 72 29 20 7b 0a 09 09 2f 2a 20 45 6d 70 74  Ptr) {.../* Empt
49f0: 79 20 6c 6f 6f 70 20 62 6f 64 79 2e 20 2a 2f 0a  y loop body. */.
4a00: 09 20 20 20 20 7d 0a 09 20 20 20 20 69 66 20 28  .    }..    if (
4a10: 28 65 6c 50 74 72 20 21 3d 20 4e 55 4c 4c 29 20  (elPtr != NULL) 
4a20: 26 26 20 28 65 6c 50 74 72 2d 3e 73 65 6c 65 63  && (elPtr->selec
4a30: 74 65 64 29 29 20 7b 0a 09 09 54 63 6c 5f 53 65  ted)) {...Tcl_Se
4a40: 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 22  tResult(interp,"
4a50: 31 22 2c 54 43 4c 5f 53 54 41 54 49 43 29 3b 0a  1",TCL_STATIC);.
4a60: 09 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 09  .    } else {...
4a70: 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e  Tcl_SetResult(in
4a80: 74 65 72 70 2c 22 30 22 2c 54 43 4c 5f 53 54 41  terp,"0",TCL_STA
4a90: 54 49 43 29 3b 0a 09 20 20 20 20 7d 0a 09 7d 20  TIC);..    }..} 
4aa0: 65 6c 73 65 20 69 66 20 28 28 63 20 3d 3d 20 27  else if ((c == '
4ab0: 73 27 29 20 26 26 20 28 73 74 72 6e 63 6d 70 28  s') && (strncmp(
4ac0: 61 72 67 76 5b 32 5d 2c 20 22 73 65 74 22 2c 20  argv[2], "set", 
4ad0: 6c 65 6e 67 74 68 29 20 3d 3d 20 30 29 29 20 7b  length) == 0)) {
4ae0: 0a 09 20 20 20 20 4c 69 73 74 62 6f 78 53 65 6c  ..    ListboxSel
4af0: 65 63 74 28 6c 69 73 74 50 74 72 2c 20 66 69 72  ect(listPtr, fir
4b00: 73 74 2c 20 6c 61 73 74 2c 20 31 29 3b 0a 09 7d  st, last, 1);..}
4b10: 20 65 6c 73 65 20 7b 0a 09 20 20 20 20 54 63 6c   else {..    Tcl
4b20: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
4b30: 74 65 72 70 2c 20 22 62 61 64 20 73 65 6c 65 63  terp, "bad selec
4b40: 74 69 6f 6e 20 6f 70 74 69 6f 6e 20 5c 22 22 2c  tion option \"",
4b50: 20 61 72 67 76 5b 32 5d 2c 0a 09 09 20 20 20 20   argv[2],...    
4b60: 22 5c 22 3a 20 6d 75 73 74 20 62 65 20 61 6e 63  "\": must be anc
4b70: 68 6f 72 2c 20 63 6c 65 61 72 2c 20 69 6e 63 6c  hor, clear, incl
4b80: 75 64 65 73 2c 20 6f 72 20 73 65 74 22 2c 0a 09  udes, or set",..
4b90: 09 20 20 20 20 28 63 68 61 72 20 2a 29 20 4e 55  .    (char *) NU
4ba0: 4c 4c 29 3b 0a 09 20 20 20 20 67 6f 74 6f 20 65  LL);..    goto e
4bb0: 72 72 6f 72 3b 0a 09 7d 0a 20 20 20 20 7d 20 65  rror;..}.    } e
4bc0: 6c 73 65 20 69 66 20 28 28 63 20 3d 3d 20 27 73  lse if ((c == 's
4bd0: 27 29 20 26 26 20 28 6c 65 6e 67 74 68 20 3e 3d  ') && (length >=
4be0: 20 32 29 0a 09 20 20 20 20 26 26 20 28 73 74 72   2)..    && (str
4bf0: 6e 63 6d 70 28 61 72 67 76 5b 31 5d 2c 20 22 73  ncmp(argv[1], "s
4c00: 69 7a 65 22 2c 20 6c 65 6e 67 74 68 29 20 3d 3d  ize", length) ==
4c10: 20 30 29 29 20 7b 0a 09 69 66 20 28 61 72 67 63   0)) {..if (argc
4c20: 20 21 3d 20 32 29 20 7b 0a 09 20 20 20 20 54 63   != 2) {..    Tc
4c30: 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
4c40: 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20  nterp, "wrong # 
4c50: 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
4c60: 5c 22 22 2c 0a 09 09 20 20 20 20 61 72 67 76 5b  \"",...    argv[
4c70: 30 5d 2c 20 22 20 73 69 7a 65 5c 22 22 2c 20 28  0], " size\"", (
4c80: 63 68 61 72 20 2a 29 20 4e 55 4c 4c 29 3b 0a 09  char *) NULL);..
4c90: 20 20 20 20 67 6f 74 6f 20 65 72 72 6f 72 3b 0a      goto error;.
4ca0: 09 7d 0a 09 7b 0a 09 20 20 63 68 61 72 20 62 75  .}..{..  char bu
4cb0: 66 66 65 72 5b 32 30 5d 3b 0a 09 20 20 73 70 72  ffer[20];..  spr
4cc0: 69 6e 74 66 28 62 75 66 66 65 72 2c 20 22 25 64  intf(buffer, "%d
4cd0: 22 2c 20 6c 69 73 74 50 74 72 2d 3e 6e 75 6d 45  ", listPtr->numE
4ce0: 6c 65 6d 65 6e 74 73 29 3b 0a 09 20 20 54 63 6c  lements);..  Tcl
4cf0: 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72  _SetResult(inter
4d00: 70 2c 62 75 66 66 65 72 2c 54 43 4c 5f 56 4f 4c  p,buffer,TCL_VOL
4d10: 41 54 49 4c 45 29 3b 0a 09 7d 0a 20 20 20 20 7d  ATILE);..}.    }
4d20: 20 65 6c 73 65 20 69 66 20 28 28 63 20 3d 3d 20   else if ((c == 
4d30: 27 78 27 29 20 26 26 20 28 73 74 72 6e 63 6d 70  'x') && (strncmp
4d40: 28 61 72 67 76 5b 31 5d 2c 20 22 78 76 69 65 77  (argv[1], "xview
4d50: 22 2c 20 6c 65 6e 67 74 68 29 20 3d 3d 20 30 29  ", length) == 0)
4d60: 29 20 7b 0a 09 69 6e 74 20 69 6e 64 65 78 2c 20  ) {..int index, 
4d70: 63 6f 75 6e 74 2c 20 74 79 70 65 2c 20 77 69 6e  count, type, win
4d80: 64 6f 77 57 69 64 74 68 2c 20 77 69 6e 64 6f 77  dowWidth, window
4d90: 55 6e 69 74 73 3b 0a 09 69 6e 74 20 6f 66 66 73  Units;..int offs
4da0: 65 74 20 3d 20 30 3b 09 09 2f 2a 20 49 6e 69 74  et = 0;../* Init
4db0: 69 61 6c 69 7a 65 64 20 74 6f 20 73 74 6f 70 20  ialized to stop 
4dc0: 67 63 63 20 77 61 72 6e 69 6e 67 73 2e 20 2a 2f  gcc warnings. */
4dd0: 0a 09 64 6f 75 62 6c 65 20 66 72 61 63 74 69 6f  ..double fractio
4de0: 6e 2c 20 66 72 61 63 74 69 6f 6e 32 3b 0a 0a 09  n, fraction2;...
4df0: 77 69 6e 64 6f 77 57 69 64 74 68 20 3d 20 54 6b  windowWidth = Tk
4e00: 5f 57 69 64 74 68 28 6c 69 73 74 50 74 72 2d 3e  _Width(listPtr->
4e10: 74 6b 77 69 6e 29 20 2d 20 32 2a 6c 69 73 74 50  tkwin) - 2*listP
4e20: 74 72 2d 3e 62 6f 72 64 65 72 57 69 64 74 68 3b  tr->borderWidth;
4e30: 0a 09 69 66 20 28 61 72 67 63 20 3d 3d 20 32 29  ..if (argc == 2)
4e40: 20 7b 0a 09 20 20 20 20 69 66 20 28 6c 69 73 74   {..    if (list
4e50: 50 74 72 2d 3e 6d 61 78 57 69 64 74 68 20 3d 3d  Ptr->maxWidth ==
4e60: 20 30 29 20 7b 0a 09 09 54 63 6c 5f 53 65 74 52   0) {...Tcl_SetR
4e70: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 22 30 20  esult(interp,"0 
4e80: 31 22 2c 54 43 4c 5f 53 54 41 54 49 43 29 3b 0a  1",TCL_STATIC);.
4e90: 09 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 09  .    } else {...
4ea0: 66 72 61 63 74 69 6f 6e 20 3d 20 6c 69 73 74 50  fraction = listP
4eb0: 74 72 2d 3e 78 4f 66 66 73 65 74 2f 28 28 64 6f  tr->xOffset/((do
4ec0: 75 62 6c 65 29 20 6c 69 73 74 50 74 72 2d 3e 6d  uble) listPtr->m
4ed0: 61 78 57 69 64 74 68 29 3b 0a 09 09 66 72 61 63  axWidth);...frac
4ee0: 74 69 6f 6e 32 20 3d 20 28 6c 69 73 74 50 74 72  tion2 = (listPtr
4ef0: 2d 3e 78 4f 66 66 73 65 74 20 2b 20 77 69 6e 64  ->xOffset + wind
4f00: 6f 77 57 69 64 74 68 29 0a 09 09 09 2f 28 28 64  owWidth)..../((d
4f10: 6f 75 62 6c 65 29 20 6c 69 73 74 50 74 72 2d 3e  ouble) listPtr->
4f20: 6d 61 78 57 69 64 74 68 29 3b 0a 09 09 69 66 20  maxWidth);...if 
4f30: 28 66 72 61 63 74 69 6f 6e 32 20 3e 20 31 2e 30  (fraction2 > 1.0
4f40: 29 20 7b 0a 09 09 20 20 20 20 66 72 61 63 74 69  ) {...    fracti
4f50: 6f 6e 32 20 3d 20 31 2e 30 3b 0a 09 09 7d 0a 09  on2 = 1.0;...}..
4f60: 09 7b 0a 09 09 20 20 63 68 61 72 20 62 75 66 66  .{...  char buff
4f70: 65 72 5b 36 30 5d 3b 0a 09 09 20 20 73 70 72 69  er[60];...  spri
4f80: 6e 74 66 28 62 75 66 66 65 72 2c 20 22 25 67 20  ntf(buffer, "%g 
4f90: 25 67 22 2c 20 66 72 61 63 74 69 6f 6e 2c 20 66  %g", fraction, f
4fa0: 72 61 63 74 69 6f 6e 32 29 3b 0a 09 09 20 20 54  raction2);...  T
4fb0: 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74  cl_SetResult(int
4fc0: 65 72 70 2c 62 75 66 66 65 72 2c 54 43 4c 5f 56  erp,buffer,TCL_V
4fd0: 4f 4c 41 54 49 4c 45 29 3b 0a 09 09 7d 0a 09 20  OLATILE);...}.. 
4fe0: 20 20 20 7d 0a 09 7d 20 65 6c 73 65 20 69 66 20     }..} else if 
4ff0: 28 61 72 67 63 20 3d 3d 20 33 29 20 7b 0a 09 20  (argc == 3) {.. 
5000: 20 20 20 69 66 20 28 54 63 6c 5f 47 65 74 49 6e     if (Tcl_GetIn
5010: 74 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 32  t(interp, argv[2
5020: 5d 2c 20 26 69 6e 64 65 78 29 20 21 3d 20 54 43  ], &index) != TC
5030: 4c 5f 4f 4b 29 20 7b 0a 09 09 67 6f 74 6f 20 65  L_OK) {...goto e
5040: 72 72 6f 72 3b 0a 09 20 20 20 20 7d 0a 09 20 20  rror;..    }..  
5050: 20 20 43 68 61 6e 67 65 4c 69 73 74 62 6f 78 4f    ChangeListboxO
5060: 66 66 73 65 74 28 6c 69 73 74 50 74 72 2c 20 69  ffset(listPtr, i
5070: 6e 64 65 78 29 3b 0a 09 7d 20 65 6c 73 65 20 7b  ndex);..} else {
5080: 0a 09 20 20 20 20 74 79 70 65 20 3d 20 54 6b 5f  ..    type = Tk_
5090: 47 65 74 53 63 72 6f 6c 6c 49 6e 66 6f 28 69 6e  GetScrollInfo(in
50a0: 74 65 72 70 2c 20 61 72 67 63 2c 20 61 72 67 76  terp, argc, argv
50b0: 2c 20 26 66 72 61 63 74 69 6f 6e 2c 20 26 63 6f  , &fraction, &co
50c0: 75 6e 74 29 3b 0a 09 20 20 20 20 73 77 69 74 63  unt);..    switc
50d0: 68 20 28 74 79 70 65 29 20 7b 0a 09 09 63 61 73  h (type) {...cas
50e0: 65 20 54 4b 5f 53 43 52 4f 4c 4c 5f 45 52 52 4f  e TK_SCROLL_ERRO
50f0: 52 3a 0a 09 09 20 20 20 20 67 6f 74 6f 20 65 72  R:...    goto er
5100: 72 6f 72 3b 0a 09 09 63 61 73 65 20 54 4b 5f 53  ror;...case TK_S
5110: 43 52 4f 4c 4c 5f 4d 4f 56 45 54 4f 3a 0a 09 09  CROLL_MOVETO:...
5120: 20 20 20 20 6f 66 66 73 65 74 20 3d 20 66 72 61      offset = fra
5130: 63 74 69 6f 6e 2a 6c 69 73 74 50 74 72 2d 3e 6d  ction*listPtr->m
5140: 61 78 57 69 64 74 68 20 2b 20 30 2e 35 3b 0a 09  axWidth + 0.5;..
5150: 09 20 20 20 20 62 72 65 61 6b 3b 0a 09 09 63 61  .    break;...ca
5160: 73 65 20 54 4b 5f 53 43 52 4f 4c 4c 5f 50 41 47  se TK_SCROLL_PAG
5170: 45 53 3a 0a 09 09 20 20 20 20 77 69 6e 64 6f 77  ES:...    window
5180: 55 6e 69 74 73 20 3d 20 77 69 6e 64 6f 77 57 69  Units = windowWi
5190: 64 74 68 3b 0a 09 09 20 20 20 20 69 66 20 28 77  dth;...    if (w
51a0: 69 6e 64 6f 77 55 6e 69 74 73 20 3e 20 32 29 20  indowUnits > 2) 
51b0: 7b 0a 09 09 09 6f 66 66 73 65 74 20 3d 20 6c 69  {....offset = li
51c0: 73 74 50 74 72 2d 3e 78 4f 66 66 73 65 74 20 2b  stPtr->xOffset +
51d0: 20 63 6f 75 6e 74 2a 28 77 69 6e 64 6f 77 55 6e   count*(windowUn
51e0: 69 74 73 2d 32 29 3b 0a 09 09 20 20 20 20 7d 20  its-2);...    } 
51f0: 65 6c 73 65 20 7b 0a 09 09 09 6f 66 66 73 65 74  else {....offset
5200: 20 3d 20 6c 69 73 74 50 74 72 2d 3e 78 4f 66 66   = listPtr->xOff
5210: 73 65 74 20 2b 20 63 6f 75 6e 74 3b 0a 09 09 20  set + count;... 
5220: 20 20 20 7d 0a 09 09 20 20 20 20 62 72 65 61 6b     }...    break
5230: 3b 0a 09 09 63 61 73 65 20 54 4b 5f 53 43 52 4f  ;...case TK_SCRO
5240: 4c 4c 5f 55 4e 49 54 53 3a 0a 09 09 20 20 20 20  LL_UNITS:...    
5250: 6f 66 66 73 65 74 20 3d 20 6c 69 73 74 50 74 72  offset = listPtr
5260: 2d 3e 78 4f 66 66 73 65 74 20 2b 20 63 6f 75 6e  ->xOffset + coun
5270: 74 3b 0a 09 09 20 20 20 20 62 72 65 61 6b 3b 0a  t;...    break;.
5280: 09 20 20 20 20 7d 0a 09 20 20 20 20 43 68 61 6e  .    }..    Chan
5290: 67 65 4c 69 73 74 62 6f 78 4f 66 66 73 65 74 28  geListboxOffset(
52a0: 6c 69 73 74 50 74 72 2c 20 6f 66 66 73 65 74 29  listPtr, offset)
52b0: 3b 0a 09 7d 0a 20 20 20 20 7d 20 65 6c 73 65 20  ;..}.    } else 
52c0: 69 66 20 28 28 63 20 3d 3d 20 27 79 27 29 20 26  if ((c == 'y') &
52d0: 26 20 28 73 74 72 6e 63 6d 70 28 61 72 67 76 5b  & (strncmp(argv[
52e0: 31 5d 2c 20 22 79 76 69 65 77 22 2c 20 6c 65 6e  1], "yview", len
52f0: 67 74 68 29 20 3d 3d 20 30 29 29 20 7b 0a 09 69  gth) == 0)) {..i
5300: 6e 74 20 69 6e 64 65 78 2c 20 63 6f 75 6e 74 2c  nt index, count,
5310: 20 74 79 70 65 3b 0a 09 64 6f 75 62 6c 65 20 66   type;..double f
5320: 72 61 63 74 69 6f 6e 2c 20 66 72 61 63 74 69 6f  raction, fractio
5330: 6e 32 3b 0a 0a 09 69 66 20 28 61 72 67 63 20 3d  n2;...if (argc =
5340: 3d 20 32 29 20 7b 0a 09 20 20 20 20 69 66 20 28  = 2) {..    if (
5350: 6c 69 73 74 50 74 72 2d 3e 6e 75 6d 45 6c 65 6d  listPtr->numElem
5360: 65 6e 74 73 20 3d 3d 20 30 29 20 7b 0a 09 09 54  ents == 0) {...T
5370: 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74  cl_SetResult(int
5380: 65 72 70 2c 22 30 20 31 22 2c 20 54 43 4c 5f 53  erp,"0 1", TCL_S
5390: 54 41 54 49 43 29 3b 0a 09 20 20 20 20 7d 20 65  TATIC);..    } e
53a0: 6c 73 65 20 7b 0a 09 09 66 72 61 63 74 69 6f 6e  lse {...fraction
53b0: 20 3d 20 6c 69 73 74 50 74 72 2d 3e 74 6f 70 49   = listPtr->topI
53c0: 6e 64 65 78 2f 28 28 64 6f 75 62 6c 65 29 20 6c  ndex/((double) l
53d0: 69 73 74 50 74 72 2d 3e 6e 75 6d 45 6c 65 6d 65  istPtr->numEleme
53e0: 6e 74 73 29 3b 0a 09 09 66 72 61 63 74 69 6f 6e  nts);...fraction
53f0: 32 20 3d 20 28 6c 69 73 74 50 74 72 2d 3e 74 6f  2 = (listPtr->to
5400: 70 49 6e 64 65 78 2b 6c 69 73 74 50 74 72 2d 3e  pIndex+listPtr->
5410: 6e 75 6d 4c 69 6e 65 73 29 0a 09 09 09 2f 28 28  numLines)..../((
5420: 64 6f 75 62 6c 65 29 20 6c 69 73 74 50 74 72 2d  double) listPtr-
5430: 3e 6e 75 6d 45 6c 65 6d 65 6e 74 73 29 3b 0a 09  >numElements);..
5440: 09 69 66 20 28 66 72 61 63 74 69 6f 6e 32 20 3e  .if (fraction2 >
5450: 20 31 2e 30 29 20 7b 0a 09 09 20 20 20 20 66 72   1.0) {...    fr
5460: 61 63 74 69 6f 6e 32 20 3d 20 31 2e 30 3b 0a 09  action2 = 1.0;..
5470: 09 7d 0a 09 09 7b 0a 09 09 20 20 63 68 61 72 20  .}...{...  char 
5480: 62 75 66 66 65 72 5b 36 30 5d 3b 0a 09 09 20 20  buffer[60];...  
5490: 73 70 72 69 6e 74 66 28 62 75 66 66 65 72 2c 20  sprintf(buffer, 
54a0: 22 25 67 20 25 67 22 2c 20 66 72 61 63 74 69 6f  "%g %g", fractio
54b0: 6e 2c 20 66 72 61 63 74 69 6f 6e 32 29 3b 0a 09  n, fraction2);..
54c0: 09 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74  .  Tcl_SetResult
54d0: 28 69 6e 74 65 72 70 2c 62 75 66 66 65 72 2c 54  (interp,buffer,T
54e0: 43 4c 5f 56 4f 4c 41 54 49 4c 45 29 3b 0a 09 09  CL_VOLATILE);...
54f0: 7d 0a 09 20 20 20 20 7d 0a 09 7d 20 65 6c 73 65  }..    }..} else
5500: 20 69 66 20 28 61 72 67 63 20 3d 3d 20 33 29 20   if (argc == 3) 
5510: 7b 0a 09 20 20 20 20 69 66 20 28 47 65 74 4c 69  {..    if (GetLi
5520: 73 74 62 6f 78 49 6e 64 65 78 28 69 6e 74 65 72  stboxIndex(inter
5530: 70 2c 20 6c 69 73 74 50 74 72 2c 20 61 72 67 76  p, listPtr, argv
5540: 5b 32 5d 2c 20 30 2c 20 26 69 6e 64 65 78 29 0a  [2], 0, &index).
5550: 09 09 20 20 20 20 21 3d 20 54 43 4c 5f 4f 4b 29  ..    != TCL_OK)
5560: 20 7b 0a 09 09 67 6f 74 6f 20 65 72 72 6f 72 3b   {...goto error;
5570: 0a 09 20 20 20 20 7d 0a 09 20 20 20 20 43 68 61  ..    }..    Cha
5580: 6e 67 65 4c 69 73 74 62 6f 78 56 69 65 77 28 6c  ngeListboxView(l
5590: 69 73 74 50 74 72 2c 20 69 6e 64 65 78 29 3b 0a  istPtr, index);.
55a0: 09 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20 20 74  .} else {..    t
55b0: 79 70 65 20 3d 20 54 6b 5f 47 65 74 53 63 72 6f  ype = Tk_GetScro
55c0: 6c 6c 49 6e 66 6f 28 69 6e 74 65 72 70 2c 20 61  llInfo(interp, a
55d0: 72 67 63 2c 20 61 72 67 76 2c 20 26 66 72 61 63  rgc, argv, &frac
55e0: 74 69 6f 6e 2c 20 26 63 6f 75 6e 74 29 3b 0a 09  tion, &count);..
55f0: 20 20 20 20 73 77 69 74 63 68 20 28 74 79 70 65      switch (type
5600: 29 20 7b 0a 09 09 63 61 73 65 20 54 4b 5f 53 43  ) {...case TK_SC
5610: 52 4f 4c 4c 5f 45 52 52 4f 52 3a 0a 09 09 20 20  ROLL_ERROR:...  
5620: 20 20 67 6f 74 6f 20 65 72 72 6f 72 3b 0a 09 09    goto error;...
5630: 63 61 73 65 20 54 4b 5f 53 43 52 4f 4c 4c 5f 4d  case TK_SCROLL_M
5640: 4f 56 45 54 4f 3a 0a 09 09 20 20 20 20 69 6e 64  OVETO:...    ind
5650: 65 78 20 3d 20 6c 69 73 74 50 74 72 2d 3e 6e 75  ex = listPtr->nu
5660: 6d 45 6c 65 6d 65 6e 74 73 2a 66 72 61 63 74 69  mElements*fracti
5670: 6f 6e 20 2b 20 30 2e 35 3b 0a 09 09 20 20 20 20  on + 0.5;...    
5680: 62 72 65 61 6b 3b 0a 09 09 63 61 73 65 20 54 4b  break;...case TK
5690: 5f 53 43 52 4f 4c 4c 5f 50 41 47 45 53 3a 0a 09  _SCROLL_PAGES:..
56a0: 09 20 20 20 20 69 66 20 28 6c 69 73 74 50 74 72  .    if (listPtr
56b0: 2d 3e 6e 75 6d 4c 69 6e 65 73 20 3e 20 32 29 20  ->numLines > 2) 
56c0: 7b 0a 09 09 09 69 6e 64 65 78 20 3d 20 6c 69 73  {....index = lis
56d0: 74 50 74 72 2d 3e 74 6f 70 49 6e 64 65 78 0a 09  tPtr->topIndex..
56e0: 09 09 09 2b 20 63 6f 75 6e 74 2a 28 6c 69 73 74  ...+ count*(list
56f0: 50 74 72 2d 3e 6e 75 6d 4c 69 6e 65 73 2d 32 29  Ptr->numLines-2)
5700: 3b 0a 09 09 20 20 20 20 7d 20 65 6c 73 65 20 7b  ;...    } else {
5710: 0a 09 09 09 69 6e 64 65 78 20 3d 20 6c 69 73 74  ....index = list
5720: 50 74 72 2d 3e 74 6f 70 49 6e 64 65 78 20 2b 20  Ptr->topIndex + 
5730: 63 6f 75 6e 74 3b 0a 09 09 20 20 20 20 7d 0a 09  count;...    }..
5740: 09 20 20 20 20 62 72 65 61 6b 3b 0a 09 09 63 61  .    break;...ca
5750: 73 65 20 54 4b 5f 53 43 52 4f 4c 4c 5f 55 4e 49  se TK_SCROLL_UNI
5760: 54 53 3a 0a 09 09 20 20 20 20 69 6e 64 65 78 20  TS:...    index 
5770: 3d 20 6c 69 73 74 50 74 72 2d 3e 74 6f 70 49 6e  = listPtr->topIn
5780: 64 65 78 20 2b 20 63 6f 75 6e 74 3b 0a 09 09 20  dex + count;... 
5790: 20 20 20 62 72 65 61 6b 3b 0a 09 20 20 20 20 7d     break;..    }
57a0: 0a 09 20 20 20 20 43 68 61 6e 67 65 4c 69 73 74  ..    ChangeList
57b0: 62 6f 78 56 69 65 77 28 6c 69 73 74 50 74 72 2c  boxView(listPtr,
57c0: 20 69 6e 64 65 78 29 3b 0a 09 7d 0a 20 20 20 20   index);..}.    
57d0: 7d 20 65 6c 73 65 20 7b 0a 09 54 63 6c 5f 41 70  } else {..Tcl_Ap
57e0: 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
57f0: 70 2c 20 22 62 61 64 20 6f 70 74 69 6f 6e 20 5c  p, "bad option \
5800: 22 22 2c 20 61 72 67 76 5b 31 5d 2c 0a 09 09 22  "", argv[1],..."
5810: 5c 22 3a 20 6d 75 73 74 20 62 65 20 61 63 74 69  \": must be acti
5820: 76 61 74 65 2c 20 62 62 6f 78 2c 20 63 67 65 74  vate, bbox, cget
5830: 2c 20 63 6f 6e 66 69 67 75 72 65 2c 20 22 2c 0a  , configure, ",.
5840: 09 09 22 63 75 72 73 65 6c 65 63 74 69 6f 6e 2c  .."curselection,
5850: 20 64 65 6c 65 74 65 2c 20 67 65 74 2c 20 69 6e   delete, get, in
5860: 64 65 78 2c 20 69 6e 73 65 72 74 2c 20 6e 65 61  dex, insert, nea
5870: 72 65 73 74 2c 20 22 2c 0a 09 09 22 73 63 61 6e  rest, ",..."scan
5880: 2c 20 73 65 65 2c 20 73 65 6c 65 63 74 69 6f 6e  , see, selection
5890: 2c 20 73 69 7a 65 2c 20 22 2c 0a 09 09 22 78 76  , size, ",..."xv
58a0: 69 65 77 2c 20 6f 72 20 79 76 69 65 77 22 2c 20  iew, or yview", 
58b0: 28 63 68 61 72 20 2a 29 20 4e 55 4c 4c 29 3b 0a  (char *) NULL);.
58c0: 09 67 6f 74 6f 20 65 72 72 6f 72 3b 0a 20 20 20  .goto error;.   
58d0: 20 7d 0a 20 20 20 20 54 6b 5f 52 65 6c 65 61 73   }.    Tk_Releas
58e0: 65 28 28 43 6c 69 65 6e 74 44 61 74 61 29 20 6c  e((ClientData) l
58f0: 69 73 74 50 74 72 29 3b 0a 20 20 20 20 72 65 74  istPtr);.    ret
5900: 75 72 6e 20 72 65 73 75 6c 74 3b 0a 0a 20 20 20  urn result;..   
5910: 20 65 72 72 6f 72 3a 0a 20 20 20 20 54 6b 5f 52   error:.    Tk_R
5920: 65 6c 65 61 73 65 28 28 43 6c 69 65 6e 74 44 61  elease((ClientDa
5930: 74 61 29 20 6c 69 73 74 50 74 72 29 3b 0a 20 20  ta) listPtr);.  
5940: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
5950: 4f 52 3b 0a 7d 0a 0c 0a 2f 2a 0a 20 2a 2d 2d 2d  OR;.}.../*. *---
5960: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5970: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5980: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5990: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
59a0: 2d 2d 2d 0a 20 2a 0a 20 2a 20 44 65 73 74 72 6f  ---. *. * Destro
59b0: 79 4c 69 73 74 62 6f 78 20 2d 2d 0a 20 2a 0a 20  yListbox --. *. 
59c0: 2a 09 54 68 69 73 20 70 72 6f 63 65 64 75 72 65  *.This procedure
59d0: 20 69 73 20 69 6e 76 6f 6b 65 64 20 62 79 20 54   is invoked by T
59e0: 6b 5f 45 76 65 6e 74 75 61 6c 6c 79 46 72 65 65  k_EventuallyFree
59f0: 20 6f 72 20 54 6b 5f 52 65 6c 65 61 73 65 0a 20   or Tk_Release. 
5a00: 2a 09 74 6f 20 63 6c 65 61 6e 20 75 70 20 74 68  *.to clean up th
5a10: 65 20 69 6e 74 65 72 6e 61 6c 20 73 74 72 75 63  e internal struc
5a20: 74 75 72 65 20 6f 66 20 61 20 6c 69 73 74 62 6f  ture of a listbo
5a30: 78 20 61 74 20 61 20 73 61 66 65 20 74 69 6d 65  x at a safe time
5a40: 0a 20 2a 09 28 77 68 65 6e 20 6e 6f 2d 6f 6e 65  . *.(when no-one
5a50: 20 69 73 20 75 73 69 6e 67 20 69 74 20 61 6e 79   is using it any
5a60: 6d 6f 72 65 29 2e 0a 20 2a 0a 20 2a 20 52 65 73  more).. *. * Res
5a70: 75 6c 74 73 3a 0a 20 2a 09 4e 6f 6e 65 2e 0a 20  ults:. *.None.. 
5a80: 2a 0a 20 2a 20 53 69 64 65 20 65 66 66 65 63 74  *. * Side effect
5a90: 73 3a 0a 20 2a 09 45 76 65 72 79 74 68 69 6e 67  s:. *.Everything
5aa0: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
5ab0: 20 74 68 65 20 6c 69 73 74 62 6f 78 20 69 73 20   the listbox is 
5ac0: 66 72 65 65 64 20 75 70 2e 0a 20 2a 0a 20 2a 2d  freed up.. *. *-
5ad0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5ae0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5af0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5b00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5b10: 2d 2d 2d 2d 2d 0a 20 2a 2f 0a 0a 73 74 61 74 69  -----. */..stati
5b20: 63 20 76 6f 69 64 0a 44 65 73 74 72 6f 79 4c 69  c void.DestroyLi
5b30: 73 74 62 6f 78 28 63 6c 69 65 6e 74 44 61 74 61  stbox(clientData
5b40: 29 0a 20 20 20 20 43 6c 69 65 6e 74 44 61 74 61  ).    ClientData
5b50: 20 63 6c 69 65 6e 74 44 61 74 61 3b 09 2f 2a 20   clientData;./* 
5b60: 49 6e 66 6f 20 61 62 6f 75 74 20 6c 69 73 74 62  Info about listb
5b70: 6f 78 20 77 69 64 67 65 74 2e 20 2a 2f 0a 7b 0a  ox widget. */.{.
5b80: 20 20 20 20 72 65 67 69 73 74 65 72 20 4c 69 73      register Lis
5b90: 74 62 6f 78 20 2a 6c 69 73 74 50 74 72 20 3d 20  tbox *listPtr = 
5ba0: 28 4c 69 73 74 62 6f 78 20 2a 29 20 63 6c 69 65  (Listbox *) clie
5bb0: 6e 74 44 61 74 61 3b 0a 20 20 20 20 72 65 67 69  ntData;.    regi
5bc0: 73 74 65 72 20 45 6c 65 6d 65 6e 74 20 2a 65 6c  ster Element *el
5bd0: 50 74 72 2c 20 2a 6e 65 78 74 50 74 72 3b 0a 0a  Ptr, *nextPtr;..
5be0: 20 20 20 20 2f 2a 0a 20 20 20 20 20 2a 20 46 72      /*.     * Fr
5bf0: 65 65 20 75 70 20 61 6c 6c 20 6f 66 20 74 68 65  ee up all of the
5c00: 20 6c 69 73 74 20 65 6c 65 6d 65 6e 74 73 2e 0a   list elements..
5c10: 20 20 20 20 20 2a 2f 0a 0a 20 20 20 20 66 6f 72       */..    for
5c20: 20 28 65 6c 50 74 72 20 3d 20 6c 69 73 74 50 74   (elPtr = listPt
5c30: 72 2d 3e 66 69 72 73 74 50 74 72 3b 20 65 6c 50  r->firstPtr; elP
5c40: 74 72 20 21 3d 20 4e 55 4c 4c 3b 20 29 20 7b 0a  tr != NULL; ) {.
5c50: 09 6e 65 78 74 50 74 72 20 3d 20 65 6c 50 74 72  .nextPtr = elPtr
5c60: 2d 3e 6e 65 78 74 50 74 72 3b 0a 09 63 6b 66 72  ->nextPtr;..ckfr
5c70: 65 65 28 28 63 68 61 72 20 2a 29 20 65 6c 50 74  ee((char *) elPt
5c80: 72 29 3b 0a 09 65 6c 50 74 72 20 3d 20 6e 65 78  r);..elPtr = nex
5c90: 74 50 74 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20  tPtr;.    }.    
5ca0: 54 6b 5f 46 72 65 65 4f 70 74 69 6f 6e 73 28 63  Tk_FreeOptions(c
5cb0: 6f 6e 66 69 67 53 70 65 63 73 2c 20 28 63 68 61  onfigSpecs, (cha
5cc0: 72 20 2a 29 20 6c 69 73 74 50 74 72 2c 20 30 29  r *) listPtr, 0)
5cd0: 3b 0a 20 20 20 20 63 6b 66 72 65 65 28 28 63 68  ;.    ckfree((ch
5ce0: 61 72 20 2a 29 20 6c 69 73 74 50 74 72 29 3b 0a  ar *) listPtr);.
5cf0: 7d 0a 0c 0a 2f 2a 0a 20 2a 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 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a  ---------------.
5d40: 20 2a 0a 20 2a 20 43 6f 6e 66 69 67 75 72 65 4c   *. * ConfigureL
5d50: 69 73 74 62 6f 78 20 2d 2d 0a 20 2a 0a 20 2a 09  istbox --. *. *.
5d60: 54 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 69  This procedure i
5d70: 73 20 63 61 6c 6c 65 64 20 74 6f 20 70 72 6f 63  s called to proc
5d80: 65 73 73 20 61 6e 20 61 72 67 76 2f 61 72 67 63  ess an argv/argc
5d90: 20 6c 69 73 74 2c 20 70 6c 75 73 0a 20 2a 09 74   list, plus. *.t
5da0: 68 65 20 54 6b 20 6f 70 74 69 6f 6e 20 64 61 74  he Tk option dat
5db0: 61 62 61 73 65 2c 20 69 6e 20 6f 72 64 65 72 20  abase, in order 
5dc0: 74 6f 20 63 6f 6e 66 69 67 75 72 65 20 28 6f 72  to configure (or
5dd0: 20 72 65 63 6f 6e 66 69 67 75 72 65 29 0a 20 2a   reconfigure). *
5de0: 09 61 20 6c 69 73 74 62 6f 78 20 77 69 64 67 65  .a listbox widge
5df0: 74 2e 0a 20 2a 0a 20 2a 20 52 65 73 75 6c 74 73  t.. *. * Results
5e00: 3a 0a 20 2a 09 54 68 65 20 72 65 74 75 72 6e 20  :. *.The return 
5e10: 76 61 6c 75 65 20 69 73 20 61 20 73 74 61 6e 64  value is a stand
5e20: 61 72 64 20 54 63 6c 20 72 65 73 75 6c 74 2e 20  ard Tcl result. 
5e30: 20 49 66 20 54 43 4c 5f 45 52 52 4f 52 20 69 73   If TCL_ERROR is
5e40: 0a 20 2a 09 72 65 74 75 72 6e 65 64 2c 20 74 68  . *.returned, th
5e50: 65 6e 20 69 6e 74 65 72 70 2d 3e 72 65 73 75 6c  en interp->resul
5e60: 74 20 63 6f 6e 74 61 69 6e 73 20 61 6e 20 65 72  t contains an er
5e70: 72 6f 72 20 6d 65 73 73 61 67 65 2e 0a 20 2a 0a  ror message.. *.
5e80: 20 2a 20 53 69 64 65 20 65 66 66 65 63 74 73 3a   * Side effects:
5e90: 0a 20 2a 09 43 6f 6e 66 69 67 75 72 61 74 69 6f  . *.Configuratio
5ea0: 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 73  n information, s
5eb0: 75 63 68 20 61 73 20 63 6f 6c 6f 72 73 2c 20 62  uch as colors, b
5ec0: 6f 72 64 65 72 20 77 69 64 74 68 2c 0a 20 2a 09  order width,. *.
5ed0: 65 74 63 2e 20 67 65 74 20 73 65 74 20 66 6f 72  etc. get set for
5ee0: 20 6c 69 73 74 50 74 72 3b 20 20 6f 6c 64 20 72   listPtr;  old r
5ef0: 65 73 6f 75 72 63 65 73 20 67 65 74 20 66 72 65  esources get fre
5f00: 65 64 2c 0a 20 2a 09 69 66 20 74 68 65 72 65 20  ed,. *.if there 
5f10: 77 65 72 65 20 61 6e 79 2e 0a 20 2a 0a 20 2a 2d  were any.. *. *-
5f20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5f30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5f40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5f50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5f60: 2d 2d 2d 2d 2d 0a 20 2a 2f 0a 0a 73 74 61 74 69  -----. */..stati
5f70: 63 20 69 6e 74 0a 43 6f 6e 66 69 67 75 72 65 4c  c int.ConfigureL
5f80: 69 73 74 62 6f 78 28 69 6e 74 65 72 70 2c 20 6c  istbox(interp, l
5f90: 69 73 74 50 74 72 2c 20 61 72 67 63 2c 20 61 72  istPtr, argc, ar
5fa0: 67 76 2c 20 66 6c 61 67 73 29 0a 20 20 20 20 54  gv, flags).    T
5fb0: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
5fc0: 70 3b 09 09 2f 2a 20 55 73 65 64 20 66 6f 72 20  p;../* Used for 
5fd0: 65 72 72 6f 72 20 72 65 70 6f 72 74 69 6e 67 2e  error reporting.
5fe0: 20 2a 2f 0a 20 20 20 20 72 65 67 69 73 74 65 72   */.    register
5ff0: 20 4c 69 73 74 62 6f 78 20 2a 6c 69 73 74 50 74   Listbox *listPt
6000: 72 3b 09 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f  r;./* Informatio
6010: 6e 20 61 62 6f 75 74 20 77 69 64 67 65 74 3b 20  n about widget; 
6020: 20 6d 61 79 20 6f 72 20 6d 61 79 0a 09 09 09 09   may or may.....
6030: 20 2a 20 6e 6f 74 20 61 6c 72 65 61 64 79 20 68   * not already h
6040: 61 76 65 20 76 61 6c 75 65 73 20 66 6f 72 20 73  ave values for s
6050: 6f 6d 65 20 66 69 65 6c 64 73 2e 20 2a 2f 0a 20  ome fields. */. 
6060: 20 20 20 69 6e 74 20 61 72 67 63 3b 09 09 09 2f     int argc;.../
6070: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 76 61 6c 69  * Number of vali
6080: 64 20 65 6e 74 72 69 65 73 20 69 6e 20 61 72 67  d entries in arg
6090: 76 2e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a  v. */.    char *
60a0: 2a 61 72 67 76 3b 09 09 2f 2a 20 41 72 67 75 6d  *argv;../* Argum
60b0: 65 6e 74 73 2e 20 2a 2f 0a 20 20 20 20 69 6e 74  ents. */.    int
60c0: 20 66 6c 61 67 73 3b 09 09 09 2f 2a 20 46 6c 61   flags;.../* Fla
60d0: 67 73 20 74 6f 20 70 61 73 73 20 74 6f 20 54 6b  gs to pass to Tk
60e0: 5f 43 6f 6e 66 69 67 75 72 65 57 69 64 67 65 74  _ConfigureWidget
60f0: 2e 20 2a 2f 0a 7b 0a 20 20 20 20 69 66 20 28 54  . */.{.    if (T
6100: 6b 5f 43 6f 6e 66 69 67 75 72 65 57 69 64 67 65  k_ConfigureWidge
6110: 74 28 69 6e 74 65 72 70 2c 20 6c 69 73 74 50 74  t(interp, listPt
6120: 72 2d 3e 74 6b 77 69 6e 2c 20 63 6f 6e 66 69 67  r->tkwin, config
6130: 53 70 65 63 73 2c 0a 09 20 20 20 20 61 72 67 63  Specs,..    argc
6140: 2c 20 61 72 67 76 2c 20 28 63 68 61 72 20 2a 29  , argv, (char *)
6150: 20 6c 69 73 74 50 74 72 2c 20 66 6c 61 67 73 29   listPtr, flags)
6160: 20 21 3d 20 54 43 4c 5f 4f 4b 29 20 7b 0a 09 72   != TCL_OK) {..r
6170: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
6180: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 0a 20  .    }..    /*. 
6190: 20 20 20 20 2a 20 52 65 67 69 73 74 65 72 20 74      * Register t
61a0: 68 65 20 64 65 73 69 72 65 64 20 67 65 6f 6d 65  he desired geome
61b0: 74 72 79 20 66 6f 72 20 74 68 65 20 77 69 6e 64  try for the wind
61c0: 6f 77 20 61 6e 64 20 61 72 72 61 6e 67 65 20 66  ow and arrange f
61d0: 6f 72 0a 20 20 20 20 20 2a 20 74 68 65 20 77 69  or.     * the wi
61e0: 6e 64 6f 77 20 74 6f 20 62 65 20 72 65 64 69 73  ndow to be redis
61f0: 70 6c 61 79 65 64 2e 0a 20 20 20 20 20 2a 2f 0a  played..     */.
6200: 0a 20 20 20 20 54 6b 5f 53 65 74 49 6e 74 65 72  .    Tk_SetInter
6210: 6e 61 6c 42 6f 72 64 65 72 28 6c 69 73 74 50 74  nalBorder(listPt
6220: 72 2d 3e 74 6b 77 69 6e 2c 20 6c 69 73 74 50 74  r->tkwin, listPt
6230: 72 2d 3e 62 6f 72 64 65 72 57 69 64 74 68 29 3b  r->borderWidth);
6240: 0a 20 20 20 20 4c 69 73 74 62 6f 78 43 6f 6d 70  .    ListboxComp
6250: 75 74 65 47 65 6f 6d 65 74 72 79 28 6c 69 73 74  uteGeometry(list
6260: 50 74 72 2c 20 31 29 3b 0a 20 20 20 20 6c 69 73  Ptr, 1);.    lis
6270: 74 50 74 72 2d 3e 66 6c 61 67 73 20 7c 3d 20 55  tPtr->flags |= U
6280: 50 44 41 54 45 5f 56 5f 53 43 52 4f 4c 4c 42 41  PDATE_V_SCROLLBA
6290: 52 7c 55 50 44 41 54 45 5f 48 5f 53 43 52 4f 4c  R|UPDATE_H_SCROL
62a0: 4c 42 41 52 3b 0a 20 20 20 20 4c 69 73 74 62 6f  LBAR;.    Listbo
62b0: 78 52 65 64 72 61 77 52 61 6e 67 65 28 6c 69 73  xRedrawRange(lis
62c0: 74 50 74 72 2c 20 30 2c 20 6c 69 73 74 50 74 72  tPtr, 0, listPtr
62d0: 2d 3e 6e 75 6d 45 6c 65 6d 65 6e 74 73 2d 31 29  ->numElements-1)
62e0: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
62f0: 5f 4f 4b 3b 0a 7d 0a 0c 0a 2f 2a 0a 20 2a 2d 2d  _OK;.}.../*. *--
6300: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6310: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6320: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6330: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 0a  ------------. *.
6340: 20 2a 20 44 69 73 70 6c 61 79 4c 69 73 74 62 6f   * DisplayListbo
6350: 78 20 2d 2d 0a 20 2a 0a 20 2a 09 54 68 69 73 20  x --. *. *.This 
6360: 70 72 6f 63 65 64 75 72 65 20 72 65 64 72 61 77  procedure redraw
6370: 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f  s the contents o
6380: 66 20 61 20 6c 69 73 74 62 6f 78 20 77 69 6e 64  f a listbox wind
6390: 6f 77 2e 0a 20 2a 0a 20 2a 20 52 65 73 75 6c 74  ow.. *. * Result
63a0: 73 3a 0a 20 2a 09 4e 6f 6e 65 2e 0a 20 2a 0a 20  s:. *.None.. *. 
63b0: 2a 20 53 69 64 65 20 65 66 66 65 63 74 73 3a 0a  * Side effects:.
63c0: 20 2a 09 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61   *.Information a
63d0: 70 70 65 61 72 73 20 6f 6e 20 74 68 65 20 73 63  ppears on the sc
63e0: 72 65 65 6e 2e 0a 20 2a 0a 20 2a 2d 2d 2d 2d 2d  reen.. *. *-----
63f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6400: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6410: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6420: 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 2f 0a 0a 73  ---------. */..s
6430: 74 61 74 69 63 20 76 6f 69 64 0a 44 69 73 70 6c  tatic void.Displ
6440: 61 79 4c 69 73 74 62 6f 78 28 63 6c 69 65 6e 74  ayListbox(client
6450: 44 61 74 61 29 0a 20 20 20 20 43 6c 69 65 6e 74  Data).    Client
6460: 44 61 74 61 20 63 6c 69 65 6e 74 44 61 74 61 3b  Data clientData;
6470: 09 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20  ./* Information 
6480: 61 62 6f 75 74 20 77 69 6e 64 6f 77 2e 20 2a 2f  about window. */
6490: 0a 7b 0a 20 20 20 20 72 65 67 69 73 74 65 72 20  .{.    register 
64a0: 4c 69 73 74 62 6f 78 20 2a 6c 69 73 74 50 74 72  Listbox *listPtr
64b0: 20 3d 20 28 4c 69 73 74 62 6f 78 20 2a 29 20 63   = (Listbox *) c
64c0: 6c 69 65 6e 74 44 61 74 61 3b 0a 20 20 20 20 72  lientData;.    r
64d0: 65 67 69 73 74 65 72 20 54 6b 5f 57 69 6e 64 6f  egister Tk_Windo
64e0: 77 20 74 6b 77 69 6e 20 3d 20 6c 69 73 74 50 74  w tkwin = listPt
64f0: 72 2d 3e 74 6b 77 69 6e 3b 0a 20 20 20 20 72 65  r->tkwin;.    re
6500: 67 69 73 74 65 72 20 45 6c 65 6d 65 6e 74 20 2a  gister Element *
6510: 65 6c 50 74 72 3b 0a 20 20 20 20 69 6e 74 20 77  elPtr;.    int w
6520: 69 64 74 68 20 3d 20 54 6b 5f 57 69 64 74 68 28  idth = Tk_Width(
6530: 74 6b 77 69 6e 29 3b 0a 20 20 20 20 69 6e 74 20  tkwin);.    int 
6540: 68 65 69 67 68 74 20 3d 20 54 6b 5f 48 65 69 67  height = Tk_Heig
6550: 68 74 28 74 6b 77 69 6e 29 3b 0a 20 20 20 20 69  ht(tkwin);.    i
6560: 6e 74 20 79 43 75 72 73 20 3d 20 6c 69 73 74 50  nt yCurs = listP
6570: 74 72 2d 3e 62 6f 72 64 65 72 57 69 64 74 68 3b  tr->borderWidth;
6580: 09 09 2f 2a 20 56 65 72 74 69 63 61 6c 20 70 6f  ../* Vertical po
6590: 73 69 74 69 6f 6e 20 66 6f 72 0a 09 09 09 09 09  sition for......
65a0: 09 20 2a 20 63 75 72 73 6f 72 2e 20 2a 2f 0a 20  . * cursor. */. 
65b0: 20 20 20 69 6e 74 20 69 2c 20 78 2c 20 79 2c 20     int i, x, y, 
65c0: 6c 69 6d 69 74 3b 0a 0a 20 20 20 20 6c 69 73 74  limit;..    list
65d0: 50 74 72 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 52  Ptr->flags &= ~R
65e0: 45 44 52 41 57 5f 50 45 4e 44 49 4e 47 3b 0a 20  EDRAW_PENDING;. 
65f0: 20 20 20 69 66 20 28 6c 69 73 74 50 74 72 2d 3e     if (listPtr->
6600: 66 6c 61 67 73 20 26 20 55 50 44 41 54 45 5f 56  flags & UPDATE_V
6610: 5f 53 43 52 4f 4c 4c 42 41 52 29 20 7b 0a 09 4c  _SCROLLBAR) {..L
6620: 69 73 74 62 6f 78 55 70 64 61 74 65 56 53 63 72  istboxUpdateVScr
6630: 6f 6c 6c 62 61 72 28 6c 69 73 74 50 74 72 29 3b  ollbar(listPtr);
6640: 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 20 28 6c  .    }.    if (l
6650: 69 73 74 50 74 72 2d 3e 66 6c 61 67 73 20 26 20  istPtr->flags & 
6660: 55 50 44 41 54 45 5f 48 5f 53 43 52 4f 4c 4c 42  UPDATE_H_SCROLLB
6670: 41 52 29 20 7b 0a 09 4c 69 73 74 62 6f 78 55 70  AR) {..ListboxUp
6680: 64 61 74 65 48 53 63 72 6f 6c 6c 62 61 72 28 6c  dateHScrollbar(l
6690: 69 73 74 50 74 72 29 3b 0a 20 20 20 20 7d 0a 20  istPtr);.    }. 
66a0: 20 20 20 6c 69 73 74 50 74 72 2d 3e 66 6c 61 67     listPtr->flag
66b0: 73 20 26 3d 20 7e 28 52 45 44 52 41 57 5f 50 45  s &= ~(REDRAW_PE
66c0: 4e 44 49 4e 47 7c 55 50 44 41 54 45 5f 56 5f 53  NDING|UPDATE_V_S
66d0: 43 52 4f 4c 4c 42 41 52 7c 55 50 44 41 54 45 5f  CROLLBAR|UPDATE_
66e0: 48 5f 53 43 52 4f 4c 4c 42 41 52 29 3b 0a 20 20  H_SCROLLBAR);.  
66f0: 20 20 69 66 20 28 28 6c 69 73 74 50 74 72 2d 3e    if ((listPtr->
6700: 74 6b 77 69 6e 20 3d 3d 20 4e 55 4c 4c 29 20 7c  tkwin == NULL) |
6710: 7c 20 21 54 6b 5f 49 73 4d 61 70 70 65 64 28 74  | !Tk_IsMapped(t
6720: 6b 77 69 6e 29 29 20 7b 0a 09 72 65 74 75 72 6e  kwin)) {..return
6730: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 0a  ;.    }..    /*.
6740: 20 20 20 20 20 2a 20 44 72 61 77 20 62 61 63 6b       * Draw back
6750: 67 72 6f 75 6e 64 2e 0a 20 20 20 20 20 2a 2f 0a  ground..     */.
6760: 0a 20 20 20 20 43 74 6b 5f 46 69 6c 6c 52 65 63  .    Ctk_FillRec
6770: 74 28 74 6b 77 69 6e 2c 20 6c 69 73 74 50 74 72  t(tkwin, listPtr
6780: 2d 3e 62 6f 72 64 65 72 57 69 64 74 68 2c 20 6c  ->borderWidth, l
6790: 69 73 74 50 74 72 2d 3e 62 6f 72 64 65 72 57 69  istPtr->borderWi
67a0: 64 74 68 2c 0a 09 20 20 20 20 77 69 64 74 68 20  dth,..    width 
67b0: 2d 20 6c 69 73 74 50 74 72 2d 3e 62 6f 72 64 65  - listPtr->borde
67c0: 72 57 69 64 74 68 2c 20 68 65 69 67 68 74 20 2d  rWidth, height -
67d0: 20 6c 69 73 74 50 74 72 2d 3e 62 6f 72 64 65 72   listPtr->border
67e0: 57 69 64 74 68 2c 0a 09 20 20 20 20 43 54 4b 5f  Width,..    CTK_
67f0: 50 4c 41 49 4e 5f 53 54 59 4c 45 2c 20 27 20 27  PLAIN_STYLE, ' '
6800: 29 3b 0a 0a 20 20 20 20 2f 2a 0a 20 20 20 20 20  );..    /*.     
6810: 2a 20 4c 6f 6f 70 20 74 68 72 6f 75 67 68 20 65  * Loop through e
6820: 6c 65 6d 65 6e 74 73 2e 0a 20 20 20 20 20 2a 2f  lements..     */
6830: 0a 0a 20 20 20 20 78 20 3d 20 6c 69 73 74 50 74  ..    x = listPt
6840: 72 2d 3e 62 6f 72 64 65 72 57 69 64 74 68 20 2b  r->borderWidth +
6850: 20 49 4e 44 49 43 41 54 4f 52 5f 57 49 44 54 48   INDICATOR_WIDTH
6860: 20 2d 20 6c 69 73 74 50 74 72 2d 3e 78 4f 66 66   - listPtr->xOff
6870: 73 65 74 20 3b 0a 20 20 20 20 79 20 3d 20 6c 69  set ;.    y = li
6880: 73 74 50 74 72 2d 3e 62 6f 72 64 65 72 57 69 64  stPtr->borderWid
6890: 74 68 3b 0a 20 20 20 20 6c 69 6d 69 74 20 3d 20  th;.    limit = 
68a0: 6c 69 73 74 50 74 72 2d 3e 74 6f 70 49 6e 64 65  listPtr->topInde
68b0: 78 20 2b 20 6c 69 73 74 50 74 72 2d 3e 6e 75 6d  x + listPtr->num
68c0: 4c 69 6e 65 73 20 2d 20 31 3b 0a 20 20 20 20 66  Lines - 1;.    f
68d0: 6f 72 20 28 65 6c 50 74 72 20 3d 20 6c 69 73 74  or (elPtr = list
68e0: 50 74 72 2d 3e 66 69 72 73 74 50 74 72 2c 20 69  Ptr->firstPtr, i
68f0: 20 3d 20 30 3b 20 28 65 6c 50 74 72 20 21 3d 20   = 0; (elPtr != 
6900: 4e 55 4c 4c 29 20 26 26 20 28 69 20 3c 3d 20 6c  NULL) && (i <= l
6910: 69 6d 69 74 29 3b 0a 09 20 20 20 20 65 6c 50 74  imit);..    elPt
6920: 72 20 3d 20 65 6c 50 74 72 2d 3e 6e 65 78 74 50  r = elPtr->nextP
6930: 74 72 2c 20 69 2b 2b 29 20 7b 0a 09 69 66 20 28  tr, i++) {..if (
6940: 69 20 3c 20 6c 69 73 74 50 74 72 2d 3e 74 6f 70  i < listPtr->top
6950: 49 6e 64 65 78 29 20 7b 0a 09 20 20 20 20 63 6f  Index) {..    co
6960: 6e 74 69 6e 75 65 3b 0a 09 7d 0a 09 69 66 20 28  ntinue;..}..if (
6970: 65 6c 50 74 72 2d 3e 73 65 6c 65 63 74 65 64 29  elPtr->selected)
6980: 20 7b 0a 09 20 20 20 20 43 74 6b 5f 46 69 6c 6c   {..    Ctk_Fill
6990: 52 65 63 74 28 74 6b 77 69 6e 2c 20 6c 69 73 74  Rect(tkwin, list
69a0: 50 74 72 2d 3e 62 6f 72 64 65 72 57 69 64 74 68  Ptr->borderWidth
69b0: 2c 20 79 2c 0a 09 09 20 20 20 20 77 69 64 74 68  , y,...    width
69c0: 20 2d 20 6c 69 73 74 50 74 72 2d 3e 62 6f 72 64   - listPtr->bord
69d0: 65 72 57 69 64 74 68 2c 20 79 2b 31 2c 0a 09 09  erWidth, y+1,...
69e0: 20 20 20 20 43 54 4b 5f 53 45 4c 45 43 54 45 44      CTK_SELECTED
69f0: 5f 53 54 59 4c 45 2c 20 27 20 27 29 3b 0a 09 20  _STYLE, ' ');.. 
6a00: 20 20 20 43 74 6b 5f 44 72 61 77 53 74 72 69 6e     Ctk_DrawStrin
6a10: 67 28 74 6b 77 69 6e 2c 20 78 2c 20 79 2c 20 43  g(tkwin, x, y, C
6a20: 54 4b 5f 53 45 4c 45 43 54 45 44 5f 53 54 59 4c  TK_SELECTED_STYL
6a30: 45 2c 0a 09 09 20 20 20 20 65 6c 50 74 72 2d 3e  E,...    elPtr->
6a40: 74 65 78 74 2c 20 65 6c 50 74 72 2d 3e 74 65 78  text, elPtr->tex
6a50: 74 4c 65 6e 67 74 68 29 3b 0a 09 7d 20 65 6c 73  tLength);..} els
6a60: 65 20 7b 0a 09 20 20 20 20 43 74 6b 5f 44 72 61  e {..    Ctk_Dra
6a70: 77 53 74 72 69 6e 67 28 74 6b 77 69 6e 2c 20 78  wString(tkwin, x
6a80: 2c 20 79 2c 20 43 54 4b 5f 50 4c 41 49 4e 5f 53  , y, CTK_PLAIN_S
6a90: 54 59 4c 45 2c 0a 09 09 20 20 20 20 65 6c 50 74  TYLE,...    elPt
6aa0: 72 2d 3e 74 65 78 74 2c 20 65 6c 50 74 72 2d 3e  r->text, elPtr->
6ab0: 74 65 78 74 4c 65 6e 67 74 68 29 3b 0a 09 7d 0a  textLength);..}.
6ac0: 09 69 66 20 28 69 20 3d 3d 20 6c 69 73 74 50 74  .if (i == listPt
6ad0: 72 2d 3e 61 63 74 69 76 65 29 20 7b 0a 09 20 20  r->active) {..  
6ae0: 20 20 79 43 75 72 73 20 3d 20 79 3b 0a 09 7d 0a    yCurs = y;..}.
6af0: 09 79 2b 2b 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  .y++;.    }..   
6b00: 20 69 66 20 28 6c 69 73 74 50 74 72 2d 3e 66 6c   if (listPtr->fl
6b10: 61 67 73 20 26 20 47 4f 54 5f 46 4f 43 55 53 29  ags & GOT_FOCUS)
6b20: 20 7b 0a 09 43 74 6b 5f 53 65 74 43 75 72 73 6f   {..Ctk_SetCurso
6b30: 72 28 74 6b 77 69 6e 2c 20 6c 69 73 74 50 74 72  r(tkwin, listPtr
6b40: 2d 3e 62 6f 72 64 65 72 57 69 64 74 68 2c 20 79  ->borderWidth, y
6b50: 43 75 72 73 29 3b 0a 20 20 20 20 7d 0a 0a 20 20  Curs);.    }..  
6b60: 20 20 69 66 20 28 6c 69 73 74 50 74 72 2d 3e 66    if (listPtr->f
6b70: 6c 61 67 73 20 26 20 42 4f 52 44 45 52 5f 4e 45  lags & BORDER_NE
6b80: 45 44 45 44 29 20 7b 0a 09 43 74 6b 5f 44 72 61  EDED) {..Ctk_Dra
6b90: 77 42 6f 72 64 65 72 28 74 6b 77 69 6e 2c 20 43  wBorder(tkwin, C
6ba0: 54 4b 5f 50 4c 41 49 4e 5f 53 54 59 4c 45 2c 20  TK_PLAIN_STYLE, 
6bb0: 28 63 68 61 72 20 2a 29 20 4e 55 4c 4c 29 3b 0a  (char *) NULL);.
6bc0: 09 6c 69 73 74 50 74 72 2d 3e 66 6c 61 67 73 20  .listPtr->flags 
6bd0: 26 3d 20 7e 42 4f 52 44 45 52 5f 4e 45 45 44 45  &= ~BORDER_NEEDE
6be0: 44 3b 0a 20 20 20 20 7d 0a 7d 0a 0c 0a 2f 2a 0a  D;.    }.}.../*.
6bf0: 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d   *--------------
6c00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6c10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6c20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6c30: 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 0a 20 2a 20 4c  --------. *. * L
6c40: 69 73 74 62 6f 78 43 6f 6d 70 75 74 65 47 65 6f  istboxComputeGeo
6c50: 6d 65 74 72 79 20 2d 2d 0a 20 2a 0a 20 2a 09 54  metry --. *. *.T
6c60: 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 69 73  his procedure is
6c70: 20 69 6e 76 6f 6b 65 64 20 74 6f 20 72 65 63 6f   invoked to reco
6c80: 6d 70 75 74 65 20 67 65 6f 6d 65 74 72 79 20 69  mpute geometry i
6c90: 6e 66 6f 72 6d 61 74 69 6f 6e 0a 20 2a 09 73 75  nformation. *.su
6ca0: 63 68 20 61 73 20 74 68 65 20 73 69 7a 65 73 20  ch as the sizes 
6cb0: 6f 66 20 74 68 65 20 65 6c 65 6d 65 6e 74 73 20  of the elements 
6cc0: 61 6e 64 20 74 68 65 20 6f 76 65 72 61 6c 6c 20  and the overall 
6cd0: 64 69 6d 65 6e 73 69 6f 6e 73 0a 20 2a 09 64 65  dimensions. *.de
6ce0: 73 69 72 65 64 20 66 6f 72 20 74 68 65 20 6c 69  sired for the li
6cf0: 73 74 62 6f 78 2e 0a 20 2a 0a 20 2a 20 52 65 73  stbox.. *. * Res
6d00: 75 6c 74 73 3a 0a 20 2a 09 4e 6f 6e 65 2e 0a 20  ults:. *.None.. 
6d10: 2a 0a 20 2a 20 53 69 64 65 20 65 66 66 65 63 74  *. * Side effect
6d20: 73 3a 0a 20 2a 09 47 65 6f 6d 65 74 72 79 20 69  s:. *.Geometry i
6d30: 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 75 70  nformation is up
6d40: 64 61 74 65 64 20 61 6e 64 20 61 20 6e 65 77 20  dated and a new 
6d50: 72 65 71 75 65 73 74 65 64 20 73 69 7a 65 20 69  requested size i
6d60: 73 0a 20 2a 09 72 65 67 69 73 74 65 72 65 64 20  s. *.registered 
6d70: 66 6f 72 20 74 68 65 20 77 69 64 67 65 74 2e 20  for the widget. 
6d80: 20 49 6e 74 65 72 6e 61 6c 20 62 6f 72 64 65 72   Internal border
6d90: 0a 20 2a 09 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  . *.information 
6da0: 69 73 20 61 6c 73 6f 20 73 65 74 2e 0a 20 2a 0a  is also set.. *.
6db0: 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d   *--------------
6dc0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6dd0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6de0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6df0: 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 2f 0a 0a 73 74  --------. */..st
6e00: 61 74 69 63 20 76 6f 69 64 0a 4c 69 73 74 62 6f  atic void.Listbo
6e10: 78 43 6f 6d 70 75 74 65 47 65 6f 6d 65 74 72 79  xComputeGeometry
6e20: 28 6c 69 73 74 50 74 72 2c 20 6d 61 78 49 73 53  (listPtr, maxIsS
6e30: 74 61 6c 65 29 0a 20 20 20 20 4c 69 73 74 62 6f  tale).    Listbo
6e40: 78 20 2a 6c 69 73 74 50 74 72 3b 09 09 2f 2a 20  x *listPtr;../* 
6e50: 4c 69 73 74 62 6f 78 20 77 68 6f 73 65 20 67 65  Listbox whose ge
6e60: 6f 6d 65 74 72 79 20 69 73 20 74 6f 20 62 65 0a  ometry is to be.
6e70: 09 09 09 09 20 2a 20 72 65 63 6f 6d 70 75 74 65  .... * recompute
6e80: 64 2e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6d 61  d. */.    int ma
6e90: 78 49 73 53 74 61 6c 65 3b 09 09 2f 2a 20 4e 6f  xIsStale;../* No
6ea0: 6e 2d 7a 65 72 6f 20 6d 65 61 6e 73 20 74 68 65  n-zero means the
6eb0: 20 22 6d 61 78 57 69 64 74 68 22 20 66 69 65 6c   "maxWidth" fiel
6ec0: 64 20 6d 61 79 0a 09 09 09 09 20 2a 20 6e 6f 20  d may..... * no 
6ed0: 6c 6f 6e 67 65 72 20 62 65 20 75 70 2d 74 6f 2d  longer be up-to-
6ee0: 64 61 74 65 20 61 6e 64 20 6d 75 73 74 0a 09 09  date and must...
6ef0: 09 09 20 2a 20 62 65 20 72 65 63 6f 6d 70 75 74  .. * be recomput
6f00: 65 64 2e 20 2a 2f 0a 7b 0a 20 20 20 20 72 65 67  ed. */.{.    reg
6f10: 69 73 74 65 72 20 45 6c 65 6d 65 6e 74 20 2a 65  ister Element *e
6f20: 6c 50 74 72 3b 0a 20 20 20 20 69 6e 74 20 77 69  lPtr;.    int wi
6f30: 64 74 68 2c 20 68 65 69 67 68 74 3b 0a 0a 20 20  dth, height;..  
6f40: 20 20 69 66 20 28 6d 61 78 49 73 53 74 61 6c 65    if (maxIsStale
6f50: 29 20 7b 0a 09 6c 69 73 74 50 74 72 2d 3e 6d 61  ) {..listPtr->ma
6f60: 78 57 69 64 74 68 20 3d 20 30 3b 0a 09 66 6f 72  xWidth = 0;..for
6f70: 20 28 65 6c 50 74 72 20 3d 20 6c 69 73 74 50 74   (elPtr = listPt
6f80: 72 2d 3e 66 69 72 73 74 50 74 72 3b 20 65 6c 50  r->firstPtr; elP
6f90: 74 72 20 21 3d 20 4e 55 4c 4c 3b 20 65 6c 50 74  tr != NULL; elPt
6fa0: 72 20 3d 20 65 6c 50 74 72 2d 3e 6e 65 78 74 50  r = elPtr->nextP
6fb0: 74 72 29 20 7b 0a 09 20 20 20 20 69 66 20 28 65  tr) {..    if (e
6fc0: 6c 50 74 72 2d 3e 74 65 78 74 4c 65 6e 67 74 68  lPtr->textLength
6fd0: 20 3e 20 6c 69 73 74 50 74 72 2d 3e 6d 61 78 57   > listPtr->maxW
6fe0: 69 64 74 68 29 20 7b 0a 09 09 6c 69 73 74 50 74  idth) {...listPt
6ff0: 72 2d 3e 6d 61 78 57 69 64 74 68 20 3d 20 65 6c  r->maxWidth = el
7000: 50 74 72 2d 3e 74 65 78 74 4c 65 6e 67 74 68 3b  Ptr->textLength;
7010: 0a 09 20 20 20 20 7d 0a 09 7d 0a 20 20 20 20 7d  ..    }..}.    }
7020: 0a 20 20 20 20 77 69 64 74 68 20 3d 20 6c 69 73  .    width = lis
7030: 74 50 74 72 2d 3e 77 69 64 74 68 3b 0a 20 20 20  tPtr->width;.   
7040: 20 69 66 20 28 77 69 64 74 68 20 3c 3d 20 30 29   if (width <= 0)
7050: 20 7b 0a 09 77 69 64 74 68 20 3d 20 6c 69 73 74   {..width = list
7060: 50 74 72 2d 3e 6d 61 78 57 69 64 74 68 3b 0a 09  Ptr->maxWidth;..
7070: 69 66 20 28 77 69 64 74 68 20 3c 20 31 29 20 7b  if (width < 1) {
7080: 0a 09 20 20 20 20 77 69 64 74 68 20 3d 20 31 3b  ..    width = 1;
7090: 0a 09 7d 0a 20 20 20 20 7d 0a 20 20 20 20 77 69  ..}.    }.    wi
70a0: 64 74 68 20 2b 3d 20 32 2a 6c 69 73 74 50 74 72  dth += 2*listPtr
70b0: 2d 3e 62 6f 72 64 65 72 57 69 64 74 68 20 2b 20  ->borderWidth + 
70c0: 49 4e 44 49 43 41 54 4f 52 5f 57 49 44 54 48 3b  INDICATOR_WIDTH;
70d0: 0a 20 20 20 20 68 65 69 67 68 74 20 3d 20 6c 69  .    height = li
70e0: 73 74 50 74 72 2d 3e 68 65 69 67 68 74 3b 0a 20  stPtr->height;. 
70f0: 20 20 20 69 66 20 28 68 65 69 67 68 74 20 3c 3d     if (height <=
7100: 20 30 29 20 7b 0a 09 68 65 69 67 68 74 20 3d 20   0) {..height = 
7110: 6c 69 73 74 50 74 72 2d 3e 6e 75 6d 45 6c 65 6d  listPtr->numElem
7120: 65 6e 74 73 3b 0a 09 69 66 20 28 68 65 69 67 68  ents;..if (heigh
7130: 74 20 3c 20 31 29 20 7b 0a 09 20 20 20 20 68 65  t < 1) {..    he
7140: 69 67 68 74 20 3d 20 31 3b 0a 09 7d 0a 20 20 20  ight = 1;..}.   
7150: 20 7d 0a 20 20 20 20 68 65 69 67 68 74 20 2b 3d   }.    height +=
7160: 20 32 2a 6c 69 73 74 50 74 72 2d 3e 62 6f 72 64   2*listPtr->bord
7170: 65 72 57 69 64 74 68 3b 0a 20 20 20 20 54 6b 5f  erWidth;.    Tk_
7180: 47 65 6f 6d 65 74 72 79 52 65 71 75 65 73 74 28  GeometryRequest(
7190: 6c 69 73 74 50 74 72 2d 3e 74 6b 77 69 6e 2c 20  listPtr->tkwin, 
71a0: 77 69 64 74 68 2c 20 68 65 69 67 68 74 29 3b 0a  width, height);.
71b0: 7d 0a 0c 0a 2f 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d  }.../*. *-------
71c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
71d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
71e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
71f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a  ---------------.
7200: 20 2a 0a 20 2a 20 49 6e 73 65 72 74 45 6c 73 20   *. * InsertEls 
7210: 2d 2d 0a 20 2a 0a 20 2a 09 41 64 64 20 6e 65 77  --. *. *.Add new
7220: 20 65 6c 65 6d 65 6e 74 73 20 74 6f 20 61 20 6c   elements to a l
7230: 69 73 74 62 6f 78 20 77 69 64 67 65 74 2e 0a 20  istbox widget.. 
7240: 2a 0a 20 2a 20 52 65 73 75 6c 74 73 3a 0a 20 2a  *. * Results:. *
7250: 09 4e 6f 6e 65 2e 0a 20 2a 0a 20 2a 20 53 69 64  .None.. *. * Sid
7260: 65 20 65 66 66 65 63 74 73 3a 0a 20 2a 09 4e 65  e effects:. *.Ne
7270: 77 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 67 65  w information ge
7280: 74 73 20 61 64 64 65 64 20 74 6f 20 6c 69 73 74  ts added to list
7290: 50 74 72 3b 20 20 69 74 20 77 69 6c 6c 20 62 65  Ptr;  it will be
72a0: 20 72 65 64 69 73 70 6c 61 79 65 64 0a 20 2a 09   redisplayed. *.
72b0: 73 6f 6f 6e 2c 20 62 75 74 20 6e 6f 74 20 69 6d  soon, but not im
72c0: 6d 65 64 69 61 74 65 6c 79 2e 0a 20 2a 0a 20 2a  mediately.. *. *
72d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
72e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
72f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7300: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7310: 2d 2d 2d 2d 2d 2d 0a 20 2a 2f 0a 0a 73 74 61 74  ------. */..stat
7320: 69 63 20 76 6f 69 64 0a 49 6e 73 65 72 74 45 6c  ic void.InsertEl
7330: 73 28 6c 69 73 74 50 74 72 2c 20 69 6e 64 65 78  s(listPtr, index
7340: 2c 20 61 72 67 63 2c 20 61 72 67 76 29 0a 20 20  , argc, argv).  
7350: 20 20 72 65 67 69 73 74 65 72 20 4c 69 73 74 62    register Listb
7360: 6f 78 20 2a 6c 69 73 74 50 74 72 3b 09 2f 2a 20  ox *listPtr;./* 
7370: 4c 69 73 74 62 6f 78 20 74 68 61 74 20 69 73 20  Listbox that is 
7380: 74 6f 20 67 65 74 20 74 68 65 20 6e 65 77 0a 09  to get the new..
7390: 09 09 09 20 2a 20 65 6c 65 6d 65 6e 74 73 2e 20  ... * elements. 
73a0: 2a 2f 0a 20 20 20 20 69 6e 74 20 69 6e 64 65 78  */.    int index
73b0: 3b 09 09 09 2f 2a 20 41 64 64 20 74 68 65 20 6e  ;.../* Add the n
73c0: 65 77 20 65 6c 65 6d 65 6e 74 73 20 62 65 66 6f  ew elements befo
73d0: 72 65 20 74 68 69 73 0a 09 09 09 09 20 2a 20 65  re this..... * e
73e0: 6c 65 6d 65 6e 74 2e 20 2a 2f 0a 20 20 20 20 69  lement. */.    i
73f0: 6e 74 20 61 72 67 63 3b 09 09 09 2f 2a 20 4e 75  nt argc;.../* Nu
7400: 6d 62 65 72 20 6f 66 20 6e 65 77 20 65 6c 65 6d  mber of new elem
7410: 65 6e 74 73 20 74 6f 20 61 64 64 2e 20 2a 2f 0a  ents to add. */.
7420: 20 20 20 20 63 68 61 72 20 2a 2a 61 72 67 76 3b      char **argv;
7430: 09 09 2f 2a 20 4e 65 77 20 65 6c 65 6d 65 6e 74  ../* New element
7440: 73 20 28 6f 6e 65 20 70 65 72 20 65 6e 74 72 79  s (one per entry
7450: 29 2e 20 2a 2f 0a 7b 0a 20 20 20 20 72 65 67 69  ). */.{.    regi
7460: 73 74 65 72 20 45 6c 65 6d 65 6e 74 20 2a 70 72  ster Element *pr
7470: 65 76 50 74 72 2c 20 2a 6e 65 77 50 74 72 3b 0a  evPtr, *newPtr;.
7480: 20 20 20 20 69 6e 74 20 6c 65 6e 67 74 68 2c 20      int length, 
7490: 69 2c 20 6f 6c 64 4d 61 78 57 69 64 74 68 3b 0a  i, oldMaxWidth;.
74a0: 0a 20 20 20 20 2f 2a 0a 20 20 20 20 20 2a 20 46  .    /*.     * F
74b0: 69 6e 64 20 74 68 65 20 65 6c 65 6d 65 6e 74 20  ind the element 
74c0: 62 65 66 6f 72 65 20 77 68 69 63 68 20 74 68 65  before which the
74d0: 20 6e 65 77 20 6f 6e 65 73 20 77 69 6c 6c 20 62   new ones will b
74e0: 65 20 69 6e 73 65 72 74 65 64 2e 0a 20 20 20 20  e inserted..    
74f0: 20 2a 2f 0a 0a 20 20 20 20 69 66 20 28 69 6e 64   */..    if (ind
7500: 65 78 20 3c 3d 20 30 29 20 7b 0a 09 69 6e 64 65  ex <= 0) {..inde
7510: 78 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20  x = 0;.    }.   
7520: 20 69 66 20 28 69 6e 64 65 78 20 3e 20 6c 69 73   if (index > lis
7530: 74 50 74 72 2d 3e 6e 75 6d 45 6c 65 6d 65 6e 74  tPtr->numElement
7540: 73 29 20 7b 0a 09 69 6e 64 65 78 20 3d 20 6c 69  s) {..index = li
7550: 73 74 50 74 72 2d 3e 6e 75 6d 45 6c 65 6d 65 6e  stPtr->numElemen
7560: 74 73 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  ts;.    }.    if
7570: 20 28 69 6e 64 65 78 20 3d 3d 20 30 29 20 7b 0a   (index == 0) {.
7580: 09 70 72 65 76 50 74 72 20 3d 20 4e 55 4c 4c 3b  .prevPtr = NULL;
7590: 0a 20 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28  .    } else if (
75a0: 69 6e 64 65 78 20 3d 3d 20 6c 69 73 74 50 74 72  index == listPtr
75b0: 2d 3e 6e 75 6d 45 6c 65 6d 65 6e 74 73 29 20 7b  ->numElements) {
75c0: 0a 20 20 20 20 20 20 20 20 20 20 70 72 65 76 50  .          prevP
75d0: 74 72 20 3d 20 6c 69 73 74 50 74 72 2d 3e 6c 61  tr = listPtr->la
75e0: 73 74 50 74 72 3b 0a 20 20 20 20 7d 20 65 6c 73  stPtr;.    } els
75f0: 65 20 7b 0a 09 66 6f 72 20 28 70 72 65 76 50 74  e {..for (prevPt
7600: 72 20 3d 20 6c 69 73 74 50 74 72 2d 3e 66 69 72  r = listPtr->fir
7610: 73 74 50 74 72 2c 20 69 20 3d 20 69 6e 64 65 78  stPtr, i = index
7620: 20 2d 20 31 3b 20 69 20 3e 20 30 3b 20 69 2d 2d   - 1; i > 0; i--
7630: 29 20 7b 0a 09 20 20 20 20 70 72 65 76 50 74 72  ) {..    prevPtr
7640: 20 3d 20 70 72 65 76 50 74 72 2d 3e 6e 65 78 74   = prevPtr->next
7650: 50 74 72 3b 0a 09 7d 0a 20 20 20 20 7d 0a 0a 20  Ptr;..}.    }.. 
7660: 20 20 20 2f 2a 0a 20 20 20 20 20 2a 20 46 6f 72     /*.     * For
7670: 20 65 61 63 68 20 6e 65 77 20 65 6c 65 6d 65 6e   each new elemen
7680: 74 2c 20 63 72 65 61 74 65 20 61 20 72 65 63 6f  t, create a reco
7690: 72 64 2c 20 69 6e 69 74 69 61 6c 69 7a 65 20 69  rd, initialize i
76a0: 74 2c 20 61 6e 64 20 6c 69 6e 6b 0a 20 20 20 20  t, and link.    
76b0: 20 2a 20 69 74 20 69 6e 74 6f 20 74 68 65 20 6c   * it into the l
76c0: 69 73 74 20 6f 66 20 65 6c 65 6d 65 6e 74 73 2e  ist of elements.
76d0: 0a 20 20 20 20 20 2a 2f 0a 0a 20 20 20 20 6f 6c  .     */..    ol
76e0: 64 4d 61 78 57 69 64 74 68 20 3d 20 6c 69 73 74  dMaxWidth = list
76f0: 50 74 72 2d 3e 6d 61 78 57 69 64 74 68 3b 0a 20  Ptr->maxWidth;. 
7700: 20 20 20 66 6f 72 20 28 69 20 3d 20 61 72 67 63     for (i = argc
7710: 20 3b 20 69 20 3e 20 30 3b 20 69 2d 2d 2c 20 61   ; i > 0; i--, a
7720: 72 67 76 2b 2b 2c 20 70 72 65 76 50 74 72 20 3d  rgv++, prevPtr =
7730: 20 6e 65 77 50 74 72 29 20 7b 0a 09 6c 65 6e 67   newPtr) {..leng
7740: 74 68 20 3d 20 73 74 72 6c 65 6e 28 2a 61 72 67  th = strlen(*arg
7750: 76 29 3b 0a 09 6e 65 77 50 74 72 20 3d 20 28 45  v);..newPtr = (E
7760: 6c 65 6d 65 6e 74 20 2a 29 20 63 6b 61 6c 6c 6f  lement *) ckallo
7770: 63 28 45 6c 65 6d 65 6e 74 53 69 7a 65 28 6c 65  c(ElementSize(le
7780: 6e 67 74 68 29 29 3b 0a 09 6e 65 77 50 74 72 2d  ngth));..newPtr-
7790: 3e 74 65 78 74 4c 65 6e 67 74 68 20 3d 20 6c 65  >textLength = le
77a0: 6e 67 74 68 3b 0a 09 73 74 72 63 70 79 28 6e 65  ngth;..strcpy(ne
77b0: 77 50 74 72 2d 3e 74 65 78 74 2c 20 2a 61 72 67  wPtr->text, *arg
77c0: 76 29 3b 0a 09 69 66 20 28 6e 65 77 50 74 72 2d  v);..if (newPtr-
77d0: 3e 74 65 78 74 4c 65 6e 67 74 68 20 3e 20 6c 69  >textLength > li
77e0: 73 74 50 74 72 2d 3e 6d 61 78 57 69 64 74 68 29  stPtr->maxWidth)
77f0: 20 7b 0a 09 20 20 20 20 6c 69 73 74 50 74 72 2d   {..    listPtr-
7800: 3e 6d 61 78 57 69 64 74 68 20 3d 20 6e 65 77 50  >maxWidth = newP
7810: 74 72 2d 3e 74 65 78 74 4c 65 6e 67 74 68 3b 0a  tr->textLength;.
7820: 09 7d 0a 09 6e 65 77 50 74 72 2d 3e 73 65 6c 65  .}..newPtr->sele
7830: 63 74 65 64 20 3d 20 30 3b 0a 09 69 66 20 28 70  cted = 0;..if (p
7840: 72 65 76 50 74 72 20 3d 3d 20 4e 55 4c 4c 29 20  revPtr == NULL) 
7850: 7b 0a 09 20 20 20 20 6e 65 77 50 74 72 2d 3e 6e  {..    newPtr->n
7860: 65 78 74 50 74 72 20 3d 20 6c 69 73 74 50 74 72  extPtr = listPtr
7870: 2d 3e 66 69 72 73 74 50 74 72 3b 0a 09 20 20 20  ->firstPtr;..   
7880: 20 6c 69 73 74 50 74 72 2d 3e 66 69 72 73 74 50   listPtr->firstP
7890: 74 72 20 3d 20 6e 65 77 50 74 72 3b 0a 09 7d 20  tr = newPtr;..} 
78a0: 65 6c 73 65 20 7b 0a 09 20 20 20 20 6e 65 77 50  else {..    newP
78b0: 74 72 2d 3e 6e 65 78 74 50 74 72 20 3d 20 70 72  tr->nextPtr = pr
78c0: 65 76 50 74 72 2d 3e 6e 65 78 74 50 74 72 3b 0a  evPtr->nextPtr;.
78d0: 09 20 20 20 20 70 72 65 76 50 74 72 2d 3e 6e 65  .    prevPtr->ne
78e0: 78 74 50 74 72 20 3d 20 6e 65 77 50 74 72 3b 0a  xtPtr = newPtr;.
78f0: 09 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 20  .}.    }.    if 
7900: 28 28 70 72 65 76 50 74 72 20 21 3d 20 4e 55 4c  ((prevPtr != NUL
7910: 4c 29 20 26 26 20 28 70 72 65 76 50 74 72 2d 3e  L) && (prevPtr->
7920: 6e 65 78 74 50 74 72 20 3d 3d 20 4e 55 4c 4c 29  nextPtr == NULL)
7930: 29 20 7b 0a 09 6c 69 73 74 50 74 72 2d 3e 6c 61  ) {..listPtr->la
7940: 73 74 50 74 72 20 3d 20 70 72 65 76 50 74 72 3b  stPtr = prevPtr;
7950: 0a 20 20 20 20 7d 0a 20 20 20 20 6c 69 73 74 50  .    }.    listP
7960: 74 72 2d 3e 6e 75 6d 45 6c 65 6d 65 6e 74 73 20  tr->numElements 
7970: 2b 3d 20 61 72 67 63 3b 0a 0a 20 20 20 20 2f 2a  += argc;..    /*
7980: 0a 20 20 20 20 20 2a 20 55 70 64 61 74 65 20 74  .     * Update t
7990: 68 65 20 73 65 6c 65 63 74 69 6f 6e 20 61 6e 64  he selection and
79a0: 20 6f 74 68 65 72 20 69 6e 64 65 78 65 73 20 74   other indexes t
79b0: 6f 20 61 63 63 6f 75 6e 74 20 66 6f 72 20 74 68  o account for th
79c0: 65 0a 20 20 20 20 20 2a 20 72 65 6e 75 6d 62 65  e.     * renumbe
79d0: 72 69 6e 67 20 74 68 61 74 20 68 61 73 20 6a 75  ring that has ju
79e0: 73 74 20 6f 63 63 75 72 72 65 64 2e 20 20 54 68  st occurred.  Th
79f0: 65 6e 20 61 72 72 61 6e 67 65 20 66 6f 72 20 74  en arrange for t
7a00: 68 65 20 6e 65 77 0a 20 20 20 20 20 2a 20 69 6e  he new.     * in
7a10: 66 6f 72 6d 61 74 69 6f 6e 20 74 6f 20 62 65 20  formation to be 
7a20: 64 69 73 70 6c 61 79 65 64 2e 0a 20 20 20 20 20  displayed..     
7a30: 2a 2f 0a 0a 20 20 20 20 69 66 20 28 69 6e 64 65  */..    if (inde
7a40: 78 20 3c 3d 20 6c 69 73 74 50 74 72 2d 3e 73 65  x <= listPtr->se
7a50: 6c 65 63 74 41 6e 63 68 6f 72 29 20 7b 0a 09 6c  lectAnchor) {..l
7a60: 69 73 74 50 74 72 2d 3e 73 65 6c 65 63 74 41 6e  istPtr->selectAn
7a70: 63 68 6f 72 20 2b 3d 20 61 72 67 63 3b 0a 20 20  chor += argc;.  
7a80: 20 20 7d 0a 20 20 20 20 69 66 20 28 69 6e 64 65    }.    if (inde
7a90: 78 20 3c 20 6c 69 73 74 50 74 72 2d 3e 74 6f 70  x < listPtr->top
7aa0: 49 6e 64 65 78 29 20 7b 0a 09 6c 69 73 74 50 74  Index) {..listPt
7ab0: 72 2d 3e 74 6f 70 49 6e 64 65 78 20 2b 3d 20 61  r->topIndex += a
7ac0: 72 67 63 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  rgc;.    }.    i
7ad0: 66 20 28 69 6e 64 65 78 20 3c 3d 20 6c 69 73 74  f (index <= list
7ae0: 50 74 72 2d 3e 61 63 74 69 76 65 29 20 7b 0a 09  Ptr->active) {..
7af0: 6c 69 73 74 50 74 72 2d 3e 61 63 74 69 76 65 20  listPtr->active 
7b00: 2b 3d 20 61 72 67 63 3b 0a 09 69 66 20 28 28 6c  += argc;..if ((l
7b10: 69 73 74 50 74 72 2d 3e 61 63 74 69 76 65 20 3e  istPtr->active >
7b20: 3d 20 6c 69 73 74 50 74 72 2d 3e 6e 75 6d 45 6c  = listPtr->numEl
7b30: 65 6d 65 6e 74 73 29 0a 09 09 26 26 20 28 6c 69  ements)...&& (li
7b40: 73 74 50 74 72 2d 3e 6e 75 6d 45 6c 65 6d 65 6e  stPtr->numElemen
7b50: 74 73 20 3e 20 30 29 29 20 7b 0a 09 20 20 20 20  ts > 0)) {..    
7b60: 6c 69 73 74 50 74 72 2d 3e 61 63 74 69 76 65 20  listPtr->active 
7b70: 3d 20 6c 69 73 74 50 74 72 2d 3e 6e 75 6d 45 6c  = listPtr->numEl
7b80: 65 6d 65 6e 74 73 2d 31 3b 0a 09 7d 0a 20 20 20  ements-1;..}.   
7b90: 20 7d 0a 20 20 20 20 6c 69 73 74 50 74 72 2d 3e   }.    listPtr->
7ba0: 66 6c 61 67 73 20 7c 3d 20 55 50 44 41 54 45 5f  flags |= UPDATE_
7bb0: 56 5f 53 43 52 4f 4c 4c 42 41 52 3b 0a 20 20 20  V_SCROLLBAR;.   
7bc0: 20 69 66 20 28 6c 69 73 74 50 74 72 2d 3e 6d 61   if (listPtr->ma
7bd0: 78 57 69 64 74 68 20 21 3d 20 6f 6c 64 4d 61 78  xWidth != oldMax
7be0: 57 69 64 74 68 29 20 7b 0a 09 6c 69 73 74 50 74  Width) {..listPt
7bf0: 72 2d 3e 66 6c 61 67 73 20 7c 3d 20 55 50 44 41  r->flags |= UPDA
7c00: 54 45 5f 48 5f 53 43 52 4f 4c 4c 42 41 52 3b 0a  TE_H_SCROLLBAR;.
7c10: 20 20 20 20 7d 0a 20 20 20 20 4c 69 73 74 62 6f      }.    Listbo
7c20: 78 43 6f 6d 70 75 74 65 47 65 6f 6d 65 74 72 79  xComputeGeometry
7c30: 28 6c 69 73 74 50 74 72 2c 20 30 29 3b 0a 20 20  (listPtr, 0);.  
7c40: 20 20 4c 69 73 74 62 6f 78 52 65 64 72 61 77 52    ListboxRedrawR
7c50: 61 6e 67 65 28 6c 69 73 74 50 74 72 2c 20 69 6e  ange(listPtr, in
7c60: 64 65 78 2c 20 6c 69 73 74 50 74 72 2d 3e 6e 75  dex, listPtr->nu
7c70: 6d 45 6c 65 6d 65 6e 74 73 2d 31 29 3b 0a 7d 0a  mElements-1);.}.
7c80: 0c 0a 2f 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d  ../*. *---------
7c90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7ca0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7cb0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7cc0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a  -------------. *
7cd0: 0a 20 2a 20 44 65 6c 65 74 65 45 6c 73 20 2d 2d  . * DeleteEls --
7ce0: 0a 20 2a 0a 20 2a 09 52 65 6d 6f 76 65 20 6f 6e  . *. *.Remove on
7cf0: 65 20 6f 72 20 6d 6f 72 65 20 65 6c 65 6d 65 6e  e or more elemen
7d00: 74 73 20 66 72 6f 6d 20 61 20 6c 69 73 74 62 6f  ts from a listbo
7d10: 78 20 77 69 64 67 65 74 2e 0a 20 2a 0a 20 2a 20  x widget.. *. * 
7d20: 52 65 73 75 6c 74 73 3a 0a 20 2a 09 4e 6f 6e 65  Results:. *.None
7d30: 2e 0a 20 2a 0a 20 2a 20 53 69 64 65 20 65 66 66  .. *. * Side eff
7d40: 65 63 74 73 3a 0a 20 2a 09 4d 65 6d 6f 72 79 20  ects:. *.Memory 
7d50: 67 65 74 73 20 66 72 65 65 64 2c 20 74 68 65 20  gets freed, the 
7d60: 6c 69 73 74 62 6f 78 20 67 65 74 73 20 6d 6f 64  listbox gets mod
7d70: 69 66 69 65 64 20 61 6e 64 20 28 65 76 65 6e 74  ified and (event
7d80: 75 61 6c 6c 79 29 0a 20 2a 09 72 65 64 69 73 70  ually). *.redisp
7d90: 6c 61 79 65 64 2e 0a 20 2a 0a 20 2a 2d 2d 2d 2d  layed.. *. *----
7da0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7db0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7dc0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7dd0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7de0: 2d 2d 0a 20 2a 2f 0a 0a 73 74 61 74 69 63 20 76  --. */..static v
7df0: 6f 69 64 0a 44 65 6c 65 74 65 45 6c 73 28 6c 69  oid.DeleteEls(li
7e00: 73 74 50 74 72 2c 20 66 69 72 73 74 2c 20 6c 61  stPtr, first, la
7e10: 73 74 29 0a 20 20 20 20 72 65 67 69 73 74 65 72  st).    register
7e20: 20 4c 69 73 74 62 6f 78 20 2a 6c 69 73 74 50 74   Listbox *listPt
7e30: 72 3b 09 2f 2a 20 4c 69 73 74 62 6f 78 20 77 69  r;./* Listbox wi
7e40: 64 67 65 74 20 74 6f 20 6d 6f 64 69 66 79 2e 20  dget to modify. 
7e50: 2a 2f 0a 20 20 20 20 69 6e 74 20 66 69 72 73 74  */.    int first
7e60: 3b 09 09 09 2f 2a 20 49 6e 64 65 78 20 6f 66 20  ;.../* Index of 
7e70: 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 74 6f  first element to
7e80: 20 64 65 6c 65 74 65 2e 20 2a 2f 0a 20 20 20 20   delete. */.    
7e90: 69 6e 74 20 6c 61 73 74 3b 09 09 09 2f 2a 20 49  int last;.../* I
7ea0: 6e 64 65 78 20 6f 66 20 6c 61 73 74 20 65 6c 65  ndex of last ele
7eb0: 6d 65 6e 74 20 74 6f 20 64 65 6c 65 74 65 2e 20  ment to delete. 
7ec0: 2a 2f 0a 7b 0a 20 20 20 20 72 65 67 69 73 74 65  */.{.    registe
7ed0: 72 20 45 6c 65 6d 65 6e 74 20 2a 70 72 65 76 50  r Element *prevP
7ee0: 74 72 2c 20 2a 65 6c 50 74 72 3b 0a 20 20 20 20  tr, *elPtr;.    
7ef0: 69 6e 74 20 63 6f 75 6e 74 2c 20 69 2c 20 77 69  int count, i, wi
7f00: 64 74 68 43 68 61 6e 67 65 64 3b 0a 0a 20 20 20  dthChanged;..   
7f10: 20 2f 2a 0a 20 20 20 20 20 2a 20 41 64 6a 75 73   /*.     * Adjus
7f20: 74 20 74 68 65 20 72 61 6e 67 65 20 74 6f 20 66  t the range to f
7f30: 69 74 20 77 69 74 68 69 6e 20 74 68 65 20 65 78  it within the ex
7f40: 69 73 74 69 6e 67 20 65 6c 65 6d 65 6e 74 73 20  isting elements 
7f50: 6f 66 20 74 68 65 0a 20 20 20 20 20 2a 20 6c 69  of the.     * li
7f60: 73 74 62 6f 78 2c 20 61 6e 64 20 6d 61 6b 65 20  stbox, and make 
7f70: 73 75 72 65 20 74 68 65 72 65 27 73 20 73 6f 6d  sure there's som
7f80: 65 74 68 69 6e 67 20 74 6f 20 64 65 6c 65 74 65  ething to delete
7f90: 2e 0a 20 20 20 20 20 2a 2f 0a 0a 20 20 20 20 69  ..     */..    i
7fa0: 66 20 28 66 69 72 73 74 20 3c 20 30 29 20 7b 0a  f (first < 0) {.
7fb0: 09 66 69 72 73 74 20 3d 20 30 3b 0a 20 20 20 20  .first = 0;.    
7fc0: 7d 0a 20 20 20 20 69 66 20 28 6c 61 73 74 20 3e  }.    if (last >
7fd0: 3d 20 6c 69 73 74 50 74 72 2d 3e 6e 75 6d 45 6c  = listPtr->numEl
7fe0: 65 6d 65 6e 74 73 29 20 7b 0a 09 6c 61 73 74 20  ements) {..last 
7ff0: 3d 20 6c 69 73 74 50 74 72 2d 3e 6e 75 6d 45 6c  = listPtr->numEl
8000: 65 6d 65 6e 74 73 2d 31 3b 0a 20 20 20 20 7d 0a  ements-1;.    }.
8010: 20 20 20 20 63 6f 75 6e 74 20 3d 20 6c 61 73 74      count = last
8020: 20 2b 20 31 20 2d 20 66 69 72 73 74 3b 0a 20 20   + 1 - first;.  
8030: 20 20 69 66 20 28 63 6f 75 6e 74 20 3c 3d 20 30    if (count <= 0
8040: 29 20 7b 0a 09 72 65 74 75 72 6e 3b 0a 20 20 20  ) {..return;.   
8050: 20 7d 0a 0a 20 20 20 20 2f 2a 0a 20 20 20 20 20   }..    /*.     
8060: 2a 20 46 69 6e 64 20 74 68 65 20 65 6c 65 6d 65  * Find the eleme
8070: 6e 74 20 6a 75 73 74 20 62 65 66 6f 72 65 20 74  nt just before t
8080: 68 65 20 6f 6e 65 73 20 74 6f 20 64 65 6c 65 74  he ones to delet
8090: 65 2e 0a 20 20 20 20 20 2a 2f 0a 0a 20 20 20 20  e..     */..    
80a0: 69 66 20 28 66 69 72 73 74 20 3d 3d 20 30 29 20  if (first == 0) 
80b0: 7b 0a 09 70 72 65 76 50 74 72 20 3d 20 4e 55 4c  {..prevPtr = NUL
80c0: 4c 3b 0a 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a  L;.    } else {.
80d0: 09 66 6f 72 20 28 69 20 3d 20 66 69 72 73 74 2d  .for (i = first-
80e0: 31 2c 20 70 72 65 76 50 74 72 20 3d 20 6c 69 73  1, prevPtr = lis
80f0: 74 50 74 72 2d 3e 66 69 72 73 74 50 74 72 3b 20  tPtr->firstPtr; 
8100: 69 20 3e 20 30 3b 20 69 2d 2d 29 20 7b 0a 09 20  i > 0; i--) {.. 
8110: 20 20 20 70 72 65 76 50 74 72 20 3d 20 70 72 65     prevPtr = pre
8120: 76 50 74 72 2d 3e 6e 65 78 74 50 74 72 3b 0a 09  vPtr->nextPtr;..
8130: 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 0a  }.    }..    /*.
8140: 20 20 20 20 20 2a 20 44 65 6c 65 74 65 20 74 68       * Delete th
8150: 65 20 72 65 71 75 65 73 74 65 64 20 6e 75 6d 62  e requested numb
8160: 65 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73 2e 0a  er of elements..
8170: 20 20 20 20 20 2a 2f 0a 0a 20 20 20 20 77 69 64       */..    wid
8180: 74 68 43 68 61 6e 67 65 64 20 3d 20 30 3b 0a 20  thChanged = 0;. 
8190: 20 20 20 66 6f 72 20 28 69 20 3d 20 63 6f 75 6e     for (i = coun
81a0: 74 3b 20 69 20 3e 20 30 3b 20 69 2d 2d 29 20 7b  t; i > 0; i--) {
81b0: 0a 09 69 66 20 28 70 72 65 76 50 74 72 20 3d 3d  ..if (prevPtr ==
81c0: 20 4e 55 4c 4c 29 20 7b 0a 09 20 20 20 20 65 6c   NULL) {..    el
81d0: 50 74 72 20 3d 20 6c 69 73 74 50 74 72 2d 3e 66  Ptr = listPtr->f
81e0: 69 72 73 74 50 74 72 3b 0a 09 20 20 20 20 6c 69  irstPtr;..    li
81f0: 73 74 50 74 72 2d 3e 66 69 72 73 74 50 74 72 20  stPtr->firstPtr 
8200: 3d 20 65 6c 50 74 72 2d 3e 6e 65 78 74 50 74 72  = elPtr->nextPtr
8210: 3b 0a 09 20 20 20 20 69 66 20 28 6c 69 73 74 50  ;..    if (listP
8220: 74 72 2d 3e 66 69 72 73 74 50 74 72 20 3d 3d 20  tr->firstPtr == 
8230: 4e 55 4c 4c 29 20 7b 0a 09 09 6c 69 73 74 50 74  NULL) {...listPt
8240: 72 2d 3e 6c 61 73 74 50 74 72 20 3d 20 4e 55 4c  r->lastPtr = NUL
8250: 4c 3b 0a 09 20 20 20 20 7d 0a 09 7d 20 65 6c 73  L;..    }..} els
8260: 65 20 7b 0a 09 20 20 20 20 65 6c 50 74 72 20 3d  e {..    elPtr =
8270: 20 70 72 65 76 50 74 72 2d 3e 6e 65 78 74 50 74   prevPtr->nextPt
8280: 72 3b 0a 09 20 20 20 20 70 72 65 76 50 74 72 2d  r;..    prevPtr-
8290: 3e 6e 65 78 74 50 74 72 20 3d 20 65 6c 50 74 72  >nextPtr = elPtr
82a0: 2d 3e 6e 65 78 74 50 74 72 3b 0a 09 20 20 20 20  ->nextPtr;..    
82b0: 69 66 20 28 70 72 65 76 50 74 72 2d 3e 6e 65 78  if (prevPtr->nex
82c0: 74 50 74 72 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a  tPtr == NULL) {.
82d0: 09 09 6c 69 73 74 50 74 72 2d 3e 6c 61 73 74 50  ..listPtr->lastP
82e0: 74 72 20 3d 20 70 72 65 76 50 74 72 3b 0a 09 20  tr = prevPtr;.. 
82f0: 20 20 20 7d 0a 09 7d 0a 09 69 66 20 28 65 6c 50     }..}..if (elP
8300: 74 72 2d 3e 74 65 78 74 4c 65 6e 67 74 68 20 3d  tr->textLength =
8310: 3d 20 6c 69 73 74 50 74 72 2d 3e 6d 61 78 57 69  = listPtr->maxWi
8320: 64 74 68 29 20 7b 0a 09 20 20 20 20 77 69 64 74  dth) {..    widt
8330: 68 43 68 61 6e 67 65 64 20 3d 20 31 3b 0a 09 7d  hChanged = 1;..}
8340: 0a 09 69 66 20 28 65 6c 50 74 72 2d 3e 73 65 6c  ..if (elPtr->sel
8350: 65 63 74 65 64 29 20 7b 0a 09 20 20 20 20 6c 69  ected) {..    li
8360: 73 74 50 74 72 2d 3e 6e 75 6d 53 65 6c 65 63 74  stPtr->numSelect
8370: 65 64 20 2d 3d 20 31 3b 0a 09 7d 0a 09 63 6b 66  ed -= 1;..}..ckf
8380: 72 65 65 28 28 63 68 61 72 20 2a 29 20 65 6c 50  ree((char *) elP
8390: 74 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6c  tr);.    }.    l
83a0: 69 73 74 50 74 72 2d 3e 6e 75 6d 45 6c 65 6d 65  istPtr->numEleme
83b0: 6e 74 73 20 2d 3d 20 63 6f 75 6e 74 3b 0a 0a 20  nts -= count;.. 
83c0: 20 20 20 2f 2a 0a 20 20 20 20 20 2a 20 55 70 64     /*.     * Upd
83d0: 61 74 65 20 74 68 65 20 73 65 6c 65 63 74 69 6f  ate the selectio
83e0: 6e 20 61 6e 64 20 76 69 65 77 69 6e 67 20 69 6e  n and viewing in
83f0: 66 6f 72 6d 61 74 69 6f 6e 20 74 6f 20 72 65 66  formation to ref
8400: 6c 65 63 74 20 74 68 65 20 63 68 61 6e 67 65 0a  lect the change.
8410: 20 20 20 20 20 2a 20 69 6e 20 74 68 65 20 65 6c       * in the el
8420: 65 6d 65 6e 74 20 6e 75 6d 62 65 72 69 6e 67 2c  ement numbering,
8430: 20 61 6e 64 20 72 65 64 69 73 70 6c 61 79 20 74   and redisplay t
8440: 6f 20 73 6c 69 64 65 20 69 6e 66 6f 72 6d 61 74  o slide informat
8450: 69 6f 6e 20 75 70 20 6f 76 65 72 0a 20 20 20 20  ion up over.    
8460: 20 2a 20 74 68 65 20 65 6c 65 6d 65 6e 74 73 20   * the elements 
8470: 74 68 61 74 20 77 65 72 65 20 64 65 6c 65 74 65  that were delete
8480: 64 2e 0a 20 20 20 20 20 2a 2f 0a 0a 20 20 20 20  d..     */..    
8490: 69 66 20 28 66 69 72 73 74 20 3c 3d 20 6c 69 73  if (first <= lis
84a0: 74 50 74 72 2d 3e 73 65 6c 65 63 74 41 6e 63 68  tPtr->selectAnch
84b0: 6f 72 29 20 7b 0a 09 6c 69 73 74 50 74 72 2d 3e  or) {..listPtr->
84c0: 73 65 6c 65 63 74 41 6e 63 68 6f 72 20 2d 3d 20  selectAnchor -= 
84d0: 63 6f 75 6e 74 3b 0a 09 69 66 20 28 6c 69 73 74  count;..if (list
84e0: 50 74 72 2d 3e 73 65 6c 65 63 74 41 6e 63 68 6f  Ptr->selectAncho
84f0: 72 20 3c 20 66 69 72 73 74 29 20 7b 0a 09 20 20  r < first) {..  
8500: 20 20 6c 69 73 74 50 74 72 2d 3e 73 65 6c 65 63    listPtr->selec
8510: 74 41 6e 63 68 6f 72 20 3d 20 66 69 72 73 74 3b  tAnchor = first;
8520: 0a 09 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  ..}.    }.    if
8530: 20 28 66 69 72 73 74 20 3c 3d 20 6c 69 73 74 50   (first <= listP
8540: 74 72 2d 3e 74 6f 70 49 6e 64 65 78 29 20 7b 0a  tr->topIndex) {.
8550: 09 6c 69 73 74 50 74 72 2d 3e 74 6f 70 49 6e 64  .listPtr->topInd
8560: 65 78 20 2d 3d 20 63 6f 75 6e 74 3b 0a 09 69 66  ex -= count;..if
8570: 20 28 6c 69 73 74 50 74 72 2d 3e 74 6f 70 49 6e   (listPtr->topIn
8580: 64 65 78 20 3c 20 66 69 72 73 74 29 20 7b 0a 09  dex < first) {..
8590: 20 20 20 20 6c 69 73 74 50 74 72 2d 3e 74 6f 70      listPtr->top
85a0: 49 6e 64 65 78 20 3d 20 66 69 72 73 74 3b 0a 09  Index = first;..
85b0: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 20 28  }.    }.    if (
85c0: 6c 69 73 74 50 74 72 2d 3e 74 6f 70 49 6e 64 65  listPtr->topInde
85d0: 78 20 3e 20 28 6c 69 73 74 50 74 72 2d 3e 6e 75  x > (listPtr->nu
85e0: 6d 45 6c 65 6d 65 6e 74 73 20 2d 20 6c 69 73 74  mElements - list
85f0: 50 74 72 2d 3e 6e 75 6d 4c 69 6e 65 73 29 29 20  Ptr->numLines)) 
8600: 7b 0a 09 6c 69 73 74 50 74 72 2d 3e 74 6f 70 49  {..listPtr->topI
8610: 6e 64 65 78 20 3d 20 6c 69 73 74 50 74 72 2d 3e  ndex = listPtr->
8620: 6e 75 6d 45 6c 65 6d 65 6e 74 73 20 2d 20 6c 69  numElements - li
8630: 73 74 50 74 72 2d 3e 6e 75 6d 4c 69 6e 65 73 3b  stPtr->numLines;
8640: 0a 09 69 66 20 28 6c 69 73 74 50 74 72 2d 3e 74  ..if (listPtr->t
8650: 6f 70 49 6e 64 65 78 20 3c 20 30 29 20 7b 0a 09  opIndex < 0) {..
8660: 20 20 20 20 6c 69 73 74 50 74 72 2d 3e 74 6f 70      listPtr->top
8670: 49 6e 64 65 78 20 3d 20 30 3b 0a 09 7d 0a 20 20  Index = 0;..}.  
8680: 20 20 7d 0a 20 20 20 20 69 66 20 28 6c 69 73 74    }.    if (list
8690: 50 74 72 2d 3e 61 63 74 69 76 65 20 3e 20 6c 61  Ptr->active > la
86a0: 73 74 29 20 7b 0a 09 6c 69 73 74 50 74 72 2d 3e  st) {..listPtr->
86b0: 61 63 74 69 76 65 20 2d 3d 20 63 6f 75 6e 74 3b  active -= count;
86c0: 0a 20 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28  .    } else if (
86d0: 6c 69 73 74 50 74 72 2d 3e 61 63 74 69 76 65 20  listPtr->active 
86e0: 3e 3d 20 66 69 72 73 74 29 20 7b 0a 09 6c 69 73  >= first) {..lis
86f0: 74 50 74 72 2d 3e 61 63 74 69 76 65 20 3d 20 66  tPtr->active = f
8700: 69 72 73 74 3b 0a 09 69 66 20 28 28 6c 69 73 74  irst;..if ((list
8710: 50 74 72 2d 3e 61 63 74 69 76 65 20 3e 3d 20 6c  Ptr->active >= l
8720: 69 73 74 50 74 72 2d 3e 6e 75 6d 45 6c 65 6d 65  istPtr->numEleme
8730: 6e 74 73 29 0a 09 09 26 26 20 28 6c 69 73 74 50  nts)...&& (listP
8740: 74 72 2d 3e 6e 75 6d 45 6c 65 6d 65 6e 74 73 20  tr->numElements 
8750: 3e 20 30 29 29 20 7b 0a 09 20 20 20 20 6c 69 73  > 0)) {..    lis
8760: 74 50 74 72 2d 3e 61 63 74 69 76 65 20 3d 20 6c  tPtr->active = l
8770: 69 73 74 50 74 72 2d 3e 6e 75 6d 45 6c 65 6d 65  istPtr->numEleme
8780: 6e 74 73 2d 31 3b 0a 09 7d 0a 20 20 20 20 7d 0a  nts-1;..}.    }.
8790: 20 20 20 20 6c 69 73 74 50 74 72 2d 3e 66 6c 61      listPtr->fla
87a0: 67 73 20 7c 3d 20 55 50 44 41 54 45 5f 56 5f 53  gs |= UPDATE_V_S
87b0: 43 52 4f 4c 4c 42 41 52 3b 0a 20 20 20 20 4c 69  CROLLBAR;.    Li
87c0: 73 74 62 6f 78 43 6f 6d 70 75 74 65 47 65 6f 6d  stboxComputeGeom
87d0: 65 74 72 79 28 6c 69 73 74 50 74 72 2c 20 77 69  etry(listPtr, wi
87e0: 64 74 68 43 68 61 6e 67 65 64 29 3b 0a 20 20 20  dthChanged);.   
87f0: 20 69 66 20 28 77 69 64 74 68 43 68 61 6e 67 65   if (widthChange
8800: 64 29 20 7b 0a 09 6c 69 73 74 50 74 72 2d 3e 66  d) {..listPtr->f
8810: 6c 61 67 73 20 7c 3d 20 55 50 44 41 54 45 5f 48  lags |= UPDATE_H
8820: 5f 53 43 52 4f 4c 4c 42 41 52 3b 0a 20 20 20 20  _SCROLLBAR;.    
8830: 7d 0a 20 20 20 20 4c 69 73 74 62 6f 78 52 65 64  }.    ListboxRed
8840: 72 61 77 52 61 6e 67 65 28 6c 69 73 74 50 74 72  rawRange(listPtr
8850: 2c 20 66 69 72 73 74 2c 20 6c 69 73 74 50 74 72  , first, listPtr
8860: 2d 3e 6e 75 6d 45 6c 65 6d 65 6e 74 73 2d 31 29  ->numElements-1)
8870: 3b 0a 7d 0a 0c 0a 2f 2a 0a 20 2a 2d 2d 2d 2d 2d  ;.}.../*. *-----
8880: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
8890: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
88a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
88b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 0a 20 2a 20  ---------. *. * 
88c0: 4c 69 73 74 62 6f 78 45 76 65 6e 74 50 72 6f 63  ListboxEventProc
88d0: 20 2d 2d 0a 20 2a 0a 20 2a 09 54 68 69 73 20 70   --. *. *.This p
88e0: 72 6f 63 65 64 75 72 65 20 69 73 20 69 6e 76 6f  rocedure is invo
88f0: 6b 65 64 20 62 79 20 74 68 65 20 54 6b 20 64 69  ked by the Tk di
8900: 73 70 61 74 63 68 65 72 20 66 6f 72 20 76 61 72  spatcher for var
8910: 69 6f 75 73 0a 20 2a 09 65 76 65 6e 74 73 20 6f  ious. *.events o
8920: 6e 20 6c 69 73 74 62 6f 78 65 73 2e 0a 20 2a 0a  n listboxes.. *.
8930: 20 2a 20 52 65 73 75 6c 74 73 3a 0a 20 2a 09 4e   * Results:. *.N
8940: 6f 6e 65 2e 0a 20 2a 0a 20 2a 20 53 69 64 65 20  one.. *. * Side 
8950: 65 66 66 65 63 74 73 3a 0a 20 2a 09 57 68 65 6e  effects:. *.When
8960: 20 74 68 65 20 77 69 6e 64 6f 77 20 67 65 74 73   the window gets
8970: 20 64 65 6c 65 74 65 64 2c 20 69 6e 74 65 72 6e   deleted, intern
8980: 61 6c 20 73 74 72 75 63 74 75 72 65 73 20 67 65  al structures ge
8990: 74 0a 20 2a 09 63 6c 65 61 6e 65 64 20 75 70 2e  t. *.cleaned up.
89a0: 20 20 57 68 65 6e 20 69 74 20 67 65 74 73 20 65    When it gets e
89b0: 78 70 6f 73 65 64 2c 20 69 74 20 69 73 20 72 65  xposed, it is re
89c0: 64 69 73 70 6c 61 79 65 64 2e 0a 20 2a 0a 20 2a  displayed.. *. *
89d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
89e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
89f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
8a00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20  --------------. 
8a10: 2a 2f 0a 0a 73 74 61 74 69 63 20 76 6f 69 64 0a  */..static void.
8a20: 4c 69 73 74 62 6f 78 45 76 65 6e 74 50 72 6f 63  ListboxEventProc
8a30: 28 63 6c 69 65 6e 74 44 61 74 61 2c 20 65 76 65  (clientData, eve
8a40: 6e 74 50 74 72 29 0a 20 20 20 20 43 6c 69 65 6e  ntPtr).    Clien
8a50: 74 44 61 74 61 20 63 6c 69 65 6e 74 44 61 74 61  tData clientData
8a60: 3b 09 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e  ;./* Information
8a70: 20 61 62 6f 75 74 20 77 69 6e 64 6f 77 2e 20 2a   about window. *
8a80: 2f 0a 20 20 20 20 58 45 76 65 6e 74 20 2a 65 76  /.    XEvent *ev
8a90: 65 6e 74 50 74 72 3b 09 09 2f 2a 20 49 6e 66 6f  entPtr;../* Info
8aa0: 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65 76  rmation about ev
8ab0: 65 6e 74 2e 20 2a 2f 0a 7b 0a 20 20 20 20 4c 69  ent. */.{.    Li
8ac0: 73 74 62 6f 78 20 2a 6c 69 73 74 50 74 72 20 3d  stbox *listPtr =
8ad0: 20 28 4c 69 73 74 62 6f 78 20 2a 29 20 63 6c 69   (Listbox *) cli
8ae0: 65 6e 74 44 61 74 61 3b 0a 0a 20 20 20 20 69 66  entData;..    if
8af0: 20 28 65 76 65 6e 74 50 74 72 2d 3e 74 79 70 65   (eventPtr->type
8b00: 20 3d 3d 20 43 54 4b 5f 45 58 50 4f 53 45 5f 45   == CTK_EXPOSE_E
8b10: 56 45 4e 54 29 20 7b 0a 09 4c 69 73 74 62 6f 78  VENT) {..Listbox
8b20: 52 65 64 72 61 77 52 61 6e 67 65 28 6c 69 73 74  RedrawRange(list
8b30: 50 74 72 2c 0a 09 09 4e 65 61 72 65 73 74 4c 69  Ptr,...NearestLi
8b40: 73 74 62 6f 78 45 6c 65 6d 65 6e 74 28 6c 69 73  stboxElement(lis
8b50: 74 50 74 72 2c 20 65 76 65 6e 74 50 74 72 2d 3e  tPtr, eventPtr->
8b60: 75 2e 65 78 70 6f 73 65 2e 74 6f 70 29 2c 0a 09  u.expose.top),..
8b70: 09 4e 65 61 72 65 73 74 4c 69 73 74 62 6f 78 45  .NearestListboxE
8b80: 6c 65 6d 65 6e 74 28 6c 69 73 74 50 74 72 2c 20  lement(listPtr, 
8b90: 65 76 65 6e 74 50 74 72 2d 3e 75 2e 65 78 70 6f  eventPtr->u.expo
8ba0: 73 65 2e 62 6f 74 74 6f 6d 29 29 3b 0a 09 6c 69  se.bottom));..li
8bb0: 73 74 50 74 72 2d 3e 66 6c 61 67 73 20 7c 3d 20  stPtr->flags |= 
8bc0: 42 4f 52 44 45 52 5f 4e 45 45 44 45 44 3b 0a 20  BORDER_NEEDED;. 
8bd0: 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28 65 76     } else if (ev
8be0: 65 6e 74 50 74 72 2d 3e 74 79 70 65 20 3d 3d 20  entPtr->type == 
8bf0: 43 54 4b 5f 44 45 53 54 52 4f 59 5f 45 56 45 4e  CTK_DESTROY_EVEN
8c00: 54 29 20 7b 0a 09 69 66 20 28 6c 69 73 74 50 74  T) {..if (listPt
8c10: 72 2d 3e 74 6b 77 69 6e 20 21 3d 20 4e 55 4c 4c  r->tkwin != NULL
8c20: 29 20 7b 0a 09 20 20 20 20 6c 69 73 74 50 74 72  ) {..    listPtr
8c30: 2d 3e 74 6b 77 69 6e 20 3d 20 4e 55 4c 4c 3b 0a  ->tkwin = NULL;.
8c40: 09 20 20 20 20 54 63 6c 5f 44 65 6c 65 74 65 43  .    Tcl_DeleteC
8c50: 6f 6d 6d 61 6e 64 28 6c 69 73 74 50 74 72 2d 3e  ommand(listPtr->
8c60: 69 6e 74 65 72 70 2c 0a 09 09 20 20 20 20 54 63  interp,...    Tc
8c70: 6c 5f 47 65 74 43 6f 6d 6d 61 6e 64 4e 61 6d 65  l_GetCommandName
8c80: 28 6c 69 73 74 50 74 72 2d 3e 69 6e 74 65 72 70  (listPtr->interp
8c90: 2c 20 6c 69 73 74 50 74 72 2d 3e 77 69 64 67 65  , listPtr->widge
8ca0: 74 43 6d 64 29 29 3b 0a 09 7d 0a 09 69 66 20 28  tCmd));..}..if (
8cb0: 6c 69 73 74 50 74 72 2d 3e 66 6c 61 67 73 20 26  listPtr->flags &
8cc0: 20 52 45 44 52 41 57 5f 50 45 4e 44 49 4e 47 29   REDRAW_PENDING)
8cd0: 20 7b 0a 09 20 20 20 20 54 63 6c 5f 43 61 6e 63   {..    Tcl_Canc
8ce0: 65 6c 49 64 6c 65 43 61 6c 6c 28 44 69 73 70 6c  elIdleCall(Displ
8cf0: 61 79 4c 69 73 74 62 6f 78 2c 20 28 43 6c 69 65  ayListbox, (Clie
8d00: 6e 74 44 61 74 61 29 20 6c 69 73 74 50 74 72 29  ntData) listPtr)
8d10: 3b 0a 09 7d 0a 09 54 6b 5f 45 76 65 6e 74 75 61  ;..}..Tk_Eventua
8d20: 6c 6c 79 46 72 65 65 28 28 43 6c 69 65 6e 74 44  llyFree((ClientD
8d30: 61 74 61 29 20 6c 69 73 74 50 74 72 2c 20 44 65  ata) listPtr, De
8d40: 73 74 72 6f 79 4c 69 73 74 62 6f 78 29 3b 0a 20  stroyListbox);. 
8d50: 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28 65 76     } else if (ev
8d60: 65 6e 74 50 74 72 2d 3e 74 79 70 65 20 3d 3d 20  entPtr->type == 
8d70: 43 54 4b 5f 4d 41 50 5f 45 56 45 4e 54 29 20 7b  CTK_MAP_EVENT) {
8d80: 0a 09 6c 69 73 74 50 74 72 2d 3e 6e 75 6d 4c 69  ..listPtr->numLi
8d90: 6e 65 73 20 3d 20 54 6b 5f 48 65 69 67 68 74 28  nes = Tk_Height(
8da0: 6c 69 73 74 50 74 72 2d 3e 74 6b 77 69 6e 29 20  listPtr->tkwin) 
8db0: 2d 20 32 2a 6c 69 73 74 50 74 72 2d 3e 62 6f 72  - 2*listPtr->bor
8dc0: 64 65 72 57 69 64 74 68 3b 0a 09 6c 69 73 74 50  derWidth;..listP
8dd0: 74 72 2d 3e 66 6c 61 67 73 20 7c 3d 20 55 50 44  tr->flags |= UPD
8de0: 41 54 45 5f 56 5f 53 43 52 4f 4c 4c 42 41 52 7c  ATE_V_SCROLLBAR|
8df0: 55 50 44 41 54 45 5f 48 5f 53 43 52 4f 4c 4c 42  UPDATE_H_SCROLLB
8e00: 41 52 3b 0a 09 43 68 61 6e 67 65 4c 69 73 74 62  AR;..ChangeListb
8e10: 6f 78 56 69 65 77 28 6c 69 73 74 50 74 72 2c 20  oxView(listPtr, 
8e20: 6c 69 73 74 50 74 72 2d 3e 74 6f 70 49 6e 64 65  listPtr->topInde
8e30: 78 29 3b 0a 09 43 68 61 6e 67 65 4c 69 73 74 62  x);..ChangeListb
8e40: 6f 78 4f 66 66 73 65 74 28 6c 69 73 74 50 74 72  oxOffset(listPtr
8e50: 2c 20 6c 69 73 74 50 74 72 2d 3e 78 4f 66 66 73  , listPtr->xOffs
8e60: 65 74 29 3b 0a 20 20 20 20 7d 20 65 6c 73 65 20  et);.    } else 
8e70: 69 66 20 28 65 76 65 6e 74 50 74 72 2d 3e 74 79  if (eventPtr->ty
8e80: 70 65 20 3d 3d 20 43 54 4b 5f 46 4f 43 55 53 5f  pe == CTK_FOCUS_
8e90: 45 56 45 4e 54 29 20 7b 0a 09 6c 69 73 74 50 74  EVENT) {..listPt
8ea0: 72 2d 3e 66 6c 61 67 73 20 7c 3d 20 47 4f 54 5f  r->flags |= GOT_
8eb0: 46 4f 43 55 53 3b 0a 09 69 66 20 28 6c 69 73 74  FOCUS;..if (list
8ec0: 50 74 72 2d 3e 61 63 74 69 76 65 20 21 3d 20 2d  Ptr->active != -
8ed0: 31 29 20 7b 0a 09 20 20 20 20 4c 69 73 74 62 6f  1) {..    Listbo
8ee0: 78 52 65 64 72 61 77 52 61 6e 67 65 28 6c 69 73  xRedrawRange(lis
8ef0: 74 50 74 72 2c 20 6c 69 73 74 50 74 72 2d 3e 61  tPtr, listPtr->a
8f00: 63 74 69 76 65 2c 20 6c 69 73 74 50 74 72 2d 3e  ctive, listPtr->
8f10: 61 63 74 69 76 65 29 3b 0a 09 7d 0a 20 20 20 20  active);..}.    
8f20: 7d 20 65 6c 73 65 20 69 66 20 28 65 76 65 6e 74  } else if (event
8f30: 50 74 72 2d 3e 74 79 70 65 20 3d 3d 20 43 54 4b  Ptr->type == CTK
8f40: 5f 55 4e 46 4f 43 55 53 5f 45 56 45 4e 54 29 20  _UNFOCUS_EVENT) 
8f50: 7b 0a 09 6c 69 73 74 50 74 72 2d 3e 66 6c 61 67  {..listPtr->flag
8f60: 73 20 26 3d 20 7e 47 4f 54 5f 46 4f 43 55 53 3b  s &= ~GOT_FOCUS;
8f70: 0a 20 20 20 20 7d 0a 7d 0a 0c 0a 2f 2a 0a 20 2a  .    }.}.../*. *
8f80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
8f90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
8fa0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
8fb0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
8fc0: 2d 2d 2d 2d 2d 2d 0a 20 2a 0a 20 2a 20 4c 69 73  ------. *. * Lis
8fd0: 74 62 6f 78 43 6d 64 44 65 6c 65 74 65 64 50 72  tboxCmdDeletedPr
8fe0: 6f 63 20 2d 2d 0a 20 2a 0a 20 2a 09 54 68 69 73  oc --. *. *.This
8ff0: 20 70 72 6f 63 65 64 75 72 65 20 69 73 20 69 6e   procedure is in
9000: 76 6f 6b 65 64 20 77 68 65 6e 20 61 20 77 69 64  voked when a wid
9010: 67 65 74 20 63 6f 6d 6d 61 6e 64 20 69 73 20 64  get command is d
9020: 65 6c 65 74 65 64 2e 20 20 49 66 0a 20 2a 09 74  eleted.  If. *.t
9030: 68 65 20 77 69 64 67 65 74 20 69 73 6e 27 74 20  he widget isn't 
9040: 61 6c 72 65 61 64 79 20 69 6e 20 74 68 65 20 70  already in the p
9050: 72 6f 63 65 73 73 20 6f 66 20 62 65 69 6e 67 20  rocess of being 
9060: 64 65 73 74 72 6f 79 65 64 2c 0a 20 2a 09 74 68  destroyed,. *.th
9070: 69 73 20 63 6f 6d 6d 61 6e 64 20 64 65 73 74 72  is command destr
9080: 6f 79 73 20 69 74 2e 0a 20 2a 0a 20 2a 20 52 65  oys it.. *. * Re
9090: 73 75 6c 74 73 3a 0a 20 2a 09 4e 6f 6e 65 2e 0a  sults:. *.None..
90a0: 20 2a 0a 20 2a 20 53 69 64 65 20 65 66 66 65 63   *. * Side effec
90b0: 74 73 3a 0a 20 2a 09 54 68 65 20 77 69 64 67 65  ts:. *.The widge
90c0: 74 20 69 73 20 64 65 73 74 72 6f 79 65 64 2e 0a  t is destroyed..
90d0: 20 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d   *. *-----------
90e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
90f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9100: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9110: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 2f 0a  -----------. */.
9120: 0a 73 74 61 74 69 63 20 76 6f 69 64 0a 4c 69 73  .static void.Lis
9130: 74 62 6f 78 43 6d 64 44 65 6c 65 74 65 64 50 72  tboxCmdDeletedPr
9140: 6f 63 28 63 6c 69 65 6e 74 44 61 74 61 29 0a 20  oc(clientData). 
9150: 20 20 20 43 6c 69 65 6e 74 44 61 74 61 20 63 6c     ClientData cl
9160: 69 65 6e 74 44 61 74 61 3b 09 2f 2a 20 50 6f 69  ientData;./* Poi
9170: 6e 74 65 72 20 74 6f 20 77 69 64 67 65 74 20 72  nter to widget r
9180: 65 63 6f 72 64 20 66 6f 72 20 77 69 64 67 65 74  ecord for widget
9190: 2e 20 2a 2f 0a 7b 0a 20 20 20 20 4c 69 73 74 62  . */.{.    Listb
91a0: 6f 78 20 2a 6c 69 73 74 50 74 72 20 3d 20 28 4c  ox *listPtr = (L
91b0: 69 73 74 62 6f 78 20 2a 29 20 63 6c 69 65 6e 74  istbox *) client
91c0: 44 61 74 61 3b 0a 20 20 20 20 54 6b 5f 57 69 6e  Data;.    Tk_Win
91d0: 64 6f 77 20 74 6b 77 69 6e 20 3d 20 6c 69 73 74  dow tkwin = list
91e0: 50 74 72 2d 3e 74 6b 77 69 6e 3b 0a 0a 20 20 20  Ptr->tkwin;..   
91f0: 20 2f 2a 0a 20 20 20 20 20 2a 20 54 68 69 73 20   /*.     * This 
9200: 70 72 6f 63 65 64 75 72 65 20 63 6f 75 6c 64 20  procedure could 
9210: 62 65 20 69 6e 76 6f 6b 65 64 20 65 69 74 68 65  be invoked eithe
9220: 72 20 62 65 63 61 75 73 65 20 74 68 65 20 77 69  r because the wi
9230: 6e 64 6f 77 20 77 61 73 0a 20 20 20 20 20 2a 20  ndow was.     * 
9240: 64 65 73 74 72 6f 79 65 64 20 61 6e 64 20 74 68  destroyed and th
9250: 65 20 63 6f 6d 6d 61 6e 64 20 77 61 73 20 74 68  e command was th
9260: 65 6e 20 64 65 6c 65 74 65 64 20 28 69 6e 20 77  en deleted (in w
9270: 68 69 63 68 20 63 61 73 65 20 74 6b 77 69 6e 0a  hich case tkwin.
9280: 20 20 20 20 20 2a 20 69 73 20 4e 55 4c 4c 29 20       * is NULL) 
9290: 6f 72 20 62 65 63 61 75 73 65 20 74 68 65 20 63  or because the c
92a0: 6f 6d 6d 61 6e 64 20 77 61 73 20 64 65 6c 65 74  ommand was delet
92b0: 65 64 2c 20 61 6e 64 20 74 68 65 6e 20 74 68 69  ed, and then thi
92c0: 73 20 70 72 6f 63 65 64 75 72 65 0a 20 20 20 20  s procedure.    
92d0: 20 2a 20 64 65 73 74 72 6f 79 73 20 74 68 65 20   * destroys the 
92e0: 77 69 64 67 65 74 2e 0a 20 20 20 20 20 2a 2f 0a  widget..     */.
92f0: 0a 20 20 20 20 69 66 20 28 74 6b 77 69 6e 20 21  .    if (tkwin !
9300: 3d 20 4e 55 4c 4c 29 20 7b 0a 09 6c 69 73 74 50  = NULL) {..listP
9310: 74 72 2d 3e 74 6b 77 69 6e 20 3d 20 4e 55 4c 4c  tr->tkwin = NULL
9320: 3b 0a 09 54 6b 5f 44 65 73 74 72 6f 79 57 69 6e  ;..Tk_DestroyWin
9330: 64 6f 77 28 74 6b 77 69 6e 29 3b 0a 20 20 20 20  dow(tkwin);.    
9340: 7d 0a 7d 0a 0c 0a 2f 2a 0a 20 2a 2d 2d 2d 2d 2d  }.}.../*. *-----
9350: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9360: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9370: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9380: 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 0a 20 2a 20  ---------. *. * 
9390: 47 65 74 4c 69 73 74 62 6f 78 49 6e 64 65 78 20  GetListboxIndex 
93a0: 2d 2d 0a 20 2a 0a 20 2a 09 50 61 72 73 65 20 61  --. *. *.Parse a
93b0: 6e 20 69 6e 64 65 78 20 69 6e 74 6f 20 61 20 6c  n index into a l
93c0: 69 73 74 62 6f 78 20 61 6e 64 20 72 65 74 75 72  istbox and retur
93d0: 6e 20 65 69 74 68 65 72 20 69 74 73 20 76 61 6c  n either its val
93e0: 75 65 0a 20 2a 09 6f 72 20 61 6e 20 65 72 72 6f  ue. *.or an erro
93f0: 72 2e 0a 20 2a 0a 20 2a 20 52 65 73 75 6c 74 73  r.. *. * Results
9400: 3a 0a 20 2a 09 41 20 73 74 61 6e 64 61 72 64 20  :. *.A standard 
9410: 54 63 6c 20 72 65 73 75 6c 74 2e 20 20 49 66 20  Tcl result.  If 
9420: 61 6c 6c 20 77 65 6e 74 20 77 65 6c 6c 2c 20 74  all went well, t
9430: 68 65 6e 20 2a 69 6e 64 65 78 50 74 72 20 69 73  hen *indexPtr is
9440: 0a 20 2a 09 66 69 6c 6c 65 64 20 69 6e 20 77 69  . *.filled in wi
9450: 74 68 20 74 68 65 20 69 6e 64 65 78 20 28 69 6e  th the index (in
9460: 74 6f 20 6c 69 73 74 50 74 72 29 20 63 6f 72 72  to listPtr) corr
9470: 65 73 70 6f 6e 64 69 6e 67 20 74 6f 0a 20 2a 09  esponding to. *.
9480: 73 74 72 69 6e 67 2e 20 20 4f 74 68 65 72 77 69  string.  Otherwi
9490: 73 65 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73  se an error mess
94a0: 61 67 65 20 69 73 20 6c 65 66 74 20 69 6e 20 69  age is left in i
94b0: 6e 74 65 72 70 2d 3e 72 65 73 75 6c 74 2e 0a 20  nterp->result.. 
94c0: 2a 0a 20 2a 20 53 69 64 65 20 65 66 66 65 63 74  *. * Side effect
94d0: 73 3a 0a 20 2a 09 4e 6f 6e 65 2e 0a 20 2a 0a 20  s:. *.None.. *. 
94e0: 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  *---------------
94f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9500: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9510: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a  ---------------.
9520: 20 2a 2f 0a 0a 73 74 61 74 69 63 20 69 6e 74 0a   */..static int.
9530: 47 65 74 4c 69 73 74 62 6f 78 49 6e 64 65 78 28  GetListboxIndex(
9540: 69 6e 74 65 72 70 2c 20 6c 69 73 74 50 74 72 2c  interp, listPtr,
9550: 20 73 74 72 69 6e 67 2c 20 6e 75 6d 45 6c 73 4f   string, numElsO
9560: 4b 2c 20 69 6e 64 65 78 50 74 72 29 0a 20 20 20  K, indexPtr).   
9570: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
9580: 65 72 70 3b 09 09 2f 2a 20 46 6f 72 20 65 72 72  erp;../* For err
9590: 6f 72 20 6d 65 73 73 61 67 65 73 2e 20 2a 2f 0a  or messages. */.
95a0: 20 20 20 20 4c 69 73 74 62 6f 78 20 2a 6c 69 73      Listbox *lis
95b0: 74 50 74 72 3b 09 09 2f 2a 20 4c 69 73 74 62 6f  tPtr;../* Listbo
95c0: 78 20 66 6f 72 20 77 68 69 63 68 20 74 68 65 20  x for which the 
95d0: 69 6e 64 65 78 20 69 73 20 62 65 69 6e 67 0a 09  index is being..
95e0: 09 09 09 20 2a 20 73 70 65 63 69 66 69 65 64 2e  ... * specified.
95f0: 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 73 74   */.    char *st
9600: 72 69 6e 67 3b 09 09 2f 2a 20 53 70 65 63 69 66  ring;../* Specif
9610: 69 65 73 20 61 6e 20 65 6c 65 6d 65 6e 74 20 69  ies an element i
9620: 6e 20 74 68 65 20 6c 69 73 74 62 6f 78 2e 20 2a  n the listbox. *
9630: 2f 0a 20 20 20 20 69 6e 74 20 6e 75 6d 45 6c 73  /.    int numEls
9640: 4f 4b 3b 09 09 2f 2a 20 30 20 6d 65 61 6e 73 20  OK;../* 0 means 
9650: 74 68 65 20 72 65 74 75 72 6e 20 76 61 6c 75 65  the return value
9660: 20 6d 75 73 74 20 62 65 20 6c 65 73 73 0a 09 09   must be less...
9670: 09 09 20 2a 20 6c 65 73 73 20 74 68 61 6e 20 74  .. * less than t
9680: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 6e 74  he number of ent
9690: 72 69 65 73 20 69 6e 0a 09 09 09 09 20 2a 20 74  ries in..... * t
96a0: 68 65 20 6c 69 73 74 62 6f 78 3b 20 20 31 20 6d  he listbox;  1 m
96b0: 65 61 6e 73 20 69 74 20 6d 61 79 20 61 6c 73 6f  eans it may also
96c0: 20 62 65 0a 09 09 09 09 20 2a 20 65 71 75 61 6c   be..... * equal
96d0: 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   to the number o
96e0: 66 20 65 6e 74 72 69 65 73 2e 20 2a 2f 0a 20 20  f entries. */.  
96f0: 20 20 69 6e 74 20 2a 69 6e 64 65 78 50 74 72 3b    int *indexPtr;
9700: 09 09 2f 2a 20 57 68 65 72 65 20 74 6f 20 73 74  ../* Where to st
9710: 6f 72 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e  ore converted in
9720: 64 65 78 2e 20 2a 2f 0a 7b 0a 20 20 20 20 69 6e  dex. */.{.    in
9730: 74 20 63 3b 0a 20 20 20 20 73 69 7a 65 5f 74 20  t c;.    size_t 
9740: 6c 65 6e 67 74 68 3b 0a 0a 20 20 20 20 6c 65 6e  length;..    len
9750: 67 74 68 20 3d 20 73 74 72 6c 65 6e 28 73 74 72  gth = strlen(str
9760: 69 6e 67 29 3b 0a 20 20 20 20 63 20 3d 20 73 74  ing);.    c = st
9770: 72 69 6e 67 5b 30 5d 3b 0a 20 20 20 20 69 66 20  ring[0];.    if 
9780: 28 28 63 20 3d 3d 20 27 61 27 29 20 26 26 20 28  ((c == 'a') && (
9790: 73 74 72 6e 63 6d 70 28 73 74 72 69 6e 67 2c 20  strncmp(string, 
97a0: 22 61 63 74 69 76 65 22 2c 20 6c 65 6e 67 74 68  "active", length
97b0: 29 20 3d 3d 20 30 29 0a 09 20 20 20 20 26 26 20  ) == 0)..    && 
97c0: 28 6c 65 6e 67 74 68 20 3e 3d 20 32 29 29 20 7b  (length >= 2)) {
97d0: 0a 09 2a 69 6e 64 65 78 50 74 72 20 3d 20 6c 69  ..*indexPtr = li
97e0: 73 74 50 74 72 2d 3e 61 63 74 69 76 65 3b 0a 20  stPtr->active;. 
97f0: 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28 28 63     } else if ((c
9800: 20 3d 3d 20 27 61 27 29 20 26 26 20 28 73 74 72   == 'a') && (str
9810: 6e 63 6d 70 28 73 74 72 69 6e 67 2c 20 22 61 6e  ncmp(string, "an
9820: 63 68 6f 72 22 2c 20 6c 65 6e 67 74 68 29 20 3d  chor", length) =
9830: 3d 20 30 29 0a 09 20 20 20 20 26 26 20 28 6c 65  = 0)..    && (le
9840: 6e 67 74 68 20 3e 3d 20 32 29 29 20 7b 0a 09 2a  ngth >= 2)) {..*
9850: 69 6e 64 65 78 50 74 72 20 3d 20 6c 69 73 74 50  indexPtr = listP
9860: 74 72 2d 3e 73 65 6c 65 63 74 41 6e 63 68 6f 72  tr->selectAnchor
9870: 3b 0a 20 20 20 20 7d 20 65 6c 73 65 20 69 66 20  ;.    } else if 
9880: 28 28 63 20 3d 3d 20 27 65 27 29 20 26 26 20 28  ((c == 'e') && (
9890: 73 74 72 6e 63 6d 70 28 73 74 72 69 6e 67 2c 20  strncmp(string, 
98a0: 22 65 6e 64 22 2c 20 6c 65 6e 67 74 68 29 20 3d  "end", length) =
98b0: 3d 20 30 29 29 20 7b 0a 09 2a 69 6e 64 65 78 50  = 0)) {..*indexP
98c0: 74 72 20 3d 20 6c 69 73 74 50 74 72 2d 3e 6e 75  tr = listPtr->nu
98d0: 6d 45 6c 65 6d 65 6e 74 73 3b 0a 20 20 20 20 7d  mElements;.    }
98e0: 20 65 6c 73 65 20 69 66 20 28 63 20 3d 3d 20 27   else if (c == '
98f0: 40 27 29 20 7b 0a 09 69 6e 74 20 78 2c 20 79 3b  @') {..int x, y;
9900: 0a 09 63 68 61 72 20 2a 70 2c 20 2a 65 6e 64 3b  ..char *p, *end;
9910: 0a 0a 09 70 20 3d 20 73 74 72 69 6e 67 2b 31 3b  ...p = string+1;
9920: 0a 09 78 20 3d 20 73 74 72 74 6f 6c 28 70 2c 20  ..x = strtol(p, 
9930: 26 65 6e 64 2c 20 30 29 3b 0a 09 69 66 20 28 28  &end, 0);..if ((
9940: 65 6e 64 20 3d 3d 20 70 29 20 7c 7c 20 28 2a 65  end == p) || (*e
9950: 6e 64 20 21 3d 20 27 2c 27 29 29 20 7b 0a 09 20  nd != ',')) {.. 
9960: 20 20 20 67 6f 74 6f 20 62 61 64 49 6e 64 65 78     goto badIndex
9970: 3b 0a 09 7d 0a 09 70 20 3d 20 65 6e 64 2b 31 3b  ;..}..p = end+1;
9980: 0a 09 79 20 3d 20 73 74 72 74 6f 6c 28 70 2c 20  ..y = strtol(p, 
9990: 26 65 6e 64 2c 20 30 29 3b 0a 09 69 66 20 28 28  &end, 0);..if ((
99a0: 65 6e 64 20 3d 3d 20 70 29 20 7c 7c 20 28 2a 65  end == p) || (*e
99b0: 6e 64 20 21 3d 20 30 29 29 20 7b 0a 09 20 20 20  nd != 0)) {..   
99c0: 20 67 6f 74 6f 20 62 61 64 49 6e 64 65 78 3b 0a   goto badIndex;.
99d0: 09 7d 0a 09 2a 69 6e 64 65 78 50 74 72 20 3d 20  .}..*indexPtr = 
99e0: 4e 65 61 72 65 73 74 4c 69 73 74 62 6f 78 45 6c  NearestListboxEl
99f0: 65 6d 65 6e 74 28 6c 69 73 74 50 74 72 2c 20 79  ement(listPtr, y
9a00: 29 3b 0a 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a  );.    } else {.
9a10: 09 69 66 20 28 54 63 6c 5f 47 65 74 49 6e 74 28  .if (Tcl_GetInt(
9a20: 69 6e 74 65 72 70 2c 20 73 74 72 69 6e 67 2c 20  interp, string, 
9a30: 69 6e 64 65 78 50 74 72 29 20 21 3d 20 54 43 4c  indexPtr) != TCL
9a40: 5f 4f 4b 29 20 7b 0a 09 20 20 20 20 54 63 6c 5f  _OK) {..    Tcl_
9a50: 52 65 73 65 74 52 65 73 75 6c 74 28 69 6e 74 65  ResetResult(inte
9a60: 72 70 29 3b 0a 09 20 20 20 20 67 6f 74 6f 20 62  rp);..    goto b
9a70: 61 64 49 6e 64 65 78 3b 0a 09 7d 0a 20 20 20 20  adIndex;..}.    
9a80: 7d 0a 20 20 20 20 69 66 20 28 6e 75 6d 45 6c 73  }.    if (numEls
9a90: 4f 4b 29 20 7b 0a 09 69 66 20 28 2a 69 6e 64 65  OK) {..if (*inde
9aa0: 78 50 74 72 20 3e 20 6c 69 73 74 50 74 72 2d 3e  xPtr > listPtr->
9ab0: 6e 75 6d 45 6c 65 6d 65 6e 74 73 29 20 7b 0a 09  numElements) {..
9ac0: 20 20 20 20 2a 69 6e 64 65 78 50 74 72 20 3d 20      *indexPtr = 
9ad0: 6c 69 73 74 50 74 72 2d 3e 6e 75 6d 45 6c 65 6d  listPtr->numElem
9ae0: 65 6e 74 73 3b 0a 09 7d 0a 20 20 20 20 7d 20 65  ents;..}.    } e
9af0: 6c 73 65 20 69 66 20 28 2a 69 6e 64 65 78 50 74  lse if (*indexPt
9b00: 72 20 3e 3d 20 6c 69 73 74 50 74 72 2d 3e 6e 75  r >= listPtr->nu
9b10: 6d 45 6c 65 6d 65 6e 74 73 29 20 7b 0a 09 2a 69  mElements) {..*i
9b20: 6e 64 65 78 50 74 72 20 3d 20 6c 69 73 74 50 74  ndexPtr = listPt
9b30: 72 2d 3e 6e 75 6d 45 6c 65 6d 65 6e 74 73 2d 31  r->numElements-1
9b40: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 20 28  ;.    }.    if (
9b50: 2a 69 6e 64 65 78 50 74 72 20 3c 20 30 29 20 7b  *indexPtr < 0) {
9b60: 0a 09 2a 69 6e 64 65 78 50 74 72 20 3d 20 30 3b  ..*indexPtr = 0;
9b70: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
9b80: 6e 20 54 43 4c 5f 4f 4b 3b 0a 0a 20 20 20 20 62  n TCL_OK;..    b
9b90: 61 64 49 6e 64 65 78 3a 0a 20 20 20 20 54 63 6c  adIndex:.    Tcl
9ba0: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
9bb0: 74 65 72 70 2c 20 22 62 61 64 20 6c 69 73 74 62  terp, "bad listb
9bc0: 6f 78 20 69 6e 64 65 78 20 5c 22 22 2c 20 73 74  ox index \"", st
9bd0: 72 69 6e 67 2c 0a 09 20 20 20 20 22 5c 22 3a 20  ring,..    "\": 
9be0: 20 6d 75 73 74 20 62 65 20 61 63 74 69 76 65 2c   must be active,
9bf0: 20 61 6e 63 68 6f 72 2c 20 65 6e 64 2c 20 40 78   anchor, end, @x
9c00: 2c 79 2c 20 6f 72 20 61 20 6e 75 6d 62 65 72 22  ,y, or a number"
9c10: 2c 0a 09 20 20 20 20 28 63 68 61 72 20 2a 29 20  ,..    (char *) 
9c20: 4e 55 4c 4c 29 3b 0a 20 20 20 20 72 65 74 75 72  NULL);.    retur
9c30: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 7d 0a 0c  n TCL_ERROR;.}..
9c40: 0a 2f 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ./*. *----------
9c50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9c60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9c70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9c80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 0a  ------------. *.
9c90: 20 2a 20 43 68 61 6e 67 65 4c 69 73 74 62 6f 78   * ChangeListbox
9ca0: 56 69 65 77 20 2d 2d 0a 20 2a 0a 20 2a 09 43 68  View --. *. *.Ch
9cb0: 61 6e 67 65 20 74 68 65 20 76 69 65 77 20 6f 6e  ange the view on
9cc0: 20 61 20 6c 69 73 74 62 6f 78 20 77 69 64 67 65   a listbox widge
9cd0: 74 2e 0a 20 2a 0a 20 2a 20 52 65 73 75 6c 74 73  t.. *. * Results
9ce0: 3a 0a 20 2a 09 4e 6f 6e 65 2e 0a 20 2a 0a 20 2a  :. *.None.. *. *
9cf0: 20 53 69 64 65 20 65 66 66 65 63 74 73 3a 0a 20   Side effects:. 
9d00: 2a 09 57 68 61 74 27 73 20 64 69 73 70 6c 61 79  *.What's display
9d10: 65 64 20 6f 6e 20 74 68 65 20 73 63 72 65 65 6e  ed on the screen
9d20: 20 69 73 20 63 68 61 6e 67 65 64 2e 20 20 49 66   is changed.  If
9d30: 20 74 68 65 72 65 20 69 73 20 61 0a 20 2a 09 73   there is a. *.s
9d40: 63 72 6f 6c 6c 62 61 72 20 61 73 73 6f 63 69 61  crollbar associa
9d50: 74 65 64 20 77 69 74 68 20 74 68 69 73 20 77 69  ted with this wi
9d60: 64 67 65 74 2c 20 74 68 65 6e 20 74 68 65 20 73  dget, then the s
9d70: 63 72 6f 6c 6c 62 61 72 0a 20 2a 09 69 73 20 69  crollbar. *.is i
9d80: 6e 73 74 72 75 63 74 65 64 20 74 6f 20 63 68 61  nstructed to cha
9d90: 6e 67 65 20 69 74 73 20 64 69 73 70 6c 61 79 20  nge its display 
9da0: 74 6f 6f 2e 0a 20 2a 0a 20 2a 2d 2d 2d 2d 2d 2d  too.. *. *------
9db0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9dc0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9dd0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9de0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9df0: 0a 20 2a 2f 0a 0a 73 74 61 74 69 63 20 76 6f 69  . */..static voi
9e00: 64 0a 43 68 61 6e 67 65 4c 69 73 74 62 6f 78 56  d.ChangeListboxV
9e10: 69 65 77 28 6c 69 73 74 50 74 72 2c 20 69 6e 64  iew(listPtr, ind
9e20: 65 78 29 0a 20 20 20 20 72 65 67 69 73 74 65 72  ex).    register
9e30: 20 4c 69 73 74 62 6f 78 20 2a 6c 69 73 74 50 74   Listbox *listPt
9e40: 72 3b 09 09 2f 2a 20 49 6e 66 6f 72 6d 61 74 69  r;../* Informati
9e50: 6f 6e 20 61 62 6f 75 74 20 77 69 64 67 65 74 2e  on about widget.
9e60: 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 6e 64 65   */.    int inde
9e70: 78 3b 09 09 09 09 2f 2a 20 49 6e 64 65 78 20 6f  x;..../* Index o
9e80: 66 20 65 6c 65 6d 65 6e 74 20 69 6e 20 6c 69 73  f element in lis
9e90: 74 50 74 72 2e 20 2a 2f 0a 7b 0a 20 20 20 20 69  tPtr. */.{.    i
9ea0: 66 20 28 69 6e 64 65 78 20 3e 3d 20 28 6c 69 73  f (index >= (lis
9eb0: 74 50 74 72 2d 3e 6e 75 6d 45 6c 65 6d 65 6e 74  tPtr->numElement
9ec0: 73 20 2d 20 6c 69 73 74 50 74 72 2d 3e 6e 75 6d  s - listPtr->num
9ed0: 4c 69 6e 65 73 29 29 20 7b 0a 09 69 6e 64 65 78  Lines)) {..index
9ee0: 20 3d 20 6c 69 73 74 50 74 72 2d 3e 6e 75 6d 45   = listPtr->numE
9ef0: 6c 65 6d 65 6e 74 73 20 2d 20 6c 69 73 74 50 74  lements - listPt
9f00: 72 2d 3e 6e 75 6d 4c 69 6e 65 73 3b 0a 20 20 20  r->numLines;.   
9f10: 20 7d 0a 20 20 20 20 69 66 20 28 69 6e 64 65 78   }.    if (index
9f20: 20 3c 20 30 29 20 7b 0a 09 69 6e 64 65 78 20 3d   < 0) {..index =
9f30: 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66   0;.    }.    if
9f40: 20 28 6c 69 73 74 50 74 72 2d 3e 74 6f 70 49 6e   (listPtr->topIn
9f50: 64 65 78 20 21 3d 20 69 6e 64 65 78 29 20 7b 0a  dex != index) {.
9f60: 09 6c 69 73 74 50 74 72 2d 3e 74 6f 70 49 6e 64  .listPtr->topInd
9f70: 65 78 20 3d 20 69 6e 64 65 78 3b 0a 09 69 66 20  ex = index;..if 
9f80: 28 21 28 6c 69 73 74 50 74 72 2d 3e 66 6c 61 67  (!(listPtr->flag
9f90: 73 20 26 20 52 45 44 52 41 57 5f 50 45 4e 44 49  s & REDRAW_PENDI
9fa0: 4e 47 29 29 20 7b 0a 09 20 20 20 20 54 63 6c 5f  NG)) {..    Tcl_
9fb0: 44 6f 57 68 65 6e 49 64 6c 65 28 44 69 73 70 6c  DoWhenIdle(Displ
9fc0: 61 79 4c 69 73 74 62 6f 78 2c 20 28 43 6c 69 65  ayListbox, (Clie
9fd0: 6e 74 44 61 74 61 29 20 6c 69 73 74 50 74 72 29  ntData) listPtr)
9fe0: 3b 0a 09 20 20 20 20 6c 69 73 74 50 74 72 2d 3e  ;..    listPtr->
9ff0: 66 6c 61 67 73 20 7c 3d 20 52 45 44 52 41 57 5f  flags |= REDRAW_
a000: 50 45 4e 44 49 4e 47 3b 0a 09 7d 0a 09 6c 69 73  PENDING;..}..lis
a010: 74 50 74 72 2d 3e 66 6c 61 67 73 20 7c 3d 20 55  tPtr->flags |= U
a020: 50 44 41 54 45 5f 56 5f 53 43 52 4f 4c 4c 42 41  PDATE_V_SCROLLBA
a030: 52 3b 0a 20 20 20 20 7d 0a 7d 0a 0c 0a 2f 2a 0a  R;.    }.}.../*.
a040: 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d   *--------------
a050: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
a060: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
a070: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
a080: 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 0a 20 2a 20 43  --------. *. * C
a090: 68 61 6e 67 4c 69 73 74 62 6f 78 4f 66 66 73 65  hangListboxOffse
a0a0: 74 20 2d 2d 0a 20 2a 0a 20 2a 09 43 68 61 6e 67  t --. *. *.Chang
a0b0: 65 20 74 68 65 20 68 6f 72 69 7a 6f 6e 74 61 6c  e the horizontal
a0c0: 20 6f 66 66 73 65 74 20 66 6f 72 20 61 20 6c 69   offset for a li
a0d0: 73 74 62 6f 78 2e 0a 20 2a 0a 20 2a 20 52 65 73  stbox.. *. * Res
a0e0: 75 6c 74 73 3a 0a 20 2a 09 4e 6f 6e 65 2e 0a 20  ults:. *.None.. 
a0f0: 2a 0a 20 2a 20 53 69 64 65 20 65 66 66 65 63 74  *. * Side effect
a100: 73 3a 0a 20 2a 09 54 68 65 20 6c 69 73 74 62 6f  s:. *.The listbo
a110: 78 20 6d 61 79 20 62 65 20 72 65 64 72 61 77 6e  x may be redrawn
a120: 20 74 6f 20 72 65 66 6c 65 63 74 20 69 74 73 20   to reflect its 
a130: 6e 65 77 20 68 6f 72 69 7a 6f 6e 74 61 6c 0a 20  new horizontal. 
a140: 2a 09 6f 66 66 73 65 74 2e 0a 20 2a 0a 20 2a 2d  *.offset.. *. *-
a150: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
a160: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
a170: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
a180: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
a190: 2d 2d 2d 2d 2d 0a 20 2a 2f 0a 0a 73 74 61 74 69  -----. */..stati
a1a0: 63 20 76 6f 69 64 0a 43 68 61 6e 67 65 4c 69 73  c void.ChangeLis
a1b0: 74 62 6f 78 4f 66 66 73 65 74 28 6c 69 73 74 50  tboxOffset(listP
a1c0: 74 72 2c 20 6f 66 66 73 65 74 29 0a 20 20 20 20  tr, offset).    
a1d0: 72 65 67 69 73 74 65 72 20 4c 69 73 74 62 6f 78  register Listbox
a1e0: 20 2a 6c 69 73 74 50 74 72 3b 09 09 2f 2a 20 49   *listPtr;../* I
a1f0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
a200: 20 77 69 64 67 65 74 2e 20 2a 2f 0a 20 20 20 20   widget. */.    
a210: 69 6e 74 20 6f 66 66 73 65 74 3b 09 09 09 09 2f  int offset;..../
a220: 2a 20 44 65 73 69 72 65 64 20 6e 65 77 20 22 78  * Desired new "x
a230: 4f 66 66 73 65 74 22 20 66 6f 72 0a 09 09 09 09  Offset" for.....
a240: 09 20 2a 20 6c 69 73 74 62 6f 78 2e 20 2a 2f 0a  . * listbox. */.
a250: 7b 0a 20 20 20 20 69 6e 74 20 6d 61 78 4f 66 66  {.    int maxOff
a260: 73 65 74 3b 0a 0a 20 20 20 20 2f 2a 0a 20 20 20  set;..    /*.   
a270: 20 20 2a 20 4d 61 6b 65 20 73 75 72 65 20 74 68    * Make sure th
a280: 61 74 20 74 68 65 20 6e 65 77 20 6f 66 66 73 65  at the new offse
a290: 74 20 69 73 20 77 69 74 68 69 6e 20 74 68 65 20  t is within the 
a2a0: 61 6c 6c 6f 77 61 62 6c 65 20 72 61 6e 67 65 2e  allowable range.
a2b0: 0a 20 20 20 20 20 2a 2f 0a 0a 20 20 20 20 6d 61  .     */..    ma
a2c0: 78 4f 66 66 73 65 74 20 3d 20 6c 69 73 74 50 74  xOffset = listPt
a2d0: 72 2d 3e 6d 61 78 57 69 64 74 68 0a 09 20 20 20  r->maxWidth..   
a2e0: 20 2d 20 28 54 6b 5f 57 69 64 74 68 28 6c 69 73   - (Tk_Width(lis
a2f0: 74 50 74 72 2d 3e 74 6b 77 69 6e 29 20 2d 20 32  tPtr->tkwin) - 2
a300: 2a 6c 69 73 74 50 74 72 2d 3e 62 6f 72 64 65 72  *listPtr->border
a310: 57 69 64 74 68 20 2d 20 31 29 3b 0a 20 20 20 20  Width - 1);.    
a320: 69 66 20 28 6f 66 66 73 65 74 20 3e 20 6d 61 78  if (offset > max
a330: 4f 66 66 73 65 74 29 20 7b 0a 09 6f 66 66 73 65  Offset) {..offse
a340: 74 20 3d 20 6d 61 78 4f 66 66 73 65 74 3b 0a 20  t = maxOffset;. 
a350: 20 20 20 7d 0a 20 20 20 20 69 66 20 28 6f 66 66     }.    if (off
a360: 73 65 74 20 3c 20 30 29 20 7b 0a 09 6f 66 66 73  set < 0) {..offs
a370: 65 74 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20  et = 0;.    }.  
a380: 20 20 69 66 20 28 6f 66 66 73 65 74 20 21 3d 20    if (offset != 
a390: 6c 69 73 74 50 74 72 2d 3e 78 4f 66 66 73 65 74  listPtr->xOffset
a3a0: 29 20 7b 0a 09 6c 69 73 74 50 74 72 2d 3e 78 4f  ) {..listPtr->xO
a3b0: 66 66 73 65 74 20 3d 20 6f 66 66 73 65 74 3b 0a  ffset = offset;.
a3c0: 09 6c 69 73 74 50 74 72 2d 3e 66 6c 61 67 73 20  .listPtr->flags 
a3d0: 7c 3d 20 55 50 44 41 54 45 5f 48 5f 53 43 52 4f  |= UPDATE_H_SCRO
a3e0: 4c 4c 42 41 52 3b 0a 09 4c 69 73 74 62 6f 78 52  LLBAR;..ListboxR
a3f0: 65 64 72 61 77 52 61 6e 67 65 28 6c 69 73 74 50  edrawRange(listP
a400: 74 72 2c 20 30 2c 20 6c 69 73 74 50 74 72 2d 3e  tr, 0, listPtr->
a410: 6e 75 6d 45 6c 65 6d 65 6e 74 73 29 3b 0a 20 20  numElements);.  
a420: 20 20 7d 0a 7d 0a 0c 0a 2f 2a 0a 20 2a 2d 2d 2d    }.}.../*. *---
a430: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
a440: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
a450: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
a460: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
a470: 2d 2d 2d 0a 20 2a 0a 20 2a 20 4e 65 61 72 65 73  ---. *. * Neares
a480: 74 4c 69 73 74 62 6f 78 45 6c 65 6d 65 6e 74 20  tListboxElement 
a490: 2d 2d 0a 20 2a 0a 20 2a 09 47 69 76 65 6e 20 61  --. *. *.Given a
a4a0: 20 79 2d 63 6f 6f 72 64 69 6e 61 74 65 20 69 6e   y-coordinate in
a4b0: 73 69 64 65 20 61 20 6c 69 73 74 62 6f 78 2c 20  side a listbox, 
a4c0: 63 6f 6d 70 75 74 65 20 74 68 65 20 69 6e 64 65  compute the inde
a4d0: 78 20 6f 66 0a 20 2a 09 74 68 65 20 65 6c 65 6d  x of. *.the elem
a4e0: 65 6e 74 20 75 6e 64 65 72 20 74 68 61 74 20 79  ent under that y
a4f0: 2d 63 6f 6f 72 64 69 6e 61 74 65 20 28 6f 72 20  -coordinate (or 
a500: 63 6c 6f 73 65 73 74 20 74 6f 20 74 68 61 74 0a  closest to that.
a510: 20 2a 09 79 2d 63 6f 6f 72 64 69 6e 61 74 65 29   *.y-coordinate)
a520: 2e 0a 20 2a 0a 20 2a 20 52 65 73 75 6c 74 73 3a  .. *. * Results:
a530: 0a 20 2a 09 54 68 65 20 72 65 74 75 72 6e 20 76  . *.The return v
a540: 61 6c 75 65 20 69 73 20 61 6e 20 69 6e 64 65 78  alue is an index
a550: 20 6f 66 20 61 6e 20 65 6c 65 6d 65 6e 74 20 6f   of an element o
a560: 66 20 6c 69 73 74 50 74 72 2e 20 20 49 66 0a 20  f listPtr.  If. 
a570: 2a 09 6c 69 73 74 50 74 72 20 68 61 73 20 6e 6f  *.listPtr has no
a580: 20 65 6c 65 6d 65 6e 74 73 2c 20 74 68 65 6e 20   elements, then 
a590: 30 20 69 73 20 61 6c 77 61 79 73 20 72 65 74 75  0 is always retu
a5a0: 72 6e 65 64 2e 0a 20 2a 0a 20 2a 20 53 69 64 65  rned.. *. * Side
a5b0: 20 65 66 66 65 63 74 73 3a 0a 20 2a 09 4e 6f 6e   effects:. *.Non
a5c0: 65 2e 0a 20 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d  e.. *. *--------
a5d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
a5e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
a5f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
a600: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20  --------------. 
a610: 2a 2f 0a 0a 73 74 61 74 69 63 20 69 6e 74 0a 4e  */..static int.N
a620: 65 61 72 65 73 74 4c 69 73 74 62 6f 78 45 6c 65  earestListboxEle
a630: 6d 65 6e 74 28 6c 69 73 74 50 74 72 2c 20 79 29  ment(listPtr, y)
a640: 0a 20 20 20 20 72 65 67 69 73 74 65 72 20 4c 69  .    register Li
a650: 73 74 62 6f 78 20 2a 6c 69 73 74 50 74 72 3b 09  stbox *listPtr;.
a660: 09 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20  ./* Information 
a670: 61 62 6f 75 74 20 77 69 64 67 65 74 2e 20 2a 2f  about widget. */
a680: 0a 20 20 20 20 69 6e 74 20 79 3b 09 09 09 09 2f  .    int y;..../
a690: 2a 20 59 2d 63 6f 6f 72 64 69 6e 61 74 65 20 69  * Y-coordinate i
a6a0: 6e 20 6c 69 73 74 50 74 72 27 73 20 77 69 6e 64  n listPtr's wind
a6b0: 6f 77 2e 20 2a 2f 0a 7b 0a 20 20 20 20 69 6e 74  ow. */.{.    int
a6c0: 20 69 6e 64 65 78 3b 0a 0a 20 20 20 20 69 6e 64   index;..    ind
a6d0: 65 78 20 3d 20 79 20 2d 20 6c 69 73 74 50 74 72  ex = y - listPtr
a6e0: 2d 3e 62 6f 72 64 65 72 57 69 64 74 68 3b 0a 20  ->borderWidth;. 
a6f0: 20 20 20 69 66 20 28 69 6e 64 65 78 20 3e 3d 20     if (index >= 
a700: 6c 69 73 74 50 74 72 2d 3e 6e 75 6d 4c 69 6e 65  listPtr->numLine
a710: 73 29 20 7b 0a 09 69 6e 64 65 78 20 3d 20 6c 69  s) {..index = li
a720: 73 74 50 74 72 2d 3e 6e 75 6d 4c 69 6e 65 73 2d  stPtr->numLines-
a730: 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 20  1;.    }.    if 
a740: 28 69 6e 64 65 78 20 3c 20 30 29 20 7b 0a 09 69  (index < 0) {..i
a750: 6e 64 65 78 20 3d 20 30 3b 0a 20 20 20 20 7d 0a  ndex = 0;.    }.
a760: 20 20 20 20 69 6e 64 65 78 20 2b 3d 20 6c 69 73      index += lis
a770: 74 50 74 72 2d 3e 74 6f 70 49 6e 64 65 78 3b 0a  tPtr->topIndex;.
a780: 20 20 20 20 69 66 20 28 69 6e 64 65 78 20 3e 3d      if (index >=
a790: 20 6c 69 73 74 50 74 72 2d 3e 6e 75 6d 45 6c 65   listPtr->numEle
a7a0: 6d 65 6e 74 73 29 20 7b 0a 09 69 6e 64 65 78 20  ments) {..index 
a7b0: 3d 20 6c 69 73 74 50 74 72 2d 3e 6e 75 6d 45 6c  = listPtr->numEl
a7c0: 65 6d 65 6e 74 73 2d 31 3b 0a 20 20 20 20 7d 0a  ements-1;.    }.
a7d0: 20 20 20 20 72 65 74 75 72 6e 20 69 6e 64 65 78      return index
a7e0: 3b 0a 7d 0a 0c 0a 2f 2a 0a 20 2a 2d 2d 2d 2d 2d  ;.}.../*. *-----
a7f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
a800: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
a810: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
a820: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
a830: 2d 0a 20 2a 0a 20 2a 20 4c 69 73 74 62 6f 78 53  -. *. * ListboxS
a840: 65 6c 65 63 74 20 2d 2d 0a 20 2a 0a 20 2a 09 53  elect --. *. *.S
a850: 65 6c 65 63 74 20 6f 72 20 64 65 73 65 6c 65 63  elect or deselec
a860: 74 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 65 6c  t one or more el
a870: 65 6d 65 6e 74 73 20 69 6e 20 61 20 6c 69 73 74  ements in a list
a880: 62 6f 78 2e 2e 0a 20 2a 0a 20 2a 20 52 65 73 75  box... *. * Resu
a890: 6c 74 73 3a 0a 20 2a 09 4e 6f 6e 65 2e 0a 20 2a  lts:. *.None.. *
a8a0: 0a 20 2a 20 53 69 64 65 20 65 66 66 65 63 74 73  . * Side effects
a8b0: 3a 0a 20 2a 09 41 6c 6c 20 6f 66 20 74 68 65 20  :. *.All of the 
a8c0: 65 6c 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20  elements in the 
a8d0: 72 61 6e 67 65 20 62 65 74 77 65 65 6e 20 66 69  range between fi
a8e0: 72 73 74 20 61 6e 64 20 6c 61 73 74 20 61 72 65  rst and last are
a8f0: 0a 20 2a 09 6d 61 72 6b 65 64 20 61 73 20 65 69  . *.marked as ei
a900: 74 68 65 72 20 73 65 6c 65 63 74 65 64 20 6f 72  ther selected or
a910: 20 64 65 73 65 6c 65 63 74 65 64 2c 20 64 65 70   deselected, dep
a920: 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 0a 20 2a  ending on the. *
a930: 09 22 73 65 6c 65 63 74 22 20 61 72 67 75 6d 65  ."select" argume
a940: 6e 74 2e 20 20 41 6e 79 20 69 74 65 6d 73 20 77  nt.  Any items w
a950: 68 6f 73 65 20 73 74 61 74 65 20 63 68 61 6e 67  hose state chang
a960: 65 73 20 61 72 65 20 72 65 64 69 73 70 6c 61 79  es are redisplay
a970: 65 64 2e 0a 20 2a 09 54 68 65 20 73 65 6c 65 63  ed.. *.The selec
a980: 74 69 6f 6e 20 69 73 20 63 6c 61 69 6d 65 64 20  tion is claimed 
a990: 66 72 6f 6d 20 58 20 77 68 65 6e 20 74 68 65 20  from X when the 
a9a0: 6e 75 6d 62 65 72 20 6f 66 20 73 65 6c 65 63 74  number of select
a9b0: 65 64 0a 20 2a 09 65 6c 65 6d 65 6e 74 73 20 63  ed. *.elements c
a9c0: 68 61 6e 67 65 73 20 66 72 6f 6d 20 7a 65 72 6f  hanges from zero
a9d0: 20 74 6f 20 6e 6f 6e 2d 7a 65 72 6f 2e 0a 20 2a   to non-zero.. *
a9e0: 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  . *-------------
a9f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
aa00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
aa10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
aa20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 2f 0a 0a 73  ---------. */..s
aa30: 74 61 74 69 63 20 76 6f 69 64 0a 4c 69 73 74 62  tatic void.Listb
aa40: 6f 78 53 65 6c 65 63 74 28 6c 69 73 74 50 74 72  oxSelect(listPtr
aa50: 2c 20 66 69 72 73 74 2c 20 6c 61 73 74 2c 20 73  , first, last, s
aa60: 65 6c 65 63 74 29 0a 20 20 20 20 72 65 67 69 73  elect).    regis
aa70: 74 65 72 20 4c 69 73 74 62 6f 78 20 2a 6c 69 73  ter Listbox *lis
aa80: 74 50 74 72 3b 09 09 2f 2a 20 49 6e 66 6f 72 6d  tPtr;../* Inform
aa90: 61 74 69 6f 6e 20 61 62 6f 75 74 20 77 69 64 67  ation about widg
aaa0: 65 74 2e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 66  et. */.    int f
aab0: 69 72 73 74 3b 09 09 09 09 2f 2a 20 49 6e 64 65  irst;..../* Inde
aac0: 78 20 6f 66 20 66 69 72 73 74 20 65 6c 65 6d 65  x of first eleme
aad0: 6e 74 20 74 6f 0a 09 09 09 09 09 20 2a 20 73 65  nt to...... * se
aae0: 6c 65 63 74 20 6f 72 20 64 65 73 65 6c 65 63 74  lect or deselect
aaf0: 2e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6c 61 73  . */.    int las
ab00: 74 3b 09 09 09 09 2f 2a 20 49 6e 64 65 78 20 6f  t;..../* Index o
ab10: 66 20 6c 61 73 74 20 65 6c 65 6d 65 6e 74 20 74  f last element t
ab20: 6f 0a 09 09 09 09 09 20 2a 20 73 65 6c 65 63 74  o...... * select
ab30: 20 6f 72 20 64 65 73 65 6c 65 63 74 2e 20 2a 2f   or deselect. */
ab40: 0a 20 20 20 20 69 6e 74 20 73 65 6c 65 63 74 3b  .    int select;
ab50: 09 09 09 09 2f 2a 20 31 20 6d 65 61 6e 73 20 73  ..../* 1 means s
ab60: 65 6c 65 63 74 20 69 74 65 6d 73 2c 20 30 20 6d  elect items, 0 m
ab70: 65 61 6e 73 0a 09 09 09 09 09 20 2a 20 64 65 73  eans...... * des
ab80: 65 6c 65 63 74 20 74 68 65 6d 2e 20 2a 2f 0a 7b  elect them. */.{
ab90: 0a 20 20 20 20 69 6e 74 20 69 2c 20 66 69 72 73  .    int i, firs
aba0: 74 52 65 64 69 73 70 6c 61 79 2c 20 6c 61 73 74  tRedisplay, last
abb0: 52 65 64 69 73 70 6c 61 79 2c 20 69 6e 63 72 65  Redisplay, incre
abc0: 6d 65 6e 74 2c 20 6f 6c 64 43 6f 75 6e 74 3b 0a  ment, oldCount;.
abd0: 20 20 20 20 45 6c 65 6d 65 6e 74 20 2a 65 6c 50      Element *elP
abe0: 74 72 3b 0a 0a 20 20 20 20 69 66 20 28 6c 61 73  tr;..    if (las
abf0: 74 20 3c 20 66 69 72 73 74 29 20 7b 0a 09 69 20  t < first) {..i 
ac00: 3d 20 66 69 72 73 74 3b 0a 09 66 69 72 73 74 20  = first;..first 
ac10: 3d 20 6c 61 73 74 3b 0a 09 6c 61 73 74 20 3d 20  = last;..last = 
ac20: 69 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 20  i;.    }.    if 
ac30: 28 66 69 72 73 74 20 3e 3d 20 6c 69 73 74 50 74  (first >= listPt
ac40: 72 2d 3e 6e 75 6d 45 6c 65 6d 65 6e 74 73 29 20  r->numElements) 
ac50: 7b 0a 09 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d  {..return;.    }
ac60: 0a 20 20 20 20 6f 6c 64 43 6f 75 6e 74 20 3d 20  .    oldCount = 
ac70: 6c 69 73 74 50 74 72 2d 3e 6e 75 6d 53 65 6c 65  listPtr->numSele
ac80: 63 74 65 64 3b 0a 20 20 20 20 66 69 72 73 74 52  cted;.    firstR
ac90: 65 64 69 73 70 6c 61 79 20 3d 20 2d 31 3b 0a 20  edisplay = -1;. 
aca0: 20 20 20 69 6e 63 72 65 6d 65 6e 74 20 3d 20 73     increment = s
acb0: 65 6c 65 63 74 20 3f 20 31 20 3a 20 2d 31 3b 0a  elect ? 1 : -1;.
acc0: 20 20 20 20 66 6f 72 20 28 69 20 3d 20 30 2c 20      for (i = 0, 
acd0: 65 6c 50 74 72 20 3d 20 6c 69 73 74 50 74 72 2d  elPtr = listPtr-
ace0: 3e 66 69 72 73 74 50 74 72 3b 20 69 20 3c 20 66  >firstPtr; i < f
acf0: 69 72 73 74 3b 0a 09 20 20 20 20 69 2b 2b 2c 20  irst;..    i++, 
ad00: 65 6c 50 74 72 20 3d 20 65 6c 50 74 72 2d 3e 6e  elPtr = elPtr->n
ad10: 65 78 74 50 74 72 29 20 7b 0a 09 2f 2a 20 45 6d  extPtr) {../* Em
ad20: 70 74 79 20 6c 6f 6f 70 20 62 6f 64 79 2e 20 2a  pty loop body. *
ad30: 2f 0a 20 20 20 20 7d 0a 20 20 20 20 66 6f 72 20  /.    }.    for 
ad40: 28 20 3b 20 69 20 3c 3d 20 6c 61 73 74 3b 20 69  ( ; i <= last; i
ad50: 2b 2b 2c 20 65 6c 50 74 72 20 3d 20 65 6c 50 74  ++, elPtr = elPt
ad60: 72 2d 3e 6e 65 78 74 50 74 72 29 20 7b 0a 09 69  r->nextPtr) {..i
ad70: 66 20 28 65 6c 50 74 72 2d 3e 73 65 6c 65 63 74  f (elPtr->select
ad80: 65 64 20 3d 3d 20 73 65 6c 65 63 74 29 20 7b 0a  ed == select) {.
ad90: 09 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0a 09  .    continue;..
ada0: 7d 0a 09 6c 69 73 74 50 74 72 2d 3e 6e 75 6d 53  }..listPtr->numS
adb0: 65 6c 65 63 74 65 64 20 2b 3d 20 69 6e 63 72 65  elected += incre
adc0: 6d 65 6e 74 3b 0a 09 65 6c 50 74 72 2d 3e 73 65  ment;..elPtr->se
add0: 6c 65 63 74 65 64 20 3d 20 73 65 6c 65 63 74 3b  lected = select;
ade0: 0a 09 69 66 20 28 66 69 72 73 74 52 65 64 69 73  ..if (firstRedis
adf0: 70 6c 61 79 20 3c 20 30 29 20 7b 0a 09 20 20 20  play < 0) {..   
ae00: 20 66 69 72 73 74 52 65 64 69 73 70 6c 61 79 20   firstRedisplay 
ae10: 3d 20 69 3b 0a 09 7d 0a 09 6c 61 73 74 52 65 64  = i;..}..lastRed
ae20: 69 73 70 6c 61 79 20 3d 20 69 3b 0a 20 20 20 20  isplay = i;.    
ae30: 7d 0a 20 20 20 20 69 66 20 28 66 69 72 73 74 52  }.    if (firstR
ae40: 65 64 69 73 70 6c 61 79 20 3e 3d 20 30 29 20 7b  edisplay >= 0) {
ae50: 0a 09 4c 69 73 74 62 6f 78 52 65 64 72 61 77 52  ..ListboxRedrawR
ae60: 61 6e 67 65 28 6c 69 73 74 50 74 72 2c 20 66 69  ange(listPtr, fi
ae70: 72 73 74 2c 20 6c 61 73 74 29 3b 0a 20 20 20 20  rst, last);.    
ae80: 7d 0a 7d 0a 0c 0a 2f 2a 0a 20 2a 2d 2d 2d 2d 2d  }.}.../*. *-----
ae90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
aea0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
aeb0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
aec0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
aed0: 2d 0a 20 2a 0a 20 2a 20 4c 69 73 74 62 6f 78 52  -. *. * ListboxR
aee0: 65 64 72 61 77 52 61 6e 67 65 20 2d 2d 0a 20 2a  edrawRange --. *
aef0: 0a 20 2a 09 45 6e 73 75 72 65 20 74 68 61 74 20  . *.Ensure that 
af00: 61 20 67 69 76 65 6e 20 72 61 6e 67 65 20 6f 66  a given range of
af10: 20 65 6c 65 6d 65 6e 74 73 20 69 73 20 65 76 65   elements is eve
af20: 6e 74 75 61 6c 6c 79 20 72 65 64 72 61 77 6e 20  ntually redrawn 
af30: 6f 6e 0a 20 2a 09 74 68 65 20 64 69 73 70 6c 61  on. *.the displa
af40: 79 20 28 69 66 20 74 68 6f 73 65 20 65 6c 65 6d  y (if those elem
af50: 65 6e 74 73 20 69 6e 20 66 61 63 74 20 61 70 70  ents in fact app
af60: 65 61 72 20 6f 6e 20 74 68 65 20 64 69 73 70 6c  ear on the displ
af70: 61 79 29 2e 0a 20 2a 0a 20 2a 20 52 65 73 75 6c  ay).. *. * Resul
af80: 74 73 3a 0a 20 2a 09 4e 6f 6e 65 2e 0a 20 2a 0a  ts:. *.None.. *.
af90: 20 2a 20 53 69 64 65 20 65 66 66 65 63 74 73 3a   * Side effects:
afa0: 0a 20 2a 09 49 6e 66 6f 72 6d 61 74 69 6f 6e 20  . *.Information 
afb0: 67 65 74 73 20 72 65 64 69 73 70 6c 61 79 65 64  gets redisplayed
afc0: 2e 0a 20 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d  .. *. *---------
afd0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
afe0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
aff0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
b000: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a  -------------. *
b010: 2f 0a 0a 09 2f 2a 20 41 52 47 53 55 53 45 44 20  /.../* ARGSUSED 
b020: 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 0a 4c  */.static void.L
b030: 69 73 74 62 6f 78 52 65 64 72 61 77 52 61 6e 67  istboxRedrawRang
b040: 65 28 6c 69 73 74 50 74 72 2c 20 66 69 72 73 74  e(listPtr, first
b050: 2c 20 6c 61 73 74 29 0a 20 20 20 20 72 65 67 69  , last).    regi
b060: 73 74 65 72 20 4c 69 73 74 62 6f 78 20 2a 6c 69  ster Listbox *li
b070: 73 74 50 74 72 3b 09 09 2f 2a 20 49 6e 66 6f 72  stPtr;../* Infor
b080: 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 77 69 64  mation about wid
b090: 67 65 74 2e 20 2a 2f 0a 20 20 20 20 69 6e 74 20  get. */.    int 
b0a0: 66 69 72 73 74 3b 09 09 09 09 2f 2a 20 49 6e 64  first;..../* Ind
b0b0: 65 78 20 6f 66 20 66 69 72 73 74 20 65 6c 65 6d  ex of first elem
b0c0: 65 6e 74 20 69 6e 20 6c 69 73 74 0a 09 09 09 09  ent in list.....
b0d0: 09 20 2a 20 74 68 61 74 20 6e 65 65 64 73 20 74  . * that needs t
b0e0: 6f 20 62 65 20 72 65 64 72 61 77 6e 2e 20 2a 2f  o be redrawn. */
b0f0: 0a 20 20 20 20 69 6e 74 20 6c 61 73 74 3b 09 09  .    int last;..
b100: 09 09 2f 2a 20 49 6e 64 65 78 20 6f 66 20 6c 61  ../* Index of la
b110: 73 74 20 65 6c 65 6d 65 6e 74 20 69 6e 20 6c 69  st element in li
b120: 73 74 0a 09 09 09 09 09 20 2a 20 74 68 61 74 20  st...... * that 
b130: 6e 65 65 64 73 20 74 6f 20 62 65 20 72 65 64 72  needs to be redr
b140: 61 77 6e 2e 20 20 4d 61 79 0a 09 09 09 09 09 20  awn.  May...... 
b150: 2a 20 62 65 20 6c 65 73 73 20 74 68 61 6e 20 66  * be less than f
b160: 69 72 73 74 3b 0a 09 09 09 09 09 20 2a 20 74 68  irst;...... * th
b170: 65 73 65 20 6a 75 73 74 20 62 72 61 63 6b 65 74  ese just bracket
b180: 20 61 20 72 61 6e 67 65 2e 20 2a 2f 0a 7b 0a 20   a range. */.{. 
b190: 20 20 20 69 66 20 28 28 6c 69 73 74 50 74 72 2d     if ((listPtr-
b1a0: 3e 74 6b 77 69 6e 20 3d 3d 20 4e 55 4c 4c 29 20  >tkwin == NULL) 
b1b0: 7c 7c 20 21 54 6b 5f 49 73 4d 61 70 70 65 64 28  || !Tk_IsMapped(
b1c0: 6c 69 73 74 50 74 72 2d 3e 74 6b 77 69 6e 29 0a  listPtr->tkwin).
b1d0: 09 20 20 20 20 7c 7c 20 28 6c 69 73 74 50 74 72  .    || (listPtr
b1e0: 2d 3e 66 6c 61 67 73 20 26 20 52 45 44 52 41 57  ->flags & REDRAW
b1f0: 5f 50 45 4e 44 49 4e 47 29 29 20 7b 0a 09 72 65  _PENDING)) {..re
b200: 74 75 72 6e 3b 0a 20 20 20 20 7d 0a 20 20 20 20  turn;.    }.    
b210: 54 63 6c 5f 44 6f 57 68 65 6e 49 64 6c 65 28 44  Tcl_DoWhenIdle(D
b220: 69 73 70 6c 61 79 4c 69 73 74 62 6f 78 2c 20 28  isplayListbox, (
b230: 43 6c 69 65 6e 74 44 61 74 61 29 20 6c 69 73 74  ClientData) list
b240: 50 74 72 29 3b 0a 20 20 20 20 6c 69 73 74 50 74  Ptr);.    listPt
b250: 72 2d 3e 66 6c 61 67 73 20 7c 3d 20 52 45 44 52  r->flags |= REDR
b260: 41 57 5f 50 45 4e 44 49 4e 47 3b 0a 7d 0a 0c 0a  AW_PENDING;.}...
b270: 2f 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  /*. *-----------
b280: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
b290: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
b2a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
b2b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 0a 20  -----------. *. 
b2c0: 2a 20 4c 69 73 74 62 6f 78 55 70 64 61 74 65 56  * ListboxUpdateV
b2d0: 53 63 72 6f 6c 6c 62 61 72 20 2d 2d 0a 20 2a 0a  Scrollbar --. *.
b2e0: 20 2a 09 54 68 69 73 20 70 72 6f 63 65 64 75 72   *.This procedur
b2f0: 65 20 69 73 20 69 6e 76 6f 6b 65 64 20 77 68 65  e is invoked whe
b300: 6e 65 76 65 72 20 69 6e 66 6f 72 6d 61 74 69 6f  never informatio
b310: 6e 20 68 61 73 20 63 68 61 6e 67 65 64 20 69 6e  n has changed in
b320: 0a 20 2a 09 61 20 6c 69 73 74 62 6f 78 20 69 6e  . *.a listbox in
b330: 20 61 20 77 61 79 20 74 68 61 74 20 77 6f 75 6c   a way that woul
b340: 64 20 69 6e 76 61 6c 69 64 61 74 65 20 61 20 76  d invalidate a v
b350: 65 72 74 69 63 61 6c 20 73 63 72 6f 6c 6c 62 61  ertical scrollba
b360: 72 0a 20 2a 09 64 69 73 70 6c 61 79 2e 20 20 49  r. *.display.  I
b370: 66 20 74 68 65 72 65 20 69 73 20 61 6e 20 61 73  f there is an as
b380: 73 6f 63 69 61 74 65 64 20 73 63 72 6f 6c 6c 62  sociated scrollb
b390: 61 72 2c 20 74 68 65 6e 20 74 68 69 73 20 63 6f  ar, then this co
b3a0: 6d 6d 61 6e 64 0a 20 2a 09 75 70 64 61 74 65 73  mmand. *.updates
b3b0: 20 69 74 20 62 79 20 69 6e 76 6f 6b 69 6e 67 20   it by invoking 
b3c0: 61 20 54 63 6c 20 63 6f 6d 6d 61 6e 64 2e 0a 20  a Tcl command.. 
b3d0: 2a 0a 20 2a 20 52 65 73 75 6c 74 73 3a 0a 20 2a  *. * Results:. *
b3e0: 09 4e 6f 6e 65 2e 0a 20 2a 0a 20 2a 20 53 69 64  .None.. *. * Sid
b3f0: 65 20 65 66 66 65 63 74 73 3a 0a 20 2a 09 41 20  e effects:. *.A 
b400: 54 63 6c 20 63 6f 6d 6d 61 6e 64 20 69 73 20 69  Tcl command is i
b410: 6e 76 6f 6b 65 64 2c 20 61 6e 64 20 61 6e 20 61  nvoked, and an a
b420: 64 64 69 74 69 6f 6e 61 6c 20 63 6f 6d 6d 61 6e  dditional comman
b430: 64 20 6d 61 79 20 62 65 0a 20 2a 09 69 6e 76 6f  d may be. *.invo
b440: 6b 65 64 20 74 6f 20 70 72 6f 63 65 73 73 20 65  ked to process e
b450: 72 72 6f 72 73 20 69 6e 20 74 68 65 20 63 6f 6d  rrors in the com
b460: 6d 61 6e 64 2e 0a 20 2a 0a 20 2a 2d 2d 2d 2d 2d  mand.. *. *-----
b470: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
b480: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
b490: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
b4a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
b4b0: 2d 0a 20 2a 2f 0a 0a 73 74 61 74 69 63 20 76 6f  -. */..static vo
b4c0: 69 64 0a 4c 69 73 74 62 6f 78 55 70 64 61 74 65  id.ListboxUpdate
b4d0: 56 53 63 72 6f 6c 6c 62 61 72 28 6c 69 73 74 50  VScrollbar(listP
b4e0: 74 72 29 0a 20 20 20 20 72 65 67 69 73 74 65 72  tr).    register
b4f0: 20 4c 69 73 74 62 6f 78 20 2a 6c 69 73 74 50 74   Listbox *listPt
b500: 72 3b 09 09 2f 2a 20 49 6e 66 6f 72 6d 61 74 69  r;../* Informati
b510: 6f 6e 20 61 62 6f 75 74 20 77 69 64 67 65 74 2e  on about widget.
b520: 20 2a 2f 0a 7b 0a 20 20 20 20 63 68 61 72 20 73   */.{.    char s
b530: 74 72 69 6e 67 5b 31 30 30 5d 3b 0a 20 20 20 20  tring[100];.    
b540: 64 6f 75 62 6c 65 20 66 69 72 73 74 2c 20 6c 61  double first, la
b550: 73 74 3b 0a 20 20 20 20 69 6e 74 20 72 65 73 75  st;.    int resu
b560: 6c 74 3b 0a 0a 20 20 20 20 69 66 20 28 6c 69 73  lt;..    if (lis
b570: 74 50 74 72 2d 3e 79 53 63 72 6f 6c 6c 43 6d 64  tPtr->yScrollCmd
b580: 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 72 65 74   == NULL) {..ret
b590: 75 72 6e 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  urn;.    }.    i
b5a0: 66 20 28 6c 69 73 74 50 74 72 2d 3e 6e 75 6d 45  f (listPtr->numE
b5b0: 6c 65 6d 65 6e 74 73 20 3d 3d 20 30 29 20 7b 0a  lements == 0) {.
b5c0: 09 66 69 72 73 74 20 3d 20 30 2e 30 3b 0a 09 6c  .first = 0.0;..l
b5d0: 61 73 74 20 3d 20 31 2e 30 3b 0a 20 20 20 20 7d  ast = 1.0;.    }
b5e0: 20 65 6c 73 65 20 7b 0a 09 66 69 72 73 74 20 3d   else {..first =
b5f0: 20 6c 69 73 74 50 74 72 2d 3e 74 6f 70 49 6e 64   listPtr->topInd
b600: 65 78 2f 28 28 64 6f 75 62 6c 65 29 20 6c 69 73  ex/((double) lis
b610: 74 50 74 72 2d 3e 6e 75 6d 45 6c 65 6d 65 6e 74  tPtr->numElement
b620: 73 29 3b 0a 09 6c 61 73 74 20 3d 20 28 6c 69 73  s);..last = (lis
b630: 74 50 74 72 2d 3e 74 6f 70 49 6e 64 65 78 2b 6c  tPtr->topIndex+l
b640: 69 73 74 50 74 72 2d 3e 6e 75 6d 4c 69 6e 65 73  istPtr->numLines
b650: 29 0a 09 09 2f 28 28 64 6f 75 62 6c 65 29 20 6c  ).../((double) l
b660: 69 73 74 50 74 72 2d 3e 6e 75 6d 45 6c 65 6d 65  istPtr->numEleme
b670: 6e 74 73 29 3b 0a 09 69 66 20 28 6c 61 73 74 20  nts);..if (last 
b680: 3e 20 31 2e 30 29 20 7b 0a 09 20 20 20 20 6c 61  > 1.0) {..    la
b690: 73 74 20 3d 20 31 2e 30 3b 0a 09 7d 0a 20 20 20  st = 1.0;..}.   
b6a0: 20 7d 0a 20 20 20 20 73 70 72 69 6e 74 66 28 73   }.    sprintf(s
b6b0: 74 72 69 6e 67 2c 20 22 20 25 67 20 25 67 22 2c  tring, " %g %g",
b6c0: 20 66 69 72 73 74 2c 20 6c 61 73 74 29 3b 0a 20   first, last);. 
b6d0: 20 20 20 72 65 73 75 6c 74 20 3d 20 54 63 6c 5f     result = Tcl_
b6e0: 56 61 72 45 76 61 6c 28 6c 69 73 74 50 74 72 2d  VarEval(listPtr-
b6f0: 3e 69 6e 74 65 72 70 2c 20 6c 69 73 74 50 74 72  >interp, listPtr
b700: 2d 3e 79 53 63 72 6f 6c 6c 43 6d 64 2c 20 73 74  ->yScrollCmd, st
b710: 72 69 6e 67 2c 0a 09 20 20 20 20 28 63 68 61 72  ring,..    (char
b720: 20 2a 29 20 4e 55 4c 4c 29 3b 0a 20 20 20 20 69   *) NULL);.    i
b730: 66 20 28 72 65 73 75 6c 74 20 21 3d 20 54 43 4c  f (result != TCL
b740: 5f 4f 4b 29 20 7b 0a 09 54 63 6c 5f 41 64 64 45  _OK) {..Tcl_AddE
b750: 72 72 6f 72 49 6e 66 6f 28 6c 69 73 74 50 74 72  rrorInfo(listPtr
b760: 2d 3e 69 6e 74 65 72 70 2c 0a 09 09 22 5c 6e 20  ->interp,..."\n 
b770: 20 20 20 28 76 65 72 74 69 63 61 6c 20 73 63 72     (vertical scr
b780: 6f 6c 6c 69 6e 67 20 63 6f 6d 6d 61 6e 64 20 65  olling command e
b790: 78 65 63 75 74 65 64 20 62 79 20 6c 69 73 74 62  xecuted by listb
b7a0: 6f 78 29 22 29 3b 0a 09 54 63 6c 5f 42 61 63 6b  ox)");..Tcl_Back
b7b0: 67 72 6f 75 6e 64 45 72 72 6f 72 28 6c 69 73 74  groundError(list
b7c0: 50 74 72 2d 3e 69 6e 74 65 72 70 29 3b 0a 20 20  Ptr->interp);.  
b7d0: 20 20 7d 0a 7d 0a 0c 0a 2f 2a 0a 20 2a 2d 2d 2d    }.}.../*. *---
b7e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
b7f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
b800: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
b810: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
b820: 2d 2d 2d 0a 20 2a 0a 20 2a 20 4c 69 73 74 62 6f  ---. *. * Listbo
b830: 78 55 70 64 61 74 65 48 53 63 72 6f 6c 6c 62 61  xUpdateHScrollba
b840: 72 20 2d 2d 0a 20 2a 0a 20 2a 09 54 68 69 73 20  r --. *. *.This 
b850: 70 72 6f 63 65 64 75 72 65 20 69 73 20 69 6e 76  procedure is inv
b860: 6f 6b 65 64 20 77 68 65 6e 65 76 65 72 20 69 6e  oked whenever in
b870: 66 6f 72 6d 61 74 69 6f 6e 20 68 61 73 20 63 68  formation has ch
b880: 61 6e 67 65 64 20 69 6e 0a 20 2a 09 61 20 6c 69  anged in. *.a li
b890: 73 74 62 6f 78 20 69 6e 20 61 20 77 61 79 20 74  stbox in a way t
b8a0: 68 61 74 20 77 6f 75 6c 64 20 69 6e 76 61 6c 69  hat would invali
b8b0: 64 61 74 65 20 61 20 68 6f 72 69 7a 6f 6e 74 61  date a horizonta
b8c0: 6c 20 73 63 72 6f 6c 6c 62 61 72 0a 20 2a 09 64  l scrollbar. *.d
b8d0: 69 73 70 6c 61 79 2e 20 20 49 66 20 74 68 65 72  isplay.  If ther
b8e0: 65 20 69 73 20 61 6e 20 61 73 73 6f 63 69 61 74  e is an associat
b8f0: 65 64 20 68 6f 72 69 7a 6f 6e 74 61 6c 20 73 63  ed horizontal sc
b900: 72 6f 6c 6c 62 61 72 2c 20 74 68 65 6e 0a 20 2a  rollbar, then. *
b910: 09 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 75 70  .this command up
b920: 64 61 74 65 73 20 69 74 20 62 79 20 69 6e 76 6f  dates it by invo
b930: 6b 69 6e 67 20 61 20 54 63 6c 20 63 6f 6d 6d 61  king a Tcl comma
b940: 6e 64 2e 0a 20 2a 0a 20 2a 20 52 65 73 75 6c 74  nd.. *. * Result
b950: 73 3a 0a 20 2a 09 4e 6f 6e 65 2e 0a 20 2a 0a 20  s:. *.None.. *. 
b960: 2a 20 53 69 64 65 20 65 66 66 65 63 74 73 3a 0a  * Side effects:.
b970: 20 2a 09 41 20 54 63 6c 20 63 6f 6d 6d 61 6e 64   *.A Tcl command
b980: 20 69 73 20 69 6e 76 6f 6b 65 64 2c 20 61 6e 64   is invoked, and
b990: 20 61 6e 20 61 64 64 69 74 69 6f 6e 61 6c 20 63   an additional c
b9a0: 6f 6d 6d 61 6e 64 20 6d 61 79 20 62 65 0a 20 2a  ommand may be. *
b9b0: 09 69 6e 76 6f 6b 65 64 20 74 6f 20 70 72 6f 63  .invoked to proc
b9c0: 65 73 73 20 65 72 72 6f 72 73 20 69 6e 20 74 68  ess errors in th
b9d0: 65 20 63 6f 6d 6d 61 6e 64 2e 0a 20 2a 0a 20 2a  e command.. *. *
b9e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
b9f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
ba00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
ba10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
ba20: 2d 2d 2d 2d 2d 2d 0a 20 2a 2f 0a 0a 73 74 61 74  ------. */..stat
ba30: 69 63 20 76 6f 69 64 0a 4c 69 73 74 62 6f 78 55  ic void.ListboxU
ba40: 70 64 61 74 65 48 53 63 72 6f 6c 6c 62 61 72 28  pdateHScrollbar(
ba50: 6c 69 73 74 50 74 72 29 0a 20 20 20 20 72 65 67  listPtr).    reg
ba60: 69 73 74 65 72 20 4c 69 73 74 62 6f 78 20 2a 6c  ister Listbox *l
ba70: 69 73 74 50 74 72 3b 09 09 2f 2a 20 49 6e 66 6f  istPtr;../* Info
ba80: 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 77 69  rmation about wi
ba90: 64 67 65 74 2e 20 2a 2f 0a 7b 0a 20 20 20 20 63  dget. */.{.    c
baa0: 68 61 72 20 73 74 72 69 6e 67 5b 36 30 5d 3b 0a  har string[60];.
bab0: 20 20 20 20 69 6e 74 20 72 65 73 75 6c 74 2c 20      int result, 
bac0: 77 69 6e 64 6f 77 57 69 64 74 68 3b 0a 20 20 20  windowWidth;.   
bad0: 20 64 6f 75 62 6c 65 20 66 69 72 73 74 2c 20 6c   double first, l
bae0: 61 73 74 3b 0a 0a 20 20 20 20 69 66 20 28 6c 69  ast;..    if (li
baf0: 73 74 50 74 72 2d 3e 78 53 63 72 6f 6c 6c 43 6d  stPtr->xScrollCm
bb00: 64 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 72 65  d == NULL) {..re
bb10: 74 75 72 6e 3b 0a 20 20 20 20 7d 0a 20 20 20 20  turn;.    }.    
bb20: 77 69 6e 64 6f 77 57 69 64 74 68 20 3d 20 54 6b  windowWidth = Tk
bb30: 5f 57 69 64 74 68 28 6c 69 73 74 50 74 72 2d 3e  _Width(listPtr->
bb40: 74 6b 77 69 6e 29 20 2d 20 32 2a 6c 69 73 74 50  tkwin) - 2*listP
bb50: 74 72 2d 3e 62 6f 72 64 65 72 57 69 64 74 68 3b  tr->borderWidth;
bb60: 0a 20 20 20 20 69 66 20 28 6c 69 73 74 50 74 72  .    if (listPtr
bb70: 2d 3e 6d 61 78 57 69 64 74 68 20 3d 3d 20 30 29  ->maxWidth == 0)
bb80: 20 7b 0a 09 66 69 72 73 74 20 3d 20 30 3b 0a 09   {..first = 0;..
bb90: 6c 61 73 74 20 3d 20 31 2e 30 3b 0a 20 20 20 20  last = 1.0;.    
bba0: 7d 20 65 6c 73 65 20 7b 0a 09 66 69 72 73 74 20  } else {..first 
bbb0: 3d 20 6c 69 73 74 50 74 72 2d 3e 78 4f 66 66 73  = listPtr->xOffs
bbc0: 65 74 2f 28 28 64 6f 75 62 6c 65 29 20 6c 69 73  et/((double) lis
bbd0: 74 50 74 72 2d 3e 6d 61 78 57 69 64 74 68 29 3b  tPtr->maxWidth);
bbe0: 0a 09 6c 61 73 74 20 3d 20 28 6c 69 73 74 50 74  ..last = (listPt
bbf0: 72 2d 3e 78 4f 66 66 73 65 74 20 2b 20 77 69 6e  r->xOffset + win
bc00: 64 6f 77 57 69 64 74 68 29 0a 09 09 2f 28 28 64  dowWidth).../((d
bc10: 6f 75 62 6c 65 29 20 6c 69 73 74 50 74 72 2d 3e  ouble) listPtr->
bc20: 6d 61 78 57 69 64 74 68 29 3b 0a 09 69 66 20 28  maxWidth);..if (
bc30: 6c 61 73 74 20 3e 20 31 2e 30 29 20 7b 0a 09 20  last > 1.0) {.. 
bc40: 20 20 20 6c 61 73 74 20 3d 20 31 2e 30 3b 0a 09     last = 1.0;..
bc50: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73 70 72 69  }.    }.    spri
bc60: 6e 74 66 28 73 74 72 69 6e 67 2c 20 22 20 25 67  ntf(string, " %g
bc70: 20 25 67 22 2c 20 66 69 72 73 74 2c 20 6c 61 73   %g", first, las
bc80: 74 29 3b 0a 20 20 20 20 72 65 73 75 6c 74 20 3d  t);.    result =
bc90: 20 54 63 6c 5f 56 61 72 45 76 61 6c 28 6c 69 73   Tcl_VarEval(lis
bca0: 74 50 74 72 2d 3e 69 6e 74 65 72 70 2c 20 6c 69  tPtr->interp, li
bcb0: 73 74 50 74 72 2d 3e 78 53 63 72 6f 6c 6c 43 6d  stPtr->xScrollCm
bcc0: 64 2c 20 73 74 72 69 6e 67 2c 0a 09 20 20 20 20  d, string,..    
bcd0: 28 63 68 61 72 20 2a 29 20 4e 55 4c 4c 29 3b 0a  (char *) NULL);.
bce0: 20 20 20 20 69 66 20 28 72 65 73 75 6c 74 20 21      if (result !
bcf0: 3d 20 54 43 4c 5f 4f 4b 29 20 7b 0a 09 54 63 6c  = TCL_OK) {..Tcl
bd00: 5f 41 64 64 45 72 72 6f 72 49 6e 66 6f 28 6c 69  _AddErrorInfo(li
bd10: 73 74 50 74 72 2d 3e 69 6e 74 65 72 70 2c 0a 09  stPtr->interp,..
bd20: 09 22 5c 6e 20 20 20 20 28 68 6f 72 69 7a 6f 6e  ."\n    (horizon
bd30: 74 61 6c 20 73 63 72 6f 6c 6c 69 6e 67 20 63 6f  tal scrolling co
bd40: 6d 6d 61 6e 64 20 65 78 65 63 75 74 65 64 20 62  mmand executed b
bd50: 79 20 6c 69 73 74 62 6f 78 29 22 29 3b 0a 09 54  y listbox)");..T
bd60: 63 6c 5f 42 61 63 6b 67 72 6f 75 6e 64 45 72 72  cl_BackgroundErr
bd70: 6f 72 28 6c 69 73 74 50 74 72 2d 3e 69 6e 74 65  or(listPtr->inte
bd80: 72 70 29 3b 0a 20 20 20 20 7d 0a 7d 0a           rp);.    }.}.