Tcl Source Code

Hex Artifact Content
Login

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