System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact ef7735137ba554231f3e4ddb170a3f05d926a5d9:


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 69 6e 66 6f 2e 65 61 67 6c 65  .#..# info.eagle
0060: 20 2d 2d 0d 0a 23 0d 0a 23 20 45 78 74 65 6e 73   --..#..# Extens
0070: 69 62 6c 65 20 41 64 61 70 74 61 62 6c 65 20 47  ible Adaptable G
0080: 65 6e 65 72 61 6c 69 7a 65 64 20 4c 6f 67 69 63  eneralized Logic
0090: 20 45 6e 67 69 6e 65 20 28 45 61 67 6c 65 29 0d   Engine (Eagle).
00a0: 0a 23 20 45 61 67 6c 65 20 49 6e 66 6f 72 6d 61  .# Eagle Informa
00b0: 74 69 6f 6e 20 50 61 63 6b 61 67 65 20 46 69 6c  tion Package Fil
00c0: 65 0d 0a 23 0d 0a 23 20 43 6f 70 79 72 69 67 68  e..#..# Copyrigh
00d0: 74 20 28 63 29 20 32 30 30 37 2d 32 30 31 32 20  t (c) 2007-2012 
00e0: 62 79 20 4a 6f 65 20 4d 69 73 74 61 63 68 6b 69  by Joe Mistachki
00f0: 6e 2e 20 20 41 6c 6c 20 72 69 67 68 74 73 20 72  n.  All rights r
0100: 65 73 65 72 76 65 64 2e 0d 0a 23 0d 0a 23 20 53  eserved...#..# S
0110: 65 65 20 74 68 65 20 66 69 6c 65 20 22 6c 69 63  ee the file "lic
0120: 65 6e 73 65 2e 74 65 72 6d 73 22 20 66 6f 72 20  ense.terms" for 
0130: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6f 6e 20 75  information on u
0140: 73 61 67 65 20 61 6e 64 20 72 65 64 69 73 74 72  sage and redistr
0150: 69 62 75 74 69 6f 6e 20 6f 66 0d 0a 23 20 74 68  ibution of..# th
0160: 69 73 20 66 69 6c 65 2c 20 61 6e 64 20 66 6f 72  is file, and for
0170: 20 61 20 44 49 53 43 4c 41 49 4d 45 52 20 4f 46   a DISCLAIMER OF
0180: 20 41 4c 4c 20 57 41 52 52 41 4e 54 49 45 53 2e   ALL WARRANTIES.
0190: 0d 0a 23 0d 0a 23 20 52 43 53 3a 20 40 28 23 29  ..#..# RCS: @(#)
01a0: 20 24 49 64 3a 20 24 0d 0a 23 0d 0a 23 23 23 23   $Id: $..#..####
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 23 23 23 23 0d 0a 0d 0a 23  ###########....#
0200: 0d 0a 23 20 4e 4f 54 45 3a 20 55 73 65 20 6f 75  ..# NOTE: Use ou
0210: 72 20 6f 77 6e 20 6e 61 6d 65 73 70 61 63 65 20  r own namespace 
0220: 68 65 72 65 20 62 65 63 61 75 73 65 20 65 76 65  here because eve
0230: 6e 20 74 68 6f 75 67 68 20 77 65 20 64 6f 20 6e  n though we do n
0240: 6f 74 20 64 69 72 65 63 74 6c 79 0d 0a 23 20 20  ot directly..#  
0250: 20 20 20 20 20 73 75 70 70 6f 72 74 20 6e 61 6d       support nam
0260: 65 73 70 61 63 65 73 20 6f 75 72 73 65 6c 76 65  espaces ourselve
0270: 73 2c 20 77 65 20 64 6f 20 6e 6f 74 20 77 61 6e  s, we do not wan
0280: 74 20 74 6f 20 70 6f 6c 6c 75 74 65 20 74 68 65  t to pollute the
0290: 20 67 6c 6f 62 61 6c 0d 0a 23 20 20 20 20 20 20   global..#      
02a0: 20 6e 61 6d 65 73 70 61 63 65 20 69 66 20 74 68   namespace if th
02b0: 69 73 20 73 63 72 69 70 74 20 61 63 74 75 61 6c  is script actual
02c0: 6c 79 20 65 6e 64 73 20 75 70 20 62 65 69 6e 67  ly ends up being
02d0: 20 65 76 61 6c 75 61 74 65 64 20 69 6e 20 54 63   evaluated in Tc
02e0: 6c 2e 0d 0a 23 0d 0a 6e 61 6d 65 73 70 61 63 65  l...#..namespace
02f0: 20 65 76 61 6c 20 3a 3a 45 61 67 6c 65 20 7b 0d   eval ::Eagle {.
0300: 0a 20 20 23 0d 0a 20 20 23 20 4e 4f 54 45 3a 20  .  #..  # NOTE: 
0310: 54 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 72  This procedure r
0320: 65 74 75 72 6e 73 20 74 68 65 20 6c 69 73 74 20  eturns the list 
0330: 6f 66 20 6f 70 74 69 6f 6e 73 20 74 68 61 74 20  of options that 
0340: 77 65 72 65 20 75 73 65 64 20 77 68 65 6e 0d 0a  were used when..
0350: 20 20 23 20 20 20 20 20 20 20 63 6f 6d 70 69 6c    #       compil
0360: 69 6e 67 20 74 68 65 20 45 61 67 6c 65 20 63 6f  ing the Eagle co
0370: 72 65 20 6c 69 62 72 61 72 79 2e 0d 0a 20 20 23  re library...  #
0380: 0d 0a 20 20 70 72 6f 63 20 67 65 74 43 6f 6d 70  ..  proc getComp
0390: 69 6c 65 49 6e 66 6f 20 7b 7d 20 7b 0d 0a 20 20  ileInfo {} {..  
03a0: 20 20 23 0d 0a 20 20 20 20 23 20 4e 4f 54 45 3a    #..    # NOTE:
03b0: 20 52 65 74 75 72 6e 20 74 68 65 20 69 6d 70 6f   Return the impo
03c0: 72 74 61 6e 74 20 63 6f 6d 70 69 6c 65 2d 74 69  rtant compile-ti
03d0: 6d 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66  me information f
03e0: 6f 72 20 75 73 65 20 62 79 20 74 68 65 0d 0a 20  or use by the.. 
03f0: 20 20 20 23 20 20 20 20 20 20 20 73 65 74 75 70     #       setup
0400: 20 6f 72 20 6f 74 68 65 72 20 63 61 6c 6c 65 72   or other caller
0410: 73 2e 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 72  s...    #..    r
0420: 65 74 75 72 6e 20 5b 65 78 70 72 20 7b 5b 69 73  eturn [expr {[is
0430: 45 61 67 6c 65 5d 20 3f 20 5b 6c 61 70 70 65 6e  Eagle] ? [lappen
0440: 64 20 72 65 73 75 6c 74 20 5c 0d 0a 20 20 20 20  d result \..    
0450: 20 20 20 20 54 69 6d 65 53 74 61 6d 70 20 24 3a      TimeStamp $:
0460: 3a 65 61 67 6c 65 5f 70 6c 61 74 66 6f 72 6d 28  :eagle_platform(
0470: 74 69 6d 65 53 74 61 6d 70 29 20 5c 0d 0a 20 20  timeStamp) \..  
0480: 20 20 20 20 20 20 49 6d 61 67 65 52 75 6e 74 69        ImageRunti
0490: 6d 65 56 65 72 73 69 6f 6e 20 24 3a 3a 65 61 67  meVersion $::eag
04a0: 6c 65 5f 70 6c 61 74 66 6f 72 6d 28 69 6d 61 67  le_platform(imag
04b0: 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29  eRuntimeVersion)
04c0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 4d 6f 64 75   \..        Modu
04d0: 6c 65 56 65 72 73 69 6f 6e 49 64 20 24 3a 3a 65  leVersionId $::e
04e0: 61 67 6c 65 5f 70 6c 61 74 66 6f 72 6d 28 6d 6f  agle_platform(mo
04f0: 64 75 6c 65 56 65 72 73 69 6f 6e 49 64 29 20 5c  duleVersionId) \
0500: 0d 0a 20 20 20 20 20 20 20 20 43 6f 6d 70 69 6c  ..        Compil
0510: 65 4f 70 74 69 6f 6e 73 20 24 3a 3a 65 61 67 6c  eOptions $::eagl
0520: 65 5f 70 6c 61 74 66 6f 72 6d 28 63 6f 6d 70 69  e_platform(compi
0530: 6c 65 4f 70 74 69 6f 6e 73 29 5d 20 3a 20 22 22  leOptions)] : ""
0540: 7d 5d 0d 0a 20 20 7d 0d 0a 0c 0d 0a 20 20 23 0d  }]..  }.....  #.
0550: 0a 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20  .  # NOTE: This 
0560: 70 72 6f 63 65 64 75 72 65 20 72 65 74 75 72 6e  procedure return
0570: 73 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  s the specified 
0580: 45 61 67 6c 65 20 70 6c 61 74 66 6f 72 6d 20 69  Eagle platform i
0590: 6e 66 6f 72 6d 61 74 69 6f 6e 2c 0d 0a 20 20 23  nformation,..  #
05a0: 20 20 20 20 20 20 20 69 66 20 61 76 61 69 6c 61         if availa
05b0: 62 6c 65 3b 20 6f 74 68 65 72 77 69 73 65 20 61  ble; otherwise a
05c0: 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 69   default value i
05d0: 73 20 72 65 74 75 72 6e 65 64 20 69 6e 73 74 65  s returned inste
05e0: 61 64 2e 0d 0a 20 20 23 0d 0a 20 20 70 72 6f 63  ad...  #..  proc
05f0: 20 67 65 74 50 6c 61 74 66 6f 72 6d 49 6e 66 6f   getPlatformInfo
0600: 20 7b 20 6e 61 6d 65 20 7b 64 65 66 61 75 6c 74   { name {default
0610: 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 23 0d   ""} } {..    #.
0620: 0a 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 74  .    # NOTE: Ret
0630: 75 72 6e 20 74 68 65 20 69 6d 70 6f 72 74 61 6e  urn the importan
0640: 74 20 70 6c 61 74 66 6f 72 6d 20 69 6e 66 6f 72  t platform infor
0650: 6d 61 74 69 6f 6e 20 66 6f 72 20 75 73 65 20 62  mation for use b
0660: 79 20 74 68 65 20 74 65 73 74 0d 0a 20 20 20 20  y the test..    
0670: 23 20 20 20 20 20 20 20 73 75 69 74 65 20 6f 72  #       suite or
0680: 20 6f 74 68 65 72 20 63 61 6c 6c 65 72 73 2e 0d   other callers..
0690: 0a 20 20 20 20 23 0d 0a 20 20 20 20 72 65 74 75  .    #..    retu
06a0: 72 6e 20 5b 65 78 70 72 20 7b 5b 69 73 45 61 67  rn [expr {[isEag
06b0: 6c 65 5d 20 26 26 20 5b 69 6e 66 6f 20 65 78 69  le] && [info exi
06c0: 73 74 73 20 3a 3a 65 61 67 6c 65 5f 70 6c 61 74  sts ::eagle_plat
06d0: 66 6f 72 6d 28 24 6e 61 6d 65 29 5d 20 26 26 20  form($name)] && 
06e0: 5c 0d 0a 20 20 20 20 20 20 20 20 5b 73 74 72 69  \..        [stri
06f0: 6e 67 20 6c 65 6e 67 74 68 20 5b 73 74 72 69 6e  ng length [strin
0700: 67 20 74 72 69 6d 20 24 3a 3a 65 61 67 6c 65 5f  g trim $::eagle_
0710: 70 6c 61 74 66 6f 72 6d 28 24 6e 61 6d 65 29 5d  platform($name)]
0720: 5d 20 3e 20 30 20 3f 20 5c 0d 0a 20 20 20 20 20  ] > 0 ? \..     
0730: 20 20 20 24 3a 3a 65 61 67 6c 65 5f 70 6c 61 74     $::eagle_plat
0740: 66 6f 72 6d 28 24 6e 61 6d 65 29 20 3a 20 24 64  form($name) : $d
0750: 65 66 61 75 6c 74 7d 5d 0d 0a 20 20 7d 0d 0a 0c  efault}]..  }...
0760: 0d 0a 20 20 23 0d 0a 20 20 23 20 4e 4f 54 45 3a  ..  #..  # NOTE:
0770: 20 54 68 69 73 20 70 72 6f 63 65 64 75 72 65 20   This procedure 
0780: 72 65 74 75 72 6e 73 20 74 68 65 20 6e 61 6d 65  returns the name
0790: 20 6f 66 20 74 68 65 20 66 69 72 73 74 20 6c 6f   of the first lo
07a0: 61 64 65 64 20 70 6c 75 67 69 6e 20 74 68 61 74  aded plugin that
07b0: 0d 0a 20 20 23 20 20 20 20 20 20 20 6d 61 74 63  ..  #       matc
07c0: 68 65 73 20 74 68 65 20 73 70 65 63 69 66 69 65  hes the specifie
07d0: 64 20 70 61 74 74 65 72 6e 2e 0d 0a 20 20 23 0d  d pattern...  #.
07e0: 0a 20 20 70 72 6f 63 20 67 65 74 50 6c 75 67 69  .  proc getPlugi
07f0: 6e 4e 61 6d 65 20 7b 20 70 61 74 74 65 72 6e 20  nName { pattern 
0800: 7d 20 7b 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20  } {..    #..    
0810: 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 73 68 6f  # NOTE: This sho
0820: 75 6c 64 20 77 6f 72 6b 20 70 72 6f 70 65 72 6c  uld work properl
0830: 79 20 69 6e 20 62 6f 74 68 20 54 63 6c 20 61 6e  y in both Tcl an
0840: 64 20 45 61 67 6c 65 2e 0d 0a 20 20 20 20 23 0d  d Eagle...    #.
0850: 0a 20 20 20 20 66 6f 72 65 61 63 68 20 6c 6f 61  .    foreach loa
0860: 64 65 64 20 5b 69 6e 66 6f 20 6c 6f 61 64 65 64  ded [info loaded
0870: 5d 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b  ] {..      if {[
0880: 72 65 67 65 78 70 20 2d 2d 20 24 70 61 74 74 65  regexp -- $patte
0890: 72 6e 20 5b 6c 69 6e 64 65 78 20 24 6c 6f 61 64  rn [lindex $load
08a0: 65 64 20 65 6e 64 5d 5d 7d 20 74 68 65 6e 20 7b  ed end]]} then {
08b0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
08c0: 20 5b 6c 69 6e 64 65 78 20 24 6c 6f 61 64 65 64   [lindex $loaded
08d0: 20 31 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20   1]..      }..  
08e0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 72 65 74 75 72    }....    retur
08f0: 6e 20 22 22 0d 0a 20 20 7d 0d 0a 0c 0d 0a 20 20  n ""..  }.....  
0900: 23 0d 0a 20 20 23 20 4e 4f 54 45 3a 20 54 68 69  #..  # NOTE: Thi
0910: 73 20 70 72 6f 63 65 64 75 72 65 20 72 65 74 75  s procedure retu
0920: 72 6e 73 20 74 68 65 20 66 75 6c 6c 79 20 71 75  rns the fully qu
0930: 61 6c 69 66 69 65 64 20 66 69 6c 65 20 6e 61 6d  alified file nam
0940: 65 20 6f 66 20 74 68 65 20 66 69 72 73 74 0d 0a  e of the first..
0950: 20 20 23 20 20 20 20 20 20 20 6c 6f 61 64 65 64    #       loaded
0960: 20 70 6c 75 67 69 6e 20 74 68 61 74 20 6d 61 74   plugin that mat
0970: 63 68 65 73 20 74 68 65 20 73 70 65 63 69 66 69  ches the specifi
0980: 65 64 20 70 61 74 74 65 72 6e 2e 0d 0a 20 20 23  ed pattern...  #
0990: 0d 0a 20 20 70 72 6f 63 20 67 65 74 50 6c 75 67  ..  proc getPlug
09a0: 69 6e 50 61 74 68 20 7b 20 70 61 74 74 65 72 6e  inPath { pattern
09b0: 20 7d 20 7b 0d 0a 20 20 20 20 23 0d 0a 20 20 20   } {..    #..   
09c0: 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 73 68   # NOTE: This sh
09d0: 6f 75 6c 64 20 77 6f 72 6b 20 70 72 6f 70 65 72  ould work proper
09e0: 6c 79 20 69 6e 20 62 6f 74 68 20 54 63 6c 20 61  ly in both Tcl a
09f0: 6e 64 20 45 61 67 6c 65 2e 0d 0a 20 20 20 20 23  nd Eagle...    #
0a00: 0d 0a 20 20 20 20 66 6f 72 65 61 63 68 20 6c 6f  ..    foreach lo
0a10: 61 64 65 64 20 5b 69 6e 66 6f 20 6c 6f 61 64 65  aded [info loade
0a20: 64 5d 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b  d] {..      if {
0a30: 5b 72 65 67 65 78 70 20 2d 2d 20 24 70 61 74 74  [regexp -- $patt
0a40: 65 72 6e 20 5b 6c 69 6e 64 65 78 20 24 6c 6f 61  ern [lindex $loa
0a50: 64 65 64 20 65 6e 64 5d 5d 7d 20 74 68 65 6e 20  ded end]]} then 
0a60: 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  {..        retur
0a70: 6e 20 5b 6c 69 6e 64 65 78 20 24 6c 6f 61 64 65  n [lindex $loade
0a80: 64 20 30 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  d 0]..      }.. 
0a90: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 72 65 74 75     }....    retu
0aa0: 72 6e 20 22 22 0d 0a 20 20 7d 0d 0a 0c 0d 0a 20  rn ""..  }..... 
0ab0: 20 23 0d 0a 20 20 23 20 4e 4f 54 45 3a 20 54 68   #..  # NOTE: Th
0ac0: 69 73 20 70 72 6f 63 65 64 75 72 65 20 72 65 74  is procedure ret
0ad0: 75 72 6e 73 20 74 68 65 20 66 75 6c 6c 79 20 71  urns the fully q
0ae0: 75 61 6c 69 66 69 65 64 20 64 69 72 65 63 74 6f  ualified directo
0af0: 72 79 20 6e 61 6d 65 20 77 68 65 72 65 20 6e 65  ry name where ne
0b00: 77 0d 0a 20 20 23 20 20 20 20 20 20 20 70 61 63  w..  #       pac
0b10: 6b 61 67 65 73 20 74 61 72 67 65 74 69 6e 67 20  kages targeting 
0b20: 74 68 65 20 69 6e 74 65 72 70 72 65 74 65 72 20  the interpreter 
0b30: 73 68 6f 75 6c 64 20 62 65 20 69 6e 73 74 61 6c  should be instal
0b40: 6c 65 64 2e 20 20 54 68 65 20 72 65 74 75 72 6e  led.  The return
0b50: 0d 0a 20 20 23 20 20 20 20 20 20 20 76 61 6c 75  ..  #       valu
0b60: 65 73 20 6f 66 20 74 68 69 73 20 70 72 6f 63 65  es of this proce
0b70: 64 75 72 65 20 61 72 65 20 73 75 62 6a 65 63 74  dure are subject
0b80: 20 74 6f 20 63 68 61 6e 67 65 20 69 6e 20 66 75   to change in fu
0b90: 74 75 72 65 20 72 65 6c 65 61 73 65 73 2e 0d 0a  ture releases...
0ba0: 20 20 23 0d 0a 20 20 70 72 6f 63 20 67 65 74 50    #..  proc getP
0bb0: 61 63 6b 61 67 65 49 6e 73 74 61 6c 6c 50 61 74  ackageInstallPat
0bc0: 68 20 7b 20 7b 70 61 63 6b 61 67 65 4e 61 6d 65  h { {packageName
0bd0: 20 22 22 7d 20 7b 74 65 6d 70 6f 72 61 72 79 50   ""} {temporaryP
0be0: 72 65 66 69 78 20 22 22 7d 20 7d 20 7b 0d 0a 20  refix ""} } {.. 
0bf0: 20 20 20 23 0d 0a 20 20 20 20 23 20 4e 4f 54 45     #..    # NOTE
0c00: 3a 20 53 6b 69 70 20 75 73 69 6e 67 20 74 68 65  : Skip using the
0c10: 20 54 63 6c 20 6c 69 62 72 61 72 79 20 6c 6f 63   Tcl library loc
0c20: 61 74 69 6f 6e 20 69 66 20 74 68 61 74 20 68 61  ation if that ha
0c30: 73 20 62 65 65 6e 20 65 78 70 6c 69 63 69 74 6c  s been explicitl
0c40: 79 0d 0a 20 20 20 20 23 20 20 20 20 20 20 20 66  y..    #       f
0c50: 6f 72 62 69 64 64 65 6e 2e 0d 0a 20 20 20 20 23  orbidden...    #
0c60: 0d 0a 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f  ..    if {![info
0c70: 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 67 65 74   exists ::no(get
0c80: 50 61 63 6b 61 67 65 49 6e 73 74 61 6c 6c 50 61  PackageInstallPa
0c90: 74 68 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  th)]} then {..  
0ca0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
0cb0: 4f 54 45 3a 20 46 69 72 73 74 2c 20 63 68 65 63  OTE: First, chec
0cc0: 6b 20 69 66 20 74 68 65 20 54 63 6c 20 6c 69 62  k if the Tcl lib
0cd0: 72 61 72 79 20 76 61 72 69 61 62 6c 65 20 65 78  rary variable ex
0ce0: 69 73 74 73 20 61 6e 64 20 69 74 73 20 6c 6f 63  ists and its loc
0cf0: 61 74 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20  ation..      #  
0d00: 20 20 20 20 20 65 78 69 73 74 73 2e 20 20 54 68       exists.  Th
0d10: 65 20 6c 6f 63 61 74 69 6f 6e 20 6d 61 79 20 72  e location may r
0d20: 65 66 65 72 20 74 6f 20 61 20 66 69 6c 65 2e 0d  efer to a file..
0d30: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..      
0d40: 67 6c 6f 62 61 6c 20 74 63 6c 5f 6c 69 62 72 61  global tcl_libra
0d50: 72 79 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b  ry....      if {
0d60: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 74 63 6c  [info exists tcl
0d70: 5f 6c 69 62 72 61 72 79 5d 7d 20 74 68 65 6e 20  _library]} then 
0d80: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..  
0d90: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 68        # NOTE: Wh
0da0: 61 74 20 69 73 20 74 68 65 20 70 61 72 65 6e 74  at is the parent
0db0: 20 64 69 72 65 63 74 6f 72 79 20 66 6f 72 20 74   directory for t
0dc0: 68 65 20 54 63 6c 20 6c 69 62 72 61 72 79 20 6c  he Tcl library l
0dd0: 6f 63 61 74 69 6f 6e 3f 20 20 49 66 0d 0a 20 20  ocation?  If..  
0de0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68        #       th
0df0: 65 20 54 63 6c 20 6c 69 62 72 61 72 79 20 6c 6f  e Tcl library lo
0e00: 63 61 74 69 6f 6e 20 77 61 73 20 61 20 66 69 6c  cation was a fil
0e10: 65 2c 20 69 74 20 73 68 6f 75 6c 64 20 62 65 20  e, it should be 
0e20: 61 20 64 69 72 65 63 74 6f 72 79 3b 0d 0a 20 20  a directory;..  
0e30: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69 66        #       if
0e40: 20 69 74 20 77 61 73 20 61 6c 72 65 61 64 79 20   it was already 
0e50: 61 20 64 69 72 65 63 74 6f 72 79 2c 20 69 74 20  a directory, it 
0e60: 73 68 6f 75 6c 64 20 73 74 69 6c 6c 20 62 65 20  should still be 
0e70: 6f 6e 65 2e 20 20 45 69 74 68 65 72 0d 0a 20 20  one.  Either..  
0e80: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 77 61        #       wa
0e90: 79 2c 20 74 68 65 20 6e 65 77 20 28 64 69 72 65  y, the new (dire
0ea0: 63 74 6f 72 79 29 20 6c 6f 63 61 74 69 6f 6e 20  ctory) location 
0eb0: 6d 75 73 74 20 62 65 20 77 72 69 74 61 62 6c 65  must be writable
0ec0: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..  
0ed0: 20 20 20 20 20 20 73 65 74 20 64 69 72 65 63 74        set direct
0ee0: 6f 72 79 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d  ory [file dirnam
0ef0: 65 20 24 74 63 6c 5f 6c 69 62 72 61 72 79 5d 0d  e $tcl_library].
0f00: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b  ...        if {[
0f10: 66 69 6c 65 20 65 78 69 73 74 73 20 24 64 69 72  file exists $dir
0f20: 65 63 74 6f 72 79 5d 20 26 26 20 5b 66 69 6c 65  ectory] && [file
0f30: 20 69 73 64 69 72 65 63 74 6f 72 79 20 24 64 69   isdirectory $di
0f40: 72 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20  rectory] && \.. 
0f50: 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65             [file
0f60: 20 77 72 69 74 61 62 6c 65 20 24 64 69 72 65 63   writable $direc
0f70: 74 6f 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  tory]} then {.. 
0f80: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..    
0f90: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4f 6b        # NOTE: Ok
0fa0: 2c 20 61 6c 6c 20 63 68 65 63 6b 73 20 70 61 73  , all checks pas
0fb0: 73 65 64 2c 20 72 65 74 75 72 6e 20 74 68 65 20  sed, return the 
0fc0: 6c 6f 63 61 74 69 6f 6e 2e 20 20 43 61 6c 6c 65  location.  Calle
0fd0: 72 73 20 6f 66 20 74 68 69 73 0d 0a 20 20 20 20  rs of this..    
0fe0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 70 72        #       pr
0ff0: 6f 63 65 64 75 72 65 20 73 68 6f 75 6c 64 20 67  ocedure should g
1000: 65 6e 65 72 61 6c 6c 79 20 6e 6f 74 20 70 75 74  enerally not put
1010: 20 66 69 6c 65 73 20 64 69 72 65 63 74 6c 79 20   files directly 
1020: 77 69 74 68 69 6e 20 69 74 3b 0d 0a 20 20 20 20  within it;..    
1030: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69 6e        #       in
1040: 73 74 65 61 64 2c 20 74 68 65 79 20 73 68 6f 75  stead, they shou
1050: 6c 64 20 63 72 65 61 74 65 20 61 20 73 75 62 2d  ld create a sub-
1060: 64 69 72 65 63 74 6f 72 79 20 77 69 74 68 69 6e  directory within
1070: 20 69 74 2c 20 6e 61 6d 65 64 0d 0a 20 20 20 20   it, named..    
1080: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 70        #       ap
1090: 70 72 6f 70 72 69 61 74 65 6c 79 2e 20 20 49 66  propriately.  If
10a0: 20 61 20 70 61 63 6b 61 67 65 20 6e 61 6d 65 20   a package name 
10b0: 77 61 73 20 73 75 70 70 6c 69 65 64 20 62 79 20  was supplied by 
10c0: 74 68 65 20 63 61 6c 6c 65 72 0d 0a 20 20 20 20  the caller..    
10d0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69 74        #       it
10e0: 20 77 69 6c 6c 20 62 65 20 75 73 65 64 2e 20 20   will be used.  
10f0: 49 6e 20 74 68 61 74 20 63 61 73 65 2c 20 74 68  In that case, th
1100: 65 20 72 65 73 75 6c 74 69 6e 67 20 64 69 72 65  e resulting dire
1110: 63 74 6f 72 79 20 77 69 6c 6c 0d 0a 20 20 20 20  ctory will..    
1120: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 65        #       be
1130: 20 63 72 65 61 74 65 64 20 69 66 20 6e 65 63 65   created if nece
1140: 73 73 61 72 79 2e 0d 0a 20 20 20 20 20 20 20 20  ssary...        
1150: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69    #..          i
1160: 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74  f {[string lengt
1170: 68 20 24 70 61 63 6b 61 67 65 4e 61 6d 65 5d 20  h $packageName] 
1180: 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  > 0} then {..   
1190: 20 20 20 20 20 20 20 20 20 73 65 74 20 64 69 72           set dir
11a0: 65 63 74 6f 72 79 20 5b 66 69 6c 65 20 6a 6f 69  ectory [file joi
11b0: 6e 20 24 64 69 72 65 63 74 6f 72 79 20 24 70 61  n $directory $pa
11c0: 63 6b 61 67 65 4e 61 6d 65 5d 0d 0a 20 20 20 20  ckageName]..    
11d0: 20 20 20 20 20 20 20 20 66 69 6c 65 20 6d 6b 64          file mkd
11e0: 69 72 20 24 64 69 72 65 63 74 6f 72 79 0d 0a 20  ir $directory.. 
11f0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1200: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24          return $
1210: 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20  directory..     
1220: 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20     }..      }.. 
1230: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 23 0d 0a 20     }....    #.. 
1240: 20 20 20 23 20 4e 4f 54 45 3a 20 4e 65 78 74 2c     # NOTE: Next,
1250: 20 73 69 6e 63 65 20 74 68 65 20 66 61 6c 6c 62   since the fallb
1260: 61 63 6b 20 6c 6f 63 61 74 69 6f 6e 20 72 65 71  ack location req
1270: 75 69 72 65 73 20 74 68 65 20 74 65 73 74 20 70  uires the test p
1280: 61 63 6b 61 67 65 2c 20 6c 6f 61 64 0d 0a 20 20  ackage, load..  
1290: 20 20 23 20 20 20 20 20 20 20 69 74 20 6e 6f 77    #       it now
12a0: 2e 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 70 61  ...    #..    pa
12b0: 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 45 61  ckage require Ea
12c0: 67 6c 65 2e 54 65 73 74 0d 0a 0d 0a 20 20 20 20  gle.Test....    
12d0: 23 0d 0a 20 20 20 20 23 20 4e 4f 54 45 3a 20 52  #..    # NOTE: R
12e0: 65 74 75 72 6e 20 74 68 65 20 74 65 6d 70 6f 72  eturn the tempor
12f0: 61 72 79 20 64 69 72 65 63 74 6f 72 79 20 61 73  ary directory as
1300: 20 74 68 65 20 66 61 6c 6c 62 61 63 6b 20 6c 6f   the fallback lo
1310: 63 61 74 69 6f 6e 2e 20 20 43 61 6c 6c 65 72 73  cation.  Callers
1320: 0d 0a 20 20 20 20 23 20 20 20 20 20 20 20 6f 66  ..    #       of
1330: 20 74 68 69 73 20 70 72 6f 63 65 64 75 72 65 20   this procedure 
1340: 73 68 6f 75 6c 64 20 67 65 6e 65 72 61 6c 6c 79  should generally
1350: 20 6e 6f 74 20 70 75 74 20 66 69 6c 65 73 20 64   not put files d
1360: 69 72 65 63 74 6c 79 20 77 69 74 68 69 6e 0d 0a  irectly within..
1370: 20 20 20 20 23 20 20 20 20 20 20 20 69 74 3b 20      #       it; 
1380: 69 6e 73 74 65 61 64 2c 20 74 68 65 79 20 73 68  instead, they sh
1390: 6f 75 6c 64 20 63 72 65 61 74 65 20 61 20 73 75  ould create a su
13a0: 62 2d 64 69 72 65 63 74 6f 72 79 20 77 69 74 68  b-directory with
13b0: 69 6e 20 69 74 2c 20 6e 61 6d 65 64 0d 0a 20 20  in it, named..  
13c0: 20 20 23 20 20 20 20 20 20 20 61 70 70 72 6f 70    #       approp
13d0: 72 69 61 74 65 6c 79 2e 20 20 49 66 20 61 20 74  riately.  If a t
13e0: 65 6d 70 6f 72 61 72 79 20 70 72 65 66 69 78 20  emporary prefix 
13f0: 77 61 73 20 73 75 70 70 6c 69 65 64 20 62 79 20  was supplied by 
1400: 74 68 65 20 63 61 6c 6c 65 72 0d 0a 20 20 20 20  the caller..    
1410: 23 20 20 20 20 20 20 20 69 74 20 77 69 6c 6c 20  #       it will 
1420: 62 65 20 75 73 65 64 2e 20 20 49 6e 20 74 68 61  be used.  In tha
1430: 74 20 63 61 73 65 2c 20 74 68 65 20 72 65 73 75  t case, the resu
1440: 6c 74 69 6e 67 20 64 69 72 65 63 74 6f 72 79 20  lting directory 
1450: 77 69 6c 6c 20 62 65 0d 0a 20 20 20 20 23 20 20  will be..    #  
1460: 20 20 20 20 20 63 72 65 61 74 65 64 20 69 66 20       created if 
1470: 6e 65 63 65 73 73 61 72 79 2e 0d 0a 20 20 20 20  necessary...    
1480: 23 0d 0a 20 20 20 20 73 65 74 20 64 69 72 65 63  #..    set direc
1490: 74 6f 72 79 20 5b 67 65 74 54 65 6d 70 6f 72 61  tory [getTempora
14a0: 72 79 50 61 74 68 5d 0d 0a 0d 0a 20 20 20 20 69  ryPath]....    i
14b0: 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74  f {[string lengt
14c0: 68 20 24 74 65 6d 70 6f 72 61 72 79 50 72 65 66  h $temporaryPref
14d0: 69 78 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  ix] > 0} then {.
14e0: 0a 20 20 20 20 20 20 73 65 74 20 64 69 72 65 63  .      set direc
14f0: 74 6f 72 79 20 5b 66 69 6c 65 20 6a 6f 69 6e 20  tory [file join 
1500: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 24 64 69  \..          $di
1510: 72 65 63 74 6f 72 79 20 5b 61 70 70 65 6e 64 41  rectory [appendA
1520: 72 67 73 20 24 74 65 6d 70 6f 72 61 72 79 50 72  rgs $temporaryPr
1530: 65 66 69 78 20 2d 20 5c 0d 0a 20 20 20 20 20 20  efix - \..      
1540: 20 20 20 20 5b 70 69 64 5d 20 2d 20 5b 73 74 72      [pid] - [str
1550: 69 6e 67 20 74 72 69 6d 20 5b 63 6c 6f 63 6b 20  ing trim [clock 
1560: 73 65 63 6f 6e 64 73 5d 20 2d 5d 5d 5d 0d 0a 0d  seconds] -]]]...
1570: 0a 20 20 20 20 20 20 66 69 6c 65 20 6d 6b 64 69  .      file mkdi
1580: 72 20 24 64 69 72 65 63 74 6f 72 79 0d 0a 20 20  r $directory..  
1590: 20 20 7d 0d 0a 0d 0a 20 20 20 20 72 65 74 75 72    }....    retur
15a0: 6e 20 24 64 69 72 65 63 74 6f 72 79 0d 0a 20 20  n $directory..  
15b0: 7d 0d 0a 0c 0d 0a 20 20 23 0d 0a 20 20 23 20 4e  }.....  #..  # N
15c0: 4f 54 45 3a 20 54 68 69 73 20 70 72 6f 63 65 64  OTE: This proced
15d0: 75 72 65 20 72 65 74 75 72 6e 73 20 74 68 65 20  ure returns the 
15e0: 45 61 67 6c 65 20 63 6f 72 65 20 6c 69 62 72 61  Eagle core libra
15f0: 72 79 20 62 61 73 65 20 70 61 74 68 2c 20 65 2e  ry base path, e.
1600: 67 2e 20 61 0d 0a 20 20 23 20 20 20 20 20 20 20  g. a..  #       
1610: 76 61 6c 75 65 20 6c 69 6b 65 20 22 43 3a 5c 45  value like "C:\E
1620: 61 67 6c 65 22 20 77 68 65 6e 20 6c 6f 61 64 65  agle" when loade
1630: 64 20 66 72 6f 6d 20 22 43 3a 5c 45 61 67 6c 65  d from "C:\Eagle
1640: 5c 62 69 6e 5c 45 61 67 6c 65 2e 64 6c 6c 22 2e  \bin\Eagle.dll".
1650: 0d 0a 20 20 23 0d 0a 20 20 70 72 6f 63 20 67 65  ..  #..  proc ge
1660: 74 42 61 73 65 50 61 74 68 20 7b 7d 20 7b 0d 0a  tBasePath {} {..
1670: 20 20 20 20 73 65 74 20 61 73 73 65 6d 62 6c 79      set assembly
1680: 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20   [object invoke 
1690: 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69  -flags +NonPubli
16a0: 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 45 61 67  c \..        Eag
16b0: 6c 65 2e 5f 43 6f 6d 70 6f 6e 65 6e 74 73 2e 50  le._Components.P
16c0: 72 69 76 61 74 65 2e 47 6c 6f 62 61 6c 53 74 61  rivate.GlobalSta
16d0: 74 65 20 47 65 74 41 73 73 65 6d 62 6c 79 5d 0d  te GetAssembly].
16e0: 0a 0d 0a 20 20 20 20 72 65 74 75 72 6e 20 5b 6f  ...    return [o
16f0: 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c  bject invoke -fl
1700: 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c  ags +NonPublic \
1710: 0d 0a 20 20 20 20 20 20 20 20 45 61 67 6c 65 2e  ..        Eagle.
1720: 5f 43 6f 6d 70 6f 6e 65 6e 74 73 2e 50 72 69 76  _Components.Priv
1730: 61 74 65 2e 50 61 74 68 4f 70 73 20 47 65 74 42  ate.PathOps GetB
1740: 61 73 65 50 61 74 68 20 24 61 73 73 65 6d 62 6c  asePath $assembl
1750: 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 5b 66 69  y \..        [fi
1760: 6c 65 20 64 69 72 6e 61 6d 65 20 5b 6c 69 6e 64  le dirname [lind
1770: 65 78 20 5b 69 6e 66 6f 20 61 73 73 65 6d 62 6c  ex [info assembl
1780: 79 5d 20 31 5d 5d 5d 0d 0a 20 20 7d 0d 0a 0c 0d  y] 1]]]..  }....
1790: 0a 20 20 23 0d 0a 20 20 23 20 4e 4f 54 45 3a 20  .  #..  # NOTE: 
17a0: 54 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 72  This procedure r
17b0: 65 74 75 72 6e 73 20 74 68 65 20 66 6c 61 67 73  eturns the flags
17c0: 20 66 6f 72 20 74 68 65 20 66 69 72 73 74 20 6c   for the first l
17d0: 6f 61 64 65 64 20 70 6c 75 67 69 6e 20 74 68 61  oaded plugin tha
17e0: 74 0d 0a 20 20 23 20 20 20 20 20 20 20 6d 61 74  t..  #       mat
17f0: 63 68 65 73 20 74 68 65 20 73 70 65 63 69 66 69  ches the specifi
1800: 65 64 20 70 61 74 74 65 72 6e 2e 0d 0a 20 20 23  ed pattern...  #
1810: 0d 0a 20 20 70 72 6f 63 20 67 65 74 50 6c 75 67  ..  proc getPlug
1820: 69 6e 46 6c 61 67 73 20 7b 20 70 61 74 74 65 72  inFlags { patter
1830: 6e 20 7d 20 7b 0d 0a 20 20 20 20 66 6f 72 65 61  n } {..    forea
1840: 63 68 20 6c 6f 61 64 65 64 20 5b 69 6e 66 6f 20  ch loaded [info 
1850: 6c 6f 61 64 65 64 5d 20 7b 0d 0a 20 20 20 20 20  loaded] {..     
1860: 20 73 65 74 20 70 6c 75 67 69 6e 20 5b 6c 69 6e   set plugin [lin
1870: 64 65 78 20 24 6c 6f 61 64 65 64 20 65 6e 64 5d  dex $loaded end]
1880: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 72  ....      if {[r
1890: 65 67 65 78 70 20 2d 2d 20 24 70 61 74 74 65 72  egexp -- $patter
18a0: 6e 20 24 70 6c 75 67 69 6e 5d 7d 20 74 68 65 6e  n $plugin]} then
18b0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   {..        retu
18c0: 72 6e 20 5b 73 74 72 69 6e 67 20 6d 61 70 20 5b  rn [string map [
18d0: 6c 69 73 74 20 2c 20 22 20 22 5d 20 5c 0d 0a 20  list , " "] \.. 
18e0: 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 44             [getD
18f0: 69 63 74 69 6f 6e 61 72 79 56 61 6c 75 65 20 5b  ictionaryValue [
1900: 69 6e 66 6f 20 70 6c 75 67 69 6e 20 24 70 6c 75  info plugin $plu
1910: 67 69 6e 5d 20 66 6c 61 67 73 5d 5d 0d 0a 20 20  gin] flags]]..  
1920: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
1930: 20 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 74      return [list
1940: 5d 0d 0a 20 20 7d 0d 0a 0c 0d 0a 20 20 23 0d 0a  ]..  }.....  #..
1950: 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 70    # NOTE: This p
1960: 72 6f 63 65 64 75 72 65 20 72 65 74 75 72 6e 73  rocedure returns
1970: 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65   non-zero if the
1980: 20 45 61 67 6c 65 20 4e 61 74 69 76 65 20 50 61   Eagle Native Pa
1990: 63 6b 61 67 65 20 66 6f 72 0d 0a 20 20 23 20 20  ckage for..  #  
19a0: 20 20 20 20 20 54 63 6c 20 28 47 61 72 75 64 61       Tcl (Garuda
19b0: 29 20 69 73 20 6c 6f 61 64 65 64 20 69 6e 74 6f  ) is loaded into
19c0: 20 74 68 65 20 70 72 69 6d 61 72 79 20 6e 61 74   the primary nat
19d0: 69 76 65 20 54 63 6c 20 69 6e 74 65 72 70 72 65  ive Tcl interpre
19e0: 74 65 72 2e 0d 0a 20 20 23 0d 0a 20 20 70 72 6f  ter...  #..  pro
19f0: 63 20 68 61 76 65 47 61 72 75 64 61 20 7b 20 7b  c haveGaruda { {
1a00: 76 61 72 4e 61 6d 65 20 22 22 7d 20 7d 20 7b 0d  varName ""} } {.
1a10: 0a 20 20 20 20 23 0d 0a 20 20 20 20 23 20 4e 4f  .    #..    # NO
1a20: 54 45 3a 20 43 68 65 63 6b 20 66 6f 72 20 61 20  TE: Check for a 
1a30: 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 20 74 6f  variable name to
1a40: 20 70 6c 61 63 65 20 74 68 65 20 47 61 72 75 64   place the Garud
1a50: 61 20 70 61 63 6b 61 67 65 20 49 64 20 69 6e 74  a package Id int
1a60: 6f 2e 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 69  o...    #..    i
1a70: 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74  f {[string lengt
1a80: 68 20 24 76 61 72 4e 61 6d 65 5d 20 3e 20 30 7d  h $varName] > 0}
1a90: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 75   then {..      u
1aa0: 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20  pvar 1 $varName 
1ab0: 70 61 63 6b 61 67 65 49 64 0d 0a 20 20 20 20 7d  packageId..    }
1ac0: 0d 0a 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 23  ....    #..    #
1ad0: 20 4e 4f 54 45 3a 20 49 73 20 74 68 65 20 45 61   NOTE: Is the Ea
1ae0: 67 6c 65 20 50 61 63 6b 61 67 65 20 66 6f 72 20  gle Package for 
1af0: 54 63 6c 20 28 47 61 72 75 64 61 29 20 61 76 61  Tcl (Garuda) ava
1b00: 69 6c 61 62 6c 65 3f 20 20 54 68 69 73 20 63 68  ilable?  This ch
1b10: 65 63 6b 0d 0a 20 20 20 20 23 20 20 20 20 20 20  eck..    #      
1b20: 20 69 73 20 64 69 66 66 65 72 65 6e 74 20 69 6e   is different in
1b30: 20 45 61 67 6c 65 20 61 6e 64 20 54 63 6c 2e 0d   Eagle and Tcl..
1b40: 0a 20 20 20 20 23 0d 0a 20 20 20 20 69 66 20 7b  .    #..    if {
1b50: 5b 69 73 45 61 67 6c 65 5d 7d 20 74 68 65 6e 20  [isEagle]} then 
1b60: 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  {..      return 
1b70: 5b 65 78 70 72 20 7b 5b 6c 6c 65 6e 67 74 68 20  [expr {[llength 
1b80: 5b 69 6e 66 6f 20 63 6f 6d 6d 61 6e 64 73 20 74  [info commands t
1b90: 63 6c 5d 5d 20 3e 20 30 20 26 26 20 5b 74 63 6c  cl]] > 0 && [tcl
1ba0: 20 72 65 61 64 79 5d 20 26 26 20 5c 0d 0a 20 20   ready] && \..  
1bb0: 20 20 20 20 20 20 20 20 5b 63 61 74 63 68 20 7b          [catch {
1bc0: 74 63 6c 20 65 76 61 6c 20 5b 74 63 6c 20 6d 61  tcl eval [tcl ma
1bd0: 73 74 65 72 5d 20 7b 70 61 63 6b 61 67 65 20 70  ster] {package p
1be0: 72 65 73 65 6e 74 20 47 61 72 75 64 61 7d 7d 5d  resent Garuda}}]
1bf0: 20 3d 3d 20 30 20 26 26 20 5c 0d 0a 20 20 20 20   == 0 && \..    
1c00: 20 20 20 20 20 20 5b 63 61 74 63 68 20 7b 74 63        [catch {tc
1c10: 6c 20 65 76 61 6c 20 5b 74 63 6c 20 6d 61 73 74  l eval [tcl mast
1c20: 65 72 5d 20 7b 67 61 72 75 64 61 20 70 61 63 6b  er] {garuda pack
1c30: 61 67 65 69 64 7d 7d 20 70 61 63 6b 61 67 65 49  ageid}} packageI
1c40: 64 5d 20 3d 3d 20 30 7d 5d 0d 0a 20 20 20 20 7d  d] == 0}]..    }
1c50: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 72   else {..      r
1c60: 65 74 75 72 6e 20 5b 65 78 70 72 20 7b 5b 63 61  eturn [expr {[ca
1c70: 74 63 68 20 7b 70 61 63 6b 61 67 65 20 70 72 65  tch {package pre
1c80: 73 65 6e 74 20 47 61 72 75 64 61 7d 5d 20 3d 3d  sent Garuda}] ==
1c90: 20 30 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20   0 && \..       
1ca0: 20 20 20 5b 63 61 74 63 68 20 7b 67 61 72 75 64     [catch {garud
1cb0: 61 20 70 61 63 6b 61 67 65 69 64 7d 20 70 61 63  a packageid} pac
1cc0: 6b 61 67 65 49 64 5d 20 3d 3d 20 30 7d 5d 0d 0a  kageId] == 0}]..
1cd0: 20 20 20 20 7d 0d 0a 20 20 7d 0d 0a 0c 0d 0a 20      }..  }..... 
1ce0: 20 23 0d 0a 20 20 23 20 4e 4f 54 45 3a 20 54 68   #..  # NOTE: Th
1cf0: 69 73 20 70 72 6f 63 65 64 75 72 65 20 72 65 74  is procedure ret
1d00: 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66  urns non-zero if
1d10: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 6e   the specified n
1d20: 61 6d 65 20 72 65 70 72 65 73 65 6e 74 73 0d 0a  ame represents..
1d30: 20 20 23 20 20 20 20 20 20 20 61 20 74 68 72 65    #       a thre
1d40: 61 64 20 6d 61 6e 61 67 65 64 20 62 79 20 74 68  ad managed by th
1d50: 65 20 6e 61 74 69 76 65 20 54 63 6c 20 69 6e 74  e native Tcl int
1d60: 65 67 72 61 74 69 6f 6e 20 73 75 62 73 79 73 74  egration subsyst
1d70: 65 6d 20 6f 66 20 45 61 67 6c 65 2e 0d 0a 20 20  em of Eagle...  
1d80: 23 0d 0a 20 20 70 72 6f 63 20 69 73 54 63 6c 54  #..  proc isTclT
1d90: 68 72 65 61 64 20 7b 20 6e 61 6d 65 20 7d 20 7b  hread { name } {
1da0: 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 23 20 4e  ..    #..    # N
1db0: 4f 54 45 3a 20 46 6f 72 20 6e 6f 77 2c 20 74 68  OTE: For now, th
1dc0: 69 73 20 63 68 65 63 6b 20 6f 6e 6c 79 20 77 6f  is check only wo
1dd0: 72 6b 73 20 69 6e 20 45 61 67 6c 65 2e 0d 0a 20  rks in Eagle... 
1de0: 20 20 20 23 0d 0a 20 20 20 20 73 65 74 20 72 65     #..    set re
1df0: 73 75 6c 74 20 66 61 6c 73 65 0d 0a 0d 0a 20 20  sult false....  
1e00: 20 20 69 66 20 7b 5b 69 73 45 61 67 6c 65 5d 7d    if {[isEagle]}
1e10: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 63   then {..      c
1e20: 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20  atch {..        
1e30: 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 5b 69 6e  if {[llength [in
1e40: 66 6f 20 63 6f 6d 6d 61 6e 64 73 20 74 63 6c 5d  fo commands tcl]
1e50: 5d 20 3e 20 30 20 26 26 20 5b 74 63 6c 20 72 65  ] > 0 && [tcl re
1e60: 61 64 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20  ady] && \..     
1e70: 20 20 20 20 20 20 20 5b 6c 73 65 61 72 63 68 20         [lsearch 
1e80: 2d 65 78 61 63 74 20 2d 2d 20 5b 74 63 6c 20 74  -exact -- [tcl t
1e90: 68 72 65 61 64 73 5d 20 24 6e 61 6d 65 5d 20 21  hreads] $name] !
1ea0: 3d 20 2d 31 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  = -1} then {..  
1eb0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..     
1ec0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65       # NOTE: The
1ed0: 20 6e 61 6d 65 20 73 70 65 63 69 66 69 65 64 20   name specified 
1ee0: 62 79 20 74 68 65 20 63 61 6c 6c 65 72 20 61 70  by the caller ap
1ef0: 70 65 61 72 73 20 69 6e 20 74 68 65 0d 0a 20 20  pears in the..  
1f00: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #       
1f10: 6c 69 73 74 20 6f 66 20 54 63 6c 20 74 68 72 65  list of Tcl thre
1f20: 61 64 73 20 66 6f 72 20 74 68 69 73 20 45 61 67  ads for this Eag
1f30: 6c 65 20 69 6e 74 65 72 70 72 65 74 65 72 2e 0d  le interpreter..
1f40: 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..  
1f50: 20 20 20 20 20 20 20 20 73 65 74 20 72 65 73 75          set resu
1f60: 6c 74 20 74 72 75 65 0d 0a 20 20 20 20 20 20 20  lt true..       
1f70: 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20   }..      }..   
1f80: 20 7d 0d 0a 0d 0a 20 20 20 20 72 65 74 75 72 6e   }....    return
1f90: 20 24 72 65 73 75 6c 74 0d 0a 20 20 7d 0d 0a 0c   $result..  }...
1fa0: 0d 0a 20 20 23 0d 0a 20 20 23 20 4e 4f 54 45 3a  ..  #..  # NOTE:
1fb0: 20 50 72 6f 76 69 64 65 20 74 68 65 20 45 61 67   Provide the Eag
1fc0: 6c 65 20 22 69 6e 66 6f 22 20 70 61 63 6b 61 67  le "info" packag
1fd0: 65 20 74 6f 20 74 68 65 20 69 6e 74 65 72 70 72  e to the interpr
1fe0: 65 74 65 72 2e 0d 0a 20 20 23 0d 0a 20 20 70 61  eter...  #..  pa
1ff0: 63 6b 61 67 65 20 70 72 6f 76 69 64 65 20 45 61  ckage provide Ea
2000: 67 6c 65 2e 49 6e 66 6f 72 6d 61 74 69 6f 6e 20  gle.Information 
2010: 5c 0d 0a 20 20 20 20 5b 65 78 70 72 20 7b 5b 69  \..    [expr {[i
2020: 73 45 61 67 6c 65 5d 20 3f 20 5b 69 6e 66 6f 20  sEagle] ? [info 
2030: 65 6e 67 69 6e 65 20 50 61 74 63 68 4c 65 76 65  engine PatchLeve
2040: 6c 5d 20 3a 20 22 31 2e 30 22 7d 5d 0d 0a 7d     l] : "1.0"}]..}