Tcl Source Code

Hex Artifact Content
Login

Artifact 56db313b911daaacb16c701313436318f1d42db6:

Attachment "tip313.patch" to ticket [1894241fff] added by pspjuth 2008-09-20 06:07:51.
0000: 64 69 66 66 20 2d 4e 75 72 20 2d 78 20 2e 67 69  diff -Nur -x .gi
0010: 74 20 74 63 6c 6d 61 73 74 65 72 2f 64 6f 63 2f  t tclmaster/doc/
0020: 6c 73 65 61 72 63 68 2e 6e 20 74 63 6c 2f 64 6f  lsearch.n tcl/do
0030: 63 2f 6c 73 65 61 72 63 68 2e 6e 0a 2d 2d 2d 20  c/lsearch.n.--- 
0040: 74 63 6c 6d 61 73 74 65 72 2f 64 6f 63 2f 6c 73  tclmaster/doc/ls
0050: 65 61 72 63 68 2e 6e 09 32 30 30 38 2d 30 38 2d  earch.n.2008-08-
0060: 30 36 20 32 30 3a 34 30 3a 34 36 2e 30 30 30 30  06 20:40:46.0000
0070: 30 30 30 30 30 20 2b 30 32 30 30 0a 2b 2b 2b 20  00000 +0200.+++ 
0080: 74 63 6c 2f 64 6f 63 2f 6c 73 65 61 72 63 68 2e  tcl/doc/lsearch.
0090: 6e 09 32 30 30 38 2d 30 39 2d 32 30 20 30 30 3a  n.2008-09-20 00:
00a0: 35 35 3a 34 30 2e 30 30 30 30 30 30 30 30 30 20  55:40.000000000 
00b0: 2b 30 32 30 30 0a 40 40 20 2d 31 30 2c 37 20 2b  +0200.@@ -10,7 +
00c0: 31 30 2c 37 20 40 40 0a 20 27 5c 22 20 52 43 53  10,7 @@. '\" RCS
00d0: 3a 20 40 28 23 29 20 24 49 64 3a 20 6c 73 65 61  : @(#) $Id: lsea
00e0: 72 63 68 2e 6e 2c 76 20 31 2e 33 35 20 32 30 30  rch.n,v 1.35 200
00f0: 38 2f 30 36 2f 32 39 20 32 32 3a 32 38 3a 32 34  8/06/29 22:28:24
0100: 20 64 6b 66 20 45 78 70 20 24 0a 20 27 5c 22 20   dkf Exp $. '\" 
0110: 0a 20 2e 73 6f 20 6d 61 6e 2e 6d 61 63 72 6f 73  . .so man.macros
0120: 0a 2d 2e 54 48 20 6c 73 65 61 72 63 68 20 6e 20  .-.TH lsearch n 
0130: 38 2e 35 20 54 63 6c 20 22 54 63 6c 20 42 75 69  8.5 Tcl "Tcl Bui
0140: 6c 74 2d 49 6e 20 43 6f 6d 6d 61 6e 64 73 22 0a  lt-In Commands".
0150: 2b 2e 54 48 20 6c 73 65 61 72 63 68 20 6e 20 38  +.TH lsearch n 8
0160: 2e 36 20 54 63 6c 20 22 54 63 6c 20 42 75 69 6c  .6 Tcl "Tcl Buil
0170: 74 2d 49 6e 20 43 6f 6d 6d 61 6e 64 73 22 0a 20  t-In Commands". 
0180: 2e 42 53 0a 20 27 5c 22 20 4e 6f 74 65 3a 20 20  .BS. '\" Note:  
0190: 64 6f 20 6e 6f 74 20 6d 6f 64 69 66 79 20 74 68  do not modify th
01a0: 65 20 2e 53 48 20 4e 41 4d 45 20 6c 69 6e 65 20  e .SH NAME line 
01b0: 69 6d 6d 65 64 69 61 74 65 6c 79 20 62 65 6c 6f  immediately belo
01c0: 77 21 0a 20 2e 53 48 20 4e 41 4d 45 0a 40 40 20  w!. .SH NAME.@@ 
01d0: 2d 31 33 34 2c 36 20 2b 31 33 34 2c 31 37 20 40  -134,6 +134,17 @
01e0: 40 0a 20 2e 0a 20 54 68 65 20 6c 69 73 74 20 65  @. .. The list e
01f0: 6c 65 6d 65 6e 74 73 20 61 72 65 20 73 6f 72 74  lements are sort
0200: 65 64 20 69 6e 20 69 6e 63 72 65 61 73 69 6e 67  ed in increasing
0210: 20 6f 72 64 65 72 2e 20 20 54 68 69 73 20 6f 70   order.  This op
0220: 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 0a 20 6d 65  tion is only. me
0230: 61 6e 69 6e 67 66 75 6c 20 77 68 65 6e 20 75 73  aningful when us
0240: 65 64 20 77 69 74 68 20 5c 66 42 5c 2d 73 6f 72  ed with \fB\-sor
0250: 74 65 64 5c 66 52 2e 0a 2b 2e 56 53 20 38 2e 36  ted\fR..+.VS 8.6
0260: 0a 2b 2e 54 50 0a 2b 5c 66 42 5c 2d 62 69 73 65  .+.TP.+\fB\-bise
0270: 63 74 5c 66 52 0a 2b 49 6e 65 78 61 63 74 20 73  ct\fR.+Inexact s
0280: 65 61 72 63 68 20 77 68 65 6e 20 74 68 65 20 6c  earch when the l
0290: 69 73 74 20 65 6c 65 6d 65 6e 74 73 20 61 72 65  ist elements are
02a0: 20 69 6e 20 73 6f 72 74 65 64 20 6f 72 64 65 72   in sorted order
02b0: 2e 20 20 46 6f 72 20 61 6e 20 69 6e 63 72 65 61  .  For an increa
02c0: 73 69 6e 67 0a 2b 6c 69 73 74 20 74 68 65 20 6c  sing.+list the l
02d0: 61 73 74 20 69 6e 64 65 78 20 77 68 65 72 65 20  ast index where 
02e0: 74 68 65 20 65 6c 65 6d 65 6e 74 20 69 73 20 6c  the element is l
02f0: 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ess than or equa
0300: 6c 20 74 6f 20 74 68 65 20 70 61 74 74 65 72 6e  l to the pattern
0310: 0a 2b 69 73 20 72 65 74 75 72 6e 65 64 2e 20 20  .+is returned.  
0320: 46 6f 72 20 61 20 64 65 63 72 65 61 73 69 6e 67  For a decreasing
0330: 20 6c 69 73 74 20 74 68 65 20 6c 61 73 74 20 69   list the last i
0340: 6e 64 65 78 20 77 68 65 72 65 20 74 68 65 20 65  ndex where the e
0350: 6c 65 6d 65 6e 74 20 69 73 20 67 72 65 61 74 65  lement is greate
0360: 72 0a 2b 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  r.+than or equal
0370: 20 74 6f 20 74 68 65 20 70 61 74 74 65 72 6e 20   to the pattern 
0380: 69 73 20 72 65 74 75 72 6e 65 64 2e 20 20 49 66  is returned.  If
0390: 20 74 68 65 20 70 61 74 74 65 72 6e 20 69 73 20   the pattern is 
03a0: 62 65 66 6f 72 65 20 74 68 65 20 66 69 72 73 74  before the first
03b0: 0a 2b 65 6c 65 6d 65 6e 74 20 6f 72 20 74 68 65  .+element or the
03c0: 20 6c 69 73 74 20 69 73 20 65 6d 70 74 79 2c 20   list is empty, 
03d0: 2d 31 20 69 73 20 72 65 74 75 72 6e 65 64 2e 0a  -1 is returned..
03e0: 2b 54 68 69 73 20 6f 70 74 69 6f 6e 20 69 6d 70  +This option imp
03f0: 6c 69 65 73 20 5c 66 42 5c 2d 73 6f 72 74 65 64  lies \fB\-sorted
0400: 5c 66 52 20 61 6e 64 20 63 61 6e 6e 6f 74 20 62  \fR and cannot b
0410: 65 20 75 73 65 64 20 77 69 74 68 20 65 69 74 68  e used with eith
0420: 65 72 20 5c 66 42 5c 2d 61 6c 6c 5c 66 52 0a 2b  er \fB\-all\fR.+
0430: 6f 72 20 5c 66 42 5c 2d 6e 6f 74 5c 66 52 2e 0a  or \fB\-not\fR..
0440: 2b 2e 56 45 20 38 2e 36 0a 20 2e 53 53 20 22 4e  +.VE 8.6. .SS "N
0450: 45 53 54 45 44 20 4c 49 53 54 20 4f 50 54 49 4f  ESTED LIST OPTIO
0460: 4e 53 22 0a 20 2e 50 50 0a 20 54 68 65 73 65 20  NS". .PP. These 
0470: 6f 70 74 69 6f 6e 73 20 61 72 65 20 75 73 65 64  options are used
0480: 20 74 6f 20 73 65 61 72 63 68 20 6c 69 73 74 73   to search lists
0490: 20 6f 66 20 6c 69 73 74 73 2e 20 20 54 68 65 79   of lists.  They
04a0: 20 6d 61 79 20 62 65 20 75 73 65 64 0a 64 69 66   may be used.dif
04b0: 66 20 2d 4e 75 72 20 2d 78 20 2e 67 69 74 20 74  f -Nur -x .git t
04c0: 63 6c 6d 61 73 74 65 72 2f 67 65 6e 65 72 69 63  clmaster/generic
04d0: 2f 74 63 6c 43 6d 64 49 4c 2e 63 20 74 63 6c 2f  /tclCmdIL.c tcl/
04e0: 67 65 6e 65 72 69 63 2f 74 63 6c 43 6d 64 49 4c  generic/tclCmdIL
04f0: 2e 63 0a 2d 2d 2d 20 74 63 6c 6d 61 73 74 65 72  .c.--- tclmaster
0500: 2f 67 65 6e 65 72 69 63 2f 74 63 6c 43 6d 64 49  /generic/tclCmdI
0510: 4c 2e 63 09 32 30 30 38 2d 30 38 2d 32 37 20 31  L.c.2008-08-27 1
0520: 39 3a 33 36 3a 35 30 2e 30 30 30 30 30 30 30 30  9:36:50.00000000
0530: 30 20 2b 30 32 30 30 0a 2b 2b 2b 20 74 63 6c 2f  0 +0200.+++ tcl/
0540: 67 65 6e 65 72 69 63 2f 74 63 6c 43 6d 64 49 4c  generic/tclCmdIL
0550: 2e 63 09 32 30 30 38 2d 30 39 2d 32 30 20 30 30  .c.2008-09-20 00
0560: 3a 35 35 3a 34 30 2e 30 30 30 30 30 30 30 30 30  :55:40.000000000
0570: 20 2b 30 32 30 30 0a 40 40 20 2d 32 37 33 32 2c   +0200.@@ -2732,
0580: 37 20 2b 32 37 33 32 2c 37 20 40 40 0a 20 20 20  7 +2732,7 @@.   
0590: 20 20 54 63 6c 5f 4f 62 6a 20 2a 63 6f 6e 73 74    Tcl_Obj *const
05a0: 20 6f 62 6a 76 5b 5d 29 09 2f 2a 20 41 72 67 75   objv[])./* Argu
05b0: 6d 65 6e 74 20 76 61 6c 75 65 73 2e 20 2a 2f 0a  ment values. */.
05c0: 20 7b 0a 20 20 20 20 20 63 68 61 72 20 2a 62 79   {.     char *by
05d0: 74 65 73 2c 20 2a 70 61 74 74 65 72 6e 42 79 74  tes, *patternByt
05e0: 65 73 3b 0a 2d 20 20 20 20 69 6e 74 20 69 2c 20  es;.-    int i, 
05f0: 6d 61 74 63 68 2c 20 6d 6f 64 65 2c 20 69 6e 64  match, mode, ind
0600: 65 78 2c 20 72 65 73 75 6c 74 2c 20 6c 69 73 74  ex, result, list
0610: 63 2c 20 6c 65 6e 67 74 68 2c 20 65 6c 65 6d 4c  c, length, elemL
0620: 65 6e 3b 0a 2b 20 20 20 20 69 6e 74 20 69 2c 20  en;.+    int i, 
0630: 6d 61 74 63 68 2c 20 69 6e 64 65 78 2c 20 72 65  match, index, re
0640: 73 75 6c 74 2c 20 6c 69 73 74 63 2c 20 6c 65 6e  sult, listc, len
0650: 67 74 68 2c 20 65 6c 65 6d 4c 65 6e 2c 20 62 69  gth, elemLen, bi
0660: 73 65 63 74 3b 0a 20 20 20 20 20 69 6e 74 20 64  sect;.     int d
0670: 61 74 61 54 79 70 65 2c 20 69 73 49 6e 63 72 65  ataType, isIncre
0680: 61 73 69 6e 67 2c 20 6c 6f 77 65 72 2c 20 75 70  asing, lower, up
0690: 70 65 72 2c 20 70 61 74 49 6e 74 2c 20 6f 62 6a  per, patInt, obj
06a0: 49 6e 74 2c 20 6f 66 66 73 65 74 3b 0a 20 20 20  Int, offset;.   
06b0: 20 20 69 6e 74 20 61 6c 6c 4d 61 74 63 68 65 73    int allMatches
06c0: 2c 20 69 6e 6c 69 6e 65 52 65 74 75 72 6e 2c 20  , inlineReturn, 
06d0: 6e 65 67 61 74 65 64 4d 61 74 63 68 2c 20 72 65  negatedMatch, re
06e0: 74 75 72 6e 53 75 62 69 6e 64 69 63 65 73 2c 20  turnSubindices, 
06f0: 6e 6f 43 61 73 65 3b 0a 20 20 20 20 20 64 6f 75  noCase;.     dou
0700: 62 6c 65 20 70 61 74 44 6f 75 62 6c 65 2c 20 6f  ble patDouble, o
0710: 62 6a 44 6f 75 62 6c 65 3b 0a 40 40 20 2d 32 37  bjDouble;.@@ -27
0720: 34 31 2c 31 34 20 2b 32 37 34 31 2c 31 34 20 40  41,14 +2741,14 @
0730: 40 0a 20 20 20 20 20 53 6f 72 74 53 74 72 43 6d  @.     SortStrCm
0740: 70 46 6e 5f 74 20 73 74 72 43 6d 70 46 6e 20 3d  pFn_t strCmpFn =
0750: 20 73 74 72 63 6d 70 3b 0a 20 20 20 20 20 54 63   strcmp;.     Tc
0760: 6c 5f 52 65 67 45 78 70 20 72 65 67 65 78 70 20  l_RegExp regexp 
0770: 3d 20 4e 55 4c 4c 3b 0a 20 20 20 20 20 73 74 61  = NULL;.     sta
0780: 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  tic const char *
0790: 6f 70 74 69 6f 6e 73 5b 5d 20 3d 20 7b 0a 2d 09  options[] = {.-.
07a0: 22 2d 61 6c 6c 22 2c 09 20 20 20 20 22 2d 61 73  "-all",.    "-as
07b0: 63 69 69 22 2c 20 20 20 22 2d 64 65 63 72 65 61  cii",   "-decrea
07c0: 73 69 6e 67 22 2c 20 22 2d 64 69 63 74 69 6f 6e  sing", "-diction
07d0: 61 72 79 22 2c 0a 2b 09 22 2d 61 6c 6c 22 2c 09  ary",.+."-all",.
07e0: 20 20 20 20 22 2d 61 73 63 69 69 22 2c 20 20 20      "-ascii",   
07f0: 22 2d 62 69 73 65 63 74 22 2c 20 22 2d 64 65 63  "-bisect", "-dec
0800: 72 65 61 73 69 6e 67 22 2c 20 22 2d 64 69 63 74  reasing", "-dict
0810: 69 6f 6e 61 72 79 22 2c 0a 20 09 22 2d 65 78 61  ionary",. ."-exa
0820: 63 74 22 2c 20 20 20 22 2d 67 6c 6f 62 22 2c 20  ct",   "-glob", 
0830: 20 20 20 22 2d 69 6e 63 72 65 61 73 69 6e 67 22     "-increasing"
0840: 2c 20 22 2d 69 6e 64 65 78 22 2c 0a 20 09 22 2d  , "-index",. ."-
0850: 69 6e 6c 69 6e 65 22 2c 20 20 22 2d 69 6e 74 65  inline",  "-inte
0860: 67 65 72 22 2c 20 22 2d 6e 6f 63 61 73 65 22 2c  ger", "-nocase",
0870: 20 20 20 20 20 22 2d 6e 6f 74 22 2c 0a 20 09 22       "-not",. ."
0880: 2d 72 65 61 6c 22 2c 20 20 20 20 22 2d 72 65 67  -real",    "-reg
0890: 65 78 70 22 2c 20 20 22 2d 73 6f 72 74 65 64 22  exp",  "-sorted"
08a0: 2c 20 20 20 20 20 22 2d 73 74 61 72 74 22 2c 0a  ,     "-start",.
08b0: 20 09 22 2d 73 75 62 69 6e 64 69 63 65 73 22 2c   ."-subindices",
08c0: 20 4e 55 4c 4c 0a 20 20 20 20 20 7d 3b 0a 20 20   NULL.     };.  
08d0: 20 20 20 65 6e 75 6d 20 6f 70 74 69 6f 6e 73 20     enum options 
08e0: 7b 0a 2d 09 4c 53 45 41 52 43 48 5f 41 4c 4c 2c  {.-.LSEARCH_ALL,
08f0: 20 4c 53 45 41 52 43 48 5f 41 53 43 49 49 2c 20   LSEARCH_ASCII, 
0900: 4c 53 45 41 52 43 48 5f 44 45 43 52 45 41 53 49  LSEARCH_DECREASI
0910: 4e 47 2c 20 4c 53 45 41 52 43 48 5f 44 49 43 54  NG, LSEARCH_DICT
0920: 49 4f 4e 41 52 59 2c 0a 2b 09 4c 53 45 41 52 43  IONARY,.+.LSEARC
0930: 48 5f 41 4c 4c 2c 20 4c 53 45 41 52 43 48 5f 41  H_ALL, LSEARCH_A
0940: 53 43 49 49 2c 20 4c 53 45 41 52 43 48 5f 42 49  SCII, LSEARCH_BI
0950: 53 45 43 54 2c 20 4c 53 45 41 52 43 48 5f 44 45  SECT, LSEARCH_DE
0960: 43 52 45 41 53 49 4e 47 2c 20 4c 53 45 41 52 43  CREASING, LSEARC
0970: 48 5f 44 49 43 54 49 4f 4e 41 52 59 2c 0a 20 09  H_DICTIONARY,. .
0980: 4c 53 45 41 52 43 48 5f 45 58 41 43 54 2c 20 4c  LSEARCH_EXACT, L
0990: 53 45 41 52 43 48 5f 47 4c 4f 42 2c 20 4c 53 45  SEARCH_GLOB, LSE
09a0: 41 52 43 48 5f 49 4e 43 52 45 41 53 49 4e 47 2c  ARCH_INCREASING,
09b0: 20 4c 53 45 41 52 43 48 5f 49 4e 44 45 58 2c 0a   LSEARCH_INDEX,.
09c0: 20 09 4c 53 45 41 52 43 48 5f 49 4e 4c 49 4e 45   .LSEARCH_INLINE
09d0: 2c 20 4c 53 45 41 52 43 48 5f 49 4e 54 45 47 45  , LSEARCH_INTEGE
09e0: 52 2c 20 4c 53 45 41 52 43 48 5f 4e 4f 43 41 53  R, LSEARCH_NOCAS
09f0: 45 2c 20 4c 53 45 41 52 43 48 5f 4e 4f 54 2c 0a  E, LSEARCH_NOT,.
0a00: 20 09 4c 53 45 41 52 43 48 5f 52 45 41 4c 2c 20   .LSEARCH_REAL, 
0a10: 4c 53 45 41 52 43 48 5f 52 45 47 45 58 50 2c 20  LSEARCH_REGEXP, 
0a20: 4c 53 45 41 52 43 48 5f 53 4f 52 54 45 44 2c 20  LSEARCH_SORTED, 
0a30: 4c 53 45 41 52 43 48 5f 53 54 41 52 54 2c 0a 40  LSEARCH_START,.@
0a40: 40 20 2d 32 37 36 30 2c 36 20 2b 32 37 36 30 2c  @ -2760,6 +2760,
0a50: 37 20 40 40 0a 20 20 20 20 20 65 6e 75 6d 20 6d  7 @@.     enum m
0a60: 6f 64 65 73 20 7b 0a 20 09 45 58 41 43 54 2c 20  odes {. .EXACT, 
0a70: 47 4c 4f 42 2c 20 52 45 47 45 58 50 2c 20 53 4f  GLOB, REGEXP, SO
0a80: 52 54 45 44 0a 20 20 20 20 20 7d 3b 0a 2b 20 20  RTED.     };.+  
0a90: 20 20 65 6e 75 6d 20 6d 6f 64 65 73 20 6d 6f 64    enum modes mod
0aa0: 65 3b 0a 20 0a 20 20 20 20 20 6d 6f 64 65 20 3d  e;. .     mode =
0ab0: 20 47 4c 4f 42 3b 0a 20 20 20 20 20 64 61 74 61   GLOB;.     data
0ac0: 54 79 70 65 20 3d 20 41 53 43 49 49 3b 0a 40 40  Type = ASCII;.@@
0ad0: 20 2d 32 37 36 38 2c 36 20 2b 32 37 36 39 2c 37   -2768,6 +2769,7
0ae0: 20 40 40 0a 20 20 20 20 20 69 6e 6c 69 6e 65 52   @@.     inlineR
0af0: 65 74 75 72 6e 20 3d 20 30 3b 0a 20 20 20 20 20  eturn = 0;.     
0b00: 72 65 74 75 72 6e 53 75 62 69 6e 64 69 63 65 73  returnSubindices
0b10: 20 3d 20 30 3b 0a 20 20 20 20 20 6e 65 67 61 74   = 0;.     negat
0b20: 65 64 4d 61 74 63 68 20 3d 20 30 3b 0a 2b 20 20  edMatch = 0;.+  
0b30: 20 20 62 69 73 65 63 74 20 3d 20 30 3b 0a 20 20    bisect = 0;.  
0b40: 20 20 20 6c 69 73 74 50 74 72 20 3d 20 4e 55 4c     listPtr = NUL
0b50: 4c 3b 0a 20 20 20 20 20 73 74 61 72 74 50 74 72  L;.     startPtr
0b60: 20 3d 20 4e 55 4c 4c 3b 0a 20 20 20 20 20 6f 66   = NULL;.     of
0b70: 66 73 65 74 20 3d 20 30 3b 0a 40 40 20 2d 32 38  fset = 0;.@@ -28
0b80: 30 33 2c 36 20 2b 32 38 30 35 2c 31 30 20 40 40  03,6 +2805,10 @@
0b90: 0a 20 09 63 61 73 65 20 4c 53 45 41 52 43 48 5f  . .case LSEARCH_
0ba0: 41 53 43 49 49 3a 09 09 2f 2a 20 2d 61 73 63 69  ASCII:../* -asci
0bb0: 69 20 2a 2f 0a 20 09 20 20 20 20 64 61 74 61 54  i */. .    dataT
0bc0: 79 70 65 20 3d 20 41 53 43 49 49 3b 0a 20 09 20  ype = ASCII;. . 
0bd0: 20 20 20 62 72 65 61 6b 3b 0a 2b 09 63 61 73 65     break;.+.case
0be0: 20 4c 53 45 41 52 43 48 5f 42 49 53 45 43 54 3a   LSEARCH_BISECT:
0bf0: 09 09 2f 2a 20 2d 62 69 73 65 63 74 20 2a 2f 0a  ../* -bisect */.
0c00: 2b 09 20 20 20 20 6d 6f 64 65 20 3d 20 53 4f 52  +.    mode = SOR
0c10: 54 45 44 3b 0a 2b 09 20 20 20 20 62 69 73 65 63  TED;.+.    bisec
0c20: 74 20 3d 20 31 3b 0a 2b 09 20 20 20 20 62 72 65  t = 1;.+.    bre
0c30: 61 6b 3b 0a 20 09 63 61 73 65 20 4c 53 45 41 52  ak;. .case LSEAR
0c40: 43 48 5f 44 45 43 52 45 41 53 49 4e 47 3a 09 2f  CH_DECREASING:./
0c50: 2a 20 2d 64 65 63 72 65 61 73 69 6e 67 20 2a 2f  * -decreasing */
0c60: 0a 20 09 20 20 20 20 69 73 49 6e 63 72 65 61 73  . .    isIncreas
0c70: 69 6e 67 20 3d 20 30 3b 0a 20 09 20 20 20 20 73  ing = 0;. .    s
0c80: 6f 72 74 49 6e 66 6f 2e 69 73 49 6e 63 72 65 61  ortInfo.isIncrea
0c90: 73 69 6e 67 20 3d 20 30 3b 0a 40 40 20 2d 32 39  sing = 0;.@@ -29
0ca0: 35 34 2c 37 20 2b 32 39 36 30 2c 31 33 20 40 40  54,7 +2960,13 @@
0cb0: 0a 20 09 72 65 74 75 72 6e 20 54 43 4c 5f 45 52  . .return TCL_ER
0cc0: 52 4f 52 3b 0a 20 20 20 20 20 7d 0a 20 0a 2d 20  ROR;.     }. .- 
0cd0: 20 20 20 69 66 20 28 28 65 6e 75 6d 20 6d 6f 64     if ((enum mod
0ce0: 65 73 29 20 6d 6f 64 65 20 3d 3d 20 52 45 47 45  es) mode == REGE
0cf0: 58 50 29 20 7b 0a 2b 20 20 20 20 69 66 20 28 62  XP) {.+    if (b
0d00: 69 73 65 63 74 20 26 26 20 28 61 6c 6c 4d 61 74  isect && (allMat
0d10: 63 68 65 73 20 7c 7c 20 6e 65 67 61 74 65 64 4d  ches || negatedM
0d20: 61 74 63 68 29 29 20 7b 0a 2b 09 54 63 6c 5f 41  atch)) {.+.Tcl_A
0d30: 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
0d40: 72 70 2c 0a 2b 09 09 22 2d 62 69 73 65 63 74 20  rp,.+.."-bisect 
0d50: 69 73 20 6e 6f 74 20 63 6f 6d 70 61 74 69 62 6c  is not compatibl
0d60: 65 20 77 69 74 68 20 2d 61 6c 6c 20 6f 72 20 2d  e with -all or -
0d70: 6e 6f 74 22 2c 20 4e 55 4c 4c 29 3b 0a 2b 09 72  not", NULL);.+.r
0d80: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
0d90: 0a 2b 20 20 20 20 7d 0a 2b 0a 2b 20 20 20 20 69  .+    }.+.+    i
0da0: 66 20 28 6d 6f 64 65 20 3d 3d 20 52 45 47 45 58  f (mode == REGEX
0db0: 50 29 20 7b 0a 20 09 2f 2a 0a 20 09 20 2a 20 57  P) {. ./*. . * W
0dc0: 65 20 63 61 6e 20 73 68 69 6d 6d 65 72 20 72 65  e can shimmer re
0dd0: 67 65 78 70 2f 6c 69 73 74 20 69 66 20 6c 69 73  gexp/list if lis
0de0: 74 76 5b 69 5d 20 3d 3d 20 70 61 74 74 65 72 6e  tv[i] == pattern
0df0: 2c 20 73 6f 20 67 65 74 20 74 68 65 0a 20 09 20  , so get the. . 
0e00: 2a 20 72 65 67 65 78 70 20 72 65 70 20 62 65 66  * regexp rep bef
0e10: 6f 72 65 20 74 68 65 20 6c 69 73 74 20 72 65 70  ore the list rep
0e20: 2e 20 46 69 72 73 74 20 74 69 6d 65 20 72 6f 75  . First time rou
0e30: 6e 64 2c 20 6f 6d 69 74 20 74 68 65 20 69 6e 74  nd, omit the int
0e40: 65 72 70 0a 40 40 20 2d 33 30 34 30 2c 37 20 2b  erp.@@ -3040,7 +
0e50: 33 30 35 32 2c 37 20 40 40 0a 20 0a 20 20 20 20  3052,7 @@. .    
0e60: 20 70 61 74 4f 62 6a 20 3d 20 6f 62 6a 76 5b 6f   patObj = objv[o
0e70: 62 6a 63 20 2d 20 31 5d 3b 0a 20 20 20 20 20 70  bjc - 1];.     p
0e80: 61 74 74 65 72 6e 42 79 74 65 73 20 3d 20 4e 55  atternBytes = NU
0e90: 4c 4c 3b 0a 2d 20 20 20 20 69 66 20 28 28 65 6e  LL;.-    if ((en
0ea0: 75 6d 20 6d 6f 64 65 73 29 20 6d 6f 64 65 20 3d  um modes) mode =
0eb0: 3d 20 45 58 41 43 54 20 7c 7c 20 28 65 6e 75 6d  = EXACT || (enum
0ec0: 20 6d 6f 64 65 73 29 20 6d 6f 64 65 20 3d 3d 20   modes) mode == 
0ed0: 53 4f 52 54 45 44 29 20 7b 0a 2b 20 20 20 20 69  SORTED) {.+    i
0ee0: 66 20 28 6d 6f 64 65 20 3d 3d 20 45 58 41 43 54  f (mode == EXACT
0ef0: 20 7c 7c 20 6d 6f 64 65 20 3d 3d 20 53 4f 52 54   || mode == SORT
0f00: 45 44 29 20 7b 0a 20 09 73 77 69 74 63 68 20 28  ED) {. .switch (
0f10: 28 65 6e 75 6d 20 64 61 74 61 74 79 70 65 73 29  (enum datatypes)
0f20: 20 64 61 74 61 54 79 70 65 29 20 7b 0a 20 09 63   dataType) {. .c
0f30: 61 73 65 20 41 53 43 49 49 3a 0a 20 09 63 61 73  ase ASCII:. .cas
0f40: 65 20 44 49 43 54 49 4f 4e 41 52 59 3a 0a 40 40  e DICTIONARY:.@@
0f50: 20 2d 33 30 39 31 2c 37 20 2b 33 31 30 33 2c 37   -3091,7 +3103,7
0f60: 20 40 40 0a 20 20 20 20 20 69 6e 64 65 78 20 3d   @@.     index =
0f70: 20 2d 31 3b 0a 20 20 20 20 20 6d 61 74 63 68 20   -1;.     match 
0f80: 3d 20 30 3b 0a 20 0a 2d 20 20 20 20 69 66 20 28  = 0;. .-    if (
0f90: 28 65 6e 75 6d 20 6d 6f 64 65 73 29 20 6d 6f 64  (enum modes) mod
0fa0: 65 20 3d 3d 20 53 4f 52 54 45 44 20 26 26 20 21  e == SORTED && !
0fb0: 61 6c 6c 4d 61 74 63 68 65 73 20 26 26 20 21 6e  allMatches && !n
0fc0: 65 67 61 74 65 64 4d 61 74 63 68 29 20 7b 0a 2b  egatedMatch) {.+
0fd0: 20 20 20 20 69 66 20 28 6d 6f 64 65 20 3d 3d 20      if (mode == 
0fe0: 53 4f 52 54 45 44 20 26 26 20 21 61 6c 6c 4d 61  SORTED && !allMa
0ff0: 74 63 68 65 73 20 26 26 20 21 6e 65 67 61 74 65  tches && !negate
1000: 64 4d 61 74 63 68 29 20 7b 0a 20 09 2f 2a 0a 20  dMatch) {. ./*. 
1010: 09 20 2a 20 49 66 20 74 68 65 20 64 61 74 61 20  . * If the data 
1020: 69 73 20 73 6f 72 74 65 64 2c 20 77 65 20 63 61  is sorted, we ca
1030: 6e 20 64 6f 20 61 20 6d 6f 72 65 20 69 6e 74 65  n do a more inte
1040: 6c 6c 69 67 65 6e 74 20 73 65 61 72 63 68 2e 20  lligent search. 
1050: 4e 6f 74 65 0a 20 09 20 2a 20 74 68 61 74 20 74  Note. . * that t
1060: 68 65 72 65 20 69 73 20 6e 6f 20 70 6f 69 6e 74  here is no point
1070: 20 69 6e 20 62 65 69 6e 67 20 73 6d 61 72 74 20   in being smart 
1080: 77 68 65 6e 20 2d 61 6c 6c 20 77 61 73 20 73 70  when -all was sp
1090: 65 63 69 66 69 65 64 3b 20 69 6e 0a 40 40 20 2d  ecified; in.@@ -
10a0: 33 31 36 39 2c 31 30 20 2b 33 31 38 31 2c 31 36  3169,10 +3181,16
10b0: 20 40 40 0a 20 09 09 20 2a 20 76 61 72 69 61 74   @@. .. * variat
10c0: 69 6f 6e 20 6d 65 61 6e 73 20 74 68 61 74 20 61  ion means that a
10d0: 20 73 65 61 72 63 68 20 61 6c 77 61 79 73 20 6d   search always m
10e0: 61 6b 65 73 20 6c 6f 67 20 6e 0a 20 09 09 20 2a  akes log n. .. *
10f0: 20 63 6f 6d 70 61 72 69 73 6f 6e 73 20 28 6e 6f   comparisons (no
1100: 72 6d 61 6c 20 62 69 6e 61 72 79 20 73 65 61 72  rmal binary sear
1110: 63 68 20 6d 69 67 68 74 20 22 67 65 74 20 6c 75  ch might "get lu
1120: 63 6b 79 22 20 77 69 74 68 20 61 6e 0a 20 09 09  cky" with an. ..
1130: 20 2a 20 65 61 72 6c 79 20 63 6f 6d 70 61 72 69   * early compari
1140: 73 6f 6e 29 2e 0a 2b 09 09 20 2a 0a 2b 09 09 20  son)..+.. *.+.. 
1150: 2a 20 49 6e 20 62 69 73 65 63 74 20 6d 6f 64 65  * In bisect mode
1160: 20 74 68 6f 75 67 68 2c 20 77 65 20 77 61 6e 74   though, we want
1170: 20 74 68 65 20 6c 61 73 74 20 6f 66 20 65 71 75   the last of equ
1180: 61 6c 73 2e 0a 20 09 09 20 2a 2f 0a 20 0a 20 09  als.. .. */. . .
1190: 09 69 6e 64 65 78 20 3d 20 69 3b 0a 2d 09 09 75  .index = i;.-..u
11a0: 70 70 65 72 20 3d 20 69 3b 0a 2b 09 09 69 66 20  pper = i;.+..if 
11b0: 28 62 69 73 65 63 74 29 20 7b 0a 2b 09 09 20 20  (bisect) {.+..  
11c0: 20 20 6c 6f 77 65 72 20 3d 20 69 3b 0a 2b 09 09    lower = i;.+..
11d0: 7d 20 65 6c 73 65 20 7b 0a 2b 09 09 20 20 20 20  } else {.+..    
11e0: 75 70 70 65 72 20 3d 20 69 3b 0a 2b 09 09 7d 0a  upper = i;.+..}.
11f0: 20 09 20 20 20 20 7d 20 65 6c 73 65 20 69 66 20   .    } else if 
1200: 28 6d 61 74 63 68 20 3e 20 30 29 20 7b 0a 20 09  (match > 0) {. .
1210: 09 69 66 20 28 69 73 49 6e 63 72 65 61 73 69 6e  .if (isIncreasin
1220: 67 29 20 7b 0a 20 09 09 20 20 20 20 6c 6f 77 65  g) {. ..    lowe
1230: 72 20 3d 20 69 3b 0a 40 40 20 2d 33 31 38 37 2c  r = i;.@@ -3187,
1240: 37 20 2b 33 32 30 35 2c 39 20 40 40 0a 20 09 09  7 +3205,9 @@. ..
1250: 7d 0a 20 09 20 20 20 20 7d 0a 20 09 7d 0a 2d 0a  }. .    }. .}.-.
1260: 2b 09 69 66 20 28 62 69 73 65 63 74 20 26 26 20  +.if (bisect && 
1270: 69 6e 64 65 78 20 3c 20 30 29 20 7b 0a 2b 09 20  index < 0) {.+. 
1280: 20 20 20 69 6e 64 65 78 20 3d 20 6c 6f 77 65 72     index = lower
1290: 3b 0a 2b 09 7d 0a 20 20 20 20 20 7d 20 65 6c 73  ;.+.}.     } els
12a0: 65 20 7b 0a 20 09 2f 2a 0a 20 09 20 2a 20 57 65  e {. ./*. . * We
12b0: 20 6e 65 65 64 20 74 6f 20 64 6f 20 61 20 6c 69   need to do a li
12c0: 6e 65 61 72 20 73 65 61 72 63 68 2c 20 62 65 63  near search, bec
12d0: 61 75 73 65 20 28 61 74 20 6c 65 61 73 74 20 6f  ause (at least o
12e0: 6e 65 29 20 6f 66 3a 0a 40 40 20 2d 33 32 31 35  ne) of:.@@ -3215
12f0: 2c 38 20 2b 33 32 33 35 2c 38 20 40 40 0a 20 09  ,8 +3235,8 @@. .
1300: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 09 09      } else {. ..
1310: 69 74 65 6d 50 74 72 20 3d 20 6c 69 73 74 76 5b  itemPtr = listv[
1320: 69 5d 3b 0a 20 09 20 20 20 20 7d 0a 2d 0a 2d 09  i];. .    }.-.-.
1330: 20 20 20 20 73 77 69 74 63 68 20 28 28 65 6e 75      switch ((enu
1340: 6d 20 6d 6f 64 65 73 29 20 6d 6f 64 65 29 20 7b  m modes) mode) {
1350: 0a 2b 09 09 0a 2b 09 20 20 20 20 73 77 69 74 63  .+...+.    switc
1360: 68 20 28 6d 6f 64 65 29 20 7b 0a 20 09 20 20 20  h (mode) {. .   
1370: 20 63 61 73 65 20 53 4f 52 54 45 44 3a 0a 20 09   case SORTED:. .
1380: 20 20 20 20 63 61 73 65 20 45 58 41 43 54 3a 0a      case EXACT:.
1390: 20 09 09 73 77 69 74 63 68 20 28 28 65 6e 75 6d   ..switch ((enum
13a0: 20 64 61 74 61 74 79 70 65 73 29 20 64 61 74 61   datatypes) data
13b0: 54 79 70 65 29 20 7b 0a 64 69 66 66 20 2d 4e 75  Type) {.diff -Nu
13c0: 72 20 2d 78 20 2e 67 69 74 20 74 63 6c 6d 61 73  r -x .git tclmas
13d0: 74 65 72 2f 74 65 73 74 73 2f 6c 73 65 61 72 63  ter/tests/lsearc
13e0: 68 2e 74 65 73 74 20 74 63 6c 2f 74 65 73 74 73  h.test tcl/tests
13f0: 2f 6c 73 65 61 72 63 68 2e 74 65 73 74 0a 2d 2d  /lsearch.test.--
1400: 2d 20 74 63 6c 6d 61 73 74 65 72 2f 74 65 73 74  - tclmaster/test
1410: 73 2f 6c 73 65 61 72 63 68 2e 74 65 73 74 09 32  s/lsearch.test.2
1420: 30 30 38 2d 30 38 2d 30 36 20 32 30 3a 34 30 3a  008-08-06 20:40:
1430: 34 36 2e 30 30 30 30 30 30 30 30 30 20 2b 30 32  46.000000000 +02
1440: 30 30 0a 2b 2b 2b 20 74 63 6c 2f 74 65 73 74 73  00.+++ tcl/tests
1450: 2f 6c 73 65 61 72 63 68 2e 74 65 73 74 09 32 30  /lsearch.test.20
1460: 30 38 2d 30 39 2d 32 30 20 30 30 3a 35 35 3a 34  08-09-20 00:55:4
1470: 30 2e 30 30 30 30 30 30 30 30 30 20 2b 30 32 30  0.000000000 +020
1480: 30 0a 40 40 20 2d 36 31 2c 37 20 2b 36 31 2c 37  0.@@ -61,7 +61,7
1490: 20 40 40 0a 20 7d 20 31 0a 20 74 65 73 74 20 6c   @@. } 1. test l
14a0: 73 65 61 72 63 68 2d 32 2e 31 30 20 7b 73 65 61  search-2.10 {sea
14b0: 72 63 68 20 6d 6f 64 65 73 7d 20 7b 0a 20 20 20  rch modes} {.   
14c0: 20 20 6c 69 73 74 20 5b 63 61 74 63 68 20 7b 6c    list [catch {l
14d0: 73 65 61 72 63 68 20 2d 67 6c 69 62 20 7b 62 2e  search -glib {b.
14e0: 78 20 62 78 20 78 79 20 62 63 78 7d 20 62 2e 78  x bx xy bcx} b.x
14f0: 7d 20 6d 73 67 5d 20 24 6d 73 67 0a 2d 7d 20 7b  } msg] $msg.-} {
1500: 31 20 7b 62 61 64 20 6f 70 74 69 6f 6e 20 22 2d  1 {bad option "-
1510: 67 6c 69 62 22 3a 20 6d 75 73 74 20 62 65 20 2d  glib": must be -
1520: 61 6c 6c 2c 20 2d 61 73 63 69 69 2c 20 2d 64 65  all, -ascii, -de
1530: 63 72 65 61 73 69 6e 67 2c 20 2d 64 69 63 74 69  creasing, -dicti
1540: 6f 6e 61 72 79 2c 20 2d 65 78 61 63 74 2c 20 2d  onary, -exact, -
1550: 67 6c 6f 62 2c 20 2d 69 6e 63 72 65 61 73 69 6e  glob, -increasin
1560: 67 2c 20 2d 69 6e 64 65 78 2c 20 2d 69 6e 6c 69  g, -index, -inli
1570: 6e 65 2c 20 2d 69 6e 74 65 67 65 72 2c 20 2d 6e  ne, -integer, -n
1580: 6f 63 61 73 65 2c 20 2d 6e 6f 74 2c 20 2d 72 65  ocase, -not, -re
1590: 61 6c 2c 20 2d 72 65 67 65 78 70 2c 20 2d 73 6f  al, -regexp, -so
15a0: 72 74 65 64 2c 20 2d 73 74 61 72 74 2c 20 6f 72  rted, -start, or
15b0: 20 2d 73 75 62 69 6e 64 69 63 65 73 7d 7d 0a 2b   -subindices}}.+
15c0: 7d 20 7b 31 20 7b 62 61 64 20 6f 70 74 69 6f 6e  } {1 {bad option
15d0: 20 22 2d 67 6c 69 62 22 3a 20 6d 75 73 74 20 62   "-glib": must b
15e0: 65 20 2d 61 6c 6c 2c 20 2d 61 73 63 69 69 2c 20  e -all, -ascii, 
15f0: 2d 62 69 73 65 63 74 2c 20 2d 64 65 63 72 65 61  -bisect, -decrea
1600: 73 69 6e 67 2c 20 2d 64 69 63 74 69 6f 6e 61 72  sing, -dictionar
1610: 79 2c 20 2d 65 78 61 63 74 2c 20 2d 67 6c 6f 62  y, -exact, -glob
1620: 2c 20 2d 69 6e 63 72 65 61 73 69 6e 67 2c 20 2d  , -increasing, -
1630: 69 6e 64 65 78 2c 20 2d 69 6e 6c 69 6e 65 2c 20  index, -inline, 
1640: 2d 69 6e 74 65 67 65 72 2c 20 2d 6e 6f 63 61 73  -integer, -nocas
1650: 65 2c 20 2d 6e 6f 74 2c 20 2d 72 65 61 6c 2c 20  e, -not, -real, 
1660: 2d 72 65 67 65 78 70 2c 20 2d 73 6f 72 74 65 64  -regexp, -sorted
1670: 2c 20 2d 73 74 61 72 74 2c 20 6f 72 20 2d 73 75  , -start, or -su
1680: 62 69 6e 64 69 63 65 73 7d 7d 0a 20 74 65 73 74  bindices}}. test
1690: 20 6c 73 65 61 72 63 68 2d 32 2e 31 31 20 7b 73   lsearch-2.11 {s
16a0: 65 61 72 63 68 20 6d 6f 64 65 73 20 77 69 74 68  earch modes with
16b0: 20 2d 6e 6f 63 61 73 65 7d 20 7b 0a 20 20 20 20   -nocase} {.    
16c0: 20 6c 73 65 61 72 63 68 20 2d 65 78 61 63 74 20   lsearch -exact 
16d0: 2d 6e 6f 63 61 73 65 20 7b 61 20 62 20 63 20 41  -nocase {a b c A
16e0: 20 42 20 43 7d 20 41 0a 20 7d 20 30 0a 40 40 20   B C} A. } 0.@@ 
16f0: 2d 38 39 2c 31 30 20 2b 38 39 2c 31 30 20 40 40  -89,10 +89,10 @@
1700: 0a 20 7d 20 7b 31 20 7b 77 72 6f 6e 67 20 23 20  . } {1 {wrong # 
1710: 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
1720: 22 6c 73 65 61 72 63 68 20 3f 2d 6f 70 74 69 6f  "lsearch ?-optio
1730: 6e 20 76 61 6c 75 65 20 2e 2e 2e 3f 20 6c 69 73  n value ...? lis
1740: 74 20 70 61 74 74 65 72 6e 22 7d 7d 0a 20 74 65  t pattern"}}. te
1750: 73 74 20 6c 73 65 61 72 63 68 2d 33 2e 33 20 7b  st lsearch-3.3 {
1760: 6c 73 65 61 72 63 68 20 65 72 72 6f 72 73 7d 20  lsearch errors} 
1770: 7b 0a 20 20 20 20 20 6c 69 73 74 20 5b 63 61 74  {.     list [cat
1780: 63 68 20 7b 6c 73 65 61 72 63 68 20 61 20 62 20  ch {lsearch a b 
1790: 63 7d 20 6d 73 67 5d 20 24 6d 73 67 0a 2d 7d 20  c} msg] $msg.-} 
17a0: 7b 31 20 7b 62 61 64 20 6f 70 74 69 6f 6e 20 22  {1 {bad option "
17b0: 61 22 3a 20 6d 75 73 74 20 62 65 20 2d 61 6c 6c  a": must be -all
17c0: 2c 20 2d 61 73 63 69 69 2c 20 2d 64 65 63 72 65  , -ascii, -decre
17d0: 61 73 69 6e 67 2c 20 2d 64 69 63 74 69 6f 6e 61  asing, -dictiona
17e0: 72 79 2c 20 2d 65 78 61 63 74 2c 20 2d 67 6c 6f  ry, -exact, -glo
17f0: 62 2c 20 2d 69 6e 63 72 65 61 73 69 6e 67 2c 20  b, -increasing, 
1800: 2d 69 6e 64 65 78 2c 20 2d 69 6e 6c 69 6e 65 2c  -index, -inline,
1810: 20 2d 69 6e 74 65 67 65 72 2c 20 2d 6e 6f 63 61   -integer, -noca
1820: 73 65 2c 20 2d 6e 6f 74 2c 20 2d 72 65 61 6c 2c  se, -not, -real,
1830: 20 2d 72 65 67 65 78 70 2c 20 2d 73 6f 72 74 65   -regexp, -sorte
1840: 64 2c 20 2d 73 74 61 72 74 2c 20 6f 72 20 2d 73  d, -start, or -s
1850: 75 62 69 6e 64 69 63 65 73 7d 7d 0a 2b 7d 20 7b  ubindices}}.+} {
1860: 31 20 7b 62 61 64 20 6f 70 74 69 6f 6e 20 22 61  1 {bad option "a
1870: 22 3a 20 6d 75 73 74 20 62 65 20 2d 61 6c 6c 2c  ": must be -all,
1880: 20 2d 61 73 63 69 69 2c 20 2d 62 69 73 65 63 74   -ascii, -bisect
1890: 2c 20 2d 64 65 63 72 65 61 73 69 6e 67 2c 20 2d  , -decreasing, -
18a0: 64 69 63 74 69 6f 6e 61 72 79 2c 20 2d 65 78 61  dictionary, -exa
18b0: 63 74 2c 20 2d 67 6c 6f 62 2c 20 2d 69 6e 63 72  ct, -glob, -incr
18c0: 65 61 73 69 6e 67 2c 20 2d 69 6e 64 65 78 2c 20  easing, -index, 
18d0: 2d 69 6e 6c 69 6e 65 2c 20 2d 69 6e 74 65 67 65  -inline, -intege
18e0: 72 2c 20 2d 6e 6f 63 61 73 65 2c 20 2d 6e 6f 74  r, -nocase, -not
18f0: 2c 20 2d 72 65 61 6c 2c 20 2d 72 65 67 65 78 70  , -real, -regexp
1900: 2c 20 2d 73 6f 72 74 65 64 2c 20 2d 73 74 61 72  , -sorted, -star
1910: 74 2c 20 6f 72 20 2d 73 75 62 69 6e 64 69 63 65  t, or -subindice
1920: 73 7d 7d 0a 20 74 65 73 74 20 6c 73 65 61 72 63  s}}. test lsearc
1930: 68 2d 33 2e 34 20 7b 6c 73 65 61 72 63 68 20 65  h-3.4 {lsearch e
1940: 72 72 6f 72 73 7d 20 7b 0a 20 20 20 20 20 6c 69  rrors} {.     li
1950: 73 74 20 5b 63 61 74 63 68 20 7b 6c 73 65 61 72  st [catch {lsear
1960: 63 68 20 61 20 62 20 63 20 64 7d 20 6d 73 67 5d  ch a b c d} msg]
1970: 20 24 6d 73 67 0a 2d 7d 20 7b 31 20 7b 62 61 64   $msg.-} {1 {bad
1980: 20 6f 70 74 69 6f 6e 20 22 61 22 3a 20 6d 75 73   option "a": mus
1990: 74 20 62 65 20 2d 61 6c 6c 2c 20 2d 61 73 63 69  t be -all, -asci
19a0: 69 2c 20 2d 64 65 63 72 65 61 73 69 6e 67 2c 20  i, -decreasing, 
19b0: 2d 64 69 63 74 69 6f 6e 61 72 79 2c 20 2d 65 78  -dictionary, -ex
19c0: 61 63 74 2c 20 2d 67 6c 6f 62 2c 20 2d 69 6e 63  act, -glob, -inc
19d0: 72 65 61 73 69 6e 67 2c 20 2d 69 6e 64 65 78 2c  reasing, -index,
19e0: 20 2d 69 6e 6c 69 6e 65 2c 20 2d 69 6e 74 65 67   -inline, -integ
19f0: 65 72 2c 20 2d 6e 6f 63 61 73 65 2c 20 2d 6e 6f  er, -nocase, -no
1a00: 74 2c 20 2d 72 65 61 6c 2c 20 2d 72 65 67 65 78  t, -real, -regex
1a10: 70 2c 20 2d 73 6f 72 74 65 64 2c 20 2d 73 74 61  p, -sorted, -sta
1a20: 72 74 2c 20 6f 72 20 2d 73 75 62 69 6e 64 69 63  rt, or -subindic
1a30: 65 73 7d 7d 0a 2b 7d 20 7b 31 20 7b 62 61 64 20  es}}.+} {1 {bad 
1a40: 6f 70 74 69 6f 6e 20 22 61 22 3a 20 6d 75 73 74  option "a": must
1a50: 20 62 65 20 2d 61 6c 6c 2c 20 2d 61 73 63 69 69   be -all, -ascii
1a60: 2c 20 2d 62 69 73 65 63 74 2c 20 2d 64 65 63 72  , -bisect, -decr
1a70: 65 61 73 69 6e 67 2c 20 2d 64 69 63 74 69 6f 6e  easing, -diction
1a80: 61 72 79 2c 20 2d 65 78 61 63 74 2c 20 2d 67 6c  ary, -exact, -gl
1a90: 6f 62 2c 20 2d 69 6e 63 72 65 61 73 69 6e 67 2c  ob, -increasing,
1aa0: 20 2d 69 6e 64 65 78 2c 20 2d 69 6e 6c 69 6e 65   -index, -inline
1ab0: 2c 20 2d 69 6e 74 65 67 65 72 2c 20 2d 6e 6f 63  , -integer, -noc
1ac0: 61 73 65 2c 20 2d 6e 6f 74 2c 20 2d 72 65 61 6c  ase, -not, -real
1ad0: 2c 20 2d 72 65 67 65 78 70 2c 20 2d 73 6f 72 74  , -regexp, -sort
1ae0: 65 64 2c 20 2d 73 74 61 72 74 2c 20 6f 72 20 2d  ed, -start, or -
1af0: 73 75 62 69 6e 64 69 63 65 73 7d 7d 0a 20 74 65  subindices}}. te
1b00: 73 74 20 6c 73 65 61 72 63 68 2d 33 2e 35 20 7b  st lsearch-3.5 {
1b10: 6c 73 65 61 72 63 68 20 65 72 72 6f 72 73 7d 20  lsearch errors} 
1b20: 7b 0a 20 20 20 20 20 6c 69 73 74 20 5b 63 61 74  {.     list [cat
1b30: 63 68 20 7b 6c 73 65 61 72 63 68 20 22 5c 7b 22  ch {lsearch "\{"
1b40: 20 62 7d 20 6d 73 67 5d 20 24 6d 73 67 0a 20 7d   b} msg] $msg. }
1b50: 20 7b 31 20 7b 75 6e 6d 61 74 63 68 65 64 20 6f   {1 {unmatched o
1b60: 70 65 6e 20 62 72 61 63 65 20 69 6e 20 6c 69 73  pen brace in lis
1b70: 74 7d 7d 0a 40 40 20 2d 34 37 32 2c 36 20 2b 34  t}}.@@ -472,6 +4
1b80: 37 32 2c 34 37 20 40 40 0a 20 20 20 20 20 6c 73  72,47 @@.     ls
1b90: 65 61 72 63 68 20 2d 65 78 61 63 74 20 2d 72 65  earch -exact -re
1ba0: 61 6c 20 24 78 20 24 78 0a 20 7d 20 30 0a 20 0a  al $x $x. } 0. .
1bb0: 2b 74 65 73 74 20 6c 73 65 61 72 63 68 2d 32 32  +test lsearch-22
1bc0: 2e 31 20 7b 6c 73 65 61 72 63 68 20 2d 62 69 73  .1 {lsearch -bis
1bd0: 65 63 74 7d 20 2d 62 6f 64 79 20 7b 0a 2b 20 20  ect} -body {.+  
1be0: 20 20 73 65 74 20 72 65 73 20 7b 7d 0a 2b 20 20    set res {}.+  
1bf0: 20 20 66 6f 72 65 61 63 68 20 69 20 7b 30 20 31    foreach i {0 1
1c00: 20 35 20 36 20 37 20 38 20 31 35 20 31 36 7d 20   5 6 7 8 15 16} 
1c10: 7b 20 20 20 0a 2b 20 20 20 20 20 20 20 20 6c 61  {   .+        la
1c20: 70 70 65 6e 64 20 72 65 73 20 5b 6c 73 65 61 72  ppend res [lsear
1c30: 63 68 20 2d 62 69 73 65 63 74 20 2d 69 6e 74 65  ch -bisect -inte
1c40: 67 65 72 20 7b 31 20 34 20 35 20 37 20 39 20 31  ger {1 4 5 7 9 1
1c50: 35 7d 20 24 69 5d 0a 2b 20 20 20 20 7d 0a 2b 20  5} $i].+    }.+ 
1c60: 20 20 20 73 65 74 20 72 65 73 0a 2b 7d 20 2d 72     set res.+} -r
1c70: 65 73 75 6c 74 20 7b 2d 31 20 30 20 32 20 32 20  esult {-1 0 2 2 
1c80: 33 20 33 20 35 20 35 7d 0a 2b 0a 2b 74 65 73 74  3 3 5 5}.+.+test
1c90: 20 6c 73 65 61 72 63 68 2d 32 32 2e 32 20 7b 6c   lsearch-22.2 {l
1ca0: 73 65 61 72 63 68 20 2d 62 69 73 65 63 74 2c 20  search -bisect, 
1cb0: 6c 61 73 74 20 6f 66 20 65 71 75 61 6c 73 7d 20  last of equals} 
1cc0: 2d 62 6f 64 79 20 7b 0a 2b 20 20 20 20 73 65 74  -body {.+    set
1cd0: 20 72 65 73 20 7b 7d 0a 2b 20 20 20 20 66 6f 72   res {}.+    for
1ce0: 65 61 63 68 20 69 20 7b 30 20 31 20 32 20 33 7d  each i {0 1 2 3}
1cf0: 20 7b 20 20 20 0a 2b 20 20 20 20 20 20 20 20 6c   {   .+        l
1d00: 61 70 70 65 6e 64 20 72 65 73 20 5b 6c 73 65 61  append res [lsea
1d10: 72 63 68 20 2d 62 69 73 65 63 74 20 2d 69 6e 74  rch -bisect -int
1d20: 65 67 65 72 20 7b 30 20 30 20 31 20 31 20 31 20  eger {0 0 1 1 1 
1d30: 32 20 32 20 32 20 33 20 33 20 33 7d 20 24 69 5d  2 2 2 3 3 3} $i]
1d40: 0a 2b 20 20 20 20 7d 0a 2b 20 20 20 20 73 65 74  .+    }.+    set
1d50: 20 72 65 73 0a 2b 7d 20 2d 72 65 73 75 6c 74 20   res.+} -result 
1d60: 7b 31 20 34 20 37 20 31 30 7d 0a 2b 74 65 73 74  {1 4 7 10}.+test
1d70: 20 6c 73 65 61 72 63 68 2d 32 32 2e 33 20 7b 6c   lsearch-22.3 {l
1d80: 73 65 61 72 63 68 20 2d 62 69 73 65 63 74 20 64  search -bisect d
1d90: 65 63 72 65 61 73 69 6e 67 20 6f 72 64 65 72 7d  ecreasing order}
1da0: 20 2d 62 6f 64 79 20 7b 0a 2b 20 20 20 20 73 65   -body {.+    se
1db0: 74 20 72 65 73 20 7b 7d 0a 2b 20 20 20 20 66 6f  t res {}.+    fo
1dc0: 72 65 61 63 68 20 69 20 7b 30 20 31 20 35 20 36  reach i {0 1 5 6
1dd0: 20 37 20 38 20 31 35 20 31 36 7d 20 7b 20 20 20   7 8 15 16} {   
1de0: 0a 2b 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e  .+        lappen
1df0: 64 20 72 65 73 20 5b 6c 73 65 61 72 63 68 20 2d  d res [lsearch -
1e00: 62 69 73 65 63 74 20 2d 69 6e 74 65 67 65 72 20  bisect -integer 
1e10: 2d 64 65 63 72 65 61 73 69 6e 67 20 7b 31 35 20  -decreasing {15 
1e20: 39 20 37 20 35 20 34 20 31 7d 20 24 69 5d 0a 2b  9 7 5 4 1} $i].+
1e30: 20 20 20 20 7d 0a 2b 20 20 20 20 73 65 74 20 72      }.+    set r
1e40: 65 73 0a 2b 7d 20 2d 72 65 73 75 6c 74 20 7b 35  es.+} -result {5
1e50: 20 35 20 33 20 32 20 32 20 31 20 30 20 2d 31 7d   5 3 2 2 1 0 -1}
1e60: 0a 2b 0a 2b 74 65 73 74 20 6c 73 65 61 72 63 68  .+.+test lsearch
1e70: 2d 32 32 2e 34 20 7b 6c 73 65 61 72 63 68 20 2d  -22.4 {lsearch -
1e80: 62 69 73 65 63 74 2c 20 6c 61 73 74 20 6f 66 20  bisect, last of 
1e90: 65 71 75 61 6c 73 2c 20 64 65 63 72 65 61 73 69  equals, decreasi
1ea0: 6e 67 7d 20 2d 62 6f 64 79 20 7b 0a 2b 20 20 20  ng} -body {.+   
1eb0: 20 73 65 74 20 72 65 73 20 7b 7d 0a 2b 20 20 20   set res {}.+   
1ec0: 20 66 6f 72 65 61 63 68 20 69 20 7b 30 20 31 20   foreach i {0 1 
1ed0: 32 20 33 7d 20 7b 20 20 20 0a 2b 20 20 20 20 20  2 3} {   .+     
1ee0: 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 20 5b     lappend res [
1ef0: 6c 73 65 61 72 63 68 20 2d 62 69 73 65 63 74 20  lsearch -bisect 
1f00: 2d 69 6e 74 65 67 65 72 20 20 2d 64 65 63 72 65  -integer  -decre
1f10: 61 73 69 6e 67 20 5c 0a 2b 20 20 20 20 20 20 20  asing \.+       
1f20: 20 20 20 20 20 20 20 20 20 7b 33 20 33 20 33 20           {3 3 3 
1f30: 32 20 32 20 32 20 31 20 31 20 31 20 30 20 30 7d  2 2 2 1 1 1 0 0}
1f40: 20 24 69 5d 0a 2b 20 20 20 20 7d 0a 2b 20 20 20   $i].+    }.+   
1f50: 20 73 65 74 20 72 65 73 0a 2b 7d 20 2d 72 65 73   set res.+} -res
1f60: 75 6c 74 20 7b 31 30 20 38 20 35 20 32 7d 0a 2b  ult {10 8 5 2}.+
1f70: 0a 2b 74 65 73 74 20 6c 73 65 61 72 63 68 2d 32  .+test lsearch-2
1f80: 32 2e 35 20 7b 6c 73 65 61 72 63 68 20 2d 62 69  2.5 {lsearch -bi
1f90: 73 65 63 74 2c 20 61 6c 6c 20 65 71 75 61 6c 7d  sect, all equal}
1fa0: 20 2d 62 6f 64 79 20 7b 0a 2b 20 20 20 20 6c 73   -body {.+    ls
1fb0: 65 61 72 63 68 20 2d 62 69 73 65 63 74 20 2d 69  earch -bisect -i
1fc0: 6e 74 65 67 65 72 20 7b 35 20 35 20 35 20 35 7d  nteger {5 5 5 5}
1fd0: 20 35 0a 2b 7d 20 2d 72 65 73 75 6c 74 20 7b 33   5.+} -result {3
1fe0: 7d 0a 2b 0a 2b 74 65 73 74 20 6c 73 65 61 72 63  }.+.+test lsearc
1ff0: 68 2d 32 32 2e 36 20 7b 6c 73 65 61 72 63 68 20  h-22.6 {lsearch 
2000: 2d 73 6f 72 74 65 64 2c 20 61 6c 6c 20 65 71 75  -sorted, all equ
2010: 61 6c 7d 20 2d 62 6f 64 79 20 7b 0a 2b 20 20 20  al} -body {.+   
2020: 20 6c 73 65 61 72 63 68 20 2d 73 6f 72 74 65 64   lsearch -sorted
2030: 20 2d 69 6e 74 65 67 65 72 20 7b 35 20 35 20 35   -integer {5 5 5
2040: 20 35 7d 20 35 0a 2b 7d 20 2d 72 65 73 75 6c 74   5} 5.+} -result
2050: 20 7b 30 7d 0a 2b 0a 2b 0a 20 23 20 63 6c 65 61   {0}.+.+. # clea
2060: 6e 75 70 0a 20 63 61 74 63 68 20 7b 75 6e 73 65  nup. catch {unse
2070: 74 20 72 65 73 7d 0a 20 63 61 74 63 68 20 7b 75  t res}. catch {u
2080: 6e 73 65 74 20 69 6e 63 72 65 61 73 69 6e 67 49  nset increasingI
2090: 6e 74 65 67 65 72 73 7d 0a                       ntegers}.