System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 00abe06a8b1e8ceb369e5bbc0a1eb17a6e211204:


0000: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0010: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0020: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0030: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0040: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d  ###############.
0050: 0a 23 0d 0a 23 20 66 69 6c 65 33 2e 65 61 67 6c  .#..# file3.eagl
0060: 65 20 2d 2d 0d 0a 23 0d 0a 23 20 45 78 74 65 6e  e --..#..# Exten
0070: 73 69 62 6c 65 20 41 64 61 70 74 61 62 6c 65 20  sible Adaptable 
0080: 47 65 6e 65 72 61 6c 69 7a 65 64 20 4c 6f 67 69  Generalized Logi
0090: 63 20 45 6e 67 69 6e 65 20 28 45 61 67 6c 65 29  c Engine (Eagle)
00a0: 0d 0a 23 20 45 61 67 6c 65 20 46 69 6c 65 20 33  ..# Eagle File 3
00b0: 20 50 61 63 6b 61 67 65 20 46 69 6c 65 0d 0a 23   Package File..#
00c0: 0d 0a 23 20 43 6f 70 79 72 69 67 68 74 20 28 63  ..# Copyright (c
00d0: 29 20 32 30 30 37 2d 32 30 31 32 20 62 79 20 4a  ) 2007-2012 by J
00e0: 6f 65 20 4d 69 73 74 61 63 68 6b 69 6e 2e 20 20  oe Mistachkin.  
00f0: 41 6c 6c 20 72 69 67 68 74 73 20 72 65 73 65 72  All rights reser
0100: 76 65 64 2e 0d 0a 23 0d 0a 23 20 53 65 65 20 74  ved...#..# See t
0110: 68 65 20 66 69 6c 65 20 22 6c 69 63 65 6e 73 65  he file "license
0120: 2e 74 65 72 6d 73 22 20 66 6f 72 20 69 6e 66 6f  .terms" for info
0130: 72 6d 61 74 69 6f 6e 20 6f 6e 20 75 73 61 67 65  rmation on usage
0140: 20 61 6e 64 20 72 65 64 69 73 74 72 69 62 75 74   and redistribut
0150: 69 6f 6e 20 6f 66 0d 0a 23 20 74 68 69 73 20 66  ion of..# this f
0160: 69 6c 65 2c 20 61 6e 64 20 66 6f 72 20 61 20 44  ile, and for a D
0170: 49 53 43 4c 41 49 4d 45 52 20 4f 46 20 41 4c 4c  ISCLAIMER OF ALL
0180: 20 57 41 52 52 41 4e 54 49 45 53 2e 0d 0a 23 0d   WARRANTIES...#.
0190: 0a 23 20 52 43 53 3a 20 40 28 23 29 20 24 49 64  .# RCS: @(#) $Id
01a0: 3a 20 24 0d 0a 23 0d 0a 23 23 23 23 23 23 23 23  : $..#..########
01b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
01c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
01d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
01e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
01f0: 23 23 23 23 23 23 23 0d 0a 0d 0a 23 0d 0a 23 20  #######....#..# 
0200: 4e 4f 54 45 3a 20 55 73 65 20 6f 75 72 20 6f 77  NOTE: Use our ow
0210: 6e 20 6e 61 6d 65 73 70 61 63 65 20 68 65 72 65  n namespace here
0220: 20 62 65 63 61 75 73 65 20 65 76 65 6e 20 74 68   because even th
0230: 6f 75 67 68 20 77 65 20 64 6f 20 6e 6f 74 20 64  ough we do not d
0240: 69 72 65 63 74 6c 79 0d 0a 23 20 20 20 20 20 20  irectly..#      
0250: 20 73 75 70 70 6f 72 74 20 6e 61 6d 65 73 70 61   support namespa
0260: 63 65 73 20 6f 75 72 73 65 6c 76 65 73 2c 20 77  ces ourselves, w
0270: 65 20 64 6f 20 6e 6f 74 20 77 61 6e 74 20 74 6f  e do not want to
0280: 20 70 6f 6c 6c 75 74 65 20 74 68 65 20 67 6c 6f   pollute the glo
0290: 62 61 6c 0d 0a 23 20 20 20 20 20 20 20 6e 61 6d  bal..#       nam
02a0: 65 73 70 61 63 65 20 69 66 20 74 68 69 73 20 73  espace if this s
02b0: 63 72 69 70 74 20 61 63 74 75 61 6c 6c 79 20 65  cript actually e
02c0: 6e 64 73 20 75 70 20 62 65 69 6e 67 20 65 76 61  nds up being eva
02d0: 6c 75 61 74 65 64 20 69 6e 20 54 63 6c 2e 0d 0a  luated in Tcl...
02e0: 23 0d 0a 6e 61 6d 65 73 70 61 63 65 20 65 76 61  #..namespace eva
02f0: 6c 20 3a 3a 45 61 67 6c 65 20 7b 0d 0a 20 20 23  l ::Eagle {..  #
0300: 0d 0a 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73  ..  # NOTE: This
0310: 20 70 72 6f 63 65 64 75 72 65 20 75 73 65 73 20   procedure uses 
0320: 74 68 65 20 74 79 70 65 20 6f 66 20 74 68 65 20  the type of the 
0330: 73 70 65 63 69 66 69 65 64 20 70 61 74 68 20 74  specified path t
0340: 6f 20 66 69 67 75 72 65 20 6f 75 74 0d 0a 20 20  o figure out..  
0350: 23 20 20 20 20 20 20 20 74 68 65 20 28 70 6f 73  #       the (pos
0360: 73 69 62 6c 79 20 6e 6f 72 6d 61 6c 69 7a 65 64  sibly normalized
0370: 29 20 70 61 74 68 20 74 6f 20 61 64 64 20 74 6f  ) path to add to
0380: 20 74 68 65 20 66 69 6e 64 65 72 20 72 65 73 75   the finder resu
0390: 6c 74 73 2e 0d 0a 20 20 23 0d 0a 20 20 70 72 6f  lts...  #..  pro
03a0: 63 20 67 65 74 44 69 72 52 65 73 75 6c 74 50 61  c getDirResultPa
03b0: 74 68 20 7b 20 70 61 74 74 65 72 6e 20 70 61 74  th { pattern pat
03c0: 68 20 7d 20 7b 0d 0a 20 20 20 20 23 0d 0a 20 20  h } {..    #..  
03d0: 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 73    # NOTE: This s
03e0: 68 6f 75 6c 64 20 77 6f 72 6b 20 70 72 6f 70 65  hould work prope
03f0: 72 6c 79 20 69 6e 20 62 6f 74 68 20 54 63 6c 20  rly in both Tcl 
0400: 61 6e 64 20 45 61 67 6c 65 2e 0d 0a 20 20 20 20  and Eagle...    
0410: 23 20 20 20 20 20 20 20 49 73 20 74 68 65 20 72  #       Is the r
0420: 65 73 75 6c 74 20 70 61 74 68 20 69 74 73 65 6c  esult path itsel
0430: 66 20 61 6c 72 65 61 64 79 20 61 62 73 6f 6c 75  f already absolu
0440: 74 65 3f 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20  te?..    #..    
0450: 69 66 20 7b 5b 66 69 6c 65 20 70 61 74 68 74 79  if {[file pathty
0460: 70 65 20 24 70 61 74 68 5d 20 65 71 20 22 61 62  pe $path] eq "ab
0470: 73 6f 6c 75 74 65 22 7d 20 74 68 65 6e 20 7b 0d  solute"} then {.
0480: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..      
0490: 23 20 4e 4f 54 45 3a 20 4f 6b 2c 20 74 68 65 20  # NOTE: Ok, the 
04a0: 72 65 73 75 6c 74 20 70 61 74 68 20 69 73 20 61  result path is a
04b0: 6c 72 65 61 64 79 20 61 62 73 6f 6c 75 74 65 2e  lready absolute.
04c0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #       
04d0: 4e 6f 72 6d 61 6c 69 7a 65 20 61 6e 64 20 72 65  Normalize and re
04e0: 74 75 72 6e 20 69 74 2e 0d 0a 20 20 20 20 20 20  turn it...      
04f0: 23 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  #..      return 
0500: 5b 66 69 6c 65 20 6e 6f 72 6d 61 6c 69 7a 65 20  [file normalize 
0510: 24 70 61 74 68 5d 0d 0a 20 20 20 20 7d 20 65 6c  $path]..    } el
0520: 73 65 69 66 20 7b 5b 66 69 6c 65 20 70 61 74 68  seif {[file path
0530: 74 79 70 65 20 24 70 61 74 74 65 72 6e 5d 20 65  type $pattern] e
0540: 71 20 22 61 62 73 6f 6c 75 74 65 22 7d 20 74 68  q "absolute"} th
0550: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20  en {..      #.. 
0560: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65       # NOTE: The
0570: 20 70 61 74 74 65 72 6e 20 72 65 66 65 72 73 20   pattern refers 
0580: 74 6f 20 61 6e 20 61 62 73 6f 6c 75 74 65 20 70  to an absolute p
0590: 61 74 68 2e 20 20 53 74 72 69 70 0d 0a 20 20 20  ath.  Strip..   
05a0: 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 66     #       the f
05b0: 69 6e 61 6c 20 70 61 72 74 20 6f 66 20 74 68 65  inal part of the
05c0: 20 70 61 74 74 65 72 6e 20 61 6e 64 20 6a 6f 69   pattern and joi
05d0: 6e 20 69 74 20 77 69 74 68 0d 0a 20 20 20 20 20  n it with..     
05e0: 20 23 20 20 20 20 20 20 20 74 68 65 20 72 65 73   #       the res
05f0: 75 6c 74 20 70 61 74 68 20 28 77 68 69 63 68 20  ult path (which 
0600: 77 65 20 61 6c 72 65 61 64 79 20 6b 6e 6f 77 20  we already know 
0610: 69 73 20 6e 6f 74 0d 0a 20 20 20 20 20 20 23 20  is not..      # 
0620: 20 20 20 20 20 20 61 62 73 6f 6c 75 74 65 29 2e        absolute).
0630: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..     
0640: 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 6e 6f   return [file no
0650: 72 6d 61 6c 69 7a 65 20 5b 66 69 6c 65 20 6a 6f  rmalize [file jo
0660: 69 6e 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65  in [file dirname
0670: 20 24 70 61 74 74 65 72 6e 5d 20 24 70 61 74 68   $pattern] $path
0680: 5d 5d 0d 0a 20 20 20 20 7d 20 65 6c 73 65 20 7b  ]]..    } else {
0690: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..     
06a0: 20 23 20 4e 4f 54 45 3a 20 4e 65 69 74 68 65 72   # NOTE: Neither
06b0: 20 74 68 65 20 72 65 73 75 6c 74 20 70 61 74 68   the result path
06c0: 20 6e 6f 72 20 74 68 65 20 69 6e 70 75 74 20 70   nor the input p
06d0: 61 74 74 65 72 6e 0d 0a 20 20 20 20 20 20 23 20  attern..      # 
06e0: 20 20 20 20 20 20 63 6f 6e 74 61 69 6e 20 61 6e        contain an
06f0: 20 61 62 73 6f 6c 75 74 65 20 70 61 74 68 3b 20   absolute path; 
0700: 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20 74  therefore, use t
0710: 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  he..      #     
0720: 20 20 63 75 72 72 65 6e 74 20 64 69 72 65 63 74    current direct
0730: 6f 72 79 20 74 6f 20 68 61 6e 67 20 74 68 65 20  ory to hang the 
0740: 72 65 73 75 6c 74 20 70 61 74 68 20 6f 6e 2e 0d  result path on..
0750: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..      
0760: 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 6e 6f 72  return [file nor
0770: 6d 61 6c 69 7a 65 20 5b 66 69 6c 65 20 6a 6f 69  malize [file joi
0780: 6e 20 5b 70 77 64 5d 20 24 70 61 74 68 5d 5d 0d  n [pwd] $path]].
0790: 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d 0a 0c 0d 0a  .    }..  }.....
07a0: 20 20 23 0d 0a 20 20 23 20 4e 4f 54 45 3a 20 54    #..  # NOTE: T
07b0: 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 72 65  his procedure re
07c0: 74 75 72 6e 73 20 61 20 6c 69 73 74 20 6f 66 20  turns a list of 
07d0: 64 69 72 65 63 74 6f 72 69 65 73 20 6d 61 74 63  directories matc
07e0: 68 69 6e 67 20 74 68 65 20 70 61 74 74 65 72 6e  hing the pattern
07f0: 0d 0a 20 20 23 20 20 20 20 20 20 20 73 70 65 63  ..  #       spec
0800: 69 66 69 65 64 2e 20 20 49 74 20 64 6f 65 73 20  ified.  It does 
0810: 6e 6f 74 20 72 65 63 75 72 73 65 20 69 6e 74 6f  not recurse into
0820: 20 73 75 62 2d 64 69 72 65 63 74 6f 72 69 65 73   sub-directories
0830: 2e 0d 0a 20 20 23 0d 0a 20 20 70 72 6f 63 20 66  ...  #..  proc f
0840: 69 6e 64 44 69 72 65 63 74 6f 72 69 65 73 20 7b  indDirectories {
0850: 20 70 61 74 74 65 72 6e 20 7d 20 7b 0d 0a 20 20   pattern } {..  
0860: 20 20 69 66 20 7b 5b 69 73 45 61 67 6c 65 5d 7d    if {[isEagle]}
0870: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 23   then {..      #
0880: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE: 
0890: 42 6c 6f 63 6b 20 6e 6f 6e 2d 57 69 6e 64 6f 77  Block non-Window
08a0: 73 20 70 6c 61 74 66 6f 72 6d 73 20 73 69 6e 63  s platforms sinc
08b0: 65 20 74 68 69 73 20 69 73 20 57 69 6e 64 6f 77  e this is Window
08c0: 73 20 73 70 65 63 69 66 69 63 2e 0d 0a 20 20 20  s specific...   
08d0: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
08e0: 21 5b 69 73 57 69 6e 64 6f 77 73 5d 7d 20 74 68  ![isWindows]} th
08f0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 65 72  en {..        er
0900: 72 6f 72 20 22 6e 6f 74 20 73 75 70 70 6f 72 74  ror "not support
0910: 65 64 20 6f 6e 20 74 68 69 73 20 6f 70 65 72 61  ed on this opera
0920: 74 69 6e 67 20 73 79 73 74 65 6d 22 0d 0a 20 20  ting system"..  
0930: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23      }....      #
0940: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE: 
0950: 54 68 69 73 20 73 68 6f 75 6c 64 20 77 6f 72 6b  This should work
0960: 20 70 72 6f 70 65 72 6c 79 20 69 6e 20 45 61 67   properly in Eag
0970: 6c 65 20 6f 6e 6c 79 2e 0d 0a 20 20 20 20 20 20  le only...      
0980: 23 0d 0a 20 20 20 20 20 20 73 65 74 20 64 69 72  #..      set dir
0990: 20 22 22 3b 20 73 65 74 20 72 65 73 75 6c 74 20   ""; set result 
09a0: 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 20 20 20 20  [list]....      
09b0: 23 0d 0a 20 20 20 20 20 20 23 20 48 41 43 4b 3a  #..      # HACK:
09c0: 20 4f 70 74 69 6d 69 7a 65 20 74 68 65 20 76 61   Optimize the va
09d0: 72 69 61 62 6c 65 20 61 63 63 65 73 73 20 69 6e  riable access in
09e0: 20 74 68 69 73 20 70 72 6f 63 65 64 75 72 65 20   this procedure 
09f0: 74 6f 20 62 65 0d 0a 20 20 20 20 20 20 23 20 20  to be..      #  
0a00: 20 20 20 20 20 61 73 20 66 61 73 74 20 61 73 20       as fast as 
0a10: 70 6f 73 73 69 62 6c 65 2e 0d 0a 20 20 20 20 20  possible...     
0a20: 20 23 0d 0a 20 20 20 20 20 20 6d 61 6b 65 56 61   #..      makeVa
0a30: 72 69 61 62 6c 65 46 61 73 74 20 64 69 72 20 74  riableFast dir t
0a40: 72 75 65 3b 20 6d 61 6b 65 56 61 72 69 61 62 6c  rue; makeVariabl
0a50: 65 46 61 73 74 20 72 65 73 75 6c 74 20 74 72 75  eFast result tru
0a60: 65 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  e....      #..  
0a70: 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 65 20 77      # NOTE: We w
0a80: 69 6c 6c 20 6e 65 65 64 20 74 6f 20 67 72 61 62  ill need to grab
0a90: 20 74 68 65 20 43 6f 6d 53 70 65 63 20 65 6e 76   the ComSpec env
0aa0: 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c  ironment variabl
0ab0: 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  e...      #..   
0ac0: 20 20 20 67 6c 6f 62 61 6c 20 65 6e 76 0d 0a 0d     global env...
0ad0: 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 64  .      foreach d
0ae0: 69 72 20 5b 73 70 6c 69 74 20 5b 65 78 65 63 20  ir [split [exec 
0af0: 2d 75 6e 69 63 6f 64 65 20 24 65 6e 76 28 43 6f  -unicode $env(Co
0b00: 6d 53 70 65 63 29 20 2f 75 20 2f 63 20 64 69 72  mSpec) /u /c dir
0b10: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 61   \..          /a
0b20: 64 20 2f 62 20 5b 61 70 70 65 6e 64 41 72 67 73  d /b [appendArgs
0b30: 20 5c 22 20 5b 66 69 6c 65 20 6e 61 74 69 76 65   \" [file native
0b40: 6e 61 6d 65 20 24 70 61 74 74 65 72 6e 5d 20 5c  name $pattern] \
0b50: 22 5d 5d 20 5c 6e 5d 20 7b 0d 0a 20 20 20 20 20  "]] \n] {..     
0b60: 20 20 20 73 65 74 20 64 69 72 20 5b 73 74 72 69     set dir [stri
0b70: 6e 67 20 74 72 69 6d 20 24 64 69 72 5d 0d 0a 0d  ng trim $dir]...
0b80: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74  .        if {[st
0b90: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 64 69 72  ring length $dir
0ba0: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20  ] > 0} then {.. 
0bb0: 20 20 20 20 20 20 20 20 20 73 65 74 20 64 69 72           set dir
0bc0: 20 5b 67 65 74 44 69 72 52 65 73 75 6c 74 50 61   [getDirResultPa
0bd0: 74 68 20 24 70 61 74 74 65 72 6e 20 24 64 69 72  th $pattern $dir
0be0: 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69  ]....          i
0bf0: 66 20 7b 5b 6c 73 65 61 72 63 68 20 2d 76 61 72  f {[lsearch -var
0c00: 69 61 62 6c 65 20 2d 65 78 61 63 74 20 2d 6e 6f  iable -exact -no
0c10: 63 61 73 65 20 72 65 73 75 6c 74 20 24 64 69 72  case result $dir
0c20: 5d 20 3d 3d 20 2d 31 7d 20 74 68 65 6e 20 7b 0d  ] == -1} then {.
0c30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 61 70  .            lap
0c40: 70 65 6e 64 20 72 65 73 75 6c 74 20 24 64 69 72  pend result $dir
0c50: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }.. 
0c60: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
0c70: 7d 0d 0a 0d 0a 20 20 20 20 20 20 66 6f 72 65 61  }....      forea
0c80: 63 68 20 64 69 72 20 5b 73 70 6c 69 74 20 5b 65  ch dir [split [e
0c90: 78 65 63 20 2d 75 6e 69 63 6f 64 65 20 24 65 6e  xec -unicode $en
0ca0: 76 28 43 6f 6d 53 70 65 63 29 20 2f 75 20 2f 63  v(ComSpec) /u /c
0cb0: 20 64 69 72 20 5c 0d 0a 20 20 20 20 20 20 20 20   dir \..        
0cc0: 20 20 2f 61 68 64 20 2f 62 20 5b 61 70 70 65 6e    /ahd /b [appen
0cd0: 64 41 72 67 73 20 5c 22 20 5b 66 69 6c 65 20 6e  dArgs \" [file n
0ce0: 61 74 69 76 65 6e 61 6d 65 20 24 70 61 74 74 65  ativename $patte
0cf0: 72 6e 5d 20 5c 22 5d 5d 20 5c 6e 5d 20 7b 0d 0a  rn] \"]] \n] {..
0d00: 20 20 20 20 20 20 20 20 73 65 74 20 64 69 72 20          set dir 
0d10: 5b 73 74 72 69 6e 67 20 74 72 69 6d 20 24 64 69  [string trim $di
0d20: 72 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  r]....        if
0d30: 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68   {[string length
0d40: 20 24 64 69 72 5d 20 3e 20 30 7d 20 74 68 65 6e   $dir] > 0} then
0d50: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65   {..          se
0d60: 74 20 64 69 72 20 5b 67 65 74 44 69 72 52 65 73  t dir [getDirRes
0d70: 75 6c 74 50 61 74 68 20 24 70 61 74 74 65 72 6e  ultPath $pattern
0d80: 20 24 64 69 72 5d 0d 0a 0d 0a 20 20 20 20 20 20   $dir]....      
0d90: 20 20 20 20 69 66 20 7b 5b 6c 73 65 61 72 63 68      if {[lsearch
0da0: 20 2d 76 61 72 69 61 62 6c 65 20 2d 65 78 61 63   -variable -exac
0db0: 74 20 2d 6e 6f 63 61 73 65 20 72 65 73 75 6c 74  t -nocase result
0dc0: 20 24 64 69 72 5d 20 3d 3d 20 2d 31 7d 20 74 68   $dir] == -1} th
0dd0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..          
0de0: 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74    lappend result
0df0: 20 24 64 69 72 0d 0a 20 20 20 20 20 20 20 20 20   $dir..         
0e00: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }.. 
0e10: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
0e20: 72 65 74 75 72 6e 20 24 72 65 73 75 6c 74 0d 0a  return $result..
0e30: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..  
0e40: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
0e50: 4f 54 45 3a 20 54 68 69 73 20 73 68 6f 75 6c 64  OTE: This should
0e60: 20 77 6f 72 6b 20 70 72 6f 70 65 72 6c 79 20 69   work properly i
0e70: 6e 20 54 63 6c 20 6f 6e 6c 79 2e 0d 0a 20 20 20  n Tcl only...   
0e80: 20 20 20 23 0d 0a 20 20 20 20 20 20 65 76 61 6c     #..      eval
0e90: 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20   lappend result 
0ea0: 5b 67 6c 6f 62 20 2d 6e 6f 63 6f 6d 70 6c 61 69  [glob -nocomplai
0eb0: 6e 20 2d 74 79 70 65 73 20 7b 64 7d 20 5c 0d 0a  n -types {d} \..
0ec0: 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20            [file 
0ed0: 6e 6f 72 6d 61 6c 69 7a 65 20 24 70 61 74 74 65  normalize $patte
0ee0: 72 6e 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 65 76  rn]]....      ev
0ef0: 61 6c 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c  al lappend resul
0f00: 74 20 5b 67 6c 6f 62 20 2d 6e 6f 63 6f 6d 70 6c  t [glob -nocompl
0f10: 61 69 6e 20 2d 74 79 70 65 73 20 7b 64 20 68 69  ain -types {d hi
0f20: 64 64 65 6e 7d 20 5c 0d 0a 20 20 20 20 20 20 20  dden} \..       
0f30: 20 20 20 5b 66 69 6c 65 20 6e 6f 72 6d 61 6c 69     [file normali
0f40: 7a 65 20 24 70 61 74 74 65 72 6e 5d 5d 0d 0a 0d  ze $pattern]]...
0f50: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 72  .      return $r
0f60: 65 73 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a 20 20  esult..    }..  
0f70: 7d 0d 0a 0c 0d 0a 20 20 23 0d 0a 20 20 23 20 4e  }.....  #..  # N
0f80: 4f 54 45 3a 20 54 68 69 73 20 70 72 6f 63 65 64  OTE: This proced
0f90: 75 72 65 20 72 65 74 75 72 6e 73 20 61 20 6c 69  ure returns a li
0fa0: 73 74 20 6f 66 20 64 69 72 65 63 74 6f 72 69 65  st of directorie
0fb0: 73 20 6d 61 74 63 68 69 6e 67 20 74 68 65 20 70  s matching the p
0fc0: 61 74 74 65 72 6e 0d 0a 20 20 23 20 20 20 20 20  attern..  #     
0fd0: 20 20 73 70 65 63 69 66 69 65 64 2e 20 20 49 74    specified.  It
0fe0: 20 72 65 63 75 72 73 65 73 20 69 6e 74 6f 20 73   recurses into s
0ff0: 75 62 2d 64 69 72 65 63 74 6f 72 69 65 73 2e 0d  ub-directories..
1000: 0a 20 20 23 0d 0a 20 20 70 72 6f 63 20 66 69 6e  .  #..  proc fin
1010: 64 44 69 72 65 63 74 6f 72 69 65 73 52 65 63 75  dDirectoriesRecu
1020: 72 73 69 76 65 20 7b 20 70 61 74 74 65 72 6e 20  rsive { pattern 
1030: 7d 20 7b 0d 0a 20 20 20 20 69 66 20 7b 5b 69 73  } {..    if {[is
1040: 45 61 67 6c 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a  Eagle]} then {..
1050: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
1060: 20 4e 4f 54 45 3a 20 42 6c 6f 63 6b 20 6e 6f 6e   NOTE: Block non
1070: 2d 57 69 6e 64 6f 77 73 20 70 6c 61 74 66 6f 72  -Windows platfor
1080: 6d 73 20 73 69 6e 63 65 20 74 68 69 73 20 69 73  ms since this is
1090: 20 57 69 6e 64 6f 77 73 20 73 70 65 63 69 66 69   Windows specifi
10a0: 63 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  c...      #..   
10b0: 20 20 20 69 66 20 7b 21 5b 69 73 57 69 6e 64 6f     if {![isWindo
10c0: 77 73 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ws]} then {..   
10d0: 20 20 20 20 20 65 72 72 6f 72 20 22 6e 6f 74 20       error "not 
10e0: 73 75 70 70 6f 72 74 65 64 20 6f 6e 20 74 68 69  supported on thi
10f0: 73 20 6f 70 65 72 61 74 69 6e 67 20 73 79 73 74  s operating syst
1100: 65 6d 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  em"..      }....
1110: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
1120: 20 4e 4f 54 45 3a 20 54 68 69 73 20 73 68 6f 75   NOTE: This shou
1130: 6c 64 20 77 6f 72 6b 20 70 72 6f 70 65 72 6c 79  ld work properly
1140: 20 69 6e 20 45 61 67 6c 65 20 6f 6e 6c 79 2e 0d   in Eagle only..
1150: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..      
1160: 73 65 74 20 64 69 72 20 22 22 3b 20 73 65 74 20  set dir ""; set 
1170: 72 65 73 75 6c 74 20 5b 6c 69 73 74 5d 0d 0a 0d  result [list]...
1180: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..      
1190: 23 20 48 41 43 4b 3a 20 4f 70 74 69 6d 69 7a 65  # HACK: Optimize
11a0: 20 74 68 65 20 76 61 72 69 61 62 6c 65 20 61 63   the variable ac
11b0: 63 65 73 73 20 69 6e 20 74 68 69 73 20 70 72 6f  cess in this pro
11c0: 63 65 64 75 72 65 20 74 6f 20 62 65 0d 0a 20 20  cedure to be..  
11d0: 20 20 20 20 23 20 20 20 20 20 20 20 61 73 20 66      #       as f
11e0: 61 73 74 20 61 73 20 70 6f 73 73 69 62 6c 65 2e  ast as possible.
11f0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..     
1200: 20 6d 61 6b 65 56 61 72 69 61 62 6c 65 46 61 73   makeVariableFas
1210: 74 20 64 69 72 20 74 72 75 65 3b 20 6d 61 6b 65  t dir true; make
1220: 56 61 72 69 61 62 6c 65 46 61 73 74 20 72 65 73  VariableFast res
1230: 75 6c 74 20 74 72 75 65 0d 0a 0d 0a 20 20 20 20  ult true....    
1240: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
1250: 45 3a 20 57 65 20 77 69 6c 6c 20 6e 65 65 64 20  E: We will need 
1260: 74 6f 20 67 72 61 62 20 74 68 65 20 43 6f 6d 53  to grab the ComS
1270: 70 65 63 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20  pec environment 
1280: 76 61 72 69 61 62 6c 65 2e 0d 0a 20 20 20 20 20  variable...     
1290: 20 23 0d 0a 20 20 20 20 20 20 67 6c 6f 62 61 6c   #..      global
12a0: 20 65 6e 76 0d 0a 0d 0a 20 20 20 20 20 20 66 6f   env....      fo
12b0: 72 65 61 63 68 20 64 69 72 20 5b 73 70 6c 69 74  reach dir [split
12c0: 20 5b 65 78 65 63 20 2d 75 6e 69 63 6f 64 65 20   [exec -unicode 
12d0: 24 65 6e 76 28 43 6f 6d 53 70 65 63 29 20 2f 75  $env(ComSpec) /u
12e0: 20 2f 63 20 64 69 72 20 5c 0d 0a 20 20 20 20 20   /c dir \..     
12f0: 20 20 20 20 20 2f 61 64 20 2f 73 20 2f 62 20 5b       /ad /s /b [
1300: 61 70 70 65 6e 64 41 72 67 73 20 5c 22 20 5b 66  appendArgs \" [f
1310: 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 24  ile nativename $
1320: 70 61 74 74 65 72 6e 5d 20 5c 22 5d 5d 20 5c 6e  pattern] \"]] \n
1330: 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74  ] {..        set
1340: 20 64 69 72 20 5b 73 74 72 69 6e 67 20 74 72 69   dir [string tri
1350: 6d 20 24 64 69 72 5d 0d 0a 0d 0a 20 20 20 20 20  m $dir]....     
1360: 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c     if {[string l
1370: 65 6e 67 74 68 20 24 64 69 72 5d 20 3e 20 30 7d  ength $dir] > 0}
1380: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..       
1390: 20 20 20 73 65 74 20 64 69 72 20 5b 67 65 74 44     set dir [getD
13a0: 69 72 52 65 73 75 6c 74 50 61 74 68 20 24 70 61  irResultPath $pa
13b0: 74 74 65 72 6e 20 24 64 69 72 5d 0d 0a 0d 0a 20  ttern $dir].... 
13c0: 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 6c 73           if {[ls
13d0: 65 61 72 63 68 20 2d 76 61 72 69 61 62 6c 65 20  earch -variable 
13e0: 2d 65 78 61 63 74 20 2d 6e 6f 63 61 73 65 20 72  -exact -nocase r
13f0: 65 73 75 6c 74 20 24 64 69 72 5d 20 3d 3d 20 2d  esult $dir] == -
1400: 31 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  1} then {..     
1410: 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 72         lappend r
1420: 65 73 75 6c 74 20 24 64 69 72 0d 0a 20 20 20 20  esult $dir..    
1430: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
1440: 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20   }..      }.... 
1450: 20 20 20 20 20 66 6f 72 65 61 63 68 20 64 69 72       foreach dir
1460: 20 5b 73 70 6c 69 74 20 5b 65 78 65 63 20 2d 75   [split [exec -u
1470: 6e 69 63 6f 64 65 20 24 65 6e 76 28 43 6f 6d 53  nicode $env(ComS
1480: 70 65 63 29 20 2f 75 20 2f 63 20 64 69 72 20 5c  pec) /u /c dir \
1490: 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 61 68 64  ..          /ahd
14a0: 20 2f 73 20 2f 62 20 5b 61 70 70 65 6e 64 41 72   /s /b [appendAr
14b0: 67 73 20 5c 22 20 5b 66 69 6c 65 20 6e 61 74 69  gs \" [file nati
14c0: 76 65 6e 61 6d 65 20 24 70 61 74 74 65 72 6e 5d  vename $pattern]
14d0: 20 5c 22 5d 5d 20 5c 6e 5d 20 7b 0d 0a 20 20 20   \"]] \n] {..   
14e0: 20 20 20 20 20 73 65 74 20 64 69 72 20 5b 73 74       set dir [st
14f0: 72 69 6e 67 20 74 72 69 6d 20 24 64 69 72 5d 0d  ring trim $dir].
1500: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b  ...        if {[
1510: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 64  string length $d
1520: 69 72 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  ir] > 0} then {.
1530: 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 64  .          set d
1540: 69 72 20 5b 67 65 74 44 69 72 52 65 73 75 6c 74  ir [getDirResult
1550: 50 61 74 68 20 24 70 61 74 74 65 72 6e 20 24 64  Path $pattern $d
1560: 69 72 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ir]....         
1570: 20 69 66 20 7b 5b 6c 73 65 61 72 63 68 20 2d 76   if {[lsearch -v
1580: 61 72 69 61 62 6c 65 20 2d 65 78 61 63 74 20 2d  ariable -exact -
1590: 6e 6f 63 61 73 65 20 72 65 73 75 6c 74 20 24 64  nocase result $d
15a0: 69 72 5d 20 3d 3d 20 2d 31 7d 20 74 68 65 6e 20  ir] == -1} then 
15b0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c  {..            l
15c0: 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 24 64  append result $d
15d0: 69 72 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  ir..          }.
15e0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
15f0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74    }....      ret
1600: 75 72 6e 20 24 72 65 73 75 6c 74 0d 0a 20 20 20  urn $result..   
1610: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..     
1620: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
1630: 3a 20 42 6c 6f 63 6b 20 6e 6f 6e 2d 57 69 6e 64  : Block non-Wind
1640: 6f 77 73 20 70 6c 61 74 66 6f 72 6d 73 20 73 69  ows platforms si
1650: 6e 63 65 20 74 68 69 73 20 69 73 20 57 69 6e 64  nce this is Wind
1660: 6f 77 73 20 73 70 65 63 69 66 69 63 2e 0d 0a 20  ows specific... 
1670: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
1680: 20 7b 21 5b 69 73 57 69 6e 64 6f 77 73 5d 7d 20   {![isWindows]} 
1690: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..        
16a0: 65 72 72 6f 72 20 22 6e 6f 74 20 73 75 70 70 6f  error "not suppo
16b0: 72 74 65 64 20 6f 6e 20 74 68 69 73 20 6f 70 65  rted on this ope
16c0: 72 61 74 69 6e 67 20 73 79 73 74 65 6d 22 0d 0a  rating system"..
16d0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
16e0: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
16f0: 3a 20 54 68 69 73 20 73 68 6f 75 6c 64 20 77 6f  : This should wo
1700: 72 6b 20 70 72 6f 70 65 72 6c 79 20 69 6e 20 54  rk properly in T
1710: 63 6c 20 6f 6e 6c 79 2e 0d 0a 20 20 20 20 20 20  cl only...      
1720: 23 0d 0a 20 20 20 20 20 20 73 65 74 20 72 65 73  #..      set res
1730: 75 6c 74 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20  ult [list]....  
1740: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
1750: 4f 54 45 3a 20 57 65 20 77 69 6c 6c 20 6e 65 65  OTE: We will nee
1760: 64 20 74 6f 20 67 72 61 62 20 74 68 65 20 43 6f  d to grab the Co
1770: 6d 53 70 65 63 20 65 6e 76 69 72 6f 6e 6d 65 6e  mSpec environmen
1780: 74 20 76 61 72 69 61 62 6c 65 2e 0d 0a 20 20 20  t variable...   
1790: 20 20 20 23 0d 0a 20 20 20 20 20 20 67 6c 6f 62     #..      glob
17a0: 61 6c 20 65 6e 76 0d 0a 0d 0a 20 20 20 20 20 20  al env....      
17b0: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
17c0: 20 57 65 20 77 69 6c 6c 20 61 6c 73 6f 20 6e 65   We will also ne
17d0: 65 64 20 74 6f 20 63 68 65 63 6b 20 74 68 65 20  ed to check the 
17e0: 54 63 6c 20 76 65 72 73 69 6f 6e 2e 0d 0a 20 20  Tcl version...  
17f0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 67 6c 6f      #..      glo
1800: 62 61 6c 20 74 63 6c 5f 76 65 72 73 69 6f 6e 0d  bal tcl_version.
1810: 0a 0d 0a 20 20 20 20 20 20 63 61 74 63 68 20 7b  ...      catch {
1820: 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63  ..        foreac
1830: 68 20 64 69 72 20 5b 73 70 6c 69 74 20 5b 65 78  h dir [split [ex
1840: 65 63 20 24 65 6e 76 28 43 6f 6d 53 70 65 63 29  ec $env(ComSpec)
1850: 20 2f 63 20 64 69 72 20 2f 61 64 20 2f 73 20 2f   /c dir /ad /s /
1860: 62 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  b \..           
1870: 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d   [file nativenam
1880: 65 20 24 70 61 74 74 65 72 6e 5d 5d 20 5c 6e 5d  e $pattern]] \n]
1890: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65   {..          se
18a0: 74 20 64 69 72 20 5b 73 74 72 69 6e 67 20 74 72  t dir [string tr
18b0: 69 6d 20 24 64 69 72 5d 0d 0a 0d 0a 20 20 20 20  im $dir]....    
18c0: 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e        if {[strin
18d0: 67 20 6c 65 6e 67 74 68 20 24 64 69 72 5d 20 3e  g length $dir] >
18e0: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..    
18f0: 20 20 20 20 20 20 20 20 73 65 74 20 64 69 72 20          set dir 
1900: 5b 67 65 74 44 69 72 52 65 73 75 6c 74 50 61 74  [getDirResultPat
1910: 68 20 24 70 61 74 74 65 72 6e 20 24 64 69 72 5d  h $pattern $dir]
1920: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1930: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  #..            #
1940: 20 48 41 43 4b 3a 20 54 68 65 20 2d 6e 6f 63 61   HACK: The -noca
1950: 73 65 20 6f 70 74 69 6f 6e 20 74 6f 20 5b 6c 73  se option to [ls
1960: 65 61 72 63 68 5d 20 69 73 20 6f 6e 6c 79 20 61  earch] is only a
1970: 76 61 69 6c 61 62 6c 65 0d 0a 20 20 20 20 20 20  vailable..      
1980: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 74        #       st
1990: 61 72 74 69 6e 67 20 77 69 74 68 20 54 63 6c 20  arting with Tcl 
19a0: 38 2e 35 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  8.5...          
19b0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20    #..           
19c0: 20 69 66 20 7b 24 74 63 6c 5f 76 65 72 73 69 6f   if {$tcl_versio
19d0: 6e 20 3e 3d 20 38 2e 35 7d 20 74 68 65 6e 20 7b  n >= 8.5} then {
19e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19f0: 69 66 20 7b 5b 6c 73 65 61 72 63 68 20 2d 65 78  if {[lsearch -ex
1a00: 61 63 74 20 2d 6e 6f 63 61 73 65 20 24 72 65 73  act -nocase $res
1a10: 75 6c 74 20 24 64 69 72 5d 20 3d 3d 20 2d 31 7d  ult $dir] == -1}
1a20: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..       
1a30: 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64           lappend
1a40: 20 72 65 73 75 6c 74 20 24 64 69 72 0d 0a 20 20   result $dir..  
1a50: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
1a60: 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73             } els
1a70: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e {..           
1a80: 20 20 20 69 66 20 7b 5b 6c 73 65 61 72 63 68 20     if {[lsearch 
1a90: 2d 65 78 61 63 74 20 5b 73 74 72 69 6e 67 20 74  -exact [string t
1aa0: 6f 6c 6f 77 65 72 20 24 72 65 73 75 6c 74 5d 20  olower $result] 
1ab0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..             
1ac0: 20 20 20 20 20 5b 73 74 72 69 6e 67 20 74 6f 6c       [string tol
1ad0: 6f 77 65 72 20 24 64 69 72 5d 5d 20 3d 3d 20 2d  ower $dir]] == -
1ae0: 31 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  1} then {..     
1af0: 20 20 20 20 20 20 20 20 20 20 20 6c 61 70 70 65             lappe
1b00: 6e 64 20 72 65 73 75 6c 74 20 24 64 69 72 0d 0a  nd result $dir..
1b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1b20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1b30: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
1b40: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d       }..      }.
1b50: 0a 0d 0a 20 20 20 20 20 20 63 61 74 63 68 20 7b  ...      catch {
1b60: 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63  ..        foreac
1b70: 68 20 64 69 72 20 5b 73 70 6c 69 74 20 5b 65 78  h dir [split [ex
1b80: 65 63 20 24 65 6e 76 28 43 6f 6d 53 70 65 63 29  ec $env(ComSpec)
1b90: 20 2f 63 20 64 69 72 20 2f 61 68 64 20 2f 73 20   /c dir /ahd /s 
1ba0: 2f 62 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  /b \..          
1bb0: 20 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61    [file nativena
1bc0: 6d 65 20 24 70 61 74 74 65 72 6e 5d 5d 20 5c 6e  me $pattern]] \n
1bd0: 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73  ] {..          s
1be0: 65 74 20 64 69 72 20 5b 73 74 72 69 6e 67 20 74  et dir [string t
1bf0: 72 69 6d 20 24 64 69 72 5d 0d 0a 0d 0a 20 20 20  rim $dir]....   
1c00: 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69         if {[stri
1c10: 6e 67 20 6c 65 6e 67 74 68 20 24 64 69 72 5d 20  ng length $dir] 
1c20: 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  > 0} then {..   
1c30: 20 20 20 20 20 20 20 20 20 73 65 74 20 64 69 72           set dir
1c40: 20 5b 67 65 74 44 69 72 52 65 73 75 6c 74 50 61   [getDirResultPa
1c50: 74 68 20 24 70 61 74 74 65 72 6e 20 24 64 69 72  th $pattern $dir
1c60: 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ]....           
1c70: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   #..            
1c80: 23 20 48 41 43 4b 3a 20 54 68 65 20 2d 6e 6f 63  # HACK: The -noc
1c90: 61 73 65 20 6f 70 74 69 6f 6e 20 74 6f 20 5b 6c  ase option to [l
1ca0: 73 65 61 72 63 68 5d 20 69 73 20 6f 6e 6c 79 20  search] is only 
1cb0: 61 76 61 69 6c 61 62 6c 65 0d 0a 20 20 20 20 20  available..     
1cc0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73         #       s
1cd0: 74 61 72 74 69 6e 67 20 77 69 74 68 20 54 63 6c  tarting with Tcl
1ce0: 20 38 2e 35 2e 0d 0a 20 20 20 20 20 20 20 20 20   8.5...         
1cf0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..          
1d00: 20 20 69 66 20 7b 24 74 63 6c 5f 76 65 72 73 69    if {$tcl_versi
1d10: 6f 6e 20 3e 3d 20 38 2e 35 7d 20 74 68 65 6e 20  on >= 8.5} then 
1d20: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1d30: 20 69 66 20 7b 5b 6c 73 65 61 72 63 68 20 2d 65   if {[lsearch -e
1d40: 78 61 63 74 20 2d 6e 6f 63 61 73 65 20 24 72 65  xact -nocase $re
1d50: 73 75 6c 74 20 24 64 69 72 5d 20 3d 3d 20 2d 31  sult $dir] == -1
1d60: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..      
1d70: 20 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e            lappen
1d80: 64 20 72 65 73 75 6c 74 20 24 64 69 72 0d 0a 20  d result $dir.. 
1d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
1da0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c              } el
1db0: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  se {..          
1dc0: 20 20 20 20 69 66 20 7b 5b 6c 73 65 61 72 63 68      if {[lsearch
1dd0: 20 2d 65 78 61 63 74 20 5b 73 74 72 69 6e 67 20   -exact [string 
1de0: 74 6f 6c 6f 77 65 72 20 24 72 65 73 75 6c 74 5d  tolower $result]
1df0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..            
1e00: 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 74 6f        [string to
1e10: 6c 6f 77 65 72 20 24 64 69 72 5d 5d 20 3d 3d 20  lower $dir]] == 
1e20: 2d 31 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  -1} then {..    
1e30: 20 20 20 20 20 20 20 20 20 20 20 20 6c 61 70 70              lapp
1e40: 65 6e 64 20 72 65 73 75 6c 74 20 24 64 69 72 0d  end result $dir.
1e50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d  .              }
1e60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1e70: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..  
1e80: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
1e90: 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  ....      return
1ea0: 20 24 72 65 73 75 6c 74 0d 0a 20 20 20 20 7d 0d   $result..    }.
1eb0: 0a 20 20 7d 0d 0a 0c 0d 0a 20 20 23 0d 0a 20 20  .  }.....  #..  
1ec0: 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 70 72 6f  # NOTE: This pro
1ed0: 63 65 64 75 72 65 20 72 65 74 75 72 6e 73 20 61  cedure returns a
1ee0: 20 6c 69 73 74 20 6f 66 20 66 69 6c 65 73 20 6d   list of files m
1ef0: 61 74 63 68 69 6e 67 20 74 68 65 20 70 61 74 74  atching the patt
1f00: 65 72 6e 0d 0a 20 20 23 20 20 20 20 20 20 20 73  ern..  #       s
1f10: 70 65 63 69 66 69 65 64 2e 20 20 49 74 20 64 6f  pecified.  It do
1f20: 65 73 20 6e 6f 74 20 72 65 63 75 72 73 65 20 69  es not recurse i
1f30: 6e 74 6f 20 73 75 62 2d 64 69 72 65 63 74 6f 72  nto sub-director
1f40: 69 65 73 2e 0d 0a 20 20 23 0d 0a 20 20 70 72 6f  ies...  #..  pro
1f50: 63 20 66 69 6e 64 46 69 6c 65 73 20 7b 20 70 61  c findFiles { pa
1f60: 74 74 65 72 6e 20 7d 20 7b 0d 0a 20 20 20 20 69  ttern } {..    i
1f70: 66 20 7b 5b 69 73 45 61 67 6c 65 5d 7d 20 74 68  f {[isEagle]} th
1f80: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20  en {..      #.. 
1f90: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 6c 6f       # NOTE: Blo
1fa0: 63 6b 20 6e 6f 6e 2d 57 69 6e 64 6f 77 73 20 70  ck non-Windows p
1fb0: 6c 61 74 66 6f 72 6d 73 20 73 69 6e 63 65 20 74  latforms since t
1fc0: 68 69 73 20 69 73 20 57 69 6e 64 6f 77 73 20 73  his is Windows s
1fd0: 70 65 63 69 66 69 63 2e 0d 0a 20 20 20 20 20 20  pecific...      
1fe0: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b 69  #..      if {![i
1ff0: 73 57 69 6e 64 6f 77 73 5d 7d 20 74 68 65 6e 20  sWindows]} then 
2000: 7b 0d 0a 20 20 20 20 20 20 20 20 65 72 72 6f 72  {..        error
2010: 20 22 6e 6f 74 20 73 75 70 70 6f 72 74 65 64 20   "not supported 
2020: 6f 6e 20 74 68 69 73 20 6f 70 65 72 61 74 69 6e  on this operatin
2030: 67 20 73 79 73 74 65 6d 22 0d 0a 20 20 20 20 20  g system"..     
2040: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20   }....      #.. 
2050: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69       # NOTE: Thi
2060: 73 20 73 68 6f 75 6c 64 20 77 6f 72 6b 20 70 72  s should work pr
2070: 6f 70 65 72 6c 79 20 69 6e 20 45 61 67 6c 65 20  operly in Eagle 
2080: 6f 6e 6c 79 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  only...      #..
2090: 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61        set fileNa
20a0: 6d 65 20 22 22 3b 20 73 65 74 20 72 65 73 75 6c  me ""; set resul
20b0: 74 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 20 20  t [list]....    
20c0: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 48 41 43    #..      # HAC
20d0: 4b 3a 20 4f 70 74 69 6d 69 7a 65 20 74 68 65 20  K: Optimize the 
20e0: 76 61 72 69 61 62 6c 65 20 61 63 63 65 73 73 20  variable access 
20f0: 69 6e 20 74 68 69 73 20 70 72 6f 63 65 64 75 72  in this procedur
2100: 65 20 74 6f 20 62 65 0d 0a 20 20 20 20 20 20 23  e to be..      #
2110: 20 20 20 20 20 20 20 61 73 20 66 61 73 74 20 61         as fast a
2120: 73 20 70 6f 73 73 69 62 6c 65 2e 0d 0a 20 20 20  s possible...   
2130: 20 20 20 23 0d 0a 20 20 20 20 20 20 6d 61 6b 65     #..      make
2140: 56 61 72 69 61 62 6c 65 46 61 73 74 20 66 69 6c  VariableFast fil
2150: 65 4e 61 6d 65 20 74 72 75 65 3b 20 6d 61 6b 65  eName true; make
2160: 56 61 72 69 61 62 6c 65 46 61 73 74 20 72 65 73  VariableFast res
2170: 75 6c 74 20 74 72 75 65 0d 0a 0d 0a 20 20 20 20  ult true....    
2180: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
2190: 45 3a 20 57 65 20 77 69 6c 6c 20 6e 65 65 64 20  E: We will need 
21a0: 74 6f 20 67 72 61 62 20 74 68 65 20 43 6f 6d 53  to grab the ComS
21b0: 70 65 63 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20  pec environment 
21c0: 76 61 72 69 61 62 6c 65 2e 0d 0a 20 20 20 20 20  variable...     
21d0: 20 23 0d 0a 20 20 20 20 20 20 67 6c 6f 62 61 6c   #..      global
21e0: 20 65 6e 76 0d 0a 0d 0a 20 20 20 20 20 20 66 6f   env....      fo
21f0: 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 5b  reach fileName [
2200: 73 70 6c 69 74 20 5b 65 78 65 63 20 2d 75 6e 69  split [exec -uni
2210: 63 6f 64 65 20 24 65 6e 76 28 43 6f 6d 53 70 65  code $env(ComSpe
2220: 63 29 20 2f 75 20 2f 63 20 64 69 72 20 5c 0d 0a  c) /u /c dir \..
2230: 20 20 20 20 20 20 20 20 20 20 2f 61 2d 64 20 2f            /a-d /
2240: 62 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 22  b [appendArgs \"
2250: 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d   [file nativenam
2260: 65 20 24 70 61 74 74 65 72 6e 5d 20 5c 22 5d 5d  e $pattern] \"]]
2270: 20 5c 6e 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20   \n] {..        
2280: 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 73 74  set fileName [st
2290: 72 69 6e 67 20 74 72 69 6d 20 24 66 69 6c 65 4e  ring trim $fileN
22a0: 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ame]....        
22b0: 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67  if {[string leng
22c0: 74 68 20 24 66 69 6c 65 4e 61 6d 65 5d 20 3e 20  th $fileName] > 
22d0: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..     
22e0: 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d       set fileNam
22f0: 65 20 5b 67 65 74 44 69 72 52 65 73 75 6c 74 50  e [getDirResultP
2300: 61 74 68 20 24 70 61 74 74 65 72 6e 20 24 66 69  ath $pattern $fi
2310: 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20  leName]....     
2320: 20 20 20 20 20 69 66 20 7b 5b 6c 73 65 61 72 63       if {[lsearc
2330: 68 20 2d 76 61 72 69 61 62 6c 65 20 2d 65 78 61  h -variable -exa
2340: 63 74 20 2d 6e 6f 63 61 73 65 20 72 65 73 75 6c  ct -nocase resul
2350: 74 20 24 66 69 6c 65 4e 61 6d 65 5d 20 3d 3d 20  t $fileName] == 
2360: 2d 31 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  -1} then {..    
2370: 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20          lappend 
2380: 72 65 73 75 6c 74 20 24 66 69 6c 65 4e 61 6d 65  result $fileName
2390: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }.. 
23a0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
23b0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 66 6f 72 65 61  }....      forea
23c0: 63 68 20 66 69 6c 65 4e 61 6d 65 20 5b 73 70 6c  ch fileName [spl
23d0: 69 74 20 5b 65 78 65 63 20 2d 75 6e 69 63 6f 64  it [exec -unicod
23e0: 65 20 24 65 6e 76 28 43 6f 6d 53 70 65 63 29 20  e $env(ComSpec) 
23f0: 2f 75 20 2f 63 20 64 69 72 20 5c 0d 0a 20 20 20  /u /c dir \..   
2400: 20 20 20 20 20 20 20 2f 61 68 2d 64 20 2f 62 20         /ah-d /b 
2410: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 22 20 5b  [appendArgs \" [
2420: 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20  file nativename 
2430: 24 70 61 74 74 65 72 6e 5d 20 5c 22 5d 5d 20 5c  $pattern] \"]] \
2440: 6e 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65  n] {..        se
2450: 74 20 66 69 6c 65 4e 61 6d 65 20 5b 73 74 72 69  t fileName [stri
2460: 6e 67 20 74 72 69 6d 20 24 66 69 6c 65 4e 61 6d  ng trim $fileNam
2470: 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  e]....        if
2480: 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68   {[string length
2490: 20 24 66 69 6c 65 4e 61 6d 65 5d 20 3e 20 30 7d   $fileName] > 0}
24a0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..       
24b0: 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20     set fileName 
24c0: 5b 67 65 74 44 69 72 52 65 73 75 6c 74 50 61 74  [getDirResultPat
24d0: 68 20 24 70 61 74 74 65 72 6e 20 24 66 69 6c 65  h $pattern $file
24e0: 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  Name]....       
24f0: 20 20 20 69 66 20 7b 5b 6c 73 65 61 72 63 68 20     if {[lsearch 
2500: 2d 76 61 72 69 61 62 6c 65 20 2d 65 78 61 63 74  -variable -exact
2510: 20 2d 6e 6f 63 61 73 65 20 72 65 73 75 6c 74 20   -nocase result 
2520: 24 66 69 6c 65 4e 61 6d 65 5d 20 3d 3d 20 2d 31  $fileName] == -1
2530: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..      
2540: 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65        lappend re
2550: 73 75 6c 74 20 24 66 69 6c 65 4e 61 6d 65 0d 0a  sult $fileName..
2560: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
2570: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d       }..      }.
2580: 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ...      return 
2590: 24 72 65 73 75 6c 74 0d 0a 20 20 20 20 7d 20 65  $result..    } e
25a0: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a  lse {..      #..
25b0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68        # NOTE: Th
25c0: 69 73 20 73 68 6f 75 6c 64 20 77 6f 72 6b 20 70  is should work p
25d0: 72 6f 70 65 72 6c 79 20 69 6e 20 54 63 6c 20 6f  roperly in Tcl o
25e0: 6e 6c 79 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  nly...      #.. 
25f0: 20 20 20 20 20 65 76 61 6c 20 6c 61 70 70 65 6e       eval lappen
2600: 64 20 72 65 73 75 6c 74 20 5b 67 6c 6f 62 20 2d  d result [glob -
2610: 6e 6f 63 6f 6d 70 6c 61 69 6e 20 2d 74 79 70 65  nocomplain -type
2620: 73 20 7b 66 7d 20 5c 0d 0a 20 20 20 20 20 20 20  s {f} \..       
2630: 20 20 20 5b 66 69 6c 65 20 6e 6f 72 6d 61 6c 69     [file normali
2640: 7a 65 20 24 70 61 74 74 65 72 6e 5d 5d 0d 0a 0d  ze $pattern]]...
2650: 0a 20 20 20 20 20 20 65 76 61 6c 20 6c 61 70 70  .      eval lapp
2660: 65 6e 64 20 72 65 73 75 6c 74 20 5b 67 6c 6f 62  end result [glob
2670: 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 2d 74 79   -nocomplain -ty
2680: 70 65 73 20 7b 66 20 68 69 64 64 65 6e 7d 20 5c  pes {f hidden} \
2690: 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c  ..          [fil
26a0: 65 20 6e 6f 72 6d 61 6c 69 7a 65 20 24 70 61 74  e normalize $pat
26b0: 74 65 72 6e 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20  tern]]....      
26c0: 72 65 74 75 72 6e 20 24 72 65 73 75 6c 74 0d 0a  return $result..
26d0: 20 20 20 20 7d 0d 0a 20 20 7d 0d 0a 0c 0d 0a 20      }..  }..... 
26e0: 20 23 0d 0a 20 20 23 20 4e 4f 54 45 3a 20 54 68   #..  # NOTE: Th
26f0: 69 73 20 70 72 6f 63 65 64 75 72 65 20 72 65 74  is procedure ret
2700: 75 72 6e 73 20 61 20 6c 69 73 74 20 6f 66 20 66  urns a list of f
2710: 69 6c 65 73 20 6d 61 74 63 68 69 6e 67 20 74 68  iles matching th
2720: 65 20 70 61 74 74 65 72 6e 0d 0a 20 20 23 20 20  e pattern..  #  
2730: 20 20 20 20 20 73 70 65 63 69 66 69 65 64 2e 20       specified. 
2740: 20 49 74 20 72 65 63 75 72 73 65 73 20 69 6e 74   It recurses int
2750: 6f 20 73 75 62 2d 64 69 72 65 63 74 6f 72 69 65  o sub-directorie
2760: 73 2e 0d 0a 20 20 23 0d 0a 20 20 70 72 6f 63 20  s...  #..  proc 
2770: 66 69 6e 64 46 69 6c 65 73 52 65 63 75 72 73 69  findFilesRecursi
2780: 76 65 20 7b 20 70 61 74 74 65 72 6e 20 7d 20 7b  ve { pattern } {
2790: 0d 0a 20 20 20 20 69 66 20 7b 5b 69 73 45 61 67  ..    if {[isEag
27a0: 6c 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  le]} then {..   
27b0: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
27c0: 54 45 3a 20 42 6c 6f 63 6b 20 6e 6f 6e 2d 57 69  TE: Block non-Wi
27d0: 6e 64 6f 77 73 20 70 6c 61 74 66 6f 72 6d 73 20  ndows platforms 
27e0: 73 69 6e 63 65 20 74 68 69 73 20 69 73 20 57 69  since this is Wi
27f0: 6e 64 6f 77 73 20 73 70 65 63 69 66 69 63 2e 0d  ndows specific..
2800: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..      
2810: 69 66 20 7b 21 5b 69 73 57 69 6e 64 6f 77 73 5d  if {![isWindows]
2820: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..      
2830: 20 20 65 72 72 6f 72 20 22 6e 6f 74 20 73 75 70    error "not sup
2840: 70 6f 72 74 65 64 20 6f 6e 20 74 68 69 73 20 6f  ported on this o
2850: 70 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d 22  perating system"
2860: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....   
2870: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
2880: 54 45 3a 20 54 68 69 73 20 73 68 6f 75 6c 64 20  TE: This should 
2890: 77 6f 72 6b 20 70 72 6f 70 65 72 6c 79 20 69 6e  work properly in
28a0: 20 45 61 67 6c 65 20 6f 6e 6c 79 2e 0d 0a 20 20   Eagle only...  
28b0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74      #..      set
28c0: 20 66 69 6c 65 4e 61 6d 65 20 22 22 3b 20 73 65   fileName ""; se
28d0: 74 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 5d 0d  t result [list].
28e0: 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..    
28f0: 20 20 23 20 48 41 43 4b 3a 20 4f 70 74 69 6d 69    # HACK: Optimi
2900: 7a 65 20 74 68 65 20 76 61 72 69 61 62 6c 65 20  ze the variable 
2910: 61 63 63 65 73 73 20 69 6e 20 74 68 69 73 20 70  access in this p
2920: 72 6f 63 65 64 75 72 65 20 74 6f 20 62 65 0d 0a  rocedure to be..
2930: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 73        #       as
2940: 20 66 61 73 74 20 61 73 20 70 6f 73 73 69 62 6c   fast as possibl
2950: 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  e...      #..   
2960: 20 20 20 6d 61 6b 65 56 61 72 69 61 62 6c 65 46     makeVariableF
2970: 61 73 74 20 66 69 6c 65 4e 61 6d 65 20 74 72 75  ast fileName tru
2980: 65 3b 20 6d 61 6b 65 56 61 72 69 61 62 6c 65 46  e; makeVariableF
2990: 61 73 74 20 72 65 73 75 6c 74 20 74 72 75 65 0d  ast result true.
29a0: 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..    
29b0: 20 20 23 20 4e 4f 54 45 3a 20 57 65 20 77 69 6c    # NOTE: We wil
29c0: 6c 20 6e 65 65 64 20 74 6f 20 67 72 61 62 20 74  l need to grab t
29d0: 68 65 20 43 6f 6d 53 70 65 63 20 65 6e 76 69 72  he ComSpec envir
29e0: 6f 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c 65 2e  onment variable.
29f0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..     
2a00: 20 67 6c 6f 62 61 6c 20 65 6e 76 0d 0a 0d 0a 20   global env.... 
2a10: 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c       foreach fil
2a20: 65 4e 61 6d 65 20 5b 73 70 6c 69 74 20 5b 65 78  eName [split [ex
2a30: 65 63 20 2d 75 6e 69 63 6f 64 65 20 24 65 6e 76  ec -unicode $env
2a40: 28 43 6f 6d 53 70 65 63 29 20 2f 75 20 2f 63 20  (ComSpec) /u /c 
2a50: 64 69 72 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  dir \..         
2a60: 20 2f 61 2d 64 20 2f 73 20 2f 62 20 5b 61 70 70   /a-d /s /b [app
2a70: 65 6e 64 41 72 67 73 20 5c 22 20 5b 66 69 6c 65  endArgs \" [file
2a80: 20 6e 61 74 69 76 65 6e 61 6d 65 20 24 70 61 74   nativename $pat
2a90: 74 65 72 6e 5d 20 5c 22 5d 5d 20 5c 6e 5d 20 7b  tern] \"]] \n] {
2aa0: 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 66 69  ..        set fi
2ab0: 6c 65 4e 61 6d 65 20 5b 73 74 72 69 6e 67 20 74  leName [string t
2ac0: 72 69 6d 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a  rim $fileName]..
2ad0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73  ..        if {[s
2ae0: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 66 69  tring length $fi
2af0: 6c 65 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65  leName] > 0} the
2b00: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73  n {..          s
2b10: 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 67 65 74  et fileName [get
2b20: 44 69 72 52 65 73 75 6c 74 50 61 74 68 20 24 70  DirResultPath $p
2b30: 61 74 74 65 72 6e 20 24 66 69 6c 65 4e 61 6d 65  attern $fileName
2b40: 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69  ]....          i
2b50: 66 20 7b 5b 6c 73 65 61 72 63 68 20 2d 76 61 72  f {[lsearch -var
2b60: 69 61 62 6c 65 20 2d 65 78 61 63 74 20 2d 6e 6f  iable -exact -no
2b70: 63 61 73 65 20 72 65 73 75 6c 74 20 24 66 69 6c  case result $fil
2b80: 65 4e 61 6d 65 5d 20 3d 3d 20 2d 31 7d 20 74 68  eName] == -1} th
2b90: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..          
2ba0: 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74    lappend result
2bb0: 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20   $fileName..    
2bc0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
2bd0: 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20   }..      }.... 
2be0: 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c       foreach fil
2bf0: 65 4e 61 6d 65 20 5b 73 70 6c 69 74 20 5b 65 78  eName [split [ex
2c00: 65 63 20 2d 75 6e 69 63 6f 64 65 20 24 65 6e 76  ec -unicode $env
2c10: 28 43 6f 6d 53 70 65 63 29 20 2f 75 20 2f 63 20  (ComSpec) /u /c 
2c20: 64 69 72 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  dir \..         
2c30: 20 2f 61 68 2d 64 20 2f 73 20 2f 62 20 5b 61 70   /ah-d /s /b [ap
2c40: 70 65 6e 64 41 72 67 73 20 5c 22 20 5b 66 69 6c  pendArgs \" [fil
2c50: 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 24 70 61  e nativename $pa
2c60: 74 74 65 72 6e 5d 20 5c 22 5d 5d 20 5c 6e 5d 20  ttern] \"]] \n] 
2c70: 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 66  {..        set f
2c80: 69 6c 65 4e 61 6d 65 20 5b 73 74 72 69 6e 67 20  ileName [string 
2c90: 74 72 69 6d 20 24 66 69 6c 65 4e 61 6d 65 5d 0d  trim $fileName].
2ca0: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b  ...        if {[
2cb0: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 66  string length $f
2cc0: 69 6c 65 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 68  ileName] > 0} th
2cd0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..          
2ce0: 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 67 65  set fileName [ge
2cf0: 74 44 69 72 52 65 73 75 6c 74 50 61 74 68 20 24  tDirResultPath $
2d00: 70 61 74 74 65 72 6e 20 24 66 69 6c 65 4e 61 6d  pattern $fileNam
2d10: 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e]....          
2d20: 69 66 20 7b 5b 6c 73 65 61 72 63 68 20 2d 76 61  if {[lsearch -va
2d30: 72 69 61 62 6c 65 20 2d 65 78 61 63 74 20 2d 6e  riable -exact -n
2d40: 6f 63 61 73 65 20 72 65 73 75 6c 74 20 24 66 69  ocase result $fi
2d50: 6c 65 4e 61 6d 65 5d 20 3d 3d 20 2d 31 7d 20 74  leName] == -1} t
2d60: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..         
2d70: 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c     lappend resul
2d80: 74 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20  t $fileName..   
2d90: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
2da0: 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a    }..      }....
2db0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 72 65        return $re
2dc0: 73 75 6c 74 0d 0a 20 20 20 20 7d 20 65 6c 73 65  sult..    } else
2dd0: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20   {..      #..   
2de0: 20 20 20 23 20 4e 4f 54 45 3a 20 42 6c 6f 63 6b     # NOTE: Block
2df0: 20 6e 6f 6e 2d 57 69 6e 64 6f 77 73 20 70 6c 61   non-Windows pla
2e00: 74 66 6f 72 6d 73 20 73 69 6e 63 65 20 74 68 69  tforms since thi
2e10: 73 20 69 73 20 57 69 6e 64 6f 77 73 20 73 70 65  s is Windows spe
2e20: 63 69 66 69 63 2e 0d 0a 20 20 20 20 20 20 23 0d  cific...      #.
2e30: 0a 20 20 20 20 20 20 69 66 20 7b 21 5b 69 73 57  .      if {![isW
2e40: 69 6e 64 6f 77 73 5d 7d 20 74 68 65 6e 20 7b 0d  indows]} then {.
2e50: 0a 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 22  .        error "
2e60: 6e 6f 74 20 73 75 70 70 6f 72 74 65 64 20 6f 6e  not supported on
2e70: 20 74 68 69 73 20 6f 70 65 72 61 74 69 6e 67 20   this operating 
2e80: 73 79 73 74 65 6d 22 0d 0a 20 20 20 20 20 20 7d  system"..      }
2e90: 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ....      #..   
2ea0: 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20     # NOTE: This 
2eb0: 73 68 6f 75 6c 64 20 77 6f 72 6b 20 70 72 6f 70  should work prop
2ec0: 65 72 6c 79 20 69 6e 20 54 63 6c 20 6f 6e 6c 79  erly in Tcl only
2ed0: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..    
2ee0: 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b 6c 69    set result [li
2ef0: 73 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a  st]....      #..
2f00: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 65        # NOTE: We
2f10: 20 77 69 6c 6c 20 6e 65 65 64 20 74 6f 20 67 72   will need to gr
2f20: 61 62 20 74 68 65 20 43 6f 6d 53 70 65 63 20 65  ab the ComSpec e
2f30: 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69 61  nvironment varia
2f40: 62 6c 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ble...      #.. 
2f50: 20 20 20 20 20 67 6c 6f 62 61 6c 20 65 6e 76 0d       global env.
2f60: 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..    
2f70: 20 20 23 20 4e 4f 54 45 3a 20 57 65 20 77 69 6c    # NOTE: We wil
2f80: 6c 20 61 6c 73 6f 20 6e 65 65 64 20 74 6f 20 63  l also need to c
2f90: 68 65 63 6b 20 74 68 65 20 54 63 6c 20 76 65 72  heck the Tcl ver
2fa0: 73 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  sion...      #..
2fb0: 20 20 20 20 20 20 67 6c 6f 62 61 6c 20 74 63 6c        global tcl
2fc0: 5f 76 65 72 73 69 6f 6e 0d 0a 0d 0a 20 20 20 20  _version....    
2fd0: 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20    catch {..     
2fe0: 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e     foreach fileN
2ff0: 61 6d 65 20 5b 73 70 6c 69 74 20 5b 65 78 65 63  ame [split [exec
3000: 20 24 65 6e 76 28 43 6f 6d 53 70 65 63 29 20 2f   $env(ComSpec) /
3010: 63 20 64 69 72 20 2f 61 2d 64 20 2f 73 20 2f 62  c dir /a-d /s /b
3020: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..            
3030: 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65  [file nativename
3040: 20 24 70 61 74 74 65 72 6e 5d 5d 20 5c 6e 5d 20   $pattern]] \n] 
3050: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74  {..          set
3060: 20 66 69 6c 65 4e 61 6d 65 20 5b 73 74 72 69 6e   fileName [strin
3070: 67 20 74 72 69 6d 20 24 66 69 6c 65 4e 61 6d 65  g trim $fileName
3080: 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69  ]....          i
3090: 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74  f {[string lengt
30a0: 68 20 24 66 69 6c 65 4e 61 6d 65 5d 20 3e 20 30  h $fileName] > 0
30b0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..      
30c0: 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61        set fileNa
30d0: 6d 65 20 5b 67 65 74 44 69 72 52 65 73 75 6c 74  me [getDirResult
30e0: 50 61 74 68 20 24 70 61 74 74 65 72 6e 20 24 66  Path $pattern $f
30f0: 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20  ileName]....    
3100: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..     
3110: 20 20 20 20 20 20 20 23 20 48 41 43 4b 3a 20 54         # HACK: T
3120: 68 65 20 2d 6e 6f 63 61 73 65 20 6f 70 74 69 6f  he -nocase optio
3130: 6e 20 74 6f 20 5b 6c 73 65 61 72 63 68 5d 20 69  n to [lsearch] i
3140: 73 20 6f 6e 6c 79 20 61 76 61 69 6c 61 62 6c 65  s only available
3150: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20  ..            # 
3160: 20 20 20 20 20 20 73 74 61 72 74 69 6e 67 20 77        starting w
3170: 69 74 68 20 54 63 6c 20 38 2e 35 2e 0d 0a 20 20  ith Tcl 8.5...  
3180: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..   
3190: 20 20 20 20 20 20 20 20 20 69 66 20 7b 24 74 63           if {$tc
31a0: 6c 5f 76 65 72 73 69 6f 6e 20 3e 3d 20 38 2e 35  l_version >= 8.5
31b0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..      
31c0: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 6c 73 65          if {[lse
31d0: 61 72 63 68 20 2d 65 78 61 63 74 20 2d 6e 6f 63  arch -exact -noc
31e0: 61 73 65 20 24 72 65 73 75 6c 74 20 24 66 69 6c  ase $result $fil
31f0: 65 4e 61 6d 65 5d 20 3d 3d 20 2d 31 7d 20 74 68  eName] == -1} th
3200: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..          
3210: 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65        lappend re
3220: 73 75 6c 74 20 24 66 69 6c 65 4e 61 6d 65 0d 0a  sult $fileName..
3230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
3240: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65  .            } e
3250: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  lse {..         
3260: 20 20 20 20 20 69 66 20 7b 5b 6c 73 65 61 72 63       if {[lsearc
3270: 68 20 2d 65 78 61 63 74 20 5b 73 74 72 69 6e 67  h -exact [string
3280: 20 74 6f 6c 6f 77 65 72 20 24 72 65 73 75 6c 74   tolower $result
3290: 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ] \..           
32a0: 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 74         [string t
32b0: 6f 6c 6f 77 65 72 20 24 66 69 6c 65 4e 61 6d 65  olower $fileName
32c0: 5d 5d 20 3d 3d 20 2d 31 7d 20 74 68 65 6e 20 7b  ]] == -1} then {
32d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32e0: 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74    lappend result
32f0: 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20   $fileName..    
3300: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
3310: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
3320: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
3330: 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20   }..      }.... 
3340: 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20       catch {..  
3350: 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69        foreach fi
3360: 6c 65 4e 61 6d 65 20 5b 73 70 6c 69 74 20 5b 65  leName [split [e
3370: 78 65 63 20 24 65 6e 76 28 43 6f 6d 53 70 65 63  xec $env(ComSpec
3380: 29 20 2f 63 20 64 69 72 20 2f 61 68 2d 64 20 2f  ) /c dir /ah-d /
3390: 73 20 2f 62 20 5c 0d 0a 20 20 20 20 20 20 20 20  s /b \..        
33a0: 20 20 20 20 5b 66 69 6c 65 20 6e 61 74 69 76 65      [file native
33b0: 6e 61 6d 65 20 24 70 61 74 74 65 72 6e 5d 5d 20  name $pattern]] 
33c0: 5c 6e 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  \n] {..         
33d0: 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 73   set fileName [s
33e0: 74 72 69 6e 67 20 74 72 69 6d 20 24 66 69 6c 65  tring trim $file
33f0: 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  Name]....       
3400: 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c     if {[string l
3410: 65 6e 67 74 68 20 24 66 69 6c 65 4e 61 6d 65 5d  ength $fileName]
3420: 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20   > 0} then {..  
3430: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 66 69            set fi
3440: 6c 65 4e 61 6d 65 20 5b 67 65 74 44 69 72 52 65  leName [getDirRe
3450: 73 75 6c 74 50 61 74 68 20 24 70 61 74 74 65 72  sultPath $patter
3460: 6e 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a  n $fileName]....
3470: 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20              #.. 
3480: 20 20 20 20 20 20 20 20 20 20 20 23 20 48 41 43             # HAC
3490: 4b 3a 20 54 68 65 20 2d 6e 6f 63 61 73 65 20 6f  K: The -nocase o
34a0: 70 74 69 6f 6e 20 74 6f 20 5b 6c 73 65 61 72 63  ption to [lsearc
34b0: 68 5d 20 69 73 20 6f 6e 6c 79 20 61 76 61 69 6c  h] is only avail
34c0: 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20  able..          
34d0: 20 20 23 20 20 20 20 20 20 20 73 74 61 72 74 69    #       starti
34e0: 6e 67 20 77 69 74 68 20 54 63 6c 20 38 2e 35 2e  ng with Tcl 8.5.
34f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d  ..            #.
3500: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
3510: 7b 24 74 63 6c 5f 76 65 72 73 69 6f 6e 20 3e 3d  {$tcl_version >=
3520: 20 38 2e 35 7d 20 74 68 65 6e 20 7b 0d 0a 20 20   8.5} then {..  
3530: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
3540: 5b 6c 73 65 61 72 63 68 20 2d 65 78 61 63 74 20  [lsearch -exact 
3550: 2d 6e 6f 63 61 73 65 20 24 72 65 73 75 6c 74 20  -nocase $result 
3560: 24 66 69 6c 65 4e 61 6d 65 5d 20 3d 3d 20 2d 31  $fileName] == -1
3570: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..      
3580: 20 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e            lappen
3590: 64 20 72 65 73 75 6c 74 20 24 66 69 6c 65 4e 61  d result $fileNa
35a0: 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  me..            
35b0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
35c0: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..     
35d0: 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 6c 73           if {[ls
35e0: 65 61 72 63 68 20 2d 65 78 61 63 74 20 5b 73 74  earch -exact [st
35f0: 72 69 6e 67 20 74 6f 6c 6f 77 65 72 20 24 72 65  ring tolower $re
3600: 73 75 6c 74 5d 20 5c 0d 0a 20 20 20 20 20 20 20  sult] \..       
3610: 20 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69             [stri
3620: 6e 67 20 74 6f 6c 6f 77 65 72 20 24 66 69 6c 65  ng tolower $file
3630: 4e 61 6d 65 5d 5d 20 3d 3d 20 2d 31 7d 20 74 68  Name]] == -1} th
3640: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..          
3650: 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65        lappend re
3660: 73 75 6c 74 20 24 66 69 6c 65 4e 61 6d 65 0d 0a  sult $fileName..
3670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
3680: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
3690: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
36a0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d       }..      }.
36b0: 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ...      return 
36c0: 24 72 65 73 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a  $result..    }..
36d0: 20 20 7d 0d 0a 0c 0d 0a 20 20 23 0d 0a 20 20 23    }.....  #..  #
36e0: 20 4e 4f 54 45 3a 20 54 68 69 73 20 70 72 6f 63   NOTE: This proc
36f0: 65 64 75 72 65 20 61 74 74 65 6d 70 74 73 20 74  edure attempts t
3700: 6f 20 63 6f 70 79 20 61 6c 6c 20 66 69 6c 65 73  o copy all files
3710: 20 6d 61 74 63 68 69 6e 67 20 74 68 65 20 73 70   matching the sp
3720: 65 63 69 66 69 65 64 0d 0a 20 20 23 20 20 20 20  ecified..  #    
3730: 20 20 20 73 6f 75 72 63 65 20 64 69 72 65 63 74     source direct
3740: 6f 72 79 20 61 6e 64 20 70 61 74 74 65 72 6e 73  ory and patterns
3750: 20 74 6f 20 74 68 65 20 64 65 73 74 69 6e 61 74   to the destinat
3760: 69 6f 6e 20 64 69 72 65 63 74 6f 72 79 2e 20 20  ion directory.  
3770: 54 68 69 73 0d 0a 20 20 23 20 20 20 20 20 20 20  This..  #       
3780: 70 72 6f 63 65 64 75 72 65 20 6d 61 79 20 72 61  procedure may ra
3790: 69 73 65 20 73 63 72 69 70 74 20 65 72 72 6f 72  ise script error
37a0: 73 2e 0d 0a 20 20 23 0d 0a 20 20 70 72 6f 63 20  s...  #..  proc 
37b0: 63 6f 70 79 46 69 6c 65 73 52 65 63 75 72 73 69  copyFilesRecursi
37c0: 76 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  ve {..          
37d0: 73 6f 75 72 63 65 44 69 72 65 63 74 6f 72 79 20  sourceDirectory 
37e0: 74 61 72 67 65 74 44 69 72 65 63 74 6f 72 79 20  targetDirectory 
37f0: 7b 70 61 74 74 65 72 6e 73 20 22 22 7d 20 7b 6f  {patterns ""} {o
3800: 70 74 69 6f 6e 73 20 22 22 7d 20 7d 20 7b 0d 0a  ptions ""} } {..
3810: 20 20 20 20 23 0d 0a 20 20 20 20 23 20 4e 4f 54      #..    # NOT
3820: 45 3a 20 42 6c 6f 63 6b 20 6e 6f 6e 2d 57 69 6e  E: Block non-Win
3830: 64 6f 77 73 20 70 6c 61 74 66 6f 72 6d 73 20 73  dows platforms s
3840: 69 6e 63 65 20 74 68 69 73 20 69 73 20 57 69 6e  ince this is Win
3850: 64 6f 77 73 20 73 70 65 63 69 66 69 63 2e 0d 0a  dows specific...
3860: 20 20 20 20 23 0d 0a 20 20 20 20 69 66 20 7b 21      #..    if {!
3870: 5b 69 73 57 69 6e 64 6f 77 73 5d 7d 20 74 68 65  [isWindows]} the
3880: 6e 20 7b 0d 0a 20 20 20 20 20 20 65 72 72 6f 72  n {..      error
3890: 20 22 6e 6f 74 20 73 75 70 70 6f 72 74 65 64 20   "not supported 
38a0: 6f 6e 20 74 68 69 73 20 6f 70 65 72 61 74 69 6e  on this operatin
38b0: 67 20 73 79 73 74 65 6d 22 0d 0a 20 20 20 20 7d  g system"..    }
38c0: 0d 0a 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 23  ....    #..    #
38d0: 20 4e 4f 54 45 3a 20 53 74 61 72 74 20 6f 75 74   NOTE: Start out
38e0: 20 77 69 74 68 20 74 68 65 20 5b 65 78 65 63 5d   with the [exec]
38f0: 20 63 6f 6d 6d 61 6e 64 20 61 6e 64 20 74 68 65   command and the
3900: 20 6e 65 63 65 73 73 61 72 79 20 6f 70 74 69 6f   necessary optio
3910: 6e 73 0d 0a 20 20 20 20 23 20 20 20 20 20 20 20  ns..    #       
3920: 74 6f 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2e 0d  to the command..
3930: 0a 20 20 20 20 23 0d 0a 20 20 20 20 69 66 20 7b  .    #..    if {
3940: 5b 69 73 45 61 67 6c 65 5d 7d 20 74 68 65 6e 20  [isEagle]} then 
3950: 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 63 6f 6d  {..      set com
3960: 6d 61 6e 64 20 5b 6c 69 73 74 20 65 78 65 63 20  mand [list exec 
3970: 2d 65 78 69 74 63 6f 64 65 20 65 78 69 74 43 6f  -exitcode exitCo
3980: 64 65 20 2d 2d 20 72 6f 62 6f 63 6f 70 79 5d 0d  de -- robocopy].
3990: 0a 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20  .    } else {.. 
39a0: 20 20 20 20 20 73 65 74 20 63 6f 6d 6d 61 6e 64       set command
39b0: 20 5b 6c 69 73 74 20 65 78 65 63 20 2d 2d 20 72   [list exec -- r
39c0: 6f 62 6f 63 6f 70 79 5d 0d 0a 20 20 20 20 7d 0d  obocopy]..    }.
39d0: 0a 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 23 20  ...    #..    # 
39e0: 4e 4f 54 45 3a 20 41 64 64 20 74 68 65 20 73 6f  NOTE: Add the so
39f0: 75 72 63 65 20 61 6e 64 20 74 61 72 67 65 74 20  urce and target 
3a00: 64 69 72 65 63 74 6f 72 79 20 6e 61 6d 65 73 2e  directory names.
3a10: 20 20 54 68 65 73 65 20 61 72 65 20 61 6c 77 61    These are alwa
3a20: 79 73 0d 0a 20 20 20 20 23 20 20 20 20 20 20 20  ys..    #       
3a30: 72 65 71 75 69 72 65 64 2e 0d 0a 20 20 20 20 23  required...    #
3a40: 0d 0a 20 20 20 20 69 66 20 7b 5b 69 73 45 61 67  ..    if {[isEag
3a50: 6c 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  le]} then {..   
3a60: 20 20 20 6c 61 70 70 65 6e 64 20 63 6f 6d 6d 61     lappend comma
3a70: 6e 64 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  nd [appendArgs \
3a80: 22 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61  " [file nativena
3a90: 6d 65 20 24 73 6f 75 72 63 65 44 69 72 65 63 74  me $sourceDirect
3aa0: 6f 72 79 5d 20 5c 22 5d 0d 0a 20 20 20 20 20 20  ory] \"]..      
3ab0: 6c 61 70 70 65 6e 64 20 63 6f 6d 6d 61 6e 64 20  lappend command 
3ac0: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 22 20 5b  [appendArgs \" [
3ad0: 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20  file nativename 
3ae0: 24 74 61 72 67 65 74 44 69 72 65 63 74 6f 72 79  $targetDirectory
3af0: 5d 20 5c 22 5d 0d 0a 20 20 20 20 7d 20 65 6c 73  ] \"]..    } els
3b00: 65 20 7b 0d 0a 20 20 20 20 20 20 6c 61 70 70 65  e {..      lappe
3b10: 6e 64 20 63 6f 6d 6d 61 6e 64 20 5b 66 69 6c 65  nd command [file
3b20: 20 6e 61 74 69 76 65 6e 61 6d 65 20 24 73 6f 75   nativename $sou
3b30: 72 63 65 44 69 72 65 63 74 6f 72 79 5d 0d 0a 20  rceDirectory].. 
3b40: 20 20 20 20 20 6c 61 70 70 65 6e 64 20 63 6f 6d       lappend com
3b50: 6d 61 6e 64 20 5b 66 69 6c 65 20 6e 61 74 69 76  mand [file nativ
3b60: 65 6e 61 6d 65 20 24 74 61 72 67 65 74 44 69 72  ename $targetDir
3b70: 65 63 74 6f 72 79 5d 0d 0a 20 20 20 20 7d 0d 0a  ectory]..    }..
3b80: 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 23 20 4e  ..    #..    # N
3b90: 4f 54 45 3a 20 49 66 20 74 68 65 72 65 20 61 72  OTE: If there ar
3ba0: 65 20 70 61 74 74 65 72 6e 73 20 73 70 65 63 69  e patterns speci
3bb0: 66 69 65 64 2c 20 61 64 64 20 74 68 65 6d 20 6e  fied, add them n
3bc0: 6f 77 2e 20 20 42 79 20 64 65 66 61 75 6c 74 2c  ow.  By default,
3bd0: 0d 0a 20 20 20 20 23 20 20 20 20 20 20 20 61 6c  ..    #       al
3be0: 6c 20 66 69 6c 65 73 20 61 72 65 20 63 6f 70 69  l files are copi
3bf0: 65 64 20 28 69 2e 65 2e 20 22 2a 2e 2a 22 29 2e  ed (i.e. "*.*").
3c00: 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 69 66 20  ..    #..    if 
3c10: 7b 5b 6c 6c 65 6e 67 74 68 20 24 70 61 74 74 65  {[llength $patte
3c20: 72 6e 73 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b  rns] > 0} then {
3c30: 0d 0a 20 20 20 20 20 20 65 76 61 6c 20 6c 61 70  ..      eval lap
3c40: 70 65 6e 64 20 63 6f 6d 6d 61 6e 64 20 24 70 61  pend command $pa
3c50: 74 74 65 72 6e 73 0d 0a 20 20 20 20 7d 0d 0a 0d  tterns..    }...
3c60: 0a 20 20 20 20 23 0d 0a 20 20 20 20 23 20 4e 4f  .    #..    # NO
3c70: 54 45 3a 20 53 68 6f 75 6c 64 20 74 68 65 20 64  TE: Should the d
3c80: 65 66 61 75 6c 74 20 52 6f 62 6f 63 6f 70 79 20  efault Robocopy 
3c90: 6f 70 74 69 6f 6e 73 20 62 65 20 65 78 63 6c 75  options be exclu
3ca0: 64 65 64 3f 20 20 47 65 6e 65 72 61 6c 6c 79 2c  ded?  Generally,
3cb0: 0d 0a 20 20 20 20 23 20 20 20 20 20 20 20 74 68  ..    #       th
3cc0: 65 73 65 20 6f 70 74 69 6f 6e 73 20 73 68 6f 75  ese options shou
3cd0: 6c 64 20 6e 6f 74 20 62 65 20 65 78 63 6c 75 64  ld not be exclud
3ce0: 65 64 2e 20 20 41 6c 6c 20 6d 61 74 63 68 69 6e  ed.  All matchin
3cf0: 67 20 66 69 6c 65 73 0d 0a 20 20 20 20 23 20 20  g files..    #  
3d00: 20 20 20 20 20 61 72 65 20 63 6f 70 69 65 64 2c       are copied,
3d10: 20 75 73 69 6e 67 20 72 65 73 74 61 72 74 61 62   using restartab
3d20: 6c 65 20 6d 6f 64 65 2c 20 61 6e 64 20 75 73 69  le mode, and usi
3d30: 6e 67 20 65 78 74 72 61 20 6f 70 74 69 6f 6e 73  ng extra options
3d40: 0d 0a 20 20 20 20 23 20 20 20 20 20 20 20 77 68  ..    #       wh
3d50: 65 6e 20 72 75 6e 6e 69 6e 67 20 61 73 20 61 64  en running as ad
3d60: 6d 69 6e 69 73 74 72 61 74 6f 72 20 74 6f 20 65  ministrator to e
3d70: 6e 61 62 6c 65 20 63 6f 70 79 69 6e 67 20 6d 6f  nable copying mo
3d80: 72 65 20 66 69 6c 65 73 0d 0a 20 20 20 20 23 20  re files..    # 
3d90: 20 20 20 20 20 20 61 6e 64 20 6d 65 74 61 64 61        and metada
3da0: 74 61 2c 20 65 2e 67 2e 20 75 73 69 6e 67 20 62  ta, e.g. using b
3db0: 61 63 6b 75 70 20 6d 6f 64 65 20 61 6e 64 20 63  ackup mode and c
3dc0: 6f 70 79 69 6e 67 20 74 68 65 20 65 78 74 72 61  opying the extra
3dd0: 0d 0a 20 20 20 20 23 20 20 20 20 20 20 20 66 69  ..    #       fi
3de0: 6c 65 20 73 65 63 75 72 69 74 79 20 69 6e 66 6f  le security info
3df0: 72 6d 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 23 0d  rmation...    #.
3e00: 0a 20 20 20 20 69 66 20 7b 5b 6c 73 65 61 72 63  .    if {[lsearc
3e10: 68 20 2d 65 78 61 63 74 20 24 6f 70 74 69 6f 6e  h -exact $option
3e20: 73 20 2d 6e 6f 63 6f 70 79 6f 70 74 73 5d 20 3d  s -nocopyopts] =
3e30: 3d 20 2d 31 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  = -1} then {..  
3e40: 20 20 20 20 6c 61 70 70 65 6e 64 20 63 6f 6d 6d      lappend comm
3e50: 61 6e 64 20 2f 45 0d 0a 0d 0a 20 20 20 20 20 20  and /E....      
3e60: 69 66 20 7b 5b 69 73 45 61 67 6c 65 5d 20 26 26  if {[isEagle] &&
3e70: 20 5b 69 73 41 64 6d 69 6e 69 73 74 72 61 74 6f   [isAdministrato
3e80: 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  r]} then {..    
3e90: 20 20 20 20 6c 61 70 70 65 6e 64 20 63 6f 6d 6d      lappend comm
3ea0: 61 6e 64 20 2f 5a 42 20 2f 43 4f 50 59 41 4c 4c  and /ZB /COPYALL
3eb0: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b  ..      } else {
3ec0: 0d 0a 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e  ..        lappen
3ed0: 64 20 63 6f 6d 6d 61 6e 64 20 2f 5a 0d 0a 20 20  d command /Z..  
3ee0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 6c      }....      l
3ef0: 61 70 70 65 6e 64 20 63 6f 6d 6d 61 6e 64 20 2f  append command /
3f00: 44 43 4f 50 59 3a 54 0d 0a 20 20 20 20 7d 0d 0a  DCOPY:T..    }..
3f10: 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 23 20 4e  ..    #..    # N
3f20: 4f 54 45 3a 20 53 68 6f 75 6c 64 20 77 65 20 6f  OTE: Should we o
3f30: 76 65 72 72 69 64 65 20 74 68 65 20 64 65 66 61  verride the defa
3f40: 75 6c 74 20 6e 75 6d 62 65 72 20 6f 66 20 72 65  ult number of re
3f50: 74 72 69 65 73 20 70 65 72 20 66 69 6c 65 3f 0d  tries per file?.
3f60: 0a 20 20 20 20 23 20 20 20 20 20 20 20 49 66 20  .    #       If 
3f70: 6e 6f 20 72 65 74 72 79 20 72 65 6c 61 74 65 64  no retry related
3f80: 20 6f 70 74 69 6f 6e 20 69 73 20 66 6f 75 6e 64   option is found
3f90: 2c 20 74 68 65 20 52 6f 62 6f 63 6f 70 79 20 64  , the Robocopy d
3fa0: 65 66 61 75 6c 74 0d 0a 20 20 20 20 23 20 20 20  efault..    #   
3fb0: 20 20 20 20 62 65 68 61 76 69 6f 72 20 77 69 6c      behavior wil
3fc0: 6c 20 62 65 20 75 73 65 64 20 28 69 2e 65 2e 20  l be used (i.e. 
3fd0: 31 20 6d 69 6c 6c 69 6f 6e 20 72 65 74 72 69 65  1 million retrie
3fe0: 73 20 70 65 72 20 66 69 6c 65 29 2e 0d 0a 20 20  s per file)...  
3ff0: 20 20 23 0d 0a 20 20 20 20 69 66 20 7b 5b 73 65    #..    if {[se
4000: 74 20 69 6e 64 65 78 20 5b 6c 73 65 61 72 63 68  t index [lsearch
4010: 20 2d 67 6c 6f 62 20 24 6f 70 74 69 6f 6e 73 20   -glob $options 
4020: 2d 72 65 74 72 69 65 73 3a 2a 5d 5d 20 21 3d 20  -retries:*]] != 
4030: 2d 31 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  -1} then {..    
4040: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
4050: 45 3a 20 47 72 61 62 20 74 68 65 20 72 65 74 72  E: Grab the retr
4060: 79 20 6f 70 74 69 6f 6e 20 6e 61 6d 65 2f 76 61  y option name/va
4070: 6c 75 65 20 66 72 6f 6d 20 74 68 65 20 6c 69 73  lue from the lis
4080: 74 20 6f 66 20 6f 70 74 69 6f 6e 73 0d 0a 20 20  t of options..  
4090: 20 20 20 20 23 20 20 20 20 20 20 20 61 6e 64 20      #       and 
40a0: 61 74 74 65 6d 70 74 20 74 6f 20 65 78 74 72 61  attempt to extra
40b0: 63 74 20 74 68 65 20 69 6e 74 65 67 65 72 20 6e  ct the integer n
40c0: 75 6d 62 65 72 20 6f 66 20 72 65 74 72 69 65 73  umber of retries
40d0: 20 66 72 6f 6d 0d 0a 20 20 20 20 20 20 23 20 20   from..      #  
40e0: 20 20 20 20 20 69 74 2e 0d 0a 20 20 20 20 20 20       it...      
40f0: 23 0d 0a 20 20 20 20 20 20 73 65 74 20 76 61 6c  #..      set val
4100: 75 65 20 5b 6c 69 6e 64 65 78 20 24 6f 70 74 69  ue [lindex $opti
4110: 6f 6e 73 20 24 69 6e 64 65 78 5d 0d 0a 0d 0a 20  ons $index].... 
4120: 20 20 20 20 20 69 66 20 7b 5b 72 65 67 65 78 70       if {[regexp
4130: 20 2d 2d 20 7b 5e 2d 72 65 74 72 69 65 73 3a 28   -- {^-retries:(
4140: 5c 64 2b 29 24 7d 20 24 76 61 6c 75 65 20 64 75  \d+)$} $value du
4150: 6d 6d 79 20 72 65 74 72 69 65 73 5d 20 26 26 20  mmy retries] && 
4160: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74  \..          [st
4170: 72 69 6e 67 20 69 73 20 69 6e 74 65 67 65 72 20  ring is integer 
4180: 2d 73 74 72 69 63 74 20 24 72 65 74 72 69 65 73  -strict $retries
4190: 5d 20 26 26 20 24 72 65 74 72 69 65 73 20 3e 3d  ] && $retries >=
41a0: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..    
41b0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
41c0: 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 73   NOTE: Use the s
41d0: 70 65 63 69 66 69 65 64 20 6e 75 6d 62 65 72 20  pecified number 
41e0: 6f 66 20 72 65 74 72 69 65 73 2e 20 20 54 68 69  of retries.  Thi
41f0: 73 20 76 61 6c 75 65 20 77 69 6c 6c 0d 0a 20 20  s value will..  
4200: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 65        #       be
4210: 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72   greater than or
4220: 20 65 71 75 61 6c 20 74 6f 20 7a 65 72 6f 20 61   equal to zero a
4230: 6e 64 20 77 69 74 68 69 6e 20 74 68 65 20 72 61  nd within the ra
4240: 6e 67 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20  nge..        #  
4250: 20 20 20 20 20 6f 66 20 61 20 33 32 2d 62 69 74       of a 32-bit
4260: 20 69 6e 74 65 67 65 72 2e 0d 0a 20 20 20 20 20   integer...     
4270: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 6c 61     #..        la
4280: 70 70 65 6e 64 20 63 6f 6d 6d 61 6e 64 20 5b 61  ppend command [a
4290: 70 70 65 6e 64 41 72 67 73 20 2f 52 3a 20 24 72  ppendArgs /R: $r
42a0: 65 74 72 69 65 73 5d 0d 0a 20 20 20 20 20 20 7d  etries]..      }
42b0: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..       
42c0: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
42d0: 54 45 3a 20 54 68 65 20 73 70 65 63 69 66 69 65  TE: The specifie
42e0: 64 20 6e 75 6d 62 65 72 20 6f 66 20 72 65 74 72  d number of retr
42f0: 69 65 73 20 69 73 20 73 6f 6d 65 68 6f 77 20 69  ies is somehow i
4300: 6e 76 61 6c 69 64 2e 0d 0a 20 20 20 20 20 20 20  nvalid...       
4310: 20 23 0d 0a 20 20 20 20 20 20 20 20 65 72 72 6f   #..        erro
4320: 72 20 22 6e 75 6d 62 65 72 20 6f 66 20 72 65 74  r "number of ret
4330: 72 69 65 73 20 6d 75 73 74 20 62 65 20 61 20 70  ries must be a p
4340: 6f 73 69 74 69 76 65 20 69 6e 74 65 67 65 72 22  ositive integer"
4350: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
4360: 20 65 6c 73 65 69 66 20 7b 5b 6c 73 65 61 72 63   elseif {[lsearc
4370: 68 20 2d 65 78 61 63 74 20 24 6f 70 74 69 6f 6e  h -exact $option
4380: 73 20 2d 72 65 74 72 79 5d 20 3d 3d 20 2d 31 7d  s -retry] == -1}
4390: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 23   then {..      #
43a0: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE: 
43b0: 46 61 6c 6c 62 61 63 6b 20 74 6f 20 73 65 74 74  Fallback to sett
43c0: 69 6e 67 20 72 65 74 72 79 20 63 6f 75 6e 74 20  ing retry count 
43d0: 74 6f 20 7a 65 72 6f 2c 20 77 68 69 63 68 20 69  to zero, which i
43e0: 73 20 75 73 65 64 0d 0a 20 20 20 20 20 20 23 20  s used..      # 
43f0: 20 20 20 20 20 20 74 6f 20 64 69 73 61 62 6c 65        to disable
4400: 20 70 65 72 2d 66 69 6c 65 20 72 65 74 72 69 65   per-file retrie
4410: 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  s...      #..   
4420: 20 20 20 6c 61 70 70 65 6e 64 20 63 6f 6d 6d 61     lappend comma
4430: 6e 64 20 2f 52 3a 30 0d 0a 20 20 20 20 7d 0d 0a  nd /R:0..    }..
4440: 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 23 20 4e  ..    #..    # N
4450: 4f 54 45 3a 20 42 79 20 64 65 66 61 75 6c 74 2c  OTE: By default,
4460: 20 64 6f 20 6e 6f 74 20 70 72 6f 63 65 73 73 20   do not process 
4470: 66 69 6c 65 20 73 79 73 74 65 6d 20 6a 75 6e 63  file system junc
4480: 74 69 6f 6e 73 2e 20 20 54 68 69 73 0d 0a 20 20  tions.  This..  
4490: 20 20 23 20 20 20 20 20 20 20 69 73 20 75 73 65    #       is use
44a0: 64 20 74 6f 20 61 76 6f 69 64 20 74 68 65 20 70  d to avoid the p
44b0: 6f 73 73 69 62 69 6c 69 74 79 20 6f 66 20 69 6e  ossibility of in
44c0: 66 69 6e 69 74 65 20 6c 6f 6f 70 73 20 77 68 65  finite loops whe
44d0: 6e 0d 0a 20 20 20 20 23 20 20 20 20 20 20 20 74  n..    #       t
44e0: 72 61 76 65 72 73 69 6e 67 20 74 68 65 20 66 69  raversing the fi
44f0: 6c 65 20 73 79 73 74 65 6d 20 28 69 2e 65 2e 20  le system (i.e. 
4500: 62 65 63 61 75 73 65 20 69 74 20 69 73 20 74 72  because it is tr
4510: 69 76 69 61 6c 0d 0a 20 20 20 20 23 20 20 20 20  ivial..    #    
4520: 20 20 20 74 6f 20 75 74 69 6c 69 7a 65 20 66 69     to utilize fi
4530: 6c 65 20 73 79 73 74 65 6d 20 6a 75 6e 63 74 69  le system juncti
4540: 6f 6e 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  ons in order to 
4550: 63 6f 6e 73 74 72 75 63 74 0d 0a 20 20 20 20 23  construct..    #
4560: 20 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 79         directory
4570: 20 74 72 65 65 73 20 74 68 61 74 20 6c 6f 6f 70   trees that loop
4580: 20 62 61 63 6b 20 75 70 6f 6e 20 74 68 65 6d 73   back upon thems
4590: 65 6c 76 65 73 29 2e 0d 0a 20 20 20 20 23 0d 0a  elves)...    #..
45a0: 20 20 20 20 69 66 20 7b 5b 6c 73 65 61 72 63 68      if {[lsearch
45b0: 20 2d 65 78 61 63 74 20 24 6f 70 74 69 6f 6e 73   -exact $options
45c0: 20 2d 6a 75 6e 63 74 69 6f 6e 73 5d 20 3d 3d 20   -junctions] == 
45d0: 2d 31 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  -1} then {..    
45e0: 20 20 6c 61 70 70 65 6e 64 20 63 6f 6d 6d 61 6e    lappend comman
45f0: 64 20 2f 58 4a 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  d /XJ..    }....
4600: 20 20 20 20 23 0d 0a 20 20 20 20 23 20 4e 4f 54      #..    # NOT
4610: 45 3a 20 42 79 20 64 65 66 61 75 6c 74 2c 20 64  E: By default, d
4620: 6f 20 6e 6f 74 20 70 75 72 67 65 20 61 6e 79 20  o not purge any 
4630: 66 69 6c 65 73 20 74 68 61 74 20 68 61 70 70 65  files that happe
4640: 6e 20 74 6f 20 62 65 20 69 6e 0d 0a 20 20 20 20  n to be in..    
4650: 23 20 20 20 20 20 20 20 74 68 65 20 74 61 72 67  #       the targ
4660: 65 74 20 64 69 72 65 63 74 6f 72 79 2e 0d 0a 20  et directory... 
4670: 20 20 20 23 0d 0a 20 20 20 20 69 66 20 7b 5b 6c     #..    if {[l
4680: 73 65 61 72 63 68 20 2d 65 78 61 63 74 20 24 6f  search -exact $o
4690: 70 74 69 6f 6e 73 20 2d 70 75 72 67 65 5d 20 21  ptions -purge] !
46a0: 3d 20 2d 31 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  = -1} then {..  
46b0: 20 20 20 20 6c 61 70 70 65 6e 64 20 63 6f 6d 6d      lappend comm
46c0: 61 6e 64 20 2f 50 55 52 47 45 0d 0a 20 20 20 20  and /PURGE..    
46d0: 7d 0d 0a 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20  }....    #..    
46e0: 23 20 4e 4f 54 45 3a 20 42 79 20 64 65 66 61 75  # NOTE: By defau
46f0: 6c 74 2c 20 64 6f 20 6e 6f 74 20 70 72 6f 64 75  lt, do not produ
4700: 63 65 20 61 20 76 65 72 62 6f 73 65 20 6c 6f 67  ce a verbose log
4710: 20 66 69 6c 65 73 20 69 6e 20 74 68 65 0d 0a 20   files in the.. 
4720: 20 20 20 23 20 20 20 20 20 20 20 74 65 6d 70 6f     #       tempo
4730: 72 61 72 79 20 64 69 72 65 63 74 6f 72 79 2e 0d  rary directory..
4740: 0a 20 20 20 20 23 0d 0a 20 20 20 20 69 66 20 7b  .    #..    if {
4750: 5b 6c 73 65 61 72 63 68 20 2d 65 78 61 63 74 20  [lsearch -exact 
4760: 24 6f 70 74 69 6f 6e 73 20 2d 6c 6f 67 67 69 6e  $options -loggin
4770: 67 5d 20 21 3d 20 2d 31 7d 20 74 68 65 6e 20 7b  g] != -1} then {
4780: 0d 0a 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20  ..      lappend 
4790: 63 6f 6d 6d 61 6e 64 20 2f 58 20 2f 56 20 2f 46  command /X /V /F
47a0: 50 20 2f 4e 50 0d 0a 0d 0a 20 20 20 20 20 20 70  P /NP....      p
47b0: 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 45  ackage require E
47c0: 61 67 6c 65 2e 54 65 73 74 0d 0a 20 20 20 20 20  agle.Test..     
47d0: 20 73 65 74 20 6c 6f 67 46 69 6c 65 4e 61 6d 65   set logFileName
47e0: 20 5b 67 65 74 54 65 6d 70 6f 72 61 72 79 46 69   [getTemporaryFi
47f0: 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20  leName]....     
4800: 20 69 66 20 7b 5b 69 73 45 61 67 6c 65 5d 7d 20   if {[isEagle]} 
4810: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..        
4820: 6c 61 70 70 65 6e 64 20 63 6f 6d 6d 61 6e 64 20  lappend command 
4830: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \.. 
4840: 20 20 20 20 20 20 20 20 20 20 20 5c 22 2f 4c 4f             \"/LO
4850: 47 3a 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e  G: [file nativen
4860: 61 6d 65 20 24 6c 6f 67 46 69 6c 65 4e 61 6d 65  ame $logFileName
4870: 5d 20 5c 22 5d 0d 0a 20 20 20 20 20 20 7d 20 65  ] \"]..      } e
4880: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 6c  lse {..        l
4890: 61 70 70 65 6e 64 20 63 6f 6d 6d 61 6e 64 20 5b  append command [
48a0: 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..  
48b0: 20 20 20 20 20 20 20 20 20 20 2f 4c 4f 47 3a 20            /LOG: 
48c0: 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65  [file nativename
48d0: 20 24 6c 6f 67 46 69 6c 65 4e 61 6d 65 5d 5d 0d   $logFileName]].
48e0: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
48f0: 0a 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 23 20  ...    #..    # 
4900: 4e 4f 54 45 3a 20 55 70 6f 6e 20 73 75 63 63 65  NOTE: Upon succe
4910: 73 73 2c 20 74 68 65 20 65 78 69 74 20 63 6f 64  ss, the exit cod
4920: 65 20 66 72 6f 6d 20 52 6f 62 6f 63 6f 70 79 20  e from Robocopy 
4930: 77 69 6c 6c 20 62 65 20 62 65 74 77 65 65 6e 0d  will be between.
4940: 0a 20 20 20 20 23 20 20 20 20 20 20 20 7a 65 72  .    #       zer
4950: 6f 20 61 6e 64 20 73 65 76 65 6e 2e 20 20 49 66  o and seven.  If
4960: 20 74 68 65 20 65 78 69 74 20 63 6f 64 65 20 69   the exit code i
4970: 73 20 65 69 67 68 74 20 6f 72 20 67 72 65 61 74  s eight or great
4980: 65 72 2c 20 69 74 0d 0a 20 20 20 20 23 20 20 20  er, it..    #   
4990: 20 20 20 20 68 61 73 20 73 6f 6d 65 68 6f 77 20      has somehow 
49a0: 66 61 69 6c 65 64 20 61 6e 64 20 74 68 61 74 20  failed and that 
49b0: 65 72 72 6f 72 20 6d 75 73 74 20 62 65 20 72 65  error must be re
49c0: 70 6f 72 74 65 64 20 74 6f 20 74 68 65 0d 0a 20  ported to the.. 
49d0: 20 20 20 23 20 20 20 20 20 20 20 63 61 6c 6c 65     #       calle
49e0: 72 20 76 69 61 20 72 61 69 73 69 6e 67 20 61 20  r via raising a 
49f0: 73 63 72 69 70 74 20 65 72 72 6f 72 2e 0d 0a 20  script error... 
4a00: 20 20 20 23 0d 0a 20 20 20 20 69 66 20 7b 5b 69     #..    if {[i
4a10: 73 45 61 67 6c 65 5d 7d 20 74 68 65 6e 20 7b 0d  sEagle]} then {.
4a20: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..      
4a30: 23 20 4e 4f 54 45 3a 20 45 78 65 63 75 74 65 20  # NOTE: Execute 
4a40: 74 68 65 20 72 65 73 75 6c 74 69 6e 67 20 5b 65  the resulting [e
4a50: 78 65 63 5d 20 63 6f 6d 6d 61 6e 64 20 69 6e 20  xec] command in 
4a60: 6f 75 72 20 63 6f 6e 74 65 78 74 20 61 6e 64 0d  our context and.
4a70: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63  .      #       c
4a80: 61 70 74 75 72 65 20 74 68 65 20 72 65 73 75 6c  apture the resul
4a90: 74 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  ts...      #..  
4aa0: 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b      set result [
4ab0: 65 76 61 6c 20 24 63 6f 6d 6d 61 6e 64 5d 0d 0a  eval $command]..
4ac0: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66  ..      if {[inf
4ad0: 6f 20 65 78 69 73 74 73 20 65 78 69 74 43 6f 64  o exists exitCod
4ae0: 65 5d 20 26 26 20 24 65 78 69 74 43 6f 64 65 20  e] && $exitCode 
4af0: 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  in \..          
4b00: 5b 6c 69 73 74 20 53 75 63 63 65 73 73 20 46 61  [list Success Fa
4b10: 69 6c 75 72 65 20 45 78 63 65 70 74 69 6f 6e 20  ilure Exception 
4b20: 30 20 31 20 32 20 33 20 34 20 35 20 36 20 37 5d  0 1 2 3 4 5 6 7]
4b30: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..      
4b40: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
4b50: 4f 54 45 3a 20 52 65 74 75 72 6e 20 74 68 65 20  OTE: Return the 
4b60: 63 61 70 74 75 72 65 64 20 6f 75 74 70 75 74 20  captured output 
4b70: 66 72 6f 6d 20 74 68 65 20 52 6f 62 6f 63 6f 70  from the Robocop
4b80: 79 20 63 6f 6d 6d 61 6e 64 2c 0d 0a 20 20 20 20  y command,..    
4b90: 20 20 20 20 23 20 20 20 20 20 20 20 77 68 61 74      #       what
4ba0: 65 76 65 72 20 69 74 20 77 61 73 2e 20 20 47 65  ever it was.  Ge
4bb0: 6e 65 72 61 6c 6c 79 2c 20 74 68 69 73 20 77 69  nerally, this wi
4bc0: 6c 6c 20 65 69 74 68 65 72 20 62 65 20 74 68 65  ll either be the
4bd0: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #     
4be0: 20 20 73 75 6d 6d 61 72 79 20 61 6e 64 20 64 65    summary and de
4bf0: 74 61 69 6c 73 20 6f 66 20 74 68 65 20 66 69 6c  tails of the fil
4c00: 65 73 20 63 6f 70 69 65 64 20 2d 4f 52 2d 20 74  es copied -OR- t
4c10: 68 65 20 6c 6f 67 0d 0a 20 20 20 20 20 20 20 20  he log..        
4c20: 23 20 20 20 20 20 20 20 66 69 6c 65 20 6e 61 6d  #       file nam
4c30: 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  e...        #.. 
4c40: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 72         return $r
4c50: 65 73 75 6c 74 0d 0a 20 20 20 20 20 20 7d 20 65  esult..      } e
4c60: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  lse {..        #
4c70: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
4c80: 3a 20 52 61 69 73 65 20 61 20 73 63 72 69 70 74  : Raise a script
4c90: 20 65 72 72 6f 72 2c 20 75 73 69 6e 67 20 74 68   error, using th
4ca0: 65 20 63 61 70 74 75 72 65 64 20 65 72 72 6f 72  e captured error
4cb0: 73 20 66 72 6f 6d 0d 0a 20 20 20 20 20 20 20 20  s from..        
4cc0: 23 20 20 20 20 20 20 20 74 68 65 20 52 6f 62 6f  #       the Robo
4cd0: 63 6f 70 79 20 63 6f 6d 6d 61 6e 64 2c 20 77 68  copy command, wh
4ce0: 61 74 65 76 65 72 20 69 74 20 77 61 73 2e 0d 0a  atever it was...
4cf0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..     
4d00: 20 20 20 65 72 72 6f 72 20 5b 61 70 70 65 6e 64     error [append
4d10: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..        
4d20: 20 20 20 20 22 63 6f 6d 6d 61 6e 64 20 5c 22 22      "command \""
4d30: 20 24 63 6f 6d 6d 61 6e 64 20 22 5c 22 20 65 72   $command "\" er
4d40: 72 6f 72 3a 20 22 20 24 72 65 73 75 6c 74 5d 0d  ror: " $result].
4d50: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 20  .      }..    } 
4d60: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 23 0d  else {..      #.
4d70: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 45  .      # NOTE: E
4d80: 78 65 63 75 74 65 20 74 68 65 20 72 65 73 75 6c  xecute the resul
4d90: 74 69 6e 67 20 5b 65 78 65 63 5d 20 63 6f 6d 6d  ting [exec] comm
4da0: 61 6e 64 20 69 6e 20 6f 75 72 20 63 6f 6e 74 65  and in our conte
4db0: 78 74 20 61 6e 64 0d 0a 20 20 20 20 20 20 23 20  xt and..      # 
4dc0: 20 20 20 20 20 20 63 61 70 74 75 72 65 20 74 68        capture th
4dd0: 65 20 72 65 73 75 6c 74 73 2e 0d 0a 20 20 20 20  e results...    
4de0: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b    #..      if {[
4df0: 63 61 74 63 68 20 24 63 6f 6d 6d 61 6e 64 20 72  catch $command r
4e00: 65 73 75 6c 74 5d 20 3d 3d 20 30 20 7c 7c 20 28  esult] == 0 || (
4e10: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 65  [info exists ::e
4e20: 72 72 6f 72 43 6f 64 65 5d 20 26 26 20 5c 0d 0a  rrorCode] && \..
4e30: 20 20 20 20 20 20 20 20 20 20 5b 6d 61 79 62 65            [maybe
4e40: 47 65 74 45 78 69 74 43 6f 64 65 20 24 3a 3a 65  GetExitCode $::e
4e50: 72 72 6f 72 43 6f 64 65 20 38 5d 20 3c 20 38 29  rrorCode 8] < 8)
4e60: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..      
4e70: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
4e80: 4f 54 45 3a 20 52 65 74 75 72 6e 20 74 68 65 20  OTE: Return the 
4e90: 63 61 70 74 75 72 65 64 20 6f 75 74 70 75 74 20  captured output 
4ea0: 66 72 6f 6d 20 74 68 65 20 52 6f 62 6f 63 6f 70  from the Robocop
4eb0: 79 20 63 6f 6d 6d 61 6e 64 2c 0d 0a 20 20 20 20  y command,..    
4ec0: 20 20 20 20 23 20 20 20 20 20 20 20 77 68 61 74      #       what
4ed0: 65 76 65 72 20 69 74 20 77 61 73 2e 20 20 47 65  ever it was.  Ge
4ee0: 6e 65 72 61 6c 6c 79 2c 20 74 68 69 73 20 77 69  nerally, this wi
4ef0: 6c 6c 20 65 69 74 68 65 72 20 62 65 20 74 68 65  ll either be the
4f00: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #     
4f10: 20 20 73 75 6d 6d 61 72 79 20 61 6e 64 20 64 65    summary and de
4f20: 74 61 69 6c 73 20 6f 66 20 74 68 65 20 66 69 6c  tails of the fil
4f30: 65 73 20 63 6f 70 69 65 64 20 2d 4f 52 2d 20 74  es copied -OR- t
4f40: 68 65 20 6c 6f 67 0d 0a 20 20 20 20 20 20 20 20  he log..        
4f50: 23 20 20 20 20 20 20 20 66 69 6c 65 20 6e 61 6d  #       file nam
4f60: 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  e...        #.. 
4f70: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 72         return $r
4f80: 65 73 75 6c 74 0d 0a 20 20 20 20 20 20 7d 20 65  esult..      } e
4f90: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  lse {..        #
4fa0: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
4fb0: 3a 20 52 61 69 73 65 20 61 20 73 63 72 69 70 74  : Raise a script
4fc0: 20 65 72 72 6f 72 2c 20 75 73 69 6e 67 20 74 68   error, using th
4fd0: 65 20 63 61 70 74 75 72 65 64 20 65 72 72 6f 72  e captured error
4fe0: 73 20 66 72 6f 6d 0d 0a 20 20 20 20 20 20 20 20  s from..        
4ff0: 23 20 20 20 20 20 20 20 74 68 65 20 52 6f 62 6f  #       the Robo
5000: 63 6f 70 79 20 63 6f 6d 6d 61 6e 64 2c 20 77 68  copy command, wh
5010: 61 74 65 76 65 72 20 69 74 20 77 61 73 2e 0d 0a  atever it was...
5020: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..     
5030: 20 20 20 65 72 72 6f 72 20 5b 61 70 70 65 6e 64     error [append
5040: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..        
5050: 20 20 20 20 22 63 6f 6d 6d 61 6e 64 20 5c 22 22      "command \""
5060: 20 24 63 6f 6d 6d 61 6e 64 20 22 5c 22 20 65 72   $command "\" er
5070: 72 6f 72 3a 20 22 20 24 72 65 73 75 6c 74 5d 0d  ror: " $result].
5080: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
5090: 0a 20 20 7d 0d 0a 0c 0d 0a 20 20 23 0d 0a 20 20  .  }.....  #..  
50a0: 23 20 4e 4f 54 45 3a 20 50 72 6f 76 69 64 65 20  # NOTE: Provide 
50b0: 74 68 65 20 45 61 67 6c 65 20 22 66 69 6c 65 20  the Eagle "file 
50c0: 66 69 6e 64 65 72 22 20 70 61 63 6b 61 67 65 20  finder" package 
50d0: 74 6f 20 74 68 65 20 69 6e 74 65 72 70 72 65 74  to the interpret
50e0: 65 72 2e 0d 0a 20 20 23 0d 0a 20 20 70 61 63 6b  er...  #..  pack
50f0: 61 67 65 20 70 72 6f 76 69 64 65 20 45 61 67 6c  age provide Eagl
5100: 65 2e 46 69 6c 65 2e 46 69 6e 64 65 72 20 5c 0d  e.File.Finder \.
5110: 0a 20 20 20 20 5b 65 78 70 72 20 7b 5b 69 73 45  .    [expr {[isE
5120: 61 67 6c 65 5d 20 3f 20 5b 69 6e 66 6f 20 65 6e  agle] ? [info en
5130: 67 69 6e 65 20 50 61 74 63 68 4c 65 76 65 6c 5d  gine PatchLevel]
5140: 20 3a 20 22 31 2e 30 22 7d 5d 0d 0a 7d 0d 0a 0c   : "1.0"}]..}...