Artifact
ec0bff9a545e53b0492450a5c21cffafae2c3a9d:
Attachment "winsearch.patch" to
ticket [1c6f6503d4]
added by
danckaert
2017-05-24 07:34:33.
(unpublished)
0000: 64 69 66 66 20 2d 2d 67 69 74 20 61 2f 6c 69 62 diff --git a/lib
0010: 72 61 72 79 2f 69 6e 69 74 2e 74 63 6c 20 62 2f rary/init.tcl b/
0020: 6c 69 62 72 61 72 79 2f 69 6e 69 74 2e 74 63 6c library/init.tcl
0030: 0a 69 6e 64 65 78 20 61 32 30 32 30 35 34 2e 2e .index a202054..
0040: 39 36 33 30 63 62 30 20 31 30 30 36 34 34 0a 2d 9630cb0 100644.-
0050: 2d 2d 20 61 2f 6c 69 62 72 61 72 79 2f 69 6e 69 -- a/library/ini
0060: 74 2e 74 63 6c 0a 2b 2b 2b 20 62 2f 6c 69 62 72 t.tcl.+++ b/libr
0070: 61 72 79 2f 69 6e 69 74 2e 74 63 6c 0a 40 40 20 ary/init.tcl.@@
0080: 2d 36 33 33 2c 31 33 20 2b 36 33 33 2c 36 20 40 -633,13 +633,6 @
0090: 40 20 70 72 6f 63 20 61 75 74 6f 5f 65 78 65 63 @ proc auto_exec
00a0: 6f 6b 20 6e 61 6d 65 20 7b 0a 20 0a 20 20 20 20 ok name {. .
00b0: 20 73 65 74 20 73 68 65 6c 6c 42 75 69 6c 74 69 set shellBuilti
00c0: 6e 73 20 5b 6c 69 73 74 20 63 6c 73 20 63 6f 70 ns [list cls cop
00d0: 79 20 64 61 74 65 20 64 65 6c 20 64 69 72 20 65 y date del dir e
00e0: 63 68 6f 20 65 72 61 73 65 20 6d 64 20 6d 6b 64 cho erase md mkd
00f0: 69 72 20 5c 0a 20 09 20 20 20 20 6d 6b 6c 69 6e ir \. . mklin
0100: 6b 20 72 64 20 72 65 6e 20 72 65 6e 61 6d 65 20 k rd ren rename
0110: 72 6d 64 69 72 20 73 74 61 72 74 20 74 69 6d 65 rmdir start time
0120: 20 74 79 70 65 20 76 65 72 20 76 6f 6c 5d 0a 2d type ver vol].-
0130: 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 if {[info ex
0140: 69 73 74 73 20 65 6e 76 28 50 41 54 48 45 58 54 ists env(PATHEXT
0150: 29 5d 7d 20 7b 0a 2d 09 23 20 41 64 64 20 61 6e )]} {.-.# Add an
0160: 20 69 6e 69 74 69 61 6c 20 3b 20 74 6f 20 68 61 initial ; to ha
0170: 76 65 20 74 68 65 20 7b 7d 20 65 78 74 65 6e 73 ve the {} extens
0180: 69 6f 6e 20 63 68 65 63 6b 20 66 69 72 73 74 2e ion check first.
0190: 0a 2d 09 73 65 74 20 65 78 65 63 45 78 74 65 6e .-.set execExten
01a0: 73 69 6f 6e 73 20 5b 73 70 6c 69 74 20 22 3b 24 sions [split ";$
01b0: 65 6e 76 28 50 41 54 48 45 58 54 29 22 20 22 3b env(PATHEXT)" ";
01c0: 22 5d 0a 2d 20 20 20 20 7d 20 65 6c 73 65 20 7b "].- } else {
01d0: 0a 2d 09 73 65 74 20 65 78 65 63 45 78 74 65 6e .-.set execExten
01e0: 73 69 6f 6e 73 20 5b 6c 69 73 74 20 7b 7d 20 2e sions [list {} .
01f0: 63 6f 6d 20 2e 65 78 65 20 2e 62 61 74 20 2e 63 com .exe .bat .c
0200: 6d 64 5d 0a 2d 20 20 20 20 7d 0a 2d 0a 20 20 20 md].- }.-.
0210: 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 74 6f if {[string to
0220: 6c 6f 77 65 72 20 24 6e 61 6d 65 5d 20 69 6e 20 lower $name] in
0230: 24 73 68 65 6c 6c 42 75 69 6c 74 69 6e 73 7d 20 $shellBuiltins}
0240: 7b 0a 20 09 23 20 57 68 65 6e 20 74 68 69 73 20 {. .# When this
0250: 69 73 20 63 6f 6d 6d 61 6e 64 2e 63 6f 6d 20 66 is command.com f
0260: 6f 72 20 73 6f 6d 65 20 72 65 61 73 6f 6e 20 6f or some reason o
0270: 6e 20 57 69 6e 32 4b 2c 20 54 63 6c 20 77 6f 6e n Win2K, Tcl won
0280: 27 74 0a 20 09 23 20 65 78 65 63 20 69 74 20 75 't. .# exec it u
0290: 6e 6c 65 73 73 20 74 68 65 20 63 61 73 65 20 69 nless the case i
02a0: 73 20 72 69 67 68 74 2c 20 77 68 69 63 68 20 74 s right, which t
02b0: 68 69 73 20 63 6f 72 72 65 63 74 73 2e 20 20 43 his corrects. C
02c0: 4f 4d 53 50 45 43 0a 40 40 20 2d 36 35 31 2c 34 OMSPEC.@@ -651,4
02d0: 38 20 2b 36 34 34 2c 31 33 20 40 40 20 70 72 6f 8 +644,13 @@ pro
02e0: 63 20 61 75 74 6f 5f 65 78 65 63 6f 6b 20 6e 61 c auto_execok na
02f0: 6d 65 20 7b 0a 20 09 72 65 74 75 72 6e 20 5b 73 me {. .return [s
0300: 65 74 20 61 75 74 6f 5f 65 78 65 63 73 28 24 6e et auto_execs($n
0310: 61 6d 65 29 20 5b 6c 69 73 74 20 24 63 6d 64 20 ame) [list $cmd
0320: 2f 63 20 24 6e 61 6d 65 5d 5d 0a 20 20 20 20 20 /c $name]].
0330: 7d 0a 20 0a 2d 20 20 20 20 69 66 20 7b 5b 6c 6c }. .- if {[ll
0340: 65 6e 67 74 68 20 5b 66 69 6c 65 20 73 70 6c 69 ength [file spli
0350: 74 20 24 6e 61 6d 65 5d 5d 20 21 3d 20 31 7d 20 t $name]] != 1}
0360: 7b 0a 2d 09 66 6f 72 65 61 63 68 20 65 78 74 20 {.-.foreach ext
0370: 24 65 78 65 63 45 78 74 65 6e 73 69 6f 6e 73 20 $execExtensions
0380: 7b 0a 2d 09 20 20 20 20 73 65 74 20 66 69 6c 65 {.-. set file
0390: 20 24 7b 6e 61 6d 65 7d 24 7b 65 78 74 7d 0a 2d ${name}${ext}.-
03a0: 09 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 . if {[file e
03b0: 78 69 73 74 73 20 24 66 69 6c 65 5d 20 26 26 20 xists $file] &&
03c0: 21 5b 66 69 6c 65 20 69 73 64 69 72 65 63 74 6f ![file isdirecto
03d0: 72 79 20 24 66 69 6c 65 5d 7d 20 7b 0a 2d 09 09 ry $file]} {.-..
03e0: 72 65 74 75 72 6e 20 5b 73 65 74 20 61 75 74 6f return [set auto
03f0: 5f 65 78 65 63 73 28 24 6e 61 6d 65 29 20 5b 6c _execs($name) [l
0400: 69 73 74 20 24 66 69 6c 65 5d 5d 0a 2d 09 20 20 ist $file]].-.
0410: 20 20 7d 0a 2d 09 7d 0a 2d 09 72 65 74 75 72 6e }.-.}.-.return
0420: 20 22 22 0a 2d 20 20 20 20 7d 0a 2d 0a 2d 20 20 "".- }.-.-
0430: 20 20 73 65 74 20 70 61 74 68 20 22 5b 66 69 6c set path "[fil
0440: 65 20 64 69 72 6e 61 6d 65 20 5b 69 6e 66 6f 20 e dirname [info
0450: 6e 61 6d 65 6f 66 5d 5d 3b 2e 3b 22 0a 2d 20 20 nameof]];.;".-
0460: 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 if {[info exis
0470: 74 73 20 65 6e 76 28 57 49 4e 44 49 52 29 5d 7d ts env(WINDIR)]}
0480: 20 7b 0a 2d 09 73 65 74 20 77 69 6e 64 69 72 20 {.-.set windir
0490: 24 65 6e 76 28 57 49 4e 44 49 52 29 0a 2d 20 20 $env(WINDIR).-
04a0: 20 20 7d 0a 2d 20 20 20 20 69 66 20 7b 5b 69 6e }.- if {[in
04b0: 66 6f 20 65 78 69 73 74 73 20 77 69 6e 64 69 72 fo exists windir
04c0: 5d 7d 20 7b 0a 2d 09 69 66 20 7b 24 74 63 6c 5f ]} {.-.if {$tcl_
04d0: 70 6c 61 74 66 6f 72 6d 28 6f 73 29 20 65 71 20 platform(os) eq
04e0: 22 57 69 6e 64 6f 77 73 20 4e 54 22 7d 20 7b 0a "Windows NT"} {.
04f0: 2d 09 20 20 20 20 61 70 70 65 6e 64 20 70 61 74 -. append pat
0500: 68 20 22 24 77 69 6e 64 69 72 2f 73 79 73 74 65 h "$windir/syste
0510: 6d 33 32 3b 22 0a 2d 09 7d 0a 2d 09 61 70 70 65 m32;".-.}.-.appe
0520: 6e 64 20 70 61 74 68 20 22 24 77 69 6e 64 69 72 nd path "$windir
0530: 2f 73 79 73 74 65 6d 3b 24 77 69 6e 64 69 72 3b /system;$windir;
0540: 22 0a 2b 20 20 20 20 74 72 79 20 7b 0a 2b 20 20 ".+ try {.+
0550: 20 20 20 20 20 20 74 63 6c 3a 3a 77 69 6e 73 65 tcl::winse
0560: 61 72 63 68 70 61 74 68 20 24 6e 61 6d 65 0a 2b archpath $name.+
0570: 20 20 20 20 7d 20 6f 6e 20 65 72 72 6f 72 20 7b } on error {
0580: 7d 20 7b 0a 2b 20 20 20 20 20 20 20 20 72 65 74 } {.+ ret
0590: 75 72 6e 20 22 22 0a 2b 20 20 20 20 7d 20 6f 6e urn "".+ } on
05a0: 20 6f 6b 20 7b 72 65 73 75 6c 74 7d 20 7b 0a 2b ok {result} {.+
05b0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b return [
05c0: 73 65 74 20 61 75 74 6f 5f 65 78 65 63 73 28 24 set auto_execs($
05d0: 6e 61 6d 65 29 20 5b 6c 69 73 74 20 5b 66 69 6c name) [list [fil
05e0: 65 20 6a 6f 69 6e 20 24 72 65 73 75 6c 74 5d 5d e join $result]]
05f0: 5d 0a 20 20 20 20 20 7d 0a 2d 0a 2d 20 20 20 20 ]. }.-.-
0600: 66 6f 72 65 61 63 68 20 76 61 72 20 7b 50 41 54 foreach var {PAT
0610: 48 20 50 61 74 68 20 70 61 74 68 7d 20 7b 0a 2d H Path path} {.-
0620: 09 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 .if {[info exist
0630: 73 20 65 6e 76 28 24 76 61 72 29 5d 7d 20 7b 0a s env($var)]} {.
0640: 2d 09 20 20 20 20 61 70 70 65 6e 64 20 70 61 74 -. append pat
0650: 68 20 22 3b 24 65 6e 76 28 24 76 61 72 29 22 0a h ";$env($var)".
0660: 2d 09 7d 0a 2d 20 20 20 20 7d 0a 2d 0a 2d 20 20 -.}.- }.-.-
0670: 20 20 66 6f 72 65 61 63 68 20 65 78 74 20 24 65 foreach ext $e
0680: 78 65 63 45 78 74 65 6e 73 69 6f 6e 73 20 7b 0a xecExtensions {.
0690: 2d 09 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c -.unset -nocompl
06a0: 61 69 6e 20 63 68 65 63 6b 65 64 0a 2d 09 66 6f ain checked.-.fo
06b0: 72 65 61 63 68 20 64 69 72 20 5b 73 70 6c 69 74 reach dir [split
06c0: 20 24 70 61 74 68 20 7b 3b 7d 5d 20 7b 0a 2d 09 $path {;}] {.-.
06d0: 20 20 20 20 23 20 53 6b 69 70 20 61 6c 72 65 61 # Skip alrea
06e0: 64 79 20 63 68 65 63 6b 65 64 20 64 69 72 65 63 dy checked direc
06f0: 74 6f 72 69 65 73 0a 2d 09 20 20 20 20 69 66 20 tories.-. if
0700: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 63 68 {[info exists ch
0710: 65 63 6b 65 64 28 24 64 69 72 29 5d 20 7c 7c 20 ecked($dir)] ||
0720: 28 24 64 69 72 20 65 71 20 22 22 29 7d 20 7b 0a ($dir eq "")} {.
0730: 2d 09 09 63 6f 6e 74 69 6e 75 65 0a 2d 09 20 20 -..continue.-.
0740: 20 20 7d 0a 2d 09 20 20 20 20 73 65 74 20 63 68 }.-. set ch
0750: 65 63 6b 65 64 28 24 64 69 72 29 20 7b 7d 0a 2d ecked($dir) {}.-
0760: 09 20 20 20 20 73 65 74 20 66 69 6c 65 20 5b 66 . set file [f
0770: 69 6c 65 20 6a 6f 69 6e 20 24 64 69 72 20 24 7b ile join $dir ${
0780: 6e 61 6d 65 7d 24 7b 65 78 74 7d 5d 0a 2d 09 20 name}${ext}].-.
0790: 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 if {[file exi
07a0: 73 74 73 20 24 66 69 6c 65 5d 20 26 26 20 21 5b sts $file] && ![
07b0: 66 69 6c 65 20 69 73 64 69 72 65 63 74 6f 72 79 file isdirectory
07c0: 20 24 66 69 6c 65 5d 7d 20 7b 0a 2d 09 09 72 65 $file]} {.-..re
07d0: 74 75 72 6e 20 5b 73 65 74 20 61 75 74 6f 5f 65 turn [set auto_e
07e0: 78 65 63 73 28 24 6e 61 6d 65 29 20 5b 6c 69 73 xecs($name) [lis
07f0: 74 20 24 66 69 6c 65 5d 5d 0a 2d 09 20 20 20 20 t $file]].-.
0800: 7d 0a 2d 09 7d 0a 2d 20 20 20 20 7d 0a 2d 20 20 }.-.}.- }.-
0810: 20 20 72 65 74 75 72 6e 20 22 22 0a 20 7d 0a 20 return "". }.
0820: 0a 20 7d 20 65 6c 73 65 20 7b 0a 64 69 66 66 20 . } else {.diff
0830: 2d 2d 67 69 74 20 61 2f 77 69 6e 2f 74 63 6c 57 --git a/win/tclW
0840: 69 6e 49 6e 69 74 2e 63 20 62 2f 77 69 6e 2f 74 inInit.c b/win/t
0850: 63 6c 57 69 6e 49 6e 69 74 2e 63 0a 69 6e 64 65 clWinInit.c.inde
0860: 78 20 39 38 63 37 65 64 35 2e 2e 62 34 36 31 62 x 98c7ed5..b461b
0870: 30 31 20 31 30 30 36 34 34 0a 2d 2d 2d 20 61 2f 01 100644.--- a/
0880: 77 69 6e 2f 74 63 6c 57 69 6e 49 6e 69 74 2e 63 win/tclWinInit.c
0890: 0a 2b 2b 2b 20 62 2f 77 69 6e 2f 74 63 6c 57 69 .+++ b/win/tclWi
08a0: 6e 49 6e 69 74 2e 63 0a 40 40 20 2d 36 34 30 2c nInit.c.@@ -640,
08b0: 36 20 2b 36 34 30 2c 31 32 20 40 40 20 54 63 6c 6 +640,12 @@ Tcl
08c0: 70 53 65 74 56 61 72 69 61 62 6c 65 73 28 0a 20 pSetVariables(.
08d0: 20 20 20 20 20 2a 2f 0a 20 0a 20 20 20 20 20 54 */. . T
08e0: 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 cl_SetVar2(inter
08f0: 70 2c 20 22 74 63 6c 5f 70 6c 61 74 66 6f 72 6d p, "tcl_platform
0900: 22 2c 22 70 61 74 68 53 65 70 61 72 61 74 6f 72 ","pathSeparator
0910: 22 2c 20 22 3b 22 2c 20 54 43 4c 5f 47 4c 4f 42 ", ";", TCL_GLOB
0920: 41 4c 5f 4f 4e 4c 59 29 3b 0a 2b 0a 2b 20 20 20 AL_ONLY);.+.+
0930: 20 2f 2a 0a 2b 20 20 20 20 20 2a 20 43 72 65 61 /*.+ * Crea
0940: 74 65 20 68 65 6c 70 65 72 20 66 75 6e 63 74 69 te helper functi
0950: 6f 6e 20 66 6f 72 20 5b 61 75 74 6f 5f 65 78 65 on for [auto_exe
0960: 63 6f 6b 5d 2e 0a 2b 20 20 20 20 20 2a 2f 0a 2b cok]..+ */.+
0970: 20 20 20 20 54 63 6c 5f 43 72 65 61 74 65 4f 62 Tcl_CreateOb
0980: 6a 43 6f 6d 6d 61 6e 64 28 69 6e 74 65 72 70 2c jCommand(interp,
0990: 20 22 3a 3a 74 63 6c 3a 3a 77 69 6e 73 65 61 72 "::tcl::winsear
09a0: 63 68 70 61 74 68 22 2c 20 54 63 6c 57 69 6e 53 chpath", TclWinS
09b0: 65 61 72 63 68 50 61 74 68 4f 62 6a 43 6d 64 2c earchPathObjCmd,
09c0: 0a 2b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .+
09d0: 20 20 20 20 20 20 20 20 20 20 20 4e 55 4c 4c 2c NULL,
09e0: 20 4e 55 4c 4c 29 3b 0a 20 7d 0a 20 0c 0a 20 2f NULL);. }. .. /
09f0: 2a 0a 64 69 66 66 20 2d 2d 67 69 74 20 61 2f 77 *.diff --git a/w
0a00: 69 6e 2f 74 63 6c 57 69 6e 49 6e 74 2e 68 20 62 in/tclWinInt.h b
0a10: 2f 77 69 6e 2f 74 63 6c 57 69 6e 49 6e 74 2e 68 /win/tclWinInt.h
0a20: 0a 69 6e 64 65 78 20 34 33 37 39 39 64 30 2e 2e .index 43799d0..
0a30: 37 36 32 34 61 66 33 20 31 30 30 36 34 34 0a 2d 7624af3 100644.-
0a40: 2d 2d 20 61 2f 77 69 6e 2f 74 63 6c 57 69 6e 49 -- a/win/tclWinI
0a50: 6e 74 2e 68 0a 2b 2b 2b 20 62 2f 77 69 6e 2f 74 nt.h.+++ b/win/t
0a60: 63 6c 57 69 6e 49 6e 74 2e 68 0a 40 40 20 2d 38 clWinInt.h.@@ -8
0a70: 32 2c 36 20 2b 38 32 2c 39 20 40 40 20 4d 4f 44 2,6 +82,9 @@ MOD
0a80: 55 4c 45 5f 53 43 4f 50 45 20 69 6e 74 09 54 63 ULE_SCOPE int.Tc
0a90: 6c 57 69 6e 53 79 6d 4c 69 6e 6b 43 6f 70 79 44 lWinSymLinkCopyD
0aa0: 69 72 65 63 74 6f 72 79 28 63 6f 6e 73 74 20 54 irectory(const T
0ab0: 43 48 41 52 20 2a 4c 69 6e 6b 4f 72 69 67 69 6e CHAR *LinkOrigin
0ac0: 61 6c 2c 0a 20 4d 4f 44 55 4c 45 5f 53 43 4f 50 al,. MODULE_SCOP
0ad0: 45 20 69 6e 74 09 54 63 6c 57 69 6e 53 79 6d 4c E int.TclWinSymL
0ae0: 69 6e 6b 44 65 6c 65 74 65 28 63 6f 6e 73 74 20 inkDelete(const
0af0: 54 43 48 41 52 20 2a 4c 69 6e 6b 4f 72 69 67 69 TCHAR *LinkOrigi
0b00: 6e 61 6c 2c 0a 20 09 09 09 20 20 20 20 69 6e 74 nal,. ... int
0b10: 20 6c 69 6e 6b 4f 6e 6c 79 29 3b 0a 20 4d 4f 44 linkOnly);. MOD
0b20: 55 4c 45 5f 53 43 4f 50 45 20 69 6e 74 20 20 20 ULE_SCOPE int
0b30: 20 20 20 20 20 54 63 6c 57 69 6e 46 69 6c 65 4f TclWinFileO
0b40: 77 6e 65 64 28 54 63 6c 5f 4f 62 6a 20 2a 29 3b wned(Tcl_Obj *);
0b50: 0a 2b 4d 4f 44 55 4c 45 5f 53 43 4f 50 45 20 69 .+MODULE_SCOPE i
0b60: 6e 74 09 54 63 6c 57 69 6e 53 65 61 72 63 68 50 nt.TclWinSearchP
0b70: 61 74 68 4f 62 6a 43 6d 64 28 0a 2b 09 09 09 20 athObjCmd(.+...
0b80: 20 20 20 43 6c 69 65 6e 74 44 61 74 61 20 63 6c ClientData cl
0b90: 69 65 6e 74 44 61 74 61 2c 20 54 63 6c 5f 49 6e ientData, Tcl_In
0ba0: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 2b 09 terp *interp,.+.
0bb0: 09 09 20 20 20 20 69 6e 74 20 6f 62 6a 63 2c 20 .. int objc,
0bc0: 54 63 6c 5f 4f 62 6a 20 2a 63 6f 6e 73 74 20 6f Tcl_Obj *const o
0bd0: 62 6a 76 5b 5d 29 3b 0a 20 23 69 66 20 64 65 66 bjv[]);. #if def
0be0: 69 6e 65 64 28 54 43 4c 5f 54 48 52 45 41 44 53 ined(TCL_THREADS
0bf0: 29 20 26 26 20 64 65 66 69 6e 65 64 28 55 53 45 ) && defined(USE
0c00: 5f 54 48 52 45 41 44 5f 41 4c 4c 4f 43 29 0a 20 _THREAD_ALLOC).
0c10: 4d 4f 44 55 4c 45 5f 53 43 4f 50 45 20 76 6f 69 MODULE_SCOPE voi
0c20: 64 09 54 63 6c 57 69 6e 46 72 65 65 41 6c 6c 6f d.TclWinFreeAllo
0c30: 63 43 61 63 68 65 28 76 6f 69 64 29 3b 0a 20 4d cCache(void);. M
0c40: 4f 44 55 4c 45 5f 53 43 4f 50 45 20 76 6f 69 64 ODULE_SCOPE void
0c50: 09 54 63 6c 46 72 65 65 41 6c 6c 6f 63 43 61 63 .TclFreeAllocCac
0c60: 68 65 28 76 6f 69 64 20 2a 29 3b 0a 64 69 66 66 he(void *);.diff
0c70: 20 2d 2d 67 69 74 20 61 2f 77 69 6e 2f 74 63 6c --git a/win/tcl
0c80: 57 69 6e 50 69 70 65 2e 63 20 62 2f 77 69 6e 2f WinPipe.c b/win/
0c90: 74 63 6c 57 69 6e 50 69 70 65 2e 63 0a 69 6e 64 tclWinPipe.c.ind
0ca0: 65 78 20 35 32 34 36 64 35 33 2e 2e 61 63 30 38 ex 5246d53..ac08
0cb0: 36 35 33 20 31 30 30 36 34 34 0a 2d 2d 2d 20 61 653 100644.--- a
0cc0: 2f 77 69 6e 2f 74 63 6c 57 69 6e 50 69 70 65 2e /win/tclWinPipe.
0cd0: 63 0a 2b 2b 2b 20 62 2f 77 69 6e 2f 74 63 6c 57 c.+++ b/win/tclW
0ce0: 69 6e 50 69 70 65 2e 63 0a 40 40 20 2d 31 32 33 inPipe.c.@@ -123
0cf0: 36 2c 36 20 2b 31 32 33 36 2c 34 38 20 40 40 20 6,6 +1236,48 @@
0d00: 48 61 73 43 6f 6e 73 6f 6c 65 28 76 6f 69 64 29 HasConsole(void)
0d10: 0a 20 2f 2a 0a 20 20 2a 2d 2d 2d 2d 2d 2d 2d 2d . /*. *--------
0d20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0d30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0d40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0d50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a ------------. *
0d60: 0a 2b 20 2a 20 54 63 6c 57 69 6e 53 65 61 72 63 .+ * TclWinSearc
0d70: 68 50 61 74 68 4f 62 6a 43 6d 64 20 2d 2d 0a 2b hPathObjCmd --.+
0d80: 20 2a 0a 2b 20 2a 20 20 20 20 20 20 53 65 61 72 *.+ * Sear
0d90: 63 68 20 66 6f 72 20 74 68 65 20 73 70 65 63 69 ch for the speci
0da0: 66 69 65 64 20 70 72 6f 67 72 61 6d 20 61 6e 64 fied program and
0db0: 20 72 65 74 75 72 6e 20 74 68 65 20 66 75 6c 6c return the full
0dc0: 20 70 61 74 68 6e 61 6d 65 2e 0a 2b 20 2a 0a 2b pathname..+ *.+
0dd0: 20 2a 20 52 65 73 75 6c 74 73 3a 0a 2b 20 2a 09 * Results:.+ *.
0de0: 41 20 73 74 61 6e 64 61 72 64 20 54 63 6c 20 72 A standard Tcl r
0df0: 65 73 75 6c 74 2e 0a 2b 20 2a 0a 2b 20 2a 20 53 esult..+ *.+ * S
0e00: 69 64 65 20 65 66 66 65 63 74 73 3a 0a 2b 20 2a ide effects:.+ *
0e10: 09 4e 6f 6e 65 2e 0a 2b 20 2a 0a 2b 20 2a 2d 2d .None..+ *.+ *--
0e20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0e30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0e40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0e50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0e60: 2d 2d 2d 2d 0a 2b 20 2a 2f 0a 2b 69 6e 74 20 54 ----.+ */.+int T
0e70: 63 6c 57 69 6e 53 65 61 72 63 68 50 61 74 68 4f clWinSearchPathO
0e80: 62 6a 43 6d 64 28 43 6c 69 65 6e 74 44 61 74 61 bjCmd(ClientData
0e90: 20 63 64 2c 0a 2b 20 20 20 20 20 20 20 20 20 20 cd,.+
0ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0eb0: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 Tcl_Interp *int
0ec0: 65 72 70 2c 0a 2b 20 20 20 20 20 20 20 20 20 20 erp,.+
0ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0ee0: 20 69 6e 74 20 6f 62 6a 63 2c 0a 2b 20 20 20 20 int objc,.+
0ef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0f00: 20 20 20 20 20 20 20 54 63 6c 5f 4f 62 6a 20 2a Tcl_Obj *
0f10: 63 6f 6e 73 74 20 6f 62 6a 76 5b 5d 29 0a 2b 7b const objv[]).+{
0f20: 0a 2b 20 20 20 20 69 6e 74 20 63 6f 64 65 3b 0a .+ int code;.
0f30: 2b 20 20 20 20 63 68 61 72 20 70 61 74 68 5b 4d + char path[M
0f40: 41 58 5f 50 41 54 48 20 2a 20 54 43 4c 5f 55 54 AX_PATH * TCL_UT
0f50: 46 5f 4d 41 58 5d 3b 0a 2b 20 20 20 20 63 68 61 F_MAX];.+ cha
0f60: 72 2a 20 6e 61 6d 65 3b 0a 2b 20 20 20 20 54 63 r* name;.+ Tc
0f70: 6c 5f 44 53 74 72 69 6e 67 20 62 75 66 66 65 72 l_DString buffer
0f80: 3b 0a 2b 20 20 20 20 69 66 20 28 6f 62 6a 63 20 ;.+ if (objc
0f90: 21 3d 20 32 29 20 7b 0a 2b 09 54 63 6c 5f 57 72 != 2) {.+.Tcl_Wr
0fa0: 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 ongNumArgs(inter
0fb0: 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 6e 61 6d p, 1, objv, "nam
0fc0: 65 22 29 3b 0a 2b 09 72 65 74 75 72 6e 20 54 43 e");.+.return TC
0fd0: 4c 5f 45 52 52 4f 52 3b 0a 2b 20 20 20 20 7d 0a L_ERROR;.+ }.
0fe0: 2b 20 20 20 20 54 63 6c 5f 44 53 74 72 69 6e 67 + Tcl_DString
0ff0: 49 6e 69 74 28 26 62 75 66 66 65 72 29 3b 0a 2b Init(&buffer);.+
1000: 20 20 20 20 6e 61 6d 65 20 3d 20 54 63 6c 5f 54 name = Tcl_T
1010: 72 61 6e 73 6c 61 74 65 46 69 6c 65 4e 61 6d 65 ranslateFileName
1020: 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 (interp, Tcl_Get
1030: 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c String(objv[1]),
1040: 20 26 62 75 66 66 65 72 29 3b 0a 2b 20 20 20 20 &buffer);.+
1050: 69 66 20 28 6e 61 6d 65 20 3d 3d 20 4e 55 4c 4c if (name == NULL
1060: 29 20 7b 0a 2b 20 20 20 20 20 20 20 20 63 6f 64 ) {.+ cod
1070: 65 20 3d 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 2b e = TCL_ERROR;.+
1080: 20 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28 41 } else if (A
1090: 70 70 6c 69 63 61 74 69 6f 6e 54 79 70 65 28 69 pplicationType(i
10a0: 6e 74 65 72 70 2c 20 6e 61 6d 65 2c 20 70 61 74 nterp, name, pat
10b0: 68 29 20 3d 3d 20 41 50 50 4c 5f 4e 4f 4e 45 29 h) == APPL_NONE)
10c0: 20 7b 0a 2b 20 20 20 20 20 20 20 20 63 6f 64 65 {.+ code
10d0: 20 3d 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 2b 20 = TCL_ERROR;.+
10e0: 20 20 20 7d 20 65 6c 73 65 20 7b 0a 2b 20 20 20 } else {.+
10f0: 20 20 20 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 Tcl_SetObjR
1100: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 esult(interp, Tc
1110: 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 70 l_NewStringObj(p
1120: 61 74 68 2c 20 2d 31 29 29 3b 0a 2b 20 20 20 20 ath, -1));.+
1130: 20 20 20 20 63 6f 64 65 20 3d 20 54 43 4c 5f 4f code = TCL_O
1140: 4b 3b 0a 2b 20 20 20 20 7d 0a 2b 20 20 20 20 54 K;.+ }.+ T
1150: 63 6c 5f 44 53 74 72 69 6e 67 46 72 65 65 28 26 cl_DStringFree(&
1160: 62 75 66 66 65 72 29 3b 0a 2b 20 20 20 20 72 65 buffer);.+ re
1170: 74 75 72 6e 20 63 6f 64 65 3b 0a 2b 7d 0a 2b 0c turn code;.+}.+.
1180: 0a 2b 2f 2a 0a 2b 20 2a 2d 2d 2d 2d 2d 2d 2d 2d .+/*.+ *--------
1190: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
11a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
11b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
11c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 2b 20 2a ------------.+ *
11d0: 0a 20 20 2a 20 41 70 70 6c 69 63 61 74 69 6f 6e . * Application
11e0: 54 79 70 65 20 2d 2d 0a 20 20 2a 0a 20 20 2a 09 Type --. *. *.
11f0: 53 65 61 72 63 68 20 66 6f 72 20 74 68 65 20 73 Search for the s
1200: 70 65 63 69 66 69 65 64 20 70 72 6f 67 72 61 6d pecified program
1210: 20 61 6e 64 20 69 64 65 6e 74 69 66 79 20 69 66 and identify if
1220: 20 69 74 20 72 65 66 65 72 73 20 74 6f 20 61 20 it refers to a
1230: 44 4f 53 2c 0a DOS,.