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}.