System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 03017cbafbe5885c6b49283084ca2bb1c096bc49:


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 70 72 6f 63 65 73 73 2e 65 61  .#..# process.ea
0060: 67 6c 65 20 2d 2d 0d 0a 23 0d 0a 23 20 45 78 74  gle --..#..# Ext
0070: 65 6e 73 69 62 6c 65 20 41 64 61 70 74 61 62 6c  ensible Adaptabl
0080: 65 20 47 65 6e 65 72 61 6c 69 7a 65 64 20 4c 6f  e Generalized Lo
0090: 67 69 63 20 45 6e 67 69 6e 65 20 28 45 61 67 6c  gic Engine (Eagl
00a0: 65 29 0d 0a 23 20 45 61 67 6c 65 20 50 72 6f 63  e)..# Eagle Proc
00b0: 65 73 73 20 50 61 63 6b 61 67 65 20 46 69 6c 65  ess Package File
00c0: 0d 0a 23 0d 0a 23 20 43 6f 70 79 72 69 67 68 74  ..#..# Copyright
00d0: 20 28 63 29 20 32 30 30 37 2d 32 30 31 32 20 62   (c) 2007-2012 b
00e0: 79 20 4a 6f 65 20 4d 69 73 74 61 63 68 6b 69 6e  y Joe Mistachkin
00f0: 2e 20 20 41 6c 6c 20 72 69 67 68 74 73 20 72 65  .  All rights re
0100: 73 65 72 76 65 64 2e 0d 0a 23 0d 0a 23 20 53 65  served...#..# Se
0110: 65 20 74 68 65 20 66 69 6c 65 20 22 6c 69 63 65  e the file "lice
0120: 6e 73 65 2e 74 65 72 6d 73 22 20 66 6f 72 20 69  nse.terms" for i
0130: 6e 66 6f 72 6d 61 74 69 6f 6e 20 6f 6e 20 75 73  nformation on us
0140: 61 67 65 20 61 6e 64 20 72 65 64 69 73 74 72 69  age and redistri
0150: 62 75 74 69 6f 6e 20 6f 66 0d 0a 23 20 74 68 69  bution of..# thi
0160: 73 20 66 69 6c 65 2c 20 61 6e 64 20 66 6f 72 20  s file, and for 
0170: 61 20 44 49 53 43 4c 41 49 4d 45 52 20 4f 46 20  a DISCLAIMER OF 
0180: 41 4c 4c 20 57 41 52 52 41 4e 54 49 45 53 2e 0d  ALL WARRANTIES..
0190: 0a 23 0d 0a 23 20 52 43 53 3a 20 40 28 23 29 20  .#..# RCS: @(#) 
01a0: 24 49 64 3a 20 24 0d 0a 23 0d 0a 23 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 0d 0a 0d 0a 23 0d  ##########....#.
0200: 0a 23 20 4e 4f 54 45 3a 20 55 73 65 20 6f 75 72  .# NOTE: Use our
0210: 20 6f 77 6e 20 6e 61 6d 65 73 70 61 63 65 20 68   own namespace h
0220: 65 72 65 20 62 65 63 61 75 73 65 20 65 76 65 6e  ere because even
0230: 20 74 68 6f 75 67 68 20 77 65 20 64 6f 20 6e 6f   though we do no
0240: 74 20 64 69 72 65 63 74 6c 79 0d 0a 23 20 20 20  t directly..#   
0250: 20 20 20 20 73 75 70 70 6f 72 74 20 6e 61 6d 65      support name
0260: 73 70 61 63 65 73 20 6f 75 72 73 65 6c 76 65 73  spaces ourselves
0270: 2c 20 77 65 20 64 6f 20 6e 6f 74 20 77 61 6e 74  , we do not want
0280: 20 74 6f 20 70 6f 6c 6c 75 74 65 20 74 68 65 20   to pollute the 
0290: 67 6c 6f 62 61 6c 0d 0a 23 20 20 20 20 20 20 20  global..#       
02a0: 6e 61 6d 65 73 70 61 63 65 20 69 66 20 74 68 69  namespace if thi
02b0: 73 20 73 63 72 69 70 74 20 61 63 74 75 61 6c 6c  s script actuall
02c0: 79 20 65 6e 64 73 20 75 70 20 62 65 69 6e 67 20  y ends up being 
02d0: 65 76 61 6c 75 61 74 65 64 20 69 6e 20 54 63 6c  evaluated in Tcl
02e0: 2e 0d 0a 23 0d 0a 6e 61 6d 65 73 70 61 63 65 20  ...#..namespace 
02f0: 65 76 61 6c 20 3a 3a 45 61 67 6c 65 20 7b 0d 0a  eval ::Eagle {..
0300: 20 20 23 0d 0a 20 20 23 20 4e 4f 54 45 3a 20 54    #..  # NOTE: T
0310: 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 72 65  his procedure re
0320: 74 75 72 6e 73 20 61 20 6c 69 73 74 20 6f 66 20  turns a list of 
0330: 70 72 6f 63 65 73 73 20 49 64 73 20 6d 61 74 63  process Ids matc
0340: 68 69 6e 67 20 74 68 65 20 73 70 65 63 69 66 69  hing the specifi
0350: 65 64 0d 0a 20 20 23 20 20 20 20 20 20 20 6e 61  ed..  #       na
0360: 6d 65 20 2d 4f 52 2d 20 61 6c 6c 20 70 72 6f 63  me -OR- all proc
0370: 65 73 73 20 49 64 73 20 69 66 20 74 68 65 20 73  ess Ids if the s
0380: 70 65 63 69 66 69 65 64 20 6e 61 6d 65 20 69 73  pecified name is
0390: 20 61 6e 20 65 6d 70 74 79 20 73 74 72 69 6e 67   an empty string
03a0: 2e 0d 0a 20 20 23 0d 0a 20 20 70 72 6f 63 20 67  ...  #..  proc g
03b0: 65 74 50 72 6f 63 65 73 73 65 73 20 7b 20 6e 61  etProcesses { na
03c0: 6d 65 20 7d 20 7b 0d 0a 20 20 20 20 23 0d 0a 20  me } {..    #.. 
03d0: 20 20 20 23 20 4e 4f 54 45 3a 20 53 74 61 72 74     # NOTE: Start
03e0: 20 77 69 74 68 20 61 6e 20 65 6d 70 74 79 20 6c   with an empty l
03f0: 69 73 74 20 6f 66 20 70 72 6f 63 65 73 73 20 49  ist of process I
0400: 64 73 2e 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20  ds...    #..    
0410: 73 65 74 20 72 65 73 75 6c 74 20 5b 6c 69 73 74  set result [list
0420: 5d 0d 0a 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20  ]....    #..    
0430: 23 20 4e 4f 54 45 3a 20 41 72 65 20 77 65 20 61  # NOTE: Are we a
0440: 62 6c 65 20 74 6f 20 61 63 74 75 61 6c 6c 79 20  ble to actually 
0450: 71 75 65 72 79 20 74 68 65 20 61 63 74 69 76 65  query the active
0460: 20 70 72 6f 63 65 73 73 65 73 3f 0d 0a 20 20 20   processes?..   
0470: 20 23 0d 0a 20 20 20 20 69 66 20 7b 5b 6c 6c 65   #..    if {[lle
0480: 6e 67 74 68 20 5b 69 6e 66 6f 20 63 6f 6d 6d 61  ngth [info comma
0490: 6e 64 73 20 6f 62 6a 65 63 74 5d 5d 20 3e 20 30  nds object]] > 0
04a0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..      
04b0: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
04c0: 20 44 6f 65 73 20 74 68 65 20 63 61 6c 6c 65 72   Does the caller
04d0: 20 77 61 6e 74 20 70 72 6f 63 65 73 73 65 73 20   want processes 
04e0: 6d 61 74 63 68 69 6e 67 20 61 20 73 70 65 63 69  matching a speci
04f0: 66 69 63 20 6e 61 6d 65 0d 0a 20 20 20 20 20 20  fic name..      
0500: 23 20 20 20 20 20 20 20 6f 72 20 61 6c 6c 20 70  #       or all p
0510: 72 6f 63 65 73 73 65 73 20 6f 6e 20 74 68 65 20  rocesses on the 
0520: 6c 6f 63 61 6c 20 6d 61 63 68 69 6e 65 3f 0d 0a  local machine?..
0530: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
0540: 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74  f {[string lengt
0550: 68 20 24 6e 61 6d 65 5d 20 3e 20 30 7d 20 74 68  h $name] > 0} th
0560: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d  en {..        #.
0570: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
0580: 20 47 65 74 20 74 68 65 20 6d 61 6e 61 67 65 64   Get the managed
0590: 20 61 72 72 61 79 20 6f 66 20 70 72 6f 63 65 73   array of proces
05a0: 73 65 73 20 77 69 74 68 20 6d 61 74 63 68 69 6e  ses with matchin
05b0: 67 20 6e 61 6d 65 73 2e 0d 0a 20 20 20 20 20 20  g names...      
05c0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74    #..        set
05d0: 20 61 72 72 61 79 20 5b 6f 62 6a 65 63 74 20 69   array [object i
05e0: 6e 76 6f 6b 65 20 2d 61 6c 69 61 73 20 53 79 73  nvoke -alias Sys
05f0: 74 65 6d 2e 44 69 61 67 6e 6f 73 74 69 63 73 2e  tem.Diagnostics.
0600: 50 72 6f 63 65 73 73 20 5c 0d 0a 20 20 20 20 20  Process \..     
0610: 20 20 20 20 20 20 20 47 65 74 50 72 6f 63 65 73         GetProces
0620: 73 65 73 42 79 4e 61 6d 65 20 24 6e 61 6d 65 5d  sesByName $name]
0630: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b  ..      } else {
0640: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..   
0650: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 47 65 74       # NOTE: Get
0660: 20 74 68 65 20 6d 61 6e 61 67 65 64 20 61 72 72   the managed arr
0670: 61 79 20 6f 66 20 61 6c 6c 20 70 72 6f 63 65 73  ay of all proces
0680: 73 65 73 20 6f 6e 20 74 68 65 20 6c 6f 63 61 6c  ses on the local
0690: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #     
06a0: 20 20 6d 61 63 68 69 6e 65 2e 0d 0a 20 20 20 20    machine...    
06b0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73      #..        s
06c0: 65 74 20 61 72 72 61 79 20 5b 6f 62 6a 65 63 74  et array [object
06d0: 20 69 6e 76 6f 6b 65 20 2d 61 6c 69 61 73 20 53   invoke -alias S
06e0: 79 73 74 65 6d 2e 44 69 61 67 6e 6f 73 74 69 63  ystem.Diagnostic
06f0: 73 2e 50 72 6f 63 65 73 73 20 5c 0d 0a 20 20 20  s.Process \..   
0700: 20 20 20 20 20 20 20 20 20 47 65 74 50 72 6f 63           GetProc
0710: 65 73 73 65 73 5d 0d 0a 20 20 20 20 20 20 7d 0d  esses]..      }.
0720: 0a 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20  .    } else {.. 
0730: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      # 
0740: 4e 4f 54 45 3a 20 4e 6f 2c 20 72 65 74 75 72 6e  NOTE: No, return
0750: 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
0760: 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   #..      return
0770: 20 24 72 65 73 75 6c 74 0d 0a 20 20 20 20 7d 0d   $result..    }.
0780: 0a 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 23 20  ...    #..    # 
0790: 4e 4f 54 45 3a 20 46 6f 72 20 65 61 63 68 20 70  NOTE: For each p
07a0: 72 6f 63 65 73 73 20 69 6e 20 74 68 65 20 72 65  rocess in the re
07b0: 73 75 6c 74 69 6e 67 20 61 72 72 61 79 2c 20 67  sulting array, g
07c0: 72 61 62 20 74 68 65 20 49 64 2e 0d 0a 20 20 20  rab the Id...   
07d0: 20 23 0d 0a 20 20 20 20 66 6f 72 20 7b 73 65 74   #..    for {set
07e0: 20 69 6e 64 65 78 20 30 7d 20 7b 24 69 6e 64 65   index 0} {$inde
07f0: 78 20 3c 20 5b 24 61 72 72 61 79 20 4c 65 6e 67  x < [$array Leng
0800: 74 68 5d 7d 20 7b 69 6e 63 72 20 69 6e 64 65 78  th]} {incr index
0810: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  } {..      #..  
0820: 20 20 20 20 23 20 4e 4f 54 45 3a 20 47 72 61 62      # NOTE: Grab
0830: 20 74 68 65 20 4e 74 68 20 70 72 6f 63 65 73 73   the Nth process
0840: 20 61 72 72 61 79 20 65 6c 65 6d 65 6e 74 20 76   array element v
0850: 61 6c 75 65 20 75 73 69 6e 67 20 74 68 65 0d 0a  alue using the..
0860: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 63        #       ac
0870: 63 65 73 73 6f 72 20 6d 65 74 68 6f 64 2e 0d 0a  cessor method...
0880: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73        #..      s
0890: 65 74 20 70 72 6f 63 65 73 73 20 5b 24 61 72 72  et process [$arr
08a0: 61 79 20 2d 61 6c 69 61 73 20 47 65 74 56 61 6c  ay -alias GetVal
08b0: 75 65 20 24 69 6e 64 65 78 5d 0d 0a 0d 0a 20 20  ue $index]....  
08c0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
08d0: 4f 54 45 3a 20 41 64 64 20 74 68 65 20 49 64 20  OTE: Add the Id 
08e0: 6f 66 20 74 68 65 20 70 72 6f 63 65 73 73 20 74  of the process t
08f0: 6f 20 74 68 65 20 72 65 73 75 6c 74 20 6c 69 73  o the result lis
0900: 74 2e 20 20 54 68 69 73 0d 0a 20 20 20 20 20 20  t.  This..      
0910: 23 20 20 20 20 20 20 20 6d 61 79 20 66 61 69 6c  #       may fail
0920: 20 6f 6e 20 73 6f 6d 65 20 76 65 72 73 69 6f 6e   on some version
0930: 73 20 6f 66 20 4d 6f 6e 6f 2e 0d 0a 20 20 20 20  s of Mono...    
0940: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b    #..      if {[
0950: 63 61 74 63 68 20 7b 24 70 72 6f 63 65 73 73 20  catch {$process 
0960: 49 64 7d 20 69 64 5d 20 3d 3d 20 30 7d 20 74 68  Id} id] == 0} th
0970: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 6c 61  en {..        la
0980: 70 70 65 6e 64 20 72 65 73 75 6c 74 20 24 69 64  ppend result $id
0990: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....   
09a0: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
09b0: 54 45 3a 20 47 65 74 20 72 69 64 20 6f 66 20 74  TE: Get rid of t
09c0: 68 65 20 70 72 6f 63 65 73 73 20 6f 62 6a 65 63  he process objec
09d0: 74 2c 20 77 65 20 6e 6f 20 6c 6f 6e 67 65 72 20  t, we no longer 
09e0: 6e 65 65 64 20 69 74 2e 0d 0a 20 20 20 20 20 20  need it...      
09f0: 23 20 20 20 20 20 20 20 54 65 63 68 6e 69 63 61  #       Technica
0a00: 6c 6c 79 2c 20 69 74 20 69 73 20 6e 6f 74 20 61  lly, it is not a
0a10: 20 72 65 71 75 69 72 65 6d 65 6e 74 20 74 6f 20   requirement to 
0a20: 65 78 70 6c 69 63 69 74 6c 79 0d 0a 20 20 20 20  explicitly..    
0a30: 20 20 23 20 20 20 20 20 20 20 75 6e 73 65 74 20    #       unset 
0a40: 76 61 72 69 61 62 6c 65 73 20 74 68 61 74 20 63  variables that c
0a50: 6f 6e 74 61 69 6e 20 6f 62 6a 65 63 74 20 72 65  ontain object re
0a60: 66 65 72 65 6e 63 65 73 3b 0d 0a 20 20 20 20 20  ferences;..     
0a70: 20 23 20 20 20 20 20 20 20 68 6f 77 65 76 65 72   #       however
0a80: 2c 20 69 74 20 69 73 20 75 73 65 66 75 6c 20 69  , it is useful i
0a90: 6e 20 68 65 6c 70 69 6e 67 20 74 6f 20 64 6f 63  n helping to doc
0aa0: 75 6d 65 6e 74 20 74 68 65 0d 0a 20 20 20 20 20  ument the..     
0ab0: 20 23 20 20 20 20 20 20 20 63 6f 64 65 2e 0d 0a   #       code...
0ac0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 75        #..      u
0ad0: 6e 73 65 74 20 70 72 6f 63 65 73 73 3b 20 23 20  nset process; # 
0ae0: 64 69 73 70 6f 73 65 0d 0a 20 20 20 20 7d 0d 0a  dispose..    }..
0af0: 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 23 20 4e  ..    #..    # N
0b00: 4f 54 45 3a 20 47 65 74 20 72 69 64 20 6f 66 20  OTE: Get rid of 
0b10: 74 68 65 20 6d 61 6e 61 67 65 64 20 61 72 72 61  the managed arra
0b20: 79 20 6f 66 20 70 72 6f 63 65 73 73 65 73 2c 20  y of processes, 
0b30: 77 65 20 6e 6f 20 6c 6f 6e 67 65 72 0d 0a 20 20  we no longer..  
0b40: 20 20 23 20 20 20 20 20 20 20 6e 65 65 64 20 69    #       need i
0b50: 74 2e 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 75  t...    #..    u
0b60: 6e 73 65 74 20 61 72 72 61 79 3b 20 23 20 64 69  nset array; # di
0b70: 73 70 6f 73 65 0d 0a 0d 0a 20 20 20 20 23 0d 0a  spose....    #..
0b80: 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 74 75      # NOTE: Retu
0b90: 72 6e 20 74 68 65 20 6c 69 73 74 20 6f 66 20 70  rn the list of p
0ba0: 72 6f 63 65 73 73 20 49 64 73 2c 20 77 68 69 63  rocess Ids, whic
0bb0: 68 20 6d 61 79 20 62 65 20 65 6d 70 74 79 2e 0d  h may be empty..
0bc0: 0a 20 20 20 20 23 0d 0a 20 20 20 20 72 65 74 75  .    #..    retu
0bd0: 72 6e 20 24 72 65 73 75 6c 74 0d 0a 20 20 7d 0d  rn $result..  }.
0be0: 0a 0c 0d 0a 20 20 23 0d 0a 20 20 23 20 4e 4f 54  ....  #..  # NOT
0bf0: 45 3a 20 54 68 69 73 20 70 72 6f 63 65 64 75 72  E: This procedur
0c00: 65 20 77 61 69 74 73 20 66 6f 72 20 74 68 65 20  e waits for the 
0c10: 73 70 65 63 69 66 69 65 64 20 6e 75 6d 62 65 72  specified number
0c20: 20 6f 66 20 6d 69 6c 6c 69 73 65 63 6f 6e 64 73   of milliseconds
0c30: 20 66 6f 72 0d 0a 20 20 23 20 20 20 20 20 20 20   for..  #       
0c40: 70 72 6f 63 65 73 73 65 73 20 77 69 74 68 20 74  processes with t
0c50: 68 65 20 73 70 65 63 69 66 69 65 64 20 49 64 73  he specified Ids
0c60: 20 74 6f 20 65 78 69 74 20 28 6f 72 20 62 65 20   to exit (or be 
0c70: 74 65 72 6d 69 6e 61 74 65 64 29 2e 0d 0a 20 20  terminated)...  
0c80: 23 0d 0a 20 20 70 72 6f 63 20 77 61 69 74 46 6f  #..  proc waitFo
0c90: 72 50 72 6f 63 65 73 73 65 73 20 7b 20 69 64 73  rProcesses { ids
0ca0: 20 74 69 6d 65 6f 75 74 20 7b 63 6f 6c 6c 65 63   timeout {collec
0cb0: 74 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20  t true} } {..   
0cc0: 20 23 0d 0a 20 20 20 20 23 20 4e 4f 54 45 3a 20   #..    # NOTE: 
0cd0: 49 66 20 72 65 71 75 65 73 74 65 64 2c 20 72 75  If requested, ru
0ce0: 6e 20 74 68 65 20 67 61 72 62 61 67 65 20 63 6f  n the garbage co
0cf0: 6c 6c 65 63 74 6f 72 20 6e 6f 77 2e 20 20 54 68  llector now.  Th
0d00: 69 73 20 6d 61 79 20 62 65 0d 0a 20 20 20 20 23  is may be..    #
0d10: 20 20 20 20 20 20 20 6e 65 63 65 73 73 61 72 79         necessary
0d20: 20 74 6f 20 73 75 63 63 65 73 73 66 75 6c 6c 79   to successfully
0d30: 20 77 61 69 74 20 66 6f 72 20 70 72 6f 63 65 73   wait for proces
0d40: 73 65 73 20 74 68 61 74 20 61 72 65 20 62 65 69  ses that are bei
0d50: 6e 67 0d 0a 20 20 20 20 23 20 20 20 20 20 20 20  ng..    #       
0d60: 6b 65 70 74 20 61 6c 69 76 65 20 76 69 61 20 72  kept alive via r
0d70: 75 6e 74 69 6d 65 20 63 61 6c 6c 61 62 6c 65 20  untime callable 
0d80: 77 72 61 70 70 65 72 73 20 66 6f 72 20 6f 75 74  wrappers for out
0d90: 2d 6f 66 2d 70 72 6f 63 65 73 73 0d 0a 20 20 20  -of-process..   
0da0: 20 23 20 20 20 20 20 20 20 43 4f 4d 20 73 65 72   #       COM ser
0db0: 76 65 72 73 20 28 65 2e 67 2e 20 45 78 63 65 6c  vers (e.g. Excel
0dc0: 29 2e 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 69  )...    #..    i
0dd0: 66 20 7b 24 63 6f 6c 6c 65 63 74 7d 20 74 68 65  f {$collect} the
0de0: 6e 20 7b 0d 0a 20 20 20 20 20 20 64 65 62 75 67  n {..      debug
0df0: 20 63 6f 6c 6c 65 63 74 0d 0a 20 20 20 20 7d 0d   collect..    }.
0e00: 0a 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 23 20  ...    #..    # 
0e10: 4e 4f 54 45 3a 20 57 61 69 74 20 66 6f 72 20 65  NOTE: Wait for e
0e20: 61 63 68 20 70 72 6f 63 65 73 73 20 69 6e 20 74  ach process in t
0e30: 68 65 20 6c 69 73 74 20 74 6f 20 65 78 69 74 2e  he list to exit.
0e40: 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 66 6f 72  ..    #..    for
0e50: 65 61 63 68 20 69 64 20 24 69 64 73 20 7b 0d 0a  each id $ids {..
0e60: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
0e70: 20 4e 4f 54 45 3a 20 47 65 74 20 74 68 65 20 70   NOTE: Get the p
0e80: 72 6f 63 65 73 73 20 6f 62 6a 65 63 74 20 62 79  rocess object by
0e90: 20 69 74 73 20 49 64 2e 20 20 49 66 20 69 74 20   its Id.  If it 
0ea0: 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 2c 0d  does not exist,.
0eb0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74  .      #       t
0ec0: 68 69 73 20 77 69 6c 6c 20 72 61 69 73 65 20 61  his will raise a
0ed0: 6e 20 65 72 72 6f 72 2e 0d 0a 20 20 20 20 20 20  n error...      
0ee0: 23 0d 0a 20 20 20 20 20 20 73 65 74 20 72 65 73  #..      set res
0ef0: 75 6c 74 20 5b 63 61 74 63 68 20 7b 0d 0a 20 20  ult [catch {..  
0f00: 20 20 20 20 20 20 73 65 74 20 70 72 6f 63 65 73        set proces
0f10: 73 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65  s [object invoke
0f20: 20 2d 61 6c 69 61 73 20 53 79 73 74 65 6d 2e 44   -alias System.D
0f30: 69 61 67 6e 6f 73 74 69 63 73 2e 50 72 6f 63 65  iagnostics.Proce
0f40: 73 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  ss \..          
0f50: 20 20 47 65 74 50 72 6f 63 65 73 73 42 79 49 64    GetProcessById
0f60: 20 24 69 64 5d 0d 0a 20 20 20 20 20 20 7d 5d 0d   $id]..      }].
0f70: 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..    
0f80: 20 20 23 20 4e 4f 54 45 3a 20 57 65 72 65 20 77    # NOTE: Were w
0f90: 65 20 61 62 6c 65 20 74 6f 20 67 72 61 62 20 74  e able to grab t
0fa0: 68 65 20 70 72 6f 63 65 73 73 20 6f 62 6a 65 63  he process objec
0fb0: 74 3f 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  t?..      #..   
0fc0: 20 20 20 69 66 20 7b 24 72 65 73 75 6c 74 20 3d     if {$result =
0fd0: 3d 20 30 20 26 26 20 5b 69 6e 66 6f 20 65 78 69  = 0 && [info exi
0fe0: 73 74 73 20 70 72 6f 63 65 73 73 5d 7d 20 74 68  sts process]} th
0ff0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d  en {..        #.
1000: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
1010: 20 57 61 69 74 20 61 20 77 68 69 6c 65 20 66 6f   Wait a while fo
1020: 72 20 74 68 65 20 70 72 6f 63 65 73 73 20 74 6f  r the process to
1030: 20 65 78 69 74 2e 0d 0a 20 20 20 20 20 20 20 20   exit...        
1040: 23 0d 0a 20 20 20 20 20 20 20 20 24 70 72 6f 63  #..        $proc
1050: 65 73 73 20 57 61 69 74 46 6f 72 45 78 69 74 20  ess WaitForExit 
1060: 24 74 69 6d 65 6f 75 74 0d 0a 20 20 20 20 20 20  $timeout..      
1070: 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  }....      #..  
1080: 20 20 20 20 23 20 4e 4f 54 45 3a 20 47 65 74 20      # NOTE: Get 
1090: 72 69 64 20 6f 66 20 74 68 65 20 70 72 6f 63 65  rid of the proce
10a0: 73 73 20 28 69 66 20 77 65 20 61 63 74 75 61 6c  ss (if we actual
10b0: 6c 79 20 6f 62 74 61 69 6e 65 64 20 69 74 20 74  ly obtained it t
10c0: 6f 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  o..      #      
10d0: 20 62 65 67 69 6e 20 77 69 74 68 29 2e 0d 0a 20   begin with)... 
10e0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 75 6e       #..      un
10f0: 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20  set -nocomplain 
1100: 70 72 6f 63 65 73 73 3b 20 23 20 64 69 73 70 6f  process; # dispo
1110: 73 65 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d 0a  se..    }..  }..
1120: 0c 0d 0a 20 20 23 0d 0a 20 20 23 20 4e 4f 54 45  ...  #..  # NOTE
1130: 3a 20 50 72 6f 76 69 64 65 20 74 68 65 20 45 61  : Provide the Ea
1140: 67 6c 65 20 22 70 72 6f 63 65 73 73 22 20 70 61  gle "process" pa
1150: 63 6b 61 67 65 20 74 6f 20 74 68 65 20 69 6e 74  ckage to the int
1160: 65 72 70 72 65 74 65 72 2e 0d 0a 20 20 23 0d 0a  erpreter...  #..
1170: 20 20 70 61 63 6b 61 67 65 20 70 72 6f 76 69 64    package provid
1180: 65 20 45 61 67 6c 65 2e 50 72 6f 63 65 73 73 20  e Eagle.Process 
1190: 5c 0d 0a 20 20 20 20 5b 65 78 70 72 20 7b 5b 69  \..    [expr {[i
11a0: 73 45 61 67 6c 65 5d 20 3f 20 5b 69 6e 66 6f 20  sEagle] ? [info 
11b0: 65 6e 67 69 6e 65 20 50 61 74 63 68 4c 65 76 65  engine PatchLeve
11c0: 6c 5d 20 3a 20 22 31 2e 30 22 7d 5d 0d 0a 7d 0d  l] : "1.0"}]..}.
11d0: 0a 0c                                            ..